@prestyj/cli 5.4.1 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +25 -12
  2. package/dist/app-sidecar.js +244 -74
  3. package/dist/app-sidecar.js.map +1 -1
  4. package/dist/chat-agents/general.d.ts +7 -0
  5. package/dist/chat-agents/general.d.ts.map +1 -0
  6. package/dist/chat-agents/general.js +16 -0
  7. package/dist/chat-agents/general.js.map +1 -0
  8. package/dist/chat-agents/general.test.d.ts +2 -0
  9. package/dist/chat-agents/general.test.d.ts.map +1 -0
  10. package/dist/chat-agents/general.test.js +47 -0
  11. package/dist/chat-agents/general.test.js.map +1 -0
  12. package/dist/chat-agents/index.d.ts +11 -0
  13. package/dist/chat-agents/index.d.ts.map +1 -0
  14. package/dist/chat-agents/index.js +89 -0
  15. package/dist/chat-agents/index.js.map +1 -0
  16. package/dist/chat-agents/memory.d.ts +53 -0
  17. package/dist/chat-agents/memory.d.ts.map +1 -0
  18. package/dist/chat-agents/memory.js +362 -0
  19. package/dist/chat-agents/memory.js.map +1 -0
  20. package/dist/chat-agents/memory.test.d.ts +2 -0
  21. package/dist/chat-agents/memory.test.d.ts.map +1 -0
  22. package/dist/chat-agents/memory.test.js +155 -0
  23. package/dist/chat-agents/memory.test.js.map +1 -0
  24. package/dist/chat-agents/research.d.ts +7 -0
  25. package/dist/chat-agents/research.d.ts.map +1 -0
  26. package/dist/chat-agents/research.js +18 -0
  27. package/dist/chat-agents/research.js.map +1 -0
  28. package/dist/chat-agents/shared.d.ts +11 -0
  29. package/dist/chat-agents/shared.d.ts.map +1 -0
  30. package/dist/chat-agents/shared.js +48 -0
  31. package/dist/chat-agents/shared.js.map +1 -0
  32. package/dist/chat-agents/specialists.test.d.ts +2 -0
  33. package/dist/chat-agents/specialists.test.d.ts.map +1 -0
  34. package/dist/chat-agents/specialists.test.js +97 -0
  35. package/dist/chat-agents/specialists.test.js.map +1 -0
  36. package/dist/chat-agents/therapist.d.ts +7 -0
  37. package/dist/chat-agents/therapist.d.ts.map +1 -0
  38. package/dist/chat-agents/therapist.js +20 -0
  39. package/dist/chat-agents/therapist.js.map +1 -0
  40. package/dist/chat-agents/types.d.ts +4 -0
  41. package/dist/chat-agents/types.d.ts.map +1 -0
  42. package/dist/chat-agents/types.js +7 -0
  43. package/dist/chat-agents/types.js.map +1 -0
  44. package/dist/cli/auth.js +1 -1
  45. package/dist/cli/auth.js.map +1 -1
  46. package/dist/cli.d.ts.map +1 -1
  47. package/dist/cli.js +72 -22
  48. package/dist/cli.js.map +1 -1
  49. package/dist/core/agent-session-memory-tail.test.d.ts +2 -0
  50. package/dist/core/agent-session-memory-tail.test.d.ts.map +1 -0
  51. package/dist/core/agent-session-memory-tail.test.js +122 -0
  52. package/dist/core/agent-session-memory-tail.test.js.map +1 -0
  53. package/dist/core/agent-session-subagent-policy.test.d.ts +2 -0
  54. package/dist/core/agent-session-subagent-policy.test.d.ts.map +1 -0
  55. package/dist/core/agent-session-subagent-policy.test.js +36 -0
  56. package/dist/core/agent-session-subagent-policy.test.js.map +1 -0
  57. package/dist/core/agent-session.d.ts +37 -8
  58. package/dist/core/agent-session.d.ts.map +1 -1
  59. package/dist/core/agent-session.js +168 -109
  60. package/dist/core/agent-session.js.map +1 -1
  61. package/dist/core/agents.d.ts +1 -1
  62. package/dist/core/agents.d.ts.map +1 -1
  63. package/dist/core/agents.js +4 -2
  64. package/dist/core/agents.js.map +1 -1
  65. package/dist/core/auth-providers.js +5 -5
  66. package/dist/core/auth-providers.js.map +1 -1
  67. package/dist/core/compaction/compactor.d.ts +7 -0
  68. package/dist/core/compaction/compactor.d.ts.map +1 -1
  69. package/dist/core/compaction/compactor.js +73 -9
  70. package/dist/core/compaction/compactor.js.map +1 -1
  71. package/dist/core/compaction/compactor.test.js +31 -4
  72. package/dist/core/compaction/compactor.test.js.map +1 -1
  73. package/dist/core/event-bus.d.ts +2 -0
  74. package/dist/core/event-bus.d.ts.map +1 -1
  75. package/dist/core/event-bus.js.map +1 -1
  76. package/dist/core/mcp/defaults.d.ts +1 -1
  77. package/dist/core/mcp/defaults.js +1 -1
  78. package/dist/core/mcp/store.d.ts +2 -2
  79. package/dist/core/mcp/store.test.js +1 -1
  80. package/dist/core/mcp/store.test.js.map +1 -1
  81. package/dist/core/progress/rebuild.d.ts +3 -3
  82. package/dist/core/progress/rebuild.d.ts.map +1 -1
  83. package/dist/core/progress/rebuild.js +33 -27
  84. package/dist/core/progress/rebuild.js.map +1 -1
  85. package/dist/core/progress/rebuild.test.js +15 -0
  86. package/dist/core/progress/rebuild.test.js.map +1 -1
  87. package/dist/core/project-discovery.d.ts +1 -1
  88. package/dist/core/project-discovery.d.ts.map +1 -1
  89. package/dist/core/project-discovery.js +5 -6
  90. package/dist/core/project-discovery.js.map +1 -1
  91. package/dist/core/project-discovery.test.js +14 -1
  92. package/dist/core/project-discovery.test.js.map +1 -1
  93. package/dist/core/radio.d.ts +3 -0
  94. package/dist/core/radio.d.ts.map +1 -1
  95. package/dist/core/radio.js +150 -21
  96. package/dist/core/radio.js.map +1 -1
  97. package/dist/core/radio.test.d.ts +2 -0
  98. package/dist/core/radio.test.d.ts.map +1 -0
  99. package/dist/core/radio.test.js +101 -0
  100. package/dist/core/radio.test.js.map +1 -0
  101. package/dist/core/session-history.test.js +1 -1
  102. package/dist/core/session-history.test.js.map +1 -1
  103. package/dist/core/session-manager.d.ts +1 -1
  104. package/dist/core/session-manager.d.ts.map +1 -1
  105. package/dist/core/session-manager.js +2 -1
  106. package/dist/core/session-manager.js.map +1 -1
  107. package/dist/core/session-manager.test.js +18 -0
  108. package/dist/core/session-manager.test.js.map +1 -1
  109. package/dist/core/settings-manager.d.ts +1 -0
  110. package/dist/core/settings-manager.d.ts.map +1 -1
  111. package/dist/core/settings-manager.js +1 -1
  112. package/dist/core/settings-manager.js.map +1 -1
  113. package/dist/core/subagent-manager.d.ts +73 -0
  114. package/dist/core/subagent-manager.d.ts.map +1 -0
  115. package/dist/core/subagent-manager.js +412 -0
  116. package/dist/core/subagent-manager.js.map +1 -0
  117. package/dist/core/subagent-manager.test.d.ts +2 -0
  118. package/dist/core/subagent-manager.test.d.ts.map +1 -0
  119. package/dist/core/subagent-manager.test.js +103 -0
  120. package/dist/core/subagent-manager.test.js.map +1 -0
  121. package/dist/core/subagent-policy.d.ts +4 -0
  122. package/dist/core/subagent-policy.d.ts.map +1 -0
  123. package/dist/core/subagent-policy.js +19 -0
  124. package/dist/core/subagent-policy.js.map +1 -0
  125. package/dist/modes/json-mode.d.ts.map +1 -1
  126. package/dist/modes/json-mode.js +3 -4
  127. package/dist/modes/json-mode.js.map +1 -1
  128. package/dist/modes/subagent-worker-mode.d.ts +14 -0
  129. package/dist/modes/subagent-worker-mode.d.ts.map +1 -0
  130. package/dist/modes/subagent-worker-mode.js +191 -0
  131. package/dist/modes/subagent-worker-mode.js.map +1 -0
  132. package/dist/tools/generate-image.d.ts.map +1 -1
  133. package/dist/tools/generate-image.js +12 -5
  134. package/dist/tools/generate-image.js.map +1 -1
  135. package/dist/tools/generate-image.test.js +17 -0
  136. package/dist/tools/generate-image.test.js.map +1 -1
  137. package/dist/tools/goals.d.ts +3 -3
  138. package/dist/tools/index.d.ts +10 -2
  139. package/dist/tools/index.d.ts.map +1 -1
  140. package/dist/tools/index.js +17 -1
  141. package/dist/tools/index.js.map +1 -1
  142. package/dist/tools/subagent-control.d.ts +6 -0
  143. package/dist/tools/subagent-control.d.ts.map +1 -0
  144. package/dist/tools/subagent-control.js +95 -0
  145. package/dist/tools/subagent-control.js.map +1 -0
  146. package/dist/tools/subagent-control.test.d.ts +2 -0
  147. package/dist/tools/subagent-control.test.d.ts.map +1 -0
  148. package/dist/tools/subagent-control.test.js +40 -0
  149. package/dist/tools/subagent-control.test.js.map +1 -0
  150. package/dist/tools/subagent-shared.d.ts +24 -0
  151. package/dist/tools/subagent-shared.d.ts.map +1 -0
  152. package/dist/tools/subagent-shared.js +53 -0
  153. package/dist/tools/subagent-shared.js.map +1 -0
  154. package/dist/tools/subagent-shared.test.d.ts +2 -0
  155. package/dist/tools/subagent-shared.test.d.ts.map +1 -0
  156. package/dist/tools/subagent-shared.test.js +29 -0
  157. package/dist/tools/subagent-shared.test.js.map +1 -0
  158. package/dist/tools/subagent.d.ts.map +1 -1
  159. package/dist/tools/subagent.js +21 -64
  160. package/dist/tools/subagent.js.map +1 -1
  161. package/dist/tools/subagent.test.js +27 -1
  162. package/dist/tools/subagent.test.js.map +1 -1
  163. package/dist/tools/web-fetch.d.ts +1 -0
  164. package/dist/tools/web-fetch.d.ts.map +1 -1
  165. package/dist/tools/web-fetch.js +112 -35
  166. package/dist/tools/web-fetch.js.map +1 -1
  167. package/dist/tools/web-fetch.test.js +146 -1
  168. package/dist/tools/web-fetch.test.js.map +1 -1
  169. package/dist/tools/web-search.d.ts +10 -0
  170. package/dist/tools/web-search.d.ts.map +1 -1
  171. package/dist/tools/web-search.js +236 -28
  172. package/dist/tools/web-search.js.map +1 -1
  173. package/dist/tools/web-search.test.js +77 -6
  174. package/dist/tools/web-search.test.js.map +1 -1
  175. package/dist/ui/App.d.ts +2 -0
  176. package/dist/ui/App.d.ts.map +1 -1
  177. package/dist/ui/App.js +61 -2
  178. package/dist/ui/App.js.map +1 -1
  179. package/dist/ui/hooks/useModeState.d.ts +4 -2
  180. package/dist/ui/hooks/useModeState.d.ts.map +1 -1
  181. package/dist/ui/hooks/useModeState.js +14 -3
  182. package/dist/ui/hooks/useModeState.js.map +1 -1
  183. package/dist/ui/login.d.ts.map +1 -1
  184. package/dist/ui/login.js +13 -5
  185. package/dist/ui/login.js.map +1 -1
  186. package/dist/ui/render.d.ts +14 -0
  187. package/dist/ui/render.d.ts.map +1 -1
  188. package/dist/ui/render.js +2 -0
  189. package/dist/ui/render.js.map +1 -1
  190. package/dist/ui/render.test.js +17 -0
  191. package/dist/ui/render.test.js.map +1 -1
  192. package/package.json +4 -4
