@downcity/plugins 1.0.64 → 1.0.66
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/bin/shell/ShellRuntimeTypes.d.ts +17 -2
- package/bin/shell/ShellRuntimeTypes.d.ts.map +1 -1
- package/bin/shell/runtime/ShellActionRuntime.d.ts +4 -1
- package/bin/shell/runtime/ShellActionRuntime.d.ts.map +1 -1
- package/bin/shell/runtime/ShellActionRuntime.js +64 -4
- package/bin/shell/runtime/ShellActionRuntime.js.map +1 -1
- package/bin/shell/runtime/ShellApprovalRuntime.d.ts +9 -4
- package/bin/shell/runtime/ShellApprovalRuntime.d.ts.map +1 -1
- package/bin/shell/runtime/ShellApprovalRuntime.js +34 -1
- package/bin/shell/runtime/ShellApprovalRuntime.js.map +1 -1
- package/package.json +2 -2
- package/scripts/unrestricted-sandbox-approval.test.mjs +179 -0
- package/src/shell/ShellRuntimeTypes.ts +17 -1
- package/src/shell/runtime/ShellActionRuntime.ts +70 -4
- package/src/shell/runtime/ShellApprovalRuntime.ts +45 -5
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { ChildProcessWithoutNullStreams } from "node:child_process";
|
|
10
10
|
import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
|
|
11
|
-
import type { ShellApprovalStatus, ShellSessionSnapshot } from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
|
|
11
|
+
import type { ShellApprovalStatus, ShellApprovalToolName, ShellSessionSnapshot } from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
|
|
12
12
|
import type { ResolvedShellPluginOptions } from "../shell/types/ShellPluginOptions.js";
|
|
13
13
|
/**
|
|
14
14
|
* unrestricted sandbox 审批运行态。
|
|
@@ -29,11 +29,26 @@ export type ShellApprovalRuntimeState = {
|
|
|
29
29
|
/**
|
|
30
30
|
* 关联工具名。
|
|
31
31
|
*/
|
|
32
|
-
toolName:
|
|
32
|
+
toolName: ShellApprovalToolName;
|
|
33
33
|
/**
|
|
34
34
|
* 申请执行的命令。
|
|
35
|
+
*
|
|
36
|
+
* 说明(中文)
|
|
37
|
+
* - `shell_write` 使用该字段保存 stdin 写入预览,保持审批队列结构统一。
|
|
35
38
|
*/
|
|
36
39
|
cmd: string;
|
|
40
|
+
/**
|
|
41
|
+
* 审批动作类型。
|
|
42
|
+
*/
|
|
43
|
+
operation: "exec" | "start" | "write";
|
|
44
|
+
/**
|
|
45
|
+
* stdin 写入内容预览;仅 `shell_write` 审批存在。
|
|
46
|
+
*/
|
|
47
|
+
inputPreview?: string;
|
|
48
|
+
/**
|
|
49
|
+
* stdin 写入字符数;仅 `shell_write` 审批存在。
|
|
50
|
+
*/
|
|
51
|
+
inputChars?: number;
|
|
37
52
|
/**
|
|
38
53
|
* 命令执行目录。
|
|
39
54
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShellRuntimeTypes.d.ts","sourceRoot":"","sources":["../../src/shell/ShellRuntimeTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,oEAAoE,CAAC;AAC5E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAEtF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"ShellRuntimeTypes.d.ts","sourceRoot":"","sources":["../../src/shell/ShellRuntimeTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,oEAAoE,CAAC;AAC5E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAEtF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,EAAE,qBAAqB,CAAC;IAChC;;;;;OAKG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACtC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAChD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,QAAQ,EAAE,oBAAoB,CAAC;IAC/B;;OAEG;IACH,KAAK,EAAE,8BAA8B,CAAC;IACtC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACpC;;OAEG;IACH,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACjC;;;;;;OAMG;IACH,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC;;OAEG;IACH,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,OAAO,EAAE,0BAA0B,CAAC;IACpC;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAChD;;OAEG;IACH,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IAClD;;;;;;OAMG;IACH,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B,CAAC"}
|
|
@@ -53,8 +53,11 @@ export declare function listShellApprovals(state: ShellPluginState): {
|
|
|
53
53
|
approvalId: string;
|
|
54
54
|
shellId: string;
|
|
55
55
|
ownerContextId?: string;
|
|
56
|
-
toolName: "
|
|
56
|
+
toolName: import("@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js").ShellApprovalToolName;
|
|
57
57
|
cmd: string;
|
|
58
|
+
operation: "exec" | "start" | "write";
|
|
59
|
+
inputPreview?: string;
|
|
60
|
+
inputChars?: number;
|
|
58
61
|
cwd: string;
|
|
59
62
|
reason: string;
|
|
60
63
|
createdAt: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShellActionRuntime.d.ts","sourceRoot":"","sources":["../../../src/shell/runtime/ShellActionRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AAEjG,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,KAAK,EACV,mBAAmB,EAEnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,oEAAoE,CAAC;AA2B5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAQxE;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,GACpB,IAAI,CAEN;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,gBAAgB,EACvB,KAAK,UAAQ,GACZ,OAAO,CAAC,IAAI,CAAC,CAkCf;
|
|
1
|
+
{"version":3,"file":"ShellActionRuntime.d.ts","sourceRoot":"","sources":["../../../src/shell/runtime/ShellActionRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AAEjG,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,KAAK,EACV,mBAAmB,EAEnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,oEAAoE,CAAC;AA2B5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAQxE;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,GACpB,IAAI,CAEN;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,gBAAgB,EACvB,KAAK,UAAQ,GACZ,OAAO,CAAC,IAAI,CAAC,CAkCf;AA2FD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAuK9B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAW9B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAmB9B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAqE9B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAoE9B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAuC9B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAmH9B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB;;;;;;;;;;;;IAEzD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAOlB"}
|
|
@@ -86,7 +86,7 @@ function buildDeniedApprovalResponse(params) {
|
|
|
86
86
|
approvalStatus: params.approvalStatus,
|
|
87
87
|
approvalId: params.approvalId,
|
|
88
88
|
approvalReason: params.reason,
|
|
89
|
-
stdinWritable:
|
|
89
|
+
stdinWritable: true,
|
|
90
90
|
status: params.approvalStatus === "expired" ? "expired" : "failed",
|
|
91
91
|
startedAt: now,
|
|
92
92
|
updatedAt: now,
|
|
@@ -112,6 +112,30 @@ function buildDeniedApprovalResponse(params) {
|
|
|
112
112
|
note: message,
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
|
+
function buildDeniedWriteApprovalResponse(params) {
|
|
116
|
+
const message = params.approvalStatus === "expired"
|
|
117
|
+
? "Unrestricted sandbox approval expired."
|
|
118
|
+
: "User denied unrestricted sandbox execution.";
|
|
119
|
+
return buildActionResponse({
|
|
120
|
+
shell: {
|
|
121
|
+
...params.session.snapshot,
|
|
122
|
+
approvalStatus: params.approvalStatus,
|
|
123
|
+
approvalId: params.approvalId,
|
|
124
|
+
approvalReason: params.reason,
|
|
125
|
+
stdinWritable: true,
|
|
126
|
+
},
|
|
127
|
+
chunk: {
|
|
128
|
+
shellId: params.session.snapshot.shellId,
|
|
129
|
+
output: message,
|
|
130
|
+
startCursor: 0,
|
|
131
|
+
endCursor: message.length,
|
|
132
|
+
originalChars: message.length,
|
|
133
|
+
originalLines: 1,
|
|
134
|
+
hasMoreOutput: false,
|
|
135
|
+
},
|
|
136
|
+
note: message,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
115
139
|
/**
|
|
116
140
|
* 启动一个 shell session。
|
|
117
141
|
*/
|
|
@@ -203,7 +227,7 @@ export async function startShellSession(state, context, request) {
|
|
|
203
227
|
...(approvalStatus ? { approvalStatus } : {}),
|
|
204
228
|
...(approvalId ? { approvalId } : {}),
|
|
205
229
|
...(reason ? { approvalReason: reason } : {}),
|
|
206
|
-
stdinWritable:
|
|
230
|
+
stdinWritable: true,
|
|
207
231
|
status: "running",
|
|
208
232
|
...(typeof child.pid === "number" ? { pid: child.pid } : {}),
|
|
209
233
|
startedAt,
|
|
@@ -327,7 +351,37 @@ export async function writeShellSession(state, context, request) {
|
|
|
327
351
|
throw new Error(`shell session ${shellId} stdin is closed`);
|
|
328
352
|
}
|
|
329
353
|
if (session.snapshot.stdinWritable === false) {
|
|
330
|
-
throw new Error(`shell session ${shellId}
|
|
354
|
+
throw new Error(`shell session ${shellId} stdin is closed`);
|
|
355
|
+
}
|
|
356
|
+
let approvalId;
|
|
357
|
+
let approvalStatus;
|
|
358
|
+
const reason = String(request.reason || "").trim();
|
|
359
|
+
if (session.snapshot.sandboxMode === "unrestricted") {
|
|
360
|
+
const validationError = validateUnrestrictedRequest({ cmd: chars, reason });
|
|
361
|
+
if (validationError)
|
|
362
|
+
throw new Error(validationError);
|
|
363
|
+
const approval = await requestUnrestrictedApproval({
|
|
364
|
+
state,
|
|
365
|
+
context,
|
|
366
|
+
shellId,
|
|
367
|
+
toolName: "shell_write",
|
|
368
|
+
cmd: chars,
|
|
369
|
+
cwd: session.snapshot.cwd,
|
|
370
|
+
reason,
|
|
371
|
+
...(session.snapshot.ownerContextId ? { ownerContextId: session.snapshot.ownerContextId } : {}),
|
|
372
|
+
inputPreview: chars,
|
|
373
|
+
inputChars: chars.length,
|
|
374
|
+
});
|
|
375
|
+
approvalId = approval.approvalId;
|
|
376
|
+
approvalStatus = approval.status;
|
|
377
|
+
if (approval.status !== "approved") {
|
|
378
|
+
return buildDeniedWriteApprovalResponse({
|
|
379
|
+
session,
|
|
380
|
+
approvalId: approval.approvalId,
|
|
381
|
+
reason,
|
|
382
|
+
approvalStatus: approval.status,
|
|
383
|
+
});
|
|
384
|
+
}
|
|
331
385
|
}
|
|
332
386
|
await new Promise((resolve, reject) => {
|
|
333
387
|
session.child.stdin.write(chars, (error) => {
|
|
@@ -339,7 +393,13 @@ export async function writeShellSession(state, context, request) {
|
|
|
339
393
|
});
|
|
340
394
|
});
|
|
341
395
|
return buildActionResponse({
|
|
342
|
-
shell:
|
|
396
|
+
shell: {
|
|
397
|
+
...session.snapshot,
|
|
398
|
+
...(approvalStatus ? { approvalStatus } : {}),
|
|
399
|
+
...(approvalId ? { approvalId } : {}),
|
|
400
|
+
...(reason ? { approvalReason: reason } : {}),
|
|
401
|
+
stdinWritable: true,
|
|
402
|
+
},
|
|
343
403
|
note: chars ? "stdin written" : "no chars written",
|
|
344
404
|
});
|
|
345
405
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShellActionRuntime.js","sourceRoot":"","sources":["../../../src/shell/runtime/ShellActionRuntime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ShellActionRuntime.js","sourceRoot":"","sources":["../../../src/shell/runtime/ShellActionRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - agent 只能通过 shell tool 请求 unrestricted sandbox;真正执行前必须等待用户确认。
|
|
6
6
|
* - 审批结果最终回到原 tool result;session event 只用于 UI/CLI/Console 展示和操作。
|
|
7
|
-
* - V1
|
|
7
|
+
* - V1 授权粒度固定为单次命令、单次 shell_start 启动,或单次 shell_write 输入。
|
|
8
8
|
*/
|
|
9
9
|
import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
|
|
10
|
-
import type { ShellApprovalStatus } from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
|
|
10
|
+
import type { ShellApprovalStatus, ShellApprovalToolName } from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
|
|
11
11
|
import type { ShellPluginState } from "../../shell/ShellRuntimeTypes.js";
|
|
12
12
|
/**
|
|
13
13
|
* 校验 unrestricted sandbox 请求。
|
|
@@ -23,11 +23,13 @@ export declare function requestUnrestrictedApproval(params: {
|
|
|
23
23
|
state: ShellPluginState;
|
|
24
24
|
context: AgentContext;
|
|
25
25
|
shellId: string;
|
|
26
|
-
toolName:
|
|
26
|
+
toolName: ShellApprovalToolName;
|
|
27
27
|
cmd: string;
|
|
28
28
|
cwd: string;
|
|
29
29
|
reason: string;
|
|
30
30
|
ownerContextId?: string;
|
|
31
|
+
inputPreview?: string;
|
|
32
|
+
inputChars?: number;
|
|
31
33
|
}): Promise<{
|
|
32
34
|
approvalId: string;
|
|
33
35
|
status: ShellApprovalStatus;
|
|
@@ -48,8 +50,11 @@ export declare function listPendingApprovals(state: ShellPluginState): Array<{
|
|
|
48
50
|
approvalId: string;
|
|
49
51
|
shellId: string;
|
|
50
52
|
ownerContextId?: string;
|
|
51
|
-
toolName:
|
|
53
|
+
toolName: ShellApprovalToolName;
|
|
52
54
|
cmd: string;
|
|
55
|
+
operation: "exec" | "start" | "write";
|
|
56
|
+
inputPreview?: string;
|
|
57
|
+
inputChars?: number;
|
|
53
58
|
cwd: string;
|
|
54
59
|
reason: string;
|
|
55
60
|
createdAt: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShellApprovalRuntime.d.ts","sourceRoot":"","sources":["../../../src/shell/runtime/ShellApprovalRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ShellApprovalRuntime.d.ts","sourceRoot":"","sources":["../../../src/shell/runtime/ShellApprovalRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,oEAAoE,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAkErE;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,GAAG,IAAI,CAShB;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,MAAM,EAAE;IACxD,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC,CAgFD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,mBAAmB,CAAC;CAC/B,GAAG,OAAO,CAAC,OAAO,CAAC,CAoCnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK,CAAC;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAcD"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - agent 只能通过 shell tool 请求 unrestricted sandbox;真正执行前必须等待用户确认。
|
|
6
6
|
* - 审批结果最终回到原 tool result;session event 只用于 UI/CLI/Console 展示和操作。
|
|
7
|
-
* - V1
|
|
7
|
+
* - V1 授权粒度固定为单次命令、单次 shell_start 启动,或单次 shell_write 输入。
|
|
8
8
|
*/
|
|
9
9
|
import fs from "fs-extra";
|
|
10
10
|
import path from "node:path";
|
|
@@ -22,6 +22,19 @@ const DANGEROUS_COMMAND_PATTERNS = [
|
|
|
22
22
|
function isDangerousCommand(cmd) {
|
|
23
23
|
return DANGEROUS_COMMAND_PATTERNS.some((pattern) => pattern.test(cmd));
|
|
24
24
|
}
|
|
25
|
+
function resolveApprovalOperation(toolName) {
|
|
26
|
+
if (toolName === "shell_write")
|
|
27
|
+
return "write";
|
|
28
|
+
if (toolName === "shell_exec")
|
|
29
|
+
return "exec";
|
|
30
|
+
return "start";
|
|
31
|
+
}
|
|
32
|
+
function buildInputPreview(value) {
|
|
33
|
+
const normalized = String(value || "");
|
|
34
|
+
if (normalized.length <= 240)
|
|
35
|
+
return normalized;
|
|
36
|
+
return `${normalized.slice(0, 240)}...`;
|
|
37
|
+
}
|
|
25
38
|
function resolveAuditPath(context) {
|
|
26
39
|
return path.join(context.rootPath, ".downcity", "logs", "unrestricted-sandbox-audit.jsonl");
|
|
27
40
|
}
|
|
@@ -69,6 +82,10 @@ export async function requestUnrestrictedApproval(params) {
|
|
|
69
82
|
const approvalId = `ap_${generateId()}`;
|
|
70
83
|
const createdAt = nowMs();
|
|
71
84
|
const ownerContextId = String(params.ownerContextId || "").trim() || undefined;
|
|
85
|
+
const operation = resolveApprovalOperation(params.toolName);
|
|
86
|
+
const inputPreview = params.inputPreview !== undefined
|
|
87
|
+
? buildInputPreview(params.inputPreview)
|
|
88
|
+
: undefined;
|
|
72
89
|
const status = await new Promise((resolve) => {
|
|
73
90
|
const timer = setTimeout(() => {
|
|
74
91
|
resolveApproval({
|
|
@@ -86,6 +103,9 @@ export async function requestUnrestrictedApproval(params) {
|
|
|
86
103
|
...(ownerContextId ? { ownerContextId } : {}),
|
|
87
104
|
toolName: params.toolName,
|
|
88
105
|
cmd: params.cmd,
|
|
106
|
+
operation,
|
|
107
|
+
...(inputPreview !== undefined ? { inputPreview } : {}),
|
|
108
|
+
...(typeof params.inputChars === "number" ? { inputChars: params.inputChars } : {}),
|
|
89
109
|
cwd: params.cwd,
|
|
90
110
|
reason: params.reason,
|
|
91
111
|
createdAt,
|
|
@@ -106,6 +126,10 @@ export async function requestUnrestrictedApproval(params) {
|
|
|
106
126
|
cwd: params.cwd,
|
|
107
127
|
reason: params.reason,
|
|
108
128
|
status: "pending",
|
|
129
|
+
operation,
|
|
130
|
+
shellId: params.shellId,
|
|
131
|
+
...(inputPreview !== undefined ? { inputPreview } : {}),
|
|
132
|
+
...(typeof params.inputChars === "number" ? { inputChars: params.inputChars } : {}),
|
|
109
133
|
});
|
|
110
134
|
}
|
|
111
135
|
catch {
|
|
@@ -121,6 +145,9 @@ export async function requestUnrestrictedApproval(params) {
|
|
|
121
145
|
tool_call_id: params.shellId,
|
|
122
146
|
agent_id: params.context.config?.id || null,
|
|
123
147
|
cmd: params.cmd,
|
|
148
|
+
operation,
|
|
149
|
+
...(inputPreview !== undefined ? { input_preview: inputPreview } : {}),
|
|
150
|
+
...(typeof params.inputChars === "number" ? { input_chars: params.inputChars } : {}),
|
|
124
151
|
cwd: params.cwd,
|
|
125
152
|
reason: params.reason,
|
|
126
153
|
created_at: new Date(createdAt).toISOString(),
|
|
@@ -156,6 +183,9 @@ export async function resolveApproval(params) {
|
|
|
156
183
|
tool_call_id: approval.shellId,
|
|
157
184
|
agent_id: params.context.config?.id || null,
|
|
158
185
|
cmd: approval.cmd,
|
|
186
|
+
operation: approval.operation,
|
|
187
|
+
...(approval.inputPreview !== undefined ? { input_preview: approval.inputPreview } : {}),
|
|
188
|
+
...(typeof approval.inputChars === "number" ? { input_chars: approval.inputChars } : {}),
|
|
159
189
|
cwd: approval.cwd,
|
|
160
190
|
reason: approval.reason,
|
|
161
191
|
decision: params.decision,
|
|
@@ -174,6 +204,9 @@ export function listPendingApprovals(state) {
|
|
|
174
204
|
...(approval.ownerContextId ? { ownerContextId: approval.ownerContextId } : {}),
|
|
175
205
|
toolName: approval.toolName,
|
|
176
206
|
cmd: approval.cmd,
|
|
207
|
+
operation: approval.operation,
|
|
208
|
+
...(approval.inputPreview !== undefined ? { inputPreview: approval.inputPreview } : {}),
|
|
209
|
+
...(typeof approval.inputChars === "number" ? { inputChars: approval.inputChars } : {}),
|
|
177
210
|
cwd: approval.cwd,
|
|
178
211
|
reason: approval.reason,
|
|
179
212
|
createdAt: approval.createdAt,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShellApprovalRuntime.js","sourceRoot":"","sources":["../../../src/shell/runtime/ShellApprovalRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;
|
|
1
|
+
{"version":3,"file":"ShellApprovalRuntime.js","sourceRoot":"","sources":["../../../src/shell/runtime/ShellApprovalRuntime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@downcity/plugins",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.66",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Downcity 内建 plugin 集合包",
|
|
6
6
|
"main": "./bin/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"node-cron": "^4.2.1",
|
|
23
23
|
"ws": "^8.21.0",
|
|
24
24
|
"zod": "^4.4.3",
|
|
25
|
-
"@downcity/agent": "^1.1.
|
|
25
|
+
"@downcity/agent": "^1.1.113"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/better-sqlite3": "^7.6.13",
|
|
@@ -18,7 +18,9 @@ import {
|
|
|
18
18
|
createShellPluginState,
|
|
19
19
|
denyShellApproval,
|
|
20
20
|
execShellCommand,
|
|
21
|
+
readShellSession,
|
|
21
22
|
startShellSession,
|
|
23
|
+
writeShellSession,
|
|
22
24
|
} from "../bin/shell/runtime/ShellActionRuntime.js";
|
|
23
25
|
|
|
24
26
|
async function create_fixture() {
|
|
@@ -154,3 +156,180 @@ test("shell_exec unrestricted approved executes in unrestricted sandbox", async
|
|
|
154
156
|
await fs.rm(fixture.root_path, { recursive: true, force: true });
|
|
155
157
|
}
|
|
156
158
|
});
|
|
159
|
+
|
|
160
|
+
test("shell_write unrestricted requires reason", async () => {
|
|
161
|
+
const fixture = await create_fixture();
|
|
162
|
+
const state = createShellPluginState({
|
|
163
|
+
defaultApprovalTimeoutMs: 2000,
|
|
164
|
+
defaultInlineWaitMs: 20,
|
|
165
|
+
});
|
|
166
|
+
try {
|
|
167
|
+
const pending_result = startShellSession(state, fixture.context, {
|
|
168
|
+
cmd: "cat",
|
|
169
|
+
cwd: fixture.root_path,
|
|
170
|
+
shell: "/bin/sh",
|
|
171
|
+
login: false,
|
|
172
|
+
sandbox: "unrestricted",
|
|
173
|
+
reason: "测试启动 unrestricted 交互进程。",
|
|
174
|
+
ownerContextId: "session_test",
|
|
175
|
+
inlineWaitMs: 20,
|
|
176
|
+
});
|
|
177
|
+
const start_approval = await wait_for_approval(state);
|
|
178
|
+
await approveShellApproval(state, fixture.context, start_approval.approvalId);
|
|
179
|
+
const started = await pending_result;
|
|
180
|
+
|
|
181
|
+
await assert.rejects(
|
|
182
|
+
writeShellSession(state, fixture.context, {
|
|
183
|
+
shellId: started.shell.shellId,
|
|
184
|
+
chars: "should-not-write\n",
|
|
185
|
+
}),
|
|
186
|
+
/requires a non-empty reason/,
|
|
187
|
+
);
|
|
188
|
+
} finally {
|
|
189
|
+
await closeAllShellSessions(state, true);
|
|
190
|
+
await fs.rm(fixture.root_path, { recursive: true, force: true });
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
test("shell_write unrestricted denied does not write stdin", async () => {
|
|
195
|
+
const fixture = await create_fixture();
|
|
196
|
+
const state = createShellPluginState({
|
|
197
|
+
defaultApprovalTimeoutMs: 2000,
|
|
198
|
+
defaultInlineWaitMs: 20,
|
|
199
|
+
});
|
|
200
|
+
try {
|
|
201
|
+
const pending_result = startShellSession(state, fixture.context, {
|
|
202
|
+
cmd: "cat",
|
|
203
|
+
cwd: fixture.root_path,
|
|
204
|
+
shell: "/bin/sh",
|
|
205
|
+
login: false,
|
|
206
|
+
sandbox: "unrestricted",
|
|
207
|
+
reason: "测试启动 unrestricted 交互进程。",
|
|
208
|
+
ownerContextId: "session_test",
|
|
209
|
+
inlineWaitMs: 20,
|
|
210
|
+
});
|
|
211
|
+
const start_approval = await wait_for_approval(state);
|
|
212
|
+
await approveShellApproval(state, fixture.context, start_approval.approvalId);
|
|
213
|
+
const started = await pending_result;
|
|
214
|
+
|
|
215
|
+
const pending_write = writeShellSession(state, fixture.context, {
|
|
216
|
+
shellId: started.shell.shellId,
|
|
217
|
+
chars: "denied-write\n",
|
|
218
|
+
reason: "测试拒绝 unrestricted shell_write 不会写入 stdin。",
|
|
219
|
+
});
|
|
220
|
+
const write_approval = await wait_for_approval(state);
|
|
221
|
+
assert.equal(write_approval.toolName, "shell_write");
|
|
222
|
+
assert.equal(write_approval.operation, "write");
|
|
223
|
+
assert.equal(write_approval.inputPreview, "denied-write\n");
|
|
224
|
+
assert.equal(write_approval.inputChars, "denied-write\n".length);
|
|
225
|
+
assert.equal(fixture.events.at(-1)?.type, "tool-approval-request");
|
|
226
|
+
assert.equal(fixture.events.at(-1)?.toolName, "shell_write");
|
|
227
|
+
assert.equal(fixture.events.at(-1)?.operation, "write");
|
|
228
|
+
|
|
229
|
+
await denyShellApproval(state, fixture.context, write_approval.approvalId);
|
|
230
|
+
const denied = await pending_write;
|
|
231
|
+
assert.equal(denied.shell.approvalStatus, "denied");
|
|
232
|
+
assert.match(denied.chunk.output, /User denied unrestricted sandbox execution/);
|
|
233
|
+
|
|
234
|
+
const read = await readShellSession(state, fixture.context, {
|
|
235
|
+
shellId: started.shell.shellId,
|
|
236
|
+
fromCursor: 0,
|
|
237
|
+
maxOutputTokens: 1000,
|
|
238
|
+
});
|
|
239
|
+
assert.equal(read.chunk.output, "");
|
|
240
|
+
} finally {
|
|
241
|
+
await closeAllShellSessions(state, true);
|
|
242
|
+
await fs.rm(fixture.root_path, { recursive: true, force: true });
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
test("shell_write unrestricted approved writes stdin", async () => {
|
|
247
|
+
const fixture = await create_fixture();
|
|
248
|
+
const state = createShellPluginState({
|
|
249
|
+
defaultApprovalTimeoutMs: 2000,
|
|
250
|
+
defaultInlineWaitMs: 20,
|
|
251
|
+
});
|
|
252
|
+
try {
|
|
253
|
+
const pending_result = startShellSession(state, fixture.context, {
|
|
254
|
+
cmd: "cat",
|
|
255
|
+
cwd: fixture.root_path,
|
|
256
|
+
shell: "/bin/sh",
|
|
257
|
+
login: false,
|
|
258
|
+
sandbox: "unrestricted",
|
|
259
|
+
reason: "测试启动 unrestricted 交互进程。",
|
|
260
|
+
ownerContextId: "session_test",
|
|
261
|
+
inlineWaitMs: 20,
|
|
262
|
+
});
|
|
263
|
+
const start_approval = await wait_for_approval(state);
|
|
264
|
+
await approveShellApproval(state, fixture.context, start_approval.approvalId);
|
|
265
|
+
const started = await pending_result;
|
|
266
|
+
|
|
267
|
+
const pending_write = writeShellSession(state, fixture.context, {
|
|
268
|
+
shellId: started.shell.shellId,
|
|
269
|
+
chars: "approved-write\n",
|
|
270
|
+
reason: "测试批准 unrestricted shell_write 后写入 stdin。",
|
|
271
|
+
});
|
|
272
|
+
const write_approval = await wait_for_approval(state);
|
|
273
|
+
assert.equal(write_approval.toolName, "shell_write");
|
|
274
|
+
await approveShellApproval(state, fixture.context, write_approval.approvalId);
|
|
275
|
+
const written = await pending_write;
|
|
276
|
+
assert.equal(written.shell.approvalStatus, "approved");
|
|
277
|
+
|
|
278
|
+
const started_at = Date.now();
|
|
279
|
+
let output = "";
|
|
280
|
+
while (Date.now() - started_at < 1000) {
|
|
281
|
+
const read = await readShellSession(state, fixture.context, {
|
|
282
|
+
shellId: started.shell.shellId,
|
|
283
|
+
fromCursor: 0,
|
|
284
|
+
maxOutputTokens: 1000,
|
|
285
|
+
});
|
|
286
|
+
output = read.chunk.output;
|
|
287
|
+
if (output.includes("approved-write")) break;
|
|
288
|
+
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
289
|
+
}
|
|
290
|
+
assert.match(output, /approved-write/);
|
|
291
|
+
} finally {
|
|
292
|
+
await closeAllShellSessions(state, true);
|
|
293
|
+
await fs.rm(fixture.root_path, { recursive: true, force: true });
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
test("shell_write safe writes without approval", async () => {
|
|
298
|
+
const fixture = await create_fixture();
|
|
299
|
+
const state = createShellPluginState({
|
|
300
|
+
defaultApprovalTimeoutMs: 2000,
|
|
301
|
+
defaultInlineWaitMs: 20,
|
|
302
|
+
});
|
|
303
|
+
try {
|
|
304
|
+
const started = await startShellSession(state, fixture.context, {
|
|
305
|
+
cmd: "cat",
|
|
306
|
+
cwd: fixture.root_path,
|
|
307
|
+
shell: "/bin/sh",
|
|
308
|
+
login: false,
|
|
309
|
+
sandbox: "safe",
|
|
310
|
+
inlineWaitMs: 20,
|
|
311
|
+
});
|
|
312
|
+
await writeShellSession(state, fixture.context, {
|
|
313
|
+
shellId: started.shell.shellId,
|
|
314
|
+
chars: "safe-write\n",
|
|
315
|
+
});
|
|
316
|
+
assert.equal(state.approvals.size, 0);
|
|
317
|
+
|
|
318
|
+
const started_at = Date.now();
|
|
319
|
+
let output = "";
|
|
320
|
+
while (Date.now() - started_at < 1000) {
|
|
321
|
+
const read = await readShellSession(state, fixture.context, {
|
|
322
|
+
shellId: started.shell.shellId,
|
|
323
|
+
fromCursor: 0,
|
|
324
|
+
maxOutputTokens: 1000,
|
|
325
|
+
});
|
|
326
|
+
output = read.chunk.output;
|
|
327
|
+
if (output.includes("safe-write")) break;
|
|
328
|
+
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
329
|
+
}
|
|
330
|
+
assert.match(output, /safe-write/);
|
|
331
|
+
} finally {
|
|
332
|
+
await closeAllShellSessions(state, true);
|
|
333
|
+
await fs.rm(fixture.root_path, { recursive: true, force: true });
|
|
334
|
+
}
|
|
335
|
+
});
|
|
@@ -11,6 +11,7 @@ import type { ChildProcessWithoutNullStreams } from "node:child_process";
|
|
|
11
11
|
import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
|
|
12
12
|
import type {
|
|
13
13
|
ShellApprovalStatus,
|
|
14
|
+
ShellApprovalToolName,
|
|
14
15
|
ShellSessionSnapshot,
|
|
15
16
|
} from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
|
|
16
17
|
import type { ResolvedShellPluginOptions } from "@/shell/types/ShellPluginOptions.js";
|
|
@@ -34,11 +35,26 @@ export type ShellApprovalRuntimeState = {
|
|
|
34
35
|
/**
|
|
35
36
|
* 关联工具名。
|
|
36
37
|
*/
|
|
37
|
-
toolName:
|
|
38
|
+
toolName: ShellApprovalToolName;
|
|
38
39
|
/**
|
|
39
40
|
* 申请执行的命令。
|
|
41
|
+
*
|
|
42
|
+
* 说明(中文)
|
|
43
|
+
* - `shell_write` 使用该字段保存 stdin 写入预览,保持审批队列结构统一。
|
|
40
44
|
*/
|
|
41
45
|
cmd: string;
|
|
46
|
+
/**
|
|
47
|
+
* 审批动作类型。
|
|
48
|
+
*/
|
|
49
|
+
operation: "exec" | "start" | "write";
|
|
50
|
+
/**
|
|
51
|
+
* stdin 写入内容预览;仅 `shell_write` 审批存在。
|
|
52
|
+
*/
|
|
53
|
+
inputPreview?: string;
|
|
54
|
+
/**
|
|
55
|
+
* stdin 写入字符数;仅 `shell_write` 审批存在。
|
|
56
|
+
*/
|
|
57
|
+
inputChars?: number;
|
|
42
58
|
/**
|
|
43
59
|
* 命令执行目录。
|
|
44
60
|
*/
|
|
@@ -146,7 +146,7 @@ function buildDeniedApprovalResponse(params: {
|
|
|
146
146
|
approvalStatus: params.approvalStatus,
|
|
147
147
|
approvalId: params.approvalId,
|
|
148
148
|
approvalReason: params.reason,
|
|
149
|
-
stdinWritable:
|
|
149
|
+
stdinWritable: true,
|
|
150
150
|
status: params.approvalStatus === "expired" ? "expired" : "failed",
|
|
151
151
|
startedAt: now,
|
|
152
152
|
updatedAt: now,
|
|
@@ -173,6 +173,36 @@ function buildDeniedApprovalResponse(params: {
|
|
|
173
173
|
});
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
+
function buildDeniedWriteApprovalResponse(params: {
|
|
177
|
+
session: ShellSessionRuntimeState;
|
|
178
|
+
approvalId: string;
|
|
179
|
+
reason: string;
|
|
180
|
+
approvalStatus: ShellApprovalStatus;
|
|
181
|
+
}): ShellActionResponse {
|
|
182
|
+
const message = params.approvalStatus === "expired"
|
|
183
|
+
? "Unrestricted sandbox approval expired."
|
|
184
|
+
: "User denied unrestricted sandbox execution.";
|
|
185
|
+
return buildActionResponse({
|
|
186
|
+
shell: {
|
|
187
|
+
...params.session.snapshot,
|
|
188
|
+
approvalStatus: params.approvalStatus,
|
|
189
|
+
approvalId: params.approvalId,
|
|
190
|
+
approvalReason: params.reason,
|
|
191
|
+
stdinWritable: true,
|
|
192
|
+
},
|
|
193
|
+
chunk: {
|
|
194
|
+
shellId: params.session.snapshot.shellId,
|
|
195
|
+
output: message,
|
|
196
|
+
startCursor: 0,
|
|
197
|
+
endCursor: message.length,
|
|
198
|
+
originalChars: message.length,
|
|
199
|
+
originalLines: 1,
|
|
200
|
+
hasMoreOutput: false,
|
|
201
|
+
},
|
|
202
|
+
note: message,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
176
206
|
/**
|
|
177
207
|
* 启动一个 shell session。
|
|
178
208
|
*/
|
|
@@ -274,7 +304,7 @@ export async function startShellSession(
|
|
|
274
304
|
...(approvalStatus ? { approvalStatus } : {}),
|
|
275
305
|
...(approvalId ? { approvalId } : {}),
|
|
276
306
|
...(reason ? { approvalReason: reason } : {}),
|
|
277
|
-
stdinWritable:
|
|
307
|
+
stdinWritable: true,
|
|
278
308
|
status: "running",
|
|
279
309
|
...(typeof child.pid === "number" ? { pid: child.pid } : {}),
|
|
280
310
|
startedAt,
|
|
@@ -422,7 +452,37 @@ export async function writeShellSession(
|
|
|
422
452
|
throw new Error(`shell session ${shellId} stdin is closed`);
|
|
423
453
|
}
|
|
424
454
|
if (session.snapshot.stdinWritable === false) {
|
|
425
|
-
throw new Error(`shell session ${shellId}
|
|
455
|
+
throw new Error(`shell session ${shellId} stdin is closed`);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
let approvalId: string | undefined;
|
|
459
|
+
let approvalStatus: ShellApprovalStatus | undefined;
|
|
460
|
+
const reason = String(request.reason || "").trim();
|
|
461
|
+
if (session.snapshot.sandboxMode === "unrestricted") {
|
|
462
|
+
const validationError = validateUnrestrictedRequest({ cmd: chars, reason });
|
|
463
|
+
if (validationError) throw new Error(validationError);
|
|
464
|
+
const approval = await requestUnrestrictedApproval({
|
|
465
|
+
state,
|
|
466
|
+
context,
|
|
467
|
+
shellId,
|
|
468
|
+
toolName: "shell_write",
|
|
469
|
+
cmd: chars,
|
|
470
|
+
cwd: session.snapshot.cwd,
|
|
471
|
+
reason,
|
|
472
|
+
...(session.snapshot.ownerContextId ? { ownerContextId: session.snapshot.ownerContextId } : {}),
|
|
473
|
+
inputPreview: chars,
|
|
474
|
+
inputChars: chars.length,
|
|
475
|
+
});
|
|
476
|
+
approvalId = approval.approvalId;
|
|
477
|
+
approvalStatus = approval.status;
|
|
478
|
+
if (approval.status !== "approved") {
|
|
479
|
+
return buildDeniedWriteApprovalResponse({
|
|
480
|
+
session,
|
|
481
|
+
approvalId: approval.approvalId,
|
|
482
|
+
reason,
|
|
483
|
+
approvalStatus: approval.status,
|
|
484
|
+
});
|
|
485
|
+
}
|
|
426
486
|
}
|
|
427
487
|
await new Promise<void>((resolve, reject) => {
|
|
428
488
|
session.child.stdin.write(chars, (error) => {
|
|
@@ -434,7 +494,13 @@ export async function writeShellSession(
|
|
|
434
494
|
});
|
|
435
495
|
});
|
|
436
496
|
return buildActionResponse({
|
|
437
|
-
shell:
|
|
497
|
+
shell: {
|
|
498
|
+
...session.snapshot,
|
|
499
|
+
...(approvalStatus ? { approvalStatus } : {}),
|
|
500
|
+
...(approvalId ? { approvalId } : {}),
|
|
501
|
+
...(reason ? { approvalReason: reason } : {}),
|
|
502
|
+
stdinWritable: true,
|
|
503
|
+
},
|
|
438
504
|
note: chars ? "stdin written" : "no chars written",
|
|
439
505
|
});
|
|
440
506
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - agent 只能通过 shell tool 请求 unrestricted sandbox;真正执行前必须等待用户确认。
|
|
6
6
|
* - 审批结果最终回到原 tool result;session event 只用于 UI/CLI/Console 展示和操作。
|
|
7
|
-
* - V1
|
|
7
|
+
* - V1 授权粒度固定为单次命令、单次 shell_start 启动,或单次 shell_write 输入。
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import fs from "fs-extra";
|
|
@@ -12,7 +12,10 @@ import path from "node:path";
|
|
|
12
12
|
import { generateId } from "@downcity/agent/internal/utils/Id.js";
|
|
13
13
|
import { getSessionRunContext } from "@downcity/agent/internal/executor/SessionRunScope.js";
|
|
14
14
|
import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
|
|
15
|
-
import type {
|
|
15
|
+
import type {
|
|
16
|
+
ShellApprovalStatus,
|
|
17
|
+
ShellApprovalToolName,
|
|
18
|
+
} from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
|
|
16
19
|
import type { ShellPluginState } from "@/shell/ShellRuntimeTypes.js";
|
|
17
20
|
import { nowMs } from "./ShellActionRuntimeSupport.js";
|
|
18
21
|
|
|
@@ -29,6 +32,18 @@ function isDangerousCommand(cmd: string): boolean {
|
|
|
29
32
|
return DANGEROUS_COMMAND_PATTERNS.some((pattern) => pattern.test(cmd));
|
|
30
33
|
}
|
|
31
34
|
|
|
35
|
+
function resolveApprovalOperation(toolName: ShellApprovalToolName): "exec" | "start" | "write" {
|
|
36
|
+
if (toolName === "shell_write") return "write";
|
|
37
|
+
if (toolName === "shell_exec") return "exec";
|
|
38
|
+
return "start";
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function buildInputPreview(value: string): string {
|
|
42
|
+
const normalized = String(value || "");
|
|
43
|
+
if (normalized.length <= 240) return normalized;
|
|
44
|
+
return `${normalized.slice(0, 240)}...`;
|
|
45
|
+
}
|
|
46
|
+
|
|
32
47
|
function resolveAuditPath(context: AgentContext): string {
|
|
33
48
|
return path.join(context.rootPath, ".downcity", "logs", "unrestricted-sandbox-audit.jsonl");
|
|
34
49
|
}
|
|
@@ -47,7 +62,7 @@ function publishApprovalResult(params: {
|
|
|
47
62
|
ownerContextId?: string;
|
|
48
63
|
approvalId: string;
|
|
49
64
|
shellId: string;
|
|
50
|
-
toolName:
|
|
65
|
+
toolName: ShellApprovalToolName;
|
|
51
66
|
decision: ShellApprovalStatus;
|
|
52
67
|
}): void {
|
|
53
68
|
const sessionId = String(params.ownerContextId || "").trim();
|
|
@@ -91,11 +106,13 @@ export async function requestUnrestrictedApproval(params: {
|
|
|
91
106
|
state: ShellPluginState;
|
|
92
107
|
context: AgentContext;
|
|
93
108
|
shellId: string;
|
|
94
|
-
toolName:
|
|
109
|
+
toolName: ShellApprovalToolName;
|
|
95
110
|
cmd: string;
|
|
96
111
|
cwd: string;
|
|
97
112
|
reason: string;
|
|
98
113
|
ownerContextId?: string;
|
|
114
|
+
inputPreview?: string;
|
|
115
|
+
inputChars?: number;
|
|
99
116
|
}): Promise<{
|
|
100
117
|
approvalId: string;
|
|
101
118
|
status: ShellApprovalStatus;
|
|
@@ -103,6 +120,10 @@ export async function requestUnrestrictedApproval(params: {
|
|
|
103
120
|
const approvalId = `ap_${generateId()}`;
|
|
104
121
|
const createdAt = nowMs();
|
|
105
122
|
const ownerContextId = String(params.ownerContextId || "").trim() || undefined;
|
|
123
|
+
const operation = resolveApprovalOperation(params.toolName);
|
|
124
|
+
const inputPreview = params.inputPreview !== undefined
|
|
125
|
+
? buildInputPreview(params.inputPreview)
|
|
126
|
+
: undefined;
|
|
106
127
|
|
|
107
128
|
const status = await new Promise<ShellApprovalStatus>((resolve) => {
|
|
108
129
|
const timer = setTimeout(() => {
|
|
@@ -121,6 +142,9 @@ export async function requestUnrestrictedApproval(params: {
|
|
|
121
142
|
...(ownerContextId ? { ownerContextId } : {}),
|
|
122
143
|
toolName: params.toolName,
|
|
123
144
|
cmd: params.cmd,
|
|
145
|
+
operation,
|
|
146
|
+
...(inputPreview !== undefined ? { inputPreview } : {}),
|
|
147
|
+
...(typeof params.inputChars === "number" ? { inputChars: params.inputChars } : {}),
|
|
124
148
|
cwd: params.cwd,
|
|
125
149
|
reason: params.reason,
|
|
126
150
|
createdAt,
|
|
@@ -142,6 +166,10 @@ export async function requestUnrestrictedApproval(params: {
|
|
|
142
166
|
cwd: params.cwd,
|
|
143
167
|
reason: params.reason,
|
|
144
168
|
status: "pending",
|
|
169
|
+
operation,
|
|
170
|
+
shellId: params.shellId,
|
|
171
|
+
...(inputPreview !== undefined ? { inputPreview } : {}),
|
|
172
|
+
...(typeof params.inputChars === "number" ? { inputChars: params.inputChars } : {}),
|
|
145
173
|
});
|
|
146
174
|
} catch {
|
|
147
175
|
// ignore event delivery failures
|
|
@@ -157,6 +185,9 @@ export async function requestUnrestrictedApproval(params: {
|
|
|
157
185
|
tool_call_id: params.shellId,
|
|
158
186
|
agent_id: params.context.config?.id || null,
|
|
159
187
|
cmd: params.cmd,
|
|
188
|
+
operation,
|
|
189
|
+
...(inputPreview !== undefined ? { input_preview: inputPreview } : {}),
|
|
190
|
+
...(typeof params.inputChars === "number" ? { input_chars: params.inputChars } : {}),
|
|
160
191
|
cwd: params.cwd,
|
|
161
192
|
reason: params.reason,
|
|
162
193
|
created_at: new Date(createdAt).toISOString(),
|
|
@@ -200,6 +231,9 @@ export async function resolveApproval(params: {
|
|
|
200
231
|
tool_call_id: approval.shellId,
|
|
201
232
|
agent_id: params.context.config?.id || null,
|
|
202
233
|
cmd: approval.cmd,
|
|
234
|
+
operation: approval.operation,
|
|
235
|
+
...(approval.inputPreview !== undefined ? { input_preview: approval.inputPreview } : {}),
|
|
236
|
+
...(typeof approval.inputChars === "number" ? { input_chars: approval.inputChars } : {}),
|
|
203
237
|
cwd: approval.cwd,
|
|
204
238
|
reason: approval.reason,
|
|
205
239
|
decision: params.decision,
|
|
@@ -217,8 +251,11 @@ export function listPendingApprovals(state: ShellPluginState): Array<{
|
|
|
217
251
|
approvalId: string;
|
|
218
252
|
shellId: string;
|
|
219
253
|
ownerContextId?: string;
|
|
220
|
-
toolName:
|
|
254
|
+
toolName: ShellApprovalToolName;
|
|
221
255
|
cmd: string;
|
|
256
|
+
operation: "exec" | "start" | "write";
|
|
257
|
+
inputPreview?: string;
|
|
258
|
+
inputChars?: number;
|
|
222
259
|
cwd: string;
|
|
223
260
|
reason: string;
|
|
224
261
|
createdAt: number;
|
|
@@ -229,6 +266,9 @@ export function listPendingApprovals(state: ShellPluginState): Array<{
|
|
|
229
266
|
...(approval.ownerContextId ? { ownerContextId: approval.ownerContextId } : {}),
|
|
230
267
|
toolName: approval.toolName,
|
|
231
268
|
cmd: approval.cmd,
|
|
269
|
+
operation: approval.operation,
|
|
270
|
+
...(approval.inputPreview !== undefined ? { inputPreview: approval.inputPreview } : {}),
|
|
271
|
+
...(typeof approval.inputChars === "number" ? { inputChars: approval.inputChars } : {}),
|
|
232
272
|
cwd: approval.cwd,
|
|
233
273
|
reason: approval.reason,
|
|
234
274
|
createdAt: approval.createdAt,
|