@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
@@ -78,11 +78,11 @@ export function registerAdminWorkspaceTools(registerTool, executeTool) {
78
78
  description: { type: 'string' },
79
79
  category: { type: 'string' },
80
80
  type: { type: 'string' },
81
- priority: { type: 'number', description: context.priorityDesc },
81
+ priority: { type: 'integer', description: context.priorityDesc, enum: context.priorityEnum },
82
82
  assignee: { type: 'string', description: `${context.assigneeHint} Call list_assignees to inspect the current eligible IDs.` },
83
83
  owner: { type: 'string', description: `${context.assigneeHint} Alias for assignee.` },
84
84
  status: { type: 'string', enum: ['task', 'on-hold', 'in-progress', 'review', 'done', 'cancelled'] },
85
- complexity: { type: 'number', description: context.complexityDesc },
85
+ complexity: { type: 'integer', minimum: 1, maximum: 5, description: context.complexityDesc },
86
86
  },
87
87
  required: ['id'],
88
88
  }),
@@ -101,7 +101,7 @@ export function registerAdminWorkspaceTools(registerTool, executeTool) {
101
101
  priorities: arrayProperty('Ordered priority definitions to save.', {
102
102
  type: 'object',
103
103
  properties: {
104
- value: { type: 'number' },
104
+ value: { type: 'integer', minimum: 1 },
105
105
  label: { type: 'string' },
106
106
  },
107
107
  }),
@@ -1,11 +1,11 @@
1
1
  import type { AiProfileSurfaceType } from '../shared/aiProfileSurfaceType.js';
2
+ import type { ProductLogoKey } from '../shared/productLogoKeys.js';
2
3
  export declare const MCP_CLIENT_IDS: readonly ["general", "cursor", "cline", "vscode", "kiro", "windsurf", "antigravity", "openclaw", "codex", "grok", "claude-code", "gemini-cli", "grok-chat", "gemini-chat", "mistral-chat", "perplexity-chat", "claude-chat", "chatgpt-desktop"];
3
4
  export type McpClientId = typeof MCP_CLIENT_IDS[number];
4
- export type McpClientLogoKey = Exclude<McpClientId, 'general' | 'openclaw'>;
5
5
  export interface McpClientRegistryEntry {
6
6
  id: McpClientId;
7
7
  label: string;
8
- logoKey?: McpClientLogoKey;
8
+ logoKey?: ProductLogoKey;
9
9
  surfaceHint?: AiProfileSurfaceType;
10
10
  generatedOption?: boolean;
11
11
  signatureColor?: string;
@@ -36,7 +36,7 @@ export const MCP_CLIENT_REGISTRY = {
36
36
  openclaw: { id: 'openclaw', label: 'OpenClaw', surfaceHint: 'agent', generatedOption: true },
37
37
  vscode: { id: 'vscode', label: 'VS Code / Copilot', logoKey: 'vscode', surfaceHint: 'ide', generatedOption: true, signatureColor: '#256ee4' },
38
38
  windsurf: { id: 'windsurf', label: 'Windsurf', logoKey: 'windsurf', surfaceHint: 'ide', generatedOption: true, signatureColor: '#189587' },
39
- 'chatgpt-desktop': { id: 'chatgpt-desktop', label: 'ChatGPT Desktop', logoKey: 'chatgpt-desktop', surfaceHint: 'chat_app', signatureColor: '#10a37f' },
39
+ 'chatgpt-desktop': { id: 'chatgpt-desktop', label: 'ChatGPT Desktop', logoKey: 'chatgpt', surfaceHint: 'chat_app', signatureColor: '#10a37f' },
40
40
  };
41
41
  export function parseMcpClientId(value) {
42
42
  const normalized = String(value || '').trim().toLowerCase();
@@ -2,8 +2,16 @@ import { bindDomainTool } from './toolCatalog.js';
2
2
  function stringProperty(description, enumValues) {
3
3
  return enumValues ? { type: 'string', description, enum: enumValues } : { type: 'string', description };
4
4
  }
5
- function numberProperty(description) {
6
- return { type: 'number', description };
5
+ function boundedNumberProperty(description, minimum, maximum) {
6
+ return { type: 'number', description, minimum, maximum };
7
+ }
8
+ function integerProperty(description, minimum, maximum) {
9
+ return {
10
+ type: 'integer',
11
+ description,
12
+ ...(minimum === undefined ? {} : { minimum }),
13
+ ...(maximum === undefined ? {} : { maximum }),
14
+ };
7
15
  }
8
16
  function booleanProperty(description) {
9
17
  return { type: 'boolean', description };
@@ -17,12 +25,12 @@ function annotatedAttachmentMarkerProperty() {
17
25
  properties: {
18
26
  type: { type: 'string' },
19
27
  kind: { type: 'string' },
20
- x: { type: 'number' },
21
- y: { type: 'number' },
22
- width: { type: 'number' },
23
- height: { type: 'number' },
24
- x2: { type: 'number' },
25
- y2: { type: 'number' },
28
+ x: { type: 'number', minimum: 0, maximum: 1 },
29
+ y: { type: 'number', minimum: 0, maximum: 1 },
30
+ width: { type: 'number', minimum: 0, maximum: 1 },
31
+ height: { type: 'number', minimum: 0, maximum: 1 },
32
+ x2: { type: 'number', minimum: 0, maximum: 1 },
33
+ y2: { type: 'number', minimum: 0, maximum: 1 },
26
34
  text: { type: 'string' },
27
35
  instruction: { type: 'string' },
28
36
  instructionType: { type: 'string' },
@@ -96,11 +104,11 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
96
104
  inputSchema: {
97
105
  properties: {
98
106
  taskId: stringProperty('Task ID or task reference such as T-123.'),
99
- id: stringProperty('Alias for taskId. Task ID or task reference such as T-123.'),
100
107
  attachmentId: stringProperty('Optional attachment descriptor id to include content for one attachment.'),
101
108
  format: stringProperty('Optional read format when attachmentId is provided. Use metadata for descriptors or download for a download URL.', ['text', 'metadata', 'download']),
102
- maxChars: numberProperty('Optional max inline character count for readable text attachments. Longer content is truncated with size metadata and a download hint.'),
109
+ maxChars: integerProperty('Optional max inline character count for readable text attachments. Longer content is truncated with size metadata and a download hint.', 1),
103
110
  },
111
+ required: ['taskId'],
104
112
  },
105
113
  }));
106
114
  register('get_workstream_attachments', (context) => ({
@@ -110,7 +118,7 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
110
118
  id: stringProperty('Workstream ID or workstream reference such as WS-123.'),
111
119
  attachmentId: stringProperty('Optional attachment descriptor id to include content for one attachment.'),
112
120
  format: stringProperty('Optional read format when attachmentId is provided. Use metadata for descriptors or download for a download URL.', ['text', 'metadata', 'download']),
113
- maxChars: numberProperty('Optional max inline character count for readable text attachments. Longer content is truncated with size metadata and a download hint.'),
121
+ maxChars: integerProperty('Optional max inline character count for readable text attachments. Longer content is truncated with size metadata and a download hint.', 1),
114
122
  },
115
123
  required: ['id'],
116
124
  },
@@ -195,7 +203,7 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
195
203
  id: stringProperty('Initiative ID or initiative reference such as IN-123.'),
196
204
  attachmentId: stringProperty('Optional attachment descriptor id to include content for one attachment.'),
197
205
  format: stringProperty('Optional read format when attachmentId is provided. Use metadata for descriptors or download for a download URL.', ['text', 'metadata', 'download']),
198
- maxChars: numberProperty('Optional max inline character count for readable text attachments. Longer content is truncated with size metadata and a download hint.'),
206
+ maxChars: integerProperty('Optional max inline character count for readable text attachments. Longer content is truncated with size metadata and a download hint.', 1),
199
207
  },
200
208
  required: ['id'],
201
209
  },
@@ -229,11 +237,12 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
229
237
  },
230
238
  }));
