wezard 1.3.13 → 1.3.16
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/dist/daemon/approval.js +187 -6
- package/dist/daemon/approval.js.map +1 -1
- package/dist/daemon/mirror-bridge.js +142 -14
- package/dist/daemon/mirror-bridge.js.map +1 -1
- package/dist/daemon/quota.js +13 -13
- package/dist/daemon/quota.js.map +1 -1
- package/dist/shared/modal-pane.js +107 -12
- package/dist/shared/modal-pane.js.map +1 -1
- package/dist/shared/session-label.js +4 -1
- package/dist/shared/session-label.js.map +1 -1
- package/hooks/pre-tool-use.sh +23 -2
- package/package.json +1 -1
package/dist/daemon/quota.js
CHANGED
|
@@ -6,13 +6,13 @@ const stripAnsi = (s) =>
|
|
|
6
6
|
s.replace(/\[[0-9;?]*[A-Za-z]/g, "");
|
|
7
7
|
// Parse the `/usage` panel (Usage tab). Layout, per Claude Code v2.1.x:
|
|
8
8
|
// Current session
|
|
9
|
-
//
|
|
9
|
+
// ██████… 22% used
|
|
10
10
|
// Resets 11:10pm (Asia/Shanghai)
|
|
11
11
|
// Current week (all models)
|
|
12
|
-
//
|
|
12
|
+
// ██████… 82% used
|
|
13
13
|
// Resets Jul 10 at 2pm (Asia/Shanghai)
|
|
14
14
|
// What's contributing to your limits usage?
|
|
15
|
-
// 62% of your usage was at >150k context
|
|
15
|
+
// 62% of your usage was at >150k context ← factor headlines
|
|
16
16
|
// Section headers switch the bucket; "% used" / "Resets" lines fill it.
|
|
17
17
|
export const parseUsagePanel = (text) => {
|
|
18
18
|
const limits = [];
|
|
@@ -26,14 +26,14 @@ export const parseUsagePanel = (text) => {
|
|
|
26
26
|
limits.push(cur); cur = undefined; };
|
|
27
27
|
for (const raw of stripAnsi(text).split("\n")) {
|
|
28
28
|
const line = raw.trim();
|
|
29
|
-
// A factor headline ("N% of your usage
|
|
29
|
+
// A factor headline ("N% of your usage …") also ends any open limit block.
|
|
30
30
|
const fm = factor.exec(raw);
|
|
31
31
|
if (fm) {
|
|
32
32
|
close();
|
|
33
33
|
factors.push(`${fm[1]}%${fm[2]}`.replace(/\s+/g, " ").trim());
|
|
34
34
|
continue;
|
|
35
35
|
}
|
|
36
|
-
// A "Current
|
|
36
|
+
// A "Current …" line with no % is a new limit header (generic over
|
|
37
37
|
// session / week (all models) / week (<model>) / any future bucket).
|
|
38
38
|
const hm = header.exec(line);
|
|
39
39
|
if (hm && !pctUsed.test(line) && !/resets/i.test(line)) {
|
|
@@ -138,17 +138,17 @@ export const captureQuota = async (cfg, log) => {
|
|
|
138
138
|
};
|
|
139
139
|
const bar20 = (pct) => {
|
|
140
140
|
const n = Math.max(0, Math.min(20, Math.round((pct / 100) * 20)));
|
|
141
|
-
return "
|
|
141
|
+
return "█".repeat(n) + "░".repeat(20 - n);
|
|
142
142
|
};
|
|
143
|
-
// Map the raw panel label to a WeCom heading. Generic: "session"
|
|
144
|
-
// "week (X)"
|
|
143
|
+
// Map the raw panel label to a WeCom heading. Generic: "session" → 5h window,
|
|
144
|
+
// "week (X)" → 本周·X, "week" → 本周, anything else passes through verbatim so a
|
|
145
145
|
// future limit bucket still renders.
|
|
146
146
|
const headingFor = (label) => {
|
|
147
147
|
if (/^session\b/i.test(label))
|
|
148
|
-
return "
|
|
148
|
+
return "⏰ 当前 5h 窗口";
|
|
149
149
|
const wk = /^week\s*(?:\(([^)]*)\))?/i.exec(label);
|
|
150
150
|
if (wk)
|
|
151
|
-
return wk[1] ?
|
|
151
|
+
return wk[1] ? `🗓️ 本周 · ${wk[1]}` : "🗓️ 本周";
|
|
152
152
|
return `📊 ${label}`;
|
|
153
153
|
};
|
|
154
154
|
export const renderQuotaReport = (r) => {
|
|
@@ -159,14 +159,14 @@ export const renderQuotaReport = (r) => {
|
|
|
159
159
|
out.push(` 重置: ${l.resets}`);
|
|
160
160
|
}
|
|
161
161
|
if (r.limits.length === 0) {
|
|
162
|
-
out.push("", "⚠️
|
|
162
|
+
out.push("", "⚠️ 未能从 /usage 面板读到额度数字");
|
|
163
163
|
if (r.raw)
|
|
164
164
|
out.push("```", r.raw.split("\n").filter((l) => l.trim()).slice(0, 12).join("\n"), "```");
|
|
165
165
|
}
|
|
166
166
|
if (r.factors.length) {
|
|
167
|
-
out.push("", "🔎 额度构成 (
|
|
167
|
+
out.push("", "🔎 额度构成 (近24h · 本机本地会话估算)");
|
|
168
168
|
for (const f of r.factors.slice(0, 6))
|
|
169
|
-
out.push(`
|
|
169
|
+
out.push(` • ${f}`);
|
|
170
170
|
}
|
|
171
171
|
return out.join("\n");
|
|
172
172
|
};
|
package/dist/daemon/quota.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quota.js","sourceRoot":"","sources":["../../daemon/quota.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE5E,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAiBnF,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE;AACtC,4CAA4C;AAC5C,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;AAExC,wEAAwE;AACxE,oBAAoB;AACpB,
|
|
1
|
+
{"version":3,"file":"quota.js","sourceRoot":"","sources":["../../daemon/quota.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,22 +19,38 @@
|
|
|
19
19
|
// evidence — the normal input box renders one too — so the digit + dot +
|
|
20
20
|
// non-space content are all load-bearing.
|
|
21
21
|
const MODAL_OPTION_ROW = /^\s*[❯>]\s*\d+\.\s+\S/mu;
|
|
22
|
-
// Picker footer. Present on
|
|
22
|
+
// Picker footer. Present on Claude Code's pickers; CodeBuddy 的权限确认框没有它
|
|
23
|
+
// (快捷键提示内联在选项文案里, 如 "(escape)"), 由三件套形状判据补位, 见 isModalPane。
|
|
23
24
|
const MODAL_FOOTER = /Esc to cancel/iu;
|
|
24
25
|
// Title line of the confirm, surfaced in the failure reason so the user knows
|
|
25
26
|
// what is waiting for them. Optional — detection never depends on it.
|
|
26
|
-
|
|
27
|
+
// "Are you sure …?" 是 CodeBuddy 权限确认框的问句形态。
|
|
28
|
+
const MODAL_TITLE = /^\s*((?:(?:Do|Would|Should) you|Are you sure) .+?)\s*$/mu;
|
|
29
|
+
// CodeBuddy 把确认框画成整圈圆角边框, capture-pane 的每一行都带 `│` 前后缀,
|
|
30
|
+
// 所有行首锚定的判据 (选项行/标题/footer) 因此全部落空 —— 这正是 skipAll 哨兵
|
|
31
|
+
// 在 CodeBuddy 子代理 confirm 上失明的成因之一。判定前逐行剥掉行首行尾的框线;
|
|
32
|
+
// 内容中间的字面 `|` (管道) 不受影响。
|
|
33
|
+
const stripBoxBorders = (pane) => pane
|
|
34
|
+
.split("\n")
|
|
35
|
+
.map((l) => l.replace(/^\s*[│┃|]/u, "").replace(/\s*[│┃|]\s*$/u, ""))
|
|
36
|
+
.join("\n");
|
|
27
37
|
/**
|
|
28
|
-
* Conservative by construction:
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
38
|
+
* Conservative by construction: an option row PLUS a second independent piece of
|
|
39
|
+
* evidence must both be present — either the "Esc to cancel" footer (Claude
|
|
40
|
+
* Code 系全部 picker), or the permission three-piece option shape (裸 Yes +
|
|
41
|
+
* "Yes, and…" + No, CodeBuddy 的权限确认框没有 footer, 这是它唯一的稳定指纹)。
|
|
42
|
+
* A false positive blocks a legitimate message, which is worse than missing an
|
|
43
|
+
* exotic picker layout — pasted text cannot fabricate a highlighted numbered
|
|
44
|
+
* option row, and a message that merely lists "1. …" fabricates neither the
|
|
45
|
+
* footer nor the full Yes/Yes,and/No triple.
|
|
33
46
|
*/
|
|
34
47
|
export const isModalPane = (pane) => {
|
|
35
|
-
|
|
48
|
+
const p = stripBoxBorders(pane ?? "");
|
|
49
|
+
if (!p || !MODAL_OPTION_ROW.test(p))
|
|
36
50
|
return { modal: false };
|
|
37
|
-
|
|
51
|
+
if (!MODAL_FOOTER.test(p) && !hasPermissionShape(parseModalOptions(p)))
|
|
52
|
+
return { modal: false };
|
|
53
|
+
return { modal: true, title: p.match(MODAL_TITLE)?.[1] };
|
|
38
54
|
};
|
|
39
55
|
// ── 选项解析 + 代按 ────────────────────────────────────────────────────
|
|
40
56
|
// 只服务一个场景: 用户刚在企微卡片上显式批准了某次调用, 而 Claude Code 在 hook
|
|
@@ -50,8 +66,9 @@ export const isModalPane = (pane) => {
|
|
|
50
66
|
/** 编号选项行: "❯ 1. Yes" / " 2. No, and tell Claude…"。 */
|
|
51
67
|
const OPTION_ROW = /^\s*(?:[❯>]\s*)?(\d+)\.\s+(\S.*?)\s*$/u;
|
|
52
68
|
/** 权限确认框的标题形状。plan review("Would you like to proceed?")也在此列 —— 但它
|
|
53
|
-
* 的选项文案不是裸 "Yes", pickModalAnswer 会自然放弃, 不需要在标题上再排除。
|
|
54
|
-
|
|
69
|
+
* 的选项文案不是裸 "Yes", pickModalAnswer 会自然放弃, 不需要在标题上再排除。
|
|
70
|
+
* "Are you sure …" 是 CodeBuddy 权限确认框的问句。 */
|
|
71
|
+
const PERMISSION_TITLE = /^(?:(?:Do|Would|Should) you|Are you sure) /iu;
|
|
55
72
|
/**
|
|
56
73
|
* 抽出**最后一组**连续编号选项(从 1 开始)。
|
|
57
74
|
* 为什么取最后一组: 当前屏上可能同时留着一个已答完的旧确认(它的选项行还在),
|
|
@@ -60,7 +77,7 @@ const PERMISSION_TITLE = /^(?:Do|Would|Should) you /iu;
|
|
|
60
77
|
export const parseModalOptions = (pane) => {
|
|
61
78
|
const groups = [];
|
|
62
79
|
let cur = [];
|
|
63
|
-
for (const line of (pane ?? "").split("\n")) {
|
|
80
|
+
for (const line of stripBoxBorders(pane ?? "").split("\n")) {
|
|
64
81
|
const m = OPTION_ROW.exec(line);
|
|
65
82
|
if (!m) {
|
|
66
83
|
// 选项行之间允许空行(部分布局会插一行), 非空的非选项行才断组。
|
|
@@ -103,4 +120,82 @@ export const pickModalAnswer = (options, title) => {
|
|
|
103
120
|
return undefined;
|
|
104
121
|
return { index: plainYes.index, label: plainYes.label };
|
|
105
122
|
};
|
|
123
|
+
/** 权限确认框的三件套形状: 裸 "Yes" + "Yes, and/allow…" 放宽变体 + "No" 打头的
|
|
124
|
+
* 拒绝项齐全。AskUserQuestion 的是非题只有 Yes/No 两项、plan review 没有裸
|
|
125
|
+
* "Yes" —— 都天然不命中。既是哨兵选材的判据, 也是无 footer 布局 (CodeBuddy)
|
|
126
|
+
* 下 isModalPane 的 modal 证据。 */
|
|
127
|
+
const hasPermissionShape = (options) => options.some((o) => /^yes\s*$/iu.test(o.label))
|
|
128
|
+
&& options.some((o) => /^yes,\s/iu.test(o.label))
|
|
129
|
+
&& options.some((o) => /^no\b/iu.test(o.label));
|
|
130
|
+
/**
|
|
131
|
+
* skipAll 哨兵版选材 (mirror 主动读屏, 无任何审批上下文): 按**选项形状**
|
|
132
|
+
* (hasPermissionShape) 认权限确认框, 不看标题 —— CodeBuddy 的 MCP 权限 picker
|
|
133
|
+
* 标题只有一个 "Confirm", PERMISSION_TITLE 认不出。
|
|
134
|
+
* 仍只挑一次性裸 "Yes": 放宽静态权限的变体永不自动选中。挑不出返回 undefined。
|
|
135
|
+
*/
|
|
136
|
+
export const pickAutoAllowAnswer = (options) => {
|
|
137
|
+
if (!hasPermissionShape(options))
|
|
138
|
+
return undefined;
|
|
139
|
+
const plainYes = options.find((o) => /^yes\s*$/iu.test(o.label));
|
|
140
|
+
if (!plainYes)
|
|
141
|
+
return undefined;
|
|
142
|
+
return { index: plainYes.index, label: plainYes.label };
|
|
143
|
+
};
|
|
144
|
+
const CONFIRM_HEADER = /^\s*Confirm\b(?:\s*[·:]\s*(@?\S+))?/u;
|
|
145
|
+
// 框顶线 / 分隔线: 只由框线字符与空白组成的行。空行也命中 (正文为空时继续上溯)。
|
|
146
|
+
const BOX_RULE = /^[\s─━╭╮╰╯┌┐└┘├┤┬┴═║╔╗╚╝]*$/u;
|
|
147
|
+
const CONFIRM_QUESTION = /^\s*(?:(?:Do|Would|Should) you|Are you sure)\b.*\?\s*$/iu;
|
|
148
|
+
export const parseConfirmContext = (pane) => {
|
|
149
|
+
const lines = stripBoxBorders(pane ?? "").split("\n");
|
|
150
|
+
// 正文的下界 = 最后一组选项的 "1." 行; 上界 = Confirm 头 / 框线(正文已开始时)。
|
|
151
|
+
let firstOpt = lines.length;
|
|
152
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
153
|
+
if (/^\s*(?:[❯>]\s*)?1\.\s+\S/u.test(lines[i])) {
|
|
154
|
+
firstOpt = i;
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
let agent;
|
|
159
|
+
const body = [];
|
|
160
|
+
// 正文收完后 (bodyDone) 继续上溯只为找 Confirm 头 —— 正文与头之间隔着空行,
|
|
161
|
+
// 一碰空行就停会把 `@子代理名` 丢掉; 碰到头以外的实际内容才真正停。
|
|
162
|
+
let bodyDone = false;
|
|
163
|
+
for (let i = firstOpt - 1; i >= 0; i--) {
|
|
164
|
+
const line = lines[i];
|
|
165
|
+
const h = CONFIRM_HEADER.exec(line);
|
|
166
|
+
if (h) {
|
|
167
|
+
agent = h[1] || undefined;
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
if (BOX_RULE.test(line)) {
|
|
171
|
+
bodyDone = body.length > 0;
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
if (CONFIRM_QUESTION.test(line) || OPTION_ROW.test(line))
|
|
175
|
+
continue;
|
|
176
|
+
if (bodyDone)
|
|
177
|
+
break;
|
|
178
|
+
body.unshift(line.trim());
|
|
179
|
+
}
|
|
180
|
+
const text = body.join("\n");
|
|
181
|
+
const inner = /(?:^|[^\w])toolName:\s*"([^"]+)"/u.exec(text)?.[1];
|
|
182
|
+
const params = /params:\s*(\{[\s\S]*)$/u.exec(text)?.[1]?.trim();
|
|
183
|
+
let input;
|
|
184
|
+
// params 可能被 pane 宽度截断 → JSON.parse 失败时保留原文, 卡上仍可读。
|
|
185
|
+
if (params !== undefined) {
|
|
186
|
+
try {
|
|
187
|
+
input = JSON.parse(params);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
input = { params };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const first = body.find((l) => l.length > 0);
|
|
194
|
+
const toolName = inner ?? (first && first.length <= 60 ? first : undefined) ?? "权限确认";
|
|
195
|
+
if (input === undefined) {
|
|
196
|
+
const rest = body.filter((l) => l && l !== toolName).join("\n").trim();
|
|
197
|
+
input = rest ? { 参数: rest } : {};
|
|
198
|
+
}
|
|
199
|
+
return { toolName, toolInput: input, agent };
|
|
200
|
+
};
|
|
106
201
|
//# sourceMappingURL=modal-pane.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modal-pane.js","sourceRoot":"","sources":["../../shared/modal-pane.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,4EAA4E;AAC5E,yBAAyB;AACzB,EAAE;AACF,6EAA6E;AAC7E,0EAA0E;AAC1E,6EAA6E;AAC7E,+EAA+E;AAC/E,yBAAyB;AACzB,EAAE;AACF,8EAA8E;AAC9E,oBAAoB;AAEpB,4EAA4E;AAC5E,yEAAyE;AACzE,0CAA0C;AAC1C,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AAEnD,
|
|
1
|
+
{"version":3,"file":"modal-pane.js","sourceRoot":"","sources":["../../shared/modal-pane.ts"],"names":[],"mappings":"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"}
|
|
@@ -139,6 +139,9 @@ export const tagBadge = (target) => {
|
|
|
139
139
|
export const withTagHeader = (target, content, seq) => {
|
|
140
140
|
const tag = tagOfKey(target);
|
|
141
141
|
const head = [tag ? `${labelFor(tag)} #${tag}` : "🧙", seq ?? ""].filter(Boolean).join(" ");
|
|
142
|
-
|
|
142
|
+
// 栅栏必须顶行首才被 WeCom 认作代码块 —— 同行拼头会把 ``` 挤成字面文本。
|
|
143
|
+
// HEADER_RE 尾部的 \s* 吃得掉换行,parseTagHeader 剥头不受影响。
|
|
144
|
+
const sep = content.startsWith("```") ? "\n" : " ";
|
|
145
|
+
return `${head}${sep}${content}`;
|
|
143
146
|
};
|
|
144
147
|
//# sourceMappingURL=session-label.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-label.js","sourceRoot":"","sources":["../../shared/session-label.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,qEAAqE;AACrE,EAAE;AACF,uEAAuE;AACvE,mCAAmC;AAEnC,MAAM,OAAO,GAAG;IACd,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9C,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9C,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9C,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACnC,CAAC;AAEF,yDAAyD;AACzD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE;IACjC,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAU,EAAE;IACpD,IAAI,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC;IAC3B,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;AAC1D,CAAC,CAAC;AAEF,2EAA2E;AAC3E,2EAA2E;AAC3E,+EAA+E;AAC/E,6EAA6E;AAC7E,gFAAgF;AAChF,sEAAsE;AACtE,yEAAyE;AACzE,4DAA4D;AAC5D,yCAAyC;AACzC,MAAM,SAAS,GAAG,0EAA0E,CAAC;AAE7F;6CAC6C;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAG,GAAW,EAAE,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAEnE,kEAAkE;AAClE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAY,EAAE,CAAC;IACjD,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;CACnG,CAAC;AAEF,iFAAiF;AACjF,mFAAmF;AACnF,4EAA4E;AAC5E,MAAM,aAAa,GAAG,yGAAyG,CAAC;AAEhI,4DAA4D;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAqD,EAAE;IACtG,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAsD,EAAE,CAAC;IACtE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,2DAA2D;AAC3D,uEAAuE;AACvE,mEAAmE;AACnE,6EAA6E;AAC7E,4EAA4E;AAC5E,qCAAqC;AAErC,uDAAuD;AACvD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAA0B,EAAU,EAAE;IAC7D,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC,CAAC;AAEF;;uEAEuE;AACvE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAc,EAAU,EAAE;IAClD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,CAAC,CAAC;AAEF,oFAAoF;AACpF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,GAAW,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5F;;kEAEkE;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAuB,EAAU,EAAE,CAC9D,CAAC,GAAG,IAAI,EAAE,CAAC;KACR,IAAI,EAAE;KACN,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;KAClB,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC;KAClC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;KACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAElB;gCACgC;AAChC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAEtG,kEAAkE;AAClE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,KAA0B,EAAE,CAAC,GAAG,CAAC,EAAU,EAAE;IACnF,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7D,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC,CAAC;AAEF,uDAAuD;AACvD,gDAAgD;AAChD,uDAAuD;AACvD,kDAAkD;AAClD,oBAAoB;AACpB,wDAAwD;AACxD,mEAAmE;AACnE,6BAA6B;AAC7B,wDAAwD;AACxD,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,MAAM,QAAQ,GAAG,oCAAoC,CAAC;AACtD,MAAM,SAAS,GAAG,IAAI,MAAM,CAC1B,UAAU,GAAG,GAAG,QAAQ,kBAAkB,GAAG,GAAG,QAAQ,GAAG;IACzD,2EAA2E,EAC7E,GAAG,CACJ,CAAC;AAEF;;;gCAGgC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAmD,EAAE;IAC9F,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACpD,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACnE,CAAC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAA0B,EAAU,EAAE;IAC7D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3C,CAAC,CAAC;AAEF;;;0CAG0C;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAA0B,EAAE,OAAe,EAAE,GAAY,EAAU,EAAE;IACjG,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5F,
|
|
1
|
+
{"version":3,"file":"session-label.js","sourceRoot":"","sources":["../../shared/session-label.ts"],"names":[],"mappings":"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"}
|
package/hooks/pre-tool-use.sh
CHANGED
|
@@ -74,6 +74,25 @@ PERMISSION_MODE=$(printf '%s' "$PAYLOAD" | jq -r '.permission_mode // ""')
|
|
|
74
74
|
# 与主会话一致, 而不是落到无人可点的 ask 兜底。
|
|
75
75
|
AGENT_ID=$(printf '%s' "$PAYLOAD" | jq -r '.agent_id // empty')
|
|
76
76
|
AGENT_TYPE=$(printf '%s' "$PAYLOAD" | jq -r '.agent_type // empty')
|
|
77
|
+
# 子代理判定: agent 标记, 或转录本身落在 subagents/ 布局 —— 部分 CodeBuddy 版本
|
|
78
|
+
# 不带 agent_id/agent_type, 路径是唯一证据。决定谁有资格写模式档案 (见 record_mode)。
|
|
79
|
+
IS_SUBAGENT=0
|
|
80
|
+
[[ -n "$AGENT_ID" || -n "$AGENT_TYPE" ]] && IS_SUBAGENT=1
|
|
81
|
+
case "$TRANSCRIPT_PATH" in */subagents/agent-*.jsonl) IS_SUBAGENT=1 ;; esac
|
|
82
|
+
|
|
83
|
+
# ── DeferExecuteTool 下钻 (CodeBuddy 延迟加载工具的外层包装) ──────────────
|
|
84
|
+
# ToolSearch 发现的 deferred/MCP 工具经 DeferExecuteTool(toolName, …) 代为派发。
|
|
85
|
+
# 外层名对整条审批链都是噪音: matcher/danger/allow/deny 匹配不到真实工具, 卡片上
|
|
86
|
+
# 也只剩一个不知所云的 DeferExecuteTool。换成内层工具名+入参再走后面的短路与
|
|
87
|
+
# daemon 裁决 (内层入参字段名各版本有出入, 依次探测; 都没有则剥掉包装字段取余)。
|
|
88
|
+
if [[ "$TOOL_NAME" == "DeferExecuteTool" ]]; then
|
|
89
|
+
INNER_NAME=$(printf '%s' "$TOOL_INPUT" | jq -r '.toolName // .tool_name // .name // empty')
|
|
90
|
+
if [[ -n "$INNER_NAME" ]]; then
|
|
91
|
+
TOOL_NAME="$INNER_NAME"
|
|
92
|
+
TOOL_INPUT=$(printf '%s' "$TOOL_INPUT" \
|
|
93
|
+
| jq -c '(.toolInput // .tool_input // .arguments // .args // .input) // del(.toolName, .tool_name, .name)')
|
|
94
|
+
fi
|
|
95
|
+
fi
|
|
77
96
|
|
|
78
97
|
# CLI 后端: 与下方 ExitPlanMode 同款判别 — transcript 落在 ~/.codebuddy/ 即
|
|
79
98
|
# codebuddy。daemon 的 AskUserQuestion 分支据此走去重逻辑 (codebuddy 的 hook
|
|
@@ -98,7 +117,7 @@ is_inherit_mode() { case "$1" in ""|ignore|current|inherit) return 0 ;; *) re
|
|
|
98
117
|
# 父会话模式档案。子代理是另起的 CLI 实例, 既拿不到父的 --permission-mode, 自己
|
|
99
118
|
# 的 permissions.defaultMode 通常也没写 —— payload 里只剩继承语义值或空。主线程
|
|
100
119
|
# 每次把实际模式写进 <stateDir>/modes/<sid>, 子代理按 transcript 反推父 sid 读回,
|
|
101
|
-
# 这是唯一能把父子模式对上的旁路。只有主线程 (
|
|
120
|
+
# 这是唯一能把父子模式对上的旁路。只有主线程 (IS_SUBAGENT=0) 才写, 否则子代理的
|
|
102
121
|
# default 会把父的 bypassPermissions 覆盖掉。
|
|
103
122
|
MODE_DIR="$STATE_DIR/modes"
|
|
104
123
|
|
|
@@ -135,7 +154,9 @@ recall_mode() {
|
|
|
135
154
|
EFFECTIVE_MODE="$PERMISSION_MODE"
|
|
136
155
|
if is_inherit_mode "$EFFECTIVE_MODE"; then
|
|
137
156
|
EFFECTIVE_MODE=$(recall_mode)
|
|
138
|
-
elif [[
|
|
157
|
+
elif [[ "$IS_SUBAGENT" == "0" ]]; then
|
|
158
|
+
# 只认 AGENT_ID 会漏掉不带 agent 标记的子代理 —— 它上报的 default 若落盘,
|
|
159
|
+
# 就把父会话的 bypass 档案覆盖了。IS_SUBAGENT 把转录布局也算进证据。
|
|
139
160
|
record_mode "$EFFECTIVE_MODE"
|
|
140
161
|
fi
|
|
141
162
|
|