@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.
Files changed (63) hide show
  1. package/README.md +68 -7
  2. package/dist/commands/tunnel/index.d.ts +1 -1
  3. package/dist/commands/tunnel/index.d.ts.map +1 -1
  4. package/dist/commands/tunnel/index.js +26 -3
  5. package/dist/commands/tunnel/index.js.map +1 -1
  6. package/dist/commands/tunnel/lb.d.ts +6 -0
  7. package/dist/commands/tunnel/lb.d.ts.map +1 -0
  8. package/dist/commands/tunnel/lb.js +148 -0
  9. package/dist/commands/tunnel/lb.js.map +1 -0
  10. package/dist/commands/tunnel/types.d.ts +1 -1
  11. package/dist/commands/tunnel/types.d.ts.map +1 -1
  12. package/dist/mcp/code-mode/executor.d.ts +32 -0
  13. package/dist/mcp/code-mode/executor.d.ts.map +1 -0
  14. package/dist/mcp/code-mode/executor.js +173 -0
  15. package/dist/mcp/code-mode/executor.js.map +1 -0
  16. package/dist/mcp/code-mode/index.d.ts +12 -0
  17. package/dist/mcp/code-mode/index.d.ts.map +1 -0
  18. package/dist/mcp/code-mode/index.js +11 -0
  19. package/dist/mcp/code-mode/index.js.map +1 -0
  20. package/dist/mcp/code-mode/interface-generator.d.ts +38 -0
  21. package/dist/mcp/code-mode/interface-generator.d.ts.map +1 -0
  22. package/dist/mcp/code-mode/interface-generator.js +159 -0
  23. package/dist/mcp/code-mode/interface-generator.js.map +1 -0
  24. package/dist/mcp/code-mode/provider.d.ts +24 -0
  25. package/dist/mcp/code-mode/provider.d.ts.map +1 -0
  26. package/dist/mcp/code-mode/provider.js +93 -0
  27. package/dist/mcp/code-mode/provider.js.map +1 -0
  28. package/dist/mcp/code-mode/search.d.ts +32 -0
  29. package/dist/mcp/code-mode/search.d.ts.map +1 -0
  30. package/dist/mcp/code-mode/search.js +47 -0
  31. package/dist/mcp/code-mode/search.js.map +1 -0
  32. package/dist/mcp/code-mode/tool-registry.d.ts +44 -0
  33. package/dist/mcp/code-mode/tool-registry.d.ts.map +1 -0
  34. package/dist/mcp/code-mode/tool-registry.js +196 -0
  35. package/dist/mcp/code-mode/tool-registry.js.map +1 -0
  36. package/dist/mcp/code-mode/types.d.ts +41 -0
  37. package/dist/mcp/code-mode/types.d.ts.map +1 -0
  38. package/dist/mcp/code-mode/types.js +8 -0
  39. package/dist/mcp/code-mode/types.js.map +1 -0
  40. package/dist/mcp/daemon/entry.js +8 -1
  41. package/dist/mcp/daemon/entry.js.map +1 -1
  42. package/dist/mcp/providers/atlassian/tools/confluence.d.ts.map +1 -1
  43. package/dist/mcp/providers/atlassian/tools/confluence.js +17 -9
  44. package/dist/mcp/providers/atlassian/tools/confluence.js.map +1 -1
  45. package/dist/mcp/providers/atlassian/tools/jira.d.ts.map +1 -1
  46. package/dist/mcp/providers/atlassian/tools/jira.js +33 -14
  47. package/dist/mcp/providers/atlassian/tools/jira.js.map +1 -1
  48. package/dist/mcp/providers/gitlab/tools/issues.d.ts.map +1 -1
  49. package/dist/mcp/providers/gitlab/tools/issues.js +9 -5
  50. package/dist/mcp/providers/gitlab/tools/issues.js.map +1 -1
  51. package/dist/mcp/providers/gitlab/tools/merge-requests.js +31 -14
  52. package/dist/mcp/providers/gitlab/tools/merge-requests.js.map +1 -1
  53. package/dist/mcp/providers/gitlab/tools/pipelines.d.ts.map +1 -1
  54. package/dist/mcp/providers/gitlab/tools/pipelines.js +9 -5
  55. package/dist/mcp/providers/gitlab/tools/pipelines.js.map +1 -1
  56. package/dist/mcp/providers/gitlab/tools/repository.d.ts.map +1 -1
  57. package/dist/mcp/providers/gitlab/tools/repository.js +122 -96
  58. package/dist/mcp/providers/gitlab/tools/repository.js.map +1 -1
  59. package/dist/mcp/providers/tool-helpers.d.ts +33 -8
  60. package/dist/mcp/providers/tool-helpers.d.ts.map +1 -1
  61. package/dist/mcp/providers/tool-helpers.js +58 -4
  62. package/dist/mcp/providers/tool-helpers.js.map +1 -1
  63. 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"}