231
239
  register('search_images', (context) => ({
232
- description: context.describeTool('Search image assets by keyword, title, filename, caption, or I-123 reference. Use this before get_image when you only know a rough identifier.'),
240
+ description: context.describeTool('Search image assets by keyword, title, filename, caption, or I-123 reference. Use offset/limit to continue broad searches, then call get_image for the selected result.'),
233
241
  inputSchema: {
234
242
  properties: {
235
243
  query: stringProperty('Search term for image lookup, including I-123 references.'),
236
- limit: numberProperty('Max images to return.'),
244
+ limit: integerProperty('Page size (default 10; max 50).', 1, 50),
245
+ offset: integerProperty('Non-negative result offset (default 0).', 0),
237
246
  },
238
247
  required: ['query'],
239
248
  },
@@ -242,17 +251,18 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
242
251
  description: context.describeTool('Get a single image by asset id or image reference such as I-123. Use this first when the user references an image, then use get_image_annotations for saved annotation sessions and payloads. When the image is being used for UI, placement, or visual correction feedback, read the saved annotation payload before making changes.'),
243
252
  inputSchema: {
244
253
  properties: {
245
- id: stringProperty('Image asset id or image reference such as I-123.'),
246
- imageId: stringProperty('Alias for id. Image asset id or image reference such as I-123.'),
254
+ imageId: stringProperty('Image asset id or image reference such as I-123.'),
247
255
  },
256
+ required: ['imageId'],
248
257
  },
249
258
  }));
