@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.
Files changed (172) hide show
  1. package/dist/actions/actions.service.d.ts +1 -0
  2. package/dist/actions/actions.service.js +19 -1
  3. package/dist/actions/actions.service.js.map +1 -1
  4. package/dist/app.module.js +2 -0
  5. package/dist/app.module.js.map +1 -1
  6. package/dist/extensions/actions/ai/mcp.binding.js +2 -0
  7. package/dist/extensions/actions/ai/mcp.binding.js.map +1 -1
  8. package/dist/extensions/actions/ai/memory.binding.js +2 -0
  9. package/dist/extensions/actions/ai/memory.binding.js.map +1 -1
  10. package/dist/extensions/actions/ai/retrieve-content-rag.action.js +2 -0
  11. package/dist/extensions/actions/ai/retrieve-content-rag.action.js.map +1 -1
  12. package/dist/extensions/actions/messaging/list.action.d.ts +2 -2
  13. package/dist/extensions/actions/messaging/list.action.js +7 -0
  14. package/dist/extensions/actions/messaging/list.action.js.map +1 -1
  15. package/dist/extensions/actions/subscriber/update-labels.action.js +3 -0
  16. package/dist/extensions/actions/subscriber/update-labels.action.js.map +1 -1
  17. package/dist/extensions/actions/workflow/call-workflow.action.d.ts +19 -0
  18. package/dist/extensions/actions/workflow/call-workflow.action.js +83 -0
  19. package/dist/extensions/actions/workflow/call-workflow.action.js.map +1 -0
  20. package/dist/extensions/actions/workflow/i18n/en.translations.json +9 -0
  21. package/dist/extensions/actions/workflow/i18n/fr.translations.json +9 -0
  22. package/dist/extensions/index.d.ts +1 -0
  23. package/dist/extensions/index.js +1 -0
  24. package/dist/extensions/index.js.map +1 -1
  25. package/dist/index.d.ts +1 -0
  26. package/dist/index.js +1 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/mcp/tools/hexabot-mcp.tools.d.ts +58 -0
  29. package/dist/static/assets/{browser-ponyfill-DN-Mu1Dr.js → browser-ponyfill-C573gsYp.js} +1 -1
  30. package/dist/static/assets/{cssMode-BCWxI_Ux.js → cssMode-Dl3j1m5K.js} +1 -1
  31. package/dist/static/assets/{freemarker2-CFvevPey.js → freemarker2-BC7MYUau.js} +1 -1
  32. package/dist/static/assets/{handlebars-BCStA9Eg.js → handlebars-DF9DBgjd.js} +1 -1
  33. package/dist/static/assets/{html-DkIwCA7q.js → html-CbBSWv6-.js} +1 -1
  34. package/dist/static/assets/{htmlMode-DHeMkUp8.js → htmlMode-BUAbNnKS.js} +1 -1
  35. package/dist/static/assets/{index-C6VeVxYx.js → index-DwNnhpf5.js} +2103 -2103
  36. package/dist/static/assets/{javascript-DLPKJzLc.js → javascript-BG37perB.js} +1 -1
  37. package/dist/static/assets/{jsonMode-BUIDFK3O.js → jsonMode-CTS3-YZB.js} +1 -1
  38. package/dist/static/assets/{liquid-B0XmwdKh.js → liquid-LhmqJOdD.js} +1 -1
  39. package/dist/static/assets/{lspLanguageFeatures-Fcpw3Ev_.js → lspLanguageFeatures-BRCtbLBB.js} +1 -1
  40. package/dist/static/assets/{mdx-DmJKi-dU.js → mdx-DETvz3oa.js} +1 -1
  41. package/dist/static/assets/{python-B1WnWY4I.js → python-F6lZ-u5p.js} +1 -1
  42. package/dist/static/assets/{razor-CL2s-6qt.js → razor-PKvkfOLq.js} +1 -1
  43. package/dist/static/assets/{tsMode-DSFhDcf0.js → tsMode-BpTc9xsq.js} +1 -1
  44. package/dist/static/assets/{typescript-CmHv7Jwl.js → typescript-chpcHZSI.js} +1 -1
  45. package/dist/static/assets/{xml-Cyy6zXDM.js → xml-CZLk_iMt.js} +1 -1
  46. package/dist/static/assets/{yaml-D_D6TAHE.js → yaml-D6hLCygP.js} +1 -1
  47. package/dist/static/index.html +1 -1
  48. package/dist/static/locales/en/translation.json +7 -1
  49. package/dist/static/locales/fr/translation.json +8 -2
  50. package/dist/transfer/adapters/content-type-transfer.adapter.d.ts +14 -0
  51. package/dist/transfer/adapters/content-type-transfer.adapter.js +102 -0
  52. package/dist/transfer/adapters/content-type-transfer.adapter.js.map +1 -0
  53. package/dist/transfer/adapters/credential-transfer.adapter.d.ts +13 -0
  54. package/dist/transfer/adapters/credential-transfer.adapter.js +110 -0
  55. package/dist/transfer/adapters/credential-transfer.adapter.js.map +1 -0
  56. package/dist/transfer/adapters/label-transfer.adapter.d.ts +15 -0
  57. package/dist/transfer/adapters/label-transfer.adapter.js +189 -0
  58. package/dist/transfer/adapters/label-transfer.adapter.js.map +1 -0
  59. package/dist/transfer/adapters/mcp-server-transfer.adapter.d.ts +16 -0
  60. package/dist/transfer/adapters/mcp-server-transfer.adapter.js +169 -0
  61. package/dist/transfer/adapters/mcp-server-transfer.adapter.js.map +1 -0
  62. package/dist/transfer/adapters/memory-definition-transfer.adapter.d.ts +14 -0
  63. package/dist/transfer/adapters/memory-definition-transfer.adapter.js +111 -0
  64. package/dist/transfer/adapters/memory-definition-transfer.adapter.js.map +1 -0
  65. package/dist/transfer/index.d.ts +7 -0
  66. package/dist/transfer/index.js +24 -0
  67. package/dist/transfer/index.js.map +1 -0
  68. package/dist/transfer/workflow-transfer-adapter.registry.d.ts +27 -0
  69. package/dist/transfer/workflow-transfer-adapter.registry.js +164 -0
  70. package/dist/transfer/workflow-transfer-adapter.registry.js.map +1 -0
  71. package/dist/transfer/workflow-transfer-definition.service.d.ts +40 -0
  72. package/dist/transfer/workflow-transfer-definition.service.js +353 -0
  73. package/dist/transfer/workflow-transfer-definition.service.js.map +1 -0
  74. package/dist/transfer/workflow-transfer-resource-adapter.d.ts +33 -0
  75. package/dist/transfer/workflow-transfer-resource-adapter.js +81 -0
  76. package/dist/transfer/workflow-transfer-resource-adapter.js.map +1 -0
  77. package/dist/transfer/workflow-transfer.controller.d.ts +9 -0
  78. package/dist/transfer/workflow-transfer.controller.js +63 -0
  79. package/dist/transfer/workflow-transfer.controller.js.map +1 -0
  80. package/dist/transfer/workflow-transfer.module.d.ts +2 -0
  81. package/dist/transfer/workflow-transfer.module.js +47 -0
  82. package/dist/transfer/workflow-transfer.module.js.map +1 -0
  83. package/dist/transfer/workflow-transfer.service.d.ts +51 -0
  84. package/dist/transfer/workflow-transfer.service.js +509 -0
  85. package/dist/transfer/workflow-transfer.service.js.map +1 -0
  86. package/dist/transfer/workflow-transfer.types.d.ts +31 -0
  87. package/dist/transfer/workflow-transfer.types.js +35 -0
  88. package/dist/transfer/workflow-transfer.types.js.map +1 -0
  89. package/dist/tsconfig.build.tsbuildinfo +1 -1
  90. package/dist/user/dto/user.dto.d.ts +1 -1
  91. package/dist/utils/test/fixtures/label-group.d.ts +1 -1
  92. package/dist/utils/test/fixtures/label.d.ts +1 -1
  93. package/dist/utils/test/fixtures/subscriber.d.ts +1 -1
  94. package/dist/utils/test/fixtures/workflow-run.js +4 -1
  95. package/dist/utils/test/fixtures/workflow-run.js.map +1 -1
  96. package/dist/workflow/contexts/workflow-runtime.context.d.ts +3 -1
  97. package/dist/workflow/contexts/workflow-runtime.context.js +5 -0
  98. package/dist/workflow/contexts/workflow-runtime.context.js.map +1 -1
  99. package/dist/workflow/controllers/workflow-run.controller.js +2 -0
  100. package/dist/workflow/controllers/workflow-run.controller.js.map +1 -1
  101. package/dist/workflow/dto/workflow-run.dto.d.ts +1 -0
  102. package/dist/workflow/dto/workflow-run.dto.js +11 -0
  103. package/dist/workflow/dto/workflow-run.dto.js.map +1 -1
  104. package/dist/workflow/entities/memory-record.entity.d.ts +2 -0
  105. package/dist/workflow/entities/workflow-run.entity.d.ts +62 -0
  106. package/dist/workflow/entities/workflow-run.entity.js +15 -1
  107. package/dist/workflow/entities/workflow-run.entity.js.map +1 -1
  108. package/dist/workflow/index.d.ts +7 -0
  109. package/dist/workflow/index.js +7 -0
  110. package/dist/workflow/index.js.map +1 -1
  111. package/dist/workflow/repositories/workflow-run.repository.js +7 -1
  112. package/dist/workflow/repositories/workflow-run.repository.js.map +1 -1
  113. package/dist/workflow/resource-refs.d.ts +17 -0
  114. package/dist/workflow/resource-refs.js +15 -0
  115. package/dist/workflow/resource-refs.js.map +1 -0
  116. package/dist/workflow/services/agentic.service.d.ts +7 -1
  117. package/dist/workflow/services/agentic.service.js +134 -16
  118. package/dist/workflow/services/agentic.service.js.map +1 -1
  119. package/dist/workflow/services/workflow-run.service.d.ts +3 -0
  120. package/dist/workflow/services/workflow-run.service.js +75 -3
  121. package/dist/workflow/services/workflow-run.service.js.map +1 -1
  122. package/dist/workflow/services/workflow-version.service.d.ts +2 -0
  123. package/dist/workflow/services/workflow-version.service.js +19 -0
  124. package/dist/workflow/services/workflow-version.service.js.map +1 -1
  125. package/dist/workflow/services/workflow.service.d.ts +3 -1
  126. package/dist/workflow/services/workflow.service.js +5 -0
  127. package/dist/workflow/services/workflow.service.js.map +1 -1
  128. package/dist/workflow/types.d.ts +31 -0
  129. package/dist/workflow/types.js +2 -1
  130. package/dist/workflow/types.js.map +1 -1
  131. package/dist/workflow/workflow.module.js +3 -0
  132. package/dist/workflow/workflow.module.js.map +1 -1
  133. package/package.json +4 -4
  134. package/src/actions/actions.service.ts +34 -4
  135. package/src/app.module.ts +2 -0
  136. package/src/extensions/actions/ai/mcp.binding.ts +2 -0
  137. package/src/extensions/actions/ai/memory.binding.ts +2 -0
  138. package/src/extensions/actions/ai/retrieve-content-rag.action.ts +2 -0
  139. package/src/extensions/actions/messaging/list.action.ts +7 -0
  140. package/src/extensions/actions/subscriber/update-labels.action.ts +3 -0
  141. package/src/extensions/actions/workflow/call-workflow.action.ts +112 -0
  142. package/src/extensions/actions/workflow/i18n/en.translations.json +9 -0
  143. package/src/extensions/actions/workflow/i18n/fr.translations.json +9 -0
  144. package/src/extensions/index.ts +2 -0
  145. package/src/index.ts +2 -0
  146. package/src/transfer/adapters/content-type-transfer.adapter.ts +154 -0
  147. package/src/transfer/adapters/credential-transfer.adapter.ts +158 -0
  148. package/src/transfer/adapters/label-transfer.adapter.ts +291 -0
  149. package/src/transfer/adapters/mcp-server-transfer.adapter.ts +255 -0
  150. package/src/transfer/adapters/memory-definition-transfer.adapter.ts +167 -0
  151. package/src/transfer/index.ts +19 -0
  152. package/src/transfer/workflow-transfer-adapter.registry.ts +250 -0
  153. package/src/transfer/workflow-transfer-definition.service.ts +587 -0
  154. package/src/transfer/workflow-transfer-resource-adapter.ts +132 -0
  155. package/src/transfer/workflow-transfer.controller.ts +86 -0
  156. package/src/transfer/workflow-transfer.module.ts +46 -0
  157. package/src/transfer/workflow-transfer.service.ts +858 -0
  158. package/src/transfer/workflow-transfer.types.ts +98 -0
  159. package/src/utils/test/fixtures/workflow-run.ts +4 -1
  160. package/src/workflow/contexts/workflow-runtime.context.ts +12 -1
  161. package/src/workflow/controllers/workflow-run.controller.ts +2 -0
  162. package/src/workflow/dto/workflow-run.dto.ts +10 -0
  163. package/src/workflow/entities/workflow-run.entity.ts +22 -1
  164. package/src/workflow/index.ts +14 -0
  165. package/src/workflow/repositories/workflow-run.repository.ts +7 -1
  166. package/src/workflow/resource-refs.ts +44 -0
  167. package/src/workflow/services/agentic.service.ts +256 -26
  168. package/src/workflow/services/workflow-run.service.ts +120 -7
  169. package/src/workflow/services/workflow-version.service.ts +33 -0
  170. package/src/workflow/services/workflow.service.ts +21 -1
  171. package/src/workflow/types.ts +52 -0
  172. package/src/workflow/workflow.module.ts +3 -0
