@cats-inc/cats-platform 0.1.21 → 0.2.8
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 +18 -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 +114 -34
- package/build/desktop/bootstrapPage.js.map +1 -1
- package/build/desktop/cliInventoryProbe.d.ts +5 -2
- package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
- package/build/desktop/cliInventoryProbe.js +14 -11
- 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 +10 -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 +144 -249
- 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 +7 -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/providerSelection.d.ts +37 -0
- package/build/desktop/providerSelection.d.ts.map +1 -0
- package/build/desktop/providerSelection.js +112 -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 +16 -14
- package/build/desktop/setupAssets.js.map +1 -1
- package/build/desktop/setupAudit.d.ts +2 -3
- package/build/desktop/setupAudit.d.ts.map +1 -1
- package/build/desktop/setupAudit.js +14 -34
- package/build/desktop/setupAudit.js.map +1 -1
- 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-DImsuR9T.js → ActiveSessionPermissionChip-CAgN-tXv.js} +1 -1
- package/build/renderer/assets/App-BZA23O2J.js +2 -0
- package/build/renderer/assets/App-DxsV-tKS.css +1 -0
- package/build/renderer/assets/{App-DKOSn0o_.js → App-YqprEL2n.js} +1 -1
- package/build/renderer/assets/App-rGw9J8PZ.js +1 -0
- package/build/renderer/assets/WorkspaceAppRoutes-BCHCikmJ.js +1 -0
- package/build/renderer/assets/app-BV3UAQkR.css +1 -0
- package/build/renderer/assets/app-CVPqqfZo.js +45 -0
- package/build/renderer/assets/conversationSidebarRecentEntries-iqaLqA1n.js +6 -0
- package/build/renderer/assets/{useDraftSessionChips-DCIId0eY.js → useDraftSessionChips-D9BX6X92.js} +1 -1
- package/build/renderer/index.html +2 -2
- package/build/server/app/renderer/providerCatalogClient.d.ts.map +1 -1
- package/build/server/app/renderer/providerCatalogClient.js +15 -6
- package/build/server/app/renderer/providerCatalogClient.js.map +1 -1
- package/build/server/app/renderer/providerRegistryClient.d.ts +1 -1
- package/build/server/app/renderer/providerRegistryClient.d.ts.map +1 -1
- package/build/server/app/renderer/providerRegistryClient.js +23 -41
- 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 +7 -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/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 +3 -3
- package/build/server/design/components/providerModelFieldsSupport.d.ts.map +1 -1
- package/build/server/design/components/providerModelFieldsSupport.js +37 -38
- package/build/server/design/components/providerModelFieldsSupport.js.map +1 -1
- package/build/server/design/components/useProviderCatalogState.d.ts +1 -0
- package/build/server/design/components/useProviderCatalogState.d.ts.map +1 -1
- package/build/server/design/components/useProviderCatalogState.js +1 -0
- package/build/server/design/components/useProviderCatalogState.js.map +1 -1
- package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts.map +1 -1
- package/build/server/design/components/useProviderRegistryAutoRecheck.js +20 -13
- package/build/server/design/components/useProviderRegistryAutoRecheck.js.map +1 -1
- package/build/server/design/components/useProviderRegistryState.d.ts.map +1 -1
- package/build/server/design/components/useProviderRegistryState.js +12 -25
- package/build/server/design/components/useProviderRegistryState.js.map +1 -1
- package/build/server/design/components/useProviderTargetReconciliation.d.ts.map +1 -1
- package/build/server/design/components/useProviderTargetReconciliation.js +2 -1
- 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/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 +8 -0
- package/build/server/products/chat/api/routeSupport.d.ts.map +1 -1
- package/build/server/products/chat/api/routeSupport.js +5 -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/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/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 +39 -0
- package/build/server/runtime/client.js.map +1 -1
- package/build/server/runtime/setup.d.ts +10 -4
- package/build/server/runtime/setup.d.ts.map +1 -1
- package/build/server/runtime/setup.js +14 -18
- 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 +112 -81
- 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/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 +28 -22
- package/build/server/shared/providerCatalogData.d.ts.map +1 -1
- package/build/server/shared/providerCatalogData.js +22 -10
- 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/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 +23 -1
- 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/scripts/README.md +43 -26
- package/scripts/build-desktop-installer.mjs +15 -0
- 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-meta-cli.sh +8 -0
- package/scripts/linux/provider-cli-common.sh +103 -30
- package/scripts/linux/sync-agent-skills.sh +27 -5
- package/scripts/linux/test-linux-package-smoke.sh +4 -3
- package/scripts/linux/upgrade-cli-tools.sh +1 -1
- 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-meta-cli.sh +8 -0
- package/scripts/macos/provider-cli-common.sh +103 -30
- package/scripts/macos/sync-agent-skills.sh +27 -5
- package/scripts/macos/test-macos-package-smoke.sh +4 -3
- package/scripts/macos/upgrade-cli-tools.sh +1 -1
- package/scripts/package-desktop.mjs +15 -2
- package/scripts/testing/check-usage-app.mts +266 -0
- package/scripts/testing/usage-app-smoke-electron.cjs +10 -0
- package/scripts/testing/usage-app-smoke-renderer.tsx +8 -0
- package/scripts/verify-desktop-app-bundle.mjs +108 -0
- package/scripts/windows/Build-DesktopPackage.ps1 +9 -6
- package/scripts/windows/{Install-Aider.ps1 → Install-MetaCli.ps1} +180 -92
- package/scripts/windows/Install-Ollama.ps1 +4 -1
- package/scripts/windows/Sync-AgentSkills.ps1 +29 -6
- package/scripts/windows/Test-WindowsInstallerSmoke.ps1 +2 -1
- 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/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/scripts/linux/install-aider.sh +0 -8
- package/scripts/macos/install-aider.sh +0 -8
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opaque action tokens for transport inline controls (SPEC-114 FR-13).
|
|
3
|
+
*
|
|
4
|
+
* Telegram `callback_data` is capped at 64 bytes and is fully attacker-editable,
|
|
5
|
+
* so it must never carry entity ids, an actor, or a revision. It carries one
|
|
6
|
+
* random opaque token; every authority decision is made here against
|
|
7
|
+
* server-owned state.
|
|
8
|
+
*/
|
|
9
|
+
import { randomBytes, timingSafeEqual } from 'node:crypto';
|
|
10
|
+
/** Telegram's hard `callback_data` limit. */
|
|
11
|
+
const TELEGRAM_CALLBACK_DATA_MAX_BYTES = 64;
|
|
12
|
+
/** Prefix that routes a callback to the golden path, plus the token itself. */
|
|
13
|
+
const ACTION_TOKEN_PREFIX = 'gp:';
|
|
14
|
+
/** 18 random bytes -> 24 base64url chars; with the prefix that is 27 bytes. */
|
|
15
|
+
const ACTION_TOKEN_RANDOM_BYTES = 18;
|
|
16
|
+
const DEFAULT_TOKEN_TTL_MS = 24 * 60 * 60 * 1000;
|
|
17
|
+
export function encodeTransportWorkCallbackData(token) {
|
|
18
|
+
return `${ACTION_TOKEN_PREFIX}${token}`;
|
|
19
|
+
}
|
|
20
|
+
export function decodeTransportWorkCallbackData(callbackData) {
|
|
21
|
+
if (!callbackData.startsWith(ACTION_TOKEN_PREFIX)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const token = callbackData.slice(ACTION_TOKEN_PREFIX.length);
|
|
25
|
+
return token.length > 0 ? token : null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Guards the Telegram limit at the point of construction rather than at send
|
|
29
|
+
* time, where a silently-dropped keyboard looks like a product bug.
|
|
30
|
+
*/
|
|
31
|
+
export function isTransportWorkCallbackDataWithinLimit(callbackData) {
|
|
32
|
+
return Buffer.byteLength(callbackData, 'utf8') <= TELEGRAM_CALLBACK_DATA_MAX_BYTES;
|
|
33
|
+
}
|
|
34
|
+
function defaultRandomToken() {
|
|
35
|
+
return randomBytes(ACTION_TOKEN_RANDOM_BYTES).toString('base64url');
|
|
36
|
+
}
|
|
37
|
+
/** Constant-time compare so token lookup cannot be probed by timing. */
|
|
38
|
+
function safeEquals(left, right) {
|
|
39
|
+
const leftBuffer = Buffer.from(left, 'utf8');
|
|
40
|
+
const rightBuffer = Buffer.from(right, 'utf8');
|
|
41
|
+
if (leftBuffer.length !== rightBuffer.length) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return timingSafeEqual(leftBuffer, rightBuffer);
|
|
45
|
+
}
|
|
46
|
+
export function createTransportWorkActionTokenStore(options = {}) {
|
|
47
|
+
const now = options.now ?? (() => new Date());
|
|
48
|
+
const ttlMs = options.ttlMs ?? DEFAULT_TOKEN_TTL_MS;
|
|
49
|
+
const randomToken = options.randomToken ?? defaultRandomToken;
|
|
50
|
+
const tokens = new Map((options.store?.listActionTokens() ?? []).map((token) => [token.token, token]));
|
|
51
|
+
function removeExpired() {
|
|
52
|
+
const timestamp = now().getTime();
|
|
53
|
+
for (const [key, token] of tokens) {
|
|
54
|
+
if (timestamp >= Date.parse(token.expiresAt)) {
|
|
55
|
+
tokens.delete(key);
|
|
56
|
+
options.store?.deleteActionToken(key);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function findToken(candidate) {
|
|
61
|
+
const direct = tokens.get(candidate);
|
|
62
|
+
if (direct && safeEquals(direct.token, candidate)) {
|
|
63
|
+
return direct;
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
issue(input) {
|
|
69
|
+
removeExpired();
|
|
70
|
+
const issuedAt = now();
|
|
71
|
+
const token = {
|
|
72
|
+
version: 1,
|
|
73
|
+
token: randomToken(),
|
|
74
|
+
bindingId: input.bindingId,
|
|
75
|
+
ownerActorId: input.ownerActorId,
|
|
76
|
+
externalUserRef: input.externalUserRef,
|
|
77
|
+
workItemId: input.workItemId,
|
|
78
|
+
proposalRevision: input.proposalRevision,
|
|
79
|
+
proposalDigest: input.proposalDigest,
|
|
80
|
+
action: input.action,
|
|
81
|
+
issuedAt: issuedAt.toISOString(),
|
|
82
|
+
expiresAt: new Date(issuedAt.getTime() + ttlMs).toISOString(),
|
|
83
|
+
};
|
|
84
|
+
tokens.set(token.token, token);
|
|
85
|
+
options.store?.putActionToken(token);
|
|
86
|
+
return token;
|
|
87
|
+
},
|
|
88
|
+
resolve(input) {
|
|
89
|
+
const candidate = decodeTransportWorkCallbackData(input.callbackData);
|
|
90
|
+
if (candidate === null) {
|
|
91
|
+
return { status: 'rejected', reason: 'unknown_token' };
|
|
92
|
+
}
|
|
93
|
+
const token = findToken(candidate);
|
|
94
|
+
if (token === null) {
|
|
95
|
+
return { status: 'rejected', reason: 'unknown_token' };
|
|
96
|
+
}
|
|
97
|
+
// Binding and owner are checked before anything else so a cross-binding
|
|
98
|
+
// replay never reveals whether the referenced scope still exists.
|
|
99
|
+
if (token.bindingId !== input.bindingId) {
|
|
100
|
+
return { status: 'rejected', reason: 'cross_binding' };
|
|
101
|
+
}
|
|
102
|
+
if (token.externalUserRef !== input.externalUserRef) {
|
|
103
|
+
return { status: 'rejected', reason: 'unauthorized_owner' };
|
|
104
|
+
}
|
|
105
|
+
if (now().getTime() >= Date.parse(token.expiresAt)) {
|
|
106
|
+
tokens.delete(token.token);
|
|
107
|
+
options.store?.deleteActionToken(token.token);
|
|
108
|
+
return { status: 'rejected', reason: 'expired' };
|
|
109
|
+
}
|
|
110
|
+
// Scope is resolved for the work item the token names, never for whatever
|
|
111
|
+
// the transport guessed.
|
|
112
|
+
const scope = input.resolveScope(token.workItemId);
|
|
113
|
+
if (scope === null) {
|
|
114
|
+
return { status: 'rejected', reason: 'unknown_token' };
|
|
115
|
+
}
|
|
116
|
+
if (scope.proposalRevision !== null
|
|
117
|
+
&& token.proposalRevision !== scope.proposalRevision) {
|
|
118
|
+
return { status: 'rejected', reason: 'stale_revision' };
|
|
119
|
+
}
|
|
120
|
+
if (scope.proposalDigest !== null
|
|
121
|
+
&& token.proposalDigest !== scope.proposalDigest) {
|
|
122
|
+
return { status: 'rejected', reason: 'digest_mismatch' };
|
|
123
|
+
}
|
|
124
|
+
if (!scope.allowedActions.includes(token.action)) {
|
|
125
|
+
return { status: 'rejected', reason: 'action_not_allowed' };
|
|
126
|
+
}
|
|
127
|
+
return { status: 'resolved', token };
|
|
128
|
+
},
|
|
129
|
+
invalidateWorkItem(workItemId) {
|
|
130
|
+
let removed = 0;
|
|
131
|
+
for (const [key, token] of tokens) {
|
|
132
|
+
if (token.workItemId === workItemId) {
|
|
133
|
+
tokens.delete(key);
|
|
134
|
+
removed += 1;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
options.store?.deleteActionTokensForWorkItem(workItemId);
|
|
138
|
+
return removed;
|
|
139
|
+
},
|
|
140
|
+
size() {
|
|
141
|
+
return tokens.size;
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=actionTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionTokens.js","sourceRoot":"","sources":["../../../../../src/platform/transports/work-delivery/actionTokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport work-delivery golden-path contracts (SPEC-114 / ADR-112).
|
|
3
|
+
*
|
|
4
|
+
* These shapes are deliberately transport-neutral and deliberately *not* Cats
|
|
5
|
+
* Core record families. ADR-112 section 1 keeps Work Items, Tasks, Runs,
|
|
6
|
+
* Approvals, Outcomes, Artifacts, and Activities as the only authoritative work
|
|
7
|
+
* ledger; everything here is either additive provenance that rides on existing
|
|
8
|
+
* Core metadata, or transport-owned outbox/receipt state that Core Activities
|
|
9
|
+
* may reference by opaque key.
|
|
10
|
+
*/
|
|
11
|
+
import type { CoreDeliveryGate, CoreDeliveryMode } from '../../../core/types.js';
|
|
12
|
+
/** Transports that can originate golden-path work. Telegram is the first. */
|
|
13
|
+
export type TransportWorkChannel = 'telegram';
|
|
14
|
+
/**
|
|
15
|
+
* Durable source provenance for one transport-originated work request.
|
|
16
|
+
*
|
|
17
|
+
* External references are opaque transport-store keys: SPEC-114 FR-6 and FR-9
|
|
18
|
+
* forbid copying bot tokens or raw credentials into Core, and Core only ever
|
|
19
|
+
* needs to be able to point back at the transport store.
|
|
20
|
+
*/
|
|
21
|
+
export interface TransportWorkOriginV1 {
|
|
22
|
+
version: 1;
|
|
23
|
+
transport: TransportWorkChannel;
|
|
24
|
+
bindingId: string;
|
|
25
|
+
externalConversationRef: string;
|
|
26
|
+
externalUpdateRef: string;
|
|
27
|
+
externalMessageRef: string | null;
|
|
28
|
+
conversationId: string;
|
|
29
|
+
workItemId: string;
|
|
30
|
+
proposalRevision: number;
|
|
31
|
+
proposalDigest: string;
|
|
32
|
+
}
|
|
33
|
+
/** Why a transport message is being sent. Drives ordering and coalescing. */
|
|
34
|
+
export type TransportWorkDeliveryPurpose = 'ack' | 'proposal' | 'progress' | 'decision' | 'result' | 'publish_result';
|
|
35
|
+
/** Lifecycle of one outbox row. `ambiguous` requires explicit owner retry. */
|
|
36
|
+
export type TransportWorkDeliveryState = 'pending' | 'sending' | 'sent' | 'failed' | 'ambiguous';
|
|
37
|
+
/**
|
|
38
|
+
* One durable outbound intent plus its receipt.
|
|
39
|
+
*
|
|
40
|
+
* `idempotencyKey` is the whole point: a duplicate callback, a retry, or a
|
|
41
|
+
* process restart must resolve to this same row rather than send a second
|
|
42
|
+
* Telegram message (SPEC-114 FR-42, FR-45, FR-47).
|
|
43
|
+
*/
|
|
44
|
+
export interface TransportWorkDeliveryV1 {
|
|
45
|
+
version: 1;
|
|
46
|
+
idempotencyKey: string;
|
|
47
|
+
bindingId: string;
|
|
48
|
+
/**
|
|
49
|
+
* Where this message goes, captured at intake.
|
|
50
|
+
*
|
|
51
|
+
* FR-43: the destination is the binding that *originated* the request, not
|
|
52
|
+
* whichever binding a UI happens to have selected when the send fires.
|
|
53
|
+
*/
|
|
54
|
+
externalConversationRef: string;
|
|
55
|
+
workItemId: string;
|
|
56
|
+
taskId: string | null;
|
|
57
|
+
runId: string | null;
|
|
58
|
+
purpose: TransportWorkDeliveryPurpose;
|
|
59
|
+
payload: TransportWorkDeliveryPayload;
|
|
60
|
+
state: TransportWorkDeliveryState;
|
|
61
|
+
externalMessageRef: string | null;
|
|
62
|
+
attemptCount: number;
|
|
63
|
+
lastErrorCode: string | null;
|
|
64
|
+
/** Monotonic per work item; lets a late routine progress send be dropped. */
|
|
65
|
+
sequence: number;
|
|
66
|
+
createdAt: string;
|
|
67
|
+
updatedAt: string;
|
|
68
|
+
sentAt: string | null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The owner-visible golden-path stage.
|
|
72
|
+
*
|
|
73
|
+
* ADR-112 section 2: this is a *projection* with explicit derivation rules, not
|
|
74
|
+
* a second state machine. It is always recomputed from authoritative Core
|
|
75
|
+
* records plus transport receipts, so it can never drift on its own.
|
|
76
|
+
*/
|
|
77
|
+
export type TransportWorkStage = 'received' | 'scope_proposed' | 'execution_authorized' | 'admitted' | 'running' | 'decision_needed' | 'result_ready' | 'publish_authorized' | 'delivered' | 'failed' | 'cancelled';
|
|
78
|
+
/**
|
|
79
|
+
* Bounded owner actions a stage may expose. Labels are localized elsewhere.
|
|
80
|
+
*
|
|
81
|
+
* There is deliberately no `adjust`: it was offered on every proposal while
|
|
82
|
+
* `authorize` refused it. Removing it from the union makes that class of
|
|
83
|
+
* mistake a type error rather than a discipline problem. It returns with the
|
|
84
|
+
* FR-16 clarification loop, together with a handler.
|
|
85
|
+
*/
|
|
86
|
+
export type TransportWorkAction = 'start_work' | 'cancel' | 'approve' | 'deny' | 'retry' | 'resume' | 'publish' | 'view';
|
|
87
|
+
/**
|
|
88
|
+
* The owner-visible content of one outbound message.
|
|
89
|
+
*
|
|
90
|
+
* Deliberately narrow: text plus an optional authenticated Desktop link. FR-44
|
|
91
|
+
* forbids sending local filesystem paths or credentials as though Telegram
|
|
92
|
+
* could reach them, so the renderer never puts a path in here.
|
|
93
|
+
*/
|
|
94
|
+
export interface TransportWorkDeliveryPayload {
|
|
95
|
+
/** Already localized. The transport renders it verbatim. */
|
|
96
|
+
text: string;
|
|
97
|
+
deepLink: string | null;
|
|
98
|
+
/**
|
|
99
|
+
* Inline actions to attach. `label` is localized; `callbackData` is the
|
|
100
|
+
* bounded opaque token and is the only part the external user can echo back.
|
|
101
|
+
*/
|
|
102
|
+
actions: TransportWorkPayloadAction[];
|
|
103
|
+
}
|
|
104
|
+
export interface TransportWorkPayloadAction {
|
|
105
|
+
action: TransportWorkAction;
|
|
106
|
+
callbackData: string;
|
|
107
|
+
label: string;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The execution-relevant scope shown to the owner before anything runs.
|
|
111
|
+
*
|
|
112
|
+
* `revision` and `digest` exist so that a confirmation can be bound to exactly
|
|
113
|
+
* the text the owner saw (FR-17, FR-21). Changing any field below must produce
|
|
114
|
+
* a new digest and invalidate outstanding action tokens.
|
|
115
|
+
*/
|
|
116
|
+
export interface TransportWorkProposalV1 {
|
|
117
|
+
version: 1;
|
|
118
|
+
revision: number;
|
|
119
|
+
digest: string;
|
|
120
|
+
goal: string;
|
|
121
|
+
targetLabel: string;
|
|
122
|
+
projectId: string | null;
|
|
123
|
+
workspacePath: string | null;
|
|
124
|
+
acceptanceCriteria: string[];
|
|
125
|
+
deliveryMode: CoreDeliveryMode;
|
|
126
|
+
deliveryGates: CoreDeliveryGate[];
|
|
127
|
+
sideEffects: string[];
|
|
128
|
+
openQuestion: string | null;
|
|
129
|
+
createdAt: string;
|
|
130
|
+
}
|
|
131
|
+
/** Reason codes shared by Telegram and Desktop readiness surfaces (FR-3). */
|
|
132
|
+
export declare const TRANSPORT_WORK_READINESS_REASONS: readonly ["binding_disabled", "binding_unhealthy", "owner_not_authorized", "cat_not_bound", "execution_target_missing", "capability_profile_missing", "workspace_missing", "workspace_unreachable", "workspace_not_a_repository", "workspace_not_clean", "delivery_policy_unresolved", "background_service_unavailable"];
|
|
133
|
+
export type TransportWorkReadinessReason = (typeof TRANSPORT_WORK_READINESS_REASONS)[number];
|
|
134
|
+
export interface TransportWorkReadinessBlocker {
|
|
135
|
+
reason: TransportWorkReadinessReason;
|
|
136
|
+
/** Stable remediation key resolved through product i18n, never raw copy. */
|
|
137
|
+
remediationKey: string;
|
|
138
|
+
/** Deep link path for Desktop remediation. Never carries a secret. */
|
|
139
|
+
remediationPath: string | null;
|
|
140
|
+
}
|
|
141
|
+
export interface TransportWorkReadiness {
|
|
142
|
+
ready: boolean;
|
|
143
|
+
blockers: TransportWorkReadinessBlocker[];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* A bounded opaque action token (FR-13).
|
|
147
|
+
*
|
|
148
|
+
* Only `token` ever reaches `callback_data`; every field below is resolved
|
|
149
|
+
* server-side so a forged or replayed button cannot widen its own authority.
|
|
150
|
+
*/
|
|
151
|
+
export interface TransportWorkActionTokenV1 {
|
|
152
|
+
version: 1;
|
|
153
|
+
token: string;
|
|
154
|
+
bindingId: string;
|
|
155
|
+
ownerActorId: string;
|
|
156
|
+
externalUserRef: string;
|
|
157
|
+
workItemId: string;
|
|
158
|
+
proposalRevision: number;
|
|
159
|
+
proposalDigest: string;
|
|
160
|
+
action: TransportWorkAction;
|
|
161
|
+
issuedAt: string;
|
|
162
|
+
expiresAt: string;
|
|
163
|
+
}
|
|
164
|
+
export type TransportWorkActionTokenRejection = 'unknown_token' | 'expired' | 'stale_revision' | 'digest_mismatch' | 'cross_binding' | 'unauthorized_owner' | 'action_not_allowed';
|
|
165
|
+
export type TransportWorkActionTokenResolution = {
|
|
166
|
+
status: 'resolved';
|
|
167
|
+
token: TransportWorkActionTokenV1;
|
|
168
|
+
} | {
|
|
169
|
+
status: 'rejected';
|
|
170
|
+
reason: TransportWorkActionTokenRejection;
|
|
171
|
+
};
|
|
172
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../../src/platform/transports/work-delivery/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport work-delivery golden-path contracts (SPEC-114 / ADR-112).
|
|
3
|
+
*
|
|
4
|
+
* These shapes are deliberately transport-neutral and deliberately *not* Cats
|
|
5
|
+
* Core record families. ADR-112 section 1 keeps Work Items, Tasks, Runs,
|
|
6
|
+
* Approvals, Outcomes, Artifacts, and Activities as the only authoritative work
|
|
7
|
+
* ledger; everything here is either additive provenance that rides on existing
|
|
8
|
+
* Core metadata, or transport-owned outbox/receipt state that Core Activities
|
|
9
|
+
* may reference by opaque key.
|
|
10
|
+
*/
|
|
11
|
+
/** Reason codes shared by Telegram and Desktop readiness surfaces (FR-3). */
|
|
12
|
+
export const TRANSPORT_WORK_READINESS_REASONS = [
|
|
13
|
+
'binding_disabled',
|
|
14
|
+
'binding_unhealthy',
|
|
15
|
+
'owner_not_authorized',
|
|
16
|
+
'cat_not_bound',
|
|
17
|
+
'execution_target_missing',
|
|
18
|
+
'capability_profile_missing',
|
|
19
|
+
'workspace_missing',
|
|
20
|
+
'workspace_unreachable',
|
|
21
|
+
'workspace_not_a_repository',
|
|
22
|
+
'workspace_not_clean',
|
|
23
|
+
'delivery_policy_unresolved',
|
|
24
|
+
'background_service_unavailable',
|
|
25
|
+
];
|
|
26
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../../../src/platform/transports/work-delivery/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmKH,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,kBAAkB;IAClB,mBAAmB;IACnB,sBAAsB;IACtB,eAAe;IACf,0BAA0B;IAC1B,4BAA4B;IAC5B,mBAAmB;IACnB,uBAAuB;IACvB,4BAA4B;IAC5B,qBAAqB;IACrB,4BAA4B;IAC5B,gCAAgC;CACxB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Publish-gate resolution for the golden path (SPEC-114 FR-40..FR-41).
|
|
3
|
+
*
|
|
4
|
+
* Execution authorization and publication authorization are separate risk
|
|
5
|
+
* boundaries (ADR-112 section 3). Confirming "Start work" says the owner
|
|
6
|
+
* accepted the scope; it never says they accepted a side effect that only
|
|
7
|
+
* became visible while the work ran.
|
|
8
|
+
*/
|
|
9
|
+
import type { CoreDeliveryGate, CoreDeliveryMode } from '../../../core/types.js';
|
|
10
|
+
export interface ResolveOutstandingDeliveryGatesInput {
|
|
11
|
+
deliveryMode: CoreDeliveryMode;
|
|
12
|
+
/** Gates from the effective Core delivery policy. */
|
|
13
|
+
effectiveGates: readonly CoreDeliveryGate[];
|
|
14
|
+
/** Gates an owner has already decided for this exact proposal revision. */
|
|
15
|
+
satisfiedGates: readonly CoreDeliveryGate[];
|
|
16
|
+
/** True when the result would publish an Artifact beyond the local host. */
|
|
17
|
+
publishesPublicArtifact: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Returns the gates that still block publication.
|
|
21
|
+
*
|
|
22
|
+
* An empty result means the golden path may proceed to delivery; it does not
|
|
23
|
+
* mean governance was skipped, only that every applicable gate is satisfied.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveOutstandingDeliveryGates(input: ResolveOutstandingDeliveryGatesInput): CoreDeliveryGate[];
|
|
26
|
+
/**
|
|
27
|
+
* True when the mode may deliver without a second owner event, given no
|
|
28
|
+
* outstanding gates. `artifact_only` and `commit_only` are local-only, which is
|
|
29
|
+
* exactly why they are the two proof modes for the first slice.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isFirstSliceDeliveryMode(mode: CoreDeliveryMode): boolean;
|
|
32
|
+
//# sourceMappingURL=deliveryGates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliveryGates.d.ts","sourceRoot":"","sources":["../../../../../src/platform/transports/work-delivery/deliveryGates.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAYjF,MAAM,WAAW,oCAAoC;IACnD,YAAY,EAAE,gBAAgB,CAAC;IAC/B,qDAAqD;IACrD,cAAc,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,2EAA2E;IAC3E,cAAc,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,4EAA4E;IAC5E,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,oCAAoC,GAC1C,gBAAgB,EAAE,CAepB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAExE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Publish-gate resolution for the golden path (SPEC-114 FR-40..FR-41).
|
|
3
|
+
*
|
|
4
|
+
* Execution authorization and publication authorization are separate risk
|
|
5
|
+
* boundaries (ADR-112 section 3). Confirming "Start work" says the owner
|
|
6
|
+
* accepted the scope; it never says they accepted a side effect that only
|
|
7
|
+
* became visible while the work ran.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Modes whose external side effects always need a separate result-preview
|
|
11
|
+
* authorization in the first slice, whatever the configured gates say.
|
|
12
|
+
*/
|
|
13
|
+
const HIGH_SIDE_EFFECT_MODES = new Set([
|
|
14
|
+
'push_branch',
|
|
15
|
+
'pr_with_checks',
|
|
16
|
+
'deploy_preview',
|
|
17
|
+
]);
|
|
18
|
+
/**
|
|
19
|
+
* Returns the gates that still block publication.
|
|
20
|
+
*
|
|
21
|
+
* An empty result means the golden path may proceed to delivery; it does not
|
|
22
|
+
* mean governance was skipped, only that every applicable gate is satisfied.
|
|
23
|
+
*/
|
|
24
|
+
export function resolveOutstandingDeliveryGates(input) {
|
|
25
|
+
const required = new Set(input.effectiveGates);
|
|
26
|
+
if (HIGH_SIDE_EFFECT_MODES.has(input.deliveryMode)) {
|
|
27
|
+
required.add('owner_approval_required');
|
|
28
|
+
}
|
|
29
|
+
if (input.publishesPublicArtifact) {
|
|
30
|
+
required.add('publish_artifact_required');
|
|
31
|
+
}
|
|
32
|
+
for (const satisfied of input.satisfiedGates) {
|
|
33
|
+
required.delete(satisfied);
|
|
34
|
+
}
|
|
35
|
+
return [...required];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* True when the mode may deliver without a second owner event, given no
|
|
39
|
+
* outstanding gates. `artifact_only` and `commit_only` are local-only, which is
|
|
40
|
+
* exactly why they are the two proof modes for the first slice.
|
|
41
|
+
*/
|
|
42
|
+
export function isFirstSliceDeliveryMode(mode) {
|
|
43
|
+
return mode === 'artifact_only' || mode === 'commit_only';
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=deliveryGates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliveryGates.js","sourceRoot":"","sources":["../../../../../src/platform/transports/work-delivery/deliveryGates.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;GAGG;AACH,MAAM,sBAAsB,GAAkC,IAAI,GAAG,CAAC;IACpE,aAAa;IACb,gBAAgB;IAChB,gBAAgB;CACjB,CAAC,CAAC;AAYH;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAC7C,KAA2C;IAE3C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAmB,KAAK,CAAC,cAAc,CAAC,CAAC;IAEjE,IAAI,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACnD,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAClC,QAAQ,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC7C,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAsB;IAC7D,OAAO,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,aAAa,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inbound request classification (SPEC-114 FR-48).
|
|
3
|
+
*
|
|
4
|
+
* Attachment ingestion is out of scope for the first slice. The failure mode
|
|
5
|
+
* this guards against is subtle and worse than an outright error: handing the
|
|
6
|
+
* agent a *filename* as though it were the file's content, which produces
|
|
7
|
+
* confident work about a document nobody read.
|
|
8
|
+
*/
|
|
9
|
+
export type TransportWorkInboundKind = 'work_command' | 'attachment_unsupported' | 'empty' | 'not_work_request';
|
|
10
|
+
export interface TransportWorkInboundClassification {
|
|
11
|
+
kind: TransportWorkInboundKind;
|
|
12
|
+
/** Present only for `work_command`: the goal text after `/work`. */
|
|
13
|
+
goal: string | null;
|
|
14
|
+
/** Stable message key for the owner-facing explanation, when refused. */
|
|
15
|
+
refusalKey: string | null;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* True when the owner is addressing the golden path at all.
|
|
19
|
+
*
|
|
20
|
+
* The bridge gates on this before acting on a classification, so an ordinary
|
|
21
|
+
* chat message that happens to carry a photo keeps its existing behaviour
|
|
22
|
+
* instead of being refused by a feature it never invoked.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isTransportWorkRequestText(text: string | null): boolean;
|
|
25
|
+
export interface ClassifyTransportWorkInboundInput {
|
|
26
|
+
text: string | null;
|
|
27
|
+
/** Attachment kinds present on the update, if any. */
|
|
28
|
+
attachmentKinds: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
export declare function classifyTransportWorkInbound(input: ClassifyTransportWorkInboundInput): TransportWorkInboundClassification;
|
|
31
|
+
//# sourceMappingURL=inboundClassification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inboundClassification.d.ts","sourceRoot":"","sources":["../../../../../src/platform/transports/work-delivery/inboundClassification.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,wBAAwB,GAChC,cAAc,GACd,wBAAwB,GACxB,OAAO,GACP,kBAAkB,CAAC;AAEvB,MAAM,WAAW,kCAAkC;IACjD,IAAI,EAAE,wBAAwB,CAAC;IAC/B,oEAAoE;IACpE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,yEAAyE;IACzE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAEvE;AAED,MAAM,WAAW,iCAAiC;IAChD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,sDAAsD;IACtD,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iCAAiC,GACvC,kCAAkC,CAoCpC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inbound request classification (SPEC-114 FR-48).
|
|
3
|
+
*
|
|
4
|
+
* Attachment ingestion is out of scope for the first slice. The failure mode
|
|
5
|
+
* this guards against is subtle and worse than an outright error: handing the
|
|
6
|
+
* agent a *filename* as though it were the file's content, which produces
|
|
7
|
+
* confident work about a document nobody read.
|
|
8
|
+
*/
|
|
9
|
+
const WORK_COMMAND = '/work';
|
|
10
|
+
/**
|
|
11
|
+
* True when the owner is addressing the golden path at all.
|
|
12
|
+
*
|
|
13
|
+
* The bridge gates on this before acting on a classification, so an ordinary
|
|
14
|
+
* chat message that happens to carry a photo keeps its existing behaviour
|
|
15
|
+
* instead of being refused by a feature it never invoked.
|
|
16
|
+
*/
|
|
17
|
+
export function isTransportWorkRequestText(text) {
|
|
18
|
+
return (text ?? '').trim().toLowerCase().startsWith(WORK_COMMAND);
|
|
19
|
+
}
|
|
20
|
+
export function classifyTransportWorkInbound(input) {
|
|
21
|
+
const text = (input.text ?? '').trim();
|
|
22
|
+
const hasAttachment = input.attachmentKinds.length > 0;
|
|
23
|
+
if (hasAttachment && text === '') {
|
|
24
|
+
return {
|
|
25
|
+
kind: 'attachment_unsupported',
|
|
26
|
+
goal: null,
|
|
27
|
+
refusalKey: 'workDelivery.inbound.attachmentNotIngested',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (!text.toLowerCase().startsWith(WORK_COMMAND)) {
|
|
31
|
+
return {
|
|
32
|
+
kind: text === '' ? 'empty' : 'not_work_request',
|
|
33
|
+
goal: null,
|
|
34
|
+
refusalKey: null,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const goal = text.slice(WORK_COMMAND.length).trim();
|
|
38
|
+
if (goal === '') {
|
|
39
|
+
return { kind: 'empty', goal: null, refusalKey: 'workDelivery.inbound.goalRequired' };
|
|
40
|
+
}
|
|
41
|
+
// A `/work` caption on an attachment is still a text request; the caption is
|
|
42
|
+
// the goal and the attachment is explicitly not ingested.
|
|
43
|
+
if (hasAttachment) {
|
|
44
|
+
return {
|
|
45
|
+
kind: 'attachment_unsupported',
|
|
46
|
+
goal: null,
|
|
47
|
+
refusalKey: 'workDelivery.inbound.attachmentNotIngested',
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return { kind: 'work_command', goal, refusalKey: null };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=inboundClassification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inboundClassification.js","sourceRoot":"","sources":["../../../../../src/platform/transports/work-delivery/inboundClassification.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,MAAM,YAAY,GAAG,OAAO,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAmB;IAC5D,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACpE,CAAC;AAQD,MAAM,UAAU,4BAA4B,CAC1C,KAAwC;IAExC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvD,IAAI,aAAa,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACjC,OAAO;YACL,IAAI,EAAE,wBAAwB;YAC9B,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,4CAA4C;SACzD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjD,OAAO;YACL,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB;YAChD,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,mCAAmC,EAAE,CAAC;IACxF,CAAC;IAED,6EAA6E;IAC7E,0DAA0D;IAC1D,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO;YACL,IAAI,EAAE,wBAAwB;YAC9B,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,4CAA4C;SACzD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable transport delivery outbox (SPEC-114 FR-32..FR-33, FR-42..FR-47).
|
|
3
|
+
*
|
|
4
|
+
* This is a narrow, replaceable platform interface rather than a new Core
|
|
5
|
+
* record family (ADR-112 section 1). Production supplies a transport state
|
|
6
|
+
* store; isolated tests may keep using the in-memory form.
|
|
7
|
+
*
|
|
8
|
+
* Three invariants earn this module its existence:
|
|
9
|
+
*
|
|
10
|
+
* 1. one `idempotencyKey` sends at most one external message, across duplicate
|
|
11
|
+
* callbacks, retries, and process restarts;
|
|
12
|
+
* 2. messages for one work item are sent in causal order;
|
|
13
|
+
* 3. a routine progress message that lost its race against a newer decision or
|
|
14
|
+
* terminal message is dropped rather than delivered late.
|
|
15
|
+
*/
|
|
16
|
+
import type { TransportWorkDeliveryPayload, TransportWorkDeliveryPurpose, TransportWorkDeliveryV1 } from './contracts.js';
|
|
17
|
+
import type { TransportWorkTelemetry } from './telemetry.js';
|
|
18
|
+
import type { TransportWorkStateStore } from './stateStore.js';
|
|
19
|
+
export interface TransportWorkOutboxEnqueueInput {
|
|
20
|
+
idempotencyKey: string;
|
|
21
|
+
bindingId: string;
|
|
22
|
+
externalConversationRef: string;
|
|
23
|
+
workItemId: string;
|
|
24
|
+
taskId?: string | null;
|
|
25
|
+
runId?: string | null;
|
|
26
|
+
purpose: TransportWorkDeliveryPurpose;
|
|
27
|
+
payload: TransportWorkDeliveryPayload;
|
|
28
|
+
}
|
|
29
|
+
export interface TransportWorkOutboxSendResult {
|
|
30
|
+
ok: boolean;
|
|
31
|
+
externalMessageRef: string | null;
|
|
32
|
+
errorCode?: string | null;
|
|
33
|
+
/**
|
|
34
|
+
* Set when the transport call failed in a way that cannot prove whether the
|
|
35
|
+
* message was delivered (timeout, aborted socket). FR-47 keeps such a row
|
|
36
|
+
* out of `failed` so recovery reconciles instead of double-sending.
|
|
37
|
+
*/
|
|
38
|
+
ambiguous?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export type TransportWorkOutboxSender = (row: TransportWorkDeliveryV1) => Promise<TransportWorkOutboxSendResult>;
|
|
41
|
+
export type TransportWorkOutboxFlushOutcome = 'sent' | 'already_sent' | 'suppressed_stale' | 'failed' | 'ambiguous';
|
|
42
|
+
export interface TransportWorkOutboxFlushResult {
|
|
43
|
+
outcome: TransportWorkOutboxFlushOutcome;
|
|
44
|
+
row: TransportWorkDeliveryV1;
|
|
45
|
+
}
|
|
46
|
+
export interface TransportWorkOutbox {
|
|
47
|
+
/** Idempotent: an existing key returns the stored row untouched. */
|
|
48
|
+
enqueue(input: TransportWorkOutboxEnqueueInput): TransportWorkDeliveryV1;
|
|
49
|
+
flush(idempotencyKey: string): Promise<TransportWorkOutboxFlushResult>;
|
|
50
|
+
/** Explicit owner retry; this is the only operation allowed to re-drive ambiguity. */
|
|
51
|
+
retry(idempotencyKey: string): Promise<TransportWorkOutboxFlushResult>;
|
|
52
|
+
/** Flushes every non-terminal row for a work item, in sequence order. */
|
|
53
|
+
flushWorkItem(workItemId: string): Promise<TransportWorkOutboxFlushResult[]>;
|
|
54
|
+
/** Startup recovery sends only rows that were safely pending before a crash. */
|
|
55
|
+
recoverPending(): Promise<TransportWorkOutboxFlushResult[]>;
|
|
56
|
+
get(idempotencyKey: string): TransportWorkDeliveryV1 | null;
|
|
57
|
+
list(workItemId: string): TransportWorkDeliveryV1[];
|
|
58
|
+
/** True once a `result` or `publish_result` row reached `sent`. */
|
|
59
|
+
hasDeliveredResult(workItemId: string): boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface TransportWorkOutboxOptions {
|
|
62
|
+
send: TransportWorkOutboxSender;
|
|
63
|
+
now?: () => Date;
|
|
64
|
+
/** Seeds durable rows recovered from disk after a restart. */
|
|
65
|
+
initialRows?: readonly TransportWorkDeliveryV1[];
|
|
66
|
+
/** Optional counters. Absent means the path runs unmeasured, never broken. */
|
|
67
|
+
telemetry?: TransportWorkTelemetry;
|
|
68
|
+
/** Durable storage for intents, attempts, and receipts. */
|
|
69
|
+
store?: TransportWorkStateStore;
|
|
70
|
+
}
|
|
71
|
+
export declare function createTransportWorkOutbox(options: TransportWorkOutboxOptions): TransportWorkOutbox;
|
|
72
|
+
/**
|
|
73
|
+
* Stable idempotency key for one outbound message.
|
|
74
|
+
*
|
|
75
|
+
* Every input is either an authoritative id or an owner-visible revision, so
|
|
76
|
+
* the same logical message recomputes the same key after a restart.
|
|
77
|
+
*/
|
|
78
|
+
export declare function buildTransportWorkDeliveryKey(input: {
|
|
79
|
+
bindingId: string;
|
|
80
|
+
workItemId: string;
|
|
81
|
+
purpose: TransportWorkDeliveryPurpose;
|
|
82
|
+
discriminator: string;
|
|
83
|
+
}): string;
|
|
84
|
+
//# sourceMappingURL=outbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../../../../../src/platform/transports/work-delivery/outbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,4BAA4B,EAC5B,4BAA4B,EAE5B,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAc/D,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,4BAA4B,CAAC;CACvC;AAED,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,OAAO,CAAC;IACZ,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,yBAAyB,GAAG,CACtC,GAAG,EAAE,uBAAuB,KACzB,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAE5C,MAAM,MAAM,+BAA+B,GACvC,MAAM,GACN,cAAc,GACd,kBAAkB,GAClB,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,+BAA+B,CAAC;IACzC,GAAG,EAAE,uBAAuB,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,OAAO,CAAC,KAAK,EAAE,+BAA+B,GAAG,uBAAuB,CAAC;IACzE,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACvE,sFAAsF;IACtF,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACvE,yEAAyE;IACzE,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,EAAE,CAAC,CAAC;IAC7E,gFAAgF;IAChF,cAAc,IAAI,OAAO,CAAC,8BAA8B,EAAE,CAAC,CAAC;IAC5D,GAAG,CAAC,cAAc,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAAC;IACpD,mEAAmE;IACnE,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;CACjD;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,yBAAyB,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACjD,8EAA8E;IAC9E,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,2DAA2D;IAC3D,KAAK,CAAC,EAAE,uBAAuB,CAAC;CACjC;AAMD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GAClC,mBAAmB,CA0PrB;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,4BAA4B,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAQT"}
|