@n8n/agents 0.10.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.tsbuildinfo +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.js +36 -5
- package/dist/index.js.map +1 -1
- package/dist/runtime/agent-runtime.d.ts +14 -6
- package/dist/runtime/agent-runtime.js +359 -267
- package/dist/runtime/agent-runtime.js.map +1 -1
- package/dist/runtime/delegate-sub-agent-tool.d.ts +87 -0
- package/dist/runtime/delegate-sub-agent-tool.js +362 -0
- package/dist/runtime/delegate-sub-agent-tool.js.map +1 -0
- package/dist/runtime/event-bus.d.ts +8 -0
- package/dist/runtime/event-bus.js +48 -0
- package/dist/runtime/event-bus.js.map +1 -1
- package/dist/runtime/mcp-connection.d.ts +2 -3
- package/dist/runtime/mcp-connection.js +3 -6
- package/dist/runtime/mcp-connection.js.map +1 -1
- package/dist/runtime/message-list.d.ts +9 -3
- package/dist/runtime/message-list.js +16 -5
- package/dist/runtime/message-list.js.map +1 -1
- package/dist/runtime/messages.js +10 -2
- package/dist/runtime/messages.js.map +1 -1
- package/dist/runtime/model-factory.js +12 -0
- package/dist/runtime/model-factory.js.map +1 -1
- package/dist/runtime/provider-credentials.d.ts +13 -0
- package/dist/runtime/provider-credentials.js +1 -0
- package/dist/runtime/provider-credentials.js.map +1 -1
- package/dist/runtime/runtime-helpers.d.ts +1 -2
- package/dist/runtime/runtime-helpers.js +0 -8
- package/dist/runtime/runtime-helpers.js.map +1 -1
- package/dist/runtime/sdk-owned-tool.d.ts +4 -0
- package/dist/runtime/sdk-owned-tool.js +19 -0
- package/dist/runtime/sdk-owned-tool.js.map +1 -0
- package/dist/runtime/stream.js +8 -0
- package/dist/runtime/stream.js.map +1 -1
- package/dist/runtime/sub-agent-task-path.d.ts +10 -0
- package/dist/runtime/sub-agent-task-path.js +39 -0
- package/dist/runtime/sub-agent-task-path.js.map +1 -0
- package/dist/runtime/title-generation.js +8 -5
- package/dist/runtime/title-generation.js.map +1 -1
- package/dist/runtime/tool-adapter.d.ts +0 -9
- package/dist/runtime/tool-adapter.js +12 -21
- package/dist/runtime/tool-adapter.js.map +1 -1
- package/dist/runtime/write-todos-tool.d.ts +3 -0
- package/dist/runtime/write-todos-tool.js +95 -0
- package/dist/runtime/write-todos-tool.js.map +1 -0
- package/dist/sdk/agent.d.ts +19 -12
- package/dist/sdk/agent.js +318 -91
- package/dist/sdk/agent.js.map +1 -1
- package/dist/sdk/cancellation.d.ts +7 -0
- package/dist/sdk/cancellation.js +16 -0
- package/dist/sdk/cancellation.js.map +1 -0
- package/dist/sdk/catalog.js +40 -4
- package/dist/sdk/catalog.js.map +1 -1
- package/dist/sdk/guardrails/index.d.ts +5 -0
- package/dist/sdk/guardrails/index.js +15 -0
- package/dist/sdk/guardrails/index.js.map +1 -0
- package/dist/sdk/guardrails/patterns.d.ts +13 -0
- package/dist/sdk/guardrails/patterns.js +61 -0
- package/dist/sdk/guardrails/patterns.js.map +1 -0
- package/dist/sdk/guardrails/redactor.d.ts +24 -0
- package/dist/sdk/guardrails/redactor.js +86 -0
- package/dist/sdk/guardrails/redactor.js.map +1 -0
- package/dist/sdk/guardrails/streaming-redactor.d.ts +9 -0
- package/dist/sdk/guardrails/streaming-redactor.js +43 -0
- package/dist/sdk/guardrails/streaming-redactor.js.map +1 -0
- package/dist/sdk/mcp-client.d.ts +1 -1
- package/dist/sdk/mcp-client.js +2 -2
- package/dist/sdk/mcp-client.js.map +1 -1
- package/dist/sdk/memory.d.ts +1 -3
- package/dist/sdk/memory.js +0 -14
- package/dist/sdk/memory.js.map +1 -1
- package/dist/sdk/provider-capabilities.js +1 -0
- package/dist/sdk/provider-capabilities.js.map +1 -1
- package/dist/sdk/tool.d.ts +3 -0
- package/dist/sdk/tool.js +42 -10
- package/dist/sdk/tool.js.map +1 -1
- package/dist/storage/base-memory.d.ts +0 -31
- package/dist/storage/base-memory.js +0 -9
- package/dist/storage/base-memory.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/runtime/event.d.ts +31 -1
- package/dist/types/runtime/event.js +2 -0
- package/dist/types/runtime/event.js.map +1 -1
- package/dist/types/sdk/agent-builder.d.ts +0 -1
- package/dist/types/sdk/agent.d.ts +20 -15
- package/dist/types/sdk/guardrail.d.ts +1 -1
- package/dist/types/sdk/memory.d.ts +0 -42
- package/dist/types/sdk/message.d.ts +1 -0
- package/dist/types/sdk/tool.d.ts +19 -1
- package/dist/utils/json-schema.d.ts +3 -0
- package/dist/utils/json-schema.js +72 -0
- package/dist/utils/json-schema.js.map +1 -0
- package/dist/workspace/filesystem/daytona-filesystem.d.ts +25 -0
- package/dist/workspace/filesystem/daytona-filesystem.js +130 -0
- package/dist/workspace/filesystem/daytona-filesystem.js.map +1 -0
- package/dist/workspace/filesystem/n8n-sandbox-filesystem.d.ts +25 -0
- package/dist/workspace/filesystem/n8n-sandbox-filesystem.js +126 -0
- package/dist/workspace/filesystem/n8n-sandbox-filesystem.js.map +1 -0
- package/dist/workspace/sandbox/create-workspace.d.ts +4 -0
- package/dist/workspace/sandbox/create-workspace.js +68 -0
- package/dist/workspace/sandbox/create-workspace.js.map +1 -0
- package/dist/workspace/sandbox/daytona-auth-manager.d.ts +26 -0
- package/dist/workspace/sandbox/daytona-auth-manager.js +84 -0
- package/dist/workspace/sandbox/daytona-auth-manager.js.map +1 -0
- package/dist/workspace/sandbox/daytona-sandbox.d.ts +72 -0
- package/dist/workspace/sandbox/daytona-sandbox.js +357 -0
- package/dist/workspace/sandbox/daytona-sandbox.js.map +1 -0
- package/dist/workspace/sandbox/index.d.ts +7 -0
- package/dist/workspace/sandbox/index.js +22 -0
- package/dist/workspace/sandbox/index.js.map +1 -0
- package/dist/workspace/sandbox/lazy-daytona.d.ts +2 -0
- package/dist/workspace/sandbox/lazy-daytona.js +12 -0
- package/dist/workspace/sandbox/lazy-daytona.js.map +1 -0
- package/dist/workspace/sandbox/logger.d.ts +12 -0
- package/dist/workspace/sandbox/logger.js +3 -0
- package/dist/workspace/sandbox/logger.js.map +1 -0
- package/dist/workspace/sandbox/n8n-sandbox-sandbox.d.ts +35 -0
- package/dist/workspace/sandbox/n8n-sandbox-sandbox.js +138 -0
- package/dist/workspace/sandbox/n8n-sandbox-sandbox.js.map +1 -0
- package/dist/workspace/sandbox/provider.d.ts +4 -0
- package/dist/workspace/sandbox/provider.js +14 -0
- package/dist/workspace/sandbox/provider.js.map +1 -0
- package/dist/workspace/sandbox/run-in-sandbox.d.ts +26 -0
- package/dist/workspace/sandbox/run-in-sandbox.js +19 -0
- package/dist/workspace/sandbox/run-in-sandbox.js.map +1 -0
- package/dist/workspace/sandbox/types.d.ts +45 -0
- package/dist/workspace/sandbox/types.js +3 -0
- package/dist/workspace/sandbox/types.js.map +1 -0
- package/dist/workspace/sandbox/workspace-root.d.ts +16 -0
- package/dist/workspace/sandbox/workspace-root.js +69 -0
- package/dist/workspace/sandbox/workspace-root.js.map +1 -0
- package/dist/workspace/tools/batch-str-replace-file.js +2 -2
- package/dist/workspace/tools/batch-str-replace-file.js.map +1 -1
- package/dist/workspace/tools/str-replace-file.js +2 -2
- package/dist/workspace/tools/str-replace-file.js.map +1 -1
- package/package.json +29 -17
- package/dist/sdk/network.d.ts +0 -20
- package/dist/sdk/network.js +0 -46
- package/dist/sdk/network.js.map +0 -1
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SUB_AGENT_TASK_DIFFICULTIES = exports.INLINE_DELEGATE_SUB_AGENT_TOOL_METADATA_KEY = exports.DELEGATED_CHILD_SUSPEND_UNSUPPORTED_MESSAGE = exports.INLINE_SUB_AGENT_ID = exports.DELEGATE_SUB_AGENT_TOOL_NAME = void 0;
|
|
4
|
+
exports.createDelegateSubAgentTool = createDelegateSubAgentTool;
|
|
5
|
+
exports.getInlineDelegateSubAgentToolOptions = getInlineDelegateSubAgentToolOptions;
|
|
6
|
+
exports.renderDelegateSubAgentPrompt = renderDelegateSubAgentPrompt;
|
|
7
|
+
exports.failedDelegatedChildSuspendOutput = failedDelegatedChildSuspendOutput;
|
|
8
|
+
exports.generateResultToDelegateSubAgentOutput = generateResultToDelegateSubAgentOutput;
|
|
9
|
+
const zod_1 = require("zod");
|
|
10
|
+
const sdk_owned_tool_1 = require("./sdk-owned-tool");
|
|
11
|
+
const sub_agent_task_path_1 = require("./sub-agent-task-path");
|
|
12
|
+
const message_1 = require("../sdk/message");
|
|
13
|
+
const tool_1 = require("../sdk/tool");
|
|
14
|
+
exports.DELEGATE_SUB_AGENT_TOOL_NAME = 'delegate_subagent';
|
|
15
|
+
exports.INLINE_SUB_AGENT_ID = 'inline';
|
|
16
|
+
exports.DELEGATED_CHILD_SUSPEND_UNSUPPORTED_MESSAGE = 'agents.chat.delegate.childSuspendUnsupported';
|
|
17
|
+
exports.INLINE_DELEGATE_SUB_AGENT_TOOL_METADATA_KEY = 'inlineDelegateSubAgent';
|
|
18
|
+
exports.SUB_AGENT_TASK_DIFFICULTIES = ['low', 'medium', 'high'];
|
|
19
|
+
const SubAgentTaskDifficultySchema = zod_1.z.enum(exports.SUB_AGENT_TASK_DIFFICULTIES);
|
|
20
|
+
const delegateSubAgentInputSchema = zod_1.z.object({
|
|
21
|
+
subAgentId: zod_1.z
|
|
22
|
+
.string()
|
|
23
|
+
.min(1)
|
|
24
|
+
.describe('Required. Use "inline" for a one-off inline sub-agent. Use an exact configured sub-agent ID only when one is listed and fits the task.'),
|
|
25
|
+
taskName: zod_1.z
|
|
26
|
+
.string()
|
|
27
|
+
.min(1)
|
|
28
|
+
.describe('Short human-readable name for this delegated task, e.g. "research_api".'),
|
|
29
|
+
goal: zod_1.z.string().min(1).describe('The concrete goal the sub-agent should accomplish.'),
|
|
30
|
+
context: zod_1.z
|
|
31
|
+
.string()
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('All details the child needs, since it sees nothing else: constraints, paths, data, prior decisions, acceptance criteria, and what you have already tried or ruled out.'),
|
|
34
|
+
expectedOutput: zod_1.z.string().optional().describe('The expected shape or contents of the answer.'),
|
|
35
|
+
difficulty: SubAgentTaskDifficultySchema.optional().describe('Optional difficulty estimate for this delegated task. Use low for simple bounded work, medium for moderate analysis or implementation, and high for complex research, architecture, or multi-step reasoning.'),
|
|
36
|
+
});
|
|
37
|
+
const delegateSubAgentOutputSchema = zod_1.z.object({
|
|
38
|
+
status: zod_1.z.enum(['completed', 'failed', 'suspended']),
|
|
39
|
+
taskPath: zod_1.z.string().optional(),
|
|
40
|
+
runId: zod_1.z.string().optional(),
|
|
41
|
+
threadId: zod_1.z.string().optional(),
|
|
42
|
+
model: zod_1.z.string().optional(),
|
|
43
|
+
answer: zod_1.z.string(),
|
|
44
|
+
structuredOutput: zod_1.z.unknown().optional(),
|
|
45
|
+
usage: zod_1.z
|
|
46
|
+
.object({
|
|
47
|
+
promptTokens: zod_1.z.number().optional(),
|
|
48
|
+
completionTokens: zod_1.z.number().optional(),
|
|
49
|
+
totalTokens: zod_1.z.number().optional(),
|
|
50
|
+
cost: zod_1.z.number().optional(),
|
|
51
|
+
})
|
|
52
|
+
.optional(),
|
|
53
|
+
finishReason: zod_1.z.string().optional(),
|
|
54
|
+
error: zod_1.z.string().optional(),
|
|
55
|
+
pendingSuspend: zod_1.z
|
|
56
|
+
.array(zod_1.z.object({
|
|
57
|
+
runId: zod_1.z.string(),
|
|
58
|
+
toolCallId: zod_1.z.string(),
|
|
59
|
+
toolName: zod_1.z.string(),
|
|
60
|
+
input: zod_1.z.unknown(),
|
|
61
|
+
suspendPayload: zod_1.z.unknown(),
|
|
62
|
+
resumeSchema: zod_1.z.unknown().optional(),
|
|
63
|
+
}))
|
|
64
|
+
.optional(),
|
|
65
|
+
});
|
|
66
|
+
function resolveDelegateSubAgentPolicy(policy) {
|
|
67
|
+
const resolvedPolicy = {
|
|
68
|
+
...policy,
|
|
69
|
+
maxChildren: policy?.maxChildren ?? sub_agent_task_path_1.DEFAULT_SUB_AGENT_MAX_CHILDREN,
|
|
70
|
+
};
|
|
71
|
+
if (!Number.isFinite(resolvedPolicy.maxChildren) ||
|
|
72
|
+
!Number.isInteger(resolvedPolicy.maxChildren)) {
|
|
73
|
+
throw new Error('delegate_subagent policy.maxChildren must be a finite positive integer');
|
|
74
|
+
}
|
|
75
|
+
if (resolvedPolicy.maxChildren < 1) {
|
|
76
|
+
throw new Error('delegate_subagent policy.maxChildren must be at least 1');
|
|
77
|
+
}
|
|
78
|
+
return resolvedPolicy;
|
|
79
|
+
}
|
|
80
|
+
function createDelegateSubAgentTool(options = {}) {
|
|
81
|
+
const childPathIndexes = new Map();
|
|
82
|
+
const resolvedOptions = {
|
|
83
|
+
...options,
|
|
84
|
+
policy: resolveDelegateSubAgentPolicy(options.policy),
|
|
85
|
+
};
|
|
86
|
+
const inlineProviderToolInstruction = resolvedOptions.resolveInlineSubAgentProviderTools
|
|
87
|
+
? "Provider-defined tools are loaded for the inline child's selected model provider."
|
|
88
|
+
: 'Inline children do not inherit provider-defined tools.';
|
|
89
|
+
const tool = new tool_1.Tool(exports.DELEGATE_SUB_AGENT_TOOL_NAME)
|
|
90
|
+
.description('Delegate a bounded, self-contained subtask to a focused child agent that runs in an isolated context and returns only a concise final result. ' +
|
|
91
|
+
'Use it for reasoning-heavy subtasks, context-flooding investigations, or independent workstreams inside a larger deliverable. ' +
|
|
92
|
+
'Do not use it for trivial work, single tool calls, mechanical steps, tasks that need hidden conversation context, or pass-through delegation of the entire user request.')
|
|
93
|
+
.systemInstruction([
|
|
94
|
+
`delegate_subagent runs a focused child agent in a fresh, isolated context and returns only its final answer. Always set subAgentId. Use subAgentId: "inline" to run a one-off inline child that inherits your local and deferred tools after safety filtering. ${inlineProviderToolInstruction} The child cannot see this conversation or your memory, so everything it needs must be in the call.`,
|
|
95
|
+
'Use a configured subagent ID only when one is listed and its name/description fits the subtask better than a generic inline child.',
|
|
96
|
+
...formatAvailableSubAgents(resolvedOptions.availableSubAgents),
|
|
97
|
+
...formatDelegationPolicyInstructions(resolvedOptions.policy),
|
|
98
|
+
'WHEN TO USE delegate_subagent:\n- The request decomposes into 2+ independent workstreams that can be handled separately.\n- A workstream needs substantial research, review, comparison, or analysis.\n- Doing the work inline would flood your context with intermediate findings.\n- A fresh isolated perspective would materially improve a bounded subtask.',
|
|
99
|
+
'WHEN NOT TO USE delegate_subagent:\n- Single-step mechanical work: do it directly.\n- Trivial tasks or one/two tool calls: do them yourself.\n- Tasks that need user interaction or hidden conversation context.\n- Your core synthesis, final judgment, or recommendation.\n- The entire user request as one delegated task; that is pass-through with no value added.',
|
|
100
|
+
`HOW TO DELEGATE:\n- Delegate bounded workstreams, not the final answer.\n- Pass all required context, constraints, language/tone, and expected output.\n- Set difficulty (low, medium, or high) when you can estimate task complexity; omit it to keep the default inline model.\n- If multiple independent workstreams exist, delegate them separately.\n- Inline children inherit your local and deferred tools after safety filtering. ${inlineProviderToolInstruction}\n- Inspect results and synthesize the final response yourself.\n- Verify side-effect claims before presenting them as done.`,
|
|
101
|
+
].join('\n'))
|
|
102
|
+
.input(delegateSubAgentInputSchema)
|
|
103
|
+
.output(delegateSubAgentOutputSchema)
|
|
104
|
+
.handler(async (input, ctx) => await handleDelegateSubAgent(input, ctx, resolvedOptions, childPathIndexes))
|
|
105
|
+
.build();
|
|
106
|
+
return (0, sdk_owned_tool_1.withSdkOwnedBuiltInMetadata)({
|
|
107
|
+
...tool,
|
|
108
|
+
metadata: {
|
|
109
|
+
...tool.metadata,
|
|
110
|
+
[exports.INLINE_DELEGATE_SUB_AGENT_TOOL_METADATA_KEY]: {
|
|
111
|
+
...(resolvedOptions.availableSubAgents !== undefined
|
|
112
|
+
? { availableSubAgents: resolvedOptions.availableSubAgents }
|
|
113
|
+
: {}),
|
|
114
|
+
policy: resolvedOptions.policy,
|
|
115
|
+
...(resolvedOptions.inlineSubAgentBlockedTools !== undefined
|
|
116
|
+
? { inlineSubAgentBlockedTools: resolvedOptions.inlineSubAgentBlockedTools }
|
|
117
|
+
: {}),
|
|
118
|
+
...(resolvedOptions.inlineSubAgentModelsByDifficulty !== undefined
|
|
119
|
+
? {
|
|
120
|
+
inlineSubAgentModelsByDifficulty: resolvedOptions.inlineSubAgentModelsByDifficulty,
|
|
121
|
+
}
|
|
122
|
+
: {}),
|
|
123
|
+
...(resolvedOptions.resolveInlineSubAgentProviderTools !== undefined
|
|
124
|
+
? {
|
|
125
|
+
resolveInlineSubAgentProviderTools: resolvedOptions.resolveInlineSubAgentProviderTools,
|
|
126
|
+
}
|
|
127
|
+
: {}),
|
|
128
|
+
...(resolvedOptions.runSubAgent !== undefined
|
|
129
|
+
? { runSubAgent: resolvedOptions.runSubAgent }
|
|
130
|
+
: {}),
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
function getInlineDelegateSubAgentToolOptions(tool) {
|
|
136
|
+
const value = tool.metadata?.[exports.INLINE_DELEGATE_SUB_AGENT_TOOL_METADATA_KEY];
|
|
137
|
+
if (typeof value !== 'object' || value === null)
|
|
138
|
+
return undefined;
|
|
139
|
+
return value;
|
|
140
|
+
}
|
|
141
|
+
function formatAvailableSubAgents(availableSubAgents) {
|
|
142
|
+
if (!availableSubAgents?.length)
|
|
143
|
+
return [];
|
|
144
|
+
return [
|
|
145
|
+
'Configured subagents are available as specialist options. Use subAgentId: "inline" for the default inline child; pass one of these exact IDs only when that specialist is a better fit:',
|
|
146
|
+
...availableSubAgents.map((subAgent) => {
|
|
147
|
+
const description = subAgent.description ? ` - ${subAgent.description}` : '';
|
|
148
|
+
return `- ${subAgent.id}: ${subAgent.name}${description}`;
|
|
149
|
+
}),
|
|
150
|
+
];
|
|
151
|
+
}
|
|
152
|
+
function formatDelegationPolicyInstructions(policy) {
|
|
153
|
+
if (policy?.maxChildren === undefined)
|
|
154
|
+
return [];
|
|
155
|
+
const runLabel = policy.maxChildren === 1 ? 'run' : 'runs';
|
|
156
|
+
return [
|
|
157
|
+
[
|
|
158
|
+
'DELEGATION PARALLELISM:',
|
|
159
|
+
`- Up to ${policy.maxChildren} child sub-agent ${runLabel} can execute at the same time.`,
|
|
160
|
+
'- This limits parallelism, not the total number of delegated tasks.',
|
|
161
|
+
'- If more independent workstreams are useful, you may issue more delegate_subagent calls; the runtime will run them in batches.',
|
|
162
|
+
].join('\n'),
|
|
163
|
+
];
|
|
164
|
+
}
|
|
165
|
+
async function handleDelegateSubAgent(input, ctx, options, childPathIndexes) {
|
|
166
|
+
let taskPath;
|
|
167
|
+
let request;
|
|
168
|
+
let startedAt;
|
|
169
|
+
try {
|
|
170
|
+
const childPathIndexKey = getChildPathIndexKey(ctx);
|
|
171
|
+
const childPathIndex = childPathIndexes.get(childPathIndexKey) ?? 0;
|
|
172
|
+
taskPath = (0, sub_agent_task_path_1.createChildSubAgentTaskPath)(input.taskName, childPathIndex);
|
|
173
|
+
childPathIndexes.set(childPathIndexKey, childPathIndex + 1);
|
|
174
|
+
request = {
|
|
175
|
+
...input,
|
|
176
|
+
taskPath,
|
|
177
|
+
childCount: childPathIndex,
|
|
178
|
+
...(ctx.runId !== undefined ? { parentRunId: ctx.runId } : {}),
|
|
179
|
+
...(ctx.persistence?.threadId !== undefined
|
|
180
|
+
? { parentThreadId: ctx.persistence.threadId }
|
|
181
|
+
: {}),
|
|
182
|
+
...(ctx.persistence?.resourceId !== undefined
|
|
183
|
+
? { parentResourceId: ctx.persistence.resourceId }
|
|
184
|
+
: {}),
|
|
185
|
+
...(ctx.abortSignal !== undefined ? { parentAbortSignal: ctx.abortSignal } : {}),
|
|
186
|
+
...(ctx.toolCallId !== undefined ? { parentToolCallId: ctx.toolCallId } : {}),
|
|
187
|
+
...(ctx.executionCounter !== undefined
|
|
188
|
+
? { parentExecutionCounter: ctx.executionCounter }
|
|
189
|
+
: {}),
|
|
190
|
+
...(options.policy !== undefined ? { policy: options.policy } : {}),
|
|
191
|
+
};
|
|
192
|
+
startedAt = Date.now();
|
|
193
|
+
emitSubAgentStarted(ctx, request, startedAt);
|
|
194
|
+
if (!options.runSubAgent) {
|
|
195
|
+
throw new Error('delegate_subagent was registered without a runSubAgent callback, and no host runner was provided. Register it on an Agent (for inline delegation) or pass runSubAgent.');
|
|
196
|
+
}
|
|
197
|
+
const output = await options.runSubAgent(request, {
|
|
198
|
+
runInlineSubAgent: () => {
|
|
199
|
+
throw new Error('delegate_subagent host runner does not support inline delegation without helpers.runInlineSubAgent from an Agent build.');
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
emitSubAgentCompleted(ctx, request, output, startedAt);
|
|
203
|
+
return output;
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
if (request !== undefined && startedAt !== undefined) {
|
|
207
|
+
const failedOutput = {
|
|
208
|
+
status: 'failed',
|
|
209
|
+
...(taskPath !== undefined ? { taskPath } : {}),
|
|
210
|
+
answer: '',
|
|
211
|
+
error: stringifyUnknown(error),
|
|
212
|
+
};
|
|
213
|
+
emitSubAgentCompleted(ctx, request, failedOutput, startedAt);
|
|
214
|
+
return failedOutput;
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
status: 'failed',
|
|
218
|
+
...(taskPath !== undefined ? { taskPath } : {}),
|
|
219
|
+
answer: '',
|
|
220
|
+
error: error instanceof Error ? error.message : String(error),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function emitSubAgentStarted(ctx, request, startedAt) {
|
|
225
|
+
ctx.emitEvent?.({
|
|
226
|
+
type: "subagent_started",
|
|
227
|
+
...subAgentLifecycleBase(request),
|
|
228
|
+
startedAt,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
function emitSubAgentCompleted(ctx, request, output, startedAt) {
|
|
232
|
+
const finishedAt = Date.now();
|
|
233
|
+
ctx.emitEvent?.({
|
|
234
|
+
type: "subagent_completed",
|
|
235
|
+
...subAgentLifecycleBase(request),
|
|
236
|
+
status: output.status,
|
|
237
|
+
startedAt,
|
|
238
|
+
finishedAt,
|
|
239
|
+
durationMs: finishedAt - startedAt,
|
|
240
|
+
...(output.runId !== undefined ? { runId: output.runId } : {}),
|
|
241
|
+
...(output.threadId !== undefined ? { threadId: output.threadId } : {}),
|
|
242
|
+
...(output.usage !== undefined ? { usage: output.usage } : {}),
|
|
243
|
+
...(output.finishReason !== undefined ? { finishReason: output.finishReason } : {}),
|
|
244
|
+
...(output.model !== undefined ? { model: output.model } : {}),
|
|
245
|
+
...(output.error !== undefined ? { error: output.error } : {}),
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
function subAgentLifecycleBase(request) {
|
|
249
|
+
return {
|
|
250
|
+
taskName: request.taskName,
|
|
251
|
+
taskPath: request.taskPath,
|
|
252
|
+
...(request.parentRunId !== undefined ? { parentRunId: request.parentRunId } : {}),
|
|
253
|
+
...(request.parentToolCallId !== undefined
|
|
254
|
+
? { parentToolCallId: request.parentToolCallId }
|
|
255
|
+
: {}),
|
|
256
|
+
...(request.subAgentId !== undefined ? { subAgentId: request.subAgentId } : {}),
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
function getChildPathIndexKey(ctx) {
|
|
260
|
+
return ctx.runId ?? ctx.persistence?.threadId ?? ctx.persistence?.resourceId ?? 'adhoc';
|
|
261
|
+
}
|
|
262
|
+
function stringifyUnknown(value) {
|
|
263
|
+
if (value instanceof Error)
|
|
264
|
+
return value.message;
|
|
265
|
+
if (typeof value === 'string')
|
|
266
|
+
return value;
|
|
267
|
+
if (typeof value === 'number' || typeof value === 'boolean' || value === null) {
|
|
268
|
+
return String(value);
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
return JSON.stringify(value);
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return 'Unknown error';
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function renderDelegateSubAgentPrompt(request) {
|
|
278
|
+
const sections = [
|
|
279
|
+
'You are a focused subagent working on a specific delegated task.',
|
|
280
|
+
`YOUR TASK:\n${request.goal}`,
|
|
281
|
+
];
|
|
282
|
+
if (request.context) {
|
|
283
|
+
sections.push(`CONTEXT:\n${request.context}`);
|
|
284
|
+
}
|
|
285
|
+
if (request.expectedOutput) {
|
|
286
|
+
sections.push(`EXPECTED OUTPUT:\n${request.expectedOutput}`);
|
|
287
|
+
}
|
|
288
|
+
sections.push([
|
|
289
|
+
'Complete this task using the tools available to you. When finished, provide a clear, concise summary of:',
|
|
290
|
+
'- What you did',
|
|
291
|
+
'- What you found or accomplished',
|
|
292
|
+
'- Important outputs, decisions, or evidence',
|
|
293
|
+
'- Any issues, assumptions, or limitations',
|
|
294
|
+
'',
|
|
295
|
+
'If the information above is insufficient, do your best with explicitly stated assumptions and note what was missing, rather than stopping to ask.',
|
|
296
|
+
'',
|
|
297
|
+
'Be thorough but concise -- your response is returned to the parent agent as a summary.',
|
|
298
|
+
].join('\n'));
|
|
299
|
+
return sections.join('\n\n');
|
|
300
|
+
}
|
|
301
|
+
function resolveDelegateSubAgentStatus(result) {
|
|
302
|
+
if (result.finishReason === 'error' || result.error !== undefined) {
|
|
303
|
+
return 'failed';
|
|
304
|
+
}
|
|
305
|
+
if (result.pendingSuspend !== undefined && result.pendingSuspend.length > 0) {
|
|
306
|
+
return 'suspended';
|
|
307
|
+
}
|
|
308
|
+
return 'completed';
|
|
309
|
+
}
|
|
310
|
+
function failedDelegatedChildSuspendOutput(taskPath, model) {
|
|
311
|
+
return {
|
|
312
|
+
status: 'failed',
|
|
313
|
+
taskPath,
|
|
314
|
+
answer: '',
|
|
315
|
+
error: exports.DELEGATED_CHILD_SUSPEND_UNSUPPORTED_MESSAGE,
|
|
316
|
+
...(model !== undefined ? { model } : {}),
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
function generateResultToDelegateSubAgentOutput(taskPath, result, threadId) {
|
|
320
|
+
const status = resolveDelegateSubAgentStatus(result);
|
|
321
|
+
return {
|
|
322
|
+
status,
|
|
323
|
+
taskPath,
|
|
324
|
+
runId: result.runId,
|
|
325
|
+
...(threadId !== undefined ? { threadId } : {}),
|
|
326
|
+
...(result.model !== undefined ? { model: result.model } : {}),
|
|
327
|
+
answer: lastText(result.messages),
|
|
328
|
+
...(result.structuredOutput !== undefined ? { structuredOutput: result.structuredOutput } : {}),
|
|
329
|
+
...(result.usage !== undefined
|
|
330
|
+
? {
|
|
331
|
+
usage: {
|
|
332
|
+
promptTokens: result.usage.promptTokens,
|
|
333
|
+
completionTokens: result.usage.completionTokens,
|
|
334
|
+
totalTokens: result.usage.totalTokens,
|
|
335
|
+
...(result.usage.cost !== undefined ? { cost: result.usage.cost } : {}),
|
|
336
|
+
},
|
|
337
|
+
}
|
|
338
|
+
: {}),
|
|
339
|
+
...(result.finishReason !== undefined ? { finishReason: result.finishReason } : {}),
|
|
340
|
+
...(result.error !== undefined ? { error: stringifyUnknown(result.error) } : {}),
|
|
341
|
+
...(status === 'suspended' && result.pendingSuspend !== undefined
|
|
342
|
+
? { pendingSuspend: result.pendingSuspend }
|
|
343
|
+
: {}),
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
function lastText(messages) {
|
|
347
|
+
const llmMessages = (0, message_1.filterLlmMessages)(messages);
|
|
348
|
+
for (let i = llmMessages.length - 1; i >= 0; i--) {
|
|
349
|
+
const message = llmMessages[i];
|
|
350
|
+
if (!message)
|
|
351
|
+
continue;
|
|
352
|
+
const text = message.content
|
|
353
|
+
.filter((content) => content.type === 'text')
|
|
354
|
+
.map((content) => content.text)
|
|
355
|
+
.join('\n')
|
|
356
|
+
.trim();
|
|
357
|
+
if (text)
|
|
358
|
+
return text;
|
|
359
|
+
}
|
|
360
|
+
return '';
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=delegate-sub-agent-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegate-sub-agent-tool.js","sourceRoot":"","sources":["../../src/runtime/delegate-sub-agent-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import { AgentEvent } from '../types/runtime/event';
|
|
2
2
|
import type { AgentEventData, AgentEventHandler } from '../types/runtime/event';
|
|
3
|
+
export interface AgentAbortScope {
|
|
4
|
+
readonly signal: AbortSignal;
|
|
5
|
+
readonly isAborted: boolean;
|
|
6
|
+
abort(): void;
|
|
7
|
+
dispose(): void;
|
|
8
|
+
}
|
|
3
9
|
export declare class AgentEventBus {
|
|
4
10
|
private handlers;
|
|
5
11
|
private controller;
|
|
6
12
|
private externalCleanup?;
|
|
13
|
+
private abortScopes;
|
|
7
14
|
on(event: AgentEvent, handler: AgentEventHandler): void;
|
|
8
15
|
off(event: AgentEvent, handler: AgentEventHandler): void;
|
|
9
16
|
emit(data: AgentEventData): void;
|
|
10
17
|
abort(): void;
|
|
18
|
+
createAbortScope(externalSignal?: AbortSignal): AgentAbortScope;
|
|
11
19
|
resetAbort(externalSignal?: AbortSignal): void;
|
|
12
20
|
get signal(): AbortSignal;
|
|
13
21
|
get isAborted(): boolean;
|
|
@@ -3,10 +3,44 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AgentEvent = exports.AgentEventBus = void 0;
|
|
4
4
|
const event_1 = require("../types/runtime/event");
|
|
5
5
|
Object.defineProperty(exports, "AgentEvent", { enumerable: true, get: function () { return event_1.AgentEvent; } });
|
|
6
|
+
class EventBusAbortScope {
|
|
7
|
+
constructor(externalSignal, onDispose) {
|
|
8
|
+
this.onDispose = onDispose;
|
|
9
|
+
this.controller = new AbortController();
|
|
10
|
+
this.disposed = false;
|
|
11
|
+
if (!externalSignal)
|
|
12
|
+
return;
|
|
13
|
+
if (externalSignal.aborted) {
|
|
14
|
+
this.controller.abort(externalSignal.reason);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const onAbort = () => this.controller.abort(externalSignal.reason);
|
|
18
|
+
externalSignal.addEventListener('abort', onAbort, { once: true });
|
|
19
|
+
this.externalCleanup = () => externalSignal.removeEventListener('abort', onAbort);
|
|
20
|
+
}
|
|
21
|
+
get signal() {
|
|
22
|
+
return this.controller.signal;
|
|
23
|
+
}
|
|
24
|
+
get isAborted() {
|
|
25
|
+
return this.controller.signal.aborted;
|
|
26
|
+
}
|
|
27
|
+
abort() {
|
|
28
|
+
this.controller.abort();
|
|
29
|
+
}
|
|
30
|
+
dispose() {
|
|
31
|
+
if (this.disposed)
|
|
32
|
+
return;
|
|
33
|
+
this.disposed = true;
|
|
34
|
+
this.externalCleanup?.();
|
|
35
|
+
this.externalCleanup = undefined;
|
|
36
|
+
this.onDispose(this);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
6
39
|
class AgentEventBus {
|
|
7
40
|
constructor() {
|
|
8
41
|
this.handlers = new Map();
|
|
9
42
|
this.controller = new AbortController();
|
|
43
|
+
this.abortScopes = new Set();
|
|
10
44
|
}
|
|
11
45
|
on(event, handler) {
|
|
12
46
|
let set = this.handlers.get(event);
|
|
@@ -29,6 +63,16 @@ class AgentEventBus {
|
|
|
29
63
|
}
|
|
30
64
|
abort() {
|
|
31
65
|
this.controller.abort();
|
|
66
|
+
for (const scope of this.abortScopes) {
|
|
67
|
+
scope.abort();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
createAbortScope(externalSignal) {
|
|
71
|
+
const scope = new EventBusAbortScope(externalSignal, (disposed) => {
|
|
72
|
+
this.abortScopes.delete(disposed);
|
|
73
|
+
});
|
|
74
|
+
this.abortScopes.add(scope);
|
|
75
|
+
return scope;
|
|
32
76
|
}
|
|
33
77
|
resetAbort(externalSignal) {
|
|
34
78
|
this.externalCleanup?.();
|
|
@@ -54,6 +98,10 @@ class AgentEventBus {
|
|
|
54
98
|
dispose() {
|
|
55
99
|
this.externalCleanup?.();
|
|
56
100
|
this.externalCleanup = undefined;
|
|
101
|
+
for (const scope of [...this.abortScopes]) {
|
|
102
|
+
scope.dispose();
|
|
103
|
+
}
|
|
104
|
+
this.abortScopes.clear();
|
|
57
105
|
}
|
|
58
106
|
}
|
|
59
107
|
exports.AgentEventBus = AgentEventBus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/runtime/event-bus.ts"],"names":[],"mappings":";;;AAAA,kDAAoD;
|
|
1
|
+
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/runtime/event-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,15 +5,14 @@ export type McpCallToolResult = CallToolResult;
|
|
|
5
5
|
export declare class McpConnection {
|
|
6
6
|
private client;
|
|
7
7
|
private config;
|
|
8
|
-
private readonly shouldRequireToolApproval;
|
|
9
8
|
private connectionPromise;
|
|
10
9
|
private disconnectPromise;
|
|
11
10
|
private closed;
|
|
12
|
-
constructor(config: McpServerConfig
|
|
11
|
+
constructor(config: McpServerConfig);
|
|
13
12
|
connect(): Promise<void>;
|
|
14
13
|
private connectWithTransport;
|
|
15
14
|
listTools(): Promise<BuiltTool[]>;
|
|
16
|
-
private
|
|
15
|
+
private shouldRequireToolApproval;
|
|
17
16
|
callTool(name: string, args: Record<string, unknown>): Promise<McpCallToolResult>;
|
|
18
17
|
disconnect(): Promise<void>;
|
|
19
18
|
private doDisconnect;
|
|
@@ -54,12 +54,11 @@ async function loadMcpSdk() {
|
|
|
54
54
|
return await mcpSdkPromise;
|
|
55
55
|
}
|
|
56
56
|
class McpConnection {
|
|
57
|
-
constructor(config
|
|
57
|
+
constructor(config) {
|
|
58
58
|
this.connectionPromise = undefined;
|
|
59
59
|
this.disconnectPromise = undefined;
|
|
60
60
|
this.closed = false;
|
|
61
61
|
this.config = config;
|
|
62
|
-
this.shouldRequireToolApproval = requireToolApproval;
|
|
63
62
|
}
|
|
64
63
|
async connect() {
|
|
65
64
|
if (this.connectionPromise !== undefined) {
|
|
@@ -114,13 +113,11 @@ class McpConnection {
|
|
|
114
113
|
const result = await this.client.listTools();
|
|
115
114
|
const resolver = new mcp_tool_resolver_1.McpToolResolver();
|
|
116
115
|
const tools = resolver.resolve(this, result.tools);
|
|
117
|
-
return tools.map((t) => t.suspendSchema || !this.
|
|
116
|
+
return tools.map((t) => t.suspendSchema || !this.shouldRequireToolApproval(t)
|
|
118
117
|
? t
|
|
119
118
|
: (0, tool_1.wrapToolForApproval)(t, { requireApproval: true }));
|
|
120
119
|
}
|
|
121
|
-
|
|
122
|
-
if (this.shouldRequireToolApproval)
|
|
123
|
-
return true;
|
|
120
|
+
shouldRequireToolApproval(tool) {
|
|
124
121
|
const { requireApproval } = this.config;
|
|
125
122
|
if (requireApproval === true)
|
|
126
123
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-connection.js","sourceRoot":"","sources":["../../src/runtime/mcp-connection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,2DAAsD;AACtD,sCAAkD;AAelD,IAAI,aAAgD,CAAC;AAOrD,KAAK,UAAU,UAAU;IACxB,aAAa,KAAK,OAAO,CAAC,GAAG,CAAC;0DACtB,2CAA2C;0DAC3C,yCAAyC;0DACzC,2CAA2C;0DAC3C,oDAAoD;0DACpD,oCAAoC;KAC3C,CAAC,CAAC,IAAI,CACN,CAAC,CACA,EAAE,MAAM,EAAE,EACV,EAAE,kBAAkB,EAAE,EACtB,EAAE,oBAAoB,EAAE,EACxB,EAAE,6BAA6B,EAAE,EACjC,EAAE,oBAAoB,EAAE,EACxB,EAAE,EAAE,CAAC,CAAC;QACN,MAAM;QACN,kBAAkB;QAClB,oBAAoB;QACpB,6BAA6B;QAC7B,oBAAoB;KACpB,CAAC,CACF,CAAC;IACF,OAAO,MAAM,aAAa,CAAC;AAC5B,CAAC;AAGD,MAAa,aAAa;
|
|
1
|
+
{"version":3,"file":"mcp-connection.js","sourceRoot":"","sources":["../../src/runtime/mcp-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import type { ProviderOptions } from '@ai-sdk/provider-utils';
|
|
2
|
-
import type { ModelMessage } from 'ai';
|
|
2
|
+
import type { ModelMessage, SystemModelMessage } from 'ai';
|
|
3
3
|
import type { SerializedMessageList } from '../types/runtime/message-list';
|
|
4
4
|
import type { AgentDbMessage, AgentMessage } from '../types/sdk/message';
|
|
5
5
|
import type { JSONValue } from '../types/utils/json';
|
|
6
6
|
export type { SerializedMessageList };
|
|
7
|
+
export type LlmContext = {
|
|
8
|
+
system: SystemModelMessage;
|
|
9
|
+
messages: ModelMessage[];
|
|
10
|
+
};
|
|
7
11
|
export declare class AgentMessageList {
|
|
8
12
|
private all;
|
|
9
13
|
private historySet;
|
|
@@ -18,11 +22,13 @@ export declare class AgentMessageList {
|
|
|
18
22
|
addHistory(messages: AgentMessage[] | AgentDbMessage[]): void;
|
|
19
23
|
addInput(messages: AgentMessage[] | AgentDbMessage[]): void;
|
|
20
24
|
addResponse(messages: AgentMessage[] | AgentDbMessage[]): void;
|
|
21
|
-
setToolCallResult(toolCallId: string, output: JSONValue
|
|
25
|
+
setToolCallResult(toolCallId: string, output: JSONValue, options?: {
|
|
26
|
+
canceled?: boolean;
|
|
27
|
+
}): AgentDbMessage | undefined;
|
|
22
28
|
setToolCallError(toolCallId: string, error: unknown): AgentDbMessage | undefined;
|
|
23
29
|
private findToolCallHost;
|
|
24
30
|
private findToolCallBlock;
|
|
25
|
-
forLlm(baseInstructions: string, instructionProviderOptions?: ProviderOptions):
|
|
31
|
+
forLlm(baseInstructions: string, instructionProviderOptions?: ProviderOptions): LlmContext;
|
|
26
32
|
turnDelta(): AgentDbMessage[];
|
|
27
33
|
responseDelta(): AgentDbMessage[];
|
|
28
34
|
serialize(): SerializedMessageList;
|
|
@@ -77,7 +77,7 @@ class AgentMessageList {
|
|
|
77
77
|
}
|
|
78
78
|
this.sortAllByCreatedAt();
|
|
79
79
|
}
|
|
80
|
-
setToolCallResult(toolCallId, output) {
|
|
80
|
+
setToolCallResult(toolCallId, output, options) {
|
|
81
81
|
const host = this.findToolCallHost(toolCallId);
|
|
82
82
|
if (!host)
|
|
83
83
|
return undefined;
|
|
@@ -87,6 +87,12 @@ class AgentMessageList {
|
|
|
87
87
|
const mutableBlock = block;
|
|
88
88
|
mutableBlock.state = 'resolved';
|
|
89
89
|
mutableBlock.output = output;
|
|
90
|
+
if (options?.canceled) {
|
|
91
|
+
mutableBlock.canceled = true;
|
|
92
|
+
}
|
|
93
|
+
else if ('canceled' in mutableBlock) {
|
|
94
|
+
delete mutableBlock.canceled;
|
|
95
|
+
}
|
|
90
96
|
if ('error' in mutableBlock) {
|
|
91
97
|
delete mutableBlock.error;
|
|
92
98
|
}
|
|
@@ -129,10 +135,15 @@ class AgentMessageList {
|
|
|
129
135
|
if (observationLogMemory) {
|
|
130
136
|
systemPrompt += `\n\n${observationLogMemory}`;
|
|
131
137
|
}
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
138
|
+
const system = {
|
|
139
|
+
role: 'system',
|
|
140
|
+
content: systemPrompt,
|
|
141
|
+
...(instructionProviderOptions ? { providerOptions: instructionProviderOptions } : {}),
|
|
142
|
+
};
|
|
143
|
+
return {
|
|
144
|
+
system,
|
|
145
|
+
messages: (0, messages_1.toAiMessages)((0, message_1.filterLlmMessages)((0, strip_orphaned_tool_messages_1.stripOrphanedToolMessages)(this.all))),
|
|
146
|
+
};
|
|
136
147
|
}
|
|
137
148
|
turnDelta() {
|
|
138
149
|
return this.all.filter((m) => this.inputSet.has(m) || this.responseSet.has(m));
|