@downcity/shell 0.1.4

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 (141) hide show
  1. package/bin/Shell.d.ts +55 -0
  2. package/bin/Shell.d.ts.map +1 -0
  3. package/bin/Shell.js +171 -0
  4. package/bin/Shell.js.map +1 -0
  5. package/bin/approval/ShellApprovalRuntime.d.ts +62 -0
  6. package/bin/approval/ShellApprovalRuntime.d.ts.map +1 -0
  7. package/bin/approval/ShellApprovalRuntime.js +214 -0
  8. package/bin/approval/ShellApprovalRuntime.js.map +1 -0
  9. package/bin/index.d.ts +27 -0
  10. package/bin/index.d.ts.map +1 -0
  11. package/bin/index.js +26 -0
  12. package/bin/index.js.map +1 -0
  13. package/bin/sandbox/LinuxBubblewrapSandbox.d.ts +19 -0
  14. package/bin/sandbox/LinuxBubblewrapSandbox.d.ts.map +1 -0
  15. package/bin/sandbox/LinuxBubblewrapSandbox.js +186 -0
  16. package/bin/sandbox/LinuxBubblewrapSandbox.js.map +1 -0
  17. package/bin/sandbox/MacOsSeatbeltSandbox.d.ts +16 -0
  18. package/bin/sandbox/MacOsSeatbeltSandbox.d.ts.map +1 -0
  19. package/bin/sandbox/MacOsSeatbeltSandbox.js +154 -0
  20. package/bin/sandbox/MacOsSeatbeltSandbox.js.map +1 -0
  21. package/bin/sandbox/SandboxConfigResolver.d.ts +37 -0
  22. package/bin/sandbox/SandboxConfigResolver.d.ts.map +1 -0
  23. package/bin/sandbox/SandboxConfigResolver.js +130 -0
  24. package/bin/sandbox/SandboxConfigResolver.js.map +1 -0
  25. package/bin/sandbox/SandboxPreflight.d.ts +73 -0
  26. package/bin/sandbox/SandboxPreflight.d.ts.map +1 -0
  27. package/bin/sandbox/SandboxPreflight.js +122 -0
  28. package/bin/sandbox/SandboxPreflight.js.map +1 -0
  29. package/bin/sandbox/SandboxRunner.d.ts +61 -0
  30. package/bin/sandbox/SandboxRunner.d.ts.map +1 -0
  31. package/bin/sandbox/SandboxRunner.js +107 -0
  32. package/bin/sandbox/SandboxRunner.js.map +1 -0
  33. package/bin/sandbox/UnrestrictedSandbox.d.ts +16 -0
  34. package/bin/sandbox/UnrestrictedSandbox.d.ts.map +1 -0
  35. package/bin/sandbox/UnrestrictedSandbox.js +39 -0
  36. package/bin/sandbox/UnrestrictedSandbox.js.map +1 -0
  37. package/bin/sandbox/types/Sandbox.d.ts +130 -0
  38. package/bin/sandbox/types/Sandbox.d.ts.map +1 -0
  39. package/bin/sandbox/types/Sandbox.js +10 -0
  40. package/bin/sandbox/types/Sandbox.js.map +1 -0
  41. package/bin/sandbox/types/SandboxRuntime.d.ts +370 -0
  42. package/bin/sandbox/types/SandboxRuntime.d.ts.map +1 -0
  43. package/bin/sandbox/types/SandboxRuntime.js +10 -0
  44. package/bin/sandbox/types/SandboxRuntime.js.map +1 -0
  45. package/bin/session/Paths.d.ts +12 -0
  46. package/bin/session/Paths.d.ts.map +1 -0
  47. package/bin/session/Paths.js +21 -0
  48. package/bin/session/Paths.js.map +1 -0
  49. package/bin/session/ShellActionResponse.d.ts +52 -0
  50. package/bin/session/ShellActionResponse.d.ts.map +1 -0
  51. package/bin/session/ShellActionResponse.js +73 -0
  52. package/bin/session/ShellActionResponse.js.map +1 -0
  53. package/bin/session/ShellActionRuntime.d.ts +15 -0
  54. package/bin/session/ShellActionRuntime.d.ts.map +1 -0
  55. package/bin/session/ShellActionRuntime.js +15 -0
  56. package/bin/session/ShellActionRuntime.js.map +1 -0
  57. package/bin/session/ShellActionRuntimeSupport.d.ts +88 -0
  58. package/bin/session/ShellActionRuntimeSupport.d.ts.map +1 -0
  59. package/bin/session/ShellActionRuntimeSupport.js +305 -0
  60. package/bin/session/ShellActionRuntimeSupport.js.map +1 -0
  61. package/bin/session/ShellProcessEvents.d.ts +22 -0
  62. package/bin/session/ShellProcessEvents.d.ts.map +1 -0
  63. package/bin/session/ShellProcessEvents.js +41 -0
  64. package/bin/session/ShellProcessEvents.js.map +1 -0
  65. package/bin/session/ShellRunScope.d.ts +43 -0
  66. package/bin/session/ShellRunScope.d.ts.map +1 -0
  67. package/bin/session/ShellRunScope.js +29 -0
  68. package/bin/session/ShellRunScope.js.map +1 -0
  69. package/bin/session/ShellRuntimeEnvironment.d.ts +21 -0
  70. package/bin/session/ShellRuntimeEnvironment.d.ts.map +1 -0
  71. package/bin/session/ShellRuntimeEnvironment.js +69 -0
  72. package/bin/session/ShellRuntimeEnvironment.js.map +1 -0
  73. package/bin/session/ShellRuntimeTypes.d.ts +160 -0
  74. package/bin/session/ShellRuntimeTypes.d.ts.map +1 -0
  75. package/bin/session/ShellRuntimeTypes.js +10 -0
  76. package/bin/session/ShellRuntimeTypes.js.map +1 -0
  77. package/bin/session/actions/ShellActionShared.d.ts +76 -0
  78. package/bin/session/actions/ShellActionShared.d.ts.map +1 -0
  79. package/bin/session/actions/ShellActionShared.js +100 -0
  80. package/bin/session/actions/ShellActionShared.js.map +1 -0
  81. package/bin/session/actions/ShellApprovalActions.d.ts +34 -0
  82. package/bin/session/actions/ShellApprovalActions.d.ts.map +1 -0
  83. package/bin/session/actions/ShellApprovalActions.js +37 -0
  84. package/bin/session/actions/ShellApprovalActions.js.map +1 -0
  85. package/bin/session/actions/ShellExecActions.d.ts +15 -0
  86. package/bin/session/actions/ShellExecActions.d.ts.map +1 -0
  87. package/bin/session/actions/ShellExecActions.js +117 -0
  88. package/bin/session/actions/ShellExecActions.js.map +1 -0
  89. package/bin/session/actions/ShellLifecycleActions.d.ts +18 -0
  90. package/bin/session/actions/ShellLifecycleActions.d.ts.map +1 -0
  91. package/bin/session/actions/ShellLifecycleActions.js +53 -0
  92. package/bin/session/actions/ShellLifecycleActions.js.map +1 -0
  93. package/bin/session/actions/ShellQueryActions.d.ts +27 -0
  94. package/bin/session/actions/ShellQueryActions.d.ts.map +1 -0
  95. package/bin/session/actions/ShellQueryActions.js +151 -0
  96. package/bin/session/actions/ShellQueryActions.js.map +1 -0
  97. package/bin/session/actions/ShellStartActions.d.ts +15 -0
  98. package/bin/session/actions/ShellStartActions.d.ts.map +1 -0
  99. package/bin/session/actions/ShellStartActions.js +167 -0
  100. package/bin/session/actions/ShellStartActions.js.map +1 -0
  101. package/bin/session/actions/ShellWriteActions.d.ts +15 -0
  102. package/bin/session/actions/ShellWriteActions.d.ts.map +1 -0
  103. package/bin/session/actions/ShellWriteActions.js +85 -0
  104. package/bin/session/actions/ShellWriteActions.js.map +1 -0
  105. package/bin/tool/ShellToolFormatting.d.ts +12 -0
  106. package/bin/tool/ShellToolFormatting.d.ts.map +1 -0
  107. package/bin/tool/ShellToolFormatting.js +31 -0
  108. package/bin/tool/ShellToolFormatting.js.map +1 -0
  109. package/bin/tool/ShellToolSchemas.d.ts +61 -0
  110. package/bin/tool/ShellToolSchemas.d.ts.map +1 -0
  111. package/bin/tool/ShellToolSchemas.js +130 -0
  112. package/bin/tool/ShellToolSchemas.js.map +1 -0
  113. package/bin/tool/ShellTools.d.ts +32 -0
  114. package/bin/tool/ShellTools.d.ts.map +1 -0
  115. package/bin/tool/ShellTools.js +296 -0
  116. package/bin/tool/ShellTools.js.map +1 -0
  117. package/bin/types/Shell.d.ts +115 -0
  118. package/bin/types/Shell.d.ts.map +1 -0
  119. package/bin/types/Shell.js +9 -0
  120. package/bin/types/Shell.js.map +1 -0
  121. package/bin/types/ShellAction.d.ts +258 -0
  122. package/bin/types/ShellAction.d.ts.map +1 -0
  123. package/bin/types/ShellAction.js +9 -0
  124. package/bin/types/ShellAction.js.map +1 -0
  125. package/bin/types/ShellHostContext.d.ts +78 -0
  126. package/bin/types/ShellHostContext.d.ts.map +1 -0
  127. package/bin/types/ShellHostContext.js +9 -0
  128. package/bin/types/ShellHostContext.js.map +1 -0
  129. package/bin/types/ShellRuntime.d.ts +128 -0
  130. package/bin/types/ShellRuntime.d.ts.map +1 -0
  131. package/bin/types/ShellRuntime.js +9 -0
  132. package/bin/types/ShellRuntime.js.map +1 -0
  133. package/bin/types/ShellRuntimeOptions.d.ts +103 -0
  134. package/bin/types/ShellRuntimeOptions.d.ts.map +1 -0
  135. package/bin/types/ShellRuntimeOptions.js +10 -0
  136. package/bin/types/ShellRuntimeOptions.js.map +1 -0
  137. package/bin/utils/Id.d.ts +11 -0
  138. package/bin/utils/Id.d.ts.map +1 -0
  139. package/bin/utils/Id.js +14 -0
  140. package/bin/utils/Id.js.map +1 -0
  141. package/package.json +81 -0
