iosm-cli 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +43 -10
  3. package/dist/cli/args.d.ts +1 -1
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +1 -1
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/core/agent-profiles.d.ts +2 -1
  8. package/dist/core/agent-profiles.d.ts.map +1 -1
  9. package/dist/core/agent-profiles.js +18 -5
  10. package/dist/core/agent-profiles.js.map +1 -1
  11. package/dist/core/agent-session.d.ts +7 -0
  12. package/dist/core/agent-session.d.ts.map +1 -1
  13. package/dist/core/agent-session.js +64 -15
  14. package/dist/core/agent-session.js.map +1 -1
  15. package/dist/core/agent-teams.d.ts.map +1 -1
  16. package/dist/core/agent-teams.js +90 -19
  17. package/dist/core/agent-teams.js.map +1 -1
  18. package/dist/core/extensions/types.d.ts +1 -1
  19. package/dist/core/extensions/types.d.ts.map +1 -1
  20. package/dist/core/extensions/types.js.map +1 -1
  21. package/dist/core/footer-data-provider.d.ts +6 -1
  22. package/dist/core/footer-data-provider.d.ts.map +1 -1
  23. package/dist/core/footer-data-provider.js +9 -0
  24. package/dist/core/footer-data-provider.js.map +1 -1
  25. package/dist/core/orchestration-limits.d.ts +6 -0
  26. package/dist/core/orchestration-limits.d.ts.map +1 -0
  27. package/dist/core/orchestration-limits.js +6 -0
  28. package/dist/core/orchestration-limits.js.map +1 -0
  29. package/dist/core/parallel-task-agent.d.ts +23 -1
  30. package/dist/core/parallel-task-agent.d.ts.map +1 -1
  31. package/dist/core/parallel-task-agent.js +110 -20
  32. package/dist/core/parallel-task-agent.js.map +1 -1
  33. package/dist/core/sdk.d.ts +6 -1
  34. package/dist/core/sdk.d.ts.map +1 -1
  35. package/dist/core/sdk.js +34 -6
  36. package/dist/core/sdk.js.map +1 -1
  37. package/dist/core/shared-memory.d.ts +2 -2
  38. package/dist/core/shared-memory.d.ts.map +1 -1
  39. package/dist/core/shared-memory.js +220 -91
  40. package/dist/core/shared-memory.js.map +1 -1
  41. package/dist/core/singular.d.ts.map +1 -1
  42. package/dist/core/singular.js +3 -1
  43. package/dist/core/singular.js.map +1 -1
  44. package/dist/core/subagents.d.ts +1 -1
  45. package/dist/core/subagents.d.ts.map +1 -1
  46. package/dist/core/subagents.js +32 -10
  47. package/dist/core/subagents.js.map +1 -1
  48. package/dist/core/swarm/planner.d.ts.map +1 -1
  49. package/dist/core/swarm/planner.js +200 -12
  50. package/dist/core/swarm/planner.js.map +1 -1
  51. package/dist/core/swarm/scheduler.d.ts +2 -0
  52. package/dist/core/swarm/scheduler.d.ts.map +1 -1
  53. package/dist/core/swarm/scheduler.js +87 -6
  54. package/dist/core/swarm/scheduler.js.map +1 -1
  55. package/dist/core/system-prompt.d.ts.map +1 -1
  56. package/dist/core/system-prompt.js +1 -0
  57. package/dist/core/system-prompt.js.map +1 -1
  58. package/dist/core/tools/ast-grep.d.ts.map +1 -1
  59. package/dist/core/tools/ast-grep.js +2 -0
  60. package/dist/core/tools/ast-grep.js.map +1 -1
  61. package/dist/core/tools/edit.d.ts +8 -4
  62. package/dist/core/tools/edit.d.ts.map +1 -1
  63. package/dist/core/tools/edit.js +18 -3
  64. package/dist/core/tools/edit.js.map +1 -1
  65. package/dist/core/tools/index.d.ts +9 -7
  66. package/dist/core/tools/index.d.ts.map +1 -1
  67. package/dist/core/tools/shared-memory.d.ts.map +1 -1
  68. package/dist/core/tools/shared-memory.js +34 -6
  69. package/dist/core/tools/shared-memory.js.map +1 -1
  70. package/dist/core/tools/task.d.ts +10 -3
  71. package/dist/core/tools/task.d.ts.map +1 -1
  72. package/dist/core/tools/task.js +830 -184
  73. package/dist/core/tools/task.js.map +1 -1
  74. package/dist/core/tools/todo.d.ts +10 -10
  75. package/dist/core/tools/todo.d.ts.map +1 -1
  76. package/dist/core/tools/todo.js +135 -17
  77. package/dist/core/tools/todo.js.map +1 -1
  78. package/dist/core/tools/yq.d.ts.map +1 -1
  79. package/dist/core/tools/yq.js +2 -0
  80. package/dist/core/tools/yq.js.map +1 -1
  81. package/dist/modes/interactive/components/footer.d.ts +1 -1
  82. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  83. package/dist/modes/interactive/components/footer.js +10 -9
  84. package/dist/modes/interactive/components/footer.js.map +1 -1
  85. package/dist/modes/interactive/interactive-mode.d.ts +22 -0
  86. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  87. package/dist/modes/interactive/interactive-mode.js +957 -75
  88. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  89. package/docs/cli-reference.md +8 -0
  90. package/docs/configuration.md +5 -1
  91. package/docs/interactive-mode.md +7 -1
  92. package/docs/orchestration-and-subagents.md +5 -0
  93. package/package.json +1 -1
@@ -15,11 +15,57 @@ function toToolResultError(error) {
15
15
  details: {},
16
16
  };
17
17
  }
