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.
Files changed (112) hide show
  1. package/CLAUDE.md +9 -6
  2. package/README.md +5 -5
  3. package/config.example.jsonc +12 -0
  4. package/dist/cli/init.js +2 -1
  5. package/dist/cli/init.js.map +1 -1
  6. package/dist/daemon/approval.js +90 -6
  7. package/dist/daemon/approval.js.map +1 -1
  8. package/dist/daemon/chat-log.js +6 -1
  9. package/dist/daemon/chat-log.js.map +1 -1
  10. package/dist/daemon/chat-name.js +15 -0
  11. package/dist/daemon/chat-name.js.map +1 -1
  12. package/dist/daemon/config-api.js +265 -70
  13. package/dist/daemon/config-api.js.map +1 -1
  14. package/dist/daemon/danger.js +15 -0
  15. package/dist/daemon/danger.js.map +1 -1
  16. package/dist/daemon/detail.js +49 -0
  17. package/dist/daemon/detail.js.map +1 -1
  18. package/dist/daemon/handoff.js +12 -5
  19. package/dist/daemon/handoff.js.map +1 -1
  20. package/dist/daemon/idle-nudge.js +55 -0
  21. package/dist/daemon/idle-nudge.js.map +1 -0
  22. package/dist/daemon/inbound.js +19 -14
  23. package/dist/daemon/inbound.js.map +1 -1
  24. package/dist/daemon/index.js +1509 -259
  25. package/dist/daemon/index.js.map +1 -1
  26. package/dist/daemon/jobs.js +180 -32
  27. package/dist/daemon/jobs.js.map +1 -1
  28. package/dist/daemon/last-response.js +15 -0
  29. package/dist/daemon/last-response.js.map +1 -1
  30. package/dist/daemon/memory-steward.js +124 -68
  31. package/dist/daemon/memory-steward.js.map +1 -1
  32. package/dist/daemon/mirror-bridge.js +506 -124
  33. package/dist/daemon/mirror-bridge.js.map +1 -1
  34. package/dist/daemon/mirror-store.js.map +1 -1
  35. package/dist/daemon/model-select.js +102 -0
  36. package/dist/daemon/model-select.js.map +1 -1
  37. package/dist/daemon/notices.js +147 -33
  38. package/dist/daemon/notices.js.map +1 -1
  39. package/dist/daemon/peers.js +261 -124
  40. package/dist/daemon/peers.js.map +1 -1
  41. package/dist/daemon/pending-items.js +171 -0
  42. package/dist/daemon/pending-items.js.map +1 -0
  43. package/dist/daemon/receipts.js +428 -80
  44. package/dist/daemon/receipts.js.map +1 -1
  45. package/dist/daemon/route.js +133 -19
  46. package/dist/daemon/route.js.map +1 -1
  47. package/dist/daemon/spawn-tmux.js +24 -13
  48. package/dist/daemon/spawn-tmux.js.map +1 -1
  49. package/dist/daemon/steward-guard.js +32 -0
  50. package/dist/daemon/steward-guard.js.map +1 -0
  51. package/dist/daemon/task-registry.js +1 -1
  52. package/dist/daemon/task-registry.js.map +1 -1
  53. package/dist/daemon/tasks.js +12 -4
  54. package/dist/daemon/tasks.js.map +1 -1
  55. package/dist/daemon/usage.js +4 -11
  56. package/dist/daemon/usage.js.map +1 -1
  57. package/dist/daemon/wizard-memory.js +36 -4
  58. package/dist/daemon/wizard-memory.js.map +1 -1
  59. package/dist/daemon/wizard.js +174 -87
  60. package/dist/daemon/wizard.js.map +1 -1
  61. package/dist/mcp/server.js +209 -132
  62. package/dist/mcp/server.js.map +1 -1
  63. package/dist/shared/charter-view.js +35 -0
  64. package/dist/shared/charter-view.js.map +1 -0
  65. package/dist/shared/chat-http.js +134 -32
  66. package/dist/shared/chat-http.js.map +1 -1
  67. package/dist/shared/chat-render.js +6 -3
  68. package/dist/shared/chat-render.js.map +1 -1
  69. package/dist/shared/chat-view.js +17 -6
  70. package/dist/shared/chat-view.js.map +1 -1
  71. package/dist/shared/cli-backends.js +2 -0
  72. package/dist/shared/cli-backends.js.map +1 -1
  73. package/dist/shared/config-meta.js +91 -0
  74. package/dist/shared/config-meta.js.map +1 -0
  75. package/dist/shared/config-writer.js +5 -6
  76. package/dist/shared/config-writer.js.map +1 -1
  77. package/dist/shared/config.js +273 -294
  78. package/dist/shared/config.js.map +1 -1
  79. package/dist/shared/daemon-token.js +18 -0
  80. package/dist/shared/daemon-token.js.map +1 -0
  81. package/dist/shared/detail-render.js +233 -20
  82. package/dist/shared/detail-render.js.map +1 -1
  83. package/dist/shared/detail-store.js +33 -12
  84. package/dist/shared/detail-store.js.map +1 -1
  85. package/dist/shared/effort.js +11 -0
  86. package/dist/shared/effort.js.map +1 -0
  87. package/dist/shared/keepalive.js +5 -5
  88. package/dist/shared/keepalive.js.map +1 -1
  89. package/dist/shared/model-prices.js +258 -0
  90. package/dist/shared/model-prices.js.map +1 -0
  91. package/dist/shared/pricing.js +55 -0
  92. package/dist/shared/pricing.js.map +1 -0
  93. package/dist/shared/reminder.js +18 -4
  94. package/dist/shared/reminder.js.map +1 -1
  95. package/dist/shared/role-render.js +210 -8
  96. package/dist/shared/role-render.js.map +1 -1
  97. package/dist/shared/role-view.js +104 -26
  98. package/dist/shared/role-view.js.map +1 -1
  99. package/dist/shared/session-label.js +4 -0
  100. package/dist/shared/session-label.js.map +1 -1
  101. package/dist/shared/task-file.js +16 -1
  102. package/dist/shared/task-file.js.map +1 -1
  103. package/dist/shared/turn-state.js +24 -0
  104. package/dist/shared/turn-state.js.map +1 -0
  105. package/dist/shared/world.js +116 -13
  106. package/dist/shared/world.js.map +1 -1
  107. package/dist/svr/index.js +2 -1
  108. package/dist/svr/index.js.map +1 -1
  109. package/hooks/pre-tool-use.sh +15 -3
  110. package/package.json +1 -1
  111. package/web/chat.css +226 -74
  112. package/web/chat.js +1075 -370
