From c8d08d235bb5c5059afcd6cc863cc29118e58aa1 Mon Sep 17 00:00:00 2001 From: claude-code-best Date: Thu, 16 Apr 2026 20:59:29 +0800 Subject: [PATCH] Feat/integrate lint preview (#285) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 适配 zed acp 协议 * docs: 完善 acp 文档 * feat: integrate feature branches + daemon/job 命令层级化 + 跨平台后台引擎 Cherry-picked from origin/lint/preview (637c908), excluding lint-only changes. Co-Authored-By: Claude Opus 4.6 * fix: correct detectMimeFromBase64 to decode raw bytes from base64 Cherry-picked from origin/lint/preview (ee36954). Co-Authored-By: Claude Opus 4.6 * fix: daemon 子进程 spawn 跨平台修复 + CliLaunchSpec 集中化重构 Cherry-picked from origin/lint/preview (c5f52cd), excluding lint-only formatting changes. - 新建 src/utils/cliLaunch.ts: 集中化 CLI 子进程启动层 - 修复 --daemon-worker=kind 等号格式解析 - 修复 daemon/bg fast path 缺少 setShellIfWindows() - 修复 checkPathExists 用 existsSync 替代 execSync('dir') - 7 个 spawn 站点迁移到 CliLaunchSpec Co-Authored-By: Claude Opus 4.6 * fix: merge tsconfig.base.json into tsconfig.json with full compiler options The cherry-pick from 637c908 dropped jsx/strict/etc settings when removing tsconfig.base.json. This commit restores them in a single tsconfig.json. Co-Authored-By: Claude Opus 4.6 * fix: merge tsconfig.base.json into tsconfig.json with full compiler options The cherry-pick from 637c908 dropped jsx/strict/etc settings when removing tsconfig.base.json. This commit restores them in a single tsconfig.json. Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Claude Opus 4.6 --- .gitignore | 2 +- build.ts | 2 + docs/features/daemon-restructure-design.md | 318 +++++ docs/features/stub-recovery-design-1-4.md | 310 +++++ docs/task/task-001-daemon-status-stop.md | 77 ++ .../task/task-002-bg-sessions-ps-logs-kill.md | 80 ++ docs/task/task-003-templates-job-mvp.md | 87 ++ .../task/task-004-assistant-session-attach.md | 103 ++ docs/task/task-013-bg-engine-abstraction.md | 196 +++ .../task/task-014-daemon-command-hierarchy.md | 275 ++++ docs/task/task-015-job-command-hierarchy.md | 177 +++ docs/task/task-016-backward-compat-tests.md | 123 ++ docs/test-plans/openclaw-autonomy-baseline.md | 88 ++ .../@ant/claude-for-chrome-mcp/tsconfig.json | 2 +- .../@ant/computer-use-input/tsconfig.json | 2 +- .../@ant/computer-use-mcp/src/toolCalls.ts | 23 +- packages/@ant/computer-use-mcp/tsconfig.json | 2 +- packages/@ant/ink/tsconfig.json | 2 +- packages/agent-tools/tsconfig.json | 2 +- packages/audio-capture-napi/tsconfig.json | 2 +- .../PushNotificationTool.ts | 62 +- .../SendUserFileTool/SendUserFileTool.ts | 49 +- packages/color-diff-napi/tsconfig.json | 2 +- packages/image-processor-napi/tsconfig.json | 2 +- packages/mcp-client/tsconfig.json | 2 +- packages/modifiers-napi/tsconfig.json | 2 +- packages/remote-control-server/src/logger.ts | 10 + .../src/routes/v1/session-ingress.ts | 11 +- .../src/routes/v1/sessions.ts | 3 +- .../src/routes/web/control.ts | 5 +- .../src/routes/web/sessions.ts | 3 +- .../src/services/disconnect-monitor.ts | 5 +- .../src/services/work-dispatch.ts | 3 +- .../src/transport/event-bus.ts | 6 +- .../src/transport/sse-writer.ts | 3 +- .../src/transport/ws-handler.ts | 21 +- packages/remote-control-server/tsconfig.json | 2 +- packages/url-handler-napi/tsconfig.json | 2 +- scripts/dev.ts | 2 + src/__tests__/context.baseline.test.ts | 91 ++ src/assistant/AssistantSessionChooser.ts | 3 - src/assistant/AssistantSessionChooser.tsx | 54 + src/assistant/gate.ts | 17 +- src/assistant/index.ts | 73 +- src/assistant/sessionDiscovery.ts | 54 +- src/bridge/bridgeMain.ts | 17 +- src/cli/bg.ts | 344 ++++- src/cli/bg/__tests__/detached.test.ts | 15 + src/cli/bg/__tests__/engine.test.ts | 37 + src/cli/bg/__tests__/tail.test.ts | 8 + src/cli/bg/engine.ts | 49 + src/cli/bg/engines/detached.ts | 54 + src/cli/bg/engines/index.ts | 17 + src/cli/bg/engines/tmux.ts | 75 ++ src/cli/bg/tail.ts | 70 ++ src/cli/handlers/ant.ts | 227 +++- src/cli/handlers/templateJobs.ts | 161 ++- src/cli/print.ts | 456 ++++--- src/cli/rollback.ts | 72 +- src/cli/up.ts | 97 +- src/commands.ts | 13 + src/commands/__tests__/autonomy.test.ts | 246 ++++ .../__tests__/proactive.baseline.test.ts | 48 + src/commands/assistant/assistant.ts | 53 - src/commands/assistant/assistant.tsx | 175 +++ src/commands/assistant/gate.ts | 18 +- src/commands/autonomy.ts | 125 ++ src/commands/daemon/__tests__/daemon.test.ts | 24 + src/commands/daemon/daemon.tsx | 57 + src/commands/daemon/index.ts | 17 + src/commands/init.ts | 5 +- src/commands/job/__tests__/job.test.ts | 25 + src/commands/job/index.ts | 16 + src/commands/job/job.tsx | 34 + src/commands/lang/index.ts | 12 + src/commands/lang/lang.ts | 49 + .../remoteControlServer.tsx | 7 +- src/commands/send/send.ts | 13 + src/commands/torch.ts | 20 +- src/daemon/__tests__/daemonMain.test.ts | 61 + src/daemon/__tests__/state.test.ts | 185 +++ src/daemon/main.ts | 160 ++- src/daemon/state.ts | 157 +++ src/entrypoints/cli.tsx | 88 +- src/hooks/useAwaySummary.ts | 1 - src/hooks/useMasterMonitor.ts | 76 +- src/hooks/usePipeIpc.ts | 9 + src/hooks/usePipeMuteSync.ts | 141 +++ src/hooks/usePipePermissionForward.ts | 1 + src/hooks/usePipeRelay.ts | 5 +- src/hooks/useScheduledTasks.ts | 107 +- src/jobs/__tests__/classifier.test.ts | 140 +++ src/jobs/__tests__/state.test.ts | 91 ++ src/jobs/__tests__/templates.test.ts | 87 ++ src/jobs/classifier.ts | 70 +- src/jobs/state.ts | 102 ++ src/jobs/templates.ts | 86 ++ src/main.tsx | 6 +- .../__tests__/state.baseline.test.ts | 80 ++ src/proactive/useProactive.ts | 27 +- src/screens/REPL.tsx | 191 +-- src/services/analytics/growthbook.ts | 24 +- .../__tests__/queryModelOpenAI.isolated.ts | 487 +++++++ .../openai/__tests__/streamAdapter.test.ts | 22 +- src/services/awaySummary.ts | 10 +- .../langfuse/__tests__/langfuse.isolated.ts | 702 +++++++++++ .../InProcessTeammateTask.tsx | 112 +- src/tasks/InProcessTeammateTask/types.ts | 10 +- src/types/textInputTypes.ts | 13 + src/utils/__tests__/autonomyAuthority.test.ts | 241 ++++ src/utils/__tests__/autonomyFlows.test.ts | 1116 +++++++++++++++++ .../__tests__/autonomyPersistence.test.ts | 117 ++ src/utils/__tests__/autonomyRuns.test.ts | 421 +++++++ .../__tests__/cronScheduler.baseline.test.ts | 79 ++ .../__tests__/cronTasks.baseline.test.ts | 203 +++ src/utils/__tests__/language.test.ts | 82 ++ src/utils/__tests__/pipeMuteState.test.ts | 124 ++ src/utils/__tests__/taskSummary.test.ts | 93 ++ src/utils/autonomyAuthority.ts | 522 ++++++++ src/utils/autonomyFlows.ts | 1057 ++++++++++++++++ src/utils/autonomyPersistence.ts | 48 + src/utils/autonomyRuns.ts | 797 ++++++++++++ src/utils/cliLaunch.ts | 180 +++ src/utils/config.ts | 4 +- src/utils/handlePromptSubmit.ts | 271 ++-- src/utils/language.ts | 26 + src/utils/pipeMuteState.ts | 78 ++ src/utils/pipePermissionRelay.ts | 16 + src/utils/pipeTransport.ts | 6 +- src/utils/swarm/inProcessRunner.ts | 29 +- src/utils/swarm/spawnInProcess.ts | 13 + src/utils/taskSummary.ts | 81 +- src/utils/windowsPaths.ts | 19 +- tests/integration/cli-arguments.test.ts | 153 +-- tests/mocks/file-system.ts | 28 +- tsconfig.base.json | 15 - tsconfig.json | 18 +- 137 files changed, 13267 insertions(+), 837 deletions(-) create mode 100644 docs/features/daemon-restructure-design.md create mode 100644 docs/features/stub-recovery-design-1-4.md create mode 100644 docs/task/task-001-daemon-status-stop.md create mode 100644 docs/task/task-002-bg-sessions-ps-logs-kill.md create mode 100644 docs/task/task-003-templates-job-mvp.md create mode 100644 docs/task/task-004-assistant-session-attach.md create mode 100644 docs/task/task-013-bg-engine-abstraction.md create mode 100644 docs/task/task-014-daemon-command-hierarchy.md create mode 100644 docs/task/task-015-job-command-hierarchy.md create mode 100644 docs/task/task-016-backward-compat-tests.md create mode 100644 docs/test-plans/openclaw-autonomy-baseline.md create mode 100644 packages/remote-control-server/src/logger.ts create mode 100644 src/__tests__/context.baseline.test.ts delete mode 100644 src/assistant/AssistantSessionChooser.ts create mode 100644 src/assistant/AssistantSessionChooser.tsx create mode 100644 src/cli/bg/__tests__/detached.test.ts create mode 100644 src/cli/bg/__tests__/engine.test.ts create mode 100644 src/cli/bg/__tests__/tail.test.ts create mode 100644 src/cli/bg/engine.ts create mode 100644 src/cli/bg/engines/detached.ts create mode 100644 src/cli/bg/engines/index.ts create mode 100644 src/cli/bg/engines/tmux.ts create mode 100644 src/cli/bg/tail.ts create mode 100644 src/commands/__tests__/autonomy.test.ts create mode 100644 src/commands/__tests__/proactive.baseline.test.ts delete mode 100644 src/commands/assistant/assistant.ts create mode 100644 src/commands/assistant/assistant.tsx create mode 100644 src/commands/autonomy.ts create mode 100644 src/commands/daemon/__tests__/daemon.test.ts create mode 100644 src/commands/daemon/daemon.tsx create mode 100644 src/commands/daemon/index.ts create mode 100644 src/commands/job/__tests__/job.test.ts create mode 100644 src/commands/job/index.ts create mode 100644 src/commands/job/job.tsx create mode 100644 src/commands/lang/index.ts create mode 100644 src/commands/lang/lang.ts create mode 100644 src/daemon/__tests__/daemonMain.test.ts create mode 100644 src/daemon/__tests__/state.test.ts create mode 100644 src/daemon/state.ts create mode 100644 src/hooks/usePipeMuteSync.ts create mode 100644 src/jobs/__tests__/classifier.test.ts create mode 100644 src/jobs/__tests__/state.test.ts create mode 100644 src/jobs/__tests__/templates.test.ts create mode 100644 src/jobs/state.ts create mode 100644 src/jobs/templates.ts create mode 100644 src/proactive/__tests__/state.baseline.test.ts create mode 100644 src/services/api/openai/__tests__/queryModelOpenAI.isolated.ts create mode 100644 src/services/langfuse/__tests__/langfuse.isolated.ts create mode 100644 src/utils/__tests__/autonomyAuthority.test.ts create mode 100644 src/utils/__tests__/autonomyFlows.test.ts create mode 100644 src/utils/__tests__/autonomyPersistence.test.ts create mode 100644 src/utils/__tests__/autonomyRuns.test.ts create mode 100644 src/utils/__tests__/cronScheduler.baseline.test.ts create mode 100644 src/utils/__tests__/cronTasks.baseline.test.ts create mode 100644 src/utils/__tests__/language.test.ts create mode 100644 src/utils/__tests__/pipeMuteState.test.ts create mode 100644 src/utils/__tests__/taskSummary.test.ts create mode 100644 src/utils/autonomyAuthority.ts create mode 100644 src/utils/autonomyFlows.ts create mode 100644 src/utils/autonomyPersistence.ts create mode 100644 src/utils/autonomyRuns.ts create mode 100644 src/utils/cliLaunch.ts create mode 100644 src/utils/language.ts create mode 100644 src/utils/pipeMuteState.ts delete mode 100644 tsconfig.base.json diff --git a/.gitignore b/.gitignore index f03bc66b5..2a4224105 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,7 @@ src/utils/vendor/ .claude/ .codex/ .omx/ - +.docs/task/ # Binary / screenshot files (root only) /*.png *.bmp diff --git a/build.ts b/build.ts index 9fe50b3d7..0ba7076a7 100644 --- a/build.ts +++ b/build.ts @@ -42,6 +42,8 @@ const DEFAULT_BUILD_FEATURES = [ 'KAIROS', 'COORDINATOR_MODE', 'LAN_PIPES', + 'BG_SESSIONS', + 'TEMPLATES', // 'REVIEW_ARTIFACT', // API 请求无响应,需进一步排查 schema 兼容性 // P3: poor mode (disable extract_memories + prompt_suggestion) 'POOR', diff --git a/docs/features/daemon-restructure-design.md b/docs/features/daemon-restructure-design.md new file mode 100644 index 000000000..8d0d3abd8 --- /dev/null +++ b/docs/features/daemon-restructure-design.md @@ -0,0 +1,318 @@ +# Daemon 重构设计方案 + +> 分支: `feat/integrate-5-branches` +> 基于: `f41745cb` (= main `11bb3f62` 内容) +> 日期: 2026-04-13 + +## 一、问题概述 + +### 1.1 命令结构散乱 + +当前后台进程相关的命令分布在三个不同的位置,没有统一的命名空间: + +| 命令 | 注册位置 | 入口 | +|------|---------|------| +| `claude daemon start/status/stop` | `cli.tsx` 快速路径 L203 | `daemon/main.ts` | +| `claude ps` | `cli.tsx` 快速路径 L220 | `cli/bg.ts` | +| `claude logs ` | `cli.tsx` 快速路径 L232 | `cli/bg.ts` | +| `claude attach ` | `cli.tsx` 快速路径 L236 | `cli/bg.ts` | +| `claude kill ` | `cli.tsx` 快速路径 L238 | `cli/bg.ts` | +| `claude --bg` | `cli.tsx` 快速路径 L244 | `cli/bg.ts` | +| `claude new/list/reply` | `cli.tsx` 快速路径 L250 | `cli/handlers/templateJobs.ts` | +| `claude rollback` | `main.tsx` Commander.js L6525 | `cli/rollback.ts` | +| `claude up` | `main.tsx` Commander.js L6511 | `cli/up.ts` | + +**问题**: +- `ps/logs/attach/kill` 与 `daemon` 逻辑上都是后台进程管理,但互不关联 +- 这些命令都**只有 CLI 入口**,REPL 里输入 `/daemon` 或 `/ps` 不存在 +- `new/list/reply` 是模板任务系统的顶级命令,容易与其他命令冲突(特别是 `list`) + +### 1.2 Windows 不支持 + +`--bg` 和 `attach` 硬依赖 tmux: +- `bg.ts:handleBgFlag()` 第一步就检查 tmux,不可用直接报错退出 +- `bg.ts:attachHandler()` 用 `tmux attach-session`,无 tmux 替代方案 +- Windows (包括 VS Code 终端) 完全无法使用后台会话功能 + +### 1.3 无 REPL 入口 + +对比 `/mcp` 的双注册模式: +- **CLI**: `claude mcp serve/add/remove/list` (Commander.js, `main.tsx:5760`) +- **REPL**: `/mcp enable/disable/reconnect` (slash command, `commands/mcp/index.ts`) + +`daemon`/`bg`/`job` 系列只有 CLI 快速路径,REPL 中完全不可用。 + +## 二、目标 + +1. **层级化命令结构**: 参照 `/mcp` 模式,将后台管理收归 `/daemon`,模板任务收归 `/job` +2. **跨平台后台会话**: Windows / macOS / Linux 都能启动、附着、终止后台会话 +3. **双注册**: CLI (`claude daemon ...`) + REPL (`/daemon ...`) 同时可用 +4. **向后兼容**: 旧命令保留但输出 deprecation 提示 + +## 三、命令结构设计 + +### 3.1 `/daemon` — 后台进程管理 + +合并 daemon supervisor + bg sessions 为统一命名空间: + +``` +claude daemon ← CLI 入口 (cli.tsx 快速路径) +/daemon ← REPL 入口 (slash command, local-jsx) + +子命令: + status 综合状态面板 (daemon + 所有会话) + start [--dir ] 启动 daemon supervisor + stop 停止 daemon + bg [args...] 启动后台会话 + attach [target] 附着到后台会话 + logs [target] 查看会话日志 + kill [target] 终止会话 + (无参数) 等同于 status +``` + +**CLI 快速路径路由** (`cli.tsx`): +```typescript +// 新: 统一入口 +if (feature('DAEMON') && args[0] === 'daemon') { + const sub = args[1] || 'status' + switch (sub) { + case 'start': case 'stop': case 'status': + await daemonMain([sub, ...args.slice(2)]) + break + case 'bg': + await bg.handleBgStart(args.slice(2)) + break + case 'attach': case 'logs': case 'kill': + await bg[`${sub}Handler`](args[2]) + break + } +} + +// 向后兼容 (deprecated) +if (feature('BG_SESSIONS') && ['ps','logs','attach','kill'].includes(args[0])) { + console.warn(`[deprecated] Use: claude daemon ${args[0] === 'ps' ? 'status' : args[0]}`) + // ... delegate to daemon subcommand +} +``` + +**REPL 斜杠命令** (`commands/daemon/index.ts`): +```typescript +const daemon = { + type: 'local-jsx', + name: 'daemon', + description: 'Manage background sessions and daemon', + argumentHint: '[status|start|stop|bg|attach|logs|kill]', + isEnabled: () => feature('DAEMON') || feature('BG_SESSIONS'), + load: () => import('./daemon.js'), +} satisfies Command +``` + +### 3.2 `/job` — 模板任务管理 + +``` +claude job ← CLI 入口 +/job ← REPL 入口 + +子命令: + list 列出模板和活跃任务 + new