250
259
  register('search_documents', (context) => ({
251
- description: context.describeTool('Search document assets by keyword, title, filename, caption, or D-123 reference. Use this before get_document when you only know a rough identifier. Search results guide the next step into get_document.'),
260
+ description: context.describeTool('Search document assets by keyword, title, filename, caption, or D-123 reference. Use offset/limit to continue broad searches, then call get_document for the selected result.'),
252
261
  inputSchema: {
253
262
  properties: {
254
263
  query: stringProperty('Search term for document lookup, including D-123 references.'),
255
- limit: numberProperty('Max documents to return.'),
264
+ limit: integerProperty('Page size (default 10; max 50).', 1, 50),
265
+ offset: integerProperty('Non-negative result offset (default 0).', 0),
256
266
  },
257
267
  required: ['query'],
258
268
  },
@@ -264,7 +274,7 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
264
274
  documentId: stringProperty('Document asset id or document reference such as D-123.'),
265
275
  includeContent: booleanProperty('When true, include bounded inline text content or a download reference for binary documents.'),
266
276
  format: stringProperty('Optional read mode when including content.', ['metadata', 'text', 'content', 'full', 'download']),
267
- maxChars: numberProperty('Optional max inline character count for readable documents. Longer content is truncated with size metadata and a download hint.'),
277
+ maxChars: integerProperty('Optional max inline character count for readable documents. Longer content is truncated with size metadata and a download hint.', 1),
268
278
  },
269
279
  required: ['documentId'],
270
280
  },
@@ -289,7 +299,6 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
289
299
  inputSchema: {
290
300
  properties: {
291
301
  imageId: stringProperty('Image asset id or image reference such as I-123.'),
292
- imageAssetId: stringProperty('Alias for imageId. Image asset id or image reference such as I-123.'),
293
302
  taskId: stringProperty('Optional task ID or task reference such as T-123 to narrow sessions linked to one task.'),
294
303
  sessionId: stringProperty('Optional annotated attachment session id to include the structured payload for one session.'),
295
304
  },
@@ -348,16 +357,16 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
348
357
  sessionId: stringProperty('Annotated attachment session id.'),
349
358
  type: stringProperty('Marker type.'),
350
359
  kind: stringProperty('Alias for type. Marker kind: pin, box, arrow, or text-note.'),
351
- x: numberProperty('Normalized x coordinate in the 0..1 range.'),
352
- y: numberProperty('Normalized y coordinate in the 0..1 range.'),
353
- width: numberProperty('Optional normalized width in the 0..1 range.'),
354
- height: numberProperty('Optional normalized height in the 0..1 range.'),
360
+ x: boundedNumberProperty('Normalized x coordinate in the 0..1 range.', 0, 1),
361
+ y: boundedNumberProperty('Normalized y coordinate in the 0..1 range.', 0, 1),
362
+ width: boundedNumberProperty('Optional normalized width in the 0..1 range.', 0, 1),
363
+ height: boundedNumberProperty('Optional normalized height in the 0..1 range.', 0, 1),
355
364
  text: stringProperty('Optional marker text or note.'),
356
365
  instruction: stringProperty('Alias for text. Marker instruction or note.'),
357
366
  instructionType: stringProperty('Optional marker instruction category.'),
358
367
  color: stringProperty('Optional marker color.'),
359
- x2: numberProperty('Arrow endpoint normalized x coordinate.'),
360
- y2: numberProperty('Arrow endpoint normalized y coordinate.'),
368
+ x2: boundedNumberProperty('Arrow endpoint normalized x coordinate.', 0, 1),
369
+ y2: boundedNumberProperty('Arrow endpoint normalized y coordinate.', 0, 1),
361
370
  },
362
371
  required: ['sessionId'],
363
372
  },
