@qduc/term2 0.10.1 → 0.11.1

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 (230) hide show
  1. package/dist/agent.d.ts +18 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +66 -24
  4. package/dist/agent.js.map +1 -1
  5. package/dist/app.d.ts.map +1 -1
  6. package/dist/app.js +10 -11
  7. package/dist/app.js.map +1 -1
  8. package/dist/components/layout/BackgroundTasksPanel.d.ts +10 -0
  9. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -0
  10. package/dist/components/layout/BackgroundTasksPanel.js +79 -0
  11. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -0
  12. package/dist/components/layout/BottomArea.d.ts +3 -0
  13. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  14. package/dist/components/layout/BottomArea.js +3 -1
  15. package/dist/components/layout/BottomArea.js.map +1 -1
  16. package/dist/components/message/CommandMessage.js +25 -3
  17. package/dist/components/message/CommandMessage.js.map +1 -1
  18. package/dist/components/message/SubagentActivityMessage.d.ts +1 -0
  19. package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
  20. package/dist/components/message/SubagentActivityMessage.js +3 -3
  21. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  22. package/dist/components/message/command-message-helpers.d.ts +4 -4
  23. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  24. package/dist/components/message/command-message-helpers.js +10 -0
  25. package/dist/components/message/command-message-helpers.js.map +1 -1
  26. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  27. package/dist/components/prompt/ApprovalPrompt.js +28 -3
  28. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  29. package/dist/hooks/conversation-ui-reducer.d.ts +5 -0
  30. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  31. package/dist/hooks/conversation-ui-reducer.js +8 -0
  32. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  33. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  34. package/dist/hooks/settings-completion-config.js +4 -0
  35. package/dist/hooks/settings-completion-config.js.map +1 -1
  36. package/dist/hooks/use-conversation.d.ts +3 -0
  37. package/dist/hooks/use-conversation.d.ts.map +1 -1
  38. package/dist/hooks/use-conversation.js +24 -1
  39. package/dist/hooks/use-conversation.js.map +1 -1
  40. package/dist/lib/agent-client.d.ts +16 -1
  41. package/dist/lib/agent-client.d.ts.map +1 -1
  42. package/dist/lib/agent-client.js +22 -1
  43. package/dist/lib/agent-client.js.map +1 -1
  44. package/dist/lib/agent-configuration.d.ts.map +1 -1
  45. package/dist/lib/agent-configuration.js +5 -0
  46. package/dist/lib/agent-configuration.js.map +1 -1
  47. package/dist/lib/agent-factory.d.ts +18 -0
  48. package/dist/lib/agent-factory.d.ts.map +1 -1
  49. package/dist/lib/agent-factory.js +5 -0
  50. package/dist/lib/agent-factory.js.map +1 -1
  51. package/dist/lib/chained-input-filter.d.ts +20 -0
  52. package/dist/lib/chained-input-filter.d.ts.map +1 -1
  53. package/dist/lib/chained-input-filter.js +75 -0
  54. package/dist/lib/chained-input-filter.js.map +1 -1
  55. package/dist/lib/subagent-bridge.d.ts +57 -4
  56. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  57. package/dist/lib/subagent-bridge.js +141 -8
  58. package/dist/lib/subagent-bridge.js.map +1 -1
  59. package/dist/prompts/anthropic.md +6 -55
  60. package/dist/prompts/async-subagent-delegation.d.ts +10 -0
  61. package/dist/prompts/async-subagent-delegation.d.ts.map +1 -0
  62. package/dist/prompts/async-subagent-delegation.js +50 -0
  63. package/dist/prompts/async-subagent-delegation.js.map +1 -0
  64. package/dist/prompts/async-subagent-delegation.ts +65 -0
  65. package/dist/prompts/gpt-5.6.md +49 -0
  66. package/dist/prompts/kimi.md +25 -63
  67. package/dist/prompts/orchestrator-prompt.test.ts +77 -0
  68. package/dist/prompts/orchestrator.md +30 -3
  69. package/dist/prompts/prompt-constructor.d.ts +2 -0
  70. package/dist/prompts/prompt-constructor.d.ts.map +1 -1
  71. package/dist/prompts/prompt-constructor.js +9 -1
  72. package/dist/prompts/prompt-constructor.js.map +1 -1
  73. package/dist/prompts/prompt-constructor.test.ts +72 -0
  74. package/dist/prompts/prompt-constructor.ts +15 -0
  75. package/dist/prompts/prompt-profiles.d.ts.map +1 -1
  76. package/dist/prompts/prompt-profiles.js +5 -0
  77. package/dist/prompts/prompt-profiles.js.map +1 -1
  78. package/dist/prompts/prompt-profiles.test.ts +20 -0
  79. package/dist/prompts/prompt-profiles.ts +5 -0
  80. package/dist/prompts/search-via-shell.d.ts.map +1 -1
  81. package/dist/prompts/search-via-shell.js +8 -25
  82. package/dist/prompts/search-via-shell.js.map +1 -1
  83. package/dist/prompts/search-via-shell.test.ts +18 -0
  84. package/dist/prompts/search-via-shell.ts +8 -25
  85. package/dist/prompts/subagent-delegation.d.ts.map +1 -1
  86. package/dist/prompts/subagent-delegation.js +2 -1
  87. package/dist/prompts/subagent-delegation.js.map +1 -1
  88. package/dist/prompts/subagent-delegation.test.ts +15 -0
  89. package/dist/prompts/subagent-delegation.ts +2 -1
  90. package/dist/prompts/subagents/researcher.md +6 -0
  91. package/dist/prompts/subagents/worker-prompt.test.ts +35 -0
  92. package/dist/prompts/subagents/worker.md +8 -0
  93. package/dist/services/agent-runtime/execution-budget.d.ts +6 -0
  94. package/dist/services/agent-runtime/execution-budget.d.ts.map +1 -1
  95. package/dist/services/agent-runtime/execution-budget.js +32 -24
  96. package/dist/services/agent-runtime/execution-budget.js.map +1 -1
  97. package/dist/services/agent-runtime/permission-resolver.js +1 -1
  98. package/dist/services/agent-runtime/permission-resolver.js.map +1 -1
  99. package/dist/services/conversation/conversation-adapter.d.ts +11 -3
  100. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  101. package/dist/services/conversation/conversation-adapter.js +125 -31
  102. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  103. package/dist/services/conversation/conversation-events.d.ts +36 -1
  104. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  105. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  106. package/dist/services/conversation/conversation-orchestrator.js +263 -32
  107. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  108. package/dist/services/conversation/conversation-orchestrator.types.d.ts +2 -0
  109. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  110. package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
  111. package/dist/services/conversation/conversation-replay.js +1 -0
  112. package/dist/services/conversation/conversation-replay.js.map +1 -1
  113. package/dist/services/conversation/conversation-service.d.ts +25 -0
  114. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  115. package/dist/services/conversation/conversation-service.js +44 -0
  116. package/dist/services/conversation/conversation-service.js.map +1 -1
  117. package/dist/services/conversation/conversation-store.d.ts +6 -0
  118. package/dist/services/conversation/conversation-store.d.ts.map +1 -1
  119. package/dist/services/conversation/conversation-store.js +17 -0
  120. package/dist/services/conversation/conversation-store.js.map +1 -1
  121. package/dist/services/conversation-agent-client.d.ts +13 -0
  122. package/dist/services/conversation-agent-client.d.ts.map +1 -1
  123. package/dist/services/logging/conversation-log-events.d.ts +10 -1
  124. package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
  125. package/dist/services/logging/conversation-log-events.js.map +1 -1
  126. package/dist/services/logging/conversation-log-writer.d.ts +1 -0
  127. package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
  128. package/dist/services/logging/conversation-log-writer.js +1 -1
  129. package/dist/services/logging/conversation-log-writer.js.map +1 -1
  130. package/dist/services/logging/conversation-logger.d.ts.map +1 -1
  131. package/dist/services/logging/conversation-logger.js +11 -0
  132. package/dist/services/logging/conversation-logger.js.map +1 -1
  133. package/dist/services/plan-mode-interceptor.js +2 -2
  134. package/dist/services/plan-mode-interceptor.js.map +1 -1
  135. package/dist/services/queue/queue-controller.d.ts +1 -0
  136. package/dist/services/queue/queue-controller.d.ts.map +1 -1
  137. package/dist/services/queue/queue-controller.js +7 -4
  138. package/dist/services/queue/queue-controller.js.map +1 -1
  139. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  140. package/dist/services/retry/retry-classifier.js +4 -2
  141. package/dist/services/retry/retry-classifier.js.map +1 -1
  142. package/dist/services/session/session-composition.d.ts +23 -0
  143. package/dist/services/session/session-composition.d.ts.map +1 -1
  144. package/dist/services/session/session-composition.js +65 -1
  145. package/dist/services/session/session-composition.js.map +1 -1
  146. package/dist/services/settings/settings-merger.d.ts.map +1 -1
  147. package/dist/services/settings/settings-merger.js +2 -0
  148. package/dist/services/settings/settings-merger.js.map +1 -1
  149. package/dist/services/settings/settings-schema.d.ts +15 -0
  150. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  151. package/dist/services/settings/settings-schema.js +23 -0
  152. package/dist/services/settings/settings-schema.js.map +1 -1
  153. package/dist/services/subagents/execution-runner.d.ts +5 -2
  154. package/dist/services/subagents/execution-runner.d.ts.map +1 -1
  155. package/dist/services/subagents/execution-runner.js +125 -10
  156. package/dist/services/subagents/execution-runner.js.map +1 -1
  157. package/dist/services/subagents/mentor-runner.d.ts +5 -1
  158. package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
  159. package/dist/services/subagents/mentor-runner.js +60 -3
  160. package/dist/services/subagents/mentor-runner.js.map +1 -1
  161. package/dist/services/subagents/runtime.d.ts +2 -0
  162. package/dist/services/subagents/runtime.d.ts.map +1 -1
  163. package/dist/services/subagents/runtime.js +32 -2
  164. package/dist/services/subagents/runtime.js.map +1 -1
  165. package/dist/services/subagents/subagent-async-registry.d.ts +67 -0
  166. package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -0
  167. package/dist/services/subagents/subagent-async-registry.js +506 -0
  168. package/dist/services/subagents/subagent-async-registry.js.map +1 -0
  169. package/dist/services/subagents/subagent-manager.d.ts +31 -0
  170. package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
  171. package/dist/services/subagents/subagent-manager.js +61 -1
  172. package/dist/services/subagents/subagent-manager.js.map +1 -1
  173. package/dist/services/subagents/subagent-notification-store.d.ts +107 -0
  174. package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -0
  175. package/dist/services/subagents/subagent-notification-store.js +209 -0
  176. package/dist/services/subagents/subagent-notification-store.js.map +1 -0
  177. package/dist/services/subagents/subagent-run-control.d.ts +41 -0
  178. package/dist/services/subagents/subagent-run-control.d.ts.map +1 -0
  179. package/dist/services/subagents/subagent-run-control.js +166 -0
  180. package/dist/services/subagents/subagent-run-control.js.map +1 -0
  181. package/dist/services/subagents/subagent-session.d.ts +12 -1
  182. package/dist/services/subagents/subagent-session.d.ts.map +1 -1
  183. package/dist/services/subagents/subagent-session.js +29 -6
  184. package/dist/services/subagents/subagent-session.js.map +1 -1
  185. package/dist/services/subagents/tool-policy.d.ts +24 -4
  186. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  187. package/dist/services/subagents/tool-policy.js +134 -14
  188. package/dist/services/subagents/tool-policy.js.map +1 -1
  189. package/dist/services/subagents/types.d.ts +104 -0
  190. package/dist/services/subagents/types.d.ts.map +1 -1
  191. package/dist/services/subagents/types.js +1 -0
  192. package/dist/services/subagents/types.js.map +1 -1
  193. package/dist/services/subagents/utils.d.ts +6 -0
  194. package/dist/services/subagents/utils.d.ts.map +1 -1
  195. package/dist/services/subagents/utils.js +21 -0
  196. package/dist/services/subagents/utils.js.map +1 -1
  197. package/dist/tools/agent/ask-orchestrator.d.ts +11 -0
  198. package/dist/tools/agent/ask-orchestrator.d.ts.map +1 -0
  199. package/dist/tools/agent/ask-orchestrator.js +39 -0
  200. package/dist/tools/agent/ask-orchestrator.js.map +1 -0
  201. package/dist/tools/agent/run-subagent-async.d.ts +67 -0
  202. package/dist/tools/agent/run-subagent-async.d.ts.map +1 -0
  203. package/dist/tools/agent/run-subagent-async.js +401 -0
  204. package/dist/tools/agent/run-subagent-async.js.map +1 -0
  205. package/dist/tools/file/code-context.d.ts +1 -0
  206. package/dist/tools/file/code-context.d.ts.map +1 -1
  207. package/dist/tools/file/code-context.js +4 -4
  208. package/dist/tools/file/code-context.js.map +1 -1
  209. package/dist/tools/file/grep.d.ts +1 -0
  210. package/dist/tools/file/grep.d.ts.map +1 -1
  211. package/dist/tools/file/grep.js +16 -10
  212. package/dist/tools/file/grep.js.map +1 -1
  213. package/dist/types/message.d.ts +1 -0
  214. package/dist/types/message.d.ts.map +1 -1
  215. package/dist/types/message.js.map +1 -1
  216. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  217. package/dist/utils/conversation/conversation-event-handler.js +7 -3
  218. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  219. package/dist/utils/settings-command.d.ts.map +1 -1
  220. package/dist/utils/settings-command.js +10 -0
  221. package/dist/utils/settings-command.js.map +1 -1
  222. package/dist/utils/shell/sandbox/sandbox-network-approval.d.ts +2 -1
  223. package/dist/utils/shell/sandbox/sandbox-network-approval.d.ts.map +1 -1
  224. package/dist/utils/shell/sandbox/sandbox-network-approval.js +17 -1
  225. package/dist/utils/shell/sandbox/sandbox-network-approval.js.map +1 -1
  226. package/dist/utils/shell/sandbox/sandbox-network-store.d.ts +20 -0
  227. package/dist/utils/shell/sandbox/sandbox-network-store.d.ts.map +1 -0
  228. package/dist/utils/shell/sandbox/sandbox-network-store.js +99 -0
  229. package/dist/utils/shell/sandbox/sandbox-network-store.js.map +1 -0
  230. package/package.json +1 -1
