@downcity/plugins 1.0.64 → 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 +184 -5
  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 -145
  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 -70
  42. package/bin/shell/runtime/ShellActionRuntime.d.ts.map +0 -1
  43. package/bin/shell/runtime/ShellActionRuntime.js +0 -587
  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 -57
  50. package/bin/shell/runtime/ShellApprovalRuntime.d.ts.map +0 -1
  51. package/bin/shell/runtime/ShellApprovalRuntime.js +0 -182
  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 -152
  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 -728
  71. package/src/shell/runtime/ShellActionRuntimeSupport.ts +0 -477
  72. package/src/shell/runtime/ShellApprovalRuntime.ts +0 -236
  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,587 +0,0 @@
1
- /**
2
- * Shell action 运行时编排入口。
3
- *
4
- * 关键点(中文)
5
- * - 这里只负责编排 shell plugin runtime 的公开动作:start/status/read/write/wait/close/exec。
6
- * - 持久化、输出裁剪、waiter 协调、session 查找等共享细节拆到 `ShellActionRuntimeSupport.ts`。
7
- * - 新版本所有状态都通过 ShellPluginState 显式传入,不再使用模块级单例。
8
- */
9
- import fs from "fs-extra";
10
- import { spawnShellProcess } from "@downcity/agent/internal/sandbox/SandboxRunner.js";
11
- import { generateId } from "@downcity/agent/internal/utils/Id.js";
12
- import { readChatMetaBySessionId } from "../../chat/runtime/ChatMetaStore.js";
13
- import { getShellDir, getShellOutputPath, getShellSnapshotPath } from "./Paths.js";
14
- import { buildActionResponse, buildShellEnv, clampWaitMsWithOptions, createOutputChunk, ensureCapacity, isInMemorySession, isTerminalStatus, nowMs, persistSnapshot, resolveOwnerContextId, resolveSession, resolveShellCwd, scheduleCleanup, updateSessionSnapshot, } from "./ShellActionRuntimeSupport.js";
15
- import { attachShellProcessEventHandlers } from "./ShellProcessEvents.js";
16
- import { listPendingApprovals, requestUnrestrictedApproval, resolveApproval, validateUnrestrictedRequest, } from "./ShellApprovalRuntime.js";
17
- export { createShellPluginState } from "./ShellActionRuntimeSupport.js";
18
- function resolveDefaultShellPath() {
19
- const envShell = String(process.env.SHELL || "").trim();
20
- if (envShell)
21
- return envShell;
22
- return process.platform === "darwin" ? "/bin/zsh" : "/bin/sh";
23
- }
24
- /**
25
- * 绑定当前 shell plugin runtime 实例的 execution runtime。
26
- */
27
- export function bindShellRuntime(state, context) {
28
- state.context = context;
29
- }
30
- /**
31
- * 关闭当前实例持有的所有活动 shell。
32
- */
33
- export async function closeAllShellSessions(state, force = false) {
34
- for (const approval of Array.from(state.approvals.values())) {
35
- if (state.context) {
36
- await resolveApproval({
37
- state,
38
- context: state.context,
39
- approvalId: approval.approvalId,
40
- decision: "expired",
41
- }).catch(() => undefined);
42
- continue;
43
- }
44
- clearTimeout(approval.timer);
45
- state.approvals.delete(approval.approvalId);
46
- approval.resolve("expired");
47
- }
48
- const closing = Array.from(state.sessions.values()).map(async (session) => {
49
- if (session.snapshot.status !== "running" &&
50
- session.snapshot.status !== "starting") {
51
- return;
52
- }
53
- try {
54
- session.child.kill(force ? "SIGKILL" : "SIGTERM");
55
- }
56
- catch {
57
- // ignore
58
- }
59
- await updateSessionSnapshot(session, (snapshot) => {
60
- snapshot.status = force ? "killed" : "failed";
61
- snapshot.exitCode = force ? -9 : -15;
62
- snapshot.endedAt = nowMs();
63
- });
64
- });
65
- await Promise.all(closing);
66
- }
67
- function resolveSandboxMode(value) {
68
- return value === "unrestricted" ? "unrestricted" : "safe";
69
- }
70
- function buildDeniedApprovalResponse(params) {
71
- const now = nowMs();
72
- const message = params.approvalStatus === "expired"
73
- ? "Unrestricted sandbox approval expired."
74
- : "User denied unrestricted sandbox execution.";
75
- return buildActionResponse({
76
- shell: {
77
- shellId: params.shellId,
78
- ...(params.ownerContextId ? { ownerContextId: params.ownerContextId } : {}),
79
- cmd: params.cmd,
80
- cwd: params.cwd,
81
- shellPath: params.shellPath,
82
- sandboxed: false,
83
- sandboxMode: "unrestricted",
84
- sandboxBackend: "unrestricted-host",
85
- sandboxNetworkMode: "full",
86
- approvalStatus: params.approvalStatus,
87
- approvalId: params.approvalId,
88
- approvalReason: params.reason,
89
- stdinWritable: false,
90
- status: params.approvalStatus === "expired" ? "expired" : "failed",
91
- startedAt: now,
92
- updatedAt: now,
93
- endedAt: now,
94
- exitCode: -1,
95
- lastOutputPreview: message,
96
- outputChars: message.length,
97
- droppedChars: 0,
98
- version: 1,
99
- autoNotifyOnExit: false,
100
- notificationSent: false,
101
- externalRefs: [],
102
- },
103
- chunk: {
104
- shellId: params.shellId,
105
- output: message,
106
- startCursor: 0,
107
- endCursor: message.length,
108
- originalChars: message.length,
109
- originalLines: 1,
110
- hasMoreOutput: false,
111
- },
112
- note: message,
113
- });
114
- }
115
- /**
116
- * 启动一个 shell session。
117
- */
118
- export async function startShellSession(state, context, request) {
119
- const cmd = String(request.cmd || "").trim();
120
- if (!cmd)
121
- throw new Error("shell.start requires a non-empty cmd");
122
- ensureCapacity(state);
123
- bindShellRuntime(state, context);
124
- const shellId = `sh_${generateId()}`;
125
- const cwd = resolveShellCwd(context, request.cwd);
126
- const shellPath = String(request.shell || resolveDefaultShellPath()).trim() || resolveDefaultShellPath();
127
- const login = request.login !== false;
128
- const sandboxMode = resolveSandboxMode(request.sandbox);
129
- const reason = String(request.reason || "").trim();
130
- const ownerContextId = resolveOwnerContextId(request.ownerContextId);
131
- const canAutoNotifyByContext = ownerContextId
132
- ? Boolean(await readChatMetaBySessionId({ context, sessionId: ownerContextId }))
133
- : false;
134
- const shellDir = getShellDir(context.rootPath, shellId);
135
- const snapshotFilePath = getShellSnapshotPath(context.rootPath, shellId);
136
- const outputFilePath = getShellOutputPath(context.rootPath, shellId);
137
- await fs.ensureDir(shellDir);
138
- await fs.writeFile(outputFilePath, "", "utf-8");
139
- let approvalId;
140
- let approvalStatus;
141
- if (sandboxMode === "unrestricted") {
142
- const validationError = validateUnrestrictedRequest({ cmd, reason });
143
- if (validationError)
144
- throw new Error(validationError);
145
- const approval = await requestUnrestrictedApproval({
146
- state,
147
- context,
148
- shellId,
149
- toolName: request.approvalToolName || "shell_start",
150
- cmd,
151
- cwd,
152
- reason,
153
- ...(ownerContextId ? { ownerContextId } : {}),
154
- });
155
- approvalId = approval.approvalId;
156
- approvalStatus = approval.status;
157
- if (approval.status !== "approved") {
158
- return buildDeniedApprovalResponse({
159
- shellId,
160
- ...(ownerContextId ? { ownerContextId } : {}),
161
- cmd,
162
- cwd,
163
- shellPath,
164
- approvalId: approval.approvalId,
165
- reason,
166
- approvalStatus: approval.status,
167
- });
168
- }
169
- }
170
- const spawnResult = await spawnShellProcess({
171
- context,
172
- shellId,
173
- shellDir,
174
- cmd,
175
- cwd,
176
- shellPath,
177
- login,
178
- baseEnv: buildShellEnv(context),
179
- sandboxMode,
180
- });
181
- const child = spawnResult.child;
182
- const actualCwd = spawnResult.cwd;
183
- const startedAt = nowMs();
184
- let resolveCompletion = () => { };
185
- const completionPromise = new Promise((resolve) => {
186
- resolveCompletion = resolve;
187
- });
188
- const session = {
189
- snapshot: {
190
- shellId,
191
- ...(ownerContextId ? { ownerContextId } : {}),
192
- cmd,
193
- cwd: actualCwd,
194
- shellPath,
195
- sandboxed: spawnResult.sandboxed,
196
- sandboxMode: spawnResult.sandboxMode || sandboxMode,
197
- sandboxBackend: spawnResult.backend,
198
- sandboxNetworkMode: spawnResult.networkMode,
199
- sandboxDir: spawnResult.sandboxDir,
200
- sandboxHomeDir: spawnResult.homeDir,
201
- sandboxTmpDir: spawnResult.tmpDir,
202
- sandboxCacheDir: spawnResult.cacheDir,
203
- ...(approvalStatus ? { approvalStatus } : {}),
204
- ...(approvalId ? { approvalId } : {}),
205
- ...(reason ? { approvalReason: reason } : {}),
206
- stdinWritable: sandboxMode === "safe",
207
- status: "running",
208
- ...(typeof child.pid === "number" ? { pid: child.pid } : {}),
209
- startedAt,
210
- updatedAt: startedAt,
211
- outputChars: 0,
212
- droppedChars: 0,
213
- version: 1,
214
- autoNotifyOnExit: request.autoNotifyOnExit === true,
215
- notificationSent: false,
216
- externalRefs: [],
217
- },
218
- child,
219
- outputText: "",
220
- outputFilePath,
221
- snapshotFilePath,
222
- writeChain: Promise.resolve(),
223
- cleanupTimer: null,
224
- waiters: new Set(),
225
- completionPromise,
226
- resolveCompletion,
227
- };
228
- state.sessions.set(shellId, session);
229
- // 关键点(中文)
230
- // - 监听器必须在任何 `await` 之前挂上。
231
- // - 对于 `printf` 这类瞬时命令,进程可能在持久化 snapshot 期间就已经退出。
232
- // - 如果先 `await persistSnapshot()` 再注册 `close`,会错过退出事件,导致 session 永远停在 running。
233
- attachShellProcessEventHandlers({ state, session });
234
- await persistSnapshot(session);
235
- const inlineWaitMs = clampWaitMsWithOptions(state.options, request.inlineWaitMs, state.options.defaultInlineWaitMs);
236
- await waitShellSession(state, context, {
237
- shellId,
238
- afterVersion: 1,
239
- fromCursor: 0,
240
- timeoutMs: inlineWaitMs,
241
- maxOutputTokens: request.maxOutputTokens,
242
- }).catch(() => undefined);
243
- const latest = await resolveSession(state, context, { shellId, includeCompleted: true });
244
- if (!latest) {
245
- throw new Error(`shell session disappeared unexpectedly: ${shellId}`);
246
- }
247
- if (isInMemorySession(latest) &&
248
- latest.snapshot.status === "running" &&
249
- latest.snapshot.autoNotifyOnExit === false &&
250
- request.autoNotifyOnExit !== false &&
251
- canAutoNotifyByContext) {
252
- latest.snapshot.autoNotifyOnExit = true;
253
- await persistSnapshot(latest);
254
- }
255
- const chunk = createOutputChunk({
256
- shellId,
257
- outputText: latest.outputText,
258
- fromCursor: 0,
259
- context,
260
- maxOutputTokens: request.maxOutputTokens,
261
- });
262
- return buildActionResponse({
263
- shell: latest.snapshot,
264
- chunk,
265
- note: latest.snapshot.status === "running"
266
- ? "shell started and is still running"
267
- : "shell finished during inline wait",
268
- });
269
- }
270
- /**
271
- * 查询 shell session 状态。
272
- */
273
- export async function getShellSessionStatus(state, context, request) {
274
- const session = await resolveSession(state, context, {
275
- ...request,
276
- includeCompleted: request.includeCompleted !== false,
277
- });
278
- if (!session) {
279
- throw new Error("shell session not found");
280
- }
281
- return buildActionResponse({
282
- shell: session.snapshot,
283
- });
284
- }
285
- /**
286
- * 读取 shell session 输出。
287
- */
288
- export async function readShellSession(state, context, request) {
289
- const session = await resolveSession(state, context, {
290
- ...request,
291
- includeCompleted: request.includeCompleted !== false,
292
- });
293
- if (!session) {
294
- throw new Error("shell session not found");
295
- }
296
- const chunk = createOutputChunk({
297
- shellId: session.snapshot.shellId,
298
- outputText: session.outputText,
299
- fromCursor: request.fromCursor,
300
- context,
301
- maxOutputTokens: request.maxOutputTokens,
302
- });
303
- return buildActionResponse({
304
- shell: session.snapshot,
305
- chunk,
306
- });
307
- }
308
- /**
309
- * 向 shell session 写入 stdin。
310
- */
311
- export async function writeShellSession(state, context, request) {
312
- const shellId = String(request.shellId || "").trim();
313
- const chars = String(request.chars ?? "");
314
- if (!shellId)
315
- throw new Error("shell.write requires shellId");
316
- const session = await resolveSession(state, context, {
317
- shellId,
318
- includeCompleted: true,
319
- });
320
- if (!session || !isInMemorySession(session)) {
321
- throw new Error("shell session is not active in memory");
322
- }
323
- if (session.snapshot.status !== "running" && session.snapshot.status !== "starting") {
324
- throw new Error(`shell session ${shellId} is not running`);
325
- }
326
- if (!session.child.stdin.writable) {
327
- throw new Error(`shell session ${shellId} stdin is closed`);
328
- }
329
- if (session.snapshot.stdinWritable === false) {
330
- throw new Error(`shell session ${shellId} does not allow stdin writes`);
331
- }
332
- await new Promise((resolve, reject) => {
333
- session.child.stdin.write(chars, (error) => {
334
- if (error) {
335
- reject(error);
336
- return;
337
- }
338
- resolve();
339
- });
340
- });
341
- return buildActionResponse({
342
- shell: session.snapshot,
343
- note: chars ? "stdin written" : "no chars written",
344
- });
345
- }
346
- /**
347
- * 等待 shell session 状态变化。
348
- */
349
- export async function waitShellSession(state, context, request) {
350
- const shellId = String(request.shellId || "").trim();
351
- if (!shellId)
352
- throw new Error("shell.wait requires shellId");
353
- const session = await resolveSession(state, context, {
354
- shellId,
355
- includeCompleted: true,
356
- });
357
- if (!session)
358
- throw new Error("shell session not found");
359
- if (isInMemorySession(session) &&
360
- typeof request.afterVersion === "number" &&
361
- session.snapshot.version <= request.afterVersion &&
362
- (session.snapshot.status === "running" || session.snapshot.status === "starting")) {
363
- const afterVersion = request.afterVersion;
364
- await new Promise((resolve) => {
365
- let settled = false;
366
- let waiter;
367
- const finish = () => {
368
- if (settled)
369
- return;
370
- settled = true;
371
- clearTimeout(waiter.timer);
372
- session.waiters.delete(waiter);
373
- resolve();
374
- };
375
- const timer = setTimeout(() => {
376
- finish();
377
- }, clampWaitMsWithOptions(state.options, request.timeoutMs, state.options.defaultWaitTimeoutMs));
378
- waiter = {
379
- resolve: finish,
380
- timer,
381
- };
382
- session.waiters.add(waiter);
383
- // 关键点(中文)
384
- // - 这里必须在注册 waiter 之后立刻复查一次状态。
385
- // - 否则如果 shell 恰好在“进入 if 判断”与“waiter 真正挂入集合”之间完成,
386
- // notifyWaiters 会被错过,导致当前 wait 一直睡到 timeout。
387
- if (session.snapshot.version > afterVersion ||
388
- isTerminalStatus(session.snapshot.status)) {
389
- finish();
390
- }
391
- });
392
- }
393
- const refreshed = await resolveSession(state, context, {
394
- shellId,
395
- includeCompleted: true,
396
- });
397
- if (!refreshed)
398
- throw new Error("shell session not found after wait");
399
- const chunk = createOutputChunk({
400
- shellId,
401
- outputText: refreshed.outputText,
402
- fromCursor: request.fromCursor,
403
- context,
404
- maxOutputTokens: request.maxOutputTokens,
405
- });
406
- return buildActionResponse({
407
- shell: refreshed.snapshot,
408
- chunk,
409
- });
410
- }
411
- /**
412
- * 关闭 shell session。
413
- */
414
- export async function closeShellSession(state, context, request) {
415
- const shellId = String(request.shellId || "").trim();
416
- if (!shellId)
417
- throw new Error("shell.close requires shellId");
418
- const session = await resolveSession(state, context, {
419
- shellId,
420
- includeCompleted: true,
421
- });
422
- if (!session)
423
- throw new Error("shell session not found");
424
- if (!isInMemorySession(session)) {
425
- return buildActionResponse({
426
- shell: session.snapshot,
427
- note: "shell already completed and only persisted snapshot remains",
428
- });
429
- }
430
- if (session.cleanupTimer) {
431
- clearTimeout(session.cleanupTimer);
432
- session.cleanupTimer = null;
433
- }
434
- if (session.snapshot.status === "running" || session.snapshot.status === "starting") {
435
- try {
436
- session.child.kill(request.force === true ? "SIGKILL" : "SIGTERM");
437
- }
438
- catch {
439
- // ignore
440
- }
441
- await updateSessionSnapshot(session, (snapshot) => {
442
- snapshot.status = request.force === true ? "killed" : "failed";
443
- snapshot.exitCode = request.force === true ? -9 : -15;
444
- snapshot.endedAt = nowMs();
445
- });
446
- }
447
- scheduleCleanup(state, shellId);
448
- return buildActionResponse({
449
- shell: session.snapshot,
450
- note: "shell close requested",
451
- });
452
- }
453
- /**
454
- * 以 one-shot 模式执行 shell command。
455
- */
456
- export async function execShellCommand(state, context, request) {
457
- const timeoutMs = clampWaitMsWithOptions(state.options, request.timeoutMs, state.options.defaultExecTimeoutMs);
458
- const started = await startShellSession(state, context, {
459
- cmd: request.cmd,
460
- ...(request.cwd ? { cwd: request.cwd } : {}),
461
- ...(request.shell ? { shell: request.shell } : {}),
462
- login: request.login,
463
- sandbox: request.sandbox,
464
- reason: request.reason,
465
- approvalToolName: "shell_exec",
466
- inlineWaitMs: Math.min(state.options.defaultInlineWaitMs, timeoutMs),
467
- maxOutputTokens: request.maxOutputTokens,
468
- autoNotifyOnExit: false,
469
- });
470
- let current = started;
471
- let fromCursor = current.chunk?.endCursor ?? 0;
472
- const outputParts = [];
473
- if (current.chunk?.output) {
474
- outputParts.push(current.chunk.output);
475
- }
476
- const deadline = nowMs() + timeoutMs;
477
- const sleep = async (ms) => {
478
- await new Promise((resolve) => {
479
- const timer = setTimeout(resolve, ms);
480
- if (typeof timer.unref === "function")
481
- timer.unref();
482
- });
483
- };
484
- while (!isTerminalStatus(current.shell.status)) {
485
- const remaining = deadline - nowMs();
486
- if (remaining <= 0) {
487
- await closeShellSession(state, context, {
488
- shellId: current.shell.shellId,
489
- force: true,
490
- });
491
- throw new Error(`shell.exec timed out after ${timeoutMs}ms. Use shell_start for long-running commands.`);
492
- }
493
- const inMemory = state.sessions.get(current.shell.shellId);
494
- if (inMemory &&
495
- (inMemory.snapshot.status === "running" ||
496
- inMemory.snapshot.status === "starting")) {
497
- await Promise.race([
498
- inMemory.completionPromise,
499
- sleep(Math.min(remaining, 250)),
500
- ]);
501
- }
502
- else {
503
- await sleep(Math.min(remaining, 250));
504
- }
505
- const refreshed = await resolveSession(state, context, {
506
- shellId: current.shell.shellId,
507
- includeCompleted: true,
508
- });
509
- if (!refreshed) {
510
- throw new Error(`shell session disappeared unexpectedly: ${current.shell.shellId}`);
511
- }
512
- const chunk = createOutputChunk({
513
- shellId: current.shell.shellId,
514
- outputText: refreshed.outputText,
515
- fromCursor,
516
- context,
517
- maxOutputTokens: request.maxOutputTokens,
518
- });
519
- current = buildActionResponse({
520
- shell: refreshed.snapshot,
521
- chunk,
522
- });
523
- if (chunk.output) {
524
- outputParts.push(chunk.output);
525
- }
526
- if (typeof chunk.endCursor === "number") {
527
- fromCursor = chunk.endCursor;
528
- }
529
- }
530
- const finalSession = state.sessions.get(current.shell.shellId);
531
- if (finalSession) {
532
- await finalSession.completionPromise;
533
- await finalSession.writeChain.catch(() => undefined);
534
- }
535
- await closeShellSession(state, context, {
536
- shellId: current.shell.shellId,
537
- force: false,
538
- }).catch(() => undefined);
539
- const completed = await resolveSession(state, context, {
540
- shellId: current.shell.shellId,
541
- includeCompleted: true,
542
- });
543
- const fullOutput = completed?.outputText ?? outputParts.join("");
544
- const originalLines = fullOutput ? fullOutput.split("\n").length : 0;
545
- return buildActionResponse({
546
- shell: current.shell,
547
- chunk: {
548
- shellId: current.shell.shellId,
549
- output: fullOutput,
550
- startCursor: 0,
551
- endCursor: fullOutput.length,
552
- originalChars: fullOutput.length,
553
- originalLines,
554
- hasMoreOutput: false,
555
- },
556
- note: "shell exec completed in one-shot mode",
557
- });
558
- }
559
- /**
560
- * 列出 pending unrestricted sandbox 审批。
561
- */
562
- export function listShellApprovals(state) {
563
- return listPendingApprovals(state);
564
- }
565
- /**
566
- * 批准 pending unrestricted sandbox 审批。
567
- */
568
- export async function approveShellApproval(state, context, approvalId) {
569
- return await resolveApproval({
570
- state,
571
- context,
572
- approvalId,
573
- decision: "approved",
574
- });
575
- }
576
- /**
577
- * 拒绝 pending unrestricted sandbox 审批。
578
- */
579
- export async function denyShellApproval(state, context, approvalId) {
580
- return await resolveApproval({
581
- state,
582
- context,
583
- approvalId,
584
- decision: "denied",
585
- });
586
- }
587
- //# sourceMappingURL=ShellActionRuntime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellActionRuntime.js","sourceRoot":"","sources":["../../../src/shell/runtime/ShellActionRuntime.ts"],"names":[],"mappings":"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"}