@@ -378,12 +387,12 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
378
387
  properties: {
379
388
  sessionId: stringProperty('Annotated attachment session id.'),
380
389
  markerId: stringProperty('Marker id within the session.'),
381
- x: numberProperty('Updated normalized x coordinate.'),
382
- y: numberProperty('Updated normalized y coordinate.'),
383
- width: numberProperty('Updated normalized width.'),
384
- height: numberProperty('Updated normalized height.'),
385
- x2: numberProperty('Updated arrow endpoint normalized x coordinate.'),
386
- y2: numberProperty('Updated arrow endpoint normalized y coordinate.'),
390
+ x: boundedNumberProperty('Updated normalized x coordinate.', 0, 1),
391
+ y: boundedNumberProperty('Updated normalized y coordinate.', 0, 1),
392
+ width: boundedNumberProperty('Updated normalized width.', 0, 1),
393
+ height: boundedNumberProperty('Updated normalized height.', 0, 1),
394
+ x2: boundedNumberProperty('Updated arrow endpoint normalized x coordinate.', 0, 1),
395
+ y2: boundedNumberProperty('Updated arrow endpoint normalized y coordinate.', 0, 1),
387
396
  instruction: stringProperty('Updated marker instruction.'),
388
397
  instructionType: stringProperty('Updated marker instruction category.'),
389
398
  color: stringProperty('Updated marker color.'),
@@ -397,7 +406,7 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
397
406
  properties: {
398
407
  sessionId: stringProperty('Annotated attachment session id.'),
399
408
  markerId: stringProperty('Marker id within the session.'),
400
- toIndex: numberProperty('Target zero-based review order.'),
409
+ toIndex: integerProperty('Target zero-based review order.', 0),
401
410
  },
402
411
  required: ['sessionId', 'markerId', 'toIndex'],
403
412
  },
@@ -451,14 +460,14 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
451
460
  },
452
461
  }));
