mozi-bot 1.0.0

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 (259) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +467 -0
  3. package/dist/agents/agent.d.ts +118 -0
  4. package/dist/agents/agent.d.ts.map +1 -0
  5. package/dist/agents/agent.js +686 -0
  6. package/dist/agents/agent.js.map +1 -0
  7. package/dist/agents/compaction.d.ts +78 -0
  8. package/dist/agents/compaction.d.ts.map +1 -0
  9. package/dist/agents/compaction.js +350 -0
  10. package/dist/agents/compaction.js.map +1 -0
  11. package/dist/agents/failover-error.d.ts +42 -0
  12. package/dist/agents/failover-error.d.ts.map +1 -0
  13. package/dist/agents/failover-error.js +171 -0
  14. package/dist/agents/failover-error.js.map +1 -0
  15. package/dist/agents/index.d.ts +10 -0
  16. package/dist/agents/index.d.ts.map +1 -0
  17. package/dist/agents/index.js +10 -0
  18. package/dist/agents/index.js.map +1 -0
  19. package/dist/agents/model-fallback.d.ts +54 -0
  20. package/dist/agents/model-fallback.d.ts.map +1 -0
  21. package/dist/agents/model-fallback.js +227 -0
  22. package/dist/agents/model-fallback.js.map +1 -0
  23. package/dist/agents/session-store.d.ts +53 -0
  24. package/dist/agents/session-store.d.ts.map +1 -0
  25. package/dist/agents/session-store.js +217 -0
  26. package/dist/agents/session-store.js.map +1 -0
  27. package/dist/agents/system-prompt.d.ts +29 -0
  28. package/dist/agents/system-prompt.d.ts.map +1 -0
  29. package/dist/agents/system-prompt.js +299 -0
  30. package/dist/agents/system-prompt.js.map +1 -0
  31. package/dist/channels/common/base.d.ts +40 -0
  32. package/dist/channels/common/base.d.ts.map +1 -0
  33. package/dist/channels/common/base.js +23 -0
  34. package/dist/channels/common/base.js.map +1 -0
  35. package/dist/channels/common/index.d.ts +21 -0
  36. package/dist/channels/common/index.d.ts.map +1 -0
  37. package/dist/channels/common/index.js +66 -0
  38. package/dist/channels/common/index.js.map +1 -0
  39. package/dist/channels/dingtalk/api.d.ts +30 -0
  40. package/dist/channels/dingtalk/api.d.ts.map +1 -0
  41. package/dist/channels/dingtalk/api.js +149 -0
  42. package/dist/channels/dingtalk/api.js.map +1 -0
  43. package/dist/channels/dingtalk/events.d.ts +80 -0
  44. package/dist/channels/dingtalk/events.d.ts.map +1 -0
  45. package/dist/channels/dingtalk/events.js +92 -0
  46. package/dist/channels/dingtalk/events.js.map +1 -0
  47. package/dist/channels/dingtalk/index.d.ts +51 -0
  48. package/dist/channels/dingtalk/index.d.ts.map +1 -0
  49. package/dist/channels/dingtalk/index.js +231 -0
  50. package/dist/channels/dingtalk/index.js.map +1 -0
  51. package/dist/channels/dingtalk/stream.d.ts +31 -0
  52. package/dist/channels/dingtalk/stream.d.ts.map +1 -0
  53. package/dist/channels/dingtalk/stream.js +116 -0
  54. package/dist/channels/dingtalk/stream.js.map +1 -0
  55. package/dist/channels/feishu/api.d.ts +33 -0
  56. package/dist/channels/feishu/api.d.ts.map +1 -0
  57. package/dist/channels/feishu/api.js +120 -0
  58. package/dist/channels/feishu/api.js.map +1 -0
  59. package/dist/channels/feishu/events.d.ts +87 -0
  60. package/dist/channels/feishu/events.d.ts.map +1 -0
  61. package/dist/channels/feishu/events.js +163 -0
  62. package/dist/channels/feishu/events.js.map +1 -0
  63. package/dist/channels/feishu/index.d.ts +46 -0
  64. package/dist/channels/feishu/index.d.ts.map +1 -0
  65. package/dist/channels/feishu/index.js +207 -0
  66. package/dist/channels/feishu/index.js.map +1 -0
  67. package/dist/channels/feishu/websocket.d.ts +32 -0
  68. package/dist/channels/feishu/websocket.d.ts.map +1 -0
  69. package/dist/channels/feishu/websocket.js +121 -0
  70. package/dist/channels/feishu/websocket.js.map +1 -0
  71. package/dist/channels/index.d.ts +9 -0
  72. package/dist/channels/index.d.ts.map +1 -0
  73. package/dist/channels/index.js +9 -0
  74. package/dist/channels/index.js.map +1 -0
  75. package/dist/cli/index.d.ts +6 -0
  76. package/dist/cli/index.d.ts.map +1 -0
  77. package/dist/cli/index.js +468 -0
  78. package/dist/cli/index.js.map +1 -0
  79. package/dist/commands/index.d.ts +54 -0
  80. package/dist/commands/index.d.ts.map +1 -0
  81. package/dist/commands/index.js +171 -0
  82. package/dist/commands/index.js.map +1 -0
  83. package/dist/config/index.d.ts +201 -0
  84. package/dist/config/index.d.ts.map +1 -0
  85. package/dist/config/index.js +261 -0
  86. package/dist/config/index.js.map +1 -0
  87. package/dist/gateway/index.d.ts +5 -0
  88. package/dist/gateway/index.d.ts.map +1 -0
  89. package/dist/gateway/index.js +5 -0
  90. package/dist/gateway/index.js.map +1 -0
  91. package/dist/gateway/server.d.ts +42 -0
  92. package/dist/gateway/server.d.ts.map +1 -0
  93. package/dist/gateway/server.js +235 -0
  94. package/dist/gateway/server.js.map +1 -0
  95. package/dist/hooks/index.d.ts +168 -0
  96. package/dist/hooks/index.d.ts.map +1 -0
  97. package/dist/hooks/index.js +148 -0
  98. package/dist/hooks/index.js.map +1 -0
  99. package/dist/index.d.ts +18 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +29 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/memory/index.d.ts +94 -0
  104. package/dist/memory/index.d.ts.map +1 -0
  105. package/dist/memory/index.js +282 -0
  106. package/dist/memory/index.js.map +1 -0
  107. package/dist/plugins/index.d.ts +57 -0
  108. package/dist/plugins/index.d.ts.map +1 -0
  109. package/dist/plugins/index.js +103 -0
  110. package/dist/plugins/index.js.map +1 -0
  111. package/dist/providers/anthropic-compatible.d.ts +48 -0
  112. package/dist/providers/anthropic-compatible.d.ts.map +1 -0
  113. package/dist/providers/anthropic-compatible.js +380 -0
  114. package/dist/providers/anthropic-compatible.js.map +1 -0
  115. package/dist/providers/base.d.ts +26 -0
  116. package/dist/providers/base.d.ts.map +1 -0
  117. package/dist/providers/base.js +58 -0
  118. package/dist/providers/base.js.map +1 -0
  119. package/dist/providers/custom-openai.d.ts +66 -0
  120. package/dist/providers/custom-openai.d.ts.map +1 -0
  121. package/dist/providers/custom-openai.js +255 -0
  122. package/dist/providers/custom-openai.js.map +1 -0
  123. package/dist/providers/dashscope.d.ts +15 -0
  124. package/dist/providers/dashscope.d.ts.map +1 -0
  125. package/dist/providers/dashscope.js +237 -0
  126. package/dist/providers/dashscope.js.map +1 -0
  127. package/dist/providers/deepseek.d.ts +10 -0
  128. package/dist/providers/deepseek.d.ts.map +1 -0
  129. package/dist/providers/deepseek.js +57 -0
  130. package/dist/providers/deepseek.js.map +1 -0
  131. package/dist/providers/index.d.ts +33 -0
  132. package/dist/providers/index.d.ts.map +1 -0
  133. package/dist/providers/index.js +142 -0
  134. package/dist/providers/index.js.map +1 -0
  135. package/dist/providers/kimi.d.ts +10 -0
  136. package/dist/providers/kimi.d.ts.map +1 -0
  137. package/dist/providers/kimi.js +83 -0
  138. package/dist/providers/kimi.js.map +1 -0
  139. package/dist/providers/minimax.d.ts +20 -0
  140. package/dist/providers/minimax.d.ts.map +1 -0
  141. package/dist/providers/minimax.js +252 -0
  142. package/dist/providers/minimax.js.map +1 -0
  143. package/dist/providers/modelscope.d.ts +15 -0
  144. package/dist/providers/modelscope.d.ts.map +1 -0
  145. package/dist/providers/modelscope.js +237 -0
  146. package/dist/providers/modelscope.js.map +1 -0
  147. package/dist/providers/openai-compatible.d.ts +57 -0
  148. package/dist/providers/openai-compatible.d.ts.map +1 -0
  149. package/dist/providers/openai-compatible.js +193 -0
  150. package/dist/providers/openai-compatible.js.map +1 -0
  151. package/dist/providers/stepfun.d.ts +10 -0
  152. package/dist/providers/stepfun.d.ts.map +1 -0
  153. package/dist/providers/stepfun.js +125 -0
  154. package/dist/providers/stepfun.js.map +1 -0
  155. package/dist/providers/zhipu.d.ts +15 -0
  156. package/dist/providers/zhipu.d.ts.map +1 -0
  157. package/dist/providers/zhipu.js +247 -0
  158. package/dist/providers/zhipu.js.map +1 -0
  159. package/dist/sessions/index.d.ts +6 -0
  160. package/dist/sessions/index.d.ts.map +1 -0
  161. package/dist/sessions/index.js +6 -0
  162. package/dist/sessions/index.js.map +1 -0
  163. package/dist/sessions/store.d.ts +45 -0
  164. package/dist/sessions/store.d.ts.map +1 -0
  165. package/dist/sessions/store.js +268 -0
  166. package/dist/sessions/store.js.map +1 -0
  167. package/dist/sessions/types.d.ts +110 -0
  168. package/dist/sessions/types.d.ts.map +1 -0
  169. package/dist/sessions/types.js +6 -0
  170. package/dist/sessions/types.js.map +1 -0
  171. package/dist/tools/builtin/apply-patch.d.ts +8 -0
  172. package/dist/tools/builtin/apply-patch.d.ts.map +1 -0
  173. package/dist/tools/builtin/apply-patch.js +272 -0
  174. package/dist/tools/builtin/apply-patch.js.map +1 -0
  175. package/dist/tools/builtin/bash.d.ts +25 -0
  176. package/dist/tools/builtin/bash.d.ts.map +1 -0
  177. package/dist/tools/builtin/bash.js +212 -0
  178. package/dist/tools/builtin/bash.js.map +1 -0
  179. package/dist/tools/builtin/browser.d.ts +12 -0
  180. package/dist/tools/builtin/browser.d.ts.map +1 -0
  181. package/dist/tools/builtin/browser.js +693 -0
  182. package/dist/tools/builtin/browser.js.map +1 -0
  183. package/dist/tools/builtin/filesystem.d.ts +29 -0
  184. package/dist/tools/builtin/filesystem.d.ts.map +1 -0
  185. package/dist/tools/builtin/filesystem.js +484 -0
  186. package/dist/tools/builtin/filesystem.js.map +1 -0
  187. package/dist/tools/builtin/image.d.ts +13 -0
  188. package/dist/tools/builtin/image.d.ts.map +1 -0
  189. package/dist/tools/builtin/image.js +126 -0
  190. package/dist/tools/builtin/image.js.map +1 -0
  191. package/dist/tools/builtin/index.d.ts +30 -0
  192. package/dist/tools/builtin/index.d.ts.map +1 -0
  193. package/dist/tools/builtin/index.js +55 -0
  194. package/dist/tools/builtin/index.js.map +1 -0
  195. package/dist/tools/builtin/process-registry.d.ts +71 -0
  196. package/dist/tools/builtin/process-registry.d.ts.map +1 -0
  197. package/dist/tools/builtin/process-registry.js +172 -0
  198. package/dist/tools/builtin/process-registry.js.map +1 -0
  199. package/dist/tools/builtin/process-tool.d.ts +8 -0
  200. package/dist/tools/builtin/process-tool.d.ts.map +1 -0
  201. package/dist/tools/builtin/process-tool.js +279 -0
  202. package/dist/tools/builtin/process-tool.js.map +1 -0
  203. package/dist/tools/builtin/subagent.d.ts +33 -0
  204. package/dist/tools/builtin/subagent.d.ts.map +1 -0
  205. package/dist/tools/builtin/subagent.js +185 -0
  206. package/dist/tools/builtin/subagent.js.map +1 -0
  207. package/dist/tools/builtin/system.d.ts +11 -0
  208. package/dist/tools/builtin/system.d.ts.map +1 -0
  209. package/dist/tools/builtin/system.js +144 -0
  210. package/dist/tools/builtin/system.js.map +1 -0
  211. package/dist/tools/builtin/web.d.ts +9 -0
  212. package/dist/tools/builtin/web.d.ts.map +1 -0
  213. package/dist/tools/builtin/web.js +87 -0
  214. package/dist/tools/builtin/web.js.map +1 -0
  215. package/dist/tools/common.d.ts +45 -0
  216. package/dist/tools/common.d.ts.map +1 -0
  217. package/dist/tools/common.js +129 -0
  218. package/dist/tools/common.js.map +1 -0
  219. package/dist/tools/index.d.ts +8 -0
  220. package/dist/tools/index.d.ts.map +1 -0
  221. package/dist/tools/index.js +8 -0
  222. package/dist/tools/index.js.map +1 -0
  223. package/dist/tools/registry.d.ts +33 -0
  224. package/dist/tools/registry.d.ts.map +1 -0
  225. package/dist/tools/registry.js +174 -0
  226. package/dist/tools/registry.js.map +1 -0
  227. package/dist/tools/types.d.ts +58 -0
  228. package/dist/tools/types.d.ts.map +1 -0
  229. package/dist/tools/types.js +11 -0
  230. package/dist/tools/types.js.map +1 -0
  231. package/dist/types/index.d.ts +280 -0
  232. package/dist/types/index.d.ts.map +1 -0
  233. package/dist/types/index.js +34 -0
  234. package/dist/types/index.js.map +1 -0
  235. package/dist/utils/index.d.ts +35 -0
  236. package/dist/utils/index.d.ts.map +1 -0
  237. package/dist/utils/index.js +114 -0
  238. package/dist/utils/index.js.map +1 -0
  239. package/dist/utils/logger.d.ts +24 -0
  240. package/dist/utils/logger.d.ts.map +1 -0
  241. package/dist/utils/logger.js +94 -0
  242. package/dist/utils/logger.js.map +1 -0
  243. package/dist/web/index.d.ts +7 -0
  244. package/dist/web/index.d.ts.map +1 -0
  245. package/dist/web/index.js +7 -0
  246. package/dist/web/index.js.map +1 -0
  247. package/dist/web/static.d.ts +12 -0
  248. package/dist/web/static.d.ts.map +1 -0
  249. package/dist/web/static.js +1260 -0
  250. package/dist/web/static.js.map +1 -0
  251. package/dist/web/types.d.ts +95 -0
  252. package/dist/web/types.d.ts.map +1 -0
  253. package/dist/web/types.js +5 -0
  254. package/dist/web/types.js.map +1 -0
  255. package/dist/web/websocket.d.ts +58 -0
  256. package/dist/web/websocket.d.ts.map +1 -0
  257. package/dist/web/websocket.js +371 -0
  258. package/dist/web/websocket.js.map +1 -0
  259. package/package.json +89 -0
