@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,9 +1,85 @@
1
1
  import { spawn } from 'child_process';
2
+ import { existsSync, realpathSync } from 'fs';
2
3
  import { tmpdir } from 'os';
4
+ import { dirname, isAbsolute, join, resolve } from 'path';
5
+ import { createRequire } from 'module';
3
6
  import readline from 'readline';
4
7
  import { ModelGatewayConfigurationError } from './modelGateway.js';
5
8
  import { TASKFORCE_AGENT_MODEL_OPTIONS, isTaskforceAgentSubscriptionDevModelsEnabled } from '../shared/taskforceAgentModels.js';
6
9
  const CODEX_APP_SERVER_STDERR_LIMIT = 4_096;
10
+ export const PINNED_CODEX_APP_SERVER_VERSION = '0.148.0-alpha.9';
11
+ const require = createRequire(import.meta.url);
12
+ export class CodexAppServerCompatibilityError extends Error {
13
+ reason;
14
+ constructor(reason, message) {
15
+ super(message);
16
+ this.reason = reason;
17
+ this.name = 'CodexAppServerCompatibilityError';
18
+ }
19
+ }
20
+ export function resolveBundledCodexCommand() {
21
+ try {
22
+ const packageVersion = String(require('@openai/codex/package.json')?.version || '');
23
+ if (packageVersion !== PINNED_CODEX_APP_SERVER_VERSION)
24
+ throw new Error('version mismatch');
25
+ const target = (() => {
26
+ if (process.platform === 'linux' && process.arch === 'x64') {
27
+ return ['@openai/codex-linux-x64', 'x86_64-unknown-linux-musl'];
28
+ }
29
+ if (process.platform === 'linux' && process.arch === 'arm64') {
30
+ return ['@openai/codex-linux-arm64', 'aarch64-unknown-linux-musl'];
31
+ }
32
+ if (process.platform === 'darwin' && process.arch === 'x64') {
33
+ return ['@openai/codex-darwin-x64', 'x86_64-apple-darwin'];
34
+ }
35
+ if (process.platform === 'darwin' && process.arch === 'arm64') {
36
+ return ['@openai/codex-darwin-arm64', 'aarch64-apple-darwin'];
37
+ }
38
+ if (process.platform === 'win32' && process.arch === 'x64') {
39
+ return ['@openai/codex-win32-x64', 'x86_64-pc-windows-msvc'];
40
+ }
41
+ if (process.platform === 'win32' && process.arch === 'arm64') {
42
+ return ['@openai/codex-win32-arm64', 'aarch64-pc-windows-msvc'];
43
+ }
44
+ throw new Error('unsupported platform');
45
+ })();
46
+ const platformPackageJson = require.resolve(`${target[0]}/package.json`);
47
+ const platformVersion = String(require(platformPackageJson)?.version || '');
48
+ const expectedPlatformVersion = `${PINNED_CODEX_APP_SERVER_VERSION}-${target[0].slice('@openai/codex-'.length)}`;
49
+ if (platformVersion !== expectedPlatformVersion)
50
+ throw new Error('platform version mismatch');
51
+ const executable = join(dirname(platformPackageJson), 'vendor', target[1], 'bin', process.platform === 'win32' ? 'codex.exe' : 'codex');
52
+ if (!existsSync(executable))
53
+ throw new Error('binary missing');
54
+ return executable;
55
+ }
56
+ catch {
57
+ throw new CodexAppServerCompatibilityError('version', `Unsupported Codex app-server version; Taskforce requires ${PINNED_CODEX_APP_SERVER_VERSION}.`);
58
+ }
59
+ }
60
+ function normalizedPath(value) {
61
+ try {
62
+ return realpathSync(value);
63
+ }
64
+ catch {
65
+ return resolve(value);
66
+ }
67
+ }
68
+ export function assertCodexAppServerCompatibility(result, expectedCodexHome) {
69
+ const userAgent = readStringPath(result, ['userAgent']);
70
+ const codexHome = readStringPath(result, ['codexHome']);
71
+ const version = userAgent.match(/\/([0-9]+\.[0-9]+\.[0-9]+(?:-[A-Za-z0-9.-]+)?)(?:\s|\()/)?.[1];
72
+ if (version !== PINNED_CODEX_APP_SERVER_VERSION) {
73
+ throw new CodexAppServerCompatibilityError('version', `Unsupported Codex app-server version; Taskforce requires ${PINNED_CODEX_APP_SERVER_VERSION}.`);
74
+ }
75
+ if (!codexHome || !isAbsolute(codexHome)) {
76
+ throw new CodexAppServerCompatibilityError('credential_home', 'Unsupported Codex app-server credential home response.');
77
+ }
78
+ const expected = String(expectedCodexHome || '').trim();
79
+ if (expected && normalizedPath(codexHome) !== normalizedPath(expected)) {
80
+ throw new CodexAppServerCompatibilityError('credential_home', 'Unsupported Codex app-server credential home response.');
81
+ }
82
+ }
7
83
  export const DEFAULT_CODEX_APP_SERVER_MODEL_KEY_IDS = {
8
84
  ...Object.fromEntries(TASKFORCE_AGENT_MODEL_OPTIONS
9
85
  .filter((model) => model.runtime === 'subscription-dev' && model.providerKey === 'openai')
@@ -38,12 +114,21 @@ export function buildCodexAppServerEnv(source = process.env) {
38
114
  }
39
115
  return env;
40
116
  }
41
- export function sanitizeCodexAppServerStderr(value) {
42
- return String(value || '')
43
- .replace(/((?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret)\s*[:=]\s*)[^\s]+/gi, '$1[redacted]')
117
+ export function sanitizeCodexAppServerStderr(value, credentialPaths = []) {
118
+ let sanitized = String(value || '')
119
+ .replace(/\\+(?=["'])/g, '')
120
+ .replace(/(["']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|id[_-]?token|client[_-]?secret)["']?\s*[:=]\s*)(["'])[^"'\r\n]*\2/gi, '$1$2[redacted]$2')
121
+ .replace(/((?:api[_-]?key|access[_-]?token|refresh[_-]?token|id[_-]?token|client[_-]?secret)\s*[:=]\s*)[^\s,}\]]+/gi, '$1[redacted]')
44
122
  .replace(/sk-[A-Za-z0-9_-]{8,}/g, '[redacted OpenAI credential]')
45
123
  .replace(/(Bearer\s+)[^\s]+/gi, '$1[redacted]')
124
+ .replace(/\beyJ[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\b/g, '[redacted JWT]')
46
125
  .replace(/[^\x09\x0A\x0D\x20-\x7E]/g, '?');
126
+ for (const credentialPath of credentialPaths) {
127
+ const normalized = String(credentialPath || '').trim();
128
+ if (normalized)
129
+ sanitized = sanitized.split(normalized).join('[redacted credential path]');
130
+ }
131
+ return sanitized.slice(0, CODEX_APP_SERVER_STDERR_LIMIT);
47
132
  }
48
133
  export function collectCodexAppServerStderr(current, chunk) {
49
134
  return (current + String(chunk || '')).slice(-CODEX_APP_SERVER_STDERR_LIMIT);
@@ -54,6 +139,24 @@ export function assertCodexChatGptSubscriptionAccount(result) {
54
139
  throw new ModelGatewayConfigurationError('Codex is not signed in with a ChatGPT subscription. Run codex login on this machine and choose Sign in with ChatGPT.', 'MODEL_SOURCE_UNAVAILABLE');
55
140
  }
56
141
  }
142
+ export function extractCodexAccountLoginCompletion(messages, loginId, credentialPaths = []) {
143
+ for (const message of messages) {
144
+ if (message.method !== 'account/login/completed')
145
+ continue;
146
+ const completedLoginId = readStringPath(message.params, ['loginId']);
147
+ if (completedLoginId !== loginId)
148
+ continue;
149
+ const params = message.params;
150
+ const success = params?.success === true;
151
+ const error = sanitizeCodexAppServerStderr(params?.error, credentialPaths).trim();
152
+ return {
153
+ loginId,
154
+ success,
155
+ ...(error ? { error } : {}),
156
+ };
157
+ }
158
+ return null;
159
+ }
57
160
  export function isCodexSubscriptionDevRuntimeAllowed(source = process.env) {
58
161
  const runtimeMode = String(source.TASKFORCE_RUNTIME_MODE || '').trim().toLowerCase();
59
162
  return runtimeMode === 'local';
@@ -72,7 +175,7 @@ function buildCodexAppServerRuntimePolicy(cwd) {
72
175
  },
73
176
  };
74
177
  }
75
- export function extractCodexTurnCompletion(messages) {
178
+ export function extractCodexTurnCompletion(messages, credentialPaths = []) {
76
179
  const jsonMessages = messages;
77
180
  const completed = jsonMessages.find((message) => message.method === 'turn/completed');
78
181
  if (!completed)
@@ -84,7 +187,7 @@ export function extractCodexTurnCompletion(messages) {
84
187
  const errorMessage = readStringPath(completed.params, ['turn', 'error', 'message'])
85
188
  || readStringPath(completed.params, ['error', 'message'])
86
189
  || `Codex app-server turn ended with status ${stopReason}.`;
87
- throw new Error(errorMessage);
190
+ throw new Error(sanitizeCodexAppServerStderr(errorMessage, credentialPaths));
88
191
  }
89
192
  return {
90
193
  text: extractAgentText(jsonMessages),
@@ -99,19 +202,40 @@ export class CodexAppServerJsonRpcClient {
99
202
  initialized = false;
100
203
  lineReader;
101
204
  requestTimeoutMs;
102
- turnRejectors = new Set();
205
+ terminalRejectors = new Set();
206
+ loginNotificationStart = new Map();
103
207
  terminalError = null;
104
208
  stderrTail = '';
209
+ credentialPaths;
210
+ expectedCodexHome;
211
+ processExited;
212
+ closePromise = null;
105
213
  constructor(options = {}) {
106
- const command = options.command || process.env.TASKFORCE_CODEX_APP_SERVER_COMMAND || 'codex';
214
+ const command = options.command
215
+ || process.env.TASKFORCE_CODEX_APP_SERVER_COMMAND
216
+ || resolveBundledCodexCommand();
107
217
  const args = options.args || ['app-server', '--listen', 'stdio://'];
108
218
  const cwd = resolveCodexAppServerCwd(options.cwd);
109
219
  this.requestTimeoutMs = options.requestTimeoutMs ?? 30_000;
220
+ this.credentialPaths = options.credentialPaths || [];
221
+ const childEnvironment = options.env || buildCodexAppServerEnv();
222
+ this.expectedCodexHome = String(childEnvironment.CODEX_HOME || '').trim();
110
223
  this.process = spawn(command, args, {
111
224
  stdio: ['pipe', 'pipe', 'pipe'],
112
- env: options.env || buildCodexAppServerEnv(),
225
+ env: childEnvironment,
113
226
  cwd,
114
227
  });
228
+ this.processExited = new Promise((resolveExit) => {
229
+ let settled = false;
230
+ const finish = () => {
231
+ if (settled)
232
+ return;
233
+ settled = true;
234
+ resolveExit();
235
+ };
236
+ this.process.once('exit', finish);
237
+ this.process.once('error', finish);
238
+ });
115
239
  this.lineReader = readline.createInterface({ input: this.process.stdout });
116
240
  this.lineReader.on('line', (line) => this.handleLine(line));
117
241
  this.process.on('error', (error) => {
@@ -119,7 +243,7 @@ export class CodexAppServerJsonRpcClient {
119
243
  });
120
244
  this.process.on('exit', (code, signal) => {
121
245
  const reason = signal ? `signal ${signal}` : `exit code ${code ?? 'unknown'}`;
122
- const details = sanitizeCodexAppServerStderr(this.stderrTail).trim();
246
+ const details = sanitizeCodexAppServerStderr(this.stderrTail, this.credentialPaths).trim();
123
247
  this.fail(new Error(`Codex app-server stopped before completing the request (${reason}).${details ? ` ${details}` : ''}`));
124
248
  });
125
249
  this.process.stderr.on('data', (chunk) => {
@@ -129,13 +253,18 @@ export class CodexAppServerJsonRpcClient {
129
253
  async initialize() {
130
254
  if (this.initialized)
131
255
  return;
132
- await this.request('initialize', {
256
+ const result = await this.request('initialize', {
133
257
  clientInfo: {
134
258
  name: 'taskforce_dev',
135
259
  title: 'Taskforce Dev',
136
260
  version: '0.1.0',
137
261
  },
262
+ capabilities: {
263
+ experimentalApi: true,
264
+ requestAttestation: false,
265
+ },
138
266
  });
267
+ assertCodexAppServerCompatibility(result, this.expectedCodexHome);
139
268
  this.sendNotification('initialized', {});
140
269
  this.initialized = true;
141
270
  }
@@ -143,6 +272,45 @@ export class CodexAppServerJsonRpcClient {
143
272
  const result = await this.request('account/read', { refreshToken: false });
144
273
  assertCodexChatGptSubscriptionAccount(result);
145
274
  }
275
+ async startChatGptDeviceCodeLogin() {
276
+ const notificationStart = this.notifications.length;
277
+ const result = await this.request('account/login/start', { type: 'chatgptDeviceCode' });
278
+ const type = readStringPath(result, ['type']);
279
+ const loginId = readStringPath(result, ['loginId']);
280
+ const userCode = readStringPath(result, ['userCode']);
281
+ const verificationUrl = readStringPath(result, ['verificationUrl']);
282
+ if (type !== 'chatgptDeviceCode' || !loginId || !userCode || !verificationUrl) {
283
+ throw new Error('Codex app-server returned an invalid device-code login response.');
284
+ }
285
+ this.loginNotificationStart.set(loginId, notificationStart);
286
+ return { loginId, userCode, verificationUrl };
287
+ }
288
+ async waitForAccountLoginCompleted(input) {
289
+ const startIndex = this.loginNotificationStart.get(input.loginId) ?? 0;
290
+ try {
291
+ return await this.waitForNotification(() => extractCodexAccountLoginCompletion(this.notifications.slice(startIndex), input.loginId, this.credentialPaths), input.timeoutMs, 'Timed out waiting for Codex device-code authorization.', input.signal);
292
+ }
293
+ finally {
294
+ this.loginNotificationStart.delete(input.loginId);
295
+ }
296
+ }
297
+ async cancelAccountLogin(loginId) {
298
+ const result = await this.request('account/login/cancel', { loginId });
299
+ const status = readStringPath(result, ['status']);
300
+ return status === 'canceled' ? 'canceled' : 'notFound';
301
+ }
302
+ async readAccount(refreshToken = false) {
303
+ const result = await this.request('account/read', { refreshToken });
304
+ const type = readStringPath(result, ['account', 'type']);
305
+ if (!type)
306
+ return null;
307
+ const email = readStringPath(result, ['account', 'email']);
308
+ const planType = readStringPath(result, ['account', 'planType']);
309
+ return { type, ...(email ? { email } : {}), ...(planType ? { planType } : {}) };
310
+ }
311
+ async logoutAccount() {
312
+ await this.request('account/logout', {});
313
+ }
146
314
  async startThread(input) {
147
315
  const result = await this.request('thread/start', {
148
316
  model: input.model,
@@ -171,9 +339,32 @@ export class CodexAppServerJsonRpcClient {
171
339
  });
172
340
  return this.waitForTurnCompletion(startedAt, input.timeoutMs);
173
341
  }
174
- close() {
175
- this.lineReader.close();
176
- this.process.kill();
342
+ async close() {
343
+ if (this.closePromise)
344
+ return this.closePromise;
345
+ this.closePromise = (async () => {
346
+ this.lineReader.close();
347
+ if (this.process.exitCode !== null || this.process.signalCode !== null) {
348
+ await this.processExited;
349
+ return;
350
+ }
351
+ this.process.kill('SIGTERM');
352
+ let timeout;
353
+ const exitedGracefully = await Promise.race([
354
+ this.processExited.then(() => true),
355
+ new Promise((resolveTimeout) => {
356
+ timeout = setTimeout(() => resolveTimeout(false), 2_000);
357
+ timeout.unref?.();
358
+ }),
359
+ ]);
360
+ if (timeout)
361
+ clearTimeout(timeout);
362
+ if (!exitedGracefully && this.process.exitCode === null && this.process.signalCode === null) {
363
+ this.process.kill('SIGKILL');
364
+ await this.processExited;
365
+ }
366
+ })();
367
+ return this.closePromise;
177
368
  }
178
369
  request(method, params) {
179
370
  const id = this.nextId++;
@@ -228,7 +419,7 @@ export class CodexAppServerJsonRpcClient {
228
419
  }
229
420
  this.pending.delete(message.id);
230
421
  if (message.error) {
231
- pending.reject(new Error(message.error.message || 'Codex app-server request failed.'));
422
+ pending.reject(new Error(sanitizeCodexAppServerStderr(message.error.message || 'Codex app-server request failed.', this.credentialPaths)));
232
423
  }
233
424
  else {
234
425
  pending.resolve(message.result);
@@ -253,17 +444,17 @@ export class CodexAppServerJsonRpcClient {
253
444
  if (settled)
254
445
  return;
255
446
  settled = true;
256
- this.turnRejectors.delete(rejectTurn);
447
+ this.terminalRejectors.delete(rejectTurn);
257
448
  reject(error);
258
449
  };
259
450
  const resolveTurn = (value) => {
260
451
  if (settled)
261
452
  return;
262
453
  settled = true;
263
- this.turnRejectors.delete(rejectTurn);
454
+ this.terminalRejectors.delete(rejectTurn);
264
455
  resolve(value);
265
456
  };
266
- this.turnRejectors.add(rejectTurn);
457
+ this.terminalRejectors.add(rejectTurn);
267
458
  if (this.terminalError) {
268
459
  rejectTurn(this.terminalError);
269
460
  return;
@@ -273,7 +464,7 @@ export class CodexAppServerJsonRpcClient {
273
464
  return;
274
465
  const messages = this.notifications.slice(startIndex);
275
466
  try {
276
- const completion = extractCodexTurnCompletion(messages);
467
+ const completion = extractCodexTurnCompletion(messages, this.credentialPaths);
277
468
  if (completion) {
278
469
  resolveTurn(completion);
279
470
  return;
@@ -292,6 +483,39 @@ export class CodexAppServerJsonRpcClient {
292
483
  poll();
293
484
  });
294
485
  }
486
+ waitForNotification(readValue, timeoutMs, timeoutMessage, signal) {
487
+ const startedAt = Date.now();
488
+ return new Promise((resolve, reject) => {
489
+ let settled = false;
490
+ const finish = (callback) => {
491
+ if (settled)
492
+ return;
493
+ settled = true;
494
+ this.terminalRejectors.delete(rejectWaiter);
495
+ signal?.removeEventListener('abort', abortWaiter);
496
+ callback();
497
+ };
498
+ const rejectWaiter = (error) => finish(() => reject(error));
499
+ const abortWaiter = () => rejectWaiter(new Error('Codex device-code authorization was cancelled.'));
500
+ this.terminalRejectors.add(rejectWaiter);
501
+ signal?.addEventListener('abort', abortWaiter, { once: true });
502
+ if (signal?.aborted)
503
+ return abortWaiter();
504
+ if (this.terminalError)
505
+ return rejectWaiter(this.terminalError);
506
+ const poll = () => {
507
+ if (settled)
508
+ return;
509
+ const value = readValue();
510
+ if (value !== null)
511
+ return finish(() => resolve(value));
512
+ if (Date.now() - startedAt > timeoutMs)
513
+ return rejectWaiter(new Error(timeoutMessage));
514
+ setTimeout(poll, 50);
515
+ };
516
+ poll();
517
+ });
518
+ }
295
519
  rejectAll(error) {
296
520
  for (const pending of this.pending.values())
297
521
  pending.reject(error);
@@ -301,8 +525,8 @@ export class CodexAppServerJsonRpcClient {
301
525
  if (!this.terminalError)
302
526
  this.terminalError = error;
303
527
  this.rejectAll(this.terminalError);
304
- for (const rejectTurn of [...this.turnRejectors])
305
- rejectTurn(this.terminalError);
528
+ for (const rejectWaiter of [...this.terminalRejectors])
529
+ rejectWaiter(this.terminalError);
306
530
  }
307
531
  }
308
532
  export class CodexAppServerModelGateway {
@@ -320,6 +544,7 @@ export class CodexAppServerModelGateway {
320
544
  cwd: this.cwd,
321
545
  env: options.env,
322
546
  requestTimeoutMs: options.requestTimeoutMs,
547
+ credentialPaths: options.credentialPaths,
323
548
  }));
324
549
  this.modelKeyIds = {
325
550
  ...DEFAULT_CODEX_APP_SERVER_MODEL_KEY_IDS,
@@ -364,7 +589,7 @@ export class CodexAppServerModelGateway {
364
589
  }
365
590
  finally {
366
591
  if (shouldClose)
367
- client.close();
592
+ await client.close();
368
593
  }
369
594
  }
370
595
  resolveModelId(input) {
@@ -0,0 +1,39 @@
1
+ import { type CodexAppServerClient } from './codexAppServerModelGateway.js';
2
+ import { ModelProviderConnectionService } from './modelProviderConnectionService.js';
3
+ import { ModelProviderConnectionStore } from '../storage/modelProviderConnectionStore.js';
4
+ export type CodexDeviceCodeLoginStatus = 'pending' | 'active' | 'failed' | 'cancelled' | 'expired';
5
+ export interface PublicCodexDeviceCodeLoginSession {
6
+ id: string;
7
+ connectionId: string;
8
+ status: CodexDeviceCodeLoginStatus;
9
+ userCode: string;
10
+ verificationUrl: string;
11
+ expiresAt: string;
12
+ failureCode?: string;
13
+ }
14
+ export interface CodexDeviceCodeLoginManagerOptions {
15
+ clientFactory?: (environment: NodeJS.ProcessEnv) => CodexAppServerClient;
16
+ ttlMs?: number;
17
+ now?: () => Date;
18
+ maxPendingPerOwner?: number;
19
+ maxPendingTotal?: number;
20
+ }
21
+ export declare class CodexDeviceCodeLoginManager {
22
+ private readonly connections;
23
+ private readonly store;
24
+ private readonly sessions;
25
+ private readonly sessionByConnection;
26
+ private readonly startingConnections;
27
+ private readonly clientFactory;
28
+ private readonly ttlMs;
29
+ private readonly now;
30
+ private readonly maxPendingPerOwner;
31
+ private readonly maxPendingTotal;
32
+ constructor(connections: ModelProviderConnectionService, store: ModelProviderConnectionStore, options?: CodexDeviceCodeLoginManagerOptions);
33
+ start(ownerUserId: string, connectionId: string): Promise<PublicCodexDeviceCodeLoginSession>;
34
+ get(ownerUserId: string, connectionId: string, sessionId: string): PublicCodexDeviceCodeLoginSession;
35
+ cancel(ownerUserId: string, connectionId: string, sessionId: string): Promise<PublicCodexDeviceCodeLoginSession>;
36
+ private requireOwned;
37
+ private pendingCount;
38
+ private scheduleRemoval;
39
+ }