@@ -0,0 +1,95 @@
1
+ import { z } from "zod";
2
+ import { isPlanModeActive, planModeRestriction } from "../core/runtime-mode.js";
3
+ const AgentId = z.string().min(1).describe("Eight-character agent ID returned by spawn_agent");
4
+ function json(value) {
5
+ return { content: JSON.stringify(value) };
6
+ }
7
+ export function createSubAgentControlTools(manager, planModeRef) {
8
+ const blocked = (name) => isPlanModeActive(planModeRef) ? planModeRestriction(name) : undefined;
9
+ const spawnParams = z.object({
10
+ task_name: z.string().min(1).describe("Short unique name for this delegated task"),
11
+ task: z.string().min(1).describe("Standalone task instruction for the child agent"),
12
+ agent: z.string().optional().describe("Optional named agent definition"),
13
+ });
14
+ const spawnTool = {
15
+ name: "spawn_agent",
16
+ description: "Start an isolated persistent child agent and return immediately after launch. Start all independent agents before waiting; shared files are not isolated.",
17
+ parameters: spawnParams,
18
+ executionMode: "parallel",
19
+ async execute(args) {
20
+ const restriction = blocked("spawn_agent");
21
+ if (restriction)
22
+ return restriction;
23
+ return json(await manager.spawn(args.task_name, args.task, args.agent));
24
+ },
25
+ };
26
+ const messageParams = z.object({ agent_id: AgentId, message: z.string().min(1) });
27
+ const messageTool = {
28
+ name: "send_message",
29
+ description: "Queue steering into a running child agent without starting another turn.",
30
+ parameters: messageParams,
31
+ async execute(args) {
32
+ const restriction = blocked("send_message");
33
+ if (restriction)
34
+ return restriction;
35
+ return json({
36
+ agent_id: args.agent_id,
37
+ queued: await manager.sendMessage(args.agent_id, args.message),
38
+ });
39
+ },
40
+ };
41
+ const followupParams = z.object({ agent_id: AgentId, task: z.string().min(1) });
42
+ const followupTool = {
43
+ name: "followup_task",
44
+ description: "Start another turn in an idle child while preserving that child's context.",
45
+ parameters: followupParams,
46
+ async execute(args) {
47
+ const restriction = blocked("followup_task");
48
+ if (restriction)
49
+ return restriction;
50
+ return json(await manager.followup(args.agent_id, args.task));
51
+ },
52
+ };
53
+ const waitParams = z.object({
54
+ agent_ids: z
55
+ .array(AgentId)
56
+ .optional()
57
+ .describe("Agents to wait for; omitted means active agents"),
58
+ condition: z.enum(["any", "all"]).optional().describe("Default: any"),
59
+ timeout_ms: z
60
+ .number()
61
+ .int()
62
+ .min(0)
63
+ .max(300_000)
64
+ .optional()
65
+ .describe("Default 30000; max 300000"),
66
+ });
67
+ const waitTool = {
68
+ name: "wait_agent",
69
+ description: "Wait for any or all requested child agents and return bounded result snapshots.",
70
+ parameters: waitParams,
71
+ async execute(args) {
72
+ return json(await manager.wait(args.agent_ids, args.condition, args.timeout_ms));
73
+ },
74
+ };
75
+ const listParams = z.object({});
76
+ const listTool = {
77
+ name: "list_agents",
78
+ description: "List child IDs, task names, lifecycle states, activity, turns, tools, and token totals.",
79
+ parameters: listParams,
80
+ async execute() {
81
+ return json(manager.list().map(({ output: _output, error: _error, ...summary }) => summary));
82
+ },
83
+ };
84
+ const interruptParams = z.object({ agent_id: AgentId });
85
+ const interruptTool = {
86
+ name: "interrupt_agent",
87
+ description: "Interrupt a child's current turn while retaining its context for a later follow-up.",
88
+ parameters: interruptParams,
89
+ async execute(args) {
90
+ return json(await manager.interrupt(args.agent_id));
91
+ },
92
+ };
93
+ return [spawnTool, messageTool, followupTool, waitTool, listTool, interruptTool];
94
+ }
95
+ //# sourceMappingURL=subagent-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-control.js","sourceRoot":"","sources":["../../src/tools/subagent-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=subagent-control.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-control.test.d.ts","sourceRoot":"","sources":["../../src/tools/subagent-control.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { createSubAgentControlTools } from "./subagent-control.js";
3
+ function fakeManager() {
4
+ return {
5
+ spawn: vi.fn(async (taskName) => ({
6
+ agent_id: "12345678",
7
+ task_name: taskName,
8
+ state: "running",
9
+ })),
10
+ sendMessage: vi.fn(async () => 1),
11
+ followup: vi.fn(async () => ({ agent_id: "12345678", state: "running" })),
12
+ wait: vi.fn(async () => ({ timed_out: false, agents: [] })),
13
+ list: vi.fn(() => []),
14
+ interrupt: vi.fn(async () => ({ agent_id: "12345678", state: "interrupted" })),
15
+ };
16
+ }
17
+ const context = { signal: new AbortController().signal, toolCallId: "test" };
18
+ describe("async subagent control tools", () => {
19
+ it("registers the six concise control surfaces", () => {
20
+ expect(createSubAgentControlTools(fakeManager()).map((tool) => tool.name)).toEqual([
21
+ "spawn_agent",
22
+ "send_message",
23
+ "followup_task",
24
+ "wait_agent",
25
+ "list_agents",
26
+ "interrupt_agent",
27
+ ]);
28
+ });
29
+ it("launches through the manager and blocks mutating lifecycle calls in plan mode", async () => {
30
+ const manager = fakeManager();
31
+ const planModeRef = { current: false };
32
+ const tools = createSubAgentControlTools(manager, planModeRef);
33
+ const spawn = tools.find((tool) => tool.name === "spawn_agent");
34
+ await expect(spawn.execute({ task_name: "scan", task: "inspect" }, context)).resolves.toMatchObject({ content: expect.stringContaining("12345678") });
35
+ expect(manager.spawn).toHaveBeenCalledWith("scan", "inspect", undefined);
36
+ planModeRef.current = true;
37
+ await expect(spawn.execute({ task_name: "blocked", task: "write" }, context)).resolves.toContain("plan mode");
38
+ });
39
+ });
40
+ //# sourceMappingURL=subagent-control.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-control.test.js","sourceRoot":"","sources":["../../src/tools/subagent-control.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,SAAS,WAAW;IAClB,OAAO;QACL,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE,CAAC,CAAC;YACxC,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACjC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACzE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QACrB,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;KACjD,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAE7E,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,0BAA0B,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACjF,aAAa;YACb,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,iBAAiB;SAClB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,0BAA0B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAE,CAAC;QACjE,MAAM,MAAM,CACV,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,CAC/D,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAEzE,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,MAAM,MAAM,CACV,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAChE,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { Provider, ThinkingLevel } from "@prestyj/ai";
2
+ import type { AgentDefinition } from "../core/agents.js";
3
+ export declare const SUB_AGENT_MAX_TURNS = 50;
4
+ export declare const SUB_AGENT_MAX_OUTPUT_CHARS = 100000;
5
+ export declare const SUB_AGENT_MAX_OUTPUT_LINES = 500;
6
+ export declare const SUB_AGENT_MAX_STDERR_CHARS = 10000;
7
+ export declare const SUB_AGENT_TIMEOUT_MS: number;
8
+ export declare const SUB_AGENT_DEPTH_ENV = "GG_SUBAGENT_DEPTH";
9
+ export declare const MAX_BLOCKING_SUBAGENT_DEPTH = 3;
10
+ export interface SubAgentSelection {
11
+ agentDef?: AgentDefinition;
12
+ provider: Provider;
13
+ parentModel: string;
14
+ model: string;
15
+ }
16
+ export declare function resolveAgentDefinition(agents: AgentDefinition[], requestedName?: string): AgentDefinition | undefined;
17
+ export declare function selectSubAgent(agents: AgentDefinition[], requestedName: string | undefined, provider: Provider, parentModel: string): SubAgentSelection;
18
+ export declare function childThinkingLevel(level: ThinkingLevel | undefined): ThinkingLevel | undefined;
19
+ export declare function subAgentCacheKey(parentCacheKey: string | undefined, model: string, agentName?: string): string | undefined;
20
+ export declare function currentSubAgentDepth(env?: NodeJS.ProcessEnv): number;
21
+ export declare function childSubAgentEnv(env?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
22
+ export declare function resolveSubAgentCliEntry(): string;
23
+ export declare function boundSubAgentOutput(raw: string): string;
24
+ //# sourceMappingURL=subagent-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-shared.d.ts","sourceRoot":"","sources":["../../src/tools/subagent-shared.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMzD,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAClD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,oBAAoB,QAAiB,CAAC;AACnD,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AACvD,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,EAAE,EACzB,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,GAAG,SAAS,CAG7B;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EAAE,EACzB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,GAClB,iBAAiB,CAYnB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAE9F;AAED,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,KAAK,EAAE,MAAM,EACb,SAAS,SAAY,GACpB,MAAM,GAAG,SAAS,CAEpB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAGjF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAExF;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASvD"}
@@ -0,0 +1,53 @@
1
+ import { existsSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import { getFastModel } from "../core/model-registry.js";
4
+ import { truncateTail } from "./truncate.js";
5
+ const MUTATING_TOOLS = new Set(["bash", "write", "edit"]);
6
+ export const SUB_AGENT_MAX_TURNS = 50;
7
+ export const SUB_AGENT_MAX_OUTPUT_CHARS = 100_000;
8
+ export const SUB_AGENT_MAX_OUTPUT_LINES = 500;
9
+ export const SUB_AGENT_MAX_STDERR_CHARS = 10_000;
10
+ export const SUB_AGENT_TIMEOUT_MS = 10 * 60 * 1000;
11
+ export const SUB_AGENT_DEPTH_ENV = "GG_SUBAGENT_DEPTH";
12
+ export const MAX_BLOCKING_SUBAGENT_DEPTH = 3;
13
+ export function resolveAgentDefinition(agents, requestedName) {
14
+ if (!requestedName)
15
+ return undefined;
16
+ return agents.find((agent) => agent.name.toLowerCase() === requestedName.toLowerCase());
17
+ }
18
+ export function selectSubAgent(agents, requestedName, provider, parentModel) {
19
+ const agentDef = resolveAgentDefinition(agents, requestedName);
20
+ const readOnly = !!agentDef &&
21
+ agentDef.tools.length > 0 &&
22
+ !agentDef.tools.some((tool) => MUTATING_TOOLS.has(tool.toLowerCase()));
23
+ return {
24
+ agentDef,
25
+ provider,
26
+ parentModel,
27
+ model: readOnly ? getFastModel(provider, parentModel).id : parentModel,
28
+ };
29
+ }
30
+ export function childThinkingLevel(level) {
31
+ return level === "ultra" ? "max" : level;
32
+ }
33
+ export function subAgentCacheKey(parentCacheKey, model, agentName = "default") {
34
+ return parentCacheKey ? `${parentCacheKey}:subagent:${model}:${agentName}` : undefined;
35
+ }
36
+ export function currentSubAgentDepth(env = process.env) {
37
+ const parsed = Number.parseInt(env[SUB_AGENT_DEPTH_ENV] ?? "0", 10);
38
+ return Number.isFinite(parsed) && parsed >= 0 ? parsed : 0;
39
+ }
40
+ export function childSubAgentEnv(env = process.env) {
41
+ return { ...env, [SUB_AGENT_DEPTH_ENV]: String(currentSubAgentDepth(env) + 1) };
42
+ }
43
+ export function resolveSubAgentCliEntry() {
44
+ const cliPath = fileURLToPath(new URL("../cli.js", import.meta.url));
45
+ return existsSync(cliPath) ? cliPath : process.argv[1];
46
+ }
47
+ export function boundSubAgentOutput(raw) {
48
+ const result = truncateTail(raw || "(no output)", SUB_AGENT_MAX_OUTPUT_LINES, SUB_AGENT_MAX_OUTPUT_CHARS);
49
+ return result.truncated
50
+ ? `[Sub-agent output truncated: ${result.totalLines} total lines, showing last ${result.keptLines}]\n\n${result.content}`
51
+ : result.content;
52
+ }
53
+ //# sourceMappingURL=subagent-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-shared.js","sourceRoot":"","sources":["../../src/tools/subagent-shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=subagent-shared.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-shared.test.d.ts","sourceRoot":"","sources":["../../src/tools/subagent-shared.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { selectSubAgent, subAgentCacheKey } from "./subagent-shared.js";
3
+ describe("selectSubAgent", () => {
4
+ it("keeps shell-capable agents on the parent model", () => {
5
+ const shellAgent = {
6
+ name: "worker",
7
+ description: "Can mutate through shell commands",
8
+ tools: ["read", "bash"],
9
+ systemPrompt: "Work on the task.",
10
+ source: "bundled",
11
+ };
12
+ expect(selectSubAgent([shellAgent], "worker", "openai", "gpt-5.6-sol").model).toBe("gpt-5.6-sol");
13
+ });
14
+ });
15
+ describe("subAgentCacheKey", () => {
16
+ it("shares routing within one model and named-agent family", () => {
17
+ expect(subAgentCacheKey("parent", "gpt-5.6-luna", "owl")).toBe("parent:subagent:gpt-5.6-luna:owl");
18
+ expect(subAgentCacheKey("parent", "gpt-5.6-luna", "owl")).toBe(subAgentCacheKey("parent", "gpt-5.6-luna", "owl"));
19
+ });
20
+ it("partitions unrelated model and prompt families", () => {
21
+ const owl = subAgentCacheKey("parent", "gpt-5.6-luna", "owl");
22
+ expect(subAgentCacheKey("parent", "gpt-5.6-sol", "owl")).not.toBe(owl);
23
+ expect(subAgentCacheKey("parent", "gpt-5.6-luna", "bee")).not.toBe(owl);
24
+ });
25
+ it("stays unset when the parent has no stable cache identity", () => {
26
+ expect(subAgentCacheKey(undefined, "gpt-5.6-luna", "owl")).toBeUndefined();
27
+ });
28
+ });
29
+ //# sourceMappingURL=subagent-shared.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-shared.test.js","sourceRoot":"","sources":["../../src/tools/subagent-shared.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExE,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,UAAU,GAAoB;YAClC,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mCAAmC;YAChD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YACvB,YAAY,EAAE,mBAAmB;YACjC,MAAM,EAAE,SAAS;SAClB,CAAC;QAEF,MAAM,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAChF,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAC5D,kCAAkC,CACnC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAC5D,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAClD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../src/tools/subagent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AAkBjC,kFAAkF;AAClF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI/D;AAmBD,QAAA,MAAM,cAAc;;;iBAMlB,CAAC;AAEH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,EAAE,EACzB,iBAAiB,EAAE,MAAM,MAAM,EAC/B,cAAc,EAAE,MAAM,MAAM,EAC5B,iBAAiB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,EAC5C,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAClC,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,GAClC,SAAS,CAAC,OAAO,cAAc,CAAC,CA8RlC"}
1
+ {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../src/tools/subagent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AAejC,kFAAkF;AAClF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED,QAAA,MAAM,cAAc;;;iBAMlB,CAAC;AAEH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,EAAE,EACzB,iBAAiB,EAAE,MAAM,MAAM,EAC/B,cAAc,EAAE,MAAM,MAAM,EAC5B,iBAAiB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,EAC5C,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAClC,WAAW,CAAC,EAAE;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,GAClC,SAAS,CAAC,OAAO,cAAc,CAAC,CAkRlC"}
@@ -1,46 +1,13 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { createInterface } from "node:readline";
3
- import { existsSync } from "node:fs";
4
- import { fileURLToPath } from "node:url";
5
3
  import { z } from "zod";
6
- import { getFastModel } from "../core/model-registry.js";
7
4
  import { log } from "../core/logger.js";
8
- import { truncateTail } from "./truncate.js";
9
5
  import { getActiveGoalMode, goalModeSubagentRestriction, isPlanModeActive, planModeRestriction, } from "../core/runtime-mode.js";
10
- // Tools that can mutate the workspace. A named agent whose allow-list contains
11
- // none of these is a read-only scout (recon/research) — safe to route to the
12
- // provider's fast/cheap model. An agent that can write/edit keeps the parent
13
- // model so code changes never regress in quality.
14
- const MUTATING_TOOLS = new Set(["write", "edit"]);
15
- /**
16
- * True when the sub-agent is a read-only scout: an explicit named agent with a
17
- * non-empty tool allow-list that grants no mutating tool. A subagent call with
18
- * no `agent` (full toolset) is NOT read-only — it keeps the parent model.
19
- */
20
- function isReadOnlyAgent(agentDef) {
21
- if (!agentDef || agentDef.tools.length === 0)
22
- return false;
23
- return !agentDef.tools.some((tool) => MUTATING_TOOLS.has(tool.toLowerCase()));
24
- }
6
+ import { boundSubAgentOutput, childSubAgentEnv, currentSubAgentDepth, MAX_BLOCKING_SUBAGENT_DEPTH, resolveSubAgentCliEntry, selectSubAgent, subAgentCacheKey, SUB_AGENT_MAX_OUTPUT_CHARS, SUB_AGENT_MAX_STDERR_CHARS, SUB_AGENT_MAX_TURNS, SUB_AGENT_TIMEOUT_MS, } from "./subagent-shared.js";
25
7
  /** Only retry errors that specifically mean the selected model cannot be used. */
26
8
  export function isModelUnavailableError(stderr) {
27
9
  return /does not recognize the requested model|requested model[^\n]*(?:not available|no access)|model[^\n]*(?:does not exist|not found|not available)/i.test(stderr);
28
10
  }
29
- const SUB_AGENT_MAX_TURNS = 50;
30
- const SUB_AGENT_MAX_OUTPUT_CHARS = 100_000; // ~25k tokens, matches other tool limits
31
- const SUB_AGENT_MAX_OUTPUT_LINES = 500;
32
- const SUB_AGENT_MAX_STDERR_CHARS = 10_000; // Cap stderr to prevent unbounded growth
33
- const SUB_AGENT_TIMEOUT_MS = 10 * 60 * 1000; // 10 minute hard timeout
34
- /**
35
- * Absolute path to the ezcoder CLI entry (dist/cli.js) that runs a sub-agent in
36
- * JSON mode. Resolved relative to this module so it's correct no matter how the
37
- * host process was launched (CLI bin, desktop app sidecar, tests). Falls back to
38
- * the launching script only if the sibling file is missing.
39
- */
40
- function resolveCliEntry() {
41
- const cliPath = fileURLToPath(new URL("../cli.js", import.meta.url));
42
- return existsSync(cliPath) ? cliPath : process.argv[1];
43
- }
44
11
  const SubAgentParams = z.object({
45
12
  task: z.string().describe("The task to delegate to the sub-agent"),
46
13
  agent: z
@@ -72,28 +39,25 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
72
39
  if (isPlanModeActive(planModeRef)) {
73
40
  return planModeRestriction("subagent");
74
41
  }
75
- const startTime = Date.now();
76
- // Resolve agent definition if specified
77
- let agentDef;
78
- if (args.agent) {
79
- agentDef = agents.find((a) => a.name.toLowerCase() === args.agent.toLowerCase());
80
- if (!agentDef) {
81
- return {
82
- content: `Unknown agent: "${args.agent}". Available agents: ${agents.map((a) => a.name).join(", ") || "none"}`,
83
- };
84
- }
42
+ if (currentSubAgentDepth() >= MAX_BLOCKING_SUBAGENT_DEPTH) {
43
+ return {
44
+ content: `Sub-agent nesting limit reached (${MAX_BLOCKING_SUBAGENT_DEPTH}). Complete this task in the current agent.`,
45
+ };
85
46
  }
47
+ const startTime = Date.now();
86
48
  const useProvider = getParentProvider();
87
- // Read-only scouts (recon/research) run on the provider's fast/cheap model
88
- // — lower TTFT + spend, no quality risk since they never edit code.
89
- // Agents that can write, and default (unnamed) sub-agents, keep the
90
- // parent model.
91
49
  const parentModel = getParentModel();
92
- const useModel = isReadOnlyAgent(agentDef)
93
- ? getFastModel(useProvider, parentModel).id
94
- : parentModel;
50
+ const selection = selectSubAgent(agents, args.agent, useProvider, parentModel);
51
+ const agentDef = selection.agentDef;
52
+ if (args.agent && !agentDef) {
53
+ return {
54
+ content: `Unknown agent: "${args.agent}". Available agents: ${agents.map((a) => a.name).join(", ") || "none"}`,
55
+ };
56
+ }
57
+ const useModel = selection.model;
95
58
  const parentCacheKey = getParentCacheKey?.();
96
- const subCacheKey = parentCacheKey ? `${parentCacheKey}:subagent` : "(unset)";
59
+ const childCacheKey = subAgentCacheKey(parentCacheKey, useModel, agentDef?.name ?? "default");
60
+ const subCacheKey = childCacheKey ?? "(unset)";
97
61
  const buildCliArgs = (model) => {
98
62
  const cliArgs = [
99
63
  "--json",
@@ -104,11 +68,8 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
104
68
  "--max-turns",
105
69
  String(SUB_AGENT_MAX_TURNS),
106
70
  ];
107
- // Inherit parent's cache-routing key so all sub-agents in one parent run
108
- // share the same prompt_cache_key prefix instead of each spawning with a
109
- // fresh sessionId-derived key (cold cache every time).
110
- if (parentCacheKey) {
111
- cliArgs.push("--prompt-cache-key", `${parentCacheKey}:subagent`);
71
+ if (childCacheKey) {
72
+ cliArgs.push("--prompt-cache-key", childCacheKey);
112
73
  }
113
74
  if (agentDef?.systemPrompt) {
114
75
  cliArgs.push("--system-prompt", agentDef.systemPrompt);
@@ -152,10 +113,10 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
152
113
  const startAttempt = (model, fallbackFrom) => {
153
114
  // Spawn the CLI entry, not process.argv[1]: the desktop host is the
154
115
  // app sidecar and does not understand JSON-mode agent arguments.
155
- const child = spawn(process.execPath, [resolveCliEntry(), ...buildCliArgs(model)], {
116
+ const child = spawn(process.execPath, [resolveSubAgentCliEntry(), ...buildCliArgs(model)], {
156
117
  cwd,
157
118
  stdio: ["ignore", "pipe", "pipe"],
158
- env: { ...process.env },
119
+ env: childSubAgentEnv(),
159
120
  });
160
121
  activeChild = child;
161
122
  activeChildExited = false;
@@ -281,11 +242,7 @@ export function createSubAgentTool(cwd, agents, getParentProvider, getParentMode
281
242
  });
282
243
  return;
283
244
  }
284
- const raw = textOutput || "(no output)";
285
- const result = truncateTail(raw, SUB_AGENT_MAX_OUTPUT_LINES, SUB_AGENT_MAX_OUTPUT_CHARS);
286
- const body = result.truncated
287
- ? `[Sub-agent output truncated: ${result.totalLines} total lines, showing last ${result.keptLines}]\n\n${result.content}`
288
- : result.content;
245
+ const body = boundSubAgentOutput(textOutput);
289
246
  const content = hitMaxTurns
290
247
  ? `[Sub-agent reached its ${maxTurnsLimit}-turn limit — it stopped mid-task and this output may be incomplete.]\n\n${body}`
291
248
  : body;
@@ -1 +1 @@
1
- {"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../src/tools/subagent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,gBAAgB,EAChB,mBAAmB,GAEpB,MAAM,yBAAyB,CAAC;AAEjC,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,kDAAkD;AAClD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAElD;;;;GAIG;AACH,SAAS,eAAe,CAAC,QAAqC;IAC5D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,OAAO,gJAAgJ,CAAC,IAAI,CAC1J,MAAM,CACP,CAAC;AACJ,CAAC;AAED,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,0BAA0B,GAAG,OAAO,CAAC,CAAC,yCAAyC;AACrF,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,0BAA0B,GAAG,MAAM,CAAC,CAAC,yCAAyC;AACpF,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,yBAAyB;AAEtE;;;;;GAKG;AACH,SAAS,eAAe;IACtB,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAClE,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6EAA6E,CAAC;CAC3F,CAAC,CAAC;AAcH,MAAM,UAAU,kBAAkB,CAChC,GAAW,EACX,MAAyB,EACzB,iBAA+B,EAC/B,cAA4B,EAC5B,iBAA4C,EAC5C,WAAkC,EAClC,WAAmC;IAEnC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,SAAS;QACzB,CAAC,CAAC,gCAAgC,SAAS,EAAE;QAC7C,CAAC,CAAC,iCAAiC,CAAC;IAEtC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,sSAAsS;YACtS,SAAS;QACX,UAAU,EAAE,cAAc;QAC1B,0EAA0E;QAC1E,0EAA0E;QAC1E,2EAA2E;QAC3E,iEAAiE;QACjE,6EAA6E;QAC7E,aAAa,EAAE,UAAU;QACzB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;YACzB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACvB,OAAO,2BAA2B,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClC,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,wCAAwC;YACxC,IAAI,QAAqC,CAAC;YAC1C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,KAAM,CAAC,WAAW,EAAE,CAAC,CAAC;gBAClF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO;wBACL,OAAO,EAAE,mBAAmB,IAAI,CAAC,KAAK,wBAAwB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;qBAC/G,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACxC,2EAA2E;YAC3E,oEAAoE;YACpE,oEAAoE;YACpE,gBAAgB;YAChB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC;gBACxC,CAAC,CAAC,YAAY,CAAC,WAAuB,EAAE,WAAW,CAAC,CAAC,EAAE;gBACvD,CAAC,CAAC,WAAW,CAAC;YAEhB,MAAM,cAAc,GAAG,iBAAiB,EAAE,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YAE9E,MAAM,YAAY,GAAG,CAAC,KAAa,EAAY,EAAE;gBAC/C,MAAM,OAAO,GAAa;oBACxB,QAAQ;oBACR,YAAY;oBACZ,WAAW;oBACX,SAAS;oBACT,KAAK;oBACL,aAAa;oBACb,MAAM,CAAC,mBAAmB,CAAC;iBAC5B,CAAC;gBAEF,yEAAyE;gBACzE,yEAAyE;gBACzE,uDAAuD;gBACvD,IAAI,cAAc,EAAE,CAAC;oBACnB,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,cAAc,WAAW,CAAC,CAAC;gBACnE,CAAC;gBACD,IAAI,QAAQ,EAAE,YAAY,EAAE,CAAC;oBAC3B,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACzD,CAAC;gBACD,IAAI,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC3B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpD,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC;YAEF,wEAAwE;YACxE,4EAA4E;YAC5E,+CAA+C;YAC/C,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC1C,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,eAAmC,CAAC;YACxC,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,IAAI,WAAiD,CAAC;YACtD,IAAI,iBAAiB,GAAG,IAAI,CAAC;YAE7B,MAAM,eAAe,GAAG,GAAG,EAAE;gBAC3B,MAAM,KAAK,GAAG,WAAW,CAAC;gBAC1B,IAAI,CAAC,KAAK,IAAI,iBAAiB;oBAAE,OAAO;gBACxC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,WAAW,KAAK,KAAK,IAAI,CAAC,iBAAiB;wBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzE,CAAC,EAAE,IAAI,CAAC,CAAC;YACX,CAAC,CAAC;YAEF,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;YAC7C,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,MAAM,MAAM,GAAG,CAAC,MAAsD,EAAE,EAAE;oBACxE,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;oBAC1D,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC,CAAC;gBAEF,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,YAAqB,EAAE,EAAE;oBAC5D,oEAAoE;oBACpE,iEAAiE;oBACjE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,eAAe,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;wBACjF,GAAG;wBACH,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;wBACjC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;qBACxB,CAAC,CAAC;oBACH,WAAW,GAAG,KAAK,CAAC;oBACpB,iBAAiB,GAAG,KAAK,CAAC;oBAE1B,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE;wBACzC,QAAQ,EAAE,WAAW;wBACrB,QAAQ,EAAE,WAAW;wBACrB,KAAK;wBACL,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,WAAW;wBACpC,GAAG,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;qBACtC,CAAC,CAAC;oBAEH,uEAAuE;oBACvE,6CAA6C;oBAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;oBACjF,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;oBACzD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAO,EAAE,CAAC,CAAC;oBACrD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;wBACrB,IAAI,CAAC;4BACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;4BAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAc,CAAC;4BAClC,QAAQ,IAAI,EAAE,CAAC;gCACb,KAAK,YAAY;oCACf,IAAI,UAAU,CAAC,MAAM,GAAG,0BAA0B,GAAG,CAAC,EAAE,CAAC;wCACvD,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC;oCAC3B,CAAC;yCAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;wCACnD,UAAU,IAAI,mBAAmB,CAAC;oCACpC,CAAC;oCACD,MAAM;gCACR,KAAK,iBAAiB;oCACpB,YAAY,EAAE,CAAC;oCACf,eAAe,GAAG,kBAAkB,CAClC,KAAK,CAAC,IAAc,EACpB,KAAK,CAAC,IAA+B,CACtC,CAAC;oCACF,OAAO,CAAC,QAAQ,EAAE,CAAC;wCACjB,YAAY;wCACZ,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE;wCAC7B,eAAe;qCAChB,CAAC,CAAC;oCACH,MAAM;gCACR,KAAK,eAAe;oCAClB,MAAM;gCACR,KAAK,WAAW;oCACd,WAAW,GAAG,IAAI,CAAC;oCACnB,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC;oCAC9D,MAAM;gCACR,KAAK,UAAU,CAAC,CAAC,CAAC;oCAChB,MAAM,KAAK,GAAG,KAAK,CAAC,KAOP,CAAC;oCACd,IAAI,KAAK,EAAE,CAAC;wCACV,UAAU,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC;wCACtC,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC;wCACxC,IAAI,KAAK,CAAC,SAAS;4CAAE,WAAW,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC;wCACzD,IAAI,KAAK,CAAC,UAAU;4CAAE,WAAW,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;wCAC5D,SAAS,EAAE,CAAC;wCACZ,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE;4CACxC,IAAI,EAAE,SAAS;4CACf,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;4CACtC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;4CACxC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;4CACtE,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;yCAC1E,CAAC,CAAC;oCACL,CAAC;oCACD,OAAO,CAAC,QAAQ,EAAE,CAAC;wCACjB,YAAY;wCACZ,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE;wCAC7B,eAAe;qCAChB,CAAC,CAAC;oCACH,MAAM;gCACR,CAAC;4BACH,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,wBAAwB;wBAC1B,CAAC;oBACH,CAAC,CAAC,CAAC;oBAEH,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;wBACzC,IAAI,MAAM,CAAC,MAAM,IAAI,0BAA0B;4BAAE,OAAO;wBACxD,MAAM,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;oBAC5E,CAAC,CAAC,CAAC;oBAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;wBACzB,IAAI,WAAW,KAAK,KAAK;4BAAE,iBAAiB,GAAG,IAAI,CAAC;wBACpD,YAAY,CAAC,OAAO,CAAC,CAAC;wBACtB,EAAE,CAAC,KAAK,EAAE,CAAC;wBAEX,MAAM,WAAW,GACf,KAAK,KAAK,WAAW;4BACrB,IAAI,KAAK,CAAC;4BACV,CAAC,UAAU;4BACX,SAAS,KAAK,CAAC;4BACf,YAAY,KAAK,CAAC;4BAClB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;4BACvB,uBAAuB,CAAC,MAAM,CAAC,CAAC;wBAClC,IAAI,WAAW,EAAE,CAAC;4BAChB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,oDAAoD,EAAE;gCAC5E,QAAQ,EAAE,WAAW;gCACrB,KAAK;gCACL,aAAa,EAAE,WAAW;6BAC3B,CAAC,CAAC;4BACH,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;4BACjC,OAAO;wBACT,CAAC;wBAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;wBAC1C,MAAM,OAAO,GAAoB;4BAC/B,YAAY;4BACZ,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE;4BAC7B,UAAU;yBACX,CAAC;wBACF,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE;4BACxC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;4BAC9B,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;4BACxB,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;4BAClC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;4BACrC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;4BACvC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;4BACnC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;4BACrC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC;4BACtB,KAAK;yBACN,CAAC,CAAC;wBAEH,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;4BAC9B,MAAM,CAAC;gCACL,OAAO,EAAE,0BAA0B,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,eAAe,EAAE;gCAC/E,OAAO;6BACR,CAAC,CAAC;4BACH,OAAO;wBACT,CAAC;wBAED,MAAM,GAAG,GAAG,UAAU,IAAI,aAAa,CAAC;wBACxC,MAAM,MAAM,GAAG,YAAY,CACzB,GAAG,EACH,0BAA0B,EAC1B,0BAA0B,CAC3B,CAAC;wBACF,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS;4BAC3B,CAAC,CAAC,gCAAgC,MAAM,CAAC,UAAU,8BAA8B,MAAM,CAAC,SAAS,QAAQ,MAAM,CAAC,OAAO,EAAE;4BACzH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;wBACnB,MAAM,OAAO,GAAG,WAAW;4BACzB,CAAC,CAAC,0BAA0B,aAAa,4EAA4E,IAAI,EAAE;4BAC3H,CAAC,CAAC,IAAI,CAAC;wBACT,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC/B,CAAC,CAAC,CAAC;oBAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;wBACxB,IAAI,WAAW,KAAK,KAAK;4BAAE,iBAAiB,GAAG,IAAI,CAAC;wBACpD,YAAY,CAAC,OAAO,CAAC,CAAC;wBACtB,EAAE,CAAC,KAAK,EAAE,CAAC;wBACX,MAAM,CAAC,EAAE,OAAO,EAAE,8BAA8B,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACnE,CAAC,CAAC,CAAC;oBAEH,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;wBAAE,eAAe,EAAE,CAAC;gBAChD,CAAC,CAAC;gBAEF,YAAY,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,SAAS,kBAAkB,CAAC,IAAY,EAAE,IAA6B;IACrE,2DAA2D;IAC3D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,WAAW,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChE,KAAK,OAAO;YACV,OAAO,WAAW,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChE,KAAK,MAAM;YACT,OAAO,WAAW,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChE,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACvC,OAAO,kBAAkB,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QACnD,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACvC,OAAO,YAAY,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QAC7C,CAAC;QACD,KAAK,IAAI;YACP,OAAO,WAAW,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5D,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,OAAO,WAAW,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,WAAW;YACd,OAAO,YAAY,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC/D,KAAK,aAAa;YAChB,OAAO,wBAAwB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC/E,KAAK,aAAa;YAChB,OAAO,uBAAuB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACzE,KAAK,WAAW;YACd,OAAO,iBAAiB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACnE,KAAK,YAAY;YACf,OAAO,qBAAqB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC1E,KAAK,OAAO;YACV,OAAO,iBAAiB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACtE,OAAO,CAAC,CAAC,CAAC;YACR,2DAA2D;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxF,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,WAAW,CAAC,CAAS,EAAE,GAAW;IACzC,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../src/tools/subagent.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
4
4
  const { spawnMock } = vi.hoisted(() => ({ spawnMock: vi.fn() }));
5
5
  vi.mock("node:child_process", () => ({ spawn: spawnMock }));
6
6
  import { createSubAgentTool, isModelUnavailableError } from "./subagent.js";
7
+ import { MAX_BLOCKING_SUBAGENT_DEPTH, SUB_AGENT_DEPTH_ENV } from "./subagent-shared.js";
7
8
  class MockChildProcess extends EventEmitter {
8
9
  stdout = new PassThrough();
9
10
  stderr = new PassThrough();
@@ -22,6 +23,12 @@ function spawnedModels() {
22
23
  return args[args.indexOf("--model") + 1];
23
24
  });
24
25
  }
26
+ function spawnedCacheKeys() {
27
+ return spawnMock.mock.calls.map(([, rawArgs]) => {
28
+ const args = rawArgs;
29
+ return args[args.indexOf("--prompt-cache-key") + 1];
30
+ });
31
+ }
25
32
  function mockExit(stderr, code, stdout = "") {
26
33
  const child = new MockChildProcess();
27
34
  setImmediate(() => {
@@ -36,7 +43,7 @@ function mockExit(stderr, code, stdout = "") {
36
43
  return child;
37
44
  }
38
45
  async function runOwl() {
39
- const tool = createSubAgentTool(process.cwd(), [owl], () => "openai", () => "gpt-5.6-sol");
46
+ const tool = createSubAgentTool(process.cwd(), [owl], () => "openai", () => "gpt-5.6-sol", () => "parent-cache");
40
47
  return tool.execute({ agent: "owl", task: "Inspect the registry." }, { signal: new AbortController().signal, toolCallId: "test-call" });
41
48
  }
42
49
  beforeEach(() => {
@@ -49,6 +56,10 @@ describe("createSubAgentTool fast-model fallback", () => {
49
56
  .mockImplementationOnce(() => mockExit("", 0, "fallback succeeded"));
50
57
  await expect(runOwl()).resolves.toMatchObject({ content: "fallback succeeded" });
51
58
  expect(spawnedModels()).toEqual(["gpt-5.6-luna", "gpt-5.6-sol"]);
59
+ expect(spawnedCacheKeys()).toEqual([
60
+ "parent-cache:subagent:gpt-5.6-luna:owl",
61
+ "parent-cache:subagent:gpt-5.6-luna:owl",
62
+ ]);
52
63
  });
53
64
  it("does not retry unrelated child failures", async () => {
54
65
  spawnMock.mockImplementationOnce(() => mockExit("usage limit reached", 1));
@@ -57,6 +68,21 @@ describe("createSubAgentTool fast-model fallback", () => {
57
68
  });
58
69
  expect(spawnedModels()).toEqual(["gpt-5.6-luna"]);
59
70
  });
71
+ it("keeps the blocking contract while rejecting recursive process storms", async () => {
72
+ const previousDepth = process.env[SUB_AGENT_DEPTH_ENV];
73
+ process.env[SUB_AGENT_DEPTH_ENV] = String(MAX_BLOCKING_SUBAGENT_DEPTH);
74
+ try {
75
+ const tool = createSubAgentTool(process.cwd(), [owl], () => "openai", () => "gpt-5.6-sol");
76
+ await expect(tool.execute({ task: "Recurse again." }, { signal: new AbortController().signal, toolCallId: "depth-test" })).resolves.toMatchObject({ content: expect.stringContaining("nesting limit") });
77
+ expect(spawnMock).not.toHaveBeenCalled();
78
+ }
79
+ finally {
80
+ if (previousDepth === undefined)
81
+ delete process.env[SUB_AGENT_DEPTH_ENV];
82
+ else
83
+ process.env[SUB_AGENT_DEPTH_ENV] = previousDepth;
84
+ }
85
+ });
60
86
  });
61
87
  describe("isModelUnavailableError", () => {
62
88
  it("recognizes unavailable-model failures", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"subagent.test.js","sourceRoot":"","sources":["../../src/tools/subagent.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAEjE,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAG5D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,gBAAiB,SAAQ,YAAY;IAChC,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAC3B,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAC3B,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;CACnC;AAED,MAAM,GAAG,GAAoB;IAC3B,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,iBAAiB;IAC9B,KAAK,EAAE,CAAC,MAAM,CAAC;IACf,YAAY,EAAE,mCAAmC;IACjD,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,SAAS,aAAa;IACpB,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,OAAmB,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,IAAY,EAAE,MAAM,GAAG,EAAE;IACzD,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACrC,YAAY,CAAC,GAAG,EAAE;QAChB,IAAI,MAAM;YAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5F,IAAI,MAAM;YAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACnB,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,MAAM;IACnB,MAAM,IAAI,GAAG,kBAAkB,CAC7B,OAAO,CAAC,GAAG,EAAE,EACb,CAAC,GAAG,CAAC,EACL,GAAG,EAAE,CAAC,QAAQ,EACd,GAAG,EAAE,CAAC,aAAa,CACpB,CAAC;IACF,OAAO,IAAI,CAAC,OAAO,CACjB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAC/C,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,CAClE,CAAC;AACJ,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,SAAS,CAAC,SAAS,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,SAAS;aACN,sBAAsB,CAAC,GAAG,EAAE,CAC3B,QAAQ,CAAC,sDAAsD,EAAE,CAAC,CAAC,CACpE;aACA,sBAAsB,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAEvE,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACjF,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,SAAS,CAAC,sBAAsB,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC;QAE3E,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC5C,OAAO,EAAE,gDAAgD;SAC1D,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CACJ,uBAAuB,CACrB,4GAA4G,CAC7G,CACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CAAC,uBAAuB,CAAC,wDAAwD,CAAC,CAAC,CAAC,IAAI,CAC5F,IAAI,CACL,CAAC;QACF,MAAM,CAAC,uBAAuB,CAAC,mCAAmC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,CAAC,uBAAuB,CAAC,wCAAwC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtF,MAAM,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"subagent.test.js","sourceRoot":"","sources":["../../src/tools/subagent.test.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ interface LlmsCandidate {
13
13
  kind: LlmsCandidateKind;
14
14
  priority: number;
15
15
  }
16
+ export declare function readBoundedBody(response: Response, maxBytes?: number): Promise<Uint8Array>;
16
17
  export declare function buildLlmsCandidates(url: string, maxLength: number): LlmsCandidate[];
17
18
  export declare function createWebFetchTool(): AgentTool<typeof parameters>;
18
19
  declare const parameters: z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,gBAAgB,CAAC;AAI7D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CA0CvD;AAmGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYpD;AAqBD,KAAK,iBAAiB,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAEvE,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAuOD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,CAuCnF;AAuED,wBAAgB,kBAAkB,IAAI,SAAS,CAAC,OAAO,UAAU,CAAC,CAkCjE;AA0BD,QAAA,MAAM,UAAU;;;;;;;;;;iBAoBZ,CAAC"}
1
+ {"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,gBAAgB,CAAC;AAI7D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CA0CvD;AAmGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYpD;AAwBD,KAAK,iBAAiB,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAEvE,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAsHD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,SAAqB,GAC5B,OAAO,CAAC,UAAU,CAAC,CA2BrB;AAmLD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,CAuCnF;AA2ED,wBAAgB,kBAAkB,IAAI,SAAS,CAAC,OAAO,UAAU,CAAC,CAkCjE;AA0BD,QAAA,MAAM,UAAU;;;;;;;;;;iBAoBZ,CAAC"}