llm-advanced-tools 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +402 -0
  2. package/dist/adapters/index.d.ts +3 -0
  3. package/dist/adapters/index.d.ts.map +1 -0
  4. package/dist/adapters/index.js +8 -0
  5. package/dist/adapters/index.js.map +1 -0
  6. package/dist/adapters/openai.d.ts +38 -0
  7. package/dist/adapters/openai.d.ts.map +1 -0
  8. package/dist/adapters/openai.js +170 -0
  9. package/dist/adapters/openai.js.map +1 -0
  10. package/dist/adapters/vercel-ai.d.ts +46 -0
  11. package/dist/adapters/vercel-ai.d.ts.map +1 -0
  12. package/dist/adapters/vercel-ai.js +228 -0
  13. package/dist/adapters/vercel-ai.js.map +1 -0
  14. package/dist/core/client.d.ts +36 -0
  15. package/dist/core/client.d.ts.map +1 -0
  16. package/dist/core/client.js +188 -0
  17. package/dist/core/client.js.map +1 -0
  18. package/dist/core/index.d.ts +3 -0
  19. package/dist/core/index.d.ts.map +1 -0
  20. package/dist/core/index.js +8 -0
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/core/registry.d.ts +64 -0
  23. package/dist/core/registry.d.ts.map +1 -0
  24. package/dist/core/registry.js +169 -0
  25. package/dist/core/registry.js.map +1 -0
  26. package/dist/executor/base.d.ts +35 -0
  27. package/dist/executor/base.d.ts.map +1 -0
  28. package/dist/executor/base.js +85 -0
  29. package/dist/executor/base.js.map +1 -0
  30. package/dist/executor/index.d.ts +3 -0
  31. package/dist/executor/index.d.ts.map +1 -0
  32. package/dist/executor/index.js +9 -0
  33. package/dist/executor/index.js.map +1 -0
  34. package/dist/executor/vm.d.ts +18 -0
  35. package/dist/executor/vm.d.ts.map +1 -0
  36. package/dist/executor/vm.js +106 -0
  37. package/dist/executor/vm.js.map +1 -0
  38. package/dist/index.d.ts +6 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +20 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/search/base.d.ts +32 -0
  43. package/dist/search/base.d.ts.map +1 -0
  44. package/dist/search/base.js +28 -0
  45. package/dist/search/base.js.map +1 -0
  46. package/dist/search/bm25.d.ts +16 -0
  47. package/dist/search/bm25.d.ts.map +1 -0
  48. package/dist/search/bm25.js +84 -0
  49. package/dist/search/bm25.js.map +1 -0
  50. package/dist/search/index.d.ts +4 -0
  51. package/dist/search/index.d.ts.map +1 -0
  52. package/dist/search/index.js +10 -0
  53. package/dist/search/index.js.map +1 -0
  54. package/dist/search/regex.d.ts +12 -0
  55. package/dist/search/regex.d.ts.map +1 -0
  56. package/dist/search/regex.js +57 -0
  57. package/dist/search/regex.js.map +1 -0
  58. package/dist/types/index.d.ts +186 -0
  59. package/dist/types/index.d.ts.map +1 -0
  60. package/dist/types/index.js +3 -0
  61. package/dist/types/index.js.map +1 -0
  62. package/package.json +52 -0
  63. package/plan.md +576 -0
  64. package/src/adapters/index.ts +2 -0
  65. package/src/adapters/openai.ts +195 -0
  66. package/src/adapters/vercel-ai.ts +270 -0
  67. package/src/core/client.ts +232 -0
  68. package/src/core/index.ts +2 -0
  69. package/src/core/registry.ts +198 -0
  70. package/src/executor/base.ts +122 -0
  71. package/src/executor/index.ts +2 -0
  72. package/src/executor/vm.ts +87 -0
  73. package/src/index.ts +26 -0
  74. package/src/search/base.ts +63 -0
  75. package/src/search/bm25.ts +64 -0
  76. package/src/search/index.ts +3 -0
  77. package/src/search/regex.ts +66 -0
  78. package/src/types/index.ts +221 -0
  79. package/test-advanced.ts +212 -0
  80. package/test-simple.ts +91 -0
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToolRegistry = void 0;
4
+ const search_1 = require("../search");
5
+ /**
6
+ * Registry for managing tool definitions and discovery
7
+ */
8
+ class ToolRegistry {
9
+ constructor(searchConfig) {
10
+ this.tools = new Map();
11
+ this.deferredTools = new Map();
12
+ this.loadedTools = new Set();
13
+ // Initialize search strategy
14
+ if (searchConfig?.customSearchFn) {
15
+ this.searchStrategy = {
16
+ search: async (query, tools) => searchConfig.customSearchFn(query, tools)
17
+ };
18
+ }
19
+ else {
20
+ const strategy = searchConfig?.strategy ?? 'smart';
21
+ const maxResults = searchConfig?.maxResults ?? 10;
22
+ const threshold = searchConfig?.threshold ?? 0.0;
23
+ // Map user-friendly names (and legacy names) to implementations
24
+ // 'smart' or 'bm25' → BM25 (best relevance ranking)
25
+ // 'keyword' or 'regex' → Regex (fast keyword matching)
26
+ const useSmartSearch = strategy === 'smart' ||
27
+ strategy === 'bm25';
28
+ this.searchStrategy = useSmartSearch
29
+ ? new search_1.BM25SearchStrategy(maxResults, threshold)
30
+ : new search_1.RegexSearchStrategy(maxResults, threshold);
31
+ }
32
+ }
33
+ /**
34
+ * Register a tool
35
+ */
36
+ register(tool) {
37
+ if (this.tools.has(tool.name)) {
38
+ throw new Error(`Tool "${tool.name}" is already registered`);
39
+ }
40
+ this.tools.set(tool.name, tool);
41
+ if (tool.deferLoading) {
42
+ this.deferredTools.set(tool.name, tool);
43
+ }
44
+ else {
45
+ this.loadedTools.add(tool.name);
46
+ }
47
+ }
48
+ /**
49
+ * Register multiple tools at once
50
+ */
51
+ registerMany(tools) {
52
+ tools.forEach(tool => this.register(tool));
53
+ }
54
+ /**
55
+ * Get a specific tool by name
56
+ */
57
+ get(name) {
58
+ return this.tools.get(name);
59
+ }
60
+ /**
61
+ * Load a deferred tool into active context
62
+ */
63
+ load(name) {
64
+ const tool = this.deferredTools.get(name);
65
+ if (tool) {
66
+ this.loadedTools.add(name);
67
+ return tool;
68
+ }
69
+ return undefined;
70
+ }
71
+ /**
72
+ * Get all currently loaded tools
73
+ */
74
+ getLoadedTools() {
75
+ return Array.from(this.loadedTools)
76
+ .map(name => this.tools.get(name))
77
+ .filter((tool) => tool !== undefined);
78
+ }
79
+ /**
80
+ * Get all tools (including deferred)
81
+ */
82
+ getAllTools() {
83
+ return Array.from(this.tools.values());
84
+ }
85
+ /**
86
+ * Search for tools matching a query
87
+ * @param query Search query
88
+ * @param maxResults Maximum results to return
89
+ * @param loadResults Whether to automatically load found tools
90
+ */
91
+ async search(query, maxResults, loadResults = true) {
92
+ // Search within deferred tools
93
+ const deferredToolsList = Array.from(this.deferredTools.values());
94
+ const results = await this.searchStrategy.search(query, deferredToolsList, maxResults);
95
+ // Optionally load the found tools
96
+ if (loadResults) {
97
+ results.forEach(tool => this.loadedTools.add(tool.name));
98
+ }
99
+ return results;
100
+ }
101
+ /**
102
+ * Clear all loaded tools (keeps registrations)
103
+ */
104
+ clearLoaded() {
105
+ this.loadedTools.clear();
106
+ // Re-add non-deferred tools
107
+ this.tools.forEach((tool, name) => {
108
+ if (!tool.deferLoading) {
109
+ this.loadedTools.add(name);
110
+ }
111
+ });
112
+ }
113
+ /**
114
+ * Unregister a tool
115
+ */
116
+ unregister(name) {
117
+ const deleted = this.tools.delete(name);
118
+ this.deferredTools.delete(name);
119
+ this.loadedTools.delete(name);
120
+ return deleted;
121
+ }
122
+ /**
123
+ * Get statistics about the registry
124
+ */
125
+ getStats() {
126
+ return {
127
+ total: this.tools.size,
128
+ loaded: this.loadedTools.size,
129
+ deferred: this.deferredTools.size
130
+ };
131
+ }
132
+ /**
133
+ * Create a tool search tool definition
134
+ * This is a meta-tool that allows LLMs to search for other tools
135
+ */
136
+ createToolSearchTool() {
137
+ return {
138
+ name: 'tool_search',
139
+ description: 'Search for available tools by name or description. Use this when you need to find tools for a specific task.',
140
+ inputSchema: {
141
+ type: 'object',
142
+ properties: {
143
+ query: {
144
+ type: 'string',
145
+ description: 'Search query describing the capability you need'
146
+ },
147
+ maxResults: {
148
+ type: 'number',
149
+ description: 'Maximum number of tools to return',
150
+ default: 5
151
+ }
152
+ },
153
+ required: ['query']
154
+ },
155
+ handler: async (input) => {
156
+ const results = await this.search(input.query, input.maxResults ?? 5, true);
157
+ return {
158
+ tools: results.map(tool => ({
159
+ name: tool.name,
160
+ description: tool.description
161
+ })),
162
+ count: results.length
163
+ };
164
+ }
165
+ };
166
+ }
167
+ }
168
+ exports.ToolRegistry = ToolRegistry;
169
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { ExecutionResult, ExecutorConfig, ToolDefinition, ToolCall } from '../types';
2
+ /**
3
+ * Base interface for code executors
4
+ */
5
+ export interface CodeExecutor {
6
+ /**
7
+ * Execute code with access to tools
8
+ * @param code Code to execute
9
+ * @param tools Available tools that can be called from code
10
+ * @param context Additional context/variables
11
+ */
12
+ execute(code: string, tools: ToolDefinition[], context?: Record<string, any>): Promise<ExecutionResult>;
13
+ }
14
+ /**
15
+ * Abstract base class for code executors
16
+ */
17
+ export declare abstract class BaseCodeExecutor implements CodeExecutor {
18
+ protected config: ExecutorConfig;
19
+ protected pendingToolCalls: ToolCall[];
20
+ constructor(config?: ExecutorConfig);
21
+ abstract execute(code: string, tools: ToolDefinition[], context?: Record<string, any>): Promise<ExecutionResult>;
22
+ /**
23
+ * Create a tool wrapper function that the executed code can call
24
+ */
25
+ protected createToolWrapper(tool: ToolDefinition): (...args: any[]) => Promise<any>;
26
+ /**
27
+ * Create the context object with tool functions
28
+ */
29
+ protected createExecutionContext(tools: ToolDefinition[], additionalContext?: Record<string, any>): Record<string, any>;
30
+ /**
31
+ * Wrap code with timeout
32
+ */
33
+ protected withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T>;
34
+ }
35
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/executor/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,8BAAsB,gBAAiB,YAAW,YAAY;IAC5D,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;IACjC,SAAS,CAAC,gBAAgB,EAAE,QAAQ,EAAE,CAAM;gBAEhC,MAAM,GAAE,cAAmB;IAQvC,QAAQ,CAAC,OAAO,CACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,OAAO,CAAC,eAAe,CAAC;IAE3B;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAqCnF;;OAEG;IACH,SAAS,CAAC,sBAAsB,CAC9B,KAAK,EAAE,cAAc,EAAE,EACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACtC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAqBtB;;OAEG;cACa,WAAW,CAAC,CAAC,EAC3B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,CAAC;CAQd"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseCodeExecutor = void 0;
4
+ /**
5
+ * Abstract base class for code executors
6
+ */
7
+ class BaseCodeExecutor {
8
+ constructor(config = {}) {
9
+ this.pendingToolCalls = [];
10
+ this.config = {
11
+ timeout: 30000, // 30 seconds default
12
+ memoryLimit: '256mb',
13
+ ...config
14
+ };
15
+ }
16
+ /**
17
+ * Create a tool wrapper function that the executed code can call
18
+ */
19
+ createToolWrapper(tool) {
20
+ return async (...args) => {
21
+ // Determine input based on schema
22
+ let input;
23
+ if (args.length === 1 && typeof args[0] === 'object') {
24
+ input = args[0];
25
+ }
26
+ else {
27
+ // If multiple args, create object from schema
28
+ // This is simplified - in reality would need to parse schema
29
+ input = args[0];
30
+ }
31
+ // Generate unique ID for this call
32
+ const callId = `call_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
33
+ // Record the tool call
34
+ this.pendingToolCalls.push({
35
+ id: callId,
36
+ name: tool.name,
37
+ input,
38
+ caller: {
39
+ type: 'code_execution',
40
+ toolId: 'code_exec'
41
+ }
42
+ });
43
+ // Execute the tool
44
+ try {
45
+ const result = await tool.handler(input);
46
+ return result;
47
+ }
48
+ catch (error) {
49
+ throw new Error(`Tool ${tool.name} failed: ${error}`);
50
+ }
51
+ };
52
+ }
53
+ /**
54
+ * Create the context object with tool functions
55
+ */
56
+ createExecutionContext(tools, additionalContext) {
57
+ const context = {
58
+ console: {
59
+ log: (...args) => {
60
+ // Capture console output
61
+ return args.join(' ');
62
+ }
63
+ },
64
+ ...additionalContext
65
+ };
66
+ // Add each tool as a callable function
67
+ tools.forEach(tool => {
68
+ if (tool.allowedCallers?.includes('code_execution')) {
69
+ context[tool.name] = this.createToolWrapper(tool);
70
+ }
71
+ });
72
+ return context;
73
+ }
74
+ /**
75
+ * Wrap code with timeout
76
+ */
77
+ async withTimeout(promise, timeoutMs) {
78
+ return Promise.race([
79
+ promise,
80
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Execution timeout')), timeoutMs))
81
+ ]);
82
+ }
83
+ }
84
+ exports.BaseCodeExecutor = BaseCodeExecutor;
85
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/executor/base.ts"],"names":[],"mappings":";;;AAmBA;;GAEG;AACH,MAAsB,gBAAgB;IAIpC,YAAY,SAAyB,EAAE;QAF7B,qBAAgB,GAAe,EAAE,CAAC;QAG1C,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO,EAAE,KAAK,EAAE,qBAAqB;YACrC,WAAW,EAAE,OAAO;YACpB,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAQD;;OAEG;IACO,iBAAiB,CAAC,IAAoB;QAC9C,OAAO,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;YAC9B,kCAAkC;YAClC,IAAI,KAAU,CAAC;YAEf,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACrD,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,8CAA8C;gBAC9C,6DAA6D;gBAC7D,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,mCAAmC;YACnC,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAE/E,uBAAuB;YACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACzB,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK;gBACL,MAAM,EAAE;oBACN,IAAI,EAAE,gBAAgB;oBACtB,MAAM,EAAE,WAAW;iBACpB;aACF,CAAC,CAAC;YAEH,mBAAmB;YACnB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACzC,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,YAAY,KAAK,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,sBAAsB,CAC9B,KAAuB,EACvB,iBAAuC;QAEvC,MAAM,OAAO,GAAwB;YACnC,OAAO,EAAE;gBACP,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;oBACtB,yBAAyB;oBACzB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;aACF;YACD,GAAG,iBAAiB;SACrB,CAAC;QAEF,uCAAuC;QACvC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,IAAI,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,WAAW,CACzB,OAAmB,EACnB,SAAiB;QAEjB,OAAO,OAAO,CAAC,IAAI,CAAC;YAClB,OAAO;YACP,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC3B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,CACpE;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAnGD,4CAmGC"}
@@ -0,0 +1,3 @@
1
+ export { CodeExecutor, BaseCodeExecutor } from './base';
2
+ export { VMExecutor, createDefaultExecutor } from './vm';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,MAAM,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDefaultExecutor = exports.VMExecutor = exports.BaseCodeExecutor = void 0;
4
+ var base_1 = require("./base");
5
+ Object.defineProperty(exports, "BaseCodeExecutor", { enumerable: true, get: function () { return base_1.BaseCodeExecutor; } });
6
+ var vm_1 = require("./vm");
7
+ Object.defineProperty(exports, "VMExecutor", { enumerable: true, get: function () { return vm_1.VMExecutor; } });
8
+ Object.defineProperty(exports, "createDefaultExecutor", { enumerable: true, get: function () { return vm_1.createDefaultExecutor; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":";;;AAAA,+BAAwD;AAAjC,wGAAA,gBAAgB,OAAA;AACvC,2BAAyD;AAAhD,gGAAA,UAAU,OAAA;AAAE,2GAAA,qBAAqB,OAAA"}
@@ -0,0 +1,18 @@
1
+ import { ExecutionResult, ExecutorConfig, ToolDefinition } from '../types';
2
+ import { BaseCodeExecutor } from './base';
3
+ /**
4
+ * VM-based code executor
5
+ *
6
+ * WARNING: This provides basic isolation but is NOT secure for untrusted code.
7
+ * For production use with untrusted code, use DockerExecutor or a cloud
8
+ * sandbox service like E2B.
9
+ */
10
+ export declare class VMExecutor extends BaseCodeExecutor {
11
+ constructor(config?: ExecutorConfig);
12
+ execute(code: string, tools: ToolDefinition[], context?: Record<string, any>): Promise<ExecutionResult>;
13
+ }
14
+ /**
15
+ * Create a default executor instance
16
+ */
17
+ export declare function createDefaultExecutor(config?: ExecutorConfig): VMExecutor;
18
+ //# sourceMappingURL=vm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vm.d.ts","sourceRoot":"","sources":["../../src/executor/vm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAG1C;;;;;;GAMG;AACH,qBAAa,UAAW,SAAQ,gBAAgB;gBAClC,MAAM,GAAE,cAAmB;IAIjC,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,OAAO,CAAC,eAAe,CAAC;CA2D5B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,UAAU,CAEzE"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.VMExecutor = void 0;
37
+ exports.createDefaultExecutor = createDefaultExecutor;
38
+ const base_1 = require("./base");
39
+ const vm = __importStar(require("vm"));
40
+ /**
41
+ * VM-based code executor
42
+ *
43
+ * WARNING: This provides basic isolation but is NOT secure for untrusted code.
44
+ * For production use with untrusted code, use DockerExecutor or a cloud
45
+ * sandbox service like E2B.
46
+ */
47
+ class VMExecutor extends base_1.BaseCodeExecutor {
48
+ constructor(config = {}) {
49
+ super(config);
50
+ }
51
+ async execute(code, tools, context) {
52
+ this.pendingToolCalls = [];
53
+ const capturedLogs = [];
54
+ let returnValue;
55
+ try {
56
+ // Create execution context with tools
57
+ const execContext = this.createExecutionContext(tools, context);
58
+ // Override console.log to capture output
59
+ execContext.console = {
60
+ log: (...args) => {
61
+ const message = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : String(arg)).join(' ');
62
+ capturedLogs.push(message);
63
+ }
64
+ };
65
+ // Wrap code in async function
66
+ const wrappedCode = `
67
+ (async () => {
68
+ ${code}
69
+ })()
70
+ `;
71
+ // Create VM context
72
+ const vmContext = vm.createContext(execContext);
73
+ // Execute with timeout
74
+ const script = new vm.Script(wrappedCode);
75
+ const result = await this.withTimeout(script.runInContext(vmContext, {
76
+ timeout: this.config.timeout
77
+ }), this.config.timeout);
78
+ returnValue = result;
79
+ return {
80
+ success: true,
81
+ stdout: capturedLogs.join('\n'),
82
+ returnValue,
83
+ toolCalls: this.pendingToolCalls
84
+ };
85
+ }
86
+ catch (error) {
87
+ return {
88
+ success: false,
89
+ stderr: error.message,
90
+ error: {
91
+ message: error.message,
92
+ stack: error.stack
93
+ },
94
+ toolCalls: this.pendingToolCalls
95
+ };
96
+ }
97
+ }
98
+ }
99
+ exports.VMExecutor = VMExecutor;
100
+ /**
101
+ * Create a default executor instance
102
+ */
103
+ function createDefaultExecutor(config) {
104
+ return new VMExecutor(config);
105
+ }
106
+ //# sourceMappingURL=vm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vm.js","sourceRoot":"","sources":["../../src/executor/vm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoFA,sDAEC;AArFD,iCAA0C;AAC1C,uCAAyB;AAEzB;;;;;;GAMG;AACH,MAAa,UAAW,SAAQ,uBAAgB;IAC9C,YAAY,SAAyB,EAAE;QACrC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,KAAuB,EACvB,OAA6B;QAE7B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,WAAgB,CAAC;QAErB,IAAI,CAAC;YACH,sCAAsC;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAEhE,yCAAyC;YACzC,WAAW,CAAC,OAAO,GAAG;gBACpB,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;oBACtB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAC7B,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAC5D,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACZ,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;aACF,CAAC;YAEF,8BAA8B;YAC9B,MAAM,WAAW,GAAG;;YAEd,IAAI;;OAET,CAAC;YAEF,oBAAoB;YACpB,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAEhD,uBAAuB;YACvB,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE;gBAC7B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;aAC7B,CAAC,EACF,IAAI,CAAC,MAAM,CAAC,OAAQ,CACrB,CAAC;YAEF,WAAW,GAAG,MAAM,CAAC;YAErB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC/B,WAAW;gBACX,SAAS,EAAE,IAAI,CAAC,gBAAgB;aACjC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,KAAK,CAAC,OAAO;gBACrB,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB;gBACD,SAAS,EAAE,IAAI,CAAC,gBAAgB;aACjC,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AApED,gCAoEC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,MAAuB;IAC3D,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { Client, ToolRegistry } from './core';
2
+ export type { ToolDefinition, ToolCall, ToolResult, Message, ChatRequest, ChatResponse, SearchConfig, ExecutorConfig, ProviderAdapter, ProviderCapabilities, ClientConfig } from './types';
3
+ export { OpenAIAdapter, VercelAIAdapter } from './adapters';
4
+ export { SearchStrategy, RegexSearchStrategy, BM25SearchStrategy } from './search';
5
+ export { CodeExecutor, VMExecutor, createDefaultExecutor } from './executor';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAG9C,YAAY,EACV,cAAc,EACd,QAAQ,EACR,UAAU,EACV,OAAO,EACP,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,YAAY,EACb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG5D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDefaultExecutor = exports.VMExecutor = exports.BM25SearchStrategy = exports.RegexSearchStrategy = exports.VercelAIAdapter = exports.OpenAIAdapter = exports.ToolRegistry = exports.Client = void 0;
4
+ // Core exports
5
+ var core_1 = require("./core");
6
+ Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return core_1.Client; } });
7
+ Object.defineProperty(exports, "ToolRegistry", { enumerable: true, get: function () { return core_1.ToolRegistry; } });
8
+ // Adapter exports
9
+ var adapters_1 = require("./adapters");
10
+ Object.defineProperty(exports, "OpenAIAdapter", { enumerable: true, get: function () { return adapters_1.OpenAIAdapter; } });
11
+ Object.defineProperty(exports, "VercelAIAdapter", { enumerable: true, get: function () { return adapters_1.VercelAIAdapter; } });
12
+ // Search exports
13
+ var search_1 = require("./search");
14
+ Object.defineProperty(exports, "RegexSearchStrategy", { enumerable: true, get: function () { return search_1.RegexSearchStrategy; } });
15
+ Object.defineProperty(exports, "BM25SearchStrategy", { enumerable: true, get: function () { return search_1.BM25SearchStrategy; } });
16
+ // Executor exports
17
+ var executor_1 = require("./executor");
18
+ Object.defineProperty(exports, "VMExecutor", { enumerable: true, get: function () { return executor_1.VMExecutor; } });
19
+ Object.defineProperty(exports, "createDefaultExecutor", { enumerable: true, get: function () { return executor_1.createDefaultExecutor; } });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,eAAe;AACf,+BAA8C;AAArC,8FAAA,MAAM,OAAA;AAAE,oGAAA,YAAY,OAAA;AAiB7B,kBAAkB;AAClB,uCAA4D;AAAnD,yGAAA,aAAa,OAAA;AAAE,2GAAA,eAAe,OAAA;AAEvC,iBAAiB;AACjB,mCAAmF;AAA1D,6GAAA,mBAAmB,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AAEhE,mBAAmB;AACnB,uCAA6E;AAAtD,sGAAA,UAAU,OAAA;AAAE,iHAAA,qBAAqB,OAAA"}
@@ -0,0 +1,32 @@
1
+ import { ToolDefinition } from '../types';
2
+ /**
3
+ * Base interface for tool search strategies
4
+ */
5
+ export interface SearchStrategy {
6
+ /**
7
+ * Search for tools matching the query
8
+ * @param query Search query
9
+ * @param tools Available tools to search
10
+ * @param maxResults Maximum number of results to return
11
+ * @returns Matching tools, sorted by relevance
12
+ */
13
+ search(query: string, tools: ToolDefinition[], maxResults?: number): Promise<ToolDefinition[]>;
14
+ }
15
+ /**
16
+ * Abstract base class for search strategies
17
+ */
18
+ export declare abstract class BaseSearchStrategy implements SearchStrategy {
19
+ protected maxResults: number;
20
+ protected threshold: number;
21
+ constructor(maxResults?: number, threshold?: number);
22
+ abstract search(query: string, tools: ToolDefinition[], maxResults?: number): Promise<ToolDefinition[]>;
23
+ /**
24
+ * Calculate relevance score for a tool
25
+ */
26
+ protected abstract scoreRelevance(query: string, tool: ToolDefinition): number;
27
+ /**
28
+ * Rank tools by relevance
29
+ */
30
+ protected rankTools(query: string, tools: ToolDefinition[], maxResults?: number): ToolDefinition[];
31
+ }
32
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/search/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,EAAE,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,8BAAsB,kBAAmB,YAAW,cAAc;IAChE,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEhB,UAAU,SAAK,EAAE,SAAS,SAAM;IAK5C,QAAQ,CAAC,MAAM,CACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,EAAE,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,EAAE,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM;IAE9E;;OAEG;IACH,SAAS,CAAC,SAAS,CACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,EAAE,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,EAAE;CAYpB"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseSearchStrategy = void 0;
4
+ /**
5
+ * Abstract base class for search strategies
6
+ */
7
+ class BaseSearchStrategy {
8
+ constructor(maxResults = 10, threshold = 0.0) {
9
+ this.maxResults = maxResults;
10
+ this.threshold = threshold;
11
+ }
12
+ /**
13
+ * Rank tools by relevance
14
+ */
15
+ rankTools(query, tools, maxResults) {
16
+ const scored = tools
17
+ .map(tool => ({
18
+ tool,
19
+ score: this.scoreRelevance(query, tool)
20
+ }))
21
+ .filter(({ score }) => score >= this.threshold)
22
+ .sort((a, b) => b.score - a.score);
23
+ const limit = maxResults ?? this.maxResults;
24
+ return scored.slice(0, limit).map(({ tool }) => tool);
25
+ }
26
+ }
27
+ exports.BaseSearchStrategy = BaseSearchStrategy;
28
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/search/base.ts"],"names":[],"mappings":";;;AAoBA;;GAEG;AACH,MAAsB,kBAAkB;IAItC,YAAY,UAAU,GAAG,EAAE,EAAE,SAAS,GAAG,GAAG;QAC1C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAaD;;OAEG;IACO,SAAS,CACjB,KAAa,EACb,KAAuB,EACvB,UAAmB;QAEnB,MAAM,MAAM,GAAG,KAAK;aACjB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACZ,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC;SACxC,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC;aAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAErC,MAAM,KAAK,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;CACF;AAvCD,gDAuCC"}
@@ -0,0 +1,16 @@
1
+ import { ToolDefinition } from '../types';
2
+ import { BaseSearchStrategy } from './base';
3
+ /**
4
+ * BM25-based search strategy
5
+ * Better relevance ranking, handles synonyms and term frequency
6
+ */
7
+ export declare class BM25SearchStrategy extends BaseSearchStrategy {
8
+ private tokenizer;
9
+ private tfidf;
10
+ private toolsIndex;
11
+ constructor(maxResults?: number, threshold?: number);
12
+ search(query: string, tools: ToolDefinition[], maxResults?: number): Promise<ToolDefinition[]>;
13
+ protected scoreRelevance(query: string, tool: ToolDefinition): number;
14
+ private buildIndex;
15
+ }
16
+ //# sourceMappingURL=bm25.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bm25.d.ts","sourceRoot":"","sources":["../../src/search/bm25.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAG5C;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,UAAU,CAA8B;gBAEpC,UAAU,SAAK,EAAE,SAAS,SAAM;IAOtC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,EAAE,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,EAAE,CAAC;IAsB5B,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM;IAMrE,OAAO,CAAC,UAAU;CAWnB"}