openxiangda-contracts 2.78.0 → 2.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/dist/ai.d.ts +321 -21
  2. package/dist/ai.d.ts.map +1 -1
  3. package/dist/ai.js +37 -14
  4. package/dist/ai.js.map +1 -1
  5. package/dist/application-agent.d.ts +540 -0
  6. package/dist/application-agent.d.ts.map +1 -0
  7. package/dist/application-agent.js +98 -0
  8. package/dist/application-agent.js.map +1 -0
  9. package/dist/browser.d.ts +15 -0
  10. package/dist/browser.d.ts.map +1 -1
  11. package/dist/browser.js +14 -0
  12. package/dist/browser.js.map +1 -1
  13. package/dist/cli.d.ts +5 -0
  14. package/dist/cli.d.ts.map +1 -1
  15. package/dist/data-field-validation.js +26 -23
  16. package/dist/data-field-validation.js.map +1 -1
  17. package/dist/field-value-schemas.d.ts +2 -1427
  18. package/dist/field-value-schemas.d.ts.map +1 -1
  19. package/dist/field-value-schemas.js +2 -261
  20. package/dist/field-value-schemas.js.map +1 -1
  21. package/dist/index.d.ts +13 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +13 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/native-compiler/address-value.d.ts +13 -0
  26. package/dist/native-compiler/address-value.d.ts.map +1 -0
  27. package/dist/native-compiler/address-value.js +70 -0
  28. package/dist/native-compiler/address-value.js.map +1 -0
  29. package/dist/native-compiler/application-agent.d.ts +39 -0
  30. package/dist/native-compiler/application-agent.d.ts.map +1 -0
  31. package/dist/native-compiler/application-agent.js +344 -0
  32. package/dist/native-compiler/application-agent.js.map +1 -0
  33. package/dist/native-compiler/cascade-value.d.ts +6 -0
  34. package/dist/native-compiler/cascade-value.d.ts.map +1 -0
  35. package/dist/native-compiler/cascade-value.js +47 -0
  36. package/dist/native-compiler/cascade-value.js.map +1 -0
  37. package/dist/native-compiler/compiler.d.ts +1 -1
  38. package/dist/native-compiler/compiler.d.ts.map +1 -1
  39. package/dist/native-compiler/compiler.js +85 -56
  40. package/dist/native-compiler/compiler.js.map +1 -1
  41. package/dist/native-compiler/data-field.d.ts +3 -0
  42. package/dist/native-compiler/data-field.d.ts.map +1 -1
  43. package/dist/native-compiler/data-field.js +10 -2
  44. package/dist/native-compiler/data-field.js.map +1 -1
  45. package/dist/native-compiler/declaration-capacity.d.ts +3 -0
  46. package/dist/native-compiler/declaration-capacity.d.ts.map +1 -1
  47. package/dist/native-compiler/declaration-capacity.js +1 -1
  48. package/dist/native-compiler/declaration-capacity.js.map +1 -1
  49. package/dist/native-compiler/field-value-schemas.d.ts +1428 -0
  50. package/dist/native-compiler/field-value-schemas.d.ts.map +1 -0
  51. package/dist/native-compiler/field-value-schemas.js +262 -0
  52. package/dist/native-compiler/field-value-schemas.js.map +1 -0
  53. package/dist/native-compiler/index.cjs +4 -4
  54. package/dist/native-compiler/index.d.ts +17 -0
  55. package/dist/native-compiler/index.d.ts.map +1 -1
  56. package/dist/native-compiler/index.js +4 -4
  57. package/dist/native-compiler/resource-query.d.ts +21 -0
  58. package/dist/native-compiler/resource-query.d.ts.map +1 -0
  59. package/dist/native-compiler/resource-query.js +154 -0
  60. package/dist/native-compiler/resource-query.js.map +1 -0
  61. package/dist/native-compiler/workflow-approval-empty.d.ts +1 -1
  62. package/dist/native-compiler/workflow-approval-empty.d.ts.map +1 -1
  63. package/dist/native-compiler/workflow-approval-empty.js +1 -1
  64. package/dist/native-compiler/workflow-approval-empty.js.map +1 -1
  65. package/dist/native-compiler/workflow-authoring.d.ts +24 -0
  66. package/dist/native-compiler/workflow-authoring.d.ts.map +1 -0
  67. package/dist/native-compiler/workflow-authoring.js +84 -0
  68. package/dist/native-compiler/workflow-authoring.js.map +1 -0
  69. package/dist/native-compiler/workflow-business-step.d.ts +13 -2
  70. package/dist/native-compiler/workflow-business-step.d.ts.map +1 -1
  71. package/dist/native-compiler/workflow-business-step.js +31 -6
  72. package/dist/native-compiler/workflow-business-step.js.map +1 -1
  73. package/dist/native-compiler/workflow-completion-deadline.d.ts +1 -0
  74. package/dist/native-compiler/workflow-completion-deadline.d.ts.map +1 -1
  75. package/dist/native-compiler/workflow-completion-deadline.js +1 -1
  76. package/dist/native-compiler/workflow-completion-deadline.js.map +1 -1
  77. package/dist/native-compiler/workflow-correction.d.ts +1 -0
  78. package/dist/native-compiler/workflow-correction.d.ts.map +1 -1
  79. package/dist/native-compiler/workflow-correction.js +5 -4
  80. package/dist/native-compiler/workflow-correction.js.map +1 -1
  81. package/dist/native-compiler/workflow-designer.d.ts +134 -0
  82. package/dist/native-compiler/workflow-designer.d.ts.map +1 -0
  83. package/dist/native-compiler/workflow-designer.js +407 -0
  84. package/dist/native-compiler/workflow-designer.js.map +1 -0
  85. package/dist/native-compiler/workflow-events.d.ts +8 -0
  86. package/dist/native-compiler/workflow-events.d.ts.map +1 -0
  87. package/dist/native-compiler/workflow-events.js +53 -0
  88. package/dist/native-compiler/workflow-events.js.map +1 -0
  89. package/dist/native-compiler/workflow-expression.d.ts +4 -0
  90. package/dist/native-compiler/workflow-expression.d.ts.map +1 -0
  91. package/dist/native-compiler/workflow-expression.js +47 -0
  92. package/dist/native-compiler/workflow-expression.js.map +1 -0
  93. package/dist/native-compiler/workflow-graph.d.ts +16 -1
  94. package/dist/native-compiler/workflow-graph.d.ts.map +1 -1
  95. package/dist/native-compiler/workflow-graph.js +27 -5
  96. package/dist/native-compiler/workflow-graph.js.map +1 -1
  97. package/dist/native-compiler/workflow-handle.d.ts +4 -0
  98. package/dist/native-compiler/workflow-handle.d.ts.map +1 -0
  99. package/dist/native-compiler/workflow-handle.js +20 -0
  100. package/dist/native-compiler/workflow-handle.js.map +1 -0
  101. package/dist/native-compiler/workflow-initiator-approval.d.ts +1 -0
  102. package/dist/native-compiler/workflow-initiator-approval.d.ts.map +1 -1
  103. package/dist/native-compiler/workflow-initiator-approval.js +1 -1
  104. package/dist/native-compiler/workflow-initiator-approval.js.map +1 -1
  105. package/dist/native-compiler/workflow-node-administration.d.ts +12 -1
  106. package/dist/native-compiler/workflow-node-administration.d.ts.map +1 -1
  107. package/dist/native-compiler/workflow-node-administration.js +66 -14
  108. package/dist/native-compiler/workflow-node-administration.js.map +1 -1
  109. package/dist/native-compiler/workflow-parallel.d.ts +69 -0
  110. package/dist/native-compiler/workflow-parallel.d.ts.map +1 -0
  111. package/dist/native-compiler/workflow-parallel.js +178 -0
  112. package/dist/native-compiler/workflow-parallel.js.map +1 -0
  113. package/dist/native-compiler/workflow-platform-notify.d.ts +41 -0
  114. package/dist/native-compiler/workflow-platform-notify.d.ts.map +1 -0
  115. package/dist/native-compiler/workflow-platform-notify.js +49 -0
  116. package/dist/native-compiler/workflow-platform-notify.js.map +1 -0
  117. package/dist/native-compiler/workflow-reminders.d.ts +11 -0
  118. package/dist/native-compiler/workflow-reminders.d.ts.map +1 -0
  119. package/dist/native-compiler/workflow-reminders.js +12 -0
  120. package/dist/native-compiler/workflow-reminders.js.map +1 -0
  121. package/dist/native-compiler/workflow-return-eligibility.d.ts +8 -0
  122. package/dist/native-compiler/workflow-return-eligibility.d.ts.map +1 -0
  123. package/dist/native-compiler/workflow-return-eligibility.js +32 -0
  124. package/dist/native-compiler/workflow-return-eligibility.js.map +1 -0
  125. package/dist/native-compiler/workflow-return-policy.d.ts +20 -0
  126. package/dist/native-compiler/workflow-return-policy.d.ts.map +1 -0
  127. package/dist/native-compiler/workflow-return-policy.js +37 -0
  128. package/dist/native-compiler/workflow-return-policy.js.map +1 -0
  129. package/dist/native-compiler/workflow-role-union.d.ts +5 -1
  130. package/dist/native-compiler/workflow-role-union.d.ts.map +1 -1
  131. package/dist/native-compiler/workflow-role-union.js +1 -1
  132. package/dist/native-compiler/workflow-role-union.js.map +1 -1
  133. package/dist/native-compiler/workflow-schema-constants.d.ts +5 -0
  134. package/dist/native-compiler/workflow-schema-constants.d.ts.map +1 -0
  135. package/dist/native-compiler/workflow-schema-constants.js +5 -0
  136. package/dist/native-compiler/workflow-schema-constants.js.map +1 -0
  137. package/dist/native-compiler/workflow-schema.d.ts +1634 -0
  138. package/dist/native-compiler/workflow-schema.d.ts.map +1 -0
  139. package/dist/native-compiler/workflow-schema.js +519 -0
  140. package/dist/native-compiler/workflow-schema.js.map +1 -0
  141. package/dist/native-compiler/workflow-source-sync.d.ts +109 -0
  142. package/dist/native-compiler/workflow-source-sync.d.ts.map +1 -0
  143. package/dist/native-compiler/workflow-source-sync.js +116 -0
  144. package/dist/native-compiler/workflow-source-sync.js.map +1 -0
  145. package/dist/native-compiler/workflow-supervisor-chain.d.ts +16 -0
  146. package/dist/native-compiler/workflow-supervisor-chain.d.ts.map +1 -0
  147. package/dist/native-compiler/workflow-supervisor-chain.js +44 -0
  148. package/dist/native-compiler/workflow-supervisor-chain.js.map +1 -0
  149. package/dist/native-compiler/workflow-task-page.js +1 -1
  150. package/dist/native-compiler/workflow-task-page.js.map +1 -1
  151. package/dist/native-version.d.ts +7 -0
  152. package/dist/native-version.d.ts.map +1 -1
  153. package/dist/native-version.js +7 -0
  154. package/dist/native-version.js.map +1 -1
  155. package/dist/native.d.ts +10 -0
  156. package/dist/native.d.ts.map +1 -1
  157. package/dist/native.js.map +1 -1
  158. package/dist/references.d.ts +4 -0
  159. package/dist/references.d.ts.map +1 -1
  160. package/dist/schemas.d.ts +1485 -1088
  161. package/dist/schemas.d.ts.map +1 -1
  162. package/dist/schemas.js +33 -449
  163. package/dist/schemas.js.map +1 -1
  164. package/dist/types.d.ts +48 -12
  165. package/dist/types.d.ts.map +1 -1
  166. package/dist/types.js +4 -42
  167. package/dist/types.js.map +1 -1
  168. package/dist/workflow-summary.d.ts +1 -1
  169. package/dist/workflow-summary.d.ts.map +1 -1
  170. package/dist/workflow-summary.js +2 -1
  171. package/dist/workflow-summary.js.map +1 -1
  172. package/package.json +1 -1