453
462
  register('review_document', (context) => ({
454
- description: context.describeTool('Create or reuse a review session for one document and append review comments. Use this for plan and document reviews.'),
463
+ description: context.describeTool('Add document review comments, reply to a root thread, or resolve/reopen a thread. Reply/thread modes require sessionId and are exclusive.'),
455
464
  inputSchema: {
456
465
  properties: {
457
- documentId: stringProperty('Document asset id or document reference such as D-123.'),
458
- sessionId: stringProperty('Optional existing review session id.'),
459
- title: stringProperty('Optional review session title when a new session is created.'),
460
- prompt: stringProperty('Review instructions or focus areas.'),
461
- comments: arrayProperty('Explicit review comments to add. When omitted, prompt is saved as a single review comment.', {
466
+ documentId: stringProperty('D-123 or asset id.'),
467
+ sessionId: stringProperty('Existing review session id.'),
468
+ title: stringProperty('New-session title.'),
469
+ prompt: stringProperty('Single comment.'),
470
+ comments: arrayProperty('Comments; prompt can supply one.', {
462
471
  type: 'object',
463
472
  properties: {
464
473
  body: { type: 'string' },
@@ -466,6 +475,9 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
466
475
  },
467
476
  required: ['body'],
468
477
  }),
478
+ parentCommentId: stringProperty('Root id for an unanchored reply.'),
479
+ threadCommentId: stringProperty('Root id to resolve or reopen.'),
480
+ threadStatus: stringProperty('Thread status.', ['open', 'resolved']),
469
481
  },
470
482
  },
471
483
  }));
@@ -541,9 +553,9 @@ export function registerDocumentAssetTools(registerTool, executeTool) {
541
553
  uploadedPath: stringProperty('Finalize a previously staged remote upload by passing the uploaded Taskforce storage path returned by save_task_attachment init mode.'),
542
554
  uploadDraftId: stringProperty('Finalize a previously staged remote upload by passing the uploadDraftId returned by save_task_attachment init mode.'),
543
555
  mimeType: stringProperty('Mime type for staged remote uploads such as image/png or image/jpeg. Provide this with sizeBytes to start a staged upload.'),
544
- sizeBytes: numberProperty('File size in bytes for staged remote uploads. Provide this with mimeType to start a staged upload.'),
556
+ sizeBytes: integerProperty('File size in bytes for staged remote uploads. Provide this with mimeType to start a staged upload.', 0),
545
557
  }),
546
- expectedSizeBytes: numberProperty('Optional exact byte count for integrity verification. The save is rejected before attachment when the persisted bytes would differ.'),
558
+ expectedSizeBytes: integerProperty('Optional exact byte count for integrity verification. The save is rejected before attachment when the persisted bytes would differ.', 0),
547
559
  expectedSha256: stringProperty('Optional lowercase or uppercase SHA-256 hex digest for integrity verification. The save is rejected before attachment when the persisted bytes would differ.'),
548
560
  displayName: stringProperty('Optional attachment display name. Defaults to filename and is independent from caption.'),
549
561
  caption: stringProperty('Optional attachment caption.'),
@@ -43,6 +43,7 @@ export declare function createDocumentHelpers(deps: DocumentHelpersDeps): {
43
43
  } | null;
44
44
  searchDocumentAssets: (queryRaw: unknown, options?: {
45
45
  limit?: unknown;
46
+ offset?: unknown;
46
47
  }) => Array<{
47
48
  asset: WorkspaceDocumentEntry;
48
49
  matchedOn: string[];
@@ -51,8 +51,10 @@ export function createDocumentHelpers(deps) {
51
51
  }
52
52
  const requestedLimit = Number(options?.limit);
53
53
  const limit = Number.isFinite(requestedLimit)
54
- ? Math.max(1, Math.min(50, Math.trunc(requestedLimit)))
54
+ ? Math.max(1, Math.min(51, Math.trunc(requestedLimit)))
55
55
  : 10;
56
+ const requestedOffset = Number(options?.offset);
57
+ const offset = Number.isFinite(requestedOffset) ? Math.max(0, Math.trunc(requestedOffset)) : 0;
56
58
  const normalize = (value) => typeof value === 'string' ? value.trim().toLowerCase() : '';
57
59
  const tokenize = (value) => normalize(value).split(/[^a-z0-9]+/i).filter(Boolean);
58
60
  const allDocuments = deps.workspaceAssetStore.listDocumentsByWorkspace(deps.activeWorkspaceId);
@@ -103,8 +105,10 @@ export function createDocumentHelpers(deps) {
103
105
  return [{ asset, matchedOn: Array.from(matchedOn), score }];
104
106
  });
105
107
  return scoredMatches
106
- .sort((a, b) => b.score - a.score || String(b.asset.updatedAt || '').localeCompare(String(a.asset.updatedAt || '')))
107
- .slice(0, limit);
108
+ .sort((a, b) => b.score - a.score
109
+ || String(b.asset.updatedAt || '').localeCompare(String(a.asset.updatedAt || ''))
110
+ || a.asset.assetId.localeCompare(b.asset.assetId))
111
+ .slice(offset, offset + limit);
108
112
  };
