repoburg 1.3.162 → 1.3.163

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 (45) hide show
  1. package/backend/dist/src/app.module.js +2 -0
  2. package/backend/dist/src/app.module.js.map +1 -1
  3. package/backend/dist/src/application-state/application-state.service.d.ts +4 -0
  4. package/backend/dist/src/application-state/application-state.service.js +24 -0
  5. package/backend/dist/src/application-state/application-state.service.js.map +1 -1
  6. package/backend/dist/src/llm-orchestration/tool-schema.service.js +2 -24
  7. package/backend/dist/src/llm-orchestration/tool-schema.service.js.map +1 -1
  8. package/backend/dist/src/mcp-server/mcp-internal.controller.d.ts +20 -0
  9. package/backend/dist/src/mcp-server/mcp-internal.controller.js +50 -0
  10. package/backend/dist/src/mcp-server/mcp-internal.controller.js.map +1 -0
  11. package/backend/dist/src/mcp-server/mcp-server.bootstrap.d.ts +2 -0
  12. package/backend/dist/src/mcp-server/mcp-server.bootstrap.js +160 -0
  13. package/backend/dist/src/mcp-server/mcp-server.bootstrap.js.map +1 -0
  14. package/backend/dist/src/mcp-server/mcp-server.constants.d.ts +7 -0
  15. package/backend/dist/src/mcp-server/mcp-server.constants.js +19 -0
  16. package/backend/dist/src/mcp-server/mcp-server.constants.js.map +1 -0
  17. package/backend/dist/src/mcp-server/mcp-server.controller.d.ts +27 -0
  18. package/backend/dist/src/mcp-server/mcp-server.controller.js +72 -0
  19. package/backend/dist/src/mcp-server/mcp-server.controller.js.map +1 -0
  20. package/backend/dist/src/mcp-server/mcp-server.module.d.ts +2 -0
  21. package/backend/dist/src/mcp-server/mcp-server.module.js +33 -0
  22. package/backend/dist/src/mcp-server/mcp-server.module.js.map +1 -0
  23. package/backend/dist/src/mcp-server/mcp-server.process.service.d.ts +23 -0
  24. package/backend/dist/src/mcp-server/mcp-server.process.service.js +130 -0
  25. package/backend/dist/src/mcp-server/mcp-server.process.service.js.map +1 -0
  26. package/backend/dist/src/mcp-server/mcp-server.service.d.ts +38 -0
  27. package/backend/dist/src/mcp-server/mcp-server.service.js +257 -0
  28. package/backend/dist/src/mcp-server/mcp-server.service.js.map +1 -0
  29. package/backend/dist/src/utils/index.d.ts +1 -0
  30. package/backend/dist/src/utils/index.js +1 -0
  31. package/backend/dist/src/utils/index.js.map +1 -1
  32. package/backend/dist/src/utils/tool-schema-converter.d.ts +8 -0
  33. package/backend/dist/src/utils/tool-schema-converter.js +33 -0
  34. package/backend/dist/src/utils/tool-schema-converter.js.map +1 -0
  35. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  36. package/backend/package.json +2 -0
  37. package/daemon/dist/index.js +25 -0
  38. package/daemon/dist/mcp-gateway.js +381 -0
  39. package/package.json +1 -1
  40. package/backend/.env +0 -27
  41. package/backend/database.sqlite +0 -0
  42. package/backend/section-modified.txt +0 -1
  43. package/daemon/dist/api/system.js +0 -25
  44. package/daemon/dist/daemon.blob +0 -0
  45. package/visual-editor-proxy/.repoburg/data.sqlite +0 -0
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.McpServerModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const mcp_server_service_1 = require("./mcp-server.service");
12
+ const mcp_server_process_service_1 = require("./mcp-server.process.service");
13
+ const mcp_server_controller_1 = require("./mcp-server.controller");
14
+ const mcp_internal_controller_1 = require("./mcp-internal.controller");
15
+ const llm_orchestration_module_1 = require("../llm-orchestration/llm-orchestration.module");
16
+ const tool_hooks_module_1 = require("../tool-hooks/tool-hooks.module");
17
+ const application_state_module_1 = require("../application-state/application-state.module");
18
+ let McpServerModule = class McpServerModule {
19
+ };
20
+ exports.McpServerModule = McpServerModule;
21
+ exports.McpServerModule = McpServerModule = __decorate([
22
+ (0, common_1.Module)({
23
+ imports: [
24
+ llm_orchestration_module_1.LlmOrchestrationModule,
25
+ tool_hooks_module_1.ToolHooksModule,
26
+ application_state_module_1.ApplicationStateModule,
27
+ ],
28
+ controllers: [mcp_server_controller_1.McpServerController, mcp_internal_controller_1.McpInternalController],
29
+ providers: [mcp_server_service_1.McpServerService, mcp_server_process_service_1.McpServerProcessService],
30
+ exports: [mcp_server_service_1.McpServerService],
31
+ })
32
+ ], McpServerModule);
33
+ //# sourceMappingURL=mcp-server.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.module.js","sourceRoot":"","sources":["../../../src/mcp-server/mcp-server.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6DAAwD;AACxD,6EAAuE;AACvE,mEAA8D;AAC9D,uEAAkE;AAClE,4FAAuF;AACvF,uEAAkE;AAClE,4FAAuF;AAgChF,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAV3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,iDAAsB;YACtB,mCAAe;YACf,iDAAsB;SACvB;QACD,WAAW,EAAE,CAAC,2CAAmB,EAAE,+CAAqB,CAAC;QACzD,SAAS,EAAE,CAAC,qCAAgB,EAAE,oDAAuB,CAAC;QACtD,OAAO,EAAE,CAAC,qCAAgB,CAAC;KAC5B,CAAC;GACW,eAAe,CAAG"}
@@ -0,0 +1,23 @@
1
+ import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
2
+ import { ApplicationStateService } from '../application-state/application-state.service';
3
+ export interface McpServerProcessStatus {
4
+ running: boolean;
5
+ port: number;
6
+ host: string;
7
+ url: string;
8
+ }
9
+ export declare class McpServerProcessService implements OnModuleInit, OnModuleDestroy {
10
+ private readonly applicationStateService;
11
+ private readonly logger;
12
+ private child;
13
+ constructor(applicationStateService: ApplicationStateService);
14
+ onModuleInit(): Promise<void>;
15
+ onModuleDestroy(): Promise<void>;
16
+ startProcess(): Promise<McpServerProcessStatus>;
17
+ stopProcess(): Promise<McpServerProcessStatus>;
18
+ isRunning(): boolean;
19
+ getStatus(): McpServerProcessStatus;
20
+ getClientConfig(): string;
21
+ private resolvePort;
22
+ private resolveHost;
23
+ }
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var McpServerProcessService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.McpServerProcessService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const child_process = require("child_process");
16
+ const path = require("path");
17
+ const application_state_service_1 = require("../application-state/application-state.service");
18
+ const mcp_server_constants_1 = require("./mcp-server.constants");
19
+ let McpServerProcessService = McpServerProcessService_1 = class McpServerProcessService {
20
+ constructor(applicationStateService) {
21
+ this.applicationStateService = applicationStateService;
22
+ this.logger = new common_1.Logger(McpServerProcessService_1.name);
23
+ this.child = null;
24
+ }
25
+ async onModuleInit() {
26
+ if (process.env.MCP_CHILD === '1')
27
+ return;
28
+ const autoStart = await this.applicationStateService.getRepoburgMcpAutoStart();
29
+ if (autoStart) {
30
+ this.logger.log('Auto-starting Repoburg MCP server (persisted preference enabled)...');
31
+ this.startProcess().catch((err) => this.logger.error(`Auto-start failed: ${err.message}`, err.stack));
32
+ }
33
+ }
34
+ async onModuleDestroy() {
35
+ await this.stopProcess();
36
+ }
37
+ async startProcess() {
38
+ if (this.isRunning()) {
39
+ this.logger.log('Repoburg MCP server is already running.');
40
+ return this.getStatus();
41
+ }
42
+ const port = this.resolvePort();
43
+ const host = this.resolveHost();
44
+ const bootstrapPath = path.resolve(__dirname, 'mcp-server.bootstrap.js');
45
+ this.logger.log(`Spawning Repoburg MCP server (streamableHttp) on http://${host}:${port}${mcp_server_constants_1.REPOBURG_MCP_HTTP_PATH}`);
46
+ this.child = child_process.spawn(process.execPath, [bootstrapPath], {
47
+ env: {
48
+ ...process.env,
49
+ ...mcp_server_constants_1.MCP_CHILD_ENV,
50
+ MCP_TRANSPORT: 'http',
51
+ MCP_HTTP_PORT: String(port),
52
+ MCP_HTTP_HOST: host,
53
+ NODE_ENV: process.env.NODE_ENV || 'production',
54
+ },
55
+ stdio: ['ignore', 'pipe', 'pipe'],
56
+ });
57
+ this.child.stdout?.on('data', (data) => {
58
+ this.logger.log(`[mcp-child] ${data.toString().trim()}`);
59
+ });
60
+ this.child.stderr?.on('data', (data) => {
61
+ this.logger.warn(`[mcp-child] ${data.toString().trim()}`);
62
+ });
63
+ this.child.on('error', (err) => {
64
+ this.logger.error(`Repoburg MCP child process error: ${err.message}`);
65
+ this.child = null;
66
+ });
67
+ this.child.on('exit', (code, signal) => {
68
+ this.logger.log(`Repoburg MCP child process exited (code=${code}, signal=${signal}).`);
69
+ this.child = null;
70
+ });
71
+ await this.applicationStateService.setRepoburgMcpAutoStart(true);
72
+ return this.getStatus();
73
+ }
74
+ async stopProcess() {
75
+ if (!this.isRunning()) {
76
+ await this.applicationStateService.setRepoburgMcpAutoStart(false);
77
+ return this.getStatus();
78
+ }
79
+ const child = this.child;
80
+ await new Promise((resolve) => {
81
+ const onExit = () => resolve();
82
+ child.once('exit', onExit);
83
+ child.kill('SIGTERM');
84
+ const forceTimer = setTimeout(() => {
85
+ if (!child.killed) {
86
+ child.kill('SIGKILL');
87
+ }
88
+ }, 5000);
89
+ setTimeout(() => {
90
+ clearTimeout(forceTimer);
91
+ resolve();
92
+ }, 6000);
93
+ });
94
+ this.child = null;
95
+ await this.applicationStateService.setRepoburgMcpAutoStart(false);
96
+ return this.getStatus();
97
+ }
98
+ isRunning() {
99
+ return !!this.child && !this.child.killed;
100
+ }
101
+ getStatus() {
102
+ const port = this.resolvePort();
103
+ const host = this.resolveHost();
104
+ return {
105
+ running: this.isRunning(),
106
+ port,
107
+ host,
108
+ url: `http://${host}:${port}${mcp_server_constants_1.REPOBURG_MCP_HTTP_PATH}`,
109
+ };
110
+ }
111
+ getClientConfig() {
112
+ const status = this.getStatus();
113
+ return JSON.stringify({ repoburg: { url: status.url } }, null, 2);
114
+ }
115
+ resolvePort() {
116
+ const envPort = parseInt(process.env.REPOBURG_MCP_HTTP_PORT || '', 10);
117
+ return Number.isFinite(envPort) && envPort > 0
118
+ ? envPort
119
+ : mcp_server_constants_1.REPOBURG_MCP_HTTP_PORT_DEFAULT;
120
+ }
121
+ resolveHost() {
122
+ return process.env.REPOBURG_MCP_HTTP_HOST || mcp_server_constants_1.REPOBURG_MCP_HTTP_HOST_DEFAULT;
123
+ }
124
+ };
125
+ exports.McpServerProcessService = McpServerProcessService;
126
+ exports.McpServerProcessService = McpServerProcessService = McpServerProcessService_1 = __decorate([
127
+ (0, common_1.Injectable)(),
128
+ __metadata("design:paramtypes", [application_state_service_1.ApplicationStateService])
129
+ ], McpServerProcessService);
130
+ //# sourceMappingURL=mcp-server.process.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.process.service.js","sourceRoot":"","sources":["../../../src/mcp-server/mcp-server.process.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { OnModuleDestroy } from '@nestjs/common';
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { ActionHandler } from '../llm-orchestration/action-handlers/action-handler.interface';
5
+ import { ActionExecutionResult } from '../llm-orchestration/llm-orchestration.interfaces';
6
+ import { ToolHooksService } from '../tool-hooks/tool-hooks.service';
7
+ import { ApplicationStateService } from '../application-state/application-state.service';
8
+ export declare class McpServerService implements OnModuleDestroy {
9
+ private readonly handlerRegistry;
10
+ private readonly toolHooksService;
11
+ private readonly applicationStateService;
12
+ private readonly logger;
13
+ private server;
14
+ private cachedHandlers;
15
+ constructor(handlerRegistry: Map<string, ActionHandler>, toolHooksService: ToolHooksService, applicationStateService: ApplicationStateService);
16
+ start(transport: StdioServerTransport): Promise<void>;
17
+ resolveHandlers(): Promise<{
18
+ handler: ActionHandler;
19
+ }[]>;
20
+ createMcpServerInstance(): Server;
21
+ stop(): Promise<void>;
22
+ onModuleDestroy(): Promise<void>;
23
+ getExposedToolsInfo(): Promise<{
24
+ tool_name: string;
25
+ description: string;
26
+ input_schema: {
27
+ type: 'object';
28
+ properties: Record<string, any>;
29
+ required?: string[];
30
+ };
31
+ }[]>;
32
+ executeTool(toolName: string, args: Record<string, any>): Promise<ActionExecutionResult>;
33
+ private resolveExposedToolNames;
34
+ private getExposableHandlers;
35
+ private createSyntheticContext;
36
+ private executeWithHooks;
37
+ private toToolResult;
38
+ }
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var McpServerService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.McpServerService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
19
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
20
+ const llm_orchestration_interfaces_1 = require("../llm-orchestration/llm-orchestration.interfaces");
21
+ const tool_schema_converter_1 = require("../utils/tool-schema-converter");
22
+ const mcp_server_constants_1 = require("./mcp-server.constants");
23
+ const tool_hooks_service_1 = require("../tool-hooks/tool-hooks.service");
24
+ const application_state_service_1 = require("../application-state/application-state.service");
25
+ const MCP_HOOK_API = {
26
+ getContextSize: () => Promise.reject(new Error('getContextSize is not available in MCP server context')),
27
+ invokeSubAgent: () => Promise.reject(new Error('invokeSubAgent is not available in MCP server context')),
28
+ getSessionStatus: () => Promise.reject(new Error('getSessionStatus is not available in MCP server context')),
29
+ };
30
+ const MCP_SERVER_INFO = {
31
+ name: 'repoburg-mcp-server',
32
+ version: '1.0.0',
33
+ };
34
+ let McpServerService = McpServerService_1 = class McpServerService {
35
+ constructor(handlerRegistry, toolHooksService, applicationStateService) {
36
+ this.handlerRegistry = handlerRegistry;
37
+ this.toolHooksService = toolHooksService;
38
+ this.applicationStateService = applicationStateService;
39
+ this.logger = new common_1.Logger(McpServerService_1.name);
40
+ this.server = null;
41
+ this.cachedHandlers = null;
42
+ }
43
+ async start(transport) {
44
+ await this.resolveHandlers();
45
+ this.server = this.createMcpServerInstance();
46
+ await this.server.connect(transport);
47
+ this.logger.log(`MCP server started with ${this.cachedHandlers.length} tools: ${this.cachedHandlers
48
+ .map((t) => t.handler.toolName)
49
+ .join(', ')}`);
50
+ }
51
+ async resolveHandlers() {
52
+ if (this.cachedHandlers)
53
+ return this.cachedHandlers;
54
+ this.cachedHandlers = await this.getExposableHandlers();
55
+ return this.cachedHandlers;
56
+ }
57
+ createMcpServerInstance() {
58
+ const tools = this.cachedHandlers ?? [];
59
+ const server = new index_js_1.Server(MCP_SERVER_INFO, {
60
+ capabilities: { tools: {} },
61
+ });
62
+ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
63
+ tools: tools.map(({ handler }) => {
64
+ const metadata = handler.getMetadata();
65
+ return {
66
+ name: metadata.name,
67
+ description: metadata.description,
68
+ inputSchema: (0, tool_schema_converter_1.convertMetadataToJsonSchema)(metadata),
69
+ };
70
+ }),
71
+ }));
72
+ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
73
+ const { name, arguments: args } = request.params;
74
+ const match = tools.find((t) => t.handler.toolName === name);
75
+ if (!match) {
76
+ return this.toToolResult({
77
+ status: 'FAILURE',
78
+ summary: `Unknown tool: ${name}`,
79
+ error_message: `No tool named '${name}' is exposed by this server.`,
80
+ execution_log: {
81
+ output: '',
82
+ error_message: `No tool named '${name}' is exposed by this server.`,
83
+ },
84
+ });
85
+ }
86
+ const result = await this.executeWithHooks(match.handler, args ?? {});
87
+ return this.toToolResult(result);
88
+ });
89
+ return server;
90
+ }
91
+ async stop() {
92
+ if (this.server) {
93
+ await this.server.close();
94
+ this.server = null;
95
+ this.logger.log('MCP server stopped.');
96
+ }
97
+ }
98
+ async onModuleDestroy() {
99
+ await this.stop();
100
+ }
101
+ async getExposedToolsInfo() {
102
+ const handlers = await this.resolveHandlers();
103
+ return handlers.map(({ handler }) => {
104
+ const metadata = handler.getMetadata();
105
+ return {
106
+ tool_name: metadata.name,
107
+ description: metadata.description,
108
+ input_schema: (0, tool_schema_converter_1.convertMetadataToJsonSchema)(metadata),
109
+ };
110
+ });
111
+ }
112
+ async executeTool(toolName, args) {
113
+ const handlers = await this.resolveHandlers();
114
+ const match = handlers.find((t) => t.handler.toolName === toolName);
115
+ if (!match) {
116
+ return {
117
+ status: 'FAILURE',
118
+ summary: `Unknown tool: ${toolName}`,
119
+ error_message: `No tool named '${toolName}' is exposed by this server.`,
120
+ execution_log: {
121
+ output: '',
122
+ error_message: `No tool named '${toolName}' is exposed by this server.`,
123
+ },
124
+ };
125
+ }
126
+ return this.executeWithHooks(match.handler, args);
127
+ }
128
+ async resolveExposedToolNames() {
129
+ const persisted = await this.applicationStateService.getRepoburgMcpExposedTools();
130
+ return persisted && persisted.length > 0 ? persisted : [...mcp_server_constants_1.EXPOSED_TOOL_NAMES];
131
+ }
132
+ async getExposableHandlers() {
133
+ const toolNames = await this.resolveExposedToolNames();
134
+ const handlers = [];
135
+ for (const toolName of toolNames) {
136
+ const handler = this.handlerRegistry.get(toolName);
137
+ if (!handler) {
138
+ this.logger.warn(`Tool '${toolName}' is in the MCP allowlist but is not registered in ACTION_HANDLER_REGISTRY. Skipping.`);
139
+ continue;
140
+ }
141
+ handlers.push({ handler });
142
+ }
143
+ return handlers;
144
+ }
145
+ createSyntheticContext(toolName) {
146
+ const context = new llm_orchestration_interfaces_1.PlanExecutionContext();
147
+ context.session_id = `mcp:${toolName}:${Date.now()}`;
148
+ context.system_prompt_id = null;
149
+ context.originalParsedActions = [
150
+ { tool_name: toolName, arguments: {} },
151
+ ];
152
+ return context;
153
+ }
154
+ async executeWithHooks(handler, args) {
155
+ const toolName = handler.toolName;
156
+ const context = this.createSyntheticContext(toolName);
157
+ const beforeHooks = await this.toolHooksService.findByTrigger(toolName, 'before');
158
+ for (const hook of beforeHooks) {
159
+ try {
160
+ const payload = {
161
+ hook_type: 'before',
162
+ action: { tool_name: toolName, args },
163
+ plan_context: {
164
+ originalParsedActions: context.originalParsedActions,
165
+ feedback: context.feedback,
166
+ flags: context.flags,
167
+ },
168
+ session: { id: context.session_id },
169
+ api: MCP_HOOK_API,
170
+ };
171
+ const { result: hookResult, logs } = await this.toolHooksService.executeHookWithLogs(hook.script_filename, payload);
172
+ if (logs.length > 0) {
173
+ this.logger.log(`Before-hook ${hook.script_filename} output:\n${logs.join('\n')}`);
174
+ }
175
+ if (hookResult.should_halt_plan) {
176
+ const reason = hookResult.message ||
177
+ `Blocked by before-hook ${hook.script_filename}.`;
178
+ this.logger.warn(`Before-hook ${hook.script_filename} halted MCP tool ${toolName}: ${reason}`);
179
+ return {
180
+ status: 'FAILURE',
181
+ summary: `Tool '${toolName}' was blocked by a hook.`,
182
+ error_message: reason,
183
+ persisted_args: args,
184
+ execution_log: { output: '', error_message: reason },
185
+ };
186
+ }
187
+ }
188
+ catch (e) {
189
+ this.logger.error(`Before-hook ${hook.script_filename} failed for ${toolName}: ${e.message}`);
190
+ }
191
+ }
192
+ let result;
193
+ try {
194
+ result = await handler.execute(args, context);
195
+ }
196
+ catch (error) {
197
+ this.logger.error(`Handler for ${toolName} failed during MCP execution: ${error.message}`, error.stack);
198
+ result = {
199
+ status: 'FAILURE',
200
+ summary: `An unexpected error occurred: ${error.message}`,
201
+ error_message: error.message,
202
+ persisted_args: args,
203
+ execution_log: { output: '', error_message: error.message },
204
+ };
205
+ }
206
+ const afterHooks = await this.toolHooksService.findByTrigger(toolName, 'after');
207
+ for (const hook of afterHooks) {
208
+ try {
209
+ const payload = {
210
+ hook_type: 'after',
211
+ action: {
212
+ tool_name: toolName,
213
+ args,
214
+ result: {
215
+ status: result.status,
216
+ output: result.execution_log?.output,
217
+ error: result.error_message,
218
+ },
219
+ },
220
+ plan_context: {
221
+ originalParsedActions: context.originalParsedActions,
222
+ feedback: context.feedback,
223
+ flags: context.flags,
224
+ },
225
+ session: { id: context.session_id },
226
+ api: MCP_HOOK_API,
227
+ };
228
+ const { logs } = await this.toolHooksService.executeHookWithLogs(hook.script_filename, payload);
229
+ if (logs.length > 0) {
230
+ this.logger.log(`After-hook ${hook.script_filename} output:\n${logs.join('\n')}`);
231
+ }
232
+ }
233
+ catch (e) {
234
+ this.logger.error(`After-hook ${hook.script_filename} failed for ${toolName}: ${e.message}`);
235
+ }
236
+ }
237
+ return result;
238
+ }
239
+ toToolResult(result) {
240
+ const output = result.execution_log?.output || '';
241
+ const error = result.execution_log?.error_message || result.error_message;
242
+ const text = error ? `${output}\n\nError: ${error}`.trim() : output;
243
+ return {
244
+ content: [{ type: 'text', text }],
245
+ isError: result.status === 'FAILURE' ? true : undefined,
246
+ };
247
+ }
248
+ };
249
+ exports.McpServerService = McpServerService;
250
+ exports.McpServerService = McpServerService = McpServerService_1 = __decorate([
251
+ (0, common_1.Injectable)(),
252
+ __param(0, (0, common_1.Inject)('ACTION_HANDLER_REGISTRY')),
253
+ __metadata("design:paramtypes", [Map,
254
+ tool_hooks_service_1.ToolHooksService,
255
+ application_state_service_1.ApplicationStateService])
256
+ ], McpServerService);
257
+ //# sourceMappingURL=mcp-server.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.service.js","sourceRoot":"","sources":["../../../src/mcp-server/mcp-server.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA6E;AAC7E,wEAAmE;AAEnE,iEAG4C;AAE5C,oGAG2D;AAC3D,0EAA6E;AAC7E,iEAA4D;AAC5D,yEAAoE;AAEpE,8FAAyF;AAUzF,MAAM,YAAY,GAAG;IACnB,cAAc,EAAE,GAAG,EAAE,CACnB,OAAO,CAAC,MAAM,CACZ,IAAI,KAAK,CAAC,uDAAuD,CAAC,CACnE;IACH,cAAc,EAAE,GAAG,EAAE,CACnB,OAAO,CAAC,MAAM,CACZ,IAAI,KAAK,CAAC,uDAAuD,CAAC,CACnE;IACH,gBAAgB,EAAE,GAAG,EAAE,CACrB,OAAO,CAAC,MAAM,CACZ,IAAI,KAAK,CAAC,yDAAyD,CAAC,CACrE;CACJ,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,OAAO;CACjB,CAAC;AAgBK,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAK3B,YAEE,eAA4D,EAC3C,gBAAkC,EAClC,uBAAgD;QAFhD,oBAAe,GAAf,eAAe,CAA4B;QAC3C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,4BAAuB,GAAvB,uBAAuB,CAAyB;QARlD,WAAM,GAAG,IAAI,eAAM,CAAC,kBAAgB,CAAC,IAAI,CAAC,CAAC;QACpD,WAAM,GAAkB,IAAI,CAAC;QAC7B,mBAAc,GAAwC,IAAI,CAAC;IAOhE,CAAC;IAMJ,KAAK,CAAC,KAAK,CAAC,SAA+B;QACzC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,2BAA2B,IAAI,CAAC,cAAe,CAAC,MAAM,WAAW,IAAI,CAAC,cAAe;aAClF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;IACJ,CAAC;IAOD,KAAK,CAAC,eAAe;QACnB,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IASD,uBAAuB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,iBAAM,CAAC,eAAe,EAAE;YACzC,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YAC5D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;gBAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;gBACvC,OAAO;oBACL,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,WAAW,EAAE,IAAA,mDAA2B,EAAC,QAAQ,CAAC;iBACnD,CAAC;YACJ,CAAC,CAAC;SACH,CAAC,CAAC,CAAC;QAEJ,MAAM,CAAC,iBAAiB,CAAC,gCAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YACjD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC,YAAY,CAAC;oBACvB,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,iBAAiB,IAAI,EAAE;oBAChC,aAAa,EAAE,kBAAkB,IAAI,8BAA8B;oBACnE,aAAa,EAAE;wBACb,MAAM,EAAE,EAAE;wBACV,aAAa,EAAE,kBAAkB,IAAI,8BAA8B;qBACpE;iBACF,CAAC,CAAC;YACL,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAKD,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAOD,KAAK,CAAC,mBAAmB;QASvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YACvC,OAAO;gBACL,SAAS,EAAE,QAAQ,CAAC,IAAI;gBACxB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,YAAY,EAAE,IAAA,mDAA2B,EAAC,QAAQ,CAAC;aACpD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAUD,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,IAAyB;QAEzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,iBAAiB,QAAQ,EAAE;gBACpC,aAAa,EAAE,kBAAkB,QAAQ,8BAA8B;gBACvE,aAAa,EAAE;oBACb,MAAM,EAAE,EAAE;oBACV,aAAa,EAAE,kBAAkB,QAAQ,8BAA8B;iBACxE;aACF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAOO,KAAK,CAAC,uBAAuB;QACnC,MAAM,SAAS,GACb,MAAM,IAAI,CAAC,uBAAuB,CAAC,0BAA0B,EAAE,CAAC;QAClE,OAAO,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,yCAAkB,CAAC,CAAC;IACjF,CAAC;IAMO,KAAK,CAAC,oBAAoB;QAChC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAiC,EAAE,CAAC;QAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,SAAS,QAAQ,uFAAuF,CACzG,CAAC;gBACF,SAAS;YACX,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAOO,sBAAsB,CAAC,QAAgB;QAC7C,MAAM,OAAO,GAAG,IAAI,mDAAoB,EAAE,CAAC;QAC3C,OAAO,CAAC,UAAU,GAAG,OAAO,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACrD,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAChC,OAAO,CAAC,qBAAqB,GAAG;YAC9B,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;SACvC,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAWO,KAAK,CAAC,gBAAgB,CAC5B,OAAsB,EACtB,IAAyB;QAEzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAGtD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAC3D,QAAQ,EACR,QAAQ,CACT,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAgB;oBAC3B,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACrC,YAAY,EAAE;wBACZ,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;wBACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;qBACrB;oBACD,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,UAAU,EAAE;oBACnC,GAAG,EAAE,YAAY;iBAClB,CAAC;gBACF,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAChC,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAC7C,IAAI,CAAC,eAAe,EACpB,OAAO,CACR,CAAC;gBACJ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,eAAe,IAAI,CAAC,eAAe,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClE,CAAC;gBACJ,CAAC;gBACD,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;oBAChC,MAAM,MAAM,GACV,UAAU,CAAC,OAAO;wBAClB,0BAA0B,IAAI,CAAC,eAAe,GAAG,CAAC;oBACpD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,eAAe,IAAI,CAAC,eAAe,oBAAoB,QAAQ,KAAK,MAAM,EAAE,CAC7E,CAAC;oBACF,OAAO;wBACL,MAAM,EAAE,SAAS;wBACjB,OAAO,EAAE,SAAS,QAAQ,0BAA0B;wBACpD,aAAa,EAAE,MAAM;wBACrB,cAAc,EAAE,IAAI;wBACpB,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE;qBACrD,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,eAAe,IAAI,CAAC,eAAe,eAAe,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAC3E,CAAC;YACJ,CAAC;QACH,CAAC;QAGD,IAAI,MAA6B,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,eAAe,QAAQ,iCAAiC,KAAK,CAAC,OAAO,EAAE,EACvE,KAAK,CAAC,KAAK,CACZ,CAAC;YACF,MAAM,GAAG;gBACP,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,iCAAiC,KAAK,CAAC,OAAO,EAAE;gBACzD,aAAa,EAAE,KAAK,CAAC,OAAO;gBAC5B,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,OAAO,EAAE;aAC5D,CAAC;QACJ,CAAC;QAGD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAC1D,QAAQ,EACR,OAAO,CACR,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAgB;oBAC3B,SAAS,EAAE,OAAO;oBAClB,MAAM,EAAE;wBACN,SAAS,EAAE,QAAQ;wBACnB,IAAI;wBACJ,MAAM,EAAE;4BACN,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM;4BACpC,KAAK,EAAE,MAAM,CAAC,aAAa;yBAC5B;qBACF;oBACD,YAAY,EAAE;wBACZ,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;wBACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;qBACrB;oBACD,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,UAAU,EAAE;oBACnC,GAAG,EAAE,YAAY;iBAClB,CAAC;gBACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAC9D,IAAI,CAAC,eAAe,EACpB,OAAO,CACR,CAAC;gBACF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,cAAc,IAAI,CAAC,eAAe,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjE,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,cAAc,IAAI,CAAC,eAAe,eAAe,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAC1E,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAMO,YAAY,CAAC,MAA6B;QAIhD,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,MAAM,IAAI,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC;QAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,cAAc,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAEpE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACjC,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SACxD,CAAC;IACJ,CAAC;CACF,CAAA;AAvVY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;IAOR,WAAA,IAAA,eAAM,EAAC,yBAAyB,CAAC,CAAA;qCACA,GAAG;QACF,qCAAgB;QACT,mDAAuB;GATxD,gBAAgB,CAuV5B"}
@@ -3,3 +3,4 @@ export * from './trace.decorator';
3
3
  export * from './ai-format-generator';