18
- function skipToolCall(toolCall, stream) {
19
- const result = {
20
- content: [{ type: "text", text: "Skipped due to queued user message." }],
21
- details: {},
18
+ const STEERING_SKIP_TEXT = "Skipped due to queued user message.";
19
+ const STEERING_POLL_INTERVAL_MS = 40;
20
+ function createSteeringSkipResult() {
21
+ return {
22
+ content: [{ type: "text", text: STEERING_SKIP_TEXT }],
23
+ details: { steeringSkipped: true },
24
+ };
25
+ }
26
+ function createLinkedAbortController(primary, secondary) {
27
+ const controller = new AbortController();
28
+ const cleanup = () => {
29
+ primary.removeEventListener("abort", onAbort);
30
+ secondary.removeEventListener("abort", onAbort);
22
31
  };
32
+ const onAbort = () => {
33
+ cleanup();
34
+ controller.abort();
35
+ };
36
+ if (primary.aborted || secondary.aborted) {
37
+ controller.abort();
38
+ return { signal: controller.signal, cleanup };
39
+ }
40
+ primary.addEventListener("abort", onAbort, { once: true });
41
+ secondary.addEventListener("abort", onAbort, { once: true });
42
+ return { signal: controller.signal, cleanup };
43
+ }
44
+ function waitForSteeringPoll(signal) {
45
+ return new Promise((resolve) => {
46
+ if (signal.aborted) {
47
+ resolve();
48
+ return;
49
+ }
50
+ const timer = setTimeout(() => {
51
+ signal.removeEventListener("abort", onAbort);
52
+ resolve();
53
+ }, STEERING_POLL_INTERVAL_MS);
54
+ const onAbort = () => {
55
+ clearTimeout(timer);
56
+ signal.removeEventListener("abort", onAbort);
57
+ resolve();
58
+ };
59
+ signal.addEventListener("abort", onAbort, { once: true });
60
+ });
61
+ }
62
+ function isAbortError(error) {
63
+ if (!(error instanceof Error))
64
+ return false;
65
+ return error.message.toLowerCase().includes("aborted");
66
+ }
67
+ function skipToolCall(toolCall, stream) {
68
+ const result = createSteeringSkipResult();
23
69
  stream.push({
24
70
  type: "tool_execution_start",
25
71
  toolCallId: toolCall.id,
@@ -31,15 +77,15 @@ function skipToolCall(toolCall, stream) {
31
77
  toolCallId: toolCall.id,
32
78
  toolName: toolCall.name,
33
79
  result,
34
- isError: true,
80
+ isError: false,
35
81
  });
36
82
  const toolResultMessage = {
37
83
  role: "toolResult",
38
84
  toolCallId: toolCall.id,
39
85
  toolName: toolCall.name,
40
86
  content: result.content,
41
- details: {},
42
- isError: true,
87
+ details: result.details,
88
+ isError: false,
43
89
  timestamp: Date.now(),
44
90
  };
45
91
  stream.push({ type: "message_start", message: toolResultMessage });
@@ -113,6 +159,29 @@ async function executeToolCallsSequential(tools, toolCalls, signal, stream, getS
113
159
  return { toolResults: results, steeringMessages };
114
160
  }
115
161
  async function executeToolCallsParallelTasksOnly(tools, toolCalls, signal, stream, getSteeringMessages) {
162
+ const steeringAbortController = new AbortController();
163
+ const linkedAbort = createLinkedAbortController(signal, steeringAbortController.signal);
164
+ const executionSignal = linkedAbort.signal;
165
+ let completedCount = 0;
166
+ let steeringMessages;
167
+ const steeringWatcher = getSteeringMessages
168
+ ? (async () => {
169
+ while (completedCount < toolCalls.length && !executionSignal.aborted) {
170
+ const steering = await getSteeringMessages();
171
+ if (steering.length > 0) {
172
+ steeringMessages = steering;
173
+ if (!signal.aborted && !steeringAbortController.signal.aborted) {
174
+ steeringAbortController.abort();
175
+ }
176
+ return;
177
+ }
178
+ if (completedCount >= toolCalls.length || executionSignal.aborted) {
179
+ return;
180
+ }
181
+ await waitForSteeringPoll(executionSignal);
182
+ }
183
+ })()
184
+ : undefined;
116
185
  const executions = toolCalls.map(async (toolCall, index) => {
117
186
  const tool = tools?.find((item) => item.name === toolCall.name);
118
187
  stream.push({
@@ -128,7 +197,7 @@ async function executeToolCallsParallelTasksOnly(tools, toolCalls, signal, strea
128
197
  throw new Error(`Tool ${toolCall.name} not found`);
129
198
  }
130
199
  const validatedArgs = validateToolArguments(tool, toolCall);
131
- result = await tool.execute(toolCall.id, validatedArgs, signal, (partialResult) => {
200
+ result = await tool.execute(toolCall.id, validatedArgs, executionSignal, (partialResult) => {
132
201
  stream.push({
133
202
  type: "tool_execution_update",
134
203
  toolCallId: toolCall.id,
@@ -139,8 +208,13 @@ async function executeToolCallsParallelTasksOnly(tools, toolCalls, signal, strea
139
208
  });
140
209
  }
141
210
  catch (error) {
142
- result = toToolResultError(error);
143
- isError = true;
211
+ const interruptedBySteering = steeringAbortController.signal.aborted && !signal.aborted;
212
+ const steeringSkip = interruptedBySteering && isAbortError(error);
213
+ result = steeringSkip ? createSteeringSkipResult() : toToolResultError(error);
214
+ isError = !steeringSkip;
215
+ }
216
+ finally {
217
+ completedCount += 1;
144
218
  }
145
219
  stream.push({
146
220
  type: "tool_execution_end",
@@ -162,16 +236,29 @@ async function executeToolCallsParallelTasksOnly(tools, toolCalls, signal, strea
162
236
  stream.push({ type: "message_end", message: toolResultMessage });
163
237
  return { index, toolResultMessage };
164
238
  });
165
- const completed = await Promise.all(executions);
166
- const orderedResults = completed
167
- .slice()
168
- .sort((left, right) => left.index - right.index)
169
- .map((item) => item.toolResultMessage);
170
- const steeringMessages = getSteeringMessages ? await getSteeringMessages() : undefined;
171
- return {
172
- toolResults: orderedResults,
173
- steeringMessages: steeringMessages && steeringMessages.length > 0 ? steeringMessages : undefined,
174
- };
239
+ try {
240
+ const completed = await Promise.all(executions);
241
+ if (steeringWatcher) {
242
+ await steeringWatcher;
243
+ }
244
+ const orderedResults = completed
245
+ .slice()
246
+ .sort((left, right) => left.index - right.index)
247
+ .map((item) => item.toolResultMessage);
248
+ if (!steeringMessages && getSteeringMessages) {
249
+ const trailingSteering = await getSteeringMessages();
250
+ if (trailingSteering.length > 0) {
251
+ steeringMessages = trailingSteering;
252
+ }
253
+ }
254
+ return {
255
+ toolResults: orderedResults,
256
+ steeringMessages: steeringMessages && steeringMessages.length > 0 ? steeringMessages : undefined,
257
+ };
258
+ }
259
+ finally {
260
+ linkedAbort.cleanup();
261
+ }
175
262
  }
176
263
  async function executeToolCallsWithPolicy(tools, assistantMessage, signal, stream, getSteeringMessages) {
177
264
  const toolCalls = assistantMessage.content.filter((content) => content.type === "toolCall");
@@ -180,6 +267,9 @@ async function executeToolCallsWithPolicy(tools, assistantMessage, signal, strea
180
267
  }
181
268
  return executeToolCallsSequential(tools, toolCalls, signal, stream, getSteeringMessages);
182
269
  }
270
+ export const __parallelTaskAgentTestUtils = {
271
+ executeToolCallsWithPolicy,
272
+ };
183
273
  async function streamAssistantResponse(context, config, signal, stream, streamFn) {
184
274
  let messages = context.messages;
185
275
  if (config.transformContext) {
@@ -1 +1 @@
1
- {"version":3,"file":"parallel-task-agent.js","sourceRoot":"","sources":["../../src/core/parallel-task-agent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Agent, AgentMessage, AgentTool } from \"@mariozechner/pi-agent-core\";\nimport { EventStream, validateToolArguments } from \"@mariozechner/pi-ai\";\n\ntype ToolCallContent = {\n\ttype: \"toolCall\";\n\tid: string;\n\tname: string;\n\targuments: unknown;\n};\n\ntype ToolResultMessageLike = {\n\trole: \"toolResult\";\n\ttoolCallId: string;\n\ttoolName: string;\n\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\tdetails: unknown;\n\tisError: boolean;\n\ttimestamp: number;\n};\n\n/**\n * Parallel policy: run tool calls concurrently only when all calls are `task`.\n * This preserves deterministic behavior for mutating filesystem tools.\n */\nexport function shouldExecuteTaskCallsInParallel(toolCalls: ToolCallContent[]): boolean {\n\treturn toolCalls.length > 1 && toolCalls.every((toolCall) => toolCall.name === \"task\");\n}\n\nfunction createAgentStream(): EventStream<any, any> {\n\treturn new EventStream(\n\t\t(event) => event.type === \"agent_end\",\n\t\t(event) => (event.type === \"agent_end\" ? event.messages : []),\n\t);\n}\n\nfunction toToolResultError(error: unknown): {\n\tcontent: Array<{ type: \"text\"; text: string }>;\n\tdetails: Record<string, never>;\n} {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: error instanceof Error ? error.message : String(error) }],\n\t\tdetails: {},\n\t};\n}\n\nfunction skipToolCall(toolCall: ToolCallContent, stream: EventStream<any, any>): ToolResultMessageLike {\n\tconst result = {\n\t\tcontent: [{ type: \"text\", text: \"Skipped due to queued user message.\" }],\n\t\tdetails: {},\n\t};\n\tstream.push({\n\t\ttype: \"tool_execution_start\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\targs: toolCall.arguments,\n\t});\n\tstream.push({\n\t\ttype: \"tool_execution_end\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\tresult,\n\t\tisError: true,\n\t});\n\tconst toolResultMessage: ToolResultMessageLike = {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\tcontent: result.content,\n\t\tdetails: {},\n\t\tisError: true,\n\t\ttimestamp: Date.now(),\n\t};\n\tstream.push({ type: \"message_start\", message: toolResultMessage });\n\tstream.push({ type: \"message_end\", message: toolResultMessage });\n\treturn toolResultMessage;\n}\n\nasync function executeToolCallsSequential(\n\ttools: AgentTool<any>[] | undefined,\n\ttoolCalls: ToolCallContent[],\n\tsignal: AbortSignal,\n\tstream: EventStream<any, any>,\n\tgetSteeringMessages?: () => Promise<AgentMessage[]>,\n): Promise<{ toolResults: ToolResultMessageLike[]; steeringMessages?: AgentMessage[] }> {\n\tconst results: ToolResultMessageLike[] = [];\n\tlet steeringMessages: AgentMessage[] | undefined;\n\n\tfor (let index = 0; index < toolCalls.length; index++) {\n\t\tconst toolCall = toolCalls[index];\n\t\tconst tool = tools?.find((item) => item.name === toolCall.name);\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: toolCall.arguments,\n\t\t});\n\n\t\tlet result: any;\n\t\tlet isError = false;\n\t\ttry {\n\t\t\tif (!tool) {\n\t\t\t\tthrow new Error(`Tool ${toolCall.name} not found`);\n\t\t\t}\n\t\t\tconst validatedArgs = validateToolArguments(tool, toolCall as any);\n\t\t\tresult = await tool.execute(toolCall.id, validatedArgs, signal, (partialResult) => {\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\targs: toolCall.arguments,\n\t\t\t\t\tpartialResult,\n\t\t\t\t});\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tresult = toToolResultError(error);\n\t\t\tisError = true;\n\t\t}\n\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tresult,\n\t\t\tisError,\n\t\t});\n\t\tconst toolResultMessage: ToolResultMessageLike = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: result.content,\n\t\t\tdetails: result.details,\n\t\t\tisError,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tresults.push(toolResultMessage);\n\t\tstream.push({ type: \"message_start\", message: toolResultMessage });\n\t\tstream.push({ type: \"message_end\", message: toolResultMessage });\n\n\t\tif (getSteeringMessages) {\n\t\t\tconst steering = await getSteeringMessages();\n\t\t\tif (steering.length > 0) {\n\t\t\t\tsteeringMessages = steering;\n\t\t\t\tconst remainingCalls = toolCalls.slice(index + 1);\n\t\t\t\tfor (const skipped of remainingCalls) {\n\t\t\t\t\tresults.push(skipToolCall(skipped, stream));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { toolResults: results, steeringMessages };\n}\n\nasync function executeToolCallsParallelTasksOnly(\n\ttools: AgentTool<any>[] | undefined,\n\ttoolCalls: ToolCallContent[],\n\tsignal: AbortSignal,\n\tstream: EventStream<any, any>,\n\tgetSteeringMessages?: () => Promise<AgentMessage[]>,\n): Promise<{ toolResults: ToolResultMessageLike[]; steeringMessages?: AgentMessage[] }> {\n\tconst executions = toolCalls.map(async (toolCall, index) => {\n\t\tconst tool = tools?.find((item) => item.name === toolCall.name);\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: toolCall.arguments,\n\t\t});\n\n\t\tlet result: any;\n\t\tlet isError = false;\n\t\ttry {\n\t\t\tif (!tool) {\n\t\t\t\tthrow new Error(`Tool ${toolCall.name} not found`);\n\t\t\t}\n\t\t\tconst validatedArgs = validateToolArguments(tool, toolCall as any);\n\t\t\tresult = await tool.execute(toolCall.id, validatedArgs, signal, (partialResult) => {\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\targs: toolCall.arguments,\n\t\t\t\t\tpartialResult,\n\t\t\t\t});\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tresult = toToolResultError(error);\n\t\t\tisError = true;\n\t\t}\n\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tresult,\n\t\t\tisError,\n\t\t});\n\n\t\tconst toolResultMessage: ToolResultMessageLike = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: result.content,\n\t\t\tdetails: result.details,\n\t\t\tisError,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tstream.push({ type: \"message_start\", message: toolResultMessage });\n\t\tstream.push({ type: \"message_end\", message: toolResultMessage });\n\t\treturn { index, toolResultMessage };\n\t});\n\n\tconst completed = await Promise.all(executions);\n\tconst orderedResults = completed\n\t\t.slice()\n\t\t.sort((left, right) => left.index - right.index)\n\t\t.map((item) => item.toolResultMessage);\n\n\tconst steeringMessages = getSteeringMessages ? await getSteeringMessages() : undefined;\n\treturn {\n\t\ttoolResults: orderedResults,\n\t\tsteeringMessages: steeringMessages && steeringMessages.length > 0 ? steeringMessages : undefined,\n\t};\n}\n\nasync function executeToolCallsWithPolicy(\n\ttools: AgentTool<any>[] | undefined,\n\tassistantMessage: any,\n\tsignal: AbortSignal,\n\tstream: EventStream<any, any>,\n\tgetSteeringMessages?: () => Promise<AgentMessage[]>,\n): Promise<{ toolResults: ToolResultMessageLike[]; steeringMessages?: AgentMessage[] }> {\n\tconst toolCalls = assistantMessage.content.filter((content: any) => content.type === \"toolCall\") as ToolCallContent[];\n\tif (shouldExecuteTaskCallsInParallel(toolCalls)) {\n\t\treturn executeToolCallsParallelTasksOnly(tools, toolCalls, signal, stream, getSteeringMessages);\n\t}\n\treturn executeToolCallsSequential(tools, toolCalls, signal, stream, getSteeringMessages);\n}\n\nasync function streamAssistantResponse(\n\tcontext: any,\n\tconfig: any,\n\tsignal: AbortSignal,\n\tstream: EventStream<any, any>,\n\tstreamFn: (...args: any[]) => any,\n): Promise<any> {\n\tlet messages = context.messages;\n\tif (config.transformContext) {\n\t\tmessages = await config.transformContext(messages, signal);\n\t}\n\tconst llmMessages = await config.convertToLlm(messages);\n\tconst llmContext = {\n\t\tsystemPrompt: context.systemPrompt,\n\t\tmessages: llmMessages,\n\t\ttools: context.tools,\n\t};\n\tconst resolvedApiKey = (config.getApiKey ? await config.getApiKey(config.model.provider) : undefined) || config.apiKey;\n\tconst response = await streamFn(config.model, llmContext, {\n\t\t...config,\n\t\tapiKey: resolvedApiKey,\n\t\tsignal,\n\t});\n\n\tlet partialMessage = null;\n\tlet addedPartial = false;\n\tfor await (const event of response) {\n\t\tswitch (event.type) {\n\t\t\tcase \"start\":\n\t\t\t\tpartialMessage = event.partial;\n\t\t\t\tcontext.messages.push(partialMessage);\n\t\t\t\taddedPartial = true;\n\t\t\t\tstream.push({ type: \"message_start\", message: { ...partialMessage } });\n\t\t\t\tbreak;\n\t\t\tcase \"text_start\":\n\t\t\tcase \"text_delta\":\n\t\t\tcase \"text_end\":\n\t\t\tcase \"thinking_start\":\n\t\t\tcase \"thinking_delta\":\n\t\t\tcase \"thinking_end\":\n\t\t\tcase \"toolcall_start\":\n\t\t\tcase \"toolcall_delta\":\n\t\t\tcase \"toolcall_end\":\n\t\t\t\tif (partialMessage) {\n\t\t\t\t\tpartialMessage = event.partial;\n\t\t\t\t\tcontext.messages[context.messages.length - 1] = partialMessage;\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"message_update\",\n\t\t\t\t\t\tassistantMessageEvent: event,\n\t\t\t\t\t\tmessage: { ...partialMessage },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"done\":\n\t\t\tcase \"error\": {\n\t\t\t\tconst finalMessage = await response.result();\n\t\t\t\tif (addedPartial) {\n\t\t\t\t\tcontext.messages[context.messages.length - 1] = finalMessage;\n\t\t\t\t} else {\n\t\t\t\t\tcontext.messages.push(finalMessage);\n\t\t\t\t}\n\t\t\t\tif (!addedPartial) {\n\t\t\t\t\tstream.push({ type: \"message_start\", message: { ...finalMessage } });\n\t\t\t\t}\n\t\t\t\tstream.push({ type: \"message_end\", message: finalMessage });\n\t\t\t\treturn finalMessage;\n\t\t\t}\n\t\t}\n\t}\n\treturn await response.result();\n}\n\nasync function runLoopWithPolicy(\n\tcurrentContext: any,\n\tnewMessages: AgentMessage[],\n\tconfig: any,\n\tsignal: AbortSignal,\n\tstream: EventStream<any, any>,\n\tstreamFn: (...args: any[]) => any,\n): Promise<void> {\n\tlet firstTurn = true;\n\tlet pendingMessages = (await config.getSteeringMessages?.()) || [];\n\n\twhile (true) {\n\t\tlet hasMoreToolCalls = true;\n\t\tlet steeringAfterTools: AgentMessage[] | null = null;\n\n\t\twhile (hasMoreToolCalls || pendingMessages.length > 0) {\n\t\t\tif (!firstTurn) {\n\t\t\t\tstream.push({ type: \"turn_start\" });\n\t\t\t} else {\n\t\t\t\tfirstTurn = false;\n\t\t\t}\n\n\t\t\tif (pendingMessages.length > 0) {\n\t\t\t\tfor (const message of pendingMessages) {\n\t\t\t\t\tstream.push({ type: \"message_start\", message });\n\t\t\t\t\tstream.push({ type: \"message_end\", message });\n\t\t\t\t\tcurrentContext.messages.push(message);\n\t\t\t\t\tnewMessages.push(message);\n\t\t\t\t}\n\t\t\t\tpendingMessages = [];\n\t\t\t}\n\n\t\t\tconst message = await streamAssistantResponse(currentContext, config, signal, stream, streamFn);\n\t\t\tnewMessages.push(message);\n\t\t\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") {\n\t\t\t\tstream.push({ type: \"turn_end\", message, toolResults: [] });\n\t\t\t\tstream.push({ type: \"agent_end\", messages: newMessages });\n\t\t\t\tstream.end(newMessages);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst toolCalls = message.content.filter((content: any) => content.type === \"toolCall\");\n\t\t\thasMoreToolCalls = toolCalls.length > 0;\n\t\t\tconst toolResults: ToolResultMessageLike[] = [];\n\t\t\tif (hasMoreToolCalls) {\n\t\t\t\tconst toolExecution = await executeToolCallsWithPolicy(\n\t\t\t\t\tcurrentContext.tools,\n\t\t\t\t\tmessage,\n\t\t\t\t\tsignal,\n\t\t\t\t\tstream,\n\t\t\t\t\tconfig.getSteeringMessages,\n\t\t\t\t);\n\t\t\t\ttoolResults.push(...toolExecution.toolResults);\n\t\t\t\tsteeringAfterTools = toolExecution.steeringMessages ?? null;\n\t\t\t\tfor (const result of toolResults) {\n\t\t\t\t\tcurrentContext.messages.push(result as any);\n\t\t\t\t\tnewMessages.push(result as any);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstream.push({ type: \"turn_end\", message, toolResults });\n\t\t\tif (steeringAfterTools && steeringAfterTools.length > 0) {\n\t\t\t\tpendingMessages = steeringAfterTools;\n\t\t\t\tsteeringAfterTools = null;\n\t\t\t} else {\n\t\t\t\tpendingMessages = (await config.getSteeringMessages?.()) || [];\n\t\t\t}\n\t\t}\n\n\t\tconst followUpMessages = (await config.getFollowUpMessages?.()) || [];\n\t\tif (followUpMessages.length > 0) {\n\t\t\tpendingMessages = followUpMessages;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\n\tstream.push({ type: \"agent_end\", messages: newMessages });\n\tstream.end(newMessages);\n}\n\nfunction agentLoopWithPolicy(\n\tprompts: AgentMessage[],\n\tcontext: any,\n\tconfig: any,\n\tsignal: AbortSignal,\n\tstreamFn: (...args: any[]) => any,\n): EventStream<any, any> {\n\tconst stream = createAgentStream();\n\tvoid (async () => {\n\t\tconst newMessages = [...prompts];\n\t\tconst currentContext = {\n\t\t\t...context,\n\t\t\tmessages: [...context.messages, ...prompts],\n\t\t};\n\t\tstream.push({ type: \"agent_start\" });\n\t\tstream.push({ type: \"turn_start\" });\n\t\tfor (const prompt of prompts) {\n\t\t\tstream.push({ type: \"message_start\", message: prompt });\n\t\t\tstream.push({ type: \"message_end\", message: prompt });\n\t\t}\n\t\tawait runLoopWithPolicy(currentContext, newMessages, config, signal, stream, streamFn);\n\t})();\n\treturn stream;\n}\n\nfunction agentLoopContinueWithPolicy(\n\tcontext: any,\n\tconfig: any,\n\tsignal: AbortSignal,\n\tstreamFn: (...args: any[]) => any,\n): EventStream<any, any> {\n\tif (context.messages.length === 0) {\n\t\tthrow new Error(\"Cannot continue: no messages in context\");\n\t}\n\tif (context.messages[context.messages.length - 1].role === \"assistant\") {\n\t\tthrow new Error(\"Cannot continue from message role: assistant\");\n\t}\n\tconst stream = createAgentStream();\n\tvoid (async () => {\n\t\tconst newMessages: AgentMessage[] = [];\n\t\tconst currentContext = { ...context };\n\t\tstream.push({ type: \"agent_start\" });\n\t\tstream.push({ type: \"turn_start\" });\n\t\tawait runLoopWithPolicy(currentContext, newMessages, config, signal, stream, streamFn);\n\t})();\n\treturn stream;\n}\n\n/**\n * Patch a pi-agent-core Agent instance so multiple `task` tool calls in one assistant turn\n * execute concurrently.\n */\nexport function patchAgentForParallelTaskExecution(agent: Agent): void {\n\tconst runtime: any = agent;\n\tif (runtime.__iosmParallelTaskPatched) {\n\t\treturn;\n\t}\n\truntime.__iosmParallelTaskPatched = true;\n\n\truntime._runLoop = async function patchedRunLoop(\n\t\tmessages?: AgentMessage[],\n\t\toptions?: { skipInitialSteeringPoll?: boolean },\n\t) {\n\t\tconst self: any = this;\n\t\tconst model = self._state.model;\n\t\tif (!model) throw new Error(\"No model configured\");\n\n\t\tself.runningPrompt = new Promise<void>((resolve) => {\n\t\t\tself.resolveRunningPrompt = resolve;\n\t\t});\n\t\tself.abortController = new AbortController();\n\t\tself._state.isStreaming = true;\n\t\tself._state.streamMessage = null;\n\t\tself._state.error = undefined;\n\n\t\tconst reasoning = self._state.thinkingLevel === \"off\" ? undefined : self._state.thinkingLevel;\n\t\tconst context = {\n\t\t\tsystemPrompt: self._state.systemPrompt,\n\t\t\tmessages: self._state.messages.slice(),\n\t\t\ttools: self._state.tools,\n\t\t};\n\n\t\tlet skipInitialSteeringPoll = options?.skipInitialSteeringPoll === true;\n\t\tconst config = {\n\t\t\tmodel,\n\t\t\treasoning,\n\t\t\tsessionId: self._sessionId,\n\t\t\ttransport: self._transport,\n\t\t\tthinkingBudgets: self._thinkingBudgets,\n\t\t\tmaxRetryDelayMs: self._maxRetryDelayMs,\n\t\t\tconvertToLlm: self.convertToLlm,\n\t\t\ttransformContext: self.transformContext,\n\t\t\tgetApiKey: self.getApiKey,\n\t\t\tgetSteeringMessages: async () => {\n\t\t\t\tif (skipInitialSteeringPoll) {\n\t\t\t\t\tskipInitialSteeringPoll = false;\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\treturn self.dequeueSteeringMessages();\n\t\t\t},\n\t\t\tgetFollowUpMessages: async () => self.dequeueFollowUpMessages(),\n\t\t};\n\n\t\tlet partial: AgentMessage | null = null;\n\t\ttry {\n\t\t\tconst stream = messages\n\t\t\t\t? agentLoopWithPolicy(messages, context, config, self.abortController.signal, self.streamFn)\n\t\t\t\t: agentLoopContinueWithPolicy(context, config, self.abortController.signal, self.streamFn);\n\n\t\t\tfor await (const event of stream) {\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase \"message_start\":\n\t\t\t\t\t\tpartial = event.message;\n\t\t\t\t\t\tself._state.streamMessage = event.message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"message_update\":\n\t\t\t\t\t\tpartial = event.message;\n\t\t\t\t\t\tself._state.streamMessage = event.message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"message_end\":\n\t\t\t\t\t\tpartial = null;\n\t\t\t\t\t\tself._state.streamMessage = null;\n\t\t\t\t\t\tself.appendMessage(event.message);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tool_execution_start\": {\n\t\t\t\t\t\tconst pending = new Set(self._state.pendingToolCalls);\n\t\t\t\t\t\tpending.add(event.toolCallId);\n\t\t\t\t\t\tself._state.pendingToolCalls = pending;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"tool_execution_end\": {\n\t\t\t\t\t\tconst pending = new Set(self._state.pendingToolCalls);\n\t\t\t\t\t\tpending.delete(event.toolCallId);\n\t\t\t\t\t\tself._state.pendingToolCalls = pending;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"turn_end\":\n\t\t\t\t\t\tif (event.message.role === \"assistant\" && event.message.errorMessage) {\n\t\t\t\t\t\t\tself._state.error = event.message.errorMessage;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"agent_end\":\n\t\t\t\t\t\tself._state.isStreaming = false;\n\t\t\t\t\t\tself._state.streamMessage = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tself.emit(event);\n\t\t\t}\n\n\t\t\tif (partial && partial.role === \"assistant\" && partial.content.length > 0) {\n\t\t\t\tconst onlyEmpty = !partial.content.some(\n\t\t\t\t\t(content: any) =>\n\t\t\t\t\t\t(content.type === \"thinking\" && content.thinking.trim().length > 0) ||\n\t\t\t\t\t\t(content.type === \"text\" && content.text.trim().length > 0) ||\n\t\t\t\t\t\t(content.type === \"toolCall\" && content.name.trim().length > 0),\n\t\t\t\t);\n\t\t\t\tif (!onlyEmpty) {\n\t\t\t\t\tself.appendMessage(partial);\n\t\t\t\t} else if (self.abortController?.signal.aborted) {\n\t\t\t\t\tthrow new Error(\"Request was aborted\");\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error: any) {\n\t\t\tconst errorMessage = {\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: [{ type: \"text\", text: \"\" }],\n\t\t\t\tapi: model.api,\n\t\t\t\tprovider: model.provider,\n\t\t\t\tmodel: model.id,\n\t\t\t\tusage: {\n\t\t\t\t\tinput: 0,\n\t\t\t\t\toutput: 0,\n\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\ttotalTokens: 0,\n\t\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t\t},\n\t\t\t\tstopReason: self.abortController?.signal.aborted ? \"aborted\" : \"error\",\n\t\t\t\terrorMessage: error?.message || String(error),\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t};\n\t\t\tself.appendMessage(errorMessage as any);\n\t\t\tself._state.error = error?.message || String(error);\n\t\t\tself.emit({ type: \"agent_end\", messages: [errorMessage] });\n\t\t} finally {\n\t\t\tself._state.isStreaming = false;\n\t\t\tself._state.streamMessage = null;\n\t\t\tself._state.pendingToolCalls = new Set();\n\t\t\tself.abortController = undefined;\n\t\t\tself.resolveRunningPrompt?.();\n\t\t\tself.runningPrompt = undefined;\n\t\t\tself.resolveRunningPrompt = undefined;\n\t\t}\n\t};\n}\n"]}
1
+ {"version":3,"file":"parallel-task-agent.js","sourceRoot":"","sources":["../../src/core/parallel-task-agent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Agent, AgentMessage, AgentTool } from \"@mariozechner/pi-agent-core\";\nimport { EventStream, validateToolArguments } from \"@mariozechner/pi-ai\";\n\ntype ToolCallContent = {\n\ttype: \"toolCall\";\n\tid: string;\n\tname: string;\n\targuments: unknown;\n};\n\ntype ToolResultMessageLike = {\n\trole: \"toolResult\";\n\ttoolCallId: string;\n\ttoolName: string;\n\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\tdetails: unknown;\n\tisError: boolean;\n\ttimestamp: number;\n};\n\n/**\n * Parallel policy: run tool calls concurrently only when all calls are `task`.\n * This preserves deterministic behavior for mutating filesystem tools.\n */\nexport function shouldExecuteTaskCallsInParallel(toolCalls: ToolCallContent[]): boolean {\n\treturn toolCalls.length > 1 && toolCalls.every((toolCall) => toolCall.name === \"task\");\n}\n\nfunction createAgentStream(): EventStream<any, any> {\n\treturn new EventStream(\n\t\t(event) => event.type === \"agent_end\",\n\t\t(event) => (event.type === \"agent_end\" ? event.messages : []),\n\t);\n}\n\nfunction toToolResultError(error: unknown): {\n\tcontent: Array<{ type: \"text\"; text: string }>;\n\tdetails: Record<string, never>;\n} {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: error instanceof Error ? error.message : String(error) }],\n\t\tdetails: {},\n\t};\n}\n\nconst STEERING_SKIP_TEXT = \"Skipped due to queued user message.\";\nconst STEERING_POLL_INTERVAL_MS = 40;\n\nfunction createSteeringSkipResult(): {\n\tcontent: Array<{ type: \"text\"; text: string }>;\n\tdetails: { steeringSkipped: true };\n} {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: STEERING_SKIP_TEXT }],\n\t\tdetails: { steeringSkipped: true },\n\t};\n}\n\nfunction createLinkedAbortController(\n\tprimary: AbortSignal,\n\tsecondary: AbortSignal,\n): { signal: AbortSignal; cleanup: () => void } {\n\tconst controller = new AbortController();\n\tconst cleanup = () => {\n\t\tprimary.removeEventListener(\"abort\", onAbort);\n\t\tsecondary.removeEventListener(\"abort\", onAbort);\n\t};\n\tconst onAbort = () => {\n\t\tcleanup();\n\t\tcontroller.abort();\n\t};\n\tif (primary.aborted || secondary.aborted) {\n\t\tcontroller.abort();\n\t\treturn { signal: controller.signal, cleanup };\n\t}\n\tprimary.addEventListener(\"abort\", onAbort, { once: true });\n\tsecondary.addEventListener(\"abort\", onAbort, { once: true });\n\treturn { signal: controller.signal, cleanup };\n}\n\nfunction waitForSteeringPoll(signal: AbortSignal): Promise<void> {\n\treturn new Promise((resolve) => {\n\t\tif (signal.aborted) {\n\t\t\tresolve();\n\t\t\treturn;\n\t\t}\n\t\tconst timer = setTimeout(() => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, STEERING_POLL_INTERVAL_MS);\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t};\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nfunction isAbortError(error: unknown): boolean {\n\tif (!(error instanceof Error)) return false;\n\treturn error.message.toLowerCase().includes(\"aborted\");\n}\n\nfunction skipToolCall(toolCall: ToolCallContent, stream: EventStream<any, any>): ToolResultMessageLike {\n\tconst result = createSteeringSkipResult();\n\tstream.push({\n\t\ttype: \"tool_execution_start\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\targs: toolCall.arguments,\n\t});\n\tstream.push({\n\t\ttype: \"tool_execution_end\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\tresult,\n\t\tisError: false,\n\t});\n\tconst toolResultMessage: ToolResultMessageLike = {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\tcontent: result.content,\n\t\tdetails: result.details,\n\t\tisError: false,\n\t\ttimestamp: Date.now(),\n\t};\n\tstream.push({ type: \"message_start\", message: toolResultMessage });\n\tstream.push({ type: \"message_end\", message: toolResultMessage });\n\treturn toolResultMessage;\n}\n\nasync function executeToolCallsSequential(\n\ttools: AgentTool<any>[] | undefined,\n\ttoolCalls: ToolCallContent[],\n\tsignal: AbortSignal,\n\tstream: EventStream<any, any>,\n\tgetSteeringMessages?: () => Promise<AgentMessage[]>,\n): Promise<{ toolResults: ToolResultMessageLike[]; steeringMessages?: AgentMessage[] }> {\n\tconst results: ToolResultMessageLike[] = [];\n\tlet steeringMessages: AgentMessage[] | undefined;\n\n\tfor (let index = 0; index < toolCalls.length; index++) {\n\t\tconst toolCall = toolCalls[index];\n\t\tconst tool = tools?.find((item) => item.name === toolCall.name);\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: toolCall.arguments,\n\t\t});\n\n\t\tlet result: any;\n\t\tlet isError = false;\n\t\ttry {\n\t\t\tif (!tool) {\n\t\t\t\tthrow new Error(`Tool ${toolCall.name} not found`);\n\t\t\t}\n\t\t\tconst validatedArgs = validateToolArguments(tool, toolCall as any);\n\t\t\tresult = await tool.execute(toolCall.id, validatedArgs, signal, (partialResult) => {\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\targs: toolCall.arguments,\n\t\t\t\t\tpartialResult,\n\t\t\t\t});\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tresult = toToolResultError(error);\n\t\t\tisError = true;\n\t\t}\n\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tresult,\n\t\t\tisError,\n\t\t});\n\t\tconst toolResultMessage: ToolResultMessageLike = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: result.content,\n\t\t\tdetails: result.details,\n\t\t\tisError,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tresults.push(toolResultMessage);\n\t\tstream.push({ type: \"message_start\", message: toolResultMessage });\n\t\tstream.push({ type: \"message_end\", message: toolResultMessage });\n\n\t\tif (getSteeringMessages) {\n\t\t\tconst steering = await getSteeringMessages();\n\t\t\tif (steering.length > 0) {\n\t\t\t\tsteeringMessages = steering;\n\t\t\t\tconst remainingCalls = toolCalls.slice(index + 1);\n\t\t\t\tfor (const skipped of remainingCalls) {\n\t\t\t\t\tresults.push(skipToolCall(skipped, stream));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { toolResults: results, steeringMessages };\n}\n\nasync function executeToolCallsParallelTasksOnly(\n\ttools: AgentTool<any>[] | undefined,\n\ttoolCalls: ToolCallContent[],\n\tsignal: AbortSignal,\n\tstream: EventStream<any, any>,\n\tgetSteeringMessages?: () => Promise<AgentMessage[]>,\n): Promise<{ toolResults: ToolResultMessageLike[]; steeringMessages?: AgentMessage[] }> {\n\tconst steeringAbortController = new AbortController();\n\tconst linkedAbort = createLinkedAbortController(signal, steeringAbortController.signal);\n\tconst executionSignal = linkedAbort.signal;\n\tlet completedCount = 0;\n\tlet steeringMessages: AgentMessage[] | undefined;\n\n\tconst steeringWatcher = getSteeringMessages\n\t\t? (async () => {\n\t\t\t\twhile (completedCount < toolCalls.length && !executionSignal.aborted) {\n\t\t\t\t\tconst steering = await getSteeringMessages();\n\t\t\t\t\tif (steering.length > 0) {\n\t\t\t\t\t\tsteeringMessages = steering;\n\t\t\t\t\t\tif (!signal.aborted && !steeringAbortController.signal.aborted) {\n\t\t\t\t\t\t\tsteeringAbortController.abort();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (completedCount >= toolCalls.length || executionSignal.aborted) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tawait waitForSteeringPoll(executionSignal);\n\t\t\t\t}\n\t\t\t})()\n\t\t: undefined;\n\n\tconst executions = toolCalls.map(async (toolCall, index) => {\n\t\tconst tool = tools?.find((item) => item.name === toolCall.name);\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: toolCall.arguments,\n\t\t});\n\n\t\tlet result: any;\n\t\tlet isError = false;\n\t\ttry {\n\t\t\tif (!tool) {\n\t\t\t\tthrow new Error(`Tool ${toolCall.name} not found`);\n\t\t\t}\n\t\t\tconst validatedArgs = validateToolArguments(tool, toolCall as any);\n\t\t\tresult = await tool.execute(toolCall.id, validatedArgs, executionSignal, (partialResult) => {\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\targs: toolCall.arguments,\n\t\t\t\t\tpartialResult,\n\t\t\t\t});\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst interruptedBySteering = steeringAbortController.signal.aborted && !signal.aborted;\n\t\t\tconst steeringSkip = interruptedBySteering && isAbortError(error);\n\t\t\tresult = steeringSkip ? createSteeringSkipResult() : toToolResultError(error);\n\t\t\tisError = !steeringSkip;\n\t\t} finally {\n\t\t\tcompletedCount += 1;\n\t\t}\n\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tresult,\n\t\t\tisError,\n\t\t});\n\n\t\tconst toolResultMessage: ToolResultMessageLike = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: result.content,\n\t\t\tdetails: result.details,\n\t\t\tisError,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tstream.push({ type: \"message_start\", message: toolResultMessage });\n\t\tstream.push({ type: \"message_end\", message: toolResultMessage });\n\t\treturn { index, toolResultMessage };\n\t});\n\n\ttry {\n\t\tconst completed = await Promise.all(executions);\n\t\tif (steeringWatcher) {\n\t\t\tawait steeringWatcher;\n\t\t}\n\t\tconst orderedResults = completed\n\t\t\t.slice()\n\t\t\t.sort((left, right) => left.index - right.index)\n\t\t\t.map((item) => item.toolResultMessage);\n\n\t\tif (!steeringMessages && getSteeringMessages) {\n\t\t\tconst trailingSteering = await getSteeringMessages();\n\t\t\tif (trailingSteering.length > 0) {\n\t\t\t\tsteeringMessages = trailingSteering;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\ttoolResults: orderedResults,\n\t\t\tsteeringMessages: steeringMessages && steeringMessages.length > 0 ? steeringMessages : undefined,\n\t\t};\n\t} finally {\n\t\tlinkedAbort.cleanup();\n\t}\n}\n\nasync function executeToolCallsWithPolicy(\n\ttools: AgentTool<any>[] | undefined,\n\tassistantMessage: any,\n\tsignal: AbortSignal,\n\tstream: EventStream<any, any>,\n\tgetSteeringMessages?: () => Promise<AgentMessage[]>,\n): Promise<{ toolResults: ToolResultMessageLike[]; steeringMessages?: AgentMessage[] }> {\n\tconst toolCalls = assistantMessage.content.filter((content: any) => content.type === \"toolCall\") as ToolCallContent[];\n\tif (shouldExecuteTaskCallsInParallel(toolCalls)) {\n\t\treturn executeToolCallsParallelTasksOnly(tools, toolCalls, signal, stream, getSteeringMessages);\n\t}\n\treturn executeToolCallsSequential(tools, toolCalls, signal, stream, getSteeringMessages);\n}\n\nexport const __parallelTaskAgentTestUtils = {\n\texecuteToolCallsWithPolicy,\n};\n\nasync function streamAssistantResponse(\n\tcontext: any,\n\tconfig: any,\n\tsignal: AbortSignal,\n\tstream: EventStream<any, any>,\n\tstreamFn: (...args: any[]) => any,\n): Promise<any> {\n\tlet messages = context.messages;\n\tif (config.transformContext) {\n\t\tmessages = await config.transformContext(messages, signal);\n\t}\n\tconst llmMessages = await config.convertToLlm(messages);\n\tconst llmContext = {\n\t\tsystemPrompt: context.systemPrompt,\n\t\tmessages: llmMessages,\n\t\ttools: context.tools,\n\t};\n\tconst resolvedApiKey = (config.getApiKey ? await config.getApiKey(config.model.provider) : undefined) || config.apiKey;\n\tconst response = await streamFn(config.model, llmContext, {\n\t\t...config,\n\t\tapiKey: resolvedApiKey,\n\t\tsignal,\n\t});\n\n\tlet partialMessage = null;\n\tlet addedPartial = false;\n\tfor await (const event of response) {\n\t\tswitch (event.type) {\n\t\t\tcase \"start\":\n\t\t\t\tpartialMessage = event.partial;\n\t\t\t\tcontext.messages.push(partialMessage);\n\t\t\t\taddedPartial = true;\n\t\t\t\tstream.push({ type: \"message_start\", message: { ...partialMessage } });\n\t\t\t\tbreak;\n\t\t\tcase \"text_start\":\n\t\t\tcase \"text_delta\":\n\t\t\tcase \"text_end\":\n\t\t\tcase \"thinking_start\":\n\t\t\tcase \"thinking_delta\":\n\t\t\tcase \"thinking_end\":\n\t\t\tcase \"toolcall_start\":\n\t\t\tcase \"toolcall_delta\":\n\t\t\tcase \"toolcall_end\":\n\t\t\t\tif (partialMessage) {\n\t\t\t\t\tpartialMessage = event.partial;\n\t\t\t\t\tcontext.messages[context.messages.length - 1] = partialMessage;\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"message_update\",\n\t\t\t\t\t\tassistantMessageEvent: event,\n\t\t\t\t\t\tmessage: { ...partialMessage },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"done\":\n\t\t\tcase \"error\": {\n\t\t\t\tconst finalMessage = await response.result();\n\t\t\t\tif (addedPartial) {\n\t\t\t\t\tcontext.messages[context.messages.length - 1] = finalMessage;\n\t\t\t\t} else {\n\t\t\t\t\tcontext.messages.push(finalMessage);\n\t\t\t\t}\n\t\t\t\tif (!addedPartial) {\n\t\t\t\t\tstream.push({ type: \"message_start\", message: { ...finalMessage } });\n\t\t\t\t}\n\t\t\t\tstream.push({ type: \"message_end\", message: finalMessage });\n\t\t\t\treturn finalMessage;\n\t\t\t}\n\t\t}\n\t}\n\treturn await response.result();\n}\n\nasync function runLoopWithPolicy(\n\tcurrentContext: any,\n\tnewMessages: AgentMessage[],\n\tconfig: any,\n\tsignal: AbortSignal,\n\tstream: EventStream<any, any>,\n\tstreamFn: (...args: any[]) => any,\n): Promise<void> {\n\tlet firstTurn = true;\n\tlet pendingMessages = (await config.getSteeringMessages?.()) || [];\n\n\twhile (true) {\n\t\tlet hasMoreToolCalls = true;\n\t\tlet steeringAfterTools: AgentMessage[] | null = null;\n\n\t\twhile (hasMoreToolCalls || pendingMessages.length > 0) {\n\t\t\tif (!firstTurn) {\n\t\t\t\tstream.push({ type: \"turn_start\" });\n\t\t\t} else {\n\t\t\t\tfirstTurn = false;\n\t\t\t}\n\n\t\t\tif (pendingMessages.length > 0) {\n\t\t\t\tfor (const message of pendingMessages) {\n\t\t\t\t\tstream.push({ type: \"message_start\", message });\n\t\t\t\t\tstream.push({ type: \"message_end\", message });\n\t\t\t\t\tcurrentContext.messages.push(message);\n\t\t\t\t\tnewMessages.push(message);\n\t\t\t\t}\n\t\t\t\tpendingMessages = [];\n\t\t\t}\n\n\t\t\tconst message = await streamAssistantResponse(currentContext, config, signal, stream, streamFn);\n\t\t\tnewMessages.push(message);\n\t\t\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") {\n\t\t\t\tstream.push({ type: \"turn_end\", message, toolResults: [] });\n\t\t\t\tstream.push({ type: \"agent_end\", messages: newMessages });\n\t\t\t\tstream.end(newMessages);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst toolCalls = message.content.filter((content: any) => content.type === \"toolCall\");\n\t\t\thasMoreToolCalls = toolCalls.length > 0;\n\t\t\tconst toolResults: ToolResultMessageLike[] = [];\n\t\t\tif (hasMoreToolCalls) {\n\t\t\t\tconst toolExecution = await executeToolCallsWithPolicy(\n\t\t\t\t\tcurrentContext.tools,\n\t\t\t\t\tmessage,\n\t\t\t\t\tsignal,\n\t\t\t\t\tstream,\n\t\t\t\t\tconfig.getSteeringMessages,\n\t\t\t\t);\n\t\t\t\ttoolResults.push(...toolExecution.toolResults);\n\t\t\t\tsteeringAfterTools = toolExecution.steeringMessages ?? null;\n\t\t\t\tfor (const result of toolResults) {\n\t\t\t\t\tcurrentContext.messages.push(result as any);\n\t\t\t\t\tnewMessages.push(result as any);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstream.push({ type: \"turn_end\", message, toolResults });\n\t\t\tif (steeringAfterTools && steeringAfterTools.length > 0) {\n\t\t\t\tpendingMessages = steeringAfterTools;\n\t\t\t\tsteeringAfterTools = null;\n\t\t\t} else {\n\t\t\t\tpendingMessages = (await config.getSteeringMessages?.()) || [];\n\t\t\t}\n\t\t}\n\n\t\tconst followUpMessages = (await config.getFollowUpMessages?.()) || [];\n\t\tif (followUpMessages.length > 0) {\n\t\t\tpendingMessages = followUpMessages;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\n\tstream.push({ type: \"agent_end\", messages: newMessages });\n\tstream.end(newMessages);\n}\n\nfunction agentLoopWithPolicy(\n\tprompts: AgentMessage[],\n\tcontext: any,\n\tconfig: any,\n\tsignal: AbortSignal,\n\tstreamFn: (...args: any[]) => any,\n): EventStream<any, any> {\n\tconst stream = createAgentStream();\n\tvoid (async () => {\n\t\tconst newMessages = [...prompts];\n\t\tconst currentContext = {\n\t\t\t...context,\n\t\t\tmessages: [...context.messages, ...prompts],\n\t\t};\n\t\tstream.push({ type: \"agent_start\" });\n\t\tstream.push({ type: \"turn_start\" });\n\t\tfor (const prompt of prompts) {\n\t\t\tstream.push({ type: \"message_start\", message: prompt });\n\t\t\tstream.push({ type: \"message_end\", message: prompt });\n\t\t}\n\t\tawait runLoopWithPolicy(currentContext, newMessages, config, signal, stream, streamFn);\n\t})();\n\treturn stream;\n}\n\nfunction agentLoopContinueWithPolicy(\n\tcontext: any,\n\tconfig: any,\n\tsignal: AbortSignal,\n\tstreamFn: (...args: any[]) => any,\n): EventStream<any, any> {\n\tif (context.messages.length === 0) {\n\t\tthrow new Error(\"Cannot continue: no messages in context\");\n\t}\n\tif (context.messages[context.messages.length - 1].role === \"assistant\") {\n\t\tthrow new Error(\"Cannot continue from message role: assistant\");\n\t}\n\tconst stream = createAgentStream();\n\tvoid (async () => {\n\t\tconst newMessages: AgentMessage[] = [];\n\t\tconst currentContext = { ...context };\n\t\tstream.push({ type: \"agent_start\" });\n\t\tstream.push({ type: \"turn_start\" });\n\t\tawait runLoopWithPolicy(currentContext, newMessages, config, signal, stream, streamFn);\n\t})();\n\treturn stream;\n}\n\n/**\n * Patch a pi-agent-core Agent instance so multiple `task` tool calls in one assistant turn\n * execute concurrently.\n */\nexport function patchAgentForParallelTaskExecution(agent: Agent): void {\n\tconst runtime: any = agent;\n\tif (runtime.__iosmParallelTaskPatched) {\n\t\treturn;\n\t}\n\truntime.__iosmParallelTaskPatched = true;\n\n\truntime._runLoop = async function patchedRunLoop(\n\t\tmessages?: AgentMessage[],\n\t\toptions?: { skipInitialSteeringPoll?: boolean },\n\t) {\n\t\tconst self: any = this;\n\t\tconst model = self._state.model;\n\t\tif (!model) throw new Error(\"No model configured\");\n\n\t\tself.runningPrompt = new Promise<void>((resolve) => {\n\t\t\tself.resolveRunningPrompt = resolve;\n\t\t});\n\t\tself.abortController = new AbortController();\n\t\tself._state.isStreaming = true;\n\t\tself._state.streamMessage = null;\n\t\tself._state.error = undefined;\n\n\t\tconst reasoning = self._state.thinkingLevel === \"off\" ? undefined : self._state.thinkingLevel;\n\t\tconst context = {\n\t\t\tsystemPrompt: self._state.systemPrompt,\n\t\t\tmessages: self._state.messages.slice(),\n\t\t\ttools: self._state.tools,\n\t\t};\n\n\t\tlet skipInitialSteeringPoll = options?.skipInitialSteeringPoll === true;\n\t\tconst config = {\n\t\t\tmodel,\n\t\t\treasoning,\n\t\t\tsessionId: self._sessionId,\n\t\t\ttransport: self._transport,\n\t\t\tthinkingBudgets: self._thinkingBudgets,\n\t\t\tmaxRetryDelayMs: self._maxRetryDelayMs,\n\t\t\tconvertToLlm: self.convertToLlm,\n\t\t\ttransformContext: self.transformContext,\n\t\t\tgetApiKey: self.getApiKey,\n\t\t\tgetSteeringMessages: async () => {\n\t\t\t\tif (skipInitialSteeringPoll) {\n\t\t\t\t\tskipInitialSteeringPoll = false;\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\treturn self.dequeueSteeringMessages();\n\t\t\t},\n\t\t\tgetFollowUpMessages: async () => self.dequeueFollowUpMessages(),\n\t\t};\n\n\t\tlet partial: AgentMessage | null = null;\n\t\ttry {\n\t\t\tconst stream = messages\n\t\t\t\t? agentLoopWithPolicy(messages, context, config, self.abortController.signal, self.streamFn)\n\t\t\t\t: agentLoopContinueWithPolicy(context, config, self.abortController.signal, self.streamFn);\n\n\t\t\tfor await (const event of stream) {\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase \"message_start\":\n\t\t\t\t\t\tpartial = event.message;\n\t\t\t\t\t\tself._state.streamMessage = event.message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"message_update\":\n\t\t\t\t\t\tpartial = event.message;\n\t\t\t\t\t\tself._state.streamMessage = event.message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"message_end\":\n\t\t\t\t\t\tpartial = null;\n\t\t\t\t\t\tself._state.streamMessage = null;\n\t\t\t\t\t\tself.appendMessage(event.message);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tool_execution_start\": {\n\t\t\t\t\t\tconst pending = new Set(self._state.pendingToolCalls);\n\t\t\t\t\t\tpending.add(event.toolCallId);\n\t\t\t\t\t\tself._state.pendingToolCalls = pending;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"tool_execution_end\": {\n\t\t\t\t\t\tconst pending = new Set(self._state.pendingToolCalls);\n\t\t\t\t\t\tpending.delete(event.toolCallId);\n\t\t\t\t\t\tself._state.pendingToolCalls = pending;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"turn_end\":\n\t\t\t\t\t\tif (event.message.role === \"assistant\" && event.message.errorMessage) {\n\t\t\t\t\t\t\tself._state.error = event.message.errorMessage;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"agent_end\":\n\t\t\t\t\t\tself._state.isStreaming = false;\n\t\t\t\t\t\tself._state.streamMessage = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tself.emit(event);\n\t\t\t}\n\n\t\t\tif (partial && partial.role === \"assistant\" && partial.content.length > 0) {\n\t\t\t\tconst onlyEmpty = !partial.content.some(\n\t\t\t\t\t(content: any) =>\n\t\t\t\t\t\t(content.type === \"thinking\" && content.thinking.trim().length > 0) ||\n\t\t\t\t\t\t(content.type === \"text\" && content.text.trim().length > 0) ||\n\t\t\t\t\t\t(content.type === \"toolCall\" && content.name.trim().length > 0),\n\t\t\t\t);\n\t\t\t\tif (!onlyEmpty) {\n\t\t\t\t\tself.appendMessage(partial);\n\t\t\t\t} else if (self.abortController?.signal.aborted) {\n\t\t\t\t\tthrow new Error(\"Request was aborted\");\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error: any) {\n\t\t\tconst errorMessage = {\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: [{ type: \"text\", text: \"\" }],\n\t\t\t\tapi: model.api,\n\t\t\t\tprovider: model.provider,\n\t\t\t\tmodel: model.id,\n\t\t\t\tusage: {\n\t\t\t\t\tinput: 0,\n\t\t\t\t\toutput: 0,\n\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\ttotalTokens: 0,\n\t\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t\t},\n\t\t\t\tstopReason: self.abortController?.signal.aborted ? \"aborted\" : \"error\",\n\t\t\t\terrorMessage: error?.message || String(error),\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t};\n\t\t\tself.appendMessage(errorMessage as any);\n\t\t\tself._state.error = error?.message || String(error);\n\t\t\tself.emit({ type: \"agent_end\", messages: [errorMessage] });\n\t\t} finally {\n\t\t\tself._state.isStreaming = false;\n\t\t\tself._state.streamMessage = null;\n\t\t\tself._state.pendingToolCalls = new Set();\n\t\t\tself.abortController = undefined;\n\t\t\tself.resolveRunningPrompt?.();\n\t\t\tself.runningPrompt = undefined;\n\t\t\tself.resolveRunningPrompt = undefined;\n\t\t}\n\t};\n}\n"]}
@@ -44,7 +44,7 @@ export interface CreateAgentSessionOptions {
44
44
  settingsManager?: SettingsManager;
45
45
  /**
46
46
  * Agent profile name. Overrides tools and thinkingLevel with profile defaults.
47
- * Profiles: explore, plan, iosm_analyst, iosm_verifier, cycle_planner, full (default).
47
+ * Profiles: explore, plan, iosm_analyst, iosm_verifier, cycle_planner, meta, full (default).
48
48
  */
49
49
  profile?: AgentProfileName | string;
50
50
  /**
@@ -62,6 +62,11 @@ export interface CreateAgentSessionResult {
62
62
  /** Warning if session was restored with a different model than saved */
63
63
  modelFallbackMessage?: string;
64
64
  }
65
+ export declare function collectSubagentRenderableText(message: {
66
+ role: string;
67
+ content: unknown;
68
+ display?: boolean;
69
+ }): string[];
65
70
  export type { ExtensionAPI, ExtensionCommandContext, ExtensionContext, ExtensionFactory, SlashCommandInfo, SlashCommandLocation, SlashCommandSource, ToolDefinition, } from "./extensions/index.js";
66
71
  export type { PromptTemplate } from "./prompt-templates.js";
67
72
  export type { Skill } from "./skills.js";
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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"}
package/dist/core/sdk.js CHANGED
@@ -18,6 +18,29 @@ import { createSharedMemoryReadTool, createSharedMemoryWriteTool } from "./tools
18
18
  import { patchAgentForParallelTaskExecution } from "./parallel-task-agent.js";
19
19
  import { allTools, astGrepTool, bashTool, codingTools, combyTool, createAstGrepTool, createBashTool, createCodingTools, createCombyTool, createEditTool, createFdTool, createFindTool, createGrepTool, createJqTool, createLsTool, createReadOnlyTools, createReadTool, createRgTool, createSedTool, createSemgrepTool, createSemanticSearchTool, createTaskTool, createToolsFromNames, createWriteTool, editTool, fdTool, findTool, grepTool, jqTool, lsTool, readOnlyTools, readTool, rgTool, sedTool, semanticSearchTool, semgrepTool, yqTool, createYqTool, writeTool, } from "./tools/index.js";
20
20
  import { getAgentProfile } from "./agent-profiles.js";
21
+ export function collectSubagentRenderableText(message) {
22
+ if (message.role === "assistant") {
23
+ if (!Array.isArray(message.content))
24
+ return [];
25
+ return message.content
26
+ .filter((part) => part?.type === "text" && typeof part.text === "string")
27
+ .map((part) => part.text.trim())
28
+ .filter((text) => text.length > 0);
29
+ }
30
+ if (message.role === "custom" && message.display !== false) {
31
+ if (typeof message.content === "string") {
32
+ const text = message.content.trim();
33
+ return text.length > 0 ? [text] : [];
34
+ }
35
+ if (Array.isArray(message.content)) {
36
+ return message.content
37
+ .filter((part) => part?.type === "text" && typeof part.text === "string")
38
+ .map((part) => part.text.trim())
39
+ .filter((text) => text.length > 0);
40
+ }
41
+ }
42
+ return [];
43
+ }
21
44
  export { createAskUserTool,
22
45
  // Pre-built tools (use process.cwd())
23
46
  readTool, bashTool, editTool, writeTool, grepTool, findTool, lsTool, rgTool, fdTool, astGrepTool, combyTool, jqTool, yqTool, semgrepTool, sedTool, semanticSearchTool, codingTools, readOnlyTools, allTools as allBuiltInTools,
@@ -346,6 +369,7 @@ export async function createAgentSession(options = {}) {
346
369
  authStorage,
347
370
  modelRegistry,
348
371
  model: subModel,
372
+ profile: runnerOptions.profileName,
349
373
  tools: createToolsFromNames(runnerOptions.cwd, runnerOptions.tools, {
350
374
  semantic: { authStorage, agentDir },
351
375
  }),
@@ -375,6 +399,7 @@ export async function createAgentSession(options = {}) {
375
399
  assistantMessages: 0,
376
400
  activeTool: undefined,
377
401
  };
402
+ const displayFallbackChunks = [];
378
403
  const trimInline = (value, max = 60) => {
379
404
  const compact = value.trim().replace(/\s+/g, " ");
380
405
  return compact.length > max ? `${compact.slice(0, Math.max(1, max - 3))}...` : compact;
@@ -419,15 +444,14 @@ export async function createAgentSession(options = {}) {
419
444
  sub.subscribe((event) => {
420
445
  if (event.type === "message_end" && event.message.role === "assistant") {
421
446
  progressState.assistantMessages += 1;
422
- for (const part of event.message.content) {
423
- if (part.type === "text" && part.text.trim()) {
424
- chunks.push(part.text.trim());
425
- }
426
- }
447
+ chunks.push(...collectSubagentRenderableText(event.message));
427
448
  if (chunks.length > 0) {
428
449
  emitProgress("responding", "drafting response", undefined);
429
450
  }
430
451
  }
452
+ if (event.type === "message_end" && event.message.role === "custom") {
453
+ displayFallbackChunks.push(...collectSubagentRenderableText(event.message));
454
+ }
431
455
  if (event.type === "tool_execution_start") {
432
456
  progressState.toolCallsStarted += 1;
433
457
  const toolName = event.toolName ?? "tool";
@@ -446,8 +470,9 @@ export async function createAgentSession(options = {}) {
446
470
  }
447
471
  emitProgress("responding", "finalizing response", undefined);
448
472
  const sessionId = sub.sessionManager.getSessionId();
473
+ const outputChunks = chunks.length > 0 ? chunks : displayFallbackChunks;
449
474
  return {
450
- output: chunks.join("\n\n"),
475
+ output: outputChunks.join("\n\n"),
451
476
  sessionId,
452
477
  stats: {
453
478
  toolCallsStarted: progressState.toolCallsStarted,
@@ -482,6 +507,8 @@ export async function createAgentSession(options = {}) {
482
507
  description: agent.description,
483
508
  })),
484
509
  getMetaMessages: () => sessionRef?.getMetaMessages() ?? [],
510
+ hostProfileName: profile?.name,
511
+ getHostProfileName: () => sessionRef?.profileName ?? profile?.name,
485
512
  })
486
513
  : undefined;
487
514
  // Wire in ask_user, task tool, and any caller-supplied custom tools
@@ -510,6 +537,7 @@ export async function createAgentSession(options = {}) {
510
537
  extensionRunnerRef,
511
538
  systemPromptSuffix: profile?.systemPromptAppend || undefined,
512
539
  iosmAutopilotEnabled: profile?.name === "iosm",
540
+ profileName: profile?.name,
513
541
  });
514
542
  sessionRef = session;
515
543
  const extensionsResult = resourceLoader.getExtensions();