@zqagent/core 0.2.16 → 0.3.6
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/README.md +1 -1
- package/README.oss.en.md +15 -2
- package/README.oss.md +18 -2
- package/README.oss.zh-TW.md +13 -2
- package/dist/McpClient-CEQBUPuC.d.cts +145 -0
- package/dist/McpClient-CEQBUPuC.d.ts +145 -0
- package/dist/{ToolRegistry-C3pTFiaJ.d.cts → ToolRegistry-Cy0fQxrb.d.ts} +2 -111
- package/dist/{ToolRegistry-C3pTFiaJ.d.ts → ToolRegistry-DouDvn9E.d.cts} +2 -111
- package/dist/{explore-RtZtb-V6.d.ts → TurnEngine-BPKhWuSI.d.cts} +108 -73
- package/dist/{explore-BgRhj6SP.d.cts → TurnEngine-DtGEuVLT.d.ts} +108 -73
- package/dist/conflictGuard-BBOOIxxK.d.cts +42 -0
- package/dist/conflictGuard-BBOOIxxK.d.ts +42 -0
- package/dist/index.cjs +5477 -1140
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +577 -195
- package/dist/index.d.ts +577 -195
- package/dist/index.js +5305 -1002
- package/dist/index.js.map +1 -1
- package/dist/internal/crypto/secrets.cjs +25 -0
- package/dist/internal/crypto/secrets.cjs.map +1 -0
- package/dist/internal/crypto/secrets.d.cts +2 -0
- package/dist/internal/crypto/secrets.d.ts +2 -0
- package/dist/internal/crypto/secrets.js +3 -0
- package/dist/internal/crypto/secrets.js.map +1 -0
- package/dist/internal/engine/FileLogHook.cjs +179 -0
- package/dist/internal/engine/FileLogHook.cjs.map +1 -0
- package/dist/internal/engine/FileLogHook.d.cts +67 -0
- package/dist/internal/engine/FileLogHook.d.ts +67 -0
- package/dist/internal/engine/FileLogHook.js +144 -0
- package/dist/internal/engine/FileLogHook.js.map +1 -0
- package/dist/internal/engine/approvalView.cjs +25 -0
- package/dist/internal/engine/approvalView.cjs.map +1 -0
- package/dist/internal/engine/approvalView.d.cts +1 -0
- package/dist/internal/engine/approvalView.d.ts +1 -0
- package/dist/internal/engine/approvalView.js +3 -0
- package/dist/internal/engine/approvalView.js.map +1 -0
- package/dist/internal/engine/limits.cjs +59 -0
- package/dist/internal/engine/limits.cjs.map +1 -0
- package/dist/internal/engine/limits.d.cts +32 -0
- package/dist/internal/engine/limits.d.ts +32 -0
- package/dist/internal/engine/limits.js +31 -0
- package/dist/internal/engine/limits.js.map +1 -0
- package/dist/internal/engine/sessionNaming.cjs +47 -0
- package/dist/internal/engine/sessionNaming.cjs.map +1 -0
- package/dist/internal/engine/sessionNaming.d.cts +25 -0
- package/dist/internal/engine/sessionNaming.d.ts +25 -0
- package/dist/internal/engine/sessionNaming.js +20 -0
- package/dist/internal/engine/sessionNaming.js.map +1 -0
- package/dist/internal/llmConfig.cjs +561 -0
- package/dist/internal/llmConfig.cjs.map +1 -0
- package/dist/internal/llmConfig.d.cts +75 -0
- package/dist/internal/llmConfig.d.ts +75 -0
- package/dist/internal/llmConfig.js +535 -0
- package/dist/internal/llmConfig.js.map +1 -0
- package/dist/internal/mcp/builtin/index.cjs +685 -0
- package/dist/internal/mcp/builtin/index.cjs.map +1 -0
- package/dist/internal/mcp/builtin/index.d.cts +21 -0
- package/dist/internal/mcp/builtin/index.d.ts +21 -0
- package/dist/internal/mcp/builtin/index.js +652 -0
- package/dist/internal/mcp/builtin/index.js.map +1 -0
- package/dist/internal/mcp/config.cjs +278 -0
- package/dist/internal/mcp/config.cjs.map +1 -0
- package/dist/internal/mcp/config.d.cts +61 -0
- package/dist/internal/mcp/config.d.ts +61 -0
- package/dist/internal/mcp/config.js +235 -0
- package/dist/internal/mcp/config.js.map +1 -0
- package/dist/internal/mcp/presets.cjs +184 -0
- package/dist/internal/mcp/presets.cjs.map +1 -0
- package/dist/internal/mcp/presets.d.cts +39 -0
- package/dist/internal/mcp/presets.d.ts +39 -0
- package/dist/internal/mcp/presets.js +158 -0
- package/dist/internal/mcp/presets.js.map +1 -0
- package/dist/internal/node-name.cjs +45 -0
- package/dist/internal/node-name.cjs.map +1 -0
- package/dist/internal/node-name.d.cts +3 -0
- package/dist/internal/node-name.d.ts +3 -0
- package/dist/internal/node-name.js +10 -0
- package/dist/internal/node-name.js.map +1 -0
- package/dist/internal/paths.cjs +63 -0
- package/dist/internal/paths.cjs.map +1 -0
- package/dist/internal/paths.d.cts +17 -0
- package/dist/internal/paths.d.ts +17 -0
- package/dist/internal/paths.js +25 -0
- package/dist/internal/paths.js.map +1 -0
- package/dist/internal/providers/diagnostics.cjs +288 -0
- package/dist/internal/providers/diagnostics.cjs.map +1 -0
- package/dist/internal/providers/diagnostics.d.cts +103 -0
- package/dist/internal/providers/diagnostics.d.ts +103 -0
- package/dist/internal/providers/diagnostics.js +250 -0
- package/dist/internal/providers/diagnostics.js.map +1 -0
- package/dist/internal/providers/models.cjs +699 -0
- package/dist/internal/providers/models.cjs.map +1 -0
- package/dist/internal/providers/models.d.cts +136 -0
- package/dist/internal/providers/models.d.ts +136 -0
- package/dist/internal/providers/models.js +654 -0
- package/dist/internal/providers/models.js.map +1 -0
- package/dist/internal/terminal.cjs +161 -0
- package/dist/internal/terminal.cjs.map +1 -0
- package/dist/internal/terminal.d.cts +58 -0
- package/dist/internal/terminal.d.ts +58 -0
- package/dist/internal/terminal.js +128 -0
- package/dist/internal/terminal.js.map +1 -0
- package/dist/internal/tools/execAsync.cjs +187 -0
- package/dist/internal/tools/execAsync.cjs.map +1 -0
- package/dist/internal/tools/execAsync.d.cts +30 -0
- package/dist/internal/tools/execAsync.d.ts +30 -0
- package/dist/internal/tools/execAsync.js +162 -0
- package/dist/internal/tools/execAsync.js.map +1 -0
- package/dist/internal/tools/git.cjs +935 -0
- package/dist/internal/tools/git.cjs.map +1 -0
- package/dist/internal/tools/git.d.cts +206 -0
- package/dist/internal/tools/git.d.ts +206 -0
- package/dist/internal/tools/git.js +883 -0
- package/dist/internal/tools/git.js.map +1 -0
- package/dist/internal/tools/pathSafety.cjs +99 -0
- package/dist/internal/tools/pathSafety.cjs.map +1 -0
- package/dist/internal/tools/pathSafety.d.cts +44 -0
- package/dist/internal/tools/pathSafety.d.ts +44 -0
- package/dist/internal/tools/pathSafety.js +61 -0
- package/dist/internal/tools/pathSafety.js.map +1 -0
- package/dist/internal/tools/plan.cjs +146 -0
- package/dist/internal/tools/plan.cjs.map +1 -0
- package/dist/internal/tools/plan.d.cts +48 -0
- package/dist/internal/tools/plan.d.ts +48 -0
- package/dist/internal/tools/plan.js +117 -0
- package/dist/internal/tools/plan.js.map +1 -0
- package/dist/internal/tools/ripgrep.cjs +118 -0
- package/dist/internal/tools/ripgrep.cjs.map +1 -0
- package/dist/internal/tools/ripgrep.d.cts +6 -0
- package/dist/internal/tools/ripgrep.d.ts +6 -0
- package/dist/internal/tools/ripgrep.js +89 -0
- package/dist/internal/tools/ripgrep.js.map +1 -0
- package/dist/internal/tools/sandbox.cjs +253 -0
- package/dist/internal/tools/sandbox.cjs.map +1 -0
- package/dist/internal/tools/sandbox.d.cts +67 -0
- package/dist/internal/tools/sandbox.d.ts +67 -0
- package/dist/internal/tools/sandbox.js +213 -0
- package/dist/internal/tools/sandbox.js.map +1 -0
- package/dist/internal/tools/shell.cjs +771 -0
- package/dist/internal/tools/shell.cjs.map +1 -0
- package/dist/internal/tools/shell.d.cts +47 -0
- package/dist/internal/tools/shell.d.ts +47 -0
- package/dist/internal/tools/shell.js +731 -0
- package/dist/internal/tools/shell.js.map +1 -0
- package/dist/internal/tools/shellRuntime.cjs +220 -0
- package/dist/internal/tools/shellRuntime.cjs.map +1 -0
- package/dist/internal/tools/shellRuntime.d.cts +67 -0
- package/dist/internal/tools/shellRuntime.d.ts +67 -0
- package/dist/internal/tools/shellRuntime.js +181 -0
- package/dist/internal/tools/shellRuntime.js.map +1 -0
- package/dist/internal/update/controller.cjs +1035 -0
- package/dist/internal/update/controller.cjs.map +1 -0
- package/dist/internal/update/controller.d.cts +150 -0
- package/dist/internal/update/controller.d.ts +150 -0
- package/dist/internal/update/controller.js +991 -0
- package/dist/internal/update/controller.js.map +1 -0
- package/dist/internal/update/platform.cjs +234 -0
- package/dist/internal/update/platform.cjs.map +1 -0
- package/dist/internal/update/platform.d.cts +77 -0
- package/dist/internal/update/platform.d.ts +77 -0
- package/dist/internal/update/platform.js +184 -0
- package/dist/internal/update/platform.js.map +1 -0
- package/dist/tools/ask.d.cts +3 -1
- package/dist/tools/ask.d.ts +3 -1
- package/dist/tools/diff.cjs +17 -6
- package/dist/tools/diff.cjs.map +1 -1
- package/dist/tools/diff.d.cts +5 -2
- package/dist/tools/diff.d.ts +5 -2
- package/dist/tools/diff.js +17 -6
- package/dist/tools/diff.js.map +1 -1
- package/dist/tools/directories.d.cts +3 -1
- package/dist/tools/directories.d.ts +3 -1
- package/dist/tools/explore.cjs +1778 -204
- package/dist/tools/explore.cjs.map +1 -1
- package/dist/tools/explore.d.cts +82 -2
- package/dist/tools/explore.d.ts +82 -2
- package/dist/tools/explore.js +1780 -204
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/files.cjs +56 -21
- package/dist/tools/files.cjs.map +1 -1
- package/dist/tools/files.d.cts +6 -3
- package/dist/tools/files.d.ts +6 -3
- package/dist/tools/files.js +56 -21
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/git.cjs +34 -25
- package/dist/tools/git.cjs.map +1 -1
- package/dist/tools/git.d.cts +4 -204
- package/dist/tools/git.d.ts +4 -204
- package/dist/tools/git.js +34 -25
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/media.cjs +280 -3
- package/dist/tools/media.cjs.map +1 -1
- package/dist/tools/media.d.cts +3 -1
- package/dist/tools/media.d.ts +3 -1
- package/dist/tools/media.js +278 -1
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/plan.cjs +62 -0
- package/dist/tools/plan.cjs.map +1 -1
- package/dist/tools/plan.d.cts +4 -17
- package/dist/tools/plan.d.ts +4 -17
- package/dist/tools/plan.js +59 -0
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/search.cjs +3 -0
- package/dist/tools/search.cjs.map +1 -1
- package/dist/tools/search.d.cts +3 -1
- package/dist/tools/search.d.ts +3 -1
- package/dist/tools/search.js +3 -0
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/shell.cjs +76 -11
- package/dist/tools/shell.cjs.map +1 -1
- package/dist/tools/shell.d.cts +5 -39
- package/dist/tools/shell.d.ts +5 -39
- package/dist/tools/shell.js +75 -11
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/todo.d.cts +3 -1
- package/dist/tools/todo.d.ts +3 -1
- package/dist/tools/web.cjs +279 -5
- package/dist/tools/web.cjs.map +1 -1
- package/dist/tools/web.d.cts +3 -1
- package/dist/tools/web.d.ts +3 -1
- package/dist/tools/web.js +275 -3
- package/dist/tools/web.js.map +1 -1
- package/dist/types-BYyXWWPW.d.cts +237 -0
- package/dist/types-BYyXWWPW.d.ts +237 -0
- package/package.json +26 -37
- package/bin/zqagent +0 -2
- package/dist/cli/index.cjs +0 -24507
- package/dist/cli/index.cjs.map +0 -1
- package/dist/cli/index.d.cts +0 -2
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js +0 -24490
- package/dist/cli/index.js.map +0 -1
- package/dist/server/index.cjs +0 -19824
- package/dist/server/index.cjs.map +0 -1
- package/dist/server/index.d.cts +0 -2
- package/dist/server/index.d.ts +0 -2
- package/dist/server/index.js +0 -19807
- package/dist/server/index.js.map +0 -1
package/dist/tools/plan.cjs
CHANGED
|
@@ -20,10 +20,61 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/tools/plan.ts
|
|
21
21
|
var plan_exports = {};
|
|
22
22
|
__export(plan_exports, {
|
|
23
|
+
interpretPlanReply: () => interpretPlanReply,
|
|
24
|
+
isAffirmativeText: () => isAffirmativeText,
|
|
25
|
+
isRejectionText: () => isRejectionText,
|
|
23
26
|
registerPlanTool: () => registerPlanTool,
|
|
24
27
|
setPlanHandler: () => setPlanHandler
|
|
25
28
|
});
|
|
26
29
|
module.exports = __toCommonJS(plan_exports);
|
|
30
|
+
var APPROVE_WORDS = /* @__PURE__ */ new Set([
|
|
31
|
+
"y",
|
|
32
|
+
"yes",
|
|
33
|
+
"approve",
|
|
34
|
+
"approved",
|
|
35
|
+
"ok",
|
|
36
|
+
"true",
|
|
37
|
+
"a",
|
|
38
|
+
"1",
|
|
39
|
+
"\u597D",
|
|
40
|
+
"\u597D\u7684",
|
|
41
|
+
"\u884C",
|
|
42
|
+
"\u55EF"
|
|
43
|
+
]);
|
|
44
|
+
var APPROVE_PREFIX = /^(yes|approve|同意|批准|允许|确定|可以|好的|确认)/;
|
|
45
|
+
var REJECT_WORDS = /* @__PURE__ */ new Set([
|
|
46
|
+
"d",
|
|
47
|
+
"n",
|
|
48
|
+
"no",
|
|
49
|
+
"reject",
|
|
50
|
+
"rejected",
|
|
51
|
+
"deny",
|
|
52
|
+
"false",
|
|
53
|
+
"0",
|
|
54
|
+
"\u4E0D",
|
|
55
|
+
"\u4E0D\u884C",
|
|
56
|
+
"\u4E0D\u7528",
|
|
57
|
+
"\u62D2\u7EDD",
|
|
58
|
+
"\u4E0D\u540C\u610F",
|
|
59
|
+
"\u53D6\u6D88"
|
|
60
|
+
]);
|
|
61
|
+
function isAffirmativeText(answer) {
|
|
62
|
+
const a = answer.trim().toLowerCase();
|
|
63
|
+
if (!a) return false;
|
|
64
|
+
if (APPROVE_WORDS.has(a)) return true;
|
|
65
|
+
return APPROVE_PREFIX.test(a);
|
|
66
|
+
}
|
|
67
|
+
function isRejectionText(answer) {
|
|
68
|
+
const a = answer.trim().toLowerCase().replace(/[。.!!]$/, "");
|
|
69
|
+
return REJECT_WORDS.has(a);
|
|
70
|
+
}
|
|
71
|
+
function interpretPlanReply(answer) {
|
|
72
|
+
const text = answer.trim();
|
|
73
|
+
if (!text) return { kind: "empty" };
|
|
74
|
+
if (isAffirmativeText(text)) return { kind: "approve" };
|
|
75
|
+
if (isRejectionText(text)) return { kind: "reject" };
|
|
76
|
+
return { kind: "revise", feedback: text };
|
|
77
|
+
}
|
|
27
78
|
var _planHandler = null;
|
|
28
79
|
function setPlanHandler(handler) {
|
|
29
80
|
_planHandler = handler;
|
|
@@ -46,6 +97,14 @@ function makeProposePlan() {
|
|
|
46
97
|
note: "\u8BA1\u5212\u5DF2\u6279\u51C6 \u2014 \u73B0\u5728\u5F00\u59CB\u5B9E\u65BD"
|
|
47
98
|
};
|
|
48
99
|
}
|
|
100
|
+
if (result.revised) {
|
|
101
|
+
return {
|
|
102
|
+
approved: false,
|
|
103
|
+
revised: true,
|
|
104
|
+
feedback: result.feedback ?? "\u7528\u6237\u8981\u6C42\u8865\u5145\u4FEE\u6B63\u8BA1\u5212",
|
|
105
|
+
note: "\u7528\u6237\u6CA1\u6709\u6279\u51C6\uFF0C\u800C\u662F\u5BF9\u8BA1\u5212\u63D0\u51FA\u4E86\u8865\u5145\u8981\u6C42\u3002\u8BF7\u628A\u8FD9\u4E9B\u8981\u6C42\u5408\u5E76\u8FDB\u539F\u8BA1\u5212\uFF08\u4FDD\u7559\u4ECD\u7136\u6709\u6548\u7684\u90E8\u5206\uFF09\uFF0C\u7136\u540E\u518D\u6B21\u8C03\u7528 propose_plan \u63D0\u4EA4\u4FEE\u8BA2\u540E\u7684\u8BA1\u5212\uFF0C\u4E0D\u8981\u5F00\u59CB\u5B9E\u65BD\uFF0C\u4E5F\u4E0D\u8981\u4ECE\u5934\u91CD\u5199\u6574\u4E2A\u65B9\u6848\u3002"
|
|
106
|
+
};
|
|
107
|
+
}
|
|
49
108
|
return {
|
|
50
109
|
approved: false,
|
|
51
110
|
feedback: result.feedback ?? "\u8BA1\u5212\u88AB\u62D2\u7EDD"
|
|
@@ -78,6 +137,9 @@ function registerPlanTool(registry) {
|
|
|
78
137
|
}
|
|
79
138
|
// Annotate the CommonJS export names for ESM import in node:
|
|
80
139
|
0 && (module.exports = {
|
|
140
|
+
interpretPlanReply,
|
|
141
|
+
isAffirmativeText,
|
|
142
|
+
isRejectionText,
|
|
81
143
|
registerPlanTool,
|
|
82
144
|
setPlanHandler
|
|
83
145
|
});
|
package/dist/tools/plan.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tools/plan.ts"],"sourcesContent":["import { ToolRegistry } from \"./ToolRegistry.js\";\nimport { Mode } from \"../permissions/PermissionEngine.js\";\n\n/**\n * propose_plan — 计划提案工具\n * 对齐 Python 版 tools/plan.py\n * 在 CLI 模式下通过 readline
|
|
1
|
+
{"version":3,"sources":["../../src/tools/plan.ts"],"sourcesContent":["import { ToolRegistry } from \"./ToolRegistry.js\";\nimport { Mode } from \"../permissions/PermissionEngine.js\";\n\n/**\n * propose_plan — 计划提案工具\n * 对齐 Python 版 tools/plan.py\n * 在 CLI 模式下通过 readline 审批实现\n */\n\n/**\n * 肯定回答(批准 / 授权):单词或句首。\n * 中文口语的「好 / 行 / 嗯」也要认:否则用户敲一个「好」,会被当成补充要求。\n */\nconst APPROVE_WORDS = new Set([\n \"y\",\n \"yes\",\n \"approve\",\n \"approved\",\n \"ok\",\n \"true\",\n \"a\",\n \"1\",\n \"好\",\n \"好的\",\n \"行\",\n \"嗯\",\n]);\nconst APPROVE_PREFIX = /^(yes|approve|同意|批准|允许|确定|可以|好的|确认)/;\n\n/** 明确的拒绝词(Web 端点「拒绝」按钮提交的就是 reject) */\nconst REJECT_WORDS = new Set([\n \"d\",\n \"n\",\n \"no\",\n \"reject\",\n \"rejected\",\n \"deny\",\n \"false\",\n \"0\",\n \"不\",\n \"不行\",\n \"不用\",\n \"拒绝\",\n \"不同意\",\n \"取消\",\n]);\n\n/** 是否肯定回答(批准计划 / 授权目录) */\nexport function isAffirmativeText(answer: string): boolean {\n const a = answer.trim().toLowerCase();\n if (!a) return false;\n if (APPROVE_WORDS.has(a)) return true;\n return APPROVE_PREFIX.test(a);\n}\n\n/**\n * 是否明确的拒绝:只有整句就是拒绝词才算。\n * 「不要改 A,改用 B」这类是修改意见,不能当成否决。\n */\nexport function isRejectionText(answer: string): boolean {\n const a = answer.trim().toLowerCase().replace(/[。.!!]$/, \"\");\n return REJECT_WORDS.has(a);\n}\n\n/**\n * 解析用户对计划提案的一句话回应。\n *\n * CLI 与 Web 共用同一套判定,避免两处词表各自漂移:\n * - approve:批准;\n * - reject:否决;\n * - revise:既没批准也没拒绝 → 视为补充要求,合并进计划后重新提案;\n * - empty:空输入(CLI 重新提示,不改变任何状态)。\n */\nexport type PlanReply =\n | { kind: \"approve\" }\n | { kind: \"reject\" }\n | { kind: \"revise\"; feedback: string }\n | { kind: \"empty\" };\n\nexport function interpretPlanReply(answer: string): PlanReply {\n const text = answer.trim();\n if (!text) return { kind: \"empty\" };\n if (isAffirmativeText(text)) return { kind: \"approve\" };\n if (isRejectionText(text)) return { kind: \"reject\" };\n return { kind: \"revise\", feedback: text };\n}\n\n/**\n * 提案审批结果。\n *\n * `revised` 表示「用户没有批准也没有拒绝,而是提出了补充要求」:把 feedback\n * 合并进原计划后重新提案即可,不要开始实施,也不要把它当成否决而放弃方案。\n */\nexport type PlanHandler = (plan: string) => Promise<{\n approved: boolean;\n mode?: string;\n feedback?: string;\n revised?: boolean;\n}>;\n\nlet _planHandler: PlanHandler | null = null;\n\nexport function setPlanHandler(handler: PlanHandler): void {\n _planHandler = handler;\n}\n\nfunction makeProposePlan() {\n return async function propose_plan(args: Record<string, unknown>) {\n const plan = String(args.plan ?? \"\");\n\n if (!plan.trim()) {\n return { approved: false, error: \"计划内容不能为空\" };\n }\n\n if (!_planHandler) {\n return { approved: false, error: \"当前环境不支持计划审批\" };\n }\n\n try {\n const result = await _planHandler(plan);\n if (result.approved) {\n return {\n approved: true,\n mode: result.mode ?? \"interactive\",\n note: \"计划已批准 — 现在开始实施\",\n };\n }\n /*\n * 用户提出补充要求(既没批准也没拒绝):这是「修订」,不是否决。\n * 明确告诉模型下一步该做什么——把反馈合并进计划、再次调用 propose_plan。\n * 否则模型容易把它当作拒绝而从零重来,或者直接开始动手。\n */\n if (result.revised) {\n return {\n approved: false,\n revised: true,\n feedback: result.feedback ?? \"用户要求补充修正计划\",\n note:\n \"用户没有批准,而是对计划提出了补充要求。请把这些要求合并进原计划\" +\n \"(保留仍然有效的部分),然后再次调用 propose_plan 提交修订后的计划,\" +\n \"不要开始实施,也不要从头重写整个方案。\",\n };\n }\n return {\n approved: false,\n feedback: result.feedback ?? \"计划被拒绝\",\n };\n } catch {\n return { approved: false, error: \"计划审批已取消\" };\n }\n };\n}\n\n/** 注册 propose_plan 工具 */\nexport function registerPlanTool(registry: ToolRegistry): void {\n const planFunc = makeProposePlan();\n\n registry.register(\n (args) => planFunc(args),\n { category: \"planning\", riskLevel: \"low\", capabilities: [\"plan\"], requiresApproval: false },\n {\n type: \"function\",\n function: {\n name: \"propose_plan\",\n description: \"将你的实施计划呈现给用户审批。在探索充分、确定了一个方案后使用此工具:总结你将更改什么、在哪些文件中、以及你将如何验证它。如果被批准,会话将退出只读计划模式,你来实施计划;如果被拒绝,使用结果中的反馈意见修改计划。不要在还没有提案之前就描述实施步骤——先提案。\",\n parameters: {\n type: \"object\",\n properties: {\n plan: { type: \"string\", description: \"完整的实施计划描述(包含将更改什么、在哪些文件中、如何验证)\" },\n },\n required: [\"plan\"],\n },\n },\n },\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,iBAAiB;AAGvB,IAAM,eAAe,oBAAI,IAAI;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,SAAS,kBAAkB,QAAyB;AACzD,QAAM,IAAI,OAAO,KAAK,EAAE,YAAY;AACpC,MAAI,CAAC,EAAG,QAAO;AACf,MAAI,cAAc,IAAI,CAAC,EAAG,QAAO;AACjC,SAAO,eAAe,KAAK,CAAC;AAC9B;AAMO,SAAS,gBAAgB,QAAyB;AACvD,QAAM,IAAI,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,WAAW,EAAE;AAC3D,SAAO,aAAa,IAAI,CAAC;AAC3B;AAiBO,SAAS,mBAAmB,QAA2B;AAC5D,QAAM,OAAO,OAAO,KAAK;AACzB,MAAI,CAAC,KAAM,QAAO,EAAE,MAAM,QAAQ;AAClC,MAAI,kBAAkB,IAAI,EAAG,QAAO,EAAE,MAAM,UAAU;AACtD,MAAI,gBAAgB,IAAI,EAAG,QAAO,EAAE,MAAM,SAAS;AACnD,SAAO,EAAE,MAAM,UAAU,UAAU,KAAK;AAC1C;AAeA,IAAI,eAAmC;AAEhC,SAAS,eAAe,SAA4B;AACzD,iBAAe;AACjB;AAEA,SAAS,kBAAkB;AACzB,SAAO,eAAe,aAAa,MAA+B;AAChE,UAAM,OAAO,OAAO,KAAK,QAAQ,EAAE;AAEnC,QAAI,CAAC,KAAK,KAAK,GAAG;AAChB,aAAO,EAAE,UAAU,OAAO,OAAO,mDAAW;AAAA,IAC9C;AAEA,QAAI,CAAC,cAAc;AACjB,aAAO,EAAE,UAAU,OAAO,OAAO,qEAAc;AAAA,IACjD;AAEA,QAAI;AACF,YAAM,SAAS,MAAM,aAAa,IAAI;AACtC,UAAI,OAAO,UAAU;AACnB,eAAO;AAAA,UACL,UAAU;AAAA,UACV,MAAM,OAAO,QAAQ;AAAA,UACrB,MAAM;AAAA,QACR;AAAA,MACF;AAMA,UAAI,OAAO,SAAS;AAClB,eAAO;AAAA,UACL,UAAU;AAAA,UACV,SAAS;AAAA,UACT,UAAU,OAAO,YAAY;AAAA,UAC7B,MACE;AAAA,QAGJ;AAAA,MACF;AACA,aAAO;AAAA,QACL,UAAU;AAAA,QACV,UAAU,OAAO,YAAY;AAAA,MAC/B;AAAA,IACF,QAAQ;AACN,aAAO,EAAE,UAAU,OAAO,OAAO,6CAAU;AAAA,IAC7C;AAAA,EACF;AACF;AAGO,SAAS,iBAAiB,UAA8B;AAC7D,QAAM,WAAW,gBAAgB;AAEjC,WAAS;AAAA,IACP,CAAC,SAAS,SAAS,IAAI;AAAA,IACvB,EAAE,UAAU,YAAY,WAAW,OAAO,cAAc,CAAC,MAAM,GAAG,kBAAkB,MAAM;AAAA,IAC1F;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,QACb,YAAY;AAAA,UACV,MAAM;AAAA,UACN,YAAY;AAAA,YACV,MAAM,EAAE,MAAM,UAAU,aAAa,uLAAiC;AAAA,UACxE;AAAA,UACA,UAAU,CAAC,MAAM;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
package/dist/tools/plan.d.cts
CHANGED
|
@@ -1,17 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* 对齐 Python 版 tools/plan.py
|
|
6
|
-
* 在 CLI 模式下通过 readline Y/N 审批实现
|
|
7
|
-
*/
|
|
8
|
-
type PlanHandler = (plan: string) => Promise<{
|
|
9
|
-
approved: boolean;
|
|
10
|
-
mode?: string;
|
|
11
|
-
feedback?: string;
|
|
12
|
-
}>;
|
|
13
|
-
declare function setPlanHandler(handler: PlanHandler): void;
|
|
14
|
-
/** 注册 propose_plan 工具 */
|
|
15
|
-
declare function registerPlanTool(registry: ToolRegistry): void;
|
|
16
|
-
|
|
17
|
-
export { type PlanHandler, registerPlanTool, setPlanHandler };
|
|
1
|
+
import '../ToolRegistry-DouDvn9E.cjs';
|
|
2
|
+
export { PlanHandler, PlanReply, interpretPlanReply, isAffirmativeText, isRejectionText, registerPlanTool, setPlanHandler } from '../internal/tools/plan.cjs';
|
|
3
|
+
import '../types-BYyXWWPW.cjs';
|
|
4
|
+
import '@zqagent/shared/model-capabilities';
|
package/dist/tools/plan.d.ts
CHANGED
|
@@ -1,17 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* 对齐 Python 版 tools/plan.py
|
|
6
|
-
* 在 CLI 模式下通过 readline Y/N 审批实现
|
|
7
|
-
*/
|
|
8
|
-
type PlanHandler = (plan: string) => Promise<{
|
|
9
|
-
approved: boolean;
|
|
10
|
-
mode?: string;
|
|
11
|
-
feedback?: string;
|
|
12
|
-
}>;
|
|
13
|
-
declare function setPlanHandler(handler: PlanHandler): void;
|
|
14
|
-
/** 注册 propose_plan 工具 */
|
|
15
|
-
declare function registerPlanTool(registry: ToolRegistry): void;
|
|
16
|
-
|
|
17
|
-
export { type PlanHandler, registerPlanTool, setPlanHandler };
|
|
1
|
+
import '../ToolRegistry-Cy0fQxrb.js';
|
|
2
|
+
export { PlanHandler, PlanReply, interpretPlanReply, isAffirmativeText, isRejectionText, registerPlanTool, setPlanHandler } from '../internal/tools/plan.js';
|
|
3
|
+
import '../types-BYyXWWPW.js';
|
|
4
|
+
import '@zqagent/shared/model-capabilities';
|
package/dist/tools/plan.js
CHANGED
|
@@ -1,4 +1,52 @@
|
|
|
1
1
|
// src/tools/plan.ts
|
|
2
|
+
var APPROVE_WORDS = /* @__PURE__ */ new Set([
|
|
3
|
+
"y",
|
|
4
|
+
"yes",
|
|
5
|
+
"approve",
|
|
6
|
+
"approved",
|
|
7
|
+
"ok",
|
|
8
|
+
"true",
|
|
9
|
+
"a",
|
|
10
|
+
"1",
|
|
11
|
+
"\u597D",
|
|
12
|
+
"\u597D\u7684",
|
|
13
|
+
"\u884C",
|
|
14
|
+
"\u55EF"
|
|
15
|
+
]);
|
|
16
|
+
var APPROVE_PREFIX = /^(yes|approve|同意|批准|允许|确定|可以|好的|确认)/;
|
|
17
|
+
var REJECT_WORDS = /* @__PURE__ */ new Set([
|
|
18
|
+
"d",
|
|
19
|
+
"n",
|
|
20
|
+
"no",
|
|
21
|
+
"reject",
|
|
22
|
+
"rejected",
|
|
23
|
+
"deny",
|
|
24
|
+
"false",
|
|
25
|
+
"0",
|
|
26
|
+
"\u4E0D",
|
|
27
|
+
"\u4E0D\u884C",
|
|
28
|
+
"\u4E0D\u7528",
|
|
29
|
+
"\u62D2\u7EDD",
|
|
30
|
+
"\u4E0D\u540C\u610F",
|
|
31
|
+
"\u53D6\u6D88"
|
|
32
|
+
]);
|
|
33
|
+
function isAffirmativeText(answer) {
|
|
34
|
+
const a = answer.trim().toLowerCase();
|
|
35
|
+
if (!a) return false;
|
|
36
|
+
if (APPROVE_WORDS.has(a)) return true;
|
|
37
|
+
return APPROVE_PREFIX.test(a);
|
|
38
|
+
}
|
|
39
|
+
function isRejectionText(answer) {
|
|
40
|
+
const a = answer.trim().toLowerCase().replace(/[。.!!]$/, "");
|
|
41
|
+
return REJECT_WORDS.has(a);
|
|
42
|
+
}
|
|
43
|
+
function interpretPlanReply(answer) {
|
|
44
|
+
const text = answer.trim();
|
|
45
|
+
if (!text) return { kind: "empty" };
|
|
46
|
+
if (isAffirmativeText(text)) return { kind: "approve" };
|
|
47
|
+
if (isRejectionText(text)) return { kind: "reject" };
|
|
48
|
+
return { kind: "revise", feedback: text };
|
|
49
|
+
}
|
|
2
50
|
var _planHandler = null;
|
|
3
51
|
function setPlanHandler(handler) {
|
|
4
52
|
_planHandler = handler;
|
|
@@ -21,6 +69,14 @@ function makeProposePlan() {
|
|
|
21
69
|
note: "\u8BA1\u5212\u5DF2\u6279\u51C6 \u2014 \u73B0\u5728\u5F00\u59CB\u5B9E\u65BD"
|
|
22
70
|
};
|
|
23
71
|
}
|
|
72
|
+
if (result.revised) {
|
|
73
|
+
return {
|
|
74
|
+
approved: false,
|
|
75
|
+
revised: true,
|
|
76
|
+
feedback: result.feedback ?? "\u7528\u6237\u8981\u6C42\u8865\u5145\u4FEE\u6B63\u8BA1\u5212",
|
|
77
|
+
note: "\u7528\u6237\u6CA1\u6709\u6279\u51C6\uFF0C\u800C\u662F\u5BF9\u8BA1\u5212\u63D0\u51FA\u4E86\u8865\u5145\u8981\u6C42\u3002\u8BF7\u628A\u8FD9\u4E9B\u8981\u6C42\u5408\u5E76\u8FDB\u539F\u8BA1\u5212\uFF08\u4FDD\u7559\u4ECD\u7136\u6709\u6548\u7684\u90E8\u5206\uFF09\uFF0C\u7136\u540E\u518D\u6B21\u8C03\u7528 propose_plan \u63D0\u4EA4\u4FEE\u8BA2\u540E\u7684\u8BA1\u5212\uFF0C\u4E0D\u8981\u5F00\u59CB\u5B9E\u65BD\uFF0C\u4E5F\u4E0D\u8981\u4ECE\u5934\u91CD\u5199\u6574\u4E2A\u65B9\u6848\u3002"
|
|
78
|
+
};
|
|
79
|
+
}
|
|
24
80
|
return {
|
|
25
81
|
approved: false,
|
|
26
82
|
feedback: result.feedback ?? "\u8BA1\u5212\u88AB\u62D2\u7EDD"
|
|
@@ -52,6 +108,9 @@ function registerPlanTool(registry) {
|
|
|
52
108
|
);
|
|
53
109
|
}
|
|
54
110
|
export {
|
|
111
|
+
interpretPlanReply,
|
|
112
|
+
isAffirmativeText,
|
|
113
|
+
isRejectionText,
|
|
55
114
|
registerPlanTool,
|
|
56
115
|
setPlanHandler
|
|
57
116
|
};
|
package/dist/tools/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tools/plan.ts"],"sourcesContent":["import { ToolRegistry } from \"./ToolRegistry.js\";\nimport { Mode } from \"../permissions/PermissionEngine.js\";\n\n/**\n * propose_plan — 计划提案工具\n * 对齐 Python 版 tools/plan.py\n * 在 CLI 模式下通过 readline
|
|
1
|
+
{"version":3,"sources":["../../src/tools/plan.ts"],"sourcesContent":["import { ToolRegistry } from \"./ToolRegistry.js\";\nimport { Mode } from \"../permissions/PermissionEngine.js\";\n\n/**\n * propose_plan — 计划提案工具\n * 对齐 Python 版 tools/plan.py\n * 在 CLI 模式下通过 readline 审批实现\n */\n\n/**\n * 肯定回答(批准 / 授权):单词或句首。\n * 中文口语的「好 / 行 / 嗯」也要认:否则用户敲一个「好」,会被当成补充要求。\n */\nconst APPROVE_WORDS = new Set([\n \"y\",\n \"yes\",\n \"approve\",\n \"approved\",\n \"ok\",\n \"true\",\n \"a\",\n \"1\",\n \"好\",\n \"好的\",\n \"行\",\n \"嗯\",\n]);\nconst APPROVE_PREFIX = /^(yes|approve|同意|批准|允许|确定|可以|好的|确认)/;\n\n/** 明确的拒绝词(Web 端点「拒绝」按钮提交的就是 reject) */\nconst REJECT_WORDS = new Set([\n \"d\",\n \"n\",\n \"no\",\n \"reject\",\n \"rejected\",\n \"deny\",\n \"false\",\n \"0\",\n \"不\",\n \"不行\",\n \"不用\",\n \"拒绝\",\n \"不同意\",\n \"取消\",\n]);\n\n/** 是否肯定回答(批准计划 / 授权目录) */\nexport function isAffirmativeText(answer: string): boolean {\n const a = answer.trim().toLowerCase();\n if (!a) return false;\n if (APPROVE_WORDS.has(a)) return true;\n return APPROVE_PREFIX.test(a);\n}\n\n/**\n * 是否明确的拒绝:只有整句就是拒绝词才算。\n * 「不要改 A,改用 B」这类是修改意见,不能当成否决。\n */\nexport function isRejectionText(answer: string): boolean {\n const a = answer.trim().toLowerCase().replace(/[。.!!]$/, \"\");\n return REJECT_WORDS.has(a);\n}\n\n/**\n * 解析用户对计划提案的一句话回应。\n *\n * CLI 与 Web 共用同一套判定,避免两处词表各自漂移:\n * - approve:批准;\n * - reject:否决;\n * - revise:既没批准也没拒绝 → 视为补充要求,合并进计划后重新提案;\n * - empty:空输入(CLI 重新提示,不改变任何状态)。\n */\nexport type PlanReply =\n | { kind: \"approve\" }\n | { kind: \"reject\" }\n | { kind: \"revise\"; feedback: string }\n | { kind: \"empty\" };\n\nexport function interpretPlanReply(answer: string): PlanReply {\n const text = answer.trim();\n if (!text) return { kind: \"empty\" };\n if (isAffirmativeText(text)) return { kind: \"approve\" };\n if (isRejectionText(text)) return { kind: \"reject\" };\n return { kind: \"revise\", feedback: text };\n}\n\n/**\n * 提案审批结果。\n *\n * `revised` 表示「用户没有批准也没有拒绝,而是提出了补充要求」:把 feedback\n * 合并进原计划后重新提案即可,不要开始实施,也不要把它当成否决而放弃方案。\n */\nexport type PlanHandler = (plan: string) => Promise<{\n approved: boolean;\n mode?: string;\n feedback?: string;\n revised?: boolean;\n}>;\n\nlet _planHandler: PlanHandler | null = null;\n\nexport function setPlanHandler(handler: PlanHandler): void {\n _planHandler = handler;\n}\n\nfunction makeProposePlan() {\n return async function propose_plan(args: Record<string, unknown>) {\n const plan = String(args.plan ?? \"\");\n\n if (!plan.trim()) {\n return { approved: false, error: \"计划内容不能为空\" };\n }\n\n if (!_planHandler) {\n return { approved: false, error: \"当前环境不支持计划审批\" };\n }\n\n try {\n const result = await _planHandler(plan);\n if (result.approved) {\n return {\n approved: true,\n mode: result.mode ?? \"interactive\",\n note: \"计划已批准 — 现在开始实施\",\n };\n }\n /*\n * 用户提出补充要求(既没批准也没拒绝):这是「修订」,不是否决。\n * 明确告诉模型下一步该做什么——把反馈合并进计划、再次调用 propose_plan。\n * 否则模型容易把它当作拒绝而从零重来,或者直接开始动手。\n */\n if (result.revised) {\n return {\n approved: false,\n revised: true,\n feedback: result.feedback ?? \"用户要求补充修正计划\",\n note:\n \"用户没有批准,而是对计划提出了补充要求。请把这些要求合并进原计划\" +\n \"(保留仍然有效的部分),然后再次调用 propose_plan 提交修订后的计划,\" +\n \"不要开始实施,也不要从头重写整个方案。\",\n };\n }\n return {\n approved: false,\n feedback: result.feedback ?? \"计划被拒绝\",\n };\n } catch {\n return { approved: false, error: \"计划审批已取消\" };\n }\n };\n}\n\n/** 注册 propose_plan 工具 */\nexport function registerPlanTool(registry: ToolRegistry): void {\n const planFunc = makeProposePlan();\n\n registry.register(\n (args) => planFunc(args),\n { category: \"planning\", riskLevel: \"low\", capabilities: [\"plan\"], requiresApproval: false },\n {\n type: \"function\",\n function: {\n name: \"propose_plan\",\n description: \"将你的实施计划呈现给用户审批。在探索充分、确定了一个方案后使用此工具:总结你将更改什么、在哪些文件中、以及你将如何验证它。如果被批准,会话将退出只读计划模式,你来实施计划;如果被拒绝,使用结果中的反馈意见修改计划。不要在还没有提案之前就描述实施步骤——先提案。\",\n parameters: {\n type: \"object\",\n properties: {\n plan: { type: \"string\", description: \"完整的实施计划描述(包含将更改什么、在哪些文件中、如何验证)\" },\n },\n required: [\"plan\"],\n },\n },\n },\n );\n}\n"],"mappings":";AAaA,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,iBAAiB;AAGvB,IAAM,eAAe,oBAAI,IAAI;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,SAAS,kBAAkB,QAAyB;AACzD,QAAM,IAAI,OAAO,KAAK,EAAE,YAAY;AACpC,MAAI,CAAC,EAAG,QAAO;AACf,MAAI,cAAc,IAAI,CAAC,EAAG,QAAO;AACjC,SAAO,eAAe,KAAK,CAAC;AAC9B;AAMO,SAAS,gBAAgB,QAAyB;AACvD,QAAM,IAAI,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,WAAW,EAAE;AAC3D,SAAO,aAAa,IAAI,CAAC;AAC3B;AAiBO,SAAS,mBAAmB,QAA2B;AAC5D,QAAM,OAAO,OAAO,KAAK;AACzB,MAAI,CAAC,KAAM,QAAO,EAAE,MAAM,QAAQ;AAClC,MAAI,kBAAkB,IAAI,EAAG,QAAO,EAAE,MAAM,UAAU;AACtD,MAAI,gBAAgB,IAAI,EAAG,QAAO,EAAE,MAAM,SAAS;AACnD,SAAO,EAAE,MAAM,UAAU,UAAU,KAAK;AAC1C;AAeA,IAAI,eAAmC;AAEhC,SAAS,eAAe,SAA4B;AACzD,iBAAe;AACjB;AAEA,SAAS,kBAAkB;AACzB,SAAO,eAAe,aAAa,MAA+B;AAChE,UAAM,OAAO,OAAO,KAAK,QAAQ,EAAE;AAEnC,QAAI,CAAC,KAAK,KAAK,GAAG;AAChB,aAAO,EAAE,UAAU,OAAO,OAAO,mDAAW;AAAA,IAC9C;AAEA,QAAI,CAAC,cAAc;AACjB,aAAO,EAAE,UAAU,OAAO,OAAO,qEAAc;AAAA,IACjD;AAEA,QAAI;AACF,YAAM,SAAS,MAAM,aAAa,IAAI;AACtC,UAAI,OAAO,UAAU;AACnB,eAAO;AAAA,UACL,UAAU;AAAA,UACV,MAAM,OAAO,QAAQ;AAAA,UACrB,MAAM;AAAA,QACR;AAAA,MACF;AAMA,UAAI,OAAO,SAAS;AAClB,eAAO;AAAA,UACL,UAAU;AAAA,UACV,SAAS;AAAA,UACT,UAAU,OAAO,YAAY;AAAA,UAC7B,MACE;AAAA,QAGJ;AAAA,MACF;AACA,aAAO;AAAA,QACL,UAAU;AAAA,QACV,UAAU,OAAO,YAAY;AAAA,MAC/B;AAAA,IACF,QAAQ;AACN,aAAO,EAAE,UAAU,OAAO,OAAO,6CAAU;AAAA,IAC7C;AAAA,EACF;AACF;AAGO,SAAS,iBAAiB,UAA8B;AAC7D,QAAM,WAAW,gBAAgB;AAEjC,WAAS;AAAA,IACP,CAAC,SAAS,SAAS,IAAI;AAAA,IACvB,EAAE,UAAU,YAAY,WAAW,OAAO,cAAc,CAAC,MAAM,GAAG,kBAAkB,MAAM;AAAA,IAC1F;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,QACb,YAAY;AAAA,UACV,MAAM;AAAA,UACN,YAAY;AAAA,YACV,MAAM,EAAE,MAAM,UAAU,aAAa,uLAAiC;AAAA,UACxE;AAAA,UACA,UAAU,CAAC,MAAM;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
package/dist/tools/search.cjs
CHANGED