@@ -1,3 +1,10 @@
1
+ import { compileApplicationAgentsV2 } from './application-agent.js';
2
+ import { validateWorkflowSupervisorChains, validateWorkflowSupervisorChainBinding } from './workflow-supervisor-chain.js';
3
+ import { validateWorkflowReminders } from './workflow-reminders.js';
4
+ import { isWorkflowPlatformNotify } from './workflow-platform-notify.js';
5
+ import { validateWorkflowParallel } from './workflow-parallel.js';
6
+ import { validateWorkflowReturnPolicies, workflowReturnTargets } from './workflow-return-policy.js';
7
+ import { validateWorkflowHandlingNodes } from './workflow-handle.js';
1
8
  import { normalizeDataMutationGrants } from './service-mutations.js';
2
9
  import { hasNativeParentReadPolicy, resolveNativeParentReadBinding, validateNativeParentReadPolicies, NativeParentReadPolicyError } from './parent-read-policy.js';
3
10
  import { requiresExtendedFieldCapacity, WORKFLOW_LAUNCH_MAX_INPUTS } from './data-capacity.js';
@@ -26,7 +33,7 @@ import { validateWorkflowCorrections } from './workflow-correction.js';
26
33
  import { dateEventProjectionFieldsV2 } from './date-event-projection.js';
