@downcity/agent 1.1.113 → 1.1.119

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 (137) hide show
  1. package/bin/agent/local/Agent.d.ts +39 -0
  2. package/bin/agent/local/Agent.d.ts.map +1 -1
  3. package/bin/agent/local/Agent.js +53 -0
  4. package/bin/agent/local/Agent.js.map +1 -1
  5. package/bin/agent/local/services/AgentAssemblyService.d.ts +4 -0
  6. package/bin/agent/local/services/AgentAssemblyService.d.ts.map +1 -1
  7. package/bin/agent/local/services/AgentAssemblyService.js +18 -2
  8. package/bin/agent/local/services/AgentAssemblyService.js.map +1 -1
  9. package/bin/agent/local/services/AgentLifecycleService.d.ts +6 -0
  10. package/bin/agent/local/services/AgentLifecycleService.d.ts.map +1 -1
  11. package/bin/agent/local/services/AgentLifecycleService.js +4 -0
  12. package/bin/agent/local/services/AgentLifecycleService.js.map +1 -1
  13. package/bin/agent/remote/RemoteAgent.d.ts +35 -1
  14. package/bin/agent/remote/RemoteAgent.d.ts.map +1 -1
  15. package/bin/agent/remote/RemoteAgent.js +37 -1
  16. package/bin/agent/remote/RemoteAgent.js.map +1 -1
  17. package/bin/agent/remote/RemoteTransport.d.ts +22 -0
  18. package/bin/agent/remote/RemoteTransport.d.ts.map +1 -1
  19. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +17 -0
  20. package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -1
  21. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +63 -0
  22. package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -1
  23. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +16 -0
  24. package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -1
  25. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +18 -0
  26. package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +1 -1
  27. package/bin/executor/Executor.d.ts.map +1 -1
  28. package/bin/executor/Executor.js +7 -1
  29. package/bin/executor/Executor.js.map +1 -1
  30. package/bin/index.d.ts +0 -1
  31. package/bin/index.d.ts.map +1 -1
  32. package/bin/index.js +0 -1
  33. package/bin/index.js.map +1 -1
  34. package/bin/rpc/Client.d.ts +28 -0
  35. package/bin/rpc/Client.d.ts.map +1 -1
  36. package/bin/rpc/Client.js +63 -0
  37. package/bin/rpc/Client.js.map +1 -1
  38. package/bin/rpc/server/InternalHandlers.d.ts.map +1 -1
  39. package/bin/rpc/server/InternalHandlers.js +54 -0
  40. package/bin/rpc/server/InternalHandlers.js.map +1 -1
  41. package/bin/rpc/server/ServerTypes.d.ts +5 -0
  42. package/bin/rpc/server/ServerTypes.d.ts.map +1 -1
  43. package/bin/types/agent/AgentOptions.d.ts +9 -0
  44. package/bin/types/agent/AgentOptions.d.ts.map +1 -1
  45. package/bin/types/config/DowncityConfig.d.ts +2 -2
  46. package/bin/types/config/DowncityConfig.d.ts.map +1 -1
  47. package/bin/types/rpc/RpcProtocol.d.ts +53 -0
  48. package/bin/types/rpc/RpcProtocol.d.ts.map +1 -1
  49. package/package.json +4 -3
  50. package/scripts/linux-bubblewrap-sandbox.test.mjs +1 -1
  51. package/scripts/shell-sandbox-preflight.test.mjs +1 -1
  52. package/src/agent/local/Agent.ts +68 -0
  53. package/src/agent/local/services/AgentAssemblyService.ts +23 -2
  54. package/src/agent/local/services/AgentLifecycleService.ts +11 -0
  55. package/src/agent/remote/RemoteAgent.ts +54 -1
  56. package/src/agent/remote/RemoteTransport.ts +23 -0
  57. package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +101 -0
  58. package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +35 -0
  59. package/src/executor/Executor.ts +12 -2
  60. package/src/index.ts +0 -1
  61. package/src/rpc/Client.ts +80 -0
  62. package/src/rpc/server/InternalHandlers.ts +55 -0
  63. package/src/rpc/server/ServerTypes.ts +5 -0
  64. package/src/types/agent/AgentOptions.ts +10 -0
  65. package/src/types/config/DowncityConfig.ts +2 -2
  66. package/src/types/rpc/RpcProtocol.ts +59 -0
  67. package/tsconfig.tsbuildinfo +1 -1
  68. package/bin/executor/tools/shell/ShellToolBridge.d.ts +0 -79
  69. package/bin/executor/tools/shell/ShellToolBridge.d.ts.map +0 -1
  70. package/bin/executor/tools/shell/ShellToolBridge.js +0 -320
  71. package/bin/executor/tools/shell/ShellToolBridge.js.map +0 -1
  72. package/bin/executor/tools/shell/ShellToolDefinition.d.ts +0 -116
  73. package/bin/executor/tools/shell/ShellToolDefinition.d.ts.map +0 -1
  74. package/bin/executor/tools/shell/ShellToolDefinition.js +0 -369
  75. package/bin/executor/tools/shell/ShellToolDefinition.js.map +0 -1
  76. package/bin/executor/tools/shell/ShellToolFormatting.d.ts +0 -17
  77. package/bin/executor/tools/shell/ShellToolFormatting.d.ts.map +0 -1
  78. package/bin/executor/tools/shell/ShellToolFormatting.js +0 -36
  79. package/bin/executor/tools/shell/ShellToolFormatting.js.map +0 -1
  80. package/bin/executor/tools/shell/ShellToolSchemas.d.ts +0 -61
  81. package/bin/executor/tools/shell/ShellToolSchemas.d.ts.map +0 -1
  82. package/bin/executor/tools/shell/ShellToolSchemas.js +0 -130
  83. package/bin/executor/tools/shell/ShellToolSchemas.js.map +0 -1
  84. package/bin/executor/tools/shell/types/Shell.d.ts +0 -115
  85. package/bin/executor/tools/shell/types/Shell.d.ts.map +0 -1
  86. package/bin/executor/tools/shell/types/Shell.js +0 -9
  87. package/bin/executor/tools/shell/types/Shell.js.map +0 -1
  88. package/bin/executor/tools/shell/types/ShellPlugin.d.ts +0 -258
  89. package/bin/executor/tools/shell/types/ShellPlugin.d.ts.map +0 -1
  90. package/bin/executor/tools/shell/types/ShellPlugin.js +0 -9
  91. package/bin/executor/tools/shell/types/ShellPlugin.js.map +0 -1
  92. package/bin/sandbox/LinuxBubblewrapSandbox.d.ts +0 -19
  93. package/bin/sandbox/LinuxBubblewrapSandbox.d.ts.map +0 -1
  94. package/bin/sandbox/LinuxBubblewrapSandbox.js +0 -186
  95. package/bin/sandbox/LinuxBubblewrapSandbox.js.map +0 -1
  96. package/bin/sandbox/MacOsSeatbeltSandbox.d.ts +0 -16
  97. package/bin/sandbox/MacOsSeatbeltSandbox.d.ts.map +0 -1
  98. package/bin/sandbox/MacOsSeatbeltSandbox.js +0 -154
  99. package/bin/sandbox/MacOsSeatbeltSandbox.js.map +0 -1
  100. package/bin/sandbox/SandboxConfigResolver.d.ts +0 -37
  101. package/bin/sandbox/SandboxConfigResolver.d.ts.map +0 -1
  102. package/bin/sandbox/SandboxConfigResolver.js +0 -130
  103. package/bin/sandbox/SandboxConfigResolver.js.map +0 -1
  104. package/bin/sandbox/SandboxPreflight.d.ts +0 -73
  105. package/bin/sandbox/SandboxPreflight.d.ts.map +0 -1
  106. package/bin/sandbox/SandboxPreflight.js +0 -122
  107. package/bin/sandbox/SandboxPreflight.js.map +0 -1
  108. package/bin/sandbox/SandboxRunner.d.ts +0 -61
  109. package/bin/sandbox/SandboxRunner.d.ts.map +0 -1
  110. package/bin/sandbox/SandboxRunner.js +0 -107
  111. package/bin/sandbox/SandboxRunner.js.map +0 -1
  112. package/bin/sandbox/UnrestrictedSandbox.d.ts +0 -16
  113. package/bin/sandbox/UnrestrictedSandbox.d.ts.map +0 -1
  114. package/bin/sandbox/UnrestrictedSandbox.js +0 -39
  115. package/bin/sandbox/UnrestrictedSandbox.js.map +0 -1
  116. package/bin/sandbox/types/Sandbox.d.ts +0 -130
  117. package/bin/sandbox/types/Sandbox.d.ts.map +0 -1
  118. package/bin/sandbox/types/Sandbox.js +0 -10
  119. package/bin/sandbox/types/Sandbox.js.map +0 -1
  120. package/bin/sandbox/types/SandboxRuntime.d.ts +0 -370
  121. package/bin/sandbox/types/SandboxRuntime.d.ts.map +0 -1
  122. package/bin/sandbox/types/SandboxRuntime.js +0 -10
  123. package/bin/sandbox/types/SandboxRuntime.js.map +0 -1
  124. package/src/executor/tools/shell/ShellToolBridge.ts +0 -412
  125. package/src/executor/tools/shell/ShellToolDefinition.ts +0 -524
  126. package/src/executor/tools/shell/ShellToolFormatting.ts +0 -34
  127. package/src/executor/tools/shell/ShellToolSchemas.ts +0 -139
  128. package/src/executor/tools/shell/types/Shell.ts +0 -123
  129. package/src/executor/tools/shell/types/ShellPlugin.ts +0 -278
  130. package/src/sandbox/LinuxBubblewrapSandbox.ts +0 -222
  131. package/src/sandbox/MacOsSeatbeltSandbox.ts +0 -191
  132. package/src/sandbox/SandboxConfigResolver.ts +0 -152
  133. package/src/sandbox/SandboxPreflight.ts +0 -205
  134. package/src/sandbox/SandboxRunner.ts +0 -151
  135. package/src/sandbox/UnrestrictedSandbox.ts +0 -53
  136. package/src/sandbox/types/Sandbox.ts +0 -144
  137. package/src/sandbox/types/SandboxRuntime.ts +0 -440
