@chenchaolong/plugin-trade-compliance-workbench 1.0.6 → 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.
Files changed (190) hide show
  1. package/dist/index.d.ts +18 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +20 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/adapters/hsbianma.provider.d.ts +6 -8
  6. package/dist/lib/adapters/hsbianma.provider.d.ts.map +1 -1
  7. package/dist/lib/adapters/hsbianma.provider.js +159 -53
  8. package/dist/lib/adapters/hsbianma.provider.js.map +1 -1
  9. package/dist/lib/adapters/translation.provider.d.ts +7 -1
  10. package/dist/lib/adapters/translation.provider.d.ts.map +1 -1
  11. package/dist/lib/adapters/translation.provider.js +15 -5
  12. package/dist/lib/adapters/translation.provider.js.map +1 -1
  13. package/dist/lib/domain/catalog-localization.d.ts +14 -0
  14. package/dist/lib/domain/catalog-localization.d.ts.map +1 -0
  15. package/dist/lib/domain/catalog-localization.js +19 -0
  16. package/dist/lib/domain/catalog-localization.js.map +1 -0
  17. package/dist/lib/domain/file-name.d.ts +8 -0
  18. package/dist/lib/domain/file-name.d.ts.map +1 -0
  19. package/dist/lib/domain/file-name.js +111 -0
  20. package/dist/lib/domain/file-name.js.map +1 -0
  21. package/dist/lib/domain/import-issues.d.ts +4 -0
  22. package/dist/lib/domain/import-issues.d.ts.map +1 -1
  23. package/dist/lib/domain/import-issues.js +14 -3
  24. package/dist/lib/domain/import-issues.js.map +1 -1
  25. package/dist/lib/entities/catalog.entity.d.ts +5 -1
  26. package/dist/lib/entities/catalog.entity.d.ts.map +1 -1
  27. package/dist/lib/entities/catalog.entity.js +16 -0
  28. package/dist/lib/entities/catalog.entity.js.map +1 -1
  29. package/dist/lib/entities/customer.entity.d.ts +3 -0
  30. package/dist/lib/entities/customer.entity.d.ts.map +1 -1
  31. package/dist/lib/entities/customer.entity.js +12 -0
  32. package/dist/lib/entities/customer.entity.js.map +1 -1
  33. package/dist/lib/entities/shared.entity.d.ts +9 -0
  34. package/dist/lib/entities/shared.entity.d.ts.map +1 -1
  35. package/dist/lib/entities/shared.entity.js +33 -0
  36. package/dist/lib/entities/shared.entity.js.map +1 -1
  37. package/dist/lib/import-jobs/agent-handoff.dispatcher.d.ts +15 -0
  38. package/dist/lib/import-jobs/agent-handoff.dispatcher.d.ts.map +1 -0
  39. package/dist/lib/import-jobs/agent-handoff.dispatcher.js +114 -0
  40. package/dist/lib/import-jobs/agent-handoff.dispatcher.js.map +1 -0
  41. package/dist/lib/import-jobs/contracts.d.ts +76 -0
  42. package/dist/lib/import-jobs/contracts.d.ts.map +1 -0
  43. package/dist/lib/import-jobs/contracts.js +31 -0
  44. package/dist/lib/import-jobs/contracts.js.map +1 -0
  45. package/dist/lib/import-jobs/import-command.builder.d.ts +30 -0
  46. package/dist/lib/import-jobs/import-command.builder.d.ts.map +1 -0
  47. package/dist/lib/import-jobs/import-command.builder.js +97 -0
  48. package/dist/lib/import-jobs/import-command.builder.js.map +1 -0
  49. package/dist/lib/import-jobs/import-job-callback.processor.d.ts +15 -0
  50. package/dist/lib/import-jobs/import-job-callback.processor.d.ts.map +1 -0
  51. package/dist/lib/import-jobs/import-job-callback.processor.js +107 -0
  52. package/dist/lib/import-jobs/import-job-callback.processor.js.map +1 -0
  53. package/dist/lib/import-jobs/import-job.coordinator.d.ts +17 -0
  54. package/dist/lib/import-jobs/import-job.coordinator.d.ts.map +1 -0
  55. package/dist/lib/import-jobs/import-job.coordinator.js +256 -0
  56. package/dist/lib/import-jobs/import-job.coordinator.js.map +1 -0
  57. package/dist/lib/import-jobs/import-job.processor.d.ts +24 -0
  58. package/dist/lib/import-jobs/import-job.processor.d.ts.map +1 -0
  59. package/dist/lib/import-jobs/import-job.processor.js +213 -0
  60. package/dist/lib/import-jobs/import-job.processor.js.map +1 -0
  61. package/dist/lib/import-jobs/import-timeout.processor.d.ts +12 -0
  62. package/dist/lib/import-jobs/import-timeout.processor.d.ts.map +1 -0
  63. package/dist/lib/import-jobs/import-timeout.processor.js +37 -0
  64. package/dist/lib/import-jobs/import-timeout.processor.js.map +1 -0
  65. package/dist/lib/import-jobs/organization-lease.d.ts +39 -0
  66. package/dist/lib/import-jobs/organization-lease.d.ts.map +1 -0
  67. package/dist/lib/import-jobs/organization-lease.js +136 -0
  68. package/dist/lib/import-jobs/organization-lease.js.map +1 -0
  69. package/dist/lib/plugin-context.token.d.ts +4 -0
  70. package/dist/lib/plugin-context.token.d.ts.map +1 -0
  71. package/dist/lib/plugin-context.token.js +2 -0
  72. package/dist/lib/plugin-context.token.js.map +1 -0
  73. package/dist/lib/public-dto.d.ts +6 -0
  74. package/dist/lib/public-dto.d.ts.map +1 -0
  75. package/dist/lib/public-dto.js +33 -0
  76. package/dist/lib/public-dto.js.map +1 -0
  77. package/dist/lib/remote-components/trade-compliance-workbench/app.css +1 -1
  78. package/dist/lib/remote-components/trade-compliance-workbench/app.js +5 -5
  79. package/dist/lib/remote-ui/action-execution.d.ts +26 -0
  80. package/dist/lib/remote-ui/action-execution.d.ts.map +1 -0
  81. package/dist/lib/remote-ui/action-execution.js +85 -0
  82. package/dist/lib/remote-ui/action-execution.js.map +1 -0
  83. package/dist/lib/remote-ui/analytics-contracts.d.ts +3 -2
  84. package/dist/lib/remote-ui/analytics-contracts.d.ts.map +1 -1
  85. package/dist/lib/remote-ui/analytics-contracts.js.map +1 -1
  86. package/dist/lib/remote-ui/app-source.d.ts.map +1 -1
  87. package/dist/lib/remote-ui/app-source.js +426 -169
  88. package/dist/lib/remote-ui/app-source.js.map +1 -1
  89. package/dist/lib/remote-ui/company-logo-lifecycle.d.ts +14 -0
  90. package/dist/lib/remote-ui/company-logo-lifecycle.d.ts.map +1 -0
  91. package/dist/lib/remote-ui/company-logo-lifecycle.js +52 -0
  92. package/dist/lib/remote-ui/company-logo-lifecycle.js.map +1 -0
  93. package/dist/lib/remote-ui/components/data-grid.d.ts +9 -4
  94. package/dist/lib/remote-ui/components/data-grid.d.ts.map +1 -1
  95. package/dist/lib/remote-ui/components/data-grid.js +41 -9
  96. package/dist/lib/remote-ui/components/data-grid.js.map +1 -1
  97. package/dist/lib/remote-ui/components/forms.d.ts +6 -1
  98. package/dist/lib/remote-ui/components/forms.d.ts.map +1 -1
  99. package/dist/lib/remote-ui/components/forms.js +6 -1
  100. package/dist/lib/remote-ui/components/forms.js.map +1 -1
  101. package/dist/lib/remote-ui/contract-import.d.ts +37 -32
  102. package/dist/lib/remote-ui/contract-import.d.ts.map +1 -1
  103. package/dist/lib/remote-ui/contract-import.js +51 -59
  104. package/dist/lib/remote-ui/contract-import.js.map +1 -1
  105. package/dist/lib/remote-ui/contracts.d.ts +20 -27
  106. package/dist/lib/remote-ui/contracts.d.ts.map +1 -1
  107. package/dist/lib/remote-ui/contracts.js +8 -0
  108. package/dist/lib/remote-ui/contracts.js.map +1 -1
  109. package/dist/lib/remote-ui/customer-contract-contracts.d.ts +5 -11
  110. package/dist/lib/remote-ui/customer-contract-contracts.d.ts.map +1 -1
  111. package/dist/lib/remote-ui/customer-contract-contracts.js.map +1 -1
  112. package/dist/lib/remote-ui/date-time.d.ts +3 -0
  113. package/dist/lib/remote-ui/date-time.d.ts.map +1 -0
  114. package/dist/lib/remote-ui/date-time.js +58 -0
  115. package/dist/lib/remote-ui/date-time.js.map +1 -0
  116. package/dist/lib/remote-ui/model.d.ts +26 -1
  117. package/dist/lib/remote-ui/model.d.ts.map +1 -1
  118. package/dist/lib/remote-ui/model.js +151 -15
  119. package/dist/lib/remote-ui/model.js.map +1 -1
  120. package/dist/lib/remote-ui/pages/analytics.d.ts +2 -0
  121. package/dist/lib/remote-ui/pages/analytics.d.ts.map +1 -1
  122. package/dist/lib/remote-ui/pages/analytics.js +11 -6
  123. package/dist/lib/remote-ui/pages/analytics.js.map +1 -1
  124. package/dist/lib/remote-ui/pages/catalogs.d.ts +35 -14
  125. package/dist/lib/remote-ui/pages/catalogs.d.ts.map +1 -1
  126. package/dist/lib/remote-ui/pages/catalogs.js +132 -85
  127. package/dist/lib/remote-ui/pages/catalogs.js.map +1 -1
  128. package/dist/lib/remote-ui/pages/contracts.d.ts +8 -5
  129. package/dist/lib/remote-ui/pages/contracts.d.ts.map +1 -1
  130. package/dist/lib/remote-ui/pages/contracts.js +23 -22
  131. package/dist/lib/remote-ui/pages/contracts.js.map +1 -1
  132. package/dist/lib/remote-ui/pages/files.d.ts +11 -3
  133. package/dist/lib/remote-ui/pages/files.d.ts.map +1 -1
  134. package/dist/lib/remote-ui/pages/files.js +50 -12
  135. package/dist/lib/remote-ui/pages/files.js.map +1 -1
  136. package/dist/lib/remote-ui/pages/procurement.d.ts +6 -4
  137. package/dist/lib/remote-ui/pages/procurement.d.ts.map +1 -1
  138. package/dist/lib/remote-ui/pages/procurement.js +44 -50
  139. package/dist/lib/remote-ui/pages/procurement.js.map +1 -1
  140. package/dist/lib/remote-ui/pages/sales.d.ts +5 -0
  141. package/dist/lib/remote-ui/pages/sales.d.ts.map +1 -1
  142. package/dist/lib/remote-ui/pages/sales.js +34 -15
  143. package/dist/lib/remote-ui/pages/sales.js.map +1 -1
  144. package/dist/lib/remote-ui/pages/settings.d.ts +15 -13
  145. package/dist/lib/remote-ui/pages/settings.d.ts.map +1 -1
  146. package/dist/lib/remote-ui/pages/settings.js +50 -68
  147. package/dist/lib/remote-ui/pages/settings.js.map +1 -1
  148. package/dist/lib/remote-ui/polling.d.ts +41 -0
  149. package/dist/lib/remote-ui/polling.d.ts.map +1 -0
  150. package/dist/lib/remote-ui/polling.js +148 -0
  151. package/dist/lib/remote-ui/polling.js.map +1 -0
  152. package/dist/lib/remote-ui/procurement-contracts.d.ts +4 -9
  153. package/dist/lib/remote-ui/procurement-contracts.d.ts.map +1 -1
  154. package/dist/lib/remote-ui/sales-contracts.d.ts +2 -2
  155. package/dist/lib/remote-ui/sales-contracts.d.ts.map +1 -1
  156. package/dist/lib/remote-ui/settings-contracts.d.ts +9 -1
  157. package/dist/lib/remote-ui/settings-contracts.d.ts.map +1 -1
  158. package/dist/lib/remote-ui/settings-contracts.js.map +1 -1
  159. package/dist/lib/remote-ui/toast-queue.d.ts +29 -0
  160. package/dist/lib/remote-ui/toast-queue.d.ts.map +1 -0
  161. package/dist/lib/remote-ui/toast-queue.js +71 -0
  162. package/dist/lib/remote-ui/toast-queue.js.map +1 -0
  163. package/dist/lib/sales-file.service.d.ts.map +1 -1
  164. package/dist/lib/sales-file.service.js +5 -5
  165. package/dist/lib/sales-file.service.js.map +1 -1
  166. package/dist/lib/types.d.ts +5 -0
  167. package/dist/lib/types.d.ts.map +1 -1
  168. package/dist/lib/types.js +3 -0
  169. package/dist/lib/types.js.map +1 -1
  170. package/dist/lib/workbench-action-contract.d.ts +4 -0
  171. package/dist/lib/workbench-action-contract.d.ts.map +1 -0
  172. package/dist/lib/workbench-action-contract.js +43 -0
  173. package/dist/lib/workbench-action-contract.js.map +1 -0
  174. package/dist/lib/workbench-view.provider.d.ts +57 -78
  175. package/dist/lib/workbench-view.provider.d.ts.map +1 -1
  176. package/dist/lib/workbench-view.provider.js +89 -91
  177. package/dist/lib/workbench-view.provider.js.map +1 -1
  178. package/dist/lib/workbench.middleware.d.ts +129 -72
  179. package/dist/lib/workbench.middleware.d.ts.map +1 -1
  180. package/dist/lib/workbench.middleware.js +16 -3
  181. package/dist/lib/workbench.middleware.js.map +1 -1
  182. package/dist/lib/workbench.plugin.d.ts +3 -1
  183. package/dist/lib/workbench.plugin.d.ts.map +1 -1
  184. package/dist/lib/workbench.plugin.js +13 -4
  185. package/dist/lib/workbench.plugin.js.map +1 -1
  186. package/dist/lib/workbench.service.d.ts +136 -40
  187. package/dist/lib/workbench.service.d.ts.map +1 -1
  188. package/dist/lib/workbench.service.js +985 -71
  189. package/dist/lib/workbench.service.js.map +1 -1
  190. 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"}