@@ -0,0 +1,279 @@
1
+ /**
2
+ * 内置工具 - 进程管理工具
3
+ * 用于管理后台运行的 bash 进程
4
+ */
5
+ import { Type } from "@sinclair/typebox";
6
+ import { jsonResult, textResult, readStringParam, readNumberParam } from "../common.js";
7
+ import { getSession, getFinishedSession, listRunningSessions, listFinishedSessions, killSession, deleteSession, drainSession, sliceLogLines, tail, formatDuration, } from "./process-registry.js";
8
+ /** 创建进程管理工具 */
9
+ export function createProcessTool() {
10
+ return {
11
+ name: "process",
12
+ label: "Process Manager",
13
+ description: `Manage background bash processes.
14
+
15
+ Actions:
16
+ - list: List all running and recently finished processes
17
+ - poll: Check status and get new output from a process
18
+ - log: Get the full log output from a process
19
+ - write: Write input to a running process stdin
20
+ - kill: Terminate a running process
21
+ - clear: Remove a finished process from history
22
+
23
+ Parameters:
24
+ - action: The action to perform (list, poll, log, write, kill, clear)
25
+ - session_id: The session ID (required for poll, log, write, kill, clear)
26
+ - input: Input to write to stdin (required for write action)
27
+ - offset: Line offset for log action (optional)
28
+ - limit: Line limit for log action (optional)`,
29
+ parameters: Type.Object({
30
+ action: Type.Union([
31
+ Type.Literal("list"),
32
+ Type.Literal("poll"),
33
+ Type.Literal("log"),
34
+ Type.Literal("write"),
35
+ Type.Literal("kill"),
36
+ Type.Literal("clear"),
37
+ ], { description: "The action to perform" }),
38
+ session_id: Type.Optional(Type.String({ description: "The session ID of the process" })),
39
+ input: Type.Optional(Type.String({ description: "Input to write to stdin (for write action)" })),
40
+ offset: Type.Optional(Type.Number({ description: "Line offset for log output" })),
41
+ limit: Type.Optional(Type.Number({ description: "Line limit for log output" })),
42
+ }),
43
+ execute: async (_toolCallId, args) => {
44
+ const params = args;
45
+ const action = readStringParam(params, "action", { required: true });
46
+ const sessionId = readStringParam(params, "session_id");
47
+ switch (action) {
48
+ case "list":
49
+ return handleList();
50
+ case "poll":
51
+ return handlePoll(sessionId);
52
+ case "log":
53
+ return handleLog(sessionId, params);
54
+ case "write":
55
+ return handleWrite(sessionId, params);
56
+ case "kill":
57
+ return handleKill(sessionId);
58
+ case "clear":
59
+ return handleClear(sessionId);
60
+ default:
61
+ return jsonResult({
62
+ status: "error",
63
+ error: `Unknown action: ${action}`,
64
+ }, true);
65
+ }
66
+ },
67
+ };
68
+ }
69
+ /** 列出所有进程 */
70
+ function handleList() {
71
+ const running = listRunningSessions();
72
+ const finished = listFinishedSessions();
73
+ const processes = [
74
+ ...running.map((s) => ({
75
+ session_id: s.id,
76
+ command: s.command,
77
+ pid: s.pid,
78
+ status: s.status,
79
+ started: new Date(s.startedAt).toISOString(),
80
+ duration: formatDuration(Date.now() - s.startedAt),
81
+ backgrounded: s.backgrounded,
82
+ tail: tail(s.tail, 200),
83
+ })),
84
+ ...finished.map((s) => ({
85
+ session_id: s.id,
86
+ command: s.command,
87
+ pid: s.pid,
88
+ status: s.status,
89
+ exitCode: s.exitCode,
90
+ started: new Date(s.startedAt).toISOString(),
91
+ ended: s.endedAt ? new Date(s.endedAt).toISOString() : undefined,
92
+ duration: s.endedAt ? formatDuration(s.endedAt - s.startedAt) : undefined,
93
+ backgrounded: s.backgrounded,
94
+ })),
95
+ ];
96
+ if (processes.length === 0) {
97
+ return jsonResult({
98
+ status: "success",
99
+ message: "No processes found",
100
+ running: 0,
101
+ finished: 0,
102
+ });
103
+ }
104
+ return jsonResult({
105
+ status: "success",
106
+ running: running.length,
107
+ finished: finished.length,
108
+ processes,
109
+ });
110
+ }
111
+ /** 轮询进程状态和输出 */
112
+ function handlePoll(sessionId) {
113
+ if (!sessionId) {
114
+ return jsonResult({
115
+ status: "error",
116
+ error: "session_id is required for poll action",
117
+ }, true);
118
+ }
119
+ // 先检查运行中的会话
120
+ let session = getSession(sessionId);
121
+ let isFinished = false;
122
+ if (!session) {
123
+ // 再检查已完成的会话
124
+ session = getFinishedSession(sessionId);
125
+ isFinished = true;
126
+ }
127
+ if (!session) {
128
+ return jsonResult({
129
+ status: "error",
130
+ error: `Session not found: ${sessionId}`,
131
+ }, true);
132
+ }
133
+ if (isFinished) {
134
+ // 已完成的会话,返回最终状态
135
+ return jsonResult({
136
+ status: "success",
137
+ session_id: session.id,
138
+ command: session.command,
139
+ process_status: session.status,
140
+ exitCode: session.exitCode,
141
+ exitSignal: session.exitSignal,
142
+ duration: session.endedAt ? formatDuration(session.endedAt - session.startedAt) : undefined,
143
+ truncated: session.truncated,
144
+ tail: tail(session.aggregated, 2000),
145
+ });
146
+ }
147
+ // 运行中的会话,获取新输出
148
+ const { stdout, stderr } = drainSession(session);
149
+ const hasOutput = stdout.length > 0 || stderr.length > 0;
150
+ return jsonResult({
151
+ status: "success",
152
+ session_id: session.id,
153
+ command: session.command,
154
+ process_status: session.status,
155
+ pid: session.pid,
156
+ duration: formatDuration(Date.now() - session.startedAt),
157
+ has_output: hasOutput,
158
+ stdout: stdout || undefined,
159
+ stderr: stderr || undefined,
160
+ truncated: session.truncated,
161
+ });
162
+ }
163
+ /** 获取进程日志 */
164
+ function handleLog(sessionId, params) {
165
+ if (!sessionId) {
166
+ return jsonResult({
167
+ status: "error",
168
+ error: "session_id is required for log action",
169
+ }, true);
170
+ }
171
+ const offset = params ? readNumberParam(params, "offset", { min: 1 }) : undefined;
172
+ const limit = params ? readNumberParam(params, "limit", { min: 1, max: 10000 }) : undefined;
173
+ // 查找会话
174
+ let session = getSession(sessionId) ?? getFinishedSession(sessionId);
175
+ if (!session) {
176
+ return jsonResult({
177
+ status: "error",
178
+ error: `Session not found: ${sessionId}`,
179
+ }, true);
180
+ }
181
+ const { slice, totalLines, totalChars } = sliceLogLines(session.aggregated, offset, limit ?? 500);
182
+ return textResult(slice || "(no output)", {
183
+ session_id: session.id,
184
+ command: session.command,
185
+ process_status: session.status,
186
+ totalLines,
187
+ totalChars,
188
+ truncated: session.truncated,
189
+ offset: offset ?? 1,
190
+ limit: limit ?? 500,
191
+ });
192
+ }
193
+ /** 写入进程 stdin */
194
+ function handleWrite(sessionId, params) {
195
+ if (!sessionId) {
196
+ return jsonResult({
197
+ status: "error",
198
+ error: "session_id is required for write action",
199
+ }, true);
200
+ }
201
+ const input = params ? readStringParam(params, "input", { required: true }) : undefined;
202
+ if (!input) {
203
+ return jsonResult({
204
+ status: "error",
205
+ error: "input is required for write action",
206
+ }, true);
207
+ }
208
+ const session = getSession(sessionId);
209
+ if (!session) {
210
+ return jsonResult({
211
+ status: "error",
212
+ error: `Session not found or already finished: ${sessionId}`,
213
+ }, true);
214
+ }
215
+ if (!session.child || session.child.killed) {
216
+ return jsonResult({
217
+ status: "error",
218
+ error: "Process is not running",
219
+ }, true);
220
+ }
221
+ try {
222
+ session.child.stdin?.write(input);
223
+ return jsonResult({
224
+ status: "success",
225
+ session_id: sessionId,
226
+ message: `Wrote ${input.length} characters to stdin`,
227
+ });
228
+ }
229
+ catch (error) {
230
+ return jsonResult({
231
+ status: "error",
232
+ error: error instanceof Error ? error.message : String(error),
233
+ }, true);
234
+ }
235
+ }
236
+ /** 终止进程 */
237
+ function handleKill(sessionId) {
238
+ if (!sessionId) {
239
+ return jsonResult({
240
+ status: "error",
241
+ error: "session_id is required for kill action",
242
+ }, true);
243
+ }
244
+ const session = getSession(sessionId);
245
+ if (!session) {
246
+ return jsonResult({
247
+ status: "error",
248
+ error: `Session not found or already finished: ${sessionId}`,
249
+ }, true);
250
+ }
251
+ killSession(session);
252
+ return jsonResult({
253
+ status: "success",
254
+ session_id: sessionId,
255
+ message: "Kill signal sent to process",
256
+ });
257
+ }
258
+ /** 清除已完成的进程记录 */
259
+ function handleClear(sessionId) {
260
+ if (!sessionId) {
261
+ return jsonResult({
262
+ status: "error",
263
+ error: "session_id is required for clear action",
264
+ }, true);
265
+ }
266
+ const deleted = deleteSession(sessionId);
267
+ if (!deleted) {
268
+ return jsonResult({
269
+ status: "error",
270
+ error: `Session not found or still running: ${sessionId}`,
271
+ }, true);
272
+ }
273
+ return jsonResult({
274
+ status: "success",
275
+ session_id: sessionId,
276
+ message: "Session cleared from history",
277
+ });
278
+ }
279
+ //# sourceMappingURL=process-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-tool.js","sourceRoot":"","sources":["../../../src/tools/builtin/process-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * 子 Agent 工具 - 支持多 Agent 路由
3
+ */
4
+ import type { Tool } from "../types.js";
5
+ /** 子 Agent 定义 */
6
+ export interface SubAgentDefinition {
7
+ id: string;
8
+ name: string;
9
+ description: string;
10
+ systemPrompt: string;
11
+ model?: string;
12
+ provider?: string;
13
+ }
14
+ /** 子 Agent 运行器 */
15
+ export type SubAgentRunner = (agentId: string, prompt: string, context?: Record<string, unknown>) => Promise<{
16
+ content: string;
17
+ error?: string;
18
+ }>;
19
+ /** 注册子 Agent */
20
+ export declare function registerSubAgent(agent: SubAgentDefinition): void;
21
+ /** 设置子 Agent 运行器 */
22
+ export declare function setSubAgentRunner(runner: SubAgentRunner): void;
23
+ /** 获取所有子 Agent */
24
+ export declare function getAllSubAgents(): SubAgentDefinition[];
25
+ /** 获取子 Agent */
26
+ export declare function getSubAgent(id: string): SubAgentDefinition | undefined;
27
+ /** 创建子 Agent 工具 */
28
+ export declare function createSubAgentTool(): Tool;
29
+ /** 预定义的子 Agent */
30
+ export declare const PREDEFINED_SUBAGENTS: SubAgentDefinition[];
31
+ /** 注册预定义的子 Agent */
32
+ export declare function registerPredefinedSubAgents(): void;
33
+ //# sourceMappingURL=subagent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/subagent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAMxC,iBAAiB;AACjB,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kBAAkB;AAClB,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAMlD,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAGhE;AAED,oBAAoB;AACpB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAE9D;AAED,kBAAkB;AAClB,wBAAgB,eAAe,IAAI,kBAAkB,EAAE,CAEtD;AAED,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEtE;AAED,mBAAmB;AACnB,wBAAgB,kBAAkB,IAAI,IAAI,CA4GzC;AAED,kBAAkB;AAClB,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,EAiDpD,CAAC;AAEF,oBAAoB;AACpB,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * 子 Agent 工具 - 支持多 Agent 路由
3
+ */
4
+ import { Type } from "@sinclair/typebox";
5
+ import { jsonResult, textResult, readStringParam } from "../common.js";
6
+ import { getChildLogger } from "../../utils/logger.js";
7
+ const logger = getChildLogger("subagent");
8
+ /** 子 Agent 注册表 */
9
+ const subAgentRegistry = new Map();
10
+ let subAgentRunner = null;
11
+ /** 注册子 Agent */
12
+ export function registerSubAgent(agent) {
13
+ subAgentRegistry.set(agent.id, agent);
14
+ logger.debug({ agentId: agent.id, name: agent.name }, "Subagent registered");
15
+ }
16
+ /** 设置子 Agent 运行器 */
17
+ export function setSubAgentRunner(runner) {
18
+ subAgentRunner = runner;
19
+ }
20
+ /** 获取所有子 Agent */
21
+ export function getAllSubAgents() {
22
+ return Array.from(subAgentRegistry.values());
23
+ }
24
+ /** 获取子 Agent */
25
+ export function getSubAgent(id) {
26
+ return subAgentRegistry.get(id);
27
+ }
28
+ /** 创建子 Agent 工具 */
29
+ export function createSubAgentTool() {
30
+ return {
31
+ name: "subagent",
32
+ label: "Sub-Agent",
33
+ description: `Delegate a task to a specialized sub-agent. Use this when:
34
+ - The task requires specialized knowledge or capabilities
35
+ - You want to parallelize work across multiple agents
36
+ - The task is complex and benefits from focused attention
37
+
38
+ Available sub-agents will be listed when you call with action="list".`,
39
+ parameters: Type.Object({
40
+ action: Type.Union([
41
+ Type.Literal("list"),
42
+ Type.Literal("run"),
43
+ ], { description: "Action to perform" }),
44
+ agent_id: Type.Optional(Type.String({ description: "ID of the sub-agent to run (for run action)" })),
45
+ prompt: Type.Optional(Type.String({ description: "The prompt/task to send to the sub-agent (for run action)" })),
46
+ context: Type.Optional(Type.Object({}, { description: "Additional context to pass to the sub-agent" })),
47
+ }),
48
+ execute: async (_toolCallId, args) => {
49
+ const params = args;
50
+ const action = readStringParam(params, "action", { required: true });
51
+ if (action === "list") {
52
+ const agents = getAllSubAgents();
53
+ if (agents.length === 0) {
54
+ return jsonResult({
55
+ status: "success",
56
+ message: "No sub-agents registered",
57
+ agents: [],
58
+ });
59
+ }
60
+ return jsonResult({
61
+ status: "success",
62
+ agents: agents.map((a) => ({
63
+ id: a.id,
64
+ name: a.name,
65
+ description: a.description,
66
+ })),
67
+ });
68
+ }
69
+ if (action === "run") {
70
+ const agentId = readStringParam(params, "agent_id");
71
+ const prompt = readStringParam(params, "prompt");
72
+ if (!agentId) {
73
+ return jsonResult({
74
+ status: "error",
75
+ error: "agent_id is required for run action",
76
+ }, true);
77
+ }
78
+ if (!prompt) {
79
+ return jsonResult({
80
+ status: "error",
81
+ error: "prompt is required for run action",
82
+ }, true);
83
+ }
84
+ const agent = getSubAgent(agentId);
85
+ if (!agent) {
86
+ return jsonResult({
87
+ status: "error",
88
+ error: `Sub-agent not found: ${agentId}`,
89
+ }, true);
90
+ }
91
+ if (!subAgentRunner) {
92
+ return jsonResult({
93
+ status: "error",
94
+ error: "Sub-agent runner not configured",
95
+ }, true);
96
+ }
97
+ try {
98
+ logger.info({ agentId, promptLength: prompt.length }, "Running sub-agent");
99
+ const context = params.context;
100
+ const result = await subAgentRunner(agentId, prompt, context);
101
+ if (result.error) {
102
+ return jsonResult({
103
+ status: "error",
104
+ error: result.error,
105
+ partialContent: result.content,
106
+ }, true);
107
+ }
108
+ return textResult(result.content, {
109
+ agentId,
110
+ agentName: agent.name,
111
+ });
112
+ }
113
+ catch (error) {
114
+ logger.error({ error, agentId }, "Sub-agent execution failed");
115
+ return jsonResult({
116
+ status: "error",
117
+ error: error instanceof Error ? error.message : String(error),
118
+ }, true);
119
+ }
120
+ }
121
+ return jsonResult({
122
+ status: "error",
123
+ error: `Unknown action: ${action}`,
124
+ }, true);
125
+ },
126
+ };
127
+ }
128
+ /** 预定义的子 Agent */
129
+ export const PREDEFINED_SUBAGENTS = [
130
+ {
131
+ id: "researcher",
132
+ name: "Research Agent",
133
+ description: "Specialized in gathering information, reading documentation, and researching topics",
134
+ systemPrompt: `You are a Research Agent specialized in:
135
+ - Finding and reading documentation
136
+ - Gathering information from codebases
137
+ - Summarizing findings clearly
138
+ - Providing factual, well-sourced answers
139
+
140
+ Focus on accuracy and completeness. Use available tools to read files and search.`,
141
+ },
142
+ {
143
+ id: "coder",
144
+ name: "Coding Agent",
145
+ description: "Specialized in writing and modifying code",
146
+ systemPrompt: `You are a Coding Agent specialized in:
147
+ - Writing clean, efficient code
148
+ - Following best practices and coding standards
149
+ - Understanding existing code patterns
150
+ - Making minimal, focused changes
151
+
152
+ Focus on code quality and maintainability.`,
153
+ },
154
+ {
155
+ id: "reviewer",
156
+ name: "Code Review Agent",
157
+ description: "Specialized in reviewing code changes for quality, bugs, and best practices",
158
+ systemPrompt: `You are a Code Review Agent specialized in:
159
+ - Identifying bugs and potential issues
160
+ - Checking for security vulnerabilities
161
+ - Evaluating code quality and readability
162
+ - Suggesting improvements
163
+
164
+ Be thorough but constructive in feedback.`,
165
+ },
166
+ {
167
+ id: "planner",
168
+ name: "Planning Agent",
169
+ description: "Specialized in breaking down complex tasks into actionable steps",
170
+ systemPrompt: `You are a Planning Agent specialized in:
171
+ - Analyzing complex requirements
172
+ - Breaking tasks into clear steps
173
+ - Identifying dependencies and risks
174
+ - Creating actionable plans
175
+
176
+ Focus on clarity and feasibility.`,
177
+ },
178
+ ];
179
+ /** 注册预定义的子 Agent */
180
+ export function registerPredefinedSubAgents() {
181
+ for (const agent of PREDEFINED_SUBAGENTS) {
182
+ registerSubAgent(agent);
183
+ }
184
+ }
185
+ //# sourceMappingURL=subagent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../../src/tools/builtin/subagent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 内置工具 - 系统工具
3
+ */
4
+ import type { Tool } from "../types.js";
5
+ /** 当前时间工具 */
6
+ export declare function createCurrentTimeTool(): Tool;
7
+ /** 计算器工具 */
8
+ export declare function createCalculatorTool(): Tool;
9
+ /** 延迟工具 (用于测试) */
10
+ export declare function createDelayTool(): Tool;
11
+ //# sourceMappingURL=system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/system.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,aAAa;AACb,wBAAgB,qBAAqB,IAAI,IAAI,CAsC5C;AAED,YAAY;AACZ,wBAAgB,oBAAoB,IAAI,IAAI,CA8B3C;AAkDD,kBAAkB;AAClB,wBAAgB,eAAe,IAAI,IAAI,CA+BtC"}