@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,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem tools for agent file operations.
|
|
3
|
+
*
|
|
4
|
+
* These tools wrap the BackendProtocol interface to provide file operations
|
|
5
|
+
* to agents. Each tool is a factory function that takes a backend and returns
|
|
6
|
+
* an AI SDK compatible tool.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import { tool } from "ai";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Constants
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/** Default number of lines to read from a file */
|
|
16
|
+
const DEFAULT_READ_LIMIT = 2000;
|
|
17
|
+
/** Character count threshold for warning (approximate tokens = chars / 4) */
|
|
18
|
+
const LARGE_CONTENT_WARNING_CHARS = 80_000; // ~20k tokens
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// Read Tool
|
|
21
|
+
// =============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Creates a tool for reading file contents.
|
|
24
|
+
*
|
|
25
|
+
* Reads files with line numbers and supports offset/limit for large files.
|
|
26
|
+
* By default reads the first 2000 lines.
|
|
27
|
+
*
|
|
28
|
+
* @param backend - The backend to use for file operations
|
|
29
|
+
* @returns An AI SDK compatible tool for reading files
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* import { createReadTool } from "@lleverage-ai/agent-sdk";
|
|
34
|
+
*
|
|
35
|
+
* const read = createReadTool(backend);
|
|
36
|
+
* const agent = createAgent({
|
|
37
|
+
* model,
|
|
38
|
+
* tools: { read },
|
|
39
|
+
* });
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @category Tools
|
|
43
|
+
*/
|
|
44
|
+
export function createReadTool(backend) {
|
|
45
|
+
return tool({
|
|
46
|
+
description: `Read a file with line numbers. Default reads first ${DEFAULT_READ_LIMIT} lines. Use offset/limit for large files.`,
|
|
47
|
+
inputSchema: z.object({
|
|
48
|
+
file_path: z.string().describe("Absolute path to the file to read"),
|
|
49
|
+
offset: z.number().optional().describe("Line number to start from (0-indexed)"),
|
|
50
|
+
limit: z
|
|
51
|
+
.number()
|
|
52
|
+
.optional()
|
|
53
|
+
.describe(`Maximum lines to read (default: ${DEFAULT_READ_LIMIT})`),
|
|
54
|
+
}),
|
|
55
|
+
execute: async ({ file_path, offset, limit, }) => {
|
|
56
|
+
const effectiveLimit = limit ?? DEFAULT_READ_LIMIT;
|
|
57
|
+
const content = await backend.read(file_path, offset, effectiveLimit);
|
|
58
|
+
// Add warning for large content
|
|
59
|
+
if (content.length > LARGE_CONTENT_WARNING_CHARS) {
|
|
60
|
+
const estimatedTokens = Math.round(content.length / 4);
|
|
61
|
+
return `[Warning: Large file content (~${estimatedTokens} tokens). Consider using offset/limit to read specific sections.]\n\n${content}`;
|
|
62
|
+
}
|
|
63
|
+
return content;
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// =============================================================================
|
|
68
|
+
// Write Tool
|
|
69
|
+
// =============================================================================
|
|
70
|
+
/**
|
|
71
|
+
* Creates a tool for writing/creating files.
|
|
72
|
+
*
|
|
73
|
+
* Creates new files or overwrites existing ones. Parent directories are
|
|
74
|
+
* created automatically if they don't exist.
|
|
75
|
+
*
|
|
76
|
+
* @param backend - The backend to use for file operations
|
|
77
|
+
* @returns An AI SDK compatible tool for writing files
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* import { createWriteTool } from "@lleverage-ai/agent-sdk";
|
|
82
|
+
*
|
|
83
|
+
* const write = createWriteTool(backend);
|
|
84
|
+
* const agent = createAgent({
|
|
85
|
+
* model,
|
|
86
|
+
* tools: { write },
|
|
87
|
+
* });
|
|
88
|
+
* ```
|
|
89
|
+
*
|
|
90
|
+
* @category Tools
|
|
91
|
+
*/
|
|
92
|
+
export function createWriteTool(backend) {
|
|
93
|
+
return tool({
|
|
94
|
+
description: "Create or overwrite a file with the given content. Parent directories are created automatically.",
|
|
95
|
+
inputSchema: z.object({
|
|
96
|
+
file_path: z.string().describe("Absolute path for the file to write"),
|
|
97
|
+
content: z.string().describe("Content to write to the file"),
|
|
98
|
+
}),
|
|
99
|
+
execute: async ({ file_path, content }) => {
|
|
100
|
+
const result = await backend.write(file_path, content);
|
|
101
|
+
if (!result.success) {
|
|
102
|
+
return `Error: ${result.error}`;
|
|
103
|
+
}
|
|
104
|
+
const lines = content.split("\n").length;
|
|
105
|
+
return `Successfully wrote ${lines} lines to ${file_path}`;
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// =============================================================================
|
|
110
|
+
// Edit Tool
|
|
111
|
+
// =============================================================================
|
|
112
|
+
/**
|
|
113
|
+
* Creates a tool for editing files via string replacement.
|
|
114
|
+
*
|
|
115
|
+
* Replaces text in a file. By default, the `old_string` must be unique
|
|
116
|
+
* in the file to prevent accidental replacements. Use `replace_all: true`
|
|
117
|
+
* to replace all occurrences.
|
|
118
|
+
*
|
|
119
|
+
* @param backend - The backend to use for file operations
|
|
120
|
+
* @returns An AI SDK compatible tool for editing files
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* import { createEditTool } from "@lleverage-ai/agent-sdk";
|
|
125
|
+
*
|
|
126
|
+
* const edit = createEditTool(backend);
|
|
127
|
+
* const agent = createAgent({
|
|
128
|
+
* model,
|
|
129
|
+
* tools: { edit },
|
|
130
|
+
* });
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* @category Tools
|
|
134
|
+
*/
|
|
135
|
+
export function createEditTool(backend) {
|
|
136
|
+
return tool({
|
|
137
|
+
description: "Edit a file by replacing text. The old_string must be unique unless replace_all is true.",
|
|
138
|
+
inputSchema: z.object({
|
|
139
|
+
file_path: z.string().describe("Absolute path to the file to edit"),
|
|
140
|
+
old_string: z.string().describe("Text to find and replace (must be unique in file)"),
|
|
141
|
+
new_string: z.string().describe("Replacement text"),
|
|
142
|
+
replace_all: z
|
|
143
|
+
.boolean()
|
|
144
|
+
.optional()
|
|
145
|
+
.describe("If true, replace all occurrences. Default: false (unique match required)"),
|
|
146
|
+
}),
|
|
147
|
+
execute: async ({ file_path, old_string, new_string, replace_all, }) => {
|
|
148
|
+
const result = await backend.edit(file_path, old_string, new_string, replace_all);
|
|
149
|
+
if (!result.success) {
|
|
150
|
+
return `Error: ${result.error}`;
|
|
151
|
+
}
|
|
152
|
+
if (result.occurrences !== undefined && result.occurrences > 1) {
|
|
153
|
+
return `Successfully replaced ${result.occurrences} occurrences in ${file_path}`;
|
|
154
|
+
}
|
|
155
|
+
return `Successfully edited ${file_path}`;
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
// =============================================================================
|
|
160
|
+
// Glob Tool
|
|
161
|
+
// =============================================================================
|
|
162
|
+
/**
|
|
163
|
+
* Creates a tool for finding files matching glob patterns.
|
|
164
|
+
*
|
|
165
|
+
* Supports glob patterns like `**\/*.ts`, `src/**\/*.test.ts`, etc.
|
|
166
|
+
*
|
|
167
|
+
* @param backend - The backend to use for file operations
|
|
168
|
+
* @returns An AI SDK compatible tool for glob searching
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* ```typescript
|
|
172
|
+
* import { createGlobTool } from "@lleverage-ai/agent-sdk";
|
|
173
|
+
*
|
|
174
|
+
* const glob = createGlobTool(backend);
|
|
175
|
+
* const agent = createAgent({
|
|
176
|
+
* model,
|
|
177
|
+
* tools: { glob },
|
|
178
|
+
* });
|
|
179
|
+
* ```
|
|
180
|
+
*
|
|
181
|
+
* @category Tools
|
|
182
|
+
*/
|
|
183
|
+
export function createGlobTool(backend) {
|
|
184
|
+
return tool({
|
|
185
|
+
description: 'Find files matching a glob pattern. Supports patterns like "**/*.ts", "src/**/*.test.ts".',
|
|
186
|
+
inputSchema: z.object({
|
|
187
|
+
pattern: z.string().describe('Glob pattern to match files (e.g., "**/*.ts")'),
|
|
188
|
+
path: z.string().optional().describe("Base directory to search from (default: root)"),
|
|
189
|
+
}),
|
|
190
|
+
execute: async ({ pattern, path }) => {
|
|
191
|
+
const files = await backend.globInfo(pattern, path);
|
|
192
|
+
return formatGlobOutput(files);
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Format glob output for display.
|
|
198
|
+
* @internal
|
|
199
|
+
*/
|
|
200
|
+
function formatGlobOutput(files) {
|
|
201
|
+
if (files.length === 0) {
|
|
202
|
+
return "No files found matching the pattern.";
|
|
203
|
+
}
|
|
204
|
+
const paths = files.map((f) => f.path);
|
|
205
|
+
const header = `Found ${files.length} file(s):`;
|
|
206
|
+
return `${header}\n${paths.join("\n")}`;
|
|
207
|
+
}
|
|
208
|
+
// =============================================================================
|
|
209
|
+
// Grep Tool
|
|
210
|
+
// =============================================================================
|
|
211
|
+
/**
|
|
212
|
+
* Creates a tool for searching file contents with regex.
|
|
213
|
+
*
|
|
214
|
+
* Searches for pattern matches across files, with optional glob filtering.
|
|
215
|
+
*
|
|
216
|
+
* @param backend - The backend to use for file operations
|
|
217
|
+
* @returns An AI SDK compatible tool for grep searching
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```typescript
|
|
221
|
+
* import { createGrepTool } from "@lleverage-ai/agent-sdk";
|
|
222
|
+
*
|
|
223
|
+
* const grep = createGrepTool(backend);
|
|
224
|
+
* const agent = createAgent({
|
|
225
|
+
* model,
|
|
226
|
+
* tools: { grep },
|
|
227
|
+
* });
|
|
228
|
+
* ```
|
|
229
|
+
*
|
|
230
|
+
* @category Tools
|
|
231
|
+
*/
|
|
232
|
+
export function createGrepTool(backend) {
|
|
233
|
+
return tool({
|
|
234
|
+
description: "Search for pattern matches in files using regex. Returns matching lines with file paths and line numbers.",
|
|
235
|
+
inputSchema: z.object({
|
|
236
|
+
pattern: z.string().describe("Regular expression pattern to search for"),
|
|
237
|
+
path: z.string().optional().describe("Directory to search in (default: root)"),
|
|
238
|
+
glob: z.string().optional().describe('Glob pattern to filter files (e.g., "*.ts")'),
|
|
239
|
+
}),
|
|
240
|
+
execute: async ({ pattern, path, glob }) => {
|
|
241
|
+
const result = await backend.grepRaw(pattern, path, glob);
|
|
242
|
+
// Handle string result (some backends may return formatted string)
|
|
243
|
+
if (typeof result === "string") {
|
|
244
|
+
return result;
|
|
245
|
+
}
|
|
246
|
+
return formatGrepOutput(result);
|
|
247
|
+
},
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Format grep output for display.
|
|
252
|
+
* @internal
|
|
253
|
+
*/
|
|
254
|
+
function formatGrepOutput(matches) {
|
|
255
|
+
if (matches.length === 0) {
|
|
256
|
+
return "No matches found.";
|
|
257
|
+
}
|
|
258
|
+
const lines = matches.map((m) => `${m.path}:${m.line}: ${m.text}`);
|
|
259
|
+
const header = `Found ${matches.length} match(es):`;
|
|
260
|
+
return `${header}\n${lines.join("\n")}`;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Creates all filesystem tools from a backend.
|
|
264
|
+
*
|
|
265
|
+
* This is a convenience factory that creates all filesystem tools at once.
|
|
266
|
+
* For read-only access, set `includeWrite` and `includeEdit` to false.
|
|
267
|
+
*
|
|
268
|
+
* @param options - Configuration options
|
|
269
|
+
* @returns Object containing all filesystem tools
|
|
270
|
+
*
|
|
271
|
+
* @example
|
|
272
|
+
* ```typescript
|
|
273
|
+
* import { createFilesystemTools, FilesystemBackend } from "@lleverage-ai/agent-sdk";
|
|
274
|
+
*
|
|
275
|
+
* const backend = new FilesystemBackend({ rootDir: process.cwd() });
|
|
276
|
+
* const fsTools = createFilesystemTools({ backend });
|
|
277
|
+
*
|
|
278
|
+
* const agent = createAgent({
|
|
279
|
+
* model,
|
|
280
|
+
* tools: fsTools,
|
|
281
|
+
* });
|
|
282
|
+
* ```
|
|
283
|
+
*
|
|
284
|
+
* @example
|
|
285
|
+
* ```typescript
|
|
286
|
+
* // Read-only mode
|
|
287
|
+
* const fsTools = createFilesystemTools({
|
|
288
|
+
* backend,
|
|
289
|
+
* includeWrite: false,
|
|
290
|
+
* includeEdit: false,
|
|
291
|
+
* });
|
|
292
|
+
* ```
|
|
293
|
+
*
|
|
294
|
+
* @category Tools
|
|
295
|
+
*/
|
|
296
|
+
export function createFilesystemTools(options) {
|
|
297
|
+
const { backend, includeWrite = true, includeEdit = true } = options;
|
|
298
|
+
const tools = {
|
|
299
|
+
read: createReadTool(backend),
|
|
300
|
+
glob: createGlobTool(backend),
|
|
301
|
+
grep: createGrepTool(backend),
|
|
302
|
+
};
|
|
303
|
+
if (includeWrite) {
|
|
304
|
+
tools.write = createWriteTool(backend);
|
|
305
|
+
}
|
|
306
|
+
if (includeEdit) {
|
|
307
|
+
tools.edit = createEditTool(backend);
|
|
308
|
+
}
|
|
309
|
+
return tools;
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=filesystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/tools/filesystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core tools for agent operations.
|
|
3
|
+
*
|
|
4
|
+
* This module provides factory functions for creating the minimal tool set:
|
|
5
|
+
* - `read`, `write`, `edit`, `glob`, `grep` - filesystem operations
|
|
6
|
+
* - `bash` - shell command execution
|
|
7
|
+
* - `todo_write` - task tracking
|
|
8
|
+
* - `task` - subagent delegation
|
|
9
|
+
* - `skill` - progressive capability loading
|
|
10
|
+
*
|
|
11
|
+
* @packageDocumentation
|
|
12
|
+
*/
|
|
13
|
+
export type { BashResult, BashToolOptions } from "./execute.js";
|
|
14
|
+
export { createBashTool } from "./execute.js";
|
|
15
|
+
export type { CoreTools, CoreToolsOptions } from "./factory.js";
|
|
16
|
+
export { coreToolsToToolSet, createCoreTools, createFilesystemToolsOnly, } from "./factory.js";
|
|
17
|
+
export type { FilesystemTools, FilesystemToolsOptions } from "./filesystem.js";
|
|
18
|
+
export { createEditTool, createFilesystemTools, createGlobTool, createGrepTool, createReadTool, createWriteTool, } from "./filesystem.js";
|
|
19
|
+
export type { SearchToolsOptions } from "./search.js";
|
|
20
|
+
export { createSearchToolsTool } from "./search.js";
|
|
21
|
+
export type { LoadableSkillDefinition, SkillLoadResult, SkillRegistryOptions, SkillToolOptions, } from "./skills.js";
|
|
22
|
+
export { createSkillRegistry, createSkillTool, defineLoadableSkill, SkillRegistry, } from "./skills.js";
|
|
23
|
+
export type { TaskStatus, TaskToolOptions, } from "./task.js";
|
|
24
|
+
export { cleanupStaleTasks, clearCompletedTasks, createTaskTool, getBackgroundTask, listBackgroundTasks, recoverFailedTasks, recoverRunningTasks, } from "./task.js";
|
|
25
|
+
export type { OnTodosChanged, TodoChangeType, TodoInput, TodosChangedData, TodoWriteToolOptions, } from "./todos.js";
|
|
26
|
+
export { createTodoWriteTool } from "./todos.js";
|
|
27
|
+
export type { ToolLoadResult, ToolMetadata, ToolRegistryOptions, ToolSearchOptions, UseToolsToolOptions, } from "./tool-registry.js";
|
|
28
|
+
export { createToolRegistry, createUseToolsTool, ToolRegistry, } from "./tool-registry.js";
|
|
29
|
+
export type { AskUserCallback, QuestionOption, } from "./user-interaction.js";
|
|
30
|
+
export { createAskUserQuestionTool } from "./user-interaction.js";
|
|
31
|
+
export type { ToolReference } from "./utils.js";
|
|
32
|
+
export { mcpTools, mcpToolsFor, toolsFrom, toolsFromPlugin } from "./utils.js";
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,YAAY,EACV,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,UAAU,EACV,eAAe,GAChB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,cAAc,EACd,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EACV,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,eAAe,EACf,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core tools for agent operations.
|
|
3
|
+
*
|
|
4
|
+
* This module provides factory functions for creating the minimal tool set:
|
|
5
|
+
* - `read`, `write`, `edit`, `glob`, `grep` - filesystem operations
|
|
6
|
+
* - `bash` - shell command execution
|
|
7
|
+
* - `todo_write` - task tracking
|
|
8
|
+
* - `task` - subagent delegation
|
|
9
|
+
* - `skill` - progressive capability loading
|
|
10
|
+
*
|
|
11
|
+
* @packageDocumentation
|
|
12
|
+
*/
|
|
13
|
+
// Bash tool
|
|
14
|
+
export { createBashTool } from "./execute.js";
|
|
15
|
+
// Tool factory (unified tool creation)
|
|
16
|
+
export { coreToolsToToolSet, createCoreTools, createFilesystemToolsOnly, } from "./factory.js";
|
|
17
|
+
// Filesystem tools
|
|
18
|
+
export { createEditTool, createFilesystemTools, createGlobTool, createGrepTool, createReadTool, createWriteTool, } from "./filesystem.js";
|
|
19
|
+
// Search tools (MCP integration)
|
|
20
|
+
export { createSearchToolsTool } from "./search.js";
|
|
21
|
+
// Skill tool (progressive disclosure)
|
|
22
|
+
export { createSkillRegistry, createSkillTool, defineLoadableSkill, SkillRegistry, } from "./skills.js";
|
|
23
|
+
// Task tool (subagent delegation)
|
|
24
|
+
export { cleanupStaleTasks, clearCompletedTasks, createTaskTool, getBackgroundTask, listBackgroundTasks, recoverFailedTasks, recoverRunningTasks, } from "./task.js";
|
|
25
|
+
// Todo tool
|
|
26
|
+
export { createTodoWriteTool } from "./todos.js";
|
|
27
|
+
// Tool registry (deferred tool loading)
|
|
28
|
+
export { createToolRegistry, createUseToolsTool, ToolRegistry, } from "./tool-registry.js";
|
|
29
|
+
// User interaction tools
|
|
30
|
+
export { createAskUserQuestionTool } from "./user-interaction.js";
|
|
31
|
+
// Tool utilities (DX helpers)
|
|
32
|
+
export { mcpTools, mcpToolsFor, toolsFrom, toolsFromPlugin } from "./utils.js";
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,uCAAuC;AACvC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,mBAAmB;AACnB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,iCAAiC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAOpD,sCAAsC;AACtC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AAKrB,kCAAkC;AAClC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAQnB,YAAY;AACZ,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAQjD,wCAAwC;AACxC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAK5B,yBAAyB;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,8BAA8B;AAC9B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool search meta-tool for progressive disclosure.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import type { Tool } from "ai";
|
|
7
|
+
import type { MCPManager } from "../mcp/manager.js";
|
|
8
|
+
/**
|
|
9
|
+
* Options for creating the search_tools tool.
|
|
10
|
+
*
|
|
11
|
+
* @category Tools
|
|
12
|
+
*/
|
|
13
|
+
export interface SearchToolsOptions {
|
|
14
|
+
/** MCP manager to search */
|
|
15
|
+
manager: MCPManager;
|
|
16
|
+
/**
|
|
17
|
+
* Maximum results to return.
|
|
18
|
+
* @defaultValue 10
|
|
19
|
+
*/
|
|
20
|
+
maxResults?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Whether to enable loading tools after search.
|
|
23
|
+
* When true, the tool accepts an optional 'load' parameter.
|
|
24
|
+
* @defaultValue false
|
|
25
|
+
*/
|
|
26
|
+
enableLoad?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Callback when tools are loaded.
|
|
29
|
+
* Used to notify the agent that tools have changed.
|
|
30
|
+
*/
|
|
31
|
+
onToolsLoaded?: (toolNames: string[]) => void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Creates the search_tools meta-tool for discovering MCP tools.
|
|
35
|
+
*
|
|
36
|
+
* This tool allows agents to search for available tools by query,
|
|
37
|
+
* enabling progressive disclosure of capabilities.
|
|
38
|
+
*
|
|
39
|
+
* @param options - Configuration options
|
|
40
|
+
* @returns AI SDK tool definition
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const searchTool = createSearchToolsTool({
|
|
45
|
+
* manager: mcpManager,
|
|
46
|
+
* maxResults: 5,
|
|
47
|
+
* });
|
|
48
|
+
*
|
|
49
|
+
* // Agent can then use:
|
|
50
|
+
* // search_tools({ query: "github issues" })
|
|
51
|
+
*
|
|
52
|
+
* // With loading enabled:
|
|
53
|
+
* // search_tools({ query: "github issues", load: true })
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @category Tools
|
|
57
|
+
*/
|
|
58
|
+
export declare function createSearchToolsTool(options: SearchToolsOptions): Tool;
|
|
59
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,OAAO,EAAE,UAAU,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CA6EvE"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool search meta-tool for progressive disclosure.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import { tool } from "ai";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
/**
|
|
9
|
+
* Creates the search_tools meta-tool for discovering MCP tools.
|
|
10
|
+
*
|
|
11
|
+
* This tool allows agents to search for available tools by query,
|
|
12
|
+
* enabling progressive disclosure of capabilities.
|
|
13
|
+
*
|
|
14
|
+
* @param options - Configuration options
|
|
15
|
+
* @returns AI SDK tool definition
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const searchTool = createSearchToolsTool({
|
|
20
|
+
* manager: mcpManager,
|
|
21
|
+
* maxResults: 5,
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Agent can then use:
|
|
25
|
+
* // search_tools({ query: "github issues" })
|
|
26
|
+
*
|
|
27
|
+
* // With loading enabled:
|
|
28
|
+
* // search_tools({ query: "github issues", load: true })
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @category Tools
|
|
32
|
+
*/
|
|
33
|
+
export function createSearchToolsTool(options) {
|
|
34
|
+
const { manager, maxResults = 10, enableLoad = false, onToolsLoaded } = options;
|
|
35
|
+
const baseDescription = "Search for available tools by query. Returns tool names and descriptions. " +
|
|
36
|
+
"Use this to discover tools that can help with your task.";
|
|
37
|
+
const loadDescription = enableLoad
|
|
38
|
+
? " Set 'load: true' to load discovered tools for immediate use."
|
|
39
|
+
: "";
|
|
40
|
+
const inputSchema = enableLoad
|
|
41
|
+
? z.object({
|
|
42
|
+
query: z
|
|
43
|
+
.string()
|
|
44
|
+
.describe("Search query to find relevant tools. Can match tool names or descriptions."),
|
|
45
|
+
load: z
|
|
46
|
+
.boolean()
|
|
47
|
+
.optional()
|
|
48
|
+
.describe("If true, load the discovered tools for immediate use. Default is false (search only)."),
|
|
49
|
+
})
|
|
50
|
+
: z.object({
|
|
51
|
+
query: z
|
|
52
|
+
.string()
|
|
53
|
+
.describe("Search query to find relevant tools. Can match tool names or descriptions."),
|
|
54
|
+
});
|
|
55
|
+
return tool({
|
|
56
|
+
description: baseDescription + loadDescription,
|
|
57
|
+
inputSchema,
|
|
58
|
+
execute: async (input) => {
|
|
59
|
+
const { query, load = false } = input;
|
|
60
|
+
const results = manager.searchTools(query, maxResults);
|
|
61
|
+
if (results.length === 0) {
|
|
62
|
+
return `No tools found matching "${query}". Try a different search term.`;
|
|
63
|
+
}
|
|
64
|
+
// If load is requested, load the discovered tools
|
|
65
|
+
if (load && enableLoad) {
|
|
66
|
+
const toolNames = results.map((t) => t.name);
|
|
67
|
+
const loadResult = manager.loadTools(toolNames);
|
|
68
|
+
// Notify callback if provided
|
|
69
|
+
if (onToolsLoaded && loadResult.loaded.length > 0) {
|
|
70
|
+
onToolsLoaded(loadResult.loaded);
|
|
71
|
+
}
|
|
72
|
+
if (loadResult.loaded.length === 0) {
|
|
73
|
+
const formatted = results.map((t) => `- **${t.name}**: ${t.description}`).join("\n");
|
|
74
|
+
return `Found ${results.length} tool(s) (all already loaded):\n\n${formatted}`;
|
|
75
|
+
}
|
|
76
|
+
const loadedFormatted = loadResult.loaded
|
|
77
|
+
.map((name) => {
|
|
78
|
+
const meta = results.find((t) => t.name === name);
|
|
79
|
+
return `- **${name}**: ${meta?.description ?? ""}`;
|
|
80
|
+
})
|
|
81
|
+
.join("\n");
|
|
82
|
+
let response = `Loaded ${loadResult.loaded.length} tool(s):\n\n${loadedFormatted}`;
|
|
83
|
+
if (loadResult.alreadyLoaded.length > 0) {
|
|
84
|
+
response += `\n\n(${loadResult.alreadyLoaded.length} tool(s) were already loaded)`;
|
|
85
|
+
}
|
|
86
|
+
return response;
|
|
87
|
+
}
|
|
88
|
+
// Search only - return results without loading
|
|
89
|
+
const formatted = results.map((t) => `- **${t.name}**: ${t.description}`).join("\n");
|
|
90
|
+
return `Found ${results.length} tool(s):\n\n${formatted}`;
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
|