@cats-inc/cats-platform 0.1.21 → 0.3.4
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.
- package/.env.example +3 -7
- package/README.md +35 -0
- package/build/desktop/bootstrapNavigation.d.ts.map +1 -1
- package/build/desktop/bootstrapNavigation.js +6 -13
- package/build/desktop/bootstrapNavigation.js.map +1 -1
- package/build/desktop/bootstrapPage.d.ts.map +1 -1
- package/build/desktop/bootstrapPage.js +63 -86
- package/build/desktop/bootstrapPage.js.map +1 -1
- package/build/desktop/cliInventoryProbe.d.ts +11 -2
- package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
- package/build/desktop/cliInventoryProbe.js +19 -13
- package/build/desktop/cliInventoryProbe.js.map +1 -1
- package/build/desktop/config.d.ts +0 -4
- package/build/desktop/config.d.ts.map +1 -1
- package/build/desktop/config.js +1 -6
- package/build/desktop/config.js.map +1 -1
- package/build/desktop/contracts.d.ts +12 -2
- package/build/desktop/contracts.d.ts.map +1 -1
- package/build/desktop/contracts.js +1 -2
- package/build/desktop/contracts.js.map +1 -1
- package/build/desktop/hostVersion.d.ts.map +1 -1
- package/build/desktop/hostVersion.js +3 -5
- package/build/desktop/hostVersion.js.map +1 -1
- package/build/desktop/main.js +205 -256
- package/build/desktop/main.js.map +1 -1
- package/build/desktop/packaging.d.ts +2 -0
- package/build/desktop/packaging.d.ts.map +1 -1
- package/build/desktop/packaging.js +34 -14
- package/build/desktop/packaging.js.map +1 -1
- package/build/desktop/preload.cjs +9 -0
- package/build/desktop/preload.cjs.map +1 -1
- package/build/desktop/processSupervisor.d.ts.map +1 -1
- package/build/desktop/processSupervisor.js +3 -0
- package/build/desktop/processSupervisor.js.map +1 -1
- package/build/desktop/providerManager.d.ts +46 -0
- package/build/desktop/providerManager.d.ts.map +1 -0
- package/build/desktop/providerManager.js +220 -0
- package/build/desktop/providerManager.js.map +1 -0
- package/build/desktop/providerSelection.d.ts +38 -0
- package/build/desktop/providerSelection.d.ts.map +1 -0
- package/build/desktop/providerSelection.js +118 -0
- package/build/desktop/providerSelection.js.map +1 -0
- package/build/desktop/readiness.d.ts +2 -0
- package/build/desktop/readiness.d.ts.map +1 -1
- package/build/desktop/readiness.js +14 -33
- package/build/desktop/readiness.js.map +1 -1
- package/build/desktop/setupAssets.d.ts.map +1 -1
- package/build/desktop/setupAssets.js +28 -14
- package/build/desktop/setupAssets.js.map +1 -1
- package/build/desktop/setupAudit.d.ts +4 -3
- package/build/desktop/setupAudit.d.ts.map +1 -1
- package/build/desktop/setupAudit.js +18 -34
- package/build/desktop/setupAudit.js.map +1 -1
- package/build/desktop/setupBridge.js +1 -1
- package/build/desktop/setupBridge.js.map +1 -1
- package/build/desktop/setupPrerequisites.d.ts +11 -0
- package/build/desktop/setupPrerequisites.d.ts.map +1 -0
- package/build/desktop/setupPrerequisites.js +47 -0
- package/build/desktop/setupPrerequisites.js.map +1 -0
- package/build/desktop/updateDialog.d.ts +27 -1
- package/build/desktop/updateDialog.d.ts.map +1 -1
- package/build/desktop/updateDialog.js +85 -5
- package/build/desktop/updateDialog.js.map +1 -1
- package/build/renderer/assets/ActiveSessionPermissionChip-B49WcZBJ.js +1 -0
- package/build/renderer/assets/App-BpxZB5ym.js +2 -0
- package/build/renderer/assets/App-DYTUfAl6.js +1 -0
- package/build/renderer/assets/App-DxsV-tKS.css +1 -0
- package/build/renderer/assets/{App-DKOSn0o_.js → App-boB4WrmU.js} +1 -1
- package/build/renderer/assets/WorkspaceAppRoutes-CPqz85iw.js +1 -0
- package/build/renderer/assets/app-C52wwCGz.js +85 -0
- package/build/renderer/assets/app-CqnsY5ed.css +1 -0
- package/build/renderer/assets/{client-BdGHAUoK.js → client-DREGSZqQ.js} +1 -1
- package/build/renderer/assets/conversationSidebarRecentEntries-DK0iWS73.js +6 -0
- package/build/renderer/assets/{screenshotOverlay-DfBcolX-.js → screenshotOverlay-EF07cXvw.js} +1 -1
- package/build/renderer/assets/{useDraftSessionChips-DCIId0eY.js → useDraftSessionChips-BdZ_B1gy.js} +1 -1
- package/build/renderer/desktop/overlay/index.html +2 -2
- package/build/renderer/index.html +3 -3
- package/build/server/app/renderer/auth/api.d.ts.map +1 -1
- package/build/server/app/renderer/auth/api.js +4 -1
- package/build/server/app/renderer/auth/api.js.map +1 -1
- package/build/server/app/renderer/providerCatalogClient.d.ts.map +1 -1
- package/build/server/app/renderer/providerCatalogClient.js +34 -12
- package/build/server/app/renderer/providerCatalogClient.js.map +1 -1
- package/build/server/app/renderer/providerClientInvalidation.d.ts +6 -0
- package/build/server/app/renderer/providerClientInvalidation.d.ts.map +1 -0
- package/build/server/app/renderer/providerClientInvalidation.js +12 -0
- package/build/server/app/renderer/providerClientInvalidation.js.map +1 -0
- package/build/server/app/renderer/providerReadLoop.d.ts +5 -0
- package/build/server/app/renderer/providerReadLoop.d.ts.map +1 -0
- package/build/server/app/renderer/providerReadLoop.js +52 -0
- package/build/server/app/renderer/providerReadLoop.js.map +1 -0
- package/build/server/app/renderer/providerRegistryClient.d.ts +3 -2
- package/build/server/app/renderer/providerRegistryClient.d.ts.map +1 -1
- package/build/server/app/renderer/providerRegistryClient.js +51 -53
- package/build/server/app/renderer/providerRegistryClient.js.map +1 -1
- package/build/server/app/server/appPackageRoutes.d.ts +2 -0
- package/build/server/app/server/appPackageRoutes.d.ts.map +1 -1
- package/build/server/app/server/appPackageRoutes.js +105 -0
- package/build/server/app/server/appPackageRoutes.js.map +1 -1
- package/build/server/app/server/authGatePolicy.js +14 -1
- package/build/server/app/server/authGatePolicy.js.map +1 -1
- package/build/server/app/server/contracts.d.ts +15 -0
- package/build/server/app/server/contracts.d.ts.map +1 -1
- package/build/server/app/server/dependencies.d.ts.map +1 -1
- package/build/server/app/server/dependencies.js +42 -1
- package/build/server/app/server/dependencies.js.map +1 -1
- package/build/server/app/server/goldenPathStartupResume.d.ts +55 -0
- package/build/server/app/server/goldenPathStartupResume.d.ts.map +1 -0
- package/build/server/app/server/goldenPathStartupResume.js +109 -0
- package/build/server/app/server/goldenPathStartupResume.js.map +1 -0
- package/build/server/app/server/platformSetupRoutes.d.ts.map +1 -1
- package/build/server/app/server/platformSetupRoutes.js +1 -13
- package/build/server/app/server/platformSetupRoutes.js.map +1 -1
- package/build/server/app/server/polling.d.ts.map +1 -1
- package/build/server/app/server/polling.js +2 -0
- package/build/server/app/server/polling.js.map +1 -1
- package/build/server/app/server/requestRouter.d.ts.map +1 -1
- package/build/server/app/server/requestRouter.js +30 -0
- package/build/server/app/server/requestRouter.js.map +1 -1
- package/build/server/app/server/runtimeSurfaceProxy.d.ts.map +1 -1
- package/build/server/app/server/runtimeSurfaceProxy.js +4 -2
- package/build/server/app/server/runtimeSurfaceProxy.js.map +1 -1
- package/build/server/app/server/startupRecovery.d.ts.map +1 -1
- package/build/server/app/server/startupRecovery.js +5 -0
- package/build/server/app/server/startupRecovery.js.map +1 -1
- package/build/server/app/server/subscribeRoutes.d.ts.map +1 -1
- package/build/server/app/server/subscribeRoutes.js +5 -3
- package/build/server/app/server/subscribeRoutes.js.map +1 -1
- package/build/server/app/server/telegramCommandSurface.d.ts +29 -0
- package/build/server/app/server/telegramCommandSurface.d.ts.map +1 -0
- package/build/server/app/server/telegramCommandSurface.js +123 -0
- package/build/server/app/server/telegramCommandSurface.js.map +1 -0
- package/build/server/app/server/transportWorkGoldenPath.d.ts +82 -0
- package/build/server/app/server/transportWorkGoldenPath.d.ts.map +1 -0
- package/build/server/app/server/transportWorkGoldenPath.js +307 -0
- package/build/server/app/server/transportWorkGoldenPath.js.map +1 -0
- package/build/server/config.d.ts +21 -0
- package/build/server/config.d.ts.map +1 -1
- package/build/server/config.js +12 -0
- package/build/server/config.js.map +1 -1
- package/build/server/design/components/providerModelFieldsSupport.d.ts +5 -24
- package/build/server/design/components/providerModelFieldsSupport.d.ts.map +1 -1
- package/build/server/design/components/providerModelFieldsSupport.js +65 -70
- package/build/server/design/components/providerModelFieldsSupport.js.map +1 -1
- package/build/server/design/components/useProviderCatalogState.d.ts +2 -2
- package/build/server/design/components/useProviderCatalogState.d.ts.map +1 -1
- package/build/server/design/components/useProviderCatalogState.js +71 -151
- package/build/server/design/components/useProviderCatalogState.js.map +1 -1
- package/build/server/design/components/useProviderModelFieldActions.js +2 -2
- package/build/server/design/components/useProviderModelFieldActions.js.map +1 -1
- package/build/server/design/components/useProviderRegistryState.d.ts +1 -7
- package/build/server/design/components/useProviderRegistryState.d.ts.map +1 -1
- package/build/server/design/components/useProviderRegistryState.js +41 -104
- package/build/server/design/components/useProviderRegistryState.js.map +1 -1
- package/build/server/design/components/useProviderTargetReconciliation.d.ts +1 -0
- package/build/server/design/components/useProviderTargetReconciliation.d.ts.map +1 -1
- package/build/server/design/components/useProviderTargetReconciliation.js +3 -2
- package/build/server/design/components/useProviderTargetReconciliation.js.map +1 -1
- package/build/server/index.js +4 -0
- package/build/server/index.js.map +1 -1
- package/build/server/platform/apps/packageInstaller.d.ts +19 -0
- package/build/server/platform/apps/packageInstaller.d.ts.map +1 -0
- package/build/server/platform/apps/packageInstaller.js +92 -0
- package/build/server/platform/apps/packageInstaller.js.map +1 -0
- package/build/server/platform/apps/registry.d.ts +6 -0
- package/build/server/platform/apps/registry.d.ts.map +1 -1
- package/build/server/platform/apps/registry.js +24 -0
- package/build/server/platform/apps/registry.js.map +1 -1
- package/build/server/platform/apps/renderer.d.ts +6 -0
- package/build/server/platform/apps/renderer.d.ts.map +1 -0
- package/build/server/platform/apps/renderer.js +18 -0
- package/build/server/platform/apps/renderer.js.map +1 -0
- package/build/server/platform/orchestration/entitySubscriptions/channel.d.ts +2 -1
- package/build/server/platform/orchestration/entitySubscriptions/channel.d.ts.map +1 -1
- package/build/server/platform/orchestration/entitySubscriptions/channel.js +3 -18
- package/build/server/platform/orchestration/entitySubscriptions/channel.js.map +1 -1
- package/build/server/platform/orchestration/entitySubscriptions/index.d.ts +1 -0
- package/build/server/platform/orchestration/entitySubscriptions/index.d.ts.map +1 -1
- package/build/server/platform/orchestration/entitySubscriptions/index.js.map +1 -1
- package/build/server/platform/runtime/deliveryClient.d.ts +111 -0
- package/build/server/platform/runtime/deliveryClient.d.ts.map +1 -0
- package/build/server/platform/runtime/deliveryClient.js +289 -0
- package/build/server/platform/runtime/deliveryClient.js.map +1 -0
- package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts +1 -0
- package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts.map +1 -1
- package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js +10 -0
- package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js.map +1 -1
- package/build/server/platform/supervision/runtimeBoundary.d.ts +11 -1
- package/build/server/platform/supervision/runtimeBoundary.d.ts.map +1 -1
- package/build/server/platform/supervision/runtimeBoundary.js +2 -2
- package/build/server/platform/supervision/runtimeBoundary.js.map +1 -1
- package/build/server/platform/transports/telegram/bridge.d.ts +18 -0
- package/build/server/platform/transports/telegram/bridge.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/bridge.js +176 -0
- package/build/server/platform/transports/telegram/bridge.js.map +1 -1
- package/build/server/platform/transports/telegram/commandPort.d.ts +40 -0
- package/build/server/platform/transports/telegram/commandPort.d.ts.map +1 -0
- package/build/server/platform/transports/telegram/commandPort.js +17 -0
- package/build/server/platform/transports/telegram/commandPort.js.map +1 -0
- package/build/server/platform/transports/telegram/commandRouter.d.ts +22 -0
- package/build/server/platform/transports/telegram/commandRouter.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/commandRouter.js.map +1 -1
- package/build/server/platform/transports/telegram/commands/index.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/commands/index.js +38 -0
- package/build/server/platform/transports/telegram/commands/index.js.map +1 -1
- package/build/server/platform/transports/telegram/ingressDispatch.d.ts +56 -0
- package/build/server/platform/transports/telegram/ingressDispatch.d.ts.map +1 -0
- package/build/server/platform/transports/telegram/ingressDispatch.js +93 -0
- package/build/server/platform/transports/telegram/ingressDispatch.js.map +1 -0
- package/build/server/platform/transports/telegram/polling.d.ts +34 -0
- package/build/server/platform/transports/telegram/polling.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/polling.js +86 -9
- package/build/server/platform/transports/telegram/polling.js.map +1 -1
- package/build/server/platform/transports/telegram/relay/index.d.ts +3 -0
- package/build/server/platform/transports/telegram/relay/index.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/relay/index.js +5 -1
- package/build/server/platform/transports/telegram/relay/index.js.map +1 -1
- package/build/server/platform/transports/telegram/relay/ingress.d.ts +2 -0
- package/build/server/platform/transports/telegram/relay/ingress.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/relay/ingress.js +1 -1
- package/build/server/platform/transports/telegram/relay/ingress.js.map +1 -1
- package/build/server/platform/transports/work-delivery/actionTokens.d.ts +66 -0
- package/build/server/platform/transports/work-delivery/actionTokens.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/actionTokens.js +145 -0
- package/build/server/platform/transports/work-delivery/actionTokens.js.map +1 -0
- package/build/server/platform/transports/work-delivery/contracts.d.ts +172 -0
- package/build/server/platform/transports/work-delivery/contracts.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/contracts.js +26 -0
- package/build/server/platform/transports/work-delivery/contracts.js.map +1 -0
- package/build/server/platform/transports/work-delivery/deliveryGates.d.ts +32 -0
- package/build/server/platform/transports/work-delivery/deliveryGates.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/deliveryGates.js +45 -0
- package/build/server/platform/transports/work-delivery/deliveryGates.js.map +1 -0
- package/build/server/platform/transports/work-delivery/inboundClassification.d.ts +31 -0
- package/build/server/platform/transports/work-delivery/inboundClassification.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/inboundClassification.js +52 -0
- package/build/server/platform/transports/work-delivery/inboundClassification.js.map +1 -0
- package/build/server/platform/transports/work-delivery/outbox.d.ts +84 -0
- package/build/server/platform/transports/work-delivery/outbox.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/outbox.js +270 -0
- package/build/server/platform/transports/work-delivery/outbox.js.map +1 -0
- package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts +57 -0
- package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/permissionEnvelope.js +74 -0
- package/build/server/platform/transports/work-delivery/permissionEnvelope.js.map +1 -0
- package/build/server/platform/transports/work-delivery/port.d.ts +60 -0
- package/build/server/platform/transports/work-delivery/port.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/port.js +15 -0
- package/build/server/platform/transports/work-delivery/port.js.map +1 -0
- package/build/server/platform/transports/work-delivery/proposal.d.ts +31 -0
- package/build/server/platform/transports/work-delivery/proposal.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/proposal.js +59 -0
- package/build/server/platform/transports/work-delivery/proposal.js.map +1 -0
- package/build/server/platform/transports/work-delivery/readiness.d.ts +61 -0
- package/build/server/platform/transports/work-delivery/readiness.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/readiness.js +123 -0
- package/build/server/platform/transports/work-delivery/readiness.js.map +1 -0
- package/build/server/platform/transports/work-delivery/stageProjection.d.ts +43 -0
- package/build/server/platform/transports/work-delivery/stageProjection.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/stageProjection.js +132 -0
- package/build/server/platform/transports/work-delivery/stageProjection.js.map +1 -0
- package/build/server/platform/transports/work-delivery/stateStore.d.ts +21 -0
- package/build/server/platform/transports/work-delivery/stateStore.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/stateStore.js +193 -0
- package/build/server/platform/transports/work-delivery/stateStore.js.map +1 -0
- package/build/server/platform/transports/work-delivery/telemetry.d.ts +49 -0
- package/build/server/platform/transports/work-delivery/telemetry.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/telemetry.js +80 -0
- package/build/server/platform/transports/work-delivery/telemetry.js.map +1 -0
- package/build/server/products/chat/api/contracts.d.ts +10 -0
- package/build/server/products/chat/api/contracts.d.ts.map +1 -1
- package/build/server/products/chat/api/resources/channelRoutes.d.ts.map +1 -1
- package/build/server/products/chat/api/resources/channelRoutes.js +27 -1
- package/build/server/products/chat/api/resources/channelRoutes.js.map +1 -1
- package/build/server/products/chat/api/routeSupport.d.ts +17 -1
- package/build/server/products/chat/api/routeSupport.d.ts.map +1 -1
- package/build/server/products/chat/api/routeSupport.js +27 -4
- package/build/server/products/chat/api/routeSupport.js.map +1 -1
- package/build/server/products/chat/api/setupRoutes.d.ts.map +1 -1
- package/build/server/products/chat/api/setupRoutes.js +23 -8
- package/build/server/products/chat/api/setupRoutes.js.map +1 -1
- package/build/server/products/chat/state/model/channelExecutionTargets.d.ts +15 -0
- package/build/server/products/chat/state/model/channelExecutionTargets.d.ts.map +1 -1
- package/build/server/products/chat/state/model/channelExecutionTargets.js +25 -0
- package/build/server/products/chat/state/model/channelExecutionTargets.js.map +1 -1
- package/build/server/products/chat/state/model/index.d.ts +1 -1
- package/build/server/products/chat/state/model/index.d.ts.map +1 -1
- package/build/server/products/chat/state/model/index.js +1 -1
- package/build/server/products/chat/state/model/index.js.map +1 -1
- package/build/server/products/chat/state/model/readModels.d.ts +1 -0
- package/build/server/products/chat/state/model/readModels.d.ts.map +1 -1
- package/build/server/products/chat/state/model/readModels.js +2 -1
- package/build/server/products/chat/state/model/readModels.js.map +1 -1
- package/build/server/products/code/api/relayRoutes.d.ts.map +1 -1
- package/build/server/products/code/api/relayRoutes.js +36 -7
- package/build/server/products/code/api/relayRoutes.js.map +1 -1
- package/build/server/products/code/state/relayState.d.ts +2 -1
- package/build/server/products/code/state/relayState.d.ts.map +1 -1
- package/build/server/products/code/state/relayState.js +7 -7
- package/build/server/products/code/state/relayState.js.map +1 -1
- package/build/server/products/shared/api/workspaceContracts.d.ts +5 -0
- package/build/server/products/shared/api/workspaceContracts.d.ts.map +1 -1
- package/build/server/products/shared/renderer/api/appShell.d.ts +1 -0
- package/build/server/products/shared/renderer/api/appShell.d.ts.map +1 -1
- package/build/server/products/shared/renderer/api/appShell.js +9 -0
- package/build/server/products/shared/renderer/api/appShell.js.map +1 -1
- package/build/server/products/work/api/goldenPathProjection.d.ts +156 -0
- package/build/server/products/work/api/goldenPathProjection.d.ts.map +1 -0
- package/build/server/products/work/api/goldenPathProjection.js +252 -0
- package/build/server/products/work/api/goldenPathProjection.js.map +1 -0
- package/build/server/products/work/api/index.d.ts +54 -1
- package/build/server/products/work/api/index.d.ts.map +1 -1
- package/build/server/products/work/api/index.js +182 -4
- package/build/server/products/work/api/index.js.map +1 -1
- package/build/server/products/work/api/projection.d.ts +7 -1
- package/build/server/products/work/api/projection.d.ts.map +1 -1
- package/build/server/products/work/api/projection.js +7 -1
- package/build/server/products/work/api/projection.js.map +1 -1
- package/build/server/products/work/shared/apiPaths.d.ts +8 -0
- package/build/server/products/work/shared/apiPaths.d.ts.map +1 -1
- package/build/server/products/work/shared/apiPaths.js +8 -0
- package/build/server/products/work/shared/apiPaths.js.map +1 -1
- package/build/server/products/work/shared/workGoldenPathMessages.d.ts +83 -0
- package/build/server/products/work/shared/workGoldenPathMessages.d.ts.map +1 -0
- package/build/server/products/work/shared/workGoldenPathMessages.js +211 -0
- package/build/server/products/work/shared/workGoldenPathMessages.js.map +1 -0
- package/build/server/products/work/shared/workGoldenPathMetadata.d.ts +45 -0
- package/build/server/products/work/shared/workGoldenPathMetadata.d.ts.map +1 -0
- package/build/server/products/work/shared/workGoldenPathMetadata.js +122 -0
- package/build/server/products/work/shared/workGoldenPathMetadata.js.map +1 -0
- package/build/server/products/work/state/workCompletionEvidence.d.ts +42 -0
- package/build/server/products/work/state/workCompletionEvidence.d.ts.map +1 -0
- package/build/server/products/work/state/workCompletionEvidence.js +59 -0
- package/build/server/products/work/state/workCompletionEvidence.js.map +1 -0
- package/build/server/products/work/state/workExecutionTaskDelegate.d.ts +16 -0
- package/build/server/products/work/state/workExecutionTaskDelegate.d.ts.map +1 -1
- package/build/server/products/work/state/workExecutionTaskDelegate.js +91 -68
- package/build/server/products/work/state/workExecutionTaskDelegate.js.map +1 -1
- package/build/server/products/work/state/workGoldenPathAdmission.d.ts +78 -0
- package/build/server/products/work/state/workGoldenPathAdmission.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathAdmission.js +249 -0
- package/build/server/products/work/state/workGoldenPathAdmission.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts +33 -0
- package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js +161 -0
- package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathIntake.d.ts +34 -0
- package/build/server/products/work/state/workGoldenPathIntake.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathIntake.js +50 -0
- package/build/server/products/work/state/workGoldenPathIntake.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathLifecycle.d.ts +44 -0
- package/build/server/products/work/state/workGoldenPathLifecycle.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathLifecycle.js +146 -0
- package/build/server/products/work/state/workGoldenPathLifecycle.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathPublish.d.ts +84 -0
- package/build/server/products/work/state/workGoldenPathPublish.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathPublish.js +488 -0
- package/build/server/products/work/state/workGoldenPathPublish.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathRunner.d.ts +121 -0
- package/build/server/products/work/state/workGoldenPathRunner.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathRunner.js +447 -0
- package/build/server/products/work/state/workGoldenPathRunner.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts +74 -0
- package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js +239 -0
- package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathService.d.ts +152 -0
- package/build/server/products/work/state/workGoldenPathService.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathService.js +1057 -0
- package/build/server/products/work/state/workGoldenPathService.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts +87 -0
- package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathTelegramPort.js +220 -0
- package/build/server/products/work/state/workGoldenPathTelegramPort.js.map +1 -0
- package/build/server/runtime/client.d.ts +13 -0
- package/build/server/runtime/client.d.ts.map +1 -1
- package/build/server/runtime/client.js +44 -1
- package/build/server/runtime/client.js.map +1 -1
- package/build/server/runtime/setup.d.ts +14 -4
- package/build/server/runtime/setup.d.ts.map +1 -1
- package/build/server/runtime/setup.js +17 -19
- package/build/server/runtime/setup.js.map +1 -1
- package/build/server/runtime/usageSnapshot.d.ts +3 -0
- package/build/server/runtime/usageSnapshot.d.ts.map +1 -0
- package/build/server/runtime/usageSnapshot.js +69 -0
- package/build/server/runtime/usageSnapshot.js.map +1 -0
- package/build/server/server/routes/providerCapabilityBootstrap.d.ts +69 -0
- package/build/server/server/routes/providerCapabilityBootstrap.d.ts.map +1 -0
- package/build/server/server/routes/providerCapabilityBootstrap.js +165 -0
- package/build/server/server/routes/providerCapabilityBootstrap.js.map +1 -0
- package/build/server/server/routes/providers.d.ts.map +1 -1
- package/build/server/server/routes/providers.js +133 -131
- package/build/server/server/routes/providers.js.map +1 -1
- package/build/server/server/routes/telegram.d.ts +9 -0
- package/build/server/server/routes/telegram.d.ts.map +1 -1
- package/build/server/server/routes/telegram.js +79 -72
- package/build/server/server/routes/telegram.js.map +1 -1
- package/build/server/shared/catsAppManifest.d.ts +3 -1
- package/build/server/shared/catsAppManifest.d.ts.map +1 -1
- package/build/server/shared/catsAppManifest.js +2 -0
- package/build/server/shared/catsAppManifest.js.map +1 -1
- package/build/server/shared/desktopRecoveryBridge.d.ts +2 -1
- package/build/server/shared/desktopRecoveryBridge.d.ts.map +1 -1
- package/build/server/shared/desktopRecoveryBridge.js.map +1 -1
- package/build/server/shared/executionLabel.d.ts.map +1 -1
- package/build/server/shared/executionLabel.js +8 -1
- package/build/server/shared/executionLabel.js.map +1 -1
- package/build/server/shared/i18n/catalogs/en.d.ts.map +1 -1
- package/build/server/shared/i18n/catalogs/en.js +198 -3
- package/build/server/shared/i18n/catalogs/en.js.map +1 -1
- package/build/server/shared/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/build/server/shared/i18n/catalogs/zh-TW.js +197 -3
- package/build/server/shared/i18n/catalogs/zh-TW.js.map +1 -1
- package/build/server/shared/i18n/index.d.ts +192 -0
- package/build/server/shared/i18n/index.d.ts.map +1 -1
- package/build/server/shared/i18n/messageKeys.d.ts +192 -0
- package/build/server/shared/i18n/messageKeys.d.ts.map +1 -1
- package/build/server/shared/i18n/messageKeys.js +192 -0
- package/build/server/shared/i18n/messageKeys.js.map +1 -1
- package/build/server/shared/platformSetupOperation.d.ts +2 -0
- package/build/server/shared/platformSetupOperation.d.ts.map +1 -0
- package/build/server/shared/platformSetupOperation.js +9 -0
- package/build/server/shared/platformSetupOperation.js.map +1 -0
- package/build/server/shared/providerCatalog.d.ts +5 -2
- package/build/server/shared/providerCatalog.d.ts.map +1 -1
- package/build/server/shared/providerCatalog.js +6 -0
- package/build/server/shared/providerCatalog.js.map +1 -1
- package/build/server/shared/providerCatalogData.d.ts +154 -77
- package/build/server/shared/providerCatalogData.d.ts.map +1 -1
- package/build/server/shared/providerCatalogData.js +73 -36
- package/build/server/shared/providerCatalogData.js.map +1 -1
- package/build/server/shared/providerCatalogInstances.d.ts.map +1 -1
- package/build/server/shared/providerCatalogInstances.js +3 -0
- package/build/server/shared/providerCatalogInstances.js.map +1 -1
- package/build/server/shared/providerModelLabelRegistry.d.ts +29 -0
- package/build/server/shared/providerModelLabelRegistry.d.ts.map +1 -0
- package/build/server/shared/providerModelLabelRegistry.js +49 -0
- package/build/server/shared/providerModelLabelRegistry.js.map +1 -0
- package/build/server/shared/providerRegistryWarnings.d.ts +4 -0
- package/build/server/shared/providerRegistryWarnings.d.ts.map +1 -1
- package/build/server/shared/providerRegistryWarnings.js +7 -0
- package/build/server/shared/providerRegistryWarnings.js.map +1 -1
- package/build/server/shared/providerSelection.d.ts.map +1 -1
- package/build/server/shared/providerSelection.js +10 -13
- package/build/server/shared/providerSelection.js.map +1 -1
- package/build/server/shared/runtimeSetup.d.ts +17 -4
- package/build/server/shared/runtimeSetup.d.ts.map +1 -1
- package/build/server/shared/runtimeStatusPresentation.js +1 -1
- package/build/server/shared/runtimeStatusPresentation.js.map +1 -1
- package/package.json +32 -3
- package/packages/app-sdk/browser.d.ts +51 -0
- package/packages/app-sdk/browser.js +48 -0
- package/packages/app-sdk/package.d.ts +14 -0
- package/packages/app-sdk/package.js +131 -0
- package/packages/app-sdk/package.json +7 -0
- package/packages/provider-setup/manager.d.ts +79 -0
- package/packages/provider-setup/manager.js +441 -0
- package/scripts/README.md +66 -26
- package/scripts/build-desktop-installer.mjs +139 -16
- package/scripts/build-test-ui.mjs +1 -1
- package/scripts/bundle-server.mjs +23 -10
- package/scripts/linux/build-desktop-package.sh +6 -6
- package/scripts/linux/install-antigravity.sh +0 -0
- package/scripts/linux/install-devin.sh +0 -0
- package/scripts/linux/install-github-cli.sh +5 -0
- package/scripts/linux/install-meta-cli.sh +8 -0
- package/scripts/linux/install-node.sh +9 -3
- package/scripts/linux/node-cli-common.sh +87 -48
- package/scripts/linux/provider-cli-common.sh +178 -130
- package/scripts/linux/provider-version-common.sh +247 -0
- package/scripts/linux/sync-agent-skills.sh +27 -5
- package/scripts/linux/test-linux-package-smoke.sh +6 -3
- package/scripts/linux/upgrade-cli-tools.sh +1 -1
- package/scripts/linux/verified-npm-update.sh +20 -0
- package/scripts/macos/build-desktop-package.sh +5 -5
- package/scripts/macos/install-antigravity.sh +0 -0
- package/scripts/macos/install-devin.sh +0 -0
- package/scripts/macos/install-github-cli.sh +5 -0
- package/scripts/macos/install-meta-cli.sh +8 -0
- package/scripts/macos/install-node.sh +9 -3
- package/scripts/macos/node-cli-common.sh +87 -48
- package/scripts/macos/provider-cli-common.sh +178 -130
- package/scripts/macos/provider-version-common.sh +247 -0
- package/scripts/macos/sync-agent-skills.sh +27 -5
- package/scripts/macos/test-macos-package-smoke.sh +6 -3
- package/scripts/macos/upgrade-cli-tools.sh +1 -1
- package/scripts/macos/verified-npm-update.sh +20 -0
- package/scripts/package-desktop.mjs +15 -2
- package/scripts/testing/check-usage-app.mts +266 -0
- package/scripts/testing/conversation-navigation-smoke-electron.cjs +134 -0
- package/scripts/testing/conversation-navigation-smoke-renderer.tsx +102 -0
- package/scripts/testing/conversation-navigation-smoke.mjs +67 -0
- package/scripts/testing/usage-app-smoke-electron.cjs +10 -0
- package/scripts/testing/usage-app-smoke-renderer.tsx +8 -0
- package/scripts/validate-release-assets.mjs +4 -1
- package/scripts/verify-desktop-app-bundle.mjs +108 -0
- package/scripts/windows/Build-DesktopPackage.ps1 +9 -6
- package/scripts/windows/Install-Antigravity.ps1 +26 -3
- package/scripts/windows/Install-ClaudeCode.ps1 +25 -7
- package/scripts/windows/Install-CursorAgent.ps1 +45 -30
- package/scripts/windows/Install-Devin.ps1 +16 -47
- package/scripts/windows/Install-GitHubCli.ps1 +4 -0
- package/scripts/windows/Install-Goose.ps1 +18 -1
- package/scripts/windows/Install-Grok.ps1 +14 -1
- package/scripts/windows/Install-Junie.ps1 +32 -11
- package/scripts/windows/Install-KiroCli.ps1 +37 -13
- package/scripts/windows/Install-MetaCli.ps1 +463 -0
- package/scripts/windows/Install-Node.ps1 +6 -1
- package/scripts/windows/Install-Ollama.ps1 +4 -1
- package/scripts/windows/Setup-NodeGlobalPrefix.ps1 +10 -0
- package/scripts/windows/Sync-AgentSkills.ps1 +29 -6
- package/scripts/windows/Test-WindowsInstallerSmoke.ps1 +4 -1
- package/scripts/windows/_HiddenProcess.ps1 +14 -3
- package/scripts/windows/_NativeInstallerSupport.ps1 +308 -0
- package/scripts/windows/_NpmCliInstaller.ps1 +35 -14
- package/scripts/windows/_PackagedUninstall.ps1 +9 -1
- package/scripts/windows/_VerifiedNpmUpdate.ps1 +25 -0
- package/build/desktop/updateNotifications.d.ts +0 -64
- package/build/desktop/updateNotifications.d.ts.map +0 -1
- package/build/desktop/updateNotifications.js +0 -143
- package/build/desktop/updateNotifications.js.map +0 -1
- package/build/renderer/assets/ActiveSessionPermissionChip-DImsuR9T.js +0 -1
- package/build/renderer/assets/App-BfOvMP2m.js +0 -1
- package/build/renderer/assets/App-DGwkRFZl.css +0 -1
- package/build/renderer/assets/App-DWd7I3Z2.js +0 -2
- package/build/renderer/assets/WorkspaceAppRoutes-CrbTA9En.js +0 -1
- package/build/renderer/assets/app-BTww3Hl4.js +0 -43
- package/build/renderer/assets/app-CPxWQwLA.css +0 -1
- package/build/renderer/assets/conversationSidebarRecentEntries-QuaOPxCb.js +0 -6
- package/build/server/app/renderer/settings/runtimeLifecycleHelpers.d.ts +0 -48
- package/build/server/app/renderer/settings/runtimeLifecycleHelpers.d.ts.map +0 -1
- package/build/server/app/renderer/settings/runtimeLifecycleHelpers.js +0 -535
- package/build/server/app/renderer/settings/runtimeLifecycleHelpers.js.map +0 -1
- package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts +0 -13
- package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts.map +0 -1
- package/build/server/design/components/useProviderRegistryAutoRecheck.js +0 -63
- package/build/server/design/components/useProviderRegistryAutoRecheck.js.map +0 -1
- package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.d.ts +0 -19
- package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.d.ts.map +0 -1
- package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.js +0 -53
- package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.js.map +0 -1
- package/build/server/products/shared/renderer/api/providers.d.ts +0 -17
- package/build/server/products/shared/renderer/api/providers.d.ts.map +0 -1
- package/build/server/products/shared/renderer/api/providers.js +0 -50
- package/build/server/products/shared/renderer/api/providers.js.map +0 -1
- package/scripts/linux/install-aider.sh +0 -8
- package/scripts/macos/install-aider.sh +0 -8
- package/scripts/windows/Install-Aider.ps1 +0 -368
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport golden-path authorization/admission (SPEC-114 FR-20..FR-27).
|
|
3
|
+
*
|
|
4
|
+
* One product-owned command turns a *later* explicit owner event over an
|
|
5
|
+
* already-visible scope revision into exactly one approved Task and one queued
|
|
6
|
+
* supervised Run. ADR-112 section 4 forbids the transport from editing Core
|
|
7
|
+
* records itself, so Telegram calls this and nothing else.
|
|
8
|
+
*
|
|
9
|
+
* Atomicity is the reason this is a single `updateCore` mutator rather than a
|
|
10
|
+
* sequence of delegate calls: a crash between "Task approved" and "Run queued"
|
|
11
|
+
* would otherwise leave a half-admitted scope that a retry turns into a second
|
|
12
|
+
* Run.
|
|
13
|
+
*/
|
|
14
|
+
import { createHash } from 'node:crypto';
|
|
15
|
+
import { appendCoreActivity, upsertCoreRun, writeApprovalDecision, } from '../../../core/model/index.js';
|
|
16
|
+
import { applyWorkExecutionTaskCreation } from './workExecutionTaskDelegate.js';
|
|
17
|
+
import { readWorkGoldenPathMetadata, WORK_GOLDEN_PATH_METADATA_KEY, } from '../shared/workGoldenPathMetadata.js';
|
|
18
|
+
function isRecord(value) {
|
|
19
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
20
|
+
}
|
|
21
|
+
/** Reads the run-scoped execution envelope defensively during restart recovery. */
|
|
22
|
+
export function readWorkGoldenPathExecutionSnapshot(metadata) {
|
|
23
|
+
if (!isRecord(metadata)) {
|
|
24
|
+
return { executionTarget: null, toolScope: 'none', workspaceHeadOid: null };
|
|
25
|
+
}
|
|
26
|
+
const goldenPath = metadata[WORK_GOLDEN_PATH_METADATA_KEY];
|
|
27
|
+
if (!isRecord(goldenPath) || !isRecord(goldenPath.execution)) {
|
|
28
|
+
return { executionTarget: null, toolScope: 'none', workspaceHeadOid: null };
|
|
29
|
+
}
|
|
30
|
+
const execution = goldenPath.execution;
|
|
31
|
+
const rawTarget = isRecord(execution.target) ? execution.target : null;
|
|
32
|
+
const provider = rawTarget && typeof rawTarget.provider === 'string'
|
|
33
|
+
? rawTarget.provider.trim()
|
|
34
|
+
: '';
|
|
35
|
+
const rawScope = execution.toolScope;
|
|
36
|
+
const toolScope = rawScope === 'read_only'
|
|
37
|
+
|| rawScope === 'narrow_write'
|
|
38
|
+
|| rawScope === 'broad_write'
|
|
39
|
+
? rawScope
|
|
40
|
+
: 'none';
|
|
41
|
+
return {
|
|
42
|
+
executionTarget: provider === '' ? null : {
|
|
43
|
+
provider,
|
|
44
|
+
instance: rawTarget && typeof rawTarget.instance === 'string'
|
|
45
|
+
? rawTarget.instance
|
|
46
|
+
: null,
|
|
47
|
+
model: rawTarget && typeof rawTarget.model === 'string' ? rawTarget.model : null,
|
|
48
|
+
},
|
|
49
|
+
toolScope,
|
|
50
|
+
workspaceHeadOid: typeof execution.workspaceHeadOid === 'string'
|
|
51
|
+
? execution.workspaceHeadOid
|
|
52
|
+
: null,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Stable admission key over binding, work item, revision, and action.
|
|
57
|
+
*
|
|
58
|
+
* Deliberately excludes `ownerEventRef`: a replayed callback carries a *new*
|
|
59
|
+
* Telegram callback id but authorizes the same scope, and must land on the same
|
|
60
|
+
* Task and Run.
|
|
61
|
+
*/
|
|
62
|
+
export function buildWorkGoldenPathAdmissionKey(input) {
|
|
63
|
+
return [
|
|
64
|
+
'wgp-admit',
|
|
65
|
+
input.bindingId,
|
|
66
|
+
input.workItemId,
|
|
67
|
+
String(input.proposalRevision),
|
|
68
|
+
input.proposalDigest,
|
|
69
|
+
].join(':');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Deterministic Run id for an admission key.
|
|
73
|
+
*
|
|
74
|
+
* Exported so a caller can tell "this scope is already admitted" apart from
|
|
75
|
+
* "this action is not allowed here" before it rejects a replayed button.
|
|
76
|
+
*/
|
|
77
|
+
export function resolveWorkGoldenPathRunId(admissionKey) {
|
|
78
|
+
return `run-wgp-${createHash('sha256').update(admissionKey).digest('hex').slice(0, 20)}`;
|
|
79
|
+
}
|
|
80
|
+
function admissionActivityId(admissionKey) {
|
|
81
|
+
return `activity-wgp-${createHash('sha256').update(admissionKey).digest('hex').slice(0, 20)}`;
|
|
82
|
+
}
|
|
83
|
+
function blocked(admissionKey, workItemId, reason, message) {
|
|
84
|
+
return {
|
|
85
|
+
status: 'blocked',
|
|
86
|
+
reason,
|
|
87
|
+
message,
|
|
88
|
+
admissionKey,
|
|
89
|
+
workItemId,
|
|
90
|
+
taskId: null,
|
|
91
|
+
runId: null,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
class AdmissionBlockedError extends Error {
|
|
95
|
+
reason;
|
|
96
|
+
constructor(reason, message) {
|
|
97
|
+
super(message);
|
|
98
|
+
this.reason = reason;
|
|
99
|
+
this.name = 'AdmissionBlockedError';
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function verifyScope(workItem, input) {
|
|
103
|
+
const metadata = readWorkGoldenPathMetadata(workItem.metadata);
|
|
104
|
+
if (metadata === null || metadata.proposal === null || metadata.origin === null) {
|
|
105
|
+
throw new AdmissionBlockedError('proposal_missing', `Work Item ${workItem.id} has no versioned golden-path proposal to authorize.`);
|
|
106
|
+
}
|
|
107
|
+
if (metadata.origin.bindingId !== input.bindingId) {
|
|
108
|
+
throw new AdmissionBlockedError('origin_mismatch', 'Authorization arrived on a different binding than the one that captured this work.');
|
|
109
|
+
}
|
|
110
|
+
if (metadata.proposal.revision !== input.proposalRevision) {
|
|
111
|
+
throw new AdmissionBlockedError('stale_revision', `Proposal revision ${input.proposalRevision} is stale; current revision is `
|
|
112
|
+
+ `${metadata.proposal.revision}.`);
|
|
113
|
+
}
|
|
114
|
+
if (metadata.proposal.digest !== input.proposalDigest) {
|
|
115
|
+
throw new AdmissionBlockedError('digest_mismatch', 'The proposal changed after this action was offered; confirm the refreshed scope.');
|
|
116
|
+
}
|
|
117
|
+
return { proposal: metadata.proposal, origin: metadata.origin };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Finds an already-queued Run for this admission key.
|
|
121
|
+
*
|
|
122
|
+
* Both the deterministic id and the metadata key are checked so recovery works
|
|
123
|
+
* whether the previous attempt got as far as writing the Run or not.
|
|
124
|
+
*/
|
|
125
|
+
function findAdmittedRun(core, admissionKey) {
|
|
126
|
+
const runId = resolveWorkGoldenPathRunId(admissionKey);
|
|
127
|
+
return core.runs.find((run) => run.id === runId) ?? null;
|
|
128
|
+
}
|
|
129
|
+
export async function admitTransportWorkExecution(coreStore, input, now = () => new Date()) {
|
|
130
|
+
const admissionKey = buildWorkGoldenPathAdmissionKey(input);
|
|
131
|
+
if (!input.readiness.ready) {
|
|
132
|
+
return blocked(admissionKey, input.workItemId, 'not_ready', `Delegation readiness is incomplete: ${input.readiness.blockers
|
|
133
|
+
.map((entry) => entry.reason)
|
|
134
|
+
.join(', ')}.`);
|
|
135
|
+
}
|
|
136
|
+
const createdAt = now();
|
|
137
|
+
let resolvedTask = null;
|
|
138
|
+
let resolvedRun = null;
|
|
139
|
+
let alreadyAdmitted = false;
|
|
140
|
+
try {
|
|
141
|
+
await coreStore.updateCore((core) => {
|
|
142
|
+
const workItem = core.workItems.find((candidate) => candidate.id === input.workItemId)
|
|
143
|
+
?? null;
|
|
144
|
+
if (workItem === null) {
|
|
145
|
+
throw new AdmissionBlockedError('work_item_not_found', `No Work Item found for id ${input.workItemId}.`);
|
|
146
|
+
}
|
|
147
|
+
const { proposal } = verifyScope(workItem, input);
|
|
148
|
+
const existingRun = findAdmittedRun(core, admissionKey);
|
|
149
|
+
if (existingRun !== null) {
|
|
150
|
+
// Replay: the same owner event already produced this Run.
|
|
151
|
+
alreadyAdmitted = true;
|
|
152
|
+
resolvedRun = existingRun;
|
|
153
|
+
resolvedTask = core.tasks.find((task) => task.id === existingRun.taskId) ?? null;
|
|
154
|
+
return core;
|
|
155
|
+
}
|
|
156
|
+
// 1. Task. Reuses the phase-scoped Work tool mutation so the intake
|
|
157
|
+
// boundary invariant (FR-25) is enforced by the same code path that
|
|
158
|
+
// enforces it for the agent-facing tool.
|
|
159
|
+
const taskWrite = applyWorkExecutionTaskCreation(core, {
|
|
160
|
+
workItemId: workItem.id,
|
|
161
|
+
title: proposal.goal,
|
|
162
|
+
summary: workItem.summary ?? undefined,
|
|
163
|
+
approvalNote: `Telegram owner authorization for revision ${proposal.revision}.`,
|
|
164
|
+
}, { actorRef: input.actorRef, actionId: input.ownerEventRef }, createdAt);
|
|
165
|
+
// 2. Owner approval. This is the later explicit owner event, recorded
|
|
166
|
+
// with its transport provenance so Desktop can show FR-24 evidence.
|
|
167
|
+
const approvalWrite = writeApprovalDecision(taskWrite.core, {
|
|
168
|
+
taskId: taskWrite.task.id,
|
|
169
|
+
status: 'approved',
|
|
170
|
+
action: 'approve',
|
|
171
|
+
decidedByActorId: input.ownerActorId,
|
|
172
|
+
notes: `Authorized from Telegram binding ${input.bindingId}, revision `
|
|
173
|
+
+ `${proposal.revision}.`,
|
|
174
|
+
taskStatus: 'approved',
|
|
175
|
+
}, createdAt);
|
|
176
|
+
// 3. Supervised Run, queued. Deterministic id keyed by the admission key
|
|
177
|
+
// is what makes a concurrent double-tap converge instead of forking.
|
|
178
|
+
const runWrite = upsertCoreRun(approvalWrite.core, {
|
|
179
|
+
id: resolveWorkGoldenPathRunId(admissionKey),
|
|
180
|
+
title: proposal.goal,
|
|
181
|
+
status: 'queued',
|
|
182
|
+
conversationId: workItem.conversationId,
|
|
183
|
+
taskId: approvalWrite.task.id,
|
|
184
|
+
orchestratorActorId: input.actorRef,
|
|
185
|
+
summary: workItem.summary,
|
|
186
|
+
metadata: {
|
|
187
|
+
[WORK_GOLDEN_PATH_METADATA_KEY]: {
|
|
188
|
+
schemaVersion: 1,
|
|
189
|
+
admissionKey,
|
|
190
|
+
bindingId: input.bindingId,
|
|
191
|
+
workItemId: workItem.id,
|
|
192
|
+
proposalRevision: proposal.revision,
|
|
193
|
+
proposalDigest: proposal.digest,
|
|
194
|
+
deliveryMode: proposal.deliveryMode,
|
|
195
|
+
acceptanceCriteria: proposal.acceptanceCriteria,
|
|
196
|
+
ownerEventRef: input.ownerEventRef,
|
|
197
|
+
authorizedByActorId: input.ownerActorId,
|
|
198
|
+
authorizedAt: createdAt.toISOString(),
|
|
199
|
+
execution: {
|
|
200
|
+
target: input.executionTarget ?? null,
|
|
201
|
+
toolScope: input.toolScope ?? 'none',
|
|
202
|
+
workspaceHeadOid: input.workspaceHeadOid ?? null,
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
}, createdAt);
|
|
207
|
+
const activityWrite = appendCoreActivity(runWrite.core, {
|
|
208
|
+
id: admissionActivityId(admissionKey),
|
|
209
|
+
kind: 'approval_decided',
|
|
210
|
+
actorId: input.ownerActorId,
|
|
211
|
+
projectId: workItem.projectId,
|
|
212
|
+
workItemId: workItem.id,
|
|
213
|
+
conversationId: workItem.conversationId,
|
|
214
|
+
taskId: approvalWrite.task.id,
|
|
215
|
+
runId: runWrite.run.id,
|
|
216
|
+
message: `Owner authorized execution from Telegram for "${proposal.goal}".`,
|
|
217
|
+
metadata: {
|
|
218
|
+
[WORK_GOLDEN_PATH_METADATA_KEY]: {
|
|
219
|
+
schemaVersion: 1,
|
|
220
|
+
phase: 'execution_authorization',
|
|
221
|
+
admissionKey,
|
|
222
|
+
bindingId: input.bindingId,
|
|
223
|
+
proposalRevision: proposal.revision,
|
|
224
|
+
proposalDigest: proposal.digest,
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
}, createdAt);
|
|
228
|
+
resolvedTask = approvalWrite.task;
|
|
229
|
+
resolvedRun = runWrite.run;
|
|
230
|
+
return activityWrite.core;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
if (error instanceof AdmissionBlockedError) {
|
|
235
|
+
return blocked(admissionKey, input.workItemId, error.reason, error.message);
|
|
236
|
+
}
|
|
237
|
+
return blocked(admissionKey, input.workItemId, 'task_precheck_failed', error instanceof Error ? error.message : 'Golden-path admission failed.');
|
|
238
|
+
}
|
|
239
|
+
const task = resolvedTask;
|
|
240
|
+
const run = resolvedRun;
|
|
241
|
+
return {
|
|
242
|
+
status: alreadyAdmitted ? 'already_admitted' : 'admitted',
|
|
243
|
+
admissionKey,
|
|
244
|
+
workItemId: input.workItemId,
|
|
245
|
+
taskId: task?.id ?? null,
|
|
246
|
+
runId: run?.id ?? null,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=workGoldenPathAdmission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workGoldenPathAdmission.js","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathAdmission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Acceptance-evidence collection for the golden path (SPEC-114 FR-31, FR-39).
|
|
3
|
+
*
|
|
4
|
+
* This is where a model's account of its own work stops mattering. Everything
|
|
5
|
+
* returned here is something Cats caused and observed through the runtime
|
|
6
|
+
* delivery API: a commit that actually landed, a worktree that is actually
|
|
7
|
+
* clean afterwards, artifacts the session actually registered.
|
|
8
|
+
*
|
|
9
|
+
* The one thing Cats cannot verify mechanically is a free-text acceptance
|
|
10
|
+
* criterion. Those stay *claims*, carried separately, so the result message can
|
|
11
|
+
* show what was verified and what was merely asserted.
|
|
12
|
+
*/
|
|
13
|
+
import type { RuntimeDeliveryClient } from '../../../platform/runtime/deliveryClient.js';
|
|
14
|
+
import type { WorkGoldenPathEvidenceCollector } from './workGoldenPathRuntimeExecutor.js';
|
|
15
|
+
export interface CreateRuntimeEvidenceCollectorInput {
|
|
16
|
+
deliveryClient: RuntimeDeliveryClient;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The evidence collector the runtime executor plugs into.
|
|
20
|
+
*
|
|
21
|
+
* A collection failure is deliberately swallowed into "no evidence": the run
|
|
22
|
+
* then continues or ends unmet, which is safer than treating an unreachable
|
|
23
|
+
* delivery endpoint as proof of delivery.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createRuntimeEvidenceCollector(input: CreateRuntimeEvidenceCollectorInput): WorkGoldenPathEvidenceCollector;
|
|
26
|
+
/**
|
|
27
|
+
* Parses the bounded claim lines the opening instruction asks for.
|
|
28
|
+
*
|
|
29
|
+
* Deliberately strict: an unparsed response yields no claims, so a run
|
|
30
|
+
* continues rather than completing on prose that merely sounds finished.
|
|
31
|
+
*/
|
|
32
|
+
export declare function parseClaimedCriteria(responseText: string): string[];
|
|
33
|
+
//# sourceMappingURL=workGoldenPathDeliveryEvidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workGoldenPathDeliveryEvidence.d.ts","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathDeliveryEvidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,6CAA6C,CAAC;AAGrD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AAW1F,MAAM,WAAW,mCAAmC;IAClD,cAAc,EAAE,qBAAqB,CAAC;CACvC;AAoGD;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,mCAAmC,GACzC,+BAA+B,CAkDjC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CASnE"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Acceptance-evidence collection for the golden path (SPEC-114 FR-31, FR-39).
|
|
3
|
+
*
|
|
4
|
+
* This is where a model's account of its own work stops mattering. Everything
|
|
5
|
+
* returned here is something Cats caused and observed through the runtime
|
|
6
|
+
* delivery API: a commit that actually landed, a worktree that is actually
|
|
7
|
+
* clean afterwards, artifacts the session actually registered.
|
|
8
|
+
*
|
|
9
|
+
* The one thing Cats cannot verify mechanically is a free-text acceptance
|
|
10
|
+
* criterion. Those stay *claims*, carried separately, so the result message can
|
|
11
|
+
* show what was verified and what was merely asserted.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* The post-commit check Cats performs itself.
|
|
15
|
+
*
|
|
16
|
+
* Named for exactly what it verifies. It proves the commit captured the work
|
|
17
|
+
* and left nothing behind; it does not claim the change is *correct*, and the
|
|
18
|
+
* label must not imply otherwise.
|
|
19
|
+
*/
|
|
20
|
+
const POST_COMMIT_CHECK = 'runtime repo status: worktree clean at the new HEAD';
|
|
21
|
+
function buildCommitMessage(context) {
|
|
22
|
+
// Conventional Commits, per the repository convention. Bounded so a long goal
|
|
23
|
+
// cannot produce an unreadable subject line.
|
|
24
|
+
const subject = context.goal.trim().replace(/\s+/gu, ' ').slice(0, 68);
|
|
25
|
+
return `feat: ${subject}`;
|
|
26
|
+
}
|
|
27
|
+
function hasPendingChanges(snapshot) {
|
|
28
|
+
if (snapshot.clean === false) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return snapshot.stagedCount + snapshot.modifiedCount + snapshot.untrackedCount > 0;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Collects evidence for every repository-backed delivery mode.
|
|
35
|
+
*
|
|
36
|
+
* Returns nothing when the agent has not changed anything, which is what makes
|
|
37
|
+
* an idle run loop and then fail honestly instead of committing an empty tree
|
|
38
|
+
* and calling it delivery.
|
|
39
|
+
*/
|
|
40
|
+
async function collectCommitEvidence(input) {
|
|
41
|
+
const before = await input.deliveryClient.inspectRepo({
|
|
42
|
+
sessionId: input.sessionId,
|
|
43
|
+
});
|
|
44
|
+
if (!before.supported || !before.repository) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
// A different HEAD means something else changed the repository after the
|
|
48
|
+
// owner admitted this run. Refuse to commit across that ownership boundary.
|
|
49
|
+
if (input.baselineHeadOid !== null && before.headOid !== input.baselineHeadOid) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
// This is the runtime-managed isolated worktree created for the run, so every
|
|
53
|
+
// change since the clean baseline belongs to this execution.
|
|
54
|
+
if (!hasPendingChanges(before)) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const changeSummary = [
|
|
58
|
+
`${before.stagedCount} staged`,
|
|
59
|
+
`${before.modifiedCount} modified`,
|
|
60
|
+
`${before.untrackedCount} untracked`,
|
|
61
|
+
].join(', ');
|
|
62
|
+
const commit = await input.deliveryClient.createCommit({
|
|
63
|
+
sessionId: input.sessionId,
|
|
64
|
+
message: buildCommitMessage({ goal: input.goal }),
|
|
65
|
+
});
|
|
66
|
+
if (commit.state !== 'completed' || commit.commitId === null) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
// Verify the post-condition rather than trusting the commit response: the
|
|
70
|
+
// worktree must be clean and HEAD must have moved.
|
|
71
|
+
const after = await input.deliveryClient.inspectRepo({
|
|
72
|
+
sessionId: input.sessionId,
|
|
73
|
+
});
|
|
74
|
+
const landed = !hasPendingChanges(after) && after.headOid !== before.headOid;
|
|
75
|
+
return {
|
|
76
|
+
commitId: commit.commitId,
|
|
77
|
+
changeSummary,
|
|
78
|
+
validation: { command: POST_COMMIT_CHECK, passed: landed },
|
|
79
|
+
deliveryWorkspacePath: input.deliveryWorkspacePath,
|
|
80
|
+
deliverySessionId: input.sessionId,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
async function collectArtifactEvidence(input) {
|
|
84
|
+
const artifacts = await input.deliveryClient.previewArtifacts({
|
|
85
|
+
sessionId: input.sessionId,
|
|
86
|
+
});
|
|
87
|
+
const first = artifacts[0];
|
|
88
|
+
if (first === undefined) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
title: first.label ?? first.id,
|
|
93
|
+
path: first.path,
|
|
94
|
+
mimeType: first.mediaType,
|
|
95
|
+
deliveryWorkspacePath: input.deliveryWorkspacePath,
|
|
96
|
+
deliverySessionId: input.sessionId,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The evidence collector the runtime executor plugs into.
|
|
101
|
+
*
|
|
102
|
+
* A collection failure is deliberately swallowed into "no evidence": the run
|
|
103
|
+
* then continues or ends unmet, which is safer than treating an unreachable
|
|
104
|
+
* delivery endpoint as proof of delivery.
|
|
105
|
+
*/
|
|
106
|
+
export function createRuntimeEvidenceCollector(input) {
|
|
107
|
+
return async ({ sessionId, goal, deliveryMode, workspacePath, deliveryWorkspacePath, acceptanceCriteria, claimedCriteria, baselineHeadOid, }) => {
|
|
108
|
+
// Only criteria the proposal actually stated can be claimed; an agent
|
|
109
|
+
// cannot invent a criterion and then satisfy it.
|
|
110
|
+
const satisfiedCriteria = acceptanceCriteria.filter((criterion) => claimedCriteria.some((entry) => entry.trim().toLowerCase() === criterion.trim().toLowerCase()));
|
|
111
|
+
try {
|
|
112
|
+
if (deliveryMode !== 'artifact_only') {
|
|
113
|
+
if (workspacePath === null) {
|
|
114
|
+
return { satisfiedCriteria, artifact: null, commit: null };
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
satisfiedCriteria,
|
|
118
|
+
artifact: null,
|
|
119
|
+
commit: await collectCommitEvidence({
|
|
120
|
+
deliveryClient: input.deliveryClient,
|
|
121
|
+
workspacePath,
|
|
122
|
+
sessionId,
|
|
123
|
+
goal,
|
|
124
|
+
baselineHeadOid,
|
|
125
|
+
deliveryWorkspacePath: deliveryWorkspacePath ?? workspacePath,
|
|
126
|
+
}),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
satisfiedCriteria,
|
|
131
|
+
artifact: await collectArtifactEvidence({
|
|
132
|
+
deliveryClient: input.deliveryClient,
|
|
133
|
+
workspacePath,
|
|
134
|
+
sessionId,
|
|
135
|
+
deliveryWorkspacePath: deliveryWorkspacePath ?? workspacePath,
|
|
136
|
+
}),
|
|
137
|
+
commit: null,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return { satisfiedCriteria, artifact: null, commit: null };
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Parses the bounded claim lines the opening instruction asks for.
|
|
147
|
+
*
|
|
148
|
+
* Deliberately strict: an unparsed response yields no claims, so a run
|
|
149
|
+
* continues rather than completing on prose that merely sounds finished.
|
|
150
|
+
*/
|
|
151
|
+
export function parseClaimedCriteria(responseText) {
|
|
152
|
+
const claims = [];
|
|
153
|
+
for (const line of responseText.split('\n')) {
|
|
154
|
+
const match = /^\s*CRITERIA-MET:\s*(.+?)\s*$/u.exec(line);
|
|
155
|
+
if (match) {
|
|
156
|
+
claims.push(match[1]);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return claims;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=workGoldenPathDeliveryEvidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workGoldenPathDeliveryEvidence.js","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathDeliveryEvidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Golden-path intake (SPEC-114 FR-7, FR-8, FR-10).
|
|
3
|
+
*
|
|
4
|
+
* `/work <goal>` goes through the existing product-intent capture tool rather
|
|
5
|
+
* than a Telegram-only shortcut, so the golden path inherits its idempotency
|
|
6
|
+
* key and its intake-boundary marker. That marker is what later makes the
|
|
7
|
+
* authorization command provably a *separate* owner event (FR-20, FR-25): the
|
|
8
|
+
* capture records the update ref that produced it, and admission arrives with a
|
|
9
|
+
* different one.
|
|
10
|
+
*/
|
|
11
|
+
import type { CoreStore } from '../../../core/store.js';
|
|
12
|
+
import type { CoreWorkItemRecord } from '../../../core/types.js';
|
|
13
|
+
export interface GoldenPathIntakeInput {
|
|
14
|
+
goal: string;
|
|
15
|
+
bindingId: string;
|
|
16
|
+
conversationId: string;
|
|
17
|
+
externalMessageRef: string | null;
|
|
18
|
+
/** Opaque transport update reference; also the intake boundary action id. */
|
|
19
|
+
externalUpdateRef: string;
|
|
20
|
+
}
|
|
21
|
+
export interface GoldenPathIntakeContext {
|
|
22
|
+
actorRef: string;
|
|
23
|
+
}
|
|
24
|
+
export type GoldenPathIntakeResult = {
|
|
25
|
+
status: 'captured';
|
|
26
|
+
workItemId: string;
|
|
27
|
+
workItem: CoreWorkItemRecord;
|
|
28
|
+
created: boolean;
|
|
29
|
+
} | {
|
|
30
|
+
status: 'rejected';
|
|
31
|
+
message: string;
|
|
32
|
+
};
|
|
33
|
+
export declare function captureGoldenPathWorkItem(coreStore: CoreStore, input: GoldenPathIntakeInput, context: GoldenPathIntakeContext, now?: () => Date): Promise<GoldenPathIntakeResult>;
|
|
34
|
+
//# sourceMappingURL=workGoldenPathIntake.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workGoldenPathIntake.d.ts","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathIntake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC1F;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,uBAAuB,EAChC,GAAG,GAAE,MAAM,IAAuB,GACjC,OAAO,CAAC,sBAAsB,CAAC,CA6CjC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Golden-path intake (SPEC-114 FR-7, FR-8, FR-10).
|
|
3
|
+
*
|
|
4
|
+
* `/work <goal>` goes through the existing product-intent capture tool rather
|
|
5
|
+
* than a Telegram-only shortcut, so the golden path inherits its idempotency
|
|
6
|
+
* key and its intake-boundary marker. That marker is what later makes the
|
|
7
|
+
* authorization command provably a *separate* owner event (FR-20, FR-25): the
|
|
8
|
+
* capture records the update ref that produced it, and admission arrives with a
|
|
9
|
+
* different one.
|
|
10
|
+
*/
|
|
11
|
+
import { createWorkIntakeDelegate } from './workIntakeDelegate.js';
|
|
12
|
+
export async function captureGoldenPathWorkItem(coreStore, input, context, now = () => new Date()) {
|
|
13
|
+
const delegate = createWorkIntakeDelegate({ coreStore, now });
|
|
14
|
+
const captured = await delegate.capture({
|
|
15
|
+
title: input.goal.trim(),
|
|
16
|
+
status: 'planned',
|
|
17
|
+
source: {
|
|
18
|
+
surface: 'telegram',
|
|
19
|
+
conversationId: input.conversationId,
|
|
20
|
+
transportBindingId: input.bindingId,
|
|
21
|
+
sourceMessageId: input.externalMessageRef ?? input.externalUpdateRef,
|
|
22
|
+
sourceText: input.goal.trim(),
|
|
23
|
+
},
|
|
24
|
+
}, {
|
|
25
|
+
actorRef: context.actorRef,
|
|
26
|
+
// Binding the intake boundary to the originating update is what stops the
|
|
27
|
+
// same owner message from both capturing and authorizing work.
|
|
28
|
+
actionId: input.externalUpdateRef,
|
|
29
|
+
});
|
|
30
|
+
if (captured.status !== 'applied') {
|
|
31
|
+
return {
|
|
32
|
+
status: 'rejected',
|
|
33
|
+
message: captured.status === 'rejected'
|
|
34
|
+
? captured.error.message
|
|
35
|
+
: 'Work capture did not apply.',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const core = await coreStore.readCore();
|
|
39
|
+
const workItem = core.workItems.find((candidate) => candidate.id === captured.result.workItemId) ?? null;
|
|
40
|
+
if (workItem === null) {
|
|
41
|
+
return { status: 'rejected', message: 'Captured Work Item was not found after write.' };
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
status: 'captured',
|
|
45
|
+
workItemId: workItem.id,
|
|
46
|
+
workItem,
|
|
47
|
+
created: captured.result.created,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=workGoldenPathIntake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workGoldenPathIntake.js","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathIntake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAmBnE,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,SAAoB,EACpB,KAA4B,EAC5B,OAAgC,EAChC,MAAkB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;IAElC,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CACrC;QACE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE;YACN,OAAO,EAAE,UAAU;YACnB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,kBAAkB,EAAE,KAAK,CAAC,SAAS;YACnC,eAAe,EAAE,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,iBAAiB;YACpE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;SAC9B;KACF,EACD;QACE,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,0EAA0E;QAC1E,+DAA+D;QAC/D,QAAQ,EAAE,KAAK,CAAC,iBAAiB;KAClC,CACF,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,QAAQ,CAAC,MAAM,KAAK,UAAU;gBACrC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO;gBACxB,CAAC,CAAC,6BAA6B;SAClC,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAClC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,UAAU,CAC3D,IAAI,IAAI,CAAC;IACV,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAC;IAC1F,CAAC;IAED,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,QAAQ;QACR,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO;KACjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run lifecycle actions for the golden path (SPEC-114 FR-29, FR-35).
|
|
3
|
+
*
|
|
4
|
+
* Timeout, retry, and resume all reduce to one question: may this Run be
|
|
5
|
+
* driven again, and what does the authoritative record say happened? Core's
|
|
6
|
+
* `CoreRunStatus` stays the answer — these transitions move it, record why, and
|
|
7
|
+
* refuse the moves that would resurrect finished work.
|
|
8
|
+
*
|
|
9
|
+
* Retry and resume are deliberately different. Retry says "that attempt did not
|
|
10
|
+
* work, start the loop again" and is only valid from a stuck state. Resume says
|
|
11
|
+
* "nothing is driving this any more" — the usual cause being a host restart
|
|
12
|
+
* while the Run was mid-flight — and is only valid from a live one.
|
|
13
|
+
*/
|
|
14
|
+
import type { CoreStore } from '../../../core/store.js';
|
|
15
|
+
import type { CoreRunStatus } from '../../../core/types.js';
|
|
16
|
+
export declare const WORK_GOLDEN_PATH_LIFECYCLE_METADATA_KEY = "workGoldenPathLifecycle";
|
|
17
|
+
export type WorkGoldenPathLifecycleAction = 'retry' | 'resume' | 'timeout';
|
|
18
|
+
export type WorkGoldenPathLifecycleStatus = 'redrivable' | 'recorded' | 'refused';
|
|
19
|
+
export interface WorkGoldenPathLifecycleResult {
|
|
20
|
+
status: WorkGoldenPathLifecycleStatus;
|
|
21
|
+
action: WorkGoldenPathLifecycleAction;
|
|
22
|
+
runId: string | null;
|
|
23
|
+
runStatus: CoreRunStatus | null;
|
|
24
|
+
reason: string | null;
|
|
25
|
+
}
|
|
26
|
+
export interface ApplyWorkGoldenPathLifecycleInput {
|
|
27
|
+
workItemId: string;
|
|
28
|
+
action: WorkGoldenPathLifecycleAction;
|
|
29
|
+
actorRef: string;
|
|
30
|
+
/** Who asked. Absent for `timeout`, which nobody asks for. */
|
|
31
|
+
ownerActorId?: string | null;
|
|
32
|
+
/** Free-text cause, recorded on the Run for `timeout`. */
|
|
33
|
+
detail?: string | null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Applies one lifecycle action to a golden-path Run.
|
|
37
|
+
*
|
|
38
|
+
* `redrivable` means the caller should start the runner again; `recorded` means
|
|
39
|
+
* the state changed but nothing should be driven (a timeout waits for the
|
|
40
|
+
* owner); `refused` means the action was invalid for the current state and
|
|
41
|
+
* nothing was written.
|
|
42
|
+
*/
|
|
43
|
+
export declare function applyWorkGoldenPathLifecycleAction(coreStore: CoreStore, input: ApplyWorkGoldenPathLifecycleInput, now?: () => Date): Promise<WorkGoldenPathLifecycleResult>;
|
|
44
|
+
//# sourceMappingURL=workGoldenPathLifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workGoldenPathLifecycle.d.ts","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathLifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG3E,eAAO,MAAM,uCAAuC,4BAA4B,CAAC;AAEjF,MAAM,MAAM,6BAA6B,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3E,MAAM,MAAM,6BAA6B,GACrC,YAAY,GACZ,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,6BAA6B,CAAC;IACtC,MAAM,EAAE,6BAA6B,CAAC;IACtC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,aAAa,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,6BAA6B,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAoDD;;;;;;;GAOG;AACH,wBAAsB,kCAAkC,CACtD,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,iCAAiC,EACxC,GAAG,GAAE,MAAM,IAAuB,GACjC,OAAO,CAAC,6BAA6B,CAAC,CAkGxC"}
|