@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,607 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registry for progressive tool disclosure.
|
|
3
|
+
*
|
|
4
|
+
* The ToolRegistry enables deferred tool loading to keep initial context small.
|
|
5
|
+
* Instead of loading all tool schemas upfront, tools are registered with lightweight
|
|
6
|
+
* metadata and loaded on-demand when the agent needs them.
|
|
7
|
+
*
|
|
8
|
+
* This mirrors the MCP Tool Search pattern used in Claude Code, where hundreds
|
|
9
|
+
* of tools can be available without consuming context window until needed.
|
|
10
|
+
*
|
|
11
|
+
* @packageDocumentation
|
|
12
|
+
*/
|
|
13
|
+
import { tool } from "ai";
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// Tool Registry
|
|
17
|
+
// =============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Registry for managing tools with deferred loading.
|
|
20
|
+
*
|
|
21
|
+
* The ToolRegistry stores tools with lightweight metadata and loads full
|
|
22
|
+
* definitions on-demand. This enables agents to have access to hundreds of
|
|
23
|
+
* tools without consuming context window until needed.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const registry = new ToolRegistry();
|
|
28
|
+
*
|
|
29
|
+
* // Register tools (does not load them)
|
|
30
|
+
* registry.register({
|
|
31
|
+
* name: "stripe_create_payment",
|
|
32
|
+
* description: "Create a payment intent in Stripe",
|
|
33
|
+
* plugin: "stripe",
|
|
34
|
+
* tool: stripeCreatePaymentTool,
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* // Agent searches for tools
|
|
38
|
+
* const matches = registry.search({ query: "payment" });
|
|
39
|
+
* // Returns: [{ name: "stripe_create_payment", description: "..." }]
|
|
40
|
+
*
|
|
41
|
+
* // Agent loads tools when needed
|
|
42
|
+
* const result = registry.load(["stripe_create_payment"]);
|
|
43
|
+
* // Tools are now available for use
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @category Tools
|
|
47
|
+
*/
|
|
48
|
+
export class ToolRegistry {
|
|
49
|
+
/** All registered tools */
|
|
50
|
+
entries = new Map();
|
|
51
|
+
/** Callbacks */
|
|
52
|
+
onToolsLoaded;
|
|
53
|
+
onRegistryUpdated;
|
|
54
|
+
onToolRegistered;
|
|
55
|
+
onToolLoadError;
|
|
56
|
+
/**
|
|
57
|
+
* Creates a new tool registry.
|
|
58
|
+
*
|
|
59
|
+
* @param options - Configuration options
|
|
60
|
+
*/
|
|
61
|
+
constructor(options = {}) {
|
|
62
|
+
this.onToolsLoaded = options.onToolsLoaded;
|
|
63
|
+
this.onRegistryUpdated = options.onRegistryUpdated;
|
|
64
|
+
this.onToolRegistered = options.onToolRegistered;
|
|
65
|
+
this.onToolLoadError = options.onToolLoadError;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Register a tool with the registry.
|
|
69
|
+
*
|
|
70
|
+
* The tool is stored but not loaded - only metadata is exposed until
|
|
71
|
+
* the tool is explicitly loaded.
|
|
72
|
+
*
|
|
73
|
+
* @param metadata - Tool metadata
|
|
74
|
+
* @param toolDef - The full tool definition
|
|
75
|
+
* @throws Error if a tool with the same name is already registered
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* registry.register(
|
|
80
|
+
* {
|
|
81
|
+
* name: "send_email",
|
|
82
|
+
* description: "Send an email via SMTP",
|
|
83
|
+
* plugin: "email",
|
|
84
|
+
* category: "communication",
|
|
85
|
+
* tags: ["email", "notification"],
|
|
86
|
+
* },
|
|
87
|
+
* sendEmailTool
|
|
88
|
+
* );
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
register(metadata, toolDef) {
|
|
92
|
+
if (this.entries.has(metadata.name)) {
|
|
93
|
+
throw new Error(`Tool '${metadata.name}' is already registered`);
|
|
94
|
+
}
|
|
95
|
+
this.entries.set(metadata.name, {
|
|
96
|
+
metadata,
|
|
97
|
+
tool: toolDef,
|
|
98
|
+
loaded: false,
|
|
99
|
+
});
|
|
100
|
+
this.onRegistryUpdated?.();
|
|
101
|
+
// Emit tool registered event
|
|
102
|
+
void this.onToolRegistered?.({
|
|
103
|
+
tool_name: metadata.name,
|
|
104
|
+
description: metadata.description,
|
|
105
|
+
source: metadata.plugin,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Register multiple tools at once.
|
|
110
|
+
*
|
|
111
|
+
* @param tools - Array of [metadata, tool] tuples
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* registry.registerMany([
|
|
116
|
+
* [{ name: "tool1", description: "..." }, tool1],
|
|
117
|
+
* [{ name: "tool2", description: "..." }, tool2],
|
|
118
|
+
* ]);
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
registerMany(tools) {
|
|
122
|
+
for (const [metadata, toolDef] of tools) {
|
|
123
|
+
this.register(metadata, toolDef);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Register all tools from a plugin.
|
|
128
|
+
*
|
|
129
|
+
* Convenience method that extracts tool metadata and registers each tool
|
|
130
|
+
* with the plugin name attached.
|
|
131
|
+
*
|
|
132
|
+
* @param pluginName - Name of the plugin
|
|
133
|
+
* @param tools - ToolSet from the plugin
|
|
134
|
+
* @param options - Optional metadata overrides
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* registry.registerPlugin("stripe", stripePlugin.tools, {
|
|
139
|
+
* category: "payments",
|
|
140
|
+
* });
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
registerPlugin(pluginName, tools, options = {}) {
|
|
144
|
+
for (const [name, toolDef] of Object.entries(tools)) {
|
|
145
|
+
// Extract description from tool definition
|
|
146
|
+
const description = toolDef.description ?? `Tool from ${pluginName} plugin`;
|
|
147
|
+
this.register({
|
|
148
|
+
name,
|
|
149
|
+
description,
|
|
150
|
+
plugin: pluginName,
|
|
151
|
+
category: options.category,
|
|
152
|
+
tags: options.tags,
|
|
153
|
+
}, toolDef);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Unregister a tool from the registry.
|
|
158
|
+
*
|
|
159
|
+
* @param name - The tool name to unregister
|
|
160
|
+
* @returns True if the tool was found and removed
|
|
161
|
+
*/
|
|
162
|
+
unregister(name) {
|
|
163
|
+
const removed = this.entries.delete(name);
|
|
164
|
+
if (removed) {
|
|
165
|
+
this.onRegistryUpdated?.();
|
|
166
|
+
}
|
|
167
|
+
return removed;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Check if a tool is registered.
|
|
171
|
+
*
|
|
172
|
+
* @param name - The tool name to check
|
|
173
|
+
*/
|
|
174
|
+
has(name) {
|
|
175
|
+
return this.entries.has(name);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Check if a tool is currently loaded.
|
|
179
|
+
*
|
|
180
|
+
* @param name - The tool name to check
|
|
181
|
+
*/
|
|
182
|
+
isLoaded(name) {
|
|
183
|
+
return this.entries.get(name)?.loaded ?? false;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get metadata for a registered tool.
|
|
187
|
+
*
|
|
188
|
+
* @param name - The tool name
|
|
189
|
+
* @returns Tool metadata or undefined if not found
|
|
190
|
+
*/
|
|
191
|
+
getMetadata(name) {
|
|
192
|
+
return this.entries.get(name)?.metadata;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Search for tools matching criteria.
|
|
196
|
+
*
|
|
197
|
+
* Searches tool metadata (name, description, tags) without loading
|
|
198
|
+
* the full tool definitions.
|
|
199
|
+
*
|
|
200
|
+
* @param options - Search options
|
|
201
|
+
* @returns Array of matching tool metadata
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```typescript
|
|
205
|
+
* // Search by query
|
|
206
|
+
* const paymentTools = registry.search({ query: "payment" });
|
|
207
|
+
*
|
|
208
|
+
* // Filter by plugin
|
|
209
|
+
* const stripeTools = registry.search({ plugin: "stripe" });
|
|
210
|
+
*
|
|
211
|
+
* // Combined search
|
|
212
|
+
* const results = registry.search({
|
|
213
|
+
* query: "create",
|
|
214
|
+
* plugin: "stripe",
|
|
215
|
+
* limit: 5,
|
|
216
|
+
* });
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
search(options = {}) {
|
|
220
|
+
const { query, plugin, category, tags, includeLoaded = false, limit } = options;
|
|
221
|
+
const results = [];
|
|
222
|
+
for (const entry of this.entries.values()) {
|
|
223
|
+
// Skip loaded tools unless explicitly included
|
|
224
|
+
if (entry.loaded && !includeLoaded) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
const meta = entry.metadata;
|
|
228
|
+
// Filter by plugin
|
|
229
|
+
if (plugin && meta.plugin !== plugin) {
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
// Filter by category
|
|
233
|
+
if (category && meta.category !== category) {
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
// Filter by tags (any match)
|
|
237
|
+
if (tags && tags.length > 0) {
|
|
238
|
+
const hasMatchingTag = tags.some((tag) => meta.tags?.includes(tag));
|
|
239
|
+
if (!hasMatchingTag) {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// Filter by query (matches name, description, or tags)
|
|
244
|
+
if (query) {
|
|
245
|
+
const queryLower = query.toLowerCase();
|
|
246
|
+
const nameMatch = meta.name.toLowerCase().includes(queryLower);
|
|
247
|
+
const descMatch = meta.description.toLowerCase().includes(queryLower);
|
|
248
|
+
const tagMatch = meta.tags?.some((t) => t.toLowerCase().includes(queryLower));
|
|
249
|
+
if (!nameMatch && !descMatch && !tagMatch) {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
results.push(meta);
|
|
254
|
+
// Apply limit
|
|
255
|
+
if (limit && results.length >= limit) {
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return results;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Load tools, making them available for use.
|
|
263
|
+
*
|
|
264
|
+
* @param names - Tool names to load
|
|
265
|
+
* @returns Result containing loaded tools and status
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* const result = registry.load(["stripe_create_payment", "stripe_refund"]);
|
|
270
|
+
* if (result.success) {
|
|
271
|
+
* // result.tools contains the loaded ToolSet
|
|
272
|
+
* // Inject into agent's active tools
|
|
273
|
+
* }
|
|
274
|
+
* ```
|
|
275
|
+
*/
|
|
276
|
+
load(names) {
|
|
277
|
+
const loaded = [];
|
|
278
|
+
const skipped = [];
|
|
279
|
+
const notFound = [];
|
|
280
|
+
const tools = {};
|
|
281
|
+
for (const name of names) {
|
|
282
|
+
const entry = this.entries.get(name);
|
|
283
|
+
if (!entry) {
|
|
284
|
+
notFound.push(name);
|
|
285
|
+
// Emit tool load error for not found tools
|
|
286
|
+
void this.onToolLoadError?.({
|
|
287
|
+
tool_name: name,
|
|
288
|
+
error: new Error(`Tool '${name}' not found in registry`),
|
|
289
|
+
source: undefined,
|
|
290
|
+
});
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
if (entry.loaded) {
|
|
294
|
+
skipped.push(name);
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
// Mark as loaded
|
|
298
|
+
entry.loaded = true;
|
|
299
|
+
tools[name] = entry.tool;
|
|
300
|
+
loaded.push(name);
|
|
301
|
+
}
|
|
302
|
+
const result = {
|
|
303
|
+
success: notFound.length === 0,
|
|
304
|
+
loaded,
|
|
305
|
+
skipped,
|
|
306
|
+
notFound,
|
|
307
|
+
tools,
|
|
308
|
+
error: notFound.length > 0 ? `Tools not found: ${notFound.join(", ")}` : undefined,
|
|
309
|
+
};
|
|
310
|
+
if (loaded.length > 0) {
|
|
311
|
+
this.onToolsLoaded?.(result);
|
|
312
|
+
}
|
|
313
|
+
return result;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Load tools matching a search query.
|
|
317
|
+
*
|
|
318
|
+
* Convenience method combining search and load.
|
|
319
|
+
*
|
|
320
|
+
* @param options - Search options (same as search())
|
|
321
|
+
* @returns Result containing loaded tools
|
|
322
|
+
*
|
|
323
|
+
* @example
|
|
324
|
+
* ```typescript
|
|
325
|
+
* const result = registry.loadMatching({ query: "stripe", limit: 5 });
|
|
326
|
+
* ```
|
|
327
|
+
*/
|
|
328
|
+
loadMatching(options) {
|
|
329
|
+
const matches = this.search({ ...options, includeLoaded: false });
|
|
330
|
+
return this.load(matches.map((m) => m.name));
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Get all currently loaded tools as a ToolSet.
|
|
334
|
+
*
|
|
335
|
+
* @returns ToolSet containing all loaded tools
|
|
336
|
+
*/
|
|
337
|
+
getLoadedTools() {
|
|
338
|
+
const tools = {};
|
|
339
|
+
for (const [name, entry] of this.entries) {
|
|
340
|
+
if (entry.loaded) {
|
|
341
|
+
tools[name] = entry.tool;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return tools;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* List all available (not yet loaded) tools.
|
|
348
|
+
*
|
|
349
|
+
* @returns Array of tool metadata
|
|
350
|
+
*/
|
|
351
|
+
listAvailable() {
|
|
352
|
+
return this.search({ includeLoaded: false });
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* List all loaded tools.
|
|
356
|
+
*
|
|
357
|
+
* @returns Array of tool names
|
|
358
|
+
*/
|
|
359
|
+
listLoaded() {
|
|
360
|
+
const loaded = [];
|
|
361
|
+
for (const [name, entry] of this.entries) {
|
|
362
|
+
if (entry.loaded) {
|
|
363
|
+
loaded.push(name);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return loaded;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* List all registered tools with their load status.
|
|
370
|
+
*
|
|
371
|
+
* @returns Array of tool metadata with loaded flag
|
|
372
|
+
*/
|
|
373
|
+
listAll() {
|
|
374
|
+
return Array.from(this.entries.values()).map((entry) => ({
|
|
375
|
+
...entry.metadata,
|
|
376
|
+
loaded: entry.loaded,
|
|
377
|
+
}));
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Get all plugins that have registered tools.
|
|
381
|
+
*
|
|
382
|
+
* @returns Array of unique plugin names
|
|
383
|
+
*/
|
|
384
|
+
listPlugins() {
|
|
385
|
+
const plugins = new Set();
|
|
386
|
+
for (const entry of this.entries.values()) {
|
|
387
|
+
if (entry.metadata.plugin) {
|
|
388
|
+
plugins.add(entry.metadata.plugin);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return Array.from(plugins);
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Reset all tools to unloaded state.
|
|
395
|
+
*
|
|
396
|
+
* Does not unregister tools, only marks them as unloaded.
|
|
397
|
+
*/
|
|
398
|
+
reset() {
|
|
399
|
+
for (const entry of this.entries.values()) {
|
|
400
|
+
entry.loaded = false;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Clear all registered tools.
|
|
405
|
+
*/
|
|
406
|
+
clear() {
|
|
407
|
+
this.entries.clear();
|
|
408
|
+
this.onRegistryUpdated?.();
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Get the number of registered tools.
|
|
412
|
+
*/
|
|
413
|
+
get size() {
|
|
414
|
+
return this.entries.size;
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Get the number of loaded tools.
|
|
418
|
+
*/
|
|
419
|
+
get loadedCount() {
|
|
420
|
+
let count = 0;
|
|
421
|
+
for (const entry of this.entries.values()) {
|
|
422
|
+
if (entry.loaded) {
|
|
423
|
+
count++;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return count;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Build the tool index string for the use_tools description.
|
|
430
|
+
*
|
|
431
|
+
* This creates a compact representation of available tools that fits
|
|
432
|
+
* in the meta-tool description.
|
|
433
|
+
*
|
|
434
|
+
* @param options - Formatting options
|
|
435
|
+
* @returns Formatted tool index string
|
|
436
|
+
*/
|
|
437
|
+
buildToolIndex(options = {}) {
|
|
438
|
+
const { includePlugins = true } = options;
|
|
439
|
+
if (includePlugins) {
|
|
440
|
+
// Group by plugin
|
|
441
|
+
const byPlugin = new Map();
|
|
442
|
+
const noPlugin = [];
|
|
443
|
+
for (const entry of this.entries.values()) {
|
|
444
|
+
if (entry.loaded)
|
|
445
|
+
continue;
|
|
446
|
+
if (entry.metadata.plugin) {
|
|
447
|
+
const list = byPlugin.get(entry.metadata.plugin) ?? [];
|
|
448
|
+
list.push(entry.metadata);
|
|
449
|
+
byPlugin.set(entry.metadata.plugin, list);
|
|
450
|
+
}
|
|
451
|
+
else {
|
|
452
|
+
noPlugin.push(entry.metadata);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
const lines = [];
|
|
456
|
+
// Add plugin sections
|
|
457
|
+
for (const [plugin, tools] of byPlugin) {
|
|
458
|
+
lines.push(`[${plugin}]`);
|
|
459
|
+
for (const t of tools) {
|
|
460
|
+
lines.push(` - ${t.name}: ${t.description}`);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
// Add tools without plugin
|
|
464
|
+
if (noPlugin.length > 0) {
|
|
465
|
+
if (lines.length > 0)
|
|
466
|
+
lines.push("");
|
|
467
|
+
lines.push("[other]");
|
|
468
|
+
for (const t of noPlugin) {
|
|
469
|
+
lines.push(` - ${t.name}: ${t.description}`);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
return lines.join("\n");
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
// Flat list
|
|
476
|
+
return this.listAvailable()
|
|
477
|
+
.map((t) => `- ${t.name}: ${t.description}`)
|
|
478
|
+
.join("\n");
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Creates the use_tools meta-tool for discovering and loading tools.
|
|
484
|
+
*
|
|
485
|
+
* This tool allows agents to search available tools and load them on-demand.
|
|
486
|
+
* Tools loaded through this tool become available in subsequent agent steps.
|
|
487
|
+
*
|
|
488
|
+
* @param options - Configuration options
|
|
489
|
+
* @returns An AI SDK compatible tool
|
|
490
|
+
*
|
|
491
|
+
* @example
|
|
492
|
+
* ```typescript
|
|
493
|
+
* const registry = new ToolRegistry();
|
|
494
|
+
* registry.registerPlugin("stripe", stripePlugin.tools);
|
|
495
|
+
*
|
|
496
|
+
* const useToolsTool = createUseToolsTool({ registry });
|
|
497
|
+
*
|
|
498
|
+
* const agent = createAgent({
|
|
499
|
+
* model,
|
|
500
|
+
* tools: {
|
|
501
|
+
* ...coreTools,
|
|
502
|
+
* use_tools: useToolsTool,
|
|
503
|
+
* },
|
|
504
|
+
* toolRegistry: registry,
|
|
505
|
+
* });
|
|
506
|
+
* ```
|
|
507
|
+
*
|
|
508
|
+
* @category Tools
|
|
509
|
+
*/
|
|
510
|
+
export function createUseToolsTool(options) {
|
|
511
|
+
const { registry, descriptionPrefix, groupByPlugin = true } = options;
|
|
512
|
+
// Build dynamic description
|
|
513
|
+
const buildDescription = () => {
|
|
514
|
+
const available = registry.listAvailable();
|
|
515
|
+
if (available.length === 0) {
|
|
516
|
+
return "No additional tools available to load.";
|
|
517
|
+
}
|
|
518
|
+
const prefix = descriptionPrefix ??
|
|
519
|
+
`Search and load tools on-demand. Tools loaded become available for use in subsequent actions.`;
|
|
520
|
+
const toolIndex = registry.buildToolIndex({ includePlugins: groupByPlugin });
|
|
521
|
+
return `${prefix}\n\nAvailable tools (${available.length}):\n${toolIndex}`;
|
|
522
|
+
};
|
|
523
|
+
return tool({
|
|
524
|
+
description: buildDescription(),
|
|
525
|
+
inputSchema: z.object({
|
|
526
|
+
query: z.string().optional().describe("Search query to find relevant tools"),
|
|
527
|
+
tools: z.array(z.string()).optional().describe("Specific tool names to load"),
|
|
528
|
+
plugin: z.string().optional().describe("Load all tools from a plugin"),
|
|
529
|
+
}),
|
|
530
|
+
execute: async ({ query, tools: toolNames, plugin, }) => {
|
|
531
|
+
// Determine which tools to load
|
|
532
|
+
let namesToLoad = [];
|
|
533
|
+
if (toolNames && toolNames.length > 0) {
|
|
534
|
+
// Explicit tool names
|
|
535
|
+
namesToLoad = toolNames;
|
|
536
|
+
}
|
|
537
|
+
else if (plugin) {
|
|
538
|
+
// All tools from a plugin
|
|
539
|
+
const matches = registry.search({ plugin, includeLoaded: false });
|
|
540
|
+
namesToLoad = matches.map((m) => m.name);
|
|
541
|
+
}
|
|
542
|
+
else if (query) {
|
|
543
|
+
// Search by query
|
|
544
|
+
const matches = registry.search({ query, includeLoaded: false });
|
|
545
|
+
namesToLoad = matches.map((m) => m.name);
|
|
546
|
+
}
|
|
547
|
+
else {
|
|
548
|
+
return {
|
|
549
|
+
success: false,
|
|
550
|
+
error: "Please specify tools to load via 'tools', 'plugin', or 'query'",
|
|
551
|
+
};
|
|
552
|
+
}
|
|
553
|
+
if (namesToLoad.length === 0) {
|
|
554
|
+
return {
|
|
555
|
+
success: false,
|
|
556
|
+
error: "No matching tools found",
|
|
557
|
+
suggestion: "Try a different search query or check available tools",
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
// Load the tools
|
|
561
|
+
const result = registry.load(namesToLoad);
|
|
562
|
+
// Build response
|
|
563
|
+
const response = {
|
|
564
|
+
success: result.success,
|
|
565
|
+
loaded: result.loaded,
|
|
566
|
+
};
|
|
567
|
+
if (result.skipped.length > 0) {
|
|
568
|
+
response.alreadyLoaded = result.skipped;
|
|
569
|
+
}
|
|
570
|
+
if (result.notFound.length > 0) {
|
|
571
|
+
response.notFound = result.notFound;
|
|
572
|
+
}
|
|
573
|
+
if (result.loaded.length > 0) {
|
|
574
|
+
response.message = `Loaded ${result.loaded.length} tool(s): ${result.loaded.join(", ")}. These tools are now available for use.`;
|
|
575
|
+
}
|
|
576
|
+
else if (result.skipped.length > 0) {
|
|
577
|
+
response.message = `Tools already loaded: ${result.skipped.join(", ")}`;
|
|
578
|
+
}
|
|
579
|
+
else {
|
|
580
|
+
response.message = "No tools were loaded";
|
|
581
|
+
}
|
|
582
|
+
return response;
|
|
583
|
+
},
|
|
584
|
+
});
|
|
585
|
+
}
|
|
586
|
+
// =============================================================================
|
|
587
|
+
// Factory Functions
|
|
588
|
+
// =============================================================================
|
|
589
|
+
/**
|
|
590
|
+
* Creates a new tool registry.
|
|
591
|
+
*
|
|
592
|
+
* @param options - Configuration options
|
|
593
|
+
* @returns A new ToolRegistry instance
|
|
594
|
+
*
|
|
595
|
+
* @example
|
|
596
|
+
* ```typescript
|
|
597
|
+
* const registry = createToolRegistry({
|
|
598
|
+
* onToolsLoaded: (result) => console.log("Loaded:", result.loaded),
|
|
599
|
+
* });
|
|
600
|
+
* ```
|
|
601
|
+
*
|
|
602
|
+
* @category Tools
|
|
603
|
+
*/
|
|
604
|
+
export function createToolRegistry(options) {
|
|
605
|
+
return new ToolRegistry(options);
|
|
606
|
+
}
|
|
607
|
+
//# sourceMappingURL=tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/tools/tool-registry.ts"],"names":[],"mappings":"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"}
|