@@ -36,6 +36,31 @@ export const getToolResultCallId = (item) => {
36
36
  const callId = raw.callId ?? raw.call_id ?? raw.tool_call_id;
37
37
  return typeof callId === 'string' && callId ? callId : null;
38
38
  };
39
+ /**
40
+ * Extracts the call id of a tool *call* item (`function_call`, `local_shell_call`,
41
+ * `computer_call`, …). Returns null for tool results and for items that are not
42
+ * tool calls at all.
43
+ */
44
+ export const getToolCallId = (item) => {
45
+ const record = asRecord(item);
46
+ if (!record || isToolResultItem(record)) {
47
+ return null;
48
+ }
49
+ const type = typeof record.type === 'string' ? record.type : '';
50
+ if (!type.endsWith('_call')) {
51
+ return null;
52
+ }
53
+ const topLevelCallId = record.callId ?? record.call_id ?? record.tool_call_id;
54
+ if (typeof topLevelCallId === 'string' && topLevelCallId) {
55
+ return topLevelCallId;
56
+ }
57
+ const raw = asRecord(record.rawItem);
58
+ if (!raw) {
59
+ return null;
60
+ }
61
+ const callId = raw.callId ?? raw.call_id ?? raw.tool_call_id;
62
+ return typeof callId === 'string' && callId ? callId : null;
63
+ };
39
64
  export class MissingChainedToolOutputError extends Error {
40
65
  callIds;
41
66
  constructor(callIds) {
@@ -46,6 +71,25 @@ export class MissingChainedToolOutputError extends Error {
46
71
  }
47
72
  export const isMissingChainedToolOutputError = (error) => error instanceof MissingChainedToolOutputError ||
48
73
  (asRecord(error)?.name === 'MissingChainedToolOutputError' && Array.isArray(asRecord(error)?.callIds));
74
+ /**
75
+ * Raised when a chained delta would carry a `function_call_output` whose
76
+ * `function_call` exists in neither the outgoing input nor — by extension —
77
+ * the response chain the request is anchored to.
78
+ *
79
+ * The provider rejects such a request with `No tool call found for function
80
+ * call output with call_id ...`, so failing here lets recovery rebuild the
81
+ * chain instead of spending a round trip on a guaranteed 400.
82
+ */
83
+ export class OrphanedChainedToolOutputError extends Error {
84
+ callIds;
85
+ constructor(callIds) {
86
+ super(`Chained continuation has tool output(s) with no matching tool call: ${callIds.join(', ')}`);
87
+ this.name = 'OrphanedChainedToolOutputError';
88
+ this.callIds = [...callIds];
89
+ }
90
+ }
91
+ export const isOrphanedChainedToolOutputError = (error) => error instanceof OrphanedChainedToolOutputError ||
92
+ (asRecord(error)?.name === 'OrphanedChainedToolOutputError' && Array.isArray(asRecord(error)?.callIds));
49
93
  /**
50
94
  * Finds the starting index of the delta input when conversation chaining is active.
51
95
  *
@@ -73,6 +117,36 @@ export const findChainedDeltaStart = (input) => {
73
117
  }
74
118
  return 0;
75
119
  };
120
+ /**
121
+ * Guards the `toolResultCallIds` shortcut, which sends the selected tool
122
+ * outputs alone and relies on the response chain already holding their calls.
123
+ *
124
+ * The check only applies when the input is a full item list (it carries tool
125
+ * calls of its own). A caller that hands over an already-trimmed delta has no
126
+ * calls to match against, and their absence says nothing about the chain.
127
+ */
128
+ const assertToolResultsHaveMatchingCalls = (input, expectedToolResults) => {
129
+ const callIdsInInput = new Set();
130
+ for (const item of input) {
131
+ const callId = getToolCallId(item);
132
+ if (callId) {
133
+ callIdsInInput.add(callId);
134
+ }
135
+ }
136
+ if (callIdsInInput.size === 0) {
137
+ return;
138
+ }
139
+ const orphaned = new Set();
140
+ for (const item of expectedToolResults) {
141
+ const callId = getToolResultCallId(item);
142
+ if (callId && !callIdsInInput.has(callId)) {
143
+ orphaned.add(callId);
144
+ }
145
+ }
146
+ if (orphaned.size > 0) {
147
+ throw new OrphanedChainedToolOutputError([...orphaned]);
148
+ }
149
+ };
76
150
  export const filterChainedModelInput = (modelData, options = {}) => {
77
151
  const input = modelData?.input;
78
152
  if (!Array.isArray(input)) {
@@ -85,6 +159,7 @@ export const filterChainedModelInput = (modelData, options = {}) => {
85
159
  return callId !== null && expectedToolResultCallIds.has(callId);
86
160
  });
87
161
  if (expectedToolResults.length > 0) {
162
+ assertToolResultsHaveMatchingCalls(input, expectedToolResults);
88
163
  return {
89
164
  ...modelData,
90
165
  input: expectedToolResults,
@@ -1 +1 @@
1
- {"version":3,"file":"chained-input-filter.js","sourceRoot":"","sources":["../../source/lib/chained-input-filter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chained-input-filter.js","sourceRoot":"","sources":["../../source/lib/chained-input-filter.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,10 @@ import { SubagentManager } from '../services/subagents/subagent-manager.js';
2
2
  import type { ConversationEvent } from '../services/conversation/conversation-events.js';
3
3
  import type { ILoggingService, ISettingsService, ISessionContextService } from '../services/service-interfaces.js';
4
4
  import type { ExecutionContext } from '../services/execution-context.js';
5
- import type { SubagentResult } from '../services/subagents/types.js';
5
+ import type { SubagentCancelAcknowledgement, SubagentResult, SubagentRunStatus, SubagentSteerAcknowledgement } from '../services/subagents/types.js';
6
6
  import type { AgentRuntime } from '../services/agent-runtime/agent-runtime.js';
7
7
  import type { SkillsService } from '../services/skills/skills-service.js';
8
+ import type { SubagentRunHandle } from '../services/subagents/types.js';
8
9
  export interface SubagentBridgeDeps {
9
10
  logger: ILoggingService;
10
11
  settings: ISettingsService;
@@ -30,6 +31,13 @@ export declare class SubagentBridge {
30
31
  #private;
31
32
  constructor(deps: SubagentBridgeDeps);
32
33
  setEventSink(sink: ((event: ConversationEvent) => void) | null): void;
34
+ /**
35
+ * Conversation-scoped sink that outlives individual turns. Unlike
36
+ * {@link setEventSink}, it is never torn down at turn end, so subagent
37
+ * activity that settles while the conversation is idle is still observed
38
+ * instead of being buffered until the next turn attaches a sink.
39
+ */
40
+ setBackgroundEventSink(sink: ((event: ConversationEvent) => void) | null): void;
33
41
  /**
34
42
  * Obtain an AgentRuntime backed by this bridge's SubagentManager.
35
43
  * This is the stable production boundary for creating and running
@@ -41,16 +49,61 @@ export declare class SubagentBridge {
41
49
  clearSubagentCache(): void;
42
50
  clearCache(): void;
43
51
  get activeSubagentsCount(): number;
44
- /** Abort signal shared by all subagent runs spawned through this bridge. */
52
+ /** Abort signal shared by the foreground subagent runs of the current turn. */
45
53
  get signal(): AbortSignal;
46
- /** Replace the shared abort controller so a new parent run starts fresh. */
54
+ /**
55
+ * Conversation-scoped abort signal for background (async) runs. It is never
56
+ * reset or aborted by turn boundaries, only by {@link cancelBackgroundRuns}.
57
+ */
58
+ get backgroundSignal(): AbortSignal;
59
+ /** Replace the per-turn abort controller so a new parent run starts fresh. */
47
60
  resetAbortController(): void;
48
- /** Abort all active subagent runs and prepare a fresh controller. */
61
+ /**
62
+ * Abort the foreground subagent runs of the current turn and prepare a fresh
63
+ * controller. Background runs are conversation-bound and are deliberately
64
+ * left alone; use {@link cancelBackgroundRuns} for those.
65
+ */
49
66
  abort(): void;
67
+ /**
68
+ * Cancel every conversation-bound background run. Reserved for an explicit
69
+ * user interrupt, conversation disposal, or shutdown.
70
+ */
71
+ cancelBackgroundRuns(): void;
50
72
  createMentor: (question: string) => Promise<string>;
51
73
  runSubagent: (params: {
52
74
  role: string;
53
75
  task: string;
54
76
  }, _context?: unknown, details?: unknown) => Promise<SubagentResult>;
77
+ runSubagentAsync: (params: {
78
+ role: string;
79
+ task: string;
80
+ name?: string;
81
+ continue_run_id?: string;
82
+ }, _context?: unknown, details?: unknown) => Promise<SubagentRunHandle>;
83
+ getSubagentResult: (params: {
84
+ runId: string;
85
+ }, _context?: unknown, details?: unknown) => Promise<SubagentResult>;
86
+ /**
87
+ * Non-blocking peek: progress snapshot for one run (runId provided) or all
88
+ * non-evicted runs (runId omitted). Never awaits; never carries completion
89
+ * detail. Throws only when the bridge has no manager (transient clients).
90
+ */
91
+ getSubagentStatus: (params: {
92
+ runId?: string;
93
+ }, _context?: unknown, _details?: unknown) => SubagentRunStatus | SubagentRunStatus[];
94
+ /** Parent-only non-blocking control for active async execution runs. */
95
+ sendSubagentMessage: (params: {
96
+ target: string;
97
+ message: string;
98
+ reply_to?: string;
99
+ }) => SubagentSteerAcknowledgement;
100
+ /** Parent-only non-blocking two-phase cancellation by runId or active name. */
101
+ cancelSubagentRun: (params: {
102
+ target: string;
103
+ }) => SubagentCancelAcknowledgement;
104
+ abortAsyncRun: (runId: string) => void;
105
+ resetAsyncRuns: () => void;
106
+ /** @deprecated Ordinary turns do not cancel async runs. */
107
+ cancelAsyncRuns: () => void;
55
108
  }
56
109
  //# sourceMappingURL=subagent-bridge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-bridge.d.ts","sourceRoot":"","sources":["../../source/lib/subagent-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AACnH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,qBAAqB,EAAE,sBAAsB,CAAC;IAC9C,kFAAkF;IAClF,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,6EAA6E;IAC7E,YAAY,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC;IACxG;;;OAGG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,qBAAa,cAAc;;IASzB,YAAY,IAAI,EAAE,kBAAkB,EAkBnC;IAED,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAOpE;IAED;;;;;;OAMG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI,CAErC;IAED,kBAAkB,IAAI,IAAI,CAIzB;IAED,UAAU,IAAI,IAAI,CAEjB;IAED,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED,4EAA4E;IAC5E,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,4EAA4E;IAC5E,oBAAoB,IAAI,IAAI,CAE3B;IAED,qEAAqE;IACrE,KAAK,IAAI,IAAI,CAGZ;IA6BD,YAAY,aAAoB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CA8BtD;IAEF,WAAW,WACD;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,aAC3B,OAAO,YACR,OAAO,KAChB,OAAO,CAAC,cAAc,CAAC,CAsBxB;CACH"}
1
+ {"version":3,"file":"subagent-bridge.d.ts","sourceRoot":"","sources":["../../source/lib/subagent-bridge.ts"],"names":[],"mappings":"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"}
@@ -4,10 +4,19 @@ export class SubagentBridge {
4
4
  #subagentManager;
5
5
  #sessionContextService;
6
6
  #subagentEventSink = null;
7
+ #backgroundEventSink = null;
8
+ #backgroundRunIds = new Set();
7
9
  #activeSubagentsCount = 0;
8
10
  #pendingClearSink = false;
11
+ #bufferedEvents = [];
9
12
  #logger;
13
+ /** Per-turn scope: foreground subagent work belonging to the running turn. */
10
14
  #abortController = new AbortController();
15
+ /**
16
+ * Conversation scope: background (async) runs outlive the turn that launched
17
+ * them, so they must not share the per-turn controller.
18
+ */
19
+ #backgroundAbortController = new AbortController();
11
20
  constructor(deps) {
12
21
  this.#logger = deps.logger;
13
22
  this.#sessionContextService = deps.sessionContextService;
@@ -20,7 +29,7 @@ export class SubagentBridge {
20
29
  settings: deps.settings,
21
30
  executionContext: deps.executionContext,
22
31
  sessionContextService: deps.sessionContextService,
23
- onEvent: (event) => this.#subagentEventSink?.(event),
32
+ onEvent: (event) => this.#emitEvent(event),
24
33
  agentClient: { chat: (message, options) => deps.chat(message, options) },
25
34
  createClient: deps.createClient,
26
35
  skillsService: deps.skillsService,
@@ -28,12 +37,54 @@ export class SubagentBridge {
28
37
  }
29
38
  }
30
39
  setEventSink(sink) {
31
- if (sink === null && this.#activeSubagentsCount > 0) {
32
- this.#pendingClearSink = true;
40
+ this.#subagentEventSink = sink;
41
+ this.#pendingClearSink = false;
42
+ if (sink)
43
+ this.#flushBufferedEvents('foreground', sink);
44
+ }
45
+ /**
46
+ * Conversation-scoped sink that outlives individual turns. Unlike
47
+ * {@link setEventSink}, it is never torn down at turn end, so subagent
48
+ * activity that settles while the conversation is idle is still observed
49
+ * instead of being buffered until the next turn attaches a sink.
50
+ */
51
+ setBackgroundEventSink(sink) {
52
+ this.#backgroundEventSink = sink;
53
+ if (sink)
54
+ this.#flushBufferedEvents('background', sink);
55
+ }
56
+ #flushBufferedEvents(scope, sink) {
57
+ const pending = [];
58
+ for (const buffered of this.#bufferedEvents) {
59
+ if (buffered.scope === scope) {
60
+ sink(buffered.event);
61
+ }
62
+ else {
63
+ pending.push(buffered);
64
+ }
65
+ }
66
+ this.#bufferedEvents = pending;
67
+ }
68
+ #emitEvent(event) {
69
+ const agentId = event.type === 'subagent_completed'
70
+ ? event.result.agentId
71
+ : 'agentId' in event && typeof event.agentId === 'string'
72
+ ? event.agentId
73
+ : undefined;
74
+ const explicitlyAsync = 'async' in event && event.async === true;
75
+ if (event.type === 'subagent_started' && explicitlyAsync && agentId) {
76
+ this.#backgroundRunIds.add(agentId);
77
+ }
78
+ const scope = explicitlyAsync || (agentId !== undefined && this.#backgroundRunIds.has(agentId)) ? 'background' : 'foreground';
79
+ const sink = scope === 'background' ? this.#backgroundEventSink : this.#subagentEventSink;
80
+ if (sink) {
81
+ sink(event);
33
82
  }
34
83
  else {
35
- this.#subagentEventSink = sink;
36
- this.#pendingClearSink = false;
84
+ this.#bufferedEvents.push({ event, scope });
85
+ }
86
+ if (scope === 'background' && event.type === 'subagent_completed' && agentId) {
87
+ this.#backgroundRunIds.delete(agentId);
37
88
  }
38
89
  }
39
90
  /**
@@ -57,19 +108,39 @@ export class SubagentBridge {
57
108
  get activeSubagentsCount() {
58
109
  return this.#activeSubagentsCount;
59
110
  }
60
- /** Abort signal shared by all subagent runs spawned through this bridge. */
111
+ /** Abort signal shared by the foreground subagent runs of the current turn. */
61
112
  get signal() {
62
113
  return this.#abortController.signal;
63
114
  }
64
- /** Replace the shared abort controller so a new parent run starts fresh. */
115
+ /**
116
+ * Conversation-scoped abort signal for background (async) runs. It is never
117
+ * reset or aborted by turn boundaries, only by {@link cancelBackgroundRuns}.
118
+ */
119
+ get backgroundSignal() {
120
+ return this.#backgroundAbortController.signal;
121
+ }
122
+ /** Replace the per-turn abort controller so a new parent run starts fresh. */
65
123
  resetAbortController() {
66
124
  this.#abortController = new AbortController();
67
125
  }
68
- /** Abort all active subagent runs and prepare a fresh controller. */
126
+ /**
127
+ * Abort the foreground subagent runs of the current turn and prepare a fresh
128
+ * controller. Background runs are conversation-bound and are deliberately
129
+ * left alone; use {@link cancelBackgroundRuns} for those.
130
+ */
69
131
  abort() {
70
132
  this.#abortController.abort();
71
133
  this.#abortController = new AbortController();
72
134
  }
135
+ /**
136
+ * Cancel every conversation-bound background run. Reserved for an explicit
137
+ * user interrupt, conversation disposal, or shutdown.
138
+ */
139
+ cancelBackgroundRuns() {
140
+ this.#backgroundAbortController.abort();
141
+ this.#subagentManager?.cancelAllAsyncRuns();
142
+ this.#backgroundAbortController = new AbortController();
143
+ }
73
144
  /** Increment active count and return a disposer that decrements + handles pending sink clear */
74
145
  #beginSubagentRun() {
75
146
  this.#activeSubagentsCount++;
@@ -141,5 +212,67 @@ export class SubagentBridge {
141
212
  endRun();
142
213
  }
143
214
  };
215
+ runSubagentAsync = async (params, _context, details) => {
216
+ if (!this.#subagentManager) {
217
+ throw new Error('Transient agent clients cannot spawn subagents.');
218
+ }
219
+ const detailsRecord = details;
220
+ const request = {
221
+ role: params.role,
222
+ task: params.task,
223
+ ...(params.name ? { name: params.name } : {}),
224
+ ...(params.continue_run_id ? { continueRunId: params.continue_run_id } : {}),
225
+ parentTool: 'run_subagent_async',
226
+ // Conversation-scoped, not per-turn: this run must survive the turn that
227
+ // launched it and every ordinary abort.
228
+ signal: this.backgroundSignal,
229
+ };
230
+ return this.#withSubagentTrafficContext(detailsRecord?.toolCall?.callId, () => {
231
+ const handle = this.#subagentManager.startRunAsync(request);
232
+ return handle;
233
+ });
234
+ };
235
+ getSubagentResult = async (params, _context, details) => {
236
+ if (!this.#subagentManager) {
237
+ throw new Error('Transient agent clients cannot spawn subagents.');
238
+ }
239
+ const detailsRecord = details;
240
+ return this.#subagentManager.getRunResult(params.runId, detailsRecord?.signal);
241
+ };
242
+ /**
243
+ * Non-blocking peek: progress snapshot for one run (runId provided) or all
244
+ * non-evicted runs (runId omitted). Never awaits; never carries completion
245
+ * detail. Throws only when the bridge has no manager (transient clients).
246
+ */
247
+ getSubagentStatus = (params, _context, _details) => {
248
+ if (!this.#subagentManager) {
249
+ throw new Error('Transient agent clients cannot get subagent status.');
250
+ }
251
+ return this.#subagentManager.getRunStatus(params.runId);
252
+ };
253
+ /** Parent-only non-blocking control for active async execution runs. */
254
+ sendSubagentMessage = (params) => {
255
+ if (!this.#subagentManager) {
256
+ throw new Error('Transient agent clients cannot control asynchronous subagents.');
257
+ }
258
+ return this.#subagentManager.sendMessageToAsyncRun(params);
259
+ };
260
+ /** Parent-only non-blocking two-phase cancellation by runId or active name. */
261
+ cancelSubagentRun = (params) => {
262
+ if (!this.#subagentManager) {
263
+ throw new Error('Transient agent clients cannot control asynchronous subagents.');
264
+ }
265
+ return this.#subagentManager.cancelAsyncRun(params.target);
266
+ };
267
+ abortAsyncRun = (runId) => {
268
+ this.#subagentManager?.abortAsyncRun(runId);
269
+ };
270
+ resetAsyncRuns = () => {
271
+ this.#subagentManager?.resetAsyncRuns();
272
+ };
273
+ /** @deprecated Ordinary turns do not cancel async runs. */
274
+ cancelAsyncRuns = () => {
275
+ // Kept for callers compiled against the Phase 1 bridge.
276
+ };
144
277
  }
145
278
  //# sourceMappingURL=subagent-bridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-bridge.js","sourceRoot":"","sources":["../../source/lib/subagent-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagent-bridge.js","sourceRoot":"","sources":["../../source/lib/subagent-bridge.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ You are an interactive CLI tool that helps users with software engineering tasks
6
6
  - Your output will be displayed on a command line interface. Your responses should be short and concise. You can use Github-flavored markdown for formatting, and will be rendered in a monospace font using the CommonMark specification.
7
7
  - Output text to communicate with the user; all text you output outside of tool use is displayed to the user. Only use tools to complete tasks. Never use tools like `shell` or code comments as means to communicate with the user during the session.
8
8
  - Unsandboxed shell commands require explicit user approval and must be run directly by the main agent. Do not delegate unsandboxed work to subagents; if a subagent needs it, it must report back.
9
- - NEVER create files unless they're absolutely necessary for achieving your goal. ALWAYS prefer editing an existing file to creating a new one. This includes markdown files.
9
+ - Prefer editing an existing file over creating a new one. Create new files when the work genuinely calls for them, not as a default this applies to markdown and other documentation as much as to code.
10
10
 
11
11
  # Professional objectivity
12
12
 
@@ -16,65 +16,16 @@ Prioritize technical accuracy and truthfulness over validating the user's belief
16
16
 
17
17
  When planning tasks, provide concrete implementation steps without time estimates. Never suggest timelines like "this will take 2-3 weeks" or "we can do this later." Focus on what needs to be done, not when. Break work into actionable steps and let users decide scheduling.
18
18
 
19
- # Task Management
20
-
21
- Create a plan to manage your tasks. Use this frequently to track progress and keep the user informed about what you're doing.
22
- Planning is critical for breaking down complex tasks into manageable steps. Without proper planning, you risk missing important subtasks.
23
- Maintain a short, step-by-step plan for each task. Keep each step concise (5–7 words maximum) and assign it one of three statuses: pending, in progress, or completed.
24
- Update the plan as you work. When you finish a step, mark it as completed and move the next step to in progress. Only one step should be in progress at a time until the task is complete.
25
- Once you've finished all steps, verify that every step shows completed status.
26
-
27
- Examples:
28
-
29
- <example>
30
- user: Run the build and fix any type errors
31
- assistant: I'm going to write the following items to the todo list:
32
- - Run the build
33
- - Fix any type errors
34
-
35
- I'm now going to run the build using `shell`.
36
-
37
- Looks like I found 10 type errors. I'm going to create a todo list.
38
-
39
- marking the first todo as in_progress
40
-
41
- Let me start working on the first item...
42
-
43
- The first item has been fixed, let me mark the first todo as completed, and move on to the second item...
44
- ..
45
- ..
46
- </example>
47
- In the above example, the assistant completes all the tasks, including the 10 error fixes and running the build and fixing all errors.
48
-
49
- <example>
50
- user: Help me write a new feature that allows users to track their usage metrics and export them to various formats
51
- assistant: I'll help you implement a usage metrics tracking and export feature. Let me first plan this task.
52
- 1. Research existing metrics tracking in the codebase
53
- 2. Design the metrics collection system
54
- 3. Implement core metrics tracking functionality
55
- 4. Create export functionality for different formats
56
-
57
- Let me start by researching the existing codebase to understand what metrics we might already be tracking and how we can build on that.
58
-
59
- I'm going to search for any existing metrics or telemetry code in the project.
60
-
61
- I've found some existing telemetry code. Let me mark the first todo as in_progress and start designing our metrics tracking system based on what I've learned...
62
-
63
- [Assistant continues implementing the feature step by step, marking todos as in_progress and completed as they go]
64
- </example>
65
-
66
19
  # Asking questions as you work
67
20
 
68
21
  You can ask the user questions when you need clarification, want to validate assumptions, or need to make a decision you're unsure about. When presenting options or plans, never include time estimates - focus on what each option involves, not how long it takes.
69
22
 
70
23
  # Doing tasks
71
24
 
72
- The user will primarily request you perform software engineering tasks. This includes solving bugs, adding new functionality, refactoring code, explaining code, and more. For these tasks the following steps are recommended:
25
+ The user will primarily request you perform software engineering tasks: solving bugs, adding functionality, refactoring, explaining code, and more.
73
26
 
74
- - NEVER propose changes to code you haven't read. If a user asks about or wants you to modify a file, read it first. Understand existing code before suggesting modifications.
27
+ - Ground changes in the code as it actually is. Read a file before proposing modifications to it, and verify paths and APIs rather than recalling them.
28
+ - Write code that reads like the code around it: match its comment density, naming, error-handling posture, and level of abstraction. A file that documents every function and a file that documents none are both telling you what to do.
29
+ - Make the smallest coherent change that fully accomplishes the request. Judge scope by what the user asked for, not by what you notice along the way — mention adjacent problems rather than fixing them uninvited.
75
30
  - Be careful not to introduce security vulnerabilities such as command injection, XSS, SQL injection, and other OWASP top 10 vulnerabilities. If you notice that you wrote insecure code, immediately fix it.
76
- - Avoid over-engineering. Only make changes that are directly requested or clearly necessary. Keep solutions simple and focused.
77
- - Don't add features, refactor code, or make "improvements" beyond what was asked. A bug fix doesn't need surrounding code cleaned up. A simple feature doesn't need extra configurability. Don't add docstrings, comments, or type annotations to code you didn't change. Only add comments where the logic isn't self-evident.
78
- - Don't add error handling, fallbacks, or validation for scenarios that can't happen. Trust internal code and framework guarantees. Only validate at system boundaries (user input, external APIs). Don't use feature flags or backwards-compatibility shims when you can just change the code.
79
- - Don't create helpers, utilities, or abstractions for one-time operations. Don't design for hypothetical future requirements. The right amount of complexity is the minimum needed for the current task—three similar lines of code is better than a premature abstraction.
80
- - Avoid backwards-compatibility hacks like renaming unused \`\_vars\`, re-exporting types, adding \`// removed\` comments for removed code, etc. If something is unused, delete it completely.
31
+ - When you remove something, remove it completely. Leaving renamed-but-unused variables, re-exported types, or `// removed` markers behind is worse than either keeping or deleting the code outright.
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Guidance for the asynchronous subagent tools (`run_subagent_async` and
3
+ * `get_subagent_result`). Injected when both tools are available.
4
+ */
5
+ export declare function getAsyncSubagentDelegationAddendum({ memoryEnabled, orchestratorMode, controlsEnabled, }?: {
6
+ memoryEnabled?: boolean;
7
+ orchestratorMode?: boolean;
8
+ controlsEnabled?: boolean;
9
+ }): string;
10
+ //# sourceMappingURL=async-subagent-delegation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-subagent-delegation.d.ts","sourceRoot":"","sources":["../../source/prompts/async-subagent-delegation.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,EACjD,aAAoB,EACpB,gBAAwB,EACxB,eAAuB,GACxB,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAsDlG"}
@@ -0,0 +1,50 @@
1
+ import { getSubagentsRolesSection } from '../tools/agent/run-subagent.js';
2
+ /**
3
+ * Guidance for the asynchronous subagent tools (`run_subagent_async` and
4
+ * `get_subagent_result`). Injected when both tools are available.
5
+ */
6
+ export function getAsyncSubagentDelegationAddendum({ memoryEnabled = true, orchestratorMode = false, controlsEnabled = false, } = {}) {
7
+ const header = `### Asynchronous subagents
8
+
9
+ You have the following tools for running and controlling background subagents:
10
+
11
+ - \`run_subagent_async\`: starts a subagent and returns a \`runId\` immediately — the call does NOT block.
12
+ - \`get_subagent_result\`: BLOCKS until the started subagent finishes and returns the final \`SubagentResult\`. Do not call it right after launching a run; that freezes you out of doing other work — end your turn and wait for the completion notification instead.
13
+ ${controlsEnabled
14
+ ? `- \`send_message\`: non-blockingly steer an active execution run, or answer a waiting \`ask_orchestrator\` question with \`reply_to\`.
15
+ - \`cancel_run\`: non-blockingly request two-phase cancellation of an active run; its eventual partial result still arrives through normal completion.`
16
+ : ''}
17
+
18
+ Use these when you want to start a background investigation, return control while it runs, and collect the result after the automatic completion notification.`;
19
+ const rules = `**Rules for async subagents:**
20
+ - Fresh async runs support explorer, worker, researcher, mentor, and librarian.
21
+ - Runs persist across parent turns in process memory until their 30-minute sliding TTL expires or the 50-session cap evicts them. Ordinary turn completion does not cancel them.
22
+ - A returned handle with \`status: "running"\` means delegation succeeded.
23
+ - Use \`get_subagent_result\` with the exact \`runId\` returned by \`run_subagent_async\`.
24
+ - Do NOT call \`get_subagent_result\` immediately after \`run_subagent_async\` returns — it blocks until completion and freezes you out of doing other work or receiving the next user instruction. End your turn instead and let the harness notify you when the run finishes; only retrieve inline if you truly cannot take any other useful action without the result at all.
25
+ - Mentor and librarian fresh calls reuse their default session. Explorer and researcher fresh calls start a new session; pass \`continue_run_id\` to explicitly continue a completed explorer or researcher run. Worker runs are always fresh and cannot be continued.
26
+ - Only completed runs can be continued. A continuation uses the same runId; do not invent runIds or continue an active, failed, cancelled, missing, or evicted run.
27
+ - The result uses the structured \`SubagentResult\` shape: status, final text, tools used, and files changed.`;
28
+ const controls = controlsEnabled
29
+ ? `**Controlling a live async run:**
30
+ - Address \`send_message\` and \`cancel_run\` by the active name or runId; runId remains canonical. Use \`send_message\` to redirect productive execution, and \`cancel_run\` only when it should stop.
31
+ - Steering never waits for a result. It ends only a safe model-stream boundary (never an active tool), then starts a bounded fresh session turn with the guidance. This is not SDK live injection or RunState continuation.
32
+ - A run accepts a maximum of three continuation segments. Mentor runs do not support steering; cancel them if needed.
33
+ - When an execution subagent asks a genuine blocker through \`ask_orchestrator\`, answer its exact messageId with \`reply_to\`. That resumes only the waiting tool call; the subagent continues after the answer. Keep the orchestrator as the single point of contact — subagents never contact the user.
34
+ - While a question waits, plain steering is refused with \`question_pending\`: only an answer resumes the blocked call. Answer it with \`reply_to\`, then steer if you still need to, or \`cancel_run\` the run.
35
+ - Both controls return acknowledgements immediately. Do NOT call \`get_subagent_result\` immediately after steering or cancelling; wait for the normal completion notification and retrieve the rich result later.`
36
+ : '';
37
+ const triggers = `**When to use async subagents:**
38
+ - A codebase exploration or web research task can run in parallel with other reasoning.
39
+ - You want to keep your context focused while a mentor pressure-tests a plan in the background.
40
+ - The result is needed later, not immediately, and you have other useful work to do first.${orchestratorMode
41
+ ? `
42
+
43
+ In Orchestrator mode, use \`run_subagent_async\` for delegable work. A returned handle with \`status: "running"\` means delegation succeeded. Do not duplicate or independently perform the delegated unit. After a successful launch, do NOT immediately call \`get_subagent_result\` — it blocks until completion and freezes you out of doing other work or receiving the next user instruction; end the current turn and wait for the automatic completion notification. Use \`get_subagent_result\` from that notification turn; only call it earlier if, after honest assessment, you truly cannot take any other useful action or reply to the user without this result at all.`
44
+ : ''}`;
45
+ const framing = `**Task framing:** Describe the goal, relevant context, and constraints—not implementation steps. Do not repeat automatically supplied context: role instructions, generic tool guidance, worktree hygiene, environment metadata, root \`AGENTS.md\`, or skills catalog.`;
46
+ return `${header}\n\n${rules}${controls ? `\n\n${controls}` : ''}\n\n${triggers}\n\n${framing}\n\n${getSubagentsRolesSection({
47
+ includeLibrarian: memoryEnabled,
48
+ })}`;
49
+ }
50
+ //# sourceMappingURL=async-subagent-delegation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-subagent-delegation.js","sourceRoot":"","sources":["../../source/prompts/async-subagent-delegation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E;;;GAGG;AACH,MAAM,UAAU,kCAAkC,CAAC,EACjD,aAAa,GAAG,IAAI,EACpB,gBAAgB,GAAG,KAAK,EACxB,eAAe,GAAG,KAAK,GACxB,GAAuF,EAAE;IACxF,MAAM,MAAM,GAAG;;;;;;EAOf,eAAe;QACb,CAAC,CAAC;uJACiJ;QACnJ,CAAC,CAAC,EACN;;+JAE+J,CAAC;IAE9J,MAAM,KAAK,GAAG;;;;;;;;8GAQ8F,CAAC;IAE7G,MAAM,QAAQ,GAAG,eAAe;QAC9B,CAAC,CAAC;;;;;;mNAM6M;QAC/M,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,QAAQ,GAAG;;;4FAIf,gBAAgB;QACd,CAAC,CAAC;;upBAE+oB;QACjpB,CAAC,CAAC,EACN,EAAE,CAAC;IAEH,MAAM,OAAO,GAAG,yQAAyQ,CAAC;IAE1R,OAAO,GAAG,MAAM,OAAO,KAAK,GAC1B,QAAQ,CAAC,CAAC,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC,CAAC,EACjC,OAAO,QAAQ,OAAO,OAAO,OAAO,wBAAwB,CAAC;QAC3D,gBAAgB,EAAE,aAAa;KAChC,CAAC,EAAE,CAAC;AACP,CAAC"}