@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.
- package/dist/agent.d.ts +18 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +66 -24
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +10 -11
- package/dist/app.js.map +1 -1
- package/dist/components/layout/BackgroundTasksPanel.d.ts +10 -0
- package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -0
- package/dist/components/layout/BackgroundTasksPanel.js +79 -0
- package/dist/components/layout/BackgroundTasksPanel.js.map +1 -0
- package/dist/components/layout/BottomArea.d.ts +3 -0
- package/dist/components/layout/BottomArea.d.ts.map +1 -1
- package/dist/components/layout/BottomArea.js +3 -1
- package/dist/components/layout/BottomArea.js.map +1 -1
- package/dist/components/message/CommandMessage.js +25 -3
- package/dist/components/message/CommandMessage.js.map +1 -1
- package/dist/components/message/SubagentActivityMessage.d.ts +1 -0
- package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
- package/dist/components/message/SubagentActivityMessage.js +3 -3
- package/dist/components/message/SubagentActivityMessage.js.map +1 -1
- package/dist/components/message/command-message-helpers.d.ts +4 -4
- package/dist/components/message/command-message-helpers.d.ts.map +1 -1
- package/dist/components/message/command-message-helpers.js +10 -0
- package/dist/components/message/command-message-helpers.js.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.js +28 -3
- package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
- package/dist/hooks/conversation-ui-reducer.d.ts +5 -0
- package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
- package/dist/hooks/conversation-ui-reducer.js +8 -0
- package/dist/hooks/conversation-ui-reducer.js.map +1 -1
- package/dist/hooks/settings-completion-config.d.ts.map +1 -1
- package/dist/hooks/settings-completion-config.js +4 -0
- package/dist/hooks/settings-completion-config.js.map +1 -1
- package/dist/hooks/use-conversation.d.ts +3 -0
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +24 -1
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/lib/agent-client.d.ts +16 -1
- package/dist/lib/agent-client.d.ts.map +1 -1
- package/dist/lib/agent-client.js +22 -1
- package/dist/lib/agent-client.js.map +1 -1
- package/dist/lib/agent-configuration.d.ts.map +1 -1
- package/dist/lib/agent-configuration.js +5 -0
- package/dist/lib/agent-configuration.js.map +1 -1
- package/dist/lib/agent-factory.d.ts +18 -0
- package/dist/lib/agent-factory.d.ts.map +1 -1
- package/dist/lib/agent-factory.js +5 -0
- package/dist/lib/agent-factory.js.map +1 -1
- package/dist/lib/chained-input-filter.d.ts +20 -0
- package/dist/lib/chained-input-filter.d.ts.map +1 -1
- package/dist/lib/chained-input-filter.js +75 -0
- package/dist/lib/chained-input-filter.js.map +1 -1
- package/dist/lib/subagent-bridge.d.ts +57 -4
- package/dist/lib/subagent-bridge.d.ts.map +1 -1
- package/dist/lib/subagent-bridge.js +141 -8
- package/dist/lib/subagent-bridge.js.map +1 -1
- package/dist/prompts/anthropic.md +6 -55
- package/dist/prompts/async-subagent-delegation.d.ts +10 -0
- package/dist/prompts/async-subagent-delegation.d.ts.map +1 -0
- package/dist/prompts/async-subagent-delegation.js +50 -0
- package/dist/prompts/async-subagent-delegation.js.map +1 -0
- package/dist/prompts/async-subagent-delegation.ts +65 -0
- package/dist/prompts/gpt-5.6.md +49 -0
- package/dist/prompts/kimi.md +25 -63
- package/dist/prompts/orchestrator-prompt.test.ts +77 -0
- package/dist/prompts/orchestrator.md +30 -3
- package/dist/prompts/prompt-constructor.d.ts +2 -0
- package/dist/prompts/prompt-constructor.d.ts.map +1 -1
- package/dist/prompts/prompt-constructor.js +9 -1
- package/dist/prompts/prompt-constructor.js.map +1 -1
- package/dist/prompts/prompt-constructor.test.ts +72 -0
- package/dist/prompts/prompt-constructor.ts +15 -0
- package/dist/prompts/prompt-profiles.d.ts.map +1 -1
- package/dist/prompts/prompt-profiles.js +5 -0
- package/dist/prompts/prompt-profiles.js.map +1 -1
- package/dist/prompts/prompt-profiles.test.ts +20 -0
- package/dist/prompts/prompt-profiles.ts +5 -0
- package/dist/prompts/search-via-shell.d.ts.map +1 -1
- package/dist/prompts/search-via-shell.js +8 -25
- package/dist/prompts/search-via-shell.js.map +1 -1
- package/dist/prompts/search-via-shell.test.ts +18 -0
- package/dist/prompts/search-via-shell.ts +8 -25
- package/dist/prompts/subagent-delegation.d.ts.map +1 -1
- package/dist/prompts/subagent-delegation.js +2 -1
- package/dist/prompts/subagent-delegation.js.map +1 -1
- package/dist/prompts/subagent-delegation.test.ts +15 -0
- package/dist/prompts/subagent-delegation.ts +2 -1
- package/dist/prompts/subagents/researcher.md +6 -0
- package/dist/prompts/subagents/worker-prompt.test.ts +35 -0
- package/dist/prompts/subagents/worker.md +8 -0
- package/dist/services/agent-runtime/execution-budget.d.ts +6 -0
- package/dist/services/agent-runtime/execution-budget.d.ts.map +1 -1
- package/dist/services/agent-runtime/execution-budget.js +32 -24
- package/dist/services/agent-runtime/execution-budget.js.map +1 -1
- package/dist/services/agent-runtime/permission-resolver.js +1 -1
- package/dist/services/agent-runtime/permission-resolver.js.map +1 -1
- package/dist/services/conversation/conversation-adapter.d.ts +11 -3
- package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter.js +125 -31
- package/dist/services/conversation/conversation-adapter.js.map +1 -1
- package/dist/services/conversation/conversation-events.d.ts +36 -1
- package/dist/services/conversation/conversation-events.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.js +263 -32
- package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.types.d.ts +2 -0
- package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
- package/dist/services/conversation/conversation-replay.d.ts.map +1 -1
- package/dist/services/conversation/conversation-replay.js +1 -0
- package/dist/services/conversation/conversation-replay.js.map +1 -1
- package/dist/services/conversation/conversation-service.d.ts +25 -0
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +44 -0
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/conversation/conversation-store.d.ts +6 -0
- package/dist/services/conversation/conversation-store.d.ts.map +1 -1
- package/dist/services/conversation/conversation-store.js +17 -0
- package/dist/services/conversation/conversation-store.js.map +1 -1
- package/dist/services/conversation-agent-client.d.ts +13 -0
- package/dist/services/conversation-agent-client.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-events.d.ts +10 -1
- package/dist/services/logging/conversation-log-events.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-events.js.map +1 -1
- package/dist/services/logging/conversation-log-writer.d.ts +1 -0
- package/dist/services/logging/conversation-log-writer.d.ts.map +1 -1
- package/dist/services/logging/conversation-log-writer.js +1 -1
- package/dist/services/logging/conversation-log-writer.js.map +1 -1
- package/dist/services/logging/conversation-logger.d.ts.map +1 -1
- package/dist/services/logging/conversation-logger.js +11 -0
- package/dist/services/logging/conversation-logger.js.map +1 -1
- package/dist/services/plan-mode-interceptor.js +2 -2
- package/dist/services/plan-mode-interceptor.js.map +1 -1
- package/dist/services/queue/queue-controller.d.ts +1 -0
- package/dist/services/queue/queue-controller.d.ts.map +1 -1
- package/dist/services/queue/queue-controller.js +7 -4
- package/dist/services/queue/queue-controller.js.map +1 -1
- package/dist/services/retry/retry-classifier.d.ts.map +1 -1
- package/dist/services/retry/retry-classifier.js +4 -2
- package/dist/services/retry/retry-classifier.js.map +1 -1
- package/dist/services/session/session-composition.d.ts +23 -0
- package/dist/services/session/session-composition.d.ts.map +1 -1
- package/dist/services/session/session-composition.js +65 -1
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/settings/settings-merger.d.ts.map +1 -1
- package/dist/services/settings/settings-merger.js +2 -0
- package/dist/services/settings/settings-merger.js.map +1 -1
- package/dist/services/settings/settings-schema.d.ts +15 -0
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +23 -0
- package/dist/services/settings/settings-schema.js.map +1 -1
- package/dist/services/subagents/execution-runner.d.ts +5 -2
- package/dist/services/subagents/execution-runner.d.ts.map +1 -1
- package/dist/services/subagents/execution-runner.js +125 -10
- package/dist/services/subagents/execution-runner.js.map +1 -1
- package/dist/services/subagents/mentor-runner.d.ts +5 -1
- package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
- package/dist/services/subagents/mentor-runner.js +60 -3
- package/dist/services/subagents/mentor-runner.js.map +1 -1
- package/dist/services/subagents/runtime.d.ts +2 -0
- package/dist/services/subagents/runtime.d.ts.map +1 -1
- package/dist/services/subagents/runtime.js +32 -2
- package/dist/services/subagents/runtime.js.map +1 -1
- package/dist/services/subagents/subagent-async-registry.d.ts +67 -0
- package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -0
- package/dist/services/subagents/subagent-async-registry.js +506 -0
- package/dist/services/subagents/subagent-async-registry.js.map +1 -0
- package/dist/services/subagents/subagent-manager.d.ts +31 -0
- package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
- package/dist/services/subagents/subagent-manager.js +61 -1
- package/dist/services/subagents/subagent-manager.js.map +1 -1
- package/dist/services/subagents/subagent-notification-store.d.ts +107 -0
- package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -0
- package/dist/services/subagents/subagent-notification-store.js +209 -0
- package/dist/services/subagents/subagent-notification-store.js.map +1 -0
- package/dist/services/subagents/subagent-run-control.d.ts +41 -0
- package/dist/services/subagents/subagent-run-control.d.ts.map +1 -0
- package/dist/services/subagents/subagent-run-control.js +166 -0
- package/dist/services/subagents/subagent-run-control.js.map +1 -0
- package/dist/services/subagents/subagent-session.d.ts +12 -1
- package/dist/services/subagents/subagent-session.d.ts.map +1 -1
- package/dist/services/subagents/subagent-session.js +29 -6
- package/dist/services/subagents/subagent-session.js.map +1 -1
- package/dist/services/subagents/tool-policy.d.ts +24 -4
- package/dist/services/subagents/tool-policy.d.ts.map +1 -1
- package/dist/services/subagents/tool-policy.js +134 -14
- package/dist/services/subagents/tool-policy.js.map +1 -1
- package/dist/services/subagents/types.d.ts +104 -0
- package/dist/services/subagents/types.d.ts.map +1 -1
- package/dist/services/subagents/types.js +1 -0
- package/dist/services/subagents/types.js.map +1 -1
- package/dist/services/subagents/utils.d.ts +6 -0
- package/dist/services/subagents/utils.d.ts.map +1 -1
- package/dist/services/subagents/utils.js +21 -0
- package/dist/services/subagents/utils.js.map +1 -1
- package/dist/tools/agent/ask-orchestrator.d.ts +11 -0
- package/dist/tools/agent/ask-orchestrator.d.ts.map +1 -0
- package/dist/tools/agent/ask-orchestrator.js +39 -0
- package/dist/tools/agent/ask-orchestrator.js.map +1 -0
- package/dist/tools/agent/run-subagent-async.d.ts +67 -0
- package/dist/tools/agent/run-subagent-async.d.ts.map +1 -0
- package/dist/tools/agent/run-subagent-async.js +401 -0
- package/dist/tools/agent/run-subagent-async.js.map +1 -0
- package/dist/tools/file/code-context.d.ts +1 -0
- package/dist/tools/file/code-context.d.ts.map +1 -1
- package/dist/tools/file/code-context.js +4 -4
- package/dist/tools/file/code-context.js.map +1 -1
- package/dist/tools/file/grep.d.ts +1 -0
- package/dist/tools/file/grep.d.ts.map +1 -1
- package/dist/tools/file/grep.js +16 -10
- package/dist/tools/file/grep.js.map +1 -1
- package/dist/types/message.d.ts +1 -0
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
- package/dist/utils/conversation/conversation-event-handler.js +7 -3
- package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +10 -0
- package/dist/utils/settings-command.js.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-network-approval.d.ts +2 -1
- package/dist/utils/shell/sandbox/sandbox-network-approval.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-network-approval.js +17 -1
- package/dist/utils/shell/sandbox/sandbox-network-approval.js.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-network-store.d.ts +20 -0
- package/dist/utils/shell/sandbox/sandbox-network-store.d.ts.map +1 -0
- package/dist/utils/shell/sandbox/sandbox-network-store.js +99 -0
- package/dist/utils/shell/sandbox/sandbox-network-store.js.map +1 -0
- 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
|
|
52
|
+
/** Abort signal shared by the foreground subagent runs of the current turn. */
|
|
45
53
|
get signal(): AbortSignal;
|
|
46
|
-
/**
|
|
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
|
-
/**
|
|
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,
|
|
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.#
|
|
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
|
-
|
|
32
|
-
|
|
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.#
|
|
36
|
-
|
|
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
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;
|
|
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
|
-
-
|
|
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
|
|
25
|
+
The user will primarily request you perform software engineering tasks: solving bugs, adding functionality, refactoring, explaining code, and more.
|
|
73
26
|
|
|
74
|
-
-
|
|
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
|
-
-
|
|
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"}
|