@@ -1,86 +1,281 @@
1
- import { patchJsonc } from "../shared/config-writer.js";
2
- const KEYS = {
3
- allow_from: { path: ["wrc", "allowFrom"], type: "array" },
4
- approval_window: { path: ["approval", "windowMinutes"], type: "number" },
5
- approval_cache: { path: ["approval", "sessionCacheMinutes"], type: "number" },
6
- danger_skip: { path: ["approval", "danger", "skip"], type: "boolean" },
7
- danger_skip_all: { path: ["approval", "danger", "skipAll"], type: "boolean" },
8
- danger_enabled: { path: ["approval", "danger", "enabled"], type: "boolean" },
9
- // 枚举必须校验: 写进 jsonc 的非法值会让 daemon reload 时 zod 抛错起不来。
10
- approval_mode: { path: ["approval", "mode"], type: "string", enum: ["all", "danger"] },
11
- cwd: { path: ["wrc", "cwd"], type: "string" },
12
- default_chat: { path: ["defaultChat"], type: "string" },
13
- log_level: { path: ["daemon", "logLevel"], type: "string" },
14
- slash_ack_first_line: { path: ["wrc", "mirror", "slashAckFirstLine"], type: "boolean" },
15
- };
16
- const getNestedValue = (obj, path) => path.reduce((acc, k) => (acc && typeof acc === "object" ? acc[k] : undefined), obj);
17
- const setNestedValue = (obj, path, value) => {
18
- const parent = path.slice(0, -1).reduce((acc, k) => (acc && typeof acc === "object" ? acc[k] : undefined), obj);
19
- if (parent && typeof parent === "object") {
20
- parent[path[path.length - 1]] = value;
1
+ import { ConfigSchema, TIERS, configIssues, parseConfigText, readSecrets } from "../shared/config.js";
2
+ import { parseEffort } from "../shared/effort.js";
3
+ import { previewPatch, readJsoncText } from "../shared/config-writer.js";
4
+ import { childKeys, isBranch, parsePath, resolve, toJsonPath, typeOf, writeGate, } from "../shared/config-meta.js";
5
+ import { z } from "zod";
6
+ const isObj = (v) => !!v && typeof v === "object" && !Array.isArray(v);
7
+ const getIn = (obj, path) => path.reduce((acc, k) => (acc && typeof acc === "object" ? acc[k] : undefined), obj);
8
+ /** 把 `next` 在 `path` 处的值装进 `obj` (原地): 路上缺的祖先 (记录里的新键、没写过的节) 从最浅的那一层
9
+ * 整段取 `next` 的 —— 连同 schema 默认一起补全; 取到 undefined (unset 掉的记录项) 就删键, 不留一个值为
10
+ * undefined 的键给 `Object.entries` 读。 */
11
+ const putFrom = (obj, path, next) => {
12
+ const depth = path.findIndex((_, i) => i < path.length - 1 && !(isObj(getIn(obj, path.slice(0, i + 1))) || Array.isArray(getIn(obj, path.slice(0, i + 1)))));
13
+ const at = depth < 0 ? path : path.slice(0, depth + 1);
14
+ const parent = getIn(obj, at.slice(0, -1));
15
+ const key = at[at.length - 1];
16
+ const value = getIn(next, at);
17
+ if (value === undefined)
18
+ delete parent[key];
19
+ else
20
+ parent[key] = value;
21
+ };
22
+ // 默认值从 schema 解析一份空配置得来, 而不是读字段自己的 default: `models.tiers.light.model`
23
+ // 的字段默认是 "", 真默认 "haiku" 写在上一层的 `.default({...})` 里。
24
+ let defaults;
25
+ const defaultsOf = () => (defaults ??= ConfigSchema.parse({ bot: { botId: "-", secret: "-" } }));
26
+ const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
27
+ const show = (v) => (v === undefined ? "—" : JSON.stringify(v));
28
+ const clip = (s, n) => (s.length > n ? `${s.slice(0, n - 1)}…` : s);
29
+ // ── 可见性 ──────────────────────────────────────────────────────────────
30
+ // hidden 两个来源: schema 标的 (bot / 口令), 以及 secrets.json 里实际出现的任何叶子 ——
31
+ // 那里的值叠在 config.jsonc 之上, 读出来是泄密, 写进 config.jsonc 也会被它盖掉。
32
+ const fromSecrets = (path, secrets) => path.some((_, i) => { const v = getIn(secrets, path.slice(0, i + 1)); return v !== undefined && !isObj(v); });
33
+ const visible = (r, secrets) => r.gate !== "hidden" && !fromSecrets(r.path, secrets);
34
+ const APPLY_WORD = { hot: "热生效", reload: "需 reload" };
35
+ const GATE_WORD = { free: "wizard 可直接改", card: "改动要人在卡片上确认", hidden: "不可读写" };
36
+ const flags = (r) => `${writeGate(r) === "card" ? "✋" : ""}${r.apply === "reload" ? "↻" : ""}`;
37
+ const LEGEND = "✋ = 改动要人在卡片上点确认 · ↻ = 改完要 reload (`./cli/wezard.sh reload`) 才生效 · * = 当前值不同于默认";
38
+ // ── config_get ──────────────────────────────────────────────────────────
39
+ // 节 / 记录只报项数: 它们的子项各有各的值、默认与标记, 往下一层看。节上的 ✋ 只在整节都要
40
+ // 确认时才挂 (节自己的 gate), 混着的节 (wrc) 由子项各自标。
41
+ const row = (cfg, r) => {
42
+ const key = r.path[r.path.length - 1];
43
+ const cur = getIn(cfg, r.path);
44
+ const def = getIn(defaultsOf(), r.path);
45
+ const many = isBranch(r.core) || r.core instanceof z.ZodRecord;
46
+ const star = !many && !same(cur, def) ? "*" : " ";
47
+ const size = isBranch(r.core) ? childKeys(r.core).length : isObj(cur) ? Object.keys(cur).length : 0;
48
+ const val = many ? `${size} 项` : `= ${clip(show(cur), 80)}${star === "*" ? ` (默认 ${clip(show(def), 40)})` : ""}`;
49
+ const mark = isBranch(r.core) ? (r.gate === "card" ? "✋" : "") : flags(r);
50
+ return `${star} ${[`${key} ${typeOf(r.core)} ${val}`, mark, r.desc].filter(Boolean).join(" ")}`;
51
+ };
52
+ const leaf = (cfg, r) => [
53
+ r.path.join("."),
54
+ ` 说明: ${r.desc || "—"}`,
55
+ ` 类型: ${typeOf(r.core)}${r.optional ? " (可不设)" : ""}`,
56
+ ` 当前: ${show(getIn(cfg, r.path))}`,
57
+ ` 默认: ${show(getIn(defaultsOf(), r.path))}`,
58
+ ` 生效: ${r.apply === "hot" ? "热生效, 改完即用" : "需 reload 才生效 (守护进程启动时读一次)"}`,
59
+ ` 权限: ${GATE_WORD[writeGate(r)]}`,
60
+ ].join("\n");
61
+ // 记录 / 数组: 子项是数据而不是 schema 字段, 按数据列。
62
+ const entries = (cfg, r) => {
63
+ const v = getIn(cfg, r.path);
64
+ const pairs = Array.isArray(v) ? v.map((x, i) => [String(i), x]) : isObj(v) ? Object.entries(v) : [];
65
+ return pairs.length ? pairs.map(([k, x]) => ` ${k} = ${clip(show(x), 120)}`) : [" (空)"];
66
+ };
67
+ const missing = (path, secrets) => {
68
+ const at = [...path.keys()].reverse().map((i) => path.slice(0, i)).find((p) => resolve(ConfigSchema, p));
69
+ const base = resolve(ConfigSchema, at ?? []);
70
+ const kids = childKeys(base.core).filter((k) => visible(resolve(ConfigSchema, [...base.path, k]), secrets));
71
+ return `没有 \`${path.join(".")}\`${kids.length ? `; \`${base.path.join(".") || "<root>"}\` 下有: ${kids.join(", ")}` : ""}`;
72
+ };
73
+ /** `path` 这一层的文本: 节点自己一行说明, 再逐项列子项 (或叶子详情)。`evidence` 挂额外依据 (用量等)。 */
74
+ export const configGet = (cfg, sourcePath, path, evidence = () => []) => {
75
+ const p = parsePath(path);
76
+ const secrets = readSecrets();
77
+ const r = resolve(ConfigSchema, p);
78
+ if (!r)
79
+ return { ok: false, reason: missing(p, secrets) };
80
+ if (!visible(r, secrets))
81
+ return { ok: false, reason: `\`${p.join(".")}\` 不可读` };
82
+ const extra = evidence(p);
83
+ const tail = [...(extra.length ? ["", "依据:", ...extra.map((l) => ` ${l}`)] : []), "", LEGEND];
84
+ if (!isBranch(r.core)) {
85
+ const body = r.core instanceof z.ZodRecord || r.core instanceof z.ZodArray
86
+ ? [`${p.join(".")} ${typeOf(r.core)} ${flags(r)} ${r.desc}`, ...entries(cfg, r), "", leaf(cfg, r).split("\n").slice(4).join("\n")]
87
+ : [leaf(cfg, r)];
88
+ return { ok: true, text: [...body, ...tail].join("\n") };
89
+ }
90
+ const head = p.length
91
+ ? `${p.join(".")} · ${r.desc}${r.gate === "card" ? " ✋" : ""}`
92
+ : `wezard 配置 (${sourcePath}) —— config_get({path}) 逐层展开; config_set({path, value, dryRun:true}) 先看 diff 再改`;
93
+ const kids = childKeys(r.core)
94
+ .map((k) => resolve(ConfigSchema, [...p, k]))
95
+ .filter((c) => visible(c, secrets))
96
+ .map((c) => row(cfg, c));
97
+ return { ok: true, text: [head, ...kids, ...tail].join("\n") };
98
+ };
99
+ // 字符串之外的类型收到字符串时先试 JSON.parse —— MCP 那头模型常把 `true` / `5` / `["a"]` 写成字符串。
100
+ const coerce = (core, v) => {
101
+ if (typeof v !== "string" || core instanceof z.ZodString || core instanceof z.ZodEnum)
102
+ return v;
103
+ try {
104
+ return JSON.parse(v);
21
105
  }
106
+ catch {
107
+ return v;
108
+ }
109
+ };
110
+ // 行级 diff: 掐掉公共首尾, 中间段前后各留一行上下文。jsonc-parser 的改动总是一段连续区域。
111
+ const lineDiff = (a, b) => {
112
+ const x = a.split("\n"), y = b.split("\n");
113
+ let s = 0;
114
+ while (s < x.length && s < y.length && x[s] === y[s])
115
+ s++;
116
+ let e = 0;
117
+ while (e < x.length - s && e < y.length - s && x[x.length - 1 - e] === y[y.length - 1 - e])
118
+ e++;
119
+ const ctx = (l) => (l === undefined ? [] : [` ${l}`]);
120
+ return [
121
+ ...ctx(x[s - 1]),
122
+ ...x.slice(s, x.length - e).map((l) => `- ${l}`),
123
+ ...y.slice(s, y.length - e).map((l) => `+ ${l}`),
124
+ ...ctx(x[x.length - e]),
125
+ ].join("\n");
126
+ };
127
+ const parseOp = (op) => op === undefined || op === "" ? "set" : ["set", "add", "remove", "unset"].find((o) => o === op);
128
+ /** 算一次写入的全部后果而不落盘: 校验 (整份配置过 zod)、改前改后、jsonc diff、gate / apply。 */
129
+ export const planSet = (cfg, sourcePath, req) => {
130
+ const p = parsePath(req.path);
131
+ if (!p.length)
132
+ return { ok: false, reason: "path 必填, 例如 'models.tiers.light.model'; 不知道有哪些就先 config_get()" };
133
+ const secrets = readSecrets();
134
+ const r = resolve(ConfigSchema, p);
135
+ if (!r)
136
+ return { ok: false, reason: missing(p, secrets) };
137
+ const gate = writeGate(r);
138
+ if (gate === "hidden" || getIn(secrets, p) !== undefined || fromSecrets(p, secrets))
139
+ return { ok: false, reason: `\`${p.join(".")}\` 不可写` };
140
+ const op = parseOp(req.op);
141
+ if (!op)
142
+ return { ok: false, reason: `op 只能是 set / add / remove / unset, 收到 ${req.op}` };
143
+ if ((op === "set" || op === "add" || op === "remove") && req.value === undefined)
144
+ return { ok: false, reason: `op=${op} 要带 value` };
145
+ // 改前取盘上那份 (叠 secrets 后解析) 而不是活的 cfg: reload 项写进文件后活值并不跟着变,
146
+ // 拿活值当 before 会把「文件里已经是 X」说成「还是旧值」。
147
+ const text = readJsoncText(sourcePath);
148
+ const onDisk = parseConfigText(text);
149
+ const before = getIn(onDisk.success ? onDisk.data : cfg, p);
150
+ const value = (() => {
151
+ if (op === "unset")
152
+ return undefined;
153
+ if (op === "set")
154
+ return coerce(r.core, req.value);
155
+ const el = r.core.element;
156
+ const items = (Array.isArray(req.value) ? req.value : [req.value]).map((x) => coerce(el, x));
157
+ const cur = Array.isArray(before) ? before : [];
158
+ return op === "add"
159
+ ? [...cur, ...items.filter((x) => !cur.some((c) => same(c, x)))]
160
+ : cur.filter((c) => !items.some((x) => same(c, x)));
161
+ })();
162
+ if ((op === "add" || op === "remove") && !(r.core instanceof z.ZodArray))
163
+ return { ok: false, reason: `\`${p.join(".")}\` 不是数组, add / remove 用不了` };
164
+ const jsonPath = toJsonPath(ConfigSchema, p);
165
+ const next = previewPatch(text, [{ path: jsonPath, value }]);
166
+ const parsed = parseConfigText(next);
167
+ if (!parsed.success)
168
+ return { ok: false, reason: `校验没过, 没写:\n${configIssues(parsed.error)}` };
169
+ const after = getIn(parsed.data, p);
170
+ return {
171
+ ok: true, path: p, jsonPath, value, gate, apply: r.apply, before, after,
172
+ changed: next !== text,
173
+ diff: lineDiff(text, next),
174
+ next: parsed.data,
175
+ };
176
+ };
177
+ /** 计划的文本形态: dryRun 的回包、确认卡的正文、写完的回执共用。 */
178
+ export const renderPlan = (pl) => [
179
+ `${pl.path.join(".")}: ${clip(show(pl.before), 300)} → ${clip(show(pl.after), 300)}`,
180
+ `${GATE_WORD[pl.gate]} · ${APPLY_WORD[pl.apply]}`,
181
+ ...(pl.changed ? ["", pl.diff] : ["(文件不变)"]),
182
+ ].join("\n");
183
+ /** 落盘之后把新值装进活的 cfg —— 只对 hot 项: reload 项半途换值, 会让启动时抓住旧值的模块与现读的模块各执一词。 */
184
+ export const applyHot = (cfg, pl) => {
185
+ if (pl.apply === "hot")
186
+ putFrom(cfg, pl.path, pl.next);
187
+ };
188
+ /** 只装了这一处改动的顶层节 (深拷贝, 不碰活的 cfg) —— 同节里别人手改了、还没生效的 reload 项不跟着进来。 */
189
+ export const patchedTop = (cfg, pl) => {
190
+ const key = pl.path[0];
191
+ const box = { [key]: structuredClone(cfg[key]) };
192
+ putFrom(box, pl.path, pl.next);
193
+ return box[key];
22
194
  };
