feat: consolidate client upgrades (SSH/Git ops, desktop pet assistant, smart routing gateway) - #2
Open
Jason880902 wants to merge 15 commits into
Open
feat: consolidate client upgrades (SSH/Git ops, desktop pet assistant, smart routing gateway)#2Jason880902 wants to merge 15 commits into
Jason880902 wants to merge 15 commits into
Conversation
added 15 commits
August 16, 2026 11:11
Extend the in-session terminal bridge to spawn commands directly
(e.g. ssh user@host), parse ~/.ssh/config for a host list, and add a
sidebar entry ('运维') that opens a multi-session SSH ops panel with
quick-connect input and xterm rendering.
Add a sidebar entry ('Git') that opens a swimlane git graph panel. The
Electron main process gains an ipollowork:git:graph IPC that builds a
commit DAG from rev-list --parents plus ref -> commit mapping from
for-each-ref; the renderer draws an SVG lane layout with branch badges,
commit selection, and a detail pane.
Add a default-off LAN read-only preview server so phones and tablets on the local network can view the workbench via a pairing flow. The main process gains a lan-preview-server with 6-digit single-use pair codes, challenge-based anti-CSRF, in-memory session tokens, per-IP fail lockout and rate limiting, and a hard 403 on /api/execute (read-only). A new settings tab (Remote Preview) toggles the server, shows the LAN address and pair code with countdown, and lists paired devices.
SSH ops + Git graph + LAN preview remediation pass: - Git graph: detect and surface truncation (rev-list total-count probe, truncated banner, dashed stub edges for parents outside the window); fix lane layout so sibling branches fork to distinct lanes instead of collapsing onto the parent lane. - LAN preview: raise pair-code entropy (8-char uppercase alphabet, ~39.6 bits) and add a global fail lockout with exponential backoff on top of per-IP limits. - Module layout: move ops-panel/git-panel out of domains/session/terminal into domain-owned dirs with pure-logic modules (graph-layout.ts, ops-utils.ts) instead of dodging the single-file-directory audit rule. - Main process: extract ssh-ops.mjs and git-graph.mjs factories from main.mjs; add preview-core.mjs shared read-only renderer bridge with sanitized public summary for LAN/IM channels. - Tests: node:test suites for ssh config parsing, git DAG building, and preview-core redaction; bun:test suites for swimlane layout and SSH target normalization.
Add an IM notification section to the Remote Preview settings tab: paste a DingTalk/Feishu MCP Streamable-HTTP endpoint and push a redacted workbench summary to the group. The main process gains im-bot.mjs, a minimal MCP client that discovers a send tool by name (send_message / sendMessage / send_text / messages_send) and calls it with the sanitized snapshot from preview-core. No lan-preview session tokens are ever sent. Includes node:test coverage for tool discovery, argument mapping, and summary redaction.
…o feat/client-upgrades # Conflicts: # apps/app/src/react-app/domains/settings/shell/settings-page.tsx
…le perms - Package resources/lan-preview/index.html into the asar so remote preview works in production builds (not just dev) - Run git graph commands async (execFile) so large repos never block the Electron main process UI - Write router gateway routing.json with 0600 perms to protect plaintext apiKey from other local users
…ademic Port the 10 slide-maker presets and 2 academic themes into the bundled template catalog under the ipollowork.deck.* and ipollowork.academic.* namespaces. slide-maker branding is stripped from manifests, cover art, and attribution; covers are rendered to 960x540 PNG per the bundled template contract. All templates pass the shared theme contract test (design-tokens.css linkage, token coverage, unique PNG covers).
# Conflicts: # apps/app/src/i18n/locales/en.ts # apps/app/src/i18n/locales/zh.ts
… scan - update() now applies lastRunAt/lastRunStatus so runNow records the run - nextRunAfter parses once and scans at most 4 years to avoid UI stalls on never-matching expressions (e.g. "0 0 31 2 *")
…s, async fire with error status - parseFieldPart now rejects malformed tokens (e.g. 5abc, 1-2x) via strict regex - create/update reject invalid cron expressions in the main process - fire() is async, records 'error' status when onFire rejects, drops misleading log text
- 15 node:test cases covering cron parsing/matching/next-run and factory CRUD/tick dedup - register the suite in the desktop test script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概述
客户端功能升级收拢(相对于当前
main的净变更)。桌面助手(小珀)已通过 #1 合入 main,本 PR 聚焦:~/.config/ipollowork/router-gateway/routing.json并轮询本地网关状态。验证(已执行)
pnpm typecheck(apps/app)bun test graph-layout/ops-utils/settings-route/session-envpnpm test(apps/desktop)bun test src/templates.test.tsaudit-changes.mjsDeepSeek Harness review 结论
整体成熟度高于平均,评审发现 3 个高优项已在本分支修复:
resources/lan-preview/**已加入 electron-builderfilesspawnSync同步阻塞主进程 UI → 改为异步execFile+awaitwriteFile加mode: 0o600模板贡献说明
ipollowork.deck.{bauhaus,blueprint,consulting,dark-tech,editorial-report,glassmorphism,ink-wash,luxury-dark,midcentury,swiss}+ipollowork.academic.{marp-academic,quarto-clean}遗留中低优项(不阻断合并,建议后续跟进)
PetActivityInput类型在desktop-ipc.ts/whale-machine.ts重复定义且结构不一致(turnCompleted漂移)——建议以packages/types为 canonical 收敛parseRouting/serializeRouting与 whale-machine 状态机缺单测challengesMap 无 TTL、SSH 目标未防御-开头参数注入、IM 摘要未脱敏路径字段destroy()(模板切换泄漏)、pet-companion fetch 无超时说明
本次收敛更新
main最新(含上游 design templates / plugin library / marketplace 新功能,以及 macOS 未签名包 ad-hoc 签名修复、types/plugins 打包修复)/Applications/iPollo.app),含 SSH/Git/LAN/智能路由网关/桌宠/定时任务全部新功能