4
4
  export * from './spawn-with-kill';
5
5
  export * from './short-id';
6
+ export * from './tool-schema-converter';
@@ -19,4 +19,5 @@ __exportStar(require("./trace.decorator"), exports);
19
19
  __exportStar(require("./ai-format-generator"), exports);
20
20
  __exportStar(require("./spawn-with-kill"), exports);
21
21
  __exportStar(require("./short-id"), exports);
22
+ __exportStar(require("./tool-schema-converter"), exports);
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,oDAAkC;AAClC,wDAAsC;AACtC,oDAAkC;AAClC,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,oDAAkC;AAClC,wDAAsC;AACtC,oDAAkC;AAClC,6CAA2B;AAC3B,0DAAwC"}
@@ -0,0 +1,8 @@
1
+ import { ToolMetadata } from '../llm-orchestration/llm-orchestration.interfaces';
2
+ import { LlmFunctionTool } from '../llm-provider/llm-provider.interface';
3
+ export declare function convertMetadataToJsonSchema(metadata: ToolMetadata): {
4
+ type: 'object';
5
+ properties: Record<string, any>;
6
+ required?: string[];
7
+ };
8
+ export declare function convertMetadataToToolDefinition(metadata: ToolMetadata): LlmFunctionTool;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertMetadataToJsonSchema = convertMetadataToJsonSchema;
4
+ exports.convertMetadataToToolDefinition = convertMetadataToToolDefinition;
5
+ function convertMetadataToJsonSchema(metadata) {
6
+ const properties = {};
7
+ const required = [];
8
+ for (const arg of metadata.arguments) {
9
+ properties[arg.name] = {
10
+ type: arg.type,
11
+ description: arg.description,
12
+ };
13
+ if (arg.required) {
14
+ required.push(arg.name);
15
+ }
16
+ }
17
+ return {
18
+ type: 'object',
19
+ properties,
20
+ required: required.length > 0 ? required : undefined,
21
+ };
22
+ }
23
+ function convertMetadataToToolDefinition(metadata) {
24
+ return {
25
+ type: 'function',
26
+ function: {
27
+ name: metadata.name,
28
+ description: metadata.description,
29
+ parameters: convertMetadataToJsonSchema(metadata),
30
+ },
31
+ };
32
+ }
33
+ //# sourceMappingURL=tool-schema-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-schema-converter.js","sourceRoot":"","sources":["../../../src/utils/tool-schema-converter.ts"],"names":[],"mappings":";;AAsBA,kEAuBC;AASD,0EAWC;AA3CD,SAAgB,2BAA2B,CAAC,QAAsB;IAKhE,MAAM,UAAU,GAAwB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACrC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;YACrB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B,CAAC;QACF,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KACrD,CAAC;AACJ,CAAC;AASD,SAAgB,+BAA+B,CAC7C,QAAsB;IAEtB,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,UAAU,EAAE,2BAA2B,CAAC,QAAQ,CAAC;SAClD;KACF,CAAC;AACJ,CAAC"}