wezard 1.3.15 → 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.
|
@@ -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,22 +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));
|
|
106
130
|
/**
|
|
107
|
-
* skipAll 哨兵版选材 (mirror 主动读屏, 无任何审批上下文):
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* to …?") 但只有 Yes/No 两项 —— 那是用户的问题, 不是权限门, 靠三件套排除。
|
|
112
|
-
* 仍只挑一次性裸 "Yes": 放宽静态权限的变体永不选中。挑不出返回 undefined。
|
|
131
|
+
* skipAll 哨兵版选材 (mirror 主动读屏, 无任何审批上下文): 按**选项形状**
|
|
132
|
+
* (hasPermissionShape) 认权限确认框, 不看标题 —— CodeBuddy 的 MCP 权限 picker
|
|
133
|
+
* 标题只有一个 "Confirm", PERMISSION_TITLE 认不出。
|
|
134
|
+
* 仍只挑一次性裸 "Yes": 放宽静态权限的变体永不自动选中。挑不出返回 undefined。
|
|
113
135
|
*/
|
|
114
136
|
export const pickAutoAllowAnswer = (options) => {
|
|
137
|
+
if (!hasPermissionShape(options))
|
|
138
|
+
return undefined;
|
|
115
139
|
const plainYes = options.find((o) => /^yes\s*$/iu.test(o.label));
|
|
116
140
|
if (!plainYes)
|
|
117
141
|
return undefined;
|
|
118
|
-
if (!options.some((o) => /^yes,\s/iu.test(o.label)))
|
|
119
|
-
return undefined;
|
|
120
|
-
if (!options.some((o) => /^no\b/iu.test(o.label)))
|
|
121
|
-
return undefined;
|
|
122
142
|
return { index: plainYes.index, label: plainYes.label };
|
|
123
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
|
+
};
|
|
124
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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"}
|