@knpkv/control-center 0.3.0 → 0.5.0
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/README.md +70 -17
- package/dist/client/.vite/manifest.json +223 -178
- package/dist/client/assets/{ActiveWorkPage-DJQgGZeV.js → ActiveWorkPage-g2-Jyavo.js} +2 -2
- package/dist/client/assets/{ActiveWorkPage-DJQgGZeV.js.map → ActiveWorkPage-g2-Jyavo.js.map} +1 -1
- package/dist/client/assets/AgentPage-B6GQdZAs.css +1 -0
- package/dist/client/assets/AgentPage-DmVsEe13.js +6 -0
- package/dist/client/assets/AgentPage-DmVsEe13.js.map +1 -0
- package/dist/client/assets/AtlassianOAuthCallbackPage-C8u9ItMj.js +2 -0
- package/dist/client/assets/{AtlassianOAuthCallbackPage-D1F1xE_2.js.map → AtlassianOAuthCallbackPage-C8u9ItMj.js.map} +1 -1
- package/dist/client/assets/AuthorizedSharePage-CVBJ1NTm.js +2 -0
- package/dist/client/assets/AuthorizedSharePage-CVBJ1NTm.js.map +1 -0
- package/dist/client/assets/BrowserCrypto-3BoTVFdl.js +2 -0
- package/dist/client/assets/{BrowserCrypto-DVWR7DFd.js.map → BrowserCrypto-3BoTVFdl.js.map} +1 -1
- package/dist/client/assets/BrowserSessionHydrator-CpZnNm4X.js +2 -0
- package/dist/client/assets/BrowserSessionHydrator-CpZnNm4X.js.map +1 -0
- package/dist/client/assets/CommandSearch-DUeRRbV2.js +2 -0
- package/dist/client/assets/{CommandSearch-CP_QCbkm.js.map → CommandSearch-DUeRRbV2.js.map} +1 -1
- package/dist/client/assets/ItemsPage-BF2ZkSzh.js +2 -0
- package/dist/client/assets/{ItemsPage-BGFUkRL2.js.map → ItemsPage-BF2ZkSzh.js.map} +1 -1
- package/dist/client/assets/{PairPage-DIgzx0K2.js → PairPage-CkaZltHd.js} +2 -2
- package/dist/client/assets/{PairPage-DIgzx0K2.js.map → PairPage-CkaZltHd.js.map} +1 -1
- package/dist/client/assets/PortfolioOverview-CEUHJmGC.js +2 -0
- package/dist/client/assets/PortfolioOverview-CEUHJmGC.js.map +1 -0
- package/dist/client/assets/PullRequestReviewPanel-D1IpvHe2.js +6 -0
- package/dist/client/assets/PullRequestReviewPanel-D1IpvHe2.js.map +1 -0
- package/dist/client/assets/ReleaseRoute-BuQybrsg.js +2 -0
- package/dist/client/assets/{ReleaseRoute-DXJ8Jg60.js.map → ReleaseRoute-BuQybrsg.js.map} +1 -1
- package/dist/client/assets/ReleaseWorkset-BclY0Nvj.js +2 -0
- package/dist/client/assets/ReleaseWorkset-BclY0Nvj.js.map +1 -0
- package/dist/client/assets/ServicesPage-hw5Ee69-.js +2 -0
- package/dist/client/assets/ServicesPage-hw5Ee69-.js.map +1 -0
- package/dist/client/assets/TimelinePage-Cj3V98uI.js +2 -0
- package/dist/client/assets/TimelinePage-Cj3V98uI.js.map +1 -0
- package/dist/client/assets/WorkspaceEntityLink-C_rc8lxi.js +2 -0
- package/dist/client/assets/{WorkspaceEntityLink-AdZ_T-Wk.js.map → WorkspaceEntityLink-C_rc8lxi.js.map} +1 -1
- package/dist/client/assets/WorkspaceEntityRoute-DLLT6fY0.css +1 -0
- package/dist/client/assets/WorkspaceEntityRoute-kbnrQ_lY.js +14 -0
- package/dist/client/assets/WorkspaceEntityRoute-kbnrQ_lY.js.map +1 -0
- package/dist/client/assets/WorkspaceHomeLink-DeYYLEsH.js +2 -0
- package/dist/client/assets/{WorkspaceHomeLink-XbKSPths.js.map → WorkspaceHomeLink-DeYYLEsH.js.map} +1 -1
- package/dist/client/assets/{WorkspacePullRequestDetails-BErJ5bk8.js → WorkspacePullRequestDetails-CizqydjN.js} +3 -3
- package/dist/client/assets/WorkspacePullRequestDetails-CizqydjN.js.map +1 -0
- package/dist/client/assets/{WorkspaceReleaseLayout-cfboC5Qh.js → WorkspaceReleaseLayout-CXAQUhkh.js} +2 -2
- package/dist/client/assets/{WorkspaceReleaseLayout-cfboC5Qh.js.map → WorkspaceReleaseLayout-CXAQUhkh.js.map} +1 -1
- package/dist/client/assets/{WorkspaceRichText-D1M637Ff.js → WorkspaceRichText-CCOciILO.js} +2 -2
- package/dist/client/assets/WorkspaceRichText-CCOciILO.js.map +1 -0
- package/dist/client/assets/WorkspaceSettingsPage-GoBfQzBx.css +1 -0
- package/dist/client/assets/WorkspaceSettingsPage-JG-pN_CA.js +2 -0
- package/dist/client/assets/WorkspaceSettingsPage-JG-pN_CA.js.map +1 -0
- package/dist/client/assets/agent-api-Dl9TuGOJ.js +19 -0
- package/dist/client/assets/agent-api-Dl9TuGOJ.js.map +1 -0
- package/dist/client/assets/atlassianOAuthSetupIntentStorage-DE4ySCTb.js +2 -0
- package/dist/client/assets/atlassianOAuthSetupIntentStorage-DE4ySCTb.js.map +1 -0
- package/dist/client/assets/authenticatedMutationClient-DdowMjyo.js +2 -0
- package/dist/client/assets/{authenticatedMutationClient-Ccwguc3i.js.map → authenticatedMutationClient-DdowMjyo.js.map} +1 -1
- package/dist/client/assets/authorizedShareTransport-CnclcYai.js +2 -0
- package/dist/client/assets/{authorizedShareTransport-DZHgFEkh.js.map → authorizedShareTransport-CnclcYai.js.map} +1 -1
- package/dist/client/assets/client-Dq_XQE_l.js +5 -0
- package/dist/client/assets/client-Dq_XQE_l.js.map +1 -0
- package/dist/client/assets/confluenceTasks-DtKq8_eU.js +5 -0
- package/dist/client/assets/confluenceTasks-DtKq8_eU.js.map +1 -0
- package/dist/client/assets/connectionTestTransport-CPK98z7H.js +2 -0
- package/dist/client/assets/connectionTestTransport-CPK98z7H.js.map +1 -0
- package/dist/client/assets/index-zVjlBm9l.js +11 -0
- package/dist/client/assets/index-zVjlBm9l.js.map +1 -0
- package/dist/client/assets/{patterns-5N-j-AD2-BwypFm-e.js → patterns-5N-j-AD2-DLfaGePK.js} +2 -2
- package/dist/client/assets/{patterns-5N-j-AD2-BwypFm-e.js.map → patterns-5N-j-AD2-DLfaGePK.js.map} +1 -1
- package/dist/client/assets/{presentPortfolio-D3ZIcnqt.js → presentPortfolio-DLEq-vEz.js} +2 -2
- package/dist/client/assets/presentPortfolio-DLEq-vEz.js.map +1 -0
- package/dist/client/assets/{presentWorkspaceItems-Bmh4oEbH.js → presentWorkspaceItems-BOY3FbhO.js} +2 -2
- package/dist/client/assets/{presentWorkspaceItems-Bmh4oEbH.js.map → presentWorkspaceItems-BOY3FbhO.js.map} +1 -1
- package/dist/client/assets/{pullRequestReviewFailures-S74M-fOk.js → pullRequestReviewFailures-CyjTVnSX.js} +2 -2
- package/dist/client/assets/{pullRequestReviewFailures-S74M-fOk.js.map → pullRequestReviewFailures-CyjTVnSX.js.map} +1 -1
- package/dist/client/assets/pullRequestReviewThreadReplay-CXHspFTr.js +2 -0
- package/dist/client/assets/pullRequestReviewThreadReplay-CXHspFTr.js.map +1 -0
- package/dist/client/assets/releaseAgentTransport-DaO4svPu.js +2 -0
- package/dist/client/assets/releaseAgentTransport-DaO4svPu.js.map +1 -0
- package/dist/client/assets/releaseRoutes-B4ciNOJj.js +2 -0
- package/dist/client/assets/{releaseRoutes-BCuIdZyA.js.map → releaseRoutes-B4ciNOJj.js.map} +1 -1
- package/dist/client/assets/serviceOnboarding-D0FmodRi.js +2 -0
- package/dist/client/assets/{serviceOnboarding-Jg_0yNjf.js.map → serviceOnboarding-D0FmodRi.js.map} +1 -1
- package/dist/client/assets/{useWorkspaceDefaultLanding-CzlDdEF-.js → useWorkspaceDefaultLanding-BaQdg0sY.js} +3 -3
- package/dist/client/assets/{useWorkspaceDefaultLanding-CzlDdEF-.js.map → useWorkspaceDefaultLanding-BaQdg0sY.js.map} +1 -1
- package/dist/client/assets/{useWorkspaceItems-Cd3MPke2.js → useWorkspaceItems-B-7JHtm0.js} +2 -2
- package/dist/client/assets/{useWorkspaceItems-Cd3MPke2.js.map → useWorkspaceItems-B-7JHtm0.js.map} +1 -1
- package/dist/client/assets/workspaceEntityRoutes-DqqDa0AB.js +2 -0
- package/dist/client/assets/workspaceEntityRoutes-DqqDa0AB.js.map +1 -0
- package/dist/client/assets/workspaceScrollCapture-BYNfR2wo.js +2 -0
- package/dist/client/assets/workspaceScrollCapture-BYNfR2wo.js.map +1 -0
- package/dist/client/assets/workspaceSettingsTransport-Br4lBmvS.js +2 -0
- package/dist/client/assets/{workspaceSettingsTransport-CZWYL5T7.js.map → workspaceSettingsTransport-Br4lBmvS.js.map} +1 -1
- package/dist/client/build-graph.json +115 -0
- package/dist/client/index.html +1 -1
- package/dist/server/api/agent.d.ts +575 -44
- package/dist/server/api/agent.d.ts.map +1 -1
- package/dist/server/api/deliveryGraph.d.ts +474 -454
- package/dist/server/api/deliveryGraph.d.ts.map +1 -1
- package/dist/server/api/index.d.ts +2 -2
- package/dist/server/api/index.d.ts.map +1 -1
- package/dist/server/api/index.js +4 -4
- package/dist/server/api/liveEvents.d.ts +20 -0
- package/dist/server/api/liveEvents.d.ts.map +1 -1
- package/dist/server/api/portfolio.d.ts +23 -0
- package/dist/server/api/portfolio.d.ts.map +1 -1
- package/dist/server/api/session.d.ts +23 -1
- package/dist/server/api/session.d.ts.map +1 -1
- package/dist/server/api/shares.d.ts +4 -2
- package/dist/server/api/shares.d.ts.map +1 -1
- package/dist/server/assets/{BindConfig-DIsf2Rnh.js → BindConfig-DAASchDn.js} +2405 -322
- package/dist/server/assets/BindConfig-DAASchDn.js.map +1 -0
- package/dist/server/assets/{CodePipelineStateDecoder-CVf1A2zG.js → CodePipelineStateDecoder-CNiFRgSi.js} +2 -2
- package/dist/server/assets/{CodePipelineStateDecoder-CVf1A2zG.js.map → CodePipelineStateDecoder-CNiFRgSi.js.map} +1 -1
- package/dist/server/assets/{agent-CyZ40zs1.js → agent-xQhAQXly.js} +181 -11
- package/dist/server/assets/agent-xQhAQXly.js.map +1 -0
- package/dist/server/assets/{controlCenterApi-ZUX3Y-LE.js → controlCenterApi-DNXK7MT1.js} +6 -5
- package/dist/server/assets/controlCenterApi-DNXK7MT1.js.map +1 -0
- package/dist/server/assets/{descriptor-CKtTnhef.js → descriptor-CCvNzSZL.js} +10 -10
- package/dist/server/assets/{descriptor-CKtTnhef.js.map → descriptor-CCvNzSZL.js.map} +1 -1
- package/dist/server/assets/{failures-mgYDkUZy.js → failures-CesHLYbN.js} +2 -2
- package/dist/server/assets/{failures-mgYDkUZy.js.map → failures-CesHLYbN.js.map} +1 -1
- package/dist/server/assets/{firstPartyServices-D7b8BOek.js → firstPartyServices-Cdzjcs2H.js} +2 -2
- package/dist/server/assets/{firstPartyServices-D7b8BOek.js.map → firstPartyServices-Cdzjcs2H.js.map} +1 -1
- package/dist/server/assets/{manualPluginSynchronization-DFlhKvav.js → manualPluginSynchronization-DFIeUHP9.js} +6 -5
- package/dist/server/assets/manualPluginSynchronization-DFIeUHP9.js.map +1 -0
- package/dist/server/assets/{plugins-D__oMDpI.js → plugins-DiPrfzV8.js} +2 -2
- package/dist/server/assets/{plugins-D__oMDpI.js.map → plugins-DiPrfzV8.js.map} +1 -1
- package/dist/server/assets/{readiness-BhA-Nr9c.js → readiness-31Mqc-9H.js} +3 -3
- package/dist/server/assets/{readiness-BhA-Nr9c.js.map → readiness-31Mqc-9H.js.map} +1 -1
- package/dist/server/assets/{relationshipInferenceMaterialization-DYBcaWhQ.js → relationshipInferenceMaterialization-Dyix96px.js} +1158 -169
- package/dist/server/assets/relationshipInferenceMaterialization-Dyix96px.js.map +1 -0
- package/dist/server/assets/{workspaceSettings-BE713Oe8.js → workspaceSettings-sv8h_h2P.js} +2787 -2700
- package/dist/server/assets/workspaceSettings-sv8h_h2P.js.map +1 -0
- package/dist/server/build-graph.json +144 -4
- package/dist/server/domain/actors.d.ts +12 -12
- package/dist/server/domain/confluenceTasks.d.ts +27 -0
- package/dist/server/domain/confluenceTasks.d.ts.map +1 -0
- package/dist/server/domain/deliveryGraph.d.ts +51 -49
- package/dist/server/domain/deliveryGraph.d.ts.map +1 -1
- package/dist/server/domain/governedAction/bindings.d.ts +26 -12
- package/dist/server/domain/governedAction/bindings.d.ts.map +1 -1
- package/dist/server/domain/governedAction/lifecycle.d.ts +8 -8
- package/dist/server/domain/governedAction/model.d.ts +45 -18
- package/dist/server/domain/governedAction/model.d.ts.map +1 -1
- package/dist/server/domain/governedAction/stateMachine.d.ts +34 -34
- package/dist/server/domain/index.js +6 -6
- package/dist/server/domain/normalizedIssue.d.ts +1 -1
- package/dist/server/domain/normalizedPage.d.ts +1 -0
- package/dist/server/domain/normalizedPage.d.ts.map +1 -1
- package/dist/server/domain/prReview.d.ts +38 -0
- package/dist/server/domain/prReview.d.ts.map +1 -1
- package/dist/server/domain/prReviewReconciliation.d.ts +56 -0
- package/dist/server/domain/prReviewReconciliation.d.ts.map +1 -0
- package/dist/server/domain/prReviewRevision.d.ts +1 -0
- package/dist/server/domain/prReviewRevision.d.ts.map +1 -1
- package/dist/server/domain/readiness/model.d.ts +3 -3
- package/dist/server/domain/release.d.ts +3 -3
- package/dist/server/domain/releasePipelineApproval.d.ts +31 -0
- package/dist/server/domain/releasePipelineApproval.d.ts.map +1 -0
- package/dist/server/domain/releasePublication.d.ts +4 -0
- package/dist/server/domain/releasePublication.d.ts.map +1 -0
- package/dist/server/index.js +8 -8
- package/dist/server/server/agent/AgentJobWorker.d.ts +10 -1
- package/dist/server/server/agent/AgentJobWorker.d.ts.map +1 -1
- package/dist/server/server/agent/ReleaseAgentPrompt.d.ts.map +1 -1
- package/dist/server/server/agent/internal/AgentJobTaskExecutor.d.ts +4 -3
- package/dist/server/server/agent/internal/AgentJobTaskExecutor.d.ts.map +1 -1
- package/dist/server/server/agent/internal/PrReviewSandboxSession.d.ts +17 -1
- package/dist/server/server/agent/internal/PrReviewSandboxSession.d.ts.map +1 -1
- package/dist/server/server/agent/internal/PrReviewTaskExecutor.d.ts +76 -2
- package/dist/server/server/agent/internal/PrReviewTaskExecutor.d.ts.map +1 -1
- package/dist/server/server/agent/internal/PrReviewTelemetry.d.ts +27 -0
- package/dist/server/server/agent/internal/PrReviewTelemetry.d.ts.map +1 -0
- package/dist/server/server/api/ApplicationServices.d.ts +39 -5
- package/dist/server/server/api/ApplicationServices.d.ts.map +1 -1
- package/dist/server/server/api/Handlers.d.ts +1 -1
- package/dist/server/server/api/Handlers.d.ts.map +1 -1
- package/dist/server/server/api/RequestBoundary.d.ts.map +1 -1
- package/dist/server/server/application/GovernedReviewSuggestionPublicationGateway.d.ts.map +1 -1
- package/dist/server/server/application/ReviewSuggestionPublicationGateway.d.ts +4 -0
- package/dist/server/server/application/ReviewSuggestionPublicationGateway.d.ts.map +1 -1
- package/dist/server/server/application/deliveryGraphInspection.d.ts.map +1 -1
- package/dist/server/server/application/index.d.ts +1 -0
- package/dist/server/server/application/index.d.ts.map +1 -1
- package/dist/server/server/application/liveEvents.d.ts.map +1 -1
- package/dist/server/server/application/normalizedPluginPageMaterialization.d.ts.map +1 -1
- package/dist/server/server/application/pipelineExecutionProjection.d.ts +7 -6
- package/dist/server/server/application/pipelineExecutionProjection.d.ts.map +1 -1
- package/dist/server/server/application/portfolioSnapshots.d.ts +2018 -4
- package/dist/server/server/application/portfolioSnapshots.d.ts.map +1 -1
- package/dist/server/server/application/pullRequestReviews.d.ts.map +1 -1
- package/dist/server/server/application/releaseAgent.d.ts +11 -3
- package/dist/server/server/application/releaseAgent.d.ts.map +1 -1
- package/dist/server/server/application/releasePublicationIntent.d.ts +7 -0
- package/dist/server/server/application/releasePublicationIntent.d.ts.map +1 -0
- package/dist/server/server/application/releasePublicationMetadata.d.ts +61 -0
- package/dist/server/server/application/releasePublicationMetadata.d.ts.map +1 -0
- package/dist/server/server/application/releasePublicationSubmissions.d.ts +3730 -0
- package/dist/server/server/application/releasePublicationSubmissions.d.ts.map +1 -0
- package/dist/server/server/application/releaseRunbookHydration.d.ts +2310 -0
- package/dist/server/server/application/releaseRunbookHydration.d.ts.map +1 -0
- package/dist/server/server/application/releaseSynchronization.d.ts.map +1 -1
- package/dist/server/server/cli.js +8 -8
- package/dist/server/server/cli.js.map +1 -1
- package/dist/server/server/governance/governedActionDigests.d.ts +236 -218
- package/dist/server/server/governance/governedActionDigests.d.ts.map +1 -1
- package/dist/server/server/governance/internal/GovernedActionExecutionEngine.d.ts +3 -4
- package/dist/server/server/governance/internal/GovernedActionExecutionEngine.d.ts.map +1 -1
- package/dist/server/server/governance/internal/execution-store/begin.d.ts.map +1 -1
- package/dist/server/server/governance/internal/execution-store/dispatch-inbox.d.ts +1 -1
- package/dist/server/server/governance/internal/execution-store/dispatch-outcome.d.ts +8 -8
- package/dist/server/server/governance/internal/execution-store/provider-outcome-fold.d.ts +2 -2
- package/dist/server/server/governance/internal/execution-store/reconciliation-inbox.d.ts +1 -1
- package/dist/server/server/governance/internal/execution-store/recovery-claim.d.ts +37 -30
- package/dist/server/server/governance/internal/execution-store/recovery-claim.d.ts.map +1 -1
- package/dist/server/server/index.js +5 -5
- package/dist/server/server/internal/codepipeline-state-probe.js +1 -1
- package/dist/server/server/persistence/Database.d.ts +1 -1
- package/dist/server/server/persistence/Database.d.ts.map +1 -1
- package/dist/server/server/persistence/Persistence.d.ts +1549 -577
- package/dist/server/server/persistence/Persistence.d.ts.map +1 -1
- package/dist/server/server/persistence/backup/BackupArchive.d.ts.map +1 -1
- package/dist/server/server/persistence/object-store/BlobPublisher.d.ts.map +1 -1
- package/dist/server/server/persistence/object-store/PinnedDirectory.d.ts +2 -2
- package/dist/server/server/persistence/object-store/PinnedDirectory.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/agentJobModels.d.ts +345 -8
- package/dist/server/server/persistence/repositories/agentJobModels.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/agentJobRepository.d.ts +654 -192
- package/dist/server/server/persistence/repositories/agentJobRepository.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts +148 -138
- package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts +27 -25
- package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts +117 -111
- package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts +28 -27
- package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts +50 -48
- package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts +117 -111
- package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/governed-action/codec.d.ts +259 -234
- package/dist/server/server/persistence/repositories/governed-action/codec.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/governed-action/contract.d.ts +68 -46
- package/dist/server/server/persistence/repositories/governed-action/contract.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/governed-action/read.d.ts +668 -190
- package/dist/server/server/persistence/repositories/governed-action/read.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/governed-action/transaction.d.ts +680 -206
- package/dist/server/server/persistence/repositories/governed-action/transaction.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/governed-action/write-preparation.d.ts +38 -31
- package/dist/server/server/persistence/repositories/governed-action/write-preparation.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/governed-action/write-replay.d.ts +46 -32
- package/dist/server/server/persistence/repositories/governed-action/write-replay.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/governed-action/write.d.ts +46 -32
- package/dist/server/server/persistence/repositories/governed-action/write.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/governedActionRepository.d.ts +678 -205
- package/dist/server/server/persistence/repositories/governedActionRepository.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/internal/reviewSuggestionRevisions.d.ts +85 -4
- package/dist/server/server/persistence/repositories/internal/reviewSuggestionRevisions.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/models.d.ts +9 -9
- package/dist/server/server/persistence/repositories/peopleRepository.d.ts +36 -36
- package/dist/server/server/persistence/repositories/providerAccountRepository.d.ts +1 -1
- package/dist/server/server/persistence/repositories/readiness/assessments.d.ts +6 -6
- package/dist/server/server/persistence/repositories/readiness/contract.d.ts +450 -450
- package/dist/server/server/persistence/repositories/readiness/queue.d.ts +14 -14
- package/dist/server/server/persistence/repositories/readinessRepository.d.ts +7 -7
- package/dist/server/server/persistence/repositories/releaseRepository.d.ts +18 -18
- package/dist/server/server/persistence/repositories/retentionRepository.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/timelineRepository.d.ts +4 -4
- package/dist/server/server/plugins/atlassian/AtlassianOAuthGrants.d.ts.map +1 -1
- package/dist/server/server/plugins/atlassian/AtlassianOAuthScopes.d.ts +9 -0
- package/dist/server/server/plugins/atlassian/AtlassianOAuthScopes.d.ts.map +1 -0
- package/dist/server/server/plugins/atlassian/AtlassianProfiles.d.ts.map +1 -1
- package/dist/server/server/plugins/codecommit/CodeCommitPluginDefinition.d.ts.map +1 -1
- package/dist/server/server/plugins/jira/JiraReadPlugin.d.ts +2 -2
- package/dist/server/server/plugins/jira/JiraReadPlugin.d.ts.map +1 -1
- package/dist/server/server/plugins/jira/JiraReadProvider.d.ts.map +1 -1
- package/dist/server/server/plugins/jira/JiraReleaseVersionLimits.d.ts +8 -0
- package/dist/server/server/plugins/jira/JiraReleaseVersionLimits.d.ts.map +1 -0
- package/dist/server/server/plugins/jira/index.d.ts +1 -1
- package/dist/server/server/plugins/jira/index.d.ts.map +1 -1
- package/dist/server/server/runtime/Bootstrap.d.ts +1 -1
- package/dist/server/server/runtime/Bootstrap.d.ts.map +1 -1
- package/dist/server/server/runtime/ControlCenterServer.d.ts +3 -3
- package/dist/server/server/runtime/ControlCenterServer.d.ts.map +1 -1
- package/dist/server/server/runtime/PrReviewWorkerStartup.d.ts +11 -1
- package/dist/server/server/runtime/PrReviewWorkerStartup.d.ts.map +1 -1
- package/dist/server/server/runtime/RetentionStartup.d.ts.map +1 -1
- package/dist/server/server/runtime/ServerLifecycle.d.ts.map +1 -1
- package/dist/server/server/secrets/SecretStore.d.ts.map +1 -1
- package/package.json +10 -9
- package/dist/client/assets/AgentPage-DGL93TJU.js +0 -3
- package/dist/client/assets/AgentPage-DGL93TJU.js.map +0 -1
- package/dist/client/assets/AgentPage-DVSgQgJa.css +0 -1
- package/dist/client/assets/AtlassianOAuthCallbackPage-D1F1xE_2.js +0 -2
- package/dist/client/assets/AuthorizedSharePage-DCQUFY2I.js +0 -2
- package/dist/client/assets/AuthorizedSharePage-DCQUFY2I.js.map +0 -1
- package/dist/client/assets/BrowserCrypto-DVWR7DFd.js +0 -2
- package/dist/client/assets/BrowserSessionHydrator-DE46feEX.js +0 -2
- package/dist/client/assets/BrowserSessionHydrator-DE46feEX.js.map +0 -1
- package/dist/client/assets/CommandSearch-CP_QCbkm.js +0 -2
- package/dist/client/assets/ItemsPage-BGFUkRL2.js +0 -2
- package/dist/client/assets/PortfolioOverview-D45rk8Hl.js +0 -2
- package/dist/client/assets/PortfolioOverview-D45rk8Hl.js.map +0 -1
- package/dist/client/assets/PullRequestReviewPanel-CqPtjhVW.js +0 -6
- package/dist/client/assets/PullRequestReviewPanel-CqPtjhVW.js.map +0 -1
- package/dist/client/assets/ReleaseRoute-DXJ8Jg60.js +0 -2
- package/dist/client/assets/ReleaseWorkset-Dtzalmji.js +0 -2
- package/dist/client/assets/ReleaseWorkset-Dtzalmji.js.map +0 -1
- package/dist/client/assets/ServicesPage-DGcUjd2H.js +0 -2
- package/dist/client/assets/ServicesPage-DGcUjd2H.js.map +0 -1
- package/dist/client/assets/TimelinePage-Bq1RTQlP.js +0 -2
- package/dist/client/assets/TimelinePage-Bq1RTQlP.js.map +0 -1
- package/dist/client/assets/WorkspaceEntityLink-AdZ_T-Wk.js +0 -2
- package/dist/client/assets/WorkspaceEntityRoute-9iMOV64J.css +0 -1
- package/dist/client/assets/WorkspaceEntityRoute-Bxxnc8us.js +0 -3
- package/dist/client/assets/WorkspaceEntityRoute-Bxxnc8us.js.map +0 -1
- package/dist/client/assets/WorkspaceHomeLink-XbKSPths.js +0 -2
- package/dist/client/assets/WorkspacePullRequestDetails-BErJ5bk8.js.map +0 -1
- package/dist/client/assets/WorkspaceRichText-D1M637Ff.js.map +0 -1
- package/dist/client/assets/WorkspaceSettingsPage-Fy7Wx8Y2.js +0 -2
- package/dist/client/assets/WorkspaceSettingsPage-Fy7Wx8Y2.js.map +0 -1
- package/dist/client/assets/WorkspaceSettingsPage-P6yfac0b.css +0 -1
- package/dist/client/assets/agent-api-QVqt4a0O.js +0 -19
- package/dist/client/assets/agent-api-QVqt4a0O.js.map +0 -1
- package/dist/client/assets/authenticatedMutationClient-Ccwguc3i.js +0 -2
- package/dist/client/assets/authorizedShareTransport-DZHgFEkh.js +0 -2
- package/dist/client/assets/client-D27unen8.js +0 -5
- package/dist/client/assets/client-D27unen8.js.map +0 -1
- package/dist/client/assets/connectionTestTransport-BQ55d6Me.js +0 -2
- package/dist/client/assets/connectionTestTransport-BQ55d6Me.js.map +0 -1
- package/dist/client/assets/index-j5ze816l.js +0 -11
- package/dist/client/assets/index-j5ze816l.js.map +0 -1
- package/dist/client/assets/presentPortfolio-D3ZIcnqt.js.map +0 -1
- package/dist/client/assets/pullRequestReviewThreadReplay-oljKM7Xz.js +0 -2
- package/dist/client/assets/pullRequestReviewThreadReplay-oljKM7Xz.js.map +0 -1
- package/dist/client/assets/releaseRoutes-BCuIdZyA.js +0 -2
- package/dist/client/assets/serviceOnboarding-Jg_0yNjf.js +0 -2
- package/dist/client/assets/workspaceScrollCapture-CJ4QUptr.js +0 -2
- package/dist/client/assets/workspaceScrollCapture-CJ4QUptr.js.map +0 -1
- package/dist/client/assets/workspaceSettingsTransport-CZWYL5T7.js +0 -2
- package/dist/server/assets/BindConfig-DIsf2Rnh.js.map +0 -1
- package/dist/server/assets/agent-CyZ40zs1.js.map +0 -1
- package/dist/server/assets/controlCenterApi-ZUX3Y-LE.js.map +0 -1
- package/dist/server/assets/manualPluginSynchronization-DFlhKvav.js.map +0 -1
- package/dist/server/assets/relationshipInferenceMaterialization-DYBcaWhQ.js.map +0 -1
- package/dist/server/assets/workspaceSettings-BE713Oe8.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"presentPortfolio-D3ZIcnqt.js","names":[],"sources":["../../../src/client/portfolio/presentPortfolio.ts"],"sourcesContent":["import type {\n RlyFreshnessState,\n RlyPerson,\n RlyReleasePresentation,\n RlyReleaseRelaySymbolIndices,\n RlyService,\n RlyStage\n} from \"@knpkv/rly/patterns\"\nimport type { RlyStateTone } from \"@knpkv/rly/primitives\"\nimport * as DateTime from \"effect/DateTime\"\n\nimport type { PortfolioReleaseRole, PortfolioSnapshot } from \"../../api/portfolio.js\"\nimport type { PluginHealth } from \"../../domain/freshness.js\"\nimport type {\n ReadinessFinding,\n ReadinessProgress,\n ReadinessStages,\n ReadinessVerdict\n} from \"../../domain/readiness/model.js\"\nimport type { ReleaseLifecycle } from \"../../domain/release.js\"\n\nconst READINESS_STAGES: ReadonlyArray<string> = [\"Build\", \"Verify\", \"Production\"]\n\nconst lifecyclePresentation: Readonly<\n Record<ReleaseLifecycle, { readonly label: string; readonly tone: RlyStateTone }>\n> = {\n assembling: { label: \"Assembling\", tone: \"progress\" },\n candidate: { label: \"Candidate\", tone: \"neutral\" },\n deploying: { label: \"Deploying\", tone: \"progress\" },\n released: { label: \"Released\", tone: \"positive\" },\n cancelled: { label: \"Cancelled\", tone: \"caution\" }\n}\n\nconst releaseRoleLabels: Readonly<Record<PortfolioReleaseRole, string>> = {\n \"release-owner\": \"Release owner\",\n \"release-approver\": \"Release approver\"\n}\n\ninterface SourceHealthPresentation {\n readonly label: string\n readonly message: string | null\n readonly tone: RlyStateTone\n readonly isUnhealthy: boolean\n}\n\nconst DISABLED_SOURCE_HEALTH = {\n label: \"Disabled\",\n message: \"This source connection is disabled.\",\n tone: \"neutral\",\n isUnhealthy: true\n} satisfies SourceHealthPresentation\n\nexport interface PortfolioSourcePresentation {\n readonly displayName: string\n readonly freshness: RlyFreshnessState\n readonly freshnessDateTime: string | null\n readonly freshnessTime: string | null\n readonly healthLabel: string\n readonly healthTone: RlyStateTone\n readonly service: RlyService | null\n readonly warning: string | null\n}\n\nexport interface PortfolioReleasePresentation {\n readonly collaborators: ReadonlyArray<RlyPerson>\n readonly collaboratorCount: number\n readonly facts: ReadonlyArray<{ readonly id: string; readonly label: string; readonly value: string }>\n readonly id: PortfolioSnapshot[\"releases\"][number][\"releaseId\"]\n readonly lifecycleLabel: string\n readonly lifecycleTone: RlyStateTone\n readonly readinessVerdict: ReadinessVerdict | \"unknown\"\n readonly readinessReason: string\n readonly release: RlyReleasePresentation\n readonly relay: {\n readonly algorithm: string\n readonly codename: string\n readonly symbolIndices: RlyReleaseRelaySymbolIndices\n }\n readonly serviceName: string\n readonly source: PortfolioSourcePresentation\n readonly stages: ReadonlyArray<RlyStage>\n readonly targetEnvironmentIds: PortfolioSnapshot[\"releases\"][number][\"targetEnvironmentIds\"]\n readonly version: string\n}\n\nexport interface PortfolioPresentation {\n readonly generatedAt: string\n readonly generatedTime: string\n readonly releases: ReadonlyArray<PortfolioReleasePresentation>\n readonly workspaceId: PortfolioSnapshot[\"workspaceId\"]\n}\n\nconst serviceForProvider = (providerId: PortfolioSnapshot[\"plugins\"][number][\"providerId\"]): RlyService => {\n switch (providerId) {\n case \"codecommit\":\n return \"codecommit\"\n case \"codepipeline\":\n return \"codepipeline\"\n case \"jira\":\n return \"jira\"\n case \"confluence\":\n return \"confluence\"\n case \"clockify\":\n return \"clockify\"\n }\n}\n\nconst healthPresentation = (health: PluginHealth | null): SourceHealthPresentation => {\n if (health === null) {\n return { label: \"Not checked\", message: null, tone: \"neutral\", isUnhealthy: false }\n }\n switch (health._tag) {\n case \"healthy\":\n return { label: \"Healthy\", message: null, tone: \"positive\", isUnhealthy: false }\n case \"degraded\":\n return { label: \"Degraded\", message: health.safeMessage, tone: \"caution\", isUnhealthy: true }\n case \"unavailable\":\n return { label: \"Unavailable\", message: health.safeMessage, tone: \"critical\", isUnhealthy: true }\n case \"disabled\":\n return DISABLED_SOURCE_HEALTH\n }\n}\n\nconst freshnessState = (freshness: PortfolioSnapshot[\"releases\"][number][\"freshness\"]): RlyFreshnessState => {\n switch (freshness._tag) {\n case \"current\":\n return freshness.provenance._tag === \"cache\" ? \"cached\" : \"current\"\n case \"stale\":\n return \"stale\"\n case \"missing\":\n return \"missing\"\n case \"unavailable\":\n return \"unavailable\"\n }\n}\n\nconst sourceConnectionId = (\n freshness: PortfolioSnapshot[\"releases\"][number][\"freshness\"]\n): PortfolioSnapshot[\"plugins\"][number][\"pluginConnectionId\"] =>\n freshness.provenance._tag === \"none\"\n ? freshness.provenance.pluginConnectionId\n : freshness.provenance.sourceRevision.pluginConnectionId\n\nconst freshnessTimestamp = (\n release: PortfolioSnapshot[\"releases\"][number]\n): PortfolioSnapshot[\"releases\"][number][\"updatedAt\"] | null =>\n release.freshness.sourceObservedAt ?? release.freshness.synchronizedAt\n\nconst formattedTime = (timestamp: PortfolioSnapshot[\"generatedAt\"]): string =>\n DateTime.formatUtc(timestamp, {\n day: \"2-digit\",\n hour: \"2-digit\",\n hour12: false,\n locale: \"en-GB\",\n minute: \"2-digit\",\n month: \"short\",\n timeZoneName: \"short\"\n })\n\nconst sourcePresentation = (\n release: PortfolioSnapshot[\"releases\"][number],\n plugins: PortfolioSnapshot[\"plugins\"]\n): PortfolioSourcePresentation => {\n const connectionId = sourceConnectionId(release.freshness)\n const plugin = plugins.find(({ pluginConnectionId }) => pluginConnectionId === connectionId)\n const health = plugin === undefined\n ? {\n label: \"Unavailable\",\n message: \"The source connection is missing from the current portfolio snapshot.\",\n tone: \"critical\",\n isUnhealthy: true\n } satisfies SourceHealthPresentation\n : plugin.isEnabled\n ? healthPresentation(plugin.health)\n : DISABLED_SOURCE_HEALTH\n const freshness = freshnessState(release.freshness)\n const timestamp = freshnessTimestamp(release)\n const hasStaleFacts = release.freshness._tag === \"stale\"\n const warning = hasStaleFacts\n ? health.message ?? \"The source is not current. Preserved facts remain visible from the last successful sync.\"\n : health.isUnhealthy\n ? health.message ?? \"The source needs attention. Saved release facts remain visible.\"\n : null\n\n return {\n displayName: plugin?.displayName ?? \"Source connection unavailable\",\n freshness,\n freshnessDateTime: timestamp === null ? null : DateTime.formatIso(timestamp),\n freshnessTime: timestamp === null ? null : formattedTime(timestamp),\n healthLabel: health.label,\n healthTone: health.tone,\n service: plugin === undefined ? null : serviceForProvider(plugin.providerId),\n warning\n }\n}\n\nconst stageStateLabel = (state: string): string =>\n state.split(\"-\").map((part) => `${part.charAt(0).toLocaleUpperCase(\"en-US\")}${part.slice(1)}`).join(\" \")\n\nconst progressReason = (progress: ReadinessProgress | null): string | undefined => {\n if (progress === null) return undefined\n return progress._tag === \"count\"\n ? `${String(progress.completed)} of ${String(progress.total)} complete`\n : `${String(progress.value)}% complete`\n}\n\nconst buildTone = (state: ReadinessStages[\"build\"][\"state\"]): RlyStateTone => {\n switch (state) {\n case \"failed\":\n return \"critical\"\n case \"held\":\n return \"caution\"\n case \"queued\":\n case \"running\":\n return \"progress\"\n case \"succeeded\":\n return \"positive\"\n case \"not-started\":\n return \"neutral\"\n }\n}\n\nconst verifyTone = (state: ReadinessStages[\"verify\"][\"state\"]): RlyStateTone => {\n switch (state) {\n case \"failed\":\n return \"critical\"\n case \"held\":\n return \"caution\"\n case \"pending\":\n return \"progress\"\n case \"passed\":\n return \"positive\"\n case \"not-started\":\n return \"neutral\"\n }\n}\n\nconst productionTone = (state: ReadinessStages[\"production\"][\"state\"]): RlyStateTone => {\n switch (state) {\n case \"failed\":\n case \"rolled-back\":\n return \"critical\"\n case \"held\":\n return \"caution\"\n case \"deploying\":\n case \"waiting\":\n return \"progress\"\n case \"succeeded\":\n return \"positive\"\n case \"not-started\":\n return \"neutral\"\n }\n}\n\nconst unevaluatedStages = (): ReadonlyArray<RlyStage> =>\n READINESS_STAGES.map((name) => ({\n id: name.toLocaleLowerCase(\"en-US\"),\n name,\n reason: \"No readiness evidence has been evaluated yet.\",\n state: \"Not evaluated\",\n tone: \"neutral\"\n }))\n\nconst readinessStage = (\n id: string,\n name: string,\n state: string,\n tone: RlyStateTone,\n progress: ReadinessProgress | null\n): RlyStage => {\n const reason = progressReason(progress)\n const stage = { id, name, state: stageStateLabel(state), tone }\n return reason === undefined ? stage : { ...stage, reason }\n}\n\nconst readinessStages = (stages: ReadinessStages): ReadonlyArray<RlyStage> => [\n readinessStage(\"build\", \"Build\", stages.build.state, buildTone(stages.build.state), stages.build.progress),\n readinessStage(\"verify\", \"Verify\", stages.verify.state, verifyTone(stages.verify.state), stages.verify.progress),\n readinessStage(\n \"production\",\n \"Production\",\n stages.production.state,\n productionTone(stages.production.state),\n stages.production.progress\n )\n]\n\nconst verdictPresentation: Readonly<\n Record<ReadinessVerdict, { readonly label: string; readonly tone: RlyStateTone }>\n> = {\n blocked: { label: \"Can't ship\", tone: \"critical\" },\n ready: { label: \"Can ship\", tone: \"positive\" },\n deploying: { label: \"Deploying\", tone: \"progress\" },\n building: { label: \"Building\", tone: \"progress\" },\n shipped: { label: \"Shipped\", tone: \"positive\" },\n held: { label: \"Needs links\", tone: \"caution\" }\n}\n\nconst findingReason = (finding: ReadinessFinding): string => {\n switch (finding.code) {\n case \"input-incomplete\":\n return \"Readiness inputs are incomplete.\"\n case \"relationship-missing\":\n return \"A required delivery link is missing.\"\n case \"relationship-unverified\":\n return \"A delivery link still needs verification.\"\n case \"relationship-rejected\":\n return \"A required delivery link was rejected.\"\n case \"relationship-superseded\":\n return \"A delivery link points to superseded work.\"\n case \"approval-missing\":\n return \"A required approval is missing.\"\n case \"approval-pending\":\n return \"A required approval is pending.\"\n case \"approval-rejected\":\n return \"A required approval was rejected.\"\n case \"approval-expired\":\n return \"A required approval expired.\"\n case \"check-missing\":\n return \"A required check is missing.\"\n case \"check-pending\":\n return \"Required checks are still running.\"\n case \"check-failed\":\n return \"A required check failed.\"\n case \"check-cancelled\":\n return \"A required check was cancelled.\"\n case \"execution-missing\":\n return \"A required pipeline run is missing.\"\n case \"execution-pending\":\n return \"A required pipeline is still running.\"\n case \"execution-failed\":\n return \"A required pipeline failed.\"\n case \"execution-stopped\":\n return \"A required pipeline was stopped.\"\n case \"documentation-missing\":\n return \"Required release documentation is missing.\"\n case \"documentation-draft\":\n return \"Release documentation is still a draft.\"\n case \"documentation-stale\":\n return \"Release documentation is stale.\"\n case \"documentation-superseded\":\n return \"Release documentation was superseded.\"\n case \"deployment-missing\":\n return \"Production deployment evidence is missing.\"\n case \"deployment-failed\":\n return \"Production deployment failed.\"\n case \"deployment-rolled-back\":\n return \"Production deployment was rolled back.\"\n case \"source-stale\":\n return \"A required source is stale.\"\n case \"source-missing\":\n return \"A required source is missing.\"\n case \"source-unavailable\":\n return \"A required source is unavailable.\"\n case \"plugin-degraded\":\n return \"A connected service is degraded.\"\n case \"evidence-expired\":\n return \"Required evidence has expired.\"\n }\n}\n\nconst verdictReason = (verdict: ReadinessVerdict): string => {\n switch (verdict) {\n case \"blocked\":\n return \"Required release evidence failed.\"\n case \"ready\":\n return \"All required evidence is verified.\"\n case \"deploying\":\n return \"Production rollout is in progress.\"\n case \"building\":\n return \"Build and verification are in progress.\"\n case \"shipped\":\n return \"Production deployment is verified.\"\n case \"held\":\n return \"Waiting for required delivery links.\"\n }\n}\n\nconst releasePresentation = (\n release: PortfolioSnapshot[\"releases\"][number],\n plugins: PortfolioSnapshot[\"plugins\"]\n): PortfolioReleasePresentation => {\n const lifecycle = lifecyclePresentation[release.lifecycle]\n const source = sourcePresentation(release, plugins)\n const collaborators = release.collaborators.map(({ avatarFallback, displayName, personId, role }) => ({\n avatarFallback,\n id: `${personId}:${role}`,\n name: displayName,\n role: releaseRoleLabels[role]\n }))\n const owner = collaborators.find(({ role }) => role === releaseRoleLabels[\"release-owner\"])\n const approver = collaborators.find(({ role }) => role === releaseRoleLabels[\"release-approver\"])\n const facts = [\n { id: \"service\", label: \"Service\", value: release.serviceName },\n { id: \"issues\", label: \"Jira\", value: String(release.relationships.issues) },\n { id: \"pull-requests\", label: \"PRs\", value: String(release.relationships.pullRequests) },\n { id: \"pipelines\", label: \"Pipelines\", value: String(release.relationships.pipelineExecutions) },\n { id: \"gaps\", label: \"Gaps\", value: String(release.readiness?.gapCount ?? 0) }\n ]\n const readiness = release.readiness\n const readinessReason = readiness === null\n ? \"No readiness evidence has been evaluated yet.\"\n : readiness.authority === \"pending\"\n ? \"Evidence changed. Rechecking this release.\"\n : readiness.primaryFinding === null\n ? verdictReason(readiness.verdict)\n : findingReason(readiness.primaryFinding)\n const verdict = readiness === null ? null : verdictPresentation[readiness.verdict]\n return {\n collaborators,\n collaboratorCount: release.collaboratorCount,\n facts,\n id: release.releaseId,\n lifecycleLabel: lifecycle.label,\n lifecycleTone: lifecycle.tone,\n readinessVerdict: readiness?.verdict ?? \"unknown\",\n readinessReason,\n release: {\n algorithm: release.relay.algorithm,\n ...(approver === undefined ? {} : { approver }),\n codename: release.relay.codename,\n facts,\n freshness: source.freshness,\n ...(source.freshnessDateTime === null || source.freshnessTime === null\n ? {}\n : { freshnessDateTime: source.freshnessDateTime, freshnessTime: source.freshnessTime }),\n id: release.releaseId,\n ...(owner === undefined ? {} : { owner }),\n reason: readinessReason,\n state: readiness?.verdict ?? \"unknown\",\n symbolIndices: release.relay.symbolIndices,\n tone: verdict?.tone ?? \"neutral\",\n verdict: verdict?.label ?? \"Readiness not evaluated\",\n version: release.version\n },\n relay: {\n algorithm: release.relay.algorithm,\n codename: release.relay.codename,\n symbolIndices: release.relay.symbolIndices\n },\n serviceName: release.serviceName,\n source,\n stages: readiness === null ? unevaluatedStages() : readinessStages(readiness.stages),\n targetEnvironmentIds: release.targetEnvironmentIds,\n version: release.version\n }\n}\n\n/** Map one authoritative API snapshot into explicit rly component props without deriving readiness. */\nexport const presentPortfolio = (snapshot: PortfolioSnapshot): PortfolioPresentation => ({\n generatedAt: DateTime.formatIso(snapshot.generatedAt),\n generatedTime: formattedTime(snapshot.generatedAt),\n releases: snapshot.releases.map((release) => releasePresentation(release, snapshot.plugins)),\n workspaceId: snapshot.workspaceId\n})\n"],"mappings":"qDAqBA,IAAM,EAA0C,CAAC,QAAS,SAAU,YAAY,EAE1E,EAEF,CACF,WAAY,CAAE,MAAO,aAAc,KAAM,UAAW,EACpD,UAAW,CAAE,MAAO,YAAa,KAAM,SAAU,EACjD,UAAW,CAAE,MAAO,YAAa,KAAM,UAAW,EAClD,SAAU,CAAE,MAAO,WAAY,KAAM,UAAW,EAChD,UAAW,CAAE,MAAO,YAAa,KAAM,SAAU,CACnD,EAEM,EAAoE,CACxE,gBAAiB,gBACjB,mBAAoB,kBACtB,EASM,EAAyB,CAC7B,MAAO,WACP,QAAS,sCACT,KAAM,UACN,YAAa,EACf,EA0CM,EAAsB,GAA+E,CACzG,OAAQ,EAAR,CACE,IAAK,aACH,MAAO,aACT,IAAK,eACH,MAAO,eACT,IAAK,OACH,MAAO,OACT,IAAK,aACH,MAAO,aACT,IAAK,WACH,MAAO,UACX,CACF,EAEM,EAAsB,GAA0D,CACpF,GAAI,IAAW,KACb,MAAO,CAAE,MAAO,cAAe,QAAS,KAAM,KAAM,UAAW,YAAa,EAAM,EAEpF,OAAQ,EAAO,KAAf,CACE,IAAK,UACH,MAAO,CAAE,MAAO,UAAW,QAAS,KAAM,KAAM,WAAY,YAAa,EAAM,EACjF,IAAK,WACH,MAAO,CAAE,MAAO,WAAY,QAAS,EAAO,YAAa,KAAM,UAAW,YAAa,EAAK,EAC9F,IAAK,cACH,MAAO,CAAE,MAAO,cAAe,QAAS,EAAO,YAAa,KAAM,WAAY,YAAa,EAAK,EAClG,IAAK,WACH,OAAO,CACX,CACF,EAEM,EAAkB,GAAqF,CAC3G,OAAQ,EAAU,KAAlB,CACE,IAAK,UACH,OAAO,EAAU,WAAW,OAAS,QAAU,SAAW,UAC5D,IAAK,QACH,MAAO,QACT,IAAK,UACH,MAAO,UACT,IAAK,cACH,MAAO,aACX,CACF,EAEM,EACJ,GAEA,EAAU,WAAW,OAAS,OAC1B,EAAU,WAAW,mBACrB,EAAU,WAAW,eAAe,mBAEpC,EACJ,GAEA,EAAQ,UAAU,kBAAoB,EAAQ,UAAU,eAEpD,EAAiB,GACrB,EAAmB,EAAW,CAC5B,IAAK,UACL,KAAM,UACN,OAAQ,GACR,OAAQ,QACR,OAAQ,UACR,MAAO,QACP,aAAc,OAChB,CAAC,EAEG,GACJ,EACA,IACgC,CAChC,IAAM,EAAe,EAAmB,EAAQ,SAAS,EACnD,EAAS,EAAQ,MAAM,CAAE,wBAAyB,IAAuB,CAAY,EACrF,EAAS,IAAW,IAAA,GACtB,CACA,MAAO,cACP,QAAS,wEACT,KAAM,WACN,YAAa,EACf,EACE,EAAO,UACP,EAAmB,EAAO,MAAM,EAChC,EACE,EAAY,EAAe,EAAQ,SAAS,EAC5C,EAAY,EAAmB,CAAO,EAEtC,EADgB,EAAQ,UAAU,OAAS,QAE7C,EAAO,SAAW,2FAClB,EAAO,YACP,EAAO,SAAW,kEAClB,KAEJ,MAAO,CACL,YAAa,GAAQ,aAAe,gCACpC,YACA,kBAAmB,IAAc,KAAO,KAAO,EAAmB,CAAS,EAC3E,cAAe,IAAc,KAAO,KAAO,EAAc,CAAS,EAClE,YAAa,EAAO,MACpB,WAAY,EAAO,KACnB,QAAS,IAAW,IAAA,GAAY,KAAO,EAAmB,EAAO,UAAU,EAC3E,SACF,CACF,EAEM,EAAmB,GACvB,EAAM,MAAM,GAAG,CAAC,CAAC,IAAK,GAAS,GAAG,EAAK,OAAO,CAAC,CAAC,CAAC,kBAAkB,OAAO,IAAI,EAAK,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAEnG,EAAkB,GAA2D,CAC7E,OAAa,KACjB,OAAO,EAAS,OAAS,QACrB,GAAG,OAAO,EAAS,SAAS,EAAE,MAAM,OAAO,EAAS,KAAK,EAAE,WAC3D,GAAG,OAAO,EAAS,KAAK,EAAE,WAChC,EAEM,EAAa,GAA2D,CAC5E,OAAQ,EAAR,CACE,IAAK,SACH,MAAO,WACT,IAAK,OACH,MAAO,UACT,IAAK,SACL,IAAK,UACH,MAAO,WACT,IAAK,YACH,MAAO,WACT,IAAK,cACH,MAAO,SACX,CACF,EAEM,EAAc,GAA4D,CAC9E,OAAQ,EAAR,CACE,IAAK,SACH,MAAO,WACT,IAAK,OACH,MAAO,UACT,IAAK,UACH,MAAO,WACT,IAAK,SACH,MAAO,WACT,IAAK,cACH,MAAO,SACX,CACF,EAEM,EAAkB,GAAgE,CACtF,OAAQ,EAAR,CACE,IAAK,SACL,IAAK,cACH,MAAO,WACT,IAAK,OACH,MAAO,UACT,IAAK,YACL,IAAK,UACH,MAAO,WACT,IAAK,YACH,MAAO,WACT,IAAK,cACH,MAAO,SACX,CACF,EAEM,MACJ,EAAiB,IAAK,IAAU,CAC9B,GAAI,EAAK,kBAAkB,OAAO,EAClC,OACA,OAAQ,gDACR,MAAO,gBACP,KAAM,SACR,EAAE,EAEE,GACJ,EACA,EACA,EACA,EACA,IACa,CACb,IAAM,EAAS,EAAe,CAAQ,EAChC,EAAQ,CAAE,KAAI,OAAM,MAAO,EAAgB,CAAK,EAAG,MAAK,EAC9D,OAAO,IAAW,IAAA,GAAY,EAAQ,CAAE,GAAG,EAAO,QAAO,CAC3D,EAEM,EAAmB,GAAqD,CAC5E,EAAe,QAAS,QAAS,EAAO,MAAM,MAAO,EAAU,EAAO,MAAM,KAAK,EAAG,EAAO,MAAM,QAAQ,EACzG,EAAe,SAAU,SAAU,EAAO,OAAO,MAAO,EAAW,EAAO,OAAO,KAAK,EAAG,EAAO,OAAO,QAAQ,EAC/G,EACE,aACA,aACA,EAAO,WAAW,MAClB,EAAe,EAAO,WAAW,KAAK,EACtC,EAAO,WAAW,QACpB,CACF,EAEM,EAEF,CACF,QAAS,CAAE,MAAO,aAAc,KAAM,UAAW,EACjD,MAAO,CAAE,MAAO,WAAY,KAAM,UAAW,EAC7C,UAAW,CAAE,MAAO,YAAa,KAAM,UAAW,EAClD,SAAU,CAAE,MAAO,WAAY,KAAM,UAAW,EAChD,QAAS,CAAE,MAAO,UAAW,KAAM,UAAW,EAC9C,KAAM,CAAE,MAAO,cAAe,KAAM,SAAU,CAChD,EAEM,EAAiB,GAAsC,CAC3D,OAAQ,EAAQ,KAAhB,CACE,IAAK,mBACH,MAAO,mCACT,IAAK,uBACH,MAAO,uCACT,IAAK,0BACH,MAAO,4CACT,IAAK,wBACH,MAAO,yCACT,IAAK,0BACH,MAAO,6CACT,IAAK,mBACH,MAAO,kCACT,IAAK,mBACH,MAAO,kCACT,IAAK,oBACH,MAAO,oCACT,IAAK,mBACH,MAAO,+BACT,IAAK,gBACH,MAAO,+BACT,IAAK,gBACH,MAAO,qCACT,IAAK,eACH,MAAO,2BACT,IAAK,kBACH,MAAO,kCACT,IAAK,oBACH,MAAO,sCACT,IAAK,oBACH,MAAO,wCACT,IAAK,mBACH,MAAO,8BACT,IAAK,oBACH,MAAO,mCACT,IAAK,wBACH,MAAO,6CACT,IAAK,sBACH,MAAO,0CACT,IAAK,sBACH,MAAO,kCACT,IAAK,2BACH,MAAO,wCACT,IAAK,qBACH,MAAO,6CACT,IAAK,oBACH,MAAO,gCACT,IAAK,yBACH,MAAO,yCACT,IAAK,eACH,MAAO,8BACT,IAAK,iBACH,MAAO,gCACT,IAAK,qBACH,MAAO,oCACT,IAAK,kBACH,MAAO,mCACT,IAAK,mBACH,MAAO,gCACX,CACF,EAEM,EAAiB,GAAsC,CAC3D,OAAQ,EAAR,CACE,IAAK,UACH,MAAO,oCACT,IAAK,QACH,MAAO,qCACT,IAAK,YACH,MAAO,qCACT,IAAK,WACH,MAAO,0CACT,IAAK,UACH,MAAO,qCACT,IAAK,OACH,MAAO,sCACX,CACF,EAEM,GACJ,EACA,IACiC,CACjC,IAAM,EAAY,EAAsB,EAAQ,WAC1C,EAAS,EAAmB,EAAS,CAAO,EAC5C,EAAgB,EAAQ,cAAc,KAAK,CAAE,iBAAgB,cAAa,WAAU,WAAY,CACpG,iBACA,GAAI,GAAG,EAAS,GAAG,IACnB,KAAM,EACN,KAAM,EAAkB,EAC1B,EAAE,EACI,EAAQ,EAAc,MAAM,CAAE,UAAW,IAAS,EAAkB,gBAAgB,EACpF,EAAW,EAAc,MAAM,CAAE,UAAW,IAAS,EAAkB,mBAAmB,EAC1F,EAAQ,CACZ,CAAE,GAAI,UAAW,MAAO,UAAW,MAAO,EAAQ,WAAY,EAC9D,CAAE,GAAI,SAAU,MAAO,OAAQ,MAAO,OAAO,EAAQ,cAAc,MAAM,CAAE,EAC3E,CAAE,GAAI,gBAAiB,MAAO,MAAO,MAAO,OAAO,EAAQ,cAAc,YAAY,CAAE,EACvF,CAAE,GAAI,YAAa,MAAO,YAAa,MAAO,OAAO,EAAQ,cAAc,kBAAkB,CAAE,EAC/F,CAAE,GAAI,OAAQ,MAAO,OAAQ,MAAO,OAAO,EAAQ,WAAW,UAAY,CAAC,CAAE,CAC/E,EACM,EAAY,EAAQ,UACpB,EAAkB,IAAc,KAClC,gDACA,EAAU,YAAc,UACxB,6CACA,EAAU,iBAAmB,KAC7B,EAAc,EAAU,OAAO,EAC/B,EAAc,EAAU,cAAc,EACpC,EAAU,IAAc,KAAO,KAAO,EAAoB,EAAU,SAC1E,MAAO,CACL,gBACA,kBAAmB,EAAQ,kBAC3B,QACA,GAAI,EAAQ,UACZ,eAAgB,EAAU,MAC1B,cAAe,EAAU,KACzB,iBAAkB,GAAW,SAAW,UACxC,kBACA,QAAS,CACP,UAAW,EAAQ,MAAM,UACzB,GAAI,IAAa,IAAA,GAAY,CAAC,EAAI,CAAE,UAAS,EAC7C,SAAU,EAAQ,MAAM,SACxB,QACA,UAAW,EAAO,UAClB,GAAI,EAAO,oBAAsB,MAAQ,EAAO,gBAAkB,KAC9D,CAAC,EACD,CAAE,kBAAmB,EAAO,kBAAmB,cAAe,EAAO,aAAc,EACvF,GAAI,EAAQ,UACZ,GAAI,IAAU,IAAA,GAAY,CAAC,EAAI,CAAE,OAAM,EACvC,OAAQ,EACR,MAAO,GAAW,SAAW,UAC7B,cAAe,EAAQ,MAAM,cAC7B,KAAM,GAAS,MAAQ,UACvB,QAAS,GAAS,OAAS,0BAC3B,QAAS,EAAQ,OACnB,EACA,MAAO,CACL,UAAW,EAAQ,MAAM,UACzB,SAAU,EAAQ,MAAM,SACxB,cAAe,EAAQ,MAAM,aAC/B,EACA,YAAa,EAAQ,YACrB,SACA,OAAQ,IAAc,KAAO,EAAkB,EAAI,EAAgB,EAAU,MAAM,EACnF,qBAAsB,EAAQ,qBAC9B,QAAS,EAAQ,OACnB,CACF,EAGa,EAAoB,IAAwD,CACvF,YAAa,EAAmB,EAAS,WAAW,EACpD,cAAe,EAAc,EAAS,WAAW,EACjD,SAAU,EAAS,SAAS,IAAK,GAAY,EAAoB,EAAS,EAAS,OAAO,CAAC,EAC3F,YAAa,EAAS,WACxB"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Ai as e,Di as t,bi as n,ja as r,ki as i,r as a,xi as o,yi as s}from"./agent-api-QVqt4a0O.js";import{a as c,t as l}from"./client-D27unen8.js";import{t as u}from"./authenticatedMutationClient-Ccwguc3i.js";import{n as d,t as f}from"./pullRequestReviewFailures-S74M-fOk.js";var p=128,m=256,h=e=>e.events[0]?.eventSequence??2**53-1,g=(e,t)=>{let n=new Map;for(let i of[...e.events,...t.events]){let e=n.get(i.eventSequence);if(e!==void 0&&!r(e,i))throw Error(`Pull-request review thread contained conflicting duplicate events`);n.set(i.eventSequence,i)}let i=[...n.values()].sort((e,t)=>e.eventSequence-t.eventSequence),o=h(e),s=h(t),c=o<s?e:s<o?t:e.historyLoaded?e:t,l=c.historyLoaded,u=l?i:i.slice(-256);return{events:u,hasEarlier:(o===s?e.historyLoaded&&t.historyLoaded?e.hasEarlier&&t.hasEarlier:e.historyLoaded?e.hasEarlier:t.historyLoaded?t.hasEarlier:e.hasEarlier||t.hasEarlier:c.hasEarlier)||u.length<i.length,historyLoaded:l,nextCursor:a.make(Math.max(e.nextCursor,t.nextCursor)),replayGeneration:Math.max(e.replayGeneration??0,t.replayGeneration??0)}},_=(e,t,n)=>{if(!n.aborted){let n=e.current?.replayGeneration??0,r=t.replayGeneration??n;if(r<n)return e.current??t;let{replacesRetainedWindow:i,...a}=t,o={...a,replayGeneration:r};if(t.replacesRetainedWindow===!0&&r===n&&e.current!==null&&t.nextCursor<e.current.nextCursor)return e.current;let s=e.current!==null&&t.replacesRetainedWindow===!0&&t.events.some(t=>e.current?.events.some(e=>e.eventSequence===t.eventSequence));e.current=e.current===null||r>n||t.replacesRetainedWindow===!0&&t.nextCursor>e.current.nextCursor&&!s?o:g(e.current,a)}return e.current??t},v={enqueue:(n,r,i,a)=>e(s(function*(){return yield*(yield*u).agent.enqueuePullRequestReview({params:{entityId:n},payload:{providerId:r.providerId,model:r.model,profile:`read-only`,reviewProfileId:r.reviewProfile.profileId,...i===void 0?{}:{prompt:i}}})}).pipe(t(c)),{signal:a}),load:(n,r)=>e(s(function*(){return yield*(yield*l()).agent.pullRequestReview({params:{entityId:n}})}).pipe(t(c)),{signal:r}),loadThread:(n,r,i,a=`after`)=>e(s(function*(){return yield*(yield*l()).agent.pullRequestReviewThread({params:{entityId:n},query:r===null?{}:a===`before`?{before:r}:{after:r}})}).pipe(t(c)),{signal:i}),previewPublication:(n,r,i)=>e(s(function*(){return yield*(yield*l()).agent.previewReviewSuggestionPublication({params:{entityId:n,jobId:r.jobId,suggestionId:r.suggestionId},query:{revisionId:r.revisionId}})}).pipe(t(c)),{signal:i}),providers:n=>e(s(function*(){return yield*(yield*l()).agent.providers()}).pipe(t(c)),{signal:n}),publishSuggestion:(n,r,i,a,o)=>e(s(function*(){return yield*(yield*u).agent.publishReviewSuggestion({params:{entityId:n},payload:{...r,finalContent:i,authorityBinding:a}})}).pipe(t(c)),{signal:o})},y=async(e,t,n,r=null)=>{let i=[],a=r;for(let r=0;r<128;r++){let r=await e.loadThread(t,a,n);for(let e of r.events)i.push(e);if(!r.hasMore)return{events:i,hasEarlier:r.hasEarlier,historyLoaded:!1,nextCursor:r.nextCursor};if(a!==null&&r.nextCursor<=a)throw Error(`Pull-request review thread cursor did not advance`);a=r.nextCursor}let o=await e.loadThread(t,null,n);if(o.hasMore||a!==null&&o.nextCursor<=a)throw Error(`Pull-request review thread tail fallback was not usable`);return{events:[...o.events],hasEarlier:!0,historyLoaded:!1,nextCursor:o.nextCursor,replacesRetainedWindow:!0}},b=async(e,t,n,r)=>{let i=await y(e,t,n,r?.nextCursor);if(i.replacesRetainedWindow===!0)return{...i,replayGeneration:(r?.replayGeneration??0)+1};let a=r===void 0?i.events:[...r.events,...i.events],o=r?.historyLoaded??!1,s=o?a:a.slice(-256);return{events:s,hasEarlier:(r?.hasEarlier??!1)||i.hasEarlier||s.length<a.length,historyLoaded:o,nextCursor:i.nextCursor,replayGeneration:r?.replayGeneration??i.replayGeneration??0,...r?.replacesRetainedWindow===!0?{replacesRetainedWindow:!0}:{}}},x=async(e,t,n,r)=>{let i=r.events[0]?.eventSequence;if(!r.hasEarlier||i===void 0)return r;let a=await e.loadThread(t,i,n,`before`);if(a.events.some((e,t,n)=>e.eventSequence>=i||t>0&&e.eventSequence<=n[t-1].eventSequence)||a.events.length>0&&a.nextCursor>=i||a.hasMore&&a.events.length===0)throw Error(`Pull-request review history cursor did not retreat`);return{events:[...a.events,...r.events],hasEarlier:a.hasMore,historyLoaded:!0,nextCursor:r.nextCursor,replayGeneration:r.replayGeneration??0}},S=(e,t)=>e.baseRevision===t.baseRevision&&e.entityId===t.entityId&&e.headRevision===t.headRevision&&e.sessionKey===t.sessionKey,C=(e,t,r,a,o,s,c,l)=>(async()=>{try{let n=await x(e,t.entityId,a,r);if(a.aborted||o.current===null||!S(o.current,t))return;let i=_(s,n,a);l(e=>e._tag===`ready`&&S(e,t)?{...e,historyAction:`idle`,thread:i}:e)}catch(e){if(a.aborted||o.current===null||!S(o.current,t))return;d(e)&&c(t.sessionKey),i(n(`Pull-request review history load failed`,e)),l(e=>e._tag===`ready`&&S(e,t)?{...e,historyAction:`failed`}:e)}})(),w=async(e,t,n,r,a,s)=>{let c=n?e.providers(r).then(e=>({catalog:e,needsRetry:!1}),e=>{if(r.aborted||!f(e))throw e;return i(o(`Pull-request review provider catalog load failed`,e)),{catalog:{providers:[]},needsRetry:!0}}):Promise.resolve({catalog:{providers:[]},needsRetry:!1}),[l,u,d]=await Promise.all([e.load(t,r),b(e,t,r,a),c]),p=l._tag===`completed`||l._tag===`failed`?await b(e,t,r,u):u;return{catalog:d.catalog,catalogNeedsRetry:d.needsRetry,review:l,thread:_(s,p,r)}},T=async(e,t,r,a,o)=>{try{return _(o,await b(e,t,r,a),r)}catch(e){throw r.aborted||i(n(`Pull-request review thread refresh failed`,e)),e}};export{m as MAXIMUM_RETAINED_REVIEW_THREAD_EVENTS,p as MAXIMUM_REVIEW_THREAD_PAGE_READS,b as continuePullRequestReviewThread,v as generatedClientPullRequestReviewTransport,_ as installNewestThread,y as loadCompletePullRequestReviewThread,x as loadEarlierPullRequestReviewThread,C as loadEarlierPullRequestReviewThreadIntoState,w as loadPullRequestReviewSnapshot,g as mergePullRequestReviewThreads,T as refreshPullRequestReviewThread};
|
|
2
|
-
//# sourceMappingURL=pullRequestReviewThreadReplay-oljKM7Xz.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pullRequestReviewThreadReplay-oljKM7Xz.js","names":[],"sources":["../../../src/client/entities/pullRequestReviewThreadReplay.ts"],"sourcesContent":["/** Bounded browser replay for a durable pull-request review thread. @module */\nimport * as Effect from \"effect/Effect\"\nimport * as Equal from \"effect/Equal\"\nimport * as FetchHttpClient from \"effect/unstable/http/FetchHttpClient\"\nimport { ReleaseAgentThreadCursor } from \"../../api/agent.js\"\nimport type {\n AgentProviderCatalog,\n PullRequestReviewState,\n PullRequestReviewThreadEvent,\n PullRequestReviewThreadPage\n} from \"../../api/agent.js\"\nimport { makeControlCenterApiClient } from \"../../api/client.js\"\nimport type { EntityId } from \"../../domain/identifiers.js\"\nimport { makeAuthenticatedMutationClient } from \"../authenticatedMutationClient.js\"\nimport {\n isRecoverablePullRequestReviewFailure,\n isUnauthorizedPullRequestReviewFailure\n} from \"./pullRequestReviewFailures.js\"\nimport type {\n PullRequestReviewControllerState,\n PullRequestReviewScope,\n PullRequestReviewTransport\n} from \"./usePullRequestReview.js\"\n\nexport const MAXIMUM_REVIEW_THREAD_PAGE_READS = 128\nexport const MAXIMUM_RETAINED_REVIEW_THREAD_EVENTS = 256\n\ninterface PullRequestReviewThreadPageTransport {\n readonly loadThread: (\n entityId: EntityId,\n cursor: ReleaseAgentThreadCursor | null,\n signal: AbortSignal,\n direction?: \"after\" | \"before\"\n ) => Promise<PullRequestReviewThreadPage>\n}\n\nexport interface PullRequestReviewThread {\n readonly events: ReadonlyArray<PullRequestReviewThreadEvent>\n readonly hasEarlier: boolean\n readonly historyLoaded: boolean\n readonly nextCursor: ReleaseAgentThreadCursor\n /** Monotonic window identity used to reject reads started before a tail replacement. */\n readonly replayGeneration?: number\n /** Transient signal that a bounded tail must replace, rather than append to, an older window. */\n readonly replacesRetainedWindow?: true\n}\n\ninterface PullRequestReviewThreadRef {\n current: PullRequestReviewThread | null\n}\n\nconst earliestSequence = (thread: PullRequestReviewThread): number =>\n thread.events[0]?.eventSequence ?? Number.MAX_SAFE_INTEGER\n\n/** Merge concurrent live and backward reads without dropping either cursor direction. */\nexport const mergePullRequestReviewThreads = (\n left: PullRequestReviewThread,\n right: PullRequestReviewThread\n): PullRequestReviewThread => {\n const eventsBySequence = new Map<number, PullRequestReviewThreadEvent>()\n for (const event of [...left.events, ...right.events]) {\n const existing = eventsBySequence.get(event.eventSequence)\n if (existing !== undefined && !Equal.equals(existing, event)) {\n throw new Error(\"Pull-request review thread contained conflicting duplicate events\")\n }\n eventsBySequence.set(event.eventSequence, event)\n }\n const allEvents = [...eventsBySequence.values()].sort(\n (left, right) => left.eventSequence - right.eventSequence\n )\n const leftEarliestSequence = earliestSequence(left)\n const rightEarliestSequence = earliestSequence(right)\n const boundary = leftEarliestSequence < rightEarliestSequence\n ? left\n : rightEarliestSequence < leftEarliestSequence\n ? right\n : left.historyLoaded\n ? left\n : right\n const historyLoaded = boundary.historyLoaded\n const events = historyLoaded\n ? allEvents\n : allEvents.slice(-MAXIMUM_RETAINED_REVIEW_THREAD_EVENTS)\n const hasEarlierAtBoundary = leftEarliestSequence !== rightEarliestSequence\n ? boundary.hasEarlier\n : left.historyLoaded && right.historyLoaded\n ? left.hasEarlier && right.hasEarlier\n : left.historyLoaded\n ? left.hasEarlier\n : right.historyLoaded\n ? right.hasEarlier\n : left.hasEarlier || right.hasEarlier\n return {\n events,\n hasEarlier: hasEarlierAtBoundary || events.length < allEvents.length,\n historyLoaded,\n nextCursor: ReleaseAgentThreadCursor.make(\n Math.max(left.nextCursor, right.nextCursor)\n ),\n replayGeneration: Math.max(left.replayGeneration ?? 0, right.replayGeneration ?? 0)\n }\n}\n\nexport const installNewestThread = (\n target: PullRequestReviewThreadRef,\n candidate: PullRequestReviewThread,\n signal: AbortSignal\n): PullRequestReviewThread => {\n if (!signal.aborted) {\n const retainedGeneration = target.current?.replayGeneration ?? 0\n const candidateGeneration = candidate.replayGeneration ?? retainedGeneration\n if (candidateGeneration < retainedGeneration) return target.current ?? candidate\n const { replacesRetainedWindow: _replacesRetainedWindow, ...retainedCandidate } = candidate\n const versionedCandidate = { ...retainedCandidate, replayGeneration: candidateGeneration }\n if (\n candidate.replacesRetainedWindow === true &&\n candidateGeneration === retainedGeneration &&\n target.current !== null &&\n candidate.nextCursor < target.current.nextCursor\n ) return target.current\n const overlapsRetainedWindow = target.current !== null &&\n candidate.replacesRetainedWindow === true &&\n candidate.events.some((candidateEvent) =>\n target.current?.events.some(\n (retainedEvent) => retainedEvent.eventSequence === candidateEvent.eventSequence\n )\n )\n target.current = target.current === null ||\n candidateGeneration > retainedGeneration ||\n (\n candidate.replacesRetainedWindow === true &&\n candidate.nextCursor > target.current.nextCursor &&\n !overlapsRetainedWindow\n )\n ? versionedCandidate\n : mergePullRequestReviewThreads(target.current, retainedCandidate)\n }\n return target.current ?? candidate\n}\n\n/** Generated-client transport kept outside the default workspace-entity chunk. */\nexport const generatedClientPullRequestReviewTransport: PullRequestReviewTransport = {\n enqueue: (entityId, provider, prompt, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.agent.enqueuePullRequestReview({\n params: { entityId },\n payload: {\n providerId: provider.providerId,\n model: provider.model,\n profile: \"read-only\",\n reviewProfileId: provider.reviewProfile.profileId,\n ...(prompt === undefined ? {} : { prompt })\n }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n load: (entityId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.agent.pullRequestReview({ params: { entityId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n loadThread: (entityId, cursor, signal, direction = \"after\") =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.agent.pullRequestReviewThread({\n params: { entityId },\n query: cursor === null\n ? {}\n : direction === \"before\"\n ? { before: cursor }\n : { after: cursor }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n previewPublication: (entityId, selection, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.agent.previewReviewSuggestionPublication({\n params: {\n entityId,\n jobId: selection.jobId,\n suggestionId: selection.suggestionId\n },\n query: { revisionId: selection.revisionId }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n providers: (signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.agent.providers()\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n publishSuggestion: (entityId, selection, finalContent, authorityBinding, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.agent.publishReviewSuggestion({\n params: { entityId },\n payload: { ...selection, finalContent, authorityBinding }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n )\n}\n\n/** Follow advancing cursors to the durable tail without allowing unbounded replay. */\nexport const loadCompletePullRequestReviewThread = async (\n transport: PullRequestReviewThreadPageTransport,\n entityId: EntityId,\n signal: AbortSignal,\n initialCursor: ReleaseAgentThreadCursor | null = null\n): Promise<PullRequestReviewThread> => {\n const events = new Array<PullRequestReviewThreadEvent>()\n let after = initialCursor\n for (let pageRead = 0; pageRead < MAXIMUM_REVIEW_THREAD_PAGE_READS; pageRead++) {\n const page = await transport.loadThread(entityId, after, signal)\n for (const event of page.events) events.push(event)\n if (!page.hasMore) {\n return {\n events,\n hasEarlier: page.hasEarlier,\n historyLoaded: false,\n nextCursor: page.nextCursor\n }\n }\n if (after !== null && page.nextCursor <= after) {\n throw new Error(\"Pull-request review thread cursor did not advance\")\n }\n after = page.nextCursor\n }\n const tail = await transport.loadThread(entityId, null, signal)\n if (tail.hasMore || (after !== null && tail.nextCursor <= after)) {\n throw new Error(\"Pull-request review thread tail fallback was not usable\")\n }\n return {\n events: [...tail.events],\n hasEarlier: true,\n historyLoaded: false,\n nextCursor: tail.nextCursor,\n replacesRetainedWindow: true\n }\n}\n\n/** Continue one previously loaded thread without replaying its durable prefix. */\nexport const continuePullRequestReviewThread = async (\n transport: PullRequestReviewThreadPageTransport,\n entityId: EntityId,\n signal: AbortSignal,\n previous?: PullRequestReviewThread\n): Promise<PullRequestReviewThread> => {\n const update = await loadCompletePullRequestReviewThread(\n transport,\n entityId,\n signal,\n previous?.nextCursor\n )\n if (update.replacesRetainedWindow === true) {\n return {\n ...update,\n replayGeneration: (previous?.replayGeneration ?? 0) + 1\n }\n }\n const events = previous === undefined\n ? update.events\n : [...previous.events, ...update.events]\n const historyLoaded = previous?.historyLoaded ?? false\n const retainedEvents = historyLoaded\n ? events\n : events.slice(-MAXIMUM_RETAINED_REVIEW_THREAD_EVENTS)\n return {\n events: retainedEvents,\n hasEarlier: (previous?.hasEarlier ?? false) ||\n update.hasEarlier ||\n retainedEvents.length < events.length,\n historyLoaded,\n nextCursor: update.nextCursor,\n replayGeneration: previous?.replayGeneration ?? update.replayGeneration ?? 0,\n ...(previous?.replacesRetainedWindow === true ? { replacesRetainedWindow: true } : {})\n }\n}\n\n/** Prepend one explicit bounded history page without disturbing live replay. */\nexport const loadEarlierPullRequestReviewThread = async (\n transport: PullRequestReviewThreadPageTransport,\n entityId: EntityId,\n signal: AbortSignal,\n previous: PullRequestReviewThread\n): Promise<PullRequestReviewThread> => {\n const before = previous.events[0]?.eventSequence\n if (!previous.hasEarlier || before === undefined) return previous\n const page = await transport.loadThread(entityId, before, signal, \"before\")\n const invalidEvent = page.events.some(\n (event, index, events) =>\n event.eventSequence >= before ||\n (index > 0 && event.eventSequence <= events[index - 1]!.eventSequence)\n )\n if (\n invalidEvent ||\n (page.events.length > 0 && page.nextCursor >= before) ||\n (page.hasMore && page.events.length === 0)\n ) {\n throw new Error(\"Pull-request review history cursor did not retreat\")\n }\n return {\n events: [...page.events, ...previous.events],\n hasEarlier: page.hasMore,\n historyLoaded: true,\n nextCursor: previous.nextCursor,\n replayGeneration: previous.replayGeneration ?? 0\n }\n}\n\ntype ReadyPullRequestReviewState = Extract<\n PullRequestReviewControllerState,\n { readonly _tag: \"ready\" }\n>\n\nconst sameReviewScope = (\n left: PullRequestReviewScope,\n right: PullRequestReviewScope\n): boolean =>\n left.baseRevision === right.baseRevision &&\n left.entityId === right.entityId &&\n left.headRevision === right.headRevision &&\n left.sessionKey === right.sessionKey\n\n/** Apply one dynamic history read without growing the default entity-route chunk. */\nexport const loadEarlierPullRequestReviewThreadIntoState = (\n transport: PullRequestReviewThreadPageTransport,\n current: ReadyPullRequestReviewState,\n currentThread: PullRequestReviewThread,\n signal: AbortSignal,\n latestScope: { current: PullRequestReviewScope | null },\n latestThread: PullRequestReviewThreadRef,\n onSessionExpired: (sessionKey: string) => void,\n setState: (\n update: (state: PullRequestReviewControllerState) => PullRequestReviewControllerState\n ) => void\n): Promise<void> => {\n const run = async (): Promise<void> => {\n try {\n const thread = await loadEarlierPullRequestReviewThread(\n transport,\n current.entityId,\n signal,\n currentThread\n )\n if (\n signal.aborted ||\n latestScope.current === null ||\n !sameReviewScope(latestScope.current, current)\n ) return\n const installed = installNewestThread(latestThread, thread, signal)\n setState((latest) =>\n latest._tag === \"ready\" && sameReviewScope(latest, current)\n ? { ...latest, historyAction: \"idle\", thread: installed }\n : latest\n )\n } catch (failure) {\n if (\n signal.aborted ||\n latestScope.current === null ||\n !sameReviewScope(latestScope.current, current)\n ) return\n if (isUnauthorizedPullRequestReviewFailure(failure)) {\n onSessionExpired(current.sessionKey)\n }\n Effect.runFork(Effect.logError(\"Pull-request review history load failed\", failure))\n setState((latest) =>\n latest._tag === \"ready\" && sameReviewScope(latest, current)\n ? { ...latest, historyAction: \"failed\" }\n : latest\n )\n }\n }\n return run()\n}\n\n/** Load one coherent review snapshot and close a pending-to-terminal tail race. */\nexport const loadPullRequestReviewSnapshot = async (\n transport: PullRequestReviewTransport,\n entityId: EntityId,\n canEnqueue: boolean,\n signal: AbortSignal,\n previous: PullRequestReviewThread | undefined,\n target: PullRequestReviewThreadRef\n): Promise<{\n readonly catalog: AgentProviderCatalog\n readonly catalogNeedsRetry: boolean\n readonly review: PullRequestReviewState\n readonly thread: PullRequestReviewThread\n}> => {\n const catalogPromise = canEnqueue\n ? transport.providers(signal).then(\n (catalog) => ({ catalog, needsRetry: false }),\n (failure: unknown) => {\n if (signal.aborted || !isRecoverablePullRequestReviewFailure(failure)) throw failure\n Effect.runFork(Effect.logWarning(\"Pull-request review provider catalog load failed\", failure))\n return {\n catalog: { providers: [] } satisfies AgentProviderCatalog,\n needsRetry: true\n }\n }\n )\n : Promise.resolve({\n catalog: { providers: [] } satisfies AgentProviderCatalog,\n needsRetry: false\n })\n const [review, initialThread, catalogResult] = await Promise.all([\n transport.load(entityId, signal),\n continuePullRequestReviewThread(transport, entityId, signal, previous),\n catalogPromise\n ])\n const thread = review._tag === \"completed\" || review._tag === \"failed\"\n ? await continuePullRequestReviewThread(transport, entityId, signal, initialThread)\n : initialThread\n return {\n catalog: catalogResult.catalog,\n catalogNeedsRetry: catalogResult.needsRetry,\n review,\n thread: installNewestThread(target, thread, signal)\n }\n}\n\n/** Continue a visible thread while retaining diagnostics for non-fatal refresh failures. */\nexport const refreshPullRequestReviewThread = async (\n transport: PullRequestReviewThreadPageTransport,\n entityId: EntityId,\n signal: AbortSignal,\n previous: PullRequestReviewThread | undefined,\n target: PullRequestReviewThreadRef\n): Promise<PullRequestReviewThread> => {\n try {\n const thread = await continuePullRequestReviewThread(transport, entityId, signal, previous)\n return installNewestThread(target, thread, signal)\n } catch (failure) {\n if (!signal.aborted) {\n Effect.runFork(Effect.logError(\"Pull-request review thread refresh failed\", failure))\n }\n throw failure\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e,s as t}from"./releasePaths-XoI2BHX3.js";import{Ca as n,Cn as r,Jn as i,Un as a,Yn as o,bn as s,ur as c,wa as l}from"./agent-api-QVqt4a0O.js";var u=o({hash:i,pathname:i,search:i}),d=o({_tag:a(`release-origin/v1`),origin:u,releaseId:s,workspaceId:r}),f=(e,t,r)=>{let i=c(d)(e);return n(i)?null:x(i.value,t,r).isStored?i.value:null},p=e=>{let t=c(r)(e);return l(t)?t.value:null},m=e=>{let t=c(s)(e);return l(t)?t.value:null},h=e=>({relay:`release-${e}-relay`,verdict:`release-${e}-verdict`,version:`release-${e}-version`}),g=({hash:e,pathname:t,search:n})=>({hash:e,pathname:t,search:n}),_=e=>e.length<=2048&&(e.length===0||e.startsWith(`?`)),v=e=>e.length<=1024&&(e.length===0||e.startsWith(`#`)),y=(n,r)=>n===e(r)||n===t(r),b=(e,t,n)=>({_tag:`release-origin/v1`,origin:n,releaseId:t,workspaceId:e}),x=(t,r,i)=>{let a={hash:``,pathname:e(r),search:``},o=c(d)(t);if(n(o))return{isStored:!1,origin:a};let s=o.value,l=s.workspaceId===r&&s.releaseId===i,u=y(s.origin.pathname,r);return l&&u&&_(s.origin.search)&&v(s.origin.hash)?{isStored:!0,origin:s.origin}:{isStored:!1,origin:a}},S=(e,t,n)=>x(e,t,n).origin,C=({hash:e,pathname:t,search:n})=>`${t}${n}${e}`;export{S as a,h as c,b as i,x as l,m as n,g as o,p as r,C as s,d as t,f as u};
|
|
2
|
-
//# sourceMappingURL=releaseRoutes-BCuIdZyA.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Jn as e,X as t,Yn as n,dr as r,gn as i,ua as a}from"./agent-api-QVqt4a0O.js";n({providerId:t,displayName:e,description:e}).annotate({identifier:`FirstPartyServiceIdentity`});var o={codecommit:{providerId:`codecommit`,displayName:`CodeCommit`,description:`Read pull requests from one AWS CodeCommit repository.`},codepipeline:{providerId:`codepipeline`,displayName:`CodePipeline`,description:`Read pipeline and execution state from AWS CodePipeline.`},jira:{providerId:`jira`,displayName:`Jira`,description:`Read delivery issues from Jira Cloud.`},confluence:{providerId:`confluence`,displayName:`Confluence`,description:`Read release documentation from Confluence Cloud.`},clockify:{providerId:`clockify`,displayName:`Clockify`,description:`Read bounded time-entry evidence and govern association corrections and approvals.`}},s=[o.codecommit,o.codepipeline,o.jira,o.confluence,o.clockify],c=e=>s.find(({providerId:t})=>t===e)?.providerId??null,l=e=>`/pair?service=${e}`,u=(e,t)=>c(e.get(t)),d=e=>`/services?enable=${e}`,f=(e,t=null,n=null)=>{let r=new URLSearchParams({enable:e.includes(`jira`)?`jira`:`confluence`});t!==null&&r.set(`atlassianProfile`,t),n!==null&&r.set(`atlassianSite`,n);for(let t of e)r.append(`atlassianProvider`,t);return`/services?${r.toString()}`},p=(e,t)=>`/services?${new URLSearchParams({atlassianRecoveryConnection:e,atlassianRecoveryProfile:t}).toString()}`,m=e=>{let t=e.getAll(`atlassianRecoveryConnection`);if(t.length!==1)return null;let n=r(i)(t[0]);return a(n)?n.success:null},h=e=>{let t=e.getAll(`atlassianRecoveryProfile`);if(t.length!==1)return null;let[n]=t;return n!==void 0&&n.length>0&&n.length<=500&&n.trim()===n?n:null},g=e=>{let t=e.getAll(`atlassianSite`);if(t.length!==1)return null;let[n]=t;return n!==void 0&&n.length>0&&n.length<=512&&n.trim()===n?n:null},_=e=>{let t=e.getAll(`atlassianProfile`);if(t.length!==1)return null;let[n]=t;return n!==void 0&&n.length>0&&n.length<=500&&n.trim()===n?n:null},v=e=>{let t=e.getAll(`atlassianProvider`);return t.length===1&&t[0]===`jira`?[`jira`]:t.length===1&&t[0]===`confluence`?[`confluence`]:t.length===2&&t.includes(`jira`)&&t.includes(`confluence`)?[`jira`,`confluence`]:null};export{g as a,u as c,s as d,v as i,l,f as n,m as o,_ as r,h as s,p as t,d as u};
|
|
2
|
-
//# sourceMappingURL=serviceOnboarding-Jg_0yNjf.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./releasePaths-XoI2BHX3.js";import{n as t,r as n,s as r,t as i}from"./index-j5ze816l.js";import{Ca as a,Cn as o,Jn as s,Kn as c,Un as l,Yn as u,bn as d,in as f,ur as p,wa as m}from"./agent-api-QVqt4a0O.js";import{t as h,u as g}from"./releaseRoutes-BCuIdZyA.js";import{t as _}from"./workspaceEntityPaths-xAl2jRFm.js";var v=u({hash:s,pathname:s,search:s,state:c(h)}),y=u({entityOrigin:u({_tag:l(`entity-origin/v2`),entityId:f,origin:v,workspaceId:o})}),b=e=>{if(e.includes(`?`)||e.includes(`#`))return null;let t=e.split(`/`);if(t.length!==5||t[0]!==``||t[1]!==`w`||t[3]!==`items`)return null;let n=p(o)(t[2]),r=p(f)(t[4]);return m(n)&&m(r)?{entityId:r.value,workspaceId:n.value}:null},x=e=>{let t=p(f)(e);return m(t)?t.value:null},S=e=>({hash:``,pathname:_(e),search:``,state:null}),C=e=>e.length<=2048&&(e.length===0||e.startsWith(`?`)),w=e=>e.length<=1024&&(e.length===0||e.startsWith(`#`)),T=(e,t)=>{if(e.length!==5&&e.length!==6||e[0]!==``||e[1]!==`w`||e[2]!==t||e[3]!==`releases`)return null;let n=p(d)(e[4]);return a(n)||e.length===6&&e[5]!==`preview`?null:{releaseId:n.value,workspaceId:t}},E=(e,t)=>{if(e.length>2048)return!1;let n=e.split(`/`);return n[0]!==``||n[1]!==`w`||n[2]!==t?!1:n.length===4?[`overview`,`work`,`items`,`timeline`].includes(n[3]??``):T(n,t)!==null},D=({hash:e,pathname:t,search:n,state:r})=>{let i=p(o)(t.split(`/`)[2]),a=m(i)?T(t.split(`/`),i.value):null;return{hash:e,pathname:t,search:n,state:a===null?null:g(r,a.workspaceId,a.releaseId)}},O=(e,t)=>{if(!E(e.pathname,t)||!C(e.search)||!w(e.hash))return!1;if(e.state===null)return!0;let n=T(e.pathname.split(`/`),t);return n!==null&&g(e.state,t,n.releaseId)!==null},k=(e,t)=>{let n=p(y)(e);if(a(n))return null;let r=n.value.entityOrigin;return r.workspaceId===t&&O(r.origin,t)?r.origin:null},A=(e,t,n,r)=>({entityOrigin:{_tag:`entity-origin/v2`,entityId:n,origin:k(e,t)??(O(r,t)?r:S(t)),workspaceId:t}}),j=(e,t,n)=>{let r=S(t),i=p(y)(e);if(a(i))return{isStored:!1,origin:r};let o=i.value.entityOrigin;return o.workspaceId===t&&o.entityId===n&&O(o.origin,t)?{isStored:!0,origin:o.origin}:{isStored:!1,origin:r}},M=({hash:e,pathname:t,search:n})=>`${t}${n}${e}`,N=(t,n,i,a,o)=>{let s=T(t.pathname.split(`/`),n),c=a.canonicalReleaseId,l=s===null?a.releaseMembershipsTruncated||a.releaseIds.length!==1||a.releaseIds[0]!==c||c===null||!o.has(c)?null:e(n,c):!a.releaseMembershipsTruncated&&a.releaseIds.includes(s.releaseId)&&o.has(s.releaseId)?e(n,s.releaseId):null;if(l!==null)return l;let u=b(i.pathname);if(u===null||u.workspaceId!==n)return r(i.pathname,i.search,i.hash);let d=new URLSearchParams(t.pathname===_(n)?t.search:``);return d.set(`object`,u.entityId),r(_(n),`?${d.toString()}`,`#item-details`)},P=32,F=(e,t)=>!e.defaultPrevented&&e.button===0&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey&&(t===``||t===`_self`),I=(e,r)=>{let a=n(e);for(let[n,i]of t){if(!i[3]||!i[2].includes(e.pathname))continue;let a=i[2].includes(r)?i[2]:[...i[2],r];t.set(n,[i[0],i[1],a,!0])}t.delete(a);let o=document.querySelector(i),s=[o?.scrollTop??window.scrollY,o!==null,[r],!1];if(!(s[0]<=2)&&(t.set(a,s),!(t.size<=P)))for(let e of t.keys()){t.delete(e);break}};export{A as a,M as c,D as i,b as l,F as n,j as o,x as r,N as s,I as t};
|
|
2
|
-
//# sourceMappingURL=workspaceScrollCapture-CJ4QUptr.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceScrollCapture-CJ4QUptr.js","names":[],"sources":["../../../src/client/items/workspaceEntityRoutes.ts","../../../src/client/workspaceScrollCapture.ts"],"sourcesContent":["import * as Option from \"effect/Option\"\nimport * as Schema from \"effect/Schema\"\n\nimport {\n EntityId,\n type EntityId as EntityIdType,\n ReleaseId,\n type ReleaseId as ReleaseIdType,\n WorkspaceId,\n type WorkspaceId as WorkspaceIdType\n} from \"../../domain/identifiers.js\"\nimport { contextualAgentPath } from \"../contextualAgentPath.js\"\nimport { releaseAgentPath } from \"../releases/releasePaths.js\"\nimport { type ReleaseRouteState, ReleaseRouteStateSchema, retainReleaseRouteState } from \"../releases/releaseRoutes.js\"\nimport { workspaceEntityParentPath } from \"../workspaceEntityPaths.js\"\n\nexport { workspaceEntityParentPath, workspaceEntityPath } from \"../workspaceEntityPaths.js\"\n\n/** Exact in-application location preserved while a canonical entity route is open. */\nexport interface WorkspaceEntityOrigin {\n readonly hash: string\n readonly pathname: string\n readonly search: string\n readonly state: ReleaseRouteState | null\n}\n\n/** Versioned, bounded router state for one canonical entity activation. */\nexport interface WorkspaceEntityRouteState {\n readonly entityOrigin: {\n readonly _tag: \"entity-origin/v2\"\n readonly entityId: EntityIdType\n readonly origin: WorkspaceEntityOrigin\n readonly workspaceId: WorkspaceIdType\n }\n}\n\n/** Decoded entity origin plus whether it came from trusted matching history state. */\nexport interface ResolvedWorkspaceEntityOrigin {\n readonly isStored: boolean\n readonly origin: WorkspaceEntityOrigin\n}\n\n/** Decoded target of one exact canonical workspace entity href. */\nexport interface WorkspaceEntityTarget {\n readonly entityId: EntityIdType\n readonly workspaceId: WorkspaceIdType\n}\n\n/** Release membership evidence used to select an unambiguous entity-owned agent thread. */\nexport interface WorkspaceEntityReleaseContext {\n readonly canonicalReleaseId: ReleaseIdType | null\n readonly releaseIds: ReadonlyArray<ReleaseIdType>\n readonly releaseMembershipsTruncated: boolean\n}\n\ninterface LocationParts {\n readonly hash: string\n readonly pathname: string\n readonly search: string\n readonly state?: unknown\n}\n\nconst WorkspaceEntityOriginSchema = Schema.Struct({\n hash: Schema.String,\n pathname: Schema.String,\n search: Schema.String,\n state: Schema.NullOr(ReleaseRouteStateSchema)\n})\n\nconst WorkspaceEntityRouteStateSchema = Schema.Struct({\n entityOrigin: Schema.Struct({\n _tag: Schema.Literal(\"entity-origin/v2\"),\n entityId: EntityId,\n origin: WorkspaceEntityOriginSchema,\n workspaceId: WorkspaceId\n })\n})\n\n/** Decode only an exact canonical entity path, rejecting query, hash, and extra path material. */\nexport const workspaceEntityTargetFromHref = (href: string): WorkspaceEntityTarget | null => {\n if (href.includes(\"?\") || href.includes(\"#\")) return null\n const parts = href.split(\"/\")\n if (parts.length !== 5 || parts[0] !== \"\" || parts[1] !== \"w\" || parts[3] !== \"items\") return null\n const workspaceId = Schema.decodeUnknownOption(WorkspaceId)(parts[2])\n const entityId = Schema.decodeUnknownOption(EntityId)(parts[4])\n return Option.isSome(workspaceId) && Option.isSome(entityId)\n ? { entityId: entityId.value, workspaceId: workspaceId.value }\n : null\n}\n\n/** Decode one entity route segment at the browser boundary. */\nexport const decodeEntityRouteId = (value: unknown): EntityIdType | null => {\n const decoded = Schema.decodeUnknownOption(EntityId)(value)\n return Option.isSome(decoded) ? decoded.value : null\n}\n\nconst fallbackOrigin = (workspaceId: WorkspaceIdType): WorkspaceEntityOrigin => ({\n hash: \"\",\n pathname: workspaceEntityParentPath(workspaceId),\n search: \"\",\n state: null\n})\n\nconst isSearch = (search: string): boolean => search.length <= 2_048 && (search.length === 0 || search.startsWith(\"?\"))\n\nconst isHash = (hash: string): boolean => hash.length <= 1_024 && (hash.length === 0 || hash.startsWith(\"#\"))\n\nconst releaseOriginTarget = (\n parts: ReadonlyArray<string>,\n workspaceId: WorkspaceIdType\n): { readonly releaseId: ReleaseIdType; readonly workspaceId: WorkspaceIdType } | null => {\n if (parts.length !== 5 && parts.length !== 6) return null\n if (parts[0] !== \"\" || parts[1] !== \"w\" || parts[2] !== workspaceId || parts[3] !== \"releases\") return null\n const releaseId = Schema.decodeUnknownOption(ReleaseId)(parts[4])\n if (Option.isNone(releaseId) || (parts.length === 6 && parts[5] !== \"preview\")) return null\n return { releaseId: releaseId.value, workspaceId }\n}\n\nconst isRecognizedOriginPath = (pathname: string, workspaceId: WorkspaceIdType): boolean => {\n if (pathname.length > 2_048) return false\n const parts = pathname.split(\"/\")\n if (parts[0] !== \"\" || parts[1] !== \"w\" || parts[2] !== workspaceId) return false\n if (parts.length === 4) return [\"overview\", \"work\", \"items\", \"timeline\"].includes(parts[3] ?? \"\")\n return releaseOriginTarget(parts, workspaceId) !== null\n}\n\n/** Capture an exact location while retaining only matching, bounded release origin state. */\nexport const entityOriginFromLocation = ({\n hash,\n pathname,\n search,\n state\n}: LocationParts): WorkspaceEntityOrigin => {\n const workspaceId = Schema.decodeUnknownOption(WorkspaceId)(pathname.split(\"/\")[2])\n const target = Option.isSome(workspaceId) ? releaseOriginTarget(pathname.split(\"/\"), workspaceId.value) : null\n return {\n hash,\n pathname,\n search,\n state: target === null ? null : retainReleaseRouteState(state, target.workspaceId, target.releaseId)\n }\n}\n\n/** Confirm an origin is bounded and belongs to a supported page in the exact workspace. */\nexport const isSafeWorkspaceEntityOrigin = (\n origin: WorkspaceEntityOrigin,\n workspaceId: WorkspaceIdType\n): boolean => {\n if (!isRecognizedOriginPath(origin.pathname, workspaceId) || !isSearch(origin.search) || !isHash(origin.hash)) {\n return false\n }\n if (origin.state === null) return true\n const target = releaseOriginTarget(origin.pathname.split(\"/\"), workspaceId)\n return target !== null && retainReleaseRouteState(origin.state, workspaceId, target.releaseId) !== null\n}\n\nconst reusableStoredOrigin = (\n state: unknown,\n workspaceId: WorkspaceIdType\n): WorkspaceEntityOrigin | null => {\n const decoded = Schema.decodeUnknownOption(WorkspaceEntityRouteStateSchema)(state)\n if (Option.isNone(decoded)) return null\n const marker = decoded.value.entityOrigin\n return marker.workspaceId === workspaceId && isSafeWorkspaceEntityOrigin(marker.origin, workspaceId)\n ? marker.origin\n : null\n}\n\n/**\n * Construct bounded entity route state.\n *\n * A previously validated entity origin is carried through related-entity navigation so the\n * shell's explicit Back action still returns to the root activation surface.\n */\nexport const makeWorkspaceEntityRouteState = (\n state: unknown,\n workspaceId: WorkspaceIdType,\n entityId: EntityIdType,\n origin: WorkspaceEntityOrigin\n): WorkspaceEntityRouteState => ({\n entityOrigin: {\n _tag: \"entity-origin/v2\",\n entityId,\n origin: reusableStoredOrigin(state, workspaceId) ??\n (isSafeWorkspaceEntityOrigin(origin, workspaceId) ? origin : fallbackOrigin(workspaceId)),\n workspaceId\n }\n})\n\n/** Decode safe history state for the exact workspace/entity pair or use the Items parent. */\nexport const resolveWorkspaceEntityOrigin = (\n state: unknown,\n workspaceId: WorkspaceIdType,\n entityId: EntityIdType\n): ResolvedWorkspaceEntityOrigin => {\n const fallback = fallbackOrigin(workspaceId)\n const decoded = Schema.decodeUnknownOption(WorkspaceEntityRouteStateSchema)(state)\n if (Option.isNone(decoded)) return { isStored: false, origin: fallback }\n const marker = decoded.value.entityOrigin\n return marker.workspaceId === workspaceId &&\n marker.entityId === entityId &&\n isSafeWorkspaceEntityOrigin(marker.origin, workspaceId)\n ? { isStored: true, origin: marker.origin }\n : { isStored: false, origin: fallback }\n}\n\n/** Serialize an exact validated origin for React Router navigation. */\nexport const workspaceEntityOriginHref = ({\n hash,\n pathname,\n search\n}: WorkspaceEntityOrigin): string => `${pathname}${search}${hash}`\n\n/** Resolve a release-owned agent thread only when the stored origin is an exact release route. */\nexport const workspaceEntityOriginAgentPath = (\n origin: WorkspaceEntityOrigin,\n workspaceId: WorkspaceIdType,\n routableReleaseIds: ReadonlySet<ReleaseIdType>\n): string | null => {\n const target = releaseOriginTarget(origin.pathname.split(\"/\"), workspaceId)\n return target === null || !routableReleaseIds.has(target.releaseId)\n ? null\n : releaseAgentPath(target.workspaceId, target.releaseId)\n}\n\n/** Keep entity actions in a release-owned thread, falling back to the current-page context. */\nexport const workspaceEntityAgentPath = (\n origin: WorkspaceEntityOrigin,\n workspaceId: WorkspaceIdType,\n current: Pick<LocationParts, \"hash\" | \"pathname\" | \"search\">,\n releaseContext: WorkspaceEntityReleaseContext,\n routableReleaseIds: ReadonlySet<ReleaseIdType>\n): string => {\n const originRelease = releaseOriginTarget(origin.pathname.split(\"/\"), workspaceId)\n const canonicalReleaseId = releaseContext.canonicalReleaseId\n const releasePath = originRelease === null\n ? releaseContext.releaseMembershipsTruncated ||\n releaseContext.releaseIds.length !== 1 ||\n releaseContext.releaseIds[0] !== canonicalReleaseId ||\n canonicalReleaseId === null ||\n !routableReleaseIds.has(canonicalReleaseId)\n ? null\n : releaseAgentPath(workspaceId, canonicalReleaseId)\n : !releaseContext.releaseMembershipsTruncated &&\n releaseContext.releaseIds.includes(originRelease.releaseId) &&\n routableReleaseIds.has(originRelease.releaseId)\n ? releaseAgentPath(workspaceId, originRelease.releaseId)\n : null\n if (releasePath !== null) return releasePath\n\n const entity = workspaceEntityTargetFromHref(current.pathname)\n if (entity === null || entity.workspaceId !== workspaceId) {\n return contextualAgentPath(current.pathname, current.search, current.hash)\n }\n const itemSearch = new URLSearchParams(\n origin.pathname === workspaceEntityParentPath(workspaceId) ? origin.search : \"\"\n )\n itemSearch.set(\"object\", entity.entityId)\n return contextualAgentPath(\n workspaceEntityParentPath(workspaceId),\n `?${itemSearch.toString()}`,\n \"#item-details\"\n )\n}\n","import type { Location } from \"react-router\"\n\nimport {\n RELEASE_PREVIEW_SCROLL_SELECTOR,\n type SavedWorkspaceScrollPosition,\n savedWorkspaceScrollPositions,\n SCROLL_POSITION_TOLERANCE,\n workspaceScrollRestorationKey\n} from \"./workspaceScrollRestoration.js\"\n\nconst MAXIMUM_SAVED_WORKSPACE_SCROLL_POSITIONS = 32\n\ninterface WorkspaceNavigationClick {\n readonly altKey: boolean\n readonly button: number\n readonly ctrlKey: boolean\n readonly defaultPrevented: boolean\n readonly metaKey: boolean\n readonly shiftKey: boolean\n}\n\n/** Match the same primary, unmodified, same-tab click contract as React Router. */\nexport const shouldRememberWorkspaceScrollPosition = (event: WorkspaceNavigationClick, linkTarget: string): boolean =>\n !event.defaultPrevented &&\n event.button === 0 &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.shiftKey &&\n (linkTarget === \"\" || linkTarget === \"_self\")\n\n/** Remember the current viewport before opening a canonical entity route. */\nexport const rememberWorkspaceScrollPosition = (\n location: Pick<Location, \"hash\" | \"pathname\" | \"search\">,\n entityPath: string\n): void => {\n const key = workspaceScrollRestorationKey(location)\n for (const [originKey, saved] of savedWorkspaceScrollPositions) {\n if (!saved[3] || !saved[2].includes(location.pathname)) continue\n const entityPaths = saved[2].includes(entityPath) ? saved[2] : [...saved[2], entityPath]\n savedWorkspaceScrollPositions.set(originKey, [saved[0], saved[1], entityPaths, true])\n }\n savedWorkspaceScrollPositions.delete(key)\n const previewScroller = document.querySelector<HTMLElement>(RELEASE_PREVIEW_SCROLL_SELECTOR)\n const savedPosition = [\n previewScroller?.scrollTop ?? window.scrollY,\n previewScroller !== null,\n [entityPath],\n false\n ] satisfies SavedWorkspaceScrollPosition\n if (savedPosition[0] <= SCROLL_POSITION_TOLERANCE) return\n savedWorkspaceScrollPositions.set(key, savedPosition)\n if (savedWorkspaceScrollPositions.size <= MAXIMUM_SAVED_WORKSPACE_SCROLL_POSITIONS) return\n for (const oldestKey of savedWorkspaceScrollPositions.keys()) {\n savedWorkspaceScrollPositions.delete(oldestKey)\n break\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Ai as e,Di as t,lr as n,wn as r,yi as i}from"./agent-api-QVqt4a0O.js";import{a,t as o}from"./client-D27unen8.js";import{n as s,t as c}from"./BrowserCrypto-DVWR7DFd.js";import{t as l}from"./authenticatedMutationClient-Ccwguc3i.js";var u={load:n=>e(i(function*(){return yield*(yield*o()).workspaceSettings.readPresentation()}).pipe(t(a)),{signal:n})},d={load:n=>e(i(function*(){return yield*(yield*o()).workspaceSettings.read()}).pipe(t(a)),{signal:n}),makeMutationId:()=>e(i(function*(){let e=yield*s;return yield*n(r)(yield*e.randomUUIDv7)}).pipe(t(c))),update:(n,r)=>e(i(function*(){return yield*(yield*l).workspaceSettings.update({payload:n})}).pipe(t(a)),{signal:r})};export{u as browserWorkspacePresentationTransport,d as browserWorkspaceSettingsTransport};
|
|
2
|
-
//# sourceMappingURL=workspaceSettingsTransport-CZWYL5T7.js.map
|