package/bin/Shell.d.ts ADDED
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Shell 对象入口。
3
+ *
4
+ * 关键点(中文)
5
+ * - Shell 是 `@downcity/shell` 的主要对外对象,拥有 tools、sessions、sandbox 与 approvals。
6
+ * - Agent 只组合 Shell 实例,不再通过 Shell 间接调用 shell 能力。
7
+ */
8
+ import type { ShellApprovalDecisionResult, ShellApprovalView, ShellConfigureOptions, ShellOptions, ShellToolSet } from "./types/ShellRuntime.js";
9
+ /**
10
+ * Shell 运行时对象。
11
+ */
12
+ export declare class Shell {
13
+ /**
14
+ * Shell 内部状态。
15
+ */
16
+ private readonly state;
17
+ /**
18
+ * Shell 宿主配置。
19
+ */
20
+ private host_options;
21
+ /**
22
+ * 模型可调用的 shell tools。
23
+ */
24
+ readonly tools: ShellToolSet;
25
+ constructor(options?: ShellOptions);
26
+ /**
27
+ * 补齐宿主上下文。
28
+ *
29
+ * 关键点(中文):这是 Agent 内部装配入口,用户只需要 `new Agent({ shell: new Shell() })`。
30
+ */
31
+ configure(options: ShellConfigureOptions): void;
32
+ /**
33
+ * 列出 pending approvals。
34
+ */
35
+ approvals(): ShellApprovalView[];
36
+ /**
37
+ * 批准 pending approval。
38
+ */
39
+ approve(input: {
40
+ approval_id: string;
41
+ }): Promise<ShellApprovalDecisionResult>;
42
+ /**
43
+ * 拒绝 pending approval。
44
+ */
45
+ deny(input: {
46
+ approval_id: string;
47
+ }): Promise<ShellApprovalDecisionResult>;
48
+ /**
49
+ * 释放所有 shell sessions。
50
+ */
51
+ dispose(): Promise<void>;
52
+ private run_action;
53
+ private create_host_context;
54
+ }
55
+ //# sourceMappingURL=Shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Shell.d.ts","sourceRoot":"","sources":["../src/Shell.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACb,MAAM,yBAAyB,CAAC;AAuBjC;;GAEG;AACH,qBAAa,KAAK;IAChB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAE1C;;OAEG;IACH,OAAO,CAAC,YAAY,CAAwB;IAE5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;gBAEjB,OAAO,GAAE,YAAiB;IAQtC;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAc/C;;OAEG;IACH,SAAS,IAAI,iBAAiB,EAAE;IAgBhC;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAWnF;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAWhF;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAYhB,UAAU;IAyBxB,OAAO,CAAC,mBAAmB;CAqC5B"}
package/bin/Shell.js ADDED
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Shell 对象入口。
3
+ *
4
+ * 关键点(中文)
5
+ * - Shell 是 `@downcity/shell` 的主要对外对象,拥有 tools、sessions、sandbox 与 approvals。
6
+ * - Agent 只组合 Shell 实例,不再通过 Shell 间接调用 shell 能力。
7
+ */
8
+ import { approveShellApproval, closeAllShellSessions, closeShellSession, createShellRuntimeState, denyShellApproval, execShellCommand, getShellSessionStatus, listShellApprovals, readShellSession, startShellSession, waitShellSession, writeShellSession, } from "./session/ShellActionRuntime.js";
9
+ import { createShellTools, } from "./tool/ShellTools.js";
10
+ import { getShellRunContext } from "./session/ShellRunScope.js";
11
+ /**
12
+ * Shell 运行时对象。
13
+ */
14
+ export class Shell {
15
+ /**
16
+ * Shell 内部状态。
17
+ */
18
+ state;
19
+ /**
20
+ * Shell 宿主配置。
21
+ */
22
+ host_options;
23
+ /**
24
+ * 模型可调用的 shell tools。
25
+ */
26
+ tools;
27
+ constructor(options = {}) {
28
+ this.host_options = { ...options };
29
+ this.state = createShellRuntimeState();
30
+ this.tools = createShellTools({
31
+ run_action: async (params) => await this.run_action(params.action, params.payload),
32
+ });
33
+ }
34
+ /**
35
+ * 补齐宿主上下文。
36
+ *
37
+ * 关键点(中文):这是 Agent 内部装配入口,用户只需要 `new Agent({ shell: new Shell() })`。
38
+ */
39
+ configure(options) {
40
+ this.host_options = {
41
+ ...this.host_options,
42
+ ...options,
43
+ env: {
44
+ ...(this.host_options.env || {}),
45
+ ...(options.env || {}),
46
+ },
47
+ sandbox: options.sandbox || this.host_options.sandbox,
48
+ logger: options.logger || this.host_options.logger,
49
+ emit_event: options.emit_event || this.host_options.emit_event,
50
+ };
51
+ }
52
+ /**
53
+ * 列出 pending approvals。
54
+ */
55
+ approvals() {
56
+ return listShellApprovals(this.state).map((item) => ({
57
+ approval_id: item.approvalId,
58
+ shell_id: item.shellId,
59
+ ...(item.ownerContextId ? { session_id: item.ownerContextId } : {}),
60
+ tool_name: item.toolName,
61
+ cmd: item.cmd,
62
+ operation: item.operation,
63
+ ...(item.inputPreview !== undefined ? { input_preview: item.inputPreview } : {}),
64
+ ...(typeof item.inputChars === "number" ? { input_chars: item.inputChars } : {}),
65
+ cwd: item.cwd,
66
+ reason: item.reason,
67
+ created_at: item.createdAt,
68
+ }));
69
+ }
70
+ /**
71
+ * 批准 pending approval。
72
+ */
73
+ async approve(input) {
74
+ const approval_id = String(input.approval_id || "").trim();
75
+ if (!approval_id)
76
+ throw new Error("approval_id is required");
77
+ const success = await approveShellApproval(this.state, this.create_host_context(), approval_id);
78
+ return {
79
+ success,
80
+ approval_id,
81
+ decision: "approved",
82
+ };
83
+ }
84
+ /**
85
+ * 拒绝 pending approval。
86
+ */
87
+ async deny(input) {
88
+ const approval_id = String(input.approval_id || "").trim();
89
+ if (!approval_id)
90
+ throw new Error("approval_id is required");
91
+ const success = await denyShellApproval(this.state, this.create_host_context(), approval_id);
92
+ return {
93
+ success,
94
+ approval_id,
95
+ decision: "denied",
96
+ };
97
+ }
98
+ /**
99
+ * 释放所有 shell sessions。
100
+ */
101
+ async dispose() {
102
+ await closeAllShellSessions(this.state, true);
103
+ for (const session of this.state.sessions.values()) {
104
+ if (session.cleanupTimer) {
105
+ clearTimeout(session.cleanupTimer);
106
+ }
107
+ }
108
+ this.state.sessions.clear();
109
+ this.state.approvals.clear();
110
+ this.state.context = null;
111
+ }
112
+ async run_action(action, payload) {
113
+ const context = this.create_host_context();
114
+ switch (action) {
115
+ case "start":
116
+ return await startShellSession(this.state, context, payload);
117
+ case "exec":
118
+ return await execShellCommand(this.state, context, payload);
119
+ case "status":
120
+ return await getShellSessionStatus(this.state, context, payload);
121
+ case "read":
122
+ return await readShellSession(this.state, context, payload);
123
+ case "write":
124
+ return await writeShellSession(this.state, context, payload);
125
+ case "wait":
126
+ return await waitShellSession(this.state, context, payload);
127
+ case "close":
128
+ return await closeShellSession(this.state, context, payload);
129
+ default:
130
+ throw new Error(`Unknown shell action: ${String(action)}`);
131
+ }
132
+ }
133
+ create_host_context() {
134
+ const root_path = String(this.host_options.root_path || "").trim();
135
+ if (!root_path) {
136
+ throw new Error("Shell requires root_path. Pass Shell through new Agent({ shell }) or construct Shell with root_path.");
137
+ }
138
+ const emit_event = this.host_options.emit_event;
139
+ const run_context = getShellRunContext() || null;
140
+ const session_id = String(run_context?.session_id || "").trim();
141
+ const turn_id = String(run_context?.turn_id || "").trim();
142
+ return {
143
+ rootPath: root_path,
144
+ env: this.host_options.env,
145
+ config: {
146
+ ...(this.host_options.agent_id ? { id: this.host_options.agent_id } : {}),
147
+ ...(this.host_options.sandbox ? { sandbox: this.host_options.sandbox } : {}),
148
+ },
149
+ logger: this.host_options.logger,
150
+ session: emit_event
151
+ ? {
152
+ get: (target_session_id) => ({
153
+ publishEvent: (event) => {
154
+ emit_event({
155
+ ...event,
156
+ session_id: String(target_session_id || session_id || "").trim(),
157
+ });
158
+ },
159
+ }),
160
+ }
161
+ : undefined,
162
+ shellIntegration: {
163
+ getRunContext: () => ({
164
+ ...(session_id ? { sessionId: session_id } : {}),
165
+ ...(turn_id ? { turnId: turn_id } : {}),
166
+ }),
167
+ },
168
+ };
169
+ }
170
+ }
171
+ //# sourceMappingURL=Shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Shell.js","sourceRoot":"","sources":["../src/Shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
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 { ShellHostContext } from "../types/ShellHostContext.js";
10
+ import type { ShellApprovalStatus, ShellApprovalToolName } from "../types/ShellAction.js";
11
+ import type { ShellRuntimeState } from "../session/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: ShellRuntimeState;
24
+ context: ShellHostContext;
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: ShellRuntimeState;
42
+ context: ShellHostContext;
43
+ approvalId: string;
44
+ decision: ShellApprovalStatus;
45
+ }): Promise<boolean>;
46
+ /**
47
+ * 列出 pending unrestricted sandbox 审批。
48
+ */
49
+ export declare function listPendingApprovals(state: ShellRuntimeState): 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShellApprovalRuntime.d.ts","sourceRoot":"","sources":["../../src/approval/ShellApprovalRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAkExE;;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,iBAAiB,CAAC;IACzB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,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,iBAAiB,CAAC;IACzB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,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,iBAAiB,GAAG,KAAK,CAAC;IACpE,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"}
@@ -0,0 +1,214 @@
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 fs from "fs-extra";
10
+ import path from "node:path";
11
+ import { generateId } from "../utils/Id.js";
12
+ import { nowMs } from "../session/ShellActionRuntimeSupport.js";
13
+ const DANGEROUS_COMMAND_PATTERNS = [
14
+ /\bsudo\b/,
15
+ /\brm\s+-[^&|;\n]*r[^&|;\n]*f\s+\/(?:\s|$)/,
16
+ /\bchmod\s+-R\s+777\s+\/(?:\s|$)/,
17
+ /\bssh-keygen\b/,
18
+ /\bsecurity\s+(?:add|delete|unlock|set|import|export)-/i,
19
+ /(?:^|[\s;&|])(?:nohup\s+)?[^;&|\n]*(?:&)\s*$/,
20
+ ];
21
+ function isDangerousCommand(cmd) {
22
+ return DANGEROUS_COMMAND_PATTERNS.some((pattern) => pattern.test(cmd));
23
+ }
24
+ function resolveApprovalOperation(toolName) {
25
+ if (toolName === "shell_write")
26
+ return "write";
27
+ if (toolName === "shell_exec")
28
+ return "exec";
29
+ return "start";
30
+ }
31
+ function buildInputPreview(value) {
32
+ const normalized = String(value || "");
33
+ if (normalized.length <= 240)
34
+ return normalized;
35
+ return `${normalized.slice(0, 240)}...`;
36
+ }
37
+ function resolveAuditPath(context) {
38
+ return path.join(context.rootPath, ".downcity", "logs", "unrestricted-sandbox-audit.jsonl");
39
+ }
40
+ async function appendAudit(params) {
41
+ const filePath = resolveAuditPath(params.context);
42
+ await fs.ensureDir(path.dirname(filePath));
43
+ await fs.appendFile(filePath, `${JSON.stringify(params.record)}\n`, "utf-8");
44
+ }
45
+ function publishApprovalResult(params) {
46
+ const sessionId = String(params.ownerContextId || "").trim();
47
+ if (!sessionId || !params.context.session)
48
+ return;
49
+ const turnId = String(params.context.shellIntegration?.getRunContext?.()?.turnId || sessionId).trim();
50
+ try {
51
+ params.context.session.get(sessionId).publishEvent({
52
+ type: "tool-approval-result",
53
+ turnId,
54
+ toolCallId: params.shellId,
55
+ toolName: params.toolName,
56
+ approvalId: params.approvalId,
57
+ decision: params.decision,
58
+ });
59
+ }
60
+ catch {
61
+ // ignore event delivery failures
62
+ }
63
+ }
64
+ /**
65
+ * 校验 unrestricted sandbox 请求。
66
+ */
67
+ export function validateUnrestrictedRequest(params) {
68
+ const reason = String(params.reason || "").trim();
69
+ if (!reason) {
70
+ return "unrestricted sandbox requires a non-empty reason";
71
+ }
72
+ if (isDangerousCommand(params.cmd)) {
73
+ return "unrestricted sandbox rejected a dangerous command";
74
+ }
75
+ return null;
76
+ }
77
+ /**
78
+ * 请求用户批准 unrestricted sandbox 执行。
79
+ */
80
+ export async function requestUnrestrictedApproval(params) {
81
+ const approvalId = `ap_${generateId()}`;
82
+ const createdAt = nowMs();
83
+ const ownerContextId = String(params.ownerContextId || "").trim() || undefined;
84
+ const operation = resolveApprovalOperation(params.toolName);
85
+ const inputPreview = params.inputPreview !== undefined
86
+ ? buildInputPreview(params.inputPreview)
87
+ : undefined;
88
+ const status = await new Promise((resolve) => {
89
+ const timer = setTimeout(() => {
90
+ resolveApproval({
91
+ state: params.state,
92
+ context: params.context,
93
+ approvalId,
94
+ decision: "expired",
95
+ }).catch(() => undefined);
96
+ }, params.state.options.defaultApprovalTimeoutMs);
97
+ if (typeof timer.unref === "function")
98
+ timer.unref();
99
+ params.state.approvals.set(approvalId, {
100
+ approvalId,
101
+ shellId: params.shellId,
102
+ ...(ownerContextId ? { ownerContextId } : {}),
103
+ toolName: params.toolName,
104
+ cmd: params.cmd,
105
+ operation,
106
+ ...(inputPreview !== undefined ? { inputPreview } : {}),
107
+ ...(typeof params.inputChars === "number" ? { inputChars: params.inputChars } : {}),
108
+ cwd: params.cwd,
109
+ reason: params.reason,
110
+ createdAt,
111
+ timer,
112
+ resolve,
113
+ });
114
+ if (ownerContextId) {
115
+ const turnId = String(params.context.shellIntegration?.getRunContext?.()?.turnId || ownerContextId).trim();
116
+ try {
117
+ params.context.session?.get(ownerContextId).publishEvent({
118
+ type: "tool-approval-request",
119
+ turnId,
120
+ toolCallId: params.shellId,
121
+ toolName: params.toolName,
122
+ approvalId,
123
+ sandbox: "unrestricted",
124
+ cmd: params.cmd,
125
+ cwd: params.cwd,
126
+ reason: params.reason,
127
+ status: "pending",
128
+ operation,
129
+ shellId: params.shellId,
130
+ ...(inputPreview !== undefined ? { inputPreview } : {}),
131
+ ...(typeof params.inputChars === "number" ? { inputChars: params.inputChars } : {}),
132
+ });
133
+ }
134
+ catch {
135
+ // ignore event delivery failures
136
+ }
137
+ }
138
+ appendAudit({
139
+ context: params.context,
140
+ record: {
141
+ event: "approval_requested",
142
+ approval_id: approvalId,
143
+ session_id: ownerContextId || null,
144
+ tool_call_id: params.shellId,
145
+ agent_id: params.context.config?.id || null,
146
+ cmd: params.cmd,
147
+ operation,
148
+ ...(inputPreview !== undefined ? { input_preview: inputPreview } : {}),
149
+ ...(typeof params.inputChars === "number" ? { input_chars: params.inputChars } : {}),
150
+ cwd: params.cwd,
151
+ reason: params.reason,
152
+ created_at: new Date(createdAt).toISOString(),
153
+ },
154
+ }).catch(() => undefined);
155
+ });
156
+ return { approvalId, status };
157
+ }
158
+ /**
159
+ * 兑现 unrestricted sandbox 审批。
160
+ */
161
+ export async function resolveApproval(params) {
162
+ const approval = params.state.approvals.get(params.approvalId);
163
+ if (!approval)
164
+ return false;
165
+ params.state.approvals.delete(params.approvalId);
166
+ clearTimeout(approval.timer);
167
+ approval.resolve(params.decision);
168
+ publishApprovalResult({
169
+ context: params.context,
170
+ ownerContextId: approval.ownerContextId,
171
+ approvalId: approval.approvalId,
172
+ shellId: approval.shellId,
173
+ toolName: approval.toolName,
174
+ decision: params.decision,
175
+ });
176
+ await appendAudit({
177
+ context: params.context,
178
+ record: {
179
+ event: "approval_resolved",
180
+ approval_id: approval.approvalId,
181
+ session_id: approval.ownerContextId || null,
182
+ tool_call_id: approval.shellId,
183
+ agent_id: params.context.config?.id || null,
184
+ cmd: approval.cmd,
185
+ operation: approval.operation,
186
+ ...(approval.inputPreview !== undefined ? { input_preview: approval.inputPreview } : {}),
187
+ ...(typeof approval.inputChars === "number" ? { input_chars: approval.inputChars } : {}),
188
+ cwd: approval.cwd,
189
+ reason: approval.reason,
190
+ decision: params.decision,
191
+ resolved_at: new Date(nowMs()).toISOString(),
192
+ },
193
+ }).catch(() => undefined);
194
+ return true;
195
+ }
196
+ /**
197
+ * 列出 pending unrestricted sandbox 审批。
198
+ */
199
+ export function listPendingApprovals(state) {
200
+ return Array.from(state.approvals.values()).map((approval) => ({
201
+ approvalId: approval.approvalId,
202
+ shellId: approval.shellId,
203
+ ...(approval.ownerContextId ? { ownerContextId: approval.ownerContextId } : {}),
204
+ toolName: approval.toolName,
205
+ cmd: approval.cmd,
206
+ operation: approval.operation,
207
+ ...(approval.inputPreview !== undefined ? { inputPreview: approval.inputPreview } : {}),
208
+ ...(typeof approval.inputChars === "number" ? { inputChars: approval.inputChars } : {}),
209
+ cwd: approval.cwd,
210
+ reason: approval.reason,
211
+ createdAt: approval.createdAt,
212
+ }));
213
+ }
214
+ //# sourceMappingURL=ShellApprovalRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShellApprovalRuntime.js","sourceRoot":"","sources":["../../src/approval/ShellApprovalRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAO3C,OAAO,EAAE,KAAK,EAAE,MAAM,yCAAyC,CAAC;AAEhE,MAAM,0BAA0B,GAAG;IACjC,UAAU;IACV,2CAA2C;IAC3C,iCAAiC;IACjC,gBAAgB;IAChB,wDAAwD;IACxD,8CAA8C;CAC/C,CAAC;AAEF,SAAS,kBAAkB,CAAC,GAAW;IACrC,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,wBAAwB,CAAC,QAA+B;IAC/D,IAAI,QAAQ,KAAK,aAAa;QAAE,OAAO,OAAO,CAAC;IAC/C,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,MAAM,CAAC;IAC7C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,UAAU,CAAC;IAChD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAyB;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,kCAAkC,CAAC,CAAC;AAC9F,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAG1B;IACC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,qBAAqB,CAAC,MAO9B;IACC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO;QAAE,OAAO;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACtG,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC;YACjD,IAAI,EAAE,sBAAsB;YAC5B,MAAM;YACN,UAAU,EAAE,MAAM,CAAC,OAAO;YAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAG3C;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,kDAAkD,CAAC;IAC5D,CAAC;IACD,IAAI,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,mDAAmD,CAAC;IAC7D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,MAWjD;IAIC,MAAM,UAAU,GAAG,MAAM,UAAU,EAAE,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC;IAC1B,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IAC/E,MAAM,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,KAAK,SAAS;QACpD,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC;QACxC,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAsB,CAAC,OAAO,EAAE,EAAE;QAChE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,eAAe,CAAC;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,UAAU;gBACV,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;YAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAErD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE;YACrC,UAAU;YACV,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,SAAS;YACT,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS;YACT,KAAK;YACL,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,IAAI,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3G,IAAI,CAAC;gBACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC;oBACvD,IAAI,EAAE,uBAAuB;oBAC7B,MAAM;oBACN,UAAU,EAAE,MAAM,CAAC,OAAO;oBAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,UAAU;oBACV,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,MAAM,EAAE,SAAS;oBACjB,SAAS;oBACT,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvD,GAAG,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpF,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;YACnC,CAAC;QACH,CAAC;QAED,WAAW,CAAC;YACV,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE;gBACN,KAAK,EAAE,oBAAoB;gBAC3B,WAAW,EAAE,UAAU;gBACvB,UAAU,EAAE,cAAc,IAAI,IAAI;gBAClC,YAAY,EAAE,MAAM,CAAC,OAAO;gBAC5B,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI;gBAC3C,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,SAAS;gBACT,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,GAAG,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpF,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;aAC9C;SACF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAKrC;IACC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjD,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAElC,qBAAqB,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;IAEH,MAAM,WAAW,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE;YACN,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,QAAQ,CAAC,UAAU;YAChC,UAAU,EAAE,QAAQ,CAAC,cAAc,IAAI,IAAI;YAC3C,YAAY,EAAE,QAAQ,CAAC,OAAO;YAC9B,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI;YAC3C,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,GAAG,CAAC,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE;SAC7C;KACF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAE1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAwB;IAa3D,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC7D,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,GAAG,CAAC,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAC,CAAC,CAAC;AACN,CAAC"}
package/bin/index.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @downcity/shell 公开入口。
3
+ *
4
+ * 关键点(中文)
5
+ * - 本包拥有 shell / sandbox 的领域能力,不依赖 agent session 或 plugin 系统。
6
+ * - Agent 与 plugins 通过这里复用本地命令执行、shell session、approval 与 sandbox backend。
7
+ */
8
+ export * from "./types/Shell.js";
9
+ export * from "./types/ShellRuntime.js";
10
+ export type { ShellActionResponse, ShellApprovalStatus, ShellApprovalToolName, ShellCloseRequest, ShellExecRequest, ShellExternalRef, ShellOutputChunk, ShellQueryRequest, ShellReadRequest, ShellSessionSnapshot, ShellSessionStatus, ShellStartRequest, ShellWaitRequest, ShellWriteRequest, } from "./types/ShellAction.js";
11
+ export * from "./types/ShellRuntimeOptions.js";
12
+ export * from "./types/ShellHostContext.js";
13
+ export * from "./Shell.js";
14
+ export * from "./sandbox/types/Sandbox.js";
15
+ export * from "./sandbox/types/SandboxRuntime.js";
16
+ export * from "./sandbox/SandboxRunner.js";
17
+ export * from "./sandbox/SandboxConfigResolver.js";
18
+ export * from "./sandbox/SandboxPreflight.js";
19
+ export * from "./session/ShellActionRuntime.js";
20
+ export * from "./session/ShellActionResponse.js";
21
+ export * from "./session/ShellRuntimeEnvironment.js";
22
+ export * from "./session/ShellRuntimeTypes.js";
23
+ export * from "./session/ShellRunScope.js";
24
+ export * from "./approval/ShellApprovalRuntime.js";
25
+ export * from "./tool/ShellTools.js";
26
+ export * from "./tool/ShellToolSchemas.js";
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC"}
package/bin/index.js ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @downcity/shell 公开入口。
3
+ *
4
+ * 关键点(中文)
5
+ * - 本包拥有 shell / sandbox 的领域能力,不依赖 agent session 或 plugin 系统。
6
+ * - Agent 与 plugins 通过这里复用本地命令执行、shell session、approval 与 sandbox backend。
7
+ */
8
+ export * from "./types/Shell.js";
9
+ export * from "./types/ShellRuntime.js";
10
+ export * from "./types/ShellRuntimeOptions.js";
11
+ export * from "./types/ShellHostContext.js";
12
+ export * from "./Shell.js";
13
+ export * from "./sandbox/types/Sandbox.js";
14
+ export * from "./sandbox/types/SandboxRuntime.js";
15
+ export * from "./sandbox/SandboxRunner.js";
16
+ export * from "./sandbox/SandboxConfigResolver.js";
17
+ export * from "./sandbox/SandboxPreflight.js";
18
+ export * from "./session/ShellActionRuntime.js";
19
+ export * from "./session/ShellActionResponse.js";
20
+ export * from "./session/ShellRuntimeEnvironment.js";
21
+ export * from "./session/ShellRuntimeTypes.js";
22
+ export * from "./session/ShellRunScope.js";
23
+ export * from "./approval/ShellApprovalRuntime.js";
24
+ export * from "./tool/ShellTools.js";
25
+ export * from "./tool/ShellToolSchemas.js";
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AAiBxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Linux Bubblewrap sandbox backend。
3
+ *
4
+ * 关键点(中文)
5
+ * - 基于 `bwrap` 提供 Linux 本机 shell sandbox。
6
+ * - 继续保持“shell 命令必须进入 sandbox”的安全语义,不提供宿主机裸跑回退。
7
+ * - 边界与 macOS backend 对齐:路径、环境变量、网络、agent 级共享 HOME/TMPDIR/cache。
8
+ */
9
+ import type { SandboxSpawnParams, SandboxSpawnResult } from "../sandbox/types/SandboxRuntime.js";
10
+ export declare function buildLinuxBubblewrapArgs(params: SandboxSpawnParams & {
11
+ actualCwd: string;
12
+ }): string[];
13
+ /**
14
+ * 在 Linux bubblewrap sandbox 中启动 shell 子进程。
15
+ */
16
+ export declare function spawnLinuxBubblewrapSandbox(params: SandboxSpawnParams & {
17
+ actualCwd: string;
18
+ }): Promise<SandboxSpawnResult>;
19
+ //# sourceMappingURL=LinuxBubblewrapSandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinuxBubblewrapSandbox.d.ts","sourceRoot":"","sources":["../../src/sandbox/LinuxBubblewrapSandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AA0G3C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG;IACpE,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,EAAE,CA2DX;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,kBAAkB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,kBAAkB,CAAC,CAgC7B"}