@lleverage-ai/agent-sdk 0.0.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/LICENSE +21 -0
- package/README.md +2321 -0
- package/dist/agent.d.ts +52 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +2122 -0
- package/dist/agent.js.map +1 -0
- package/dist/backend.d.ts +378 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +71 -0
- package/dist/backend.js.map +1 -0
- package/dist/backends/composite.d.ts +258 -0
- package/dist/backends/composite.d.ts.map +1 -0
- package/dist/backends/composite.js +437 -0
- package/dist/backends/composite.js.map +1 -0
- package/dist/backends/filesystem.d.ts +268 -0
- package/dist/backends/filesystem.d.ts.map +1 -0
- package/dist/backends/filesystem.js +623 -0
- package/dist/backends/filesystem.js.map +1 -0
- package/dist/backends/index.d.ts +14 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +14 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/persistent.d.ts +312 -0
- package/dist/backends/persistent.d.ts.map +1 -0
- package/dist/backends/persistent.js +519 -0
- package/dist/backends/persistent.js.map +1 -0
- package/dist/backends/sandbox.d.ts +315 -0
- package/dist/backends/sandbox.d.ts.map +1 -0
- package/dist/backends/sandbox.js +490 -0
- package/dist/backends/sandbox.js.map +1 -0
- package/dist/backends/state.d.ts +225 -0
- package/dist/backends/state.d.ts.map +1 -0
- package/dist/backends/state.js +396 -0
- package/dist/backends/state.js.map +1 -0
- package/dist/checkpointer/file-saver.d.ts +182 -0
- package/dist/checkpointer/file-saver.d.ts.map +1 -0
- package/dist/checkpointer/file-saver.js +298 -0
- package/dist/checkpointer/file-saver.js.map +1 -0
- package/dist/checkpointer/index.d.ts +40 -0
- package/dist/checkpointer/index.d.ts.map +1 -0
- package/dist/checkpointer/index.js +40 -0
- package/dist/checkpointer/index.js.map +1 -0
- package/dist/checkpointer/kv-saver.d.ts +142 -0
- package/dist/checkpointer/kv-saver.d.ts.map +1 -0
- package/dist/checkpointer/kv-saver.js +176 -0
- package/dist/checkpointer/kv-saver.js.map +1 -0
- package/dist/checkpointer/memory-saver.d.ts +158 -0
- package/dist/checkpointer/memory-saver.d.ts.map +1 -0
- package/dist/checkpointer/memory-saver.js +222 -0
- package/dist/checkpointer/memory-saver.js.map +1 -0
- package/dist/checkpointer/types.d.ts +353 -0
- package/dist/checkpointer/types.d.ts.map +1 -0
- package/dist/checkpointer/types.js +159 -0
- package/dist/checkpointer/types.js.map +1 -0
- package/dist/context-manager.d.ts +627 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +1039 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/context.d.ts +57 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +76 -0
- package/dist/context.js.map +1 -0
- package/dist/errors/index.d.ts +611 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +1023 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/generation-helpers.d.ts +126 -0
- package/dist/generation-helpers.d.ts.map +1 -0
- package/dist/generation-helpers.js +181 -0
- package/dist/generation-helpers.js.map +1 -0
- package/dist/hooks/audit.d.ts +210 -0
- package/dist/hooks/audit.d.ts.map +1 -0
- package/dist/hooks/audit.js +305 -0
- package/dist/hooks/audit.js.map +1 -0
- package/dist/hooks/cache.d.ts +180 -0
- package/dist/hooks/cache.d.ts.map +1 -0
- package/dist/hooks/cache.js +273 -0
- package/dist/hooks/cache.js.map +1 -0
- package/dist/hooks/guardrails.d.ts +145 -0
- package/dist/hooks/guardrails.d.ts.map +1 -0
- package/dist/hooks/guardrails.js +326 -0
- package/dist/hooks/guardrails.js.map +1 -0
- package/dist/hooks/index.d.ts +18 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +32 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/logging.d.ts +193 -0
- package/dist/hooks/logging.d.ts.map +1 -0
- package/dist/hooks/logging.js +345 -0
- package/dist/hooks/logging.js.map +1 -0
- package/dist/hooks/parallel-guardrails.d.ts +268 -0
- package/dist/hooks/parallel-guardrails.d.ts.map +1 -0
- package/dist/hooks/parallel-guardrails.js +416 -0
- package/dist/hooks/parallel-guardrails.js.map +1 -0
- package/dist/hooks/rate-limit.d.ts +305 -0
- package/dist/hooks/rate-limit.d.ts.map +1 -0
- package/dist/hooks/rate-limit.js +372 -0
- package/dist/hooks/rate-limit.js.map +1 -0
- package/dist/hooks/retry.d.ts +144 -0
- package/dist/hooks/retry.d.ts.map +1 -0
- package/dist/hooks/retry.js +210 -0
- package/dist/hooks/retry.js.map +1 -0
- package/dist/hooks/secrets.d.ts +174 -0
- package/dist/hooks/secrets.d.ts.map +1 -0
- package/dist/hooks/secrets.js +306 -0
- package/dist/hooks/secrets.js.map +1 -0
- package/dist/hooks.d.ts +229 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +352 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/env.d.ts +25 -0
- package/dist/mcp/env.d.ts.map +1 -0
- package/dist/mcp/env.js +18 -0
- package/dist/mcp/env.js.map +1 -0
- package/dist/mcp/index.d.ts +16 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +184 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +446 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/types.d.ts +58 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +7 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mcp/validation.d.ts +119 -0
- package/dist/mcp/validation.d.ts.map +1 -0
- package/dist/mcp/validation.js +407 -0
- package/dist/mcp/validation.js.map +1 -0
- package/dist/mcp/virtual-server.d.ts +78 -0
- package/dist/mcp/virtual-server.d.ts.map +1 -0
- package/dist/mcp/virtual-server.js +137 -0
- package/dist/mcp/virtual-server.js.map +1 -0
- package/dist/memory/filesystem-store.d.ts +217 -0
- package/dist/memory/filesystem-store.d.ts.map +1 -0
- package/dist/memory/filesystem-store.js +343 -0
- package/dist/memory/filesystem-store.js.map +1 -0
- package/dist/memory/index.d.ts +46 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +46 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/loader.d.ts +396 -0
- package/dist/memory/loader.d.ts.map +1 -0
- package/dist/memory/loader.js +419 -0
- package/dist/memory/loader.js.map +1 -0
- package/dist/memory/permissions.d.ts +282 -0
- package/dist/memory/permissions.d.ts.map +1 -0
- package/dist/memory/permissions.js +297 -0
- package/dist/memory/permissions.js.map +1 -0
- package/dist/memory/rules.d.ts +249 -0
- package/dist/memory/rules.d.ts.map +1 -0
- package/dist/memory/rules.js +362 -0
- package/dist/memory/rules.js.map +1 -0
- package/dist/memory/store.d.ts +286 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +263 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/middleware/apply.d.ts +73 -0
- package/dist/middleware/apply.d.ts.map +1 -0
- package/dist/middleware/apply.js +219 -0
- package/dist/middleware/apply.js.map +1 -0
- package/dist/middleware/context.d.ts +33 -0
- package/dist/middleware/context.d.ts.map +1 -0
- package/dist/middleware/context.js +176 -0
- package/dist/middleware/context.js.map +1 -0
- package/dist/middleware/index.d.ts +31 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +32 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/logging.d.ts +137 -0
- package/dist/middleware/logging.d.ts.map +1 -0
- package/dist/middleware/logging.js +374 -0
- package/dist/middleware/logging.js.map +1 -0
- package/dist/middleware/types.d.ts +183 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +11 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/observability/events.d.ts +183 -0
- package/dist/observability/events.d.ts.map +1 -0
- package/dist/observability/events.js +305 -0
- package/dist/observability/events.js.map +1 -0
- package/dist/observability/index.d.ts +55 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +87 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/logger.d.ts +318 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +436 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +341 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +490 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/preset.d.ts +161 -0
- package/dist/observability/preset.d.ts.map +1 -0
- package/dist/observability/preset.js +133 -0
- package/dist/observability/preset.js.map +1 -0
- package/dist/observability/streaming.d.ts +113 -0
- package/dist/observability/streaming.d.ts.map +1 -0
- package/dist/observability/streaming.js +114 -0
- package/dist/observability/streaming.js.map +1 -0
- package/dist/observability/tracing.d.ts +378 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +539 -0
- package/dist/observability/tracing.js.map +1 -0
- package/dist/plugins.d.ts +55 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +63 -0
- package/dist/plugins.js.map +1 -0
- package/dist/presets/index.d.ts +7 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +7 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/production.d.ts +262 -0
- package/dist/presets/production.d.ts.map +1 -0
- package/dist/presets/production.js +295 -0
- package/dist/presets/production.js.map +1 -0
- package/dist/security/index.d.ts +179 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +323 -0
- package/dist/security/index.js.map +1 -0
- package/dist/subagents/advanced.d.ts +413 -0
- package/dist/subagents/advanced.d.ts.map +1 -0
- package/dist/subagents/advanced.js +396 -0
- package/dist/subagents/advanced.js.map +1 -0
- package/dist/subagents/index.d.ts +14 -0
- package/dist/subagents/index.d.ts.map +1 -0
- package/dist/subagents/index.js +15 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents.d.ts +73 -0
- package/dist/subagents.d.ts.map +1 -0
- package/dist/subagents.js +213 -0
- package/dist/subagents.js.map +1 -0
- package/dist/task-store/file-store.d.ts +76 -0
- package/dist/task-store/file-store.d.ts.map +1 -0
- package/dist/task-store/file-store.js +190 -0
- package/dist/task-store/file-store.js.map +1 -0
- package/dist/task-store/index.d.ts +11 -0
- package/dist/task-store/index.d.ts.map +1 -0
- package/dist/task-store/index.js +10 -0
- package/dist/task-store/index.js.map +1 -0
- package/dist/task-store/kv-store.d.ts +140 -0
- package/dist/task-store/kv-store.d.ts.map +1 -0
- package/dist/task-store/kv-store.js +169 -0
- package/dist/task-store/kv-store.js.map +1 -0
- package/dist/task-store/memory-store.d.ts +66 -0
- package/dist/task-store/memory-store.d.ts.map +1 -0
- package/dist/task-store/memory-store.js +125 -0
- package/dist/task-store/memory-store.js.map +1 -0
- package/dist/task-store/types.d.ts +235 -0
- package/dist/task-store/types.d.ts.map +1 -0
- package/dist/task-store/types.js +110 -0
- package/dist/task-store/types.js.map +1 -0
- package/dist/testing/assertions.d.ts +401 -0
- package/dist/testing/assertions.d.ts.map +1 -0
- package/dist/testing/assertions.js +630 -0
- package/dist/testing/assertions.js.map +1 -0
- package/dist/testing/index.d.ts +343 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +360 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-agent.d.ts +214 -0
- package/dist/testing/mock-agent.d.ts.map +1 -0
- package/dist/testing/mock-agent.js +448 -0
- package/dist/testing/mock-agent.js.map +1 -0
- package/dist/testing/recorder.d.ts +288 -0
- package/dist/testing/recorder.d.ts.map +1 -0
- package/dist/testing/recorder.js +499 -0
- package/dist/testing/recorder.js.map +1 -0
- package/dist/tools/execute.d.ts +104 -0
- package/dist/tools/execute.d.ts.map +1 -0
- package/dist/tools/execute.js +191 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/factory.d.ts +260 -0
- package/dist/tools/factory.d.ts.map +1 -0
- package/dist/tools/factory.js +241 -0
- package/dist/tools/factory.js.map +1 -0
- package/dist/tools/filesystem.d.ts +215 -0
- package/dist/tools/filesystem.d.ts.map +1 -0
- package/dist/tools/filesystem.js +311 -0
- package/dist/tools/filesystem.js.map +1 -0
- package/dist/tools/index.d.ts +33 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +33 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/search.d.ts +59 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +94 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/skills.d.ts +354 -0
- package/dist/tools/skills.d.ts.map +1 -0
- package/dist/tools/skills.js +413 -0
- package/dist/tools/skills.js.map +1 -0
- package/dist/tools/task.d.ts +272 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +521 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/todos.d.ts +131 -0
- package/dist/tools/todos.d.ts.map +1 -0
- package/dist/tools/todos.js +120 -0
- package/dist/tools/todos.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +424 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +607 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/user-interaction.d.ts +116 -0
- package/dist/tools/user-interaction.d.ts.map +1 -0
- package/dist/tools/user-interaction.js +147 -0
- package/dist/tools/user-interaction.js.map +1 -0
- package/dist/tools/utils.d.ts +124 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +189 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools.d.ts +74 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +73 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +2421 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +55 -0
- package/dist/types.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced subagent system with context isolation and parallel execution.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import { createSubagent } from "../subagents.js";
|
|
7
|
+
// =============================================================================
|
|
8
|
+
// Context Management
|
|
9
|
+
// =============================================================================
|
|
10
|
+
let executionIdCounter = 0;
|
|
11
|
+
/**
|
|
12
|
+
* Creates an isolated context for subagent execution.
|
|
13
|
+
*
|
|
14
|
+
* By default:
|
|
15
|
+
* - Files are shared (subagent sees parent's files)
|
|
16
|
+
* - Todos are isolated (subagent gets empty todos)
|
|
17
|
+
*
|
|
18
|
+
* This follows the DeepAgentSDK pattern where files represent shared
|
|
19
|
+
* work product but todos represent the agent's internal planning.
|
|
20
|
+
*
|
|
21
|
+
* @param options - Context creation options
|
|
22
|
+
* @returns Isolated subagent context
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const context = createSubagentContext({
|
|
27
|
+
* parentState: parentAgent.state,
|
|
28
|
+
* shareFiles: true,
|
|
29
|
+
* isolateTodos: true,
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Subagent can see parent's files
|
|
33
|
+
* // Subagent has empty todos
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @category Subagents
|
|
37
|
+
*/
|
|
38
|
+
export function createSubagentContext(options) {
|
|
39
|
+
const { parentState, shareFiles = true, isolateTodos = true, initialTodos = [] } = options;
|
|
40
|
+
// Create isolated state
|
|
41
|
+
const state = {
|
|
42
|
+
// Share or copy files based on option
|
|
43
|
+
files: shareFiles ? parentState.files : { ...parentState.files },
|
|
44
|
+
// Isolate or inherit todos based on option
|
|
45
|
+
todos: isolateTodos ? [...initialTodos] : [...parentState.todos],
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
state,
|
|
49
|
+
parentState,
|
|
50
|
+
filesShared: shareFiles,
|
|
51
|
+
todosIsolated: isolateTodos,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Merges subagent context changes back to parent.
|
|
56
|
+
*
|
|
57
|
+
* Only file changes are merged back (if files were shared).
|
|
58
|
+
* Todo changes are NOT merged (todos are isolated by design).
|
|
59
|
+
*
|
|
60
|
+
* @param context - The subagent context to merge
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* // After subagent completes
|
|
65
|
+
* mergeSubagentContext(result.context);
|
|
66
|
+
*
|
|
67
|
+
* // Parent now has any files the subagent created/modified
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @category Subagents
|
|
71
|
+
*/
|
|
72
|
+
export function mergeSubagentContext(context) {
|
|
73
|
+
// Only merge files if they were shared (meaning mutations affect parent)
|
|
74
|
+
// If files weren't shared, we need to copy changes back
|
|
75
|
+
if (!context.filesShared) {
|
|
76
|
+
// Merge file changes back to parent
|
|
77
|
+
Object.assign(context.parentState.files, context.state.files);
|
|
78
|
+
}
|
|
79
|
+
// Note: If filesShared is true, the state.files is the same object as
|
|
80
|
+
// parentState.files, so changes are already reflected.
|
|
81
|
+
// Todos are intentionally NOT merged - they represent the subagent's
|
|
82
|
+
// internal planning and are discarded after execution.
|
|
83
|
+
}
|
|
84
|
+
// =============================================================================
|
|
85
|
+
// Subagent Execution
|
|
86
|
+
// =============================================================================
|
|
87
|
+
/**
|
|
88
|
+
* Executes a subagent with isolated context.
|
|
89
|
+
*
|
|
90
|
+
* Creates a subagent from the definition, executes the prompt,
|
|
91
|
+
* and returns the result with the final context for merging.
|
|
92
|
+
*
|
|
93
|
+
* @param options - Execution options
|
|
94
|
+
* @returns Execution result with context
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const result = await executeSubagent({
|
|
99
|
+
* definition: {
|
|
100
|
+
* type: "researcher",
|
|
101
|
+
* description: "Researches topics",
|
|
102
|
+
* systemPrompt: "You are a research assistant.",
|
|
103
|
+
* },
|
|
104
|
+
* prompt: "Research the history of TypeScript",
|
|
105
|
+
* parentAgent,
|
|
106
|
+
* hooks,
|
|
107
|
+
* onStep: (event) => console.log(`Step ${event.stepNumber}`),
|
|
108
|
+
* });
|
|
109
|
+
*
|
|
110
|
+
* if (result.success) {
|
|
111
|
+
* mergeSubagentContext(result.context);
|
|
112
|
+
* console.log(result.text);
|
|
113
|
+
* }
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* @category Subagents
|
|
117
|
+
*/
|
|
118
|
+
export async function executeSubagent(options) {
|
|
119
|
+
const { definition, prompt, parentAgent, maxTokens, signal, onStart, onStep, onFinish, onError } = options;
|
|
120
|
+
// Generate execution ID
|
|
121
|
+
const executionId = `subagent-${++executionIdCounter}-${Date.now()}`;
|
|
122
|
+
const startTime = Date.now();
|
|
123
|
+
// Create or use provided context
|
|
124
|
+
const context = options.context ??
|
|
125
|
+
createSubagentContext({
|
|
126
|
+
parentState: parentAgent.state,
|
|
127
|
+
shareFiles: true,
|
|
128
|
+
isolateTodos: true,
|
|
129
|
+
});
|
|
130
|
+
// Emit start event
|
|
131
|
+
const startEvent = {
|
|
132
|
+
type: "subagent-start",
|
|
133
|
+
executionId,
|
|
134
|
+
subagentType: definition.type,
|
|
135
|
+
timestamp: new Date().toISOString(),
|
|
136
|
+
prompt,
|
|
137
|
+
};
|
|
138
|
+
onStart?.(startEvent);
|
|
139
|
+
try {
|
|
140
|
+
// Resolve tools for subagent
|
|
141
|
+
let subagentTools;
|
|
142
|
+
if (definition.tools) {
|
|
143
|
+
if (Array.isArray(definition.tools)) {
|
|
144
|
+
// Subset of parent tools by name
|
|
145
|
+
const parentTools = parentAgent.options.tools ?? {};
|
|
146
|
+
subagentTools = {};
|
|
147
|
+
for (const toolName of definition.tools) {
|
|
148
|
+
const tool = parentTools[toolName];
|
|
149
|
+
if (tool) {
|
|
150
|
+
subagentTools[toolName] = tool;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// Use provided tools directly
|
|
156
|
+
subagentTools = definition.tools;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Inherit parent tools
|
|
161
|
+
subagentTools = parentAgent.options.tools;
|
|
162
|
+
}
|
|
163
|
+
// Create the subagent
|
|
164
|
+
const subagent = createSubagent(parentAgent, {
|
|
165
|
+
name: definition.type,
|
|
166
|
+
description: definition.description,
|
|
167
|
+
model: definition.model,
|
|
168
|
+
systemPrompt: definition.systemPrompt,
|
|
169
|
+
maxSteps: definition.maxSteps,
|
|
170
|
+
tools: subagentTools,
|
|
171
|
+
});
|
|
172
|
+
// Execute generation
|
|
173
|
+
const effectiveMaxTokens = maxTokens ?? (definition.maxSteps ?? 10) * 4096;
|
|
174
|
+
const result = await subagent.generate({
|
|
175
|
+
prompt,
|
|
176
|
+
maxTokens: effectiveMaxTokens,
|
|
177
|
+
signal,
|
|
178
|
+
});
|
|
179
|
+
// Handle interrupted results
|
|
180
|
+
if (result.status === "interrupted") {
|
|
181
|
+
const duration = Date.now() - startTime;
|
|
182
|
+
return {
|
|
183
|
+
success: false,
|
|
184
|
+
text: result.partial?.text ?? "",
|
|
185
|
+
output: undefined,
|
|
186
|
+
steps: result.partial?.steps?.length ?? 0,
|
|
187
|
+
finishReason: "interrupted",
|
|
188
|
+
duration,
|
|
189
|
+
context,
|
|
190
|
+
result,
|
|
191
|
+
error: `Subagent was interrupted: ${result.interrupt.type}`,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
// Emit step events for each step
|
|
195
|
+
let stepNumber = 0;
|
|
196
|
+
for (const step of result.steps) {
|
|
197
|
+
stepNumber++;
|
|
198
|
+
const stepEvent = {
|
|
199
|
+
type: "subagent-step",
|
|
200
|
+
executionId,
|
|
201
|
+
subagentType: definition.type,
|
|
202
|
+
timestamp: new Date().toISOString(),
|
|
203
|
+
stepNumber,
|
|
204
|
+
toolCalls: step.toolCalls.map((tc) => ({
|
|
205
|
+
toolName: tc.toolName,
|
|
206
|
+
args: tc.input,
|
|
207
|
+
result: step.toolResults.find((tr) => tr.toolCallId === tc.toolCallId)?.output,
|
|
208
|
+
})),
|
|
209
|
+
text: step.text,
|
|
210
|
+
};
|
|
211
|
+
onStep?.(stepEvent);
|
|
212
|
+
}
|
|
213
|
+
const duration = Date.now() - startTime;
|
|
214
|
+
// Emit finish event
|
|
215
|
+
const finishEvent = {
|
|
216
|
+
type: "subagent-finish",
|
|
217
|
+
executionId,
|
|
218
|
+
subagentType: definition.type,
|
|
219
|
+
timestamp: new Date().toISOString(),
|
|
220
|
+
success: true,
|
|
221
|
+
summary: result.text.slice(0, 200) + (result.text.length > 200 ? "..." : ""),
|
|
222
|
+
steps: result.steps.length,
|
|
223
|
+
duration,
|
|
224
|
+
finishReason: result.finishReason,
|
|
225
|
+
};
|
|
226
|
+
onFinish?.(finishEvent);
|
|
227
|
+
return {
|
|
228
|
+
success: true,
|
|
229
|
+
text: result.text,
|
|
230
|
+
output: result.output,
|
|
231
|
+
steps: result.steps.length,
|
|
232
|
+
finishReason: result.finishReason,
|
|
233
|
+
duration,
|
|
234
|
+
context,
|
|
235
|
+
result,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
const duration = Date.now() - startTime;
|
|
240
|
+
const errorObj = error instanceof Error ? error : new Error(String(error));
|
|
241
|
+
// Emit error event
|
|
242
|
+
const errorEvent = {
|
|
243
|
+
type: "subagent-error",
|
|
244
|
+
executionId,
|
|
245
|
+
subagentType: definition.type,
|
|
246
|
+
timestamp: new Date().toISOString(),
|
|
247
|
+
error: errorObj,
|
|
248
|
+
};
|
|
249
|
+
onError?.(errorEvent);
|
|
250
|
+
return {
|
|
251
|
+
success: false,
|
|
252
|
+
text: "",
|
|
253
|
+
steps: 0,
|
|
254
|
+
finishReason: "error",
|
|
255
|
+
duration,
|
|
256
|
+
error: errorObj.message,
|
|
257
|
+
context,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Executes multiple subagents in parallel.
|
|
263
|
+
*
|
|
264
|
+
* All subagents share the same parent context initially.
|
|
265
|
+
* After completion, file changes from all subagents are merged back.
|
|
266
|
+
*
|
|
267
|
+
* Note: If multiple subagents modify the same file, the last one wins.
|
|
268
|
+
* For better conflict handling, consider using different file paths.
|
|
269
|
+
*
|
|
270
|
+
* @param tasks - Array of tasks to execute
|
|
271
|
+
* @param parentAgent - Parent agent for configuration
|
|
272
|
+
* @param onResult - Optional callback for each completed task
|
|
273
|
+
* @returns Combined results from all executions
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```typescript
|
|
277
|
+
* const results = await executeSubagentsParallel(
|
|
278
|
+
* [
|
|
279
|
+
* {
|
|
280
|
+
* definition: researcherDef,
|
|
281
|
+
* prompt: "Research TypeScript history",
|
|
282
|
+
* },
|
|
283
|
+
* {
|
|
284
|
+
* definition: coderDef,
|
|
285
|
+
* prompt: "Write a utility function",
|
|
286
|
+
* },
|
|
287
|
+
* ],
|
|
288
|
+
* parentAgent,
|
|
289
|
+
* (result, index) => console.log(`Task ${index} completed`),
|
|
290
|
+
* );
|
|
291
|
+
*
|
|
292
|
+
* console.log(`${results.successCount}/${results.results.length} succeeded`);
|
|
293
|
+
* ```
|
|
294
|
+
*
|
|
295
|
+
* @category Subagents
|
|
296
|
+
*/
|
|
297
|
+
export async function executeSubagentsParallel(tasks, parentAgent, onResult) {
|
|
298
|
+
const startTime = Date.now();
|
|
299
|
+
// Create isolated contexts for each task
|
|
300
|
+
// Note: Files are shared via reference, so changes from one subagent
|
|
301
|
+
// are visible to others. This is intentional for collaboration.
|
|
302
|
+
const contexts = tasks.map(() => createSubagentContext({
|
|
303
|
+
parentState: parentAgent.state,
|
|
304
|
+
shareFiles: true,
|
|
305
|
+
isolateTodos: true,
|
|
306
|
+
}));
|
|
307
|
+
// Execute all tasks in parallel
|
|
308
|
+
const results = await Promise.all(tasks.map(async (task, index) => {
|
|
309
|
+
const result = await executeSubagent({
|
|
310
|
+
definition: task.definition,
|
|
311
|
+
prompt: task.prompt,
|
|
312
|
+
parentAgent,
|
|
313
|
+
context: contexts[index],
|
|
314
|
+
});
|
|
315
|
+
onResult?.(result, index);
|
|
316
|
+
return result;
|
|
317
|
+
}));
|
|
318
|
+
// Merge contexts (file changes already reflected due to shared reference)
|
|
319
|
+
// Just ensure any non-shared contexts are merged
|
|
320
|
+
for (const result of results) {
|
|
321
|
+
if (!result.context.filesShared) {
|
|
322
|
+
mergeSubagentContext(result.context);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
const totalDuration = Date.now() - startTime;
|
|
326
|
+
const successCount = results.filter((r) => r.success).length;
|
|
327
|
+
const failureCount = results.length - successCount;
|
|
328
|
+
return {
|
|
329
|
+
results,
|
|
330
|
+
successCount,
|
|
331
|
+
failureCount,
|
|
332
|
+
totalDuration,
|
|
333
|
+
allSucceeded: failureCount === 0,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
// =============================================================================
|
|
337
|
+
// Event Emitter
|
|
338
|
+
// =============================================================================
|
|
339
|
+
/**
|
|
340
|
+
* Creates an event emitter for subagent lifecycle events.
|
|
341
|
+
*
|
|
342
|
+
* Provides a convenient way to handle all subagent events
|
|
343
|
+
* without passing individual callbacks.
|
|
344
|
+
*
|
|
345
|
+
* @returns Event emitter instance
|
|
346
|
+
*
|
|
347
|
+
* @example
|
|
348
|
+
* ```typescript
|
|
349
|
+
* const emitter = createSubagentEventEmitter();
|
|
350
|
+
*
|
|
351
|
+
* emitter.onStart((event) => {
|
|
352
|
+
* console.log(`Starting ${event.subagentType}: ${event.prompt}`);
|
|
353
|
+
* });
|
|
354
|
+
*
|
|
355
|
+
* emitter.onStep((event) => {
|
|
356
|
+
* console.log(`Step ${event.stepNumber}: ${event.toolCalls.length} tool calls`);
|
|
357
|
+
* });
|
|
358
|
+
*
|
|
359
|
+
* emitter.onFinish((event) => {
|
|
360
|
+
* console.log(`Finished in ${event.duration}ms: ${event.summary}`);
|
|
361
|
+
* });
|
|
362
|
+
*
|
|
363
|
+
* emitter.onError((event) => {
|
|
364
|
+
* console.error(`Error: ${event.error.message}`);
|
|
365
|
+
* });
|
|
366
|
+
* ```
|
|
367
|
+
*
|
|
368
|
+
* @category Subagents
|
|
369
|
+
*/
|
|
370
|
+
export function createSubagentEventEmitter() {
|
|
371
|
+
const startHandlers = [];
|
|
372
|
+
const stepHandlers = [];
|
|
373
|
+
const finishHandlers = [];
|
|
374
|
+
const errorHandlers = [];
|
|
375
|
+
return {
|
|
376
|
+
onStart(handler) {
|
|
377
|
+
startHandlers.push(handler);
|
|
378
|
+
},
|
|
379
|
+
onStep(handler) {
|
|
380
|
+
stepHandlers.push(handler);
|
|
381
|
+
},
|
|
382
|
+
onFinish(handler) {
|
|
383
|
+
finishHandlers.push(handler);
|
|
384
|
+
},
|
|
385
|
+
onError(handler) {
|
|
386
|
+
errorHandlers.push(handler);
|
|
387
|
+
},
|
|
388
|
+
removeAllListeners() {
|
|
389
|
+
startHandlers.length = 0;
|
|
390
|
+
stepHandlers.length = 0;
|
|
391
|
+
finishHandlers.length = 0;
|
|
392
|
+
errorHandlers.length = 0;
|
|
393
|
+
},
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=advanced.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced.js","sourceRoot":"","sources":["../../src/subagents/advanced.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced subagent system with context isolation and parallel execution.
|
|
3
|
+
*
|
|
4
|
+
* This module provides:
|
|
5
|
+
* - Enhanced subagent definitions with output schemas and interrupt support
|
|
6
|
+
* - Context isolation (files shared, todos isolated)
|
|
7
|
+
* - Parallel execution of multiple subagents
|
|
8
|
+
* - Event streaming for subagent lifecycle
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
export type { SubagentDefinition, SubagentOptions, TaskToolOptions, } from "../types.js";
|
|
13
|
+
export { createSubagentContext, createSubagentEventEmitter, type EnhancedSubagentDefinition, executeSubagent, executeSubagentsParallel, mergeSubagentContext, type ParallelExecutionResult, type ParallelTask, type SubagentContext, type SubagentContextOptions, type SubagentErrorEvent, type SubagentEvent, type SubagentEventEmitter, type SubagentExecutionOptions, type SubagentExecutionResult, type SubagentFinishEvent, type SubagentStartEvent, type SubagentStepEvent, } from "./advanced.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/subagents/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EAEV,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,qBAAqB,EACrB,0BAA0B,EAE1B,KAAK,0BAA0B,EAC/B,eAAe,EACf,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced subagent system with context isolation and parallel execution.
|
|
3
|
+
*
|
|
4
|
+
* This module provides:
|
|
5
|
+
* - Enhanced subagent definitions with output schemas and interrupt support
|
|
6
|
+
* - Context isolation (files shared, todos isolated)
|
|
7
|
+
* - Parallel execution of multiple subagents
|
|
8
|
+
* - Event streaming for subagent lifecycle
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
export {
|
|
13
|
+
// Functions
|
|
14
|
+
createSubagentContext, createSubagentEventEmitter, executeSubagent, executeSubagentsParallel, mergeSubagentContext, } from "./advanced.js";
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/subagents/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO;AACL,YAAY;AACZ,qBAAqB,EACrB,0BAA0B,EAG1B,eAAe,EACf,wBAAwB,EACxB,oBAAoB,GAarB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subagent creation and task delegation.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import type { Agent, SubagentOptions } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Creates a subagent that inherits configuration from a parent agent.
|
|
9
|
+
*
|
|
10
|
+
* Subagents are specialized agents that can be spawned by a parent agent
|
|
11
|
+
* to handle specific tasks. They can inherit the parent's model or use
|
|
12
|
+
* their own, and can have their own tools, plugins, and configuration.
|
|
13
|
+
*
|
|
14
|
+
* **Hook Inheritance**:
|
|
15
|
+
* By default, subagents inherit all hooks from their parent agent. You can control
|
|
16
|
+
* this behavior with the `inheritHooks` option:
|
|
17
|
+
* - `true` (default): Inherit all parent hooks
|
|
18
|
+
* - `false`: No inheritance, use only subagent's own hooks
|
|
19
|
+
* - `string[]`: Inherit only specific hook events
|
|
20
|
+
*
|
|
21
|
+
* **Tool Filtering Security**:
|
|
22
|
+
* When `allowedTools` is specified, subagent gets access to only those tools.
|
|
23
|
+
* A warning is logged if dangerous tools (bash, write, edit, rm, etc.) are included
|
|
24
|
+
* without explicit opt-in via `inheritHooks: false` or specific hook controls.
|
|
25
|
+
*
|
|
26
|
+
* @param parentAgent - The parent agent to inherit configuration from
|
|
27
|
+
* @param options - Configuration options for the subagent
|
|
28
|
+
* @returns A new agent instance configured as a subagent
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* import { createAgent, createSubagent } from "@lleverage-ai/agent-sdk";
|
|
33
|
+
* import { anthropic } from "@ai-sdk/anthropic";
|
|
34
|
+
* import { tool } from "ai";
|
|
35
|
+
* import { z } from "zod";
|
|
36
|
+
*
|
|
37
|
+
* const mainAgent = createAgent({
|
|
38
|
+
* model: anthropic("claude-sonnet-4-20250514"),
|
|
39
|
+
* systemPrompt: "You are a helpful assistant.",
|
|
40
|
+
* hooks: {
|
|
41
|
+
* PreToolUse: [{
|
|
42
|
+
* callback: async (input) => {
|
|
43
|
+
* console.log("Parent hook:", input.tool_name);
|
|
44
|
+
* return {};
|
|
45
|
+
* },
|
|
46
|
+
* }],
|
|
47
|
+
* },
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* // Create a specialized subagent for code review
|
|
51
|
+
* const reviewerAgent = createSubagent(mainAgent, {
|
|
52
|
+
* name: "code-reviewer",
|
|
53
|
+
* description: "Reviews code for quality and best practices",
|
|
54
|
+
* systemPrompt: "You are an expert code reviewer.",
|
|
55
|
+
* inheritHooks: true, // Inherits parent's PreToolUse hook
|
|
56
|
+
* tools: {
|
|
57
|
+
* analyze: tool({
|
|
58
|
+
* description: "Analyze code",
|
|
59
|
+
* inputSchema: z.object({ code: z.string() }),
|
|
60
|
+
* execute: async ({ code }) => analyzeCode(code),
|
|
61
|
+
* }),
|
|
62
|
+
* },
|
|
63
|
+
* });
|
|
64
|
+
*
|
|
65
|
+
* const result = await reviewerAgent.generate({
|
|
66
|
+
* prompt: "Review this function: function add(a, b) { return a + b; }",
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @category Subagents
|
|
71
|
+
*/
|
|
72
|
+
export declare function createSubagent(parentAgent: Agent, options: SubagentOptions): Agent;
|
|
73
|
+
//# sourceMappingURL=subagents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../src/subagents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAoB,eAAe,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,GAAG,KAAK,CAoClF"}
|