@@ -0,0 +1,102 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ContentTypeTransferAdapter = void 0;
13
+ const node_util_1 = require("node:util");
14
+ const common_1 = require("@nestjs/common");
15
+ const typeorm_1 = require("typeorm");
16
+ const content_type_entity_1 = require("../../cms/entities/content-type.entity");
17
+ const content_type_service_1 = require("../../cms/services/content-type.service");
18
+ const workflow_transfer_resource_adapter_1 = require("../workflow-transfer-resource-adapter");
19
+ const workflow_transfer_types_1 = require("../workflow-transfer.types");
20
+ let ContentTypeTransferAdapter = class ContentTypeTransferAdapter extends workflow_transfer_resource_adapter_1.WorkflowTransferResourceAdapter {
21
+ constructor(contentTypeService) {
22
+ super();
23
+ this.contentTypeService = contentTypeService;
24
+ this.kind = 'contentType';
25
+ this.resourceKeys = ['contentTypes'];
26
+ }
27
+ async buildExportResources(ctx) {
28
+ return {
29
+ contentTypes: await this.buildContentTypeExportResources(ctx.getRefs(this.kind)),
30
+ };
31
+ }
32
+ async buildContentTypeExportResources(ids) {
33
+ const uniqueIds = (0, workflow_transfer_types_1.uniqueResourceIds)(ids);
34
+ if (uniqueIds.length === 0) {
35
+ return [];
36
+ }
37
+ const contentTypes = await this.contentTypeService.find({
38
+ where: { id: (0, typeorm_1.In)(uniqueIds) },
39
+ });
40
+ (0, workflow_transfer_types_1.assertFoundAll)('content type', uniqueIds, contentTypes.map((contentType) => contentType.id));
41
+ return contentTypes.map((contentType) => ({
42
+ exportId: contentType.id,
43
+ name: contentType.name,
44
+ schema: contentType.schema,
45
+ }));
46
+ }
47
+ async importResources(ctx) {
48
+ const contentTypes = ctx.getResources('contentTypes');
49
+ const idMap = {};
50
+ const resources = [];
51
+ const postCreateEvents = [];
52
+ for (const contentType of contentTypes) {
53
+ const existing = await ctx.manager.findOne(content_type_entity_1.ContentTypeOrmEntity, {
54
+ where: { name: contentType.name },
55
+ });
56
+ if (existing) {
57
+ if (!this.isEquivalentContentType(existing, contentType)) {
58
+ throw new common_1.ConflictException(`Content type "${contentType.name}" already exists with different configuration`);
59
+ }
60
+ idMap[contentType.exportId] = existing.id;
61
+ resources.push((0, workflow_transfer_types_1.buildResourceResult)({
62
+ kind: 'contentType',
63
+ exportId: contentType.exportId,
64
+ localId: existing.id,
65
+ name: contentType.name,
66
+ action: 'reused',
67
+ }));
68
+ continue;
69
+ }
70
+ const payload = {
71
+ name: contentType.name,
72
+ schema: contentType.schema,
73
+ };
74
+ const created = await ctx.manager.save(content_type_entity_1.ContentTypeOrmEntity, ctx.manager.create(content_type_entity_1.ContentTypeOrmEntity, payload));
75
+ idMap[contentType.exportId] = created.id;
76
+ resources.push((0, workflow_transfer_types_1.buildResourceResult)({
77
+ kind: 'contentType',
78
+ exportId: contentType.exportId,
79
+ localId: created.id,
80
+ name: contentType.name,
81
+ action: 'created',
82
+ }));
83
+ postCreateEvents.push((0, workflow_transfer_types_1.buildPostCreateEvent)('contentType', created, payload));
84
+ }
85
+ return {
86
+ idMap,
87
+ resources,
88
+ warnings: [],
89
+ postCreateEvents,
90
+ };
91
+ }
92
+ isEquivalentContentType(existing, imported) {
93
+ return (0, node_util_1.isDeepStrictEqual)(existing.schema, imported.schema);
94
+ }
95
+ };
96
+ exports.ContentTypeTransferAdapter = ContentTypeTransferAdapter;
97
+ exports.ContentTypeTransferAdapter = ContentTypeTransferAdapter = __decorate([
98
+ (0, workflow_transfer_resource_adapter_1.WorkflowTransferAdapter)(),
99
+ (0, common_1.Injectable)(),
100
+ __metadata("design:paramtypes", [content_type_service_1.ContentTypeService])
101
+ ], ContentTypeTransferAdapter);
102
+ //# sourceMappingURL=content-type-transfer.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-type-transfer.adapter.js","sourceRoot":"","sources":["../../../src/transfer/adapters/content-type-transfer.adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type WorkflowExportBundleCredential } from '@hexabot-ai/types';
2
+ import { CredentialService } from "../../user/services/credential.service";
3
+ import { WorkflowTransferExportContext, WorkflowTransferImportContext, WorkflowTransferResourceAdapter } from '../workflow-transfer-resource-adapter';
4
+ import { type WorkflowTransferImportAdapterResult } from '../workflow-transfer.types';
5
+ export declare class CredentialTransferAdapter extends WorkflowTransferResourceAdapter {
6
+ private readonly credentialService;
7
+ readonly kind = "credential";
8
+ readonly resourceKeys: string[];
9
+ constructor(credentialService: CredentialService);
10
+ buildExportResources(ctx: WorkflowTransferExportContext): Promise<Record<string, WorkflowExportBundleCredential[]>>;
11
+ private buildCredentialExportResources;
12
+ importResources(ctx: WorkflowTransferImportContext): Promise<WorkflowTransferImportAdapterResult>;
13
+ }
@@ -0,0 +1,110 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CredentialTransferAdapter = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const typeorm_1 = require("typeorm");
15
+ const credential_entity_1 = require("../../user/entities/credential.entity");
16
+ const credential_service_1 = require("../../user/services/credential.service");
17
+ const workflow_transfer_resource_adapter_1 = require("../workflow-transfer-resource-adapter");
18
+ const workflow_transfer_types_1 = require("../workflow-transfer.types");
19
+ let CredentialTransferAdapter = class CredentialTransferAdapter extends workflow_transfer_resource_adapter_1.WorkflowTransferResourceAdapter {
20
+ constructor(credentialService) {
21
+ super();
22
+ this.credentialService = credentialService;
23
+ this.kind = 'credential';
24
+ this.resourceKeys = ['credentials'];
25
+ }
26
+ async buildExportResources(ctx) {
27
+ return {
28
+ credentials: await this.buildCredentialExportResources(ctx.getRefs(this.kind)),
29
+ };
30
+ }
31
+ async buildCredentialExportResources(ids) {
32
+ const uniqueIds = (0, workflow_transfer_types_1.uniqueResourceIds)(ids);
33
+ if (uniqueIds.length === 0) {
34
+ return [];
35
+ }
36
+ const credentials = await this.credentialService.find({
37
+ where: { id: (0, typeorm_1.In)(uniqueIds) },
38
+ });
39
+ (0, workflow_transfer_types_1.assertFoundAll)('credential', uniqueIds, credentials.map((credential) => credential.id));
40
+ return credentials.map((credential) => ({
41
+ exportId: credential.id,
42
+ name: credential.name,
43
+ exportedOwnerId: credential.owner,
44
+ }));
45
+ }
46
+ async importResources(ctx) {
47
+ const credentials = ctx.getResources('credentials');
48
+ const idMap = {};
49
+ const resources = [];
50
+ const warnings = [];
51
+ const postCreateEvents = [];
52
+ const placeholderExportIds = new Set();
53
+ for (const credential of credentials) {
54
+ const existingByName = await ctx.manager.findOne(credential_entity_1.CredentialOrmEntity, {
55
+ where: { name: credential.name },
56
+ relations: ['owner'],
57
+ });
58
+ if (existingByName) {
59
+ const existingOwnerId = existingByName.owner && typeof existingByName.owner === 'object'
60
+ ? existingByName.owner.id
61
+ : null;
62
+ if (existingOwnerId !== ctx.ownerId) {
63
+ throw new common_1.ConflictException(`Credential "${credential.name}" already exists for another user`);
64
+ }
65
+ idMap[credential.exportId] = existingByName.id;
66
+ resources.push((0, workflow_transfer_types_1.buildResourceResult)({
67
+ kind: 'credential',
68
+ exportId: credential.exportId,
69
+ localId: existingByName.id,
70
+ name: credential.name,
71
+ action: 'reused',
72
+ }));
73
+ continue;
74
+ }
75
+ const payload = {
76
+ name: credential.name,
77
+ value: workflow_transfer_types_1.PLACEHOLDER_CREDENTIAL_VALUE,
78
+ owner: { id: ctx.ownerId },
79
+ };
80
+ const created = await ctx.manager.save(credential_entity_1.CredentialOrmEntity, ctx.manager.create(credential_entity_1.CredentialOrmEntity, payload));
81
+ idMap[credential.exportId] = created.id;
82
+ placeholderExportIds.add(credential.exportId);
83
+ resources.push((0, workflow_transfer_types_1.buildResourceResult)({
84
+ kind: 'credential',
85
+ exportId: credential.exportId,
86
+ localId: created.id,
87
+ name: credential.name,
88
+ action: 'placeholder_created',
89
+ }));
90
+ postCreateEvents.push((0, workflow_transfer_types_1.buildPostCreateEvent)('credential', created, payload));
91
+ warnings.push(`Credential "${credential.name}" was imported as a placeholder and must be updated before use.`);
92
+ }
93
+ return {
94
+ idMap,
95
+ resources,
96
+ warnings,
97
+ postCreateEvents,
98
+ metadata: {
99
+ placeholderExportIds,
100
+ },
101
+ };
102
+ }
103
+ };
104
+ exports.CredentialTransferAdapter = CredentialTransferAdapter;
105
+ exports.CredentialTransferAdapter = CredentialTransferAdapter = __decorate([
106
+ (0, workflow_transfer_resource_adapter_1.WorkflowTransferAdapter)(),
107
+ (0, common_1.Injectable)(),
108
+ __metadata("design:paramtypes", [credential_service_1.CredentialService])
109
+ ], CredentialTransferAdapter);
110
+ //# sourceMappingURL=credential-transfer.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-transfer.adapter.js","sourceRoot":"","sources":["../../../src/transfer/adapters/credential-transfer.adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { LabelService } from "../../chat/services/label.service";
2
+ import { WorkflowTransferExportContext, WorkflowTransferImportContext, WorkflowTransferResourceAdapter } from '../workflow-transfer-resource-adapter';
3
+ import { type WorkflowTransferImportAdapterResult } from '../workflow-transfer.types';
4
+ export declare class LabelTransferAdapter extends WorkflowTransferResourceAdapter {
5
+ private readonly labelService;
6
+ readonly kind = "label";
7
+ readonly resourceKeys: string[];
8
+ constructor(labelService: LabelService);
9
+ buildExportResources(ctx: WorkflowTransferExportContext): Promise<Record<string, unknown[]>>;
10
+ private buildLabelExportResources;
11
+ importResources(ctx: WorkflowTransferImportContext): Promise<WorkflowTransferImportAdapterResult>;
12
+ private importLabelGroups;
13
+ private importLabels;
14
+ private isEquivalentLabel;
15
+ }
@@ -0,0 +1,189 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.LabelTransferAdapter = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const typeorm_1 = require("typeorm");
15
+ const label_group_entity_1 = require("../../chat/entities/label-group.entity");
16
+ const label_entity_1 = require("../../chat/entities/label.entity");
17
+ const label_service_1 = require("../../chat/services/label.service");
18
+ const workflow_transfer_resource_adapter_1 = require("../workflow-transfer-resource-adapter");
19
+ const workflow_transfer_types_1 = require("../workflow-transfer.types");
20
+ let LabelTransferAdapter = class LabelTransferAdapter extends workflow_transfer_resource_adapter_1.WorkflowTransferResourceAdapter {
21
+ constructor(labelService) {
22
+ super();
23
+ this.labelService = labelService;
24
+ this.kind = 'label';
25
+ this.resourceKeys = ['labels', 'labelGroups'];
26
+ }
27
+ async buildExportResources(ctx) {
28
+ return this.buildLabelExportResources(ctx.getRefs(this.kind));
29
+ }
30
+ async buildLabelExportResources(ids) {
31
+ const uniqueIds = (0, workflow_transfer_types_1.uniqueResourceIds)(ids);
32
+ if (uniqueIds.length === 0) {
33
+ return { labelGroups: [], labels: [] };
34
+ }
35
+ const labels = await this.labelService.findAndPopulate({
36
+ where: { id: (0, typeorm_1.In)(uniqueIds) },
37
+ });
38
+ (0, workflow_transfer_types_1.assertFoundAll)('label', uniqueIds, labels.map((label) => label.id));
39
+ const groupsById = new Map();
40
+ for (const label of labels) {
41
+ if (label.group?.id) {
42
+ groupsById.set(label.group.id, {
43
+ exportId: label.group.id,
44
+ name: label.group.name,
45
+ });
46
+ }
47
+ }
48
+ return {
49
+ labelGroups: Array.from(groupsById.values()),
50
+ labels: labels.map((label) => ({
51
+ exportId: label.id,
52
+ title: label.title,
53
+ name: label.name,
54
+ description: label.description ?? null,
55
+ groupExportId: label.group?.id ?? null,
56
+ })),
57
+ };
58
+ }
59
+ async importResources(ctx) {
60
+ const labelGroups = ctx.getResources('labelGroups');
61
+ const labels = ctx.getResources('labels');
62
+ const groupResult = await this.importLabelGroups(ctx.manager, labelGroups);
63
+ const labelResult = await this.importLabels(ctx.manager, labels, groupResult.idMap);
64
+ return {
65
+ idMap: labelResult.idMap,
66
+ resources: [...groupResult.resources, ...labelResult.resources],
67
+ warnings: [],
68
+ postCreateEvents: [
69
+ ...groupResult.postCreateEvents,
70
+ ...labelResult.postCreateEvents,
71
+ ],
72
+ };
73
+ }
74
+ async importLabelGroups(manager, labelGroups) {
75
+ const idMap = {};
76
+ const resources = [];
77
+ const postCreateEvents = [];
78
+ for (const labelGroup of labelGroups) {
79
+ const existing = await manager.findOne(label_group_entity_1.LabelGroupOrmEntity, {
80
+ where: { name: labelGroup.name },
81
+ });
82
+ if (existing) {
83
+ idMap[labelGroup.exportId] = existing.id;
84
+ resources.push((0, workflow_transfer_types_1.buildResourceResult)({
85
+ kind: 'labelGroup',
86
+ exportId: labelGroup.exportId,
87
+ localId: existing.id,
88
+ name: labelGroup.name,
89
+ action: 'reused',
90
+ }));
91
+ continue;
92
+ }
93
+ const payload = {
94
+ name: labelGroup.name,
95
+ };
96
+ const created = await manager.save(label_group_entity_1.LabelGroupOrmEntity, manager.create(label_group_entity_1.LabelGroupOrmEntity, payload));
97
+ idMap[labelGroup.exportId] = created.id;
98
+ resources.push((0, workflow_transfer_types_1.buildResourceResult)({
99
+ kind: 'labelGroup',
100
+ exportId: labelGroup.exportId,
101
+ localId: created.id,
102
+ name: labelGroup.name,
103
+ action: 'created',
104
+ }));
105
+ postCreateEvents.push((0, workflow_transfer_types_1.buildPostCreateEvent)('labelGroup', created, payload));
106
+ }
107
+ return {
108
+ idMap,
109
+ resources,
110
+ warnings: [],
111
+ postCreateEvents,
112
+ };
113
+ }
114
+ async importLabels(manager, labels, labelGroupIdMap) {
115
+ const idMap = {};
116
+ const resources = [];
117
+ const postCreateEvents = [];
118
+ for (const label of labels) {
119
+ const groupId = label.groupExportId
120
+ ? labelGroupIdMap[label.groupExportId]
121
+ : null;
122
+ if (label.groupExportId && !groupId) {
123
+ throw new common_1.BadRequestException(`Workflow bundle is missing label group "${label.groupExportId}" required by label "${label.name}"`);
124
+ }
125
+ const existingByName = await manager.findOne(label_entity_1.LabelOrmEntity, {
126
+ where: { name: label.name },
127
+ relations: ['group'],
128
+ });
129
+ if (existingByName) {
130
+ if (!this.isEquivalentLabel(existingByName, label, groupId)) {
131
+ throw new common_1.ConflictException(`Label "${label.name}" already exists with different configuration`);
132
+ }
133
+ idMap[label.exportId] = existingByName.id;
134
+ resources.push((0, workflow_transfer_types_1.buildResourceResult)({
135
+ kind: 'label',
136
+ exportId: label.exportId,
137
+ localId: existingByName.id,
138
+ name: label.name,
139
+ action: 'reused',
140
+ }));
141
+ continue;
142
+ }
143
+ const existingByTitle = await manager.findOne(label_entity_1.LabelOrmEntity, {
144
+ where: { title: label.title },
145
+ });
146
+ if (existingByTitle) {
147
+ throw new common_1.ConflictException(`Label title "${label.title}" already exists with a different name`);
148
+ }
149
+ const payload = {
150
+ title: label.title,
151
+ name: label.name,
152
+ description: label.description ?? null,
153
+ group: groupId ? { id: groupId } : null,
154
+ builtin: false,
155
+ };
156
+ const created = await manager.save(label_entity_1.LabelOrmEntity, manager.create(label_entity_1.LabelOrmEntity, payload));
157
+ idMap[label.exportId] = created.id;
158
+ resources.push((0, workflow_transfer_types_1.buildResourceResult)({
159
+ kind: 'label',
160
+ exportId: label.exportId,
161
+ localId: created.id,
162
+ name: label.name,
163
+ action: 'created',
164
+ }));
165
+ postCreateEvents.push((0, workflow_transfer_types_1.buildPostCreateEvent)('label', created, payload));
166
+ }
167
+ return {
168
+ idMap,
169
+ resources,
170
+ warnings: [],
171
+ postCreateEvents,
172
+ };
173
+ }
174
+ isEquivalentLabel(existing, imported, importedGroupId) {
175
+ const existingGroupId = existing.group && typeof existing.group === 'object'
176
+ ? existing.group.id
177
+ : null;
178
+ return (existing.title === imported.title &&
179
+ (existing.description ?? null) === (imported.description ?? null) &&
180
+ existingGroupId === importedGroupId);
181
+ }
182
+ };
183
+ exports.LabelTransferAdapter = LabelTransferAdapter;
184
+ exports.LabelTransferAdapter = LabelTransferAdapter = __decorate([
185
+ (0, workflow_transfer_resource_adapter_1.WorkflowTransferAdapter)(),
186
+ (0, common_1.Injectable)(),
187
+ __metadata("design:paramtypes", [label_service_1.LabelService])
188
+ ], LabelTransferAdapter);
189
+ //# sourceMappingURL=label-transfer.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label-transfer.adapter.js","sourceRoot":"","sources":["../../../src/transfer/adapters/label-transfer.adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type WorkflowExportBundleMcpServer } from '@hexabot-ai/types';
2
+ import { McpServerService } from "../../workflow/services/mcp-server.service";
3
+ import { WorkflowTransferExportContext, WorkflowTransferImportContext, WorkflowTransferResourceAdapter } from '../workflow-transfer-resource-adapter';
4
+ import { type WorkflowTransferImportAdapterResult } from '../workflow-transfer.types';
5
+ export declare class McpServerTransferAdapter extends WorkflowTransferResourceAdapter {
6
+ private readonly mcpServerService;
7
+ readonly kind = "mcpServer";
8
+ readonly resourceKeys: string[];
9
+ readonly dependsOn: string[];
10
+ constructor(mcpServerService: McpServerService);
11
+ buildExportResources(ctx: WorkflowTransferExportContext): Promise<Record<string, WorkflowExportBundleMcpServer[]>>;
12
+ private buildMcpServerExportResources;
13
+ importResources(ctx: WorkflowTransferImportContext): Promise<WorkflowTransferImportAdapterResult>;
14
+ private getPlaceholderCredentialExportIds;
15
+ private isEquivalentMcpServer;
16
+ }
@@ -0,0 +1,169 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.McpServerTransferAdapter = void 0;
13
+ const node_util_1 = require("node:util");
14
+ const common_1 = require("@nestjs/common");
15
+ const typeorm_1 = require("typeorm");
16
+ const credential_entity_1 = require("../../user/entities/credential.entity");
17
+ const mcp_server_entity_1 = require("../../workflow/entities/mcp-server.entity");
18
+ const mcp_server_service_1 = require("../../workflow/services/mcp-server.service");
19
+ const types_1 = require("../../workflow/types");
20
+ const workflow_transfer_resource_adapter_1 = require("../workflow-transfer-resource-adapter");
21
+ const workflow_transfer_types_1 = require("../workflow-transfer.types");
22
+ let McpServerTransferAdapter = class McpServerTransferAdapter extends workflow_transfer_resource_adapter_1.WorkflowTransferResourceAdapter {
23
+ constructor(mcpServerService) {
24
+ super();
25
+ this.mcpServerService = mcpServerService;
26
+ this.kind = 'mcpServer';
27
+ this.resourceKeys = ['mcpServers'];
28
+ this.dependsOn = ['credential'];
29
+ }
30
+ async buildExportResources(ctx) {
31
+ const resources = await this.buildMcpServerExportResources(ctx.getRefs(this.kind));
32
+ ctx.addResourceRefs('credential', resources.credentialIds);
33
+ return {
34
+ mcpServers: resources.mcpServers,
35
+ };
36
+ }
37
+ async buildMcpServerExportResources(ids) {
38
+ const uniqueIds = (0, workflow_transfer_types_1.uniqueResourceIds)(ids);
39
+ if (uniqueIds.length === 0) {
40
+ return { credentialIds: [], mcpServers: [] };
41
+ }
42
+ const servers = await this.mcpServerService.findAndPopulate({
43
+ where: { id: (0, typeorm_1.In)(uniqueIds) },
44
+ });
45
+ (0, workflow_transfer_types_1.assertFoundAll)('MCP server', uniqueIds, servers.map((server) => server.id));
46
+ return {
47
+ credentialIds: servers
48
+ .map((server) => server.credential?.id)
49
+ .filter((id) => typeof id === 'string' && !!id),
50
+ mcpServers: servers.map((server) => ({
51
+ exportId: server.id,
52
+ name: server.name,
53
+ enabled: server.enabled,
54
+ transport: server.transport,
55
+ url: server.url ?? null,
56
+ command: server.command ?? null,
57
+ args: server.args ?? null,
58
+ cwd: server.cwd ?? null,
59
+ credentialExportId: server.credential?.id ?? null,
60
+ })),
61
+ };
62
+ }
63
+ async importResources(ctx) {
64
+ const servers = ctx.getResources('mcpServers');
65
+ const credentialIdMap = ctx.getIdMap('credential');
66
+ const placeholderCredentialExportIds = this.getPlaceholderCredentialExportIds(ctx);
67
+ const idMap = {};
68
+ const resources = [];
69
+ const warnings = [];
70
+ const postCreateEvents = [];
71
+ for (const server of servers) {
72
+ const credentialId = server.credentialExportId
73
+ ? credentialIdMap[server.credentialExportId]
74
+ : null;
75
+ const credential = credentialId
76
+ ? await ctx.manager.findOne(credential_entity_1.CredentialOrmEntity, {
77
+ where: { id: credentialId },
78
+ })
79
+ : null;
80
+ const importedCredential = server.credentialExportId
81
+ ? credentialId
82
+ ? credential
83
+ : null
84
+ : null;
85
+ const shouldDisable = Boolean(server.credentialExportId) &&
86
+ placeholderCredentialExportIds.has(server.credentialExportId);
87
+ const existing = await ctx.manager.findOne(mcp_server_entity_1.McpServerOrmEntity, {
88
+ where: { name: server.name },
89
+ relations: ['credential'],
90
+ });
91
+ if (existing) {
92
+ if (!this.isEquivalentMcpServer(existing, server, importedCredential)) {
93
+ throw new common_1.ConflictException(`MCP server "${server.name}" already exists with different configuration`);
94
+ }
95
+ idMap[server.exportId] = existing.id;
96
+ resources.push((0, workflow_transfer_types_1.buildResourceResult)({
97
+ kind: 'mcpServer',
98
+ exportId: server.exportId,
99
+ localId: existing.id,
100
+ name: server.name,
101
+ action: 'reused',
102
+ }));
103
+ continue;
104
+ }
105
+ if (server.credentialExportId && !credentialId) {
106
+ throw new common_1.BadRequestException(`Workflow bundle is missing credential "${server.credentialExportId}" required by MCP server "${server.name}"`);
107
+ }
108
+ const payload = {
109
+ name: server.name,
110
+ enabled: shouldDisable ? false : server.enabled,
111
+ transport: server.transport,
112
+ url: server.url,
113
+ command: server.command,
114
+ args: server.args,
115
+ cwd: server.cwd,
116
+ credential: credentialId && server.transport === types_1.McpServerTransport.http
117
+ ? { id: credentialId }
118
+ : null,
119
+ };
120
+ const created = await ctx.manager.save(mcp_server_entity_1.McpServerOrmEntity, ctx.manager.create(mcp_server_entity_1.McpServerOrmEntity, payload));
121
+ idMap[server.exportId] = created.id;
122
+ resources.push((0, workflow_transfer_types_1.buildResourceResult)({
123
+ kind: 'mcpServer',
124
+ exportId: server.exportId,
125
+ localId: created.id,
126
+ name: server.name,
127
+ action: 'created',
128
+ }));
129
+ postCreateEvents.push((0, workflow_transfer_types_1.buildPostCreateEvent)('mcpServer', created, payload));
130
+ if (shouldDisable) {
131
+ warnings.push(`MCP server "${server.name}" was disabled because it depends on an imported placeholder credential.`);
132
+ }
133
+ }
134
+ return {
135
+ idMap,
136
+ resources,
137
+ warnings,
138
+ postCreateEvents,
139
+ };
140
+ }
141
+ getPlaceholderCredentialExportIds(ctx) {
142
+ const placeholderExportIds = ctx.getDependencyResult('credential')?.metadata?.placeholderExportIds;
143
+ if (placeholderExportIds instanceof Set) {
144
+ return placeholderExportIds;
145
+ }
146
+ return Array.isArray(placeholderExportIds)
147
+ ? new Set(placeholderExportIds.filter((id) => typeof id === 'string'))
148
+ : new Set();
149
+ }
150
+ isEquivalentMcpServer(existing, imported, importedCredential) {
151
+ const existingCredentialName = existing.credential && typeof existing.credential === 'object'
152
+ ? existing.credential.name
153
+ : null;
154
+ const importedCredentialName = importedCredential?.name ?? null;
155
+ return (existing.transport === imported.transport &&
156
+ (existing.url ?? null) === (imported.url ?? null) &&
157
+ (existing.command ?? null) === (imported.command ?? null) &&
158
+ (0, node_util_1.isDeepStrictEqual)(existing.args ?? null, imported.args ?? null) &&
159
+ (existing.cwd ?? null) === (imported.cwd ?? null) &&
160
+ existingCredentialName === importedCredentialName);
161
+ }
162
+ };
163
+ exports.McpServerTransferAdapter = McpServerTransferAdapter;
164
+ exports.McpServerTransferAdapter = McpServerTransferAdapter = __decorate([
165
+ (0, workflow_transfer_resource_adapter_1.WorkflowTransferAdapter)(),
166
+ (0, common_1.Injectable)(),
167
+ __metadata("design:paramtypes", [mcp_server_service_1.McpServerService])
168
+ ], McpServerTransferAdapter);
169
+ //# sourceMappingURL=mcp-server-transfer.adapter.js.map