27
34
  import { validateWorkflowTaskPages } from './workflow-task-page.js';
28
35
  import { requiresExtendedOwnedSubtableCapacity, requiresAggregateOwnedSubtableCapacity, dataOwnedRowLimit, isDataOwnedRowLimit } from './data-capacity.js';
29
- import { validateWorkflowBusinessSteps, compileWorkflowBusinessStepHandlers, validateWorkflowBusinessStepSubscriptions, WORKFLOW_BUSINESS_STEP_EVENT, WORKFLOW_BUSINESS_STEP_EVENTS } from './workflow-business-step.js';
36
+ import { validateWorkflowBusinessSteps, compileWorkflowBusinessStepHandlers, validateWorkflowBusinessStepSubscriptions } from './workflow-business-step.js';
30
37
  import { validateWorkflowAssignmentRoutingBindings, validateWorkflowAssignmentRoutingPolicy } from './workflow-assignment-routing.js';
31
38
  import { requiresWorkflowRoleUnion, validateWorkflowRoleUnion, requiresWorkflowRoleInputSelection, validateWorkflowRoleInputSelection } from './workflow-role-union.js';
32
39
  import { assertWorkflowOwnedSubjectCreate, assertWorkflowOwnedSubjectCreateResources } from './workflow-owned-subject.js';
