@taskforcehq/taskforce 0.3.328 → 0.3.330

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 (485) hide show
  1. package/dist/Taskforce.module.css +523 -79
  2. package/dist/TaskforceCore.js +237 -230
  3. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +1 -1
  4. package/dist/cli.js +34 -0
  5. package/dist/cliCloudTargetGuard.d.ts +5 -0
  6. package/dist/cliCloudTargetGuard.js +11 -0
  7. package/dist/components/features/AiProfilesModule.js +3 -5
  8. package/dist/components/features/AnnotatedAttachmentWorkspace.js +24 -8
  9. package/dist/components/features/TaskSettings.d.ts +12 -1
  10. package/dist/components/features/TaskSettings.js +217 -54
  11. package/dist/components/features/TaskforceAgentsModule.d.ts +1 -2
  12. package/dist/components/features/TaskforceAgentsModule.js +586 -116
  13. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +1 -1
  14. package/dist/components/features/agentConnections/AgentConnectionControl.d.ts +15 -0
  15. package/dist/components/features/agentConnections/AgentConnectionControl.js +125 -0
  16. package/dist/components/features/agentConnections/ModelConnectionsPanel.d.ts +18 -0
  17. package/dist/components/features/agentConnections/ModelConnectionsPanel.js +393 -0
  18. package/dist/components/features/agentConnections/modelConnectionsApi.d.ts +65 -0
  19. package/dist/components/features/agentConnections/modelConnectionsApi.js +129 -0
  20. package/dist/components/features/planning/PlanningModule.js +2 -5
  21. package/dist/components/features/planning/PlanningTaskOrderList.d.ts +1 -1
  22. package/dist/components/features/planning/PlanningTaskOrderList.js +17 -6
  23. package/dist/components/features/planning/planningTaskArrangement.d.ts +1 -0
  24. package/dist/components/features/planning/planningTaskArrangement.js +5 -5
  25. package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.js +15 -24
  26. package/dist/components/features/taskforceAgentEditorModel.d.ts +2 -1
  27. package/dist/components/features/taskforceAgentEditorModel.js +5 -1
  28. package/dist/components/features/workflowManager/workflowManagerApi.d.ts +1 -1
  29. package/dist/components/features/workflowManager/workflowManagerApi.js +3 -0
  30. package/dist/components/task/TaskCard.d.ts +5 -0
  31. package/dist/components/task/TaskCard.js +65 -10
  32. package/dist/components/task/TaskImageReviews.js +14 -5
  33. package/dist/components/task/TaskKanban.d.ts +6 -1
  34. package/dist/components/task/TaskKanban.js +152 -6
  35. package/dist/components/task/TaskList.d.ts +5 -0
  36. package/dist/components/task/TaskList.js +3 -3
  37. package/dist/components/task/TaskWorkflowAssignmentField.js +68 -10
  38. package/dist/components/ui/PasswordInput.d.ts +6 -0
  39. package/dist/components/ui/PasswordInput.js +11 -0
  40. package/dist/components/ui/TopNoticeLayer.js +1 -1
  41. package/dist/components/views/AppShellHeader.js +32 -11
  42. package/dist/components/views/PlanComparisonPage.js +12 -0
  43. package/dist/components/views/StandaloneLayout.js +32 -55
  44. package/dist/components/views/WidgetView.js +3 -3
  45. package/dist/components/views/panels/PlanningDrawer.js +5 -12
  46. package/dist/components/views/standalone/modals/AccountSettingsModal.js +26 -17
  47. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +4 -3
  48. package/dist/components/views/standalone/modals/SyncStatusModal.js +33 -38
  49. package/dist/config/envSchema.js +60 -1
  50. package/dist/config/localServiceRuntimeContract.d.ts +13 -0
  51. package/dist/config/localServiceRuntimeContract.js +135 -0
  52. package/dist/core/AiProfileService.js +46 -8
  53. package/dist/core/DeletedTaskLifecycleService.d.ts +1 -0
  54. package/dist/core/DeletedTaskLifecycleService.js +37 -6
  55. package/dist/core/McpTokenService.d.ts +23 -1
  56. package/dist/core/McpTokenService.js +93 -10
  57. package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +3 -2
  58. package/dist/core/TaskAttachmentLinksDurableMutationService.js +33 -9
  59. package/dist/core/TaskChecklistCommandService.d.ts +27 -0
  60. package/dist/core/TaskChecklistCommandService.js +83 -5
  61. package/dist/core/TaskLifecycleCommandService.d.ts +3 -1
  62. package/dist/core/TaskLifecycleCommandService.js +6 -2
  63. package/dist/core/Taskforce.d.ts +94 -2
  64. package/dist/core/Taskforce.js +760 -36
  65. package/dist/core/types.d.ts +14 -0
  66. package/dist/documentReviews/commandService.d.ts +2 -1
  67. package/dist/documentReviews/commandService.js +6 -3
  68. package/dist/hooks/sync/orchestratorShared.d.ts +1 -0
  69. package/dist/hooks/sync/orchestratorShared.js +2 -0
  70. package/dist/hooks/sync/useDurableLocalOutboxDrain.d.ts +1 -1
  71. package/dist/hooks/sync/useDurableTaskCreateMutation.js +1 -1
  72. package/dist/hooks/sync/useDurableTaskMetadataMutation.d.ts +1 -0
  73. package/dist/hooks/sync/useDurableTaskMetadataMutation.js +1 -0
  74. package/dist/hooks/sync/useDurableTaskStatusMutation.d.ts +1 -0
  75. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.d.ts +3 -0
  76. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.js +85 -9
  77. package/dist/hooks/sync/useSyncStatusControls.d.ts +4 -1
  78. package/dist/hooks/sync/useSyncStatusControls.js +47 -11
  79. package/dist/hooks/tasks/taskHttpMutation.js +1 -0
  80. package/dist/hooks/tasks/useCloudTaskSearch.d.ts +12 -0
  81. package/dist/hooks/tasks/useCloudTaskSearch.js +71 -0
  82. package/dist/hooks/tasks/useTaskDescriptionImageDraftRecovery.d.ts +16 -0
  83. package/dist/hooks/tasks/useTaskDescriptionImageDraftRecovery.js +197 -0
  84. package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +16 -3
  85. package/dist/hooks/tasks/useTaskEditorNavigation.js +72 -13
  86. package/dist/hooks/tasks/useTaskFormActions.d.ts +6 -0
  87. package/dist/hooks/tasks/useTaskFormActions.js +65 -12
  88. package/dist/hooks/ui/useSettingsModel.d.ts +24 -2
  89. package/dist/hooks/ui/useSettingsModel.js +13 -2
  90. package/dist/hooks/ui/useSettingsPersistence.d.ts +12 -1
  91. package/dist/hooks/ui/useSettingsPersistence.js +74 -47
  92. package/dist/hooks/useFilterSort.d.ts +7 -3
  93. package/dist/hooks/useFilterSort.js +15 -5
  94. package/dist/hooks/useSyncOrchestrator.d.ts +3 -0
  95. package/dist/hooks/useSyncOrchestrator.js +111 -2
  96. package/dist/hooks/useTaskData.d.ts +40 -1
  97. package/dist/hooks/useTaskData.js +240 -9
  98. package/dist/hooks/useTaskMutations.d.ts +12 -2
  99. package/dist/hooks/useTaskMutations.js +266 -52
  100. package/dist/hooks/useTaskforce.d.ts +39 -9
  101. package/dist/hooks/useTaskforce.js +359 -40
  102. package/dist/hooks/useUiNotice.d.ts +4 -0
  103. package/dist/hooks/useUiNotice.js +4 -0
  104. package/dist/mcp/adminWorkspaceRegistrar.js +3 -3
  105. package/dist/mcp/clientRegistry.d.ts +2 -2
  106. package/dist/mcp/clientRegistry.js +1 -1
  107. package/dist/mcp/documentAssetRegistrar.js +53 -41
  108. package/dist/mcp/documentHelpers.d.ts +1 -0
  109. package/dist/mcp/documentHelpers.js +7 -3
  110. package/dist/mcp/durableTaskMutationRouter.d.ts +4 -1
  111. package/dist/mcp/durableTaskMutationRouter.js +10 -0
  112. package/dist/mcp/durableTaskRelationshipMutationRouter.js +4 -0
  113. package/dist/mcp/httpProtocolRouting.d.ts +10 -0
  114. package/dist/mcp/httpProtocolRouting.js +19 -0
  115. package/dist/mcp/localCliHealth.d.ts +2 -2
  116. package/dist/mcp/localCliHealth.js +2 -2
  117. package/dist/mcp/localServiceProxy.d.ts +1 -0
  118. package/dist/mcp/localServiceProxy.js +530 -68
  119. package/dist/mcp/planningAttachmentCommandAdapter.d.ts +3 -1
  120. package/dist/mcp/planningAttachmentCommandAdapter.js +20 -2
  121. package/dist/mcp/runtime.d.ts +54 -79
  122. package/dist/mcp/runtime.js +556 -139
  123. package/dist/mcp/taskPlanningRegistrar.js +64 -42
  124. package/dist/mcp/toolCallCompatibility.js +38 -1
  125. package/dist/mcp/toolCatalog.d.ts +1 -0
  126. package/dist/mcp/toolProfiles.d.ts +2 -0
  127. package/dist/mcp/toolProfiles.js +10 -0
  128. package/dist/mcp/toolRegistry.d.ts +1 -0
  129. package/dist/mcp/toolRegistry.js +1 -0
  130. package/dist/mcp/workflowExecutionRegistrar.js +4 -4
  131. package/dist/migrations/taskSchemaMigrations.d.ts +5 -0
  132. package/dist/migrations/taskSchemaMigrations.js +427 -0
  133. package/dist/runtime/appGateDefinitions.d.ts +30 -6
  134. package/dist/runtime/appGateDefinitions.js +6 -6
  135. package/dist/runtime/appGates.d.ts +13 -13
  136. package/dist/runtime/appGates.js +36 -13
  137. package/dist/runtime/nodeAppGates.d.ts +8 -0
  138. package/dist/runtime/nodeAppGates.js +27 -0
  139. package/dist/server/cloudCollectionRead.d.ts +1 -1
  140. package/dist/server/cloudCollectionRead.js +2 -2
  141. package/dist/server/index.d.ts +6 -0
  142. package/dist/server/index.js +123 -14
  143. package/dist/server/localDatabaseIdentity.js +4 -1
  144. package/dist/server/localServiceLease.d.ts +3 -0
  145. package/dist/server/localServiceLease.js +11 -2
  146. package/dist/server/localServiceSessions.d.ts +14 -17
  147. package/dist/server/localServiceSessions.js +308 -94
  148. package/dist/server/localWorkspaceSyncServerRuntime.js +12 -7
  149. package/dist/server/rateLimit.d.ts +1 -0
  150. package/dist/server/rateLimit.js +4 -0
  151. package/dist/server/realtimeSyncWs.js +36 -12
  152. package/dist/server/routes/admin.d.ts +4 -0
  153. package/dist/server/routes/admin.js +113 -3
  154. package/dist/server/routes/agentRoles.js +3 -2
  155. package/dist/server/routes/agentSkills.js +3 -2
  156. package/dist/server/routes/agents.d.ts +7 -0
  157. package/dist/server/routes/agents.js +394 -39
  158. package/dist/server/routes/annotatedAttachments.js +3 -2
  159. package/dist/server/routes/auth.js +3 -1
  160. package/dist/server/routes/billing.js +5 -1
  161. package/dist/server/routes/durableTaskHttpRouters.d.ts +11 -2
  162. package/dist/server/routes/executorPhaseAApprovals.d.ts +19 -0
  163. package/dist/server/routes/executorPhaseAApprovals.js +140 -0
  164. package/dist/server/routes/executorPhaseAIssuerRedemptions.d.ts +11 -0
  165. package/dist/server/routes/executorPhaseAIssuerRedemptions.js +24 -0
  166. package/dist/server/routes/githubReviewEvidence.d.ts +19 -0
  167. package/dist/server/routes/githubReviewEvidence.js +116 -0
  168. package/dist/server/routes/localService.d.ts +15 -4
  169. package/dist/server/routes/localService.js +138 -40
  170. package/dist/server/routes/modelConnections.d.ts +24 -0
  171. package/dist/server/routes/modelConnections.js +205 -0
  172. package/dist/server/routes/primitives.d.ts +2 -0
  173. package/dist/server/routes/shared.d.ts +19 -0
  174. package/dist/server/routes/shared.js +95 -19
  175. package/dist/server/routes/sync.js +1 -0
  176. package/dist/server/routes/syncAuxRoutes.js +9 -2
  177. package/dist/server/routes/syncPullApplyRoutes.js +23 -4
  178. package/dist/server/routes/syncPushRoutes.d.ts +1 -0
  179. package/dist/server/routes/syncPushRoutes.js +1 -0
  180. package/dist/server/routes/syncV3FeedRoutes.js +27 -16
  181. package/dist/server/routes/syncV3LocalCaptureRoutes.js +28 -2
  182. package/dist/server/routes/syncV3LocalFeedApplyRoutes.d.ts +1 -0
  183. package/dist/server/routes/syncV3LocalFeedApplyRoutes.js +26 -0
  184. package/dist/server/routes/syncV3OperationRoutes.js +45 -9
  185. package/dist/server/routes/tasks.js +124 -13
  186. package/dist/server/routes/workflows.js +9 -1
  187. package/dist/server/routes/workspaces.js +43 -1
  188. package/dist/server/routes.js +59 -0
  189. package/dist/server/workspaceDeletionAdmission.d.ts +23 -0
  190. package/dist/server/workspaceDeletionAdmission.js +50 -0
  191. package/dist/service/localServiceCli.js +16 -0
  192. package/dist/service/localServiceClientLifecycle.js +36 -10
  193. package/dist/services/codexAppServerModelGateway.d.ts +161 -0
  194. package/dist/services/codexAppServerModelGateway.js +663 -0
  195. package/dist/services/codexDeviceCodeLoginManager.d.ts +39 -0
  196. package/dist/services/codexDeviceCodeLoginManager.js +265 -0
  197. package/dist/services/codexModelProviderConnectionLifecycle.d.ts +8 -0
  198. package/dist/services/codexModelProviderConnectionLifecycle.js +73 -0
  199. package/dist/services/executorPhaseAApprovalRuntime.d.ts +14 -0
  200. package/dist/services/executorPhaseAApprovalRuntime.js +24 -0
  201. package/dist/services/executorPhaseAApprovalService.d.ts +40 -0
  202. package/dist/services/executorPhaseAApprovalService.js +609 -0
  203. package/dist/services/executorPhaseADriftEvaluator.d.ts +78 -0
  204. package/dist/services/executorPhaseADriftEvaluator.js +93 -0
  205. package/dist/services/executorPhaseAIssuerCore.d.ts +126 -0
  206. package/dist/services/executorPhaseAIssuerCore.js +295 -0
  207. package/dist/services/executorPhaseAIssuerRedemptionService.d.ts +34 -0
  208. package/dist/services/executorPhaseAIssuerRedemptionService.js +158 -0
  209. package/dist/services/githubReviewEvidenceRuntime.d.ts +14 -0
  210. package/dist/services/githubReviewEvidenceRuntime.js +30 -0
  211. package/dist/services/githubReviewEvidenceService.d.ts +93 -0
  212. package/dist/services/githubReviewEvidenceService.js +336 -0
  213. package/dist/services/modelGateway.d.ts +7 -0
  214. package/dist/services/modelProviderConnectionService.d.ts +71 -0
  215. package/dist/services/modelProviderConnectionService.js +279 -0
  216. package/dist/services/modelProviderCredentialHome.d.ts +32 -0
  217. package/dist/services/modelProviderCredentialHome.js +271 -0
  218. package/dist/services/ownerScopedModelConnectionGateway.d.ts +12 -0
  219. package/dist/services/ownerScopedModelConnectionGateway.js +30 -0
  220. package/dist/services/taskforceAgentConnectionBindingService.d.ts +66 -0
  221. package/dist/services/taskforceAgentConnectionBindingService.js +185 -0
  222. package/dist/services/taskforceAgentMcpBridge.d.ts +8 -2
  223. package/dist/services/taskforceAgentMcpBridge.js +30 -27
  224. package/dist/shared/adminEdgeProxy.d.ts +5 -0
  225. package/dist/shared/adminEdgeProxy.js +94 -0
  226. package/dist/shared/adminProxySessionCookies.d.ts +16 -0
  227. package/dist/shared/adminProxySessionCookies.js +86 -0
  228. package/dist/shared/aiProfileColors.d.ts +31 -1
  229. package/dist/shared/aiProfileColors.js +14 -6
  230. package/dist/shared/executorPhaseAApprovalGoldenVector.json +269 -0
  231. package/dist/shared/executorPhaseAApprovalReceipt.d.ts +112 -0
  232. package/dist/shared/executorPhaseAApprovalReceipt.js +58 -0
  233. package/dist/shared/executorPhaseAApprovalTrustPolicy.json +10 -0
  234. package/dist/shared/executorPhaseADriftContracts.d.ts +37 -0
  235. package/dist/shared/executorPhaseADriftContracts.js +63 -0
  236. package/dist/shared/executorPhaseAIssuerContracts.d.ts +75 -0
  237. package/dist/shared/executorPhaseAIssuerContracts.js +90 -0
  238. package/dist/shared/executorPhaseARunAuthorization.d.ts +120 -0
  239. package/dist/shared/executorPhaseARunAuthorization.js +232 -0
  240. package/dist/shared/executorPhaseASchemaValidation.d.ts +7 -0
  241. package/dist/shared/executorPhaseASchemaValidation.js +53 -0
  242. package/dist/shared/executorPhaseASchemas/approval-receipt.schema.json +106 -0
  243. package/dist/shared/executorPhaseASchemas/drift-attestation.schema.json +54 -0
  244. package/dist/shared/executorPhaseASchemas/drift-request.schema.json +47 -0
  245. package/dist/shared/executorPhaseASchemas/foundation-manifest.schema.json +29 -0
  246. package/dist/shared/executorPhaseASchemas/issuer-audit-record.schema.json +24 -0
  247. package/dist/shared/executorPhaseASchemas/issuer-proof.schema.json +43 -0
  248. package/dist/shared/executorPhaseASchemas/issuer-redemption-request.schema.json +18 -0
  249. package/dist/shared/executorPhaseASchemas/issuer-redemption-response.schema.json +39 -0
  250. package/dist/shared/executorPhaseASchemas/logical-envelope.schema.json +149 -0
  251. package/dist/shared/executorPhaseASchemas/preflight-report.schema.json +216 -0
  252. package/dist/shared/executorPhaseASchemas/run-capability.schema.json +111 -0
  253. package/dist/shared/executorPhaseASchemas/sender-proof.schema.json +37 -0
  254. package/dist/shared/executorPhaseASchemas/workload-grant.schema.json +68 -0
  255. package/dist/shared/executorPhaseASchemas/workload-jwt-claims.schema.json +67 -0
  256. package/dist/shared/executorPhaseATiming.d.ts +1 -0
  257. package/dist/shared/executorPhaseATiming.js +1 -0
  258. package/dist/shared/planningIdentity.js +1 -1
  259. package/dist/shared/productLogoKeys.d.ts +2 -0
  260. package/dist/shared/productLogoKeys.js +18 -0
  261. package/dist/shared/taskforceAgentDefinition.d.ts +0 -1
  262. package/dist/shared/taskforceAgentDefinition.js +6 -3
  263. package/dist/shared/taskforceAgentModels.d.ts +1 -0
  264. package/dist/shared/taskforceAgentModels.js +36 -3
  265. package/dist/shared/userFeatureGrants.d.ts +4 -0
  266. package/dist/shared/userFeatureGrants.js +7 -0
  267. package/dist/storage/executorPhaseAApprovalReceiptStore.d.ts +37 -0
  268. package/dist/storage/executorPhaseAApprovalReceiptStore.js +81 -0
  269. package/dist/storage/executorPhaseARunAuthorizationStore.d.ts +103 -0
  270. package/dist/storage/executorPhaseARunAuthorizationStore.js +492 -0
  271. package/dist/storage/githubReviewEvidenceInstallationStore.d.ts +26 -0
  272. package/dist/storage/githubReviewEvidenceInstallationStore.js +89 -0
  273. package/dist/storage/modelProviderConnectionStore.d.ts +99 -0
  274. package/dist/storage/modelProviderConnectionStore.js +446 -0
  275. package/dist/storage/postgresAdapter.d.ts +24 -3
  276. package/dist/storage/postgresAdapter.js +117 -14
  277. package/dist/storage/postgresWorker.js +22 -5
  278. package/dist/storage/postgresWorkerProtocol.d.ts +30 -0
  279. package/dist/storage/postgresWorkerProtocol.js +30 -0
  280. package/dist/storage/taskforceAgentConnectionBindingStore.d.ts +31 -0
  281. package/dist/storage/taskforceAgentConnectionBindingStore.js +84 -0
  282. package/dist/sync/cloudSyncApi.d.ts +4 -1
  283. package/dist/sync/cloudSyncApi.js +7 -2
  284. package/dist/sync/contentSyncState.d.ts +1 -1
  285. package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +1 -0
  286. package/dist/sync/coordinator/localSyncExecutionPermitStore.js +67 -30
  287. package/dist/sync/coordinator/localWorkspaceSyncPendingV2PushProgress.d.ts +10 -0
  288. package/dist/sync/coordinator/localWorkspaceSyncPendingV2PushProgress.js +29 -0
  289. package/dist/sync/coordinator/localWorkspaceSyncRunner.js +6 -2
  290. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +15 -1
  291. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +99 -2
  292. package/dist/sync/coordinator/workspaceSyncCredentialBroker.d.ts +1 -0
  293. package/dist/sync/coordinator/workspaceSyncCredentialBroker.js +33 -4
  294. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.d.ts +2 -1
  295. package/dist/sync/engine/workspaceSyncContentVersionStore.d.ts +38 -0
  296. package/dist/sync/engine/workspaceSyncContentVersionStore.js +50 -1
  297. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +20 -2
  298. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.js +6 -6
  299. package/dist/sync/engine/workspaceSyncEngineLocalServices.d.ts +4 -0
  300. package/dist/sync/engine/workspaceSyncEngineLocalServices.js +11 -0
  301. package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +14 -0
  302. package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +84 -0
  303. package/dist/sync/engine/workspaceSyncEngineRecovery.js +1 -0
  304. package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +11 -0
  305. package/dist/sync/engine/workspaceSyncEngineRemoteServices.js +2 -1
  306. package/dist/sync/engine/workspaceSyncEngineRuntime.d.ts +1 -0
  307. package/dist/sync/engine/workspaceSyncEngineRuntime.js +1 -0
  308. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +31 -4
  309. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.d.ts +3 -1
  310. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +134 -43
  311. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.js +6 -0
  312. package/dist/sync/engine/workspaceSyncEngineTransfers.d.ts +1 -1
  313. package/dist/sync/engine/workspaceSyncEngineTransfers.js +11 -4
  314. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +1 -0
  315. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +29 -0
  316. package/dist/sync/syncApplyHandlers.d.ts +2 -0
  317. package/dist/sync/syncApplyHandlers.js +10 -1
  318. package/dist/sync/syncService.d.ts +17 -0
  319. package/dist/sync/syncService.js +87 -19
  320. package/dist/sync/taskforceAgentSyncAuthorization.d.ts +16 -0
  321. package/dist/sync/taskforceAgentSyncAuthorization.js +20 -0
  322. package/dist/sync/v3/combinedFeedCapability.js +8 -0
  323. package/dist/sync/v3/durableInitiativeMutationRouter.js +18 -10
  324. package/dist/sync/v3/durableOperationReplay.d.ts +14 -0
  325. package/dist/sync/v3/durableOperationReplay.js +18 -0
  326. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +2 -0
  327. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +14 -1
  328. package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +4 -1
  329. package/dist/sync/v3/durableTaskChecklistMutationRouter.js +62 -15
  330. package/dist/sync/v3/durableTaskCommentMutationRouter.js +3 -0
  331. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.d.ts +1 -0
  332. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +30 -8
  333. package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +5 -3
  334. package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +37 -2
  335. package/dist/sync/v3/durableTaxonomyMutationRouter.js +5 -0
  336. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +11 -0
  337. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +39 -10
  338. package/dist/sync/v3/durableWorkstreamMutationRouter.js +18 -10
  339. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.js +16 -5
  340. package/dist/sync/v3/localOutboxDispatchRuntime.js +2 -2
  341. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +2 -0
  342. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +47 -7
  343. package/dist/sync/v3/localTaskChecklistOutboxHandler.js +16 -2
  344. package/dist/sync/v3/localTaskChecklistOutboxService.d.ts +4 -0
  345. package/dist/sync/v3/localTaskChecklistOutboxService.js +14 -1
  346. package/dist/sync/v3/localTaskCreateOutboxService.js +15 -6
  347. package/dist/sync/v3/localTaskMetadataClient.d.ts +1 -0
  348. package/dist/sync/v3/localTaskMetadataClient.js +1 -0
  349. package/dist/sync/v3/localTaskMetadataOutboxHandler.js +5 -1
  350. package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +2 -0
  351. package/dist/sync/v3/localTaskMetadataOutboxService.js +7 -0
  352. package/dist/sync/v3/localTaskRestoreOutboxService.js +14 -6
  353. package/dist/sync/v3/localTaskStatusClient.d.ts +1 -0
  354. package/dist/sync/v3/localTaskStatusClient.js +6 -1
  355. package/dist/sync/v3/localTaskStatusOutboxService.d.ts +10 -0
  356. package/dist/sync/v3/localTaskStatusOutboxService.js +272 -24
  357. package/dist/sync/v3/syncDurabilityStore.d.ts +41 -0
  358. package/dist/sync/v3/syncDurabilityStore.js +199 -13
  359. package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +6 -4
  360. package/dist/sync/v3/taskAttachmentLinksMutationService.js +19 -10
  361. package/dist/sync/v3/taskChecklistMutationService.d.ts +15 -2
  362. package/dist/sync/v3/taskChecklistMutationService.js +48 -1
  363. package/dist/sync/v3/taskCreateMutationService.d.ts +2 -2
  364. package/dist/sync/v3/taskCreateMutationService.js +7 -4
  365. package/dist/sync/v3/taskMetadataMutationService.d.ts +3 -0
  366. package/dist/sync/v3/taskMetadataMutationService.js +4 -0
  367. package/dist/sync/v3/taskRestoreMutationService.d.ts +2 -2
  368. package/dist/sync/v3/taskRestoreMutationService.js +7 -4
  369. package/dist/sync/v3/taskStatusMutationService.d.ts +31 -1
  370. package/dist/sync/v3/taskStatusMutationService.js +123 -3
  371. package/dist/sync/v3/workflowAssignmentSync.d.ts +6 -0
  372. package/dist/sync/v3/workflowAssignmentSync.js +30 -0
  373. package/dist/sync/v3/workspaceSyncJournalReader.js +1 -1
  374. package/dist/sync/v3/workspaceSyncOperationRetentionService.d.ts +16 -0
  375. package/dist/sync/v3/workspaceSyncOperationRetentionService.js +83 -0
  376. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.d.ts +1 -1
  377. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +13 -3
  378. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.d.ts +11 -0
  379. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.js +27 -10
  380. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.d.ts +2 -1
  381. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.js +52 -10
  382. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.d.ts +1 -0
  383. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +18 -3
  384. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +8 -3
  385. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +51 -10
  386. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +14 -0
  387. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +49 -25
  388. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +13 -4
  389. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +124 -57
  390. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +20 -0
  391. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +106 -30
  392. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +4 -1
  393. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +34 -0
  394. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +12 -0
  395. package/dist/sync/v3/workspaceSyncV3FeedProfile.d.ts +1 -1
  396. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.d.ts +1 -0
  397. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.js +23 -10
  398. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.d.ts +3 -0
  399. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.js +64 -13
  400. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.d.ts +9 -0
  401. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.js +26 -0
  402. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +15 -5
  403. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +50 -14
  404. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.d.ts +2 -1
  405. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.js +11 -3
  406. package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +5 -0
  407. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +7 -0
  408. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +55 -9
  409. package/dist/sync/v3/workspaceSyncV3RepairSnapshotRetentionService.d.ts +17 -0
  410. package/dist/sync/v3/workspaceSyncV3RepairSnapshotRetentionService.js +64 -0
  411. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.js +9 -2
  412. package/dist/sync/v3/workspaceSyncV3TaskCoverCoverage.d.ts +7 -0
  413. package/dist/sync/v3/workspaceSyncV3TaskCoverCoverage.js +37 -0
  414. package/dist/sync/v3/workspaceSyncV3TaskCoverWireContract.d.ts +6 -0
  415. package/dist/sync/v3/workspaceSyncV3TaskCoverWireContract.js +9 -0
  416. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverCoverage.d.ts +7 -0
  417. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverCoverage.js +33 -0
  418. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverWireContract.d.ts +7 -0
  419. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverWireContract.js +8 -0
  420. package/dist/sync/workspacePullFeed.js +2 -1
  421. package/dist/sync/workspaceRepair.d.ts +8 -2
  422. package/dist/sync/workspaceRepair.js +222 -6
  423. package/dist/sync/workspaceSyncModel.d.ts +21 -0
  424. package/dist/sync/workspaceSyncModel.js +35 -7
  425. package/dist/sync/workspaceSyncState.d.ts +1 -0
  426. package/dist/sync/workspaceSyncV2SnapshotBuilder.d.ts +6 -0
  427. package/dist/sync/workspaceSyncV2SnapshotBuilder.js +5 -0
  428. package/dist/types.d.ts +47 -1
  429. package/dist/types.js +6 -0
  430. package/dist/ui/assets/AiIdentityRosterCard-OcSz1PkK.js +1 -0
  431. package/dist/ui/assets/AiProfilesModule-ByhYW5Xi.js +1 -0
  432. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BTM6nIg_.js +3 -0
  433. package/dist/ui/assets/AnnotatedAttachmentWorkspace-TzYu7pkG.css +1 -0
  434. package/dist/ui/assets/{AssetTraySortControl-Kf1pelSy.js → AssetTraySortControl-DabEG8L4.js} +1 -1
  435. package/dist/ui/assets/{ContextAttachmentManager-B8boOs6Q.js → ContextAttachmentManager-Coa8yVGM.js} +2 -2
  436. package/dist/ui/assets/{DocumentWorkspace-DXH4XUsB.js → DocumentWorkspace-BB0qhdix.js} +1 -1
  437. package/dist/ui/assets/{EntityActivityTimeline-BtSTq0ON.js → EntityActivityTimeline-CZ8x4UJE.js} +1 -1
  438. package/dist/ui/assets/PlanningModule-pRPjR7v5.js +1 -0
  439. package/dist/ui/assets/PlansPage-D86pZSSl.js +1 -0
  440. package/dist/ui/assets/TaskContextUpload-BVIkU9yT.js +1 -0
  441. package/dist/ui/assets/TaskSettings-Cv1mNhv_.js +12 -0
  442. package/dist/ui/assets/TaskforceAgentsModule-b-8R25cJ.css +1 -0
  443. package/dist/ui/assets/TaskforceAgentsModule-gmH-PD2q.js +24 -0
  444. package/dist/ui/assets/{WorkflowManagerModule-DWFspC-o.js → WorkflowManagerModule-DbfnHJ-f.js} +1 -1
  445. package/dist/ui/assets/index-BZ-hdZSk.css +1 -0
  446. package/dist/ui/assets/index-CTsDBaef.js +7 -0
  447. package/dist/ui/assets/{vendor-icons-BkFLXavV.js → vendor-icons-Bsq-mcEn.js} +1 -1
  448. package/dist/ui/branding/logos/letterhead_dark.png +0 -0
  449. package/dist/ui/branding/logos/letterhead_light.png +0 -0
  450. package/dist/ui/branding/logos/signature_dark.png +0 -0
  451. package/dist/ui/branding/logos/signature_light.png +0 -0
  452. package/dist/ui/index.html +3 -3
  453. package/dist/utils/aiProfileDefaultLogo.js +16 -48
  454. package/dist/utils/httpSetCookie.d.ts +1 -0
  455. package/dist/utils/httpSetCookie.js +4 -1
  456. package/dist/utils/localRuntimeUrl.d.ts +1 -0
  457. package/dist/utils/localRuntimeUrl.js +14 -0
  458. package/dist/utils/productLogoRegistry.d.ts +2 -0
  459. package/dist/utils/productLogoRegistry.js +36 -0
  460. package/dist/utils/syncStatusPresentation.d.ts +4 -0
  461. package/dist/utils/syncStatusPresentation.js +17 -0
  462. package/dist/utils/taskActivity.d.ts +3 -2
  463. package/dist/utils/taskActivity.js +19 -2
  464. package/dist/utils/taskEditorReconciliation.d.ts +40 -0
  465. package/dist/utils/taskEditorReconciliation.js +217 -0
  466. package/dist/utils/taskEvents.d.ts +2 -0
  467. package/dist/utils/taskNormalization.d.ts +1 -0
  468. package/dist/utils/taskNormalization.js +39 -0
  469. package/dist/utils/taskSearch.js +2 -2
  470. package/dist/utils/uiNotice.d.ts +4 -0
  471. package/dist/utils/workspaceSyncPresentation.d.ts +1 -1
  472. package/dist/utils/workspaceSyncPresentation.js +23 -17
  473. package/package.json +36 -6
  474. package/dist/ui/assets/AiIdentityRosterCard-MZs7lVED.js +0 -1
  475. package/dist/ui/assets/AiProfilesModule-C3i0LOxe.js +0 -1
  476. package/dist/ui/assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css +0 -1
  477. package/dist/ui/assets/AnnotatedAttachmentWorkspace-DVZk5Tln.js +0 -3
  478. package/dist/ui/assets/PlanningModule-BPVyEa-f.js +0 -1
  479. package/dist/ui/assets/PlansPage-ChqgxALc.js +0 -1
  480. package/dist/ui/assets/TaskContextUpload-CB3ol0sN.js +0 -1
  481. package/dist/ui/assets/TaskSettings-g4ECKNOz.js +0 -12
  482. package/dist/ui/assets/TaskforceAgentsModule-BazdUwxZ.js +0 -21
  483. package/dist/ui/assets/TaskforceAgentsModule-D6IC0S7Q.css +0 -1
  484. package/dist/ui/assets/index-BUplSsv_.js +0 -7
  485. package/dist/ui/assets/index-gz2EXuoK.css +0 -1
