@chenchaolong/plugin-trade-compliance-workbench 1.0.5 → 1.0.7
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/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/adapters/hsbianma.provider.d.ts +6 -8
- package/dist/lib/adapters/hsbianma.provider.d.ts.map +1 -1
- package/dist/lib/adapters/hsbianma.provider.js +159 -53
- package/dist/lib/adapters/hsbianma.provider.js.map +1 -1
- package/dist/lib/adapters/translation.provider.d.ts +7 -1
- package/dist/lib/adapters/translation.provider.d.ts.map +1 -1
- package/dist/lib/adapters/translation.provider.js +15 -5
- package/dist/lib/adapters/translation.provider.js.map +1 -1
- package/dist/lib/domain/catalog-localization.d.ts +14 -0
- package/dist/lib/domain/catalog-localization.d.ts.map +1 -0
- package/dist/lib/domain/catalog-localization.js +19 -0
- package/dist/lib/domain/catalog-localization.js.map +1 -0
- package/dist/lib/domain/file-name.d.ts +8 -0
- package/dist/lib/domain/file-name.d.ts.map +1 -0
- package/dist/lib/domain/file-name.js +111 -0
- package/dist/lib/domain/file-name.js.map +1 -0
- package/dist/lib/domain/import-issues.d.ts +4 -0
- package/dist/lib/domain/import-issues.d.ts.map +1 -1
- package/dist/lib/domain/import-issues.js +14 -3
- package/dist/lib/domain/import-issues.js.map +1 -1
- package/dist/lib/entities/catalog.entity.d.ts +5 -1
- package/dist/lib/entities/catalog.entity.d.ts.map +1 -1
- package/dist/lib/entities/catalog.entity.js +16 -0
- package/dist/lib/entities/catalog.entity.js.map +1 -1
- package/dist/lib/entities/customer.entity.d.ts +3 -0
- package/dist/lib/entities/customer.entity.d.ts.map +1 -1
- package/dist/lib/entities/customer.entity.js +12 -0
- package/dist/lib/entities/customer.entity.js.map +1 -1
- package/dist/lib/entities/shared.entity.d.ts +9 -0
- package/dist/lib/entities/shared.entity.d.ts.map +1 -1
- package/dist/lib/entities/shared.entity.js +33 -0
- package/dist/lib/entities/shared.entity.js.map +1 -1
- package/dist/lib/import-jobs/agent-handoff.dispatcher.d.ts +15 -0
- package/dist/lib/import-jobs/agent-handoff.dispatcher.d.ts.map +1 -0
- package/dist/lib/import-jobs/agent-handoff.dispatcher.js +114 -0
- package/dist/lib/import-jobs/agent-handoff.dispatcher.js.map +1 -0
- package/dist/lib/import-jobs/contracts.d.ts +76 -0
- package/dist/lib/import-jobs/contracts.d.ts.map +1 -0
- package/dist/lib/import-jobs/contracts.js +31 -0
- package/dist/lib/import-jobs/contracts.js.map +1 -0
- package/dist/lib/import-jobs/import-command.builder.d.ts +30 -0
- package/dist/lib/import-jobs/import-command.builder.d.ts.map +1 -0
- package/dist/lib/import-jobs/import-command.builder.js +97 -0
- package/dist/lib/import-jobs/import-command.builder.js.map +1 -0
- package/dist/lib/import-jobs/import-job-callback.processor.d.ts +15 -0
- package/dist/lib/import-jobs/import-job-callback.processor.d.ts.map +1 -0
- package/dist/lib/import-jobs/import-job-callback.processor.js +107 -0
- package/dist/lib/import-jobs/import-job-callback.processor.js.map +1 -0
- package/dist/lib/import-jobs/import-job.coordinator.d.ts +17 -0
- package/dist/lib/import-jobs/import-job.coordinator.d.ts.map +1 -0
- package/dist/lib/import-jobs/import-job.coordinator.js +256 -0
- package/dist/lib/import-jobs/import-job.coordinator.js.map +1 -0
- package/dist/lib/import-jobs/import-job.processor.d.ts +24 -0
- package/dist/lib/import-jobs/import-job.processor.d.ts.map +1 -0
- package/dist/lib/import-jobs/import-job.processor.js +213 -0
- package/dist/lib/import-jobs/import-job.processor.js.map +1 -0
- package/dist/lib/import-jobs/import-timeout.processor.d.ts +12 -0
- package/dist/lib/import-jobs/import-timeout.processor.d.ts.map +1 -0
- package/dist/lib/import-jobs/import-timeout.processor.js +37 -0
- package/dist/lib/import-jobs/import-timeout.processor.js.map +1 -0
- package/dist/lib/import-jobs/organization-lease.d.ts +39 -0
- package/dist/lib/import-jobs/organization-lease.d.ts.map +1 -0
- package/dist/lib/import-jobs/organization-lease.js +136 -0
- package/dist/lib/import-jobs/organization-lease.js.map +1 -0
- package/dist/lib/plugin-context.token.d.ts +4 -0
- package/dist/lib/plugin-context.token.d.ts.map +1 -0
- package/dist/lib/plugin-context.token.js +2 -0
- package/dist/lib/plugin-context.token.js.map +1 -0
- package/dist/lib/public-dto.d.ts +6 -0
- package/dist/lib/public-dto.d.ts.map +1 -0
- package/dist/lib/public-dto.js +33 -0
- package/dist/lib/public-dto.js.map +1 -0
- package/dist/lib/remote-components/trade-compliance-workbench/app.css +1 -1
- package/dist/lib/remote-components/trade-compliance-workbench/app.js +5 -5
- package/dist/lib/remote-ui/action-execution.d.ts +26 -0
- package/dist/lib/remote-ui/action-execution.d.ts.map +1 -0
- package/dist/lib/remote-ui/action-execution.js +85 -0
- package/dist/lib/remote-ui/action-execution.js.map +1 -0
- package/dist/lib/remote-ui/analytics-contracts.d.ts +3 -2
- package/dist/lib/remote-ui/analytics-contracts.d.ts.map +1 -1
- package/dist/lib/remote-ui/analytics-contracts.js.map +1 -1
- package/dist/lib/remote-ui/app-source.d.ts.map +1 -1
- package/dist/lib/remote-ui/app-source.js +426 -169
- package/dist/lib/remote-ui/app-source.js.map +1 -1
- package/dist/lib/remote-ui/company-logo-lifecycle.d.ts +14 -0
- package/dist/lib/remote-ui/company-logo-lifecycle.d.ts.map +1 -0
- package/dist/lib/remote-ui/company-logo-lifecycle.js +52 -0
- package/dist/lib/remote-ui/company-logo-lifecycle.js.map +1 -0
- package/dist/lib/remote-ui/components/data-grid.d.ts +9 -4
- package/dist/lib/remote-ui/components/data-grid.d.ts.map +1 -1
- package/dist/lib/remote-ui/components/data-grid.js +41 -9
- package/dist/lib/remote-ui/components/data-grid.js.map +1 -1
- package/dist/lib/remote-ui/components/forms.d.ts +6 -1
- package/dist/lib/remote-ui/components/forms.d.ts.map +1 -1
- package/dist/lib/remote-ui/components/forms.js +6 -1
- package/dist/lib/remote-ui/components/forms.js.map +1 -1
- package/dist/lib/remote-ui/components/layout.d.ts.map +1 -1
- package/dist/lib/remote-ui/components/layout.js +3 -3
- package/dist/lib/remote-ui/components/layout.js.map +1 -1
- package/dist/lib/remote-ui/contract-import.d.ts +37 -32
- package/dist/lib/remote-ui/contract-import.d.ts.map +1 -1
- package/dist/lib/remote-ui/contract-import.js +51 -59
- package/dist/lib/remote-ui/contract-import.js.map +1 -1
- package/dist/lib/remote-ui/contracts.d.ts +20 -27
- package/dist/lib/remote-ui/contracts.d.ts.map +1 -1
- package/dist/lib/remote-ui/contracts.js +8 -0
- package/dist/lib/remote-ui/contracts.js.map +1 -1
- package/dist/lib/remote-ui/customer-contract-contracts.d.ts +5 -11
- package/dist/lib/remote-ui/customer-contract-contracts.d.ts.map +1 -1
- package/dist/lib/remote-ui/customer-contract-contracts.js.map +1 -1
- package/dist/lib/remote-ui/date-time.d.ts +3 -0
- package/dist/lib/remote-ui/date-time.d.ts.map +1 -0
- package/dist/lib/remote-ui/date-time.js +58 -0
- package/dist/lib/remote-ui/date-time.js.map +1 -0
- package/dist/lib/remote-ui/model.d.ts +26 -1
- package/dist/lib/remote-ui/model.d.ts.map +1 -1
- package/dist/lib/remote-ui/model.js +151 -15
- package/dist/lib/remote-ui/model.js.map +1 -1
- package/dist/lib/remote-ui/pages/analytics.d.ts +2 -0
- package/dist/lib/remote-ui/pages/analytics.d.ts.map +1 -1
- package/dist/lib/remote-ui/pages/analytics.js +11 -6
- package/dist/lib/remote-ui/pages/analytics.js.map +1 -1
- package/dist/lib/remote-ui/pages/catalogs.d.ts +37 -14
- package/dist/lib/remote-ui/pages/catalogs.d.ts.map +1 -1
- package/dist/lib/remote-ui/pages/catalogs.js +149 -91
- package/dist/lib/remote-ui/pages/catalogs.js.map +1 -1
- package/dist/lib/remote-ui/pages/contracts.d.ts +11 -6
- package/dist/lib/remote-ui/pages/contracts.d.ts.map +1 -1
- package/dist/lib/remote-ui/pages/contracts.js +45 -33
- package/dist/lib/remote-ui/pages/contracts.js.map +1 -1
- package/dist/lib/remote-ui/pages/files.d.ts +29 -3
- package/dist/lib/remote-ui/pages/files.d.ts.map +1 -1
- package/dist/lib/remote-ui/pages/files.js +60 -16
- package/dist/lib/remote-ui/pages/files.js.map +1 -1
- package/dist/lib/remote-ui/pages/home.d.ts.map +1 -1
- package/dist/lib/remote-ui/pages/home.js +18 -18
- package/dist/lib/remote-ui/pages/home.js.map +1 -1
- package/dist/lib/remote-ui/pages/procurement.d.ts +29 -4
- package/dist/lib/remote-ui/pages/procurement.d.ts.map +1 -1
- package/dist/lib/remote-ui/pages/procurement.js +58 -63
- package/dist/lib/remote-ui/pages/procurement.js.map +1 -1
- package/dist/lib/remote-ui/pages/sales.d.ts +47 -1
- package/dist/lib/remote-ui/pages/sales.d.ts.map +1 -1
- package/dist/lib/remote-ui/pages/sales.js +60 -20
- package/dist/lib/remote-ui/pages/sales.js.map +1 -1
- package/dist/lib/remote-ui/pages/settings.d.ts +34 -1
- package/dist/lib/remote-ui/pages/settings.d.ts.map +1 -1
- package/dist/lib/remote-ui/pages/settings.js +120 -94
- package/dist/lib/remote-ui/pages/settings.js.map +1 -1
- package/dist/lib/remote-ui/polling.d.ts +41 -0
- package/dist/lib/remote-ui/polling.d.ts.map +1 -0
- package/dist/lib/remote-ui/polling.js +148 -0
- package/dist/lib/remote-ui/polling.js.map +1 -0
- package/dist/lib/remote-ui/procurement-contracts.d.ts +4 -9
- package/dist/lib/remote-ui/procurement-contracts.d.ts.map +1 -1
- package/dist/lib/remote-ui/sales-contracts.d.ts +2 -2
- package/dist/lib/remote-ui/sales-contracts.d.ts.map +1 -1
- package/dist/lib/remote-ui/settings-contracts.d.ts +9 -1
- package/dist/lib/remote-ui/settings-contracts.d.ts.map +1 -1
- package/dist/lib/remote-ui/settings-contracts.js.map +1 -1
- package/dist/lib/remote-ui/toast-queue.d.ts +29 -0
- package/dist/lib/remote-ui/toast-queue.d.ts.map +1 -0
- package/dist/lib/remote-ui/toast-queue.js +71 -0
- package/dist/lib/remote-ui/toast-queue.js.map +1 -0
- package/dist/lib/sales-file.service.d.ts.map +1 -1
- package/dist/lib/sales-file.service.js +5 -5
- package/dist/lib/sales-file.service.js.map +1 -1
- package/dist/lib/types.d.ts +5 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +3 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/workbench-action-contract.d.ts +4 -0
- package/dist/lib/workbench-action-contract.d.ts.map +1 -0
- package/dist/lib/workbench-action-contract.js +43 -0
- package/dist/lib/workbench-action-contract.js.map +1 -0
- package/dist/lib/workbench-view.provider.d.ts +57 -78
- package/dist/lib/workbench-view.provider.d.ts.map +1 -1
- package/dist/lib/workbench-view.provider.js +89 -91
- package/dist/lib/workbench-view.provider.js.map +1 -1
- package/dist/lib/workbench.middleware.d.ts +129 -72
- package/dist/lib/workbench.middleware.d.ts.map +1 -1
- package/dist/lib/workbench.middleware.js +16 -3
- package/dist/lib/workbench.middleware.js.map +1 -1
- package/dist/lib/workbench.plugin.d.ts +3 -1
- package/dist/lib/workbench.plugin.d.ts.map +1 -1
- package/dist/lib/workbench.plugin.js +13 -4
- package/dist/lib/workbench.plugin.js.map +1 -1
- package/dist/lib/workbench.service.d.ts +136 -40
- package/dist/lib/workbench.service.d.ts.map +1 -1
- package/dist/lib/workbench.service.js +985 -71
- package/dist/lib/workbench.service.js.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
+
import { Inject, Injectable } from '@nestjs/common';
|
|
3
|
+
import { AGENT_CHAT_DISPATCH_MESSAGE_TYPE, HANDOFF_PERMISSION_SERVICE_TOKEN } from '@xpert-ai/plugin-sdk';
|
|
4
|
+
import { TRADE_COMPLIANCE_PLUGIN_CONTEXT } from '../plugin-context.token.js';
|
|
5
|
+
export const TRADE_COMPLIANCE_IMPORT_CALLBACK_MESSAGE_TYPE = 'plugin.trade_compliance.import_callback.v1';
|
|
6
|
+
let AgentHandoffDispatcher = class AgentHandoffDispatcher {
|
|
7
|
+
constructor(pluginContext) {
|
|
8
|
+
this.pluginContext = pluginContext;
|
|
9
|
+
}
|
|
10
|
+
buildMessage(item, scope, command) {
|
|
11
|
+
const tenantId = required(scope.tenantId, 'tenantId');
|
|
12
|
+
const organizationId = required(scope.organizationId, 'organizationId');
|
|
13
|
+
const targetAssistantId = required(item.targetAssistantId, 'targetAssistantId');
|
|
14
|
+
const stableId = handoffMessageId(item);
|
|
15
|
+
const request = chatRequest(command);
|
|
16
|
+
const callbackContext = {
|
|
17
|
+
type: item.type,
|
|
18
|
+
tenantId,
|
|
19
|
+
organizationId,
|
|
20
|
+
userId: scope.userId ?? undefined,
|
|
21
|
+
targetAssistantId,
|
|
22
|
+
importTaskId: item.importTaskId,
|
|
23
|
+
...(item.type === 'CUSTOMER_REANALYSIS' ? { analysisRunId: item.analysisRunId } : {})
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
id: stableId,
|
|
27
|
+
type: AGENT_CHAT_DISPATCH_MESSAGE_TYPE,
|
|
28
|
+
version: 1,
|
|
29
|
+
tenantId,
|
|
30
|
+
sessionKey: stableId,
|
|
31
|
+
businessKey: stableId,
|
|
32
|
+
attempt: 1,
|
|
33
|
+
maxAttempts: 1,
|
|
34
|
+
enqueuedAt: Date.now(),
|
|
35
|
+
traceId: stableId,
|
|
36
|
+
headers: {
|
|
37
|
+
organizationId,
|
|
38
|
+
...(scope.userId ? { userId: scope.userId } : {}),
|
|
39
|
+
targetAgent: targetAssistantId,
|
|
40
|
+
source: 'api',
|
|
41
|
+
requestedLane: 'main',
|
|
42
|
+
handoffQueue: 'batch'
|
|
43
|
+
},
|
|
44
|
+
payload: {
|
|
45
|
+
request,
|
|
46
|
+
options: {
|
|
47
|
+
xpertId: targetAssistantId,
|
|
48
|
+
from: 'job',
|
|
49
|
+
runtimePrincipal: { type: 'assistant', xpertId: targetAssistantId }
|
|
50
|
+
},
|
|
51
|
+
callback: {
|
|
52
|
+
messageType: TRADE_COMPLIANCE_IMPORT_CALLBACK_MESSAGE_TYPE,
|
|
53
|
+
headers: {
|
|
54
|
+
organizationId,
|
|
55
|
+
...(scope.userId ? { userId: scope.userId } : {}),
|
|
56
|
+
targetAgent: targetAssistantId,
|
|
57
|
+
source: 'api',
|
|
58
|
+
requestedLane: 'main',
|
|
59
|
+
handoffQueue: 'batch'
|
|
60
|
+
},
|
|
61
|
+
context: callbackContext
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async dispatch(item, scope, command) {
|
|
67
|
+
this.handoffPermissionService ??=
|
|
68
|
+
this.pluginContext.resolve(HANDOFF_PERMISSION_SERVICE_TOKEN);
|
|
69
|
+
return this.handoffPermissionService.enqueue(this.buildMessage(item, scope, command), { delayMs: 0 });
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
AgentHandoffDispatcher = __decorate([
|
|
73
|
+
Injectable(),
|
|
74
|
+
__param(0, Inject(TRADE_COMPLIANCE_PLUGIN_CONTEXT)),
|
|
75
|
+
__metadata("design:paramtypes", [Object])
|
|
76
|
+
], AgentHandoffDispatcher);
|
|
77
|
+
export { AgentHandoffDispatcher };
|
|
78
|
+
function handoffMessageId(item) {
|
|
79
|
+
return item.type === 'IMPORT_TASK'
|
|
80
|
+
? `trade-compliance-import-task-${required(item.importTaskId, 'importTaskId')}`
|
|
81
|
+
: `trade-compliance-customer-reanalysis-${required(item.analysisRunId, 'analysisRunId')}`;
|
|
82
|
+
}
|
|
83
|
+
function chatRequest(command) {
|
|
84
|
+
if (command.commandKey !== 'assistant.chat.send_message') {
|
|
85
|
+
throw new Error('execution command must use assistant.chat.send_message');
|
|
86
|
+
}
|
|
87
|
+
const payload = command.payload;
|
|
88
|
+
if (typeof payload.text !== 'string')
|
|
89
|
+
throw new Error('execution command text is required');
|
|
90
|
+
if (payload.files !== undefined && !Array.isArray(payload.files)) {
|
|
91
|
+
throw new Error('execution command files must be an array');
|
|
92
|
+
}
|
|
93
|
+
if (payload.state !== undefined && (!payload.state || typeof payload.state !== 'object' || Array.isArray(payload.state))) {
|
|
94
|
+
throw new Error('execution command state must be an object');
|
|
95
|
+
}
|
|
96
|
+
if (payload.clientMessageId !== undefined && typeof payload.clientMessageId !== 'string') {
|
|
97
|
+
throw new Error('execution command clientMessageId must be a string');
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
action: 'send',
|
|
101
|
+
message: {
|
|
102
|
+
clientMessageId: payload.clientMessageId,
|
|
103
|
+
input: { input: payload.text, ...(payload.files ? { files: payload.files } : {}) }
|
|
104
|
+
},
|
|
105
|
+
state: payload.state
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function required(value, field) {
|
|
109
|
+
const normalized = value?.trim();
|
|
110
|
+
if (!normalized)
|
|
111
|
+
throw new Error(`${field} is required`);
|
|
112
|
+
return normalized;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=agent-handoff.dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-handoff.dispatcher.js","sourceRoot":"","sources":["../../../src/lib/import-jobs/agent-handoff.dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export declare const IMPORT_QUEUE_NAME = "trade-compliance-import";
|
|
2
|
+
export declare const IMPORT_JOB_NAME = "drain-organization";
|
|
3
|
+
export declare const IMPORT_TIMEOUT_JOB_NAME = "timeout-task";
|
|
4
|
+
export declare const IMPORT_TIMEOUT_DELAY_MS: number;
|
|
5
|
+
export interface OrganizationJobScope {
|
|
6
|
+
tenantId: string;
|
|
7
|
+
organizationId: string;
|
|
8
|
+
scopeKey?: string | null;
|
|
9
|
+
userId?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface OrganizationDrainPayload {
|
|
12
|
+
tenantId: string;
|
|
13
|
+
organizationId: string;
|
|
14
|
+
}
|
|
15
|
+
export interface OrganizationWakeRequest {
|
|
16
|
+
reason: string;
|
|
17
|
+
}
|
|
18
|
+
export type ImportHandoffWorkItem = {
|
|
19
|
+
type: 'IMPORT_TASK';
|
|
20
|
+
id: string;
|
|
21
|
+
importTaskId: string;
|
|
22
|
+
targetAssistantId: string;
|
|
23
|
+
} | {
|
|
24
|
+
type: 'CUSTOMER_REANALYSIS';
|
|
25
|
+
id: string;
|
|
26
|
+
importTaskId: string;
|
|
27
|
+
analysisRunId: string;
|
|
28
|
+
targetAssistantId: string;
|
|
29
|
+
};
|
|
30
|
+
export type ImportBusinessTarget = {
|
|
31
|
+
type: 'IMPORT_TASK';
|
|
32
|
+
importTaskId: string;
|
|
33
|
+
} | {
|
|
34
|
+
type: 'CUSTOMER_REANALYSIS';
|
|
35
|
+
importTaskId: string;
|
|
36
|
+
analysisRunId: string;
|
|
37
|
+
};
|
|
38
|
+
export type ImportTimeoutTarget = ImportBusinessTarget & {
|
|
39
|
+
claimAttemptToken: string;
|
|
40
|
+
};
|
|
41
|
+
export type ImportTimeoutPayload = OrganizationDrainPayload & ImportTimeoutTarget;
|
|
42
|
+
export type RecoverableImportWorkItem = (OrganizationDrainPayload & {
|
|
43
|
+
type: 'IMPORT_TASK';
|
|
44
|
+
importTaskId: string;
|
|
45
|
+
status: 'QUEUED' | 'EXTRACTING' | 'AI_PARSING' | 'VALIDATING' | 'PERSISTING';
|
|
46
|
+
claimAttemptToken: string | null;
|
|
47
|
+
commandDispatchedAt: Date | null;
|
|
48
|
+
startedAt: Date | null;
|
|
49
|
+
}) | (OrganizationDrainPayload & {
|
|
50
|
+
type: 'CUSTOMER_REANALYSIS';
|
|
51
|
+
importTaskId: string;
|
|
52
|
+
analysisRunId: string;
|
|
53
|
+
customerContractId: string | null;
|
|
54
|
+
status: 'PENDING' | 'RUNNING';
|
|
55
|
+
claimAttemptToken: string | null;
|
|
56
|
+
commandDispatchedAt: Date | null;
|
|
57
|
+
startedAt: Date | null;
|
|
58
|
+
expiresAt: Date | null;
|
|
59
|
+
});
|
|
60
|
+
export type ActiveRecoveryStateSnapshot = Pick<RecoverableImportWorkItem, 'claimAttemptToken' | 'commandDispatchedAt' | 'startedAt'>;
|
|
61
|
+
export type ImportHandoffCallbackContext = Record<string, unknown> & OrganizationJobScope & {
|
|
62
|
+
targetAssistantId: string;
|
|
63
|
+
} & ImportBusinessTarget;
|
|
64
|
+
export declare const ORGANIZATION_DRAIN_PROCESSOR_OPTIONS: {
|
|
65
|
+
pluginName: string;
|
|
66
|
+
queueName: string;
|
|
67
|
+
jobName: string;
|
|
68
|
+
concurrency: number;
|
|
69
|
+
};
|
|
70
|
+
export declare function OrganizationDrainJobProcessor(): ClassDecorator;
|
|
71
|
+
export declare function queueScope(payload: OrganizationDrainPayload, context: {
|
|
72
|
+
tenantId?: string | null;
|
|
73
|
+
organizationId?: string | null;
|
|
74
|
+
userId?: string | null;
|
|
75
|
+
}): OrganizationJobScope;
|
|
76
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/lib/import-jobs/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { PluginJobProcessor } from '@xpert-ai/plugin-sdk';
|
|
2
|
+
import { PLUGIN_NAME } from '../constants.js';
|
|
3
|
+
export const IMPORT_QUEUE_NAME = 'trade-compliance-import';
|
|
4
|
+
export const IMPORT_JOB_NAME = 'drain-organization';
|
|
5
|
+
export const IMPORT_TIMEOUT_JOB_NAME = 'timeout-task';
|
|
6
|
+
export const IMPORT_TIMEOUT_DELAY_MS = 20 * 60 * 1000;
|
|
7
|
+
export const ORGANIZATION_DRAIN_PROCESSOR_OPTIONS = {
|
|
8
|
+
pluginName: PLUGIN_NAME,
|
|
9
|
+
queueName: IMPORT_QUEUE_NAME,
|
|
10
|
+
jobName: IMPORT_JOB_NAME,
|
|
11
|
+
concurrency: 8
|
|
12
|
+
};
|
|
13
|
+
export function OrganizationDrainJobProcessor() {
|
|
14
|
+
return PluginJobProcessor(ORGANIZATION_DRAIN_PROCESSOR_OPTIONS);
|
|
15
|
+
}
|
|
16
|
+
export function queueScope(payload, context) {
|
|
17
|
+
const tenantId = requireScopeValue(payload.tenantId, 'tenantId');
|
|
18
|
+
const organizationId = requireScopeValue(payload.organizationId, 'organizationId');
|
|
19
|
+
if (context.tenantId !== tenantId)
|
|
20
|
+
throw new Error('tenantId does not match managed queue payload');
|
|
21
|
+
if (context.organizationId !== organizationId)
|
|
22
|
+
throw new Error('organizationId does not match managed queue payload');
|
|
23
|
+
return { tenantId, organizationId, userId: context.userId ?? undefined };
|
|
24
|
+
}
|
|
25
|
+
function requireScopeValue(value, field) {
|
|
26
|
+
const normalized = value?.trim();
|
|
27
|
+
if (!normalized)
|
|
28
|
+
throw new Error(`${field} is required`);
|
|
29
|
+
return normalized;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/lib/import-jobs/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAkC,MAAM,sBAAsB,CAAA;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,yBAAyB,CAAA;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAA;AACnD,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CAAA;AACrD,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AA2ErD,MAAM,CAAC,MAAM,oCAAoC,GAAG;IAClD,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,iBAAiB;IAC5B,OAAO,EAAE,eAAe;IACxB,WAAW,EAAE,CAAC;CACqB,CAAA;AAErC,MAAM,UAAU,6BAA6B;IAC3C,OAAO,kBAAkB,CAAC,oCAAoC,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,OAAiC,EACjC,OAA6F;IAE7F,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAChE,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;IAClF,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IACnG,IAAI,OAAO,CAAC,cAAc,KAAK,cAAc;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACrH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE,CAAA;AAC1E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,KAAa;IACrD,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,CAAA;IAChC,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC,CAAA;IACxD,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { AssistantSourceHandle, CatalogType, CustomerContractReanalysisInput, ImportExecutionActionKey, ImportExecutionCommand } from '../types.js';
|
|
2
|
+
type ImportCommandTask = {
|
|
3
|
+
id: string;
|
|
4
|
+
sourceFileId: string;
|
|
5
|
+
sourceFileName: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function buildAssistantCommand(input: {
|
|
8
|
+
actionKey: ImportExecutionActionKey;
|
|
9
|
+
file: {
|
|
10
|
+
mimetype?: unknown;
|
|
11
|
+
type?: unknown;
|
|
12
|
+
size?: unknown;
|
|
13
|
+
};
|
|
14
|
+
sourceHandle: AssistantSourceHandle;
|
|
15
|
+
task: ImportCommandTask;
|
|
16
|
+
extracted: {
|
|
17
|
+
chunks?: string[];
|
|
18
|
+
};
|
|
19
|
+
catalogType?: CatalogType;
|
|
20
|
+
replaceBatchId?: string;
|
|
21
|
+
}): ImportExecutionCommand;
|
|
22
|
+
export declare function buildCustomerContractReanalysisCommand(started: {
|
|
23
|
+
run: {
|
|
24
|
+
id: string;
|
|
25
|
+
promptVersion: string;
|
|
26
|
+
};
|
|
27
|
+
clauses: CustomerContractReanalysisInput['clauses'];
|
|
28
|
+
}): ImportExecutionCommand;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=import-command.builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-command.builder.d.ts","sourceRoot":"","sources":["../../../src/lib/import-jobs/import-command.builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,qBAAqB,EACrB,WAAW,EACX,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,aAAa,CAAA;AAEpB,KAAK,iBAAiB,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,wBAAwB,CAAA;IACnC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IAC5D,YAAY,EAAE,qBAAqB,CAAA;IACnC,IAAI,EAAE,iBAAiB,CAAA;IACvB,SAAS,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IAChC,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,GAAG,sBAAsB,CAwBzB;AAED,wBAAgB,sCAAsC,CAAC,OAAO,EAAE;IAC9D,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,OAAO,EAAE,+BAA+B,CAAC,SAAS,CAAC,CAAA;CACpD,GAAG,sBAAsB,CA2BzB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { TOOL_NAMES } from '../constants.js';
|
|
2
|
+
import { DomainError, DomainErrorCodes } from '../types.js';
|
|
3
|
+
export function buildAssistantCommand(input) {
|
|
4
|
+
const { actionKey, file, sourceHandle, task, extracted, catalogType, replaceBatchId } = input;
|
|
5
|
+
const definition = IMPORT_COMMAND_DEFINITIONS[actionKey];
|
|
6
|
+
const chunks = extracted.chunks ?? [];
|
|
7
|
+
const source = chunks.length
|
|
8
|
+
? chunks.map((chunk, index) => `\n--- 原文分块 ${index + 1}/${chunks.length} ---\n${chunk}`).join('')
|
|
9
|
+
: '请直接读取附件内容。';
|
|
10
|
+
const fixed = JSON.stringify({
|
|
11
|
+
importTaskId: task.id,
|
|
12
|
+
sourceFileId: task.sourceFileId,
|
|
13
|
+
sourceFileName: task.sourceFileName,
|
|
14
|
+
catalogType,
|
|
15
|
+
replaceBatchId
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
commandKey: 'assistant.chat.send_message',
|
|
19
|
+
payload: {
|
|
20
|
+
text: `请解析上传的外贸合规文件。${definition.requirements}\n解析完成后必须调用工具 ${definition.toolName} 保存结果,以下固定参数必须原样传入:${fixed}\n统一使用中文说明,不要遗漏文件中的记录。${source}`,
|
|
21
|
+
clientMessageId: `trade-compliance:${task.id}`,
|
|
22
|
+
files: [assistantFile(file, sourceHandle, task.sourceFileName)],
|
|
23
|
+
followUpMode: 'queue',
|
|
24
|
+
state: { tradeComplianceWorkbench: { actionKey, importTaskId: task.id } }
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function buildCustomerContractReanalysisCommand(started) {
|
|
29
|
+
if (started.run.promptVersion !== 'CUSTOMER_CLAUSE_V1') {
|
|
30
|
+
throw new DomainError(DomainErrorCodes.INVALID_INPUT, '不支持的客户合同重新分析提示版本');
|
|
31
|
+
}
|
|
32
|
+
const fixed = JSON.stringify({ analysisRunId: started.run.id });
|
|
33
|
+
const clauses = JSON.stringify(started.clauses.map(clause => ({
|
|
34
|
+
clauseType: clause.clauseType,
|
|
35
|
+
extractionStatus: clause.extractionStatus,
|
|
36
|
+
reviewedText: clause.reviewedText,
|
|
37
|
+
sourceText: clause.sourceText,
|
|
38
|
+
sourceLocation: clause.sourceLocation,
|
|
39
|
+
sourceContent: clause.sourceContent
|
|
40
|
+
})));
|
|
41
|
+
return {
|
|
42
|
+
commandKey: 'assistant.chat.send_message',
|
|
43
|
+
payload: {
|
|
44
|
+
text: `请重新分析客户合同七类关键条款。必须按 clauseType 返回风险等级、中文风险提示和修改建议,并调用工具 ${TOOL_NAMES.saveCustomerContractReanalysis} 保存结果。固定参数必须原样传入:${fixed}\n待分析条款:${clauses}`,
|
|
45
|
+
clientMessageId: `trade-compliance:customer-reanalysis:${started.run.id}`,
|
|
46
|
+
followUpMode: 'queue',
|
|
47
|
+
state: {
|
|
48
|
+
tradeComplianceWorkbench: {
|
|
49
|
+
actionKey: 'reanalyze_customer_contract',
|
|
50
|
+
analysisRunId: started.run.id
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const IMPORT_COMMAND_DEFINITIONS = {
|
|
57
|
+
upload_controlled_catalog: {
|
|
58
|
+
toolName: TOOL_NAMES.saveControlledCatalog,
|
|
59
|
+
requirements: '完整提取管控商品。每行必须显式返回中文业务字段 productName、controlDescription,以及 translationSource(SOURCE_CHINESE 或 AGENT_TRANSLATED);SOURCE_CHINESE 行可省略 originalProductName、originalControlDescription,AGENT_TRANSLATED 行必须用这两个字段保留文件原文;同时返回海关编码、来源位置和来源原文。管控说明只能来自文件原文,不得根据字符推测来源语言。'
|
|
60
|
+
},
|
|
61
|
+
upload_sanction_catalog: {
|
|
62
|
+
toolName: TOOL_NAMES.saveSanctionCatalog,
|
|
63
|
+
requirements: '完整提取公司名称、国家或地区、制裁名单来源、原因、生效日期、备注、来源位置和来源原文。'
|
|
64
|
+
},
|
|
65
|
+
upload_purchase_contract: {
|
|
66
|
+
toolName: TOOL_NAMES.savePurchaseDraft,
|
|
67
|
+
requirements: '一份文件对应一个采购订单,完整提取供应商主档、采购订单和全部商品明细。'
|
|
68
|
+
},
|
|
69
|
+
upload_customer_contract: {
|
|
70
|
+
toolName: TOOL_NAMES.saveCustomerContractDraft,
|
|
71
|
+
requirements: '完整提取唯一客户、客户合同编码及合同金额、税率、价格、运输、质保、违约责任、付款条款七类内容,并用中文给出风险提示和修改建议。'
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
function assistantFile(file, sourceHandle, fileName) {
|
|
75
|
+
const common = {
|
|
76
|
+
name: fileName,
|
|
77
|
+
originalName: fileName,
|
|
78
|
+
mimeType: file.mimetype ?? file.type,
|
|
79
|
+
size: file.size,
|
|
80
|
+
role: 'source_file'
|
|
81
|
+
};
|
|
82
|
+
if (sourceHandle.type === 'FILE_ASSET') {
|
|
83
|
+
return {
|
|
84
|
+
...common,
|
|
85
|
+
id: sourceHandle.fileAssetId,
|
|
86
|
+
fileId: sourceHandle.fileAssetId,
|
|
87
|
+
fileAssetId: sourceHandle.fileAssetId,
|
|
88
|
+
...(sourceHandle.storageFileId ? { storageFileId: sourceHandle.storageFileId } : {})
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
...common,
|
|
93
|
+
workspacePath: sourceHandle.workspacePath,
|
|
94
|
+
filePath: sourceHandle.workspacePath
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=import-command.builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-command.builder.js","sourceRoot":"","sources":["../../../src/lib/import-jobs/import-command.builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type AgentChatCallbackEnvelopePayload, type HandoffMessage, type IHandoffProcessor, type ProcessContext, type ProcessResult } from '@xpert-ai/plugin-sdk';
|
|
2
|
+
import { TradeComplianceWorkbenchService } from '../workbench.service.js';
|
|
3
|
+
import type { ImportHandoffCallbackContext } from './contracts.js';
|
|
4
|
+
import { ImportJobCoordinator } from './import-job.coordinator.js';
|
|
5
|
+
interface ImportJobCallbackPayload extends AgentChatCallbackEnvelopePayload {
|
|
6
|
+
context?: ImportHandoffCallbackContext;
|
|
7
|
+
}
|
|
8
|
+
export declare class ImportJobCallbackProcessor implements IHandoffProcessor<ImportJobCallbackPayload> {
|
|
9
|
+
private readonly service;
|
|
10
|
+
private readonly coordinator;
|
|
11
|
+
constructor(service: TradeComplianceWorkbenchService, coordinator: ImportJobCoordinator);
|
|
12
|
+
process(message: HandoffMessage<ImportJobCallbackPayload>, _context: ProcessContext): Promise<ProcessResult>;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=import-job-callback.processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-job-callback.processor.d.ts","sourceRoot":"","sources":["../../../src/lib/import-jobs/import-job-callback.processor.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,gCAAgC,EACrC,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,KAAK,EAAE,4BAA4B,EAAwB,MAAM,gBAAgB,CAAA;AAIxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAElE,UAAU,wBAAyB,SAAQ,gCAAgC;IACzE,OAAO,CAAC,EAAE,4BAA4B,CAAA;CACvC;AAED,qBAKa,0BAA2B,YAAW,iBAAiB,CAAC,wBAAwB,CAAC;IAE1F,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBADX,OAAO,EAAE,+BAA+B,EACxC,WAAW,EAAE,oBAAoB;IAG9C,OAAO,CACX,OAAO,EAAE,cAAc,CAAC,wBAAwB,CAAC,EACjD,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC;CA4B1B"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Injectable } from '@nestjs/common';
|
|
3
|
+
import { HandoffProcessorStrategy } from '@xpert-ai/plugin-sdk';
|
|
4
|
+
import { TradeComplianceWorkbenchService } from '../workbench.service.js';
|
|
5
|
+
import { TRADE_COMPLIANCE_IMPORT_CALLBACK_MESSAGE_TYPE } from './agent-handoff.dispatcher.js';
|
|
6
|
+
import { ImportJobCoordinator } from './import-job.coordinator.js';
|
|
7
|
+
let ImportJobCallbackProcessor = class ImportJobCallbackProcessor {
|
|
8
|
+
constructor(service, coordinator) {
|
|
9
|
+
this.service = service;
|
|
10
|
+
this.coordinator = coordinator;
|
|
11
|
+
}
|
|
12
|
+
async process(message, _context) {
|
|
13
|
+
const validated = validateCallback(message);
|
|
14
|
+
if ('reason' in validated)
|
|
15
|
+
return { status: 'dead', reason: validated.reason };
|
|
16
|
+
const { callback, scope, businessId } = validated;
|
|
17
|
+
const callbackInput = message.payload.kind === 'error'
|
|
18
|
+
? {
|
|
19
|
+
kind: message.payload.kind,
|
|
20
|
+
sourceMessageId: message.payload.sourceMessageId,
|
|
21
|
+
targetAssistantId: callback.targetAssistantId,
|
|
22
|
+
sequence: message.payload.sequence,
|
|
23
|
+
errorCode: 'AGENT_HANDOFF_EXECUTION_FAILED',
|
|
24
|
+
errorMessage: `智能体解析失败:${normalizedError(message.payload.error)}`
|
|
25
|
+
}
|
|
26
|
+
: {
|
|
27
|
+
kind: message.payload.kind,
|
|
28
|
+
sourceMessageId: message.payload.sourceMessageId,
|
|
29
|
+
targetAssistantId: callback.targetAssistantId,
|
|
30
|
+
sequence: message.payload.sequence
|
|
31
|
+
};
|
|
32
|
+
const outcome = callback.type === 'IMPORT_TASK'
|
|
33
|
+
? await this.service.processImportTaskHandoffCallback(scope, callback.importTaskId, callbackInput)
|
|
34
|
+
: await this.service.processCustomerContractReanalysisHandoffCallback(scope, callback.analysisRunId, callbackInput);
|
|
35
|
+
if (!outcome.accepted)
|
|
36
|
+
return { status: 'dead', reason: `Rejected import callback: ${outcome.reason}` };
|
|
37
|
+
if (message.payload.kind === 'stream')
|
|
38
|
+
return { status: 'ok' };
|
|
39
|
+
await this.coordinator.enqueueOrganization(scope, { reason: `callback:${businessId}` });
|
|
40
|
+
return { status: 'ok' };
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
ImportJobCallbackProcessor = __decorate([
|
|
44
|
+
Injectable(),
|
|
45
|
+
HandoffProcessorStrategy(TRADE_COMPLIANCE_IMPORT_CALLBACK_MESSAGE_TYPE, {
|
|
46
|
+
types: [TRADE_COMPLIANCE_IMPORT_CALLBACK_MESSAGE_TYPE],
|
|
47
|
+
policy: { lane: 'main' }
|
|
48
|
+
}),
|
|
49
|
+
__metadata("design:paramtypes", [TradeComplianceWorkbenchService,
|
|
50
|
+
ImportJobCoordinator])
|
|
51
|
+
], ImportJobCallbackProcessor);
|
|
52
|
+
export { ImportJobCallbackProcessor };
|
|
53
|
+
function validateCallback(message) {
|
|
54
|
+
const payload = message.payload;
|
|
55
|
+
if (!nonEmpty(payload?.sourceMessageId))
|
|
56
|
+
return { reason: 'Missing sourceMessageId in import callback' };
|
|
57
|
+
if (!Number.isInteger(payload.sequence) || payload.sequence <= 0) {
|
|
58
|
+
return { reason: 'Invalid sequence in import callback' };
|
|
59
|
+
}
|
|
60
|
+
const callback = payload.context;
|
|
61
|
+
if (!callback || typeof callback !== 'object')
|
|
62
|
+
return { reason: 'Missing context in import callback' };
|
|
63
|
+
if (callback.type !== 'IMPORT_TASK' && callback.type !== 'CUSTOMER_REANALYSIS') {
|
|
64
|
+
return { reason: 'Invalid callback task type' };
|
|
65
|
+
}
|
|
66
|
+
if (!nonEmpty(callback.tenantId) || !nonEmpty(callback.organizationId) ||
|
|
67
|
+
!nonEmpty(callback.targetAssistantId) || !nonEmpty(callback.importTaskId)) {
|
|
68
|
+
return { reason: 'Invalid scope or identity in import callback context' };
|
|
69
|
+
}
|
|
70
|
+
if (callback.type === 'CUSTOMER_REANALYSIS' && !nonEmpty(callback.analysisRunId)) {
|
|
71
|
+
return { reason: 'Missing analysisRunId in reanalysis callback context' };
|
|
72
|
+
}
|
|
73
|
+
if (message.tenantId !== callback.tenantId || message.headers?.organizationId !== callback.organizationId) {
|
|
74
|
+
return { reason: 'Import callback scope does not match message envelope' };
|
|
75
|
+
}
|
|
76
|
+
const expectedSourceMessageId = callback.type === 'IMPORT_TASK'
|
|
77
|
+
? `trade-compliance-import-task-${callback.importTaskId}`
|
|
78
|
+
: `trade-compliance-customer-reanalysis-${callback.analysisRunId}`;
|
|
79
|
+
if (payload.sourceMessageId !== expectedSourceMessageId) {
|
|
80
|
+
return { reason: 'Import callback sourceMessageId does not match business context' };
|
|
81
|
+
}
|
|
82
|
+
if (message.parentMessageId !== payload.sourceMessageId) {
|
|
83
|
+
return { reason: 'Import callback parentMessageId does not match sourceMessageId' };
|
|
84
|
+
}
|
|
85
|
+
if (message.sessionKey !== expectedSourceMessageId || message.businessKey !== expectedSourceMessageId) {
|
|
86
|
+
return { reason: 'Import callback routing keys do not match sourceMessageId' };
|
|
87
|
+
}
|
|
88
|
+
if (message.headers?.targetAgent !== callback.targetAssistantId) {
|
|
89
|
+
return { reason: 'Import callback target assistant does not match message envelope' };
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
callback,
|
|
93
|
+
scope: {
|
|
94
|
+
tenantId: callback.tenantId,
|
|
95
|
+
organizationId: callback.organizationId,
|
|
96
|
+
userId: callback.userId ?? undefined
|
|
97
|
+
},
|
|
98
|
+
businessId: callback.type === 'IMPORT_TASK' ? callback.importTaskId : callback.analysisRunId
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function nonEmpty(value) {
|
|
102
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
103
|
+
}
|
|
104
|
+
function normalizedError(error) {
|
|
105
|
+
return typeof error === 'string' && error.trim() ? error.trim() : '未知错误';
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=import-job-callback.processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-job-callback.processor.js","sourceRoot":"","sources":["../../../src/lib/import-jobs/import-job-callback.processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ManagedQueueEnqueueResult } from '@xpert-ai/plugin-sdk';
|
|
2
|
+
import { TradeComplianceWorkbenchService } from '../workbench.service.js';
|
|
3
|
+
import { type TradeCompliancePluginContext } from '../plugin-context.token.js';
|
|
4
|
+
import { type ImportTimeoutTarget, type OrganizationDrainPayload, type OrganizationJobScope, type OrganizationWakeRequest } from './contracts.js';
|
|
5
|
+
export { IMPORT_JOB_NAME, IMPORT_QUEUE_NAME } from './contracts.js';
|
|
6
|
+
export declare function organizationDrainJobId(scope: OrganizationDrainPayload, reason: string): string;
|
|
7
|
+
export declare class ImportJobCoordinator {
|
|
8
|
+
private readonly pluginContext;
|
|
9
|
+
private readonly service;
|
|
10
|
+
constructor(pluginContext: TradeCompliancePluginContext, service: TradeComplianceWorkbenchService);
|
|
11
|
+
recoverPendingOrganizations(): Promise<void>;
|
|
12
|
+
private recoverWorkItem;
|
|
13
|
+
enqueueOrganization(scope: OrganizationJobScope, wake: OrganizationWakeRequest): Promise<ManagedQueueEnqueueResult>;
|
|
14
|
+
enqueueTimeoutWatchdog(scope: OrganizationJobScope, target: ImportTimeoutTarget, delayMs: number): Promise<ManagedQueueEnqueueResult>;
|
|
15
|
+
}
|
|
16
|
+
export declare function importTimeoutJobId(target: ImportTimeoutTarget): string;
|
|
17
|
+
//# sourceMappingURL=import-job.coordinator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-job.coordinator.d.ts","sourceRoot":"","sources":["../../../src/lib/import-jobs/import-job.coordinator.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAOL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC7B,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEnE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAS9F;AAED,qBACa,oBAAoB;IAEY,OAAO,CAAC,QAAQ,CAAC,aAAa;IACvE,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADkC,aAAa,EAAE,4BAA4B,EACpF,OAAO,EAAE,+BAA+B;IAGrD,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;YAsDpC,eAAe;IAiDvB,mBAAmB,CACvB,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,yBAAyB,CAAC;IAyB/B,sBAAsB,CAC1B,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,yBAAyB,CAAC;CAuBtC;AAqDD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAYtE"}
|