@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
|
@@ -0,0 +1,98 @@
|
|
|
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 { WorkflowImportResourceResult } from '@hexabot-ai/types';
|
|
8
|
+
import { BadRequestException } from '@nestjs/common';
|
|
9
|
+
|
|
10
|
+
import { BaseOrmEntity } from '@/database/entities/base.entity';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Workflow transfer persistence contract:
|
|
14
|
+
* - WorkflowTransferService owns the import transaction boundary.
|
|
15
|
+
* - Resource adapters receive EntityManager for transactional writes.
|
|
16
|
+
* - Export reads use owning module services wherever available.
|
|
17
|
+
* - Transfer does not introduce duplicate repositories for owned resources.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export const PLACEHOLDER_CREDENTIAL_VALUE =
|
|
21
|
+
'__HEXABOT_IMPORTED_CREDENTIAL_PLACEHOLDER__';
|
|
22
|
+
|
|
23
|
+
export type WorkflowTransferPostCreateEvent<
|
|
24
|
+
Entity extends BaseOrmEntity<any> = BaseOrmEntity<any>,
|
|
25
|
+
> = {
|
|
26
|
+
entityName: string;
|
|
27
|
+
entity: Entity;
|
|
28
|
+
payload: unknown;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export type WorkflowTransferImportAdapterResult = {
|
|
32
|
+
idMap: Record<string, string>;
|
|
33
|
+
resources: WorkflowImportResourceResult[];
|
|
34
|
+
warnings: string[];
|
|
35
|
+
postCreateEvents: WorkflowTransferPostCreateEvent[];
|
|
36
|
+
metadata?: Record<string, unknown>;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export type WorkflowTransferResourceIdMaps = Record<
|
|
40
|
+
string,
|
|
41
|
+
Record<string, string>
|
|
42
|
+
>;
|
|
43
|
+
|
|
44
|
+
export type ImportedWorkflowTransferResources = {
|
|
45
|
+
bindingIdMaps: WorkflowTransferResourceIdMaps;
|
|
46
|
+
taskIdMaps: WorkflowTransferResourceIdMaps;
|
|
47
|
+
resources: WorkflowImportResourceResult[];
|
|
48
|
+
warnings: string[];
|
|
49
|
+
postCreateEvents: WorkflowTransferPostCreateEvent[];
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
type ResourceActionInput = Omit<WorkflowImportResourceResult, 'localId'> & {
|
|
53
|
+
localId?: string;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export const uniqueResourceIds = (ids: string[]): string[] => {
|
|
57
|
+
return Array.from(new Set(ids));
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const assertFoundAll = (
|
|
61
|
+
resourceLabel: string,
|
|
62
|
+
expectedIds: string[],
|
|
63
|
+
foundIds: string[],
|
|
64
|
+
): void => {
|
|
65
|
+
const found = new Set(foundIds);
|
|
66
|
+
const missing = expectedIds.filter((id) => !found.has(id));
|
|
67
|
+
if (missing.length > 0) {
|
|
68
|
+
throw new BadRequestException(
|
|
69
|
+
`Unable to export workflow: missing ${resourceLabel}(s): ${missing.join(
|
|
70
|
+
', ',
|
|
71
|
+
)}`,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const buildResourceResult = (
|
|
77
|
+
input: ResourceActionInput,
|
|
78
|
+
): WorkflowImportResourceResult => {
|
|
79
|
+
if (!input.localId) {
|
|
80
|
+
throw new Error(`Missing local ID for imported ${input.kind}`);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
kind: input.kind,
|
|
85
|
+
exportId: input.exportId,
|
|
86
|
+
localId: input.localId,
|
|
87
|
+
name: input.name,
|
|
88
|
+
action: input.action,
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const buildPostCreateEvent = <Entity extends BaseOrmEntity<any>>(
|
|
93
|
+
entityName: string,
|
|
94
|
+
entity: Entity,
|
|
95
|
+
payload: unknown,
|
|
96
|
+
): WorkflowTransferPostCreateEvent<Entity> => {
|
|
97
|
+
return { entityName, entity, payload };
|
|
98
|
+
};
|
|
@@ -64,6 +64,7 @@ export const workflowRunOrmFixtures: WorkflowRunOrmFixture[] = [
|
|
|
64
64
|
workflow: workflowRunWorkflowFixtureId,
|
|
65
65
|
workflowVersion: workflowRunWorkflowVersionFixtureId,
|
|
66
66
|
triggeredBy: userFixtureIds.admin,
|
|
67
|
+
parentRun: null,
|
|
67
68
|
status: 'running',
|
|
68
69
|
input: { source: 'fixture' },
|
|
69
70
|
output: null,
|
|
@@ -92,6 +93,7 @@ export const workflowRunOrmFixtures: WorkflowRunOrmFixture[] = [
|
|
|
92
93
|
workflow: workflowRunWorkflowFixtureId,
|
|
93
94
|
workflowVersion: workflowRunWorkflowVersionFixtureId,
|
|
94
95
|
triggeredBy: null,
|
|
96
|
+
parentRun: null,
|
|
95
97
|
status: 'finished',
|
|
96
98
|
input: null,
|
|
97
99
|
output: { result: 'ok' },
|
|
@@ -117,7 +119,7 @@ export const workflowRunOrmFixtures: WorkflowRunOrmFixture[] = [
|
|
|
117
119
|
|
|
118
120
|
const findRunsWithRelations = async (dataSource: DataSource) =>
|
|
119
121
|
await dataSource.getRepository(WorkflowRunOrmEntity).find({
|
|
120
|
-
relations: ['workflow', 'workflowVersion', 'triggeredBy'],
|
|
122
|
+
relations: ['workflow', 'workflowVersion', 'triggeredBy', 'parentRun'],
|
|
121
123
|
});
|
|
122
124
|
const ensureWorkflowFixture = async (dataSource: DataSource) => {
|
|
123
125
|
const workflowRepository = dataSource.getRepository(WorkflowOrmEntity);
|
|
@@ -212,6 +214,7 @@ export const installWorkflowRunFixturesTypeOrm = async (
|
|
|
212
214
|
? { id: fixture.workflowVersion }
|
|
213
215
|
: null,
|
|
214
216
|
triggeredBy: fixture.triggeredBy ? { id: fixture.triggeredBy } : null,
|
|
217
|
+
parentRun: fixture.parentRun ? { id: fixture.parentRun } : null,
|
|
215
218
|
status: fixture.status ?? 'idle',
|
|
216
219
|
input: fixture.input ?? null,
|
|
217
220
|
output: fixture.output ?? null,
|
|
@@ -19,7 +19,12 @@ import { LoggerService } from '@/logger/logger.service';
|
|
|
19
19
|
import { SettingService } from '@/setting/services/setting.service';
|
|
20
20
|
import { CredentialService } from '@/user/services/credential.service';
|
|
21
21
|
import { cloneObject } from '@/utils/helpers/clone';
|
|
22
|
-
import {
|
|
22
|
+
import {
|
|
23
|
+
WORKFLOW_CALL_SERVICE,
|
|
24
|
+
WorkflowContextState,
|
|
25
|
+
WorkflowType,
|
|
26
|
+
type WorkflowCallService,
|
|
27
|
+
} from '@/workflow/types';
|
|
23
28
|
|
|
24
29
|
import { TriggerEventWrapper } from '../lib/trigger-event-wrapper';
|
|
25
30
|
import { McpClientPoolService } from '../services/mcp-client-pool.service';
|
|
@@ -64,6 +69,9 @@ export abstract class WorkflowRuntimeContext<
|
|
|
64
69
|
@Inject(McpClientPoolService)
|
|
65
70
|
protected readonly mcp: McpClientPoolService;
|
|
66
71
|
|
|
72
|
+
@Inject(WORKFLOW_CALL_SERVICE)
|
|
73
|
+
protected readonly workflowCallService: WorkflowCallService;
|
|
74
|
+
|
|
67
75
|
public memoryStore: MemoryStore;
|
|
68
76
|
|
|
69
77
|
constructor() {
|
|
@@ -82,6 +90,9 @@ export abstract class WorkflowRuntimeContext<
|
|
|
82
90
|
actions: this.actionService,
|
|
83
91
|
credentials: this.credentialService,
|
|
84
92
|
mcp: this.mcp,
|
|
93
|
+
// Expose the workflow-call contract, not the concrete AgenticService, so
|
|
94
|
+
// contexts do not create a JS import cycle with WorkflowContextFactory.
|
|
95
|
+
agentic: this.workflowCallService,
|
|
85
96
|
};
|
|
86
97
|
}
|
|
87
98
|
|
|
@@ -42,6 +42,7 @@ export class WorkflowRunController extends BaseOrmController<WorkflowRunOrmEntit
|
|
|
42
42
|
'workflowVersion.version',
|
|
43
43
|
'triggeredBy.id',
|
|
44
44
|
'thread.id',
|
|
45
|
+
'parentRun.id',
|
|
45
46
|
'status',
|
|
46
47
|
'suspendedStep',
|
|
47
48
|
'suspensionReason',
|
|
@@ -76,6 +77,7 @@ export class WorkflowRunController extends BaseOrmController<WorkflowRunOrmEntit
|
|
|
76
77
|
'workflowVersion.version',
|
|
77
78
|
'triggeredBy.id',
|
|
78
79
|
'thread.id',
|
|
80
|
+
'parentRun.id',
|
|
79
81
|
'status',
|
|
80
82
|
'suspendedStep',
|
|
81
83
|
'suspensionReason',
|
|
@@ -64,6 +64,16 @@ export class WorkflowRunCreateDto {
|
|
|
64
64
|
})
|
|
65
65
|
workflowVersion?: string | null;
|
|
66
66
|
|
|
67
|
+
@ApiPropertyOptional({
|
|
68
|
+
description: 'Parent workflow run waiting for this run',
|
|
69
|
+
type: String,
|
|
70
|
+
})
|
|
71
|
+
@IsOptional()
|
|
72
|
+
@IsUUIDv4({
|
|
73
|
+
message: 'Parent workflow run must be a valid UUID',
|
|
74
|
+
})
|
|
75
|
+
parentRun?: string | null;
|
|
76
|
+
|
|
67
77
|
@ApiPropertyOptional({
|
|
68
78
|
description: 'Lifecycle status of the run',
|
|
69
79
|
enum: WORKFLOW_RUN_STATUSES,
|
|
@@ -12,7 +12,14 @@ import {
|
|
|
12
12
|
type WorkflowSnapshot,
|
|
13
13
|
} from '@hexabot-ai/agentic';
|
|
14
14
|
import { workflowRunSchema, workflowRunFullSchema } from '@hexabot-ai/types';
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
Column,
|
|
17
|
+
Entity,
|
|
18
|
+
Index,
|
|
19
|
+
JoinColumn,
|
|
20
|
+
ManyToOne,
|
|
21
|
+
RelationId,
|
|
22
|
+
} from 'typeorm';
|
|
16
23
|
|
|
17
24
|
import { ThreadOrmEntity } from '@/chat/entities/thread.entity';
|
|
18
25
|
import { DatetimeColumn } from '@/database/decorators/datetime-column.decorator';
|
|
@@ -29,6 +36,7 @@ import { WorkflowVersionOrmEntity } from './workflow-version.entity';
|
|
|
29
36
|
import { WorkflowOrmEntity } from './workflow.entity';
|
|
30
37
|
|
|
31
38
|
@Entity({ name: 'workflow_runs' })
|
|
39
|
+
@Index(['parentRun'])
|
|
32
40
|
export class WorkflowRunOrmEntity extends BaseOrmEntity<WorkflowRunDto> {
|
|
33
41
|
plainCls = workflowRunSchema;
|
|
34
42
|
|
|
@@ -86,6 +94,19 @@ export class WorkflowRunOrmEntity extends BaseOrmEntity<WorkflowRunDto> {
|
|
|
86
94
|
@RelationId((run: WorkflowRunOrmEntity) => run.thread)
|
|
87
95
|
private readonly threadId?: string | null;
|
|
88
96
|
|
|
97
|
+
/** Parent workflow run that is waiting for this run to return. */
|
|
98
|
+
@ManyToOne(() => WorkflowRunOrmEntity, {
|
|
99
|
+
nullable: true,
|
|
100
|
+
onDelete: 'SET NULL',
|
|
101
|
+
})
|
|
102
|
+
@JoinColumn({ name: 'parent_run_id' })
|
|
103
|
+
@AsRelation()
|
|
104
|
+
parentRun?: WorkflowRunOrmEntity | null;
|
|
105
|
+
|
|
106
|
+
/** Identifier of the parent run (for internal relations). */
|
|
107
|
+
@RelationId((run: WorkflowRunOrmEntity) => run.parentRun)
|
|
108
|
+
private readonly parentRunId?: string | null;
|
|
109
|
+
|
|
89
110
|
/** Lifecycle status of the run (idle, running, suspended, finished, failed). */
|
|
90
111
|
@EnumColumn({
|
|
91
112
|
enum: WORKFLOW_RUN_STATUSES,
|
package/src/workflow/index.ts
CHANGED
|
@@ -72,4 +72,18 @@ export * from './services/mcp-server.service';
|
|
|
72
72
|
|
|
73
73
|
export * from './services/mcp-client-pool.service';
|
|
74
74
|
|
|
75
|
+
export * from '../transfer/workflow-transfer.module';
|
|
76
|
+
|
|
77
|
+
export * from '../transfer/workflow-transfer.controller';
|
|
78
|
+
|
|
79
|
+
export * from '../transfer/workflow-transfer-definition.service';
|
|
80
|
+
|
|
81
|
+
export * from '../transfer/workflow-transfer-resource-adapter';
|
|
82
|
+
|
|
83
|
+
export * from '../transfer/workflow-transfer-adapter.registry';
|
|
84
|
+
|
|
85
|
+
export * from '../transfer/workflow-transfer.types';
|
|
86
|
+
|
|
87
|
+
export * from '../transfer/workflow-transfer.service';
|
|
88
|
+
|
|
75
89
|
export * from './defaults/default-workflow';
|
|
@@ -23,6 +23,12 @@ export class WorkflowRunRepository extends BaseOrmRepository<WorkflowRunOrmEntit
|
|
|
23
23
|
@InjectRepository(WorkflowRunOrmEntity)
|
|
24
24
|
repository: Repository<WorkflowRunOrmEntity>,
|
|
25
25
|
) {
|
|
26
|
-
super(repository, [
|
|
26
|
+
super(repository, [
|
|
27
|
+
'workflow',
|
|
28
|
+
'workflowVersion',
|
|
29
|
+
'triggeredBy',
|
|
30
|
+
'thread',
|
|
31
|
+
'parentRun',
|
|
32
|
+
]);
|
|
27
33
|
}
|
|
28
34
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
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 { WORKFLOW_TRANSFER_RESOURCE_KIND_PATTERN } from '@hexabot-ai/types';
|
|
8
|
+
|
|
9
|
+
export type WorkflowResourceRefKind = string;
|
|
10
|
+
|
|
11
|
+
export const WORKFLOW_RESOURCE_REF_METADATA_KEY = 'x-hexabot:resourceRef';
|
|
12
|
+
|
|
13
|
+
export type WorkflowResourceRefMetadata = {
|
|
14
|
+
kind: WorkflowResourceRefKind;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type WorkflowActionResourceRefSource = 'input' | 'settings';
|
|
18
|
+
|
|
19
|
+
export type WorkflowSchemaResourceRefDescriptor = {
|
|
20
|
+
kind: WorkflowResourceRefKind;
|
|
21
|
+
path: string;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type WorkflowActionResourceRefDescriptor =
|
|
25
|
+
WorkflowSchemaResourceRefDescriptor & {
|
|
26
|
+
source: WorkflowActionResourceRefSource;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const workflowResourceRef = (
|
|
30
|
+
kind: WorkflowResourceRefKind,
|
|
31
|
+
): {
|
|
32
|
+
[WORKFLOW_RESOURCE_REF_METADATA_KEY]: WorkflowResourceRefMetadata;
|
|
33
|
+
} => ({
|
|
34
|
+
[WORKFLOW_RESOURCE_REF_METADATA_KEY]: { kind },
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
export const isWorkflowResourceRefKind = (
|
|
38
|
+
value: unknown,
|
|
39
|
+
): value is WorkflowResourceRefKind => {
|
|
40
|
+
return (
|
|
41
|
+
typeof value === 'string' &&
|
|
42
|
+
WORKFLOW_TRANSFER_RESOURCE_KIND_PATTERN.test(value)
|
|
43
|
+
);
|
|
44
|
+
};
|