@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.
Files changed (327) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2321 -0
  3. package/dist/agent.d.ts +52 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +2122 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/backend.d.ts +378 -0
  8. package/dist/backend.d.ts.map +1 -0
  9. package/dist/backend.js +71 -0
  10. package/dist/backend.js.map +1 -0
  11. package/dist/backends/composite.d.ts +258 -0
  12. package/dist/backends/composite.d.ts.map +1 -0
  13. package/dist/backends/composite.js +437 -0
  14. package/dist/backends/composite.js.map +1 -0
  15. package/dist/backends/filesystem.d.ts +268 -0
  16. package/dist/backends/filesystem.d.ts.map +1 -0
  17. package/dist/backends/filesystem.js +623 -0
  18. package/dist/backends/filesystem.js.map +1 -0
  19. package/dist/backends/index.d.ts +14 -0
  20. package/dist/backends/index.d.ts.map +1 -0
  21. package/dist/backends/index.js +14 -0
  22. package/dist/backends/index.js.map +1 -0
  23. package/dist/backends/persistent.d.ts +312 -0
  24. package/dist/backends/persistent.d.ts.map +1 -0
  25. package/dist/backends/persistent.js +519 -0
  26. package/dist/backends/persistent.js.map +1 -0
  27. package/dist/backends/sandbox.d.ts +315 -0
  28. package/dist/backends/sandbox.d.ts.map +1 -0
  29. package/dist/backends/sandbox.js +490 -0
  30. package/dist/backends/sandbox.js.map +1 -0
  31. package/dist/backends/state.d.ts +225 -0
  32. package/dist/backends/state.d.ts.map +1 -0
  33. package/dist/backends/state.js +396 -0
  34. package/dist/backends/state.js.map +1 -0
  35. package/dist/checkpointer/file-saver.d.ts +182 -0
  36. package/dist/checkpointer/file-saver.d.ts.map +1 -0
  37. package/dist/checkpointer/file-saver.js +298 -0
  38. package/dist/checkpointer/file-saver.js.map +1 -0
  39. package/dist/checkpointer/index.d.ts +40 -0
  40. package/dist/checkpointer/index.d.ts.map +1 -0
  41. package/dist/checkpointer/index.js +40 -0
  42. package/dist/checkpointer/index.js.map +1 -0
  43. package/dist/checkpointer/kv-saver.d.ts +142 -0
  44. package/dist/checkpointer/kv-saver.d.ts.map +1 -0
  45. package/dist/checkpointer/kv-saver.js +176 -0
  46. package/dist/checkpointer/kv-saver.js.map +1 -0
  47. package/dist/checkpointer/memory-saver.d.ts +158 -0
  48. package/dist/checkpointer/memory-saver.d.ts.map +1 -0
  49. package/dist/checkpointer/memory-saver.js +222 -0
  50. package/dist/checkpointer/memory-saver.js.map +1 -0
  51. package/dist/checkpointer/types.d.ts +353 -0
  52. package/dist/checkpointer/types.d.ts.map +1 -0
  53. package/dist/checkpointer/types.js +159 -0
  54. package/dist/checkpointer/types.js.map +1 -0
  55. package/dist/context-manager.d.ts +627 -0
  56. package/dist/context-manager.d.ts.map +1 -0
  57. package/dist/context-manager.js +1039 -0
  58. package/dist/context-manager.js.map +1 -0
  59. package/dist/context.d.ts +57 -0
  60. package/dist/context.d.ts.map +1 -0
  61. package/dist/context.js +76 -0
  62. package/dist/context.js.map +1 -0
  63. package/dist/errors/index.d.ts +611 -0
  64. package/dist/errors/index.d.ts.map +1 -0
  65. package/dist/errors/index.js +1023 -0
  66. package/dist/errors/index.js.map +1 -0
  67. package/dist/generation-helpers.d.ts +126 -0
  68. package/dist/generation-helpers.d.ts.map +1 -0
  69. package/dist/generation-helpers.js +181 -0
  70. package/dist/generation-helpers.js.map +1 -0
  71. package/dist/hooks/audit.d.ts +210 -0
  72. package/dist/hooks/audit.d.ts.map +1 -0
  73. package/dist/hooks/audit.js +305 -0
  74. package/dist/hooks/audit.js.map +1 -0
  75. package/dist/hooks/cache.d.ts +180 -0
  76. package/dist/hooks/cache.d.ts.map +1 -0
  77. package/dist/hooks/cache.js +273 -0
  78. package/dist/hooks/cache.js.map +1 -0
  79. package/dist/hooks/guardrails.d.ts +145 -0
  80. package/dist/hooks/guardrails.d.ts.map +1 -0
  81. package/dist/hooks/guardrails.js +326 -0
  82. package/dist/hooks/guardrails.js.map +1 -0
  83. package/dist/hooks/index.d.ts +18 -0
  84. package/dist/hooks/index.d.ts.map +1 -0
  85. package/dist/hooks/index.js +32 -0
  86. package/dist/hooks/index.js.map +1 -0
  87. package/dist/hooks/logging.d.ts +193 -0
  88. package/dist/hooks/logging.d.ts.map +1 -0
  89. package/dist/hooks/logging.js +345 -0
  90. package/dist/hooks/logging.js.map +1 -0
  91. package/dist/hooks/parallel-guardrails.d.ts +268 -0
  92. package/dist/hooks/parallel-guardrails.d.ts.map +1 -0
  93. package/dist/hooks/parallel-guardrails.js +416 -0
  94. package/dist/hooks/parallel-guardrails.js.map +1 -0
  95. package/dist/hooks/rate-limit.d.ts +305 -0
  96. package/dist/hooks/rate-limit.d.ts.map +1 -0
  97. package/dist/hooks/rate-limit.js +372 -0
  98. package/dist/hooks/rate-limit.js.map +1 -0
  99. package/dist/hooks/retry.d.ts +144 -0
  100. package/dist/hooks/retry.d.ts.map +1 -0
  101. package/dist/hooks/retry.js +210 -0
  102. package/dist/hooks/retry.js.map +1 -0
  103. package/dist/hooks/secrets.d.ts +174 -0
  104. package/dist/hooks/secrets.d.ts.map +1 -0
  105. package/dist/hooks/secrets.js +306 -0
  106. package/dist/hooks/secrets.js.map +1 -0
  107. package/dist/hooks.d.ts +229 -0
  108. package/dist/hooks.d.ts.map +1 -0
  109. package/dist/hooks.js +352 -0
  110. package/dist/hooks.js.map +1 -0
  111. package/dist/index.d.ts +97 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +182 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/mcp/env.d.ts +25 -0
  116. package/dist/mcp/env.d.ts.map +1 -0
  117. package/dist/mcp/env.js +18 -0
  118. package/dist/mcp/env.js.map +1 -0
  119. package/dist/mcp/index.d.ts +16 -0
  120. package/dist/mcp/index.d.ts.map +1 -0
  121. package/dist/mcp/index.js +17 -0
  122. package/dist/mcp/index.js.map +1 -0
  123. package/dist/mcp/manager.d.ts +184 -0
  124. package/dist/mcp/manager.d.ts.map +1 -0
  125. package/dist/mcp/manager.js +446 -0
  126. package/dist/mcp/manager.js.map +1 -0
  127. package/dist/mcp/types.d.ts +58 -0
  128. package/dist/mcp/types.d.ts.map +1 -0
  129. package/dist/mcp/types.js +7 -0
  130. package/dist/mcp/types.js.map +1 -0
  131. package/dist/mcp/validation.d.ts +119 -0
  132. package/dist/mcp/validation.d.ts.map +1 -0
  133. package/dist/mcp/validation.js +407 -0
  134. package/dist/mcp/validation.js.map +1 -0
  135. package/dist/mcp/virtual-server.d.ts +78 -0
  136. package/dist/mcp/virtual-server.d.ts.map +1 -0
  137. package/dist/mcp/virtual-server.js +137 -0
  138. package/dist/mcp/virtual-server.js.map +1 -0
  139. package/dist/memory/filesystem-store.d.ts +217 -0
  140. package/dist/memory/filesystem-store.d.ts.map +1 -0
  141. package/dist/memory/filesystem-store.js +343 -0
  142. package/dist/memory/filesystem-store.js.map +1 -0
  143. package/dist/memory/index.d.ts +46 -0
  144. package/dist/memory/index.d.ts.map +1 -0
  145. package/dist/memory/index.js +46 -0
  146. package/dist/memory/index.js.map +1 -0
  147. package/dist/memory/loader.d.ts +396 -0
  148. package/dist/memory/loader.d.ts.map +1 -0
  149. package/dist/memory/loader.js +419 -0
  150. package/dist/memory/loader.js.map +1 -0
  151. package/dist/memory/permissions.d.ts +282 -0
  152. package/dist/memory/permissions.d.ts.map +1 -0
  153. package/dist/memory/permissions.js +297 -0
  154. package/dist/memory/permissions.js.map +1 -0
  155. package/dist/memory/rules.d.ts +249 -0
  156. package/dist/memory/rules.d.ts.map +1 -0
  157. package/dist/memory/rules.js +362 -0
  158. package/dist/memory/rules.js.map +1 -0
  159. package/dist/memory/store.d.ts +286 -0
  160. package/dist/memory/store.d.ts.map +1 -0
  161. package/dist/memory/store.js +263 -0
  162. package/dist/memory/store.js.map +1 -0
  163. package/dist/middleware/apply.d.ts +73 -0
  164. package/dist/middleware/apply.d.ts.map +1 -0
  165. package/dist/middleware/apply.js +219 -0
  166. package/dist/middleware/apply.js.map +1 -0
  167. package/dist/middleware/context.d.ts +33 -0
  168. package/dist/middleware/context.d.ts.map +1 -0
  169. package/dist/middleware/context.js +176 -0
  170. package/dist/middleware/context.js.map +1 -0
  171. package/dist/middleware/index.d.ts +31 -0
  172. package/dist/middleware/index.d.ts.map +1 -0
  173. package/dist/middleware/index.js +32 -0
  174. package/dist/middleware/index.js.map +1 -0
  175. package/dist/middleware/logging.d.ts +137 -0
  176. package/dist/middleware/logging.d.ts.map +1 -0
  177. package/dist/middleware/logging.js +374 -0
  178. package/dist/middleware/logging.js.map +1 -0
  179. package/dist/middleware/types.d.ts +183 -0
  180. package/dist/middleware/types.d.ts.map +1 -0
  181. package/dist/middleware/types.js +11 -0
  182. package/dist/middleware/types.js.map +1 -0
  183. package/dist/observability/events.d.ts +183 -0
  184. package/dist/observability/events.d.ts.map +1 -0
  185. package/dist/observability/events.js +305 -0
  186. package/dist/observability/events.js.map +1 -0
  187. package/dist/observability/index.d.ts +55 -0
  188. package/dist/observability/index.d.ts.map +1 -0
  189. package/dist/observability/index.js +87 -0
  190. package/dist/observability/index.js.map +1 -0
  191. package/dist/observability/logger.d.ts +318 -0
  192. package/dist/observability/logger.d.ts.map +1 -0
  193. package/dist/observability/logger.js +436 -0
  194. package/dist/observability/logger.js.map +1 -0
  195. package/dist/observability/metrics.d.ts +341 -0
  196. package/dist/observability/metrics.d.ts.map +1 -0
  197. package/dist/observability/metrics.js +490 -0
  198. package/dist/observability/metrics.js.map +1 -0
  199. package/dist/observability/preset.d.ts +161 -0
  200. package/dist/observability/preset.d.ts.map +1 -0
  201. package/dist/observability/preset.js +133 -0
  202. package/dist/observability/preset.js.map +1 -0
  203. package/dist/observability/streaming.d.ts +113 -0
  204. package/dist/observability/streaming.d.ts.map +1 -0
  205. package/dist/observability/streaming.js +114 -0
  206. package/dist/observability/streaming.js.map +1 -0
  207. package/dist/observability/tracing.d.ts +378 -0
  208. package/dist/observability/tracing.d.ts.map +1 -0
  209. package/dist/observability/tracing.js +539 -0
  210. package/dist/observability/tracing.js.map +1 -0
  211. package/dist/plugins.d.ts +55 -0
  212. package/dist/plugins.d.ts.map +1 -0
  213. package/dist/plugins.js +63 -0
  214. package/dist/plugins.js.map +1 -0
  215. package/dist/presets/index.d.ts +7 -0
  216. package/dist/presets/index.d.ts.map +1 -0
  217. package/dist/presets/index.js +7 -0
  218. package/dist/presets/index.js.map +1 -0
  219. package/dist/presets/production.d.ts +262 -0
  220. package/dist/presets/production.d.ts.map +1 -0
  221. package/dist/presets/production.js +295 -0
  222. package/dist/presets/production.js.map +1 -0
  223. package/dist/security/index.d.ts +179 -0
  224. package/dist/security/index.d.ts.map +1 -0
  225. package/dist/security/index.js +323 -0
  226. package/dist/security/index.js.map +1 -0
  227. package/dist/subagents/advanced.d.ts +413 -0
  228. package/dist/subagents/advanced.d.ts.map +1 -0
  229. package/dist/subagents/advanced.js +396 -0
  230. package/dist/subagents/advanced.js.map +1 -0
  231. package/dist/subagents/index.d.ts +14 -0
  232. package/dist/subagents/index.d.ts.map +1 -0
  233. package/dist/subagents/index.js +15 -0
  234. package/dist/subagents/index.js.map +1 -0
  235. package/dist/subagents.d.ts +73 -0
  236. package/dist/subagents.d.ts.map +1 -0
  237. package/dist/subagents.js +213 -0
  238. package/dist/subagents.js.map +1 -0
  239. package/dist/task-store/file-store.d.ts +76 -0
  240. package/dist/task-store/file-store.d.ts.map +1 -0
  241. package/dist/task-store/file-store.js +190 -0
  242. package/dist/task-store/file-store.js.map +1 -0
  243. package/dist/task-store/index.d.ts +11 -0
  244. package/dist/task-store/index.d.ts.map +1 -0
  245. package/dist/task-store/index.js +10 -0
  246. package/dist/task-store/index.js.map +1 -0
  247. package/dist/task-store/kv-store.d.ts +140 -0
  248. package/dist/task-store/kv-store.d.ts.map +1 -0
  249. package/dist/task-store/kv-store.js +169 -0
  250. package/dist/task-store/kv-store.js.map +1 -0
  251. package/dist/task-store/memory-store.d.ts +66 -0
  252. package/dist/task-store/memory-store.d.ts.map +1 -0
  253. package/dist/task-store/memory-store.js +125 -0
  254. package/dist/task-store/memory-store.js.map +1 -0
  255. package/dist/task-store/types.d.ts +235 -0
  256. package/dist/task-store/types.d.ts.map +1 -0
  257. package/dist/task-store/types.js +110 -0
  258. package/dist/task-store/types.js.map +1 -0
  259. package/dist/testing/assertions.d.ts +401 -0
  260. package/dist/testing/assertions.d.ts.map +1 -0
  261. package/dist/testing/assertions.js +630 -0
  262. package/dist/testing/assertions.js.map +1 -0
  263. package/dist/testing/index.d.ts +343 -0
  264. package/dist/testing/index.d.ts.map +1 -0
  265. package/dist/testing/index.js +360 -0
  266. package/dist/testing/index.js.map +1 -0
  267. package/dist/testing/mock-agent.d.ts +214 -0
  268. package/dist/testing/mock-agent.d.ts.map +1 -0
  269. package/dist/testing/mock-agent.js +448 -0
  270. package/dist/testing/mock-agent.js.map +1 -0
  271. package/dist/testing/recorder.d.ts +288 -0
  272. package/dist/testing/recorder.d.ts.map +1 -0
  273. package/dist/testing/recorder.js +499 -0
  274. package/dist/testing/recorder.js.map +1 -0
  275. package/dist/tools/execute.d.ts +104 -0
  276. package/dist/tools/execute.d.ts.map +1 -0
  277. package/dist/tools/execute.js +191 -0
  278. package/dist/tools/execute.js.map +1 -0
  279. package/dist/tools/factory.d.ts +260 -0
  280. package/dist/tools/factory.d.ts.map +1 -0
  281. package/dist/tools/factory.js +241 -0
  282. package/dist/tools/factory.js.map +1 -0
  283. package/dist/tools/filesystem.d.ts +215 -0
  284. package/dist/tools/filesystem.d.ts.map +1 -0
  285. package/dist/tools/filesystem.js +311 -0
  286. package/dist/tools/filesystem.js.map +1 -0
  287. package/dist/tools/index.d.ts +33 -0
  288. package/dist/tools/index.d.ts.map +1 -0
  289. package/dist/tools/index.js +33 -0
  290. package/dist/tools/index.js.map +1 -0
  291. package/dist/tools/search.d.ts +59 -0
  292. package/dist/tools/search.d.ts.map +1 -0
  293. package/dist/tools/search.js +94 -0
  294. package/dist/tools/search.js.map +1 -0
  295. package/dist/tools/skills.d.ts +354 -0
  296. package/dist/tools/skills.d.ts.map +1 -0
  297. package/dist/tools/skills.js +413 -0
  298. package/dist/tools/skills.js.map +1 -0
  299. package/dist/tools/task.d.ts +272 -0
  300. package/dist/tools/task.d.ts.map +1 -0
  301. package/dist/tools/task.js +521 -0
  302. package/dist/tools/task.js.map +1 -0
  303. package/dist/tools/todos.d.ts +131 -0
  304. package/dist/tools/todos.d.ts.map +1 -0
  305. package/dist/tools/todos.js +120 -0
  306. package/dist/tools/todos.js.map +1 -0
  307. package/dist/tools/tool-registry.d.ts +424 -0
  308. package/dist/tools/tool-registry.d.ts.map +1 -0
  309. package/dist/tools/tool-registry.js +607 -0
  310. package/dist/tools/tool-registry.js.map +1 -0
  311. package/dist/tools/user-interaction.d.ts +116 -0
  312. package/dist/tools/user-interaction.d.ts.map +1 -0
  313. package/dist/tools/user-interaction.js +147 -0
  314. package/dist/tools/user-interaction.js.map +1 -0
  315. package/dist/tools/utils.d.ts +124 -0
  316. package/dist/tools/utils.d.ts.map +1 -0
  317. package/dist/tools/utils.js +189 -0
  318. package/dist/tools/utils.js.map +1 -0
  319. package/dist/tools.d.ts +74 -0
  320. package/dist/tools.d.ts.map +1 -0
  321. package/dist/tools.js +73 -0
  322. package/dist/tools.js.map +1 -0
  323. package/dist/types.d.ts +2421 -0
  324. package/dist/types.d.ts.map +1 -0
  325. package/dist/types.js +55 -0
  326. package/dist/types.js.map +1 -0
  327. 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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"}