@downcity/plugins 1.0.66 → 1.0.71

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.
Files changed (75) hide show
  1. package/bin/BuiltinPlugins.d.ts +0 -5
  2. package/bin/BuiltinPlugins.d.ts.map +1 -1
  3. package/bin/BuiltinPlugins.js +1 -5
  4. package/bin/BuiltinPlugins.js.map +1 -1
  5. package/bin/index.d.ts +0 -2
  6. package/bin/index.d.ts.map +1 -1
  7. package/bin/index.js +0 -1
  8. package/bin/index.js.map +1 -1
  9. package/bin/task/runtime/TaskRunnerRound.d.ts.map +1 -1
  10. package/bin/task/runtime/TaskRunnerRound.js +7 -2
  11. package/bin/task/runtime/TaskRunnerRound.js.map +1 -1
  12. package/bin/task/runtime/TaskRunnerSession.d.ts.map +1 -1
  13. package/bin/task/runtime/TaskRunnerSession.js +10 -3
  14. package/bin/task/runtime/TaskRunnerSession.js.map +1 -1
  15. package/package.json +4 -3
  16. package/scripts/unrestricted-sandbox-approval.test.mjs +9 -9
  17. package/src/BuiltinPlugins.ts +0 -9
  18. package/src/index.ts +0 -5
  19. package/src/task/runtime/TaskRunnerRound.ts +15 -5
  20. package/src/task/runtime/TaskRunnerSession.ts +11 -4
  21. package/bin/shell/Index.d.ts +0 -9
  22. package/bin/shell/Index.d.ts.map +0 -1
  23. package/bin/shell/Index.js +0 -9
  24. package/bin/shell/Index.js.map +0 -1
  25. package/bin/shell/ShellPlugin.d.ts +0 -65
  26. package/bin/shell/ShellPlugin.d.ts.map +0 -1
  27. package/bin/shell/ShellPlugin.js +0 -175
  28. package/bin/shell/ShellPlugin.js.map +0 -1
  29. package/bin/shell/ShellRuntimeTypes.d.ts +0 -160
  30. package/bin/shell/ShellRuntimeTypes.d.ts.map +0 -1
  31. package/bin/shell/ShellRuntimeTypes.js +0 -10
  32. package/bin/shell/ShellRuntimeTypes.js.map +0 -1
  33. package/bin/shell/runtime/Paths.d.ts +0 -12
  34. package/bin/shell/runtime/Paths.d.ts.map +0 -1
  35. package/bin/shell/runtime/Paths.js +0 -21
  36. package/bin/shell/runtime/Paths.js.map +0 -1
  37. package/bin/shell/runtime/ShellActionResponse.d.ts +0 -52
  38. package/bin/shell/runtime/ShellActionResponse.d.ts.map +0 -1
  39. package/bin/shell/runtime/ShellActionResponse.js +0 -73
  40. package/bin/shell/runtime/ShellActionResponse.js.map +0 -1
  41. package/bin/shell/runtime/ShellActionRuntime.d.ts +0 -73
  42. package/bin/shell/runtime/ShellActionRuntime.d.ts.map +0 -1
  43. package/bin/shell/runtime/ShellActionRuntime.js +0 -647
  44. package/bin/shell/runtime/ShellActionRuntime.js.map +0 -1
  45. package/bin/shell/runtime/ShellActionRuntimeSupport.d.ts +0 -88
  46. package/bin/shell/runtime/ShellActionRuntimeSupport.d.ts.map +0 -1
  47. package/bin/shell/runtime/ShellActionRuntimeSupport.js +0 -353
  48. package/bin/shell/runtime/ShellActionRuntimeSupport.js.map +0 -1
  49. package/bin/shell/runtime/ShellApprovalRuntime.d.ts +0 -62
  50. package/bin/shell/runtime/ShellApprovalRuntime.d.ts.map +0 -1
  51. package/bin/shell/runtime/ShellApprovalRuntime.js +0 -215
  52. package/bin/shell/runtime/ShellApprovalRuntime.js.map +0 -1
  53. package/bin/shell/runtime/ShellProcessEvents.d.ts +0 -22
  54. package/bin/shell/runtime/ShellProcessEvents.d.ts.map +0 -1
  55. package/bin/shell/runtime/ShellProcessEvents.js +0 -41
  56. package/bin/shell/runtime/ShellProcessEvents.js.map +0 -1
  57. package/bin/shell/runtime/ShellRuntimeEnvironment.d.ts +0 -21
  58. package/bin/shell/runtime/ShellRuntimeEnvironment.d.ts.map +0 -1
  59. package/bin/shell/runtime/ShellRuntimeEnvironment.js +0 -70
  60. package/bin/shell/runtime/ShellRuntimeEnvironment.js.map +0 -1
  61. package/bin/shell/types/ShellPluginOptions.d.ts +0 -103
  62. package/bin/shell/types/ShellPluginOptions.d.ts.map +0 -1
  63. package/bin/shell/types/ShellPluginOptions.js +0 -10
  64. package/bin/shell/types/ShellPluginOptions.js.map +0 -1
  65. package/src/shell/Index.ts +0 -9
  66. package/src/shell/ShellPlugin.ts +0 -239
  67. package/src/shell/ShellRuntimeTypes.ts +0 -168
  68. package/src/shell/runtime/Paths.ts +0 -28
  69. package/src/shell/runtime/ShellActionResponse.ts +0 -135
  70. package/src/shell/runtime/ShellActionRuntime.ts +0 -794
  71. package/src/shell/runtime/ShellActionRuntimeSupport.ts +0 -477
  72. package/src/shell/runtime/ShellApprovalRuntime.ts +0 -276
  73. package/src/shell/runtime/ShellProcessEvents.ts +0 -65
  74. package/src/shell/runtime/ShellRuntimeEnvironment.ts +0 -71
  75. package/src/shell/types/ShellPluginOptions.ts +0 -122