@@ -0,0 +1,78 @@
1
+ import { type VerifiedExecutorPhaseADriftRequest } from '../shared/executorPhaseADriftContracts.js';
2
+ import type { ExecutorPhaseARs256Signer } from './executorPhaseAIssuerCore.js';
3
+ export declare const EXECUTOR_PHASE_A_DRIFT_REPLAY_RETENTION_MS: number;
4
+ export interface ExecutorPhaseADriftReplayStore {
5
+ claim(input: {
6
+ requestId: string;
7
+ requestSha256: string;
8
+ claimedAt: string;
9
+ retainUntil: string;
10
+ }): Promise<'claimed' | 'duplicate'>;
11
+ }
12
+ export interface ExecutorPhaseADriftState {
13
+ issuer: string;
14
+ audience: string;
15
+ publishedKeyIds: string[];
16
+ brokerRoutesAuthenticated: boolean;
17
+ sourceIdentityPatterns: Record<'bootstrap' | 'ami-build' | 'provenance' | 'runtime' | 'cleanup', string>;
18
+ principalTagKeys: string[];
19
+ roleTrustSha256: Record<'bootstrap' | 'ami-build' | 'provenance' | 'runtime' | 'cleanup', string>;
20
+ rolePolicySha256: Record<'bootstrap' | 'ami-build' | 'provenance' | 'runtime' | 'cleanup', string>;
21
+ maxSessionDurationSeconds: number;
22
+ cloudTrailEnabled: boolean;
23
+ alarmsEnabled: boolean;
24
+ }
25
+ export interface ExecutorPhaseADriftFinding {
26
+ code: string;
27
+ expectedSha256: string;
28
+ observedSha256: string;
29
+ }
30
+ export declare function evaluateExecutorPhaseADrift(expected: ExecutorPhaseADriftState, observed: ExecutorPhaseADriftState): ExecutorPhaseADriftFinding[];
31
+ export declare function attestExecutorPhaseADrift(input: {
32
+ requestId: string;
33
+ runId: string;
34
+ accountId: string;
35
+ region: 'us-west-2';
36
+ expected: ExecutorPhaseADriftState;
37
+ observed: ExecutorPhaseADriftState;
38
+ collectedAt: Date;
39
+ }, signer: ExecutorPhaseARs256Signer): Promise<{
40
+ payload: {
41
+ schema: "taskforce.executor-phase-a-drift-attestation-payload/v1";
42
+ requestId: string;
43
+ runId: string;
44
+ accountId: string;
45
+ region: "us-west-2";
46
+ status: "fail" | "pass";
47
+ findings: ExecutorPhaseADriftFinding[];
48
+ observedStateSha256: string;
49
+ collectedAt: string;
50
+ expiresAt: string;
51
+ };
52
+ envelope: {
53
+ algorithm: "RS256";
54
+ keyId: string;
55
+ payloadSha256: string;
56
+ signature: string;
57
+ };
58
+ }>;
59
+ export declare function collectAndAttestExecutorPhaseADrift(request: VerifiedExecutorPhaseADriftRequest, expected: ExecutorPhaseADriftState, replayStore: ExecutorPhaseADriftReplayStore, collectObservedState: () => Promise<ExecutorPhaseADriftState>, signer: ExecutorPhaseARs256Signer, now?: () => Date): Promise<{
60
+ payload: {
61
+ schema: "taskforce.executor-phase-a-drift-attestation-payload/v1";
62
+ requestId: string;
63
+ runId: string;
64
+ accountId: string;
65
+ region: "us-west-2";
66
+ status: "fail" | "pass";
67
+ findings: ExecutorPhaseADriftFinding[];
68
+ observedStateSha256: string;
69
+ collectedAt: string;
70
+ expiresAt: string;
71
+ };
72
+ envelope: {
73
+ algorithm: "RS256";
74
+ keyId: string;
75
+ payloadSha256: string;
76
+ signature: string;
77
+ };
78
+ }>;
@@ -0,0 +1,93 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { canonicalizeExecutorPhaseAJson } from '../shared/executorPhaseAApprovalReceipt.js';
3
+ import { assertVerifiedExecutorPhaseADriftRequest, } from '../shared/executorPhaseADriftContracts.js';
4
+ import { assertExecutorPhaseASchema } from '../shared/executorPhaseASchemaValidation.js';
5
+ import { EXECUTOR_PHASE_A_CROSS_SERVICE_CLOCK_SKEW_MS } from '../shared/executorPhaseATiming.js';
6
+ export const EXECUTOR_PHASE_A_DRIFT_REPLAY_RETENTION_MS = 10 * 60 * 1000;
7
+ const CHECKS = [
8
+ { code: 'ISSUER_MISMATCH', select: (state) => state.issuer },
9
+ { code: 'AUDIENCE_MISMATCH', select: (state) => state.audience },
10
+ { code: 'PUBLISHED_KEY_SET_MISMATCH', select: (state) => [...state.publishedKeyIds].sort() },
11
+ { code: 'BROKER_ROUTE_AUTH_MISSING', select: (state) => state.brokerRoutesAuthenticated },
12
+ { code: 'SOURCE_IDENTITY_PATTERN_MISMATCH', select: (state) => state.sourceIdentityPatterns },
13
+ { code: 'PRINCIPAL_TAG_KEYS_MISMATCH', select: (state) => [...state.principalTagKeys].sort() },
14
+ { code: 'ROLE_TRUST_MISMATCH', select: (state) => state.roleTrustSha256 },
15
+ { code: 'ROLE_POLICY_MISMATCH', select: (state) => state.rolePolicySha256 },
16
+ { code: 'SESSION_DURATION_MISMATCH', select: (state) => state.maxSessionDurationSeconds },
17
+ { code: 'CLOUDTRAIL_DISABLED', select: (state) => state.cloudTrailEnabled },
18
+ { code: 'ALARMS_DISABLED', select: (state) => state.alarmsEnabled },
19
+ ];
20
+ function digest(value) {
21
+ return createHash('sha256').update(canonicalizeExecutorPhaseAJson(value)).digest('hex');
22
+ }
23
+ export function evaluateExecutorPhaseADrift(expected, observed) {
24
+ const findings = [];
25
+ for (const check of CHECKS) {
26
+ const expectedValue = check.select(expected);
27
+ const observedValue = check.select(observed);
28
+ const expectedSha256 = digest(expectedValue);
29
+ const observedSha256 = digest(observedValue);
30
+ if (expectedSha256 !== observedSha256) {
31
+ findings.push({ code: check.code, expectedSha256, observedSha256 });
32
+ }
33
+ }
34
+ return findings;
35
+ }
36
+ export async function attestExecutorPhaseADrift(input, signer) {
37
+ const findings = evaluateExecutorPhaseADrift(input.expected, input.observed);
38
+ const payload = {
39
+ schema: 'taskforce.executor-phase-a-drift-attestation-payload/v1',
40
+ requestId: input.requestId,
41
+ runId: input.runId,
42
+ accountId: input.accountId,
43
+ region: input.region,
44
+ status: findings.length === 0 ? 'pass' : 'fail',
45
+ findings,
46
+ observedStateSha256: digest(input.observed),
47
+ collectedAt: input.collectedAt.toISOString(),
48
+ expiresAt: new Date(input.collectedAt.getTime() + 60_000).toISOString(),
49
+ };
50
+ const payloadBytes = canonicalizeExecutorPhaseAJson(payload);
51
+ const signature = await signer.sign(payloadBytes);
52
+ if (signature.length !== 256)
53
+ throw new TypeError('The drift signer returned a non-RSA-2048 signature.');
54
+ const attestation = {
55
+ payload,
56
+ envelope: {
57
+ algorithm: 'RS256',
58
+ keyId: signer.keyId,
59
+ payloadSha256: createHash('sha256').update(payloadBytes).digest('hex'),
60
+ signature: signature.toString('base64url'),
61
+ },
62
+ };
63
+ assertExecutorPhaseASchema('driftAttestation', attestation);
64
+ return attestation;
65
+ }
66
+ export async function collectAndAttestExecutorPhaseADrift(request, expected, replayStore, collectObservedState, signer, now = () => new Date()) {
67
+ assertVerifiedExecutorPhaseADriftRequest(request);
68
+ const claimedAt = now();
69
+ const issuedAt = Date.parse(request.payload.issuedAt);
70
+ const expiresAt = Date.parse(request.payload.expiresAt);
71
+ if (claimedAt.getTime() + EXECUTOR_PHASE_A_CROSS_SERVICE_CLOCK_SKEW_MS < issuedAt
72
+ || claimedAt.getTime() >= expiresAt + EXECUTOR_PHASE_A_CROSS_SERVICE_CLOCK_SKEW_MS) {
73
+ throw new TypeError('The verified drift request is not fresh at collection time.');
74
+ }
75
+ const claim = await replayStore.claim({
76
+ requestId: request.payload.requestId,
77
+ requestSha256: digest(request),
78
+ claimedAt: claimedAt.toISOString(),
79
+ retainUntil: new Date(claimedAt.getTime() + EXECUTOR_PHASE_A_DRIFT_REPLAY_RETENTION_MS).toISOString(),
80
+ });
81
+ if (claim !== 'claimed')
82
+ throw new TypeError('The drift request was already claimed.');
83
+ const observed = await collectObservedState();
84
+ return attestExecutorPhaseADrift({
85
+ requestId: request.payload.requestId,
86
+ runId: request.payload.runId,
87
+ accountId: request.payload.accountId,
88
+ region: request.payload.region,
89
+ expected,
90
+ observed,
91
+ collectedAt: now(),
92
+ }, signer);
93
+ }
@@ -0,0 +1,126 @@
1
+ import { type KeyObject } from 'node:crypto';
2
+ import { type ExecutorPhaseAApprovalReceipt } from '../shared/executorPhaseAApprovalReceipt.js';
3
+ import { type ExecutorPhaseAIssuerRedemptionRequest, type ExecutorPhaseAIssuerRedemptionResponse } from '../shared/executorPhaseAIssuerContracts.js';
4
+ import { type ExecutorPhaseARunCapability, type ExecutorPhaseASenderProof, type ExecutorPhaseAWorkloadGrant, type VerifiedExecutorPhaseAWorkloadGrantBundle } from '../shared/executorPhaseARunAuthorization.js';
5
+ export declare const EXECUTOR_PHASE_A_OIDC_PUBLIC_CACHE_MAX_AGE_SECONDS = 300;
6
+ declare const TRANSITIVE_TAG_KEYS: readonly ["TaskforceRun", "TaskforceReceipt", "TaskforcePhase", "TaskforceWorkspaceHash", "TaskforceSource"];
7
+ export interface ExecutorPhaseARs256Signer {
8
+ keyId: string;
9
+ sign(bytes: Buffer): Promise<Buffer>;
10
+ }
11
+ export interface ExecutorPhaseAOidcKey {
12
+ keyId: string;
13
+ publicKey: KeyObject;
14
+ status: 'active' | 'retiring' | 'disabled' | 'removed';
15
+ validFrom: string;
16
+ validUntil: string;
17
+ lastIssuedAt: string | null;
18
+ publishUntil: string | null;
19
+ }
20
+ export interface ExecutorPhaseAWorkloadJwtClaims {
21
+ iss: string;
22
+ aud: string;
23
+ sub: string;
24
+ iat: number;
25
+ nbf: number;
26
+ exp: number;
27
+ jti: string;
28
+ 'https://aws.amazon.com/source_identity': string;
29
+ 'https://aws.amazon.com/tags': {
30
+ principal_tags: Record<(typeof TRANSITIVE_TAG_KEYS)[number], [string]>;
31
+ transitive_tag_keys: typeof TRANSITIVE_TAG_KEYS;
32
+ };
33
+ taskforce: {
34
+ schema: 'taskforce.executor-phase-a-workload-jwt-claims/v1';
35
+ receiptId: string;
36
+ receiptSha256: string;
37
+ workspaceId: string;
38
+ taskId: string;
39
+ runId: string;
40
+ sourceCommit: string;
41
+ accountId: string;
42
+ region: 'us-west-2';
43
+ availabilityZone: string;
44
+ logicalEnvelopeSha256: string;
45
+ budgetsSha256: string;
46
+ roleArn: string;
47
+ brokerKeyFingerprint: string;
48
+ grantId: string;
49
+ grantSha256: string;
50
+ senderProofSha256: string;
51
+ };
52
+ }
53
+ export interface ExecutorPhaseAIssuerStateStore {
54
+ acquire(input: {
55
+ grantId: string;
56
+ grantSha256: string;
57
+ senderProofSha256: string;
58
+ requestId: string;
59
+ createdAt: string;
60
+ }): Promise<'acquired' | 'terminal'>;
61
+ releasePending(input: {
62
+ grantId: string;
63
+ requestId: string;
64
+ updatedAt: string;
65
+ }): Promise<void>;
66
+ markSigned(input: {
67
+ grantId: string;
68
+ tokenId: string;
69
+ kmsKeyId: string;
70
+ updatedAt: string;
71
+ }): Promise<void>;
72
+ markFailed(input: {
73
+ grantId: string;
74
+ errorCategory: string;
75
+ updatedAt: string;
76
+ }): Promise<void>;
77
+ }
78
+ export interface ExecutorPhaseAIssuerCoreInput {
79
+ requestId: string;
80
+ approvalReceipt: ExecutorPhaseAApprovalReceipt;
81
+ runCapability: ExecutorPhaseARunCapability;
82
+ workloadGrant: ExecutorPhaseAWorkloadGrant;
83
+ senderProof: ExecutorPhaseASenderProof;
84
+ brokerRequestSha256: string;
85
+ expectedPolicySha256: string;
86
+ }
87
+ export declare function buildExecutorPhaseAOidcJwks(keys: readonly ExecutorPhaseAOidcKey[], now?: Date): {
88
+ keys: {
89
+ kty: string;
90
+ n: string | undefined;
91
+ e: string | undefined;
92
+ use: string;
93
+ alg: string;
94
+ kid: string;
95
+ }[];
96
+ };
97
+ export declare function buildExecutorPhaseAOidcDiscovery(issuer: string): {
98
+ issuer: string;
99
+ jwks_uri: string;
100
+ response_types_supported: string[];
101
+ subject_types_supported: string[];
102
+ id_token_signing_alg_values_supported: string[];
103
+ };
104
+ export declare function buildExecutorPhaseAWorkloadJwtClaims(bundle: VerifiedExecutorPhaseAWorkloadGrantBundle, issuer: string, audience: string, tokenId: string, now: Date): ExecutorPhaseAWorkloadJwtClaims;
105
+ export declare function signExecutorPhaseAWorkloadJwt(claims: ExecutorPhaseAWorkloadJwtClaims, signer: ExecutorPhaseARs256Signer): Promise<string>;
106
+ export declare class ExecutorPhaseAIssuerCore {
107
+ private readonly options;
108
+ constructor(options: {
109
+ stateStore: ExecutorPhaseAIssuerStateStore;
110
+ redeem: (request: ExecutorPhaseAIssuerRedemptionRequest) => Promise<ExecutorPhaseAIssuerRedemptionResponse>;
111
+ issuerProofSigner: ExecutorPhaseARs256Signer;
112
+ oidcSigner: ExecutorPhaseARs256Signer;
113
+ cloudArtifactPublicKey: KeyObject;
114
+ cloudResponseKeys: readonly {
115
+ keyId: string;
116
+ publicKey: KeyObject;
117
+ status: 'active' | 'retiring' | 'disabled';
118
+ }[];
119
+ issuer: string;
120
+ audience: string;
121
+ now?: () => Date;
122
+ randomId: (kind: 'request' | 'token') => string;
123
+ });
124
+ issue(input: ExecutorPhaseAIssuerCoreInput): Promise<string>;
125
+ }
126
+ export {};
@@ -0,0 +1,295 @@
1
+ import { createHash, createPublicKey, verify } from 'node:crypto';
2
+ import { canonicalizeExecutorPhaseAJson, } from '../shared/executorPhaseAApprovalReceipt.js';
3
+ import { executorPhaseAIssuerProofSignedBytes, executorPhaseAIssuerRedemptionAuditSha256, executorPhaseAIssuerRedemptionIntentSha256, EXECUTOR_PHASE_A_ISSUER_PROOF_PAYLOAD_SCHEMA, EXECUTOR_PHASE_A_ISSUER_PROOF_SCHEMA, EXECUTOR_PHASE_A_ISSUER_PROOF_TYPE, EXECUTOR_PHASE_A_ISSUER_REDEMPTION_PATH, EXECUTOR_PHASE_A_ISSUER_REDEMPTION_REQUEST_SCHEMA, } from '../shared/executorPhaseAIssuerContracts.js';
4
+ import { executorPhaseASourceIdentity, verifyExecutorPhaseARunCapabilityArtifact, verifyExecutorPhaseAWorkloadGrantBundle, } from '../shared/executorPhaseARunAuthorization.js';
5
+ import { assertExecutorPhaseASchema } from '../shared/executorPhaseASchemaValidation.js';
6
+ import { EXECUTOR_PHASE_A_CROSS_SERVICE_CLOCK_SKEW_MS } from '../shared/executorPhaseATiming.js';
7
+ const JWT_TTL_SECONDS = 120;
8
+ const RETIRING_KEY_OVERLAP_MS = 15 * 60 * 1000;
9
+ export const EXECUTOR_PHASE_A_OIDC_PUBLIC_CACHE_MAX_AGE_SECONDS = 300;
10
+ const TRANSITIVE_TAG_KEYS = [
11
+ 'TaskforceRun',
12
+ 'TaskforceReceipt',
13
+ 'TaskforcePhase',
14
+ 'TaskforceWorkspaceHash',
15
+ 'TaskforceSource',
16
+ ];
17
+ function timestamp(value, field) {
18
+ const parsed = Date.parse(value);
19
+ if (!Number.isFinite(parsed))
20
+ throw new TypeError(`${field} is invalid.`);
21
+ return parsed;
22
+ }
23
+ function sha256(value) {
24
+ return createHash('sha256').update(canonicalizeExecutorPhaseAJson(value)).digest('hex');
25
+ }
26
+ function assertRsa2048(publicKey) {
27
+ if (publicKey.asymmetricKeyType !== 'rsa')
28
+ throw new TypeError('The OIDC signing key must be RSA.');
29
+ const details = publicKey.asymmetricKeyDetails;
30
+ if (details?.modulusLength !== 2048)
31
+ throw new TypeError('The OIDC signing key must be RSA-2048.');
32
+ const jwk = publicKey.export({ format: 'jwk' });
33
+ if (jwk.kty !== 'RSA' || !jwk.n || !jwk.e || jwk.d)
34
+ throw new TypeError('The OIDC public key is not a public RSA JWK.');
35
+ return jwk;
36
+ }
37
+ export function buildExecutorPhaseAOidcJwks(keys, now = new Date()) {
38
+ const nowMs = now.getTime();
39
+ const active = keys.filter((key) => key.status === 'active');
40
+ const disabled = keys.filter((key) => key.status === 'disabled');
41
+ if (active.length !== 1
42
+ || disabled.length > 1
43
+ || timestamp(active[0].validFrom, 'key.validFrom') > nowMs
44
+ || nowMs >= timestamp(active[0].validUntil, 'key.validUntil')
45
+ || new Set(keys.map((key) => key.keyId)).size !== keys.length) {
46
+ throw new TypeError('The OIDC keyring must contain exactly one current active key, at most one disabled staging key, and no key-ID reuse.');
47
+ }
48
+ for (const key of keys) {
49
+ if (key.status === 'retiring') {
50
+ if (!key.lastIssuedAt || !key.publishUntil
51
+ || timestamp(key.validFrom, 'key.validFrom') > nowMs
52
+ || timestamp(key.publishUntil, 'key.publishUntil') < timestamp(key.lastIssuedAt, 'key.lastIssuedAt') + RETIRING_KEY_OVERLAP_MS) {
53
+ throw new TypeError('A retiring OIDC key must retain the required publication overlap.');
54
+ }
55
+ }
56
+ if (key.status === 'removed' && key.lastIssuedAt
57
+ && (!key.publishUntil || timestamp(key.publishUntil, 'key.publishUntil') < timestamp(key.lastIssuedAt, 'key.lastIssuedAt') + RETIRING_KEY_OVERLAP_MS)) {
58
+ throw new TypeError('A removed OIDC key did not retain the required publication overlap.');
59
+ }
60
+ }
61
+ const staging = keys.filter((key) => key.status === 'disabled'
62
+ && key.lastIssuedAt === null
63
+ && key.publishUntil !== null
64
+ && nowMs < timestamp(key.publishUntil, 'key.publishUntil')
65
+ && nowMs < timestamp(key.validUntil, 'key.validUntil'));
66
+ const retiring = keys.filter((key) => key.status === 'retiring'
67
+ && nowMs < timestamp(key.publishUntil, 'key.publishUntil'));
68
+ if (staging.length + retiring.length > 1) {
69
+ throw new TypeError('JWKS may publish only one disabled staging or retiring secondary key.');
70
+ }
71
+ const published = [active[0], ...staging, ...retiring];
72
+ if (published.length > 2)
73
+ throw new TypeError('JWKS must publish one active key and at most one secondary key.');
74
+ return {
75
+ keys: published.map((key) => {
76
+ const jwk = assertRsa2048(key.publicKey);
77
+ return { kty: 'RSA', n: jwk.n, e: jwk.e, use: 'sig', alg: 'RS256', kid: key.keyId };
78
+ }),
79
+ };
80
+ }
81
+ export function buildExecutorPhaseAOidcDiscovery(issuer) {
82
+ const origin = new URL(issuer);
83
+ if (origin.protocol !== 'https:' || origin.origin !== issuer)
84
+ throw new TypeError('The OIDC issuer must be an HTTPS origin.');
85
+ return {
86
+ issuer,
87
+ jwks_uri: `${issuer}/.well-known/jwks.json`,
88
+ response_types_supported: ['id_token'],
89
+ subject_types_supported: ['public'],
90
+ id_token_signing_alg_values_supported: ['RS256'],
91
+ };
92
+ }
93
+ export function buildExecutorPhaseAWorkloadJwtClaims(bundle, issuer, audience, tokenId, now) {
94
+ if (!/^token-[A-Za-z0-9][A-Za-z0-9_-]{7,127}$/.test(tokenId))
95
+ throw new TypeError('The workload token ID is invalid.');
96
+ const capability = bundle.capability.payload;
97
+ const grant = bundle.grant.payload;
98
+ if (issuer !== capability.oidcIssuer || audience !== capability.oidcAudience) {
99
+ throw new TypeError('The JWT authority differs from the verified capability.');
100
+ }
101
+ const issuedAt = Math.floor(now.getTime() / 1000);
102
+ const deadline = Math.floor(Math.min(timestamp(grant.expiresAt, 'grant.expiresAt'), timestamp(grant.phase === 'cleanup' ? capability.cleanupDeadline : capability.mutationDeadline, 'phaseDeadline')) / 1000);
103
+ const expiresAt = Math.min(issuedAt + JWT_TTL_SECONDS, deadline);
104
+ if (expiresAt <= issuedAt)
105
+ throw new TypeError('The workload JWT has no remaining authorized lifetime.');
106
+ const runDigest = createHash('sha256').update(capability.runId, 'utf8').digest('base64url');
107
+ const claims = {
108
+ iss: issuer,
109
+ aud: audience,
110
+ sub: `tfr:${runDigest}:${grant.phase}`,
111
+ iat: issuedAt,
112
+ nbf: issuedAt,
113
+ exp: expiresAt,
114
+ jti: tokenId,
115
+ 'https://aws.amazon.com/source_identity': executorPhaseASourceIdentity(capability.runId, grant.phase),
116
+ 'https://aws.amazon.com/tags': {
117
+ principal_tags: {
118
+ TaskforceRun: [grant.sessionTags.TaskforceRun],
119
+ TaskforceReceipt: [grant.sessionTags.TaskforceReceipt],
120
+ TaskforcePhase: [grant.sessionTags.TaskforcePhase],
121
+ TaskforceWorkspaceHash: [grant.sessionTags.TaskforceWorkspaceHash],
122
+ TaskforceSource: [grant.sessionTags.TaskforceSource],
123
+ },
124
+ transitive_tag_keys: TRANSITIVE_TAG_KEYS,
125
+ },
126
+ taskforce: {
127
+ schema: 'taskforce.executor-phase-a-workload-jwt-claims/v1',
128
+ receiptId: capability.receiptId,
129
+ receiptSha256: capability.receiptSha256,
130
+ workspaceId: capability.workspaceId,
131
+ taskId: capability.taskId,
132
+ runId: capability.runId,
133
+ sourceCommit: capability.sourceCommit,
134
+ accountId: capability.accountId,
135
+ region: capability.region,
136
+ availabilityZone: capability.availabilityZone,
137
+ logicalEnvelopeSha256: capability.logicalEnvelopeSha256,
138
+ budgetsSha256: capability.budgetsSha256,
139
+ roleArn: grant.roleArn,
140
+ brokerKeyFingerprint: capability.brokerKeyFingerprint,
141
+ grantId: grant.grantId,
142
+ grantSha256: bundle.grantSha256,
143
+ senderProofSha256: bundle.senderProofSha256,
144
+ },
145
+ };
146
+ assertExecutorPhaseASchema('workloadJwtClaims', claims);
147
+ return claims;
148
+ }
149
+ export async function signExecutorPhaseAWorkloadJwt(claims, signer) {
150
+ assertExecutorPhaseASchema('workloadJwtClaims', claims);
151
+ const header = { alg: 'RS256', kid: signer.keyId, typ: 'JWT' };
152
+ const signingInput = `${canonicalizeExecutorPhaseAJson(header).toString('base64url')}.${canonicalizeExecutorPhaseAJson(claims).toString('base64url')}`;
153
+ const signature = await signer.sign(Buffer.from(signingInput, 'ascii'));
154
+ if (signature.length !== 256)
155
+ throw new TypeError('The OIDC signer returned a non-RSA-2048 signature.');
156
+ return `${signingInput}.${signature.toString('base64url')}`;
157
+ }
158
+ function verifyRedemptionResponse(response, request, cloudKeys, now) {
159
+ assertExecutorPhaseASchema('issuerRedemptionResponse', response);
160
+ const trustedKey = cloudKeys.find((key) => key.keyId === response.envelope.keyId && key.status !== 'disabled');
161
+ if (!trustedKey || trustedKey.publicKey.asymmetricKeyType !== 'ed25519') {
162
+ throw new TypeError('Taskforce Cloud used an untrusted redemption-response key.');
163
+ }
164
+ const payloadBytes = canonicalizeExecutorPhaseAJson(response.payload);
165
+ const signature = Buffer.from(response.envelope.signature, 'base64url');
166
+ const redeemedAt = timestamp(response.payload.redeemedAt, 'response.redeemedAt');
167
+ const proofIssuedAt = timestamp(request.issuerProof.payload.issuedAt, 'issuerProof.issuedAt');
168
+ const proofExpiresAt = timestamp(request.issuerProof.payload.expiresAt, 'issuerProof.expiresAt');
169
+ if (response.payload.requestId !== request.requestId
170
+ || response.payload.grantId !== request.workloadGrant.payload.grantId
171
+ || response.payload.grantSha256 !== sha256(request.workloadGrant)
172
+ || response.payload.senderProofSha256 !== sha256(request.senderProof)
173
+ || response.payload.auditSha256 !== executorPhaseAIssuerRedemptionAuditSha256({
174
+ requestId: response.payload.requestId,
175
+ grantId: response.payload.grantId,
176
+ grantSha256: response.payload.grantSha256,
177
+ senderProofSha256: response.payload.senderProofSha256,
178
+ redeemedAt: response.payload.redeemedAt,
179
+ })
180
+ || redeemedAt < proofIssuedAt - EXECUTOR_PHASE_A_CROSS_SERVICE_CLOCK_SKEW_MS
181
+ || redeemedAt > now.getTime() + EXECUTOR_PHASE_A_CROSS_SERVICE_CLOCK_SKEW_MS
182
+ || redeemedAt >= proofExpiresAt + EXECUTOR_PHASE_A_CROSS_SERVICE_CLOCK_SKEW_MS
183
+ || response.envelope.payloadSha256 !== createHash('sha256').update(payloadBytes).digest('hex')
184
+ || signature.length !== 64 || !verify(null, payloadBytes, trustedKey.publicKey, signature)) {
185
+ throw new TypeError('Taskforce Cloud returned an invalid issuer redemption decision.');
186
+ }
187
+ }
188
+ export class ExecutorPhaseAIssuerCore {
189
+ options;
190
+ constructor(options) {
191
+ this.options = options;
192
+ }
193
+ async issue(input) {
194
+ const now = this.options.now?.() || new Date();
195
+ let grantId = input.workloadGrant.payload.grantId;
196
+ let acquired = false;
197
+ let redemptionConfirmed = false;
198
+ try {
199
+ const verifiedCapability = verifyExecutorPhaseARunCapabilityArtifact(input.runCapability, input.approvalReceipt, this.options.cloudArtifactPublicKey, now);
200
+ const brokerPublicKey = createPublicKey({
201
+ key: Buffer.from(verifiedCapability.payload.brokerPublicKeySpkiBase64, 'base64'),
202
+ format: 'der',
203
+ type: 'spki',
204
+ });
205
+ const intentShape = {
206
+ ...input,
207
+ issuerProof: {},
208
+ schema: EXECUTOR_PHASE_A_ISSUER_REDEMPTION_REQUEST_SCHEMA,
209
+ };
210
+ const requestSha256 = executorPhaseAIssuerRedemptionIntentSha256(intentShape);
211
+ const bundle = verifyExecutorPhaseAWorkloadGrantBundle(input.workloadGrant, verifiedCapability, input.senderProof, input.brokerRequestSha256, input.expectedPolicySha256, this.options.cloudArtifactPublicKey, brokerPublicKey, now);
212
+ const tokenId = this.options.randomId('token');
213
+ const claims = buildExecutorPhaseAWorkloadJwtClaims(bundle, this.options.issuer, this.options.audience, tokenId, now);
214
+ const acquireResult = await this.options.stateStore.acquire({
215
+ grantId,
216
+ grantSha256: bundle.grantSha256,
217
+ senderProofSha256: bundle.senderProofSha256,
218
+ requestId: input.requestId,
219
+ createdAt: now.toISOString(),
220
+ });
221
+ if (acquireResult !== 'acquired')
222
+ throw new TypeError('The workload grant already has terminal issuer state.');
223
+ acquired = true;
224
+ const proofPayload = {
225
+ schema: EXECUTOR_PHASE_A_ISSUER_PROOF_PAYLOAD_SCHEMA,
226
+ method: 'POST',
227
+ path: EXECUTOR_PHASE_A_ISSUER_REDEMPTION_PATH,
228
+ requestSha256,
229
+ grantId,
230
+ grantSha256: bundle.grantSha256,
231
+ senderProofSha256: bundle.senderProofSha256,
232
+ requestId: input.requestId,
233
+ issuedAt: now.toISOString(),
234
+ expiresAt: new Date(now.getTime() + 60_000).toISOString(),
235
+ };
236
+ const signedProofBytes = executorPhaseAIssuerProofSignedBytes(proofPayload);
237
+ const proofSignature = await this.options.issuerProofSigner.sign(signedProofBytes);
238
+ if (proofSignature.length !== 256)
239
+ throw new TypeError('The issuer proof signer returned a non-RSA-2048 signature.');
240
+ const request = {
241
+ schema: EXECUTOR_PHASE_A_ISSUER_REDEMPTION_REQUEST_SCHEMA,
242
+ requestId: input.requestId,
243
+ approvalReceipt: input.approvalReceipt,
244
+ runCapability: input.runCapability,
245
+ workloadGrant: input.workloadGrant,
246
+ senderProof: input.senderProof,
247
+ brokerRequestSha256: input.brokerRequestSha256,
248
+ expectedPolicySha256: input.expectedPolicySha256,
249
+ issuerProof: {
250
+ payload: proofPayload,
251
+ envelope: {
252
+ schema: EXECUTOR_PHASE_A_ISSUER_PROOF_SCHEMA,
253
+ typ: EXECUTOR_PHASE_A_ISSUER_PROOF_TYPE,
254
+ algorithm: 'RS256',
255
+ keyId: this.options.issuerProofSigner.keyId,
256
+ payloadSha256: createHash('sha256').update(signedProofBytes).digest('hex'),
257
+ signature: proofSignature.toString('base64url'),
258
+ },
259
+ },
260
+ };
261
+ assertExecutorPhaseASchema('issuerRedemptionRequest', request);
262
+ const response = await this.options.redeem(request);
263
+ verifyRedemptionResponse(response, request, this.options.cloudResponseKeys, this.options.now?.() || now);
264
+ redemptionConfirmed = true;
265
+ const jwt = await signExecutorPhaseAWorkloadJwt(claims, this.options.oidcSigner);
266
+ await this.options.stateStore.markSigned({
267
+ grantId,
268
+ tokenId,
269
+ kmsKeyId: this.options.oidcSigner.keyId,
270
+ updatedAt: (this.options.now?.() || now).toISOString(),
271
+ });
272
+ return jwt;
273
+ }
274
+ catch (error) {
275
+ if (acquired) {
276
+ const updatedAt = (this.options.now?.() || now).toISOString();
277
+ if (redemptionConfirmed) {
278
+ await this.options.stateStore.markFailed({
279
+ grantId,
280
+ errorCategory: error instanceof TypeError ? 'invalid_artifact' : 'issuer_failure',
281
+ updatedAt,
282
+ }).catch(() => undefined);
283
+ }
284
+ else {
285
+ await this.options.stateStore.releasePending({
286
+ grantId,
287
+ requestId: input.requestId,
288
+ updatedAt,
289
+ }).catch(() => undefined);
290
+ }
291
+ }
292
+ throw error;
293
+ }
294
+ }
295
+ }
@@ -0,0 +1,34 @@
1
+ import { type KeyObject } from 'node:crypto';
2
+ import { type ExecutorPhaseAApprovalTrustPolicy } from '../shared/executorPhaseAApprovalReceipt.js';
3
+ import { type ExecutorPhaseAIssuerProofTrustKey, type ExecutorPhaseAIssuerRedemptionRequest } from '../shared/executorPhaseAIssuerContracts.js';
4
+ import { type ExecutorPhaseARunAuthorizationStore } from '../storage/executorPhaseARunAuthorizationStore.js';
5
+ export declare class ExecutorPhaseAIssuerRedemptionError extends Error {
6
+ readonly statusCode: number;
7
+ readonly code: string;
8
+ constructor(message: string, statusCode?: number, code?: string);
9
+ }
10
+ export interface ExecutorPhaseAIssuerRedemptionCloudKey {
11
+ keyId: string;
12
+ publicKey: KeyObject;
13
+ status: 'active' | 'retiring' | 'disabled';
14
+ }
15
+ export interface ExecutorPhaseAIssuerRedemptionSigningConfig {
16
+ keyId: string;
17
+ privateKey: KeyObject;
18
+ }
19
+ export declare class ExecutorPhaseAIssuerRedemptionService {
20
+ private readonly options;
21
+ constructor(options: {
22
+ store: ExecutorPhaseARunAuthorizationStore;
23
+ responseKeys: readonly ExecutorPhaseAIssuerRedemptionCloudKey[];
24
+ issuerProofKeys: readonly ExecutorPhaseAIssuerProofTrustKey[];
25
+ responseSigning: ExecutorPhaseAIssuerRedemptionSigningConfig;
26
+ approvalPolicy: ExecutorPhaseAApprovalTrustPolicy;
27
+ now?: () => Date;
28
+ });
29
+ redeem(request: ExecutorPhaseAIssuerRedemptionRequest): {
30
+ bytes: Buffer;
31
+ digest: string;
32
+ created: boolean;
33
+ };
34
+ }