wezard 1.4.0 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CLAUDE.md +12 -2
  2. package/README.md +154 -58
  3. package/cli/wezard.sh +6 -3
  4. package/dist/cli/init.js +1 -1
  5. package/dist/cli/init.js.map +1 -1
  6. package/dist/daemon/approval.js +0 -6
  7. package/dist/daemon/approval.js.map +1 -1
  8. package/dist/daemon/cc-bridge.js +1 -22
  9. package/dist/daemon/cc-bridge.js.map +1 -1
  10. package/dist/daemon/cfg-sync.js +3 -6
  11. package/dist/daemon/cfg-sync.js.map +1 -1
  12. package/dist/daemon/chat-name.js +6 -2
  13. package/dist/daemon/chat-name.js.map +1 -1
  14. package/dist/daemon/config-api.js +0 -1
  15. package/dist/daemon/config-api.js.map +1 -1
  16. package/dist/daemon/detail.js +53 -9
  17. package/dist/daemon/detail.js.map +1 -1
  18. package/dist/daemon/graph.js +2 -6
  19. package/dist/daemon/graph.js.map +1 -1
  20. package/dist/daemon/inbound.js +4 -4
  21. package/dist/daemon/inbound.js.map +1 -1
  22. package/dist/daemon/index.js +119 -28
  23. package/dist/daemon/index.js.map +1 -1
  24. package/dist/daemon/jobs.js +17 -35
  25. package/dist/daemon/jobs.js.map +1 -1
  26. package/dist/daemon/mirror-bridge.js +262 -197
  27. package/dist/daemon/mirror-bridge.js.map +1 -1
  28. package/dist/daemon/mirror-store.js +2 -33
  29. package/dist/daemon/mirror-store.js.map +1 -1
  30. package/dist/daemon/quota.js +1 -1
  31. package/dist/daemon/quota.js.map +1 -1
  32. package/dist/daemon/session-cache.js +0 -1
  33. package/dist/daemon/session-cache.js.map +1 -1
  34. package/dist/daemon/session-scan.js +4 -22
  35. package/dist/daemon/session-scan.js.map +1 -1
  36. package/dist/daemon/sessions.js +2 -33
  37. package/dist/daemon/sessions.js.map +1 -1
  38. package/dist/daemon/spawn-tmux.js +2 -10
  39. package/dist/daemon/spawn-tmux.js.map +1 -1
  40. package/dist/daemon/subagent-tail.js +2 -2
  41. package/dist/daemon/subagent-tail.js.map +1 -1
  42. package/dist/daemon/tasks.js +1 -1
  43. package/dist/daemon/tasks.js.map +1 -1
  44. package/dist/daemon/wizard.js +9 -30
  45. package/dist/daemon/wizard.js.map +1 -1
  46. package/dist/mcp/server.js +32 -55
  47. package/dist/mcp/server.js.map +1 -1
  48. package/dist/shared/chat-http.js +25 -5
  49. package/dist/shared/chat-http.js.map +1 -1
  50. package/dist/shared/chat-render.js +16 -1
  51. package/dist/shared/chat-render.js.map +1 -1
  52. package/dist/shared/cli-backends.js +0 -11
  53. package/dist/shared/cli-backends.js.map +1 -1
  54. package/dist/shared/detail-render.js +5 -4
  55. package/dist/shared/detail-render.js.map +1 -1
  56. package/dist/shared/detail-store.js +12 -5
  57. package/dist/shared/detail-store.js.map +1 -1
  58. package/dist/shared/exec-path.js +21 -0
  59. package/dist/shared/exec-path.js.map +1 -0
  60. package/dist/shared/json-map-store.js +41 -0
  61. package/dist/shared/json-map-store.js.map +1 -0
  62. package/dist/shared/std.js +26 -0
  63. package/dist/shared/std.js.map +1 -0
  64. package/dist/shared/world.js +191 -0
  65. package/dist/shared/world.js.map +1 -0
  66. package/dist/svr/index.js +1 -1
  67. package/dist/svr/index.js.map +1 -1
  68. package/package.json +1 -1
  69. package/web/chat.css +267 -0
  70. package/web/chat.js +454 -6
package/CLAUDE.md CHANGED
@@ -59,13 +59,23 @@ Three processes, all coordinating via 127.0.0.1:17890 and `~/.wezard/`:
59
59
  - `peers.ts` is the read side of multi-agent awareness — "who else is working in this chat, and are they busy". The wizards of one chat are exactly the target keys sharing a base principal (`baseOfKey`): the untagged default plus every `#tag`. Pure parsing only — bounded transcript-tail reads (`tailTurns` / `lastAssistantText` / `summarizeTail`, shared with `session-scan.ts`) and pane classification (`paneIsBusy`). Identity (name / job / memory / lineage) lives in `wizard.ts`, not here. **Busy detection matches the TUI spinner footer** (`… (12m 31s · …)` on current versions, `esc to interrupt` on older ones) in the last 8 non-blank rows — transcript mtime is useless here, it goes quiet during long tool calls.