@@ -1,88 +0,0 @@
1
- /**
2
- * Shell action 运行时辅助能力。
3
- *
4
- * 关键点(中文)
5
- * - 统一承载 ShellActionRuntime 的内部共享逻辑:环境组装、持久化、waiter 协调、session 查找。
6
- * - 对外暴露给 ShellActionRuntime 的只有纯运行时辅助函数,不直接承担 plugin action 编排。
7
- */
8
- import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
9
- import type { ShellPluginState, ShellSessionRuntimeState } from "../../shell/ShellRuntimeTypes.js";
10
- import type { ResolvedShellPluginOptions, ShellPluginOptions } from "../../shell/types/ShellPluginOptions.js";
11
- import type { ShellQueryRequest, ShellSessionSnapshot, ShellSessionStatus } from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
12
- export { buildShellEnv, resolveOwnerContextId, resolveShellCwd, } from "./ShellRuntimeEnvironment.js";
13
- export { buildActionResponse, createOutputChunk, } from "./ShellActionResponse.js";
14
- /**
15
- * shell.start 默认内联等待时间。
16
- */
17
- export declare const DEFAULT_INLINE_WAIT_MS: number;
18
- /**
19
- * shell.wait 默认等待超时。
20
- */
21
- export declare const DEFAULT_WAIT_TIMEOUT_MS: number;
22
- /**
23
- * shell.exec 默认总超时。
24
- */
25
- export declare const DEFAULT_EXEC_TIMEOUT_MS: number;
26
- /**
27
- * 归一化 ShellPlugin 可选运行参数。
28
- */
29
- export declare function resolveShellPluginOptions(options?: ShellPluginOptions): ResolvedShellPluginOptions;
30
- /**
31
- * 创建 shell plugin runtime 初始状态。
32
- */
33
- export declare function createShellPluginState(options?: ShellPluginOptions): ShellPluginState;
34
- /**
35
- * 返回当前毫秒时间戳。
36
- */
37
- export declare function nowMs(): number;
38
- /**
39
- * 归一化 wait/timeout 参数。
40
- */
41
- export declare function clampWaitMs(value: number | undefined, fallback: number): number;
42
- /**
43
- * 结合 ShellPlugin options 归一化 wait/timeout 参数。
44
- */
45
- export declare function clampWaitMsWithOptions(options: ResolvedShellPluginOptions, value: number | undefined, fallback: number): number;
46
- /**
47
- * 判断 shell 是否已进入终态。
48
- */
49
- export declare function isTerminalStatus(status: ShellSessionStatus): boolean;
50
- /**
51
- * 持久化 shell snapshot。
52
- */
53
- export declare function persistSnapshot(session: ShellSessionRuntimeState): Promise<void>;
54
- /**
55
- * 更新 session snapshot 并唤醒等待者。
56
- */
57
- export declare function updateSessionSnapshot(session: ShellSessionRuntimeState, updater: (snapshot: ShellSessionSnapshot) => void | ShellSessionSnapshot): Promise<void>;
58
- /**
59
- * 追加 shell 输出并同步更新快照。
60
- */
61
- export declare function appendSessionOutput(state: ShellPluginState, session: ShellSessionRuntimeState, raw: string): Promise<void>;
62
- /**
63
- * 为终态 shell 安排延迟清理。
64
- */
65
- export declare function scheduleCleanup(state: ShellPluginState, shellId: string): void;
66
- /**
67
- * 控制 in-memory shell session 容量。
68
- */
69
- export declare function ensureCapacity(state: ShellPluginState): void;
70
- /**
71
- * 按 shellId 或 ownerContext 解析目标 session。
72
- */
73
- export declare function resolveSession(state: ShellPluginState, context: AgentContext, query: ShellQueryRequest): Promise<ShellSessionRuntimeState | {
74
- snapshot: ShellSessionSnapshot;
75
- outputText: string;
76
- } | null>;
77
- /**
78
- * 判断解析出的 session 是否仍在内存中活动。
79
- */
80
- export declare function isInMemorySession(value: ShellSessionRuntimeState | {
81
- snapshot: ShellSessionSnapshot;
82
- outputText: string;
83
- }): value is ShellSessionRuntimeState;
84
- /**
85
- * 处理 shell 退出后的状态收口。
86
- */
87
- export declare function finalizeExit(state: ShellPluginState, session: ShellSessionRuntimeState, exitCode: number): Promise<void>;
88
- //# sourceMappingURL=ShellActionRuntimeSupport.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellActionRuntimeSupport.d.ts","sourceRoot":"","sources":["../../../src/shell/runtime/ShellActionRuntimeSupport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,oEAAoE,CAAC;AAK5E,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAelC;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAmD,CAAC;AAEvF;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAoD,CAAC;AAEzF;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAoD,CAAC;AAYzF;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,kBAAuB,GAC/B,0BAA0B,CAgD5B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,kBAAuB,GAC/B,gBAAgB,CAOlB;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,MAAM,CAE9B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,0BAA0B,EACnC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAMR;AAeD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAOpE;AAqBD;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGtF;AAsED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,GAAG,oBAAoB,GACvE,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,wBAAwB,EACjC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAY9E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAc5D;AAuBD;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,wBAAwB,GAAG;IAAE,QAAQ,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAiCnG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,wBAAwB,GAAG;IAAE,QAAQ,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACvF,KAAK,IAAI,wBAAwB,CAEnC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -1,353 +0,0 @@
1
- /**
2
- * Shell action 运行时辅助能力。
3
- *
4
- * 关键点(中文)
5
- * - 统一承载 ShellActionRuntime 的内部共享逻辑:环境组装、持久化、waiter 协调、session 查找。
6
- * - 对外暴露给 ShellActionRuntime 的只有纯运行时辅助函数,不直接承担 plugin action 编排。
7
- */
8
- import path from "node:path";
9
- import fs from "fs-extra";
10
- import { getShellOutputPath, getShellSnapshotPath } from "./Paths.js";
11
- import { readChatMetaBySessionId } from "../../chat/runtime/ChatMetaStore.js";
12
- import { resolveChatQueueStore } from "../../chat/runtime/ChatQueueStore.js";
13
- import { resolveOwnerContextId } from "./ShellRuntimeEnvironment.js";
14
- export { buildShellEnv, resolveOwnerContextId, resolveShellCwd, } from "./ShellRuntimeEnvironment.js";
15
- export { buildActionResponse, createOutputChunk, } from "./ShellActionResponse.js";
16
- const DEFAULT_SHELL_PLUGIN_OPTIONS = {
17
- maxActiveShells: 64,
18
- cleanupDelayMs: 10 * 60 * 1000,
19
- maxInMemoryOutputChars: 1_000_000,
20
- outputPreviewChars: 280,
21
- minWaitMs: 50,
22
- maxWaitMs: 30_000,
23
- defaultInlineWaitMs: 1_200,
24
- defaultWaitTimeoutMs: 10_000,
25
- defaultExecTimeoutMs: 60_000,
26
- defaultApprovalTimeoutMs: 120_000,
27
- };
28
- /**
29
- * shell.start 默认内联等待时间。
30
- */
31
- export const DEFAULT_INLINE_WAIT_MS = DEFAULT_SHELL_PLUGIN_OPTIONS.defaultInlineWaitMs;
32
- /**
33
- * shell.wait 默认等待超时。
34
- */
35
- export const DEFAULT_WAIT_TIMEOUT_MS = DEFAULT_SHELL_PLUGIN_OPTIONS.defaultWaitTimeoutMs;
36
- /**
37
- * shell.exec 默认总超时。
38
- */
39
- export const DEFAULT_EXEC_TIMEOUT_MS = DEFAULT_SHELL_PLUGIN_OPTIONS.defaultExecTimeoutMs;
40
- function readPositiveInteger(value, fallback) {
41
- if (typeof value !== "number" || !Number.isFinite(value)) {
42
- return fallback;
43
- }
44
- return Math.max(1, Math.floor(value));
45
- }
46
- /**
47
- * 归一化 ShellPlugin 可选运行参数。
48
- */
49
- export function resolveShellPluginOptions(options = {}) {
50
- const minWaitMs = readPositiveInteger(options.minWaitMs, DEFAULT_SHELL_PLUGIN_OPTIONS.minWaitMs);
51
- const maxWaitMs = Math.max(minWaitMs, readPositiveInteger(options.maxWaitMs, DEFAULT_SHELL_PLUGIN_OPTIONS.maxWaitMs));
52
- return {
53
- maxActiveShells: readPositiveInteger(options.maxActiveShells, DEFAULT_SHELL_PLUGIN_OPTIONS.maxActiveShells),
54
- cleanupDelayMs: readPositiveInteger(options.cleanupDelayMs, DEFAULT_SHELL_PLUGIN_OPTIONS.cleanupDelayMs),
55
- maxInMemoryOutputChars: readPositiveInteger(options.maxInMemoryOutputChars, DEFAULT_SHELL_PLUGIN_OPTIONS.maxInMemoryOutputChars),
56
- outputPreviewChars: readPositiveInteger(options.outputPreviewChars, DEFAULT_SHELL_PLUGIN_OPTIONS.outputPreviewChars),
57
- minWaitMs,
58
- maxWaitMs,
59
- defaultInlineWaitMs: readPositiveInteger(options.defaultInlineWaitMs, DEFAULT_SHELL_PLUGIN_OPTIONS.defaultInlineWaitMs),
60
- defaultWaitTimeoutMs: readPositiveInteger(options.defaultWaitTimeoutMs, DEFAULT_SHELL_PLUGIN_OPTIONS.defaultWaitTimeoutMs),
61
- defaultExecTimeoutMs: readPositiveInteger(options.defaultExecTimeoutMs, DEFAULT_SHELL_PLUGIN_OPTIONS.defaultExecTimeoutMs),
62
- defaultApprovalTimeoutMs: readPositiveInteger(options.defaultApprovalTimeoutMs, DEFAULT_SHELL_PLUGIN_OPTIONS.defaultApprovalTimeoutMs),
63
- };
64
- }
65
- /**
66
- * 创建 shell plugin runtime 初始状态。
67
- */
68
- export function createShellPluginState(options = {}) {
69
- return {
70
- options: resolveShellPluginOptions(options),
71
- sessions: new Map(),
72
- approvals: new Map(),
73
- context: null,
74
- };
75
- }
76
- /**
77
- * 返回当前毫秒时间戳。
78
- */
79
- export function nowMs() {
80
- return Date.now();
81
- }
82
- /**
83
- * 归一化 wait/timeout 参数。
84
- */
85
- export function clampWaitMs(value, fallback) {
86
- return clampWaitMsWithOptions(DEFAULT_SHELL_PLUGIN_OPTIONS, value, fallback);
87
- }
88
- /**
89
- * 结合 ShellPlugin options 归一化 wait/timeout 参数。
90
- */
91
- export function clampWaitMsWithOptions(options, value, fallback) {
92
- const raw = typeof value === "number" && Number.isFinite(value)
93
- ? Math.floor(value)
94
- : fallback;
95
- return Math.min(options.maxWaitMs, Math.max(options.minWaitMs, raw));
96
- }
97
- function normalizeOutputChunk(raw) {
98
- if (!raw)
99
- return "";
100
- return raw
101
- .replace(/\r\n/g, "\n")
102
- .replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g, "");
103
- }
104
- function deriveExitStatus(exitCode) {
105
- if (exitCode === -9 || exitCode === 137)
106
- return "killed";
107
- if (typeof exitCode === "number" && exitCode === 0)
108
- return "completed";
109
- return "failed";
110
- }
111
- /**
112
- * 判断 shell 是否已进入终态。
113
- */
114
- export function isTerminalStatus(status) {
115
- return (status === "completed" ||
116
- status === "failed" ||
117
- status === "killed" ||
118
- status === "expired");
119
- }
120
- function extractExternalRefsFromText(text, current) {
121
- const next = [...current];
122
- const register = (kind, value, label) => {
123
- const normalized = String(value || "").trim();
124
- if (!normalized)
125
- return;
126
- if (next.some((item) => item.kind === kind && item.value === normalized))
127
- return;
128
- next.push({ kind, value: normalized, ...(label ? { label } : {}) });
129
- };
130
- const threadIdRegex = /thread_id[:=]\s*([a-zA-Z0-9_-]{6,})/g;
131
- for (const match of text.matchAll(threadIdRegex)) {
132
- register("thread_id", String(match[1] || ""), "external thread id");
133
- }
134
- return next;
135
- }
136
- /**
137
- * 持久化 shell snapshot。
138
- */
139
- export async function persistSnapshot(session) {
140
- await fs.ensureDir(path.dirname(session.snapshotFilePath));
141
- await fs.writeJson(session.snapshotFilePath, session.snapshot, { spaces: 2 });
142
- }
143
- function enqueuePersistedAppend(session, text) {
144
- session.writeChain = session.writeChain.then(async () => {
145
- await fs.ensureDir(path.dirname(session.outputFilePath));
146
- await fs.appendFile(session.outputFilePath, text, "utf-8");
147
- });
148
- return session.writeChain;
149
- }
150
- function notifyWaiters(session) {
151
- for (const waiter of Array.from(session.waiters)) {
152
- clearTimeout(waiter.timer);
153
- session.waiters.delete(waiter);
154
- waiter.resolve();
155
- }
156
- }
157
- async function emitChatCompletionEvent(context, snapshot) {
158
- const ownerContextId = String(snapshot.ownerContextId || "").trim();
159
- if (!ownerContextId || snapshot.notificationSent !== false)
160
- return;
161
- const meta = await readChatMetaBySessionId({ context, sessionId: ownerContextId });
162
- if (!meta)
163
- return;
164
- const lines = [
165
- "[内部 shell 状态通知]",
166
- `shell_id: ${snapshot.shellId}`,
167
- `status: ${snapshot.status}`,
168
- `exit_code: ${typeof snapshot.exitCode === "number" ? snapshot.exitCode : "null"}`,
169
- `cmd: ${snapshot.cmd}`,
170
- ];
171
- if (snapshot.lastOutputPreview) {
172
- lines.push(`last_output_preview: ${snapshot.lastOutputPreview}`);
173
- }
174
- if (snapshot.externalRefs.length > 0) {
175
- const refs = snapshot.externalRefs.map((item) => `${item.kind}=${item.value}`);
176
- lines.push(`external_refs: ${refs.join(", ")}`);
177
- }
178
- lines.push("请根据当前 shell 的状态,主动向用户简洁汇报结果或最新进展。");
179
- const text = lines.join("\n");
180
- resolveChatQueueStore(context).enqueue({
181
- kind: "exec",
182
- channel: meta.channel,
183
- targetId: meta.chatId,
184
- sessionId: ownerContextId,
185
- text,
186
- ...(meta.targetType ? { targetType: meta.targetType } : {}),
187
- ...(typeof meta.threadId === "number" ? { threadId: meta.threadId } : {}),
188
- ...(meta.messageId ? { messageId: meta.messageId } : {}),
189
- ...(meta.actorId ? { actorId: meta.actorId } : {}),
190
- ...(meta.actorName ? { actorName: meta.actorName } : {}),
191
- extra: {
192
- note: "shell_session_auto_notify",
193
- internal: true,
194
- shellId: snapshot.shellId,
195
- shellStatus: snapshot.status,
196
- exitCode: typeof snapshot.exitCode === "number" ? snapshot.exitCode : null,
197
- },
198
- });
199
- }
200
- /**
201
- * 更新 session snapshot 并唤醒等待者。
202
- */
203
- export async function updateSessionSnapshot(session, updater) {
204
- const result = updater(session.snapshot);
205
- if (result) {
206
- session.snapshot = result;
207
- }
208
- session.snapshot.updatedAt = nowMs();
209
- session.snapshot.version += 1;
210
- await persistSnapshot(session);
211
- notifyWaiters(session);
212
- }
213
- /**
214
- * 追加 shell 输出并同步更新快照。
215
- */
216
- export async function appendSessionOutput(state, session, raw) {
217
- const text = normalizeOutputChunk(raw);
218
- if (!text)
219
- return;
220
- session.outputText += text;
221
- if (session.outputText.length > state.options.maxInMemoryOutputChars) {
222
- const overflow = session.outputText.length - state.options.maxInMemoryOutputChars;
223
- session.outputText = session.outputText.slice(overflow);
224
- session.snapshot.droppedChars += overflow;
225
- }
226
- session.snapshot.outputChars += text.length;
227
- session.snapshot.lastOutputAt = nowMs();
228
- session.snapshot.lastOutputPreview = session.outputText
229
- .slice(-state.options.outputPreviewChars)
230
- .trim();
231
- session.snapshot.externalRefs = extractExternalRefsFromText(text, session.snapshot.externalRefs);
232
- await enqueuePersistedAppend(session, text);
233
- await updateSessionSnapshot(session, () => undefined);
234
- }
235
- /**
236
- * 为终态 shell 安排延迟清理。
237
- */
238
- export function scheduleCleanup(state, shellId) {
239
- const session = state.sessions.get(shellId);
240
- if (!session)
241
- return;
242
- if (session.cleanupTimer)
243
- clearTimeout(session.cleanupTimer);
244
- session.cleanupTimer = setTimeout(() => {
245
- const current = state.sessions.get(shellId);
246
- if (!current)
247
- return;
248
- state.sessions.delete(shellId);
249
- }, state.options.cleanupDelayMs);
250
- if (typeof session.cleanupTimer.unref === "function") {
251
- session.cleanupTimer.unref();
252
- }
253
- }
254
- /**
255
- * 控制 in-memory shell session 容量。
256
- */
257
- export function ensureCapacity(state) {
258
- if (state.sessions.size < state.options.maxActiveShells)
259
- return;
260
- const removable = Array.from(state.sessions.values())
261
- .filter((item) => item.snapshot.status !== "running" && item.snapshot.status !== "starting")
262
- .sort((a, b) => a.snapshot.updatedAt - b.snapshot.updatedAt);
263
- for (const item of removable) {
264
- if (state.sessions.size < state.options.maxActiveShells)
265
- break;
266
- state.sessions.delete(item.snapshot.shellId);
267
- }
268
- if (state.sessions.size >= state.options.maxActiveShells) {
269
- throw new Error(`Too many active shell sessions (${state.sessions.size}). Please close or wait older sessions first.`);
270
- }
271
- }
272
- async function loadPersistedSnapshot(context, shellId) {
273
- const file = getShellSnapshotPath(context.rootPath, shellId);
274
- if (!(await fs.pathExists(file)))
275
- return null;
276
- const raw = await fs.readJson(file).catch(() => null);
277
- if (!raw || typeof raw !== "object" || Array.isArray(raw))
278
- return null;
279
- const snapshot = raw;
280
- return typeof snapshot.shellId === "string" ? snapshot : null;
281
- }
282
- async function readPersistedOutput(context, shellId) {
283
- const file = getShellOutputPath(context.rootPath, shellId);
284
- if (!(await fs.pathExists(file)))
285
- return "";
286
- return await fs.readFile(file, "utf-8");
287
- }
288
- /**
289
- * 按 shellId 或 ownerContext 解析目标 session。
290
- */
291
- export async function resolveSession(state, context, query) {
292
- const explicitShellId = String(query.shellId || "").trim();
293
- if (explicitShellId) {
294
- const inMemory = state.sessions.get(explicitShellId);
295
- if (inMemory)
296
- return inMemory;
297
- const snapshot = await loadPersistedSnapshot(context, explicitShellId);
298
- if (!snapshot)
299
- return null;
300
- return {
301
- snapshot,
302
- outputText: await readPersistedOutput(context, explicitShellId),
303
- };
304
- }
305
- const ownerContextId = resolveOwnerContextId(query.ownerContextId);
306
- const cmd = String(query.cmd || "").trim().toLowerCase();
307
- if (!ownerContextId)
308
- return null;
309
- const includeCompleted = query.includeCompleted === true;
310
- const matched = Array.from(state.sessions.values())
311
- .filter((item) => {
312
- if (item.snapshot.ownerContextId !== ownerContextId)
313
- return false;
314
- if (!includeCompleted) {
315
- if (item.snapshot.status !== "running" &&
316
- item.snapshot.status !== "starting") {
317
- return false;
318
- }
319
- }
320
- if (!cmd)
321
- return true;
322
- return item.snapshot.cmd.toLowerCase().includes(cmd);
323
- })
324
- .sort((a, b) => b.snapshot.updatedAt - a.snapshot.updatedAt);
325
- return matched[0] || null;
326
- }
327
- /**
328
- * 判断解析出的 session 是否仍在内存中活动。
329
- */
330
- export function isInMemorySession(value) {
331
- return "child" in value;
332
- }
333
- /**
334
- * 处理 shell 退出后的状态收口。
335
- */
336
- export async function finalizeExit(state, session, exitCode) {
337
- await updateSessionSnapshot(session, (snapshot) => {
338
- snapshot.status = deriveExitStatus(exitCode);
339
- snapshot.exitCode = exitCode;
340
- snapshot.endedAt = nowMs();
341
- snapshot.pid = session.child.pid ?? snapshot.pid;
342
- });
343
- session.resolveCompletion();
344
- scheduleCleanup(state, session.snapshot.shellId);
345
- if (session.snapshot.autoNotifyOnExit &&
346
- session.snapshot.notificationSent === false &&
347
- state.context) {
348
- await emitChatCompletionEvent(state.context, session.snapshot);
349
- session.snapshot.notificationSent = true;
350
- await persistSnapshot(session);
351
- }
352
- }
353
- //# sourceMappingURL=ShellActionRuntimeSupport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellActionRuntimeSupport.js","sourceRoot":"","sources":["../../../src/shell/runtime/ShellActionRuntimeSupport.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- /**
2
- * Shell unrestricted sandbox 审批运行时。
3
- *
4
- * 关键点(中文)
5
- * - agent 只能通过 shell tool 请求 unrestricted sandbox;真正执行前必须等待用户确认。
6
- * - 审批结果最终回到原 tool result;session event 只用于 UI/CLI/Console 展示和操作。
7
- * - V1 授权粒度固定为单次命令、单次 shell_start 启动,或单次 shell_write 输入。
8
- */
9
- import type { AgentContext } from "@downcity/agent/internal/types/runtime/agent/AgentContext.js";
10
- import type { ShellApprovalStatus, ShellApprovalToolName } from "@downcity/agent/internal/executor/tools/shell/types/ShellPlugin.js";
11
- import type { ShellPluginState } from "../../shell/ShellRuntimeTypes.js";
12
- /**
13
- * 校验 unrestricted sandbox 请求。
14
- */
15
- export declare function validateUnrestrictedRequest(params: {
16
- cmd: string;
17
- reason?: string;
18
- }): string | null;
19
- /**
20
- * 请求用户批准 unrestricted sandbox 执行。
21
- */
22
- export declare function requestUnrestrictedApproval(params: {
23
- state: ShellPluginState;
24
- context: AgentContext;
25
- shellId: string;
26
- toolName: ShellApprovalToolName;
27
- cmd: string;
28
- cwd: string;
29
- reason: string;
30
- ownerContextId?: string;
31
- inputPreview?: string;
32
- inputChars?: number;
33
- }): Promise<{
34
- approvalId: string;
35
- status: ShellApprovalStatus;
36
- }>;
37
- /**
38
- * 兑现 unrestricted sandbox 审批。
39
- */
40
- export declare function resolveApproval(params: {
41
- state: ShellPluginState;
42
- context: AgentContext;
43
- approvalId: string;
44
- decision: ShellApprovalStatus;
45
- }): Promise<boolean>;
46
- /**
47
- * 列出 pending unrestricted sandbox 审批。
48
- */
49
- export declare function listPendingApprovals(state: ShellPluginState): Array<{
50
- approvalId: string;
51
- shellId: string;
52
- ownerContextId?: string;
53
- toolName: ShellApprovalToolName;
54
- cmd: string;
55
- operation: "exec" | "start" | "write";
56
- inputPreview?: string;
57
- inputChars?: number;
58
- cwd: string;
59
- reason: string;
60
- createdAt: number;
61
- }>;
62
- //# sourceMappingURL=ShellApprovalRuntime.d.ts.map
@@ -1 +0,0 @@
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"}