@hexabot-ai/api 3.2.2-alpha.10 → 3.2.2-alpha.11
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/actions/actions.service.d.ts +1 -0
- package/dist/actions/actions.service.js +19 -1
- package/dist/actions/actions.service.js.map +1 -1
- package/dist/app.module.js +2 -0
- package/dist/app.module.js.map +1 -1
- package/dist/extensions/actions/ai/mcp.binding.js +2 -0
- package/dist/extensions/actions/ai/mcp.binding.js.map +1 -1
- package/dist/extensions/actions/ai/memory.binding.js +2 -0
- package/dist/extensions/actions/ai/memory.binding.js.map +1 -1
- package/dist/extensions/actions/ai/retrieve-content-rag.action.js +2 -0
- package/dist/extensions/actions/ai/retrieve-content-rag.action.js.map +1 -1
- package/dist/extensions/actions/messaging/list.action.d.ts +2 -2
- package/dist/extensions/actions/messaging/list.action.js +7 -0
- package/dist/extensions/actions/messaging/list.action.js.map +1 -1
- package/dist/extensions/actions/subscriber/update-labels.action.js +3 -0
- package/dist/extensions/actions/subscriber/update-labels.action.js.map +1 -1
- package/dist/extensions/actions/workflow/call-workflow.action.d.ts +19 -0
- package/dist/extensions/actions/workflow/call-workflow.action.js +83 -0
- package/dist/extensions/actions/workflow/call-workflow.action.js.map +1 -0
- package/dist/extensions/actions/workflow/i18n/en.translations.json +9 -0
- package/dist/extensions/actions/workflow/i18n/fr.translations.json +9 -0
- package/dist/extensions/index.d.ts +1 -0
- package/dist/extensions/index.js +1 -0
- package/dist/extensions/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/tools/hexabot-mcp.tools.d.ts +58 -0
- package/dist/static/assets/{browser-ponyfill-DN-Mu1Dr.js → browser-ponyfill-C573gsYp.js} +1 -1
- package/dist/static/assets/{cssMode-BCWxI_Ux.js → cssMode-Dl3j1m5K.js} +1 -1
- package/dist/static/assets/{freemarker2-CFvevPey.js → freemarker2-BC7MYUau.js} +1 -1
- package/dist/static/assets/{handlebars-BCStA9Eg.js → handlebars-DF9DBgjd.js} +1 -1
- package/dist/static/assets/{html-DkIwCA7q.js → html-CbBSWv6-.js} +1 -1
- package/dist/static/assets/{htmlMode-DHeMkUp8.js → htmlMode-BUAbNnKS.js} +1 -1
- package/dist/static/assets/{index-C6VeVxYx.js → index-DwNnhpf5.js} +2103 -2103
- package/dist/static/assets/{javascript-DLPKJzLc.js → javascript-BG37perB.js} +1 -1
- package/dist/static/assets/{jsonMode-BUIDFK3O.js → jsonMode-CTS3-YZB.js} +1 -1
- package/dist/static/assets/{liquid-B0XmwdKh.js → liquid-LhmqJOdD.js} +1 -1
- package/dist/static/assets/{lspLanguageFeatures-Fcpw3Ev_.js → lspLanguageFeatures-BRCtbLBB.js} +1 -1
- package/dist/static/assets/{mdx-DmJKi-dU.js → mdx-DETvz3oa.js} +1 -1
- package/dist/static/assets/{python-B1WnWY4I.js → python-F6lZ-u5p.js} +1 -1
- package/dist/static/assets/{razor-CL2s-6qt.js → razor-PKvkfOLq.js} +1 -1
- package/dist/static/assets/{tsMode-DSFhDcf0.js → tsMode-BpTc9xsq.js} +1 -1
- package/dist/static/assets/{typescript-CmHv7Jwl.js → typescript-chpcHZSI.js} +1 -1
- package/dist/static/assets/{xml-Cyy6zXDM.js → xml-CZLk_iMt.js} +1 -1
- package/dist/static/assets/{yaml-D_D6TAHE.js → yaml-D6hLCygP.js} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/static/locales/en/translation.json +7 -1
- package/dist/static/locales/fr/translation.json +8 -2
- package/dist/transfer/adapters/content-type-transfer.adapter.d.ts +14 -0
- package/dist/transfer/adapters/content-type-transfer.adapter.js +102 -0
- package/dist/transfer/adapters/content-type-transfer.adapter.js.map +1 -0
- package/dist/transfer/adapters/credential-transfer.adapter.d.ts +13 -0
- package/dist/transfer/adapters/credential-transfer.adapter.js +110 -0
- package/dist/transfer/adapters/credential-transfer.adapter.js.map +1 -0
- package/dist/transfer/adapters/label-transfer.adapter.d.ts +15 -0
- package/dist/transfer/adapters/label-transfer.adapter.js +189 -0
- package/dist/transfer/adapters/label-transfer.adapter.js.map +1 -0
- package/dist/transfer/adapters/mcp-server-transfer.adapter.d.ts +16 -0
- package/dist/transfer/adapters/mcp-server-transfer.adapter.js +169 -0
- package/dist/transfer/adapters/mcp-server-transfer.adapter.js.map +1 -0
- package/dist/transfer/adapters/memory-definition-transfer.adapter.d.ts +14 -0
- package/dist/transfer/adapters/memory-definition-transfer.adapter.js +111 -0
- package/dist/transfer/adapters/memory-definition-transfer.adapter.js.map +1 -0
- package/dist/transfer/index.d.ts +7 -0
- package/dist/transfer/index.js +24 -0
- package/dist/transfer/index.js.map +1 -0
- package/dist/transfer/workflow-transfer-adapter.registry.d.ts +27 -0
- package/dist/transfer/workflow-transfer-adapter.registry.js +164 -0
- package/dist/transfer/workflow-transfer-adapter.registry.js.map +1 -0
- package/dist/transfer/workflow-transfer-definition.service.d.ts +40 -0
- package/dist/transfer/workflow-transfer-definition.service.js +353 -0
- package/dist/transfer/workflow-transfer-definition.service.js.map +1 -0
- package/dist/transfer/workflow-transfer-resource-adapter.d.ts +33 -0
- package/dist/transfer/workflow-transfer-resource-adapter.js +81 -0
- package/dist/transfer/workflow-transfer-resource-adapter.js.map +1 -0
- package/dist/transfer/workflow-transfer.controller.d.ts +9 -0
- package/dist/transfer/workflow-transfer.controller.js +63 -0
- package/dist/transfer/workflow-transfer.controller.js.map +1 -0
- package/dist/transfer/workflow-transfer.module.d.ts +2 -0
- package/dist/transfer/workflow-transfer.module.js +47 -0
- package/dist/transfer/workflow-transfer.module.js.map +1 -0
- package/dist/transfer/workflow-transfer.service.d.ts +51 -0
- package/dist/transfer/workflow-transfer.service.js +509 -0
- package/dist/transfer/workflow-transfer.service.js.map +1 -0
- package/dist/transfer/workflow-transfer.types.d.ts +31 -0
- package/dist/transfer/workflow-transfer.types.js +35 -0
- package/dist/transfer/workflow-transfer.types.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/user/dto/user.dto.d.ts +1 -1
- package/dist/utils/test/fixtures/label-group.d.ts +1 -1
- package/dist/utils/test/fixtures/label.d.ts +1 -1
- package/dist/utils/test/fixtures/subscriber.d.ts +1 -1
- package/dist/utils/test/fixtures/workflow-run.js +4 -1
- package/dist/utils/test/fixtures/workflow-run.js.map +1 -1
- package/dist/workflow/contexts/workflow-runtime.context.d.ts +3 -1
- package/dist/workflow/contexts/workflow-runtime.context.js +5 -0
- package/dist/workflow/contexts/workflow-runtime.context.js.map +1 -1
- package/dist/workflow/controllers/workflow-run.controller.js +2 -0
- package/dist/workflow/controllers/workflow-run.controller.js.map +1 -1
- package/dist/workflow/dto/workflow-run.dto.d.ts +1 -0
- package/dist/workflow/dto/workflow-run.dto.js +11 -0
- package/dist/workflow/dto/workflow-run.dto.js.map +1 -1
- package/dist/workflow/entities/memory-record.entity.d.ts +2 -0
- package/dist/workflow/entities/workflow-run.entity.d.ts +62 -0
- package/dist/workflow/entities/workflow-run.entity.js +15 -1
- package/dist/workflow/entities/workflow-run.entity.js.map +1 -1
- package/dist/workflow/index.d.ts +7 -0
- package/dist/workflow/index.js +7 -0
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/repositories/workflow-run.repository.js +7 -1
- package/dist/workflow/repositories/workflow-run.repository.js.map +1 -1
- package/dist/workflow/resource-refs.d.ts +17 -0
- package/dist/workflow/resource-refs.js +15 -0
- package/dist/workflow/resource-refs.js.map +1 -0
- package/dist/workflow/services/agentic.service.d.ts +7 -1
- package/dist/workflow/services/agentic.service.js +134 -16
- package/dist/workflow/services/agentic.service.js.map +1 -1
- package/dist/workflow/services/workflow-run.service.d.ts +3 -0
- package/dist/workflow/services/workflow-run.service.js +75 -3
- package/dist/workflow/services/workflow-run.service.js.map +1 -1
- package/dist/workflow/services/workflow-version.service.d.ts +2 -0
- package/dist/workflow/services/workflow-version.service.js +19 -0
- package/dist/workflow/services/workflow-version.service.js.map +1 -1
- package/dist/workflow/services/workflow.service.d.ts +3 -1
- package/dist/workflow/services/workflow.service.js +5 -0
- package/dist/workflow/services/workflow.service.js.map +1 -1
- package/dist/workflow/types.d.ts +31 -0
- package/dist/workflow/types.js +2 -1
- package/dist/workflow/types.js.map +1 -1
- package/dist/workflow/workflow.module.js +3 -0
- package/dist/workflow/workflow.module.js.map +1 -1
- package/package.json +4 -4
- package/src/actions/actions.service.ts +34 -4
- package/src/app.module.ts +2 -0
- package/src/extensions/actions/ai/mcp.binding.ts +2 -0
- package/src/extensions/actions/ai/memory.binding.ts +2 -0
- package/src/extensions/actions/ai/retrieve-content-rag.action.ts +2 -0
- package/src/extensions/actions/messaging/list.action.ts +7 -0
- package/src/extensions/actions/subscriber/update-labels.action.ts +3 -0
- package/src/extensions/actions/workflow/call-workflow.action.ts +112 -0
- package/src/extensions/actions/workflow/i18n/en.translations.json +9 -0
- package/src/extensions/actions/workflow/i18n/fr.translations.json +9 -0
- package/src/extensions/index.ts +2 -0
- package/src/index.ts +2 -0
- package/src/transfer/adapters/content-type-transfer.adapter.ts +154 -0
- package/src/transfer/adapters/credential-transfer.adapter.ts +158 -0
- package/src/transfer/adapters/label-transfer.adapter.ts +291 -0
- package/src/transfer/adapters/mcp-server-transfer.adapter.ts +255 -0
- package/src/transfer/adapters/memory-definition-transfer.adapter.ts +167 -0
- package/src/transfer/index.ts +19 -0
- package/src/transfer/workflow-transfer-adapter.registry.ts +250 -0
- package/src/transfer/workflow-transfer-definition.service.ts +587 -0
- package/src/transfer/workflow-transfer-resource-adapter.ts +132 -0
- package/src/transfer/workflow-transfer.controller.ts +86 -0
- package/src/transfer/workflow-transfer.module.ts +46 -0
- package/src/transfer/workflow-transfer.service.ts +858 -0
- package/src/transfer/workflow-transfer.types.ts +98 -0
- package/src/utils/test/fixtures/workflow-run.ts +4 -1
- package/src/workflow/contexts/workflow-runtime.context.ts +12 -1
- package/src/workflow/controllers/workflow-run.controller.ts +2 -0
- package/src/workflow/dto/workflow-run.dto.ts +10 -0
- package/src/workflow/entities/workflow-run.entity.ts +22 -1
- package/src/workflow/index.ts +14 -0
- package/src/workflow/repositories/workflow-run.repository.ts +7 -1
- package/src/workflow/resource-refs.ts +44 -0
- package/src/workflow/services/agentic.service.ts +256 -26
- package/src/workflow/services/workflow-run.service.ts +120 -7
- package/src/workflow/services/workflow-version.service.ts +33 -0
- package/src/workflow/services/workflow.service.ts +21 -1
- package/src/workflow/types.ts +52 -0
- package/src/workflow/workflow.module.ts +3 -0
package/dist/workflow/types.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WorkflowVersionAction = exports.WorkflowType = exports.MemoryScope = exports.McpServerTransport = exports.DirectionType = void 0;
|
|
3
|
+
exports.WORKFLOW_CALL_SERVICE = exports.WorkflowVersionAction = exports.WorkflowType = exports.MemoryScope = exports.McpServerTransport = exports.DirectionType = void 0;
|
|
4
4
|
const types_1 = require("@hexabot-ai/types");
|
|
5
5
|
Object.defineProperty(exports, "DirectionType", { enumerable: true, get: function () { return types_1.DirectionType; } });
|
|
6
6
|
Object.defineProperty(exports, "McpServerTransport", { enumerable: true, get: function () { return types_1.McpServerTransport; } });
|
|
7
7
|
Object.defineProperty(exports, "MemoryScope", { enumerable: true, get: function () { return types_1.MemoryScope; } });
|
|
8
8
|
Object.defineProperty(exports, "WorkflowType", { enumerable: true, get: function () { return types_1.WorkflowType; } });
|
|
9
9
|
Object.defineProperty(exports, "WorkflowVersionAction", { enumerable: true, get: function () { return types_1.WorkflowVersionAction; } });
|
|
10
|
+
exports.WORKFLOW_CALL_SERVICE = Symbol('WORKFLOW_CALL_SERVICE');
|
|
10
11
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/workflow/types.ts"],"names":[],"mappings":";;;AAYA,6CAS2B;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/workflow/types.ts"],"names":[],"mappings":";;;AAYA,6CAS2B;AAOzB,8FAfA,qBAAa,OAeA;AACb,mGAfA,0BAAkB,OAeA;AAClB,4FAfA,mBAAW,OAeA;AACX,6FAfA,oBAAY,OAeA;AACZ,sGAfA,6BAAqB,OAeA;AAkDV,QAAA,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC"}
|
|
@@ -47,6 +47,7 @@ const workflow_run_service_1 = require("./services/workflow-run.service");
|
|
|
47
47
|
const workflow_scheduler_service_1 = require("./services/workflow-scheduler.service");
|
|
48
48
|
const workflow_version_service_1 = require("./services/workflow-version.service");
|
|
49
49
|
const workflow_service_1 = require("./services/workflow.service");
|
|
50
|
+
const types_1 = require("./types");
|
|
50
51
|
let WorkflowModule = class WorkflowModule {
|
|
51
52
|
};
|
|
52
53
|
exports.WorkflowModule = WorkflowModule;
|
|
@@ -97,6 +98,7 @@ exports.WorkflowModule = WorkflowModule = __decorate([
|
|
|
97
98
|
scheduled_workflow_context_1.ScheduledWorkflowContext,
|
|
98
99
|
workflow_context_factory_1.WorkflowContextFactory,
|
|
99
100
|
agentic_service_1.AgenticService,
|
|
101
|
+
{ provide: types_1.WORKFLOW_CALL_SERVICE, useExisting: agentic_service_1.AgenticService },
|
|
100
102
|
],
|
|
101
103
|
exports: [
|
|
102
104
|
workflow_repository_1.WorkflowRepository,
|
|
@@ -115,6 +117,7 @@ exports.WorkflowModule = WorkflowModule = __decorate([
|
|
|
115
117
|
mcp_client_pool_service_1.McpClientPoolService,
|
|
116
118
|
conversational_workflow_context_1.ConversationalWorkflowContext,
|
|
117
119
|
agentic_service_1.AgenticService,
|
|
120
|
+
types_1.WORKFLOW_CALL_SERVICE,
|
|
118
121
|
],
|
|
119
122
|
})
|
|
120
123
|
], WorkflowModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.module.js","sourceRoot":"","sources":["../../src/workflow/workflow.module.ts"],"names":[],"mappings":";;;;;;;;;AAMA,2CAAoD;AACpD,+CAAqD;AACrD,6CAAgD;AAEhD,qDAAgD;AAChD,kEAAgE;AAChE,kDAA6C;AAC7C,qDAAgD;AAEhD,gGAA2F;AAC3F,gFAA2E;AAC3E,sFAAiF;AACjF,kFAA6E;AAC7E,+EAA0E;AAC1E,6FAAwF;AACxF,mFAA8E;AAC9E,2FAAsF;AACtF,2EAAuE;AACvE,oEAAkE;AAClE,kFAAgF;AAChF,0EAAwE;AACxE,wEAAsE;AACtE,gFAA8E;AAC9E,gEAA+D;AAC/D,gFAA2E;AAC3E,8FAAyF;AACzF,sFAAiF;AACjF,oFAA+E;AAC/E,4FAAuF;AACvF,4EAAwE;AACxE,2EAAwE;AACxE,yDAAuD;AACvD,gEAA4D;AAC5D,gFAA0E;AAC1E,sEAAiE;AACjE,oFAA+E;AAC/E,4EAAuE;AACvE,8DAA0D;AAC1D,0EAAqE;AACrE,sFAAiF;AACjF,kFAA6E;AAC7E,kEAA8D;
|
|
1
|
+
{"version":3,"file":"workflow.module.js","sourceRoot":"","sources":["../../src/workflow/workflow.module.ts"],"names":[],"mappings":";;;;;;;;;AAMA,2CAAoD;AACpD,+CAAqD;AACrD,6CAAgD;AAEhD,qDAAgD;AAChD,kEAAgE;AAChE,kDAA6C;AAC7C,qDAAgD;AAEhD,gGAA2F;AAC3F,gFAA2E;AAC3E,sFAAiF;AACjF,kFAA6E;AAC7E,+EAA0E;AAC1E,6FAAwF;AACxF,mFAA8E;AAC9E,2FAAsF;AACtF,2EAAuE;AACvE,oEAAkE;AAClE,kFAAgF;AAChF,0EAAwE;AACxE,wEAAsE;AACtE,gFAA8E;AAC9E,gEAA+D;AAC/D,gFAA2E;AAC3E,8FAAyF;AACzF,sFAAiF;AACjF,oFAA+E;AAC/E,4FAAuF;AACvF,4EAAwE;AACxE,2EAAwE;AACxE,yDAAuD;AACvD,gEAA4D;AAC5D,gFAA0E;AAC1E,sEAAiE;AACjE,oFAA+E;AAC/E,4EAAuE;AACvE,8DAA0D;AAC1D,0EAAqE;AACrE,sFAAiF;AACjF,kFAA6E;AAC7E,kEAA8D;AAC9D,mCAAgD;AAsEzC,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IApE1B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC;gBACvB,mCAAiB;gBACjB,kDAAwB;gBACxB,0CAAoB;gBACpB,oDAAyB;gBACzB,4CAAqB;gBACrB,sCAAkB;gBAClB,+BAAe;aAChB,CAAC;YACF,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,sBAAS,CAAC;YAC3B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;YAC5B,wBAAU;SACX;QACD,WAAW,EAAE;YACX,wCAAkB;YAClB,uDAAyB;YACzB,+CAAqB;YACrB,yDAA0B;YAC1B,2CAAmB;SACpB;QACD,SAAS,EAAE;YACT,wCAAkB;YAClB,uDAAyB;YACzB,+CAAqB;YACrB,yDAA0B;YAC1B,iDAAsB;YACtB,2CAAmB;YACnB,+CAAsB;YACtB,8BAAc;YACd,kCAAe;YACf,iDAAsB;YACtB,yCAAkB;YAClB,mDAAuB;YACvB,2CAAmB;YACnB,8BAAa;YACb,qCAAgB;YAChB,8CAAoB;YACpB,4BAAiB;YACjB,qDAAwB;YACxB,+DAA6B;YAC7B,+CAAqB;YACrB,qDAAwB;YACxB,iDAAsB;YACtB,gCAAc;YACd,EAAE,OAAO,EAAE,6BAAqB,EAAE,WAAW,EAAE,gCAAc,EAAE;SAChE;QACD,OAAO,EAAE;YACP,wCAAkB;YAClB,uDAAyB;YACzB,+CAAqB;YACrB,yDAA0B;YAC1B,iDAAsB;YACtB,2CAAmB;YACnB,kCAAe;YACf,iDAAsB;YACtB,yCAAkB;YAClB,mDAAuB;YACvB,2CAAmB;YACnB,8BAAa;YACb,qCAAgB;YAChB,8CAAoB;YACpB,+DAA6B;YAC7B,gCAAc;YACd,6BAAqB;SACtB;KACF,CAAC;GACW,cAAc,CAAG"}
|
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.11",
|
|
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.11",
|
|
96
|
+
"@hexabot-ai/types": "3.0.2-alpha.11"
|
|
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.11"
|
|
148
148
|
},
|
|
149
149
|
"optionalDependencies": {
|
|
150
150
|
"@css-inline/css-inline-linux-arm64-musl": "^0.14.1",
|
|
@@ -66,6 +66,12 @@ export class ActionService {
|
|
|
66
66
|
const name = action.getName();
|
|
67
67
|
const localizationOptions =
|
|
68
68
|
this.i18nService.getJsonSchemaLocalizationOptions(name, lang);
|
|
69
|
+
const inputSchema = toDraft07JsonSchema(
|
|
70
|
+
action.inputSchema,
|
|
71
|
+
localizationOptions,
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
this.applyActionSchemaContext(inputSchema, name, workflowType);
|
|
69
75
|
|
|
70
76
|
return {
|
|
71
77
|
name,
|
|
@@ -75,10 +81,7 @@ export class ActionService {
|
|
|
75
81
|
group: action.group,
|
|
76
82
|
workflowTypes: action.workflowTypes,
|
|
77
83
|
supportedBindings: action.supportedBindings ?? [],
|
|
78
|
-
inputSchema
|
|
79
|
-
action.inputSchema,
|
|
80
|
-
localizationOptions,
|
|
81
|
-
),
|
|
84
|
+
inputSchema,
|
|
82
85
|
outputSchema: toDraft07JsonSchema(
|
|
83
86
|
action.outputSchema,
|
|
84
87
|
localizationOptions,
|
|
@@ -91,6 +94,33 @@ export class ActionService {
|
|
|
91
94
|
});
|
|
92
95
|
}
|
|
93
96
|
|
|
97
|
+
private applyActionSchemaContext(
|
|
98
|
+
inputSchema: Record<string, any>,
|
|
99
|
+
actionName: string,
|
|
100
|
+
workflowType?: WorkflowType,
|
|
101
|
+
): void {
|
|
102
|
+
if (actionName !== 'call_workflow' || !workflowType) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const workflowIdSchema = inputSchema.properties?.workflow_id;
|
|
107
|
+
if (!workflowIdSchema || typeof workflowIdSchema !== 'object') {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// The same call_workflow action is available to every workflow type, but a
|
|
112
|
+
// specific workflow can only call another workflow with the same trigger
|
|
113
|
+
// type. The catalog endpoint has the active type, so it can scope the UI
|
|
114
|
+
// picker before the action is saved.
|
|
115
|
+
workflowIdSchema['ui:options'] = {
|
|
116
|
+
...(workflowIdSchema['ui:options'] ?? {}),
|
|
117
|
+
where: {
|
|
118
|
+
...(workflowIdSchema['ui:options']?.where ?? {}),
|
|
119
|
+
type: workflowType,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
94
124
|
getRegistry(): Record<
|
|
95
125
|
ActionName,
|
|
96
126
|
BaseAction<any, any, BaseWorkflowContext, any>
|
package/src/app.module.ts
CHANGED
|
@@ -46,6 +46,7 @@ import { LoggerModule } from './logger/logger.module';
|
|
|
46
46
|
import { MailerModule } from './mailer/mailer.module';
|
|
47
47
|
import { MigrationModule } from './migration/migration.module';
|
|
48
48
|
import { SettingModule } from './setting/setting.module';
|
|
49
|
+
import { WorkflowTransferModule } from './transfer/workflow-transfer.module';
|
|
49
50
|
import { Ability } from './user/guards/ability.guard';
|
|
50
51
|
import { UserModule } from './user/user.module';
|
|
51
52
|
import { WebsocketModule } from './websocket/websocket.module';
|
|
@@ -115,6 +116,7 @@ export const HEXABOT_MODULE_IMPORTS: ModuleImports = [
|
|
|
115
116
|
ActionsModule,
|
|
116
117
|
BindingsModule,
|
|
117
118
|
WorkflowModule,
|
|
119
|
+
WorkflowTransferModule,
|
|
118
120
|
HelperModule,
|
|
119
121
|
LoggerModule,
|
|
120
122
|
WebsocketModule,
|
|
@@ -8,6 +8,7 @@ import { BindingKindDescriptor } from '@hexabot-ai/agentic';
|
|
|
8
8
|
import z from 'zod';
|
|
9
9
|
|
|
10
10
|
import { createBindingKind } from '@/bindings/create-binding-kind';
|
|
11
|
+
import { workflowResourceRef } from '@/workflow/resource-refs';
|
|
11
12
|
|
|
12
13
|
export const aiMcpToolBindingSchema = z.strictObject({
|
|
13
14
|
server_id: z.uuid().meta({
|
|
@@ -20,6 +21,7 @@ export const aiMcpToolBindingSchema = z.strictObject({
|
|
|
20
21
|
labelKey: 'name',
|
|
21
22
|
enableEntityAddButton: true,
|
|
22
23
|
},
|
|
24
|
+
...workflowResourceRef('mcpServer'),
|
|
23
25
|
}),
|
|
24
26
|
tool_names: z
|
|
25
27
|
.array(z.string().trim().min(1))
|
|
@@ -8,6 +8,7 @@ import { BindingKindDescriptor } from '@hexabot-ai/agentic';
|
|
|
8
8
|
import z from 'zod';
|
|
9
9
|
|
|
10
10
|
import { createBindingKind } from '@/bindings/create-binding-kind';
|
|
11
|
+
import { workflowResourceRef } from '@/workflow/resource-refs';
|
|
11
12
|
|
|
12
13
|
export const aiMemoryBindingSchema = z.strictObject({
|
|
13
14
|
definition_id: z.uuid().meta({
|
|
@@ -21,6 +22,7 @@ export const aiMemoryBindingSchema = z.strictObject({
|
|
|
21
22
|
labelKey: 'name',
|
|
22
23
|
enableEntityAddButton: true,
|
|
23
24
|
},
|
|
25
|
+
...workflowResourceRef('memoryDefinition'),
|
|
24
26
|
}),
|
|
25
27
|
});
|
|
26
28
|
|
|
@@ -9,6 +9,7 @@ import { z } from 'zod';
|
|
|
9
9
|
import { createAction } from '@/actions/create-action';
|
|
10
10
|
import { RagMode, RagQueryOptions } from '@/cms';
|
|
11
11
|
import { WorkflowRuntimeContext } from '@/workflow/contexts/workflow-runtime.context';
|
|
12
|
+
import { workflowResourceRef } from '@/workflow/resource-refs';
|
|
12
13
|
|
|
13
14
|
const contentRagModeSchema = z.enum(['embedding', 'lexical']);
|
|
14
15
|
const retrieveRagContentInputSchema = z.strictObject({
|
|
@@ -38,6 +39,7 @@ const retrieveRagContentSettingsSchema = z.strictObject({
|
|
|
38
39
|
valueKey: 'id',
|
|
39
40
|
labelKey: 'name',
|
|
40
41
|
},
|
|
42
|
+
...workflowResourceRef('contentType'),
|
|
41
43
|
}),
|
|
42
44
|
include_inactive: z.boolean().default(false).meta({
|
|
43
45
|
title: 'Include inactive',
|
|
@@ -17,6 +17,7 @@ import { ExecArgs } from '@/actions';
|
|
|
17
17
|
import { ActionService } from '@/actions/actions.service';
|
|
18
18
|
import { ContentTypeService } from '@/cms/services/content-type.service';
|
|
19
19
|
import { ConversationalWorkflowContext } from '@/workflow/contexts/conversational-workflow.context';
|
|
20
|
+
import { workflowResourceRef } from '@/workflow/resource-refs';
|
|
20
21
|
|
|
21
22
|
import {
|
|
22
23
|
MessageAction,
|
|
@@ -31,6 +32,12 @@ const listActionInputSchema = z
|
|
|
31
32
|
.extend({
|
|
32
33
|
content: contentOptionsSchema
|
|
33
34
|
.omit({ limit: true })
|
|
35
|
+
.extend({
|
|
36
|
+
contentType: contentOptionsSchema.shape.contentType.meta({
|
|
37
|
+
...contentOptionsSchema.shape.contentType.meta(),
|
|
38
|
+
...workflowResourceRef('contentType'),
|
|
39
|
+
}),
|
|
40
|
+
})
|
|
34
41
|
.default({
|
|
35
42
|
display: 'list',
|
|
36
43
|
buttons: [
|
|
@@ -8,6 +8,7 @@ import { z } from 'zod';
|
|
|
8
8
|
|
|
9
9
|
import { createAction } from '@/actions/create-action';
|
|
10
10
|
import { ConversationalWorkflowContext } from '@/workflow/contexts/conversational-workflow.context';
|
|
11
|
+
import { workflowResourceRef } from '@/workflow/resource-refs';
|
|
11
12
|
import { WorkflowType } from '@/workflow/types';
|
|
12
13
|
|
|
13
14
|
const subscriberUpdateLabelsInputSchema = z
|
|
@@ -24,6 +25,7 @@ const subscriberUpdateLabelsInputSchema = z
|
|
|
24
25
|
valueKey: 'id',
|
|
25
26
|
labelKey: 'title',
|
|
26
27
|
},
|
|
28
|
+
...workflowResourceRef('label'),
|
|
27
29
|
}),
|
|
28
30
|
labels_to_remove: z
|
|
29
31
|
.array(z.uuid())
|
|
@@ -37,6 +39,7 @@ const subscriberUpdateLabelsInputSchema = z
|
|
|
37
39
|
valueKey: 'id',
|
|
38
40
|
labelKey: 'title',
|
|
39
41
|
},
|
|
42
|
+
...workflowResourceRef('label'),
|
|
40
43
|
}),
|
|
41
44
|
})
|
|
42
45
|
.superRefine((input, ctx) => {
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Hexabot — Fair Core License (FCL-1.0-ALv2)
|
|
3
|
+
* Copyright (c) 2025 Hexastack.
|
|
4
|
+
* Full terms: see LICENSE.md.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { JsonValueSchema } from '@hexabot-ai/agentic';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
|
|
10
|
+
import { createAction } from '@/actions/create-action';
|
|
11
|
+
import { WorkflowRuntimeContext } from '@/workflow/contexts/workflow-runtime.context';
|
|
12
|
+
import { workflowResourceRef } from '@/workflow/resource-refs';
|
|
13
|
+
import { CallWorkflowResult } from '@/workflow/types';
|
|
14
|
+
|
|
15
|
+
const callWorkflowInputSchema = z.object({
|
|
16
|
+
workflow_id: z.uuid().meta({
|
|
17
|
+
title: 'Workflow',
|
|
18
|
+
description: 'Workflow to call and wait for before continuing.',
|
|
19
|
+
'ui:widget': 'AutoCompleteWidget',
|
|
20
|
+
'ui:options': {
|
|
21
|
+
entity: 'Workflow',
|
|
22
|
+
valueKey: 'id',
|
|
23
|
+
labelKey: 'name',
|
|
24
|
+
},
|
|
25
|
+
...workflowResourceRef('workflow'),
|
|
26
|
+
}),
|
|
27
|
+
input: z.record(z.string(), JsonValueSchema).optional().meta({
|
|
28
|
+
title: 'Input',
|
|
29
|
+
description:
|
|
30
|
+
'Optional input payload for the called workflow. When omitted, the current trigger input is reused.',
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
33
|
+
const callWorkflowFinishedSchema = z.object({
|
|
34
|
+
status: z.literal('finished'),
|
|
35
|
+
workflow_id: z.uuid(),
|
|
36
|
+
workflow_run_id: z.uuid(),
|
|
37
|
+
output: z.record(z.string(), z.any()),
|
|
38
|
+
});
|
|
39
|
+
const callWorkflowResumeSchema = z.union([
|
|
40
|
+
callWorkflowFinishedSchema,
|
|
41
|
+
z.object({
|
|
42
|
+
status: z.literal('suspended'),
|
|
43
|
+
workflow_id: z.uuid(),
|
|
44
|
+
workflow_run_id: z.uuid(),
|
|
45
|
+
}),
|
|
46
|
+
z.object({
|
|
47
|
+
status: z.literal('failed'),
|
|
48
|
+
workflow_id: z.uuid(),
|
|
49
|
+
workflow_run_id: z.uuid(),
|
|
50
|
+
error: z.string(),
|
|
51
|
+
}),
|
|
52
|
+
]);
|
|
53
|
+
|
|
54
|
+
type CallWorkflowInput = z.infer<typeof callWorkflowInputSchema>;
|
|
55
|
+
type CallWorkflowOutput = z.infer<typeof callWorkflowFinishedSchema>;
|
|
56
|
+
|
|
57
|
+
const assertFinishedResult = (result: CallWorkflowResult) => {
|
|
58
|
+
if (result.status === 'finished') {
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (result.status === 'failed') {
|
|
63
|
+
throw new Error(result.error);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
throw new Error(
|
|
67
|
+
`Workflow ${result.workflow_id} suspended but did not return a final result`,
|
|
68
|
+
);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export const CallWorkflowAction = createAction<
|
|
72
|
+
CallWorkflowInput,
|
|
73
|
+
CallWorkflowOutput,
|
|
74
|
+
WorkflowRuntimeContext
|
|
75
|
+
>({
|
|
76
|
+
name: 'call_workflow',
|
|
77
|
+
description: 'Calls another workflow and waits for its output.',
|
|
78
|
+
group: 'workflow',
|
|
79
|
+
icon: 'Workflow',
|
|
80
|
+
color: '#64748B',
|
|
81
|
+
inputSchema: callWorkflowInputSchema,
|
|
82
|
+
outputSchema: callWorkflowFinishedSchema,
|
|
83
|
+
async execute({ input, context }) {
|
|
84
|
+
// AgenticService owns workflow resolution and run creation because the
|
|
85
|
+
// target workflow is an API-persisted entity, not an agentic DSL primitive.
|
|
86
|
+
const result = await context.services.agentic.callWorkflow({
|
|
87
|
+
workflowId: input.workflow_id,
|
|
88
|
+
input: input.input,
|
|
89
|
+
parentContext: context,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
if (result.status !== 'suspended') {
|
|
93
|
+
return assertFinishedResult(result);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// If the child suspends, this action suspends the parent at the call site.
|
|
97
|
+
// A future event resumes the child leaf first; AgenticService then resumes
|
|
98
|
+
// this parent action with the final child payload.
|
|
99
|
+
const resumeData = await context.workflow.suspend<unknown>({
|
|
100
|
+
reason: 'awaiting_child_workflow',
|
|
101
|
+
data: {
|
|
102
|
+
workflow_id: result.workflow_id,
|
|
103
|
+
workflow_run_id: result.workflow_run_id,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
const parsed = callWorkflowResumeSchema.parse(resumeData);
|
|
107
|
+
|
|
108
|
+
return assertFinishedResult(parsed);
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
export default CallWorkflowAction;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"call_workflow": {
|
|
3
|
+
"Calls another workflow and waits for its output.": "Calls another workflow and waits for its output.",
|
|
4
|
+
"Workflow": "Workflow",
|
|
5
|
+
"Workflow to call and wait for before continuing.": "Workflow to call and wait for before continuing.",
|
|
6
|
+
"Input": "Input",
|
|
7
|
+
"Optional input payload for the called workflow. When omitted, the current trigger input is reused.": "Optional input payload for the called workflow. When omitted, the current trigger input is reused."
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"call_workflow": {
|
|
3
|
+
"Calls another workflow and waits for its output.": "Appelle un autre workflow et attend sa sortie.",
|
|
4
|
+
"Workflow": "Workflow",
|
|
5
|
+
"Workflow to call and wait for before continuing.": "Workflow à appeler et à attendre avant de continuer.",
|
|
6
|
+
"Input": "Entrée",
|
|
7
|
+
"Optional input payload for the called workflow. When omitted, the current trigger input is reused.": "Payload d'entrée facultatif pour le workflow appelé. S'il est omis, l'entrée du déclencheur courant est réutilisée."
|
|
8
|
+
}
|
|
9
|
+
}
|
package/src/extensions/index.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -0,0 +1,154 @@
|
|
|
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 { isDeepStrictEqual } from 'node:util';
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
type WorkflowExportBundle,
|
|
11
|
+
type WorkflowExportBundleContentType,
|
|
12
|
+
type WorkflowImportResourceResult,
|
|
13
|
+
} from '@hexabot-ai/types';
|
|
14
|
+
import { ConflictException, Injectable } from '@nestjs/common';
|
|
15
|
+
import { In } from 'typeorm';
|
|
16
|
+
|
|
17
|
+
import { ContentTypeOrmEntity } from '@/cms/entities/content-type.entity';
|
|
18
|
+
import { ContentTypeService } from '@/cms/services/content-type.service';
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
WorkflowTransferAdapter,
|
|
22
|
+
WorkflowTransferExportContext,
|
|
23
|
+
WorkflowTransferImportContext,
|
|
24
|
+
WorkflowTransferResourceAdapter,
|
|
25
|
+
} from '../workflow-transfer-resource-adapter';
|
|
26
|
+
import {
|
|
27
|
+
assertFoundAll,
|
|
28
|
+
buildPostCreateEvent,
|
|
29
|
+
buildResourceResult,
|
|
30
|
+
uniqueResourceIds,
|
|
31
|
+
type WorkflowTransferImportAdapterResult,
|
|
32
|
+
} from '../workflow-transfer.types';
|
|
33
|
+
|
|
34
|
+
@WorkflowTransferAdapter()
|
|
35
|
+
@Injectable()
|
|
36
|
+
export class ContentTypeTransferAdapter extends WorkflowTransferResourceAdapter {
|
|
37
|
+
override readonly kind = 'contentType';
|
|
38
|
+
|
|
39
|
+
override readonly resourceKeys = ['contentTypes'];
|
|
40
|
+
|
|
41
|
+
constructor(private readonly contentTypeService: ContentTypeService) {
|
|
42
|
+
super();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
override async buildExportResources(
|
|
46
|
+
ctx: WorkflowTransferExportContext,
|
|
47
|
+
): Promise<Record<string, WorkflowExportBundleContentType[]>> {
|
|
48
|
+
return {
|
|
49
|
+
contentTypes: await this.buildContentTypeExportResources(
|
|
50
|
+
ctx.getRefs(this.kind),
|
|
51
|
+
),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private async buildContentTypeExportResources(
|
|
56
|
+
ids: string[],
|
|
57
|
+
): Promise<WorkflowExportBundleContentType[]> {
|
|
58
|
+
const uniqueIds = uniqueResourceIds(ids);
|
|
59
|
+
if (uniqueIds.length === 0) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const contentTypes = await this.contentTypeService.find({
|
|
64
|
+
where: { id: In(uniqueIds) },
|
|
65
|
+
});
|
|
66
|
+
assertFoundAll(
|
|
67
|
+
'content type',
|
|
68
|
+
uniqueIds,
|
|
69
|
+
contentTypes.map((contentType) => contentType.id),
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
return contentTypes.map((contentType) => ({
|
|
73
|
+
exportId: contentType.id,
|
|
74
|
+
name: contentType.name,
|
|
75
|
+
schema: contentType.schema,
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
override async importResources(
|
|
80
|
+
ctx: WorkflowTransferImportContext,
|
|
81
|
+
): Promise<WorkflowTransferImportAdapterResult> {
|
|
82
|
+
const contentTypes =
|
|
83
|
+
ctx.getResources<
|
|
84
|
+
WorkflowExportBundle['resources']['contentTypes'][number]
|
|
85
|
+
>('contentTypes');
|
|
86
|
+
const idMap: Record<string, string> = {};
|
|
87
|
+
const resources: WorkflowImportResourceResult[] = [];
|
|
88
|
+
const postCreateEvents: WorkflowTransferImportAdapterResult['postCreateEvents'] =
|
|
89
|
+
[];
|
|
90
|
+
|
|
91
|
+
for (const contentType of contentTypes) {
|
|
92
|
+
const existing = await ctx.manager.findOne(ContentTypeOrmEntity, {
|
|
93
|
+
where: { name: contentType.name },
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
if (existing) {
|
|
97
|
+
if (!this.isEquivalentContentType(existing, contentType)) {
|
|
98
|
+
throw new ConflictException(
|
|
99
|
+
`Content type "${contentType.name}" already exists with different configuration`,
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
idMap[contentType.exportId] = existing.id;
|
|
104
|
+
resources.push(
|
|
105
|
+
buildResourceResult({
|
|
106
|
+
kind: 'contentType',
|
|
107
|
+
exportId: contentType.exportId,
|
|
108
|
+
localId: existing.id,
|
|
109
|
+
name: contentType.name,
|
|
110
|
+
action: 'reused',
|
|
111
|
+
}),
|
|
112
|
+
);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const payload = {
|
|
117
|
+
name: contentType.name,
|
|
118
|
+
schema: contentType.schema,
|
|
119
|
+
};
|
|
120
|
+
const created = await ctx.manager.save(
|
|
121
|
+
ContentTypeOrmEntity,
|
|
122
|
+
ctx.manager.create(ContentTypeOrmEntity, payload),
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
idMap[contentType.exportId] = created.id;
|
|
126
|
+
resources.push(
|
|
127
|
+
buildResourceResult({
|
|
128
|
+
kind: 'contentType',
|
|
129
|
+
exportId: contentType.exportId,
|
|
130
|
+
localId: created.id,
|
|
131
|
+
name: contentType.name,
|
|
132
|
+
action: 'created',
|
|
133
|
+
}),
|
|
134
|
+
);
|
|
135
|
+
postCreateEvents.push(
|
|
136
|
+
buildPostCreateEvent('contentType', created, payload),
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return {
|
|
141
|
+
idMap,
|
|
142
|
+
resources,
|
|
143
|
+
warnings: [],
|
|
144
|
+
postCreateEvents,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
private isEquivalentContentType(
|
|
149
|
+
existing: ContentTypeOrmEntity,
|
|
150
|
+
imported: WorkflowExportBundle['resources']['contentTypes'][number],
|
|
151
|
+
): boolean {
|
|
152
|
+
return isDeepStrictEqual(existing.schema, imported.schema);
|
|
153
|
+
}
|
|
154
|
+
}
|