@hexabot-ai/api 3.2.2-alpha.13 → 3.2.2-alpha.15
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/dist/mcp/mcp-api.module.js +2 -2
- package/dist/mcp/mcp-api.module.js.map +1 -1
- package/dist/mcp/tools/catalog-mcp.tools.d.ts +63 -0
- package/dist/mcp/tools/catalog-mcp.tools.js +135 -0
- package/dist/mcp/tools/catalog-mcp.tools.js.map +1 -0
- package/dist/mcp/tools/cms-mcp.tools.d.ts +128 -0
- package/dist/mcp/tools/cms-mcp.tools.js +242 -0
- package/dist/mcp/tools/cms-mcp.tools.js.map +1 -0
- package/dist/mcp/tools/credential-mcp.tools.d.ts +19 -0
- package/dist/mcp/tools/credential-mcp.tools.js +82 -0
- package/dist/mcp/tools/credential-mcp.tools.js.map +1 -0
- package/dist/mcp/tools/hexabot-mcp-tool.base.d.ts +22 -0
- package/dist/mcp/tools/hexabot-mcp-tool.base.js +48 -0
- package/dist/mcp/tools/hexabot-mcp-tool.base.js.map +1 -0
- package/dist/mcp/tools/hexabot-mcp.schemas.d.ts +41 -0
- package/dist/mcp/tools/hexabot-mcp.schemas.js +36 -0
- package/dist/mcp/tools/hexabot-mcp.schemas.js.map +1 -0
- package/dist/mcp/tools/hexabot-mcp.tools.d.ts +1 -1199
- package/dist/mcp/tools/hexabot-mcp.tools.js +14 -953
- package/dist/mcp/tools/hexabot-mcp.tools.js.map +1 -1
- package/dist/mcp/tools/hexabot-mcp.utils.d.ts +1 -0
- package/dist/mcp/tools/hexabot-mcp.utils.js +9 -0
- package/dist/mcp/tools/hexabot-mcp.utils.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +22 -0
- package/dist/mcp/tools/index.js +50 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/mcp-server-mcp.tools.d.ts +77 -0
- package/dist/mcp/tools/mcp-server-mcp.tools.js +130 -0
- package/dist/mcp/tools/mcp-server-mcp.tools.js.map +1 -0
- package/dist/mcp/tools/memory-definition-mcp.tools.d.ts +57 -0
- package/dist/mcp/tools/memory-definition-mcp.tools.js +128 -0
- package/dist/mcp/tools/memory-definition-mcp.tools.js.map +1 -0
- package/dist/mcp/tools/workflow-mcp.helper.d.ts +141 -0
- package/dist/mcp/tools/workflow-mcp.helper.js +108 -0
- package/dist/mcp/tools/workflow-mcp.helper.js.map +1 -0
- package/dist/mcp/tools/workflow-mcp.tools.d.ts +468 -0
- package/dist/mcp/tools/workflow-mcp.tools.js +222 -0
- package/dist/mcp/tools/workflow-mcp.tools.js.map +1 -0
- package/dist/mcp/tools/workflow-run-mcp.tools.d.ts +347 -0
- package/dist/mcp/tools/workflow-run-mcp.tools.js +229 -0
- package/dist/mcp/tools/workflow-run-mcp.tools.js.map +1 -0
- package/dist/mcp/tools/workflow-version-mcp.tools.d.ts +230 -0
- package/dist/mcp/tools/workflow-version-mcp.tools.js +211 -0
- package/dist/mcp/tools/workflow-version-mcp.tools.js.map +1 -0
- package/dist/static/assets/{browser-ponyfill-BAQMT4v6.js → browser-ponyfill-D3QB7SUD.js} +1 -1
- package/dist/static/assets/{cssMode-Ck2GqK0z.js → cssMode-Bk0-m_Ij.js} +1 -1
- package/dist/static/assets/{freemarker2-D6BTrnBM.js → freemarker2-D1tTqqt8.js} +1 -1
- package/dist/static/assets/{handlebars-BZezzX8Y.js → handlebars-D3VQYLDj.js} +1 -1
- package/dist/static/assets/{html-BaHYviVY.js → html-Cmhr3-6_.js} +1 -1
- package/dist/static/assets/{htmlMode-DUmaotGP.js → htmlMode-Bb5Kynv_.js} +1 -1
- package/dist/static/assets/{index-BHEX1fRT.js → index-JPQj6OiL.js} +2000 -2000
- package/dist/static/assets/{javascript-B9CVllx-.js → javascript-BkQdNyFT.js} +1 -1
- package/dist/static/assets/{jsonMode-CKDg1one.js → jsonMode-CS1296LF.js} +1 -1
- package/dist/static/assets/{liquid-B0Y1CBIq.js → liquid-C9ufUE-r.js} +1 -1
- package/dist/static/assets/{lspLanguageFeatures-CEFdgYOu.js → lspLanguageFeatures-Dxd2SsrE.js} +1 -1
- package/dist/static/assets/{mdx-Deeg6oYM.js → mdx-Dm4bC48D.js} +1 -1
- package/dist/static/assets/{python-CwGXs8Vo.js → python-ZvBWpr_q.js} +1 -1
- package/dist/static/assets/{razor-DNVdulkX.js → razor-DBj-LyWR.js} +1 -1
- package/dist/static/assets/{tsMode-C1iFfVv3.js → tsMode-DzMlJB2i.js} +1 -1
- package/dist/static/assets/{typescript-BbwxPKOl.js → typescript-Cfo3bzpy.js} +1 -1
- package/dist/static/assets/{xml-mxS5SzT4.js → xml-ZyceR0L3.js} +1 -1
- package/dist/static/assets/{yaml-CScJydFV.js → yaml-oyu_gOar.js} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/test/port.d.ts +8 -0
- package/dist/utils/test/port.js +34 -0
- package/dist/utils/test/port.js.map +1 -0
- package/dist/workflow/services/workflow.service.d.ts +7 -7
- package/dist/workflow/services/workflow.service.js +40 -35
- package/dist/workflow/services/workflow.service.js.map +1 -1
- package/package.json +4 -4
- package/src/mcp/README.md +24 -3
- package/src/mcp/mcp-api.module.ts +2 -2
- package/src/mcp/tools/catalog-mcp.tools.ts +122 -0
- package/src/mcp/tools/cms-mcp.tools.ts +239 -0
- package/src/mcp/tools/credential-mcp.tools.ts +81 -0
- package/src/mcp/tools/hexabot-mcp-tool.base.ts +74 -0
- package/src/mcp/tools/hexabot-mcp.schemas.ts +55 -0
- package/src/mcp/tools/hexabot-mcp.tools.ts +1 -1035
- package/src/mcp/tools/hexabot-mcp.utils.ts +13 -0
- package/src/mcp/tools/index.ts +51 -0
- package/src/mcp/tools/mcp-server-mcp.tools.ts +135 -0
- package/src/mcp/tools/memory-definition-mcp.tools.ts +125 -0
- package/src/mcp/tools/workflow-mcp.helper.ts +166 -0
- package/src/mcp/tools/workflow-mcp.tools.ts +254 -0
- package/src/mcp/tools/workflow-run-mcp.tools.ts +274 -0
- package/src/mcp/tools/workflow-version-mcp.tools.ts +226 -0
- package/src/utils/test/port.ts +48 -0
- package/src/workflow/services/workflow.service.ts +49 -29
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const getJestPort: () => number;
|
|
2
|
+
export declare const getJestHost: () => string;
|
|
3
|
+
export declare const getJestBaseUrl: () => string;
|
|
4
|
+
export declare const configureJestNetworkEnv: () => {
|
|
5
|
+
port: number;
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
apiOrigin: string;
|
|
8
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.configureJestNetworkEnv = exports.getJestBaseUrl = exports.getJestHost = exports.getJestPort = void 0;
|
|
4
|
+
const DEFAULT_JEST_PORT = 3001;
|
|
5
|
+
const JEST_HOST = '127.0.0.1';
|
|
6
|
+
const parsePort = (value, envName) => {
|
|
7
|
+
if (!value) {
|
|
8
|
+
return DEFAULT_JEST_PORT;
|
|
9
|
+
}
|
|
10
|
+
if (!/^\d+$/.test(value)) {
|
|
11
|
+
throw new Error(`Invalid ${envName} "${value}". Expected a TCP port between 1 and 65535.`);
|
|
12
|
+
}
|
|
13
|
+
const port = Number(value);
|
|
14
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
15
|
+
throw new Error(`Invalid ${envName} "${value}". Expected a TCP port between 1 and 65535.`);
|
|
16
|
+
}
|
|
17
|
+
return port;
|
|
18
|
+
};
|
|
19
|
+
const getJestPort = () => parsePort(process.env.JEST_PORT, 'JEST_PORT');
|
|
20
|
+
exports.getJestPort = getJestPort;
|
|
21
|
+
const getJestHost = () => JEST_HOST;
|
|
22
|
+
exports.getJestHost = getJestHost;
|
|
23
|
+
const getJestBaseUrl = () => `http://${(0, exports.getJestHost)()}:${(0, exports.getJestPort)()}`;
|
|
24
|
+
exports.getJestBaseUrl = getJestBaseUrl;
|
|
25
|
+
const configureJestNetworkEnv = () => {
|
|
26
|
+
const port = (0, exports.getJestPort)();
|
|
27
|
+
const baseUrl = `http://${(0, exports.getJestHost)()}:${port}`;
|
|
28
|
+
const apiOrigin = process.env.JEST_API_ORIGIN ?? `${baseUrl}/api`;
|
|
29
|
+
process.env.PORT = `${port}`;
|
|
30
|
+
process.env.API_ORIGIN = apiOrigin;
|
|
31
|
+
return { port, baseUrl, apiOrigin };
|
|
32
|
+
};
|
|
33
|
+
exports.configureJestNetworkEnv = configureJestNetworkEnv;
|
|
34
|
+
//# sourceMappingURL=port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../../src/utils/test/port.ts"],"names":[],"mappings":";;;AAMA,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,SAAS,GAAG,WAAW,CAAC;AAC9B,MAAM,SAAS,GAAG,CAAC,KAAyB,EAAE,OAAe,EAAU,EAAE;IACvE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,WAAW,OAAO,KAAK,KAAK,6CAA6C,CAC1E,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,WAAW,OAAO,KAAK,KAAK,6CAA6C,CAC1E,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEK,MAAM,WAAW,GAAG,GAAW,EAAE,CACtC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AADnC,QAAA,WAAW,eACwB;AAEzC,MAAM,WAAW,GAAG,GAAW,EAAE,CAAC,SAAS,CAAC;AAAtC,QAAA,WAAW,eAA2B;AAE5C,MAAM,cAAc,GAAG,GAAW,EAAE,CACzC,UAAU,IAAA,mBAAW,GAAE,IAAI,IAAA,mBAAW,GAAE,EAAE,CAAC;AADhC,QAAA,cAAc,kBACkB;AAEtC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,MAAM,IAAI,GAAG,IAAA,mBAAW,GAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,UAAU,IAAA,mBAAW,GAAE,IAAI,IAAI,EAAE,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,OAAO,MAAM,CAAC;IAElE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC;IAEnC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACtC,CAAC,CAAC;AATW,QAAA,uBAAuB,2BASlC"}
|
|
@@ -24,11 +24,11 @@ export declare class WorkflowService extends BaseOrmService<WorkflowOrmEntity> {
|
|
|
24
24
|
subscribe: `Workflow_${string}`;
|
|
25
25
|
}>;
|
|
26
26
|
private sendWorkflowEvent;
|
|
27
|
-
sendWorkflowStart(payload: WorkflowEventMap[keyof WorkflowEventMap]): void
|
|
28
|
-
sendWorkflowFinish(payload: WorkflowEventMap[keyof WorkflowEventMap]): void
|
|
29
|
-
sendWorkflowFailure(payload: WorkflowEventMap[keyof WorkflowEventMap]): void
|
|
30
|
-
sendWorkflowStepStart(payload: WorkflowEventMap[keyof WorkflowEventMap]): void
|
|
31
|
-
sendWorkflowStepSuspended(payload: WorkflowEventMap[keyof WorkflowEventMap]): void
|
|
32
|
-
sendWorkflowStepSuccess(payload: WorkflowEventMap[keyof WorkflowEventMap]): void
|
|
33
|
-
sendWorkflowStepError(payload: WorkflowEventMap[keyof WorkflowEventMap]): void
|
|
27
|
+
sendWorkflowStart(payload: WorkflowEventMap[keyof WorkflowEventMap]): Promise<void>;
|
|
28
|
+
sendWorkflowFinish(payload: WorkflowEventMap[keyof WorkflowEventMap]): Promise<void>;
|
|
29
|
+
sendWorkflowFailure(payload: WorkflowEventMap[keyof WorkflowEventMap]): Promise<void>;
|
|
30
|
+
sendWorkflowStepStart(payload: WorkflowEventMap[keyof WorkflowEventMap]): Promise<void>;
|
|
31
|
+
sendWorkflowStepSuspended(payload: WorkflowEventMap[keyof WorkflowEventMap]): Promise<void>;
|
|
32
|
+
sendWorkflowStepSuccess(payload: WorkflowEventMap[keyof WorkflowEventMap]): Promise<void>;
|
|
33
|
+
sendWorkflowStepError(payload: WorkflowEventMap[keyof WorkflowEventMap]): Promise<void>;
|
|
34
34
|
}
|
|
@@ -20,7 +20,6 @@ const base_orm_service_1 = require("../../utils/generics/base-orm.service");
|
|
|
20
20
|
const websocket_1 = require("../../websocket");
|
|
21
21
|
const workflow_entity_1 = require("../entities/workflow.entity");
|
|
22
22
|
const workflow_repository_1 = require("../repositories/workflow.repository");
|
|
23
|
-
const types_1 = require("../types");
|
|
24
23
|
const workflow_run_service_1 = require("./workflow-run.service");
|
|
25
24
|
let WorkflowService = class WorkflowService extends base_orm_service_1.BaseOrmService {
|
|
26
25
|
constructor(repository, gateway, workflowRunService) {
|
|
@@ -110,42 +109,48 @@ let WorkflowService = class WorkflowService extends base_orm_service_1.BaseOrmSe
|
|
|
110
109
|
this.logger.error('workflowRun context is required');
|
|
111
110
|
return;
|
|
112
111
|
}
|
|
113
|
-
const { initiatorId, workflowId, threadId } = workflowRun
|
|
112
|
+
const { initiatorId, workflowId, threadId } = workflowRun.context;
|
|
113
|
+
if (typeof initiatorId !== 'string' ||
|
|
114
|
+
!initiatorId ||
|
|
115
|
+
typeof workflowId !== 'string' ||
|
|
116
|
+
!workflowId) {
|
|
117
|
+
this.logger.error('workflowRun context requires initiatorId and workflowId');
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
114
120
|
const workflow = await this.findOne(workflowId);
|
|
115
|
-
|
|
116
|
-
workflow
|
|
117
|
-
|
|
118
|
-
if (canBroadcastEvents) {
|
|
119
|
-
this.gateway.broadcastWorkflowEvent({
|
|
120
|
-
...payload,
|
|
121
|
-
t,
|
|
122
|
-
workflowId,
|
|
123
|
-
initiatorId,
|
|
124
|
-
threadId: typeof threadId === 'string' ? threadId : undefined,
|
|
125
|
-
workflowEvent: workflowEvent.replace('hook:', ''),
|
|
126
|
-
});
|
|
121
|
+
if (!workflow?.type) {
|
|
122
|
+
this.logger.error('workflow is required');
|
|
123
|
+
return;
|
|
127
124
|
}
|
|
125
|
+
this.gateway.broadcastWorkflowEvent({
|
|
126
|
+
...payload,
|
|
127
|
+
t,
|
|
128
|
+
workflowId,
|
|
129
|
+
initiatorId,
|
|
130
|
+
threadId: typeof threadId === 'string' ? threadId : undefined,
|
|
131
|
+
workflowEvent: workflowEvent.replace('hook:', ''),
|
|
132
|
+
});
|
|
128
133
|
}
|
|
129
|
-
sendWorkflowStart(payload) {
|
|
130
|
-
this.sendWorkflowEvent('hook:workflow:start', payload);
|
|
134
|
+
async sendWorkflowStart(payload) {
|
|
135
|
+
await this.sendWorkflowEvent('hook:workflow:start', payload);
|
|
131
136
|
}
|
|
132
|
-
sendWorkflowFinish(payload) {
|
|
133
|
-
this.sendWorkflowEvent('hook:workflow:finish', payload);
|
|
137
|
+
async sendWorkflowFinish(payload) {
|
|
138
|
+
await this.sendWorkflowEvent('hook:workflow:finish', payload);
|
|
134
139
|
}
|
|
135
|
-
sendWorkflowFailure(payload) {
|
|
136
|
-
this.sendWorkflowEvent('hook:workflow:failure', payload);
|
|
140
|
+
async sendWorkflowFailure(payload) {
|
|
141
|
+
await this.sendWorkflowEvent('hook:workflow:failure', payload);
|
|
137
142
|
}
|
|
138
|
-
sendWorkflowStepStart(payload) {
|
|
139
|
-
this.sendWorkflowEvent('hook:step:start', payload);
|
|
143
|
+
async sendWorkflowStepStart(payload) {
|
|
144
|
+
await this.sendWorkflowEvent('hook:step:start', payload);
|
|
140
145
|
}
|
|
141
|
-
sendWorkflowStepSuspended(payload) {
|
|
142
|
-
this.sendWorkflowEvent('hook:step:suspended', payload);
|
|
146
|
+
async sendWorkflowStepSuspended(payload) {
|
|
147
|
+
await this.sendWorkflowEvent('hook:step:suspended', payload);
|
|
143
148
|
}
|
|
144
|
-
sendWorkflowStepSuccess(payload) {
|
|
145
|
-
this.sendWorkflowEvent('hook:step:success', payload);
|
|
149
|
+
async sendWorkflowStepSuccess(payload) {
|
|
150
|
+
await this.sendWorkflowEvent('hook:step:success', payload);
|
|
146
151
|
}
|
|
147
|
-
sendWorkflowStepError(payload) {
|
|
148
|
-
this.sendWorkflowEvent('hook:step:error', payload);
|
|
152
|
+
async sendWorkflowStepError(payload) {
|
|
153
|
+
await this.sendWorkflowEvent('hook:step:error', payload);
|
|
149
154
|
}
|
|
150
155
|
};
|
|
151
156
|
exports.WorkflowService = WorkflowService;
|
|
@@ -163,43 +168,43 @@ __decorate([
|
|
|
163
168
|
(0, event_emitter_1.OnEvent)('hook:workflow:start'),
|
|
164
169
|
__metadata("design:type", Function),
|
|
165
170
|
__metadata("design:paramtypes", [Object]),
|
|
166
|
-
__metadata("design:returntype",
|
|
171
|
+
__metadata("design:returntype", Promise)
|
|
167
172
|
], WorkflowService.prototype, "sendWorkflowStart", null);
|
|
168
173
|
__decorate([
|
|
169
174
|
(0, event_emitter_1.OnEvent)('hook:workflow:finish'),
|
|
170
175
|
__metadata("design:type", Function),
|
|
171
176
|
__metadata("design:paramtypes", [Object]),
|
|
172
|
-
__metadata("design:returntype",
|
|
177
|
+
__metadata("design:returntype", Promise)
|
|
173
178
|
], WorkflowService.prototype, "sendWorkflowFinish", null);
|
|
174
179
|
__decorate([
|
|
175
180
|
(0, event_emitter_1.OnEvent)('hook:workflow:failure'),
|
|
176
181
|
__metadata("design:type", Function),
|
|
177
182
|
__metadata("design:paramtypes", [Object]),
|
|
178
|
-
__metadata("design:returntype",
|
|
183
|
+
__metadata("design:returntype", Promise)
|
|
179
184
|
], WorkflowService.prototype, "sendWorkflowFailure", null);
|
|
180
185
|
__decorate([
|
|
181
186
|
(0, event_emitter_1.OnEvent)('hook:step:start'),
|
|
182
187
|
__metadata("design:type", Function),
|
|
183
188
|
__metadata("design:paramtypes", [Object]),
|
|
184
|
-
__metadata("design:returntype",
|
|
189
|
+
__metadata("design:returntype", Promise)
|
|
185
190
|
], WorkflowService.prototype, "sendWorkflowStepStart", null);
|
|
186
191
|
__decorate([
|
|
187
192
|
(0, event_emitter_1.OnEvent)('hook:step:suspended'),
|
|
188
193
|
__metadata("design:type", Function),
|
|
189
194
|
__metadata("design:paramtypes", [Object]),
|
|
190
|
-
__metadata("design:returntype",
|
|
195
|
+
__metadata("design:returntype", Promise)
|
|
191
196
|
], WorkflowService.prototype, "sendWorkflowStepSuspended", null);
|
|
192
197
|
__decorate([
|
|
193
198
|
(0, event_emitter_1.OnEvent)('hook:step:success'),
|
|
194
199
|
__metadata("design:type", Function),
|
|
195
200
|
__metadata("design:paramtypes", [Object]),
|
|
196
|
-
__metadata("design:returntype",
|
|
201
|
+
__metadata("design:returntype", Promise)
|
|
197
202
|
], WorkflowService.prototype, "sendWorkflowStepSuccess", null);
|
|
198
203
|
__decorate([
|
|
199
204
|
(0, event_emitter_1.OnEvent)('hook:step:error'),
|
|
200
205
|
__metadata("design:type", Function),
|
|
201
206
|
__metadata("design:paramtypes", [Object]),
|
|
202
|
-
__metadata("design:returntype",
|
|
207
|
+
__metadata("design:returntype", Promise)
|
|
203
208
|
], WorkflowService.prototype, "sendWorkflowStepError", null);
|
|
204
209
|
exports.WorkflowService = WorkflowService = __decorate([
|
|
205
210
|
(0, common_1.Injectable)(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.service.js","sourceRoot":"","sources":["../../../src/workflow/services/workflow.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAQA,2CAIwB;AACxB,yDAA8D;AAE9D,6BAAiC;AAGjC,4EAAmE;AAEnE,+CASqB;AAGrB,iEAAgE;AAChE,6EAAyE;
|
|
1
|
+
{"version":3,"file":"workflow.service.js","sourceRoot":"","sources":["../../../src/workflow/services/workflow.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAQA,2CAIwB;AACxB,yDAA8D;AAE9D,6BAAiC;AAGjC,4EAAmE;AAEnE,+CASqB;AAGrB,iEAAgE;AAChE,6EAAyE;AAGzE,iEAA4D;AAGrD,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,iCAAiC;IAYpE,YACW,UAA8B,EACtB,OAAyB,EACzB,kBAAsC;QAEvD,KAAK,CAAC,UAAU,CAAC,CAAC;QAJT,eAAU,GAAV,UAAU,CAAoB;QACtB,YAAO,GAAP,OAAO,CAAkB;QACzB,uBAAkB,GAAlB,kBAAkB,CAAoB;QAdxC,kCAA6B,GAAG;YAC/C,UAAU,EAAE,GAAG;YACf,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,yCAAyC;SAC1C,CAAC;IAaX,CAAC;IAKD,KAAK,CAAC,YAAY;QAChB,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC;YAC1C,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;YAC5B,IAAI,EAAE,CAAC;SACR,CAAC,CAAC;QAEH,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IASD,KAAK,CAAC,iBAAiB,CACrB,OAAsB,EACtB,OAA0C;QAE1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAC3B,mCAAiB,EACjB,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAC3C,CAAC;QAEF,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,mCAAiB,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;IAKD,KAAK,CAAC,SAAS,CACb,WAAuD,EACvD,OAA0B,EAC1B,OAA0B;QAE1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,OAEzB,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,MAAM,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjD,MAAM,IAAI,4BAAmB,CAC3B,8CAA8C,CAC/C,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,KAAK,CAAC,SAAS,CAC1B,WAAW,EACX,IAAyB,EACzB,OAAO,CACR,CAAC;IACJ,CAAC;IAKD,mBAAmB,CACjB,KAAc,EACd,WAA6C;QAE7C,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,OAAC,CAAC,cAAc,CACvB,WAAqD,CACtD,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,4BAAmB,CAAC;gBAC5B,GAAG,IAAI,CAAC,6BAA6B;gBACrC,OAAO,EAAE,EAAE,MAAM,EAAE,qCAAqC,EAAE;aAC3D,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,4BAAmB,CAAC;gBAC5B,GAAG,IAAI,CAAC,6BAA6B;gBACrC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QAED,IACE,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ;YACnC,UAAU,CAAC,IAAI,KAAK,IAAI;YACxB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAC9B,CAAC;YACD,MAAM,IAAI,4BAAmB,CAAC;gBAC5B,GAAG,IAAI,CAAC,6BAA6B;gBACrC,OAAO,EAAE;oBACP,KAAK,EAAE,0DAA0D;iBAClE;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC,IAA+B,CAAC;IACpD,CAAC;IAWK,AAAN,KAAK,CAAC,SAAS,CACA,GAAkB,EAClB,GAAmB;QAEhC,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAClD,GAAG,EACH,gBAAI,CAAC,QAAQ,EACb,UAAU,CACX,CAAC;YAEF,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;YAC/C,MAAM,IAAI,qCAA4B,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,aAA2B,EAC3B,OAAiD;QAEjD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAErB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAEvC,OAAO;QACT,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAErD,OAAO;QACT,CAAC;QACD,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC;QAClE,IACE,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,WAAW;YACZ,OAAO,UAAU,KAAK,QAAQ;YAC9B,CAAC,UAAU,EACX,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,yDAAyD,CAC1D,CAAC;YAEF,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAE1C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;YAClC,GAAG,OAAO;YACV,CAAC;YACD,UAAU;YACV,WAAW;YACX,QAAQ,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC7D,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SAClD,CAAC,CAAC;IACL,CAAC;IAGK,AAAN,KAAK,CAAC,iBAAiB,CAAC,OAAiD;QACvE,MAAM,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAGK,AAAN,KAAK,CAAC,kBAAkB,CAAC,OAAiD;QACxE,MAAM,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAGK,AAAN,KAAK,CAAC,mBAAmB,CAAC,OAAiD;QACzE,MAAM,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAGK,AAAN,KAAK,CAAC,qBAAqB,CACzB,OAAiD;QAEjD,MAAM,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAGK,AAAN,KAAK,CAAC,yBAAyB,CAC7B,OAAiD;QAEjD,MAAM,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAGK,AAAN,KAAK,CAAC,uBAAuB,CAC3B,OAAiD;QAEjD,MAAM,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAGK,AAAN,KAAK,CAAC,qBAAqB,CACzB,OAAiD;QAEjD,MAAM,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;CACF,CAAA;AApPY,0CAAe;AAqIpB;IAFL,IAAA,qBAAS,EAAC,sBAAsB,CAAC;IACjC,IAAA,sBAAU,EAAC,sBAAsB,CAAC;IAEhC,WAAA,IAAA,qBAAS,GAAE,CAAA;IACX,WAAA,IAAA,qBAAS,GAAE,CAAA;;qCADM,yBAAa;QACb,0BAAc;;gDAiBjC;AAmDK;IADL,IAAA,uBAAO,EAAC,qBAAqB,CAAC;;;;wDAG9B;AAGK;IADL,IAAA,uBAAO,EAAC,sBAAsB,CAAC;;;;yDAG/B;AAGK;IADL,IAAA,uBAAO,EAAC,uBAAuB,CAAC;;;;0DAGhC;AAGK;IADL,IAAA,uBAAO,EAAC,iBAAiB,CAAC;;;;4DAK1B;AAGK;IADL,IAAA,uBAAO,EAAC,qBAAqB,CAAC;;;;gEAK9B;AAGK;IADL,IAAA,uBAAO,EAAC,mBAAmB,CAAC;;;;8DAK5B;AAGK;IADL,IAAA,uBAAO,EAAC,iBAAiB,CAAC;;;;4DAK1B;0BAnPU,eAAe;IAD3B,IAAA,mBAAU,GAAE;qCAcY,wCAAkB;QACb,4BAAgB;QACL,yCAAkB;GAf9C,eAAe,CAoP3B"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hexabot-ai/api",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "3.2.2-alpha.
|
|
4
|
+
"version": "3.2.2-alpha.15",
|
|
5
5
|
"description": "Hexabot is a solution for creating and managing chatbots across multiple channels, leveraging AI for advanced conversational capabilities. It provides a user-friendly interface for building, training, and deploying chatbots with integrated support for various messaging platforms.",
|
|
6
6
|
"author": "Hexastack",
|
|
7
7
|
"license": "FCL-1.0-ALv2",
|
|
@@ -92,8 +92,8 @@
|
|
|
92
92
|
"typeorm": "^0.3.28",
|
|
93
93
|
"yaml": "^2.8.3",
|
|
94
94
|
"zod": "^4.3.6",
|
|
95
|
-
"@hexabot-ai/agentic": "3.1.2-alpha.
|
|
96
|
-
"@hexabot-ai/types": "3.0.2-alpha.
|
|
95
|
+
"@hexabot-ai/agentic": "3.1.2-alpha.15",
|
|
96
|
+
"@hexabot-ai/types": "3.0.2-alpha.15"
|
|
97
97
|
},
|
|
98
98
|
"devDependencies": {
|
|
99
99
|
"@compodoc/compodoc": "^1.1.31",
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
"tsconfig-paths": "^4.2.0",
|
|
145
145
|
"tsconfig-paths-jest": "^0.0.1",
|
|
146
146
|
"typescript": "^5.1.3",
|
|
147
|
-
"@hexabot-ai/frontend": "3.2.2-alpha.
|
|
147
|
+
"@hexabot-ai/frontend": "3.2.2-alpha.15"
|
|
148
148
|
},
|
|
149
149
|
"optionalDependencies": {
|
|
150
150
|
"@css-inline/css-inline-linux-arm64-musl": "^0.14.1",
|
package/src/mcp/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This module exposes Hexabot API capabilities through the Model Context Protocol
|
|
4
4
|
(MCP) so coding agents can inspect and manage workflows, workflow runs, memory
|
|
5
|
-
definitions, actions, credentials, and CMS content.
|
|
5
|
+
definitions, actions, credentials, MCP servers, and CMS content.
|
|
6
6
|
|
|
7
7
|
The implementation uses `@rekog/mcp-nest` with Streamable HTTP transport.
|
|
8
8
|
Authentication is Hexabot-native: users create personal MCP bearer tokens from
|
|
@@ -145,15 +145,24 @@ client, but the effective configuration should be equivalent to:
|
|
|
145
145
|
| --- | --- | --- |
|
|
146
146
|
| `hexabot_workflow_search` | `workflow:read` | Search workflows by metadata. |
|
|
147
147
|
| `hexabot_workflow_get` | `workflow:read` | Read one workflow with populated version metadata. |
|
|
148
|
+
| `hexabot_workflow_version_status` | `workflow:read` | Check current and published version pointers for one workflow. |
|
|
148
149
|
| `hexabot_workflow_create` | `workflow:create` | Create a workflow and optionally commit initial YAML. |
|
|
149
150
|
| `hexabot_workflow_update` | `workflow:update` | Update workflow metadata and optionally commit YAML. |
|
|
151
|
+
| `hexabot_workflow_yaml_validate` | `workflow:read` | Validate workflow definition YAML without creating a version. |
|
|
150
152
|
| `hexabot_workflow_yaml_commit` | `workflowversion:create` | Validate and commit workflow definition YAML. |
|
|
153
|
+
| `hexabot_workflow_rollback` | `workflowversion:create` | Roll back to a previous version by creating a new restore snapshot. |
|
|
151
154
|
| `hexabot_workflow_publish` | `workflow:update` | Publish the current workflow version. |
|
|
152
155
|
| `hexabot_workflow_unpublish` | `workflow:update` | Clear the published workflow version. |
|
|
153
156
|
| `hexabot_workflow_run` | `workflowrun:create` | Run a manual or scheduled workflow and return the run summary. |
|
|
154
157
|
|
|
155
158
|
Workflow YAML is validated with `parseWorkflowDefinition()` before a version is
|
|
156
|
-
created.
|
|
159
|
+
created. Coding agents can call `hexabot_workflow_yaml_validate` first to get
|
|
160
|
+
structured validation errors without mutating workflow state. Commits inherit
|
|
161
|
+
the workflow's current version as their parent unless `parentVersion` is
|
|
162
|
+
explicitly supplied. `hexabot_workflow_rollback` and
|
|
163
|
+
`hexabot_workflow_version_restore` both create a new current restore snapshot;
|
|
164
|
+
publish that snapshot with `hexabot_workflow_publish` when it should become the
|
|
165
|
+
published version.
|
|
157
166
|
|
|
158
167
|
### Workflow versions and runs
|
|
159
168
|
|
|
@@ -165,6 +174,7 @@ created.
|
|
|
165
174
|
| `hexabot_workflow_version_restore` | `workflowversion:create` | Restore a previous version by creating a new snapshot. |
|
|
166
175
|
| `hexabot_workflow_run_search` | `workflowrun:read` | Search workflow runs by workflow and status. |
|
|
167
176
|
| `hexabot_workflow_run_get` | `workflowrun:read` | Read one workflow run with populated workflow metadata. |
|
|
177
|
+
| `hexabot_workflow_run_debug` | `workflowrun:read` | Inspect one workflow run with execution state, workflow YAML, and parent/child run context for troubleshooting. |
|
|
168
178
|
|
|
169
179
|
### Memory definitions
|
|
170
180
|
|
|
@@ -195,6 +205,15 @@ Credential secret values are never returned. The MCP tools remove the `value`
|
|
|
195
205
|
field from all credential responses and do not support searching by secret
|
|
196
206
|
value.
|
|
197
207
|
|
|
208
|
+
### MCP servers
|
|
209
|
+
|
|
210
|
+
| Tool | Permission | Purpose |
|
|
211
|
+
| --- | --- | --- |
|
|
212
|
+
| `hexabot_mcp_server_search` | `mcpserver:read` | Search configured MCP servers. |
|
|
213
|
+
| `hexabot_mcp_server_get` | `mcpserver:read` | Read one configured MCP server. |
|
|
214
|
+
| `hexabot_mcp_server_create` | `mcpserver:create` | Create an MCP server configuration. |
|
|
215
|
+
| `hexabot_mcp_server_update` | `mcpserver:update` | Update an MCP server configuration. |
|
|
216
|
+
|
|
198
217
|
### CMS and RAG content
|
|
199
218
|
|
|
200
219
|
| Tool | Permission | Purpose |
|
|
@@ -211,7 +230,9 @@ value.
|
|
|
211
230
|
|
|
212
231
|
## Extending the MCP module
|
|
213
232
|
|
|
214
|
-
Add new tools in `tools
|
|
233
|
+
Add new tools in the focused provider file under `tools/` that matches the
|
|
234
|
+
domain, or create a new `*-mcp.tools.ts` provider when the domain is new. Export
|
|
235
|
+
and register new providers through `tools/index.ts`.
|
|
215
236
|
|
|
216
237
|
Each tool should:
|
|
217
238
|
|
|
@@ -23,7 +23,7 @@ import { HexabotMcpTokenGuard } from './guards/hexabot-mcp-token.guard';
|
|
|
23
23
|
import { McpPermissionGuard } from './guards/mcp-permission.guard';
|
|
24
24
|
import { McpTokenRepository } from './repositories/mcp-token.repository';
|
|
25
25
|
import { McpTokenService } from './services/mcp-token.service';
|
|
26
|
-
import {
|
|
26
|
+
import { HEXABOT_MCP_TOOL_PROVIDERS } from './tools';
|
|
27
27
|
|
|
28
28
|
@Module({
|
|
29
29
|
imports: [
|
|
@@ -54,7 +54,7 @@ import { HexabotMcpTools } from './tools/hexabot-mcp.tools';
|
|
|
54
54
|
McpPermissionGuard,
|
|
55
55
|
McpTokenRepository,
|
|
56
56
|
McpTokenService,
|
|
57
|
-
|
|
57
|
+
...HEXABOT_MCP_TOOL_PROVIDERS,
|
|
58
58
|
],
|
|
59
59
|
controllers: [McpTokenController],
|
|
60
60
|
})
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Hexabot — Fair Core License (FCL-1.0-ALv2)
|
|
3
|
+
* Copyright (c) 2026 Hexastack.
|
|
4
|
+
* Full terms: see LICENSE.md.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Action } from '@hexabot-ai/types';
|
|
8
|
+
import { Injectable, NotFoundException } from '@nestjs/common';
|
|
9
|
+
import { Tool, ToolGuards } from '@rekog/mcp-nest';
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
|
|
12
|
+
import { ActionService } from '@/actions/actions.service';
|
|
13
|
+
import { RuntimeBindingsService } from '@/bindings/runtime-bindings.service';
|
|
14
|
+
import { WorkflowType } from '@/workflow/types';
|
|
15
|
+
|
|
16
|
+
import { McpPermission } from '../decorators/mcp-permission.decorator';
|
|
17
|
+
import { McpPermissionGuard } from '../guards/mcp-permission.guard';
|
|
18
|
+
|
|
19
|
+
@Injectable()
|
|
20
|
+
export class HexabotCatalogMcpTools {
|
|
21
|
+
constructor(
|
|
22
|
+
private readonly actionService: ActionService,
|
|
23
|
+
private readonly runtimeBindingsService: RuntimeBindingsService,
|
|
24
|
+
) {}
|
|
25
|
+
|
|
26
|
+
@McpPermission('workflow', Action.READ)
|
|
27
|
+
@ToolGuards([McpPermissionGuard])
|
|
28
|
+
@Tool({
|
|
29
|
+
name: 'hexabot_action_search',
|
|
30
|
+
description: 'Search available workflow actions and their schemas.',
|
|
31
|
+
parameters: z.object({
|
|
32
|
+
query: z.string().optional(),
|
|
33
|
+
workflowType: z.enum(WorkflowType).optional(),
|
|
34
|
+
}),
|
|
35
|
+
})
|
|
36
|
+
async searchActions(args: { query?: string; workflowType?: WorkflowType }) {
|
|
37
|
+
const query = args.query?.toLowerCase();
|
|
38
|
+
const actions = this.actionService.getAllSchemaDefinitions(
|
|
39
|
+
args.workflowType,
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
items: query
|
|
44
|
+
? actions.filter((action) =>
|
|
45
|
+
[
|
|
46
|
+
action.name,
|
|
47
|
+
action.description,
|
|
48
|
+
action.group,
|
|
49
|
+
...(action.workflowTypes ?? []),
|
|
50
|
+
]
|
|
51
|
+
.filter(Boolean)
|
|
52
|
+
.some((value) => `${value}`.toLowerCase().includes(query)),
|
|
53
|
+
)
|
|
54
|
+
: actions,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@McpPermission('workflow', Action.READ)
|
|
59
|
+
@ToolGuards([McpPermissionGuard])
|
|
60
|
+
@Tool({
|
|
61
|
+
name: 'hexabot_action_get',
|
|
62
|
+
description: 'Read schema metadata for one workflow action.',
|
|
63
|
+
parameters: z.object({
|
|
64
|
+
name: z.string().min(1),
|
|
65
|
+
}),
|
|
66
|
+
})
|
|
67
|
+
async getAction(args: { name: string }) {
|
|
68
|
+
const action = this.actionService
|
|
69
|
+
.getAllSchemaDefinitions()
|
|
70
|
+
.find((entry) => entry.name === args.name);
|
|
71
|
+
if (!action) {
|
|
72
|
+
throw new NotFoundException(`Action ${args.name} not found`);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return action;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@McpPermission('workflow', Action.READ)
|
|
79
|
+
@ToolGuards([McpPermissionGuard])
|
|
80
|
+
@Tool({
|
|
81
|
+
name: 'hexabot_binding_search',
|
|
82
|
+
description: 'Search workflow runtime binding kind schemas.',
|
|
83
|
+
parameters: z.object({
|
|
84
|
+
query: z.string().optional(),
|
|
85
|
+
}),
|
|
86
|
+
})
|
|
87
|
+
async searchBindings(args: { query?: string }) {
|
|
88
|
+
const query = args.query?.toLowerCase();
|
|
89
|
+
const entries = Object.entries(
|
|
90
|
+
this.runtimeBindingsService.getAllSchemaDefinitions(),
|
|
91
|
+
).map(([kind, definition]) => ({ kind, ...definition }));
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
items: query
|
|
95
|
+
? entries.filter((entry) =>
|
|
96
|
+
[entry.kind, entry.icon, entry.color]
|
|
97
|
+
.filter(Boolean)
|
|
98
|
+
.some((value) => `${value}`.toLowerCase().includes(query)),
|
|
99
|
+
)
|
|
100
|
+
: entries,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@McpPermission('workflow', Action.READ)
|
|
105
|
+
@ToolGuards([McpPermissionGuard])
|
|
106
|
+
@Tool({
|
|
107
|
+
name: 'hexabot_binding_get',
|
|
108
|
+
description: 'Read schema metadata for one workflow runtime binding kind.',
|
|
109
|
+
parameters: z.object({
|
|
110
|
+
kind: z.string().min(1),
|
|
111
|
+
}),
|
|
112
|
+
})
|
|
113
|
+
async getBinding(args: { kind: string }) {
|
|
114
|
+
const bindings = this.runtimeBindingsService.getAllSchemaDefinitions();
|
|
115
|
+
const binding = bindings[args.kind];
|
|
116
|
+
if (!binding) {
|
|
117
|
+
throw new NotFoundException(`Binding kind ${args.kind} not found`);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return { kind: args.kind, ...binding };
|
|
121
|
+
}
|
|
122
|
+
}
|