109
113
  const resolveDocumentAssetByIdentifierOrThrow = (documentIdentifier, options) => {
110
114
  const normalizedValue = typeof documentIdentifier === 'string' ? documentIdentifier.trim() : '';
@@ -6,6 +6,7 @@ import { type LocalTaskStatusOutboxCore } from '../sync/v3/localTaskStatusOutbox
6
6
  import { type DurableTaskLifecycleServiceCore } from '../sync/v3/taskLifecycleMutationService.js';
7
7
  import { type DurableTaskStatusServiceCore } from '../sync/v3/taskStatusMutationService.js';
8
8
  import { type DurableTaskWorkflowServiceCore } from '../sync/v3/taskWorkflowMutationService.js';
9
+ import type { TaskStatusReviewHandoff } from '../sync/v3/workflowAssignmentSync.js';
9
10
  export type McpTaskStatusActivationCapability = {
10
11
  taskStatusMcpActivation: boolean;
11
12
  };
@@ -29,7 +30,9 @@ export type DurableTaskMutationRouter = {
29
30
  enabled: boolean;
30
31
  setStatus(args: {
31
32
  taskId: string;
32
- payload: DurableTaskStatusMutationPayload;
33
+ payload: DurableTaskStatusMutationPayload & {
34
+ reviewHandoff?: TaskStatusReviewHandoff;
35
+ };
33
36
  actorRef: string;
34
37
  }): DurableMcpTaskMutationResult;
35
38
  mutateLifecycle(args: {
@@ -7,6 +7,7 @@ import { runDurableTaskLifecycleMutation, } from '../sync/v3/taskLifecycleMutati
7
7
  import { runDurableTaskStatusMutation, } from '../sync/v3/taskStatusMutationService.js';
8
8
  import { runDurableTaskWorkflowMutation, } from '../sync/v3/taskWorkflowMutationService.js';
9
9
  import { readDurableOperationReplay } from '../sync/v3/durableOperationReplay.js';
10
+ import { areWorkflowRuntimeMutationsFenced, resolveWorkflowRuntimeDurableTransportCapability, } from '../sync/v3/durableWorkflowRuntimeMutationRouter.js';
10
11
  const OPERATION_LEASE_MS = 30_000;
11
12
  function isEnabled(value) {
12
13
  return /^(1|true|on|yes)$/i.test(String(value || '').trim());
@@ -70,6 +71,13 @@ export function createDurableTaskMutationRouter(input) {
70
71
  const identityStore = new LocalSyncIdentityStore(input.core.getDatabaseAdapter());
71
72
  const createOperationId = input.createOperationId || defaultOperationId;
72
73
  const now = input.now || (() => new Date());
74
+ const workflowRuntimeJournalEnabled = resolveWorkflowRuntimeDurableTransportCapability({
75
+ runtimeMode: input.runtimeMode,
76
+ surface: 'mcp',
77
+ env: input.env,
78
+ });
79
+ const rejectWorkflowRuntimeActivation = workflowRuntimeJournalEnabled
80
+ && areWorkflowRuntimeMutationsFenced(input.env);
73
81
  const operationContext = (enabled, mutationKind, taskId) => {
74
82
  if (!enabled)
75
83
  throw new DurableTaskMutationRouterDisabledError();
@@ -156,6 +164,8 @@ export function createDurableTaskMutationRouter(input) {
156
164
  const result = runDurableTaskStatusMutation({
157
165
  ...cloudCommon(taskId, actorRef, context, revisions),
158
166
  payload: args.payload,
167
+ includeWorkflowRuntimeJournal: workflowRuntimeJournalEnabled,
168
+ rejectWorkflowRuntimeActivation,
159
169
  });
160
170
  if (result.state === 'in_progress')
161
171
  throw new DurableTaskMutationRouterInProgressError(result.retryAt);
@@ -53,6 +53,10 @@ export function createDurableTaskRelationshipMutationRouter(input) {
53
53
  || persisted.mutationKind !== args.mutationKind)) {
54
54
  throw new Error('Operation identity is already assigned to another task relationship mutation.');
55
55
  }
56
+ if (persisted)
57
+ store.assertOutboxOperationIdentity(persisted, {
58
+ domain: 'task-relationship', entityId: canonical.id, mutationKind: args.mutationKind,
59
+ });
56
60
  if (!persisted && args.mutationKind === 'link' && current && !current.deletedAt) {
57
61
  return { state: 'noop', route: 'no-change', operationId: null, relationship: current, outcome: 'existing' };
58
62
  }
@@ -0,0 +1,10 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import { type McpServerFactory } from '@modelcontextprotocol/server';
3
+ export declare function isModernMcpHttpRequest(req: IncomingMessage, parsedBody: unknown): Promise<boolean>;
4
+ export declare function handleModernMcpHttpRequest(input: {
5
+ req: IncomingMessage;
6
+ res: ServerResponse;
7
+ parsedBody: unknown;
8
+ factory: McpServerFactory;
9
+ onerror?: (error: Error) => void;
10
+ }): Promise<void>;
@@ -0,0 +1,19 @@
1
+ import { toNodeHandler, toWebRequest } from '@modelcontextprotocol/node';
2
+ import { createMcpHandler, isLegacyRequest, } from '@modelcontextprotocol/server';
3
+ export async function isModernMcpHttpRequest(req, parsedBody) {
4
+ const request = await toWebRequest(req, parsedBody);
5
+ return !(await isLegacyRequest(request, parsedBody));
6
+ }
7
+ export async function handleModernMcpHttpRequest(input) {
8
+ const handler = createMcpHandler(input.factory, {
9
+ legacy: 'reject',
10
+ responseMode: 'auto',
11
+ onerror: input.onerror,
12
+ });
13
+ try {
14
+ await toNodeHandler(handler, { onerror: input.onerror })(input.req, input.res, input.parsedBody);
15
+ }
16
+ finally {
17
+ await handler.close();
18
+ }
19
+ }
@@ -1,5 +1,5 @@
1
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
- import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
1
+ import { Client } from '@modelcontextprotocol/client';
2
+ import { StdioClientTransport } from '@modelcontextprotocol/client/stdio';
3
3
  export type LocalCliHealthState = 'healthy' | 'version-mismatch' | 'unusable';
4
4
  export interface LocalCliHealthResult {
5
5
  state: LocalCliHealthState;
@@ -3,8 +3,8 @@ import { constants as fsConstants, accessSync, readFileSync, statSync } from 'no
3
3
  import path from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  import { promisify } from 'node:util';
6
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
7
- import { getDefaultEnvironment, StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
6
+ import { Client } from '@modelcontextprotocol/client';
7
+ import { getDefaultEnvironment, StdioClientTransport } from '@modelcontextprotocol/client/stdio';
8
8
  const execFileAsync = promisify(execFile);
9
9
  const DEFAULT_TIMEOUT_MS = 5_000;
10
10
  function stripAnsi(value) {
@@ -15,6 +15,7 @@ export interface LocalServiceProxyOptions {
15
15
  requestTimeoutMs?: number;
16
16
  onFatal?: (error: Error) => void;
17
17
  logError?: (message: string) => void;
18
+ sleep?: (delayMs: number) => Promise<void>;
18
19
  }
19
20
  export interface LocalServiceProxyRuntime {
20
21
  close(): Promise<void>;