wezard 2.2.2 → 2.4.0
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.
- package/CLAUDE.md +9 -6
- package/README.md +5 -5
- package/config.example.jsonc +12 -0
- package/dist/cli/init.js +2 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/daemon/approval.js +90 -6
- package/dist/daemon/approval.js.map +1 -1
- package/dist/daemon/chat-log.js +6 -1
- package/dist/daemon/chat-log.js.map +1 -1
- package/dist/daemon/chat-name.js +15 -0
- package/dist/daemon/chat-name.js.map +1 -1
- package/dist/daemon/config-api.js +265 -70
- package/dist/daemon/config-api.js.map +1 -1
- package/dist/daemon/danger.js +15 -0
- package/dist/daemon/danger.js.map +1 -1
- package/dist/daemon/detail.js +49 -0
- package/dist/daemon/detail.js.map +1 -1
- package/dist/daemon/handoff.js +12 -5
- package/dist/daemon/handoff.js.map +1 -1
- package/dist/daemon/idle-nudge.js +55 -0
- package/dist/daemon/idle-nudge.js.map +1 -0
- package/dist/daemon/inbound.js +19 -14
- package/dist/daemon/inbound.js.map +1 -1
- package/dist/daemon/index.js +1509 -259
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/jobs.js +180 -32
- package/dist/daemon/jobs.js.map +1 -1
- package/dist/daemon/last-response.js +15 -0
- package/dist/daemon/last-response.js.map +1 -1
- package/dist/daemon/memory-steward.js +124 -68
- package/dist/daemon/memory-steward.js.map +1 -1
- package/dist/daemon/mirror-bridge.js +506 -124
- package/dist/daemon/mirror-bridge.js.map +1 -1
- package/dist/daemon/mirror-store.js.map +1 -1
- package/dist/daemon/model-select.js +102 -0
- package/dist/daemon/model-select.js.map +1 -1
- package/dist/daemon/notices.js +147 -33
- package/dist/daemon/notices.js.map +1 -1
- package/dist/daemon/peers.js +261 -124
- package/dist/daemon/peers.js.map +1 -1
- package/dist/daemon/pending-items.js +171 -0
- package/dist/daemon/pending-items.js.map +1 -0
- package/dist/daemon/receipts.js +428 -80
- package/dist/daemon/receipts.js.map +1 -1
- package/dist/daemon/route.js +133 -19
- package/dist/daemon/route.js.map +1 -1
- package/dist/daemon/spawn-tmux.js +24 -13
- package/dist/daemon/spawn-tmux.js.map +1 -1
- package/dist/daemon/steward-guard.js +32 -0
- package/dist/daemon/steward-guard.js.map +1 -0
- package/dist/daemon/task-registry.js +1 -1
- package/dist/daemon/task-registry.js.map +1 -1
- package/dist/daemon/tasks.js +12 -4
- package/dist/daemon/tasks.js.map +1 -1
- package/dist/daemon/usage.js +4 -11
- package/dist/daemon/usage.js.map +1 -1
- package/dist/daemon/wizard-memory.js +36 -4
- package/dist/daemon/wizard-memory.js.map +1 -1
- package/dist/daemon/wizard.js +174 -87
- package/dist/daemon/wizard.js.map +1 -1
- package/dist/mcp/server.js +209 -132
- package/dist/mcp/server.js.map +1 -1
- package/dist/shared/charter-view.js +35 -0
- package/dist/shared/charter-view.js.map +1 -0
- package/dist/shared/chat-http.js +134 -32
- package/dist/shared/chat-http.js.map +1 -1
- package/dist/shared/chat-render.js +6 -3
- package/dist/shared/chat-render.js.map +1 -1
- package/dist/shared/chat-view.js +17 -6
- package/dist/shared/chat-view.js.map +1 -1
- package/dist/shared/cli-backends.js +2 -0
- package/dist/shared/cli-backends.js.map +1 -1
- package/dist/shared/config-meta.js +91 -0
- package/dist/shared/config-meta.js.map +1 -0
- package/dist/shared/config-writer.js +5 -6
- package/dist/shared/config-writer.js.map +1 -1
- package/dist/shared/config.js +273 -294
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/daemon-token.js +18 -0
- package/dist/shared/daemon-token.js.map +1 -0
- package/dist/shared/detail-render.js +233 -20
- package/dist/shared/detail-render.js.map +1 -1
- package/dist/shared/detail-store.js +33 -12
- package/dist/shared/detail-store.js.map +1 -1
- package/dist/shared/effort.js +11 -0
- package/dist/shared/effort.js.map +1 -0
- package/dist/shared/keepalive.js +5 -5
- package/dist/shared/keepalive.js.map +1 -1
- package/dist/shared/model-prices.js +258 -0
- package/dist/shared/model-prices.js.map +1 -0
- package/dist/shared/pricing.js +55 -0
- package/dist/shared/pricing.js.map +1 -0
- package/dist/shared/reminder.js +18 -4
- package/dist/shared/reminder.js.map +1 -1
- package/dist/shared/role-render.js +210 -8
- package/dist/shared/role-render.js.map +1 -1
- package/dist/shared/role-view.js +104 -26
- package/dist/shared/role-view.js.map +1 -1
- package/dist/shared/session-label.js +4 -0
- package/dist/shared/session-label.js.map +1 -1
- package/dist/shared/task-file.js +16 -1
- package/dist/shared/task-file.js.map +1 -1
- package/dist/shared/turn-state.js +24 -0
- package/dist/shared/turn-state.js.map +1 -0
- package/dist/shared/world.js +116 -13
- package/dist/shared/world.js.map +1 -1
- package/dist/svr/index.js +2 -1
- package/dist/svr/index.js.map +1 -1
- package/hooks/pre-tool-use.sh +15 -3
- package/package.json +1 -1
- package/web/chat.css +226 -74
- package/web/chat.js +1075 -370
package/CLAUDE.md
CHANGED
|
@@ -7,7 +7,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|
|
7
7
|
`wezard` (CLI `wezard`) bridges agent CLIs (Claude Code / claude-internal / CodeBuddy) and WeCom (企业微信) smart bots:
|
|
8
8
|
- **PreToolUse approval forwarding**: every tool call is gated by a button card pushed to WeCom; clicking ✅/❌/⏱ resolves the long-poll the hook is parked on.
|
|
9
9
|
- **Remote control**: messages sent to the bot drive a local agent CLI — the daemon spawns an interactive session in tmux and mirrors it to the chat. Sessions are opened from the chat side only (first inbound, `/new`, `.name`, `switch_claude_session`).
|
|
10
|
-
- **MCP server** (`
|
|
10
|
+
- **MCP server** (`wezard`): the wizard's whole tool surface — talk to / watch / spawn / clone / stop other wizards (`tell_peer`, `peek_peer`, `read_chat`, `spawn_wizard`, `clone_wizard`, …), jobs, schedules, memory, workspace/model switching, `notify` — each a thin POST to the resident daemon over loopback HTTP. Human-facing outbound cards (approval / AskUserQuestion) are pushed by the daemon itself, not through MCP.
|
|
11
11
|
|
|
12
12
|
## Build / run
|
|
13
13
|
|
|
@@ -55,11 +55,14 @@ Three processes, all coordinating via 127.0.0.1:17890 and `~/.wezard/`:
|
|
|
55
55
|
- `inbound.ts` routes `message.text` / `message.image` / `message.mixed` → `mirror-bridge.ts`. Gates on `allowFrom`; one-shot exception is the bootstrap claim (see below).
|
|
56
56
|
- `mirror-bridge.ts` tails `<projectsDir>/<encoded(cwd)>/<sid>.jsonl` and pushes new `assistant` content to a chat — but only for turns the chat itself started: a turn opened by a human's CLI keystroke is recorded to the turn store (rolepage) and kept out of the chat (`wrc.mirror.chatOriginOnly`, brief mode only); approval/askq cards and `[mirror]` notices bypass that gate. Inbound injection is either `claude --resume <sid> -p` (writes a turn into the same jsonl) or `tmux paste-buffer` against a live TTY (only path that makes WeCom messages visible in the user's CLI window). `recentInjects` ring buffer suppresses the WeCom→CLI echo when tailing (which is why an injected line's text is stamped as the turn's `userQuery` at inject time — the tail never sees it). **Every turn has a channel** (`TurnDetailRecord.channel`): the base of the public chat it was spoken in and where its reply goes — a human can `.name` a wizard homed in another chat and the reply (text and cards) returns to the chat that asked, not the wizard's home; `""` = a private wizard↔wizard turn whose reply is pushed nowhere and lives only on the rolepage.
|
|
57
57
|
- `claim.ts` is a single-shot bootstrap: an exact-match magic phrase from any sender bypasses `allowFrom`, writes that principal as `defaultChat`, and appends to `allowFrom`. This is the **only** legitimate ingress for first-time setup.
|
|
58
|
-
- `peers.ts` is the read side of multi-agent awareness — "who else is working in this chat, and are they busy". A wizard's HOME chat is its target key's base principal (`baseOfKey`): the untagged default plus every slot `chat:xxx#slot`. Pure parsing only — bounded transcript-tail reads (`tailTurns` / `lastAssistantText` / `summarizeTail`, shared with `session-scan.ts`) and pane classification (`paneIsBusy`). **What a wizard reads about another comes from the transcript, never from a pane capture**: text turns only, keepalive ping/pong stripped (`talkTurns` / `withoutKeepalive` — pass the
|
|
59
|
-
- `wizard.ts` is the identity layer over those sessions: a target key plus a **globally unique name** — the wizard's only address, written `.name` everywhere a human or model sees it (a chat's default session takes the chat's name, a slot takes its slot id; collisions get `-N` via `pickName`; `settleName` claims lazily, `settleAll` migrates at boot, default sessions first). The slot id inside the key is NOT the name: a rename never rekeys a session. Plus 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 chat's and the workspace's shared memory (`wizard-memory.ts`: `~/.wezard/memory/{chats,workspaces}/*.md`, human-editable, appended by `wizard_remember({scope})`), the tool roster, the orchestration playbook, the public-vs-private etiquette) 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.
|
|
58
|
+
- `peers.ts` is the read side of multi-agent awareness — "who else is working in this chat, and are they busy". A wizard's HOME chat is its target key's base principal (`baseOfKey`): the untagged default plus every slot `chat:xxx#slot`. Pure parsing only — bounded transcript-tail reads (`tailTurns` / `lastAssistantText` / `summarizeTail`, shared with `session-scan.ts`) and pane classification (`paneIsBusy`). **What a wizard reads about another comes from the transcript, never from a pane capture**: text turns only, keepalive ping/pong stripped (`talkTurns` / `withoutKeepalive` — pass the ping signature), and "where is it stuck" is `openToolUses` (a tool call left hanging on an idle session = parked on an approval card). The pane is consulted for exactly one thing, `busy`. Read-side tools (`wizard_roster` / `peek_peer` / `read_chat`) answer in plain text rendered daemon-side, not json; `read_chat` (`chat-log.ts`) is computed from session transcripts alone, not the turn store: a log = every recently-active session's ask + final answer per round, merged by timestamp, then narrowed on the rolepage's axis `role` → `chat` → `target` and cut by `since` / `until` / `limit`. Which channel a line belongs to and who said it is read back from the envelope riding on that user line (`parseEnvelope`, `shared/reminder.ts`): every wezard `<system-reminder>` carries its facts as opening-tag attributes (`wezard=envelope|mention|roster`, `kind` / `from` / `chat` / `scope`) and its prose only for the model — rewording the prose never breaks parsing; old attribute-less wordings keep parsing via its `LEGACY` table. The rolepage collapses each reminder into a `<reminder>` tag that expands to raw on click; no envelope = a human speaking in the session's home chat. A clone's transcript starts with its parent's forked history, so its rounds older than `bornAt` are dropped. 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.
|
|
59
|
+
- `wizard.ts` is the identity layer over those sessions: a target key plus a **globally unique name** — the wizard's only address, written `.name` everywhere a human or model sees it (a chat's default session takes the chat's name, a slot takes its slot id; collisions get `-N` via `pickName`; `settleName` claims lazily, `settleAll` migrates at boot, default sessions first). The slot id inside the key is NOT the name: a rename never rekeys a session. Plus 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 chat's and the workspace's shared memory (`wizard-memory.ts`: `~/.wezard/memory/{chats,workspaces}/*.md`, human-editable, appended by `wizard_remember({scope})`), the tool roster, the orchestration playbook, the public-vs-private etiquette) 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`. Since a running wizard never sees a new charter, `config_set` renders every chartered wizard's charter before and after the change and tells the affected ones (and the caller) to `handoff` — generic over whatever config the charter reads. Backends with no such flag (codebuddy) spawn without a charter rather than with a rejected flag.
|
|
60
60
|
- **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.
|
|
61
|
-
- **Chats are public channels, wizard↔wizard is private by default.** `send_peer` injects with `channel:""` and posts no bubble; `public:true` (the model decides) posts `emoji .a → .b` into the sender's current channel and the reply follows there. No spawn/relay bubbles remain — only job
|
|
62
|
-
- `
|
|
61
|
+
- **Chats are public channels, wizard↔wizard is private by default.** `send_peer` injects with `channel:""` and posts no bubble; `public:true` (the model decides) posts `emoji .a → .b` into the sender's current channel and the reply follows there. No spawn/relay/job bubbles remain — only `notify`. A `tell_peer` carrying a `job` is always private (`public` is ignored), so a fan-out's whole process stays on the rolepage; the human sees only the initiator's own closing reply, routed back along the chain that asked it. A chat with `chatPolicy.<chat>.topOnly` (top-level-only mode) on goes further (daemon-enforced in `tellPeerAs` / `/notify`): every wizard↔wizard line there is private regardless of `public`, and a wizard whose turn is working for a peer (a private peer task, or a receipt whose `k` is a peer) may not `notify` it (the steward is exempt in its own chat) — the charter tells top-level wizards to explain the result in their own words.
|
|
62
|
+
- **`tell_peer` delivery policy** (`priority`) only matters when the target is busy: `normal` (default) waits for its turn to end before pasting — two senders pasting into one busy box get read as one turn; `urgent` presses Esc first (the same interrupt as `stop_wizard`, without the teardown that would drop others' queued lines); `now` pastes into the running turn (interject, answer its question; the default for `re`).
|
|
63
|
+
- `receipts.ts` makes `tell_peer` asynchronous: every task gets a **turn id** (`t` + 6 hex, written into the envelope) and a watcher waits for the target to go idle (registry, not spinner), locates the answer **to that turn** by envelope (never by timestamp — a busy target's next output is the previous task's conclusion) and pastes it back into the sender when the sender is idle, one pane at a time. A receipt carries a `status`: `done`; `need` (closed with `NEED:`) and `error` (CLI error) are interim — the watcher keeps watching; `timeout` (`deadline`, default 1h) / `silent` / `dead` / `canceled` are synthesized failures, delivered rather than dropped because "no answer" is also an answer. `re` continues the same turn (`legs+1`, same job and channel); `legs > 3` only adds a "give RESULT now" line — the hard brake is the job budget. Slots persist (`receipts.json`, key `from\0to`) and resume after reload, since reloads land mid-turn routinely here. **Chained reply-to**: a task sent while answering upstream X gets parent `k` (read from the sender's turn-opening envelope); the sender's first answer is then *deferred* (not delivered, not counted) until its children settle, and the last child's receipt carries `reply-to` so that receipt-turn's closing line goes back to X (or to the chat for a human-opened turn) — siblings still pending → that turn stays on the rolepage. `chain:false` marks a side task that must not hold the upstream answer. `stop_wizard` / `close_job` cancel before killing, or the watcher would report `dead`. Any change to receipts / jobs / peers: run `node scripts/receipt-regress/run.mjs`.
|
|
64
|
+
- `shared/turn-state.ts` is the one vocabulary for an in-flight task: `Terminal` (the receipt statuses that settle it) plus `working` / `blocked` (parked on an approval) / `needs-input` / `errored` / `deferred`, computed on read from the slot and one pane probe — roster, peek and `list_jobs` print the same words (`在等` / `欠着`).
|
|
65
|
+
- `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 plan, read by the rolepage's job page — opening and closing post nothing to the chat; `close_job`'s summary is archived as an episode. Each member's `outcome` is written once when its receipt settles, so "done/total" is counted by the daemon per member (not per receipt slot, which a later line to the same pair overwrites); `expect` fixes the total for wizards that dispatch in stages, `maxTurns` is a hard dispatch budget (re-asks and inherited lines count). 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
66
|
- `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
67
|
- `chat-name.ts` turns a chat's unreadable `chat:wr…` id into a readable name (which its default wizard inherits), 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
68
|
- `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. It runs one fixed skeleton per shot — `trigger → gate → render → dispatch` — and nothing else: the *specifics* of each stage live in the task's own file, because a schedule is "run this logic at this time" and logic does not fit in json.
|
|
@@ -85,7 +88,7 @@ Three processes, all coordinating via 127.0.0.1:17890 and `~/.wezard/`:
|
|
|
85
88
|
- `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).
|
|
86
89
|
- For non-plugin installs (`claude-internal` wrapper), `cli/sync.ts` writes the MCP server entry + `WEZARD_DAEMON_BASE` env into target `settings.json`s listed in `config.sync.targets`. **It deliberately strips legacy hook entries** for `kind:"claude"` targets — registering both the plugin's `hooks.json` AND a settings.json hook fires the hook twice per tool call (= duplicate cards). For `kind:"codebuddy"` targets, since the wezard plugin is not published to CodeBuddy's marketplace, sync **writes the hook directly into `~/.codebuddy/settings.json`** with an absolute path to `hooks/pre-tool-use.sh` — this is the only registration path for CodeBuddy. `~/.wezard/sync.lock.json` tracks what was written so `--remove` is reversible.
|
|
87
90
|
|
|
88
|
-
**MCP server** (`mcp/server.ts`): stdio transport, completely stateless w.r.t. WeCom. Every tool just `POST`s to the daemon. Add a tool here AND a route handler in `daemon/`. The collaboration tools (`wizard_whoami` / `wizard_identity` / `wizard_roster` / `spawn_wizard` / `clone_wizard` / `stop_wizard` / `wizard_remember` / `wizard_handoff_self` / `set_model`, `read_chat`, plus the older `peek_peer` / `send_peer` / `wait_peer` / `run_agent_graph` / `graph_status` / `stop_graph`) all send `selfRef()` = `{sessionId, tmuxPane}` so the daemon can resolve *which* session is asking — env sessionId goes stale after a `/clear`, pane id doesn't.
|
|
91
|
+
**MCP server** (`mcp/server.ts`): stdio transport, completely stateless w.r.t. WeCom. Every tool just `POST`s to the daemon. Add a tool here AND a route handler in `daemon/`. The collaboration tools (`wizard_whoami` / `wizard_identity` / `wizard_roster` / `spawn_wizard` / `clone_wizard` / `stop_wizard` / `wizard_remember` / `wizard_handoff_self` / `set_model`, `read_chat`, plus the older `peek_peer` / `tell_peer` (legacy alias `send_peer`) / `wait_peer` / `run_agent_graph` / `graph_status` / `stop_graph`) all send `selfRef()` = `{sessionId, tmuxPane}` so the daemon can resolve *which* session is asking — env sessionId goes stale after a `/clear`, pane id doesn't. Discovery is layered: the charter (`renderCharter`) carries one "when to use" line per tool and is the only part guaranteed in context — Claude Code defers MCP tool schemas behind ToolSearch — while each tool description carries the mechanism and parameters. Keep the two from restating each other. Their address parameter is `name` (`fix` / `.fix`); the daemon still accepts the legacy `tag`/`tags` fields, because an already-running wizard's MCP process is old code. Tool NAMES stayed on the older `peer` vocabulary on purpose — a name is an address, and renaming would break every hint, doc and habit pointing at it; the descriptions carry the wizard/clone vocabulary.
|
|
89
92
|
|
|
90
93
|
## Important patterns / pitfalls
|
|
91
94
|
|
package/README.md
CHANGED
|
@@ -294,16 +294,16 @@ sequenceDiagram
|
|
|
294
294
|
|
|
295
295
|
---
|
|
296
296
|
|
|
297
|
-
##
|
|
297
|
+
## 缓存保活(默认关)
|
|
298
298
|
|
|
299
|
-
|
|
299
|
+
prompt 缓存过期后,下一轮对话要为整份上下文重新付费。保活在缓存快过期时自动发一次极小的心跳把它续上。它是为 API 默认的 5 分钟 TTL 设计的;**Claude Code 订阅写的是 1 小时缓存**(本机实测:1491 个主会话里 1490 个只写 1h,相邻两次请求隔 6–60 分钟的 230 次里 229 次整段命中),一小时内的空闲本来就不会冷,所以默认关闭。transcript 里写的是 5 分钟缓存(`cache_creation.ephemeral_5m`)的环境再打开 `wrc.mirror.keepalive.enabled`:
|
|
300
300
|
|
|
301
|
-
-
|
|
301
|
+
- 心跳节奏跟着会话实际写入的 TTL 走,按缓存真实被碰的时刻(最近一次请求的开始)计时;缓存闲置超过 10 分钟就不再续(1h 缓存因此不会被保温);
|
|
302
|
+
- 每次真实对话后最多续 6 次,之后不再续;
|
|
302
303
|
- 心跳不出现在聊天里,只记在详情页时间线;
|
|
303
|
-
- 上一轮因报错 / 限额中断时,心跳会顺手把活接上;
|
|
304
304
|
- `/stop` 同时暂停保活,下次真实对话自动恢复。
|
|
305
305
|
|
|
306
|
-
|
|
306
|
+
路由与 `tell_peer` 冷门控判「缓存冷不冷」不依赖保活:TTL 读自 transcript 实际写入的档位,起点取最近一次请求的开始时刻。完整规则见 [技术说明](技术说明.md#prompt-cache-保活省钱心跳)。
|
|
307
307
|
|
|
308
308
|
---
|
|
309
309
|
|
package/config.example.jsonc
CHANGED
|
@@ -126,6 +126,18 @@
|
|
|
126
126
|
}
|
|
127
127
|
},
|
|
128
128
|
|
|
129
|
+
// ── 按难度分档的模型 ─────────────────────────────────────────────
|
|
130
|
+
// spawn_wizard / clone_wizard 的 `tier` 落到这里; 显式给的 model / effort / cli 压过档位。
|
|
131
|
+
// router = 各群管家 (群的默认会话) 新起时用的模型。省略整段 = 下面这组默认值。
|
|
132
|
+
"models": {
|
|
133
|
+
"tiers": {
|
|
134
|
+
"light": { "model": "haiku", "effort": "low" },
|
|
135
|
+
"standard": { "model": "sonnet", "effort": "medium" },
|
|
136
|
+
"hard": { "model": "opus", "effort": "high" }
|
|
137
|
+
},
|
|
138
|
+
"router": { "model": "sonnet", "effort": "low" }
|
|
139
|
+
},
|
|
140
|
+
|
|
129
141
|
// ── claude / codebuddy wrapper sync ───────────────────────────────
|
|
130
142
|
// `wezard sync` writes hooks/MCP/permissions into every target settings.json
|
|
131
143
|
// listed below. Multi-CLI setups (claude + codebuddy 同时装) 列多项即可。
|
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 { DAEMON_TOKEN_HEADER, readDaemonToken } from "../shared/daemon-token.js";
|
|
22
23
|
import { sleep } from "../shared/std.js";
|
|
23
24
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
24
25
|
const REPO = pathResolve(here, "..", "..");
|
|
@@ -68,7 +69,7 @@ const get = async (p) => {
|
|
|
68
69
|
const post = async (p, body) => {
|
|
69
70
|
const r = await fetch(`${DAEMON}${p}`, {
|
|
70
71
|
method: "POST",
|
|
71
|
-
headers: { "content-type": "application/json" },
|
|
72
|
+
headers: { "content-type": "application/json", [DAEMON_TOKEN_HEADER]: readDaemonToken() },
|
|
72
73
|
body: JSON.stringify(body),
|
|
73
74
|
});
|
|
74
75
|
return r.json().catch(() => ({}));
|
package/dist/cli/init.js.map
CHANGED
|
@@ -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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"}
|
package/dist/daemon/approval.js
CHANGED
|
@@ -3,12 +3,14 @@ import { createPending, getPending, getResolvedSnapshot, resolvePending, resolve
|
|
|
3
3
|
import { cacheGet, cachePut, cacheKey, isAutoWindowActive, autoWindowRemainingMs, setAutoWindow, clearAutoWindow, getWindowMeta, } from "./session-cache.js";
|
|
4
4
|
import { evaluateAllow, ruleMatchesAny, alwaysAllowRulesFor, splitSegments, NEVER_RULE_ALLOW } from "../shared/allow-rules.js";
|
|
5
5
|
import { redact } from "./redact.js";
|
|
6
|
-
import { dangerOf, dangerEarlyExit } from "./danger.js";
|
|
6
|
+
import { dangerOf, dangerEarlyExit, selfConfigWriteOf } from "./danger.js";
|
|
7
7
|
import { appendUnique } from "../shared/config-writer.js";
|
|
8
8
|
import { claudeConfigWrite } from "../shared/claude-config-path.js";
|
|
9
|
-
import { recordApproval, recordApprovalDecision, buildDetailUrl, getDetail } from "./detail.js";
|
|
9
|
+
import { recordApproval, recordApprovalDecision, buildDetailUrl, getDetail, openTurnsOf } from "./detail.js";
|
|
10
10
|
import { json, readBody } from "./http.js";
|
|
11
|
-
import { tagBadge, withTagHeader } from "../shared/session-label.js";
|
|
11
|
+
import { tagBadge, tagOfKey, withTagHeader } from "../shared/session-label.js";
|
|
12
|
+
import { chatPolicyOf } from "./chat-name.js";
|
|
13
|
+
import { makeStewardGuard } from "./steward-guard.js";
|
|
12
14
|
import { sessionNameFor } from "./session-name.js";
|
|
13
15
|
// ── Routing helpers ────────────────────────────────────────────────────
|
|
14
16
|
// 卡片跟着本轮的频道走: 人在群 B 里 `.fix` 叫住在 A 的 wizard, 这一轮的审批/提问卡
|
|
@@ -619,6 +621,53 @@ const decodePlanKey = (key) => {
|
|
|
619
621
|
return { reqId, action };
|
|
620
622
|
};
|
|
621
623
|
const decodePlanNoopKey = (key) => key.startsWith(PLAN_NOOP_PREFIX) ? key.slice(PLAN_NOOP_PREFIX.length) : undefined;
|
|
624
|
+
// ── 确认卡: 守护进程自己要人点一下才做的事 (config_set 的放权项)。它不经 hook, 所以
|
|
625
|
+
// danger.skipAll / ⏱窗口 / 会话缓存都压不过它 —— 这正是它不走审批卡的理由。
|
|
626
|
+
const CONFIRM_PREFIX = "CONFIRM|";
|
|
627
|
+
const CONFIRM_NOOP_PREFIX = "confirm_noop:";
|
|
628
|
+
const CONFIRM_PICKED_PREFIX = "confirm:";
|
|
629
|
+
const encodeConfirmKey = (reqId, action) => `${CONFIRM_PREFIX}${reqId}|${action}`;
|
|
630
|
+
const decodeConfirmKey = (key) => {
|
|
631
|
+
if (!key.startsWith(CONFIRM_PREFIX))
|
|
632
|
+
return undefined;
|
|
633
|
+
const [reqId, action] = key.slice(CONFIRM_PREFIX.length).split("|");
|
|
634
|
+
return reqId && (action === "yes" || action === "no") ? { reqId, action } : undefined;
|
|
635
|
+
};
|
|
636
|
+
// 事件回调里重画已决卡要用原文; 卡决了 (或超时) 就删。
|
|
637
|
+
const confirmCards = new Map();
|
|
638
|
+
const buildConfirmCard = (reqId, c, done) => ({
|
|
639
|
+
card_type: "button_interaction",
|
|
640
|
+
source: buildSource(undefined, c.who),
|
|
641
|
+
main_title: { title: TRUNC(`⚙️ ${c.title}`, 38) },
|
|
642
|
+
quote_area: quoteArea(TRUNC(c.body, SAFE_QUOTE_MAX)),
|
|
643
|
+
task_id: reqId,
|
|
644
|
+
button_list: done
|
|
645
|
+
? [{ text: done === "yes" ? "✅ 已确认写入" : done === "no" ? "❌ 已拒绝" : "⌛ 已失效", style: 4, key: `${CONFIRM_NOOP_PREFIX}${reqId}` }]
|
|
646
|
+
: [
|
|
647
|
+
{ text: "❌ 不改", style: 4, key: encodeConfirmKey(reqId, "no") },
|
|
648
|
+
{ text: "✅ 确认写入", style: 4, key: encodeConfirmKey(reqId, "yes") },
|
|
649
|
+
],
|
|
650
|
+
});
|
|
651
|
+
/** 往 `principal` 的当前频道推一张确认卡; 卡发出后返回, `decided` 是人的决定 (超时 = false)。
|
|
652
|
+
* 包一层对象是因为 promise 会被 await 摊平。发不出去就抛 —— 没人看得见的卡不该被当成「人拒绝了」。 */
|
|
653
|
+
export const requestConfirm = async ({ client, principal, who, title, body, timeoutMs }) => {
|
|
654
|
+
if (!client.isConnected)
|
|
655
|
+
throw new Error("ws_disconnected");
|
|
656
|
+
const { reqId, promise } = createPending({ meta: { kind: "generic", createdAt: Date.now(), chatKey: principal }, timeoutMs });
|
|
657
|
+
const c = { who, title, body };
|
|
658
|
+
confirmCards.set(reqId, c);
|
|
659
|
+
try {
|
|
660
|
+
await client.sendMessage(targetChatId(principal), { msgtype: "template_card", template_card: buildConfirmCard(reqId, c) });
|
|
661
|
+
}
|
|
662
|
+
catch (e) {
|
|
663
|
+
resolvePending(reqId, "deny");
|
|
664
|
+
confirmCards.delete(reqId);
|
|
665
|
+
throw e;
|
|
666
|
+
}
|
|
667
|
+
return {
|
|
668
|
+
decided: promise.then((d) => d === `${CONFIRM_PICKED_PREFIX}yes`, () => false).finally(() => confirmCards.delete(reqId)),
|
|
669
|
+
};
|
|
670
|
+
};
|
|
622
671
|
const PLAN_PICKED_PREFIX = "plan:";
|
|
623
672
|
const PLAN_REVISE_REASON = "用户希望继续完善计划,请询问还需要调整哪些地方,不要直接开始执行。";
|
|
624
673
|
const parsePlanInput = (i) => {
|
|
@@ -1442,6 +1491,7 @@ const unwrapDeferredTool = (toolName, toolInput) => {
|
|
|
1442
1491
|
return { toolName: inner, toolInput: rest };
|
|
1443
1492
|
};
|
|
1444
1493
|
export const makeApproveHandler = ({ cfg, log, client, sourcePath, getMirrorTarget, flushBeforeCard, nativeModal }) => {
|
|
1494
|
+
const stewardGuard = makeStewardGuard();
|
|
1445
1495
|
setCardQuoteMax(cfg.approval.cardQuoteMaxChars);
|
|
1446
1496
|
const detailUrlFor = (id, approver) => buildDetailUrl(cfg.daemon.detailPublicBase, cfg.daemon.host, cfg.daemon.port, id, approver ? targetChatId(approver) : undefined);
|
|
1447
1497
|
// 手机端卡片 quote 区实测只渲染前 2~3 行 —— 长命令在卡上看不全。默认解法已经
|
|
@@ -1641,8 +1691,26 @@ export const makeApproveHandler = ({ cfg, log, client, sourcePath, getMirrorTarg
|
|
|
1641
1691
|
sessionId = parent;
|
|
1642
1692
|
}
|
|
1643
1693
|
}
|
|
1694
|
+
// 群管家的手闸 (见 steward-guard.ts): 排在所有审批之前 —— 拦的不是危险, 是越位,
|
|
1695
|
+
// 放行窗口 / allowRules / skipAll 都不该替它开门。
|
|
1696
|
+
const owner = getMirrorTarget?.(sessionId);
|
|
1697
|
+
if (owner && !tagOfKey(owner)) {
|
|
1698
|
+
const reason = stewardGuard({
|
|
1699
|
+
sessionId,
|
|
1700
|
+
turn: openTurnsOf(owner, sessionId)[0]?.id ?? "",
|
|
1701
|
+
toolName,
|
|
1702
|
+
budget: chatPolicyOf(cfg, owner).stewardBudget,
|
|
1703
|
+
});
|
|
1704
|
+
if (reason) {
|
|
1705
|
+
log.info({ toolName, sessionId, owner }, "steward guard reject");
|
|
1706
|
+
json(res, 200, { decision: "deny", reason });
|
|
1707
|
+
return;
|
|
1708
|
+
}
|
|
1709
|
+
}
|
|
1710
|
+
// wezard 自改配置的写 (见 selfConfigWriteOf): matcher 也放不掉它。
|
|
1711
|
+
const selfWrite = selfConfigWriteOf(toolName, toolInput);
|
|
1644
1712
|
// Matcher: only intercept matching tools — others pass.
|
|
1645
|
-
if (!new RegExp(cfg.approval.matcher).test(toolName)) {
|
|
1713
|
+
if (!selfWrite && !new RegExp(cfg.approval.matcher).test(toolName)) {
|
|
1646
1714
|
json(res, 200, { decision: "allow", reason: "matcher_skip" });
|
|
1647
1715
|
return;
|
|
1648
1716
|
}
|
|
@@ -1691,7 +1759,7 @@ export const makeApproveHandler = ({ cfg, log, client, sourcePath, getMirrorTarg
|
|
|
1691
1759
|
// 是「出厂自带的 askRules」—— 所以它必须和用户写的 askRules 站在同一层, 排在
|
|
1692
1760
|
// allowRules 之前。放在后面的话, 一条 `Bash(git *)` 这样的宽 allow 规则 (尤其
|
|
1693
1761
|
// 是从 Claude settings.json 批量导入来的) 就能让整份危险名单失效。
|
|
1694
|
-
const danger = dangerOf(cfg, toolName, toolInput);
|
|
1762
|
+
const danger = selfWrite ?? dangerOf(cfg, toolName, toolInput);
|
|
1695
1763
|
if (danger)
|
|
1696
1764
|
log.info({ toolName, sessionId, rule: danger.rule }, "danger hit — forcing single approval");
|
|
1697
1765
|
// 必发卡 = 危险名单 或 askRules 命中。这两者的语义是「每次都要人单独看一眼」,
|
|
@@ -1803,7 +1871,7 @@ export const makeApproveHandler = ({ cfg, log, client, sourcePath, getMirrorTarg
|
|
|
1803
1871
|
// danger.skip / danger 模式的早退。第三个参数是「除 danger 外还有没有别的必发卡
|
|
1804
1872
|
// 理由」—— askRules 不能被 danger 的开关顺带关掉。守卫不在其列: 它要的是事后按框,
|
|
1805
1873
|
// 早退照样能给 (settleGuard), 拿它挡早退等于把 danger 的开关废掉。
|
|
1806
|
-
const earlyExit = dangerEarlyExit(cfg, danger, Boolean(askHit));
|
|
1874
|
+
const earlyExit = dangerEarlyExit(cfg, danger, Boolean(askHit) || Boolean(selfWrite));
|
|
1807
1875
|
if (earlyExit) {
|
|
1808
1876
|
log.info({ toolName, sessionId, reason: earlyExit }, "danger switch early exit");
|
|
1809
1877
|
json(res, 200, { decision: "allow", reason: earlyExit });
|
|
@@ -2179,6 +2247,22 @@ export const installApprovalEventListener = (client, log, cfg, onApproved) => {
|
|
|
2179
2247
|
}
|
|
2180
2248
|
return;
|
|
2181
2249
|
}
|
|
2250
|
+
// ── 确认卡 (requestConfirm): 守护进程自己发的「点了才做」。
|
|
2251
|
+
const confirmClick = decodeConfirmKey(key);
|
|
2252
|
+
if (confirmClick) {
|
|
2253
|
+
const c = confirmCards.get(confirmClick.reqId);
|
|
2254
|
+
const ok = resolvePending(confirmClick.reqId, `${CONFIRM_PICKED_PREFIX}${confirmClick.action}`);
|
|
2255
|
+
log.info({ reqId: confirmClick.reqId, action: confirmClick.action, ok }, "confirm event resolved");
|
|
2256
|
+
try {
|
|
2257
|
+
await client.updateTemplateCard(frame, buildConfirmCard(cbTaskId || confirmClick.reqId, c ?? { who: "wezard", title: "确认卡", body: "" }, ok ? confirmClick.action : "stale"));
|
|
2258
|
+
}
|
|
2259
|
+
catch (e) {
|
|
2260
|
+
log.warn({ err: e.message, reqId: confirmClick.reqId }, "confirm updateTemplateCard failed");
|
|
2261
|
+
}
|
|
2262
|
+
return;
|
|
2263
|
+
}
|
|
2264
|
+
if (key.startsWith(CONFIRM_NOOP_PREFIX))
|
|
2265
|
+
return;
|
|
2182
2266
|
// ── ExitPlanMode 计划审批卡: 在普通 approval 解码前匹配 PLAN| 前缀。
|
|
2183
2267
|
const planClick = decodePlanKey(key);
|
|
2184
2268
|
if (planClick) {
|