@markusylisiurunen/tau 0.2.7 → 0.2.9
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/README.md +39 -34
- package/dist/core/commands/registry.js +2 -0
- package/dist/core/commands/registry.js.map +1 -1
- package/dist/core/config/content_loader.js +75 -12
- package/dist/core/config/content_loader.js.map +1 -1
- package/dist/core/events/index.js.map +1 -1
- package/dist/core/events/types.js.map +1 -1
- package/dist/core/index.js +4 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/personas.js +9 -3
- package/dist/core/personas.js.map +1 -1
- package/dist/core/session/core_session.js +6 -0
- package/dist/core/session/core_session.js.map +1 -1
- package/dist/core/session/runner.js +53 -189
- package/dist/core/session/runner.js.map +1 -1
- package/dist/core/session/session_engine.js +26 -1
- package/dist/core/session/session_engine.js.map +1 -1
- package/dist/core/subagents/control_plane.js +256 -0
- package/dist/core/subagents/control_plane.js.map +1 -0
- package/dist/core/subagents/explore.js +6 -4
- package/dist/core/subagents/explore.js.map +1 -1
- package/dist/core/subagents/subagent_engine.js +31 -19
- package/dist/core/subagents/subagent_engine.js.map +1 -1
- package/dist/core/subagents/web.js +7 -4
- package/dist/core/subagents/web.js.map +1 -1
- package/dist/core/tools/catalog.js +24 -6
- package/dist/core/tools/catalog.js.map +1 -1
- package/dist/core/tools/communicate.js +45 -0
- package/dist/core/tools/communicate.js.map +1 -0
- package/dist/core/tools/edit.js +1 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/execution_backend.js +2 -2
- package/dist/core/tools/execution_backend.js.map +1 -1
- package/dist/core/tools/registry.js.map +1 -1
- package/dist/core/tools/spawn_agent.js +173 -0
- package/dist/core/tools/spawn_agent.js.map +1 -0
- package/dist/core/tools/subagent_ui.js +39 -0
- package/dist/core/tools/subagent_ui.js.map +1 -0
- package/dist/core/tools/terminate_agent.js +141 -0
- package/dist/core/tools/terminate_agent.js.map +1 -0
- package/dist/core/tools/wait_for_agent.js +178 -0
- package/dist/core/tools/wait_for_agent.js.map +1 -0
- package/dist/core/utils/auto_retry.js +27 -2
- package/dist/core/utils/auto_retry.js.map +1 -1
- package/dist/core/utils/{fork.js → compact.js} +2 -2
- package/dist/core/utils/compact.js.map +1 -0
- package/dist/core/utils/format.js +17 -0
- package/dist/core/utils/format.js.map +1 -1
- package/dist/core/utils/project_files.js +31 -5
- package/dist/core/utils/project_files.js.map +1 -1
- package/dist/core/utils/subagent_utils.js +4 -0
- package/dist/core/utils/subagent_utils.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/tui/chat_controller.js +65 -16
- package/dist/tui/chat_controller.js.map +1 -1
- package/dist/tui/chat_view.js +29 -5
- package/dist/tui/chat_view.js.map +1 -1
- package/dist/tui/tool_ui_router.js +89 -77
- package/dist/tui/tool_ui_router.js.map +1 -1
- package/dist/tui/ui/chat_message_model.js +0 -2
- package/dist/tui/ui/chat_message_model.js.map +1 -1
- package/dist/tui/ui/custom_editor.js +42 -6
- package/dist/tui/ui/custom_editor.js.map +1 -1
- package/dist/tui/ui/subagent_editor_pane.js +67 -0
- package/dist/tui/ui/subagent_editor_pane.js.map +1 -0
- package/dist/tui/ui/subagent_panel.js +249 -0
- package/dist/tui/ui/subagent_panel.js.map +1 -0
- package/dist/tui/ui/theme/theme.js +1 -0
- package/dist/tui/ui/theme/theme.js.map +1 -1
- package/dist/tui/ui/tool_ui_registry.js +226 -41
- package/dist/tui/ui/tool_ui_registry.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/tools/fork.js +0 -239
- package/dist/core/tools/fork.js.map +0 -1
- package/dist/core/tools/task.js +0 -151
- package/dist/core/tools/task.js.map +0 -1
- package/dist/core/tools/task_schema.js +0 -29
- package/dist/core/tools/task_schema.js.map +0 -1
- package/dist/core/utils/fork.js.map +0 -1
- package/dist/tui/ui/task_execution.js +0 -256
- package/dist/tui/ui/task_execution.js.map +0 -1
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { formatToolUiEventForProgress } from "../utils/subagent_utils.js";
|
|
3
|
+
import { runSubagent } from "./subagent_engine.js";
|
|
4
|
+
const MAX_ACTIVE_SUBAGENTS = 3;
|
|
5
|
+
const MAX_PROGRESS_EVENTS = 200;
|
|
6
|
+
async function raceWithAbort(promise, signal) {
|
|
7
|
+
if (!signal) {
|
|
8
|
+
return await promise;
|
|
9
|
+
}
|
|
10
|
+
if (signal.aborted) {
|
|
11
|
+
throw new Error("aborted");
|
|
12
|
+
}
|
|
13
|
+
return await new Promise((resolve, reject) => {
|
|
14
|
+
const onAbort = () => {
|
|
15
|
+
signal.removeEventListener("abort", onAbort);
|
|
16
|
+
reject(new Error("aborted"));
|
|
17
|
+
};
|
|
18
|
+
signal.addEventListener("abort", onAbort);
|
|
19
|
+
promise.then((value) => {
|
|
20
|
+
signal.removeEventListener("abort", onAbort);
|
|
21
|
+
resolve(value);
|
|
22
|
+
}, (error) => {
|
|
23
|
+
signal.removeEventListener("abort", onAbort);
|
|
24
|
+
reject(error);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export class SubagentControlPlane {
|
|
29
|
+
records = new Map();
|
|
30
|
+
onEvent;
|
|
31
|
+
constructor(options) {
|
|
32
|
+
this.onEvent = options.onEvent;
|
|
33
|
+
}
|
|
34
|
+
reset() {
|
|
35
|
+
for (const record of this.records.values()) {
|
|
36
|
+
if (record.status === "running") {
|
|
37
|
+
record.abortRequested = true;
|
|
38
|
+
record.controller.abort();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
this.records.clear();
|
|
42
|
+
}
|
|
43
|
+
getActiveCount() {
|
|
44
|
+
let count = 0;
|
|
45
|
+
for (const record of this.records.values()) {
|
|
46
|
+
if (record.status === "running") {
|
|
47
|
+
count += 1;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return count;
|
|
51
|
+
}
|
|
52
|
+
spawn(options) {
|
|
53
|
+
if (this.getActiveCount() >= MAX_ACTIVE_SUBAGENTS) {
|
|
54
|
+
return {
|
|
55
|
+
ok: false,
|
|
56
|
+
reason: `subagent limit reached (max ${MAX_ACTIVE_SUBAGENTS} active). ` +
|
|
57
|
+
"wait for existing agents to finish.",
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const { definition, personaConfig, prompt, title, config, authPath, backend } = options;
|
|
61
|
+
const id = randomUUID();
|
|
62
|
+
const controller = new AbortController();
|
|
63
|
+
const startedAt = Date.now();
|
|
64
|
+
const record = {
|
|
65
|
+
id,
|
|
66
|
+
name: definition.name,
|
|
67
|
+
title,
|
|
68
|
+
status: "running",
|
|
69
|
+
costTotal: 0,
|
|
70
|
+
turns: 0,
|
|
71
|
+
toolCalls: 0,
|
|
72
|
+
startedAt,
|
|
73
|
+
abortRequested: false,
|
|
74
|
+
progress: [],
|
|
75
|
+
outputs: [],
|
|
76
|
+
controller,
|
|
77
|
+
completion: Promise.resolve(undefined),
|
|
78
|
+
};
|
|
79
|
+
this.records.set(id, record);
|
|
80
|
+
this.emit({ type: "subagent_spawned", state: this.toSnapshot(record) });
|
|
81
|
+
const subagentContext = {
|
|
82
|
+
id,
|
|
83
|
+
name: definition.name,
|
|
84
|
+
title,
|
|
85
|
+
controlPlane: this,
|
|
86
|
+
};
|
|
87
|
+
record.completion = runSubagent({
|
|
88
|
+
definition,
|
|
89
|
+
personaConfig,
|
|
90
|
+
prompt,
|
|
91
|
+
config,
|
|
92
|
+
authPath,
|
|
93
|
+
backend,
|
|
94
|
+
signal: controller.signal,
|
|
95
|
+
sessionId: id,
|
|
96
|
+
subagentContext,
|
|
97
|
+
onProgress: (event) => this.recordProgress(id, event),
|
|
98
|
+
onToolUiEvent: (event) => this.recordToolUiEvent(id, event),
|
|
99
|
+
})
|
|
100
|
+
.then((result) => {
|
|
101
|
+
record.status = "success";
|
|
102
|
+
record.costTotal = result.costTotal;
|
|
103
|
+
record.turns = result.turns;
|
|
104
|
+
record.toolCalls = result.toolCalls;
|
|
105
|
+
record.finalText = result.finalText;
|
|
106
|
+
record.finishedAt = Date.now();
|
|
107
|
+
if (this.records.get(id) === record) {
|
|
108
|
+
this.emit({ type: "subagent_finished", state: this.toSnapshot(record) });
|
|
109
|
+
}
|
|
110
|
+
return record;
|
|
111
|
+
})
|
|
112
|
+
.catch((error) => {
|
|
113
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
114
|
+
const wasAborted = record.controller.signal.aborted || record.abortRequested;
|
|
115
|
+
record.status = wasAborted ? "aborted" : "error";
|
|
116
|
+
record.error = wasAborted ? undefined : message;
|
|
117
|
+
record.finishedAt = Date.now();
|
|
118
|
+
if (this.records.get(id) === record) {
|
|
119
|
+
this.emit({ type: "subagent_finished", state: this.toSnapshot(record) });
|
|
120
|
+
}
|
|
121
|
+
return record;
|
|
122
|
+
});
|
|
123
|
+
return { ok: true, id };
|
|
124
|
+
}
|
|
125
|
+
recordCommunicate(id, text) {
|
|
126
|
+
const record = this.records.get(id);
|
|
127
|
+
if (!record)
|
|
128
|
+
return;
|
|
129
|
+
const trimmed = text.trim();
|
|
130
|
+
if (!trimmed)
|
|
131
|
+
return;
|
|
132
|
+
const payload = text.trimEnd();
|
|
133
|
+
record.outputs.push(payload);
|
|
134
|
+
this.emit({ type: "subagent_communicate", id, text: payload });
|
|
135
|
+
}
|
|
136
|
+
async waitFor(ids, signal) {
|
|
137
|
+
const missing = ids.filter((id) => !this.records.has(id));
|
|
138
|
+
if (missing.length > 0) {
|
|
139
|
+
throw new Error(`unknown subagent id(s): ${missing.join(", ")}`);
|
|
140
|
+
}
|
|
141
|
+
const completions = ids.map((id) => this.waitForRecord(id));
|
|
142
|
+
const all = Promise.all(completions);
|
|
143
|
+
const resolved = await raceWithAbort(all, signal);
|
|
144
|
+
return resolved.map((record) => this.toResult(record));
|
|
145
|
+
}
|
|
146
|
+
async terminate(id, signal) {
|
|
147
|
+
const record = this.records.get(id);
|
|
148
|
+
if (!record)
|
|
149
|
+
return undefined;
|
|
150
|
+
if (record.status === "running") {
|
|
151
|
+
if (!record.abortRequested) {
|
|
152
|
+
record.abortRequested = true;
|
|
153
|
+
this.emit({ type: "subagent_abort_requested", id });
|
|
154
|
+
}
|
|
155
|
+
record.controller.abort();
|
|
156
|
+
}
|
|
157
|
+
const completion = this.waitForRecord(id);
|
|
158
|
+
const resolved = await raceWithAbort(completion, signal);
|
|
159
|
+
return this.toResult(resolved);
|
|
160
|
+
}
|
|
161
|
+
getSnapshot(id) {
|
|
162
|
+
const record = this.records.get(id);
|
|
163
|
+
return record ? this.toSnapshot(record) : undefined;
|
|
164
|
+
}
|
|
165
|
+
async waitForRecord(id) {
|
|
166
|
+
const record = this.records.get(id);
|
|
167
|
+
if (!record) {
|
|
168
|
+
throw new Error(`unknown subagent id: ${id}`);
|
|
169
|
+
}
|
|
170
|
+
if (record.status !== "running") {
|
|
171
|
+
return record;
|
|
172
|
+
}
|
|
173
|
+
return await record.completion;
|
|
174
|
+
}
|
|
175
|
+
recordProgress(id, event) {
|
|
176
|
+
const record = this.records.get(id);
|
|
177
|
+
if (!record)
|
|
178
|
+
return;
|
|
179
|
+
record.costTotal = event.costTotal;
|
|
180
|
+
record.turns = event.turns;
|
|
181
|
+
record.toolCalls = event.toolCalls;
|
|
182
|
+
const text = event.text.trim();
|
|
183
|
+
if (text) {
|
|
184
|
+
record.progress.push({ kind: "progress", text });
|
|
185
|
+
if (record.progress.length > MAX_PROGRESS_EVENTS) {
|
|
186
|
+
record.progress.shift();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
this.emit({
|
|
190
|
+
type: "subagent_progress",
|
|
191
|
+
id,
|
|
192
|
+
text,
|
|
193
|
+
costTotal: record.costTotal,
|
|
194
|
+
turns: record.turns,
|
|
195
|
+
toolCalls: record.toolCalls,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
recordToolUiEvent(id, event) {
|
|
199
|
+
const record = this.records.get(id);
|
|
200
|
+
if (!record)
|
|
201
|
+
return;
|
|
202
|
+
record.costTotal = event.costTotal;
|
|
203
|
+
record.turns = event.turns;
|
|
204
|
+
record.toolCalls = event.toolCalls;
|
|
205
|
+
const text = formatToolUiEventForProgress(event.uiEvent) ?? "";
|
|
206
|
+
if (text) {
|
|
207
|
+
record.progress.push({ kind: "progress", text });
|
|
208
|
+
if (record.progress.length > MAX_PROGRESS_EVENTS) {
|
|
209
|
+
record.progress.shift();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
this.emit({
|
|
213
|
+
type: "subagent_progress",
|
|
214
|
+
id,
|
|
215
|
+
text,
|
|
216
|
+
costTotal: record.costTotal,
|
|
217
|
+
turns: record.turns,
|
|
218
|
+
toolCalls: record.toolCalls,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
toSnapshot(record) {
|
|
222
|
+
return {
|
|
223
|
+
id: record.id,
|
|
224
|
+
name: record.name,
|
|
225
|
+
title: record.title,
|
|
226
|
+
status: record.status,
|
|
227
|
+
costTotal: record.costTotal,
|
|
228
|
+
turns: record.turns,
|
|
229
|
+
toolCalls: record.toolCalls,
|
|
230
|
+
startedAt: record.startedAt,
|
|
231
|
+
finishedAt: record.finishedAt,
|
|
232
|
+
abortRequested: record.abortRequested || undefined,
|
|
233
|
+
error: record.error,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
toResult(record) {
|
|
237
|
+
return {
|
|
238
|
+
id: record.id,
|
|
239
|
+
name: record.name,
|
|
240
|
+
title: record.title,
|
|
241
|
+
status: record.status,
|
|
242
|
+
costTotal: record.costTotal,
|
|
243
|
+
turns: record.turns,
|
|
244
|
+
toolCalls: record.toolCalls,
|
|
245
|
+
outputs: [...record.outputs],
|
|
246
|
+
finalText: record.finalText,
|
|
247
|
+
error: record.error,
|
|
248
|
+
startedAt: record.startedAt,
|
|
249
|
+
finishedAt: record.finishedAt,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
emit(event) {
|
|
253
|
+
this.onEvent(event);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=control_plane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control_plane.js","sourceRoot":"","sources":["../../../src/core/subagents/control_plane.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,10 @@ Your job: use the bash tool to inspect files, search for symbols, trace dependen
|
|
|
5
5
|
|
|
6
6
|
### Rules
|
|
7
7
|
|
|
8
|
-
- You may ONLY use the bash
|
|
8
|
+
- You may ONLY use the bash and communicate tools. No other tools.
|
|
9
9
|
- Every bash call MUST use safetyLevel="read" and therefore be a read-only operation.
|
|
10
10
|
- Do not run commands that modify files, install packages, or otherwise change system state.
|
|
11
|
+
- Use the communicate tool to send findings back to the main agent. The main agent only receives communicate output, so always call it with your final answer before finishing.
|
|
11
12
|
- This is a non-interactive session. You cannot ask for clarification or additional input. You must complete the task immediately with the information available.
|
|
12
13
|
|
|
13
14
|
### Tool use
|
|
@@ -22,7 +23,8 @@ Your job: use the bash tool to inspect files, search for symbols, trace dependen
|
|
|
22
23
|
|
|
23
24
|
### Output
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
Send the final answer via communicate. After communicating, reply with a brief confirmation like "done".
|
|
27
|
+
Be direct and concise. No meta commentary about your process.
|
|
26
28
|
If you hit blockers or made assumptions, note them briefly at the end.
|
|
27
29
|
`.trim();
|
|
28
30
|
export const EXPLORE_DEFINITION = {
|
|
@@ -35,8 +37,8 @@ export const EXPLORE_DEFINITION = {
|
|
|
35
37
|
"e.g. simple searches with ripgrep, file reads, or straightforward lookups don't warrant the overhead.",
|
|
36
38
|
].join(" "),
|
|
37
39
|
systemPrompt: EXPLORE_SYSTEM_PROMPT,
|
|
38
|
-
allowedTools: ["bash"],
|
|
40
|
+
allowedTools: ["bash", "communicate"],
|
|
39
41
|
riskLevel: "read-only",
|
|
40
|
-
maxSubturns:
|
|
42
|
+
maxSubturns: 128,
|
|
41
43
|
};
|
|
42
44
|
//# sourceMappingURL=explore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explore.js","sourceRoot":"","sources":["../../../src/core/subagents/explore.ts"],"names":[],"mappings":"AAEA,MAAM,qBAAqB,GAAG
|
|
1
|
+
{"version":3,"file":"explore.js","sourceRoot":"","sources":["../../../src/core/subagents/explore.ts"],"names":[],"mappings":"AAEA,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B7B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,CAAC,MAAM,kBAAkB,GAA8B;IAC3D,IAAI,EAAE,SAAS;IACf,WAAW,EAAE;QACX,4EAA4E;QAC5E,8GAA8G;QAC9G,gGAAgG;QAChG,0DAA0D;QAC1D,uGAAuG;KACxG,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,YAAY,EAAE,qBAAqB;IACnC,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;IACrC,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,GAAG;CACjB,CAAC"}
|
|
@@ -21,8 +21,8 @@ function buildToolRegistryForAllowedTools(allowedTools, config, backend) {
|
|
|
21
21
|
function isToolCall(block) {
|
|
22
22
|
return block.type === "toolCall";
|
|
23
23
|
}
|
|
24
|
-
export async function
|
|
25
|
-
const { definition, personaConfig, prompt, config, signal, onProgress } = options;
|
|
24
|
+
export async function runSubagent(options) {
|
|
25
|
+
const { definition, personaConfig, prompt, config, signal, onProgress, onToolUiEvent, subagentContext, } = options;
|
|
26
26
|
const authPath = options.authPath ?? getAuthPath();
|
|
27
27
|
const authStorage = new AuthStorage(authPath);
|
|
28
28
|
const credentialResolver = createCredentialResolver({
|
|
@@ -33,7 +33,8 @@ export async function runSubagentToCompletion(options) {
|
|
|
33
33
|
throw new Error("sub-agent aborted");
|
|
34
34
|
}
|
|
35
35
|
const backend = options.backend ?? createLocalToolExecutionBackend();
|
|
36
|
-
const
|
|
36
|
+
const allowedTools = personaConfig.tools ?? definition.allowedTools;
|
|
37
|
+
const toolRegistry = buildToolRegistryForAllowedTools(allowedTools, config, backend);
|
|
37
38
|
const messages = [
|
|
38
39
|
{
|
|
39
40
|
role: "user",
|
|
@@ -45,9 +46,12 @@ export async function runSubagentToCompletion(options) {
|
|
|
45
46
|
let turns = 0;
|
|
46
47
|
let toolCalls = 0;
|
|
47
48
|
const maxSubturns = definition.maxSubturns ?? 64;
|
|
48
|
-
const
|
|
49
|
+
const emitProgress = (text) => {
|
|
49
50
|
onProgress?.({ text, costTotal, turns, toolCalls });
|
|
50
51
|
};
|
|
52
|
+
const emitToolUi = (uiEvent) => {
|
|
53
|
+
onToolUiEvent?.({ uiEvent, costTotal, turns, toolCalls });
|
|
54
|
+
};
|
|
51
55
|
const issues = [];
|
|
52
56
|
const recordIssue = (text) => {
|
|
53
57
|
const normalized = normalizeOneLine(text);
|
|
@@ -56,9 +60,9 @@ export async function runSubagentToCompletion(options) {
|
|
|
56
60
|
issues.push(normalized);
|
|
57
61
|
};
|
|
58
62
|
const formatIssueSummary = () => issues.length > 0 ? ` (recent issues: ${issues.slice(-3).join("; ")})` : "";
|
|
59
|
-
const sessionId = `tau-subagent-${definition.name}-${randomUUID()}`;
|
|
63
|
+
const sessionId = options.sessionId ?? `tau-subagent-${definition.name}-${randomUUID()}`;
|
|
60
64
|
for (let subturn = 1; subturn <= maxSubturns && !signal.aborted; subturn++) {
|
|
61
|
-
|
|
65
|
+
emitProgress("assistant: thinking");
|
|
62
66
|
const context = {
|
|
63
67
|
systemPrompt: definition.systemPrompt,
|
|
64
68
|
messages,
|
|
@@ -101,13 +105,16 @@ export async function runSubagentToCompletion(options) {
|
|
|
101
105
|
emitPartials: false,
|
|
102
106
|
retry: {
|
|
103
107
|
shouldRetryAfterError: ({ error, model }) => shouldAutoRetry({ model, error }),
|
|
108
|
+
maxRetries: 1,
|
|
109
|
+
delayMs: 3000,
|
|
110
|
+
notice: { text: "auto-retrying after transient error", severity: "warn" },
|
|
104
111
|
},
|
|
105
112
|
});
|
|
106
113
|
let finalMessage;
|
|
107
114
|
try {
|
|
108
115
|
finalMessage = await consumeRunner(runner, (event) => {
|
|
109
116
|
if (event.type === "notice") {
|
|
110
|
-
|
|
117
|
+
emitProgress(event.text);
|
|
111
118
|
}
|
|
112
119
|
});
|
|
113
120
|
}
|
|
@@ -134,15 +141,15 @@ export async function runSubagentToCompletion(options) {
|
|
|
134
141
|
// Emit any assistant text output
|
|
135
142
|
const agentText = extractAssistantTextForProgress(finalMessage);
|
|
136
143
|
if (agentText) {
|
|
137
|
-
|
|
144
|
+
emitProgress(agentText);
|
|
138
145
|
}
|
|
139
146
|
const finish = () => {
|
|
140
147
|
const finalText = extractAssistantText(finalMessage).trim();
|
|
141
148
|
if (!finalText) {
|
|
142
149
|
throw new Error(`sub-agent produced an empty response (stopReason: ${finalMessage.stopReason ?? "unknown"})${formatIssueSummary()}`);
|
|
143
150
|
}
|
|
144
|
-
|
|
145
|
-
return { finalText, costTotal };
|
|
151
|
+
emitProgress("done");
|
|
152
|
+
return { finalText, costTotal, turns, toolCalls };
|
|
146
153
|
};
|
|
147
154
|
if (finalMessage.stopReason !== "toolUse") {
|
|
148
155
|
return finish();
|
|
@@ -150,7 +157,7 @@ export async function runSubagentToCompletion(options) {
|
|
|
150
157
|
if (messageToolCalls.length === 0) {
|
|
151
158
|
return finish();
|
|
152
159
|
}
|
|
153
|
-
const riskLevel = definition.riskLevel;
|
|
160
|
+
const riskLevel = (personaConfig.riskLevel ?? definition.riskLevel);
|
|
154
161
|
const handleUi = (uiEvent) => {
|
|
155
162
|
if (!uiEvent)
|
|
156
163
|
return;
|
|
@@ -161,12 +168,16 @@ export async function runSubagentToCompletion(options) {
|
|
|
161
168
|
costTotal += uiEvent.costUsd;
|
|
162
169
|
}
|
|
163
170
|
const text = formatToolUiEventForProgress(uiEvent);
|
|
164
|
-
if (text) {
|
|
165
|
-
|
|
166
|
-
recordIssue(text);
|
|
167
|
-
}
|
|
168
|
-
emit(text);
|
|
171
|
+
if (text && /\b(blocked|failed):/.test(text)) {
|
|
172
|
+
recordIssue(text);
|
|
169
173
|
}
|
|
174
|
+
emitToolUi(uiEvent);
|
|
175
|
+
};
|
|
176
|
+
const dispatchContext = {
|
|
177
|
+
config,
|
|
178
|
+
toolRegistry,
|
|
179
|
+
authPath,
|
|
180
|
+
subagentContext,
|
|
170
181
|
};
|
|
171
182
|
const toolRunner = runToolCalls({
|
|
172
183
|
toolCalls: messageToolCalls,
|
|
@@ -174,6 +185,7 @@ export async function runSubagentToCompletion(options) {
|
|
|
174
185
|
enabledTools: toolRegistry.getEnabledToolSchemas(),
|
|
175
186
|
riskLevel,
|
|
176
187
|
signal,
|
|
188
|
+
dispatchContext,
|
|
177
189
|
toolErrorMessages: {
|
|
178
190
|
notEnabled: (toolCall) => `tool '${toolCall.name}' is not available to this sub-agent.`,
|
|
179
191
|
unsupported: (toolCall) => `tool '${toolCall.name}' is not available to this sub-agent.`,
|
|
@@ -200,10 +212,10 @@ export async function runSubagentToCompletion(options) {
|
|
|
200
212
|
if (event.type === "notice") {
|
|
201
213
|
if (event.severity === "error") {
|
|
202
214
|
recordIssue(event.text);
|
|
203
|
-
|
|
215
|
+
emitProgress(`tool blocked: ${event.text}`);
|
|
204
216
|
}
|
|
205
217
|
else {
|
|
206
|
-
|
|
218
|
+
emitProgress(event.text);
|
|
207
219
|
}
|
|
208
220
|
}
|
|
209
221
|
}
|
|
@@ -211,7 +223,7 @@ export async function runSubagentToCompletion(options) {
|
|
|
211
223
|
if (signal.aborted) {
|
|
212
224
|
throw new Error("sub-agent aborted");
|
|
213
225
|
}
|
|
214
|
-
|
|
226
|
+
emitProgress(`done (stopped after ${maxSubturns} subturns)`);
|
|
215
227
|
const lastAssistant = [...messages].reverse().find((m) => m.role === "assistant");
|
|
216
228
|
const lastAssistantText = lastAssistant ? extractAssistantText(lastAssistant).trim() : "";
|
|
217
229
|
const lastAssistantLine = lastAssistantText
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent_engine.js","sourceRoot":"","sources":["../../../src/core/subagents/subagent_engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAA2B,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAEnG,OAAO,EAAoB,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAGhF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EACL,+BAA+B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"subagent_engine.js","sourceRoot":"","sources":["../../../src/core/subagents/subagent_engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,15 +5,17 @@ Your job: find and extract relevant information from technical documentation, bu
|
|
|
5
5
|
|
|
6
6
|
### Rules
|
|
7
7
|
|
|
8
|
-
- You may ONLY use: web_search, web_fetch, and
|
|
8
|
+
- You may ONLY use: web_search, web_fetch, bash, and communicate.
|
|
9
9
|
- Every bash call MUST use safetyLevel="read" and therefore be a read-only operation.
|
|
10
10
|
- Do not run commands that modify files, install packages, or otherwise change system state.
|
|
11
|
+
- Use the communicate tool to send findings back to the main agent. The main agent only receives communicate output, so always call it with your final answer before finishing.
|
|
11
12
|
- This is a non-interactive session. You cannot ask for clarification or additional input. You must complete the task immediately with the information available.
|
|
12
13
|
|
|
13
14
|
### Tools
|
|
14
15
|
|
|
15
16
|
- **web_search**: Search the web for relevant sources. Returns a list of URLs with snippets.
|
|
16
17
|
- **web_fetch**: Fetch a URL's content, pre-processed to plain text (HTML tags, scripts, ads stripped).
|
|
18
|
+
- **communicate**: Send your findings back to the main agent. The main agent only receives communicate output.
|
|
17
19
|
- **curl via bash**: Fetch raw data directly. Prefer this for structured formats (JSON, XML, Markdown) or when web_fetch falls short. Keep in mind that curl may return LOTS of data; use bash commands to filter or limit output as needed.
|
|
18
20
|
- **bash**: Run read-only shell commands to process data, extract information, or transform formats. May be combined with curl to handle complex fetches.
|
|
19
21
|
|
|
@@ -36,7 +38,8 @@ Fetch these via curl when you spot them. Keep in mind that some sites may requir
|
|
|
36
38
|
|
|
37
39
|
### Output
|
|
38
40
|
|
|
39
|
-
|
|
41
|
+
Send the final answer via communicate. After communicating, reply with a brief confirmation like "done".
|
|
42
|
+
Summarize rather than quote at length. Be direct and concise. No meta commentary about your exploration process. Cite sources as URLs. If you hit blockers, made assumptions, or found conflicts, note them briefly at the end.
|
|
40
43
|
`.trim();
|
|
41
44
|
export const WEB_DEFINITION = {
|
|
42
45
|
name: "web",
|
|
@@ -46,8 +49,8 @@ export const WEB_DEFINITION = {
|
|
|
46
49
|
"Examples: 'search the web for X', 'using web, what's new in React 19?', 'is this a known issue in package Y according to GitHub issues?'.",
|
|
47
50
|
].join(" "),
|
|
48
51
|
systemPrompt: WEB_SYSTEM_PROMPT,
|
|
49
|
-
allowedTools: ["web_search", "web_fetch", "bash"],
|
|
52
|
+
allowedTools: ["web_search", "web_fetch", "bash", "communicate"],
|
|
50
53
|
riskLevel: "read-only",
|
|
51
|
-
maxSubturns:
|
|
54
|
+
maxSubturns: 128,
|
|
52
55
|
};
|
|
53
56
|
//# sourceMappingURL=web.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/core/subagents/web.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/core/subagents/web.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CzB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,CAAC,MAAM,cAAc,GAA8B;IACvD,IAAI,EAAE,KAAK;IACX,WAAW,EAAE;QACX,wGAAwG;QACxG,kGAAkG;QAClG,2IAA2I;KAC5I,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC;IAChE,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,GAAG;CACjB,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { createBashToolDefinition } from "./bash.js";
|
|
2
|
+
import { createCommunicateToolDefinition } from "./communicate.js";
|
|
2
3
|
import { createEditToolDefinition } from "./edit.js";
|
|
3
|
-
import { createForkToolDefinition } from "./fork.js";
|
|
4
4
|
import { ToolRegistry } from "./registry.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createSpawnAgentToolDefinition } from "./spawn_agent.js";
|
|
6
|
+
import { createTerminateAgentToolDefinition } from "./terminate_agent.js";
|
|
7
|
+
import { createWaitForAgentToolDefinition } from "./wait_for_agent.js";
|
|
6
8
|
import { createWebFetchToolDefinition } from "./web_fetch.js";
|
|
7
9
|
import { createWebSearchToolDefinition } from "./web_search.js";
|
|
8
10
|
import { createWriteToolDefinition } from "./write.js";
|
|
@@ -12,24 +14,40 @@ export const ToolCatalog = {
|
|
|
12
14
|
createBashToolDefinition(backend),
|
|
13
15
|
createWriteToolDefinition(backend),
|
|
14
16
|
createEditToolDefinition(backend),
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
createSpawnAgentToolDefinition(backend),
|
|
18
|
+
createWaitForAgentToolDefinition(),
|
|
19
|
+
createTerminateAgentToolDefinition(),
|
|
17
20
|
]);
|
|
18
21
|
},
|
|
19
22
|
createSubagentRegistry(allowedTools, config, backend) {
|
|
20
|
-
const definitions = [];
|
|
21
|
-
|
|
23
|
+
const definitions = [createCommunicateToolDefinition()];
|
|
24
|
+
const seen = new Set();
|
|
25
|
+
const addTool = (tool) => {
|
|
26
|
+
if (seen.has(tool))
|
|
27
|
+
return;
|
|
28
|
+
seen.add(tool);
|
|
22
29
|
switch (tool) {
|
|
23
30
|
case "bash":
|
|
24
31
|
definitions.push(createBashToolDefinition(backend));
|
|
25
32
|
break;
|
|
33
|
+
case "write":
|
|
34
|
+
definitions.push(createWriteToolDefinition(backend));
|
|
35
|
+
break;
|
|
36
|
+
case "edit":
|
|
37
|
+
definitions.push(createEditToolDefinition(backend));
|
|
38
|
+
break;
|
|
26
39
|
case "web_search":
|
|
27
40
|
definitions.push(createWebSearchToolDefinition(config));
|
|
28
41
|
break;
|
|
29
42
|
case "web_fetch":
|
|
30
43
|
definitions.push(createWebFetchToolDefinition(config));
|
|
31
44
|
break;
|
|
45
|
+
case "communicate":
|
|
46
|
+
break;
|
|
32
47
|
}
|
|
48
|
+
};
|
|
49
|
+
for (const tool of allowedTools) {
|
|
50
|
+
addTool(tool);
|
|
33
51
|
}
|
|
34
52
|
return new ToolRegistry(definitions);
|
|
35
53
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/core/tools/catalog.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/core/tools/catalog.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,kCAAkC,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,cAAc,CAAC,OAA6B;QAC1C,OAAO,IAAI,YAAY,CAAC;YACtB,wBAAwB,CAAC,OAAO,CAAC;YACjC,yBAAyB,CAAC,OAAO,CAAC;YAClC,wBAAwB,CAAC,OAAO,CAAC;YACjC,8BAA8B,CAAC,OAAO,CAAC;YACvC,gCAAgC,EAAE;YAClC,kCAAkC,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB,CACpB,YAAgC,EAChC,MAAc,EACd,OAA6B;QAE7B,MAAM,WAAW,GAAqB,CAAC,+BAA+B,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,MAAM,OAAO,GAAG,CAAC,IAAsB,EAAQ,EAAE;YAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEf,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,MAAM;oBACT,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;oBACpD,MAAM;gBACR,KAAK,OAAO;oBACV,WAAW,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;oBACrD,MAAM;gBACR,KAAK,MAAM;oBACT,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;oBACpD,MAAM;gBACR,KAAK,YAAY;oBACf,WAAW,CAAC,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC;oBACxD,MAAM;gBACR,KAAK,WAAW;oBACd,WAAW,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC;oBACvD,MAAM;gBACR,KAAK,aAAa;oBAChB,MAAM;YACV,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;CACF,CAAC"}
|