@@ -1,369 +0,0 @@
1
- /**
2
- * Shell tools。
3
- *
4
- * 设计目标(中文)
5
- * - shell 子进程生命周期统一由 shell plugin runtime 承担。
6
- * - tool 只负责 Session/tool 协议适配、参数校验与日志语义。
7
- * - 复杂桥接和 schema 已拆到旁路模块,当前文件只保留公开 tool 定义。
8
- */
9
- import { tool } from "ai";
10
- import { validateChatSendCommand } from "./ShellToolFormatting.js";
11
- import { bridgeCommandResponse, clearShellCommandBridge, flattenShellActionResponse, flattenShellExecResponse, formatToolError, invokeShellAction, trackShellCommandBridge, } from "./ShellToolBridge.js";
12
- import { shellCloseInputSchema, shellExecInputSchema, shellReadInputSchema, shellStartInputSchema, shellStatusInputSchema, shellWaitInputSchema, shellWriteInputSchema, } from "./ShellToolSchemas.js";
13
- export { setShellToolRuntime } from "./ShellToolBridge.js";
14
- async function bridgeExecResponseIfNeeded(params) {
15
- trackShellCommandBridge(params.cmd, params.shellId);
16
- const withInternalShellId = {
17
- ...params.response,
18
- shell_id: params.shellId,
19
- has_more_output: false,
20
- };
21
- const bridged = await bridgeCommandResponse({
22
- shellId: params.shellId,
23
- response: withInternalShellId,
24
- });
25
- if ("shell_id" in bridged)
26
- delete bridged.shell_id;
27
- if ("has_more_output" in bridged)
28
- delete bridged.has_more_output;
29
- return bridged;
30
- }
31
- /**
32
- * `shell_start`:启动 shell 会话。
33
- */
34
- export const shell_start = tool({
35
- description: "Start a shell session. Returns shell_id plus initial status/output. Long-running commands should usually be checked later with shell_status or shell_wait instead of repeated polling.",
36
- inputSchema: shellStartInputSchema,
37
- execute: async ({ cmd, workdir, shell, login = true, inline_wait_ms = 1200, max_output_tokens, auto_notify_on_exit, sandbox = "safe", reason, }) => {
38
- const startedAt = Date.now();
39
- try {
40
- console.log("[shell-tool] shell_start:start", JSON.stringify({
41
- cmd,
42
- workdir: workdir || "",
43
- shell: shell || "",
44
- login,
45
- inline_wait_ms,
46
- max_output_tokens: max_output_tokens ?? null,
47
- auto_notify_on_exit: auto_notify_on_exit ?? null,
48
- sandbox,
49
- reason: reason || "",
50
- }));
51
- const validationError = validateChatSendCommand(cmd);
52
- if (validationError) {
53
- console.log("[shell-tool] shell_start:rejected", JSON.stringify({ reason: validationError }));
54
- return {
55
- success: false,
56
- error: `shell_start rejected: ${validationError}`,
57
- };
58
- }
59
- const response = await invokeShellAction({
60
- action: "start",
61
- payload: {
62
- cmd,
63
- ...(workdir ? { cwd: workdir } : {}),
64
- ...(shell ? { shell } : {}),
65
- login,
66
- inlineWaitMs: inline_wait_ms,
67
- ...(typeof max_output_tokens === "number"
68
- ? { maxOutputTokens: max_output_tokens }
69
- : {}),
70
- ...(typeof auto_notify_on_exit === "boolean"
71
- ? { autoNotifyOnExit: auto_notify_on_exit }
72
- : {}),
73
- sandbox,
74
- ...(reason ? { reason } : {}),
75
- },
76
- });
77
- const shellId = response.shell.shellId;
78
- trackShellCommandBridge(cmd, shellId);
79
- const flatResponse = flattenShellActionResponse({ response, startedAt });
80
- const bridgedResponse = await bridgeCommandResponse({
81
- shellId,
82
- response: flatResponse,
83
- });
84
- console.log("[shell-tool] shell_start:done", JSON.stringify({
85
- shell_id: shellId,
86
- status: bridgedResponse.status,
87
- exit_code: bridgedResponse.exit_code ?? null,
88
- output_chars: String(bridgedResponse.output || "").length,
89
- has_more_output: bridgedResponse.has_more_output === true,
90
- }));
91
- return bridgedResponse;
92
- }
93
- catch (error) {
94
- console.log("[shell-tool] shell_start:error", JSON.stringify({ error: String(error) }));
95
- return formatToolError("shell_start failed", error);
96
- }
97
- },
98
- });
99
- /**
100
- * `shell_exec`:一次性执行并等待完成。
101
- */
102
- export const shell_exec = tool({
103
- description: "Execute a short shell command in one-shot mode and wait for completion. Prefer shell_start for long-running or interactive commands.",
104
- inputSchema: shellExecInputSchema,
105
- execute: async ({ cmd, workdir, shell, login = true, timeout_ms = 60000, max_output_tokens, sandbox = "safe", reason, }) => {
106
- const startedAt = Date.now();
107
- try {
108
- console.log("[shell-tool] shell_exec:start", JSON.stringify({
109
- cmd,
110
- workdir: workdir || "",
111
- shell: shell || "",
112
- login,
113
- timeout_ms,
114
- max_output_tokens: max_output_tokens ?? null,
115
- sandbox,
116
- reason: reason || "",
117
- }));
118
- const validationError = validateChatSendCommand(cmd);
119
- if (validationError) {
120
- console.log("[shell-tool] shell_exec:rejected", JSON.stringify({ reason: validationError }));
121
- return {
122
- success: false,
123
- error: `shell_exec rejected: ${validationError}`,
124
- };
125
- }
126
- const response = await invokeShellAction({
127
- action: "exec",
128
- payload: {
129
- cmd,
130
- ...(workdir ? { cwd: workdir } : {}),
131
- ...(shell ? { shell } : {}),
132
- login,
133
- timeoutMs: timeout_ms,
134
- ...(typeof max_output_tokens === "number"
135
- ? { maxOutputTokens: max_output_tokens }
136
- : {}),
137
- sandbox,
138
- ...(reason ? { reason } : {}),
139
- },
140
- });
141
- const shellId = response.shell.shellId;
142
- const flatResponse = flattenShellExecResponse({ response, startedAt });
143
- const bridgedResponse = await bridgeExecResponseIfNeeded({
144
- cmd,
145
- shellId,
146
- response: flatResponse,
147
- });
148
- console.log("[shell-tool] shell_exec:done", JSON.stringify({
149
- status: bridgedResponse.status,
150
- exit_code: bridgedResponse.exit_code ?? null,
151
- output_chars: String(bridgedResponse.output || "").length,
152
- }));
153
- return bridgedResponse;
154
- }
155
- catch (error) {
156
- console.log("[shell-tool] shell_exec:error", JSON.stringify({ error: String(error) }));
157
- return formatToolError("shell_exec failed", error);
158
- }
159
- },
160
- });
161
- /**
162
- * `shell_status`:查询 shell 当前状态。
163
- */
164
- export const shell_status = tool({
165
- description: "Query the current status of a shell session. Prefer this to ask for progress during long-running commands.",
166
- inputSchema: shellStatusInputSchema,
167
- execute: async ({ shell_id, cmd }) => {
168
- const startedAt = Date.now();
169
- try {
170
- console.log("[shell-tool] shell_status:start", JSON.stringify({ shell_id: shell_id || "", cmd: cmd || "" }));
171
- const response = await invokeShellAction({
172
- action: "status",
173
- payload: {
174
- ...(shell_id ? { shellId: shell_id } : {}),
175
- ...(cmd ? { cmd } : {}),
176
- includeCompleted: true,
177
- },
178
- });
179
- const flatResponse = flattenShellActionResponse({ response, startedAt });
180
- console.log("[shell-tool] shell_status:done", JSON.stringify({
181
- shell_id: flatResponse.shell_id,
182
- status: flatResponse.status,
183
- version: flatResponse.version,
184
- exit_code: flatResponse.exit_code ?? null,
185
- }));
186
- return flatResponse;
187
- }
188
- catch (error) {
189
- console.log("[shell-tool] shell_status:error", JSON.stringify({ shell_id: shell_id || "", error: String(error) }));
190
- return formatToolError("shell_status failed", error);
191
- }
192
- },
193
- });
194
- /**
195
- * `shell_read`:读取 shell 输出增量。
196
- */
197
- export const shell_read = tool({
198
- description: "Read output from a shell session starting at a character cursor. Use this only when you truly need the raw incremental output.",
199
- inputSchema: shellReadInputSchema,
200
- execute: async ({ shell_id, from_cursor, max_output_tokens, }) => {
201
- const startedAt = Date.now();
202
- try {
203
- console.log("[shell-tool] shell_read:start", JSON.stringify({
204
- shell_id,
205
- from_cursor: from_cursor ?? null,
206
- max_output_tokens: max_output_tokens ?? null,
207
- }));
208
- const response = await invokeShellAction({
209
- action: "read",
210
- payload: {
211
- shellId: shell_id,
212
- ...(typeof from_cursor === "number" ? { fromCursor: from_cursor } : {}),
213
- ...(typeof max_output_tokens === "number"
214
- ? { maxOutputTokens: max_output_tokens }
215
- : {}),
216
- includeCompleted: true,
217
- },
218
- });
219
- const flatResponse = flattenShellActionResponse({ response, startedAt });
220
- const bridgedResponse = await bridgeCommandResponse({
221
- shellId: shell_id,
222
- response: flatResponse,
223
- });
224
- console.log("[shell-tool] shell_read:done", JSON.stringify({
225
- shell_id,
226
- status: bridgedResponse.status,
227
- exit_code: bridgedResponse.exit_code ?? null,
228
- output_chars: String(bridgedResponse.output || "").length,
229
- has_more_output: bridgedResponse.has_more_output === true,
230
- }));
231
- return bridgedResponse;
232
- }
233
- catch (error) {
234
- console.log("[shell-tool] shell_read:error", JSON.stringify({ shell_id, error: String(error) }));
235
- return formatToolError("shell_read failed", error);
236
- }
237
- },
238
- });
239
- /**
240
- * `shell_write`:向 shell stdin 写入内容。
241
- */
242
- export const shell_write = tool({
243
- description: "Write text to the stdin of an existing shell session. When the target session runs in unrestricted sandbox mode, provide reason; every write requires user approval.",
244
- inputSchema: shellWriteInputSchema,
245
- execute: async ({ shell_id, chars, reason }) => {
246
- const startedAt = Date.now();
247
- try {
248
- console.log("[shell-tool] shell_write:start", JSON.stringify({
249
- shell_id,
250
- input_chars: String(chars || "").length,
251
- reason: reason || "",
252
- }));
253
- const response = await invokeShellAction({
254
- action: "write",
255
- payload: {
256
- shellId: shell_id,
257
- chars,
258
- ...(reason ? { reason } : {}),
259
- },
260
- });
261
- const flatResponse = flattenShellActionResponse({ response, startedAt });
262
- console.log("[shell-tool] shell_write:done", JSON.stringify({
263
- shell_id,
264
- status: flatResponse.status,
265
- version: flatResponse.version,
266
- }));
267
- return flatResponse;
268
- }
269
- catch (error) {
270
- console.log("[shell-tool] shell_write:error", JSON.stringify({ shell_id, error: String(error) }));
271
- return formatToolError("shell_write failed", error);
272
- }
273
- },
274
- });
275
- /**
276
- * `shell_wait`:等待 shell 状态或输出变化。
277
- */
278
- export const shell_wait = tool({
279
- description: "Wait for a shell session to change state or produce more output. Prefer this over manual high-frequency polling loops.",
280
- inputSchema: shellWaitInputSchema,
281
- execute: async ({ shell_id, after_version, from_cursor, timeout_ms = 10000, max_output_tokens, }) => {
282
- const startedAt = Date.now();
283
- try {
284
- console.log("[shell-tool] shell_wait:start", JSON.stringify({
285
- shell_id,
286
- after_version: after_version ?? null,
287
- from_cursor: from_cursor ?? null,
288
- timeout_ms,
289
- max_output_tokens: max_output_tokens ?? null,
290
- }));
291
- const response = await invokeShellAction({
292
- action: "wait",
293
- payload: {
294
- shellId: shell_id,
295
- ...(typeof after_version === "number"
296
- ? { afterVersion: after_version }
297
- : {}),
298
- ...(typeof from_cursor === "number" ? { fromCursor: from_cursor } : {}),
299
- timeoutMs: timeout_ms,
300
- ...(typeof max_output_tokens === "number"
301
- ? { maxOutputTokens: max_output_tokens }
302
- : {}),
303
- },
304
- });
305
- const flatResponse = flattenShellActionResponse({ response, startedAt });
306
- const bridgedResponse = await bridgeCommandResponse({
307
- shellId: shell_id,
308
- response: flatResponse,
309
- });
310
- console.log("[shell-tool] shell_wait:done", JSON.stringify({
311
- shell_id,
312
- status: bridgedResponse.status,
313
- version: bridgedResponse.version,
314
- exit_code: bridgedResponse.exit_code ?? null,
315
- output_chars: String(bridgedResponse.output || "").length,
316
- }));
317
- return bridgedResponse;
318
- }
319
- catch (error) {
320
- console.log("[shell-tool] shell_wait:error", JSON.stringify({ shell_id, error: String(error) }));
321
- return formatToolError("shell_wait failed", error);
322
- }
323
- },
324
- });
325
- /**
326
- * `shell_close`:关闭 shell 会话。
327
- */
328
- export const shell_close = tool({
329
- description: "Close an existing shell session and release resources. Use force=true to send SIGKILL.",
330
- inputSchema: shellCloseInputSchema,
331
- execute: async ({ shell_id, force = false }) => {
332
- const startedAt = Date.now();
333
- try {
334
- console.log("[shell-tool] shell_close:start", JSON.stringify({ shell_id, force }));
335
- clearShellCommandBridge(shell_id);
336
- const response = await invokeShellAction({
337
- action: "close",
338
- payload: {
339
- shellId: shell_id,
340
- force,
341
- },
342
- });
343
- const flatResponse = flattenShellActionResponse({ response, startedAt });
344
- console.log("[shell-tool] shell_close:done", JSON.stringify({
345
- shell_id,
346
- status: flatResponse.status,
347
- exit_code: flatResponse.exit_code ?? null,
348
- }));
349
- return flatResponse;
350
- }
351
- catch (error) {
352
- console.log("[shell-tool] shell_close:error", JSON.stringify({ shell_id, error: String(error) }));
353
- return formatToolError("shell_close failed", error);
354
- }
355
- },
356
- });
357
- /**
358
- * Shell 工具导出集合。
359
- */
360
- export const shellTools = {
361
- shell_exec,
362
- shell_start,
363
- shell_status,
364
- shell_read,
365
- shell_write,
366
- shell_wait,
367
- shell_close,
368
- };
369
- //# sourceMappingURL=ShellToolDefinition.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellToolDefinition.js","sourceRoot":"","sources":["../../../../src/executor/tools/shell/ShellToolDefinition.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Shell 工具辅助函数。
3
- *
4
- * 关键点(中文)
5
- * - shell 会话生命周期已经统一收敛到 shell plugin runtime。
6
- * - 这里仅保留当前仍被 tool 与测试复用的最小能力:命令安全校验。
7
- */
8
- /**
9
- * 对 `town chat send` 命令做前置安全校验。
10
- *
11
- * 关键点(中文)
12
- * - 历史上模型会把长文本直接拼进多行 shell 命令,导致后续行被 zsh 当作独立命令解析。
13
- * - 这会出现“前面已发送,后面才报错”的副作用。
14
- * - 默认建议多行正文通过 `--stdin`、`--text-file` 或显式 `--text` 传入。
15
- */
16
- export declare function validateChatSendCommand(cmd: string): string | null;
17
- //# sourceMappingURL=ShellToolFormatting.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellToolFormatting.d.ts","sourceRoot":"","sources":["../../../../src/executor/tools/shell/ShellToolFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBlE"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Shell 工具辅助函数。
3
- *
4
- * 关键点(中文)
5
- * - shell 会话生命周期已经统一收敛到 shell plugin runtime。
6
- * - 这里仅保留当前仍被 tool 与测试复用的最小能力:命令安全校验。
7
- */
8
- /**
9
- * 对 `town chat send` 命令做前置安全校验。
10
- *
11
- * 关键点(中文)
12
- * - 历史上模型会把长文本直接拼进多行 shell 命令,导致后续行被 zsh 当作独立命令解析。
13
- * - 这会出现“前面已发送,后面才报错”的副作用。
14
- * - 默认建议多行正文通过 `--stdin`、`--text-file` 或显式 `--text` 传入。
15
- */
16
- export function validateChatSendCommand(cmd) {
17
- const source = String(cmd ?? "");
18
- if (!/\bbay\s+chat\s+send\b/.test(source))
19
- return null;
20
- if (!/[\r\n]/.test(source))
21
- return null;
22
- if (/\bbay\s+chat\s+send\b[\s\S]*\s--stdin(?:\s|$)/.test(source)) {
23
- return null;
24
- }
25
- if (/\bbay\s+chat\s+send\b[\s\S]*\s--text(?:\s|$)/.test(source)) {
26
- return null;
27
- }
28
- if (/\bbay\s+chat\s+send\b[\s\S]*\s--text-file(?:\s|$)/.test(source)) {
29
- return null;
30
- }
31
- return [
32
- "Unsafe `town chat send` command: real newlines are not allowed.",
33
- "If your message is multi-line, use `town chat send --stdin` (with heredoc/pipe), `--text-file`, or explicit `--text`.",
34
- ].join(" ");
35
- }
36
- //# sourceMappingURL=ShellToolFormatting.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellToolFormatting.js","sourceRoot":"","sources":["../../../../src/executor/tools/shell/ShellToolFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACjC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,+CAA+C,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,8CAA8C,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,mDAAmD,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,iEAAiE;QACjE,uHAAuH;KACxH,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC"}
@@ -1,61 +0,0 @@
1
- /**
2
- * Shell tool 输入 schema。
3
- *
4
- * 关键点(中文)
5
- * - 所有 schema 统一集中,避免 `Tool.ts` 里同时混杂协议定义与执行逻辑。
6
- * - 这里保持纯声明,不放任何运行时桥接细节。
7
- */
8
- import { z } from "zod";
9
- export declare const shellStartInputSchema: z.ZodObject<{
10
- cmd: z.ZodString;
11
- workdir: z.ZodOptional<z.ZodString>;
12
- shell: z.ZodOptional<z.ZodString>;
13
- login: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
14
- inline_wait_ms: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
15
- max_output_tokens: z.ZodOptional<z.ZodNumber>;
16
- auto_notify_on_exit: z.ZodOptional<z.ZodBoolean>;
17
- sandbox: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
18
- unrestricted: "unrestricted";
19
- safe: "safe";
20
- }>>>;
21
- reason: z.ZodOptional<z.ZodString>;
22
- }, z.core.$strip>;
23
- export declare const shellExecInputSchema: z.ZodObject<{
24
- cmd: z.ZodString;
25
- workdir: z.ZodOptional<z.ZodString>;
26
- shell: z.ZodOptional<z.ZodString>;
27
- login: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
28
- timeout_ms: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
29
- max_output_tokens: z.ZodOptional<z.ZodNumber>;
30
- sandbox: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
31
- unrestricted: "unrestricted";
32
- safe: "safe";
33
- }>>>;
34
- reason: z.ZodOptional<z.ZodString>;
35
- }, z.core.$strip>;
36
- export declare const shellStatusInputSchema: z.ZodObject<{
37
- shell_id: z.ZodOptional<z.ZodString>;
38
- cmd: z.ZodOptional<z.ZodString>;
39
- }, z.core.$strip>;
40
- export declare const shellReadInputSchema: z.ZodObject<{
41
- shell_id: z.ZodString;
42
- from_cursor: z.ZodOptional<z.ZodNumber>;
43
- max_output_tokens: z.ZodOptional<z.ZodNumber>;
44
- }, z.core.$strip>;
45
- export declare const shellWriteInputSchema: z.ZodObject<{
46
- shell_id: z.ZodString;
47
- chars: z.ZodString;
48
- reason: z.ZodOptional<z.ZodString>;
49
- }, z.core.$strip>;
50
- export declare const shellWaitInputSchema: z.ZodObject<{
51
- shell_id: z.ZodString;
52
- after_version: z.ZodOptional<z.ZodNumber>;
53
- from_cursor: z.ZodOptional<z.ZodNumber>;
54
- timeout_ms: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
55
- max_output_tokens: z.ZodOptional<z.ZodNumber>;
56
- }, z.core.$strip>;
57
- export declare const shellCloseInputSchema: z.ZodObject<{
58
- shell_id: z.ZodString;
59
- force: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
60
- }, z.core.$strip>;
61
- //# sourceMappingURL=ShellToolSchemas.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellToolSchemas.d.ts","sourceRoot":"","sources":["../../../../src/executor/tools/shell/ShellToolSchemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;iBA8BhC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;iBA0B/B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;iBAMjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;iBAU/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;iBAOhC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;iBAmB/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;iBAOhC,CAAC"}
@@ -1,130 +0,0 @@
1
- /**
2
- * Shell tool 输入 schema。
3
- *
4
- * 关键点(中文)
5
- * - 所有 schema 统一集中,避免 `Tool.ts` 里同时混杂协议定义与执行逻辑。
6
- * - 这里保持纯声明,不放任何运行时桥接细节。
7
- */
8
- import { z } from "zod";
9
- const shellSandboxModeSchema = z
10
- .enum(["safe", "unrestricted"])
11
- .optional()
12
- .default("safe")
13
- .describe("Sandbox mode. safe is the default; unrestricted requires user approval.");
14
- const shellUnrestrictedReasonSchema = z
15
- .string()
16
- .optional()
17
- .describe("Required when sandbox is unrestricted. Explain why host-level execution is needed.");
18
- export const shellStartInputSchema = z.object({
19
- cmd: z.string().describe("Shell command to execute."),
20
- workdir: z
21
- .string()
22
- .optional()
23
- .describe("Optional working directory. Relative path is resolved from project root."),
24
- shell: z
25
- .string()
26
- .optional()
27
- .describe("Optional shell executable path. Example: /bin/zsh"),
28
- login: z
29
- .boolean()
30
- .optional()
31
- .default(true)
32
- .describe("Whether to run shell as login shell (-lc). false uses -c."),
33
- inline_wait_ms: z
34
- .number()
35
- .optional()
36
- .default(1200)
37
- .describe("How long to inline-wait for initial output before returning."),
38
- max_output_tokens: z
39
- .number()
40
- .optional()
41
- .describe("Maximum output tokens returned in a single read chunk."),
42
- auto_notify_on_exit: z
43
- .boolean()
44
- .optional()
45
- .describe("Whether the shell plugin runtime should auto-return to the owning chat agent when the command exits."),
46
- sandbox: shellSandboxModeSchema,
47
- reason: shellUnrestrictedReasonSchema,
48
- });
49
- export const shellExecInputSchema = z.object({
50
- cmd: z.string().describe("Shell command to execute once and wait until completion."),
51
- workdir: z
52
- .string()
53
- .optional()
54
- .describe("Optional working directory. Relative path is resolved from project root."),
55
- shell: z
56
- .string()
57
- .optional()
58
- .describe("Optional shell executable path. Example: /bin/zsh"),
59
- login: z
60
- .boolean()
61
- .optional()
62
- .default(true)
63
- .describe("Whether to run shell as login shell (-lc). false uses -c."),
64
- timeout_ms: z
65
- .number()
66
- .optional()
67
- .default(60000)
68
- .describe("Total timeout for one-shot execution. Use shell_start for long-running commands."),
69
- max_output_tokens: z
70
- .number()
71
- .optional()
72
- .describe("Maximum output tokens returned in the final result."),
73
- sandbox: shellSandboxModeSchema,
74
- reason: shellUnrestrictedReasonSchema,
75
- });
76
- export const shellStatusInputSchema = z.object({
77
- shell_id: z.string().optional().describe("Existing shell identifier."),
78
- cmd: z
79
- .string()
80
- .optional()
81
- .describe("Optional command substring to resolve the latest shell in the current chat."),
82
- });
83
- export const shellReadInputSchema = z.object({
84
- shell_id: z.string().describe("Existing shell identifier."),
85
- from_cursor: z
86
- .number()
87
- .optional()
88
- .describe("Character cursor to continue reading from."),
89
- max_output_tokens: z
90
- .number()
91
- .optional()
92
- .describe("Maximum output tokens returned in this chunk."),
93
- });
94
- export const shellWriteInputSchema = z.object({
95
- shell_id: z.string().describe("Existing shell identifier."),
96
- chars: z.string().describe("Bytes to write to stdin."),
97
- reason: z
98
- .string()
99
- .optional()
100
- .describe("Required when writing to an unrestricted shell session. Explain why this stdin input is needed."),
101
- });
102
- export const shellWaitInputSchema = z.object({
103
- shell_id: z.string().describe("Existing shell identifier."),
104
- after_version: z
105
- .number()
106
- .optional()
107
- .describe("Only return once the shell version is greater than this value."),
108
- from_cursor: z
109
- .number()
110
- .optional()
111
- .describe("Character cursor to continue reading from after the wait."),
112
- timeout_ms: z
113
- .number()
114
- .optional()
115
- .default(10000)
116
- .describe("Maximum time to wait for state/output changes."),
117
- max_output_tokens: z
118
- .number()
119
- .optional()
120
- .describe("Maximum output tokens returned in this chunk."),
121
- });
122
- export const shellCloseInputSchema = z.object({
123
- shell_id: z.string().describe("Existing shell identifier."),
124
- force: z
125
- .boolean()
126
- .optional()
127
- .default(false)
128
- .describe("Whether to force-kill the shell with SIGKILL."),
129
- });
130
- //# sourceMappingURL=ShellToolSchemas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShellToolSchemas.js","sourceRoot":"","sources":["../../../../src/executor/tools/shell/ShellToolSchemas.ts"],"names":[],"mappings":"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"}