@@ -91,6 +98,8 @@ const ADMIN_NAVIGATION_ICONS = new Set([
91
98
  'settings',
92
99
  ]);
93
100
  const WORKFLOW_OPERATIONS = new Set([
101
+ 'complete',
102
+ 'save_form',
94
103
  'approve',
95
104
  'reject',
96
105
  'return',
@@ -128,46 +137,8 @@ export const DATA_EVENT_TYPES_V2 = [
128
137
  'openxiangda.data.record.updated.v2',
129
138
  'openxiangda.data.record.deleted.v2',
130
139
  ];
131
- export const WORKFLOW_EVENT_TYPES_V2 = [
132
- 'openxiangda.workflow.node.skipped.v2',
133
- WORKFLOW_BUSINESS_STEP_EVENT,
134
- 'openxiangda.workflow.step.result_received.v2',
135
- 'openxiangda.workflow.step.completed.v2',
136
- 'openxiangda.workflow.step.continuation_failed.v2',
137
- 'openxiangda.workflow.instance.started.v2',
138
- 'openxiangda.workflow.instance.cc_added.v2',
139
- 'openxiangda.workflow.instance.completed.v2',
140
- 'openxiangda.workflow.instance.rejected.v2',
141
- 'openxiangda.workflow.instance.returned.v2',
142
- 'openxiangda.workflow.instance.resumed.v2',
143
- 'openxiangda.workflow.instance.withdrawn.v2',
144
- 'openxiangda.workflow.instance.terminated.v2',
145
- 'openxiangda.workflow.task.created.v2',
146
- 'openxiangda.workflow.task.assigned.v2',
147
- 'openxiangda.workflow.task.assignment_pending.v2',
148
- 'openxiangda.workflow.task.assignment_resolution_failed.v2',
149
- 'openxiangda.workflow.task.approved.v2',
150
- 'openxiangda.workflow.task.completed.v2',
151
- 'openxiangda.workflow.task.rejected.v2',
152
- 'openxiangda.workflow.task.returned.v2',
153
- 'openxiangda.workflow.task.resubmitted.v2',
154
- 'openxiangda.workflow.task.transferred.v2',
155
- 'openxiangda.workflow.task.reassigned.v2',
156
- 'openxiangda.workflow.task.delegated.v2',
157
- 'openxiangda.workflow.task.assignee_added.v2',
158
- 'openxiangda.workflow.task.cancelled.v2',
159
- 'openxiangda.workflow.participant.activated.v2',
160
- 'openxiangda.workflow.participant.completed.v2',
161
- 'openxiangda.workflow.participant.rejected.v2',
162
- 'openxiangda.workflow.participant.returned.v2',
163
- 'openxiangda.workflow.participant.transferred.v2',
164
- 'openxiangda.workflow.participant.reassigned.v2',
165
- 'openxiangda.workflow.participant.delegated.v2',
166
- 'openxiangda.workflow.participant.added.v2',
167
- 'openxiangda.workflow.participant.suspended.v2',
168
- 'openxiangda.workflow.participant.resumed.v2',
169
- 'openxiangda.workflow.participant.cancelled.v2',
170
- ];
140
+ export { WORKFLOW_EVENT_TYPES_V2 } from './workflow-events.js';
141
+ import { WORKFLOW_EVENT_TYPES_V2, workflowProducedEventTypes } from './workflow-events.js';
171
142
  const WORKFLOW_EVENT_TYPE_SET_V2 = new Set(WORKFLOW_EVENT_TYPES_V2);
172
143
  export class NativeConfigurationCompilerError extends Error {
173
144
  code;
@@ -400,6 +371,7 @@ export function compileRequiredPlatformCapabilitiesV3(config) {
400
371
  ...(requiresHighDensityArtifactCapacity(config)
401
372
  ? [{ code: 'application.high-density-artifact-capacity',
402
373
  declaration: NATIVE_HIGH_DENSITY_ARTIFACT_CAPACITY_V2 }] : []),
374
+ ...(config.agents?.length ? [{ code: 'application.source-agents', declaration: config.agents }] : []),
403
375
  ...(requiresExtendedDeclarationCapacity(config)
404
376
  ? [{ code: 'application.extended-declaration-capacity', declaration: {
405
377
  resources: config.data.resources.length, policies: config.authz.dataPolicies.length,
@@ -493,6 +465,11 @@ export function compileRequiredPlatformCapabilitiesV3(config) {
493
465
  ...(resources.some(hasDataAuditReadPolicy)
494
466
  ? [{ code: 'data.audit-read-access', declaration: dataUsage }]
495
467
  : []),
468
+ ...(resources.some(resource => resource.schema.fields.some((field) => /^(resource-ref|user|department)\.(single|multiple)$/.test(field.type))) || config.authz.scopeDimensions.some((dimension) => dimension.valueSource)
469
+ ? [{ code: 'data.field-source-contexts', declaration: {
470
+ resources: resources.map(resource => ({ code: resource.code, fields: resource.schema.fields.filter((field) => /^(resource-ref|user|department)\.(single|multiple)$/.test(field.type)) })),
471
+ dimensions: config.authz.scopeDimensions.filter((dimension) => dimension.valueSource),
472
+ } }] : []),
496
473
  ...(requiresDirectoryV2
497
474
  ? [
498
475
  {
@@ -664,6 +641,14 @@ export function compileRequiredPlatformCapabilitiesV3(config) {
664
641
  ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'approval' && node.emptyPolicy !== undefined))
665
642
  ? [{ code: 'workflow.approval-empty-policy', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'approval' && node.emptyPolicy !== undefined)) }]
666
643
  : []),
644
+ ...(config.workflows.bindings.some((item) => Object.values(item.binding.bindings).some((entry) => entry.provider === 'supervisor_chain')) ? [{ code: 'workflow.supervisor-chain', declaration: config.workflows.bindings.filter((item) => Object.values(item.binding.bindings).some((entry) => entry.provider === 'supervisor_chain')) }] : []),
645
+ ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.reminders)) ? [{ code: 'workflow.reminders', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.reminders)) }] : []),
646
+ ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => isWorkflowPlatformNotify(node)))
647
+ ? [{ code: 'workflow.platform-notify', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => isWorkflowPlatformNotify(node))) }] : []),
648
+ ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.returnPolicy !== undefined))
649
+ ? [{ code: 'workflow.return-policy', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.returnPolicy !== undefined)) }] : []),
650
+ ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'handle'))
651
+ ? [{ code: 'workflow.handling-nodes', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'handle')) }] : []),
667
652
  ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.completionDeadline !== undefined))