60
60
  - `wizard.ts` is the identity layer over those sessions: a target key plus a name (the chat's name; a tagged session reads `chat#tag`), a one-line job description, a long-term `memory` list, and a `parent` link that makes a session a CLONE of another. The registry is a write-through json (`~/.wezard/wizards.json`, `wrc.mirror.wizardsFile`) bound process-wide via `bindWizardStore` so the IM side can read it too; everything else in the module is a pure renderer. **Identity travels as a system prompt, never as a message**: `renderCharter` builds the wizard's charter (who it is, its workspace, its clones, its memory, the tool roster, the orchestration playbook, the etiquette of talking where a human is watching) and `spawn-tmux` presses it in with `--append-system-prompt "$(cat <file>)"` — so it survives `/clear`, costs no turn, and never shows in chat. Every spawn path (`/new`, a dead-pane respawn, a clone) pulls it from `MirrorBridge.setCharterProvider`, installed in `index.ts`. Backends with no such flag (codebuddy) spawn without a charter rather than with a rejected flag.
61
61
  - **Cloning is a context fork**: `MirrorBridge.cloneSession` spawns `--resume <parent sid> --fork-session`, so the child starts holding everything the parent had read while the parent is untouched — that is what makes "load the shared material once, then fan out" work. Two invariants: `--fork-session` is mandatory (without it a second pane appends to the parent's jsonl and two chats cross-wire), and the forked transcript only appears when that pane takes its FIRST message — so the clone's opening line is the trigger, and the attach waits for the fork; if it never appears the pane is killed rather than bound to the parent's sid.
62
+ - `jobs.ts` is the ledger for one fan-out: which wizards belong to a job, which of them were spawned *for* it (only those get recycled on `close_job` — a long-lived wizard pulled in to help is not), and the two bubbles the chat sees. It holds no control flow on purpose: that stays in the initiating wizard's context, so a reload costs one retry instead of a resurrected state machine. Closed rows older than 24h are dropped on the next write.
63
+ - `notices.ts` is the other half of awareness. A charter's roster is a spawn-time snapshot and only gets staler; a variation (a birth, a `stop_wizard`, a changed job description, a chat getting named) posts one line into each affected wizard's in-memory box, and the next text injected into that pane — from a human, a peer or a scheduled task — carries it along as a `<system-reminder>`. No extra turn, no bubble, no transcript. Delivery clears the box: a notice is a hint, the truth is always `wizard_roster`.
64
+ - `chat-name.ts` turns a chat's unreadable `chat:wr…` id into a writable address, and auto-fills one from the workspace basename when nobody named it. The fill happens wherever a name is about to be handed to a model — including `renderCharter`, since a system prompt outlives the process that read it. Fill-only; a human-chosen name is never overwritten.
65
+ - `tasks.ts` fires a scheduled prompt into a target wizard's session — exactly equivalent to someone saying it in the chat at that moment. Lives in the daemon, not in a session, so a CLI restart / `/clear` / session end can't carry it away; the spec is persisted to `config.jsonc`'s `schedules`.
62
66
  - `graph.ts` is the loop-graph runner: `nodes` = tagged sessions (own cli/model/cwd), `steps` = an ordered pipeline walked `rounds` times, each step injecting a prompt, waiting for that agent to go idle, then feeding its reply forward as `{{last}}` / `{{<tag>}}`. Stops early on the `until` sentinel. All effects go through injected deps backed by `mirror-bridge`, so a step is exactly what a human typing `#tag …` would do. Runs are **in-memory only** — a reload cancels them (panes survive).
63
67
 
64
68
  **Configuration** (`shared/config.ts`):
65
69
  - Loaded by every binary via `loadConfig()`. Resolution order: explicit arg → `$WEZARD_CONFIG` → `~/.wezard/config.jsonc` → `~/.wezard/config.json`.
66
70
  - Secrets (`bot.botId`, `bot.secret`) live in `~/.wezard/secrets.json` and are deep-merged on top of the main config — keeps secrets out of dotfile repos.
67
71
  - Schema is zod (`ConfigSchema`); shape mismatches throw with a path-pointed error.
68
- - `shared/config-writer.ts` is the only sanctioned way to mutate the on-disk jsonc — it preserves comments via `jsonc-parser` edits. `cli/init.ts` and `daemon/claim.ts` use it.
72
+ - `shared/config-writer.ts` is the only sanctioned way to mutate the on-disk jsonc — it preserves comments via `jsonc-parser` edits. `cli/init.ts`, `daemon/claim.ts` and `daemon/chat-name.ts` use it.
73
+
74
+ **Shared primitives** — reach for these before writing a local copy:
75
+ - `shared/json-map-store.ts` (`loadJsonMap`) is the write-through keyed-JSON file behind `sessions.ts`, `mirror-store.ts`, `wizard.ts` and `jobs.ts`. Tolerant at both ends by design: a corrupt file reads as empty, a failed write is swallowed — everything it holds is recovery state, so losing it must cost a re-attach, never a live session. `gc` runs just before each write (jobs expires closed rows that way).
76
+ - `shared/exec-path.ts` (`augmentedPath`) — PATH widening for every daemon-side spawn.
77
+ - `shared/std.ts` — `sleep`, `truncate`, `truncateWithCount` (`…(+N)`), `clipLine` (collapse whitespace, then cut).
78
+ - `shared/paths.ts` (`expandHome`, `sanitizeId`), `shared/session-label.ts` (`tagOfKey` / `baseOfKey` / `withTagHeader` — use these names, don't re-alias them locally).
69
79
 
70
80
  **Hook + sync**:
71
81
  - `hooks/hooks.json` is registered automatically by Claude Code when the plugin is installed (uses `${CLAUDE_PLUGIN_ROOT:-${CODEBUDDY_PLUGIN_ROOT}}` so the same file works under CodeBuddy's plugin loader if ever published there).
@@ -75,7 +85,7 @@ Three processes, all coordinating via 127.0.0.1:17890 and `~/.wezard/`:
75
85
 
76
86
  ## Important patterns / pitfalls
77
87
 
78
- - **PATH for spawn**: `cc-bridge.ts` and `mirror-bridge.ts` both `augmentedPath()` because launchd/systemd start the daemon with a stripped PATH that often lacks nvm/homebrew. If you spawn anything new from the daemon, do the same or it will ENOENT in production but work fine under `npm run dev:daemon`.
88
+ - **PATH for spawn**: anything the daemon spawns must go through `shared/exec-path.ts`'s `augmentedPath(process.env.PATH)` — launchd/systemd start it with a stripped PATH that often lacks nvm/homebrew, so a new spawn ENOENTs in production while working fine under `npm run dev:daemon`. Callers needing more dirs pass them as the second arg (`session-scan` adds `/usr/sbin` for `lsof`).
79
89
  - **launchd respawn**: `KeepAlive.SuccessfulExit=false`. `wezard reload` does `POST /shutdown` AND `launchctl kickstart`; just hitting `/shutdown` won't bounce the binary.
80
90
  - **Uninstall order**: `wezard uninstall` *before* `npm uninstall -g wezard`. Otherwise launchd repeatedly tries to relaunch a deleted binary. State at `~/.wezard/` is intentionally preserved.
81
91
  - **Card update has a 5s window**: `client.updateTemplateCard` only works within 5s of the click event — `installApprovalEventListener` does the rewrite synchronously inside the event handler.
package/README.md CHANGED
@@ -19,9 +19,22 @@
19
19
 
20
20
  ![demo](images/demo.png)
21
21
 
22
+ 三个进程,一条 WebSocket。daemon 常驻在你的电脑上,是唯一和企业微信说话的那个;hook 与 MCP 都只是它的本地 HTTP 客户端:
23
+
24
+ ```mermaid
25
+ flowchart LR
26
+ you["你 · 企业微信"] <-- WebSocket --> daemon["wezard daemon<br/>常驻本机 · 127.0.0.1:17890"]
27
+ daemon -- "tmux 粘贴消息" --> cli["tmux 里的 Agent CLI<br/>claude · claude-internal · codebuddy"]
28
+ cli -- "流式回复 / 工具调用" --> daemon
29
+ cli -- "每次工具调用先问一句" --> hook["PreToolUse hook"]
30
+ hook -- "阻塞等你点卡片" --> daemon
31
+ cli -- "主动汇报 / 读写文档" --> mcp["MCP server"]
32
+ mcp --> daemon
33
+ ```
34
+
22
35
  | 功能<img width="160"> | 说明 |
23
36
  | --- | --- |
24
- | 🛎 **远程审批** | Agent 要跑 `Bash` / `Edit`?审批卡片直推 IM,点 ✅/❌/⏱(放行 N 分钟)。 |
37
+ | 🛎 **远程审批** | Agent 要跑 `Bash` / `Edit`?审批卡片直推 IM,点 `✅` 放行一次、`⏱` 开一段自动放行窗口、`✅总是` 写回规则、`❌` 拒绝。危险操作(`rm` / 强推 / `DROP` / 敏感路径)只给 `❌` 与 `✅ 确认执行`,逐次单独确认。 |
25
38
  | 📋 **计划审批** | Agent 在 plan mode 结束(`ExitPlanMode`)时,把计划摘要 + 审批卡推到 IM:点 ✅同意 退出 plan mode 开始执行,或 ✏️继续改 留在 plan mode 继续完善。`AskUserQuestion` 多选题也镜像为投票卡。 |
26
39
  | 🪞 **会话镜像** | 你电脑上跑的 Agent 流式打字、tool_use、思考过程,实时同步到企业微信;IM 里发消息原样落进 CLI 输入框。 |
27
40
  | 🖼 **图片直贴** | 企业微信发图,自动走 macOS 剪贴板 + tmux 粘贴,Agent 当贴图处理(不走 Read,不耗 token)。 |
@@ -29,6 +42,7 @@
29
42
  | 📡 **MCP 主动推送** | Agent 通过 `wecom__send_markdown` / `wecom__send_card` / `wecom__ask_user` 主动汇报或问询。 |
30
43
  | 📄 **文档读写** | Agent 通过 `wecom_doc_list_tools` / `wecom_doc_call` 直接调企业微信智能机器人的 doc / smartsheet / smartpage MCP,新建在线文档、写 Markdown、读链接、操作智能表格——全程在内网,不需要 corp access_token。 |
31
44
  | 🗂 **多会话发现/切换** | Agent 通过 `list_claude_sessions` / `switch_claude_session` / `new_claude_session` 列出本机 tmux 内所有在跑的会话(带摘要 + 稳定动物 emoji 标签)、切换 IM 镜像、或在指定路径新开会话。审批卡标题也带同一枚 emoji,多会话兜底到同一 IM 时一眼区分。 |
45
+ | 🧙 **多 wizard 协同** | 一个聊天里住着多个有名字、有职责、有记忆的 wizard(`#tag` 寻址)。`spawn_clone` fork 上下文出分身,`open_job` / `wait_peer({tags})` / `close_job` 把一次 fan-out 收成群里两条气泡,干完整批回收。 |
32
46
  | 🔄 **重启即续** | 电脑重启 / tmux 全没了 / daemon 崩了都不掉档:IM ↔ 会话绑定持久化在 `~/.wezard/mirror-attachments.json`,下一条 IM 消息自动 `claude --resume` 拉起新 tmux pane,历史完整继承;`tmux attach -t wezard` 接管即可。 |
33
47
 
34
48
  <details>
@@ -39,7 +53,8 @@
39
53
  - [体验是什么样](#体验是什么样)
40
54
  - [文档 / 智能表格 / 智能文档](#文档--智能表格--智能文档)
41
55
  - [定时任务 / 跨群通知](#定时任务--跨群通知)
42
- - [一个聊天里跑多个会话(`#tag` 路由)](#一个聊天里跑多个会话tag-路由)
56
+ - [一个聊天里住着多个 wizard(`#tag` 路由)](#一个聊天里住着多个-wizardtag-路由)
57
+ - [编排:读完材料才知道要分几路](#编排读完材料才知道要分几路)
43
58
  - [跨聊天:给聊天命名](#跨聊天给聊天命名)
44
59
  - [多 CLI 后端](#多-cli-后端claude--claude-internal--codebuddy)
45
60
  - [Prompt-cache 保活(省钱心跳)](#prompt-cache-保活省钱心跳)
@@ -62,7 +77,20 @@ npm install -g wezard
62
77
  wezard init
63
78
  ```
64
79
 
65
- `init` 会交互式问你 4 个问题,把配置落到 `~/.wezard/`:
80
+ ```mermaid
81
+ flowchart TD
82
+ install["npm i -g wezard<br/>wezard init"] --> ask["交互问 4 个问题"]
83
+ ask --> creds["botId / secret<br/>→ ~/.wezard/secrets.json"]
84
+ ask --> rest["选哪些 CLI · wrc 模式 · 是否开审批<br/>→ ~/.wezard/config.jsonc"]
85
+ creds --> auto
86
+ rest --> auto["自动: 编译 → 注入 hook/MCP → 装 svr 详情中继<br/>→ 装常驻 daemon → 等 WS 鉴权"]
87
+ auto --> claim["在企业微信里发:<br/>将本对话设置为默认会话"]
88
+ claim --> bound["写入 defaultChat + allowFrom<br/>10 分钟窗口, 用完即关"]
89
+ bound --> first["再发任意一句话<br/>= 绑定信号, 也是第一句 prompt"]
90
+ first --> live["daemon 拉起 tmux 窗口 + Agent 会话<br/>回复逐字流式推回 IM"]
91
+ ```
92
+
93
+ `init` 问的 4 个问题与落点:
66
94
 
67
95
  | 问什么 | 落到哪 |
68
96
  | --- | --- |
@@ -71,22 +99,16 @@ wezard init
71
99
  | wrc 模式(`mirror` 推荐 / `headless`) | `~/.wezard/config.jsonc` |
72
100
  | 是否开启 PreToolUse 远程审批 | `~/.wezard/config.jsonc` |
73
101
 
74
- 然后自动:编译 → 注入 hook/MCP(claude 家族装 wezard 插件,codebuddy 直接写 settings.json)→ 装 svr 详情中继 → 装常驻 daemon(macOS launchd / Linux systemd --user)→ 等 WebSocket 鉴权。已装过的凭证默认复用,还会把所选 CLI 的 `permissions` 一次性导入审批规则。
75
-
76
- **最后一步:绑定默认会话。** CLI 提示后,**在企业微信里**给机器人发:
77
-
78
- ```
79
- 将本对话设置为默认会话
80
- ```
102
+ 已装过的凭证默认复用,所选 CLI 的 `permissions` 会一次性导入审批规则(`allow` → 免审直行,`ask` → 强制发卡,`deny` → 直接拒绝)。
81
103
 
82
- 这是**唯一**绕过白名单的入口,10 分钟窗口,消费完立刻关。后续所有消息都按白名单鉴权。
104
+ **最后一步:绑定默认会话。** CLI 提示后,**在企业微信里**给机器人发那句认领口令。它带 10 分钟窗口,消费完立刻关;此后所有消息都按白名单鉴权。全新安装(`allowFrom` 还是空的)时,第一个**单聊**发消息的人会被直接提升为超级管理员,不需要口令——群聊不走这条路,免得机器人被拉进群就被人接管。
83
105
 
84
106
  **绑定之后,按这个顺序把会话跑起来**(mirror 模式):
85
107
 
86
- 1. **发首条消息**:在企微里随便说句话(比如 `hi`)。首条消息既是绑定信号也是第一句 prompt——daemon 自动拉起 tmux 窗口 + Agent 会话,回复逐字流式推回 IM。回家打开终端 `tmux attach -t wezard` 就能接管,对话一字不少。
87
- 2. **切到你的项目**:新会话默认落在 `~/.wezard/workspace`,直接对 AI 说「切到 /path/to/proj」——它调 `set_workspace` MCP 一步换目录重开会话,收到 📂 项目回执即切换完成,`/pwd` 可随时确认。
88
- 3. **第一次审批**:Agent 要跑 `Bash` / `Edit` 时,IM 会弹按钮卡,点 ✅/❌/⏱(放行 N 分钟)即可;点卡片里的链接看完整 input / result / git diff。
89
- 4. **`/h` 拉出命令表**:`/new` 开新会话、`/clear` 清上下文、`/sessions` 切换、`#tag` 并行多会话、`/usage` `/cost` 查额度……全部命令一屏可查。
108
+ 1. **发首条消息**:在企微里随便说句话(比如 `hi`)。它既是绑定信号也是第一句 prompt——daemon 自动拉起 tmux 窗口 + Agent 会话,回复逐字流式推回 IM。
109
+ 2. **切到你的项目**:新会话默认落在 `~/.wezard/workspace`,直接对 AI 说「切到 /path/to/proj」——它调 `set_workspace` MCP 一步换目录重开会话,收到 📂 项目回执即切换完成,`/pwd` 随时确认。
110
+ 3. **第一次审批**:Agent 要跑 `Bash` / `Edit` 时 IM 弹按钮卡,点 `❌` / `⏱10h自动过` / `✅总是` / `✅`;点卡片里的链接看完整 input / result / git diff。
111
+ 4. **`/h` 拉出命令表**:`/new` 开新会话、`/clear` 清上下文、`/sessions` 切换、`#tag` 并行多会话、`/usage` `/cost` 查额度——全部命令一屏可查。
90
112
 
91
113
  ---
92
114
 
@@ -94,29 +116,37 @@ wezard init
94
116
 
95
117
  IM 来消息 → tmux 粘进活的 TUI,CLI 里像你自己敲进去的一样;Agent 的回应、调用了哪些工具、思考过程都逐字流式推回 IM。一对一绑定 IM 聊天 ↔ tmux 窗口,原地累计上下文——真·远程结对编程。
96
118
 
97
- IM 里发 `/new` 直接开新 tmux 窗口 + 新 Agent 会话;`/clear` 清当前上下文;带图消息自动注入剪贴板。所有 IM 聊天共享一个 tmux session(默认名 `wezard`),每个聊天一个独立 window,**关 tmux / daemon 崩了 / 整机重启都能自愈**:IM↔会话绑定 write-through 落到 `~/.wezard/mirror-attachments.json`,daemon 起来就 eager restore;重启后 pane 全死,下一条 IM 消息触发 `claude --resume <sid>` 拉起新 pane,`--resume` fork 出的新 jsonl 由 watcher 从 EOF 无缝接管(不会把整段历史再推一遍到 IM)。中途在别处 `/clear` 把 jsonl rotate 掉也不丢绑定,会自愈到同项目目录下最新的 jsonl。
119
+ IM 里发 `/new` 开新 tmux 窗口 + 新 Agent 会话,`/clear` 清当前上下文,带图消息自动注入剪贴板。所有 IM 聊天共享一个 tmux session(默认名 `wezard`),每个聊天一个独立 window。
120
+
121
+ **关 tmux / daemon 崩了 / 整机重启都能自愈**:
98
122
 
99
- > 💡 **mirror 不要求你必须先在 CLI 里开 tmux**:在企业微信里直接发 `/new` 就能从零起一个新 tmux 窗口 + Agent 会话;甚至首次发任意消息都会自动 spawn + 绑定(首条消息既是绑定信号也是第一句 prompt)。回家打开终端 `tmux attach -t wezard` 接管即可。
123
+ - IM ↔ 会话绑定 write-through 落到 `~/.wezard/mirror-attachments.json`,daemon 起来就 eager restore;
124
+ - 重启后 pane 全死,下一条 IM 消息触发 `claude --resume <sid>` 拉起新 pane;
125
+ - `--resume` fork 出的新 jsonl 由 watcher 从 EOF 无缝接管,不会把整段历史再推一遍到 IM;
126
+ - 中途在别处 `/clear` 把 jsonl rotate 掉也不丢绑定,会自愈到同项目目录下最新的 jsonl。
127
+
128
+ > 💡 **不必先在 CLI 里开 tmux**:首次发任意消息就会自动 spawn + 绑定。回家 `tmux attach -t wezard` 接管即可。
100
129
 
101
130
  ---
102
131
 
103
132
  ## 体验是什么样
104
133
 
105
- **审批场景**:你正在地铁上,电脑上的 Agent 想 `rm -rf node_modules` 重装。企业微信叮一声弹卡片:
134
+ **审批场景**:你在地铁上,电脑上的 Agent 想 `rm -rf node_modules` 重装。企业微信叮一声弹卡片:
106
135
 
107
136
  > 🛎 授权请求: Bash
108
137
  > `rm -rf node_modules`
109
- > [✅ 允许] [❌ 拒绝] [⏱ 5 分钟内自动允许]
138
+ > ⚠️ 命中危险名单:删除目录 rm
139
+ > [❌] [✅ 确认执行]
110
140
 
111
- 你点 ✅,卡片立刻刷新成 `✅ Bash · 已允许`,电脑上的 Agent 解除阻塞继续跑。
141
+ 你点 ✅,卡片立刻刷新成 `✅ 已通过`,电脑上的 Agent 解除阻塞继续跑。
112
142
 
113
143
  **镜像场景**:你 tmux 里开着 Agent 在写代码。出门后给机器人发:
114
144
 
115
145
  > 把刚才那个函数改成异步的
116
146
 
117
- 这条消息自动粘进 CLI 输入框 + 回车提交。Agent 的回应、调用了哪些工具、改了哪些文件,逐字流式推回你 IM。回家打开终端,对话一字不少都在那里。
147
+ 这条消息自动粘进 CLI 输入框 + 回车提交。Agent 的回应、调了哪些工具、改了哪些文件,逐字流式推回 IM。回家打开终端,对话一字不少都在那里。
118
148
 
119
- **文档场景**:你给 Agent 说:"周报给我整理成一篇企业微信文档"。Agent 自己调 `wecom_doc_list_tools` 看可用方法,再调 `wecom_doc_call` 走 `create_doc` 新建文档、`edit_doc_content` 写入 Markdown,最后把链接贴回会话——全程不离开会话,文档归属到你的 userid,每日 20 篇限额按 userid 计。
149
+ **文档场景**:你说「周报给我整理成一篇企业微信文档」。Agent 自己调 `wecom_doc_list_tools` 看可用方法,再调 `wecom_doc_call` 新建文档、写入 Markdown,最后把链接贴回会话——全程不离开会话,文档归属到你的 userid,每日 20 篇限额按 userid 计。
120
150
 
121
151
  ---
122
152
 
@@ -130,7 +160,7 @@ IM 里发 `/new` 直接开新 tmux 窗口 + 新 Agent 会话;`/clear` 清当
130
160
 
131
161
  ## 定时任务 / 跨群通知
132
162
 
133
- **定时任务**:到点把一句话说给某个 wizard 听——等价于那一刻有人在群里对它说了这句话,所以它**真的会去干活**,产出照常落在群里。守护进程级,跨 CLI 重启、会话结束仍在;目标 pane 死了会被自动拉起来,不要求那台机器上一直开着窗口。定时表持久化到 `~/.wezard/config.jsonc` 的 `schedules`,`wezard reload` 后自动恢复。
163
+ **定时任务**:到点把一句话说给某个 wizard 听——等价于那一刻有人在群里对它说了这句话,所以它**真的会去干活**,产出照常落在群里。它活在守护进程里,跨 CLI 重启、`/clear`、会话结束都还在;目标 pane 死了会被自动拉起来。定时表落在 `~/.wezard/config.jsonc` 的 `schedules`,`wezard reload` 后自动恢复。
134
164
 
135
165
  `when` 用人话说就行,不用翻译成 cron:
136
166
 
@@ -142,13 +172,13 @@ IM 里发 `/new` 直接开新 tmux 窗口 + 新 Agent 会话;`/clear` 清当
142
172
 
143
173
  认得的说法:`每天 8:00`、`每个工作日晚上9:30`、`每周三下午3点`、`每隔两小时`、`每 30 分钟`、`20 分钟后`、`明早 9 点`。
144
174
 
145
- **跨群通知**:`notify(to?, markdown)` 把一段 markdown 贴进指定聊天**给人看**——和 `send_peer` 正好相反,它不驱动任何 agent、不触发一轮对话。`to` 写聊天名(见[给聊天命名](#跨聊天给聊天命名)),省略就是自己所在的群。跨群时气泡头自动写成 `源聊天#你` 并挂上 chat 详情页链接,那边的人一眼知道是谁从哪说过来的。
175
+ **跨群通知**:`notify(to?, markdown)` 把一段 markdown 贴进指定聊天**给人看**——和 `send_peer` 正好相反,它不驱动任何 agent、不触发一轮对话。`to` 写聊天名(见[给聊天命名](#跨聊天给聊天命名)),省略就是自己所在的群;跨群时气泡头自动写成 `源聊天#你` 并挂上详情页链接。
146
176
 
147
- 典型用法:一个长活在 `build` 群跑完,`notify(["ops"], "🔴 回归挂了 3 例…")` 把结论送到该看的人那里;或者 `schedule_task` 到点跑完,由那个 wizard 自己 `notify` 播报。
177
+ 典型用法:一个长活在 `build` 群跑完,`notify(["ops"], "🔴 回归挂了 3 例…")` 把结论送到该看的人那里。
148
178
 
149
179
  ## 一个聊天里住着多个 wizard(`#tag` 路由)
150
180
 
151
- 一个绑定了聊天的会话,在 wezard 里叫一个 **wizard**:它有自己的终端、工作区、名字和职责,知道群里还有谁,也叫得动它们。同一个 WeCom 聊天里可以同时住着多个 wizard,靠消息里的 `#tag` 路由。不带 tag 就是默认那个,与旧行为一致。
181
+ 一个绑定了聊天的会话,在 wezard 里叫一个 **wizard**:有自己的终端、工作区、名字和职责,知道群里还有谁,也叫得动它们。同一个 WeCom 聊天里可以住着多个 wizard,靠消息里的 `#tag` 路由;不带 tag 就是默认那个,与旧行为一致。
152
182
 
153
183
  ![多会话](images/multi-session.png)
154
184
 
@@ -164,6 +194,20 @@ IM 里发 `/new` 直接开新 tmux 窗口 + 新 Agent 会话;`/clear` 清当
164
194
 
165
195
  只要消息文本里任意位置带 `#tag`(空白/句首/句尾分隔),就路由到那个 wizard:
166
196
 
197
+ ```mermaid
198
+ flowchart LR
199
+ msg["IM 里的一条消息"] --> scan["扫第一个 #tag<br/>空白或首尾分隔"]
200
+ scan -- "无 tag" --> dflt["默认 wizard<br/>回复无前缀"]
201
+ scan -- "#docs" --> docs["#docs<br/>回复带 🦊 #docs"]
202
+ scan -- "#api" --> api["#api<br/>回复带 🐬 #api"]
203
+ docs --> pane1["自己的 tmux 窗口<br/>自己的 sessionId / jsonl"]
204
+ api --> pane2["自己的 tmux 窗口<br/>自己的 sessionId / jsonl"]
205
+ dflt --> pane0["自己的 tmux 窗口<br/>自己的 sessionId / jsonl"]
206
+ scan -. "第二个及之后的 #tag<br/>原样透传给模型" .-> hint["尾部挂一条不可见提示:<br/>#b 是活着的同类, 去叫它"]
207
+ ```
208
+
209
+ 三者共用聊天绑定的那一个 cwd,其余各自独立:
210
+
167
211
  ```
168
212
  #docs 帮我把 README 的目录补一下
169
213
  帮我看下这个报错 #api
@@ -172,7 +216,7 @@ IM 里发 `/new` 直接开新 tmux 窗口 + 新 Agent 会话;`/clear` 清当
172
216
  /clear #docs → 只清 docs 的上下文
173
217
  ```
174
218
 
175
- 不带 tag 的消息始终落到默认那个。消息里**第二个**及之后的 `#tag` 不参与路由,但守护进程会在消息尾部挂一条不可见的提示,告诉收信的 wizard「`#b` 是一个活着的同类,去叫它,别替它回答」。
219
+ 不带 tag 的消息始终落到默认那个。
176
220
 
177
221
  **回复标识**
178
222
 
@@ -190,7 +234,7 @@ IM 里发 `/new` 直接开新 tmux 窗口 + 新 Agent 会话;`/clear` 清当
190
234
 
191
235
  **身份、记忆与分身**
192
236
 
193
- 每个 wizard 的身份(名字、工作区、职责、记忆、家谱)在它启动时以**系统提示**的形式压进进程——不占一轮对话、群里看不见、`/clear` 也抹不掉。所以它一睁眼就知道自己是谁、群里还有谁、自己能做什么:
237
+ 每个 wizard 的身份(名字、工作区、职责、记忆、家谱)在启动时以**系统提示**压进进程——不占一轮对话、群里看不见、`/clear` 也抹不掉。它一睁眼就知道自己是谁、群里还有谁、自己能做什么:
194
238
 
195
239
  ```
196
240
  你叫什么 / 你负责什么 → 它调 wizard_whoami
@@ -201,25 +245,64 @@ IM 里发 `/new` 直接开新 tmux 窗口 + 新 Agent 会话;`/clear` 清当
201
245
  上下文快满了 → 它自己 wizard_handoff_self:写简报、原地重开、把简报贴回去
202
246
  ```
203
247
 
204
- **分身(clone)默认继承上下文**:`spawn_clone({inherit:true})` 用 `--resume <父> --fork-session` 起 pane,CLI 把父亲的 transcript 复制一份再继续写——分身开局就带着父亲读过的材料,父亲毫发无损。于是「先把公共文档读进一个基座,再从它分出 N 个干活的」成立:材料只读一遍,却进了 N 份上下文。要白纸一张就传 `inherit:false`(那时才能顺便换工作区)。分身自己也能再分身,层级不限。
248
+ **分身(clone)默认继承上下文**:`spawn_clone({inherit:true})` 用 `--resume <父> --fork-session` 起 pane,CLI 把父亲的 transcript 复制一份再往下写——分身开局就带着父亲读过的材料,父亲毫发无损。于是「先把公共文档读进一个基座,再分出 N 个干活的」成立:材料只读一遍,却进了 N 份上下文。要白纸一张传 `inherit:false`(那时才能顺便换工作区)。分身自己也能再分身,层级不限;名下同时活着的分身有上限(`wrc.mirror.cloneMax`,默认 8)——一次跑飞的递归编排足以把 fd 吃光。
249
+
250
+ **模型是 wizard 的属性**,不是 spawn 那一瞬的开关:`/new [cli] [model]`、`new_claude_session({model})`、`spawn_clone({model})`、`run_agent_graph` 的节点都能挑,挑了就写进绑定记录。pane 死了自愈重生仍在那个模型上,名册每一行也看得见谁跑在什么模型上——要判断的给 opus、跑腿的给 haiku,这句话得看得见才执行得了。
205
251
 
206
- 它们之间的**关键往返**(派活、分身出生、收尾、跨群结论)会以 `A → B` 的气泡留在群里,中间的催促只落进 chat 详情页——人看得见谁派了什么活、谁给了什么结论,不会被每一次「收到」刷屏。
252
+ **关键往返留痕,催促不留**:派活、分身出生、收尾、跨群结论会以 `A → B` 的气泡留在群里,中间的来回只落进 chat 详情页。
207
253
 
208
- **cwd 是聊天级的,不是 session 级**:同一聊天里所有 tagged / 默认 session **共用**一个 cwd。`/new #foo` 会在**当前聊天绑定的 cwd** 下起 pane;换项目直接对 AI 说「切到 /path/to/proj」,它调 `set_workspace` MCP **一步到位**——杀掉当前 pane、在新 cwd 重开新会话,聊天里以新会话的 📂 项目回执为准,上下文不延续。这样多 session 天然对齐到同一个项目根,切换 tag 时不用重新指路径。
254
+ **名册会自己更新,不必去问**:charter 里那份「出生时群里有谁」只是快照,只会越来越假。谁出生、谁收工、谁改了职责,会以一行 `<system-reminder>` 挂在**下一次**进到它的任何文本尾巴上——不占一轮、不进气泡、不进 transcript。感知 = spawn 时的快照 + turn 时的增量。要当下完整的名册仍然是 `wizard_roster`,它按 `query` / `cwd` / `chat` / `alive` 过滤(「谁在这个目录里干活」问得出来)。
255
+
256
+ **cwd 是聊天级的,不是 session 级**:同一聊天里所有 tagged / 默认 session **共用**一个 cwd,`/new #foo` 在当前聊天绑定的 cwd 下起 pane。换项目直接对 AI 说「切到 /path/to/proj」,它调 `set_workspace` 一步到位:杀掉当前 pane、在新 cwd 重开新会话,以新会话的 📂 项目回执为准,上下文不延续。多 session 因此天然对齐到同一个项目根,切 tag 不用重新指路径。
209
257
 
210
258
  ---
211
259
 
212
- ## 跨聊天:给聊天命名
260
+ ## 编排:读完材料才知道要分几路
261
+
262
+ 点对点(`send_peer` + `wait_peer`)和静态流水线(`run_agent_graph`)之间空着的,正是「读完材料才知道有 5 个模块要改」的那一种活——分几路是**想出来**的,不是声明出来的。**控制流因此留在发起的那个 wizard 手里**:它自己分路、自己派、自己等、自己汇总,守护进程只做账本与执行器。剧本固定五步:
263
+
264
+ ```mermaid
265
+ sequenceDiagram
266
+ autonumber
267
+ participant U as 群里的人
268
+ participant W as 发起的 wizard
269
+ participant K as 分身 ×5
270
+
271
+ Note over W,K: 先把公共材料读进发起方自己的上下文
272
+ W->>U: 📋 开工 open_job(标题, 计划)
273
+ loop 每一路
274
+ W->>K: spawn_clone({inherit:true, task, job})
275
+ Note over W,K: fork 父上下文,材料不必重读;派活时要求一行 RESULT: 收口
276
+ end
277
+ Note over W,K: 五个分身并行干活,过程落在各自的 chat 详情页
278
+ W->>K: wait_peer({tags:[…], need})
279
+ K-->>W: 各自的 RESULT: 行
280
+ W->>U: 📋 收工 close_job(汇总)
281
+ Note over W,K: 为这个工单生出来的分身整批回收,被拉来帮忙的长期 wizard 不在其列
282
+ ```
213
283
 
214
- 一个 WeCom 聊天的身份是 `chat:wrkS…` 这种既读不出也打不进去的 id。所以在给聊天起名之前,跨聊天叫人只有一条路:**赌 tag 全局唯一**——两个群各有一个 `#fix`,就谁也叫不动谁,唯一的出路是回去改别人的 tag。
284
+ 每一步存在的理由:
215
285
 
216
- 起个名字,这个聊天就有了能写进消息、也能传给工具的地址。
286
+ | 原语 | 它解决的问题 |
287
+ | --- | --- |
288
+ | **工单** `open_job` / `close_job` / `list_jobs` | 五路 fan-out 原本要刷十条交叉气泡,人读不出结构。带 `job` 的派活只在群里留「开工 / 收工」两条,过程照旧在各自的详情页;收工那条把成员与各自那段活一并交代。`close_job` 还把**为这个工单生出来的**分身整批回收——忘记收是常态,而每个分身都占一个 pane 和一份上下文。 |
289
+ | **一次等一组** `wait_peer({tags, need})` | 分身本来就在并行干活。一个一个等,墙钟是所有人之和;一起等只花最慢那一个的时间。`need` 决定满几个就返回(`1` = 谁先完事就先处理谁),法定人数一满剩下的等待立刻撤掉,它们照常继续干。 |
290
+ | **收口行** `RESULT: …` | join 的载荷本来是「对方最后一条 assistant 文本」——可能是「好的我开始了」,也可能是八百字散文,两种都没法直接汇总。改不了 CLI 的输出格式,就在派活的提示里要求收口:`wait_peer` 摘最后一个 `RESULT:`(或「结论:」)行放进 `result`,摘不到就是空串,照旧读 `lastText`。 |
291
+ | **投递时机** `send_peer({when:"idle"})` | 两个 wizard 同时找第三个时,两段文本会挤进同一个输入框被当成一轮读掉——这在协同网络里是常态而非边角。`idle` 先等对方闲下来再投;「回答它的提问」「打断它」仍用默认的 `now`。返回一律带 `wasBusy`。 |
292
+
293
+ **预先就声明得出来**的循环(几个 agent 互相评审、迭代到收敛)用 `run_agent_graph`:`nodes` 是参与的 wizard,`steps` 是有序管线,整张表走 `rounds` 遍,`{{last}}` / `{{<tag>}}` / `{{round}}` 把上一步的产出喂给下一步,回复里出现 `until` 哨兵就提前收工。`graph_status` 查、`stop_graph` 停。图只活在守护进程内存里,`reload` 会把它清掉(wizard 本身还活着)。
294
+
295
+ ---
296
+
297
+ ## 跨聊天:给聊天命名
298
+
299
+ 一个 WeCom 聊天的身份是 `chat:wrkS…` 这种既读不出也打不进去的 id。起名之前,跨聊天叫人只有一条路:**赌 tag 全局唯一**——两个群各有一个 `#fix`,谁也叫不动谁,出路只剩回去改别人的 tag。起个名字,这个聊天就有了能写进消息、也能传给工具的地址。
217
300
 
218
301
  ```
219
302
  /name daily 给本聊天起名为 daily
220
303
  /name 查看当前名字
221
304
  /name - 取消命名
222
- /chats 列出所有已知聊天、各自跑着哪些会话
305
+ /chats 列出所有已知聊天、各自跑着哪些 wizard(名字 / 职责 / 工作区)
223
306
  ```
224
307
 
225
308
  **名字规则**:1–32 个字符,字母 / 数字 / `_` / `-`(不能有空格、`#`、`/`、`:`)。全机唯一、大小写不敏感,重名会被拒;改名即覆盖,一个聊天只留一个名字。名字写在 `~/.wezard/config.jsonc` 的 `chats` 里,手改也行。
@@ -241,15 +324,17 @@ IM 里发 `/new` 直接开新 tmux 窗口 + 新 Agent 会话;`/clear` 清当
241
324
  别的群还有谁在跑 → AI 调 list_chats
242
325
  ```
243
326
 
244
- 最后一块是**跨群造 wizard**:`new_claude_session` 的 `chat` 参数可以直接在另一个已命名的聊天里让一个 wizard 就位,「要找的那个还不存在」不再需要拉个人去那边手打 `/new`。跨群派活时两边聊天都会收到 relay 气泡——被叫的那侧不会莫名其妙冒出一句话;它的回答则只推回给**问的人**那个群(它自己群里那条回复本来就在)。
327
+ 最后一块是**跨群造 wizard**:`new_claude_session` 的 `chat` 参数直接在另一个已命名的聊天里让一个 wizard 就位,不必拉个人去那边手打 `/new`。跨群派活时被叫的那侧会收到 relay 气泡,不会莫名其妙冒出一句话;它的回答只推回给**问的人**那个群。
245
328
 
246
- > **未命名的聊天既不可寻址、也不可被建入**,这是刻意的:往一个谁也读不出的 `chat:wr…` id 里塞会话,等于把它扔进一个调用方根本不该进的群。想让某个群能被叫到,就在那个群里发一次 `/name`。
329
+ **没名字的聊天会自动补一个**。名字就是地址,而「等人想起来去 `/name`」是等不到的。每个聊天本来就带着一个可读的标识——它在干哪个项目:`~/develop/Guxi11/weclaude` → `weclaude`,撞名加序号(`lisct` / `lisct-2`),非法字符折成 `-`。补名发生在「**要把名字交给模型**」的那一刻:各 MCP 的收件解析,以及渲染 charter 时——后者最要紧,系统提示随进程终身,一个在聊天还没名字时出生的 wizard 会一辈子以为自己住在「(未命名)」的地方。只填空,**永不覆盖你起过的名字**;工作区为空推不出名字的原样留着——宁可没名字,也不造一个同样不可读的 `chat-wr4`。
330
+
331
+ > 自动命名只是兜底。名字是写进别人消息里的地址,你自己起的那个永远比目录名好读——想让某个群被准确叫到,在那个群里发一次 `/name`。
247
332
 
248
333
  ---
249
334
 
250
335
  ## 多 CLI 后端(`claude` / `claude-internal` / `codebuddy`)
251
336
 
252
- daemon 同时挂载所有已安装的 CLI,不是二选一:你可以一个 tmux 窗口跑 `claude`、另一个跑 `codebuddy`,各自绑不同的 IM 聊天。**会话身份就是它的 jsonl 路径**,daemon 由路径反推是哪个 CLI 写的,`--resume` 用哪个二进制、jsonl 用哪套 schema 解析、project-dir 怎么编码,全部由此派生。
337
+ daemon 同时挂载所有已安装的 CLI,不是二选一:一个 tmux 窗口跑 `claude`、另一个跑 `codebuddy`,各自绑不同的 IM 聊天。**会话身份就是它的 jsonl 路径**,daemon 由路径反推是哪个 CLI 写的——`--resume` 用哪个二进制、jsonl 用哪套 schema、project-dir 怎么编码,全部由此派生。
253
338
 
254
339
  ```
255
340
  /new 沿用「当前会话」的 CLI 新开
@@ -272,30 +357,36 @@ daemon 同时挂载所有已安装的 CLI,不是二选一:你可以一个 tm
272
357
 
273
358
  - `/clear #tag` rotate 出的新 jsonl 仍落在该 CLI 的 projects 目录,watcher 按该后端的 dialect 迁移绑定;
274
359
  - pane 挂了自愈 `--resume` 用的是**该会话所属**的二进制,不会串到 `defaultCli`;
275
- - 首次 `/new #tag` 没有自己的历史记录时,**继承本聊天基础会话的 CLI**(与 cwd 的聊天级继承规则一致),不会悄悄退回默认后端;
360
+ - 首次 `/new #tag` 还没有自己的历史时,**继承本聊天基础会话的 CLI**(同 cwd 的聊天级继承规则),不会悄悄退回默认后端;
276
361
  - `/sessions` 列表在混用多个 CLI 时,每行自动标注 `(codebuddy)` 之类的来源。
277
362
 
278
363
  ---
279
364
 
280
365
  ## Prompt-cache 保活(省钱心跳)
281
366
 
282
- Anthropic 的 prompt cache 只活 ~5 分钟,且**写缓存 1.25x、读缓存 0.1x**。一个 pane 一旦空闲(wizard 在等同伴回话、或后台任务在跑),整份上下文就会掉出缓存——下一轮真实对话得按 1.25x 把整个上下文重写一遍。保活机制会在缓存**即将过期前**往 pane 注入一次极小的 ping,逼模型发起一次廉价请求(命中缓存前缀走 0.1x 读)并把 5 分钟 TTL 往前滑,真实那轮就只需写增量。
367
+ Anthropic 的 prompt cache 只活 ~5 分钟,且**写缓存 1.25x、读缓存 0.1x**。pane 一旦空闲(wizard 在等同伴回话、或后台任务在跑),整份上下文掉出缓存,下一轮真实对话得按 1.25x 重写一遍。保活在缓存**即将过期前**注入一次极小的 ping,逼出一次廉价请求(命中前缀走 0.1x 读)把 TTL 往前滑,真实那轮就只写增量。
283
368
 
284
- - **锚定「真实活动」,不自我续命**:整套调度以**最后一次真实(非 ping)对话**为锚——保活自己的 ping **不会**刷新这个锚点。空闲落在 `[ttlSec - marginSec, ttlSec)`(缓存快过期)才 ping;一旦**真实空闲超过 `maxIdleSec`(默认 = TTL 5min)就彻底停手**,让缓存自然冷掉。这正是关键:老会话不会因为「ping 把 mtime 刷新了」而被误判成活跃,从而无限保活。
285
- - **两道成本保险**:① 缓存已冷(距上次任何触碰 ≥ TTL)绝不 ping——否则就是为 no-op 付整份冷写;② 真实工作太老(≥ `maxIdleSec`)直接放弃。daemon reload 后,会先看 transcript 最后一轮是不是自己的 ping,是就把锚点当成「早已空闲」,**不会**把一个搁置很久的大会话重新烧热。
286
- - **零污染**:ping 文案默认 `keepalive — reply with just "pong", take no other action`,逼出一个约 1 token 的极短回复且禁止任何工具动作。这轮 ping/pong **完全不进聊天**(群里一条都不推),但会 **记入 chat detail 时间线**:记录的是**真实的心跳对话**——注入的 ping 原文 + 模型的真实回复(预期就一个 `pong`)+ 那次真实的 cache-read usage,留痕可审计。
287
- - **`/stop` 手动暂停**:在 IM 里发 `/stop`(Esc 打断当前生成)同时会暂停该会话的保活;等下次有真实新对话(IM 消息或 CLI 里新起一轮)自动恢复。
369
+ - **不自我续命**:ping 刷新缓存温度,但**不算**真实活动。空闲落在 `[ttlSec - marginSec, ttlSec)`(缓存快过期)才 ping。
370
+ - **给的是预算,不是时限**:一次真实对话之后最多补 `rounds` 次(默认 6,节奏 255 秒,合计约 26 分钟),然后放手让缓存冷掉;真实对话一来预算清零。老会话不会因为「ping 刷新了时间戳」被误判成活跃而无限保活。
371
+ - **两道成本保险**:缓存已冷(距上次触碰 ≥ TTL)绝不 ping——那是为 no-op 付整份冷写;预算用尽直接放弃。
372
+ - **零污染**:ping 逼出一个约 1 token 的回复且禁止任何工具动作,该轮**完全不进聊天**,但**记入 chat detail 时间线**(ping 原文 + 真实回复 + cache-read usage),留痕可审计。
373
+ - **顺手救活断掉的一轮**:上一轮死在 API 报错 / 限额横幅上时,这一 ping 改发 `resumePing`(默认 `continue`)把活接上。纯按规则判定,不问模型自己的意见。
374
+ - **`/stop` 手动暂停**:IM 里发 `/stop` 同时暂停该会话的保活,下次有真实对话自动恢复。
288
375
  - **只针对 mirror 模式的活 pane**:spawn 模式无 TTY、pane 已死、正在流式输出或会话轮换中的,一律跳过。
289
376
 
377
+ 逐 tick 的完整判定见 [技术说明](技术说明.md#prompt-cache-保活省钱心跳)。
378
+
290
379
  全部可配(`wrc.mirror.keepalive`):
291
380
 
292
381
  ```jsonc
293
382
  "keepalive": {
294
- "enabled": true, // 总开关
295
- "ttlSec": 300, // 缓存 TTL,Anthropic 默认 5min
296
- "marginSec": 45, // 提前多少秒 ping(留出注入落地的余量)
297
- "maxIdleSec": 300, // 真实空闲超过这个就停手(默认=TTL,即只补一次;调大可跨更长等待续命)
298
- "ping": "keepalive — reply with just \"pong\", take no other action"
383
+ "enabled": true, // 总开关
384
+ "ttlSec": 300, // 缓存 TTL,Anthropic 默认 5min
385
+ "marginSec": 45, // 提前多少秒 ping(留出注入落地的余量)
386
+ "rounds": 6, // 一次真实对话后最多补几次 ping,之后让缓存冷掉
387
+ "ping": "keepalive — reply with just \"pong\", take no other action",
388
+ "resumeOnStall": true, // 上一轮死在报错/限额上时,改发 resumePing 续上
389
+ "resumePing": "continue"
299
390
  }
300
391
  ```
301
392
 
@@ -306,13 +397,15 @@ Anthropic 的 prompt cache 只活 ~5 分钟,且**写缓存 1.25x、读缓存 0
306
397
  IM 里发 `/help` 可随时拉出完整命令表;每次 `/new`、`/clear` 之后,回执会随机附一条功能提示,用来慢慢摊开命令面。
307
398
 
308
399
  ```
309
- /new · /clear · /stop · /n 会话控制
310
- /sessions [emoji|id] 列出 / 切换 live 会话
311
- /new <cli> [#tag] 切换 CLI 后端 / 开并行会话
312
- /peers · /wizards 本聊天的 wizard:名字、职责、忙闲、家谱
313
- /name [名字|-] · /chats 给本聊天起名 / 跨聊天目录
314
- /id · /pwd · /usage · /cost · /audit 信息查询(免授权)
315
- /help 全部命令
400
+ /new · /clear · /stop · /n · /kill 会话控制(/kill 连 pane 一起收掉)
401
+ /sessions [emoji|id] 列出 / 切换 live 会话
402
+ /new <cli> [model] [#tag] [第一句] 切换 CLI 后端 / 挑模型 / 开并行会话
403
+ /reveal 把终端的 tmux 窗口切到本会话
404
+ /peers · /wizards 本聊天的 wizard:名字、职责、忙闲、家谱
405
+ /name [名字|-] · /chats 给本聊天起名 / 跨聊天目录
406
+ /id · /pwd · /usage · /cost · /audit 信息查询(免授权)
407
+ /cfgsync [apply] 预演 / 执行跨 CLI 项目配置同步
408
+ /help 全部命令
316
409
  ```
317
410
 
318
411
  本机 shell:
@@ -347,6 +440,9 @@ wezard uninstall # 完整卸载(先于 npm uninstall)
347
440
  **Q: daemon 起不来?**
348
441
  `wezard logs -f` 看;常见是 `botId` / `secret` 写错卡在 WebSocket 鉴权。
349
442
 
443
+ **Q: daemon 反复崩溃重启?**
444
+ `~/.wezard/daemon.stderr.log` 里出现 `spawn EBADF` 就是 fd 软上限被几百个会话吃光了。别去改 `~/Library/LaunchAgents` 下那份 plist——`install.sh` 会从模板重新生成它,改 `launchd/com.wezard.daemon.plist.template`。
445
+
350
446
  **Q: 多机部署?**
351
447
  `config.jsonc` 可以纳入 dotfiles;`secrets.json` 每台机器独立填。第二台机器跑 `wezard init` 会跳过覆盖提示,但仍要重新走 claim 步骤拿本机 IM principal。
352
448
 
@@ -354,8 +450,8 @@ wezard uninstall # 完整卸载(先于 npm uninstall)
354
450
 
355
451
  ## 深入了解
356
452
 
357
- - [技术说明](技术说明.md) — 架构、消息双向同步流程、文档 MCP 桥接机制
358
- - [审批配置](审批配置.md) — 审批粒度(全量 / 仅危险 / 全跳过)、danger 名单、跳过开关的优先关系
453
+ - [技术说明](技术说明.md) — 架构、消息双向同步、`#tag` 路由、wizard 网络(身份 / 分身 / 感知 / 编排)、保活判定、文档 MCP 桥接
454
+ - [审批配置](审批配置.md) — 审批粒度、danger 名单、跳过开关的优先关系、完整判定链
359
455
  - [CLAUDE.md](CLAUDE.md) — 模块级职责与代码约定
360
456
  - [CHANGELOG.md](CHANGELOG.md) — 各版本变更
361
457
 
package/cli/wezard.sh CHANGED
@@ -91,10 +91,13 @@ PLIST="$HOME_DIR/Library/LaunchAgents/${LABEL}.plist"
91
91
 
92
92
  # Fast readiness probe — short per-call timeout so a bound-but-wedged /status
93
93
  # (e.g. daemon blocked on WS init) fails the poll in ~1s, not the 5s http_get
94
- # budget. 30 tries × ~1s ceiling ≈ bounded ~30s worst case, not minutes.
94
+ # budget.
95
95
  probe() { curl -sS --noproxy '*' --connect-timeout 1 --max-time 1 "$DAEMON_BASE/status" >/dev/null 2>&1; }
96
- wait_up() { for _ in $(seq 1 30); do probe && return 0; sleep 0.3; done; return 1; }
97
- wait_down() { for _ in $(seq 1 30); do probe || return 0; sleep 0.3; done; return 1; }
96
+ # 按墙钟收口, 不按次数: 端口没 bind 时 curl 立刻 connection-refused 返回, 30 次
97
+ # 循环其实只等了 ~9s —— 而恢复几百个镜像绑定的 boot 要几十秒才 listen, 于是
98
+ # reload 明明成功却报 "not responding"。
99
+ wait_up() { local end=$((SECONDS + 90)); while (( SECONDS < end )); do probe && return 0; sleep 0.3; done; return 1; }
100
+ wait_down() { local end=$((SECONDS + 30)); while (( SECONDS < end )); do probe || return 0; sleep 0.3; done; return 1; }
98
101
 
99
102
  # Nohup fallback for Linux boxes with no systemd user session (containers, CI,
100
103
  # minimal images where D-Bus is unreachable). Detached background node process,
package/dist/cli/init.js CHANGED
@@ -19,6 +19,7 @@ import { mapClaudePermissions, readClaudePermissions } from "../shared/claude-pe
19
19
  import { expandHome } from "../shared/paths.js";
20
20
  import { resolvePublicHost } from "../shared/lan-ip.js";
21
21
  import { loadOrCreateSvrToken } from "../shared/svr-token.js";
22
+ import { sleep } from "../shared/std.js";
22
23
  const here = dirname(fileURLToPath(import.meta.url));
23
24
  const REPO = pathResolve(here, "..", "..");
24
25
  const CONFIG = "~/.wezard/config.jsonc";
@@ -72,7 +73,6 @@ const post = async (p, body) => {
72
73
  });
73
74
  return r.json().catch(() => ({}));
74
75
  };
75
- const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
76
76
  const readBotCreds = () => {
77
77
  const p = expandHome(SECRETS);
78
78
  if (!existsSync(p))
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../cli/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../cli/init.ts"],"names":[],"mappings":"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"}
@@ -156,8 +156,6 @@ const commandOf = (toolName, toolInput) => {
156
156
  const i = toolInput;
157
157
  return i && typeof i.command === "string" ? i.command : "";
158
158
  };
159
- const MAIN_DESC_MAX = 30;
160
- const mainTitle = (title, desc) => desc ? { title, desc: TRUNC(desc, MAIN_DESC_MAX) } : { title };
161
159
  const dirName = (cwd) => cwd.replace(/^.*\//, "") || cwd;
162
160
  // quote_area 弃用后, jump_list 是卡上唯一的 PC 跳转位 (13 字上限)。
163
161
  const detailJumpList = (url) => url ? [{ type: 1, title: "🔍 完整命令 · 详情", url }] : undefined;
@@ -1273,10 +1271,6 @@ const handleAskUserQuestion = async ({ cfg, log, client, body, getMirrorTarget,
1273
1271
  const total = questions.length;
1274
1272
  const answers = [];
1275
1273
  const flowStart = Date.now();
1276
- // hook 客户端断开后整个流程只是往死管道灌数据 — 记标志, 循环内 race、
1277
- // 循环后回执都以它止血。正常完成时 clientGone 永不 resolve, 无副作用。
1278
- let gone = false;
1279
- void clientGone?.then(() => { gone = true; });
1280
1274
  for (let i = 0; i < total; i++) {
1281
1275
  const q = questions[i];
1282
1276
  // 剩余预算: N 题共享一份 longPollSec。若每题都给整份, 多题总时长上限是