# Stub 恢复设计 1-4 > 日期:2026-04-12 > 目标:基于当前代码边界,为下一阶段 4 个 stub/半 stub 命令面给出可实施的设计方案。 > 排序原则:按建议实施顺序排序,不按问题严重性排序。 ## 设计原则 - 先做能独立闭环、收益明确、改动边界清晰的项。 - 大项拆成 `MVP` 和 `Phase 2+`,避免一次性掉进大范围恢复。 - 优先复用已有状态、传输层、日志与配置能力,不重造协议。 - 设计以当前仓库实际代码为准,不以旧文档的理想状态为准。 ## 1. `claude daemon status` / `claude daemon stop` ### 现状 - `start` 路径已有完整 supervisor + worker 生命周期: `src/daemon/main.ts` `src/daemon/workerRegistry.ts` - `status` / `stop` 目前只是占位输出: `src/daemon/main.ts` - `/remote-control-server` 有自己的命令内 UI 状态,但只维护当前进程内的 `daemonProcess`,并不适合作为跨进程 CLI 管理基础: `src/commands/remoteControlServer/remoteControlServer.tsx` ### 目标 - 让 `claude daemon status` 和 `claude daemon stop` 在另一个 CLI 进程中也能正确工作。 - 不依赖 TUI 内存态,不要求当前命令进程就是启动 daemon 的那个进程。 ### MVP 方案 - 新增 daemon 状态文件,例如: `~/.claude/daemon/remote-control.json` - `start` 时写入: - supervisor pid - cwd - startedAt - worker kinds - 最近状态 - `status`: - 读取状态文件 - 用现有进程探测能力验证 pid 是否存活 - 输出 `running / stopped / stale` - stale 时自动清理状态文件 - `stop`: - 读取 pid - 发送 `SIGTERM` - 等待退出 - 超时后 `SIGKILL` - 清理状态文件 ### 代码范围 - 新增 `src/daemon/state.ts` - 修改 `src/daemon/main.ts` - 轻量修改 `src/commands/remoteControlServer/remoteControlServer.tsx`,让 UI 尽量读取同一份状态文件 ### 验证 1. `claude daemon start` 2. 新开终端执行 `claude daemon status` 3. 执行 `claude daemon stop` 4. 再次执行 `claude daemon status`,确认返回 `stopped` 或清晰的 `stale cleaned` ### 风险 - Windows 信号模型和 Unix 不同,`stop` 需要超时兜底。 - 当前设计默认单 supervisor,不处理多实例并发。 ### 工作量判断 - 小 - 适合作为下一步的首选实现项 ## 2. `BG_SESSIONS` ### 现状 - fast-path 已接好: `src/entrypoints/cli.tsx` - session registry 已有真实实现: `src/utils/concurrentSessions.ts` - `exit` 在 bg session 内已会 `tmux detach-client`: `src/commands/exit/exit.tsx` - 但 CLI handler 仍全空: `src/cli/bg.ts` - task summary 仍然是 stub: `src/utils/taskSummary.ts` ### 目标 - 先把 `ps` / `logs` / `kill` 做成真正有用的 session 管理命令。 - 不在第一阶段就强行补完 `attach` / `--bg`。 ### Phase 2A:MVP - 实现 `ps` - 从 registry 读取 live sessions - 展示 pid、kind、sessionId、cwd、name、startedAt、bridgeSessionId - 如果有 activity/status,则一并展示 - 实现 `logs` - 支持按 `sessionId / pid / name` 查找 - 优先复用本地 transcript/log 读取能力 - 如果 registry 里存在 `logPath`,支持 tail 文件 - 实现 `kill` - 解析目标 session - 发退出信号 - 清理 stale registry ### Phase 2B:后续 - 实现 `attach` - 实现 `--bg` - 实现 `taskSummary` 的中途状态更新 ### 为什么要拆 - 现有 registry 记录了 `pid / sessionId / name / logPath` - 但没有可靠的 tmux attach target - 所以 `attach` 和 `--bg` 不是简单补 handler,而是需要补启动/附着元数据设计 ### 代码范围 - 修改 `src/cli/bg.ts` - 修改 `src/utils/concurrentSessions.ts` 以便后续 attach/--bg 扩展 - 修改 `src/utils/taskSummary.ts` - 复用: `src/utils/sessionStorage.ts` `src/utils/udsClient.ts` ### 验证 1. `ps` 能列出 live sessions 2. `logs ` 能输出对应日志 3. `kill ` 能结束目标 session ### 风险 - `attach` / `--bg` 第二阶段需要 tmux 元数据设计 - Windows 下 tmux 路径需要明确降级策略 ### 工作量判断 - `ps/logs/kill` 中等 - `attach/--bg` 明显更大,应分阶段 ## 3. `TEMPLATES` ### 现状 - 命令入口只有 fast-path: `src/entrypoints/cli.tsx` - handler 是空的: `src/cli/handlers/templateJobs.ts` - `markdownConfigLoader` 已把 `templates` 纳入配置目录: `src/utils/markdownConfigLoader.ts` - `query / stopHooks` 已预留 job classifier 链路: `src/query/stopHooks.ts` - `jobs/classifier.ts` 仍是 stub: `src/jobs/classifier.ts` ### 目标 - 把 `new / list / reply` 做成可用的模板任务系统。 - 第一阶段不碰复杂的自动分类与自动执行。 ### MVP 方案 - 模板来源: `.claude/templates/*.md` - 模板格式: 复用现有 markdown + frontmatter 解析,不另外设计 DSL - `list` - 列出所有模板 - 显示模板名、description、路径 - `new