668
653
  ? [{ code: 'workflow.completion-deadline', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.completionDeadline !== undefined)) }]
669
654
  : []),
@@ -684,11 +669,11 @@ export function compileRequiredPlatformCapabilitiesV3(config) {
684
669
  ? [{ code: 'workflow.task-rich-fields', declaration: taskRichFieldDefinitions }] : []),
685
670
  ...(config.workflows.definitions.some((item) => Object.values(item.definition.taskPages || {}).some((page) => page.fields.some((field) => field.subtable)))
686
671
  ? [{ code: 'workflow.task-owned-subtables', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.taskPages || {}).some((page) => page.fields.some((field) => field.subtable))) }] : []),
687
- ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action'))
688
- ? [{ code: 'workflow.durable-business-step', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action')) }]
672
+ ...(config.workflows.definitions.some((item) => (item.definition.authoring?.businessSteps?.length || Object.values(item.definition.nodes).some((node) => node.kind === 'action' && !isWorkflowPlatformNotify(node))))
673
+ ? [{ code: 'workflow.durable-business-step', declaration: config.workflows.definitions.filter((item) => (item.definition.authoring?.businessSteps?.length || Object.values(item.definition.nodes).some((node) => node.kind === 'action' && !isWorkflowPlatformNotify(node)))) }]
689
674
  : []),
690
- ...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action' && node.handler.dataTransaction))
691
- ? [{ code: 'workflow.step-data-transaction', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action' && node.handler.dataTransaction)) }]
675
+ ...(config.workflows.definitions.some((item) => [...Object.values(item.definition.nodes), ...item.definition.authoring?.businessSteps || []].some((node) => node.handler?.dataTransaction))
676
+ ? [{ code: 'workflow.step-data-transaction', declaration: config.workflows.definitions.filter((item) => [...Object.values(item.definition.nodes), ...item.definition.authoring?.businessSteps || []].some((node) => node.handler?.dataTransaction)) }]
692
677
  : []),
693
678
  ...(config.workflows.bindings.some((item) => Object.values(item.binding.bindings).some((entry) => entry.routing !== undefined))
694
679
  ? [{ code: 'workflow.assignment-routing', declaration: config.workflows.bindings.filter((item) => Object.values(item.binding.bindings).some((entry) => entry.routing !== undefined)) }]
@@ -942,7 +927,8 @@ function validateConfigurationEnvelope(config, appCode) {
942
927
  'workflows',
943
928
  'frontend',
944
929
  'runtime',
945
- ], '/config');
930
+ ], '/config', ['agents']);
931
+ compileApplicationAgentsV2(appCode, config.agents, config.data?.resources || [], { authz: config.authz });
946
932
  equal(config.schemaVersion, CONFIG_SCHEMA, '/config/schemaVersion');
947
933
  equal(config.compilerContractVersion, COMPILER_CONTRACT_VERSION, '/config/compilerContractVersion');
948
934
  equal(config.appCode, appCode, '/config/appCode');
@@ -1176,7 +1162,7 @@ function compileExpectedContract(config, configDigest, generatorVersion) {
1176
1162
  field: trigger.field,
1177
1163
  })),
