@markusylisiurunen/tau 0.1.2
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 +228 -0
- package/dist/app.js +1140 -0
- package/dist/app.js.map +1 -0
- package/dist/bash_commands.js +81 -0
- package/dist/bash_commands.js.map +1 -0
- package/dist/cli.js +147 -0
- package/dist/cli.js.map +1 -0
- package/dist/clipboard.js +16 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/commands.js +76 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.js +39 -0
- package/dist/config.js.map +1 -0
- package/dist/content_loader.js +241 -0
- package/dist/content_loader.js.map +1 -0
- package/dist/debug-ui.js +134 -0
- package/dist/debug-ui.js.map +1 -0
- package/dist/main.js +85 -0
- package/dist/main.js.map +1 -0
- package/dist/personas.js +227 -0
- package/dist/personas.js.map +1 -0
- package/dist/prompts.js +261 -0
- package/dist/prompts.js.map +1 -0
- package/dist/session/message_accumulator.js +56 -0
- package/dist/session/message_accumulator.js.map +1 -0
- package/dist/session/session_engine.js +290 -0
- package/dist/session/session_engine.js.map +1 -0
- package/dist/subagents/explore.js +42 -0
- package/dist/subagents/explore.js.map +1 -0
- package/dist/subagents/registry.js +30 -0
- package/dist/subagents/registry.js.map +1 -0
- package/dist/subagents/subagent_engine.js +147 -0
- package/dist/subagents/subagent_engine.js.map +1 -0
- package/dist/subagents/types.js +2 -0
- package/dist/subagents/types.js.map +1 -0
- package/dist/terminal.js +115 -0
- package/dist/terminal.js.map +1 -0
- package/dist/tools/bash.js +334 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit.js +199 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/registry.js +15 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/task.js +202 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/write.js +89 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/assistant_message.js +87 -0
- package/dist/ui/assistant_message.js.map +1 -0
- package/dist/ui/bash_execution.js +127 -0
- package/dist/ui/bash_execution.js.map +1 -0
- package/dist/ui/chat_container.js +90 -0
- package/dist/ui/chat_container.js.map +1 -0
- package/dist/ui/components/dynamic_border.js +11 -0
- package/dist/ui/components/dynamic_border.js.map +1 -0
- package/dist/ui/components/one_line_segments.js +79 -0
- package/dist/ui/components/one_line_segments.js.map +1 -0
- package/dist/ui/components/padded_container.js +24 -0
- package/dist/ui/components/padded_container.js.map +1 -0
- package/dist/ui/custom_editor.js +53 -0
- package/dist/ui/custom_editor.js.map +1 -0
- package/dist/ui/file_execution.js +189 -0
- package/dist/ui/file_execution.js.map +1 -0
- package/dist/ui/footer.js +56 -0
- package/dist/ui/footer.js.map +1 -0
- package/dist/ui/queued_messages.js +31 -0
- package/dist/ui/queued_messages.js.map +1 -0
- package/dist/ui/session_divider.js +17 -0
- package/dist/ui/session_divider.js.map +1 -0
- package/dist/ui/session_summary.js +30 -0
- package/dist/ui/session_summary.js.map +1 -0
- package/dist/ui/slash_autocomplete.js +177 -0
- package/dist/ui/slash_autocomplete.js.map +1 -0
- package/dist/ui/system_message.js +8 -0
- package/dist/ui/system_message.js.map +1 -0
- package/dist/ui/task_execution.js +190 -0
- package/dist/ui/task_execution.js.map +1 -0
- package/dist/ui/theme.js +108 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/tool_output.js +24 -0
- package/dist/ui/tool_output.js.map +1 -0
- package/dist/ui/user_message.js +14 -0
- package/dist/ui/user_message.js.map +1 -0
- package/dist/utils/color.js +13 -0
- package/dist/utils/color.js.map +1 -0
- package/dist/utils/context.js +108 -0
- package/dist/utils/context.js.map +1 -0
- package/dist/utils/fork.js +41 -0
- package/dist/utils/fork.js.map +1 -0
- package/dist/utils/format.js +35 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/fuzzy.js +48 -0
- package/dist/utils/fuzzy.js.map +1 -0
- package/dist/utils/git.js +21 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/messages.js +41 -0
- package/dist/utils/messages.js.map +1 -0
- package/dist/utils/never.js +4 -0
- package/dist/utils/never.js.map +1 -0
- package/dist/utils/project_files.js +96 -0
- package/dist/utils/project_files.js.map +1 -0
- package/dist/utils/truncate.js +299 -0
- package/dist/utils/truncate.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { streamSimple } from "@mariozechner/pi-ai";
|
|
2
|
+
import { getApiKeyForProvider } from "../config.js";
|
|
3
|
+
import { formatSubagentsForPrompt } from "../subagents/registry.js";
|
|
4
|
+
import { createToolError } from "../utils/messages.js";
|
|
5
|
+
import { MessageAccumulator } from "./message_accumulator.js";
|
|
6
|
+
const MAX_ASSISTANT_SUBTURNS = 64;
|
|
7
|
+
export class SessionEngine {
|
|
8
|
+
persona;
|
|
9
|
+
baseSystemPrompt;
|
|
10
|
+
riskLevel;
|
|
11
|
+
toolRegistry;
|
|
12
|
+
config;
|
|
13
|
+
messages = [];
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this.persona = options.persona;
|
|
16
|
+
this.baseSystemPrompt = options.baseSystemPrompt;
|
|
17
|
+
this.riskLevel = options.riskLevel;
|
|
18
|
+
this.toolRegistry = options.toolRegistry;
|
|
19
|
+
this.config = options.config ?? {};
|
|
20
|
+
}
|
|
21
|
+
reset() {
|
|
22
|
+
this.messages = [];
|
|
23
|
+
}
|
|
24
|
+
setPersona(persona, baseSystemPrompt) {
|
|
25
|
+
this.persona = persona;
|
|
26
|
+
this.baseSystemPrompt = baseSystemPrompt;
|
|
27
|
+
}
|
|
28
|
+
setRiskLevel(level) {
|
|
29
|
+
this.riskLevel = level;
|
|
30
|
+
}
|
|
31
|
+
addUserText(textForModel) {
|
|
32
|
+
this.messages.push({
|
|
33
|
+
role: "user",
|
|
34
|
+
content: [{ type: "text", text: textForModel }],
|
|
35
|
+
timestamp: Date.now(),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
addUserMessage(message) {
|
|
39
|
+
this.messages.push(message);
|
|
40
|
+
}
|
|
41
|
+
get history() {
|
|
42
|
+
return this.messages;
|
|
43
|
+
}
|
|
44
|
+
getStreamingSettings(persona) {
|
|
45
|
+
const merged = { ...persona.settings };
|
|
46
|
+
const reasoning = persona.settings.reasoning;
|
|
47
|
+
// pi-ai uses undefined for "no reasoning".
|
|
48
|
+
if (reasoning === undefined || reasoning === "none") {
|
|
49
|
+
delete merged.reasoning;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
merged.reasoning = reasoning;
|
|
53
|
+
}
|
|
54
|
+
return merged;
|
|
55
|
+
}
|
|
56
|
+
async *processTurn(signal) {
|
|
57
|
+
let subturns = 0;
|
|
58
|
+
while (subturns < MAX_ASSISTANT_SUBTURNS && !signal.aborted) {
|
|
59
|
+
subturns += 1;
|
|
60
|
+
const { finalMessage } = yield* this.runSingleSubturn(signal);
|
|
61
|
+
if (signal.aborted) {
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
if (!finalMessage || finalMessage.stopReason !== "toolUse") {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
const toolCalls = finalMessage.content.filter((c) => c.type === "toolCall");
|
|
68
|
+
if (!toolCalls.length) {
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
yield* this.executeToolCalls(toolCalls, signal);
|
|
72
|
+
}
|
|
73
|
+
if (subturns >= MAX_ASSISTANT_SUBTURNS) {
|
|
74
|
+
yield {
|
|
75
|
+
type: "notice",
|
|
76
|
+
severity: "warn",
|
|
77
|
+
text: `stopped after ${MAX_ASSISTANT_SUBTURNS} tool subturns to avoid an infinite loop.`,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async *runSingleSubturn(signal) {
|
|
82
|
+
yield { type: "assistant_start" };
|
|
83
|
+
const tools = this.persona.tools ?? this.toolRegistry.schemas;
|
|
84
|
+
let systemPrompt = this.baseSystemPrompt;
|
|
85
|
+
const subagentInfo = formatSubagentsForPrompt(this.persona);
|
|
86
|
+
if (subagentInfo) {
|
|
87
|
+
systemPrompt += subagentInfo;
|
|
88
|
+
}
|
|
89
|
+
const context = {
|
|
90
|
+
systemPrompt,
|
|
91
|
+
messages: this.messages,
|
|
92
|
+
tools,
|
|
93
|
+
};
|
|
94
|
+
const apiKey = getApiKeyForProvider(this.config, this.persona.model.provider);
|
|
95
|
+
const stream = streamSimple(this.persona.model, context, {
|
|
96
|
+
...this.getStreamingSettings(this.persona),
|
|
97
|
+
signal,
|
|
98
|
+
...(apiKey && { apiKey }),
|
|
99
|
+
});
|
|
100
|
+
const accumulator = new MessageAccumulator();
|
|
101
|
+
try {
|
|
102
|
+
for await (const event of stream) {
|
|
103
|
+
accumulator.processEvent(event);
|
|
104
|
+
if (event.type === "text_delta" || event.type.startsWith("thinking_")) {
|
|
105
|
+
yield { type: "assistant_partial", snapshot: accumulator.snapshot };
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const finalMessage = await stream.result();
|
|
109
|
+
this.messages.push(finalMessage);
|
|
110
|
+
yield { type: "assistant_final", message: finalMessage };
|
|
111
|
+
return { finalMessage };
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
if (signal.aborted) {
|
|
115
|
+
return { finalMessage: undefined };
|
|
116
|
+
}
|
|
117
|
+
throw err;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async *executeToolCalls(toolCalls, signal) {
|
|
121
|
+
const enabledTools = this.persona.tools ?? this.toolRegistry.schemas;
|
|
122
|
+
const enabledToolNames = new Set(enabledTools.map((t) => t.name));
|
|
123
|
+
const dispatchContext = { persona: this.persona, config: this.config };
|
|
124
|
+
// Step 1: Validate all tools and create result buffer
|
|
125
|
+
const resultsByIndex = new Map();
|
|
126
|
+
const validToolCalls = [];
|
|
127
|
+
for (let i = 0; i < toolCalls.length; i++) {
|
|
128
|
+
if (signal.aborted)
|
|
129
|
+
break;
|
|
130
|
+
const toolCall = toolCalls[i];
|
|
131
|
+
if (!enabledToolNames.has(toolCall.name)) {
|
|
132
|
+
const msg = `tool '${toolCall.name}' is not enabled for the current persona.`;
|
|
133
|
+
const toolError = createToolError(toolCall, msg);
|
|
134
|
+
resultsByIndex.set(i, toolError);
|
|
135
|
+
yield { type: "notice", severity: "error", text: msg };
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const def = this.toolRegistry.get(toolCall.name);
|
|
139
|
+
if (!def) {
|
|
140
|
+
const msg = `tool '${toolCall.name}' is not supported by tau.`;
|
|
141
|
+
const toolError = createToolError(toolCall, msg);
|
|
142
|
+
resultsByIndex.set(i, toolError);
|
|
143
|
+
yield { type: "notice", severity: "error", text: msg };
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
validToolCalls.push({ index: i, toolCall, def });
|
|
147
|
+
}
|
|
148
|
+
// Step 2: Separate task and non-task tools
|
|
149
|
+
const taskCalls = validToolCalls.filter((v) => v.toolCall.name === "task");
|
|
150
|
+
const nonTaskCalls = validToolCalls.filter((v) => v.toolCall.name !== "task");
|
|
151
|
+
const taskExecutions = [];
|
|
152
|
+
for (const { index, toolCall, def } of taskCalls) {
|
|
153
|
+
const result = await def.dispatch(toolCall, this.riskLevel, signal, dispatchContext);
|
|
154
|
+
if (result.kind === "phased") {
|
|
155
|
+
taskExecutions.push({
|
|
156
|
+
index,
|
|
157
|
+
toolCall,
|
|
158
|
+
startedUiEvent: result.startedUiEvent,
|
|
159
|
+
uiEventsIterable: result.uiEvents,
|
|
160
|
+
runPromise: result.run,
|
|
161
|
+
});
|
|
162
|
+
if (result.startedUiEvent) {
|
|
163
|
+
yield { type: "tool_ui", uiEvent: result.startedUiEvent };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// Single-phase task (unlikely but handle it)
|
|
168
|
+
const { toolResult, uiEvent } = result;
|
|
169
|
+
resultsByIndex.set(index, toolResult);
|
|
170
|
+
if (uiEvent) {
|
|
171
|
+
yield { type: "tool_ui", uiEvent };
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Step 4: Stream task UI events in parallel and finalize each task as it completes.
|
|
176
|
+
if (taskExecutions.length > 0 && !signal.aborted) {
|
|
177
|
+
yield* this.streamAndFinalizeTaskCalls(taskExecutions, resultsByIndex, signal);
|
|
178
|
+
}
|
|
179
|
+
// Step 5: Execute non-task tools sequentially
|
|
180
|
+
for (const { index, toolCall, def } of nonTaskCalls) {
|
|
181
|
+
if (signal.aborted)
|
|
182
|
+
break;
|
|
183
|
+
const result = await def.dispatch(toolCall, this.riskLevel, signal, dispatchContext);
|
|
184
|
+
if (result.kind === "phased") {
|
|
185
|
+
if (result.startedUiEvent) {
|
|
186
|
+
yield { type: "tool_ui", uiEvent: result.startedUiEvent };
|
|
187
|
+
}
|
|
188
|
+
if (result.uiEvents) {
|
|
189
|
+
for await (const uiEvent of result.uiEvents) {
|
|
190
|
+
if (signal.aborted)
|
|
191
|
+
break;
|
|
192
|
+
yield { type: "tool_ui", uiEvent };
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const { toolResult, uiEvent } = await result.run;
|
|
196
|
+
resultsByIndex.set(index, toolResult);
|
|
197
|
+
if (uiEvent) {
|
|
198
|
+
yield { type: "tool_ui", uiEvent };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
const { toolResult, uiEvent } = result;
|
|
203
|
+
resultsByIndex.set(index, toolResult);
|
|
204
|
+
if (uiEvent) {
|
|
205
|
+
yield { type: "tool_ui", uiEvent };
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Step 6: Append all results to conversation history in original order
|
|
210
|
+
for (let i = 0; i < toolCalls.length; i++) {
|
|
211
|
+
const toolResult = resultsByIndex.get(i);
|
|
212
|
+
if (toolResult) {
|
|
213
|
+
this.messages.push(toolResult);
|
|
214
|
+
yield { type: "tool_result", message: toolResult };
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
async *streamAndFinalizeTaskCalls(taskExecutions, resultsByIndex, signal) {
|
|
219
|
+
const makeUiNext = (iterator, taskExec) => iterator
|
|
220
|
+
.next()
|
|
221
|
+
.then((result) => ({ kind: "ui", iterator, taskExec, result }))
|
|
222
|
+
.catch(() => ({
|
|
223
|
+
kind: "ui",
|
|
224
|
+
iterator,
|
|
225
|
+
taskExec,
|
|
226
|
+
result: { done: true, value: undefined },
|
|
227
|
+
}));
|
|
228
|
+
const makeCompletion = (taskExec) => taskExec.runPromise
|
|
229
|
+
.then((value) => ({
|
|
230
|
+
kind: "completion",
|
|
231
|
+
taskExec,
|
|
232
|
+
settled: { status: "fulfilled", value },
|
|
233
|
+
}))
|
|
234
|
+
.catch((reason) => ({
|
|
235
|
+
kind: "completion",
|
|
236
|
+
taskExec,
|
|
237
|
+
settled: { status: "rejected", reason },
|
|
238
|
+
}));
|
|
239
|
+
const uiPending = new Map();
|
|
240
|
+
const completionPending = new Map();
|
|
241
|
+
for (const taskExec of taskExecutions) {
|
|
242
|
+
if (!taskExec.uiEventsIterable) {
|
|
243
|
+
completionPending.set(taskExec, makeCompletion(taskExec));
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
const iterator = taskExec.uiEventsIterable[Symbol.asyncIterator]();
|
|
247
|
+
uiPending.set(iterator, makeUiNext(iterator, taskExec));
|
|
248
|
+
}
|
|
249
|
+
while ((uiPending.size > 0 || completionPending.size > 0) && !signal.aborted) {
|
|
250
|
+
const next = await Promise.race([
|
|
251
|
+
...uiPending.values(),
|
|
252
|
+
...completionPending.values(),
|
|
253
|
+
]);
|
|
254
|
+
if (next.kind === "ui") {
|
|
255
|
+
uiPending.delete(next.iterator);
|
|
256
|
+
if (next.result.done) {
|
|
257
|
+
if (!completionPending.has(next.taskExec)) {
|
|
258
|
+
completionPending.set(next.taskExec, makeCompletion(next.taskExec));
|
|
259
|
+
}
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
yield { type: "tool_ui", uiEvent: next.result.value };
|
|
263
|
+
if (!signal.aborted) {
|
|
264
|
+
uiPending.set(next.iterator, makeUiNext(next.iterator, next.taskExec));
|
|
265
|
+
}
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
completionPending.delete(next.taskExec);
|
|
269
|
+
if (next.settled.status === "fulfilled") {
|
|
270
|
+
const { toolResult, uiEvent } = next.settled.value;
|
|
271
|
+
resultsByIndex.set(next.taskExec.index, toolResult);
|
|
272
|
+
if (uiEvent) {
|
|
273
|
+
yield { type: "tool_ui", uiEvent };
|
|
274
|
+
}
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
const errorMsg = next.settled.reason instanceof Error
|
|
278
|
+
? next.settled.reason.message
|
|
279
|
+
: String(next.settled.reason);
|
|
280
|
+
const toolError = createToolError(next.taskExec.toolCall, `Task execution failed: ${errorMsg}`);
|
|
281
|
+
resultsByIndex.set(next.taskExec.index, toolError);
|
|
282
|
+
yield {
|
|
283
|
+
type: "notice",
|
|
284
|
+
severity: "error",
|
|
285
|
+
text: `Task '${next.taskExec.toolCall.id}' execution failed: ${errorMsg}`,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=session_engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session_engine.js","sourceRoot":"","sources":["../../src/session/session_engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const EXPLORE_SYSTEM_PROMPT = `
|
|
2
|
+
You are "explore", a focused sub-agent for investigating the local codebase.
|
|
3
|
+
|
|
4
|
+
Your job: use the bash tool to inspect files, search for symbols, trace dependencies, and understand code behavior, then answer the user's prompt.
|
|
5
|
+
|
|
6
|
+
### Rules
|
|
7
|
+
|
|
8
|
+
- You may ONLY use the bash tool. No other tools.
|
|
9
|
+
- Every bash call MUST use safetyLevel="read" and therefore be a read-only operation.
|
|
10
|
+
- Do not run commands that modify files, install packages, or otherwise change system state.
|
|
11
|
+
- 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
|
+
### Efficiency
|
|
14
|
+
|
|
15
|
+
- Use rg over grep, fd over find.
|
|
16
|
+
- Use absolute paths; avoid \`cd\`.
|
|
17
|
+
- Make parallel tool calls when there are no dependencies between them.
|
|
18
|
+
- Prefer targeted commands: rg for searching, sed -n for extracting line ranges, git log/blame for history.
|
|
19
|
+
- Stop exploring once you have enough information to answer; don't over-gather.
|
|
20
|
+
|
|
21
|
+
### Output
|
|
22
|
+
|
|
23
|
+
Return only the answer to the user's prompt. Be direct and concise. No meta commentary about your exploration process or tool usage.
|
|
24
|
+
If you encountered any blockers, ambiguities, or had to make assumptions to complete the task, include them at the end of your response.
|
|
25
|
+
`.trim();
|
|
26
|
+
export const EXPLORE_DEFINITION = {
|
|
27
|
+
name: "explore",
|
|
28
|
+
description: [
|
|
29
|
+
"Specialised sub-agent for multi-step, read-only codebase investigation.",
|
|
30
|
+
"Use when the question requires iterative exploration or benefits from an agentic workflow:",
|
|
31
|
+
"e.g. tracing data flow, mapping symbol usages, understanding how features connect, or exploring git history.",
|
|
32
|
+
"Examples: 'how does the auth flow work', 'find all callers of this method',",
|
|
33
|
+
"'trace where this config value comes from', 'what tests cover this function'.",
|
|
34
|
+
"Skip when a few direct bash calls can answer the question:",
|
|
35
|
+
"e.g. simple searches, file reads, or straightforward lookups don't warrant the overhead.",
|
|
36
|
+
].join(" "),
|
|
37
|
+
systemPrompt: EXPLORE_SYSTEM_PROMPT,
|
|
38
|
+
allowedTools: ["bash"],
|
|
39
|
+
riskLevel: "read-only",
|
|
40
|
+
maxSubturns: 64,
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=explore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explore.js","sourceRoot":"","sources":["../../src/subagents/explore.ts"],"names":[],"mappings":"AAEA,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwB7B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,CAAC,MAAM,kBAAkB,GAA8B;IAC3D,IAAI,EAAE,SAAS;IACf,WAAW,EAAE;QACX,yEAAyE;QACzE,4FAA4F;QAC5F,8GAA8G;QAC9G,6EAA6E;QAC7E,+EAA+E;QAC/E,4DAA4D;QAC5D,0FAA0F;KAC3F,CAAC,IAAI,CAAC,GAAG,CAAC;IACX,YAAY,EAAE,qBAAqB;IACnC,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,EAAE;CAChB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { EXPLORE_DEFINITION } from "./explore.js";
|
|
2
|
+
export function isSubagentName(value) {
|
|
3
|
+
return value === "explore";
|
|
4
|
+
}
|
|
5
|
+
export function getSubagentDefinition(name) {
|
|
6
|
+
switch (name) {
|
|
7
|
+
case "explore":
|
|
8
|
+
return EXPLORE_DEFINITION;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function getSubagentDefinitionFromString(name) {
|
|
12
|
+
return isSubagentName(name) ? getSubagentDefinition(name) : undefined;
|
|
13
|
+
}
|
|
14
|
+
export function formatSubagentsForPrompt(persona) {
|
|
15
|
+
if (!persona.subagents || Object.keys(persona.subagents).length === 0) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const entries = Object.entries(persona.subagents).filter(([, cfg]) => cfg);
|
|
19
|
+
if (entries.length === 0)
|
|
20
|
+
return undefined;
|
|
21
|
+
const subagentLines = entries
|
|
22
|
+
.map(([name]) => {
|
|
23
|
+
const def = getSubagentDefinitionFromString(name);
|
|
24
|
+
const description = def?.description || "(no description)";
|
|
25
|
+
return `- \`${name}\`: ${description}`;
|
|
26
|
+
})
|
|
27
|
+
.join("\n");
|
|
28
|
+
return `\n\n### Available sub-agents\n\nYou have access to the following sub-agents:\n\n${subagentLines}`;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/subagents/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,KAAK,SAAS,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAkB;IACtD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,kBAAkB,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,IAAY;IAEZ,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,aAAa,GAAG,OAAO;SAC1B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,+BAA+B,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,GAAG,EAAE,WAAW,IAAI,kBAAkB,CAAC;QAC3D,OAAO,OAAO,IAAI,OAAO,WAAW,EAAE,CAAC;IACzC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,mFAAmF,aAAa,EAAE,CAAC;AAC5G,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { streamSimple } from "@mariozechner/pi-ai";
|
|
2
|
+
import { getApiKeyForProvider } from "../config.js";
|
|
3
|
+
import { createBashToolDefinition } from "../tools/bash.js";
|
|
4
|
+
import { ToolRegistry } from "../tools/registry.js";
|
|
5
|
+
import { createToolError, extractAssistantText } from "../utils/messages.js";
|
|
6
|
+
function getStreamingSettings(settings) {
|
|
7
|
+
const merged = { ...(settings ?? {}) };
|
|
8
|
+
const reasoning = merged.reasoning;
|
|
9
|
+
if (reasoning === undefined || reasoning === "none") {
|
|
10
|
+
delete merged.reasoning;
|
|
11
|
+
}
|
|
12
|
+
return merged;
|
|
13
|
+
}
|
|
14
|
+
function buildToolRegistryForAllowedTools(allowedTools) {
|
|
15
|
+
const definitions = [];
|
|
16
|
+
for (const tool of allowedTools) {
|
|
17
|
+
switch (tool) {
|
|
18
|
+
case "bash":
|
|
19
|
+
definitions.push(createBashToolDefinition());
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return new ToolRegistry(definitions);
|
|
24
|
+
}
|
|
25
|
+
function formatToolUiEventForProgress(uiEvent) {
|
|
26
|
+
switch (uiEvent.type) {
|
|
27
|
+
case "bash_started":
|
|
28
|
+
return `bash running: ${uiEvent.command.replace(/\n/g, " ")}`;
|
|
29
|
+
default:
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function extractAssistantTextForProgress(message) {
|
|
34
|
+
const text = extractAssistantText(message).trim();
|
|
35
|
+
const firstLine = text.split("\n")[0];
|
|
36
|
+
return firstLine ? `agent: ${firstLine}` : undefined;
|
|
37
|
+
}
|
|
38
|
+
function isToolCall(block) {
|
|
39
|
+
return block.type === "toolCall";
|
|
40
|
+
}
|
|
41
|
+
function isPhased(result) {
|
|
42
|
+
return result.kind === "phased";
|
|
43
|
+
}
|
|
44
|
+
export async function runSubagentToCompletion(options) {
|
|
45
|
+
const { definition, personaConfig, prompt, config, signal, onProgress } = options;
|
|
46
|
+
const toolRegistry = buildToolRegistryForAllowedTools(definition.allowedTools);
|
|
47
|
+
const messages = [
|
|
48
|
+
{
|
|
49
|
+
role: "user",
|
|
50
|
+
content: [{ type: "text", text: prompt }],
|
|
51
|
+
timestamp: Date.now(),
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
let costTotal = 0;
|
|
55
|
+
let turns = 0;
|
|
56
|
+
let toolCalls = 0;
|
|
57
|
+
const maxSubturns = definition.maxSubturns ?? 64;
|
|
58
|
+
const emit = (text) => {
|
|
59
|
+
onProgress?.({ text, costTotal, turns, toolCalls });
|
|
60
|
+
};
|
|
61
|
+
for (let subturn = 1; subturn <= maxSubturns && !signal.aborted; subturn++) {
|
|
62
|
+
emit("assistant: thinking");
|
|
63
|
+
const context = {
|
|
64
|
+
systemPrompt: definition.systemPrompt,
|
|
65
|
+
messages,
|
|
66
|
+
tools: toolRegistry.schemas,
|
|
67
|
+
};
|
|
68
|
+
const apiKey = getApiKeyForProvider(config, personaConfig.model.provider);
|
|
69
|
+
const stream = streamSimple(personaConfig.model, context, {
|
|
70
|
+
...getStreamingSettings(personaConfig.settings),
|
|
71
|
+
signal,
|
|
72
|
+
...(apiKey && { apiKey }),
|
|
73
|
+
});
|
|
74
|
+
let finalMessage;
|
|
75
|
+
try {
|
|
76
|
+
for await (const _event of stream) {
|
|
77
|
+
if (signal.aborted)
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
finalMessage = await stream.result();
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
if (signal.aborted) {
|
|
84
|
+
throw new Error("sub-agent aborted");
|
|
85
|
+
}
|
|
86
|
+
throw err;
|
|
87
|
+
}
|
|
88
|
+
messages.push(finalMessage);
|
|
89
|
+
turns++;
|
|
90
|
+
costTotal += finalMessage.usage?.cost?.total ?? 0;
|
|
91
|
+
const messageToolCalls = finalMessage.content.filter(isToolCall);
|
|
92
|
+
toolCalls += messageToolCalls.length;
|
|
93
|
+
// Emit any assistant text output
|
|
94
|
+
const agentText = extractAssistantTextForProgress(finalMessage);
|
|
95
|
+
if (agentText) {
|
|
96
|
+
emit(agentText);
|
|
97
|
+
}
|
|
98
|
+
if (finalMessage.stopReason !== "toolUse") {
|
|
99
|
+
emit("done");
|
|
100
|
+
return { finalText: extractAssistantText(finalMessage).trim(), costTotal };
|
|
101
|
+
}
|
|
102
|
+
if (messageToolCalls.length === 0) {
|
|
103
|
+
emit("done");
|
|
104
|
+
return { finalText: extractAssistantText(finalMessage).trim(), costTotal };
|
|
105
|
+
}
|
|
106
|
+
const riskLevel = definition.riskLevel;
|
|
107
|
+
for (const call of messageToolCalls) {
|
|
108
|
+
if (signal.aborted)
|
|
109
|
+
break;
|
|
110
|
+
const toolDef = toolRegistry.get(call.name);
|
|
111
|
+
if (!toolDef) {
|
|
112
|
+
const msg = `tool '${call.name}' is not available to this sub-agent.`;
|
|
113
|
+
messages.push(createToolError(call, msg));
|
|
114
|
+
emit(`tool blocked: ${msg}`);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const dispatchResult = await toolDef.dispatch(call, riskLevel, signal);
|
|
118
|
+
const handleUi = (uiEvent) => {
|
|
119
|
+
if (!uiEvent)
|
|
120
|
+
return;
|
|
121
|
+
const text = formatToolUiEventForProgress(uiEvent);
|
|
122
|
+
if (text)
|
|
123
|
+
emit(text);
|
|
124
|
+
};
|
|
125
|
+
if (isPhased(dispatchResult)) {
|
|
126
|
+
handleUi(dispatchResult.startedUiEvent);
|
|
127
|
+
if (dispatchResult.uiEvents) {
|
|
128
|
+
for await (const uiEvent of dispatchResult.uiEvents) {
|
|
129
|
+
if (signal.aborted)
|
|
130
|
+
break;
|
|
131
|
+
handleUi(uiEvent);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const { toolResult, uiEvent } = await dispatchResult.run;
|
|
135
|
+
messages.push(toolResult);
|
|
136
|
+
handleUi(uiEvent);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
messages.push(dispatchResult.toolResult);
|
|
140
|
+
handleUi(dispatchResult.uiEvent);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
emit(`done (stopped after ${maxSubturns} subturns)`);
|
|
144
|
+
const lastAssistant = [...messages].reverse().find((m) => m.role === "assistant");
|
|
145
|
+
return { finalText: lastAssistant ? extractAssistantText(lastAssistant).trim() : "", costTotal };
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=subagent_engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent_engine.js","sourceRoot":"","sources":["../../src/subagents/subagent_engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/subagents/types.ts"],"names":[],"mappings":""}
|