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.
- package/LICENSE +190 -0
- package/README.md +467 -0
- package/dist/agents/agent.d.ts +118 -0
- package/dist/agents/agent.d.ts.map +1 -0
- package/dist/agents/agent.js +686 -0
- package/dist/agents/agent.js.map +1 -0
- package/dist/agents/compaction.d.ts +78 -0
- package/dist/agents/compaction.d.ts.map +1 -0
- package/dist/agents/compaction.js +350 -0
- package/dist/agents/compaction.js.map +1 -0
- package/dist/agents/failover-error.d.ts +42 -0
- package/dist/agents/failover-error.d.ts.map +1 -0
- package/dist/agents/failover-error.js +171 -0
- package/dist/agents/failover-error.js.map +1 -0
- package/dist/agents/index.d.ts +10 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +10 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/model-fallback.d.ts +54 -0
- package/dist/agents/model-fallback.d.ts.map +1 -0
- package/dist/agents/model-fallback.js +227 -0
- package/dist/agents/model-fallback.js.map +1 -0
- package/dist/agents/session-store.d.ts +53 -0
- package/dist/agents/session-store.d.ts.map +1 -0
- package/dist/agents/session-store.js +217 -0
- package/dist/agents/session-store.js.map +1 -0
- package/dist/agents/system-prompt.d.ts +29 -0
- package/dist/agents/system-prompt.d.ts.map +1 -0
- package/dist/agents/system-prompt.js +299 -0
- package/dist/agents/system-prompt.js.map +1 -0
- package/dist/channels/common/base.d.ts +40 -0
- package/dist/channels/common/base.d.ts.map +1 -0
- package/dist/channels/common/base.js +23 -0
- package/dist/channels/common/base.js.map +1 -0
- package/dist/channels/common/index.d.ts +21 -0
- package/dist/channels/common/index.d.ts.map +1 -0
- package/dist/channels/common/index.js +66 -0
- package/dist/channels/common/index.js.map +1 -0
- package/dist/channels/dingtalk/api.d.ts +30 -0
- package/dist/channels/dingtalk/api.d.ts.map +1 -0
- package/dist/channels/dingtalk/api.js +149 -0
- package/dist/channels/dingtalk/api.js.map +1 -0
- package/dist/channels/dingtalk/events.d.ts +80 -0
- package/dist/channels/dingtalk/events.d.ts.map +1 -0
- package/dist/channels/dingtalk/events.js +92 -0
- package/dist/channels/dingtalk/events.js.map +1 -0
- package/dist/channels/dingtalk/index.d.ts +51 -0
- package/dist/channels/dingtalk/index.d.ts.map +1 -0
- package/dist/channels/dingtalk/index.js +231 -0
- package/dist/channels/dingtalk/index.js.map +1 -0
- package/dist/channels/dingtalk/stream.d.ts +31 -0
- package/dist/channels/dingtalk/stream.d.ts.map +1 -0
- package/dist/channels/dingtalk/stream.js +116 -0
- package/dist/channels/dingtalk/stream.js.map +1 -0
- package/dist/channels/feishu/api.d.ts +33 -0
- package/dist/channels/feishu/api.d.ts.map +1 -0
- package/dist/channels/feishu/api.js +120 -0
- package/dist/channels/feishu/api.js.map +1 -0
- package/dist/channels/feishu/events.d.ts +87 -0
- package/dist/channels/feishu/events.d.ts.map +1 -0
- package/dist/channels/feishu/events.js +163 -0
- package/dist/channels/feishu/events.js.map +1 -0
- package/dist/channels/feishu/index.d.ts +46 -0
- package/dist/channels/feishu/index.d.ts.map +1 -0
- package/dist/channels/feishu/index.js +207 -0
- package/dist/channels/feishu/index.js.map +1 -0
- package/dist/channels/feishu/websocket.d.ts +32 -0
- package/dist/channels/feishu/websocket.d.ts.map +1 -0
- package/dist/channels/feishu/websocket.js +121 -0
- package/dist/channels/feishu/websocket.js.map +1 -0
- package/dist/channels/index.d.ts +9 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +9 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +468 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/index.d.ts +54 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +171 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/config/index.d.ts +201 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +261 -0
- package/dist/config/index.js.map +1 -0
- package/dist/gateway/index.d.ts +5 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +5 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/server.d.ts +42 -0
- package/dist/gateway/server.d.ts.map +1 -0
- package/dist/gateway/server.js +235 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/hooks/index.d.ts +168 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +148 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/index.d.ts +94 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +282 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/plugins/index.d.ts +57 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +103 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/providers/anthropic-compatible.d.ts +48 -0
- package/dist/providers/anthropic-compatible.d.ts.map +1 -0
- package/dist/providers/anthropic-compatible.js +380 -0
- package/dist/providers/anthropic-compatible.js.map +1 -0
- package/dist/providers/base.d.ts +26 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +58 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/custom-openai.d.ts +66 -0
- package/dist/providers/custom-openai.d.ts.map +1 -0
- package/dist/providers/custom-openai.js +255 -0
- package/dist/providers/custom-openai.js.map +1 -0
- package/dist/providers/dashscope.d.ts +15 -0
- package/dist/providers/dashscope.d.ts.map +1 -0
- package/dist/providers/dashscope.js +237 -0
- package/dist/providers/dashscope.js.map +1 -0
- package/dist/providers/deepseek.d.ts +10 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +57 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/index.d.ts +33 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +142 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/kimi.d.ts +10 -0
- package/dist/providers/kimi.d.ts.map +1 -0
- package/dist/providers/kimi.js +83 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/minimax.d.ts +20 -0
- package/dist/providers/minimax.d.ts.map +1 -0
- package/dist/providers/minimax.js +252 -0
- package/dist/providers/minimax.js.map +1 -0
- package/dist/providers/modelscope.d.ts +15 -0
- package/dist/providers/modelscope.d.ts.map +1 -0
- package/dist/providers/modelscope.js +237 -0
- package/dist/providers/modelscope.js.map +1 -0
- package/dist/providers/openai-compatible.d.ts +57 -0
- package/dist/providers/openai-compatible.d.ts.map +1 -0
- package/dist/providers/openai-compatible.js +193 -0
- package/dist/providers/openai-compatible.js.map +1 -0
- package/dist/providers/stepfun.d.ts +10 -0
- package/dist/providers/stepfun.d.ts.map +1 -0
- package/dist/providers/stepfun.js +125 -0
- package/dist/providers/stepfun.js.map +1 -0
- package/dist/providers/zhipu.d.ts +15 -0
- package/dist/providers/zhipu.d.ts.map +1 -0
- package/dist/providers/zhipu.js +247 -0
- package/dist/providers/zhipu.js.map +1 -0
- package/dist/sessions/index.d.ts +6 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +6 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/store.d.ts +45 -0
- package/dist/sessions/store.d.ts.map +1 -0
- package/dist/sessions/store.js +268 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/sessions/types.d.ts +110 -0
- package/dist/sessions/types.d.ts.map +1 -0
- package/dist/sessions/types.js +6 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/tools/builtin/apply-patch.d.ts +8 -0
- package/dist/tools/builtin/apply-patch.d.ts.map +1 -0
- package/dist/tools/builtin/apply-patch.js +272 -0
- package/dist/tools/builtin/apply-patch.js.map +1 -0
- package/dist/tools/builtin/bash.d.ts +25 -0
- package/dist/tools/builtin/bash.d.ts.map +1 -0
- package/dist/tools/builtin/bash.js +212 -0
- package/dist/tools/builtin/bash.js.map +1 -0
- package/dist/tools/builtin/browser.d.ts +12 -0
- package/dist/tools/builtin/browser.d.ts.map +1 -0
- package/dist/tools/builtin/browser.js +693 -0
- package/dist/tools/builtin/browser.js.map +1 -0
- package/dist/tools/builtin/filesystem.d.ts +29 -0
- package/dist/tools/builtin/filesystem.d.ts.map +1 -0
- package/dist/tools/builtin/filesystem.js +484 -0
- package/dist/tools/builtin/filesystem.js.map +1 -0
- package/dist/tools/builtin/image.d.ts +13 -0
- package/dist/tools/builtin/image.d.ts.map +1 -0
- package/dist/tools/builtin/image.js +126 -0
- package/dist/tools/builtin/image.js.map +1 -0
- package/dist/tools/builtin/index.d.ts +30 -0
- package/dist/tools/builtin/index.d.ts.map +1 -0
- package/dist/tools/builtin/index.js +55 -0
- package/dist/tools/builtin/index.js.map +1 -0
- package/dist/tools/builtin/process-registry.d.ts +71 -0
- package/dist/tools/builtin/process-registry.d.ts.map +1 -0
- package/dist/tools/builtin/process-registry.js +172 -0
- package/dist/tools/builtin/process-registry.js.map +1 -0
- package/dist/tools/builtin/process-tool.d.ts +8 -0
- package/dist/tools/builtin/process-tool.d.ts.map +1 -0
- package/dist/tools/builtin/process-tool.js +279 -0
- package/dist/tools/builtin/process-tool.js.map +1 -0
- package/dist/tools/builtin/subagent.d.ts +33 -0
- package/dist/tools/builtin/subagent.d.ts.map +1 -0
- package/dist/tools/builtin/subagent.js +185 -0
- package/dist/tools/builtin/subagent.js.map +1 -0
- package/dist/tools/builtin/system.d.ts +11 -0
- package/dist/tools/builtin/system.d.ts.map +1 -0
- package/dist/tools/builtin/system.js +144 -0
- package/dist/tools/builtin/system.js.map +1 -0
- package/dist/tools/builtin/web.d.ts +9 -0
- package/dist/tools/builtin/web.d.ts.map +1 -0
- package/dist/tools/builtin/web.js +87 -0
- package/dist/tools/builtin/web.js.map +1 -0
- package/dist/tools/common.d.ts +45 -0
- package/dist/tools/common.d.ts.map +1 -0
- package/dist/tools/common.js +129 -0
- package/dist/tools/common.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +33 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +174 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +58 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +11 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/types/index.d.ts +280 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +34 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +35 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +114 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +94 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/web/index.d.ts +7 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +7 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/static.d.ts +12 -0
- package/dist/web/static.d.ts.map +1 -0
- package/dist/web/static.js +1260 -0
- package/dist/web/static.js.map +1 -0
- package/dist/web/types.d.ts +95 -0
- package/dist/web/types.d.ts.map +1 -0
- package/dist/web/types.js +5 -0
- package/dist/web/types.js.map +1 -0
- package/dist/web/websocket.d.ts +58 -0
- package/dist/web/websocket.d.ts.map +1 -0
- package/dist/web/websocket.js +371 -0
- package/dist/web/websocket.js.map +1 -0
- 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"}
|