@padua/cli 2.0.24 → 2.2.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 +68 -7
- package/dist/commands/tunnel/index.d.ts +1 -1
- package/dist/commands/tunnel/index.d.ts.map +1 -1
- package/dist/commands/tunnel/index.js +26 -3
- package/dist/commands/tunnel/index.js.map +1 -1
- package/dist/commands/tunnel/lb.d.ts +6 -0
- package/dist/commands/tunnel/lb.d.ts.map +1 -0
- package/dist/commands/tunnel/lb.js +148 -0
- package/dist/commands/tunnel/lb.js.map +1 -0
- package/dist/commands/tunnel/types.d.ts +1 -1
- package/dist/commands/tunnel/types.d.ts.map +1 -1
- package/dist/mcp/code-mode/executor.d.ts +32 -0
- package/dist/mcp/code-mode/executor.d.ts.map +1 -0
- package/dist/mcp/code-mode/executor.js +173 -0
- package/dist/mcp/code-mode/executor.js.map +1 -0
- package/dist/mcp/code-mode/index.d.ts +12 -0
- package/dist/mcp/code-mode/index.d.ts.map +1 -0
- package/dist/mcp/code-mode/index.js +11 -0
- package/dist/mcp/code-mode/index.js.map +1 -0
- package/dist/mcp/code-mode/interface-generator.d.ts +38 -0
- package/dist/mcp/code-mode/interface-generator.d.ts.map +1 -0
- package/dist/mcp/code-mode/interface-generator.js +159 -0
- package/dist/mcp/code-mode/interface-generator.js.map +1 -0
- package/dist/mcp/code-mode/provider.d.ts +24 -0
- package/dist/mcp/code-mode/provider.d.ts.map +1 -0
- package/dist/mcp/code-mode/provider.js +93 -0
- package/dist/mcp/code-mode/provider.js.map +1 -0
- package/dist/mcp/code-mode/search.d.ts +32 -0
- package/dist/mcp/code-mode/search.d.ts.map +1 -0
- package/dist/mcp/code-mode/search.js +47 -0
- package/dist/mcp/code-mode/search.js.map +1 -0
- package/dist/mcp/code-mode/tool-registry.d.ts +44 -0
- package/dist/mcp/code-mode/tool-registry.d.ts.map +1 -0
- package/dist/mcp/code-mode/tool-registry.js +196 -0
- package/dist/mcp/code-mode/tool-registry.js.map +1 -0
- package/dist/mcp/code-mode/types.d.ts +41 -0
- package/dist/mcp/code-mode/types.d.ts.map +1 -0
- package/dist/mcp/code-mode/types.js +8 -0
- package/dist/mcp/code-mode/types.js.map +1 -0
- package/dist/mcp/daemon/entry.js +8 -1
- package/dist/mcp/daemon/entry.js.map +1 -1
- package/dist/mcp/providers/atlassian/tools/confluence.d.ts.map +1 -1
- package/dist/mcp/providers/atlassian/tools/confluence.js +17 -9
- package/dist/mcp/providers/atlassian/tools/confluence.js.map +1 -1
- package/dist/mcp/providers/atlassian/tools/jira.d.ts.map +1 -1
- package/dist/mcp/providers/atlassian/tools/jira.js +33 -14
- package/dist/mcp/providers/atlassian/tools/jira.js.map +1 -1
- package/dist/mcp/providers/gitlab/tools/issues.d.ts.map +1 -1
- package/dist/mcp/providers/gitlab/tools/issues.js +9 -5
- package/dist/mcp/providers/gitlab/tools/issues.js.map +1 -1
- package/dist/mcp/providers/gitlab/tools/merge-requests.js +31 -14
- package/dist/mcp/providers/gitlab/tools/merge-requests.js.map +1 -1
- package/dist/mcp/providers/gitlab/tools/pipelines.d.ts.map +1 -1
- package/dist/mcp/providers/gitlab/tools/pipelines.js +9 -5
- package/dist/mcp/providers/gitlab/tools/pipelines.js.map +1 -1
- package/dist/mcp/providers/gitlab/tools/repository.d.ts.map +1 -1
- package/dist/mcp/providers/gitlab/tools/repository.js +122 -96
- package/dist/mcp/providers/gitlab/tools/repository.js.map +1 -1
- package/dist/mcp/providers/tool-helpers.d.ts +33 -8
- package/dist/mcp/providers/tool-helpers.d.ts.map +1 -1
- package/dist/mcp/providers/tool-helpers.js +58 -4
- package/dist/mcp/providers/tool-helpers.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* code-mode module barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Exports the public API surface for the code-mode feature:
|
|
5
|
+
* - CodeModeProvider: MCP provider that registers call_tool_chain + search_tools
|
|
6
|
+
* - InstrumentedToolRegistrar: wraps a ToolRegistrar to capture tool registrations
|
|
7
|
+
* - Types used by callers
|
|
8
|
+
*/
|
|
9
|
+
export { CodeModeProvider } from './provider.js';
|
|
10
|
+
export { InstrumentedToolRegistrar, deriveNamespaceAndFunction } from './tool-registry.js';
|
|
11
|
+
export type { ToolEntry, ExecutionResult, ExecutionOptions } from './types.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/code-mode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC3F,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* code-mode module barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Exports the public API surface for the code-mode feature:
|
|
5
|
+
* - CodeModeProvider: MCP provider that registers call_tool_chain + search_tools
|
|
6
|
+
* - InstrumentedToolRegistrar: wraps a ToolRegistrar to capture tool registrations
|
|
7
|
+
* - Types used by callers
|
|
8
|
+
*/
|
|
9
|
+
export { CodeModeProvider } from './provider.js';
|
|
10
|
+
export { InstrumentedToolRegistrar, deriveNamespaceAndFunction } from './tool-registry.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/code-mode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InterfaceGenerator — converts tool Zod/JSON schemas to TypeScript interfaces.
|
|
3
|
+
*
|
|
4
|
+
* Produces TypeScript interface strings grouped by namespace so agents can
|
|
5
|
+
* understand tool parameter shapes before calling them.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolEntry } from './types.js';
|
|
8
|
+
export declare class InterfaceGenerator {
|
|
9
|
+
private readonly tools;
|
|
10
|
+
constructor(tools: ToolEntry[]);
|
|
11
|
+
/**
|
|
12
|
+
* Generate TypeScript interface definitions for all tools.
|
|
13
|
+
*
|
|
14
|
+
* Groups tools by namespace into ambient namespace declarations so that
|
|
15
|
+
* code running in the sandbox can reference `gitlab.list_issues({ ... })`.
|
|
16
|
+
*/
|
|
17
|
+
generateAll(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Generate a TypeScript interface for a single tool by name.
|
|
20
|
+
*
|
|
21
|
+
* Returns a string containing the interface definition and JSDoc comment,
|
|
22
|
+
* or a comment indicating the tool was not found.
|
|
23
|
+
*/
|
|
24
|
+
generateForToolByName(toolName: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Generate a TypeScript interface for a single ToolEntry.
|
|
27
|
+
*
|
|
28
|
+
* @param tool The tool to generate an interface for.
|
|
29
|
+
* @param indented When true, indent by 2 spaces (for namespace blocks).
|
|
30
|
+
*/
|
|
31
|
+
private generateForTool;
|
|
32
|
+
/**
|
|
33
|
+
* Return a map of tool name → interface string for all tools.
|
|
34
|
+
* Used to set up __getToolInterface() inside the sandbox.
|
|
35
|
+
*/
|
|
36
|
+
buildInterfaceMap(): Record<string, string>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=interface-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface-generator.d.ts","sourceRoot":"","sources":["../../../src/mcp/code-mode/interface-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAgE5C,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,SAAS,EAAE;IAE/C;;;;;OAKG;IACH,WAAW,IAAI,MAAM;IAyBrB;;;;;OAKG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAM/C;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA2CvB;;;OAGG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAO5C"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InterfaceGenerator — converts tool Zod/JSON schemas to TypeScript interfaces.
|
|
3
|
+
*
|
|
4
|
+
* Produces TypeScript interface strings grouped by namespace so agents can
|
|
5
|
+
* understand tool parameter shapes before calling them.
|
|
6
|
+
*/
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Type helpers
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
/** Convert a JSON Schema type descriptor to a TypeScript type string. */
|
|
11
|
+
function jsonSchemaTypeToTs(schema) {
|
|
12
|
+
if (!schema || typeof schema !== 'object')
|
|
13
|
+
return 'unknown';
|
|
14
|
+
const s = schema;
|
|
15
|
+
// Handle enum
|
|
16
|
+
if (s.enum && Array.isArray(s.enum)) {
|
|
17
|
+
return s.enum
|
|
18
|
+
.map(v => (typeof v === 'string' ? JSON.stringify(v) : String(v)))
|
|
19
|
+
.join(' | ');
|
|
20
|
+
}
|
|
21
|
+
// Handle oneOf / union
|
|
22
|
+
if (s.oneOf && Array.isArray(s.oneOf)) {
|
|
23
|
+
return s.oneOf.map(jsonSchemaTypeToTs).join(' | ');
|
|
24
|
+
}
|
|
25
|
+
switch (s.type) {
|
|
26
|
+
case 'string':
|
|
27
|
+
return 'string';
|
|
28
|
+
case 'number':
|
|
29
|
+
case 'integer':
|
|
30
|
+
return 'number';
|
|
31
|
+
case 'boolean':
|
|
32
|
+
return 'boolean';
|
|
33
|
+
case 'null':
|
|
34
|
+
return 'null';
|
|
35
|
+
case 'array': {
|
|
36
|
+
const itemType = s.items ? jsonSchemaTypeToTs(s.items) : 'unknown';
|
|
37
|
+
return `(${itemType})[]`;
|
|
38
|
+
}
|
|
39
|
+
case 'object': {
|
|
40
|
+
if (s.properties && typeof s.properties === 'object') {
|
|
41
|
+
const props = Object.entries(s.properties)
|
|
42
|
+
.map(([k, v]) => {
|
|
43
|
+
const required = Array.isArray(s.required) && s.required.includes(k);
|
|
44
|
+
return `${k}${required ? '' : '?'}: ${jsonSchemaTypeToTs(v)}`;
|
|
45
|
+
})
|
|
46
|
+
.join('; ');
|
|
47
|
+
return `{ ${props} }`;
|
|
48
|
+
}
|
|
49
|
+
return '{ [key: string]: unknown }';
|
|
50
|
+
}
|
|
51
|
+
case 'any':
|
|
52
|
+
default:
|
|
53
|
+
return 'unknown';
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Escape a string for safe use inside a JSDoc comment. */
|
|
57
|
+
function escapeComment(text) {
|
|
58
|
+
return text.replace(/\*\//g, '*\\/').replace(/\n/g, ' ');
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// InterfaceGenerator
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
export class InterfaceGenerator {
|
|
64
|
+
tools;
|
|
65
|
+
constructor(tools) {
|
|
66
|
+
this.tools = tools;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Generate TypeScript interface definitions for all tools.
|
|
70
|
+
*
|
|
71
|
+
* Groups tools by namespace into ambient namespace declarations so that
|
|
72
|
+
* code running in the sandbox can reference `gitlab.list_issues({ ... })`.
|
|
73
|
+
*/
|
|
74
|
+
generateAll() {
|
|
75
|
+
const byNamespace = new Map();
|
|
76
|
+
for (const tool of this.tools) {
|
|
77
|
+
const ns = tool.namespace;
|
|
78
|
+
if (!byNamespace.has(ns))
|
|
79
|
+
byNamespace.set(ns, []);
|
|
80
|
+
byNamespace.get(ns).push(tool);
|
|
81
|
+
}
|
|
82
|
+
const parts = [
|
|
83
|
+
'// Auto-generated TypeScript interfaces for Padua MCP tools',
|
|
84
|
+
'',
|
|
85
|
+
];
|
|
86
|
+
for (const [ns, nsTools] of byNamespace) {
|
|
87
|
+
parts.push(`declare namespace ${ns} {`);
|
|
88
|
+
for (const tool of nsTools) {
|
|
89
|
+
parts.push(this.generateForTool(tool, true));
|
|
90
|
+
}
|
|
91
|
+
parts.push('}');
|
|
92
|
+
parts.push('');
|
|
93
|
+
}
|
|
94
|
+
return parts.join('\n');
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Generate a TypeScript interface for a single tool by name.
|
|
98
|
+
*
|
|
99
|
+
* Returns a string containing the interface definition and JSDoc comment,
|
|
100
|
+
* or a comment indicating the tool was not found.
|
|
101
|
+
*/
|
|
102
|
+
generateForToolByName(toolName) {
|
|
103
|
+
const tool = this.tools.find(t => t.name === toolName);
|
|
104
|
+
if (!tool)
|
|
105
|
+
return `// Tool '${toolName}' not found`;
|
|
106
|
+
return this.generateForTool(tool, false);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Generate a TypeScript interface for a single ToolEntry.
|
|
110
|
+
*
|
|
111
|
+
* @param tool The tool to generate an interface for.
|
|
112
|
+
* @param indented When true, indent by 2 spaces (for namespace blocks).
|
|
113
|
+
*/
|
|
114
|
+
generateForTool(tool, indented) {
|
|
115
|
+
const indent = indented ? ' ' : '';
|
|
116
|
+
const lines = [];
|
|
117
|
+
lines.push(`${indent}/**`);
|
|
118
|
+
lines.push(`${indent} * ${escapeComment(tool.description)}`);
|
|
119
|
+
lines.push(`${indent} * Access as: ${tool.namespace}.${tool.functionName}(args)`);
|
|
120
|
+
lines.push(`${indent} */`);
|
|
121
|
+
// Input interface name
|
|
122
|
+
const inputIfName = `${tool.functionName}Input`;
|
|
123
|
+
lines.push(`${indent}interface ${inputIfName} {`);
|
|
124
|
+
const schema = tool.inputSchema;
|
|
125
|
+
if (schema &&
|
|
126
|
+
schema.type === 'object' &&
|
|
127
|
+
schema.properties &&
|
|
128
|
+
typeof schema.properties === 'object') {
|
|
129
|
+
const props = schema.properties;
|
|
130
|
+
const required = Array.isArray(schema.required) ? schema.required : [];
|
|
131
|
+
for (const [propName, propSchema] of Object.entries(props)) {
|
|
132
|
+
const isReq = required.includes(propName);
|
|
133
|
+
const desc = propSchema.description;
|
|
134
|
+
if (desc) {
|
|
135
|
+
lines.push(`${indent} /** ${escapeComment(String(desc))} */`);
|
|
136
|
+
}
|
|
137
|
+
lines.push(`${indent} ${propName}${isReq ? '' : '?'}: ${jsonSchemaTypeToTs(propSchema)};`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
lines.push(`${indent} [key: string]: unknown;`);
|
|
142
|
+
}
|
|
143
|
+
lines.push(`${indent}}`);
|
|
144
|
+
lines.push('');
|
|
145
|
+
return lines.join('\n');
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Return a map of tool name → interface string for all tools.
|
|
149
|
+
* Used to set up __getToolInterface() inside the sandbox.
|
|
150
|
+
*/
|
|
151
|
+
buildInterfaceMap() {
|
|
152
|
+
const map = {};
|
|
153
|
+
for (const tool of this.tools) {
|
|
154
|
+
map[tool.name] = this.generateForTool(tool, false);
|
|
155
|
+
}
|
|
156
|
+
return map;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=interface-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface-generator.js","sourceRoot":"","sources":["../../../src/mcp/code-mode/interface-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeModeProvider — MCP provider for code-mode execution tools.
|
|
3
|
+
*
|
|
4
|
+
* Registers two MCP tools:
|
|
5
|
+
* - call_tool_chain: execute JavaScript in an isolated V8 sandbox with
|
|
6
|
+
* all registered MCP tools available as synchronous functions
|
|
7
|
+
* - search_tools: keyword search over registered tools
|
|
8
|
+
*
|
|
9
|
+
* Implements the Provider interface and integrates via the existing
|
|
10
|
+
* ProviderRegistry → McpServerAdapter composition root.
|
|
11
|
+
*/
|
|
12
|
+
import type { Provider, ToolRegistrar } from '../providers/types.js';
|
|
13
|
+
import type { ToolEntry } from './types.js';
|
|
14
|
+
export declare class CodeModeProvider implements Provider {
|
|
15
|
+
readonly name = "code-mode";
|
|
16
|
+
private readonly executor;
|
|
17
|
+
private readonly searchIndex;
|
|
18
|
+
constructor(tools: ToolEntry[]);
|
|
19
|
+
registerTools(registrar: ToolRegistrar): void;
|
|
20
|
+
registerResources(_registrar: ToolRegistrar): void;
|
|
21
|
+
ready(): Promise<void>;
|
|
22
|
+
shutdown(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/mcp/code-mode/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAIrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAwC5C,qBAAa,gBAAiB,YAAW,QAAQ;IAC/C,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;gBAElC,KAAK,EAAE,SAAS,EAAE;IAK9B,aAAa,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAuC7C,iBAAiB,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI;IAI5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeModeProvider — MCP provider for code-mode execution tools.
|
|
3
|
+
*
|
|
4
|
+
* Registers two MCP tools:
|
|
5
|
+
* - call_tool_chain: execute JavaScript in an isolated V8 sandbox with
|
|
6
|
+
* all registered MCP tools available as synchronous functions
|
|
7
|
+
* - search_tools: keyword search over registered tools
|
|
8
|
+
*
|
|
9
|
+
* Implements the Provider interface and integrates via the existing
|
|
10
|
+
* ProviderRegistry → McpServerAdapter composition root.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { toMcpResult } from '../providers/tool-helpers.js';
|
|
14
|
+
import { CodeExecutor } from './executor.js';
|
|
15
|
+
import { ToolSearchIndex } from './search.js';
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Input schemas
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
const callToolChainSchema = z.object({
|
|
20
|
+
code: z
|
|
21
|
+
.string()
|
|
22
|
+
.min(1)
|
|
23
|
+
.describe('JavaScript code to execute in the sandbox. All MCP tools are available as ' +
|
|
24
|
+
'namespaced synchronous functions (e.g. gitlab.list_issues({...})). ' +
|
|
25
|
+
'Use return to return a value.'),
|
|
26
|
+
timeout: z
|
|
27
|
+
.number()
|
|
28
|
+
.int()
|
|
29
|
+
.positive()
|
|
30
|
+
.optional()
|
|
31
|
+
.describe('Execution timeout in milliseconds (default: 30000)'),
|
|
32
|
+
memoryLimitMb: z
|
|
33
|
+
.number()
|
|
34
|
+
.int()
|
|
35
|
+
.positive()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe('Memory limit for the sandbox in megabytes (default: 128)'),
|
|
38
|
+
});
|
|
39
|
+
const searchToolsSchema = z.object({
|
|
40
|
+
query: z
|
|
41
|
+
.string()
|
|
42
|
+
.min(1)
|
|
43
|
+
.describe('Keyword query to search for matching tools by name or description'),
|
|
44
|
+
});
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// CodeModeProvider
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
export class CodeModeProvider {
|
|
49
|
+
name = 'code-mode';
|
|
50
|
+
executor;
|
|
51
|
+
searchIndex;
|
|
52
|
+
constructor(tools) {
|
|
53
|
+
this.executor = new CodeExecutor(tools);
|
|
54
|
+
this.searchIndex = new ToolSearchIndex(tools);
|
|
55
|
+
}
|
|
56
|
+
registerTools(registrar) {
|
|
57
|
+
// call_tool_chain
|
|
58
|
+
registrar.registerTool('call_tool_chain', {
|
|
59
|
+
description: 'Execute JavaScript code in a secure isolated-vm V8 sandbox. All registered MCP tools ' +
|
|
60
|
+
'are available as synchronous namespaced functions (gitlab.*, jira.*, confluence.*). ' +
|
|
61
|
+
'Console output is captured and returned alongside the execution result. ' +
|
|
62
|
+
'Use __interfaces to see all tool type definitions, or __getToolInterface(name) ' +
|
|
63
|
+
'to look up a specific tool.',
|
|
64
|
+
inputSchema: callToolChainSchema,
|
|
65
|
+
}, async (args) => {
|
|
66
|
+
const { result, logs } = await this.executor.execute(args.code, {
|
|
67
|
+
timeout: args.timeout,
|
|
68
|
+
memoryLimitMb: args.memoryLimitMb,
|
|
69
|
+
});
|
|
70
|
+
return toMcpResult({ result, logs });
|
|
71
|
+
});
|
|
72
|
+
// search_tools
|
|
73
|
+
registrar.registerTool('search_tools', {
|
|
74
|
+
description: 'Search for registered MCP tools by keyword. Returns tools whose name or description ' +
|
|
75
|
+
'matches the query, each with its full schema information.',
|
|
76
|
+
inputSchema: searchToolsSchema,
|
|
77
|
+
annotations: { readOnlyHint: true },
|
|
78
|
+
}, async (args) => {
|
|
79
|
+
const results = this.searchIndex.search(args.query);
|
|
80
|
+
return toMcpResult(results);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
registerResources(_registrar) {
|
|
84
|
+
// No resources — code-mode is tools-only
|
|
85
|
+
}
|
|
86
|
+
async ready() {
|
|
87
|
+
// Always ready — no external service dependency
|
|
88
|
+
}
|
|
89
|
+
async shutdown() {
|
|
90
|
+
// No-op — no persistent state to clean up
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/mcp/code-mode/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,4EAA4E;QAC5E,qEAAqE;QACrE,+BAA+B,CAChC;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,oDAAoD,CAAC;IACjE,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,0DAA0D,CAAC;CACxE,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,mEAAmE,CAAC;CACjF,CAAC,CAAC;AAEH,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,WAAW,CAAC;IAEX,QAAQ,CAAe;IACvB,WAAW,CAAkB;IAE9C,YAAY,KAAkB;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,aAAa,CAAC,SAAwB;QACpC,kBAAkB;QAClB,SAAS,CAAC,YAAY,CACpB,iBAAiB,EACjB;YACE,WAAW,EACT,uFAAuF;gBACvF,sFAAsF;gBACtF,0EAA0E;gBAC1E,iFAAiF;gBACjF,6BAA6B;YAC/B,WAAW,EAAE,mBAAmB;SACjC,EACD,KAAK,EAAE,IAAyC,EAAE,EAAE;YAClD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC9D,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,CAAC,CAAC;YACH,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC,CACF,CAAC;QAEF,eAAe;QACf,SAAS,CAAC,YAAY,CACpB,cAAc,EACd;YACE,WAAW,EACT,sFAAsF;gBACtF,2DAA2D;YAC7D,WAAW,EAAE,iBAAiB;YAC9B,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;SACpC,EACD,KAAK,EAAE,IAAuC,EAAE,EAAE;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpD,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC,CACF,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,UAAyB;QACzC,yCAAyC;IAC3C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,gDAAgD;IAClD,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,0CAA0C;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolSearchIndex — keyword-based search over registered MCP tools.
|
|
3
|
+
*
|
|
4
|
+
* Implements case-insensitive substring matching against both tool name
|
|
5
|
+
* and description. Returns matching tools with their full schema information.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolEntry } from './types.js';
|
|
8
|
+
/** A search result entry — subset of ToolEntry returned to callers. */
|
|
9
|
+
export interface ToolSearchResult {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
namespace: string;
|
|
13
|
+
functionName: string;
|
|
14
|
+
inputSchema?: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
export declare class ToolSearchIndex {
|
|
17
|
+
private readonly tools;
|
|
18
|
+
constructor(tools: ToolEntry[]);
|
|
19
|
+
/**
|
|
20
|
+
* Search tools by keyword query.
|
|
21
|
+
*
|
|
22
|
+
* Performs case-insensitive substring matching against both the tool name
|
|
23
|
+
* and description. Returns an empty array if query is blank.
|
|
24
|
+
*
|
|
25
|
+
* @param query Keyword string to search for.
|
|
26
|
+
* @returns Array of matching ToolSearchResult entries.
|
|
27
|
+
*/
|
|
28
|
+
search(query: string): ToolSearchResult[];
|
|
29
|
+
/** Return all tools as search results (no filtering). */
|
|
30
|
+
getAll(): ToolSearchResult[];
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/mcp/code-mode/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAExB,KAAK,EAAE,SAAS,EAAE;IAI9B;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAmBzC,yDAAyD;IACzD,MAAM,IAAI,gBAAgB,EAAE;CAS7B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolSearchIndex — keyword-based search over registered MCP tools.
|
|
3
|
+
*
|
|
4
|
+
* Implements case-insensitive substring matching against both tool name
|
|
5
|
+
* and description. Returns matching tools with their full schema information.
|
|
6
|
+
*/
|
|
7
|
+
export class ToolSearchIndex {
|
|
8
|
+
tools;
|
|
9
|
+
constructor(tools) {
|
|
10
|
+
this.tools = tools;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Search tools by keyword query.
|
|
14
|
+
*
|
|
15
|
+
* Performs case-insensitive substring matching against both the tool name
|
|
16
|
+
* and description. Returns an empty array if query is blank.
|
|
17
|
+
*
|
|
18
|
+
* @param query Keyword string to search for.
|
|
19
|
+
* @returns Array of matching ToolSearchResult entries.
|
|
20
|
+
*/
|
|
21
|
+
search(query) {
|
|
22
|
+
const q = query.trim().toLowerCase();
|
|
23
|
+
if (!q)
|
|
24
|
+
return [];
|
|
25
|
+
return this.tools
|
|
26
|
+
.filter(t => t.name.toLowerCase().includes(q) ||
|
|
27
|
+
t.description.toLowerCase().includes(q))
|
|
28
|
+
.map(t => ({
|
|
29
|
+
name: t.name,
|
|
30
|
+
description: t.description,
|
|
31
|
+
namespace: t.namespace,
|
|
32
|
+
functionName: t.functionName,
|
|
33
|
+
inputSchema: t.inputSchema,
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
/** Return all tools as search results (no filtering). */
|
|
37
|
+
getAll() {
|
|
38
|
+
return this.tools.map(t => ({
|
|
39
|
+
name: t.name,
|
|
40
|
+
description: t.description,
|
|
41
|
+
namespace: t.namespace,
|
|
42
|
+
functionName: t.functionName,
|
|
43
|
+
inputSchema: t.inputSchema,
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/mcp/code-mode/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,MAAM,OAAO,eAAe;IACT,KAAK,CAAc;IAEpC,YAAY,KAAkB;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAa;QAClB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAElB,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CACL,CAAC,CAAC,EAAE,CACF,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC1C;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACT,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC,CAAC;IACR,CAAC;IAED,yDAAyD;IACzD,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InstrumentedToolRegistrar — wraps a ToolRegistrar and records all registered tools.
|
|
3
|
+
*
|
|
4
|
+
* The code-mode module needs a snapshot of all registered tools (name, description,
|
|
5
|
+
* inputSchema, handler) to build the sandbox tool bridge. This class wraps the real
|
|
6
|
+
* ToolRegistrar, delegating every registration call to it while also recording each
|
|
7
|
+
* tool in an internal list.
|
|
8
|
+
*
|
|
9
|
+
* Usage in the composition root:
|
|
10
|
+
* const instrumented = new InstrumentedToolRegistrar(adapter);
|
|
11
|
+
* registry.registerAll(instrumented); // all 49 tools recorded
|
|
12
|
+
* const tools = instrumented.getTools(); // snapshot passed to CodeModeProvider
|
|
13
|
+
*/
|
|
14
|
+
import type { ToolRegistrar } from '../providers/types.js';
|
|
15
|
+
import type { ToolEntry } from './types.js';
|
|
16
|
+
/**
|
|
17
|
+
* Derive the sandbox namespace and function name from an MCP tool name.
|
|
18
|
+
*
|
|
19
|
+
* Mapping rules:
|
|
20
|
+
* - 'gitlab_*' → namespace='gitlab', functionName='*'
|
|
21
|
+
* - 'atlassian_jira_*' → namespace='jira', functionName='*'
|
|
22
|
+
* - 'atlassian_confluence_*' → namespace='confluence', functionName='*'
|
|
23
|
+
* - anything else → namespace='tools', functionName=sanitized(name)
|
|
24
|
+
*/
|
|
25
|
+
export declare function deriveNamespaceAndFunction(toolName: string): {
|
|
26
|
+
namespace: string;
|
|
27
|
+
functionName: string;
|
|
28
|
+
};
|
|
29
|
+
/** Replace non-alphanumeric/underscore characters with underscores. */
|
|
30
|
+
export declare function sanitizeIdentifier(name: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Wraps a ToolRegistrar, records every tool registration, and delegates
|
|
33
|
+
* registration to the underlying registrar.
|
|
34
|
+
*/
|
|
35
|
+
export declare class InstrumentedToolRegistrar implements ToolRegistrar {
|
|
36
|
+
private readonly delegate;
|
|
37
|
+
private readonly tools;
|
|
38
|
+
constructor(delegate: ToolRegistrar);
|
|
39
|
+
registerTool(name: string, schema: unknown, handler: unknown): void;
|
|
40
|
+
registerResource(template: unknown, handler: unknown): void;
|
|
41
|
+
/** Return a snapshot of all registered tools. */
|
|
42
|
+
getTools(): ToolEntry[];
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../src/mcp/code-mode/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AAazD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,CASA;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AA8ID;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,aAAa;IAGjD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;gBAEZ,QAAQ,EAAE,aAAa;IAEpD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAiBnE,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAI3D,iDAAiD;IACjD,QAAQ,IAAI,SAAS,EAAE;CAGxB"}
|