@burtson-labs/agent-core 1.6.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +88 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/activation.d.ts +60 -0
- package/dist/mcp/activation.d.ts.map +1 -0
- package/dist/mcp/activation.js +139 -0
- package/dist/mcp/activation.js.map +1 -0
- package/dist/mcp/clientPool.d.ts +202 -0
- package/dist/mcp/clientPool.d.ts.map +1 -0
- package/dist/mcp/clientPool.js +469 -0
- package/dist/mcp/clientPool.js.map +1 -0
- package/dist/mcp/index.d.ts +18 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +28 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +43 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +130 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/toolAdapter.d.ts +57 -0
- package/dist/mcp/toolAdapter.d.ts.map +1 -0
- package/dist/mcp/toolAdapter.js +223 -0
- package/dist/mcp/toolAdapter.js.map +1 -0
- package/dist/mcp/types.d.ts +122 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +15 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/providers/deterministic-provider.d.ts +21 -0
- package/dist/providers/deterministic-provider.d.ts.map +1 -0
- package/dist/providers/deterministic-provider.js +80 -0
- package/dist/providers/deterministic-provider.js.map +1 -0
- package/dist/providers/provider-client.d.ts +12 -0
- package/dist/providers/provider-client.d.ts.map +1 -0
- package/dist/providers/provider-client.js +11 -0
- package/dist/providers/provider-client.js.map +1 -0
- package/dist/runtime/AgentRuntime.d.ts +67 -0
- package/dist/runtime/AgentRuntime.d.ts.map +1 -0
- package/dist/runtime/AgentRuntime.js +382 -0
- package/dist/runtime/AgentRuntime.js.map +1 -0
- package/dist/security/secretPatterns.d.ts +76 -0
- package/dist/security/secretPatterns.d.ts.map +1 -0
- package/dist/security/secretPatterns.js +290 -0
- package/dist/security/secretPatterns.js.map +1 -0
- package/dist/tools/ask-user-tool.d.ts +19 -0
- package/dist/tools/ask-user-tool.d.ts.map +1 -0
- package/dist/tools/ask-user-tool.js +148 -0
- package/dist/tools/ask-user-tool.js.map +1 -0
- package/dist/tools/compactMessages.d.ts +52 -0
- package/dist/tools/compactMessages.d.ts.map +1 -0
- package/dist/tools/compactMessages.js +158 -0
- package/dist/tools/compactMessages.js.map +1 -0
- package/dist/tools/core-tools.d.ts +29 -0
- package/dist/tools/core-tools.d.ts.map +1 -0
- package/dist/tools/core-tools.js +2214 -0
- package/dist/tools/core-tools.js.map +1 -0
- package/dist/tools/git-tools.d.ts +32 -0
- package/dist/tools/git-tools.d.ts.map +1 -0
- package/dist/tools/git-tools.js +330 -0
- package/dist/tools/git-tools.js.map +1 -0
- package/dist/tools/index.d.ts +15 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +31 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/language-adapters.d.ts +48 -0
- package/dist/tools/language-adapters.d.ts.map +1 -0
- package/dist/tools/language-adapters.js +299 -0
- package/dist/tools/language-adapters.js.map +1 -0
- package/dist/tools/loop/compactionTrigger.d.ts +47 -0
- package/dist/tools/loop/compactionTrigger.d.ts.map +1 -0
- package/dist/tools/loop/compactionTrigger.js +32 -0
- package/dist/tools/loop/compactionTrigger.js.map +1 -0
- package/dist/tools/loop/finalAnswerNudges.d.ts +68 -0
- package/dist/tools/loop/finalAnswerNudges.d.ts.map +1 -0
- package/dist/tools/loop/finalAnswerNudges.js +87 -0
- package/dist/tools/loop/finalAnswerNudges.js.map +1 -0
- package/dist/tools/loop/goalAnchor.d.ts +72 -0
- package/dist/tools/loop/goalAnchor.d.ts.map +1 -0
- package/dist/tools/loop/goalAnchor.js +76 -0
- package/dist/tools/loop/goalAnchor.js.map +1 -0
- package/dist/tools/loop/llmStream.d.ts +70 -0
- package/dist/tools/loop/llmStream.d.ts.map +1 -0
- package/dist/tools/loop/llmStream.js +181 -0
- package/dist/tools/loop/llmStream.js.map +1 -0
- package/dist/tools/loop/parallelExecute.d.ts +57 -0
- package/dist/tools/loop/parallelExecute.d.ts.map +1 -0
- package/dist/tools/loop/parallelExecute.js +54 -0
- package/dist/tools/loop/parallelExecute.js.map +1 -0
- package/dist/tools/loop/singleToolExecute.d.ts +71 -0
- package/dist/tools/loop/singleToolExecute.d.ts.map +1 -0
- package/dist/tools/loop/singleToolExecute.js +139 -0
- package/dist/tools/loop/singleToolExecute.js.map +1 -0
- package/dist/tools/loop/toolCallNormalize.d.ts +57 -0
- package/dist/tools/loop/toolCallNormalize.d.ts.map +1 -0
- package/dist/tools/loop/toolCallNormalize.js +99 -0
- package/dist/tools/loop/toolCallNormalize.js.map +1 -0
- package/dist/tools/loop/turnSetup.d.ts +43 -0
- package/dist/tools/loop/turnSetup.d.ts.map +1 -0
- package/dist/tools/loop/turnSetup.js +48 -0
- package/dist/tools/loop/turnSetup.js.map +1 -0
- package/dist/tools/ocr.d.ts +52 -0
- package/dist/tools/ocr.d.ts.map +1 -0
- package/dist/tools/ocr.js +238 -0
- package/dist/tools/ocr.js.map +1 -0
- package/dist/tools/post-edit-checks.d.ts +46 -0
- package/dist/tools/post-edit-checks.d.ts.map +1 -0
- package/dist/tools/post-edit-checks.js +236 -0
- package/dist/tools/post-edit-checks.js.map +1 -0
- package/dist/tools/skill-loader.d.ts +94 -0
- package/dist/tools/skill-loader.d.ts.map +1 -0
- package/dist/tools/skill-loader.js +422 -0
- package/dist/tools/skill-loader.js.map +1 -0
- package/dist/tools/skill-registry.d.ts +44 -0
- package/dist/tools/skill-registry.d.ts.map +1 -0
- package/dist/tools/skill-registry.js +118 -0
- package/dist/tools/skill-registry.js.map +1 -0
- package/dist/tools/skill-types.d.ts +38 -0
- package/dist/tools/skill-types.d.ts.map +1 -0
- package/dist/tools/skill-types.js +10 -0
- package/dist/tools/skill-types.js.map +1 -0
- package/dist/tools/skills/code-review-skill.d.ts +9 -0
- package/dist/tools/skills/code-review-skill.d.ts.map +1 -0
- package/dist/tools/skills/code-review-skill.js +66 -0
- package/dist/tools/skills/code-review-skill.js.map +1 -0
- package/dist/tools/skills/core-skill.d.ts +13 -0
- package/dist/tools/skills/core-skill.d.ts.map +1 -0
- package/dist/tools/skills/core-skill.js +23 -0
- package/dist/tools/skills/core-skill.js.map +1 -0
- package/dist/tools/skills/git-skill.d.ts +10 -0
- package/dist/tools/skills/git-skill.d.ts.map +1 -0
- package/dist/tools/skills/git-skill.js +30 -0
- package/dist/tools/skills/git-skill.js.map +1 -0
- package/dist/tools/skills/index.d.ts +17 -0
- package/dist/tools/skills/index.d.ts.map +1 -0
- package/dist/tools/skills/index.js +49 -0
- package/dist/tools/skills/index.js.map +1 -0
- package/dist/tools/skills/interaction-skill.d.ts +14 -0
- package/dist/tools/skills/interaction-skill.d.ts.map +1 -0
- package/dist/tools/skills/interaction-skill.js +24 -0
- package/dist/tools/skills/interaction-skill.js.map +1 -0
- package/dist/tools/skills/mail-search-skill.d.ts +25 -0
- package/dist/tools/skills/mail-search-skill.d.ts.map +1 -0
- package/dist/tools/skills/mail-search-skill.js +343 -0
- package/dist/tools/skills/mail-search-skill.js.map +1 -0
- package/dist/tools/skills/plan-skill.d.ts +10 -0
- package/dist/tools/skills/plan-skill.d.ts.map +1 -0
- package/dist/tools/skills/plan-skill.js +126 -0
- package/dist/tools/skills/plan-skill.js.map +1 -0
- package/dist/tools/skills/semantic-search-skill.d.ts +22 -0
- package/dist/tools/skills/semantic-search-skill.d.ts.map +1 -0
- package/dist/tools/skills/semantic-search-skill.js +244 -0
- package/dist/tools/skills/semantic-search-skill.js.map +1 -0
- package/dist/tools/skills/test-gen-skill.d.ts +9 -0
- package/dist/tools/skills/test-gen-skill.d.ts.map +1 -0
- package/dist/tools/skills/test-gen-skill.js +123 -0
- package/dist/tools/skills/test-gen-skill.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +60 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +200 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/tool-types.d.ts +281 -0
- package/dist/tools/tool-types.d.ts.map +1 -0
- package/dist/tools/tool-types.js +10 -0
- package/dist/tools/tool-types.js.map +1 -0
- package/dist/tools/tool-use-loop.d.ts +231 -0
- package/dist/tools/tool-use-loop.d.ts.map +1 -0
- package/dist/tools/tool-use-loop.js +2057 -0
- package/dist/tools/tool-use-loop.js.map +1 -0
- package/dist/tools/tool-use-parser.d.ts +78 -0
- package/dist/tools/tool-use-parser.d.ts.map +1 -0
- package/dist/tools/tool-use-parser.js +427 -0
- package/dist/tools/tool-use-parser.js.map +1 -0
- package/dist/tools/toolAvailabilityDetector.d.ts +48 -0
- package/dist/tools/toolAvailabilityDetector.d.ts.map +1 -0
- package/dist/tools/toolAvailabilityDetector.js +156 -0
- package/dist/tools/toolAvailabilityDetector.js.map +1 -0
- package/dist/tools/unified-patch.d.ts +87 -0
- package/dist/tools/unified-patch.d.ts.map +1 -0
- package/dist/tools/unified-patch.js +217 -0
- package/dist/tools/unified-patch.js.map +1 -0
- package/dist/types/agent.d.ts +69 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +54 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/tasks.d.ts +22 -0
- package/dist/types/tasks.d.ts.map +1 -0
- package/dist/types/tasks.js +3 -0
- package/dist/types/tasks.js.map +1 -0
- package/dist/utils/event-emitter.d.ts +13 -0
- package/dist/utils/event-emitter.d.ts.map +1 -0
- package/dist/utils/event-emitter.js +54 -0
- package/dist/utils/event-emitter.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientPool.js","sourceRoot":"","sources":["../../src/mcp/clientPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP — Model Context Protocol — entry point.
|
|
3
|
+
*
|
|
4
|
+
* Bandit speaks MCP as a CLIENT. See docs/integration-playlist/mcp-roadmap.md
|
|
5
|
+
* for the phased plan. Phase 1 (this module) lays the groundwork:
|
|
6
|
+
* spawn child-process MCP servers via stdio, enumerate their tools,
|
|
7
|
+
* register them in Bandit's existing ToolRegistry with `<server>.<tool>`
|
|
8
|
+
* names. Phase 2 layers on the user-visible config + UX.
|
|
9
|
+
*
|
|
10
|
+
* Off by default — a host that never registers any servers in the
|
|
11
|
+
* pool gets zero behavior change. No backward-compat risk.
|
|
12
|
+
*/
|
|
13
|
+
export { McpClientPool, fingerprintServerConfig, type McpClientPoolOptions, type McpTrustGate, type McpToolsDiscoveredCallback, type RemoteToolDef as McpRemoteToolDef } from './clientPool';
|
|
14
|
+
export { mcpToolToAgentTool, getAllMcpAgentTools } from './toolAdapter';
|
|
15
|
+
export { serveBanditMcp } from './server';
|
|
16
|
+
export { shouldActivateServer, effectiveTriggers, inferProviderHint } from './activation';
|
|
17
|
+
export type { McpServerConfig, McpServersFile, McpServerStatus, McpServerSnapshot } from './types';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,IAAI,gBAAgB,EACvC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,iBAAiB,EAClB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCP — Model Context Protocol — entry point.
|
|
4
|
+
*
|
|
5
|
+
* Bandit speaks MCP as a CLIENT. See docs/integration-playlist/mcp-roadmap.md
|
|
6
|
+
* for the phased plan. Phase 1 (this module) lays the groundwork:
|
|
7
|
+
* spawn child-process MCP servers via stdio, enumerate their tools,
|
|
8
|
+
* register them in Bandit's existing ToolRegistry with `<server>.<tool>`
|
|
9
|
+
* names. Phase 2 layers on the user-visible config + UX.
|
|
10
|
+
*
|
|
11
|
+
* Off by default — a host that never registers any servers in the
|
|
12
|
+
* pool gets zero behavior change. No backward-compat risk.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.inferProviderHint = exports.effectiveTriggers = exports.shouldActivateServer = exports.serveBanditMcp = exports.getAllMcpAgentTools = exports.mcpToolToAgentTool = exports.fingerprintServerConfig = exports.McpClientPool = void 0;
|
|
16
|
+
var clientPool_1 = require("./clientPool");
|
|
17
|
+
Object.defineProperty(exports, "McpClientPool", { enumerable: true, get: function () { return clientPool_1.McpClientPool; } });
|
|
18
|
+
Object.defineProperty(exports, "fingerprintServerConfig", { enumerable: true, get: function () { return clientPool_1.fingerprintServerConfig; } });
|
|
19
|
+
var toolAdapter_1 = require("./toolAdapter");
|
|
20
|
+
Object.defineProperty(exports, "mcpToolToAgentTool", { enumerable: true, get: function () { return toolAdapter_1.mcpToolToAgentTool; } });
|
|
21
|
+
Object.defineProperty(exports, "getAllMcpAgentTools", { enumerable: true, get: function () { return toolAdapter_1.getAllMcpAgentTools; } });
|
|
22
|
+
var server_1 = require("./server");
|
|
23
|
+
Object.defineProperty(exports, "serveBanditMcp", { enumerable: true, get: function () { return server_1.serveBanditMcp; } });
|
|
24
|
+
var activation_1 = require("./activation");
|
|
25
|
+
Object.defineProperty(exports, "shouldActivateServer", { enumerable: true, get: function () { return activation_1.shouldActivateServer; } });
|
|
26
|
+
Object.defineProperty(exports, "effectiveTriggers", { enumerable: true, get: function () { return activation_1.effectiveTriggers; } });
|
|
27
|
+
Object.defineProperty(exports, "inferProviderHint", { enumerable: true, get: function () { return activation_1.inferProviderHint; } });
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,2CAOsB;AANpB,2GAAA,aAAa,OAAA;AACb,qHAAA,uBAAuB,OAAA;AAMzB,6CAAwE;AAA/D,iHAAA,kBAAkB,OAAA;AAAE,kHAAA,mBAAmB,OAAA;AAChD,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,2CAIsB;AAHpB,kHAAA,oBAAoB,OAAA;AACpB,+GAAA,iBAAiB,OAAA;AACjB,+GAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bandit-as-MCP-server. Exposes Bandit's native tool surface
|
|
3
|
+
* (read_file, write_file, apply_edit, replace_range, list_files, ls, search_code,
|
|
4
|
+
* find_directory, run_command, etc.) over MCP stdio so other clients
|
|
5
|
+
* — Claude Desktop, Cursor, Cline, Continue, any MCP-speaking host —
|
|
6
|
+
* can drive Bandit the same way Bandit drives external servers.
|
|
7
|
+
*
|
|
8
|
+
* Mirror of the client code path: SDK is required lazily so a missing
|
|
9
|
+
* dep can never crash module load (matters because this module ships
|
|
10
|
+
* inside the same agent-core dist that the IDE extension imports
|
|
11
|
+
* eagerly). Failures during tool calls return a structured error
|
|
12
|
+
* result with isError: true rather than throwing.
|
|
13
|
+
*/
|
|
14
|
+
import type { AgentTool, ToolExecutionContext } from '../tools/tool-types';
|
|
15
|
+
interface ServeOptions {
|
|
16
|
+
/** Tools to expose. Hosts pass a ToolRegistry's contents — usually
|
|
17
|
+
* the core skill's tools plus run_command. read-only mode skips
|
|
18
|
+
* write_file / apply_edit / replace_range / run_command. */
|
|
19
|
+
tools: AgentTool[];
|
|
20
|
+
/** ToolExecutionContext for tool invocations. The host owns this
|
|
21
|
+
* so it can wire up filesystem access, language adapters, etc.,
|
|
22
|
+
* exactly the way Bandit's own loop wires them. */
|
|
23
|
+
toolCtx: ToolExecutionContext;
|
|
24
|
+
/** Server name advertised in the MCP handshake. Defaults to
|
|
25
|
+
* "bandit". MCP clients show this in their UI. */
|
|
26
|
+
name?: string;
|
|
27
|
+
/** Server version advertised in the handshake. Defaults to the
|
|
28
|
+
* agent-core package version. */
|
|
29
|
+
version?: string;
|
|
30
|
+
/** Optional logger. Defaults to console.error. Stdout is reserved
|
|
31
|
+
* for the JSON-RPC stream — never log there. */
|
|
32
|
+
log?: (line: string) => void;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Spin up an MCP server that exposes Bandit's native tools over
|
|
36
|
+
* stdio. Returns a promise that resolves when the transport closes
|
|
37
|
+
* (typically when the parent client disconnects). The caller
|
|
38
|
+
* controls the process lifetime — typical usage is a CLI subcommand
|
|
39
|
+
* that just awaits this promise then exits.
|
|
40
|
+
*/
|
|
41
|
+
export declare function serveBanditMcp(options: ServeOptions): Promise<void>;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,UAAU,YAAY;IACpB;;iEAE6D;IAC7D,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB;;wDAEoD;IACpD,OAAO,EAAE,oBAAoB,CAAC;IAC9B;uDACmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;sCACkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;qDACiD;IACjD,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AA2CD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEzE"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Bandit-as-MCP-server. Exposes Bandit's native tool surface
|
|
4
|
+
* (read_file, write_file, apply_edit, replace_range, list_files, ls, search_code,
|
|
5
|
+
* find_directory, run_command, etc.) over MCP stdio so other clients
|
|
6
|
+
* — Claude Desktop, Cursor, Cline, Continue, any MCP-speaking host —
|
|
7
|
+
* can drive Bandit the same way Bandit drives external servers.
|
|
8
|
+
*
|
|
9
|
+
* Mirror of the client code path: SDK is required lazily so a missing
|
|
10
|
+
* dep can never crash module load (matters because this module ships
|
|
11
|
+
* inside the same agent-core dist that the IDE extension imports
|
|
12
|
+
* eagerly). Failures during tool calls return a structured error
|
|
13
|
+
* result with isError: true rather than throwing.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.serveBanditMcp = serveBanditMcp;
|
|
17
|
+
/**
|
|
18
|
+
* Convert a Bandit AgentTool's flat parameter list into MCP's
|
|
19
|
+
* JSON-Schema input shape. Best-effort — every parameter is typed as
|
|
20
|
+
* `string` since AgentTool doesn't carry richer type info, with the
|
|
21
|
+
* description preserved verbatim. MCP clients that strict-validate
|
|
22
|
+
* input still get a clean schema; clients that don't validate just
|
|
23
|
+
* see a documented set of fields.
|
|
24
|
+
*/
|
|
25
|
+
function toolInputSchema(tool) {
|
|
26
|
+
const properties = {};
|
|
27
|
+
const required = [];
|
|
28
|
+
for (const p of tool.parameters) {
|
|
29
|
+
properties[p.name] = { type: 'string', description: p.description };
|
|
30
|
+
if (p.required)
|
|
31
|
+
required.push(p.name);
|
|
32
|
+
}
|
|
33
|
+
return { type: 'object', properties, required };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Coerce the MCP arguments object into the flat Record<string,string>
|
|
37
|
+
* shape Bandit's AgentTool.execute expects. Non-string values get
|
|
38
|
+
* JSON.stringify'd back to text so an MCP client passing a number /
|
|
39
|
+
* boolean / nested object still reaches our tool with a usable
|
|
40
|
+
* representation — matches the equivalent coercion done client-side
|
|
41
|
+
* in toolAdapter.ts when going the other direction.
|
|
42
|
+
*/
|
|
43
|
+
function coerceArgs(raw) {
|
|
44
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
45
|
+
return {};
|
|
46
|
+
const out = {};
|
|
47
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
48
|
+
if (typeof v === 'string')
|
|
49
|
+
out[k] = v;
|
|
50
|
+
else if (v === null || v === undefined)
|
|
51
|
+
continue;
|
|
52
|
+
else
|
|
53
|
+
out[k] = JSON.stringify(v);
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Spin up an MCP server that exposes Bandit's native tools over
|
|
59
|
+
* stdio. Returns a promise that resolves when the transport closes
|
|
60
|
+
* (typically when the parent client disconnects). The caller
|
|
61
|
+
* controls the process lifetime — typical usage is a CLI subcommand
|
|
62
|
+
* that just awaits this promise then exits.
|
|
63
|
+
*/
|
|
64
|
+
async function serveBanditMcp(options) {
|
|
65
|
+
// SDK loaded lazily — same pattern as clientPool.ts. A dep
|
|
66
|
+
// resolution failure inside the SDK never trips at module load,
|
|
67
|
+
// only when an actual host tries to start the server. Means
|
|
68
|
+
// `import { serveBanditMcp }` is safe in code paths that may or
|
|
69
|
+
// may not actually run the server.
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
71
|
+
const serverMod = require('@modelcontextprotocol/sdk/server/index.js');
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
73
|
+
const stdioMod = require('@modelcontextprotocol/sdk/server/stdio.js');
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
75
|
+
const typesMod = require('@modelcontextprotocol/sdk/types.js');
|
|
76
|
+
const { Server } = serverMod;
|
|
77
|
+
const { StdioServerTransport } = stdioMod;
|
|
78
|
+
const { ListToolsRequestSchema, CallToolRequestSchema } = typesMod;
|
|
79
|
+
const log = options.log ?? ((line) => process.stderr.write(line + '\n'));
|
|
80
|
+
const tools = options.tools;
|
|
81
|
+
const toolByName = new Map();
|
|
82
|
+
for (const t of tools)
|
|
83
|
+
toolByName.set(t.name, t);
|
|
84
|
+
const server = new Server({ name: options.name ?? 'bandit', version: options.version ?? '1.0.0' }, { capabilities: { tools: {} } });
|
|
85
|
+
// tools/list — return every registered tool's metadata.
|
|
86
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
87
|
+
tools: tools.map((t) => ({
|
|
88
|
+
name: t.name,
|
|
89
|
+
description: t.description,
|
|
90
|
+
inputSchema: toolInputSchema(t)
|
|
91
|
+
}))
|
|
92
|
+
}));
|
|
93
|
+
// tools/call — dispatch into the AgentTool's execute. Errors
|
|
94
|
+
// surface as MCP isError results rather than thrown exceptions so
|
|
95
|
+
// the calling client gets a clean, parseable response.
|
|
96
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
97
|
+
const tool = toolByName.get(request.params.name);
|
|
98
|
+
if (!tool) {
|
|
99
|
+
return {
|
|
100
|
+
isError: true,
|
|
101
|
+
content: [{ type: 'text', text: `Unknown tool: ${request.params.name}` }]
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const args = coerceArgs(request.params.arguments);
|
|
106
|
+
const result = await tool.execute(args, options.toolCtx);
|
|
107
|
+
return {
|
|
108
|
+
isError: !!result.isError,
|
|
109
|
+
content: [{ type: 'text', text: result.output }]
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
114
|
+
log(`tool call ${request.params.name} threw: ${msg}`);
|
|
115
|
+
return {
|
|
116
|
+
isError: true,
|
|
117
|
+
content: [{ type: 'text', text: `Tool error: ${msg}` }]
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
log(`bandit MCP server: ready on stdio with ${tools.length} tool${tools.length === 1 ? '' : 's'}`);
|
|
122
|
+
const transport = new StdioServerTransport();
|
|
123
|
+
await server.connect(transport);
|
|
124
|
+
// server.connect returns once the transport is wired but stays
|
|
125
|
+
// alive on stdio reads. Hook close so the host's await resolves.
|
|
126
|
+
await new Promise((resolve) => {
|
|
127
|
+
transport.onclose = () => resolve();
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapt MCP tool definitions to Bandit's AgentTool interface so the
|
|
3
|
+
* existing tool-use loop can call them with no special-casing.
|
|
4
|
+
*
|
|
5
|
+
* server "slack" exposes tool "post_message" → AgentTool named
|
|
6
|
+
* "slack.post_message" registered alongside read_file / apply_edit /
|
|
7
|
+
* etc. The model invokes it via the same <tool_call>{...}</tool_call>
|
|
8
|
+
* envelope it uses for native tools.
|
|
9
|
+
*
|
|
10
|
+
* Namespacing is non-negotiable: collisions with native tool names
|
|
11
|
+
* (read_file, write_file, etc) would silently shadow Bandit's own
|
|
12
|
+
* implementations. Always `<server>.<tool>`.
|
|
13
|
+
*/
|
|
14
|
+
import type { AgentTool } from '../tools/tool-types';
|
|
15
|
+
import type { McpClientPool } from './clientPool';
|
|
16
|
+
interface JsonSchemaNode {
|
|
17
|
+
type?: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
properties?: Record<string, JsonSchemaNode>;
|
|
20
|
+
required?: string[];
|
|
21
|
+
items?: JsonSchemaNode;
|
|
22
|
+
enum?: Array<string | number | boolean>;
|
|
23
|
+
}
|
|
24
|
+
interface RemoteToolDef {
|
|
25
|
+
name: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
inputSchema?: JsonSchemaNode;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Build an AgentTool that proxies through the pool to the named
|
|
31
|
+
* server's named tool. Parameter list is derived from the MCP tool's
|
|
32
|
+
* input schema; description is preserved verbatim with a small
|
|
33
|
+
* "(via MCP server <name>)" suffix so the user reading their session
|
|
34
|
+
* log can tell which server's tools the agent reached for.
|
|
35
|
+
*/
|
|
36
|
+
export declare function mcpToolToAgentTool(serverName: string, remote: RemoteToolDef, pool: McpClientPool): AgentTool;
|
|
37
|
+
/**
|
|
38
|
+
* Convenience: enumerate every connected server's tools and return
|
|
39
|
+
* AgentTool wrappers ready to register with the existing
|
|
40
|
+
* ToolRegistry. Call from the host (extension or CLI) after the user's
|
|
41
|
+
* mcp-servers.json has been loaded into the pool.
|
|
42
|
+
*
|
|
43
|
+
* The optional `prompt` argument enables activation filtering: when
|
|
44
|
+
* provided, servers configured with `activation: "on-mention"` are
|
|
45
|
+
* only included if their trigger keywords match the prompt. Servers
|
|
46
|
+
* with `activation: "always"` (the default) always contribute their
|
|
47
|
+
* tools regardless of prompt. Pass `undefined` (or omit) to register
|
|
48
|
+
* every server's tools — the -and-earlier behavior.
|
|
49
|
+
*
|
|
50
|
+
* Each server's discoverTools() will lazily spawn the process — so
|
|
51
|
+
* the first call per server after session start does pay the spawn
|
|
52
|
+
* cost. With on-mention activation, that cost only fires for prompts
|
|
53
|
+
* that actually trigger the server.
|
|
54
|
+
*/
|
|
55
|
+
export declare function getAllMcpAgentTools(pool: McpClientPool, prompt?: string): Promise<AgentTool[]>;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=toolAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolAdapter.d.ts","sourceRoot":"","sources":["../../src/mcp/toolAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAkF,MAAM,qBAAqB,CAAC;AACrI,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AASlD,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACzC;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B;AAiFD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,aAAa,GAClB,SAAS,CA8DX;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,aAAa,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,EAAE,CAAC,CAqBtB"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Adapt MCP tool definitions to Bandit's AgentTool interface so the
|
|
4
|
+
* existing tool-use loop can call them with no special-casing.
|
|
5
|
+
*
|
|
6
|
+
* server "slack" exposes tool "post_message" → AgentTool named
|
|
7
|
+
* "slack.post_message" registered alongside read_file / apply_edit /
|
|
8
|
+
* etc. The model invokes it via the same <tool_call>{...}</tool_call>
|
|
9
|
+
* envelope it uses for native tools.
|
|
10
|
+
*
|
|
11
|
+
* Namespacing is non-negotiable: collisions with native tool names
|
|
12
|
+
* (read_file, write_file, etc) would silently shadow Bandit's own
|
|
13
|
+
* implementations. Always `<server>.<tool>`.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.mcpToolToAgentTool = mcpToolToAgentTool;
|
|
17
|
+
exports.getAllMcpAgentTools = getAllMcpAgentTools;
|
|
18
|
+
const activation_1 = require("./activation");
|
|
19
|
+
/**
|
|
20
|
+
* Translate one MCP JSON-Schema node into the slimmer
|
|
21
|
+
* AgentToolParameterSchema shape. Recursive for object properties and
|
|
22
|
+
* array items so a `createFilter` param like `criteria: { type: object,
|
|
23
|
+
* properties: { from, to, subject, query } }` keeps its shape all the
|
|
24
|
+
* way to the model — instead of getting flattened to a single opaque
|
|
25
|
+
* "string" param the way the legacy converter did.
|
|
26
|
+
*/
|
|
27
|
+
function toAgentSchema(node) {
|
|
28
|
+
if (!node)
|
|
29
|
+
return undefined;
|
|
30
|
+
const t = node.type;
|
|
31
|
+
const ALLOWED = new Set(['object', 'array', 'string', 'number', 'integer', 'boolean', 'null']);
|
|
32
|
+
if (t && !ALLOWED.has(t))
|
|
33
|
+
return undefined;
|
|
34
|
+
const out = {};
|
|
35
|
+
if (t)
|
|
36
|
+
out.type = t;
|
|
37
|
+
if (node.description)
|
|
38
|
+
out.description = node.description;
|
|
39
|
+
if (node.enum)
|
|
40
|
+
out.enum = node.enum;
|
|
41
|
+
if (t === 'object' && node.properties) {
|
|
42
|
+
out.properties = {};
|
|
43
|
+
for (const [k, v] of Object.entries(node.properties)) {
|
|
44
|
+
const child = toAgentSchema(v);
|
|
45
|
+
if (child) {
|
|
46
|
+
out.properties[k] = child.description
|
|
47
|
+
? { ...child, description: child.description }
|
|
48
|
+
: { ...child, description: v.description };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (node.required && node.required.length > 0)
|
|
52
|
+
out.required = node.required;
|
|
53
|
+
}
|
|
54
|
+
else if (t === 'array' && node.items) {
|
|
55
|
+
const child = toAgentSchema(node.items);
|
|
56
|
+
if (child)
|
|
57
|
+
out.items = child;
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Convert an MCP tool's JSON-Schema input to Bandit's AgentToolParameter[].
|
|
63
|
+
* Each parameter now carries the original JSON Schema type info on the
|
|
64
|
+
* optional `schema` field, so downstream renderers (native-tools
|
|
65
|
+
* provider schema + system-prompt block) tell the model the real shape
|
|
66
|
+
* (object/array/etc) instead of the legacy "every param is a string."
|
|
67
|
+
* That's the fix for MCP tools whose backends reject string-encoded
|
|
68
|
+
* objects with "Expected object, received string."
|
|
69
|
+
*/
|
|
70
|
+
function convertInputSchema(schema) {
|
|
71
|
+
if (!schema || schema.type !== 'object' || !schema.properties)
|
|
72
|
+
return [];
|
|
73
|
+
const required = new Set(schema.required ?? []);
|
|
74
|
+
return Object.entries(schema.properties).map(([name, prop]) => {
|
|
75
|
+
const subSchema = toAgentSchema(prop);
|
|
76
|
+
return {
|
|
77
|
+
name,
|
|
78
|
+
description: prop?.description ?? `(${prop?.type ?? 'any'})`,
|
|
79
|
+
required: required.has(name),
|
|
80
|
+
schema: subSchema
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Render an MCP tool result into the plaintext form Bandit's loop
|
|
86
|
+
* expects. MCP results are an array of content blocks (text / image
|
|
87
|
+
* / resource); for v1 we concatenate every text block and surface
|
|
88
|
+
* non-text blocks as a one-line marker so the model knows it received
|
|
89
|
+
* non-text data without us inlining bytes.
|
|
90
|
+
*/
|
|
91
|
+
function renderMcpResult(result) {
|
|
92
|
+
const blocks = result?.content ?? [];
|
|
93
|
+
const textParts = [];
|
|
94
|
+
for (const block of blocks) {
|
|
95
|
+
if (block.type === 'text' && typeof block.text === 'string') {
|
|
96
|
+
textParts.push(block.text);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
textParts.push(`[mcp:${block.type}] (non-text content omitted)`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const output = textParts.join('\n').trim() || '(empty MCP response)';
|
|
103
|
+
return { output, isError: !!result?.isError };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Build an AgentTool that proxies through the pool to the named
|
|
107
|
+
* server's named tool. Parameter list is derived from the MCP tool's
|
|
108
|
+
* input schema; description is preserved verbatim with a small
|
|
109
|
+
* "(via MCP server <name>)" suffix so the user reading their session
|
|
110
|
+
* log can tell which server's tools the agent reached for.
|
|
111
|
+
*/
|
|
112
|
+
function mcpToolToAgentTool(serverName, remote, pool) {
|
|
113
|
+
const namespacedName = `${serverName}.${remote.name}`;
|
|
114
|
+
const description = remote.description
|
|
115
|
+
? `${remote.description} (via MCP server "${serverName}")`
|
|
116
|
+
: `MCP tool "${remote.name}" exposed by server "${serverName}".`;
|
|
117
|
+
const parameters = convertInputSchema(remote.inputSchema);
|
|
118
|
+
return {
|
|
119
|
+
name: namespacedName,
|
|
120
|
+
description,
|
|
121
|
+
parameters,
|
|
122
|
+
async execute(params, _ctx) {
|
|
123
|
+
try {
|
|
124
|
+
// Bandit's tool-use loop hands us params as Record<string, string>
|
|
125
|
+
// (the tool-call parser stringifies nested objects/arrays before
|
|
126
|
+
// they reach execute()) — we reverse that here so MCP tools
|
|
127
|
+
// whose backends actually validate object/array shapes receive
|
|
128
|
+
// the original structure.
|
|
129
|
+
//
|
|
130
|
+
// Critical bug shipped pre-1.7.282: the prior `\[|\{` regex
|
|
131
|
+
// only matched a SINGLE literal `[` or `{` character, NOT a
|
|
132
|
+
// full JSON array/object string starting with those. So
|
|
133
|
+
// `{"from":"npm"}` failed the test, JSON.parse never ran,
|
|
134
|
+
// and the MCP server got the raw string — zod rejected with
|
|
135
|
+
// "Expected object, received string." The schema-passthrough
|
|
136
|
+
// fix in v1.7.281 made the MODEL emit objects correctly but
|
|
137
|
+
// they were still being stringified on the way through Bandit's
|
|
138
|
+
// parser AND this regex never put them back. Fix: detect
|
|
139
|
+
// start-of-JSON characters with `^[{[]`, not the broken
|
|
140
|
+
// single-char alternatives.
|
|
141
|
+
const args = {};
|
|
142
|
+
for (const [k, v] of Object.entries(params)) {
|
|
143
|
+
if (typeof v !== 'string') {
|
|
144
|
+
args[k] = v;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const trimmed = v.trim();
|
|
148
|
+
if (trimmed === '') {
|
|
149
|
+
args[k] = v;
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
const looksLikeJson = trimmed.startsWith('{') ||
|
|
153
|
+
trimmed.startsWith('[') ||
|
|
154
|
+
/^"[\s\S]*"$/.test(trimmed) ||
|
|
155
|
+
/^(-?\d+(?:\.\d+)?|true|false|null)$/.test(trimmed);
|
|
156
|
+
if (looksLikeJson) {
|
|
157
|
+
try {
|
|
158
|
+
args[k] = JSON.parse(trimmed);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
args[k] = v;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
args[k] = v;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const result = await pool.callTool(serverName, remote.name, args);
|
|
169
|
+
return renderMcpResult(result);
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
173
|
+
return {
|
|
174
|
+
output: `Error invoking ${namespacedName}: ${msg}`,
|
|
175
|
+
isError: true
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Convenience: enumerate every connected server's tools and return
|
|
183
|
+
* AgentTool wrappers ready to register with the existing
|
|
184
|
+
* ToolRegistry. Call from the host (extension or CLI) after the user's
|
|
185
|
+
* mcp-servers.json has been loaded into the pool.
|
|
186
|
+
*
|
|
187
|
+
* The optional `prompt` argument enables activation filtering: when
|
|
188
|
+
* provided, servers configured with `activation: "on-mention"` are
|
|
189
|
+
* only included if their trigger keywords match the prompt. Servers
|
|
190
|
+
* with `activation: "always"` (the default) always contribute their
|
|
191
|
+
* tools regardless of prompt. Pass `undefined` (or omit) to register
|
|
192
|
+
* every server's tools — the -and-earlier behavior.
|
|
193
|
+
*
|
|
194
|
+
* Each server's discoverTools() will lazily spawn the process — so
|
|
195
|
+
* the first call per server after session start does pay the spawn
|
|
196
|
+
* cost. With on-mention activation, that cost only fires for prompts
|
|
197
|
+
* that actually trigger the server.
|
|
198
|
+
*/
|
|
199
|
+
async function getAllMcpAgentTools(pool, prompt) {
|
|
200
|
+
const out = [];
|
|
201
|
+
for (const snap of pool.snapshot()) {
|
|
202
|
+
if (!(0, activation_1.shouldActivateServer)(snap.name, snap.config, prompt))
|
|
203
|
+
continue;
|
|
204
|
+
// Defer the FIRST-TIME spawn for `always`-mode servers without a
|
|
205
|
+
// cached tool list. Without this gate, every "hi" triggers
|
|
206
|
+
// `discoverTools` → `ensureConnected` → `spawnAndHandshake` →
|
|
207
|
+
// trust prompt, even though the agent has no MCP intent. With
|
|
208
|
+
// the gate: skip enumeration unless either (a) the user's prompt
|
|
209
|
+
// mentions the server / one of its triggers, or (b) we already
|
|
210
|
+
// have a cached tool list and the spawn is therefore not needed
|
|
211
|
+
// for this enumeration call. After the first successful spawn
|
|
212
|
+
// the cache populates and subsequent prompts never re-spawn.
|
|
213
|
+
const cached = pool.hasCachedTools(snap.name);
|
|
214
|
+
if (!cached && !(0, activation_1.isServerMentioned)(snap.name, snap.config, prompt))
|
|
215
|
+
continue;
|
|
216
|
+
const tools = await pool.discoverTools(snap.name);
|
|
217
|
+
for (const remote of tools) {
|
|
218
|
+
out.push(mcpToolToAgentTool(snap.name, remote, pool));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return out;
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=toolAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolAdapter.js","sourceRoot":"","sources":["../../src/mcp/toolAdapter.ts"],"names":[],"mappings":"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"}
|