@zhin.js/agent 0.1.17 → 0.1.18
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/lib/builtin/ask-user-tool.d.ts +1 -1
- package/lib/builtin/ask-user-tool.d.ts.map +1 -1
- package/lib/builtin/ask-user-tool.js +5 -3
- package/lib/builtin/ask-user-tool.js.map +1 -1
- package/lib/discovery/utils.d.ts +3 -1
- package/lib/discovery/utils.d.ts.map +1 -1
- package/lib/discovery/utils.js +12 -5
- package/lib/discovery/utils.js.map +1 -1
- package/lib/init/register-owner-approve-commands.d.ts +2 -0
- package/lib/init/register-owner-approve-commands.d.ts.map +1 -0
- package/lib/init/register-owner-approve-commands.js +137 -0
- package/lib/init/register-owner-approve-commands.js.map +1 -0
- package/lib/init.d.ts +1 -1
- package/lib/init.d.ts.map +1 -1
- package/lib/init.js +3 -1
- package/lib/init.js.map +1 -1
- package/lib/orchestrator/owner-confirm-orchestration.d.ts +7 -3
- package/lib/orchestrator/owner-confirm-orchestration.d.ts.map +1 -1
- package/lib/orchestrator/owner-confirm-orchestration.js +30 -19
- package/lib/orchestrator/owner-confirm-orchestration.js.map +1 -1
- package/lib/orchestrator/owner-orchestration-constants.d.ts +6 -0
- package/lib/orchestrator/owner-orchestration-constants.d.ts.map +1 -0
- package/lib/orchestrator/owner-orchestration-constants.js +10 -0
- package/lib/orchestrator/owner-orchestration-constants.js.map +1 -0
- package/lib/security/bash-tool-context.d.ts +5 -0
- package/lib/security/bash-tool-context.d.ts.map +1 -0
- package/lib/security/bash-tool-context.js +13 -0
- package/lib/security/bash-tool-context.js.map +1 -0
- package/lib/security/exec-policy.d.ts.map +1 -1
- package/lib/security/exec-policy.js +36 -0
- package/lib/security/exec-policy.js.map +1 -1
- package/lib/security/owner-approve-always-store.d.ts +52 -0
- package/lib/security/owner-approve-always-store.d.ts.map +1 -0
- package/lib/security/owner-approve-always-store.js +357 -0
- package/lib/security/owner-approve-always-store.js.map +1 -0
- package/lib/subagent.d.ts.map +1 -1
- package/lib/subagent.js +9 -2
- package/lib/subagent.js.map +1 -1
- package/lib/zhin-agent/index.d.ts.map +1 -1
- package/lib/zhin-agent/index.js +4 -2
- package/lib/zhin-agent/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -19,7 +19,7 @@ export declare function createAskUserTool(plugin: Plugin): Tool;
|
|
|
19
19
|
export declare class AskUserBuiltinTool extends BuiltinBaseTool {
|
|
20
20
|
private readonly plugin;
|
|
21
21
|
readonly name = "ask_user";
|
|
22
|
-
readonly description = "\u5411 Bot Owner \u53D1\u9001\u95EE\u9898\u5E76\u7B49\u5F85\u56DE\u590D\
|
|
22
|
+
readonly description = "\u5411 Bot Owner \u53D1\u9001\u95EE\u9898\u5E76\u7B49\u5F85\u56DE\u590D\uFF1B\u7FA4\u804A\u573A\u666F\u4E0B\u901A\u8FC7\u79C1\u804A\u786E\u8BA4\u3002bash/icqq\uFF1AOwner \u79C1\u804A\u53EF\u7528\u300C#approve always bash\u300D\u300C#approve rule <\u6B63\u5219>\u300D\uFF08\u5339\u914D\u6574\u6BB5 shell \u5B50\u547D\u4EE4\uFF0C\u5982\u70B9\u8D5E\u7C7B icqq \u4E0D\u5FC5\u56FA\u5316\u89E3\u53C2\u6570\uFF09\u3001\u300C#approve list\u300D\u300C#approve revoke rule <id>\u300D\u300C#approve revoke\u300D\u7B49\uFF08\u4EA6\u652F\u6301 / \u6216\u65E0 #\uFF09\u3002write_file / edit_file / web_fetch \u7684\u786C\u7F16\u6392\u4ECD\u987B\u9010\u6B21\u786E\u8BA4\u3002";
|
|
23
23
|
readonly parameters: ToolParametersSchema<Record<string, any>>;
|
|
24
24
|
readonly kind = "interaction";
|
|
25
25
|
constructor(plugin: Plugin);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-user-tool.d.ts","sourceRoot":"","sources":["../../src/builtin/ask-user-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAGL,KAAK,MAAM,EAGX,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAMzD;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"ask-user-tool.d.ts","sourceRoot":"","sources":["../../src/builtin/ask-user-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAGL,KAAK,MAAM,EAGX,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAMzD;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAgBxG;AAED,eAAO,MAAM,mBAAmB,EAAE,oBAgBjC,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,qBAAa,kBAAmB,SAAQ,eAAe;IAOzC,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,WAAW,0pBAC2O;IAC/P,QAAQ,CAAC,UAAU,4CAAuB;IAC1C,QAAQ,CAAC,IAAI,iBAAiB;gBAED,MAAM,EAAE,MAAM;IAgBrC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CA+ErF"}
|
|
@@ -11,7 +11,8 @@ import { BuiltinBaseTool } from './builtin-base-tool.js';
|
|
|
11
11
|
* 私聊 Owner 场景:使用 Prompt 类直接交互(原有行为)
|
|
12
12
|
*/
|
|
13
13
|
export async function askViaPrompt(plugin, message, args, questionType, timeoutMs) {
|
|
14
|
-
const
|
|
14
|
+
const host = plugin.root ?? plugin;
|
|
15
|
+
const prompt = new Prompt(host, message);
|
|
15
16
|
try {
|
|
16
17
|
switch (questionType) {
|
|
17
18
|
case 'number': {
|
|
@@ -93,7 +94,7 @@ export function createAskUserTool(plugin) {
|
|
|
93
94
|
export class AskUserBuiltinTool extends BuiltinBaseTool {
|
|
94
95
|
plugin;
|
|
95
96
|
name = 'ask_user';
|
|
96
|
-
description = '向 Bot Owner
|
|
97
|
+
description = '向 Bot Owner 发送问题并等待回复;群聊场景下通过私聊确认。bash/icqq:Owner 私聊可用「#approve always bash」「#approve rule <正则>」(匹配整段 shell 子命令,如点赞类 icqq 不必固化解参数)、「#approve list」「#approve revoke rule <id>」「#approve revoke」等(亦支持 / 或无 #)。write_file / edit_file / web_fetch 的硬编排仍须逐次确认。';
|
|
97
98
|
parameters = ASK_USER_PARAMETERS;
|
|
98
99
|
kind = 'interaction';
|
|
99
100
|
constructor(plugin) {
|
|
@@ -153,6 +154,7 @@ export class AskUserBuiltinTool extends BuiltinBaseTool {
|
|
|
153
154
|
catch (e) {
|
|
154
155
|
return `Error: 无法向 Owner 发送私聊消息: ${errMsg(e)}`;
|
|
155
156
|
}
|
|
157
|
+
const hostPlugin = this.plugin.root ?? this.plugin;
|
|
156
158
|
return new Promise((resolve) => {
|
|
157
159
|
const middleware = async (message, next) => {
|
|
158
160
|
if (message.$channel?.type !== 'private')
|
|
@@ -166,7 +168,7 @@ export class AskUserBuiltinTool extends BuiltinBaseTool {
|
|
|
166
168
|
const raw = message.$raw;
|
|
167
169
|
resolve(formatOwnerResponse(raw, questionType, recordArgs));
|
|
168
170
|
};
|
|
169
|
-
const dispose =
|
|
171
|
+
const dispose = hostPlugin.addMiddleware(middleware);
|
|
170
172
|
const timer = setTimeout(() => {
|
|
171
173
|
dispose();
|
|
172
174
|
if (args.default_value != null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-user-tool.js","sourceRoot":"","sources":["../../src/builtin/ask-user-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,MAAM,GASP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,OAAY,EACZ,IAAyB,EACzB,YAAoB,EACpB,SAAiB;IAEjB,MAAM,
|
|
1
|
+
{"version":3,"file":"ask-user-tool.js","sourceRoot":"","sources":["../../src/builtin/ask-user-tool.ts"],"names":[],"mappings":"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"}
|
package/lib/discovery/utils.d.ts
CHANGED
|
@@ -14,7 +14,9 @@ export declare function expandHome(p: string): string;
|
|
|
14
14
|
/** Workspace / ~/.zhin / data 下 skills 根目录(与 activate_skill 扫描顺序一致的前缀) */
|
|
15
15
|
export declare function buildStandardSkillDirs(): string[];
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* 从根插件树收集:各插件包目录下的 `skills/`(其下为 `<name>/SKILL.md`)
|
|
18
|
+
*
|
|
19
|
+
* 递归整棵子树(不仅一层子插件),避免适配器套在目录/聚合插件下时技能目录被漏扫。
|
|
18
20
|
*/
|
|
19
21
|
export declare function collectPluginSkillSearchRoots(root: Plugin | null | undefined): string[];
|
|
20
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/discovery/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,wBAAwB;AACxB,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAEzC;AAED,yBAAyB;AACzB,wBAAgB,UAAU,IAAI,MAAM,CAInC;AAED,2BAA2B;AAC3B,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI5C;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAMjD;AAED
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/discovery/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,wBAAwB;AACxB,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAEzC;AAED,yBAAyB;AACzB,wBAAgB,UAAU,IAAI,MAAM,CAInC;AAED,2BAA2B;AAC3B,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI5C;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAMjD;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAyBvF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAMxE;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,EAAE,GAAG,MAAM,EAAE,CAM9E;AAED,iDAAiD;AACjD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CASrH"}
|
package/lib/discovery/utils.js
CHANGED
|
@@ -34,7 +34,9 @@ export function buildStandardSkillDirs() {
|
|
|
34
34
|
];
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
37
|
+
* 从根插件树收集:各插件包目录下的 `skills/`(其下为 `<name>/SKILL.md`)
|
|
38
|
+
*
|
|
39
|
+
* 递归整棵子树(不仅一层子插件),避免适配器套在目录/聚合插件下时技能目录被漏扫。
|
|
38
40
|
*/
|
|
39
41
|
export function collectPluginSkillSearchRoots(root) {
|
|
40
42
|
if (!root)
|
|
@@ -55,10 +57,15 @@ export function collectPluginSkillSearchRoots(root) {
|
|
|
55
57
|
push(path.join(path.dirname(dir), 'skills'));
|
|
56
58
|
}
|
|
57
59
|
};
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
const walk = (p) => {
|
|
61
|
+
if (!p)
|
|
62
|
+
return;
|
|
63
|
+
fromPlugin(p);
|
|
64
|
+
for (const child of p.children || []) {
|
|
65
|
+
walk(child);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
walk(root);
|
|
62
69
|
return dirs;
|
|
63
70
|
}
|
|
64
71
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/discovery/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,wBAAwB;AACxB,MAAM,UAAU,MAAM,CAAC,CAAU;IAC/B,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7C,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,OAAO,CAAC,CAAC;AACX,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC;KAClC,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/discovery/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-owner-approve-commands.d.ts","sourceRoot":"","sources":["../../src/init/register-owner-approve-commands.ts"],"names":[],"mappings":"AAmIA,wBAAgB,4BAA4B,IAAI,IAAI,CAanD"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owner 私聊指令:approve always / approve rule / list / revoke —— **bash + icqq 放行策略**。
|
|
3
|
+
*
|
|
4
|
+
* - **approve always bash**:永久跳过 bash 的 Owner 硬编排确认(ZHIN_NEEDS_OWNER)。
|
|
5
|
+
* - **approve rule <正则>**:对 **整条** shell 子命令做正则匹配(如 `^icqq\\s+friend\\s+like\\b`),命中则敏感 icqq 也无需再确认;持久化。
|
|
6
|
+
* - **approve list**:展示永久放行与规则列表。
|
|
7
|
+
*
|
|
8
|
+
* 支持前缀 `#`、`/` 或无符号。
|
|
9
|
+
*/
|
|
10
|
+
import { getPlugin, MessageCommand } from '@zhin.js/core';
|
|
11
|
+
import { addBashApproveRule, addOwnerApproveAlways, clearPendingOrchestrationTool, formatBashApproveList, getOwnerToolContextOrUndefined, getPendingOrchestrationTool, removeBashApproveRule, removeOwnerApproveAlways, OWNER_APPROVE_ALWAYS_TOOL, } from '../security/owner-approve-always-store.js';
|
|
12
|
+
function usageLines(cmdPrefix) {
|
|
13
|
+
return [
|
|
14
|
+
'用法(bash / icqq):',
|
|
15
|
+
` ${cmdPrefix}approve always bash — 永久跳过 bash 的 Owner 硬确认`,
|
|
16
|
+
` ${cmdPrefix}approve always — 同上;须在近期 bash 私聊待确认窗口内`,
|
|
17
|
+
` ${cmdPrefix}approve rule <正则> — 为敏感 icqq 命令增加放行规则(匹配整段子命令)`,
|
|
18
|
+
` ${cmdPrefix}approve list — 列出永久放行与规则 id`,
|
|
19
|
+
` ${cmdPrefix}approve revoke rule <id> — 删除一条规则(id 可用 list 前 8 位)`,
|
|
20
|
+
` ${cmdPrefix}approve revoke — 撤销 bash 永久放行(不删规则)`,
|
|
21
|
+
].join('\n');
|
|
22
|
+
}
|
|
23
|
+
function registerApproveCommandVariants(commandService, pluginName, disposers) {
|
|
24
|
+
const prefixes = ['', '#', '/'];
|
|
25
|
+
for (const p of prefixes) {
|
|
26
|
+
const alwaysExplicit = new MessageCommand(`${p}approve always bash`)
|
|
27
|
+
.desc('Owner:永久放行 bash 的在线安全确认', '仅私聊;写入 data/owner-approve-always.json')
|
|
28
|
+
.usage(`${p}approve always bash`)
|
|
29
|
+
.action((message) => {
|
|
30
|
+
const plugin = getPlugin().root ?? getPlugin();
|
|
31
|
+
const ctx = getOwnerToolContextOrUndefined(plugin, message);
|
|
32
|
+
if (!ctx)
|
|
33
|
+
return '⚠️ 仅 Bot Owner 可在私聊中使用此指令。';
|
|
34
|
+
const r = addOwnerApproveAlways(plugin, ctx, OWNER_APPROVE_ALWAYS_TOOL);
|
|
35
|
+
if (!r.ok)
|
|
36
|
+
return `⚠️ ${r.error}\n${usageLines(p)}`;
|
|
37
|
+
return '✅ 已对 bash 永久放行 Owner 硬确认(本 Bot)。后续 bash 需确认时将不再弹窗;若当前仍有一条待回复的 bash 确认,本轮仍需输入 yes。';
|
|
38
|
+
});
|
|
39
|
+
commandService.add(alwaysExplicit, pluginName);
|
|
40
|
+
disposers.push(() => commandService.remove(alwaysExplicit));
|
|
41
|
+
const alwaysImplicit = new MessageCommand(`${p}approve always`)
|
|
42
|
+
.desc('Owner:永久放行 bash(须在近期 bash 待确认窗口内)')
|
|
43
|
+
.action((message) => {
|
|
44
|
+
const plugin = getPlugin().root ?? getPlugin();
|
|
45
|
+
const ctx = getOwnerToolContextOrUndefined(plugin, message);
|
|
46
|
+
if (!ctx)
|
|
47
|
+
return '⚠️ 仅 Bot Owner 可在私聊中使用此指令。';
|
|
48
|
+
const pending = getPendingOrchestrationTool(plugin, ctx);
|
|
49
|
+
if (!pending) {
|
|
50
|
+
return `⚠️ 无近期 bash 待确认上下文,请使用:${p}approve always bash。\n${usageLines(p)}`;
|
|
51
|
+
}
|
|
52
|
+
const r = addOwnerApproveAlways(plugin, ctx, pending);
|
|
53
|
+
if (!r.ok)
|
|
54
|
+
return `⚠️ ${r.error}`;
|
|
55
|
+
clearPendingOrchestrationTool(plugin, ctx);
|
|
56
|
+
return '✅ 已对 bash 永久放行 Owner 硬确认(本 Bot)。';
|
|
57
|
+
});
|
|
58
|
+
commandService.add(alwaysImplicit, pluginName);
|
|
59
|
+
disposers.push(() => commandService.remove(alwaysImplicit));
|
|
60
|
+
const revokeRuleCmd = new MessageCommand(`${p}approve revoke rule <id:text>`)
|
|
61
|
+
.desc('Owner:按 id(或前 8 位前缀)删除一条放行正则')
|
|
62
|
+
.action((message, match) => {
|
|
63
|
+
const plugin = getPlugin().root ?? getPlugin();
|
|
64
|
+
const ctx = getOwnerToolContextOrUndefined(plugin, message);
|
|
65
|
+
if (!ctx)
|
|
66
|
+
return '⚠️ 仅 Bot Owner 可在私聊中使用此指令。';
|
|
67
|
+
const id = String(match.params?.id ?? '').trim();
|
|
68
|
+
if (!id)
|
|
69
|
+
return `⚠️ 请提供规则 id。\n${usageLines(p)}`;
|
|
70
|
+
const r = removeBashApproveRule(plugin, ctx, id);
|
|
71
|
+
if (!r.ok)
|
|
72
|
+
return `⚠️ ${r.error}`;
|
|
73
|
+
return '✅ 已删除该放行规则。';
|
|
74
|
+
});
|
|
75
|
+
commandService.add(revokeRuleCmd, pluginName);
|
|
76
|
+
disposers.push(() => commandService.remove(revokeRuleCmd));
|
|
77
|
+
const ruleCmd = new MessageCommand(`${p}approve rule <pattern:text>`)
|
|
78
|
+
.desc('Owner:添加 bash/icqq 放行正则(匹配整段待执行子命令)')
|
|
79
|
+
.usage(`${p}approve rule ^icqq\\\\s+friend\\\\s+like\\\\b`)
|
|
80
|
+
.action((message, match) => {
|
|
81
|
+
const plugin = getPlugin().root ?? getPlugin();
|
|
82
|
+
const ctx = getOwnerToolContextOrUndefined(plugin, message);
|
|
83
|
+
if (!ctx)
|
|
84
|
+
return '⚠️ 仅 Bot Owner 可在私聊中使用此指令。';
|
|
85
|
+
const raw = String(match.params?.pattern ?? '').trim();
|
|
86
|
+
if (!raw)
|
|
87
|
+
return `⚠️ 请提供正则。\n${usageLines(p)}`;
|
|
88
|
+
const r = addBashApproveRule(plugin, ctx, raw);
|
|
89
|
+
if (!r.ok)
|
|
90
|
+
return `⚠️ ${r.error}`;
|
|
91
|
+
return `✅ 已添加规则 id=${r.id.slice(0, 8)}… ,匹配子命令时将不再要求 Owner 确认(仍受危险命令黑名单等约束)。`;
|
|
92
|
+
});
|
|
93
|
+
commandService.add(ruleCmd, pluginName);
|
|
94
|
+
disposers.push(() => commandService.remove(ruleCmd));
|
|
95
|
+
const listCmd = new MessageCommand(`${p}approve list`)
|
|
96
|
+
.desc('Owner:列出 bash 永久放行与正则规则')
|
|
97
|
+
.action((message) => {
|
|
98
|
+
const plugin = getPlugin().root ?? getPlugin();
|
|
99
|
+
const ctx = getOwnerToolContextOrUndefined(plugin, message);
|
|
100
|
+
if (!ctx)
|
|
101
|
+
return '⚠️ 仅 Bot Owner 可在私聊中使用此指令。';
|
|
102
|
+
return formatBashApproveList(plugin, ctx);
|
|
103
|
+
});
|
|
104
|
+
commandService.add(listCmd, pluginName);
|
|
105
|
+
disposers.push(() => commandService.remove(listCmd));
|
|
106
|
+
const revokeCmd = new MessageCommand(`${p}approve revoke`)
|
|
107
|
+
.desc('Owner:撤销 bash 永久放行(保留正则规则)')
|
|
108
|
+
.action((message) => {
|
|
109
|
+
const plugin = getPlugin().root ?? getPlugin();
|
|
110
|
+
const ctx = getOwnerToolContextOrUndefined(plugin, message);
|
|
111
|
+
if (!ctx)
|
|
112
|
+
return '⚠️ 仅 Bot Owner 可在私聊中使用此指令。';
|
|
113
|
+
const r = removeOwnerApproveAlways(plugin, ctx, OWNER_APPROVE_ALWAYS_TOOL);
|
|
114
|
+
if (!r.ok)
|
|
115
|
+
return `⚠️ ${r.error}`;
|
|
116
|
+
return '✅ 已撤销 bash 永久放行(正则规则仍保留,可用 approve list 查看)。';
|
|
117
|
+
});
|
|
118
|
+
commandService.add(revokeCmd, pluginName);
|
|
119
|
+
disposers.push(() => commandService.remove(revokeCmd));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export function registerOwnerApproveCommands() {
|
|
123
|
+
const plugin = getPlugin();
|
|
124
|
+
const { useContext, root, logger } = plugin;
|
|
125
|
+
useContext('command', (commandService) => {
|
|
126
|
+
if (!commandService)
|
|
127
|
+
return;
|
|
128
|
+
const disposers = [];
|
|
129
|
+
registerApproveCommandVariants(commandService, root.name, disposers);
|
|
130
|
+
logger.debug(`Registered Owner approve (bash/icqq) commands (${disposers.length} patterns)`);
|
|
131
|
+
return () => {
|
|
132
|
+
for (const d of disposers)
|
|
133
|
+
d();
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=register-owner-approve-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-owner-approve-commands.js","sourceRoot":"","sources":["../../src/init/register-owner-approve-commands.ts"],"names":[],"mappings":"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"}
|
package/lib/init.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - register-ai-trigger — AI 触发处理器
|
|
11
11
|
* - register-db-upgrade — 数据库存储升级(无竞态条件)
|
|
12
12
|
* - register-message-recorder — 消息记录中间件
|
|
13
|
-
* - register-
|
|
13
|
+
* - register-owner-approve-commands — Owner 私聊 approve(仅 bash shell 硬确认白名单)
|
|
14
14
|
* - register-builtin-tools — 内置系统工具 + 工作区技能
|
|
15
15
|
*/
|
|
16
16
|
import './init/types.js';
|
package/lib/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,iBAAiB,CAAC;AAczB;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,IAAI,CActC"}
|
package/lib/init.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - register-ai-trigger — AI 触发处理器
|
|
11
11
|
* - register-db-upgrade — 数据库存储升级(无竞态条件)
|
|
12
12
|
* - register-message-recorder — 消息记录中间件
|
|
13
|
-
* - register-
|
|
13
|
+
* - register-owner-approve-commands — Owner 私聊 approve(仅 bash shell 硬确认白名单)
|
|
14
14
|
* - register-builtin-tools — 内置系统工具 + 工作区技能
|
|
15
15
|
*/
|
|
16
16
|
import './init/types.js';
|
|
@@ -24,6 +24,7 @@ import { registerAITrigger } from './init/register-ai-trigger.js';
|
|
|
24
24
|
import { registerDbUpgrade } from './init/register-db-upgrade.js';
|
|
25
25
|
import { registerMessageRecorder } from './init/register-message-recorder.js';
|
|
26
26
|
import { registerManagementTools } from './init/register-management-tools.js';
|
|
27
|
+
import { registerOwnerApproveCommands } from './init/register-owner-approve-commands.js';
|
|
27
28
|
import { registerBuiltinTools } from './init/register-builtin-tools.js';
|
|
28
29
|
/**
|
|
29
30
|
* 初始化 AI 模块
|
|
@@ -45,6 +46,7 @@ export function initAgentModule() {
|
|
|
45
46
|
registerDbUpgrade(refs);
|
|
46
47
|
registerMessageRecorder(refs);
|
|
47
48
|
registerManagementTools();
|
|
49
|
+
registerOwnerApproveCommands();
|
|
48
50
|
registerBuiltinTools(refs);
|
|
49
51
|
}
|
|
50
52
|
//# sourceMappingURL=init.js.map
|
package/lib/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAE1B,oBAAoB,EAAE,CAAC;IACvB,mBAAmB,EAAE,CAAC;IACtB,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC7B,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9B,uBAAuB,EAAE,CAAC;IAC1B,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAE1B,oBAAoB,EAAE,CAAC;IACvB,mBAAmB,EAAE,CAAC;IACtB,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC7B,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9B,uBAAuB,EAAE,CAAC;IAC1B,4BAA4B,EAAE,CAAC;IAC/B,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
import type { ToolContext } from '@zhin.js/core';
|
|
1
|
+
import type { Plugin, ToolContext } from '@zhin.js/core';
|
|
2
2
|
import type { ToolResultTransform } from '@zhin.js/ai';
|
|
3
3
|
/** 工具结果第一行须与此完全一致(行首无空白) */
|
|
4
4
|
export declare const ZHIN_NEEDS_OWNER_FIRST_LINE: "ZHIN_NEEDS_OWNER:";
|
|
5
|
-
|
|
6
|
-
export declare const OWNER_HARD_ORCHESTRATION_TOOLS: readonly ["bash", "write_file", "edit_file", "web_fetch"];
|
|
5
|
+
export { OWNER_HARD_ORCHESTRATION_TOOLS } from './owner-orchestration-constants.js';
|
|
7
6
|
export interface OwnerOrchestrationOptions {
|
|
8
7
|
toolContext: ToolContext;
|
|
9
8
|
/** 子 Agent 内为 true:仅保留信号,不执行 B */
|
|
10
9
|
disableHardOrchestration?: boolean;
|
|
11
10
|
/** 每根任务自动 ask_user 上限,默认 3 */
|
|
12
11
|
maxAutoOwnerAsk?: number;
|
|
12
|
+
/**
|
|
13
|
+
* 当前 Bot 插件实例。生产路径可由 {@link ZhinAgent} 传入 `getPlugin()`;
|
|
14
|
+
* 单测注入桩对象,避免依赖对 `@zhin.js/core` 的全局 mock(与 Vitest 模块缓存冲突)。
|
|
15
|
+
*/
|
|
16
|
+
plugin?: Plugin;
|
|
13
17
|
}
|
|
14
18
|
/**
|
|
15
19
|
* 解析权威首行;正文为第二行起(可含多行)。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-confirm-orchestration.d.ts","sourceRoot":"","sources":["../../src/orchestrator/owner-confirm-orchestration.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"owner-confirm-orchestration.d.ts","sourceRoot":"","sources":["../../src/orchestrator/owner-confirm-orchestration.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAUvD,4BAA4B;AAC5B,eAAO,MAAM,2BAA2B,EAAG,mBAA4B,CAAC;AAExE,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AAMpF,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,kCAAkC;IAClC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,8BAA8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAQ1F;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG3F;AAqBD;;GAEG;AACH,wBAAgB,0CAA0C,CACxD,OAAO,EAAE,yBAAyB,GACjC,mBAAmB,CAoDrB"}
|
|
@@ -7,15 +7,11 @@
|
|
|
7
7
|
import { getPlugin } from '@zhin.js/core';
|
|
8
8
|
import { AskUserBuiltinTool } from '../builtin/ask-user-tool.js';
|
|
9
9
|
import { errMsg } from '../discovery/utils.js';
|
|
10
|
+
import { clearPendingOrchestrationTool, hasOwnerApproveAlways, setPendingOrchestrationTool, } from '../security/owner-approve-always-store.js';
|
|
11
|
+
import { OWNER_HARD_ORCHESTRATION_TOOLS } from './owner-orchestration-constants.js';
|
|
10
12
|
/** 工具结果第一行须与此完全一致(行首无空白) */
|
|
11
13
|
export const ZHIN_NEEDS_OWNER_FIRST_LINE = 'ZHIN_NEEDS_OWNER:';
|
|
12
|
-
|
|
13
|
-
export const OWNER_HARD_ORCHESTRATION_TOOLS = [
|
|
14
|
-
'bash',
|
|
15
|
-
'write_file',
|
|
16
|
-
'edit_file',
|
|
17
|
-
'web_fetch',
|
|
18
|
-
];
|
|
14
|
+
export { OWNER_HARD_ORCHESTRATION_TOOLS } from './owner-orchestration-constants.js';
|
|
19
15
|
const WHITELIST = new Set(OWNER_HARD_ORCHESTRATION_TOOLS);
|
|
20
16
|
const DEFAULT_MAX_AUTO_ASK = 3;
|
|
21
17
|
/**
|
|
@@ -65,23 +61,38 @@ export function createOwnerOrchestratedToolResultTransform(options) {
|
|
|
65
61
|
if (usedOrchestrationSlots >= maxAsk) {
|
|
66
62
|
return appendLimitNote(result, maxAsk);
|
|
67
63
|
}
|
|
68
|
-
let plugin;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
64
|
+
let plugin = options.plugin;
|
|
65
|
+
if (!plugin) {
|
|
66
|
+
try {
|
|
67
|
+
plugin = getPlugin();
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
return appendUnavailableNote(result, errMsg(e));
|
|
71
|
+
}
|
|
74
72
|
}
|
|
75
73
|
const askTool = new AskUserBuiltinTool(plugin);
|
|
76
74
|
const { body } = parseNeedsOwnerSignal(result);
|
|
77
75
|
const question = buildConfirmQuestion(toolName, body);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
if (toolName === 'bash' && hasOwnerApproveAlways(plugin, options.toolContext, toolName)) {
|
|
77
|
+
return appendOrchestratedOwnerAnswer(result, 'yes');
|
|
78
|
+
}
|
|
79
|
+
if (toolName === 'bash') {
|
|
80
|
+
setPendingOrchestrationTool(plugin, options.toolContext, toolName);
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const ownerRaw = await askTool.run({ question, type: 'confirm', timeout: 120 }, options.toolContext);
|
|
84
|
+
const ownerStr = typeof ownerRaw === 'string' ? ownerRaw : String(ownerRaw);
|
|
85
|
+
if (ownerStr.startsWith('Error:')) {
|
|
86
|
+
return appendUnavailableNote(result, ownerStr);
|
|
87
|
+
}
|
|
88
|
+
usedOrchestrationSlots++;
|
|
89
|
+
return appendOrchestratedOwnerAnswer(result, ownerStr.trim());
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
if (toolName === 'bash') {
|
|
93
|
+
clearPendingOrchestrationTool(plugin, options.toolContext);
|
|
94
|
+
}
|
|
82
95
|
}
|
|
83
|
-
usedOrchestrationSlots++;
|
|
84
|
-
return appendOrchestratedOwnerAnswer(result, ownerStr.trim());
|
|
85
96
|
};
|
|
86
97
|
}
|
|
87
98
|
//# sourceMappingURL=owner-confirm-orchestration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-confirm-orchestration.js","sourceRoot":"","sources":["../../src/orchestrator/owner-confirm-orchestration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"owner-confirm-orchestration.js","sourceRoot":"","sources":["../../src/orchestrator/owner-confirm-orchestration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owner 硬编排(ZHIN_NEEDS_OWNER → ask_user)涉及的工具白名单。
|
|
3
|
+
*/
|
|
4
|
+
export declare const OWNER_HARD_ORCHESTRATION_TOOLS: readonly ["bash", "write_file", "edit_file", "web_fetch"];
|
|
5
|
+
export type OwnerHardOrchestrationTool = (typeof OWNER_HARD_ORCHESTRATION_TOOLS)[number];
|
|
6
|
+
//# sourceMappingURL=owner-orchestration-constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-orchestration-constants.d.ts","sourceRoot":"","sources":["../../src/orchestrator/owner-orchestration-constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,8BAA8B,2DAKjC,CAAC;AAEX,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-orchestration-constants.js","sourceRoot":"","sources":["../../src/orchestrator/owner-orchestration-constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,MAAM;IACN,YAAY;IACZ,WAAW;IACX,WAAW;CACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ToolContext } from '@zhin.js/core';
|
|
2
|
+
export declare function getCurrentBashToolContext(): ToolContext | undefined;
|
|
3
|
+
export declare function runWithBashToolContext<T>(ctx: ToolContext | undefined, fn: () => T): T;
|
|
4
|
+
export declare function runWithBashToolContext<T>(ctx: ToolContext | undefined, fn: () => Promise<T>): Promise<T>;
|
|
5
|
+
//# sourceMappingURL=bash-tool-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-tool-context.d.ts","sourceRoot":"","sources":["../../src/security/bash-tool-context.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAIjD,wBAAgB,yBAAyB,IAAI,WAAW,GAAG,SAAS,CAEnE;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACxF,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 在 @zhin.js/ai Agent 执行工具期间挂载当前 {@link ToolContext},
|
|
3
|
+
* 供 {@link checkExecPolicy} 等无法从 `tool.execute(args)` 拿到上下文的模块读取(如 icqq bash 放行规则)。
|
|
4
|
+
*/
|
|
5
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
6
|
+
const als = new AsyncLocalStorage();
|
|
7
|
+
export function getCurrentBashToolContext() {
|
|
8
|
+
return als.getStore();
|
|
9
|
+
}
|
|
10
|
+
export function runWithBashToolContext(ctx, fn) {
|
|
11
|
+
return als.run(ctx, fn);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=bash-tool-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-tool-context.js","sourceRoot":"","sources":["../../src/security/bash-tool-context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,GAAG,GAAG,IAAI,iBAAiB,EAA2B,CAAC;AAE7D,MAAM,UAAU,yBAAyB;IACvC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAID,MAAM,UAAU,sBAAsB,CAAI,GAA4B,EAAE,EAAwB;IAC9F,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-policy.d.ts","sourceRoot":"","sources":["../../src/security/exec-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"exec-policy.d.ts","sourceRoot":"","sources":["../../src/security/exec-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAc/D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAIjD,CAAC;AAqBF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMzD;AAYD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsBzD;AAID;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAG9D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK1D;AAID,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAID;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,MAAM,EAAE,CAMhF;AA2FD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAyCpG;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAoBzG"}
|
|
@@ -9,7 +9,10 @@
|
|
|
9
9
|
* 5. 只读命令自动放行 — 与 file-policy classifyBashCommand 集成
|
|
10
10
|
* 6. Owner 信号 — execAsk=true 时返回需审批(ZHIN_NEEDS_OWNER),由编排层可硬触发 ask_user
|
|
11
11
|
*/
|
|
12
|
+
import { getPlugin } from '@zhin.js/core';
|
|
12
13
|
import { classifyBashCommand } from './file-policy.js';
|
|
14
|
+
import { getCurrentBashToolContext } from './bash-tool-context.js';
|
|
15
|
+
import { isIcqqSensitiveSubcommand, matchesBashOwnerExecBypass, } from './owner-approve-always-store.js';
|
|
13
16
|
// ── 预设命令白名单 ──────────────────────────────────────────────────
|
|
14
17
|
const PRESET_READONLY = ['ls', 'cat', 'pwd', 'date', 'whoami', 'grep', 'find', 'head', 'tail', 'wc', 'stat', 'file'];
|
|
15
18
|
const PRESET_NETWORK = [...PRESET_READONLY, 'curl', 'wget', 'ping', 'dig', 'nslookup', 'host'];
|
|
@@ -121,6 +124,18 @@ export function resolveExecAllowlist(config) {
|
|
|
121
124
|
const merged = [...new Set([...presetList, ...custom])];
|
|
122
125
|
return merged;
|
|
123
126
|
}
|
|
127
|
+
function tryExecBypassForSensitiveIcqq(normalizedSubCommand) {
|
|
128
|
+
const ctx = getCurrentBashToolContext();
|
|
129
|
+
if (!ctx?.platform || !ctx?.botId)
|
|
130
|
+
return false;
|
|
131
|
+
try {
|
|
132
|
+
const plugin = getPlugin().root ?? getPlugin();
|
|
133
|
+
return matchesBashOwnerExecBypass(plugin, ctx, normalizedSubCommand);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
124
139
|
/**
|
|
125
140
|
* 检查单条子命令是否允许执行。
|
|
126
141
|
* 内部函数 — 不做复合命令拆分。
|
|
@@ -139,6 +154,27 @@ function checkSingleCommand(cmdName, fullSubCommand, allowlist, security, execAs
|
|
|
139
154
|
if (classification.isReadOnly) {
|
|
140
155
|
return { allowed: true };
|
|
141
156
|
}
|
|
157
|
+
// 3.5 icqq CLI(allowlist 模式):非敏感子命令直接放行;敏感子命令可走 Owner 正则/永久放行
|
|
158
|
+
if (security === 'allowlist' && cmdName === 'icqq') {
|
|
159
|
+
const norm = stripSafeWrappers(stripEnvVarPrefix(fullSubCommand.trim()));
|
|
160
|
+
if (!isIcqqSensitiveSubcommand(norm)) {
|
|
161
|
+
return { allowed: true };
|
|
162
|
+
}
|
|
163
|
+
if (tryExecBypassForSensitiveIcqq(norm)) {
|
|
164
|
+
return { allowed: true };
|
|
165
|
+
}
|
|
166
|
+
if (execAsk) {
|
|
167
|
+
return {
|
|
168
|
+
allowed: false,
|
|
169
|
+
needsApproval: true,
|
|
170
|
+
reason: `icqq 敏感操作需 Bot Owner 确认:${norm.slice(0, 280)}`,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
allowed: false,
|
|
175
|
+
reason: `icqq 敏感操作已被拒绝(未开启 execAsk):${norm.slice(0, 280)}`,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
142
178
|
// 4. 白名单匹配
|
|
143
179
|
const allowed = allowlist.some(pattern => {
|
|
144
180
|
try {
|