@taskforcehq/taskforce 0.3.329 → 0.3.332

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 (363) hide show
  1. package/README.md +7 -2
  2. package/dist/Taskforce.module.css +290 -45
  3. package/dist/components/features/AiProfilesModule.js +3 -5
  4. package/dist/components/features/TaskSettings.js +70 -14
  5. package/dist/components/features/TaskforceAgentsModule.d.ts +1 -2
  6. package/dist/components/features/TaskforceAgentsModule.js +586 -116
  7. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +2 -2
  8. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.js +2 -2
  9. package/dist/components/features/agentConnections/AgentConnectionControl.d.ts +15 -0
  10. package/dist/components/features/agentConnections/AgentConnectionControl.js +125 -0
  11. package/dist/components/features/agentConnections/ModelConnectionsPanel.d.ts +18 -0
  12. package/dist/components/features/agentConnections/ModelConnectionsPanel.js +393 -0
  13. package/dist/components/features/agentConnections/modelConnectionsApi.d.ts +65 -0
  14. package/dist/components/features/agentConnections/modelConnectionsApi.js +129 -0
  15. package/dist/components/features/planning/PlanningModule.js +15 -3
  16. package/dist/components/features/planning/planningMetadata.d.ts +10 -0
  17. package/dist/components/features/planning/planningMetadata.js +8 -0
  18. package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.js +15 -24
  19. package/dist/components/features/taskforceAgentEditorModel.d.ts +2 -1
  20. package/dist/components/features/taskforceAgentEditorModel.js +3 -1
  21. package/dist/components/features/workflowManager/workflowManagerApi.d.ts +1 -1
  22. package/dist/components/features/workflowManager/workflowManagerApi.js +3 -0
  23. package/dist/components/task/TaskWorkflowAssignmentField.js +68 -10
  24. package/dist/components/views/StandaloneLayout.js +62 -27
  25. package/dist/components/views/panels/PlanningDrawer.d.ts +2 -1
  26. package/dist/components/views/panels/PlanningDrawer.js +12 -8
  27. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +4 -3
  28. package/dist/components/views/standalone/modals/SyncStatusModal.js +33 -38
  29. package/dist/config/envSchema.js +55 -1
  30. package/dist/core/McpTokenService.d.ts +25 -1
  31. package/dist/core/McpTokenService.js +106 -15
  32. package/dist/core/TaskChecklistCommandService.d.ts +27 -0
  33. package/dist/core/TaskChecklistCommandService.js +83 -5
  34. package/dist/core/TaskLifecycleCommandService.d.ts +3 -1
  35. package/dist/core/TaskLifecycleCommandService.js +6 -2
  36. package/dist/core/Taskforce.d.ts +43 -3
  37. package/dist/core/Taskforce.js +158 -7
  38. package/dist/core/types.d.ts +9 -0
  39. package/dist/documentReviews/DocumentReviewCommentStore.d.ts +2 -0
  40. package/dist/documentReviews/DocumentReviewCommentStore.js +28 -9
  41. package/dist/documentReviews/commandService.d.ts +2 -1
  42. package/dist/documentReviews/commandService.js +6 -3
  43. package/dist/hooks/sync/orchestratorShared.d.ts +1 -0
  44. package/dist/hooks/sync/orchestratorShared.js +2 -0
  45. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.d.ts +3 -0
  46. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.js +85 -9
  47. package/dist/hooks/sync/useSyncStatusControls.d.ts +4 -1
  48. package/dist/hooks/sync/useSyncStatusControls.js +47 -11
  49. package/dist/hooks/useSyncOrchestrator.d.ts +3 -0
  50. package/dist/hooks/useSyncOrchestrator.js +111 -2
  51. package/dist/hooks/useTaskData.d.ts +31 -1
  52. package/dist/hooks/useTaskData.js +29 -7
  53. package/dist/hooks/useTaskMutations.d.ts +3 -1
  54. package/dist/hooks/useTaskMutations.js +46 -12
  55. package/dist/hooks/useTaskforce.d.ts +2 -0
  56. package/dist/hooks/useTaskforce.js +11 -2
  57. package/dist/mcp/clientRegistry.d.ts +2 -2
  58. package/dist/mcp/clientRegistry.js +1 -1
  59. package/dist/mcp/documentAssetRegistrar.js +9 -6
  60. package/dist/mcp/durableTaskMutationRouter.d.ts +4 -1
  61. package/dist/mcp/durableTaskMutationRouter.js +10 -0
  62. package/dist/mcp/durableTaskRelationshipMutationRouter.js +4 -0
  63. package/dist/mcp/httpProtocolRouting.d.ts +11 -0
  64. package/dist/mcp/httpProtocolRouting.js +22 -0
  65. package/dist/mcp/localCliHealth.d.ts +2 -2
  66. package/dist/mcp/localCliHealth.js +2 -2
  67. package/dist/mcp/localServiceProxy.d.ts +1 -0
  68. package/dist/mcp/localServiceProxy.js +530 -68
  69. package/dist/mcp/planningAttachmentCommandAdapter.d.ts +3 -1
  70. package/dist/mcp/planningAttachmentCommandAdapter.js +20 -2
  71. package/dist/mcp/runtime.d.ts +54 -79
  72. package/dist/mcp/runtime.js +408 -102
  73. package/dist/mcp/taskPlanningRegistrar.js +25 -6
  74. package/dist/mcp/toolProfiles.d.ts +2 -0
  75. package/dist/mcp/toolProfiles.js +11 -0
  76. package/dist/mcp/toolRegistry.d.ts +1 -0
  77. package/dist/mcp/toolRegistry.js +9 -8
  78. package/dist/mcp/workflowExecutionRegistrar.js +4 -4
  79. package/dist/migrations/taskSchemaMigrations.d.ts +5 -0
  80. package/dist/migrations/taskSchemaMigrations.js +415 -0
  81. package/dist/runtime/appGates.d.ts +2 -1
  82. package/dist/runtime/appGates.js +7 -0
  83. package/dist/server/buildInfo.d.ts +1 -0
  84. package/dist/server/buildInfo.js +5 -1
  85. package/dist/server/cloudMcpCapacityTelemetry.d.ts +68 -0
  86. package/dist/server/cloudMcpCapacityTelemetry.js +221 -0
  87. package/dist/server/index.d.ts +3 -0
  88. package/dist/server/index.js +108 -11
  89. package/dist/server/localDatabaseIdentity.js +4 -1
  90. package/dist/server/localServiceLease.js +2 -1
  91. package/dist/server/localServiceSessions.d.ts +14 -17
  92. package/dist/server/localServiceSessions.js +308 -94
  93. package/dist/server/localWorkspaceSyncServerRuntime.js +25 -19
  94. package/dist/server/routes/admin.d.ts +4 -0
  95. package/dist/server/routes/admin.js +126 -5
  96. package/dist/server/routes/agents.d.ts +7 -0
  97. package/dist/server/routes/agents.js +277 -24
  98. package/dist/server/routes/billing.js +5 -1
  99. package/dist/server/routes/durableTaskHttpRouters.d.ts +2 -0
  100. package/dist/server/routes/executorPhaseAApprovals.d.ts +19 -0
  101. package/dist/server/routes/executorPhaseAApprovals.js +140 -0
  102. package/dist/server/routes/executorPhaseAIssuerRedemptions.d.ts +11 -0
  103. package/dist/server/routes/executorPhaseAIssuerRedemptions.js +24 -0
  104. package/dist/server/routes/githubReviewEvidence.d.ts +19 -0
  105. package/dist/server/routes/githubReviewEvidence.js +116 -0
  106. package/dist/server/routes/localService.d.ts +15 -4
  107. package/dist/server/routes/localService.js +136 -40
  108. package/dist/server/routes/modelConnections.d.ts +24 -0
  109. package/dist/server/routes/modelConnections.js +205 -0
  110. package/dist/server/routes/shared.d.ts +22 -0
  111. package/dist/server/routes/shared.js +298 -182
  112. package/dist/server/routes/sync.js +1 -0
  113. package/dist/server/routes/syncAuxRoutes.js +5 -1
  114. package/dist/server/routes/syncPushRoutes.d.ts +1 -0
  115. package/dist/server/routes/syncPushRoutes.js +1 -0
  116. package/dist/server/routes/syncV3FeedRoutes.js +10 -1
  117. package/dist/server/routes/syncV3OperationRoutes.js +35 -9
  118. package/dist/server/routes/tasks.js +21 -2
  119. package/dist/server/routes/workflows.js +9 -1
  120. package/dist/server/routes.js +59 -0
  121. package/dist/service/localServiceCli.d.ts +2 -2
  122. package/dist/service/localServiceCli.js +4 -3
  123. package/dist/services/codexAppServerModelGateway.d.ts +54 -5
  124. package/dist/services/codexAppServerModelGateway.js +246 -21
  125. package/dist/services/codexDeviceCodeLoginManager.d.ts +39 -0
  126. package/dist/services/codexDeviceCodeLoginManager.js +265 -0
  127. package/dist/services/codexModelProviderConnectionLifecycle.d.ts +8 -0
  128. package/dist/services/codexModelProviderConnectionLifecycle.js +73 -0
  129. package/dist/services/executorPhaseAApprovalRuntime.d.ts +14 -0
  130. package/dist/services/executorPhaseAApprovalRuntime.js +24 -0
  131. package/dist/services/executorPhaseAApprovalService.d.ts +40 -0
  132. package/dist/services/executorPhaseAApprovalService.js +609 -0
  133. package/dist/services/executorPhaseADriftEvaluator.d.ts +78 -0
  134. package/dist/services/executorPhaseADriftEvaluator.js +93 -0
  135. package/dist/services/executorPhaseAIssuerCore.d.ts +139 -0
  136. package/dist/services/executorPhaseAIssuerCore.js +402 -0
  137. package/dist/services/executorPhaseAIssuerRedemptionService.d.ts +34 -0
  138. package/dist/services/executorPhaseAIssuerRedemptionService.js +158 -0
  139. package/dist/services/githubReviewEvidenceRuntime.d.ts +14 -0
  140. package/dist/services/githubReviewEvidenceRuntime.js +30 -0
  141. package/dist/services/githubReviewEvidenceService.d.ts +93 -0
  142. package/dist/services/githubReviewEvidenceService.js +336 -0
  143. package/dist/services/modelGateway.d.ts +7 -0
  144. package/dist/services/modelProviderConnectionService.d.ts +71 -0
  145. package/dist/services/modelProviderConnectionService.js +279 -0
  146. package/dist/services/modelProviderCredentialHome.d.ts +32 -0
  147. package/dist/services/modelProviderCredentialHome.js +271 -0
  148. package/dist/services/ownerScopedModelConnectionGateway.d.ts +12 -0
  149. package/dist/services/ownerScopedModelConnectionGateway.js +30 -0
  150. package/dist/services/taskforceAgentConnectionBindingService.d.ts +66 -0
  151. package/dist/services/taskforceAgentConnectionBindingService.js +185 -0
  152. package/dist/services/taskforceAgentMcpBridge.d.ts +2 -2
  153. package/dist/services/taskforceAgentMcpBridge.js +42 -29
  154. package/dist/shared/adminEdgeProxy.d.ts +5 -0
  155. package/dist/shared/adminEdgeProxy.js +94 -0
  156. package/dist/shared/adminProxySessionCookies.d.ts +16 -0
  157. package/dist/shared/adminProxySessionCookies.js +86 -0
  158. package/dist/shared/aiProfileColors.d.ts +31 -1
  159. package/dist/shared/aiProfileColors.js +14 -6
  160. package/dist/shared/executorPhaseAApprovalGoldenVector.json +269 -0
  161. package/dist/shared/executorPhaseAApprovalReceipt.d.ts +112 -0
  162. package/dist/shared/executorPhaseAApprovalReceipt.js +58 -0
  163. package/dist/shared/executorPhaseAApprovalTrustPolicy.json +10 -0
  164. package/dist/shared/executorPhaseADriftContracts.d.ts +37 -0
  165. package/dist/shared/executorPhaseADriftContracts.js +63 -0
  166. package/dist/shared/executorPhaseAIssuerContracts.d.ts +75 -0
  167. package/dist/shared/executorPhaseAIssuerContracts.js +90 -0
  168. package/dist/shared/executorPhaseARunAuthorization.d.ts +120 -0
  169. package/dist/shared/executorPhaseARunAuthorization.js +232 -0
  170. package/dist/shared/executorPhaseASchemaValidation.d.ts +7 -0
  171. package/dist/shared/executorPhaseASchemaValidation.js +53 -0
  172. package/dist/shared/executorPhaseASchemas/approval-receipt.schema.json +106 -0
  173. package/dist/shared/executorPhaseASchemas/drift-attestation.schema.json +54 -0
  174. package/dist/shared/executorPhaseASchemas/drift-request.schema.json +47 -0
  175. package/dist/shared/executorPhaseASchemas/foundation-manifest.schema.json +29 -0
  176. package/dist/shared/executorPhaseASchemas/issuer-audit-record.schema.json +24 -0
  177. package/dist/shared/executorPhaseASchemas/issuer-proof.schema.json +43 -0
  178. package/dist/shared/executorPhaseASchemas/issuer-redemption-request.schema.json +18 -0
  179. package/dist/shared/executorPhaseASchemas/issuer-redemption-response.schema.json +39 -0
  180. package/dist/shared/executorPhaseASchemas/logical-envelope.schema.json +149 -0
  181. package/dist/shared/executorPhaseASchemas/preflight-report.schema.json +216 -0
  182. package/dist/shared/executorPhaseASchemas/run-capability.schema.json +111 -0
  183. package/dist/shared/executorPhaseASchemas/sender-proof.schema.json +37 -0
  184. package/dist/shared/executorPhaseASchemas/workload-grant.schema.json +68 -0
  185. package/dist/shared/executorPhaseASchemas/workload-jwt-claims.schema.json +67 -0
  186. package/dist/shared/executorPhaseATiming.d.ts +1 -0
  187. package/dist/shared/executorPhaseATiming.js +1 -0
  188. package/dist/shared/planningIdentity.js +1 -1
  189. package/dist/shared/productLogoKeys.d.ts +2 -0
  190. package/dist/shared/productLogoKeys.js +18 -0
  191. package/dist/shared/taskforceAgentDefinition.d.ts +0 -1
  192. package/dist/shared/taskforceAgentDefinition.js +6 -9
  193. package/dist/shared/taskforceAgentModels.js +7 -3
  194. package/dist/shared/userFeatureGrants.d.ts +4 -0
  195. package/dist/shared/userFeatureGrants.js +7 -0
  196. package/dist/storage/executorPhaseAApprovalReceiptStore.d.ts +37 -0
  197. package/dist/storage/executorPhaseAApprovalReceiptStore.js +81 -0
  198. package/dist/storage/executorPhaseARunAuthorizationStore.d.ts +103 -0
  199. package/dist/storage/executorPhaseARunAuthorizationStore.js +492 -0
  200. package/dist/storage/githubReviewEvidenceInstallationStore.d.ts +26 -0
  201. package/dist/storage/githubReviewEvidenceInstallationStore.js +89 -0
  202. package/dist/storage/modelProviderConnectionStore.d.ts +99 -0
  203. package/dist/storage/modelProviderConnectionStore.js +446 -0
  204. package/dist/storage/postgresAdapter.d.ts +4 -0
  205. package/dist/storage/postgresAdapter.js +14 -1
  206. package/dist/storage/postgresRequestDiagnostics.d.ts +9 -1
  207. package/dist/storage/postgresRequestDiagnostics.js +15 -2
  208. package/dist/storage/postgresWorker.js +20 -2
  209. package/dist/storage/postgresWorkerProtocol.d.ts +7 -0
  210. package/dist/storage/taskforceAgentConnectionBindingStore.d.ts +31 -0
  211. package/dist/storage/taskforceAgentConnectionBindingStore.js +84 -0
  212. package/dist/storage/workflowStore.d.ts +2 -0
  213. package/dist/storage/workflowStore.js +39 -2
  214. package/dist/sync/cloudSyncApi.js +4 -2
  215. package/dist/sync/collaborationSyncState.js +5 -0
  216. package/dist/sync/coordinator/localSyncExecutionPermitStore.js +60 -29
  217. package/dist/sync/coordinator/localWorkspaceSyncPendingV2PushProgress.d.ts +10 -0
  218. package/dist/sync/coordinator/localWorkspaceSyncPendingV2PushProgress.js +29 -0
  219. package/dist/sync/coordinator/localWorkspaceSyncRunner.d.ts +3 -1
  220. package/dist/sync/coordinator/localWorkspaceSyncRunner.js +18 -0
  221. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +15 -1
  222. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +99 -2
  223. package/dist/sync/coordinator/workspaceSyncCredentialBroker.d.ts +1 -0
  224. package/dist/sync/coordinator/workspaceSyncCredentialBroker.js +33 -4
  225. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.d.ts +2 -1
  226. package/dist/sync/engine/workspaceSyncContentVersionStore.d.ts +38 -0
  227. package/dist/sync/engine/workspaceSyncContentVersionStore.js +50 -1
  228. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.js +6 -6
  229. package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +14 -0
  230. package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +84 -0
  231. package/dist/sync/engine/workspaceSyncEngineRecovery.js +1 -0
  232. package/dist/sync/engine/workspaceSyncEngineRuntime.d.ts +1 -0
  233. package/dist/sync/engine/workspaceSyncEngineRuntime.js +1 -0
  234. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +112 -38
  235. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.js +6 -0
  236. package/dist/sync/engine/workspaceSyncEngineTransfers.js +3 -1
  237. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +1 -0
  238. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +31 -0
  239. package/dist/sync/syncApplyHandlers.d.ts +3 -0
  240. package/dist/sync/syncApplyHandlers.js +81 -15
  241. package/dist/sync/syncService.d.ts +15 -0
  242. package/dist/sync/syncService.js +83 -18
  243. package/dist/sync/taskforceAgentSyncAuthorization.d.ts +16 -0
  244. package/dist/sync/taskforceAgentSyncAuthorization.js +20 -0
  245. package/dist/sync/v3/combinedFeedCapability.js +4 -0
  246. package/dist/sync/v3/durableInitiativeMutationRouter.js +18 -10
  247. package/dist/sync/v3/durableOperationReplay.d.ts +14 -0
  248. package/dist/sync/v3/durableOperationReplay.js +18 -0
  249. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +3 -0
  250. package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +2 -1
  251. package/dist/sync/v3/durableTaskChecklistMutationRouter.js +58 -15
  252. package/dist/sync/v3/durableTaskCommentMutationRouter.js +3 -0
  253. package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +1 -1
  254. package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +10 -0
  255. package/dist/sync/v3/durableTaxonomyMutationRouter.js +5 -0
  256. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +18 -7
  257. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +89 -23
  258. package/dist/sync/v3/durableWorkstreamMutationRouter.js +18 -10
  259. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.js +16 -5
  260. package/dist/sync/v3/localOutboxDispatchRuntime.js +2 -2
  261. package/dist/sync/v3/localOutboxRecoveryPreparationService.js +8 -2
  262. package/dist/sync/v3/localTaskChecklistOutboxHandler.js +16 -2
  263. package/dist/sync/v3/localTaskChecklistOutboxService.d.ts +4 -0
  264. package/dist/sync/v3/localTaskChecklistOutboxService.js +14 -1
  265. package/dist/sync/v3/localTaskCreateOutboxService.d.ts +3 -1
  266. package/dist/sync/v3/localTaskCreateOutboxService.js +6 -1
  267. package/dist/sync/v3/localTaskDeleteOutboxService.js +1 -0
  268. package/dist/sync/v3/localTaskLifecycleOutboxService.d.ts +2 -1
  269. package/dist/sync/v3/localTaskLifecycleOutboxService.js +5 -1
  270. package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +2 -1
  271. package/dist/sync/v3/localTaskMetadataOutboxService.js +6 -2
  272. package/dist/sync/v3/localTaskStatusOutboxService.d.ts +10 -1
  273. package/dist/sync/v3/localTaskStatusOutboxService.js +238 -16
  274. package/dist/sync/v3/syncDurabilityStore.d.ts +36 -1
  275. package/dist/sync/v3/syncDurabilityStore.js +202 -8
  276. package/dist/sync/v3/taskChecklistMutationService.d.ts +11 -0
  277. package/dist/sync/v3/taskChecklistMutationService.js +44 -1
  278. package/dist/sync/v3/taskStatusMutationService.d.ts +29 -1
  279. package/dist/sync/v3/taskStatusMutationService.js +119 -3
  280. package/dist/sync/v3/workflowAssignmentSync.d.ts +5 -0
  281. package/dist/sync/v3/workflowAssignmentSync.js +27 -0
  282. package/dist/sync/v3/workflowRuntimeMutationService.d.ts +5 -0
  283. package/dist/sync/v3/workflowRuntimeMutationService.js +124 -71
  284. package/dist/sync/v3/workspaceSyncJournalReader.js +1 -1
  285. package/dist/sync/v3/workspaceSyncOperationRetentionService.d.ts +16 -0
  286. package/dist/sync/v3/workspaceSyncOperationRetentionService.js +83 -0
  287. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.d.ts +1 -0
  288. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +9 -2
  289. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +25 -3
  290. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +7 -0
  291. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +44 -32
  292. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +9 -5
  293. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +54 -38
  294. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +10 -0
  295. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +70 -31
  296. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +2 -1
  297. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +16 -0
  298. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +6 -0
  299. package/dist/sync/v3/workspaceSyncV3Feed.d.ts +1 -0
  300. package/dist/sync/v3/workspaceSyncV3Feed.js +6 -1
  301. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +2 -0
  302. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +49 -18
  303. package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +3 -0
  304. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +5 -0
  305. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +36 -2
  306. package/dist/sync/v3/workspaceSyncV3RepairSnapshotRetentionService.d.ts +17 -0
  307. package/dist/sync/v3/workspaceSyncV3RepairSnapshotRetentionService.js +64 -0
  308. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.d.ts +1 -0
  309. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.js +50 -5
  310. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverCoverage.d.ts +7 -0
  311. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverCoverage.js +33 -0
  312. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverWireContract.d.ts +7 -0
  313. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverWireContract.js +8 -0
  314. package/dist/sync/workspaceRepair.d.ts +5 -2
  315. package/dist/sync/workspaceRepair.js +161 -6
  316. package/dist/sync/workspaceSyncModel.d.ts +21 -0
  317. package/dist/sync/workspaceSyncModel.js +35 -7
  318. package/dist/sync/workspaceSyncState.d.ts +1 -0
  319. package/dist/sync/workspaceSyncV2SnapshotBuilder.d.ts +6 -0
  320. package/dist/sync/workspaceSyncV2SnapshotBuilder.js +5 -0
  321. package/dist/ui/assets/AiIdentityRosterCard-CDMPtnbC.js +1 -0
  322. package/dist/ui/assets/AiProfilesModule-Cww85C4E.js +1 -0
  323. package/dist/ui/assets/{AnnotatedAttachmentWorkspace-B68Wg-RV.js → AnnotatedAttachmentWorkspace-Dt9TKYSH.js} +1 -1
  324. package/dist/ui/assets/{AssetTraySortControl-C8Rztyal.js → AssetTraySortControl-CKgapnxu.js} +1 -1
  325. package/dist/ui/assets/{ContextAttachmentManager-Cj3c7X9y.js → ContextAttachmentManager-T-cEVcOZ.js} +2 -2
  326. package/dist/ui/assets/{DocumentWorkspace-B5uvzems.js → DocumentWorkspace-HD4MUjAZ.js} +1 -1
  327. package/dist/ui/assets/{EntityActivityTimeline-BVFvCB5R.js → EntityActivityTimeline-_V0zfMuh.js} +1 -1
  328. package/dist/ui/assets/PlanningModule-mTkBygsB.js +1 -0
  329. package/dist/ui/assets/{PlansPage-AY4cGWco.js → PlansPage-Btiq06VO.js} +1 -1
  330. package/dist/ui/assets/{TaskContextUpload-DZxTVesW.js → TaskContextUpload-C00NVUpn.js} +1 -1
  331. package/dist/ui/assets/TaskSettings-Cp-L-4xh.js +12 -0
  332. package/dist/ui/assets/TaskforceAgentsModule-Coq9-PUp.js +24 -0
  333. package/dist/ui/assets/TaskforceAgentsModule-b-8R25cJ.css +1 -0
  334. package/dist/ui/assets/{WorkflowManagerModule-DEr5di_r.js → WorkflowManagerModule-CuqRzMmM.js} +1 -1
  335. package/dist/ui/assets/index-BZ-hdZSk.css +1 -0
  336. package/dist/ui/assets/index-DSQINwt9.js +7 -0
  337. package/dist/ui/assets/{vendor-icons-D9Lpw-j4.js → vendor-icons-Bsq-mcEn.js} +1 -1
  338. package/dist/ui/branding/logos/letterhead_dark.png +0 -0
  339. package/dist/ui/branding/logos/letterhead_light.png +0 -0
  340. package/dist/ui/branding/logos/signature_dark.png +0 -0
  341. package/dist/ui/branding/logos/signature_light.png +0 -0
  342. package/dist/ui/index.html +3 -3
  343. package/dist/utils/aiProfileDefaultLogo.js +16 -48
  344. package/dist/utils/httpSetCookie.d.ts +1 -0
  345. package/dist/utils/httpSetCookie.js +4 -1
  346. package/dist/utils/localRuntimeUrl.d.ts +1 -0
  347. package/dist/utils/localRuntimeUrl.js +14 -0
  348. package/dist/utils/productLogoRegistry.d.ts +2 -0
  349. package/dist/utils/productLogoRegistry.js +36 -0
  350. package/dist/utils/syncStatusPresentation.d.ts +4 -0
  351. package/dist/utils/syncStatusPresentation.js +17 -0
  352. package/dist/utils/taskEvents.d.ts +2 -0
  353. package/dist/utils/workspaceSyncPresentation.d.ts +1 -1
  354. package/dist/utils/workspaceSyncPresentation.js +23 -17
  355. package/package.json +24 -4
  356. package/dist/ui/assets/AiIdentityRosterCard-BZM4aQnM.js +0 -1
  357. package/dist/ui/assets/AiProfilesModule-BbAEWtHH.js +0 -1
  358. package/dist/ui/assets/PlanningModule-B5DWQOGz.js +0 -1
  359. package/dist/ui/assets/TaskSettings-BeWAuyZj.js +0 -12
  360. package/dist/ui/assets/TaskforceAgentsModule-BifCYtjR.js +0 -21
  361. package/dist/ui/assets/TaskforceAgentsModule-D6IC0S7Q.css +0 -1
  362. package/dist/ui/assets/index-I5zhdtgt.js +0 -7
  363. package/dist/ui/assets/index-VRFsx3wz.css +0 -1