1178
1164
  ...(config.workflows.activations.length
1179
- ? WORKFLOW_EVENT_TYPES_V2.filter(eventType => !WORKFLOW_BUSINESS_STEP_EVENTS.includes(eventType) || config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action'))).filter(eventType => eventType !== 'openxiangda.workflow.node.skipped.v2' || config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'approval' && node.emptyPolicy === 'skip'))).map(eventType => ({
1165
+ ? workflowProducedEventTypes(config.workflows.definitions).map(eventType => ({
1180
1166
  code: `workflow:${eventType}`,
1181
1167
  source: 'workflow',
1182
1168
  eventType,
@@ -3646,7 +3632,7 @@ function compileWorkflows(config) {
3646
3632
  const nodes = object(item.definition.nodes, '/config/workflows/definitions/nodes');
3647
3633
  for (const nodeValue of Object.values(nodes)) {
3648
3634
  const node = object(nodeValue, '/config/workflows/definitions/nodes/*');
3649
- if (node.kind !== 'approval')
3635
+ if (node.kind !== 'approval' && node.kind !== 'handle')
3650
3636
  continue;
3651
3637
  for (const operation of uniqueStrings(node.allowedOperations || [], '/config/workflows/definitions/nodes/*/allowedOperations', 20)) {
3652
3638
  operations.add(operation);
@@ -4758,11 +4744,18 @@ function validateWorkflowReferences(config) {
4758
4744
  'definitionVersion',
4759
4745
  'bindingVersion',
4760
4746
  'acceptedCommandDeactivationPolicy',
4761
- ], pointer, ['environmentKey']);
4747
+ ], pointer, ['environmentKey', 'sourceBase']);
4762
4748
  const code = stableCode(activation.workflowCode, `${pointer}/workflowCode`);
4763
4749
  if (activationCodes.has(code))
4764
4750
  fail('NATIVE_WORKFLOW_ACTIVATION_DUPLICATE', pointer);
4765
4751
  activationCodes.add(code);
4752
+ if (activation.sourceBase !== undefined) {
4753
+ const base = object(activation.sourceBase, `${pointer}/sourceBase`);
4754
+ exactKeys(base, ['definitionDigest', 'bindingDigest'], `${pointer}/sourceBase`);
4755
+ for (const key of ['definitionDigest', 'bindingDigest'])
4756
+ if (!/^(sha256:)?[a-f0-9]{64}$/.test(String(base[key] || '')))
4757
+ fail('NATIVE_WORKFLOW_SOURCE_BASE_INVALID', `${pointer}/sourceBase/${key}`);
4758
+ }
4766
4759
  const definitionKey = `${code}:${positiveInteger(activation.definitionVersion, `${pointer}/definitionVersion`)}`;
4767
4760
  const bindingKey = `${code}:${positiveInteger(activation.bindingVersion, `${pointer}/bindingVersion`)}`;
4768
4761
  if (!definitions.has(definitionKey)) {
@@ -4952,7 +4945,7 @@ function validateWorkflowDefinition(definition, pointer) {
4952
4945
  'startAt',
4953
4946
  'inputSchema',
4954
4947
  'nodes',
4955
- ], pointer, ['organizationContext', 'instanceCommands', 'readability', 'taskPages', 'rejectionNotification', 'commandHandlers', 'launchPreflight', 'approvedDelegation']);
4948
+ ], pointer, ['authoring', 'organizationContext', 'instanceCommands', 'readability', 'taskPages', 'rejectionNotification', 'commandHandlers', 'launchPreflight', 'approvedDelegation']);
4956
4949
  equal(definition.schemaVersion, 'openxiangda.workflow-definition/v2', `${pointer}/schemaVersion`);
4957
4950
  workflowCodeValue(definition.code, `${pointer}/code`);
4958
4951
  requiredString(definition.title, `${pointer}/title`, 255);
@@ -4989,6 +4982,18 @@ function validateWorkflowDefinition(definition, pointer) {
4989
4982
  const taskPageErrors = validateWorkflowTaskPages(definition);
4990
4983
  if (taskPageErrors.length)
4991
4984
  fail(taskPageErrors[0], `${pointer}/taskPages`);
4985
+ const returnErrors = validateWorkflowReturnPolicies(definition);
4986
+ if (returnErrors.length)
4987
+ fail(returnErrors[0], `${pointer}/nodes`);
4988
+ const reminderErrors = validateWorkflowReminders(definition);
4989
+ if (reminderErrors.length)
4990
+ fail(reminderErrors[0], `${pointer}/nodes`);
4991
+ const handleErrors = validateWorkflowHandlingNodes(definition);
4992
+ if (handleErrors.length)
4993
+ fail(handleErrors[0], `${pointer}/nodes`);
4994
+ const parallelErrors = validateWorkflowParallel(definition);
4995
+ if (parallelErrors.length)
4996
+ fail(parallelErrors[0], `${pointer}/nodes`);
4992
4997
  const stepErrors = validateWorkflowBusinessSteps(definition);
4993
4998
  if (stepErrors.length)
4994
4999
  fail(stepErrors[0], `${pointer}/nodes`);
@@ -4999,17 +5004,20 @@ function validateWorkflowDefinition(definition, pointer) {
4999
5004
  const nodePointer = `${pointer}/nodes/${nodeId}`;
5000
5005
  const node = object(rawNode, nodePointer);
5001
5006
  equal(node.id, nodeId, `${nodePointer}/id`);
5002
- if (!['approval', 'condition', 'end', 'cc', 'action', 'correction'].includes(node.kind)) {
5007
+ if (!['approval', 'handle', 'condition', 'end', 'cc', 'action', 'correction', 'parallel', 'join'].includes(node.kind)) {
5003
5008
  fail('NATIVE_WORKFLOW_NODE_KIND_INVALID', `${nodePointer}/kind`);
5004
5009
  }
5005
5010
  const targets = [];
5006
- if (node.kind === 'approval') {
5011
+ if (node.kind === 'approval' || node.kind === 'handle') {
5007
5012
  requiredString(node.title, `${nodePointer}/title`, 255);
5008
5013
  workflowBindingCode(node.binding, `${nodePointer}/binding`);
5009
5014
  if (!['single', 'any', 'all', 'sequence'].includes(node.mode)) {
5010
5015
  fail('NATIVE_WORKFLOW_APPROVAL_MODE_INVALID', `${nodePointer}/mode`);
5011
5016
  }
5012
- targets.push(requiredString(node.onApprove, `${nodePointer}/onApprove`, 128), requiredString(node.onReject, `${nodePointer}/onReject`, 128));
5017
+ if (node.kind === 'handle')
5018
+ targets.push(requiredString(node.next, `${nodePointer}/next`, 128));
5019
+ else
5020
+ targets.push(requiredString(node.onApprove, `${nodePointer}/onApprove`, 128), requiredString(node.onReject, `${nodePointer}/onReject`, 128));
5013
5021
  for (const returnTarget of uniqueStrings(node.returnTargets || [], `${nodePointer}/returnTargets`, 200)) {
5014
5022
  if (!nodes[returnTarget]) {
5015
5023
  fail('NATIVE_WORKFLOW_TARGET_MISSING', `${nodePointer}/returnTargets`);
@@ -5034,6 +5042,20 @@ function validateWorkflowDefinition(definition, pointer) {
5034
5042
  workflowBindingCode(node.binding, `${nodePointer}/binding`);
5035
5043
  targets.push(requiredString(node.next, `${nodePointer}/next`, 128));
5036
5044
  }
5045
+ else if (node.kind === 'parallel') {
5046
+ requiredString(node.title, `${nodePointer}/title`, 255);
5047
+ targets.push(requiredString(node.join, `${nodePointer}/join`, 128));
5048
+ for (const [index, raw] of boundedArray(node.branches, `${nodePointer}/branches`, 8).entries()) {
5049
+ const branch = object(raw, `${nodePointer}/branches/${index}`);
5050
+ if (branch.when !== undefined)
5051
+ validateWorkflowExpression(branch.when, `${nodePointer}/branches/${index}/when`, 0);
5052
+ targets.push(requiredString(branch.target, `${nodePointer}/branches/${index}/target`, 128));
5053
+ }
5054
+ }
5055
+ else if (node.kind === 'join') {
5056
+ requiredString(node.title, `${nodePointer}/title`, 255);
5057
+ targets.push(requiredString(node.next, `${nodePointer}/next`, 128));
5058
+ }
5037
5059
  else if (node.kind === 'condition') {
5038
5060
  const branches = boundedArray(node.branches, `${nodePointer}/branches`, 100);
5039
5061
  if (branches.length === 0) {
@@ -5072,8 +5094,8 @@ function validateWorkflowDefinition(definition, pointer) {
5072
5094
  walk(startAt);
5073
5095
  for (const id of [...reachable]) {
5074
5096
  const current = nodes[id];
5075
- if (current?.kind === 'approval')
5076
- for (const target of current.returnTargets || [])
5097
+ if (current?.kind === 'approval' || current?.kind === 'handle')
5098
+ for (const target of workflowReturnTargets(current))
5077
5099
  if (nodes[target]?.kind === 'correction')
5078
5100
  reachable.add(target);
5079
5101
  }
@@ -5123,6 +5145,9 @@ function validateWorkflowBinding(binding, pointer) {
5123
5145
  for (const [code, raw] of Object.entries(entries)) {
5124
5146
  workflowBindingCode(code, `${pointer}/bindings/${code}`);
5125
5147
  const entry = object(raw, `${pointer}/bindings/${code}`);
5148
+ const chainErrors = validateWorkflowSupervisorChainBinding(entry);
5149
+ if (chainErrors.length)
5150
+ fail(chainErrors[0], `${pointer}/bindings/${code}`);
5126
5151
  const selectionErrors = validateWorkflowRoleInputSelection(entry);
5127
5152
  if (selectionErrors.length)
5128
5153
  fail(selectionErrors[0], `${pointer}/bindings/${code}/selectedInputPath`);
@@ -5136,6 +5161,7 @@ function validateWorkflowBinding(binding, pointer) {
5136
5161
  'input_users',
5137
5162
  'form_field_users',
5138
5163
  'department_supervisor',
5164
+ 'supervisor_chain',
5139
5165
  'app_role',
5140
5166
  'app_role_in_scope',
5141
5167
  'business_relation',
@@ -5170,6 +5196,9 @@ function validateWorkflowBinding(binding, pointer) {
5170
5196
  }
5171
5197
  }
5172
5198
  function validateWorkflowDefinitionBinding(definition, binding, pointer) {
5199
+ const chainErrors = validateWorkflowSupervisorChains(definition, binding);
5200
+ if (chainErrors.length)
5201
+ fail(chainErrors[0], pointer);
5173
5202
  equal(binding.workflowCode, definition.code, `${pointer}/workflowCode`);
5174
5203
  const entries = object(binding.bindings, `${pointer}/bindings`);
5175
5204
  for (const [code, entry] of Object.entries(entries)) {
@@ -5187,7 +5216,7 @@ function validateWorkflowDefinitionBinding(definition, binding, pointer) {
5187
5216
  fail(stepErrors[0], pointer);
5188
5217
  for (const [nodeId, rawNode] of Object.entries(object(definition.nodes, `${pointer}/nodes`))) {
5189
5218
  const node = object(rawNode, `${pointer}/nodes/${nodeId}`);
5190
- if (['approval', 'cc'].includes(node.kind) && !entries[node.binding]) {
5219
+ if (['approval', 'handle', 'cc'].includes(node.kind) && !entries[node.binding]) {
5191
5220
  fail('NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING', `${pointer}/nodes/${nodeId}/binding`);
5192
5221
  }
5193
5222
  }