23
- const parseValue = (raw, type) => {
195
+ const LEGACY = {
196
+ allow_from: { path: "wrc.allowFrom", type: "array" },
197
+ approval_window: { path: "approval.windowMinutes", type: "number" },
198
+ approval_cache: { path: "approval.sessionCacheMinutes", type: "number" },
199
+ danger_skip: { path: "approval.danger.skip", type: "boolean" },
200
+ danger_skip_all: { path: "approval.danger.skipAll", type: "boolean" },
201
+ danger_enabled: { path: "approval.danger.enabled", type: "boolean" },
202
+ approval_mode: { path: "approval.mode", type: "string" },
203
+ cwd: { path: "wrc.cwd", type: "string" },
204
+ default_chat: { path: "defaultChat", type: "string" },
205
+ log_level: { path: "daemon.logLevel", type: "string" },
206
+ slash_ack_first_line: { path: "wrc.mirror.slashAckFirstLine", type: "boolean" },
207
+ };
208
+ const legacyValue = (raw, type) => {
24
209
  switch (type) {
25
210
  case "number": {
26
211
  const n = Number(raw);
27
- return Number.isFinite(n) ? n : undefined;
212
+ return Number.isFinite(n) ? n : raw;
28
213
  }
29
214
  case "boolean": return raw === "true" || raw === "1";
30
215
  case "array": try {
31
- const a = JSON.parse(raw);
32
- return Array.isArray(a) ? a : undefined;
216
+ return JSON.parse(raw);
33
217
  }
34
218
  catch {
35
- return undefined;
219
+ return raw;
36
220
  }
37
221
  default: return raw;
38
222
  }
39
223
  };
40
- export const configSet = (cfg, sourcePath, key, value, action) => {
41
- if (!key || !KEYS[key])
42
- return { ok: false, reason: `unknown key "${key}". valid: ${Object.keys(KEYS).join(", ")}` };
43
- const spec = KEYS[key];
44
- const act = (action === "add" || action === "remove") ? action : "set";
45
- const before = getNestedValue(cfg, spec.path);
46
- if (spec.type === "array") {
47
- const arr = Array.isArray(before) ? before.slice() : [];
48
- let after;
49
- if (act === "add") {
50
- const item = String(value ?? "");
51
- if (!item)
52
- return { ok: false, reason: "value required for add" };
53
- after = arr.includes(item) ? arr : [...arr, item];
54
- }
55
- else if (act === "remove") {
56
- const item = String(value ?? "");
57
- if (!item)
58
- return { ok: false, reason: "value required for remove" };
59
- after = arr.filter((x) => x !== item);
60
- }
61
- else {
62
- const parsed = parseValue(String(value ?? "[]"), "array");
63
- if (!parsed)
64
- return { ok: false, reason: "value must be a JSON array for set on array keys" };
65
- after = parsed;
66
- }
67
- patchJsonc(sourcePath, [{ path: spec.path, value: after }]);
68
- setNestedValue(cfg, spec.path, after);
69
- return { ok: true, key, before: arr, after };
70
- }
71
- const parsed = parseValue(String(value ?? ""), spec.type);
72
- if (parsed === undefined)
73
- return { ok: false, reason: `cannot parse "${value}" as ${spec.type}` };
74
- if (spec.enum && !spec.enum.includes(String(parsed))) {
75
- return { ok: false, reason: `invalid value "${parsed}". valid: ${spec.enum.join("|")}` };
76
- }
77
- patchJsonc(sourcePath, [{ path: spec.path, value: parsed }]);
78
- setNestedValue(cfg, spec.path, parsed);
79
- return { ok: true, key, before, after: parsed };
80
- };
81
- export const configGet = (cfg, key) => {
82
- if (!key || !KEYS[key])
83
- return { ok: false, reason: `unknown key "${key}". valid: ${Object.keys(KEYS).join(", ")}` };
84
- return { ok: true, key, value: getNestedValue(cfg, KEYS[key].path) };
224
+ export const fromLegacy = (key, value, action) => {
225
+ const spec = LEGACY[key];
226
+ if (!spec)
227
+ return { ok: false, reason: `unknown key "${key}". valid: ${Object.keys(LEGACY).join(", ")}` };
228
+ const raw = String(value ?? "");
229
+ return action === "add" || action === "remove"
230
+ ? { path: spec.path, op: action, value: raw }
231
+ : { path: spec.path, op: "set", value: legacyValue(raw, spec.type) };
232
+ };
233
+ export const legacyGet = (cfg, key) => {
234
+ const spec = key ? LEGACY[key] : undefined;
235
+ return spec ? { ok: true, key: key, value: getIn(cfg, parsePath(spec.path)) } : { ok: false, reason: `unknown key "${key}". valid: ${Object.keys(LEGACY).join(", ")}` };
236
+ };
237
+ /** spawn / clone 的 {cli, model, effort}: 显式给的 > 档里写的 > 不传。clone 换不了 CLI —— fork 只能在同一后端里。 */
238
+ export const pickTier = (models, tier, explicit, inherit) => {
239
+ const name = (tier ?? "").trim();
240
+ if (name && !TIERS.includes(name))
241
+ return { ok: false, reason: `tier 只有这几档: ${TIERS.join(" / ")}` };
242
+ const t = name ? models.tiers[name] : undefined;
243
+ const one = (x, y) => x !== undefined ? [x, "explicit"] : y !== undefined ? [y, "tier"] : [undefined, "inherit"];
244
+ const tierCli = inherit ? undefined : t?.cli;
245
+ const [cli, viaCli] = one(explicit.cli, tierCli);
246
+ const [model, viaModel] = one(explicit.model?.trim() || undefined, t?.model.trim() || undefined);
247
+ const [effort, viaEffort] = one(explicit.effort, parseEffort(t?.effort));
248
+ return {
249
+ ok: true,
250
+ ...(name ? { tier: name } : {}),
251
+ cli, model, effort,
252
+ via: { cli: viaCli, model: viaModel, effort: viaEffort },
253
+ ...(inherit && t?.cli ? { note: `档位里的 cli (${t.cli}) 没用上: 克隆只能留在被克隆者的 CLI 上` } : {}),
254
+ };
255
+ };
256
+ // 口语模型名的每个词都出现在 id 里就算: 'sonnet 5' ⊂ claude-sonnet-5-5。
257
+ const matches = (want, id) => {
258
+ const words = want.toLowerCase().split(/[\s._-]+/).filter(Boolean);
259
+ return words.length > 0 && words.every((w) => id.toLowerCase().includes(w));
260
+ };
261
+ const sumFor = (want, m) => [...m].filter(([id]) => matches(want, id)).reduce((a, [, x]) => ({ tokens: a.tokens + x.tokens, cost: a.cost + x.cost }), { tokens: 0, cost: 0 });
262
+ export const tierEvidence = (models, path, usage, holders, fmt) => {
263
+ if (path[0] !== "models")
264
+ return [];
265
+ const want = path[1] === "tiers" && path[2] ? [path[2]] : path[1] === "router" ? ["router"] : path[1] === "tiers" || !path[1] ? [...TIERS, ...(path[1] ? [] : ["router"])] : [];
266
+ const rows = want.filter((n) => n === "router" || TIERS.includes(n));
267
+ if (!rows.length)
268
+ return [];
269
+ const u = usage();
270
+ const line = (name) => {
271
+ const spec = name === "router" ? models.router : models.tiers[name];
272
+ const label = `${spec.model || "CLI 默认"}${spec.effort ? `·${spec.effort}` : ""}`;
273
+ if (!spec.model)
274
+ return `${name} (${label}): 用的是 CLI 默认模型, 按模型统计不出来`;
275
+ const w = sumFor(spec.model, u.week), d = sumFor(spec.model, u.today);
276
+ const held = name === "router" ? "" : ` · 名册里记作这一档的 ${holders(name)} 个`;
277
+ return `${name} (${label}): 本周 ${fmt.tokens(w.tokens)} tok ${fmt.cost(w.cost)} · 今日 ${fmt.tokens(d.tokens)} tok ${fmt.cost(d.cost)}${held}`;
278
+ };
279
+ return [...rows.map(line), "(用量按模型统计, 同一模型的档外用量也算在内)"];
85
280
  };
86
281
  //# sourceMappingURL=config-api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-api.js","sourceRoot":"","sources":["../../daemon/config-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-api.js","sourceRoot":"","sources":["../../daemon/config-api.ts"],"names":[],"mappings":"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"}
@@ -169,4 +169,19 @@ export const dangerOf = (cfg, toolName, toolInput) => {
169
169
  cmds.reduce((acc, c) => acc ?? firstHit(cmdRules, c), undefined) ??
170
170
  strings(toolInput).filter(pathish).reduce((acc, s) => acc ?? firstHit(pathRules, s), undefined));
171
171
  };
172
+ // 入参里任意深度的 key=value 对 (DeferExecuteTool 之类的包装可能把真实入参套一层)。
173
+ const deepEntries = (v) => v && typeof v === "object"
174
+ ? Object.entries(v).flatMap(([k, x]) => [[k, x], ...deepEntries(x)])
175
+ : [];
176
+ /** wezard 自家工具里改全机设置的「写」: set_model scope:"default"。hook 的自家工具白名单把它
177
+ * 放回审批; 这里让它**必发卡** —— 不吃 danger 的两个开关、⏱窗口和会话缓存。只有 skipAll /
178
+ * bypass (人主动选的全关) 压得过它。config_set 不在这里: 它按路径分级, 放权项由守护进程自己
179
+ * 推确认卡 (/config/set), 那张卡连 skipAll 都压不过; 再在 hook 拦一道就成了一次改动两张卡。 */
180
+ export const selfConfigWriteOf = (toolName, toolInput) => {
181
+ const tool = /wezard__(set_model)$/.exec(toolName)?.[1];
182
+ const kv = tool ? deepEntries(toolInput) : [];
183
+ if (tool === "set_model" && kv.some(([k, v]) => k === "scope" && v === "default"))
184
+ return { rule: "改全局默认模型 (set_model scope:default)" };
185
+ return undefined;
186
+ };
172
187
  //# sourceMappingURL=danger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"danger.js","sourceRoot":"","sources":["../../daemon/danger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"danger.js","sourceRoot":"","sources":["../../daemon/danger.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import { hostname } from "node:os";
8
8
  import { resolvePublicHost } from "../shared/lan-ip.js";
9
9
  import { baseOfKey } from "../shared/session-label.js";
10
10
  import { wizardStore } from "./wizard.js";
11
+ import { isKeepaliveShape } from "../shared/keepalive.js";
11
12
  import { createDetailStore, } from "../shared/detail-store.js";
12
13
  import { renderDetailPage, renderNotFound } from "../shared/detail-render.js";
13
14
  import { createChatRoutes, chatRouteTable, CHAT_ROUTE_KEYS } from "../shared/chat-http.js";
@@ -47,12 +48,21 @@ const pushFacts = async () => {
47
48
  body: JSON.stringify({ source: factsSource(), facts }),
48
49
  }).then((r) => r.ok, () => false); // 同 forwardToRemote: 远端挂了不该影响本机
