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.
- package/README.md +402 -0
- package/dist/adapters/index.d.ts +3 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +8 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/openai.d.ts +38 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +170 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/adapters/vercel-ai.d.ts +46 -0
- package/dist/adapters/vercel-ai.d.ts.map +1 -0
- package/dist/adapters/vercel-ai.js +228 -0
- package/dist/adapters/vercel-ai.js.map +1 -0
- package/dist/core/client.d.ts +36 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +188 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/registry.d.ts +64 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +169 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/executor/base.d.ts +35 -0
- package/dist/executor/base.d.ts.map +1 -0
- package/dist/executor/base.js +85 -0
- package/dist/executor/base.js.map +1 -0
- package/dist/executor/index.d.ts +3 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +9 -0
- package/dist/executor/index.js.map +1 -0
- package/dist/executor/vm.d.ts +18 -0
- package/dist/executor/vm.d.ts.map +1 -0
- package/dist/executor/vm.js +106 -0
- package/dist/executor/vm.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/search/base.d.ts +32 -0
- package/dist/search/base.d.ts.map +1 -0
- package/dist/search/base.js +28 -0
- package/dist/search/base.js.map +1 -0
- package/dist/search/bm25.d.ts +16 -0
- package/dist/search/bm25.d.ts.map +1 -0
- package/dist/search/bm25.js +84 -0
- package/dist/search/bm25.js.map +1 -0
- package/dist/search/index.d.ts +4 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +10 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/regex.d.ts +12 -0
- package/dist/search/regex.d.ts.map +1 -0
- package/dist/search/regex.js +57 -0
- package/dist/search/regex.js.map +1 -0
- package/dist/types/index.d.ts +186 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +52 -0
- package/plan.md +576 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/openai.ts +195 -0
- package/src/adapters/vercel-ai.ts +270 -0
- package/src/core/client.ts +232 -0
- package/src/core/index.ts +2 -0
- package/src/core/registry.ts +198 -0
- package/src/executor/base.ts +122 -0
- package/src/executor/index.ts +2 -0
- package/src/executor/vm.ts +87 -0
- package/src/index.ts +26 -0
- package/src/search/base.ts +63 -0
- package/src/search/bm25.ts +64 -0
- package/src/search/index.ts +3 -0
- package/src/search/regex.ts +66 -0
- package/src/types/index.ts +221 -0
- package/test-advanced.ts +212 -0
- 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 @@
|
|
|
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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|