@@ -1 +1 @@
1
- import{r as n,j as e}from"./vendor-react-CKJs5o3c.js";import{a2 as ze,a3 as Me,a4 as Oe,a5 as He,a6 as Le,a7 as Fe,M as Be,t as $,a8 as Ue,a9 as Ge,aa as Je,T as Ye,ab as _e,ac as Ze}from"./index-I5zhdtgt.js";import{w as J,az as le,ak as Qe,t as pe,Z as je,bj as Xe,bk as et,a6 as tt,bl as st,bm as nt,a7 as rt,a as at,x as lt,v as it,A as ot,r as ct}from"./vendor-icons-D9Lpw-j4.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const dt="_root_1bn9e_1",ut="_main_1bn9e_13",ft="_trayOpen_1bn9e_21",mt="_libraryHeader_1bn9e_25",pt="_libraryTitle_1bn9e_34",bt="_libraryContent_1bn9e_41",ht="_libraryList_1bn9e_48",wt="_libraryItem_1bn9e_54",xt="_libraryItemSelected_1bn9e_75",yt="_libraryItemCopy_1bn9e_80",gt="_libraryItemName_1bn9e_84",_t="_libraryItemMeta_1bn9e_94",jt="_libraryBadges_1bn9e_101",Nt="_statusRow_1bn9e_102",vt="_content_1bn9e_109",kt="_visuallyHidden_1bn9e_115",St="_pageHeader_1bn9e_127",Ct="_pageHeading_1bn9e_136",Dt="_detailHeader_1bn9e_144",Et="_metadataEditor_1bn9e_148",Wt="_titleRow_1bn9e_154",It="_editor_1bn9e_169",Tt="_stickyToolbar_1bn9e_173",Kt="_toolbarGroup_1bn9e_188",Rt="_versionSelect_1bn9e_194",$t="_description_1bn9e_211",qt="_metrics_1bn9e_217",Vt="_metric_1bn9e_217",At="_section_1bn9e_249",Pt="_sectionHeader_1bn9e_253",zt="_stepToolbar_1bn9e_254",Mt="_stepActions_1bn9e_255",Ot="_stepList_1bn9e_266",Ht="_stepEditor_1bn9e_273",Lt="_stepToolbarExpanded_1bn9e_285",Ft="_stepExpandButton_1bn9e_289",Bt="_stepSummary_1bn9e_311",Ut="_stepFields_1bn9e_328",Gt="_fullField_1bn9e_335",Jt="_stepToggles_1bn9e_337",Yt="_requiredToggle_1bn9e_345",Zt="_stepsEmpty_1bn9e_356",Qt="_stepNumber_1bn9e_376",Xt="_emptyState_1bn9e_382",es="_loadingState_1bn9e_383",ts="_emptyStateInner_1bn9e_391",ss="_errorBanner_1bn9e_399",ns="_errorMessage_1bn9e_407",s={root:dt,main:ut,trayOpen:ft,libraryHeader:mt,libraryTitle:pt,libraryContent:bt,libraryList:ht,libraryItem:wt,libraryItemSelected:xt,libraryItemCopy:yt,libraryItemName:gt,libraryItemMeta:_t,libraryBadges:jt,statusRow:Nt,content:vt,visuallyHidden:kt,pageHeader:St,pageHeading:Ct,detailHeader:Dt,metadataEditor:Et,titleRow:Wt,editor:It,stickyToolbar:Tt,toolbarGroup:Kt,versionSelect:Rt,description:$t,metrics:qt,metric:Vt,section:At,sectionHeader:Pt,stepToolbar:zt,stepActions:Mt,stepList:Ot,stepEditor:Ht,stepToolbarExpanded:Lt,stepExpandButton:Ft,stepSummary:Bt,stepFields:Ut,fullField:Gt,stepToggles:Jt,requiredToggle:Yt,stepsEmpty:Zt,stepNumber:Qt,emptyState:Xt,loadingState:es,emptyStateInner:ts,errorBanner:ss,errorMessage:ns};function rs(c){const[_,k]=n.useState([]),[u,w]=n.useState(""),[E,g]=n.useState(null),[q,i]=n.useState(!0),[O,H]=n.useState(!1),[Y,L]=n.useState(!1),[Z,F]=n.useState(!1),[B,Q]=n.useState(!1),[ie,X]=n.useState(!1),[oe,ce]=n.useState(0),[de,x]=n.useState(null),m=n.useRef(0),p=n.useRef(c);p.current=c;const y=n.useCallback(async()=>{const r=++m.current;i(!0),x(null);try{const o=await ze();if(r!==m.current)return;k(o),w(f=>f&&o.some(({template:C})=>C.id===f)?f:o[0]?.template.id||"")}catch(o){if(r!==m.current)return;x(String(o?.message||o||"Unable to load workflows."))}finally{r===m.current&&i(!1)}},[c]);n.useEffect(()=>{k([]),w(""),g(null),y()},[y,c]),n.useEffect(()=>{let r=!1;if(!u){g(null),H(!1);return}return H(!0),x(null),Me(u).then(o=>{r||g(o)}).catch(o=>{r||(g(null),x(String(o?.message||o||"Unable to load workflow.")))}).finally(()=>{r||H(!1)}),()=>{r=!0}},[oe,u]);const S=n.useCallback(()=>{if(u&&!E){ce(r=>r+1);return}y()},[y,E,u]),j=n.useCallback(async r=>{const o=c;L(!0),x(null);try{const f=await Oe(r);return p.current!==o||(g(f),w(f.template.id),await y(),p.current===o&&w(f.template.id)),!0}catch(f){return p.current!==o||x(String(f?.message||f||"Unable to create workflow.")),!1}finally{L(!1)}},[y,c]),V=n.useCallback(async r=>{if(!u)return!1;const o=c,f=u;F(!0),x(null);try{const C=await He(f,{name:r.name,description:r.description,steps:r.steps});return p.current!==o||(g(C),await y(),p.current===o&&w(f)),!0}catch(C){return p.current!==o||x(String(C?.message||C||"Unable to save workflow draft.")),!1}finally{F(!1)}},[y,u,c]),T=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;Q(!0),x(null);try{const f=await Le(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to publish workflow.")),!1}finally{Q(!1)}},[y,u,c]),A=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;X(!0),x(null);try{const f=await Fe(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to create workflow draft.")),!1}finally{X(!1)}},[y,u,c]);return{workflows:_,selectedWorkflowId:u,selectedWorkflow:E,loadingLibrary:q,loadingDetails:O,creatingWorkflow:Y,savingWorkflow:Z,publishingWorkflow:B,creatingDraft:ie,error:de,setSelectedWorkflowId:w,refreshLibrary:y,retry:S,createWorkflow:j,saveDraft:V,publishDraft:T,createNextDraft:A,clearError:()=>x(null)}}const as="_title_lvjgs_1",ls="_message_lvjgs_7",is="_actions_lvjgs_13",be={title:as,message:ls,actions:is};function os({isOpen:c,workflowName:_,versionNumber:k,busy:u,onCancel:w,onPublish:E,theme:g}){return e.jsx(Be,{isOpen:c,onClose:w,title:e.jsxs("span",{className:be.title,children:[e.jsx(le,{size:18})," Publish Workflow"]}),size:"sm",closeOnOverlayClick:!1,closeDisabled:u,theme:g,footer:e.jsxs("div",{className:be.actions,children:[e.jsx("button",{type:"button",className:"tf-button-secondary",onClick:w,disabled:u,"data-modal-initial-focus":!0,children:"Cancel"}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:E,disabled:u,children:[u?e.jsx(J,{size:15,className:$.spinner}):e.jsx(le,{size:15}),"Publish Version ",k]})]}),children:e.jsxs("p",{className:be.message,children:["Publish ",e.jsx("strong",{children:_})," as Version ",k,"? Published versions are immutable. Future changes require a new draft."]})})}const re="draft";function cs(c){return c.draftVersionId&&c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber} published`:c.draftVersionId?"Unpublished":c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber}`:"No version"}function ds(c){if(!c)return"Not published";const _=new Date(c);return Number.isNaN(_.getTime())?"Not published":_.toLocaleDateString()}function ae(c,_,k){return JSON.stringify({name:c,description:_,steps:k.map(({clientKey:u,...w})=>w)})}function ws({workspaceId:c,libraryTrayOpen:_=!0,onCloseLibraryTray:k,assigneeOptions:u=[],theme:w,onUnsavedChangesChange:E}){const{workflows:g,selectedWorkflowId:q,selectedWorkflow:i,loadingLibrary:O,loadingDetails:H,creatingWorkflow:Y,savingWorkflow:L,publishingWorkflow:Z,creatingDraft:F,error:B,setSelectedWorkflowId:Q,retry:ie,createWorkflow:X,saveDraft:oe,publishDraft:ce,createNextDraft:de,clearError:x}=rs(c),[m,p]=n.useState(!1),[y,S]=n.useState(!1),[j,V]=n.useState(""),[T,A]=n.useState(""),[r,o]=n.useState([]),[f,C]=n.useState(""),[P,ee]=n.useState(!1),[te,U]=n.useState(""),[ue,W]=n.useState(new Set),[he,fe]=n.useState(null),[Ne,z]=n.useState(!1),me=n.useRef(null),se=n.useRef(new Map),K=n.useRef(null),D=n.useMemo(()=>i?te===re&&i.draft?i.draft:i.publishedVersions.find(({version:a})=>a.id===te)||i.draft||i.publishedVersions[0]||null:null,[te,i]),we=D?.version.status==="draft"?re:D?.version.id||"",ve=n.useMemo(()=>ae(j,T,r),[T,j,r]),N=m||D?.version.status==="draft",I=N&&ve!==f,b=Y||L||Z||F,ke=(i?.publishedVersions[0]?.version.versionNumber||0)+1,xe=n.useMemo(()=>u.filter(({kind:t,archivedAt:a})=>t!=="unassigned"&&!a),[u]),Se=n.useMemo(()=>Ue(xe),[xe]);n.useEffect(()=>{p(!1),S(!1),U(""),W(new Set),z(!1),K.current=null},[c]),n.useEffect(()=>{if(!i||m||!D)return;const t=D.version.name||i.template.name,a=D.version.description??i.template.description??"",d=D.steps.map(h=>({...h,clientKey:h.id}));V(t),A(a),o(d),C(ae(t,a,d));const l=K.current;S(!1),l?(W(new Set(d.filter((h,v)=>l.has(v)).map(({clientKey:h})=>h))),K.current=null):W(new Set),ee(!1)},[m,D,i]),n.useEffect(()=>{if(!I)return;const t=a=>{a.preventDefault(),a.returnValue=""};return window.addEventListener("beforeunload",t),()=>window.removeEventListener("beforeunload",t)},[I]),n.useEffect(()=>(E?.(I),()=>E?.(!1)),[I,E]);const ne=t=>{if(!I){t();return}fe(()=>t)},Ce=()=>{const t=he;fe(null),t?.()},ye=()=>{ne(()=>{x();const t=[];p(!0),S(!0),V(""),A(""),o(t),C(ae("","",t)),W(new Set),ee(!1),window.setTimeout(()=>me.current?.focus(),0)})},De=()=>{ne(()=>{if(x(),p(!1),S(!1),i){const t=i.draft?.version.name||i.template.name,a=i.draft?.version.description??i.publishedVersions[0]?.version.description??i.template.description??"",d=(i.draft?.steps||i.publishedVersions[0]?.steps||[]).map(l=>({...l,clientKey:l.id}));V(t),A(a),o(d),C(ae(t,a,d))}})},Ee=()=>{const t=`new-step-${Date.now()}-${r.length}`;o(a=>[...a,{id:t,clientKey:t,workflowVersionId:i?.draft?.version.id||"",position:a.length,name:"",instructions:"",ownerType:null,ownerId:null,expectedArtifact:null,requiresCommentEvidence:!1,isRequired:!0}]),W(a=>new Set(a).add(t)),window.setTimeout(()=>se.current.get(t)?.focus(),0)},M=(t,a)=>{o(d=>d.map(l=>l.clientKey===t?{...l,...a}:l))},ge=(t,a)=>{const d=t+a;d<0||d>=r.length||o(l=>{const h=[...l];return[h[t],h[d]]=[h[d],h[t]],h.map((v,R)=>({...v,position:R}))})},We=()=>r.map(t=>{const{clientKey:a,id:d,workflowVersionId:l,position:h,...v}=t;return{...v,name:t.name.trim(),instructions:t.instructions,ownerType:t.ownerType??null,ownerId:t.ownerId??null,expectedArtifact:t.expectedArtifact??null,requiresCommentEvidence:t.requiresCommentEvidence===!0,isRequired:t.isRequired}}),Ie=async()=>{if(ee(!0),!j.trim()){S(!0),window.setTimeout(()=>me.current?.focus(),0);return}const t=r.find(l=>!l.name.trim());if(t){W(l=>new Set(l).add(t.clientKey)),window.setTimeout(()=>se.current.get(t.clientKey)?.focus(),0);return}const a={name:j.trim(),description:T.trim(),steps:We()};K.current=new Set(r.map((l,h)=>ue.has(l.clientKey)?h:-1).filter(l=>l>=0)),(m?await X(a):await oe(a))?(p(!1),ee(!1)):K.current=null},Te=t=>{W(a=>{const d=new Set(a);return d.has(t)?d.delete(t):d.add(t),d})},Ke=t=>{t!==we&&ne(()=>{S(!1),U(t)})},Re=async()=>{K.current=new Set(r.map((a,d)=>ue.has(a.clientKey)?d:-1).filter(a=>a>=0)),await ce()||(K.current=null),z(!1)},$e=async()=>{const t=te;U(re),await de()||U(t)},qe=t=>{t===q&&!m||ne(()=>{p(!1),S(!1),U(""),z(!1),Q(t)})},Ve=e.jsxs("aside",{className:`${$.docTrayPanel} ${_?$.docTrayPanelOpen:""}`.trim(),"aria-hidden":!_,children:[e.jsxs("div",{className:s.libraryHeader,children:[e.jsxs("span",{className:`${s.libraryTitle} tf-label-micro`,children:[e.jsx(le,{size:14})," Workflow Library"]}),O?e.jsx(J,{size:14,className:$.spinner}):null,k?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:k,title:"Collapse workflow library","aria-label":"Collapse workflow library",children:e.jsx(Qe,{size:16})}):null]}),e.jsx("div",{className:`${s.libraryContent} tf-scrollbar tf-tray-scroll-viewport`,children:g.length>0?e.jsx("div",{className:s.libraryList,children:g.map(t=>e.jsxs("button",{type:"button",className:`${s.libraryItem} ${t.template.id===q&&!m?s.libraryItemSelected:""}`.trim(),disabled:b,onClick:()=>qe(t.template.id),"aria-pressed":t.template.id===q&&!m,children:[e.jsxs("span",{className:s.libraryItemCopy,children:[e.jsx("span",{className:s.libraryItemName,children:t.template.name}),e.jsx("span",{className:s.libraryItemMeta,children:cs(t)})]}),e.jsxs("span",{className:s.libraryBadges,children:[t.draftVersionId?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,t.latestPublishedVersion?e.jsx("span",{className:"tf-chip-success",children:"Published"}):null]})]},t.template.id))}):O?null:e.jsx("p",{className:"tf-text-helper",children:"No workflows configured yet."})})]}),Ae=m||!!i;return e.jsxs("div",{className:`${s.root} ${_?s.trayOpen:""}`.trim(),children:[Ve,e.jsx("main",{className:`${s.main} tf-scrollbar`,children:e.jsxs("div",{className:s.content,children:[e.jsxs("header",{className:s.pageHeader,children:[e.jsxs("div",{className:s.pageHeading,children:[e.jsx("h2",{className:"tf-heading-section",children:"Workflow Manager"}),e.jsx("p",{className:"tf-text-helper",children:"Design reusable workflows for Taskforce agents."})]}),e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:ye,disabled:b,children:[e.jsx(pe,{size:15})," New Workflow"]})]}),B?e.jsxs("div",{className:`${s.errorBanner} tf-surface-inset tf-text-error`,role:"alert",children:[e.jsxs("span",{className:s.errorMessage,children:[e.jsx(je,{size:14})," ",B]}),e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:ie,children:"Retry"})]}):null,H||O&&!i&&!m?e.jsx("div",{className:s.loadingState,"aria-live":"polite",children:e.jsx(J,{size:20,className:$.spinner})}):B&&q&&!i&&!m?e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(je,{size:24}),e.jsx("h3",{className:"tf-heading-card",children:"Workflow details unavailable"}),e.jsx("p",{className:"tf-text-helper",children:"Retry the request to load this workflow."})]})}):Ae?e.jsxs("div",{className:s.editor,children:[e.jsxs("div",{className:s.stickyToolbar,role:"toolbar","aria-label":N?"Workflow draft actions":"Workflow version actions",children:[N?e.jsxs("div",{className:s.toolbarGroup,children:[e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:Ee,disabled:b,children:[e.jsx(pe,{size:14})," Add Step"]}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set(r.map(({clientKey:t})=>t))),disabled:r.length===0,title:"Expand all steps","aria-label":"Expand all steps",children:e.jsx(Xe,{size:15})}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set),disabled:r.length===0,title:"Collapse all steps","aria-label":"Collapse all steps",children:e.jsx(et,{size:15})})]}):e.jsx("span",{}),e.jsxs("div",{className:s.toolbarGroup,children:[!m&&i?e.jsxs("select",{className:`${s.versionSelect} tf-field-shell`,"aria-label":"Workflow version",value:we,onChange:t=>Ke(t.target.value),disabled:b,children:[i.draft?e.jsx("option",{value:re,children:"Draft"}):null,i.publishedVersions.map(({version:t})=>e.jsxs("option",{value:t.id,children:["Version ",t.versionNumber]},t.id))]}):null,m?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,m?e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:De,disabled:b,children:"Cancel"}):null,N?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:s.visuallyHidden,role:"status","aria-live":"polite",children:I?"Workflow has unsaved changes.":"Workflow draft is saved."}),e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{Ie()},disabled:!I||b,children:[Y||L?e.jsx(J,{size:15,className:$.spinner}):e.jsx(tt,{size:15})," Save Draft"]}),m?null:e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>z(!0),disabled:I||r.length===0||b,title:I?"Save the draft before publishing.":r.length===0?"Add at least one step before publishing.":"Publish this workflow version",children:[e.jsx(st,{size:15})," Publish"]})]}):i?.draft?null:e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{$e()},disabled:b,children:[F?e.jsx(J,{size:15,className:$.spinner}):e.jsx(nt,{size:15})," Create New Draft"]})]})]}),e.jsx("div",{className:s.detailHeader,children:e.jsx("div",{className:s.metadataEditor,children:y?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-name",children:"Workflow name"}),e.jsx("input",{id:"workflow-draft-name",ref:me,className:"tf-field-shell",value:j,onChange:t=>V(t.target.value),"aria-invalid":P&&!j.trim(),"aria-describedby":P&&!j.trim()?"workflow-draft-name-error":void 0,readOnly:b}),P&&!j.trim()?e.jsx("span",{id:"workflow-draft-name-error",className:"tf-text-error",children:"Workflow name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-description",children:"Description"}),e.jsx("textarea",{id:"workflow-draft-description",className:"tf-field-shell",rows:3,value:T,onChange:t=>A(t.target.value),readOnly:b})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:s.titleRow,children:[e.jsx("h3",{className:"tf-heading-card",children:j||"Untitled workflow"}),e.jsx("div",{className:s.statusRow,children:N&&!m?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>S(!0),title:"Edit workflow details","aria-label":"Edit workflow details",children:e.jsx(rt,{size:14})}):null})]}),T?e.jsx("p",{className:`${s.description} tf-text-body`,children:T}):null]})})}),!m&&i?e.jsxs("div",{className:s.metrics,children:[e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Current version"}),e.jsx("strong",{children:D?.version.status==="draft"?"Draft":`Version ${D?.version.versionNumber||1}`})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Steps"}),e.jsx("strong",{children:r.length})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Last published"}),e.jsx("strong",{children:ds(i.publishedVersions[0]?.version.publishedAt)})]})]}):null,e.jsxs("section",{className:s.section,children:[e.jsx("div",{className:s.sectionHeader,children:e.jsx("h4",{className:"tf-heading-card",children:"Workflow Steps"})}),r.length>0?e.jsx("div",{className:s.stepList,children:r.map((t,a)=>{const d=ue.has(t.clientKey);return e.jsxs("div",{className:s.stepEditor,children:[e.jsxs("div",{className:`${s.stepToolbar} ${d?s.stepToolbarExpanded:""}`.trim(),children:[e.jsxs("button",{type:"button",className:s.stepExpandButton,onClick:()=>Te(t.clientKey),"aria-expanded":d,"aria-controls":`workflow-step-fields-${t.clientKey}`,children:[d?e.jsx(at,{size:15}):e.jsx(lt,{size:15}),e.jsx("span",{className:s.stepNumber,children:a+1}),e.jsx("strong",{children:t.name.trim()||"Untitled step"})]}),e.jsxs("div",{className:s.stepSummary,children:[e.jsx("span",{children:Ge(t.ownerId,u)}),e.jsx("span",{className:t.isRequired?"tf-chip-neutral":"tf-chip-warning",children:t.isRequired?"Required":"Optional"})]}),N?e.jsxs("div",{className:s.stepActions,children:[e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step up","aria-label":`Move step ${a+1} up`,onClick:()=>ge(a,-1),disabled:b||a===0,children:e.jsx(it,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step down","aria-label":`Move step ${a+1} down`,onClick:()=>ge(a,1),disabled:b||a===r.length-1,children:e.jsx(ot,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Remove step","aria-label":`Remove step ${a+1}`,onClick:()=>o(l=>l.filter(({clientKey:h})=>h!==t.clientKey)),disabled:b,children:e.jsx(ct,{size:14})})]}):null]}),d?e.jsxs("div",{id:`workflow-step-fields-${t.clientKey}`,className:s.stepFields,children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-name-${t.clientKey}`,children:"Step name"}),e.jsx("input",{id:`workflow-step-name-${t.clientKey}`,ref:l=>{l?se.current.set(t.clientKey,l):se.current.delete(t.clientKey)},className:"tf-field-shell",value:t.name,onChange:l=>M(t.clientKey,{name:l.target.value}),"aria-invalid":P&&!t.name.trim(),"aria-describedby":P&&!t.name.trim()?`workflow-step-name-error-${t.clientKey}`:void 0,disabled:!N,readOnly:b}),P&&!t.name.trim()?e.jsx("span",{id:`workflow-step-name-error-${t.clientKey}`,className:"tf-text-error",children:"Step name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",id:`workflow-step-owner-label-${t.clientKey}`,children:"Owner"}),(()=>{const l=Je(Se,t.ownerId),h=l.find(({value:v})=>String(v)===String(t.ownerId||"unassigned"))||l[0];return e.jsx(Ye,{value:t.ownerId||"unassigned",options:l,disabled:!N||b,ariaLabelledBy:`workflow-step-owner-label-${t.clientKey}`,portalPanel:!0,panelMinWidth:280,panelAlign:"start",searchable:!0,searchPlaceholder:"Search owners...",noResultsText:"No owners found.",triggerContent:h?e.jsx(_e,{option:h}):void 0,renderOptionContent:v=>{const R=l.find(({value:G})=>String(G)===String(v.value));return R?e.jsx(_e,{option:R}):v.label},onChange:v=>{const R=String(v),G=l.find(({value:Pe})=>String(Pe)===R);M(t.clientKey,{ownerId:G?.kind==="unassigned"?null:R,ownerType:G?.kind==="agent"?"agent":G?.kind==="member"?"user":null})}})})()]}),e.jsxs("div",{className:`${s.fullField} tf-field-stack`,children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-instructions-${t.clientKey}`,children:"Instructions"}),e.jsx("textarea",{id:`workflow-step-instructions-${t.clientKey}`,className:"tf-field-shell",rows:4,value:t.instructions,onChange:l=>M(t.clientKey,{instructions:l.target.value}),placeholder:"Describe the work to complete in this step.",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-artifact-${t.clientKey}`,children:"Output label"}),e.jsx("input",{id:`workflow-step-artifact-${t.clientKey}`,className:"tf-field-shell",value:t.expectedArtifact||"",onChange:l=>M(t.clientKey,{expectedArtifact:l.target.value||null}),placeholder:"Optional output description",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:s.stepToggles,children:[e.jsxs("label",{className:s.requiredToggle,title:"Requires the step owner to add a task comment before completing this step.",children:[e.jsx("input",{type:"checkbox",checked:t.requiresCommentEvidence===!0,onChange:l=>M(t.clientKey,{requiresCommentEvidence:l.target.checked}),disabled:!N||b}),"Require task comment"]}),e.jsxs("label",{className:s.requiredToggle,title:"Marks this step as mandatory when execution policy is enforced.",children:[e.jsx("input",{type:"checkbox",checked:t.isRequired,onChange:l=>M(t.clientKey,{isRequired:l.target.checked}),disabled:!N||b}),"Required step"]})]})]}):null]},t.clientKey)})}):e.jsx("div",{className:s.stepsEmpty,children:e.jsx("p",{className:"tf-text-helper",children:"No steps have been added yet."})})]})]}):e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(le,{size:30}),e.jsx("h3",{className:"tf-heading-card",children:"No workflows yet"}),e.jsx("p",{className:"tf-text-helper",children:"Create a workflow to begin defining a reusable process."}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:ye,children:[e.jsx(pe,{size:15})," New Workflow"]})]})})]})}),e.jsx(Ze,{isOpen:!!he,onKeepEditing:()=>fe(null),onDiscard:Ce,theme:w}),e.jsx(os,{isOpen:Ne,workflowName:j,versionNumber:ke,busy:Z,onCancel:()=>z(!1),onPublish:()=>{Re()},theme:w})]})}export{ws as WorkflowManagerModule};
1
+ import{r as n,j as e}from"./vendor-react-CKJs5o3c.js";import{a2 as ze,a3 as Me,a4 as Oe,a5 as He,a6 as Le,a7 as Fe,M as Be,t as $,a8 as Ue,a9 as Ge,aa as Je,T as Ye,ab as _e,ac as Ze}from"./index-DSQINwt9.js";import{w as J,az as le,ak as Qe,t as pe,Z as je,bj as Xe,bk as et,a6 as tt,bl as st,bm as nt,a7 as rt,a as at,x as lt,v as it,A as ot,r as ct}from"./vendor-icons-Bsq-mcEn.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const dt="_root_1bn9e_1",ut="_main_1bn9e_13",ft="_trayOpen_1bn9e_21",mt="_libraryHeader_1bn9e_25",pt="_libraryTitle_1bn9e_34",bt="_libraryContent_1bn9e_41",ht="_libraryList_1bn9e_48",wt="_libraryItem_1bn9e_54",xt="_libraryItemSelected_1bn9e_75",yt="_libraryItemCopy_1bn9e_80",gt="_libraryItemName_1bn9e_84",_t="_libraryItemMeta_1bn9e_94",jt="_libraryBadges_1bn9e_101",Nt="_statusRow_1bn9e_102",vt="_content_1bn9e_109",kt="_visuallyHidden_1bn9e_115",St="_pageHeader_1bn9e_127",Ct="_pageHeading_1bn9e_136",Dt="_detailHeader_1bn9e_144",Et="_metadataEditor_1bn9e_148",Wt="_titleRow_1bn9e_154",It="_editor_1bn9e_169",Tt="_stickyToolbar_1bn9e_173",Kt="_toolbarGroup_1bn9e_188",Rt="_versionSelect_1bn9e_194",$t="_description_1bn9e_211",qt="_metrics_1bn9e_217",Vt="_metric_1bn9e_217",At="_section_1bn9e_249",Pt="_sectionHeader_1bn9e_253",zt="_stepToolbar_1bn9e_254",Mt="_stepActions_1bn9e_255",Ot="_stepList_1bn9e_266",Ht="_stepEditor_1bn9e_273",Lt="_stepToolbarExpanded_1bn9e_285",Ft="_stepExpandButton_1bn9e_289",Bt="_stepSummary_1bn9e_311",Ut="_stepFields_1bn9e_328",Gt="_fullField_1bn9e_335",Jt="_stepToggles_1bn9e_337",Yt="_requiredToggle_1bn9e_345",Zt="_stepsEmpty_1bn9e_356",Qt="_stepNumber_1bn9e_376",Xt="_emptyState_1bn9e_382",es="_loadingState_1bn9e_383",ts="_emptyStateInner_1bn9e_391",ss="_errorBanner_1bn9e_399",ns="_errorMessage_1bn9e_407",s={root:dt,main:ut,trayOpen:ft,libraryHeader:mt,libraryTitle:pt,libraryContent:bt,libraryList:ht,libraryItem:wt,libraryItemSelected:xt,libraryItemCopy:yt,libraryItemName:gt,libraryItemMeta:_t,libraryBadges:jt,statusRow:Nt,content:vt,visuallyHidden:kt,pageHeader:St,pageHeading:Ct,detailHeader:Dt,metadataEditor:Et,titleRow:Wt,editor:It,stickyToolbar:Tt,toolbarGroup:Kt,versionSelect:Rt,description:$t,metrics:qt,metric:Vt,section:At,sectionHeader:Pt,stepToolbar:zt,stepActions:Mt,stepList:Ot,stepEditor:Ht,stepToolbarExpanded:Lt,stepExpandButton:Ft,stepSummary:Bt,stepFields:Ut,fullField:Gt,stepToggles:Jt,requiredToggle:Yt,stepsEmpty:Zt,stepNumber:Qt,emptyState:Xt,loadingState:es,emptyStateInner:ts,errorBanner:ss,errorMessage:ns};function rs(c){const[_,k]=n.useState([]),[u,w]=n.useState(""),[E,g]=n.useState(null),[q,i]=n.useState(!0),[O,H]=n.useState(!1),[Y,L]=n.useState(!1),[Z,F]=n.useState(!1),[B,Q]=n.useState(!1),[ie,X]=n.useState(!1),[oe,ce]=n.useState(0),[de,x]=n.useState(null),m=n.useRef(0),p=n.useRef(c);p.current=c;const y=n.useCallback(async()=>{const r=++m.current;i(!0),x(null);try{const o=await ze();if(r!==m.current)return;k(o),w(f=>f&&o.some(({template:C})=>C.id===f)?f:o[0]?.template.id||"")}catch(o){if(r!==m.current)return;x(String(o?.message||o||"Unable to load workflows."))}finally{r===m.current&&i(!1)}},[c]);n.useEffect(()=>{k([]),w(""),g(null),y()},[y,c]),n.useEffect(()=>{let r=!1;if(!u){g(null),H(!1);return}return H(!0),x(null),Me(u).then(o=>{r||g(o)}).catch(o=>{r||(g(null),x(String(o?.message||o||"Unable to load workflow.")))}).finally(()=>{r||H(!1)}),()=>{r=!0}},[oe,u]);const S=n.useCallback(()=>{if(u&&!E){ce(r=>r+1);return}y()},[y,E,u]),j=n.useCallback(async r=>{const o=c;L(!0),x(null);try{const f=await Oe(r);return p.current!==o||(g(f),w(f.template.id),await y(),p.current===o&&w(f.template.id)),!0}catch(f){return p.current!==o||x(String(f?.message||f||"Unable to create workflow.")),!1}finally{L(!1)}},[y,c]),V=n.useCallback(async r=>{if(!u)return!1;const o=c,f=u;F(!0),x(null);try{const C=await He(f,{name:r.name,description:r.description,steps:r.steps});return p.current!==o||(g(C),await y(),p.current===o&&w(f)),!0}catch(C){return p.current!==o||x(String(C?.message||C||"Unable to save workflow draft.")),!1}finally{F(!1)}},[y,u,c]),T=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;Q(!0),x(null);try{const f=await Le(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to publish workflow.")),!1}finally{Q(!1)}},[y,u,c]),A=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;X(!0),x(null);try{const f=await Fe(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to create workflow draft.")),!1}finally{X(!1)}},[y,u,c]);return{workflows:_,selectedWorkflowId:u,selectedWorkflow:E,loadingLibrary:q,loadingDetails:O,creatingWorkflow:Y,savingWorkflow:Z,publishingWorkflow:B,creatingDraft:ie,error:de,setSelectedWorkflowId:w,refreshLibrary:y,retry:S,createWorkflow:j,saveDraft:V,publishDraft:T,createNextDraft:A,clearError:()=>x(null)}}const as="_title_lvjgs_1",ls="_message_lvjgs_7",is="_actions_lvjgs_13",be={title:as,message:ls,actions:is};function os({isOpen:c,workflowName:_,versionNumber:k,busy:u,onCancel:w,onPublish:E,theme:g}){return e.jsx(Be,{isOpen:c,onClose:w,title:e.jsxs("span",{className:be.title,children:[e.jsx(le,{size:18})," Publish Workflow"]}),size:"sm",closeOnOverlayClick:!1,closeDisabled:u,theme:g,footer:e.jsxs("div",{className:be.actions,children:[e.jsx("button",{type:"button",className:"tf-button-secondary",onClick:w,disabled:u,"data-modal-initial-focus":!0,children:"Cancel"}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:E,disabled:u,children:[u?e.jsx(J,{size:15,className:$.spinner}):e.jsx(le,{size:15}),"Publish Version ",k]})]}),children:e.jsxs("p",{className:be.message,children:["Publish ",e.jsx("strong",{children:_})," as Version ",k,"? Published versions are immutable. Future changes require a new draft."]})})}const re="draft";function cs(c){return c.draftVersionId&&c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber} published`:c.draftVersionId?"Unpublished":c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber}`:"No version"}function ds(c){if(!c)return"Not published";const _=new Date(c);return Number.isNaN(_.getTime())?"Not published":_.toLocaleDateString()}function ae(c,_,k){return JSON.stringify({name:c,description:_,steps:k.map(({clientKey:u,...w})=>w)})}function ws({workspaceId:c,libraryTrayOpen:_=!0,onCloseLibraryTray:k,assigneeOptions:u=[],theme:w,onUnsavedChangesChange:E}){const{workflows:g,selectedWorkflowId:q,selectedWorkflow:i,loadingLibrary:O,loadingDetails:H,creatingWorkflow:Y,savingWorkflow:L,publishingWorkflow:Z,creatingDraft:F,error:B,setSelectedWorkflowId:Q,retry:ie,createWorkflow:X,saveDraft:oe,publishDraft:ce,createNextDraft:de,clearError:x}=rs(c),[m,p]=n.useState(!1),[y,S]=n.useState(!1),[j,V]=n.useState(""),[T,A]=n.useState(""),[r,o]=n.useState([]),[f,C]=n.useState(""),[P,ee]=n.useState(!1),[te,U]=n.useState(""),[ue,W]=n.useState(new Set),[he,fe]=n.useState(null),[Ne,z]=n.useState(!1),me=n.useRef(null),se=n.useRef(new Map),K=n.useRef(null),D=n.useMemo(()=>i?te===re&&i.draft?i.draft:i.publishedVersions.find(({version:a})=>a.id===te)||i.draft||i.publishedVersions[0]||null:null,[te,i]),we=D?.version.status==="draft"?re:D?.version.id||"",ve=n.useMemo(()=>ae(j,T,r),[T,j,r]),N=m||D?.version.status==="draft",I=N&&ve!==f,b=Y||L||Z||F,ke=(i?.publishedVersions[0]?.version.versionNumber||0)+1,xe=n.useMemo(()=>u.filter(({kind:t,archivedAt:a})=>t!=="unassigned"&&!a),[u]),Se=n.useMemo(()=>Ue(xe),[xe]);n.useEffect(()=>{p(!1),S(!1),U(""),W(new Set),z(!1),K.current=null},[c]),n.useEffect(()=>{if(!i||m||!D)return;const t=D.version.name||i.template.name,a=D.version.description??i.template.description??"",d=D.steps.map(h=>({...h,clientKey:h.id}));V(t),A(a),o(d),C(ae(t,a,d));const l=K.current;S(!1),l?(W(new Set(d.filter((h,v)=>l.has(v)).map(({clientKey:h})=>h))),K.current=null):W(new Set),ee(!1)},[m,D,i]),n.useEffect(()=>{if(!I)return;const t=a=>{a.preventDefault(),a.returnValue=""};return window.addEventListener("beforeunload",t),()=>window.removeEventListener("beforeunload",t)},[I]),n.useEffect(()=>(E?.(I),()=>E?.(!1)),[I,E]);const ne=t=>{if(!I){t();return}fe(()=>t)},Ce=()=>{const t=he;fe(null),t?.()},ye=()=>{ne(()=>{x();const t=[];p(!0),S(!0),V(""),A(""),o(t),C(ae("","",t)),W(new Set),ee(!1),window.setTimeout(()=>me.current?.focus(),0)})},De=()=>{ne(()=>{if(x(),p(!1),S(!1),i){const t=i.draft?.version.name||i.template.name,a=i.draft?.version.description??i.publishedVersions[0]?.version.description??i.template.description??"",d=(i.draft?.steps||i.publishedVersions[0]?.steps||[]).map(l=>({...l,clientKey:l.id}));V(t),A(a),o(d),C(ae(t,a,d))}})},Ee=()=>{const t=`new-step-${Date.now()}-${r.length}`;o(a=>[...a,{id:t,clientKey:t,workflowVersionId:i?.draft?.version.id||"",position:a.length,name:"",instructions:"",ownerType:null,ownerId:null,expectedArtifact:null,requiresCommentEvidence:!1,isRequired:!0}]),W(a=>new Set(a).add(t)),window.setTimeout(()=>se.current.get(t)?.focus(),0)},M=(t,a)=>{o(d=>d.map(l=>l.clientKey===t?{...l,...a}:l))},ge=(t,a)=>{const d=t+a;d<0||d>=r.length||o(l=>{const h=[...l];return[h[t],h[d]]=[h[d],h[t]],h.map((v,R)=>({...v,position:R}))})},We=()=>r.map(t=>{const{clientKey:a,id:d,workflowVersionId:l,position:h,...v}=t;return{...v,name:t.name.trim(),instructions:t.instructions,ownerType:t.ownerType??null,ownerId:t.ownerId??null,expectedArtifact:t.expectedArtifact??null,requiresCommentEvidence:t.requiresCommentEvidence===!0,isRequired:t.isRequired}}),Ie=async()=>{if(ee(!0),!j.trim()){S(!0),window.setTimeout(()=>me.current?.focus(),0);return}const t=r.find(l=>!l.name.trim());if(t){W(l=>new Set(l).add(t.clientKey)),window.setTimeout(()=>se.current.get(t.clientKey)?.focus(),0);return}const a={name:j.trim(),description:T.trim(),steps:We()};K.current=new Set(r.map((l,h)=>ue.has(l.clientKey)?h:-1).filter(l=>l>=0)),(m?await X(a):await oe(a))?(p(!1),ee(!1)):K.current=null},Te=t=>{W(a=>{const d=new Set(a);return d.has(t)?d.delete(t):d.add(t),d})},Ke=t=>{t!==we&&ne(()=>{S(!1),U(t)})},Re=async()=>{K.current=new Set(r.map((a,d)=>ue.has(a.clientKey)?d:-1).filter(a=>a>=0)),await ce()||(K.current=null),z(!1)},$e=async()=>{const t=te;U(re),await de()||U(t)},qe=t=>{t===q&&!m||ne(()=>{p(!1),S(!1),U(""),z(!1),Q(t)})},Ve=e.jsxs("aside",{className:`${$.docTrayPanel} ${_?$.docTrayPanelOpen:""}`.trim(),"aria-hidden":!_,children:[e.jsxs("div",{className:s.libraryHeader,children:[e.jsxs("span",{className:`${s.libraryTitle} tf-label-micro`,children:[e.jsx(le,{size:14})," Workflow Library"]}),O?e.jsx(J,{size:14,className:$.spinner}):null,k?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:k,title:"Collapse workflow library","aria-label":"Collapse workflow library",children:e.jsx(Qe,{size:16})}):null]}),e.jsx("div",{className:`${s.libraryContent} tf-scrollbar tf-tray-scroll-viewport`,children:g.length>0?e.jsx("div",{className:s.libraryList,children:g.map(t=>e.jsxs("button",{type:"button",className:`${s.libraryItem} ${t.template.id===q&&!m?s.libraryItemSelected:""}`.trim(),disabled:b,onClick:()=>qe(t.template.id),"aria-pressed":t.template.id===q&&!m,children:[e.jsxs("span",{className:s.libraryItemCopy,children:[e.jsx("span",{className:s.libraryItemName,children:t.template.name}),e.jsx("span",{className:s.libraryItemMeta,children:cs(t)})]}),e.jsxs("span",{className:s.libraryBadges,children:[t.draftVersionId?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,t.latestPublishedVersion?e.jsx("span",{className:"tf-chip-success",children:"Published"}):null]})]},t.template.id))}):O?null:e.jsx("p",{className:"tf-text-helper",children:"No workflows configured yet."})})]}),Ae=m||!!i;return e.jsxs("div",{className:`${s.root} ${_?s.trayOpen:""}`.trim(),children:[Ve,e.jsx("main",{className:`${s.main} tf-scrollbar`,children:e.jsxs("div",{className:s.content,children:[e.jsxs("header",{className:s.pageHeader,children:[e.jsxs("div",{className:s.pageHeading,children:[e.jsx("h2",{className:"tf-heading-section",children:"Workflow Manager"}),e.jsx("p",{className:"tf-text-helper",children:"Design reusable workflows for Taskforce agents."})]}),e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:ye,disabled:b,children:[e.jsx(pe,{size:15})," New Workflow"]})]}),B?e.jsxs("div",{className:`${s.errorBanner} tf-surface-inset tf-text-error`,role:"alert",children:[e.jsxs("span",{className:s.errorMessage,children:[e.jsx(je,{size:14})," ",B]}),e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:ie,children:"Retry"})]}):null,H||O&&!i&&!m?e.jsx("div",{className:s.loadingState,"aria-live":"polite",children:e.jsx(J,{size:20,className:$.spinner})}):B&&q&&!i&&!m?e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(je,{size:24}),e.jsx("h3",{className:"tf-heading-card",children:"Workflow details unavailable"}),e.jsx("p",{className:"tf-text-helper",children:"Retry the request to load this workflow."})]})}):Ae?e.jsxs("div",{className:s.editor,children:[e.jsxs("div",{className:s.stickyToolbar,role:"toolbar","aria-label":N?"Workflow draft actions":"Workflow version actions",children:[N?e.jsxs("div",{className:s.toolbarGroup,children:[e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:Ee,disabled:b,children:[e.jsx(pe,{size:14})," Add Step"]}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set(r.map(({clientKey:t})=>t))),disabled:r.length===0,title:"Expand all steps","aria-label":"Expand all steps",children:e.jsx(Xe,{size:15})}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set),disabled:r.length===0,title:"Collapse all steps","aria-label":"Collapse all steps",children:e.jsx(et,{size:15})})]}):e.jsx("span",{}),e.jsxs("div",{className:s.toolbarGroup,children:[!m&&i?e.jsxs("select",{className:`${s.versionSelect} tf-field-shell`,"aria-label":"Workflow version",value:we,onChange:t=>Ke(t.target.value),disabled:b,children:[i.draft?e.jsx("option",{value:re,children:"Draft"}):null,i.publishedVersions.map(({version:t})=>e.jsxs("option",{value:t.id,children:["Version ",t.versionNumber]},t.id))]}):null,m?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,m?e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:De,disabled:b,children:"Cancel"}):null,N?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:s.visuallyHidden,role:"status","aria-live":"polite",children:I?"Workflow has unsaved changes.":"Workflow draft is saved."}),e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{Ie()},disabled:!I||b,children:[Y||L?e.jsx(J,{size:15,className:$.spinner}):e.jsx(tt,{size:15})," Save Draft"]}),m?null:e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>z(!0),disabled:I||r.length===0||b,title:I?"Save the draft before publishing.":r.length===0?"Add at least one step before publishing.":"Publish this workflow version",children:[e.jsx(st,{size:15})," Publish"]})]}):i?.draft?null:e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{$e()},disabled:b,children:[F?e.jsx(J,{size:15,className:$.spinner}):e.jsx(nt,{size:15})," Create New Draft"]})]})]}),e.jsx("div",{className:s.detailHeader,children:e.jsx("div",{className:s.metadataEditor,children:y?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-name",children:"Workflow name"}),e.jsx("input",{id:"workflow-draft-name",ref:me,className:"tf-field-shell",value:j,onChange:t=>V(t.target.value),"aria-invalid":P&&!j.trim(),"aria-describedby":P&&!j.trim()?"workflow-draft-name-error":void 0,readOnly:b}),P&&!j.trim()?e.jsx("span",{id:"workflow-draft-name-error",className:"tf-text-error",children:"Workflow name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-description",children:"Description"}),e.jsx("textarea",{id:"workflow-draft-description",className:"tf-field-shell",rows:3,value:T,onChange:t=>A(t.target.value),readOnly:b})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:s.titleRow,children:[e.jsx("h3",{className:"tf-heading-card",children:j||"Untitled workflow"}),e.jsx("div",{className:s.statusRow,children:N&&!m?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>S(!0),title:"Edit workflow details","aria-label":"Edit workflow details",children:e.jsx(rt,{size:14})}):null})]}),T?e.jsx("p",{className:`${s.description} tf-text-body`,children:T}):null]})})}),!m&&i?e.jsxs("div",{className:s.metrics,children:[e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Current version"}),e.jsx("strong",{children:D?.version.status==="draft"?"Draft":`Version ${D?.version.versionNumber||1}`})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Steps"}),e.jsx("strong",{children:r.length})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Last published"}),e.jsx("strong",{children:ds(i.publishedVersions[0]?.version.publishedAt)})]})]}):null,e.jsxs("section",{className:s.section,children:[e.jsx("div",{className:s.sectionHeader,children:e.jsx("h4",{className:"tf-heading-card",children:"Workflow Steps"})}),r.length>0?e.jsx("div",{className:s.stepList,children:r.map((t,a)=>{const d=ue.has(t.clientKey);return e.jsxs("div",{className:s.stepEditor,children:[e.jsxs("div",{className:`${s.stepToolbar} ${d?s.stepToolbarExpanded:""}`.trim(),children:[e.jsxs("button",{type:"button",className:s.stepExpandButton,onClick:()=>Te(t.clientKey),"aria-expanded":d,"aria-controls":`workflow-step-fields-${t.clientKey}`,children:[d?e.jsx(at,{size:15}):e.jsx(lt,{size:15}),e.jsx("span",{className:s.stepNumber,children:a+1}),e.jsx("strong",{children:t.name.trim()||"Untitled step"})]}),e.jsxs("div",{className:s.stepSummary,children:[e.jsx("span",{children:Ge(t.ownerId,u)}),e.jsx("span",{className:t.isRequired?"tf-chip-neutral":"tf-chip-warning",children:t.isRequired?"Required":"Optional"})]}),N?e.jsxs("div",{className:s.stepActions,children:[e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step up","aria-label":`Move step ${a+1} up`,onClick:()=>ge(a,-1),disabled:b||a===0,children:e.jsx(it,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step down","aria-label":`Move step ${a+1} down`,onClick:()=>ge(a,1),disabled:b||a===r.length-1,children:e.jsx(ot,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Remove step","aria-label":`Remove step ${a+1}`,onClick:()=>o(l=>l.filter(({clientKey:h})=>h!==t.clientKey)),disabled:b,children:e.jsx(ct,{size:14})})]}):null]}),d?e.jsxs("div",{id:`workflow-step-fields-${t.clientKey}`,className:s.stepFields,children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-name-${t.clientKey}`,children:"Step name"}),e.jsx("input",{id:`workflow-step-name-${t.clientKey}`,ref:l=>{l?se.current.set(t.clientKey,l):se.current.delete(t.clientKey)},className:"tf-field-shell",value:t.name,onChange:l=>M(t.clientKey,{name:l.target.value}),"aria-invalid":P&&!t.name.trim(),"aria-describedby":P&&!t.name.trim()?`workflow-step-name-error-${t.clientKey}`:void 0,disabled:!N,readOnly:b}),P&&!t.name.trim()?e.jsx("span",{id:`workflow-step-name-error-${t.clientKey}`,className:"tf-text-error",children:"Step name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",id:`workflow-step-owner-label-${t.clientKey}`,children:"Owner"}),(()=>{const l=Je(Se,t.ownerId),h=l.find(({value:v})=>String(v)===String(t.ownerId||"unassigned"))||l[0];return e.jsx(Ye,{value:t.ownerId||"unassigned",options:l,disabled:!N||b,ariaLabelledBy:`workflow-step-owner-label-${t.clientKey}`,portalPanel:!0,panelMinWidth:280,panelAlign:"start",searchable:!0,searchPlaceholder:"Search owners...",noResultsText:"No owners found.",triggerContent:h?e.jsx(_e,{option:h}):void 0,renderOptionContent:v=>{const R=l.find(({value:G})=>String(G)===String(v.value));return R?e.jsx(_e,{option:R}):v.label},onChange:v=>{const R=String(v),G=l.find(({value:Pe})=>String(Pe)===R);M(t.clientKey,{ownerId:G?.kind==="unassigned"?null:R,ownerType:G?.kind==="agent"?"agent":G?.kind==="member"?"user":null})}})})()]}),e.jsxs("div",{className:`${s.fullField} tf-field-stack`,children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-instructions-${t.clientKey}`,children:"Instructions"}),e.jsx("textarea",{id:`workflow-step-instructions-${t.clientKey}`,className:"tf-field-shell",rows:4,value:t.instructions,onChange:l=>M(t.clientKey,{instructions:l.target.value}),placeholder:"Describe the work to complete in this step.",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-artifact-${t.clientKey}`,children:"Output label"}),e.jsx("input",{id:`workflow-step-artifact-${t.clientKey}`,className:"tf-field-shell",value:t.expectedArtifact||"",onChange:l=>M(t.clientKey,{expectedArtifact:l.target.value||null}),placeholder:"Optional output description",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:s.stepToggles,children:[e.jsxs("label",{className:s.requiredToggle,title:"Requires the step owner to add a task comment before completing this step.",children:[e.jsx("input",{type:"checkbox",checked:t.requiresCommentEvidence===!0,onChange:l=>M(t.clientKey,{requiresCommentEvidence:l.target.checked}),disabled:!N||b}),"Require task comment"]}),e.jsxs("label",{className:s.requiredToggle,title:"Marks this step as mandatory when execution policy is enforced.",children:[e.jsx("input",{type:"checkbox",checked:t.isRequired,onChange:l=>M(t.clientKey,{isRequired:l.target.checked}),disabled:!N||b}),"Required step"]})]})]}):null]},t.clientKey)})}):e.jsx("div",{className:s.stepsEmpty,children:e.jsx("p",{className:"tf-text-helper",children:"No steps have been added yet."})})]})]}):e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(le,{size:30}),e.jsx("h3",{className:"tf-heading-card",children:"No workflows yet"}),e.jsx("p",{className:"tf-text-helper",children:"Create a workflow to begin defining a reusable process."}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:ye,children:[e.jsx(pe,{size:15})," New Workflow"]})]})})]})}),e.jsx(Ze,{isOpen:!!he,onKeepEditing:()=>fe(null),onDiscard:Ce,theme:w}),e.jsx(os,{isOpen:Ne,workflowName:j,versionNumber:ke,busy:Z,onCancel:()=>z(!1),onPublish:()=>{Re()},theme:w})]})}export{ws as WorkflowManagerModule};