49
50
  };
51
+ // 聊天票据是长期凭据, 却只在造出来那一刻推过一次: 远端换过地址 (lisct → 本机 svr)、
52
+ // 或那一下 svr 恰好不在, 它就永远缺席 —— 链接在本机开得了, 在 svr 上「未找到该会话」。
53
+ // 所以每次 (重新) 连上远端都把全部票据补推一遍; 一个聊天一条, 量可以忽略, svr 侧 put 幂等。
54
+ // 宪章同理: 一个 wizard 一份、只在出生那刻推一次, 错过了就要等它下次重生。
55
+ const forwardTickets = () => store?.list().filter((r) => r.kind === "chat" || r.kind === "charter").forEach(forwardToRemote);
50
56
  // 两个前置条件 (配了远端、装上了 provider) 谁先到都可能 —— 两处都调一次, 起过就不再起。
51
57
  const startFactsForward = () => {
52
58
  if (factsTimer || !remoteBase || !worldFacts)
53
59
  return;
60
+ let linked = false;
54
61
  const tick = () => {
55
62
  void pushFacts().then((ok) => {
63
+ if (ok && !linked)
64
+ forwardTickets();
65
+ linked = ok;
56
66
  factsTimer = setTimeout(tick, ok ? FACTS_PUSH_MS : FACTS_RETRY_MS);
57
67
  factsTimer.unref();
58
68
  });
@@ -131,6 +141,22 @@ export const recordPost = (rec) => {
131
141
  store.put(full);
132
142
  forwardToRemote(full);
133
143
  };
144
+ // 宪章: 每次渲染都是一次 spawn 要压进系统提示的那份 —— 记下来, rolepage 才看得见它在吃多少上下文。
145
+ export const recordCharter = (target, text, lineage) => {
146
+ if (!store || !target || !text.trim())
147
+ return;
148
+ const full = { kind: "charter", id: `k${randomBytes(12).toString("base64url")}`, createdAt: Date.now(), target, text, ...(lineage ? { lineage } : {}) };
149
+ store.put(full);
150
+ forwardToRemote(full);
151
+ };
152
+ /** 这条记录出现之前就已经活着的 wizard: 从 spawn 落在盘上的那份补一条, 已经有了就不动。 */
153
+ export const backfillCharter = (target, text, at) => {
154
+ if (!store || store.list().some((r) => r.kind === "charter" && r.target === target))
155
+ return;
156
+ const full = { kind: "charter", id: `k${randomBytes(12).toString("base64url")}`, createdAt: at, target, text };
157
+ store.put(full);
158
+ forwardToRemote(full);
159
+ };
134
160
  // Brief 模式聚合详情: 一个 turn 的时间线。startTurn 建空壳,item 增量 append,close 收尾。
135
161
  // 每次变更都完整重推整条 record 给 remote svr — svr 侧存的是 last-write-wins 快照。
136
162
  export const recordTurnStart = (rec) => {
@@ -153,6 +179,18 @@ export const recordTurnQuery = (id, userQuery, same) => {
153
179
  if (full)
154
180
  forwardToRemote(full);
155
181
  };
182
+ /** 一轮跑着时插进来的一句。同一句 (同时刻同正文) 只记一次 —— tail 重放不该把它记成两句。 */
183
+ export const recordTurnInject = (id, inj) => {
184
+ if (!store)
185
+ return;
186
+ const r = store.get(id);
187
+ if (r?.kind !== "turn" || (r.injects ?? []).some((x) => x.ts === inj.ts && x.body === inj.body))
188
+ return;
189
+ store.put({ ...r, injects: [...(r.injects ?? []), inj], updatedAt: Date.now() });
190
+ const full = store.get(id);
191
+ if (full)
192
+ forwardToRemote(full);
193
+ };
156
194
  export const recordTurnItem = (id, item) => {
157
195
  if (!store)
158
196
  return;
@@ -194,6 +232,17 @@ export const knowsToolUse = (toolUseId) => getDetail(toolUseId)?.kind === "tool"
194
232
  // 一个 wizard 名字背后的 rolepage 链接需要一张票据 —— `?id=` 既是凭据, 也是页面默认
195
233
  // 落点。从没跑过一轮的会话没有自己的票据, 返回 undefined。
196
234
  export const latestTurnIdFor = (target) => latestTurnId((r) => r.target === target);
235
+ /** 这个会话**当前这一轮**若是人开的 (有问话、没有同伴出处、不是保温 ping), 那句原话; 回执 / peer 轮 = 无。
236
+ * 管家开需求根单时记「需求原话」用: 取更早一轮的人话会把上一件事的话记到这件上。 */
237
+ export const currentHumanQueryOf = (target) => {
238
+ const id = latestTurnIdFor(target);
239
+ const r = id ? store?.get(id) : undefined;
240
+ return r?.kind === "turn" && r.userQuery && !r.from && !isKeepaliveShape(r.userQuery) ? r.userQuery : undefined;
241
+ };
242
+ /** 这个会话还开着的轮次 (子 agent 的不算), 新的在前 —— reload 时正跑着的那一轮旧进程没来得及收口, 也有排着还没接上的。 */
243
+ export const openTurnsOf = (target, sessionId) => (store?.list() ?? [])
244
+ .filter((r) => r.kind === "turn" && r.target === target && r.sessionId === sessionId && !r.closed && !r.agent)
245
+ .sort((x, y) => y.createdAt - x.createdAt);
197
246
  /** 这个会话最近一次有人开口的那一轮落下的频道印章。keepalive 轮不盖频道 (channel
198
247
  * 缺省); 没有问话也没有出处的续写轮只是沿用来的, 可能正是一次 reload 记错的, 都不算数。 */
199
248
  export const lastChannelOf = (target) => {