cmdr-agent 2.5.4 → 3.0.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 +122 -205
- package/dist/bin/cmdr.js +64 -3
- package/dist/bin/cmdr.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/agents/executor.d.ts +1 -1
- package/dist/src/agents/executor.d.ts.map +1 -1
- package/dist/src/agents/executor.js +2 -2
- package/dist/src/agents/executor.js.map +1 -1
- package/dist/src/agents/subagent-tool.d.ts.map +1 -1
- package/dist/src/agents/subagent-tool.js +1 -1
- package/dist/src/agents/subagent-tool.js.map +1 -1
- package/dist/src/cli/args.d.ts +11 -2
- package/dist/src/cli/args.d.ts.map +1 -1
- package/dist/src/cli/args.js +49 -8
- package/dist/src/cli/args.js.map +1 -1
- package/dist/src/cli/buddy.d.ts +49 -0
- package/dist/src/cli/buddy.d.ts.map +1 -0
- package/dist/src/cli/buddy.js +187 -0
- package/dist/src/cli/buddy.js.map +1 -0
- package/dist/src/cli/commands.js +105 -11
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/daemon.d.ts +45 -0
- package/dist/src/cli/daemon.d.ts.map +1 -0
- package/dist/src/cli/daemon.js +157 -0
- package/dist/src/cli/daemon.js.map +1 -0
- package/dist/src/cli/ink/App.d.ts.map +1 -1
- package/dist/src/cli/ink/App.js +257 -1
- package/dist/src/cli/ink/App.js.map +1 -1
- package/dist/src/cli/repl.d.ts +5 -3
- package/dist/src/cli/repl.d.ts.map +1 -1
- package/dist/src/cli/repl.js +87 -26
- package/dist/src/cli/repl.js.map +1 -1
- package/dist/src/config/schema.d.ts +113 -12
- package/dist/src/config/schema.d.ts.map +1 -1
- package/dist/src/config/schema.js +26 -2
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/core/agent-runner.d.ts.map +1 -1
- package/dist/src/core/agent-runner.js +42 -3
- package/dist/src/core/agent-runner.js.map +1 -1
- package/dist/src/core/agent.d.ts +2 -0
- package/dist/src/core/agent.d.ts.map +1 -1
- package/dist/src/core/agent.js +13 -0
- package/dist/src/core/agent.js.map +1 -1
- package/dist/src/core/types.d.ts +16 -1
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/types.js +6 -0
- package/dist/src/core/types.js.map +1 -1
- package/dist/src/index.d.ts +13 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/llm/anthropic.d.ts.map +1 -1
- package/dist/src/llm/anthropic.js +11 -0
- package/dist/src/llm/anthropic.js.map +1 -1
- package/dist/src/llm/ollama.d.ts.map +1 -1
- package/dist/src/llm/ollama.js +8 -1
- package/dist/src/llm/ollama.js.map +1 -1
- package/dist/src/llm/openai.d.ts.map +1 -1
- package/dist/src/llm/openai.js +21 -6
- package/dist/src/llm/openai.js.map +1 -1
- package/dist/src/memory/index-manager.d.ts +65 -0
- package/dist/src/memory/index-manager.d.ts.map +1 -0
- package/dist/src/memory/index-manager.js +241 -0
- package/dist/src/memory/index-manager.js.map +1 -0
- package/dist/src/plugins/plugin-manager.d.ts +2 -1
- package/dist/src/plugins/plugin-manager.d.ts.map +1 -1
- package/dist/src/plugins/plugin-manager.js +13 -2
- package/dist/src/plugins/plugin-manager.js.map +1 -1
- package/dist/src/server/index.d.ts +20 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +281 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/session/branch-manager.d.ts +39 -0
- package/dist/src/session/branch-manager.d.ts.map +1 -0
- package/dist/src/session/branch-manager.js +142 -0
- package/dist/src/session/branch-manager.js.map +1 -0
- package/dist/src/session/checkpoint-manager.d.ts +28 -0
- package/dist/src/session/checkpoint-manager.d.ts.map +1 -0
- package/dist/src/session/checkpoint-manager.js +96 -0
- package/dist/src/session/checkpoint-manager.js.map +1 -0
- package/dist/src/tools/built-in/browser.d.ts +32 -0
- package/dist/src/tools/built-in/browser.d.ts.map +1 -0
- package/dist/src/tools/built-in/browser.js +168 -0
- package/dist/src/tools/built-in/browser.js.map +1 -0
- package/dist/src/tools/built-in/git-diff.d.ts +1 -0
- package/dist/src/tools/built-in/git-diff.d.ts.map +1 -1
- package/dist/src/tools/built-in/git-diff.js +7 -2
- package/dist/src/tools/built-in/git-diff.js.map +1 -1
- package/dist/src/tools/built-in/index.d.ts +7 -1
- package/dist/src/tools/built-in/index.d.ts.map +1 -1
- package/dist/src/tools/built-in/index.js +19 -1
- package/dist/src/tools/built-in/index.js.map +1 -1
- package/dist/src/tools/built-in/rag-search.d.ts +12 -0
- package/dist/src/tools/built-in/rag-search.d.ts.map +1 -0
- package/dist/src/tools/built-in/rag-search.js +37 -0
- package/dist/src/tools/built-in/rag-search.js.map +1 -0
- package/dist/src/tools/executor.d.ts.map +1 -1
- package/dist/src/tools/executor.js +55 -2
- package/dist/src/tools/executor.js.map +1 -1
- package/package.json +1 -1
|
@@ -25,7 +25,9 @@ import { enterPlanModeTool, exitPlanModeTool } from './plan-tools.js';
|
|
|
25
25
|
import { mcpListResourcesTool, mcpReadResourceTool } from './mcp-resource-tools.js';
|
|
26
26
|
import { graphImpactTool, graphQueryTool, graphReviewTool } from './graph-tools.js';
|
|
27
27
|
import { pdfReportTool } from './pdf-report.js';
|
|
28
|
-
|
|
28
|
+
import { ragSearchTool } from './rag-search.js';
|
|
29
|
+
import { BROWSER_TOOLS, isPlaywrightAvailable } from './browser.js';
|
|
30
|
+
export { bashTool, fileReadTool, fileWriteTool, fileEditTool, grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, gitWorktreeTool, lspDiagnosticsTool, notebookReadTool, notebookEditTool, notebookRunTool, thinkTool, webFetchTool, webSearchTool, askUserTool, memoryReadTool, memoryWriteTool, todoWriteTool, taskCreateTool, taskListTool, taskGetTool, taskStopTool, cronCreateTool, cronListTool, cronDeleteTool, enterPlanModeTool, exitPlanModeTool, mcpListResourcesTool, mcpReadResourceTool, graphImpactTool, graphQueryTool, graphReviewTool, pdfReportTool, ragSearchTool, };
|
|
29
31
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
32
|
export const BUILT_IN_TOOLS = [
|
|
31
33
|
bashTool, fileReadTool, fileWriteTool, fileEditTool,
|
|
@@ -40,6 +42,7 @@ export const BUILT_IN_TOOLS = [
|
|
|
40
42
|
mcpListResourcesTool, mcpReadResourceTool,
|
|
41
43
|
graphImpactTool, graphQueryTool, graphReviewTool,
|
|
42
44
|
pdfReportTool,
|
|
45
|
+
ragSearchTool,
|
|
43
46
|
];
|
|
44
47
|
export function registerBuiltInTools(registry) {
|
|
45
48
|
for (const tool of BUILT_IN_TOOLS) {
|
|
@@ -48,4 +51,19 @@ export function registerBuiltInTools(registry) {
|
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Register browser automation tools (requires --browser flag and playwright-core).
|
|
56
|
+
* Call this separately after registerBuiltInTools when browser mode is enabled.
|
|
57
|
+
*/
|
|
58
|
+
export async function registerBrowserTools(registry) {
|
|
59
|
+
const available = await isPlaywrightAvailable();
|
|
60
|
+
if (!available)
|
|
61
|
+
return false;
|
|
62
|
+
for (const tool of BROWSER_TOOLS) {
|
|
63
|
+
if (!registry.has(tool.name)) {
|
|
64
|
+
registry.register(tool);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
51
69
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/built-in/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/built-in/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* rag_search — semantic search over indexed project documents.
|
|
3
|
+
*
|
|
4
|
+
* Requires prior indexing via /index command.
|
|
5
|
+
*/
|
|
6
|
+
import { IndexManager } from '../../memory/index-manager.js';
|
|
7
|
+
export declare function setIndexManager(manager: IndexManager): void;
|
|
8
|
+
export declare const ragSearchTool: import("../registry.js").ToolDefinition<{
|
|
9
|
+
query: string;
|
|
10
|
+
topK?: number | undefined;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=rag-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rag-search.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/rag-search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAK5D,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAE3D;AAED,eAAO,MAAM,aAAa;;;EA2BxB,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* rag_search — semantic search over indexed project documents.
|
|
3
|
+
*
|
|
4
|
+
* Requires prior indexing via /index command.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { defineTool } from '../registry.js';
|
|
8
|
+
// Singleton IndexManager — set at startup by the REPL
|
|
9
|
+
let indexManager = null;
|
|
10
|
+
export function setIndexManager(manager) {
|
|
11
|
+
indexManager = manager;
|
|
12
|
+
}
|
|
13
|
+
export const ragSearchTool = defineTool({
|
|
14
|
+
name: 'rag_search',
|
|
15
|
+
description: 'Search indexed project documents using semantic similarity. Returns the most relevant code chunks for a given query. Use /index to build the index first.',
|
|
16
|
+
inputSchema: z.object({
|
|
17
|
+
query: z.string().describe('Natural language search query'),
|
|
18
|
+
topK: z.number().default(5).describe('Number of results to return (default: 5)'),
|
|
19
|
+
}),
|
|
20
|
+
execute: async (input) => {
|
|
21
|
+
if (!indexManager) {
|
|
22
|
+
return { data: 'Index not initialized. Use /index <path> to index files first.', isError: true };
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const results = await indexManager.search(input.query, input.topK);
|
|
26
|
+
if (results.length === 0) {
|
|
27
|
+
return { data: 'No results found. Make sure files are indexed with /index.' };
|
|
28
|
+
}
|
|
29
|
+
const output = results.map((r, i) => `[${i + 1}] ${r.file}:${r.startLine}-${r.endLine} (score: ${r.score.toFixed(3)})\n${r.text.slice(0, 500)}`).join('\n\n---\n\n');
|
|
30
|
+
return { data: output };
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
return { data: `Search failed: ${err instanceof Error ? err.message : String(err)}`, isError: true };
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=rag-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rag-search.js","sourceRoot":"","sources":["../../../../src/tools/built-in/rag-search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAG3C,sDAAsD;AACtD,IAAI,YAAY,GAAwB,IAAI,CAAA;AAE5C,MAAM,UAAU,eAAe,CAAC,OAAqB;IACnD,YAAY,GAAG,OAAO,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;IACtC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,2JAA2J;IACxK,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KACjF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,EAAE,IAAI,EAAE,gEAAgE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QAClG,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,IAAI,EAAE,4DAA4D,EAAE,CAAA;YAC/E,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC3G,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YAErB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QACtG,CAAC;IACH,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/tools/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/tools/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAIjD,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAuBD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;gBAEtC,QAAQ,EAAE,YAAY,EAAE,OAAO,GAAE,mBAAwB;IAK/D,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,UAAU,CAAC;IAuEhB,YAAY,CAChB,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAUnC,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,OAAO;CAKhB"}
|
|
@@ -8,6 +8,20 @@
|
|
|
8
8
|
* 4. Error isolation (tool failures don't crash the agent loop)
|
|
9
9
|
*/
|
|
10
10
|
import { validateToolInput } from '../llm/validation/tool-call-schema.js';
|
|
11
|
+
function isRecord(value) {
|
|
12
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
13
|
+
}
|
|
14
|
+
function getPluginHookRunner(context) {
|
|
15
|
+
const candidate = context.metadata?.pluginManager;
|
|
16
|
+
if (!candidate)
|
|
17
|
+
return undefined;
|
|
18
|
+
if (typeof candidate.runBeforeToolExec === 'function'
|
|
19
|
+
&& typeof candidate.runAfterToolExec === 'function'
|
|
20
|
+
&& typeof candidate.runOnError === 'function') {
|
|
21
|
+
return candidate;
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
11
25
|
export class ToolExecutor {
|
|
12
26
|
registry;
|
|
13
27
|
active = 0;
|
|
@@ -18,6 +32,7 @@ export class ToolExecutor {
|
|
|
18
32
|
this.maxConcurrency = options.maxConcurrency ?? 4;
|
|
19
33
|
}
|
|
20
34
|
async execute(name, input, context) {
|
|
35
|
+
const pluginHooks = getPluginHookRunner(context);
|
|
21
36
|
const tool = this.registry.get(name);
|
|
22
37
|
if (!tool) {
|
|
23
38
|
const availableTools = this.registry.list().map(t => t.name).join(', ');
|
|
@@ -26,15 +41,50 @@ export class ToolExecutor {
|
|
|
26
41
|
isError: true,
|
|
27
42
|
};
|
|
28
43
|
}
|
|
44
|
+
let effectiveInput = input;
|
|
45
|
+
if (pluginHooks) {
|
|
46
|
+
try {
|
|
47
|
+
const modified = await pluginHooks.runBeforeToolExec(name, input);
|
|
48
|
+
if (!isRecord(modified)) {
|
|
49
|
+
return {
|
|
50
|
+
data: `Plugin beforeToolExec hook for "${name}" must return an object input payload.`,
|
|
51
|
+
isError: true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
effectiveInput = modified;
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
58
|
+
await pluginHooks.runOnError(error);
|
|
59
|
+
return {
|
|
60
|
+
data: `Plugin beforeToolExec hook failed for "${name}": ${error.message}`,
|
|
61
|
+
isError: true,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
29
65
|
// Validate input through Zod schema with corrective error messages
|
|
30
|
-
const validation = validateToolInput(name,
|
|
66
|
+
const validation = validateToolInput(name, effectiveInput, tool.inputSchema);
|
|
31
67
|
if (!validation.ok) {
|
|
32
68
|
return { data: validation.message, isError: true };
|
|
33
69
|
}
|
|
34
70
|
try {
|
|
35
71
|
await this.acquire();
|
|
36
72
|
try {
|
|
37
|
-
|
|
73
|
+
let result = await tool.execute(validation.parsed, context);
|
|
74
|
+
if (pluginHooks) {
|
|
75
|
+
try {
|
|
76
|
+
result = await pluginHooks.runAfterToolExec(name, result);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
80
|
+
await pluginHooks.runOnError(error);
|
|
81
|
+
return {
|
|
82
|
+
data: `Plugin afterToolExec hook failed for "${name}": ${error.message}`,
|
|
83
|
+
isError: true,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
38
88
|
}
|
|
39
89
|
finally {
|
|
40
90
|
this.release();
|
|
@@ -42,6 +92,9 @@ export class ToolExecutor {
|
|
|
42
92
|
}
|
|
43
93
|
catch (err) {
|
|
44
94
|
const message = err instanceof Error ? err.message : String(err);
|
|
95
|
+
if (pluginHooks) {
|
|
96
|
+
await pluginHooks.runOnError(err instanceof Error ? err : new Error(String(err)));
|
|
97
|
+
}
|
|
45
98
|
return { data: `Tool "${name}" execution error: ${message}`, isError: true };
|
|
46
99
|
}
|
|
47
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/tools/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/tools/executor.ts"],"names":[],"mappings":"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"}
|