@knpkv/control-center 0.3.0 → 0.4.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 +52 -9
- package/dist/client/.vite/manifest.json +183 -170
- package/dist/client/assets/{ActiveWorkPage-DJQgGZeV.js → ActiveWorkPage-Dd1mxPrq.js} +2 -2
- package/dist/client/assets/{ActiveWorkPage-DJQgGZeV.js.map → ActiveWorkPage-Dd1mxPrq.js.map} +1 -1
- package/dist/client/assets/AgentPage-C3LThgPZ.js +3 -0
- package/dist/client/assets/AgentPage-C3LThgPZ.js.map +1 -0
- package/dist/client/assets/{AtlassianOAuthCallbackPage-D1F1xE_2.js → AtlassianOAuthCallbackPage-BPoF6oKf.js} +2 -2
- package/dist/client/assets/{AtlassianOAuthCallbackPage-D1F1xE_2.js.map → AtlassianOAuthCallbackPage-BPoF6oKf.js.map} +1 -1
- package/dist/client/assets/AuthorizedSharePage-jjqu6W_f.js +2 -0
- package/dist/client/assets/AuthorizedSharePage-jjqu6W_f.js.map +1 -0
- package/dist/client/assets/BrowserCrypto-BMbjhcvP.js +2 -0
- package/dist/client/assets/{BrowserCrypto-DVWR7DFd.js.map → BrowserCrypto-BMbjhcvP.js.map} +1 -1
- package/dist/client/assets/BrowserSessionHydrator-BC1ymLkL.js +2 -0
- package/dist/client/assets/BrowserSessionHydrator-BC1ymLkL.js.map +1 -0
- package/dist/client/assets/CommandSearch-WwAVDrD9.js +2 -0
- package/dist/client/assets/{CommandSearch-CP_QCbkm.js.map → CommandSearch-WwAVDrD9.js.map} +1 -1
- package/dist/client/assets/ItemsPage-CKK_KkJ2.js +2 -0
- package/dist/client/assets/{ItemsPage-BGFUkRL2.js.map → ItemsPage-CKK_KkJ2.js.map} +1 -1
- package/dist/client/assets/{PairPage-DIgzx0K2.js → PairPage-DA6cmyqF.js} +2 -2
- package/dist/client/assets/{PairPage-DIgzx0K2.js.map → PairPage-DA6cmyqF.js.map} +1 -1
- package/dist/client/assets/PortfolioOverview-CEI4gpXi.js +2 -0
- package/dist/client/assets/PortfolioOverview-CEI4gpXi.js.map +1 -0
- package/dist/client/assets/PullRequestReviewPanel-D7AKnwL-.js +6 -0
- package/dist/client/assets/PullRequestReviewPanel-D7AKnwL-.js.map +1 -0
- package/dist/client/assets/ReleaseRoute-CbPW3qUT.js +2 -0
- package/dist/client/assets/{ReleaseRoute-DXJ8Jg60.js.map → ReleaseRoute-CbPW3qUT.js.map} +1 -1
- package/dist/client/assets/ReleaseWorkset-BluAe7Sq.js +2 -0
- package/dist/client/assets/{ReleaseWorkset-Dtzalmji.js.map → ReleaseWorkset-BluAe7Sq.js.map} +1 -1
- package/dist/client/assets/ServicesPage-_B89DAvG.js +2 -0
- package/dist/client/assets/ServicesPage-_B89DAvG.js.map +1 -0
- package/dist/client/assets/TimelinePage-DvpgD8AY.js +2 -0
- package/dist/client/assets/TimelinePage-DvpgD8AY.js.map +1 -0
- package/dist/client/assets/WorkspaceEntityLink-DPj6MKI2.js +2 -0
- package/dist/client/assets/{WorkspaceEntityLink-AdZ_T-Wk.js.map → WorkspaceEntityLink-DPj6MKI2.js.map} +1 -1
- package/dist/client/assets/WorkspaceEntityRoute-B01fxxB3.js +3 -0
- package/dist/client/assets/WorkspaceEntityRoute-B01fxxB3.js.map +1 -0
- package/dist/client/assets/{WorkspaceHomeLink-XbKSPths.js → WorkspaceHomeLink-CkJfzO25.js} +2 -2
- package/dist/client/assets/{WorkspaceHomeLink-XbKSPths.js.map → WorkspaceHomeLink-CkJfzO25.js.map} +1 -1
- package/dist/client/assets/WorkspacePullRequestDetails-HwDgp12e.js +3 -0
- package/dist/client/assets/WorkspacePullRequestDetails-HwDgp12e.js.map +1 -0
- package/dist/client/assets/{WorkspaceReleaseLayout-cfboC5Qh.js → WorkspaceReleaseLayout-CGHi8eoo.js} +2 -2
- package/dist/client/assets/{WorkspaceReleaseLayout-cfboC5Qh.js.map → WorkspaceReleaseLayout-CGHi8eoo.js.map} +1 -1
- package/dist/client/assets/{WorkspaceSettingsPage-Fy7Wx8Y2.js → WorkspaceSettingsPage-DyoGiGJG.js} +2 -2
- package/dist/client/assets/{WorkspaceSettingsPage-Fy7Wx8Y2.js.map → WorkspaceSettingsPage-DyoGiGJG.js.map} +1 -1
- package/dist/client/assets/agent-api-CeONl_8w.js +19 -0
- package/dist/client/assets/agent-api-CeONl_8w.js.map +1 -0
- package/dist/client/assets/authenticatedMutationClient-DYaieXUe.js +2 -0
- package/dist/client/assets/{authenticatedMutationClient-Ccwguc3i.js.map → authenticatedMutationClient-DYaieXUe.js.map} +1 -1
- package/dist/client/assets/authorizedShareTransport-cxBoQzQ2.js +2 -0
- package/dist/client/assets/{authorizedShareTransport-DZHgFEkh.js.map → authorizedShareTransport-cxBoQzQ2.js.map} +1 -1
- package/dist/client/assets/client-DKS82kT_.js +5 -0
- package/dist/client/assets/client-DKS82kT_.js.map +1 -0
- package/dist/client/assets/connectionTestTransport-I_Ga9UNs.js +2 -0
- package/dist/client/assets/{connectionTestTransport-BQ55d6Me.js.map → connectionTestTransport-I_Ga9UNs.js.map} +1 -1
- package/dist/client/assets/index-C7_FDTU7.js +11 -0
- package/dist/client/assets/index-C7_FDTU7.js.map +1 -0
- package/dist/client/assets/{patterns-5N-j-AD2-BwypFm-e.js → patterns-5N-j-AD2-B9qgekXA.js} +2 -2
- package/dist/client/assets/{patterns-5N-j-AD2-BwypFm-e.js.map → patterns-5N-j-AD2-B9qgekXA.js.map} +1 -1
- package/dist/client/assets/{presentPortfolio-D3ZIcnqt.js → presentPortfolio-C_JsoSWg.js} +2 -2
- package/dist/client/assets/presentPortfolio-C_JsoSWg.js.map +1 -0
- package/dist/client/assets/{presentWorkspaceItems-Bmh4oEbH.js → presentWorkspaceItems-DboAfwGc.js} +2 -2
- package/dist/client/assets/{presentWorkspaceItems-Bmh4oEbH.js.map → presentWorkspaceItems-DboAfwGc.js.map} +1 -1
- package/dist/client/assets/{pullRequestReviewFailures-S74M-fOk.js → pullRequestReviewFailures-DHmYwffV.js} +2 -2
- package/dist/client/assets/{pullRequestReviewFailures-S74M-fOk.js.map → pullRequestReviewFailures-DHmYwffV.js.map} +1 -1
- package/dist/client/assets/pullRequestReviewThreadReplay-Vy1k53qE.js +2 -0
- package/dist/client/assets/pullRequestReviewThreadReplay-Vy1k53qE.js.map +1 -0
- package/dist/client/assets/releaseRoutes-t9uCfs5T.js +2 -0
- package/dist/client/assets/{releaseRoutes-BCuIdZyA.js.map → releaseRoutes-t9uCfs5T.js.map} +1 -1
- package/dist/client/assets/serviceOnboarding-DLINCon7.js +2 -0
- package/dist/client/assets/{serviceOnboarding-Jg_0yNjf.js.map → serviceOnboarding-DLINCon7.js.map} +1 -1
- package/dist/client/assets/{useWorkspaceDefaultLanding-CzlDdEF-.js → useWorkspaceDefaultLanding-CC5ImHkL.js} +3 -3
- package/dist/client/assets/{useWorkspaceDefaultLanding-CzlDdEF-.js.map → useWorkspaceDefaultLanding-CC5ImHkL.js.map} +1 -1
- package/dist/client/assets/{useWorkspaceItems-Cd3MPke2.js → useWorkspaceItems-B1X-JNwq.js} +2 -2
- package/dist/client/assets/{useWorkspaceItems-Cd3MPke2.js.map → useWorkspaceItems-B1X-JNwq.js.map} +1 -1
- package/dist/client/assets/workspaceEntityRoutes-2TejMrzb.js +2 -0
- package/dist/client/assets/workspaceEntityRoutes-2TejMrzb.js.map +1 -0
- package/dist/client/assets/workspaceScrollCapture-BsjcWVsk.js +2 -0
- package/dist/client/assets/workspaceScrollCapture-BsjcWVsk.js.map +1 -0
- package/dist/client/assets/workspaceSettingsTransport-Dw2hueXv.js +2 -0
- package/dist/client/assets/{workspaceSettingsTransport-CZWYL5T7.js.map → workspaceSettingsTransport-Dw2hueXv.js.map} +1 -1
- package/dist/client/build-graph.json +17 -0
- package/dist/client/index.html +1 -1
- package/dist/server/api/agent.d.ts +563 -44
- package/dist/server/api/agent.d.ts.map +1 -1
- package/dist/server/api/deliveryGraph.d.ts +454 -454
- package/dist/server/api/index.d.ts +1 -1
- 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/shares.d.ts +2 -2
- package/dist/server/assets/{BindConfig-DIsf2Rnh.js → BindConfig-Bj282xDC.js} +2094 -290
- package/dist/server/assets/BindConfig-Bj282xDC.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-ZvwskOQu.js} +160 -10
- package/dist/server/assets/agent-ZvwskOQu.js.map +1 -0
- package/dist/server/assets/{controlCenterApi-ZUX3Y-LE.js → controlCenterApi-5j3gOXgE.js} +5 -5
- package/dist/server/assets/{controlCenterApi-ZUX3Y-LE.js.map → controlCenterApi-5j3gOXgE.js.map} +1 -1
- 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-CzIhZ_Dw.js} +5 -5
- package/dist/server/assets/{manualPluginSynchronization-DFlhKvav.js.map → manualPluginSynchronization-CzIhZ_Dw.js.map} +1 -1
- 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-BtntBhDj.js} +3 -3
- package/dist/server/assets/{readiness-BhA-Nr9c.js.map → readiness-BtntBhDj.js.map} +1 -1
- package/dist/server/assets/{relationshipInferenceMaterialization-DYBcaWhQ.js → relationshipInferenceMaterialization-CR6xyMNL.js} +1121 -159
- package/dist/server/assets/relationshipInferenceMaterialization-CR6xyMNL.js.map +1 -0
- package/dist/server/assets/{workspaceSettings-BE713Oe8.js → workspaceSettings-C2Zsk6RI.js} +2784 -2700
- package/dist/server/assets/workspaceSettings-C2Zsk6RI.js.map +1 -0
- package/dist/server/build-graph.json +117 -4
- package/dist/server/domain/actors.d.ts +12 -12
- package/dist/server/domain/deliveryGraph.d.ts +49 -49
- package/dist/server/domain/governedAction/bindings.d.ts +24 -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 +39 -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/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/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.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/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/pipelineExecutionProjection.d.ts +6 -6
- package/dist/server/server/application/portfolioSnapshots.d.ts +2014 -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 +3699 -0
- package/dist/server/server/application/releasePublicationSubmissions.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 +233 -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 +36 -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 +1539 -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/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 +138 -138
- package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts +25 -25
- package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts +111 -111
- package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts +27 -27
- package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts +48 -48
- package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts +111 -111
- package/dist/server/server/persistence/repositories/governed-action/codec.d.ts +255 -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 +66 -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 +664 -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 +676 -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 +37 -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 +44 -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 +44 -32
- package/dist/server/server/persistence/repositories/governed-action/write.d.ts.map +1 -1
- package/dist/server/server/persistence/repositories/governedActionRepository.d.ts +674 -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 +9 -8
- package/dist/client/assets/AgentPage-DGL93TJU.js +0 -3
- package/dist/client/assets/AgentPage-DGL93TJU.js.map +0 -1
- 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/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-Bxxnc8us.js +0 -3
- package/dist/client/assets/WorkspaceEntityRoute-Bxxnc8us.js.map +0 -1
- package/dist/client/assets/WorkspacePullRequestDetails-BErJ5bk8.js +0 -3
- package/dist/client/assets/WorkspacePullRequestDetails-BErJ5bk8.js.map +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/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/relationshipInferenceMaterialization-DYBcaWhQ.js.map +0 -1
- package/dist/server/assets/workspaceSettings-BE713Oe8.js.map +0 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/diff-B5q8dDxd.js","assets/rolldown-runtime-QTnfLwEv.js","assets/react-CZI7_Jkm.js","assets/react-dom-cJyBB_A4.js","assets/preload-helper-Czpn1I53.js","assets/jsx-runtime-By8HlURe.js","assets/component-BJeeRuSu-Bu7KhcFC.js","assets/workbench-tHBnbqSx-BUtNhWVC.js","assets/rolldown-runtime-Dqa2HsxW-DwrjHvwf.js","assets/DiffLineFocus-kR-WQmSz.js","assets/ReviewSuggestionOverview-CMX0mhOH.js","assets/WorkspacePullRequestDiff.module-DJEWRmoT.js","assets/WorkspacePullRequestDiff-HJB-ezE4.css","assets/PullRequestReviewPanel-D7AKnwL-.js","assets/Dialog-xSrBk0Vv-ClGyDPlc.js","assets/PortalProvider-BpgZwSpw-aHWGwW1o.js","assets/primitives-nKxQGSsE-CJNmac__.js","assets/agent-api-CeONl_8w.js","assets/client-DKS82kT_.js","assets/authenticatedMutationClient-DYaieXUe.js","assets/WorkspacePullRequestDetails.module-CCFLGO4V.js","assets/WorkspacePullRequestDetails-DrPltvYZ.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{t}from"./react-CZI7_Jkm.js";import{t as n}from"./preload-helper-Czpn1I53.js";import{t as r}from"./jsx-runtime-By8HlURe.js";import{o as i}from"./patterns-5N-j-AD2-B9qgekXA.js";import{r as a}from"./primitives-nKxQGSsE-CJNmac__.js";import{$i as o,Aa as s,Bi as c,Ca as l,Ea as u,Ma as d,Na as f,Nr as p,Oa as m,Qi as h,Ri as g,Sa as _,Ta as v,Wi as y,Xi as b,Zi as x,_a as S,_i as C,ai as w,ba as T,ca as E,ea as D,fa as O,ga as k,la as A,ma as j,pa as M,pi as N,ua as P,wa as ee,xa as te,zi as F}from"./agent-api-CeONl_8w.js";import{a as I,t as L}from"./client-DKS82kT_.js";import{t as R}from"./WorkspacePullRequestDetails.module-CCFLGO4V.js";import{t as z}from"./WorkspacePullRequestDiff.module-DJEWRmoT.js";import{t as B}from"./WorkspaceRichText-D1M637Ff.js";import{n as ne,r as re,t as ie}from"./workbench-tHBnbqSx-BUtNhWVC.js";var V={"~effect/match/Match/Matcher":{_input:d,_filters:d,_remaining:d,_result:d,_return:d},_tag:`TypeMatcher`,add(e){return H([...this.cases,e])},pipe(){return f(this,arguments)}};function H(e){let t=Object.create(V);return t.cases=e,t}var U=(e,t)=>({_tag:`When`,guard:e,evaluate:t}),W=e=>{if(typeof e==`function`)return e;if(Array.isArray(e)){let t=e.map(W),n=t.length;return e=>{if(!Array.isArray(e))return!1;for(let r=0;r<n;r++)if(t[r](e[r])===!1)return!1;return!0}}else if(typeof e==`object`&&e){let t=Object.entries(e).map(([e,t])=>[e,W(t)]),n=t.length;return e=>{if(typeof e!=`object`||!e)return!1;for(let r=0;r<n;r++){let[n,i]=t[r];if(!(n in e)||i(e[n])===!1)return!1}return!0}}return t=>t===e},ae=()=>H([]),G=(e,t)=>n=>n.add(U(W(e),t)),K=e=>t=>{let n=q(t);return h(n)?n._tag===`Success`?n.success:e(n.failure):t=>{let r=n(t);return o(r)?r.success:e(r.failure)}},q=e=>{if(e._tag===`ValueMatcher`)return e.value;let t=e.cases.length;if(t===1){let t=e.cases[0];return e=>t._tag===`When`&&t.guard(e)===!0||t._tag===`Not`&&t.guard(e)===!1?D(t.evaluate(e)):b(e)}return n=>{for(let r=0;r<t;r++){let t=e.cases[r];if(t._tag===`When`&&t.guard(n)===!0||t._tag===`Not`&&t.guard(n)===!1)return D(t.evaluate(n))}return b(n)}},J=ae,oe=G,se=K,ce={"~effect/reactivity/AsyncResult":{E:d,A:d},pipe(){return f(this,arguments)},[te](e){if(this._tag!==e._tag||this.waiting!==e.waiting)return!1;switch(this._tag){case`Initial`:return!0;case`Success`:return T(this.value,e.value);case`Failure`:return T(this.cause,e.cause)}},[v](){let e=ee(`${this._tag}:${this.waiting}`);return this._tag===`Initial`?e:_(e)(this._tag===`Success`?l(this.value):l(this.cause))}},le=e=>e._tag===`Initial`,ue=(e=!1)=>{let t=Object.create(ce);return t._tag=`Initial`,t.waiting=e,t},de=e=>e._tag===`Success`,fe=(e,t)=>{let n=Object.create(ce);return n._tag=`Success`,n.value=e,n.waiting=t?.waiting??!1,n.timestamp=t?.timestamp??Date.now(),n},Y=e=>e._tag===`Failure`,pe=e=>new me(e),me=class{constructor(e){this.result=e}result;output=k();when(e,t){if(O(this.output)&&e(this.result)){let e=t(this.result);M(e)&&(this.output=e)}return this}pipe(){return f(this,arguments)}onWaiting(e){return this.when(e=>e.waiting,t=>S(e(t)))}onInitialOrWaiting(e){return this.when(e=>le(e)||e.waiting,t=>S(e(t)))}onInitial(e){return this.when(le,t=>S(e(t)))}onSuccess(e){return this.when(de,t=>S(e(t.value,t)))}onFailure(e){return this.when(Y,t=>S(e(t.cause,t)))}onError(e){return this.onErrorIf(s,e)}onErrorIf(e,t){return this.when(Y,n=>c(n.cause).pipe(E(e),j(e=>t(e,n))))}onErrorTag(e,t){return this.onErrorIf(t=>u(t,`_tag`)&&(Array.isArray(e)?e.includes(t._tag):t._tag===e),t)}onDefect(e){return this.when(Y,t=>{let n=F(t.cause);return x(n)?k():S(e(n.success,t))})}onInterrupt(e){return this.when(Y,t=>{let n=g(t.cause);return x(n)?k():S(e(n.success,t))})}orElse(e){return A(this.output,e)}orNull(){return P(this.output)}render(){if(M(this.output))return this.output.value;if(Y(this.result))throw y(this.result.cause);return null}exhaustive(){return this.render()}},X=e(t(),1),Z=r(),he=(0,X.lazy)(async()=>{let e=await n(()=>import(`./diff-B5q8dDxd.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8]));return{default:(0,X.forwardRef)((t,n)=>(0,Z.jsx)(e.DiffWorkerProvider,{poolSize:2,children:(0,Z.jsx)(e.DiffCodeView,{...t,ref:n})}))}}),ge=(0,X.lazy)(async()=>({default:(await n(()=>import(`./DiffLineFocus-kR-WQmSz.js`),__vite__mapDeps([9,1,2]))).DiffLineFocus})),_e=(0,X.lazy)(async()=>({default:(await n(()=>import(`./ReviewSuggestionOverview-CMX0mhOH.js`),__vite__mapDeps([10,5,1,11,12]))).ReviewSuggestionOverview})),ve={inventory:(e,t)=>C(w(function*(){return yield*(yield*L()).diff.inventory({params:{pluginConnectionId:e.pluginConnectionId,vendorImmutableId:e.vendorImmutableId},query:{revision:e.revision}})}).pipe(N(I)),{signal:t}),content:(e,t,n,r)=>C(w(function*(){return yield*(yield*L()).diff.content({params:{pluginConnectionId:e.pluginConnectionId,vendorImmutableId:e.vendorImmutableId},payload:{revision:e.revision,anchor:t.anchor,path:t.path,status:t.status,previousPath:t.previousPath,side:n,offset:0,length:1048576}})}).pipe(N(I)),{signal:r})},ye=e=>void 0,be=m(`UnauthorizedApiError`),xe=(e,t)=>{switch(t){case`all`:case`agent`:return!0;case`human`:return!1;case`unresolved`:return e.state!==`dismissed`&&e.state!==`resolved`}},Se=e=>e.binary?{state:`binary`,reason:`CodeCommit reports binary content.`}:e.generated?{state:`generated`,reason:`Generated content is indexed but not rendered.`}:e.oversized?{state:`oversized`,reason:`Content exceeds the bounded renderer limit.`}:{state:`ready`},Ce=e=>{switch(e){case`binary`:return{state:`binary`,reason:`Binary content is indexed but not rendered.`};case`generated`:return{state:`generated`,reason:`Generated content is indexed but not rendered.`};case`oversized`:return{state:`oversized`,reason:`Content exceeds the one MiB renderer limit.`};case`missing`:return{state:`unavailable`,reason:`This side is not present at the immutable revision.`};case`provider-unavailable`:return{state:`unavailable`,reason:`CodeCommit content is temporarily unavailable.`}}},we=(e,t)=>t.relativeFileVersion===`BEFORE`?e.find(e=>e.status===`renamed`&&e.previousPath!==null&&String(e.previousPath)===String(t.path))??e.find(({path:e})=>String(e)===String(t.path)):e.find(({path:e})=>String(e)===String(t.path)),Te=e=>{if(e.unavailableReason!==null||e.bytesBase64===null)return null;let t=p(e.bytesBase64);return t._tag===`Failure`?null:new TextDecoder().decode(t.success)},Ee=(e,t)=>e.status===`renamed`&&e.previousPath!==null?{id:e.anchor,path:e.path,previousPath:e.previousPath,change:`renamed`,content:t}:{id:e.anchor,path:e.path,change:e.status===`copied`?`added`:e.status===`renamed`?`modified`:e.status,content:t},De=({heading:e,onSessionExpired:t=ye,scope:n,sessionKey:r=null,suggestions:i=[],transport:a=ve})=>{let o=(0,X.useRef)(t),s=(0,X.useRef)(n);o.current=t,s.current=n;let[c,l]=(0,X.useState)({_tag:`loading`}),[u,d]=(0,X.useState)(),[f,p]=(0,X.useState)(new Map),[m,h]=(0,X.useState)(new Map),[g,_]=(0,X.useState)(0),[v,y]=(0,X.useState)(`split`),[b,x]=(0,X.useState)(!1),[S,C]=(0,X.useState)(`agent`),[w,T]=(0,X.useState)(`all`),[E,D]=(0,X.useState)(`all`),[O,k]=(0,X.useState)(),A=(0,X.useRef)(null),j=(0,X.useRef)(void 0),M=(0,X.useRef)(new Set),N=(0,X.useRef)(null),[P,ee]=(0,X.useState)(null),te=(0,X.useCallback)(e=>{N.current=e,ee(e)},[]);(0,X.useEffect)(()=>{C(`agent`),T(`all`),D(`all`)},[n.pluginConnectionId,n.revision,n.vendorImmutableId]),(0,X.useEffect)(()=>{let e=new AbortController;return l({_tag:`loading`}),d(void 0),p(new Map),h(new Map),_(0),k(void 0),j.current=void 0,M.current.clear(),a.inventory(s.current,e.signal).then(t=>{e.signal.aborted||(l({_tag:`ready`,inventory:t}),d(t.entries.find(e=>!e.generated)?.anchor))},t=>{if(!e.signal.aborted){if(r!==null&&be(t)){o.current(r);return}l({_tag:`failed`})}}),()=>e.abort()},[n.pluginConnectionId,n.revision,n.vendorImmutableId,r,a]);let F=c._tag===`ready`?c.inventory.entries:[],I=F.find(({anchor:e})=>e===u);(0,X.useEffect)(()=>{if(I===void 0||I.binary||I.generated||I.oversized||m.has(I.anchor))return;let e=new AbortController;return p(e=>new Map(e).set(I.anchor,{state:`loading`,label:`Loading bounded content`})),Promise.all([a.content(s.current,I,`before`,e.signal),a.content(s.current,I,`after`,e.signal)]).then(([t,n])=>{if(e.signal.aborted)return;let r=t.unavailableReason!==null&&t.unavailableReason!==`missing`?t.unavailableReason:n.unavailableReason!==null&&n.unavailableReason!==`missing`?n.unavailableReason:null;if(r!==null){p(e=>new Map(e).set(I.anchor,Ce(r)));return}let i=t.unavailableReason===`missing`?``:Te(t),a=n.unavailableReason===`missing`?``:Te(n);if(i===null||a===null){p(e=>new Map(e).set(I.anchor,{state:`error`,reason:`The bounded content response could not be decoded.`}));return}h(e=>new Map(e).set(I.anchor,{before:i,after:a})),p(e=>new Map(e).set(I.anchor,{state:`ready`}))},t=>{if(!e.signal.aborted){if(r!==null&&be(t)){o.current(r);return}p(e=>new Map(e).set(I.anchor,{state:`error`,reason:`The file content request failed; select the file to retry.`}))}}),()=>e.abort()},[g,m,I,r,a]);let L=(0,X.useMemo)(()=>F.map(e=>Ee(e,f.get(e.anchor)??Se(e))),[f,F]),R=c._tag===`loading`?{files:[],indexedCount:0,totalCount:0,label:`Indexing every changed file`,state:`loading`}:c._tag===`failed`?{files:[],indexedCount:0,totalCount:0,title:`Diff inventory unavailable`,description:`No partial inventory is reported as ready. Refresh the page to retry.`,state:`error`}:{files:L,state:`ready`},B=(0,X.useMemo)(()=>F.flatMap(e=>{let t=m.get(e.anchor);return t===void 0?[]:[{id:e.anchor,before:{cacheKey:`${n.revision}:${e.anchor}:before`,contents:t.before,name:e.previousPath??e.path},after:{cacheKey:`${n.revision}:${e.anchor}:after`,contents:t.after,name:e.path}}]}),[F,m,n.revision]),V=u===void 0?B:B.filter(({id:e})=>e===u);(0,X.useEffect)(()=>{u!==void 0||P===null||j.current===void 0||P.scrollTo({align:`start`,id:j.current,type:`item`})},[P,u]);let H=(0,X.useCallback)((e,t)=>{let n=j.current;n===void 0||M.current.has(t)||(N.current?.scrollTo({align:`start`,id:n,type:`item`}),e===n&&(A.current?.querySelector(`diffs-container[data-rly-diff-item="${CSS.escape(n)}"]`)?.scrollIntoView({block:`nearest`}),M.current.add(t)))},[]),U=(0,X.useMemo)(()=>i.filter(e=>xe(e,S)&&(w===`all`||e.severity===w)&&(E===`all`||e.state===E)),[S,w,E,i]),W=(0,X.useCallback)((e,t,n)=>{j.current=void 0,M.current.clear(),k(r=>({fileId:e,lineNumber:t,requestId:(r?.requestId??0)+1,side:n})),d(e)},[]),ae=(0,X.useMemo)(()=>U.flatMap(e=>{if(e.anchor._tag!==`line`)return[];let t=e.anchor,n=F.find(({path:e})=>String(e)===String(t.path));return n===void 0?[]:[{accessibilityLabel:`${e.severity} review suggestion with ${e.confidence.level} confidence`,id:e.suggestionId,location:{itemId:n.anchor,lineNumber:t.line,side:`additions`},render:({returnFocus:t})=>(0,Z.jsxs)(`article`,{children:[(0,Z.jsxs)(`strong`,{children:[e.severity,` · `,e.confidence.level,` confidence`]}),(0,Z.jsx)(`p`,{children:e.title}),(0,Z.jsxs)(`p`,{children:[(0,Z.jsx)(`strong`,{children:`Impact:`}),` `,e.impact]}),(0,Z.jsx)(`pre`,{children:e.evidence.excerpt}),(0,Z.jsxs)(`p`,{children:[(0,Z.jsx)(`strong`,{children:`Recommendation:`}),` `,e.recommendation]}),(0,Z.jsx)(`p`,{children:e.confidence.reason}),e.relatedLocations.length===0?null:(0,Z.jsxs)(`p`,{children:[e.relatedLocations.length,` related locations`]}),e.replacement===void 0?null:(0,Z.jsx)(`pre`,{children:e.replacement.unifiedDiff}),(0,Z.jsx)(`button`,{onClick:t,type:`button`,children:`Return to line`})]})}]}),[F,U]),G=(0,X.useMemo)(()=>U.filter(e=>{let t=e.anchor;return t._tag!==`changes`&&we(F,t)===void 0}).length,[F,U]),K=(0,X.useMemo)(()=>U.map(e=>({id:e.suggestionId,content:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`strong`,{children:[e.severity,` · `,e.title]}),(0,Z.jsx)(`p`,{children:e.anchor._tag===`changes`?`Whole change`:`${e.anchor.path}:${String(e.anchor.line)}`})]})})),[U]),q=[`all`,`P1`,`P2`,`P3`,`P4`],J=[`all`,...new Set(i.map(({state:e})=>e))];return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`section`,{"aria-label":`Review suggestion filters`,className:z.filters,children:[(0,Z.jsx)(`div`,{"aria-label":`Severity`,role:`group`,children:q.map(e=>(0,Z.jsx)(`button`,{"aria-label":`Filter suggestions by ${e===`all`?`all`:e} severity`,"aria-pressed":w===e,onClick:()=>T(e),type:`button`,children:e===`all`?`All severities`:e},e))}),(0,Z.jsx)(`div`,{"aria-label":`Suggestion state`,role:`group`,children:J.map(e=>(0,Z.jsx)(`button`,{"aria-label":`Filter suggestions by ${e} state`,"aria-pressed":E===e,onClick:()=>D(e),type:`button`,children:e===`all`?`All states`:e},e))})]}),(0,Z.jsx)(X.Suspense,{fallback:null,children:(0,Z.jsx)(_e,{entries:F,onNavigate:W,onSelectAnchor:e=>{let t=we(F,e);t!==void 0&&W(t.anchor,e.line,e.relativeFileVersion===`BEFORE`?`deletions`:`additions`)},suggestions:U})}),G===0?null:(0,Z.jsxs)(`p`,{role:`status`,children:[G,` validated review`,` `,G===1?`suggestion is`:`suggestions are`,` not attached because the anchor path is absent from this diff inventory.`]}),(0,Z.jsx)(re,{emptyFindings:`No validated review suggestions are attached to this revision.`,findings:K,header:(0,Z.jsx)(ne,{findingFilter:S,heading:e,indexedCount:L.length,isWrapped:b,layout:v,onFindingFilterChange:C,onLayoutChange:y,onWrapChange:x,totalCount:L.length,...I===void 0?{}:{selectedFileLabel:I.path}}),inventory:(0,Z.jsx)(ie,{data:R,heading:`Complete file inventory`,onSelectedFileChange:e=>{j.current=void 0,M.current.clear(),f.get(e)?.state===`error`&&(p(t=>{let n=new Map(t);return n.delete(e),n}),_(e=>e+1)),d(e)},...u===void 0?{}:{selectedFileId:u}}),label:`Complete diff for ${e}`,onShowAllFiles:()=>{j.current=V[0]?.id??B.at(-1)?.id,M.current.clear(),d(void 0)},scope:I===void 0?{label:`All changed files`,mode:`all-files`}:{fileId:I.anchor,label:I.path,mode:`selected-file`},statusNotice:I===void 0?B.length===0?`Select a supported file to load its content.`:`Showing ${String(B.length)} lazily loaded ${B.length===1?`file`:`files`}.`:V.length===0?f.get(I.anchor)?.state===`loading`?`Loading this file only.`:`Content is not rendered for this file.`:void 0,viewer:V.length===0?`Select a supported text file to render its change.`:(0,Z.jsxs)(`div`,{className:z.viewerTarget,ref:A,children:[(0,Z.jsx)(X.Suspense,{fallback:(0,Z.jsx)(`p`,{"aria-live":`polite`,children:`Rendering complete diff…`}),children:(0,Z.jsx)(he,{annotations:ae,initialItems:V,mode:v,onItemRender:H,ref:te,wrap:b},u??`all-files`)}),O===void 0||O.fileId!==u?null:(0,Z.jsx)(X.Suspense,{fallback:null,children:(0,Z.jsx)(ge,{fileId:O.fileId,lineNumber:O.lineNumber,root:A,side:O.side,viewer:P},O.requestId)})]})})]})},Oe=(0,X.lazy)(()=>n(()=>import(`./PullRequestReviewPanel-D7AKnwL-.js`),__vite__mapDeps([13,1,2,4,5,14,3,15,6,16,17,18,19,20,21]))),ke=J().pipe(oe({_tag:`ready`,review:{_tag:`completed`}},({review:e})=>fe(e)),se(()=>ue())),Q=({children:e,heading:t,meta:n})=>(0,Z.jsxs)(`section`,{className:R.section,children:[(0,Z.jsxs)(`header`,{className:R.sectionHeading,children:[(0,Z.jsx)(a,{as:`h2`,variant:`section-title`,children:t}),(0,Z.jsx)(a,{tone:`secondary`,variant:`meta`,children:n})]}),e]}),$=({empty:e,people:t})=>t.length===0?(0,Z.jsx)(a,{tone:`secondary`,children:e}):(0,Z.jsx)(`ul`,{className:R.people,children:t.map(e=>(0,Z.jsx)(`li`,{children:(0,Z.jsx)(i,{person:e,size:`compact`})},e.id))}),Ae=({approvers:e,onReviewCancel:t,onReviewExtendBudget:n,onReviewLoadEarlier:r,onReviewPublicationCancel:o,onReviewPublicationPreview:s,onReviewRetry:c,onReviewStart:l,onReviewSuggestionPublish:u,onReviewTargetSuggestion:d=()=>void 0,onSessionExpired:f,pullRequest:p,reviewCanEnqueue:m,reviewPublication:h,reviewState:g,reviewSuggestionRevisionTransport:_,reviewers:v,sessionKey:y})=>{let b=pe(ke(g)).onInitial(()=>null).onSuccess(e=>e).exhaustive(),x=b?.jobId??null,S=b?.report.suggestions??[],[C,w]=(0,X.useState)(()=>({jobId:x,suggestions:new Map})),T=(0,X.useMemo)(()=>C.jobId===x?S.map(e=>{let t=C.suggestions.get(e.suggestionId);return t===void 0?e:e.state===`published`||e.state===`resolved`?{...t,state:e.state}:t}):S,[S,x,C]),E=(0,X.useCallback)(e=>{x!==null&&w(t=>{let n=t.jobId===x?new Map(t.suggestions):new Map;return n.set(e.suggestionId,e),{jobId:x,suggestions:n}})},[x]);return(0,Z.jsxs)(`article`,{className:R.document,"data-workspace-pull-request-detail":!0,children:[(0,Z.jsxs)(`div`,{className:R.revisionCard,children:[(0,Z.jsxs)(`div`,{className:R.branchPair,children:[(0,Z.jsxs)(`span`,{children:[(0,Z.jsx)(`small`,{children:`Head`}),(0,Z.jsx)(`strong`,{children:p.sourceBranch})]}),(0,Z.jsx)(`span`,{"aria-hidden":`true`,className:R.direction,children:`→`}),(0,Z.jsxs)(`span`,{children:[(0,Z.jsx)(`small`,{children:`Base`}),(0,Z.jsx)(`strong`,{children:p.targetBranch})]})]}),(0,Z.jsxs)(`div`,{className:R.commitPair,children:[(0,Z.jsx)(`code`,{title:p.headRevision,children:p.headRevision}),(0,Z.jsx)(`span`,{children:`against`}),(0,Z.jsx)(`code`,{title:p.baseRevision??void 0,children:p.baseRevision??`Base revision unavailable`})]}),(0,Z.jsxs)(`dl`,{className:R.revisionMeta,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`dt`,{children:`Created`}),(0,Z.jsx)(`dd`,{children:p.createdAt===null?`Not synchronized`:(0,Z.jsx)(`time`,{dateTime:p.createdAt.dateTime,children:p.createdAt.label})})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`dt`,{children:`Merge base`}),(0,Z.jsx)(`dd`,{children:p.mergeBaseRevision??`Not synchronized`})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`dt`,{children:`Last activity`}),(0,Z.jsx)(`dd`,{children:p.updatedAt===null?`Not synchronized`:(0,Z.jsx)(`time`,{dateTime:p.updatedAt.dateTime,children:p.updatedAt.label})})]})]})]}),(0,Z.jsx)(Q,{heading:`Description`,meta:`What this revision changes`,children:p.description===null?(0,Z.jsx)(a,{tone:`secondary`,children:`No description was synchronized from CodeCommit.`}):(0,Z.jsx)(B,{className:R.description,value:p.description})}),(0,Z.jsx)(Q,{heading:`People`,meta:`Author, reviewers, and approvers`,children:(0,Z.jsxs)(`div`,{className:R.peopleGroups,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(a,{tone:`secondary`,variant:`meta`,children:`Author`}),p.author===null?(0,Z.jsx)(a,{tone:`secondary`,children:`No author identity was synchronized.`}):(0,Z.jsx)(i,{person:p.author})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(a,{tone:`secondary`,variant:`meta`,children:`Reviewers`}),(0,Z.jsx)($,{empty:`No reviewer is assigned in the canonical workspace.`,people:v})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(a,{tone:`secondary`,variant:`meta`,children:`Approvers`}),(0,Z.jsx)($,{empty:`No approver is assigned in the canonical workspace.`,people:e})]})]})}),(0,Z.jsx)(Q,{heading:`Review`,meta:`Human decisions stay separate from agent advice`,children:(0,Z.jsxs)(`div`,{className:R.reviewLanes,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`small`,{children:`Human decision`}),(0,Z.jsx)(`strong`,{children:p.reviewLabel}),(0,Z.jsx)(`span`,{children:`Only provider and workspace evidence can change this state.`})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`small`,{children:`Relay recommendation`}),(0,Z.jsx)(X.Suspense,{fallback:(0,Z.jsx)(`span`,{children:`Loading review tools…`}),children:(0,Z.jsx)(Oe,{canEnqueue:m,onCancelReview:t,onCancelPublication:o,onExtendReviewBudget:n,onLoadEarlier:r,onPreviewPublication:s,onPublishSuggestion:u,onTargetSuggestion:d,onRetry:c,onStart:l,onSuggestionRevisionAccepted:E,publication:h,..._===void 0?{}:{revisionTransport:_},state:g,suggestions:T})})]})]})}),(0,Z.jsxs)(Q,{heading:`Delivery evidence`,meta:`Connected work around this exact head`,children:[(0,Z.jsxs)(`dl`,{className:R.deliveryCounts,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`dt`,{children:`Jira items`}),(0,Z.jsx)(`dd`,{children:p.issueCountLabel})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`dt`,{children:`Pipeline runs`}),(0,Z.jsx)(`dd`,{children:p.pipelineCountLabel})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`dt`,{children:`Releases`}),(0,Z.jsx)(`dd`,{children:p.releaseCountLabel})]})]}),(0,Z.jsx)(a,{tone:`secondary`,children:`The delivery relationships below explain every linked item and its evidence.`})]}),(0,Z.jsxs)(Q,{heading:`Files`,meta:`Complete immutable diff`,children:[(0,Z.jsx)(De,{heading:`Pull request ${p.headRevision.slice(0,12)}`,onSessionExpired:f,suggestions:T,scope:p.diffScope,sessionKey:y}),p.filesHref===null?null:(0,Z.jsx)(`a`,{className:R.filesLink,href:p.filesHref,rel:`noreferrer`,target:`_blank`,children:`Open this revision in CodeCommit`})]})]})};export{Ae as WorkspacePullRequestDetails};
|
|
3
|
+
//# sourceMappingURL=WorkspacePullRequestDetails-HwDgp12e.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"mappings":"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","names":["TypeId","type","when","orElse","Result.isResult","Result.isSuccess","Result.succeed","Result.fail","internal.type","internal.when","internal.orElse","Equal.symbol","Equal.equals","Hash.symbol","Hash.string","Hash.combine","Hash.hash","Option.isNone","Option.isSome","Option.some","Cause.findErrorOption","Option.filter","Option.map","Cause.findDefect","Result.isFailure","Option.none","Cause.filterInterruptors","Option.getOrElse","Option.getOrNull","Cause.squash"],"ignoreList":[0,1,2],"sources":["../../../../../node_modules/.pnpm/effect@4.0.0-beta.98/node_modules/effect/dist/internal/matcher.js","../../../../../node_modules/.pnpm/effect@4.0.0-beta.98/node_modules/effect/dist/Match.js","../../../../../node_modules/.pnpm/effect@4.0.0-beta.98/node_modules/effect/dist/unstable/reactivity/AsyncResult.js","../../../src/client/entities/WorkspacePullRequestDiff.tsx","../../../src/client/entities/WorkspacePullRequestDetails.tsx"],"sourcesContent":["import { dual, identity } from \"../Function.js\";\nimport * as Option from \"../Option.js\";\nimport { pipeArguments } from \"../Pipeable.js\";\nimport * as Result from \"../Result.js\";\n/** @internal */\nexport const TypeId = \"~effect/match/Match/Matcher\";\nconst TypeMatcherProto = {\n [TypeId]: {\n _input: identity,\n _filters: identity,\n _remaining: identity,\n _result: identity,\n _return: identity\n },\n _tag: \"TypeMatcher\",\n add(_case) {\n return makeTypeMatcher([...this.cases, _case]);\n },\n pipe() {\n return pipeArguments(this, arguments);\n }\n};\nfunction makeTypeMatcher(cases) {\n const matcher = Object.create(TypeMatcherProto);\n matcher.cases = cases;\n return matcher;\n}\nconst ValueMatcherProto = {\n [TypeId]: {\n _input: identity,\n _filters: identity,\n _result: identity,\n _return: identity\n },\n _tag: \"ValueMatcher\",\n add(_case) {\n if (Result.isSuccess(this.value)) {\n return this;\n }\n if (_case._tag === \"When\" && _case.guard(this.provided) === true) {\n return makeValueMatcher(this.provided, Result.succeed(_case.evaluate(this.provided)));\n } else if (_case._tag === \"Not\" && _case.guard(this.provided) === false) {\n return makeValueMatcher(this.provided, Result.succeed(_case.evaluate(this.provided)));\n }\n return this;\n },\n pipe() {\n return pipeArguments(this, arguments);\n }\n};\nfunction makeValueMatcher(provided, value) {\n const matcher = Object.create(ValueMatcherProto);\n matcher.provided = provided;\n matcher.value = value;\n return matcher;\n}\nconst makeWhen = (guard, evaluate) => ({\n _tag: \"When\",\n guard,\n evaluate\n});\nconst makeNot = (guard, evaluate) => ({\n _tag: \"Not\",\n guard,\n evaluate\n});\nconst makePredicate = pattern => {\n if (typeof pattern === \"function\") {\n return pattern;\n } else if (Array.isArray(pattern)) {\n const predicates = pattern.map(makePredicate);\n const len = predicates.length;\n return u => {\n if (!Array.isArray(u)) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (predicates[i](u[i]) === false) {\n return false;\n }\n }\n return true;\n };\n } else if (pattern !== null && typeof pattern === \"object\") {\n const keysAndPredicates = Object.entries(pattern).map(([k, p]) => [k, makePredicate(p)]);\n const len = keysAndPredicates.length;\n return u => {\n if (typeof u !== \"object\" || u === null) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n const [key, predicate] = keysAndPredicates[i];\n if (!(key in u) || predicate(u[key]) === false) {\n return false;\n }\n }\n return true;\n };\n }\n return u => u === pattern;\n};\nconst makeOrPredicate = patterns => {\n const predicates = patterns.map(makePredicate);\n const len = predicates.length;\n return u => {\n for (let i = 0; i < len; i++) {\n if (predicates[i](u) === true) {\n return true;\n }\n }\n return false;\n };\n};\nconst makeAndPredicate = patterns => {\n const predicates = patterns.map(makePredicate);\n const len = predicates.length;\n return u => {\n for (let i = 0; i < len; i++) {\n if (predicates[i](u) === false) {\n return false;\n }\n }\n return true;\n };\n};\n/** @internal */\nexport const type = () => makeTypeMatcher([]);\n/** @internal */\nexport const value = i => makeValueMatcher(i, Result.fail(i));\n/** @internal */\nexport const valueTags = /*#__PURE__*/dual(2, (input, fields) => {\n const match = tagsExhaustive(fields)(makeTypeMatcher([]));\n return match(input);\n});\n/** @internal */\nexport const typeTags = () => fields => {\n const match = tagsExhaustive(fields)(makeTypeMatcher([]));\n return input => match(input);\n};\n/** @internal */\nexport const withReturnType = () => self => self;\n/** @internal */\nexport const when = (pattern, f) => self => self.add(makeWhen(makePredicate(pattern), f));\n/** @internal */\nexport const whenOr = (...args) => self => {\n const onMatch = args[args.length - 1];\n const patterns = args.slice(0, -1);\n return self.add(makeWhen(makeOrPredicate(patterns), onMatch));\n};\n/** @internal */\nexport const whenAnd = (...args) => self => {\n const onMatch = args[args.length - 1];\n const patterns = args.slice(0, -1);\n return self.add(makeWhen(makeAndPredicate(patterns), onMatch));\n};\n/** @internal */\nexport const discriminator = field => (...pattern) => {\n const f = pattern[pattern.length - 1];\n const values = pattern.slice(0, -1);\n const pred = values.length === 1 ? _ => _ != null && _[field] === values[0] : _ => _ != null && values.includes(_[field]);\n return self => self.add(makeWhen(pred, f));\n};\n/** @internal */\nexport const discriminatorStartsWith = field => (pattern, f) => {\n const pred = _ => _ != null && typeof _[field] === \"string\" && _[field].startsWith(pattern);\n return self => self.add(makeWhen(pred, f));\n};\n/** @internal */\nexport const discriminators = field => fields => {\n const predicate = makeWhen(arg => arg != null && arg[field] in fields, data => fields[data[field]](data));\n return self => self.add(predicate);\n};\n/** @internal */\nexport const discriminatorsExhaustive = field => fields => {\n const addCases = discriminators(field)(fields);\n return matcher => exhaustive(addCases(matcher));\n};\n/** @internal */\nexport const tag = /*#__PURE__*/discriminator(\"_tag\");\n/** @internal */\nexport const tagStartsWith = /*#__PURE__*/discriminatorStartsWith(\"_tag\");\n/** @internal */\nexport const tags = /*#__PURE__*/discriminators(\"_tag\");\n/** @internal */\nexport const tagsExhaustive = /*#__PURE__*/discriminatorsExhaustive(\"_tag\");\n/** @internal */\nexport const not = (pattern, f) => self => self.add(makeNot(makePredicate(pattern), f));\n/** @internal */\nexport const nonEmptyString = u => typeof u === \"string\" && u.length > 0;\n/** @internal */\nexport const is = (...literals) => {\n const len = literals.length;\n return u => {\n for (let i = 0; i < len; i++) {\n if (u === literals[i]) {\n return true;\n }\n }\n return false;\n };\n};\n/** @internal */\nexport const any = () => true;\n/** @internal */\nexport const defined = u => u !== undefined && u !== null;\n/** @internal */\nexport const instanceOf = constructor => u => u instanceof constructor;\n/** @internal */\nexport const orElse = f => self => {\n const toResult = result(self);\n if (Result.isResult(toResult)) {\n return toResult._tag === \"Success\" ? toResult.success : f(toResult.failure);\n }\n // @ts-expect-error\n return input => {\n const a = toResult(input);\n return Result.isSuccess(a) ? a.success : f(a.failure);\n };\n};\n/** @internal */\nexport const orElseAbsurd = self => orElse(() => {\n throw new Error(\"effect/Match/orElseAbsurd: absurd\");\n})(self);\n/** @internal */\nexport const result = self => {\n if (self._tag === \"ValueMatcher\") {\n return self.value;\n }\n const len = self.cases.length;\n if (len === 1) {\n const _case = self.cases[0];\n return input => {\n if (_case._tag === \"When\" && _case.guard(input) === true) {\n return Result.succeed(_case.evaluate(input));\n } else if (_case._tag === \"Not\" && _case.guard(input) === false) {\n return Result.succeed(_case.evaluate(input));\n }\n return Result.fail(input);\n };\n }\n return input => {\n for (let i = 0; i < len; i++) {\n const _case = self.cases[i];\n if (_case._tag === \"When\" && _case.guard(input) === true) {\n return Result.succeed(_case.evaluate(input));\n } else if (_case._tag === \"Not\" && _case.guard(input) === false) {\n return Result.succeed(_case.evaluate(input));\n }\n }\n return Result.fail(input);\n };\n};\n/** @internal */\nexport const option = self => {\n const toResult = result(self);\n if (Result.isResult(toResult)) {\n return Result.match(toResult, {\n onFailure: () => Option.none(),\n onSuccess: Option.some\n });\n }\n return input => Result.match(toResult(input), {\n onFailure: () => Option.none(),\n onSuccess: Option.some\n });\n};\nconst getExhaustiveAbsurdErrorMessage = \"effect/match/Match/exhaustive: absurd\";\n/** @internal */\nexport const exhaustive = self => {\n const toResult = result(self);\n if (Result.isResult(toResult)) {\n if (Result.isSuccess(toResult)) {\n return toResult.success;\n }\n throw new Error(getExhaustiveAbsurdErrorMessage);\n }\n return u => {\n // @ts-expect-error\n const result = toResult(u);\n if (Result.isSuccess(result)) {\n return result.success;\n }\n throw new Error(getExhaustiveAbsurdErrorMessage);\n };\n};\n//# sourceMappingURL=matcher.js.map","/**\n * Builds pattern matchers for TypeScript values.\n *\n * `Match` lets you add ordered cases and then finish them with a result,\n * fallback, `Option`, or exhaustive check. Use `Match.type` to define a\n * reusable matcher for a type, or `Match.value` to match one value immediately.\n * Cases can match literal values, predicates, object shapes, tags, negated\n * patterns, and common checks such as strings, numbers, records, and class\n * instances.\n *\n * @since 4.0.0\n */\nimport * as internal from \"./internal/matcher.js\";\nimport * as Predicate from \"./Predicate.js\";\nconst TypeId = internal.TypeId;\n/**\n * Creates a matcher for a specific type.\n *\n * **When to use**\n *\n * Use to build a reusable matcher function for values of a known input type.\n *\n * **Details**\n *\n * This function defines a `Matcher` that operates on a given type, allowing you\n * to specify conditions for handling different cases. Once the matcher is\n * created, you can use pattern-matching functions like {@link when} to define\n * how different values should be processed.\n *\n * **Example** (Matching Numbers and Strings)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * // Create a matcher for values that are either strings or numbers\n * //\n * // ┌─── (u: string | number) => string\n * // ▼\n * const match = Match.type<string | number>().pipe(\n * // Match when the value is a number\n * Match.when(Match.number, (n) => `number: ${n}`),\n * // Match when the value is a string\n * Match.when(Match.string, (s) => `string: ${s}`),\n * // Ensure all possible cases are handled\n * Match.exhaustive\n * )\n *\n * console.log(match(0))\n * // Output: \"number: 0\"\n *\n * console.log(match(\"hello\"))\n * // Output: \"string: hello\"\n * ```\n *\n * @see {@link value} for creating a matcher from a specific value.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const type = internal.type;\n/**\n * Creates a matcher from a specific value.\n *\n * **When to use**\n *\n * Use to match one concrete input immediately.\n *\n * **Details**\n *\n * This function allows you to define a `Matcher` directly from a given value,\n * rather than from a type. This is useful when working with known values,\n * enabling structured pattern matching on objects, primitives, or any data\n * structure.\n *\n * Once the matcher is created, you can use pattern-matching functions like\n * {@link when} to define how different cases should be handled.\n *\n * **Example** (Matching an Object by Property)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const input = { name: \"John\", age: 30 }\n *\n * // Create a matcher for the specific object\n * const result = Match.value(input).pipe(\n * // Match when the 'name' property is \"John\"\n * Match.when(\n * { name: \"John\" },\n * (user) => `${user.name} is ${user.age} years old`\n * ),\n * // Provide a fallback if no match is found\n * Match.orElse(() => \"Oh, not John\")\n * )\n *\n * console.log(result)\n * // Output: \"John is 30 years old\"\n * ```\n *\n * @see {@link type} for creating a matcher from a specific type.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const value = internal.value;\n/**\n * Creates a match function for a specific value with discriminated union handling.\n *\n * **Details**\n *\n * This function provides a convenient way to pattern match on discriminated unions\n * by providing an object that maps each `_tag` value to its corresponding handler.\n * It's similar to a switch statement but with better type safety and exhaustiveness checking.\n *\n * **Example** (Matching value tags)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * type Status = { readonly _tag: \"Success\"; readonly data: string }\n *\n * const success: Status = { _tag: \"Success\", data: \"Hello\" }\n *\n * // Simple valueTags usage\n * const message = Match.valueTags(success, {\n * Success: (result) => `Success: ${result.data}`\n * })\n *\n * console.log(message) // \"Success: Hello\"\n * ```\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const valueTags = internal.valueTags;\n/**\n * Creates a type-safe match function for discriminated unions based on `_tag` field.\n *\n * **Details**\n *\n * This function allows you to define exhaustive pattern matching for discriminated unions\n * by providing handlers for each possible `_tag` value. It ensures type safety and\n * can optionally enforce a specific return type across all branches.\n *\n * **Example** (Matching type tags)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * type Result =\n * | { readonly _tag: \"Success\"; readonly data: string }\n * | { readonly _tag: \"Error\"; readonly message: string }\n * | { readonly _tag: \"Loading\" }\n *\n * // Create a matcher with specific return type\n * const formatResult = Match.typeTags<Result, string>()({\n * Success: (result) => `Data: ${result.data}`,\n * Error: (result) => `Error: ${result.message}`,\n * Loading: () => \"Loading...\"\n * })\n *\n * console.log(formatResult({ _tag: \"Success\", data: \"Hello World\" }))\n * // Output: \"Data: Hello World\"\n *\n * console.log(formatResult({ _tag: \"Error\", message: \"Network failed\" }))\n * // Output: \"Error: Network failed\"\n *\n * // Create a matcher with inferred return type\n * const processResult = Match.typeTags<Result>()({\n * Success: (result) => ({ type: \"ok\", value: result.data }),\n * Error: (result) => ({ type: \"error\", error: result.message }),\n * Loading: () => ({ type: \"pending\" })\n * })\n *\n * console.log(processResult({ _tag: \"Loading\" }))\n * // Output: { type: \"pending\" }\n * ```\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const typeTags = internal.typeTags;\n/**\n * Ensures that all branches of a matcher return a specific type.\n *\n * **Details**\n *\n * This function enforces a consistent return type across all pattern-matching\n * branches. By specifying a return type, TypeScript will check that every\n * matching condition produces a value of the expected type.\n *\n * **Important:** This function must be the first step in the matcher pipeline.\n * If used later, TypeScript will not enforce type consistency correctly.\n *\n * **Example** (Validating return type consistency)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const match = Match.type<{ a: number } | { b: string }>().pipe(\n * // Ensure all branches return a string\n * Match.withReturnType<string>(),\n * // ❌ Type error: 'number' is not assignable to type 'string'\n * // @ts-expect-error\n * Match.when({ a: Match.number }, (_) => _.a),\n * // ✅ Correct: returns a string\n * Match.when({ b: Match.string }, (_) => _.b),\n * Match.exhaustive\n * )\n * ```\n *\n * @category utility types\n * @since 4.0.0\n */\nexport const withReturnType = internal.withReturnType;\n/**\n * Defines a condition for matching values.\n *\n * **When to use**\n *\n * Use to add one positive pattern case to a `Match.type` or `Match.value`\n * pipeline when a direct value, predicate, or structured object pattern should\n * run a handler for matching input.\n *\n * **Details**\n *\n * Supports both direct value comparisons and predicate functions. If the\n * pattern matches, the associated function is executed and the matched input is\n * removed from the remaining cases tracked by the matcher.\n *\n * **Example** (Matching with values and predicates)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * // Create a matcher for objects with an \"age\" property\n * const match = Match.type<{ age: number }>().pipe(\n * // Match when age is greater than 18\n * Match.when(\n * { age: (age: number) => age > 18 },\n * (user: { age: number }) => `Age: ${user.age}`\n * ),\n * // Match when age is exactly 18\n * Match.when({ age: 18 }, () => \"You can vote\"),\n * // Fallback case for all other ages\n * Match.orElse((user: { age: number }) => `${user.age} is too young`)\n * )\n *\n * console.log(match({ age: 20 }))\n * // Output: \"Age: 20\"\n *\n * console.log(match({ age: 18 }))\n * // Output: \"You can vote\"\n *\n * console.log(match({ age: 4 }))\n * // Output: \"4 is too young\"\n * ```\n *\n * @see {@link whenOr} for handling any one of several patterns with the same handler\n * @see {@link whenAnd} for requiring all provided patterns to match before running a handler\n * @see {@link not} for handling inputs that do not match a pattern\n * @see {@link orElse} for providing a fallback when no pattern case matches\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const when = internal.when;\n/**\n * Matches one of multiple patterns in a single condition.\n *\n * **Details**\n *\n * This function allows defining a condition where a value matches any of the\n * provided patterns. If a match is found, the associated function is executed.\n * It simplifies cases where multiple patterns share the same handling logic.\n *\n * Unlike {@link when}, which requires separate conditions for each pattern,\n * this function enables combining them into a single statement, making the\n * matcher more concise.\n *\n * **Example** (Matching one of several patterns)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * type ErrorType =\n * | { readonly _tag: \"NetworkError\"; readonly message: string }\n * | { readonly _tag: \"TimeoutError\"; readonly duration: number }\n * | { readonly _tag: \"ValidationError\"; readonly field: string }\n *\n * const handleError = Match.type<ErrorType>().pipe(\n * Match.whenOr(\n * { _tag: \"NetworkError\" },\n * { _tag: \"TimeoutError\" },\n * () => \"Retry the request\"\n * ),\n * Match.when({ _tag: \"ValidationError\" }, (_) => `Invalid field: ${_.field}`),\n * Match.exhaustive\n * )\n *\n * console.log(handleError({ _tag: \"NetworkError\", message: \"No connection\" }))\n * // Output: \"Retry the request\"\n *\n * console.log(handleError({ _tag: \"ValidationError\", field: \"email\" }))\n * // Output: \"Invalid field: email\"\n * ```\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const whenOr = internal.whenOr;\n/**\n * Matches a value that satisfies all provided patterns.\n *\n * **Details**\n *\n * This function allows defining a condition where a value must match all the\n * given patterns simultaneously. If the value satisfies every pattern, the\n * associated function is executed.\n *\n * Unlike {@link when}, which matches a single pattern at a time, this function\n * ensures that multiple conditions are met before executing the callback. It is\n * useful when checking for values that need to fulfill multiple criteria at\n * once.\n *\n * **Example** (Matching all provided patterns)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * type User = { readonly age: number; readonly role: \"admin\" | \"user\" }\n *\n * const checkUser = Match.type<User>().pipe(\n * Match.whenAnd(\n * { age: (n) => n >= 18 },\n * { role: \"admin\" },\n * () => \"Admin access granted\"\n * ),\n * Match.orElse(() => \"Access denied\")\n * )\n *\n * console.log(checkUser({ age: 20, role: \"admin\" }))\n * // Output: \"Admin access granted\"\n *\n * console.log(checkUser({ age: 20, role: \"user\" }))\n * // Output: \"Access denied\"\n * ```\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const whenAnd = internal.whenAnd;\n/**\n * Matches values based on a specified discriminant field.\n *\n * **When to use**\n *\n * Use to match one or more exact values of a discriminator field.\n *\n * **Details**\n *\n * This function is used to define pattern matching on objects that follow a\n * **discriminated union** structure, where a specific field (e.g., `type`,\n * `kind`, `_tag`) determines the variant of the object. It allows matching\n * multiple values of the discriminant and provides a function to handle the\n * matched cases.\n *\n * **Example** (Matching on a discriminator field)\n *\n * ```ts\n * import { Match, pipe } from \"effect\"\n *\n * const match = pipe(\n * Match.type<\n * { type: \"A\"; a: string } | { type: \"B\"; b: number } | {\n * type: \"C\"\n * c: boolean\n * }\n * >(),\n * Match.discriminator(\"type\")(\"A\", \"B\", (_) => `A or B: ${_.type}`),\n * Match.discriminator(\"type\")(\"C\", (_) => `C(${_.c})`),\n * Match.exhaustive\n * )\n * ```\n *\n * @see {@link discriminators} for defining several discriminator handlers at once\n * @see {@link discriminatorStartsWith} for matching string discriminator values by prefix\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const discriminator = internal.discriminator;\n/**\n * Matches values where a specified field starts with a given prefix.\n *\n * **When to use**\n *\n * Use to match string discriminator values by prefix instead of exact value.\n *\n * **Details**\n *\n * Instead of checking for exact matches, this helper matches values that share\n * a common prefix. For example, if the discriminant field contains hierarchical\n * names like `\"A\"`, `\"A.A\"`, and `\"B\"`, a single `\"A\"` rule can match both\n * `\"A\"` and `\"A.A\"`.\n *\n * **Example** (Matching discriminator prefixes)\n *\n * ```ts\n * import { Match, pipe } from \"effect\"\n *\n * const match = pipe(\n * Match.type<{ type: \"A\" } | { type: \"B\" } | { type: \"A.A\" } | {}>(),\n * Match.discriminatorStartsWith(\"type\")(\"A\", (_) => 1 as const),\n * Match.discriminatorStartsWith(\"type\")(\"B\", (_) => 2 as const),\n * Match.orElse((_) => 3 as const)\n * )\n *\n * console.log(match({ type: \"A\" })) // 1\n * console.log(match({ type: \"B\" })) // 2\n * console.log(match({ type: \"A.A\" })) // 1\n * ```\n *\n * @see {@link discriminator} for matching exact discriminator values\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const discriminatorStartsWith = internal.discriminatorStartsWith;\n/**\n * Matches values based on a field that serves as a discriminator, mapping each\n * possible value to a corresponding handler.\n *\n * **When to use**\n *\n * Use to define several discriminator handlers at once without finalizing the\n * matcher.\n *\n * **Details**\n *\n * This function simplifies working with discriminated unions by letting you\n * define a set of handlers for each possible value of a given field. Instead of\n * chaining multiple calls to {@link discriminator}, this function allows\n * defining all possible cases at once using an object where the keys are the\n * possible values of the field, and the values are the corresponding handler\n * functions.\n *\n * **Example** (Mapping discriminator handlers)\n *\n * ```ts\n * import { Match, pipe } from \"effect\"\n *\n * const match = pipe(\n * Match.type<\n * { type: \"A\"; a: string } | { type: \"B\"; b: number } | {\n * type: \"C\"\n * c: boolean\n * }\n * >(),\n * Match.discriminators(\"type\")({\n * A: (a) => a.a,\n * B: (b) => b.b,\n * C: (c) => c.c\n * }),\n * Match.exhaustive\n * )\n * ```\n *\n * @see {@link discriminator} for adding one discriminator case to a matcher pipeline\n * @see {@link discriminatorsExhaustive} for handling every discriminator value and finalizing the matcher\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const discriminators = internal.discriminators;\n/**\n * Matches values by a discriminator field and requires every possible case to\n * be handled.\n *\n * **When to use**\n *\n * Use to define an exhaustive discriminator handler map that finalizes the\n * matcher.\n *\n * **Details**\n *\n * This is the exhaustive variant of {@link discriminators}. Each possible\n * discriminator value must have a corresponding handler, so the matcher is\n * finalized directly and does not require `Match.exhaustive` at the end of the\n * pipeline.\n *\n * **Example** (Handling all discriminator cases)\n *\n * ```ts\n * import { Match, pipe } from \"effect\"\n *\n * const match = pipe(\n * Match.type<\n * { type: \"A\"; a: string } | { type: \"B\"; b: number } | {\n * type: \"C\"\n * c: boolean\n * }\n * >(),\n * Match.discriminatorsExhaustive(\"type\")({\n * A: (a) => a.a,\n * B: (b) => b.b,\n * C: (c) => c.c\n * })\n * )\n * ```\n *\n * @see {@link discriminators} for defining discriminator handlers without finalizing the matcher\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const discriminatorsExhaustive = internal.discriminatorsExhaustive;\n/**\n * Matches discriminated union members by their `_tag` field.\n *\n * **When to use**\n *\n * Use to handle one or more `_tag` cases with the same matcher branch.\n *\n * **Details**\n *\n * This helper follows the Effect convention that discriminated unions use\n * `\"_tag\"` as their discriminator field. Use {@link discriminator} for a\n * different discriminator field.\n *\n * **Example** (Matching a discriminated union by tag)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * type Event =\n * | { readonly _tag: \"fetch\" }\n * | { readonly _tag: \"success\"; readonly data: string }\n * | { readonly _tag: \"error\"; readonly error: Error }\n * | { readonly _tag: \"cancel\" }\n *\n * const match = Match.type<Event>().pipe(\n * // Match either \"fetch\" or \"success\"\n * Match.tag(\"fetch\", \"success\", () => `Ok!`),\n * // Match \"error\" and extract the error message\n * Match.tag(\"error\", (event) => `Error: ${event.error.message}`),\n * // Match \"cancel\"\n * Match.tag(\"cancel\", () => \"Cancelled\"),\n * Match.exhaustive\n * )\n *\n * console.log(match({ _tag: \"success\", data: \"Hello\" }))\n * // Output: \"Ok!\"\n *\n * console.log(match({ _tag: \"error\", error: new Error(\"Oops!\") }))\n * // Output: \"Error: Oops!\"\n * ```\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const tag = internal.tag;\n/**\n * Matches values where the `_tag` field starts with a given prefix.\n *\n * **Details**\n *\n * This function allows you to match on values in a **discriminated union**\n * based on whether the `_tag` field starts with a specified prefix. It is\n * useful for handling hierarchical or namespaced tags, where multiple related\n * cases share a common prefix.\n *\n * **Example** (Matching tag prefixes)\n *\n * ```ts\n * import { Match, pipe } from \"effect\"\n *\n * const match = pipe(\n * Match.type<{ _tag: \"A\" } | { _tag: \"B\" } | { _tag: \"A.A\" } | {}>(),\n * Match.tagStartsWith(\"A\", (_) => 1 as const),\n * Match.tagStartsWith(\"B\", (_) => 2 as const),\n * Match.orElse((_) => 3 as const)\n * )\n *\n * console.log(match({ _tag: \"A\" })) // 1\n * console.log(match({ _tag: \"B\" })) // 2\n * console.log(match({ _tag: \"A.A\" })) // 1\n * ```\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const tagStartsWith = internal.tagStartsWith;\n/**\n * Matches values based on their `_tag` field, mapping each tag to a\n * corresponding handler.\n *\n * **Details**\n *\n * This function provides a way to handle discriminated unions by mapping `_tag`\n * values to specific functions. Each handler receives the matched value and\n * returns a transformed result. If all possible tags are handled, you can\n * enforce exhaustiveness using `Match.exhaustive` to ensure no case is missed.\n *\n * **Example** (Mapping tag handlers)\n *\n * ```ts\n * import { Match, pipe } from \"effect\"\n *\n * const match = pipe(\n * Match.type<\n * { _tag: \"A\"; a: string } | { _tag: \"B\"; b: number } | {\n * _tag: \"C\"\n * c: boolean\n * }\n * >(),\n * Match.tags({\n * A: (a) => a.a,\n * B: (b) => b.b,\n * C: (c) => c.c\n * }),\n * Match.exhaustive\n * )\n * ```\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const tags = internal.tags;\n/**\n * Matches values based on their `_tag` field and requires handling of all\n * possible cases.\n *\n * **Details**\n *\n * This function is designed for **discriminated unions** where every possible\n * `_tag` value must have a corresponding handler. Unlike {@link tags}, this\n * function ensures **exhaustiveness**, meaning all cases must be explicitly\n * handled. If a `_tag` value is missing from the mapping, TypeScript will\n * report an error.\n *\n * **Example** (Handling all tag cases)\n *\n * ```ts\n * import { Match, pipe } from \"effect\"\n *\n * const match = pipe(\n * Match.type<\n * { _tag: \"A\"; a: string } | { _tag: \"B\"; b: number } | {\n * _tag: \"C\"\n * c: boolean\n * }\n * >(),\n * Match.tagsExhaustive({\n * A: (a) => a.a,\n * B: (b) => b.b,\n * C: (c) => c.c\n * })\n * )\n * ```\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const tagsExhaustive = internal.tagsExhaustive;\n/**\n * Creates a pattern that excludes a specific value while allowing all others.\n *\n * **When to use**\n *\n * Use to add a negative pattern case for inputs that should match when another\n * pattern does not.\n *\n * **Details**\n *\n * Any excluded value bypasses the provided function and continues matching\n * through later cases.\n *\n * **Example** (Ignoring a specific value)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * // Create a matcher for string or number values\n * const match = Match.type<string | number>().pipe(\n * // Match any value except \"hi\", returning \"ok\"\n * Match.not(\"hi\", () => \"ok\"),\n * // Fallback case for when the value is \"hi\"\n * Match.orElse(() => \"fallback\")\n * )\n *\n * console.log(match(\"hello\"))\n * // Output: \"ok\"\n *\n * console.log(match(\"hi\"))\n * // Output: \"fallback\"\n * ```\n *\n * @see {@link when} for adding a positive pattern case\n *\n * @category Defining patterns\n * @since 4.0.0\n */\nexport const not = internal.not;\n/**\n * Matches non-empty strings.\n *\n * **When to use**\n *\n * Use to match strings whose length is greater than zero.\n *\n * **Details**\n *\n * This predicate matches any string that contains at least one character,\n * effectively filtering out empty strings (\"\").\n *\n * **Example** (Matching non-empty strings)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const processInput = Match.type<string>()\n * .pipe(\n * Match.when(Match.nonEmptyString, (str) => `Valid input: ${str}`),\n * Match.orElse(() => \"Input cannot be empty\")\n * )\n *\n * console.log(processInput(\"hello\"))\n * // Output: \"Valid input: hello\"\n *\n * console.log(processInput(\"\"))\n * // Output: \"Input cannot be empty\"\n *\n * console.log(processInput(\" \"))\n * // Output: \"Valid input: \" (whitespace-only strings are considered non-empty)\n * ```\n *\n * @see {@link string} for matching any string\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const nonEmptyString = internal.nonEmptyString;\n/**\n * Matches a specific set of literal values (e.g., `Match.is(\"a\", 42, true)`).\n *\n * **When to use**\n *\n * Use to match one of several literal primitive or null values.\n *\n * **Details**\n *\n * This function creates a predicate that matches any of the provided literal values.\n * It's useful for matching against multiple specific values in a single pattern.\n *\n * **Example** (Matching literal values)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const handleStatus = Match.type<string | number>()\n * .pipe(\n * Match.when(Match.is(\"success\", \"ok\", 200), () => \"Operation successful\"),\n * Match.when(Match.is(\"error\", \"failed\", 500), () => \"Operation failed\"),\n * Match.when(Match.is(0, false, null), () => \"Falsy value\"),\n * Match.orElse((value) => `Unknown status: ${value}`)\n * )\n *\n * console.log(handleStatus(\"success\"))\n * // Output: \"Operation successful\"\n *\n * console.log(handleStatus(200))\n * // Output: \"Operation successful\"\n *\n * console.log(handleStatus(\"failed\"))\n * // Output: \"Operation failed\"\n *\n * console.log(handleStatus(0))\n * // Output: \"Falsy value\"\n *\n * console.log(handleStatus(\"pending\"))\n * // Output: \"Unknown status: pending\"\n * ```\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const is = internal.is;\n/**\n * Matches values of type `string`.\n *\n * **Details**\n *\n * This predicate refines unknown values to strings, allowing pattern matching\n * on string types. It's commonly used in type-based matchers to handle string cases.\n *\n * **Example** (Matching string values)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const processValue = Match.type<string | number | boolean>().pipe(\n * Match.when(Match.string, (str) => `String: ${str.toUpperCase()}`),\n * Match.when(Match.number, (num) => `Number: ${num * 2}`),\n * Match.when(Match.boolean, (bool) => `Boolean: ${bool ? \"yes\" : \"no\"}`),\n * Match.exhaustive\n * )\n *\n * console.log(processValue(\"hello\")) // \"String: HELLO\"\n * console.log(processValue(42)) // \"Number: 84\"\n * console.log(processValue(true)) // \"Boolean: yes\"\n * ```\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const string = Predicate.isString;\n/**\n * Matches values of type `number`.\n *\n * **When to use**\n *\n * Use to match primitive number values, including `NaN` and infinities.\n *\n * **Details**\n *\n * This predicate refines unknown values to numbers, allowing pattern matching\n * on numeric types. It matches all number values including integers, floats,\n * `Infinity`, `-Infinity`, and `NaN`.\n *\n * **Example** (Matching number values)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const categorizeNumber = Match.type<unknown>().pipe(\n * Match.when(Match.number, (num) => {\n * if (Number.isNaN(num)) return \"Not a number\"\n * if (!Number.isFinite(num)) return \"Infinite\"\n * if (Number.isInteger(num)) return `Integer: ${num}`\n * return `Float: ${num.toFixed(2)}`\n * }),\n * Match.orElse(() => \"Not a number type\")\n * )\n *\n * console.log(categorizeNumber(42)) // \"Integer: 42\"\n * console.log(categorizeNumber(3.14)) // \"Float: 3.14\"\n * console.log(categorizeNumber(NaN)) // \"Not a number\"\n * console.log(categorizeNumber(\"hello\")) // \"Not a number type\"\n * ```\n *\n * @see {@link bigint} for matching primitive bigint values\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const number = Predicate.isNumber;\n/**\n * Matches any value without restrictions.\n *\n * **When to use**\n *\n * Use to define an explicit catch-all pattern when the handler should receive\n * the unmatched value.\n *\n * **Details**\n *\n * This predicate matches every input, including `undefined`, `null`, objects,\n * primitives, and functions.\n *\n * **Gotchas**\n *\n * `Match.any` should usually be last because cases are checked in order and\n * the first matching case wins.\n *\n * **Example** (Matching any remaining value)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const describeValue = Match.type<unknown>()\n * .pipe(\n * Match.when(Match.string, (str) => `String: ${str}`),\n * Match.when(Match.number, (num) => `Number: ${num}`),\n * Match.when(Match.boolean, (bool) => `Boolean: ${bool}`),\n * Match.when(Match.any, (value) => `Other: ${typeof value}`),\n * Match.exhaustive\n * )\n *\n * console.log(describeValue(\"hello\"))\n * // Output: \"String: hello\"\n *\n * console.log(describeValue(42))\n * // Output: \"Number: 42\"\n *\n * console.log(describeValue([1, 2, 3]))\n * // Output: \"Other: object\"\n *\n * console.log(describeValue(null))\n * // Output: \"Other: object\"\n * ```\n *\n * @see {@link defined} for matching only non-nullish values\n * @see {@link orElse} for providing a fallback after earlier cases\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const any = internal.any;\n/**\n * Matches any defined (non-null and non-undefined) value.\n *\n * **When to use**\n *\n * Use to exclude only `null` and `undefined` from a match branch.\n *\n * **Details**\n *\n * This predicate matches values that are neither `null` nor `undefined`,\n * effectively filtering out nullish values while preserving all other types.\n *\n * **Example** (Matching defined values)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const processValue = Match.type<string | number | null | undefined>()\n * .pipe(\n * Match.when(Match.defined, (value) => `Defined value: ${value}`),\n * Match.orElse(() => \"Value is null or undefined\")\n * )\n *\n * console.log(processValue(\"hello\"))\n * // Output: \"Defined value: hello\"\n *\n * console.log(processValue(42))\n * // Output: \"Defined value: 42\"\n *\n * console.log(processValue(0))\n * // Output: \"Defined value: 0\"\n *\n * console.log(processValue(\"\"))\n * // Output: \"Defined value: \"\n *\n * console.log(processValue(null))\n * // Output: \"Value is null or undefined\"\n *\n * console.log(processValue(undefined))\n * // Output: \"Value is null or undefined\"\n * ```\n *\n * @see {@link any} for matching every value without excluding nullish inputs\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const defined = internal.defined;\n/**\n * Matches values of type `boolean`.\n *\n * **When to use**\n *\n * Use to match primitive boolean values.\n *\n * **Details**\n *\n * This predicate refines unknown values to booleans, allowing pattern matching\n * on boolean types. It only matches the primitive boolean values `true` and `false`.\n *\n * **Example** (Matching boolean values)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const describeTruthiness = Match.type<unknown>().pipe(\n * Match.when(\n * Match.boolean,\n * (bool) => bool ? \"Definitely true\" : \"Definitely false\"\n * ),\n * Match.when(0, () => \"Falsy number\"),\n * Match.when(\"\", () => \"Empty string\"),\n * Match.when(Match.null, () => \"Null value\"),\n * Match.orElse(() => \"Some other truthy value\")\n * )\n *\n * console.log(describeTruthiness(true)) // \"Definitely true\"\n * console.log(describeTruthiness(false)) // \"Definitely false\"\n * console.log(describeTruthiness(0)) // \"Falsy number\"\n * console.log(describeTruthiness(1)) // \"Some other truthy value\"\n * ```\n *\n * @see {@link is} for matching specific literal boolean values\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const boolean = Predicate.isBoolean;\nconst _undefined = Predicate.isUndefined;\nexport {\n/**\n * Matches the value `undefined`.\n *\n * **When to use**\n *\n * Use when a matcher should handle only inputs with no defined value.\n *\n * **Details**\n *\n * This refinement is backed by `Predicate.isUndefined`, which checks\n * `input === undefined`.\n *\n * @see {@link defined} for matching non-nullish values\n * @see {@link is} for matching literal values\n *\n * @category predicates\n * @since 4.0.0\n */\n_undefined as undefined };\nconst _null = Predicate.isNull;\nexport {\n/**\n * Matches the value `null`.\n *\n * **When to use**\n *\n * Use to handle only the `null` literal in a match branch.\n *\n * **Details**\n *\n * This refinement is backed by `Predicate.isNull`, which checks\n * `input === null`.\n *\n * @see {@link defined} for matching non-nullish values\n * @see {@link is} for matching literal values\n *\n * @category predicates\n * @since 4.0.0\n */\n_null as null };\n/**\n * Matches values of type `bigint`.\n *\n * **When to use**\n *\n * Use to match primitive bigint values.\n *\n * **Details**\n *\n * This predicate refines unknown values to bigints, allowing pattern matching\n * on bigint types. BigInts are used for representing integers with arbitrary precision.\n *\n * **Example** (Matching bigint values)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const processLargeNumber = Match.type<unknown>().pipe(\n * Match.when(Match.bigint, (big) => {\n * if (big > 9007199254740991n) {\n * return `Large integer: ${big.toString()}`\n * }\n * return `BigInt: ${big.toString()}`\n * }),\n * Match.when(Match.number, (num) => `Regular number: ${num}`),\n * Match.orElse(() => \"Not a numeric type\")\n * )\n *\n * console.log(processLargeNumber(123n)) // \"BigInt: 123\"\n * console.log(processLargeNumber(9007199254740992n)) // \"Large integer: 9007199254740992\"\n * console.log(processLargeNumber(123)) // \"Regular number: 123\"\n * console.log(processLargeNumber(\"123\")) // \"Not a numeric type\"\n * ```\n *\n * @see {@link number} for matching primitive number values\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const bigint = Predicate.isBigInt;\n/**\n * Matches values of type `symbol`.\n *\n * **Details**\n *\n * This predicate refines unknown values to symbols, allowing pattern matching\n * on symbol types. Symbols are unique identifiers that are often used as\n * object keys or for creating private properties.\n *\n * **Example** (Matching symbol values)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const mySymbol = Symbol(\"my-symbol\")\n * const globalSymbol = Symbol.for(\"global-symbol\")\n *\n * const handleSymbol = Match.type<unknown>().pipe(\n * Match.when(Match.symbol, (sym) => {\n * const description = sym.description\n * if (description) {\n * return `Symbol with description: ${description}`\n * }\n * return \"Symbol without description\"\n * }),\n * Match.orElse(() => \"Not a symbol\")\n * )\n *\n * console.log(handleSymbol(mySymbol)) // \"Symbol with description: my-symbol\"\n * console.log(handleSymbol(Symbol())) // \"Symbol without description\"\n * console.log(handleSymbol(\"string\")) // \"Not a symbol\"\n * ```\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const symbol = Predicate.isSymbol;\n/**\n * Matches values that are instances of `Date`.\n *\n * **When to use**\n *\n * Use to match `Date` instances.\n *\n * **Details**\n *\n * This predicate refines unknown values to Date instances, allowing pattern\n * matching on Date objects. It only matches actual Date instances, not\n * date strings or timestamps.\n *\n * **Example** (Matching Date instances)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const processDateValue = Match.type<unknown>().pipe(\n * Match.when(Match.date, (date) => {\n * if (isNaN(date.getTime())) {\n * return \"Invalid date\"\n * }\n * return `Date: ${date.toISOString().split(\"T\")[0]}`\n * }),\n * Match.when(Match.string, (str) => `Date string: ${str}`),\n * Match.orElse(() => \"Not a date-related value\")\n * )\n *\n * console.log(processDateValue(new Date(\"2024-01-01\"))) // \"Date: 2024-01-01\"\n * console.log(processDateValue(new Date(\"invalid\"))) // \"Invalid date\"\n * console.log(processDateValue(\"2024-01-01\")) // \"Date string: 2024-01-01\"\n * console.log(processDateValue(1704067200000)) // \"Not a date-related value\"\n * ```\n *\n * @see {@link instanceOf} for matching instances of any constructor\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const date = Predicate.isDate;\n/**\n * Matches non-null objects other than arrays.\n *\n * **When to use**\n *\n * Use to match broad non-null, non-array object values.\n *\n * **Details**\n *\n * This predicate uses `Predicate.isObject`: it returns `true` for values whose\n * runtime type is `\"object\"`, are not `null`, and are not arrays. It can match\n * `Date`, `RegExp`, and class instances; use `instanceOf` or a more specific\n * pattern when those cases need to be distinguished.\n *\n * **Example** (Matching record objects)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const analyzeValue = Match.type<unknown>().pipe(\n * Match.when(Match.record, (obj) => {\n * const keys = Object.keys(obj)\n * const valueCount = keys.length\n * return `Object with ${valueCount} properties: [${keys.join(\", \")}]`\n * }),\n * Match.when(\n * Match.instanceOf(Array),\n * (arr) => `Array with ${arr.length} items`\n * ),\n * Match.orElse(() => \"Not an object\")\n * )\n *\n * console.log(analyzeValue({ name: \"Alice\", age: 30 })) // \"Object with 2 properties: [name, age]\"\n * console.log(analyzeValue([1, 2, 3])) // \"Array with 3 items\"\n * console.log(analyzeValue(null)) // \"Not an object\"\n * console.log(analyzeValue(\"hello\")) // \"Not an object\"\n * ```\n *\n * @see {@link instanceOf} for matching a specific constructor\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const record = Predicate.isObject;\n/**\n * Matches instances of a given class.\n *\n * **When to use**\n *\n * Use to match values that are instances of a constructor with type-safe\n * narrowing.\n *\n * **Details**\n *\n * This predicate checks if a value is an instance of the specified constructor,\n * providing type-safe matching for class instances and built-in objects.\n *\n * **Example** (Matching class instances)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * class CustomError extends Error {\n * constructor(message: string, public code: number) {\n * super(message)\n * }\n * }\n *\n * const handleValue = Match.type<unknown>()\n * .pipe(\n * Match.when(\n * Match.instanceOf(CustomError),\n * (err) => `Custom error: ${err.message} (code: ${err.code})`\n * ),\n * Match.when(\n * Match.instanceOf(Error),\n * (err) => `Standard error: ${err.message}`\n * ),\n * Match.when(\n * Match.instanceOf(Array),\n * (arr) => `Array with ${arr.length} items`\n * ),\n * Match.when(\n * Match.instanceOf(Map),\n * (map) => `Map with ${map.size} entries`\n * ),\n * Match.orElse((value) => `Other: ${typeof value}`)\n * )\n *\n * console.log(handleValue(new CustomError(\"Failed\", 404))) // \"Custom error: Failed (code: 404)\"\n * console.log(handleValue(new Error(\"Generic error\"))) // \"Standard error: Generic error\"\n * console.log(handleValue([1, 2, 3])) // \"Array with 3 items\"\n * console.log(handleValue(new Map([[\"count\", 1]]))) // \"Map with 1 entries\"\n * ```\n *\n * @see {@link instanceOfUnsafe} for constructor matching without the same type-safety guarantee\n * @see {@link record} for matching broad non-null, non-array objects\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const instanceOf = internal.instanceOf;\n/**\n * Checks whether a value is an instance of a constructor without type-safe narrowing.\n *\n * **When to use**\n *\n * Use when you need constructor matching to use the unsafe refinement type.\n *\n * **Details**\n *\n * This predicate checks if a value is an instance of the specified constructor\n * but doesn't provide the same type safety guarantees as the regular `instanceOf`.\n * Use this when you need more flexibility but understand the type safety implications.\n *\n * **Example** (Matching class instances unsafely)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * class CustomError extends Error {\n * constructor(message: string, public code: number) {\n * super(message)\n * }\n * }\n *\n * // When you need to match instances but handle type narrowing manually\n * const handleError = Match.type<unknown>().pipe(\n * Match.when(Match.instanceOfUnsafe(CustomError), (err: any) => {\n * // Manual type assertion needed\n * const customErr = err as CustomError\n * return `Custom error ${customErr.code}: ${customErr.message}`\n * }),\n * Match.orElse(() => \"Not a CustomError\")\n * )\n * ```\n *\n * @see {@link instanceOf} for type-safe constructor matching\n *\n * @category predicates\n * @since 4.0.0\n */\nexport const instanceOfUnsafe = internal.instanceOf;\n/**\n * Provides a fallback value when no patterns match.\n *\n * **When to use**\n *\n * Use to finalize a matcher with a fallback for unmatched input.\n *\n * **Details**\n *\n * This function ensures that a matcher always returns a valid result, even if\n * no defined patterns match. It acts as a default case, similar to the\n * `default` clause in a `switch` statement or the final `else` in an `if-else`\n * chain.\n *\n * **Example** (Providing a default value when no patterns match)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * // Create a matcher for string or number values\n * const match = Match.type<string | number>().pipe(\n * // Match when the value is \"a\"\n * Match.when(\"a\", () => \"ok\"),\n * // Fallback when no patterns match\n * Match.orElse(() => \"fallback\")\n * )\n *\n * console.log(match(\"a\"))\n * // Output: \"ok\"\n *\n * console.log(match(\"b\"))\n * // Output: \"fallback\"\n * ```\n *\n * @see {@link option} for finalizing unmatched input as `Option.none`\n * @see {@link result} for returning unmatched input as a `Result` failure\n * @see {@link orElseAbsurd} for finalizing when unmatched input should be impossible\n *\n * @category completion\n * @since 4.0.0\n */\nexport const orElse = internal.orElse;\n// TODO(4.0): Rename to \"orThrow\"? Like Result.getOrThrow\n/**\n * Returns a matcher that throws an error if no pattern matches.\n *\n * **When to use**\n *\n * Use to finalize a matcher when every remaining unmatched case should be\n * impossible.\n *\n * **Details**\n *\n * This function finalizes a matcher by ensuring that if no patterns match, an\n * error is thrown. It is useful when all cases should be covered, and any\n * unexpected input should trigger an error instead of returning a default\n * value.\n *\n * When used, this function removes the need for an explicit fallback case and\n * ensures that an unmatched value is never silently ignored.\n *\n * **Example** (Throwing on unmatched input)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * const strictMatcher = Match.type<\"a\" | \"b\">().pipe(\n * Match.when(\"a\", () => \"Found A\"),\n * Match.when(\"b\", () => \"Found B\"),\n * // Will throw if input is neither \"a\" nor \"b\"\n * Match.orElseAbsurd\n * )\n *\n * console.log(strictMatcher(\"a\")) // \"Found A\"\n * console.log(strictMatcher(\"b\")) // \"Found B\"\n *\n * // This would throw an error at runtime:\n * // strictMatcher(\"c\" as any) // throws\n * ```\n *\n * @see {@link exhaustive} for compile-time exhaustive matcher finalization\n * @see {@link orElse} for providing a fallback for unmatched input\n *\n * @category completion\n * @since 4.0.0\n */\nexport const orElseAbsurd = internal.orElseAbsurd;\n/**\n * Wraps the match result in a `Result`, distinguishing matched and unmatched\n * cases.\n *\n * **Details**\n *\n * This function ensures that the result of a matcher is always wrapped in an\n * `Result`, allowing clear differentiation between successful matches\n * (`Ok(value)`) and cases where no pattern matched (`Err(unmatched\n * value)`).\n *\n * This approach is particularly useful when handling optional values or when an\n * unmatched case should be explicitly handled rather than returning a default\n * value or throwing an error.\n *\n * **Example** (Extracting a user role with `Match.result`)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * type User = { readonly role: \"admin\" | \"editor\" | \"viewer\" }\n *\n * // Create a matcher to extract user roles\n * const getRole = Match.type<User>().pipe(\n * Match.when({ role: \"admin\" }, () => \"Has full access\"),\n * Match.when({ role: \"editor\" }, () => \"Can edit content\"),\n * Match.result // Wrap the result in an Result\n * )\n *\n * console.log(getRole({ role: \"admin\" }))\n * // Output: { _id: 'Result', _tag: 'Ok', ok: 'Has full access' }\n *\n * console.log(getRole({ role: \"viewer\" }))\n * // Output: { _id: 'Result', _tag: 'Err', err: { role: 'viewer' } }\n * ```\n *\n * @category completion\n * @since 4.0.0\n */\nexport const result = internal.result;\n/**\n * Wraps the match result in an `Option`, representing an optional match.\n *\n * **When to use**\n *\n * Use to finalize a matcher when unmatched input is expected and should become\n * `Option.none`.\n *\n * **Details**\n *\n * This function ensures that the result of a matcher is wrapped in an `Option`,\n * making it easy to handle cases where no pattern matches. If a match is found,\n * it returns `Some(value)`, otherwise, it returns `None`.\n *\n * This is useful in cases where a missing match is expected and should be\n * handled explicitly rather than throwing an error or returning a default\n * value.\n *\n * **Example** (Extracting a user role with `Match.option`)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * type User = { readonly role: \"admin\" | \"editor\" | \"viewer\" }\n *\n * // Create a matcher to extract user roles\n * const getRole = Match.type<User>().pipe(\n * Match.when({ role: \"admin\" }, () => \"Has full access\"),\n * Match.when({ role: \"editor\" }, () => \"Can edit content\"),\n * Match.option // Wrap the result in an Option\n * )\n *\n * console.log(getRole({ role: \"admin\" }))\n * // Output: { _id: 'Option', _tag: 'Some', value: 'Has full access' }\n *\n * console.log(getRole({ role: \"viewer\" }))\n * // Output: { _id: 'Option', _tag: 'None' }\n * ```\n *\n * @see {@link result} for preserving unmatched input as a `Result` failure\n * @see {@link orElse} for replacing unmatched input with a fallback value\n *\n * @category completion\n * @since 4.0.0\n */\nexport const option = internal.option;\n/**\n * Completes a matcher that handles every remaining input case.\n *\n * **When to use**\n *\n * Use to require TypeScript to reject incomplete matcher definitions before the\n * matcher is turned into a function.\n *\n * **Details**\n *\n * If any case is still unmatched, the matcher does not type-check as\n * exhaustive.\n *\n * **Example** (Ensuring all cases are covered)\n *\n * ```ts\n * import { Match } from \"effect\"\n *\n * // Create a matcher for string or number values\n * const match = Match.type<string | number>().pipe(\n * // Match when the value is a number\n * Match.when(Match.number, (n) => `number: ${n}`),\n * // Mark the match as exhaustive, ensuring all cases are handled\n * // TypeScript will throw an error if any case is missing\n * // @ts-expect-error Type 'string' is not assignable to type 'never'\n * Match.exhaustive\n * )\n * ```\n *\n * @category completion\n * @since 4.0.0\n */\nexport const exhaustive = internal.exhaustive;\nconst SafeRefinementId = \"~effect/match/Match/SafeRefinement\";\nconst Fail = /*#__PURE__*/Symbol.for(\"effect/Fail\");\n//# sourceMappingURL=Match.js.map","/**\n * Represents observable state for asynchronous values.\n *\n * `AsyncResult<A, E>` records whether asynchronous work has no value yet,\n * succeeded with an `A`, or failed with an `E`. Every state also carries a\n * `waiting` flag, so callers can keep showing the current value while newer\n * work is loading, refreshing, retrying, or recovering. This module includes\n * constructors, checks, accessors, mapping and matching helpers, ways to combine\n * several results, and schemas for encoding or decoding results.\n *\n * @since 4.0.0\n */\nimport * as Cause from \"../../Cause.js\";\nimport * as Effect from \"../../Effect.js\";\nimport * as Equal from \"../../Equal.js\";\nimport * as Exit from \"../../Exit.js\";\nimport { constTrue, dual, identity } from \"../../Function.js\";\nimport * as Hash from \"../../Hash.js\";\nimport * as Option from \"../../Option.js\";\nimport { pipeArguments } from \"../../Pipeable.js\";\nimport { hasProperty, isIterable } from \"../../Predicate.js\";\nimport * as Result from \"../../Result.js\";\nimport * as Schema_ from \"../../Schema.js\";\nimport * as SchemaIssue from \"../../SchemaIssue.js\";\nimport * as SchemaParser from \"../../SchemaParser.js\";\nimport * as SchemaTransformation from \"../../SchemaTransformation.js\";\n/**\n * Runtime identifier attached to `AsyncResult` values and used by `isAsyncResult`.\n *\n * @category type IDs\n * @since 4.0.0\n */\nexport const TypeId = \"~effect/reactivity/AsyncResult\";\n/**\n * Returns `true` when a value is an `AsyncResult`.\n *\n * @category guards\n * @since 4.0.0\n */\nexport const isAsyncResult = u => hasProperty(u, TypeId);\nconst ResultProto = {\n [TypeId]: {\n E: identity,\n A: identity\n },\n pipe() {\n return pipeArguments(this, arguments);\n },\n [Equal.symbol](that) {\n if (this._tag !== that._tag || this.waiting !== that.waiting) {\n return false;\n }\n switch (this._tag) {\n case \"Initial\":\n return true;\n case \"Success\":\n return Equal.equals(this.value, that.value);\n case \"Failure\":\n return Equal.equals(this.cause, that.cause);\n }\n },\n [Hash.symbol]() {\n const tagHash = Hash.string(`${this._tag}:${this.waiting}`);\n if (this._tag === \"Initial\") {\n return tagHash;\n }\n return Hash.combine(tagHash)(this._tag === \"Success\" ? Hash.hash(this.value) : Hash.hash(this.cause));\n }\n};\n/**\n * Returns whether an `AsyncResult` is currently waiting for an asynchronous computation or refresh to finish.\n *\n * @category refinements\n * @since 4.0.0\n */\nexport const isWaiting = result => result.waiting;\n/**\n * Converts an `Exit` into a `Success` when it succeeds or a `Failure` carrying the exit cause when it fails.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const fromExit = exit => exit._tag === \"Success\" ? success(exit.value) : failure(exit.cause);\n/**\n * Converts an `Exit` to a result, preserving the latest previous success when the exit is a failure.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const fromExitWithPrevious = (exit, previous) => exit._tag === \"Success\" ? success(exit.value) : failureWithPrevious(exit.cause, {\n previous\n});\n/**\n * Creates a waiting result from an optional previous result, using `Initial(true)` when no previous result exists.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const waitingFrom = previous => {\n if (previous._tag === \"None\") {\n return initial(true);\n }\n return waiting(previous.value);\n};\n/**\n * Returns `true` when an `AsyncResult` is in the `Initial` state.\n *\n * @category refinements\n * @since 4.0.0\n */\nexport const isInitial = result => result._tag === \"Initial\";\n/**\n * Returns `true` when an `AsyncResult` is either `Success` or `Failure`.\n *\n * @category refinements\n * @since 4.0.0\n */\nexport const isNotInitial = result => result._tag !== \"Initial\";\n/**\n * Creates an `Initial` result, optionally marking it as waiting.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const initial = (waiting = false) => {\n const result = Object.create(ResultProto);\n result._tag = \"Initial\";\n result.waiting = waiting;\n return result;\n};\n/**\n * Returns `true` when an `AsyncResult` is a `Success`.\n *\n * @category refinements\n * @since 4.0.0\n */\nexport const isSuccess = result => result._tag === \"Success\";\n/**\n * Creates a `Success` result with a value and optional `waiting` flag or timestamp override.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const success = (value, options) => {\n const result = Object.create(ResultProto);\n result._tag = \"Success\";\n result.value = value;\n result.waiting = options?.waiting ?? false;\n result.timestamp = options?.timestamp ?? Date.now();\n return result;\n};\n/**\n * Returns `true` when an `AsyncResult` is a `Failure`.\n *\n * @category refinements\n * @since 4.0.0\n */\nexport const isFailure = result => result._tag === \"Failure\";\n/**\n * Returns `true` when an `AsyncResult` is a `Failure` whose cause contains only interruptions.\n *\n * @category refinements\n * @since 4.0.0\n */\nexport const isInterrupted = result => result._tag === \"Failure\" && Cause.hasInterruptsOnly(result.cause);\n/**\n * Creates a `Failure` result from a `Cause`, optionally preserving a previous success and marking the result as waiting.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const failure = (cause, options) => {\n const result = Object.create(ResultProto);\n result._tag = \"Failure\";\n result.cause = cause;\n result.previousSuccess = options?.previousSuccess ?? Option.none();\n result.waiting = options?.waiting ?? false;\n return result;\n};\n/**\n * Creates a `Failure` result from a `Cause`, carrying forward the latest success stored in a previous result.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const failureWithPrevious = (cause, options) => failure(cause, {\n previousSuccess: Option.flatMap(options.previous, result => isSuccess(result) ? Option.some(result) : isFailure(result) ? result.previousSuccess : Option.none()),\n waiting: options.waiting\n});\n/**\n * Creates a `Failure` result from a typed error, wrapping it in `Cause.fail`.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const fail = (error, options) => failure(Cause.fail(error), options);\n/**\n * Creates a `Failure` result from a typed error while carrying forward the latest success stored in a previous result.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const failWithPrevious = (error, options) => failureWithPrevious(Cause.fail(error), options);\n/**\n * Marks an `AsyncResult` as waiting, optionally touching the timestamp when the result is a `Success`.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const waiting = (self, options) => {\n if (self.waiting) {\n return options?.touch ? touch(self) : self;\n }\n const result = Object.assign(Object.create(ResultProto), self);\n result.waiting = true;\n if (options?.touch && isSuccess(result)) {\n ;\n result.timestamp = Date.now();\n }\n return result;\n};\n/**\n * Refreshes the timestamp of a `Success` result while preserving its value and waiting flag; non-success results are returned unchanged.\n *\n * @category combinators\n * @since 4.0.0\n */\nexport const touch = result => {\n if (isSuccess(result)) {\n return success(result.value, {\n waiting: result.waiting\n });\n }\n return result;\n};\n/**\n * Replaces a `Failure` value's stored previous success with the latest success\n * found in another result.\n *\n * @category combinators\n * @since 4.0.0\n */\nexport const replacePrevious = (self, previous) => {\n if (self._tag === \"Failure\") {\n return failureWithPrevious(self.cause, {\n previous,\n waiting: self.waiting\n });\n }\n return self;\n};\n/**\n * Returns the current success value, or the previous success value stored in a failure, as an `Option`.\n *\n * @category accessors\n * @since 4.0.0\n */\nexport const value = self => {\n if (self._tag === \"Success\") {\n return Option.some(self.value);\n } else if (self._tag === \"Failure\") {\n return Option.map(self.previousSuccess, s => s.value);\n }\n return Option.none();\n};\n/**\n * Returns the available value from `value`, or evaluates the fallback when no current or previous success exists.\n *\n * @category accessors\n * @since 4.0.0\n */\nexport const getOrElse = /*#__PURE__*/dual(2, (self, orElse) => Option.getOrElse(value(self), orElse));\n/**\n * Returns the available value from `value`, or throws `NoSuchElementError` when no current or previous success exists.\n *\n * @category accessors\n * @since 4.0.0\n */\nexport const getOrThrow = self => Option.getOrThrowWith(value(self), () => new Cause.NoSuchElementError(\"AsyncResult.getOrThrow: no value found\"));\n/**\n * Returns the failure cause when the result is a `Failure`, otherwise `None`.\n *\n * @category accessors\n * @since 4.0.0\n */\nexport const cause = self => self._tag === \"Failure\" ? Option.some(self.cause) : Option.none();\n/**\n * Returns the first typed error from a failure cause, or `None` for successes, initial results, defects, and interrupt-only causes.\n *\n * @category accessors\n * @since 4.0.0\n */\nexport const error = self => self._tag === \"Failure\" ? Cause.findErrorOption(self.cause) : Option.none();\n/**\n * Converts a result to an `Exit`, succeeding with a success value, failing with a failure cause, or failing with `NoSuchElementError` for `Initial`.\n *\n * @category combinators\n * @since 4.0.0\n */\nexport const toExit = self => {\n switch (self._tag) {\n case \"Success\":\n {\n return Exit.succeed(self.value);\n }\n case \"Failure\":\n {\n return Exit.failCause(self.cause);\n }\n default:\n {\n return Exit.fail(new Cause.NoSuchElementError());\n }\n }\n};\n/**\n * Maps the success value of an `AsyncResult`, also mapping any previous success stored in a failure while leaving initial results unchanged.\n *\n * @category combinators\n * @since 4.0.0\n */\nexport const map = /*#__PURE__*/dual(2, (self, f) => {\n switch (self._tag) {\n case \"Initial\":\n return self;\n case \"Failure\":\n return failure(self.cause, {\n previousSuccess: Option.map(self.previousSuccess, s => success(f(s.value), s)),\n waiting: self.waiting\n });\n case \"Success\":\n return success(f(self.value), self);\n }\n});\n/**\n * Maps the success value of an `AsyncResult` and flattens the result.\n *\n * **When to use**\n *\n * Use to sequence computations that may return another `AsyncResult` while\n * preserving initial and failure states.\n *\n * **Details**\n *\n * Initial results are left unchanged. Failures preserve their cause and remap\n * the stored previous success when the mapping function returns a success.\n *\n * @category combinators\n * @since 4.0.0\n */\nexport const flatMap = /*#__PURE__*/dual(2, (self, f) => {\n switch (self._tag) {\n case \"Initial\":\n return self;\n case \"Failure\":\n return failure(self.cause, {\n previousSuccess: Option.flatMap(self.previousSuccess, s => {\n const next = f(s.value, s);\n return isSuccess(next) ? Option.some(next) : Option.none();\n }),\n waiting: self.waiting\n });\n case \"Success\":\n return f(self.value, self);\n }\n});\n/**\n * Pattern matches an `AsyncResult` by calling the handler for `Initial`, `Failure`, or `Success`.\n *\n * @category combinators\n * @since 4.0.0\n */\nexport const match = /*#__PURE__*/dual(2, (self, options) => {\n switch (self._tag) {\n case \"Initial\":\n return options.onInitial(self);\n case \"Failure\":\n return options.onFailure(self);\n case \"Success\":\n return options.onSuccess(self);\n }\n});\n/**\n * Pattern matches a result, handling successes and initials directly while splitting failures into typed errors or squashed non-error causes passed to `onDefect`.\n *\n * @category combinators\n * @since 4.0.0\n */\nexport const matchWithError = /*#__PURE__*/dual(2, (self, options) => {\n switch (self._tag) {\n case \"Initial\":\n return options.onInitial(self);\n case \"Failure\":\n {\n const result = Cause.findError(self.cause);\n if (Result.isFailure(result)) {\n return options.onDefect(Cause.squash(result.failure), self);\n }\n return options.onError(result.success, self);\n }\n case \"Success\":\n return options.onSuccess(self);\n }\n});\n/**\n * Pattern matches a result by calling `onWaiting` for waiting or initial states, otherwise handling successes and splitting failures into typed errors or squashed non-error causes.\n *\n * @category combinators\n * @since 4.0.0\n */\nexport const matchWithWaiting = /*#__PURE__*/dual(2, (self, options) => {\n if (self.waiting) {\n return options.onWaiting(self);\n }\n switch (self._tag) {\n case \"Initial\":\n return options.onWaiting(self);\n case \"Failure\":\n {\n const e = Cause.findError(self.cause);\n if (Result.isFailure(e)) {\n return options.onDefect(Cause.squash(e.failure), self);\n }\n return options.onError(e.success, self);\n }\n case \"Success\":\n return options.onSuccess(self);\n }\n});\n/**\n * Combines an iterable or record of `AsyncResult` and plain values into one `AsyncResult`, returning the first non-success result or a success of the collected values marked waiting when any input success is waiting.\n *\n * @category combinators\n * @since 4.0.0\n */\nexport const all = results => {\n const isIter = isIterable(results);\n const entries = isIter ? Array.from(results, (result, i) => [i, result]) : Object.entries(results);\n const successes = isIter ? [] : {};\n let waiting = false;\n for (let i = 0; i < entries.length; i++) {\n const [key, result] = entries[i];\n if (!isAsyncResult(result)) {\n successes[key] = result;\n continue;\n } else if (!isSuccess(result)) {\n return result;\n }\n successes[key] = result.value;\n if (result.waiting) {\n waiting = true;\n }\n }\n return success(successes, {\n waiting\n });\n};\n/**\n * Creates a typed builder for rendering an `AsyncResult` by handling waiting, initial, success, error, defect, interrupt, and failure cases.\n *\n * @category constructors\n * @since 4.0.0\n */\nexport const builder = self => new BuilderImpl(self);\nclass BuilderImpl {\n constructor(result) {\n this.result = result;\n }\n result;\n output = /*#__PURE__*/Option.none();\n when(refinement, f) {\n if (Option.isNone(this.output) && refinement(this.result)) {\n const b = f(this.result);\n if (Option.isSome(b)) {\n ;\n this.output = b;\n }\n }\n return this;\n }\n pipe() {\n return pipeArguments(this, arguments);\n }\n onWaiting(f) {\n return this.when(r => r.waiting, r => Option.some(f(r)));\n }\n onInitialOrWaiting(f) {\n return this.when(r => isInitial(r) || r.waiting, r => Option.some(f(r)));\n }\n onInitial(f) {\n return this.when(isInitial, r => Option.some(f(r)));\n }\n onSuccess(f) {\n return this.when(isSuccess, r => Option.some(f(r.value, r)));\n }\n onFailure(f) {\n return this.when(isFailure, r => Option.some(f(r.cause, r)));\n }\n onError(f) {\n return this.onErrorIf(constTrue, f);\n }\n onErrorIf(refinement, f) {\n return this.when(isFailure, result => Cause.findErrorOption(result.cause).pipe(Option.filter(refinement), Option.map(error => f(error, result))));\n }\n onErrorTag(tag, f) {\n return this.onErrorIf(e => hasProperty(e, \"_tag\") && (Array.isArray(tag) ? tag.includes(e._tag) : e._tag === tag), f);\n }\n onDefect(f) {\n return this.when(isFailure, result => {\n const defect = Cause.findDefect(result.cause);\n return Result.isFailure(defect) ? Option.none() : Option.some(f(defect.success, result));\n });\n }\n onInterrupt(f) {\n return this.when(isFailure, result => {\n const interruptors = Cause.filterInterruptors(result.cause);\n return Result.isFailure(interruptors) ? Option.none() : Option.some(f(interruptors.success, result));\n });\n }\n orElse(orElse) {\n return Option.getOrElse(this.output, orElse);\n }\n orNull() {\n return Option.getOrNull(this.output);\n }\n render() {\n if (Option.isSome(this.output)) {\n return this.output.value;\n } else if (isFailure(this.result)) {\n throw Cause.squash(this.result.cause);\n }\n return null;\n }\n exhaustive() {\n return this.render();\n }\n}\n/**\n * Creates a schema for `AsyncResult` values using optional schemas for success values and failure errors.\n *\n * @category schemas\n * @since 4.0.0\n */\nexport const Schema = options => {\n const success_ = options.success ?? Schema_.Never;\n const error = options.error ?? Schema_.Never;\n const schema = Schema_.declareConstructor()([success_, Schema_.Cause(error, Schema_.Defect())], ([value, cause]) => (input, ast, options) => {\n if (!isAsyncResult(input)) {\n return Effect.fail(new SchemaIssue.InvalidType(ast, Option.some(input)));\n }\n switch (input._tag) {\n case \"Initial\":\n return Effect.succeed(input);\n case \"Success\":\n return Effect.mapBothEager(SchemaParser.decodeUnknownEffect(value)(input.value, options), {\n onSuccess: value => success(value, input),\n onFailure: issue => new SchemaIssue.Composite(ast, Option.some(input), [new SchemaIssue.Pointer([\"value\"], issue)])\n });\n case \"Failure\":\n {\n const prevSuccessEffect = input.previousSuccess.pipe(Option.map(ps => Effect.mapBothEager(SchemaParser.decodeUnknownEffect(value)(ps.value, options), {\n onSuccess: value => Option.some(success(value, ps)),\n onFailure: issue => new SchemaIssue.Composite(ast, Option.some(input), [new SchemaIssue.Pointer([\"previousSuccess\", \"value\"], issue)])\n })), Option.getOrElse(() => Effect.succeedNone));\n const causeEffect = Effect.mapErrorEager(SchemaParser.decodeUnknownEffect(cause)(input.cause, options), issue => new SchemaIssue.Composite(ast, Option.some(input), [new SchemaIssue.Pointer([\"cause\"], issue)]));\n return Effect.flatMapEager(prevSuccessEffect, previousSuccess => Effect.mapEager(causeEffect, cause => failure(cause, {\n previousSuccess,\n waiting: input.waiting\n })));\n }\n }\n }, {\n expected: \"AsyncResult\",\n toCodec([value, cause]) {\n const Success = Schema_.TaggedStruct(\"Success\", {\n value,\n waiting: Schema_.Boolean,\n timestamp: Schema_.Number\n });\n return Schema_.link()(Schema_.Union([Schema_.TaggedStruct(\"Initial\", {\n waiting: Schema_.Boolean\n }), Success, Schema_.TaggedStruct(\"Failure\", {\n cause,\n previousSuccess: Schema_.Option(Success),\n waiting: Schema_.Boolean\n })]), SchemaTransformation.transform({\n decode: encoded => {\n switch (encoded._tag) {\n case \"Initial\":\n return initial(encoded.waiting);\n case \"Success\":\n return success(encoded.value, {\n waiting: encoded.waiting,\n timestamp: encoded.timestamp\n });\n case \"Failure\":\n {\n return failure(encoded.cause, {\n previousSuccess: Option.map(encoded.previousSuccess, ps => success(ps.value, ps)),\n waiting: encoded.waiting\n });\n }\n }\n },\n encode(result) {\n switch (result._tag) {\n case \"Initial\":\n return {\n _tag: \"Initial\",\n waiting: result.waiting\n };\n case \"Success\":\n return {\n _tag: \"Success\",\n value: result.value,\n waiting: result.waiting,\n timestamp: result.timestamp\n };\n case \"Failure\":\n return {\n _tag: \"Failure\",\n cause: result.cause,\n previousSuccess: result.previousSuccess,\n waiting: result.waiting\n };\n }\n }\n }));\n },\n toEquivalence: Equal.asEquivalence,\n toFormatter: ([value, cause]) => t => {\n switch (t._tag) {\n case \"Success\":\n return `AsyncResult.Success(${value(t.value)}, ${t.waiting}, ${t.timestamp})`;\n case \"Failure\":\n return `AsyncResult.Failure(${cause(t.cause)}, ${t.waiting})`;\n case \"Initial\":\n return `AsyncResult.Initial(${t.waiting}, ${t.waiting})`;\n }\n }\n });\n return Object.assign(schema, {\n success: success_,\n error\n });\n};\n//# sourceMappingURL=AsyncResult.js.map","import {\n DiffFileTree,\n DiffHeader,\n DiffWorkbench,\n type RlyDiffFile,\n type RlyDiffFileContent,\n type RlyDiffFindingFilter,\n type RlyDiffInventory,\n type RlyDiffLayout\n} from \"@knpkv/rly/diff/workbench\"\nimport type {\n RlyDiffCodeAnnotation,\n RlyDiffCodeItem,\n RlyDiffRendererGeneration,\n RlyDiffCodeViewHandle,\n RlyDiffCodeViewProps\n} from \"@knpkv/rly/diff\"\nimport * as Effect from \"effect/Effect\"\nimport * as Encoding from \"effect/Encoding\"\nimport * as FetchHttpClient from \"effect/unstable/http/FetchHttpClient\"\nimport * as Predicate from \"effect/Predicate\"\nimport { forwardRef, lazy, type ReactElement, Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\"\n\nimport { makeControlCenterApiClient } from \"../../api/client.js\"\nimport type { CompleteDiffContentRange, CompleteDiffInventory, CompleteDiffInventoryEntry } from \"../../api/diff.js\"\nimport type { PluginConnectionId } from \"../../domain/identifiers.js\"\nimport type { PrReviewSuggestion, PrReviewSuggestionState } from \"../../domain/prReview.js\"\nimport type { Revision, VendorImmutableId } from \"../../domain/sourceRevision.js\"\nimport styles from \"./WorkspacePullRequestDiff.module.css\"\n\nconst CompleteDiffCodeView = lazy(async () => {\n const module = await import(\"@knpkv/rly/diff\")\n const Viewer = forwardRef<RlyDiffCodeViewHandle, RlyDiffCodeViewProps>((props, ref): ReactElement => (\n <module.DiffWorkerProvider poolSize={2}>\n <module.DiffCodeView {...props} ref={ref} />\n </module.DiffWorkerProvider>\n ))\n return { default: Viewer }\n})\nconst DiffLineFocus = lazy(async () => {\n const module = await import(\"./DiffLineFocus.js\")\n return { default: module.DiffLineFocus }\n})\nconst ReviewSuggestionOverview = lazy(async () => {\n const module = await import(\"./ReviewSuggestionOverview.js\")\n return { default: module.ReviewSuggestionOverview }\n})\n\nexport interface WorkspacePullRequestDiffScope {\n readonly pluginConnectionId: PluginConnectionId\n readonly revision: Revision\n readonly vendorImmutableId: VendorImmutableId\n}\n\nexport interface WorkspacePullRequestDiffTransport {\n readonly content: (\n scope: WorkspacePullRequestDiffScope,\n entry: Pick<CompleteDiffInventoryEntry, \"anchor\" | \"path\" | \"previousPath\" | \"status\">,\n side: \"before\" | \"after\",\n signal: AbortSignal\n ) => Promise<CompleteDiffContentRange>\n readonly inventory: (scope: WorkspacePullRequestDiffScope, signal: AbortSignal) => Promise<CompleteDiffInventory>\n}\n\n/** Generated-client transport; provider credentials remain behind the server session boundary. */\nexport const browserWorkspacePullRequestDiffTransport: WorkspacePullRequestDiffTransport = {\n inventory: (scope, signal) =>\n Effect.runPromise(\n Effect.gen(function* () {\n const client = yield* makeControlCenterApiClient()\n return yield* client.diff.inventory({\n params: {\n pluginConnectionId: scope.pluginConnectionId,\n vendorImmutableId: scope.vendorImmutableId\n },\n query: { revision: scope.revision }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n content: (scope, entry, side, signal) =>\n Effect.runPromise(\n Effect.gen(function* () {\n const client = yield* makeControlCenterApiClient()\n return yield* client.diff.content({\n params: {\n pluginConnectionId: scope.pluginConnectionId,\n vendorImmutableId: scope.vendorImmutableId\n },\n payload: {\n revision: scope.revision,\n anchor: entry.anchor,\n path: entry.path,\n status: entry.status,\n previousPath: entry.previousPath,\n side,\n offset: 0,\n length: 1_048_576\n }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n )\n}\n\ninterface LoadedText {\n readonly after: string\n readonly before: string\n}\n\ntype InventoryLoadState =\n | { readonly _tag: \"loading\" }\n | { readonly _tag: \"failed\" }\n | { readonly _tag: \"ready\"; readonly inventory: CompleteDiffInventory }\n\ntype SuggestionSeverityFilter = \"all\" | PrReviewSuggestion[\"severity\"]\ntype SuggestionStateFilter = \"all\" | PrReviewSuggestionState\n\nconst ignoreSessionExpiration = (_sessionKey: string): void => undefined\nconst isUnauthorizedFailure = Predicate.isTagged(\"UnauthorizedApiError\")\nconst matchesFindingFilter = (suggestion: PrReviewSuggestion, filter: RlyDiffFindingFilter): boolean => {\n switch (filter) {\n case \"all\":\n case \"agent\":\n return true\n case \"human\":\n return false\n case \"unresolved\":\n return suggestion.state !== \"dismissed\" && suggestion.state !== \"resolved\"\n }\n}\n\nconst explicitContent = (entry: CompleteDiffInventoryEntry): RlyDiffFileContent =>\n entry.binary\n ? { state: \"binary\", reason: \"CodeCommit reports binary content.\" }\n : entry.generated\n ? { state: \"generated\", reason: \"Generated content is indexed but not rendered.\" }\n : entry.oversized\n ? { state: \"oversized\", reason: \"Content exceeds the bounded renderer limit.\" }\n : { state: \"ready\" }\n\nconst unavailableContent = (reason: NonNullable<CompleteDiffContentRange[\"unavailableReason\"]>): RlyDiffFileContent => {\n switch (reason) {\n case \"binary\":\n return { state: \"binary\", reason: \"Binary content is indexed but not rendered.\" }\n case \"generated\":\n return { state: \"generated\", reason: \"Generated content is indexed but not rendered.\" }\n case \"oversized\":\n return { state: \"oversized\", reason: \"Content exceeds the one MiB renderer limit.\" }\n case \"missing\":\n return { state: \"unavailable\", reason: \"This side is not present at the immutable revision.\" }\n case \"provider-unavailable\":\n return { state: \"unavailable\", reason: \"CodeCommit content is temporarily unavailable.\" }\n }\n}\n\nconst entryForSuggestionAnchor = (\n entries: ReadonlyArray<CompleteDiffInventoryEntry>,\n anchor: Exclude<PrReviewSuggestion[\"anchor\"], { readonly _tag: \"changes\" }>\n): CompleteDiffInventoryEntry | undefined =>\n anchor.relativeFileVersion === \"BEFORE\"\n ? (entries.find(\n (entry) =>\n entry.status === \"renamed\" &&\n entry.previousPath !== null &&\n String(entry.previousPath) === String(anchor.path)\n ) ?? entries.find(({ path }) => String(path) === String(anchor.path)))\n : entries.find(({ path }) => String(path) === String(anchor.path))\n\nconst textFrom = (content: CompleteDiffContentRange): string | null => {\n if (content.unavailableReason !== null || content.bytesBase64 === null) return null\n const decoded = Encoding.decodeBase64(content.bytesBase64)\n return decoded._tag === \"Failure\" ? null : new TextDecoder().decode(decoded.success)\n}\n\nconst toFile = (entry: CompleteDiffInventoryEntry, content: RlyDiffFileContent): RlyDiffFile =>\n entry.status === \"renamed\" && entry.previousPath !== null\n ? {\n id: entry.anchor,\n path: entry.path,\n previousPath: entry.previousPath,\n change: \"renamed\",\n content\n }\n : {\n id: entry.anchor,\n path: entry.path,\n change: entry.status === \"copied\" ? \"added\" : entry.status === \"renamed\" ? \"modified\" : entry.status,\n content\n }\n\n/** Connect one complete immutable CodeCommit inventory to rly's lazy workbench. */\nexport const WorkspacePullRequestDiff = ({\n heading,\n onSessionExpired = ignoreSessionExpiration,\n scope,\n sessionKey = null,\n suggestions = [],\n transport = browserWorkspacePullRequestDiffTransport\n}: {\n readonly heading: string\n readonly onSessionExpired?: (sessionKey: string) => void\n readonly scope: WorkspacePullRequestDiffScope\n readonly sessionKey?: string | null\n readonly suggestions?: ReadonlyArray<PrReviewSuggestion>\n readonly transport?: WorkspacePullRequestDiffTransport\n}): ReactElement => {\n const onSessionExpiredRef = useRef(onSessionExpired)\n const scopeRef = useRef(scope)\n onSessionExpiredRef.current = onSessionExpired\n scopeRef.current = scope\n const [inventoryState, setInventoryState] = useState<InventoryLoadState>({ _tag: \"loading\" })\n const [selectedFileId, setSelectedFileId] = useState<string>()\n const [contentStates, setContentStates] = useState<ReadonlyMap<string, RlyDiffFileContent>>(new Map())\n const [loadedText, setLoadedText] = useState<ReadonlyMap<string, LoadedText>>(new Map())\n const [contentRetryKey, setContentRetryKey] = useState(0)\n const [layout, setLayout] = useState<RlyDiffLayout>(\"split\")\n const [isWrapped, setIsWrapped] = useState(false)\n const [findingFilter, setFindingFilter] = useState<RlyDiffFindingFilter>(\"agent\")\n const [severityFilter, setSeverityFilter] = useState<SuggestionSeverityFilter>(\"all\")\n const [suggestionStateFilter, setSuggestionStateFilter] = useState<SuggestionStateFilter>(\"all\")\n const [focusRequest, setFocusRequest] = useState<{\n readonly fileId: string\n readonly lineNumber: number\n readonly requestId: number\n readonly side: \"additions\" | \"deletions\"\n }>()\n const viewerRef = useRef<HTMLDivElement>(null)\n const allFilesTargetRef = useRef<string | undefined>(undefined)\n const appliedAllFilesGenerationsRef = useRef<Set<RlyDiffRendererGeneration>>(new Set())\n const diffCodeViewRef = useRef<RlyDiffCodeViewHandle | null>(null)\n const [diffCodeView, setDiffCodeView] = useState<RlyDiffCodeViewHandle | null>(null)\n const attachDiffCodeView = useCallback((viewer: RlyDiffCodeViewHandle | null): void => {\n diffCodeViewRef.current = viewer\n setDiffCodeView(viewer)\n }, [])\n\n useEffect(() => {\n setFindingFilter(\"agent\")\n setSeverityFilter(\"all\")\n setSuggestionStateFilter(\"all\")\n }, [scope.pluginConnectionId, scope.revision, scope.vendorImmutableId])\n\n useEffect(() => {\n const abort = new AbortController()\n setInventoryState({ _tag: \"loading\" })\n setSelectedFileId(undefined)\n setContentStates(new Map())\n setLoadedText(new Map())\n setContentRetryKey(0)\n setFocusRequest(undefined)\n allFilesTargetRef.current = undefined\n appliedAllFilesGenerationsRef.current.clear()\n transport.inventory(scopeRef.current, abort.signal).then(\n (inventory) => {\n if (abort.signal.aborted) return\n setInventoryState({ _tag: \"ready\", inventory })\n setSelectedFileId(inventory.entries.find((entry) => !entry.generated)?.anchor)\n },\n (failure) => {\n if (abort.signal.aborted) return\n if (sessionKey !== null && isUnauthorizedFailure(failure)) {\n onSessionExpiredRef.current(sessionKey)\n return\n }\n setInventoryState({ _tag: \"failed\" })\n }\n )\n return () => abort.abort()\n }, [scope.pluginConnectionId, scope.revision, scope.vendorImmutableId, sessionKey, transport])\n\n const entries = inventoryState._tag === \"ready\" ? inventoryState.inventory.entries : []\n const selectedEntry = entries.find(({ anchor }) => anchor === selectedFileId)\n useEffect(() => {\n if (\n selectedEntry === undefined ||\n selectedEntry.binary ||\n selectedEntry.generated ||\n selectedEntry.oversized ||\n loadedText.has(selectedEntry.anchor)\n )\n return\n const abort = new AbortController()\n setContentStates((current) =>\n new Map(current).set(selectedEntry.anchor, {\n state: \"loading\",\n label: \"Loading bounded content\"\n })\n )\n Promise.all([\n transport.content(scopeRef.current, selectedEntry, \"before\", abort.signal),\n transport.content(scopeRef.current, selectedEntry, \"after\", abort.signal)\n ]).then(\n ([before, after]) => {\n if (abort.signal.aborted) return\n const unavailable =\n before.unavailableReason !== null && before.unavailableReason !== \"missing\"\n ? before.unavailableReason\n : after.unavailableReason !== null && after.unavailableReason !== \"missing\"\n ? after.unavailableReason\n : null\n if (unavailable !== null) {\n setContentStates((current) => new Map(current).set(selectedEntry.anchor, unavailableContent(unavailable)))\n return\n }\n const beforeText = before.unavailableReason === \"missing\" ? \"\" : textFrom(before)\n const afterText = after.unavailableReason === \"missing\" ? \"\" : textFrom(after)\n if (beforeText === null || afterText === null) {\n setContentStates((current) =>\n new Map(current).set(selectedEntry.anchor, {\n state: \"error\",\n reason: \"The bounded content response could not be decoded.\"\n })\n )\n return\n }\n setLoadedText((current) =>\n new Map(current).set(selectedEntry.anchor, {\n before: beforeText,\n after: afterText\n })\n )\n setContentStates((current) => new Map(current).set(selectedEntry.anchor, { state: \"ready\" }))\n },\n (failure) => {\n if (abort.signal.aborted) return\n if (sessionKey !== null && isUnauthorizedFailure(failure)) {\n onSessionExpiredRef.current(sessionKey)\n return\n }\n setContentStates((current) =>\n new Map(current).set(selectedEntry.anchor, {\n state: \"error\",\n reason: \"The file content request failed; select the file to retry.\"\n })\n )\n }\n )\n return () => abort.abort()\n }, [contentRetryKey, loadedText, selectedEntry, sessionKey, transport])\n\n const files = useMemo(\n () => entries.map((entry) => toFile(entry, contentStates.get(entry.anchor) ?? explicitContent(entry))),\n [contentStates, entries]\n )\n const inventory: RlyDiffInventory =\n inventoryState._tag === \"loading\"\n ? { files: [], indexedCount: 0, totalCount: 0, label: \"Indexing every changed file\", state: \"loading\" }\n : inventoryState._tag === \"failed\"\n ? {\n files: [],\n indexedCount: 0,\n totalCount: 0,\n title: \"Diff inventory unavailable\",\n description: \"No partial inventory is reported as ready. Refresh the page to retry.\",\n state: \"error\"\n }\n : { files, state: \"ready\" }\n const loadedCodeItems = useMemo<ReadonlyArray<RlyDiffCodeItem>>(\n () =>\n entries.flatMap((entry) => {\n const text = loadedText.get(entry.anchor)\n return text === undefined\n ? []\n : [\n {\n id: entry.anchor,\n before: {\n cacheKey: `${scope.revision}:${entry.anchor}:before`,\n contents: text.before,\n name: entry.previousPath ?? entry.path\n },\n after: {\n cacheKey: `${scope.revision}:${entry.anchor}:after`,\n contents: text.after,\n name: entry.path\n }\n }\n ]\n }),\n [entries, loadedText, scope.revision]\n )\n const visibleCodeItems =\n selectedFileId === undefined ? loadedCodeItems : loadedCodeItems.filter(({ id }) => id === selectedFileId)\n useEffect(() => {\n if (selectedFileId !== undefined || diffCodeView === null || allFilesTargetRef.current === undefined) return\n diffCodeView.scrollTo({\n align: \"start\",\n id: allFilesTargetRef.current,\n type: \"item\"\n })\n }, [diffCodeView, selectedFileId])\n const onDiffItemRender = useCallback((itemId: string, generation: RlyDiffRendererGeneration): void => {\n const target = allFilesTargetRef.current\n if (target === undefined || appliedAllFilesGenerationsRef.current.has(generation)) return\n diffCodeViewRef.current?.scrollTo({\n align: \"start\",\n id: target,\n type: \"item\"\n })\n if (itemId !== target) return\n viewerRef.current\n ?.querySelector(`diffs-container[data-rly-diff-item=\"${CSS.escape(target)}\"]`)\n ?.scrollIntoView({ block: \"nearest\" })\n appliedAllFilesGenerationsRef.current.add(generation)\n }, [])\n const visibleSuggestions = useMemo(\n () =>\n suggestions.filter(\n (suggestion) =>\n matchesFindingFilter(suggestion, findingFilter) &&\n (severityFilter === \"all\" || suggestion.severity === severityFilter) &&\n (suggestionStateFilter === \"all\" || suggestion.state === suggestionStateFilter)\n ),\n [findingFilter, severityFilter, suggestionStateFilter, suggestions]\n )\n const navigateToLine = useCallback((fileId: string, lineNumber: number, side: \"additions\" | \"deletions\"): void => {\n allFilesTargetRef.current = undefined\n appliedAllFilesGenerationsRef.current.clear()\n setFocusRequest((current) => ({\n fileId,\n lineNumber,\n requestId: (current?.requestId ?? 0) + 1,\n side\n }))\n setSelectedFileId(fileId)\n }, [])\n const annotations = useMemo<ReadonlyArray<RlyDiffCodeAnnotation>>(\n () =>\n visibleSuggestions.flatMap((suggestion) => {\n if (suggestion.anchor._tag !== \"line\") return []\n const anchor = suggestion.anchor\n const entry = entries.find(({ path }) => String(path) === String(anchor.path))\n if (entry === undefined) return []\n const annotation: RlyDiffCodeAnnotation = {\n accessibilityLabel: `${suggestion.severity} review suggestion with ${suggestion.confidence.level} confidence`,\n id: suggestion.suggestionId,\n location: {\n itemId: entry.anchor,\n lineNumber: anchor.line,\n side: \"additions\"\n },\n render: ({ returnFocus }) => (\n <article>\n <strong>\n {suggestion.severity} · {suggestion.confidence.level} confidence\n </strong>\n <p>{suggestion.title}</p>\n <p>\n <strong>Impact:</strong> {suggestion.impact}\n </p>\n <pre>{suggestion.evidence.excerpt}</pre>\n <p>\n <strong>Recommendation:</strong> {suggestion.recommendation}\n </p>\n <p>{suggestion.confidence.reason}</p>\n {suggestion.relatedLocations.length === 0 ? null : (\n <p>{suggestion.relatedLocations.length} related locations</p>\n )}\n {suggestion.replacement === undefined ? null : <pre>{suggestion.replacement.unifiedDiff}</pre>}\n <button onClick={returnFocus} type=\"button\">\n Return to line\n </button>\n </article>\n )\n }\n return [annotation]\n }),\n [entries, visibleSuggestions]\n )\n const unattachedSuggestionCount = useMemo(\n () =>\n visibleSuggestions.filter((suggestion) => {\n const anchor = suggestion.anchor\n return anchor._tag !== \"changes\" && entryForSuggestionAnchor(entries, anchor) === undefined\n }).length,\n [entries, visibleSuggestions]\n )\n const findings = useMemo(\n () =>\n visibleSuggestions.map((suggestion) => ({\n id: suggestion.suggestionId,\n content: (\n <>\n <strong>\n {suggestion.severity} · {suggestion.title}\n </strong>\n <p>\n {suggestion.anchor._tag === \"changes\"\n ? \"Whole change\"\n : `${suggestion.anchor.path}:${String(suggestion.anchor.line)}`}\n </p>\n </>\n )\n })),\n [visibleSuggestions]\n )\n const severities = [\"all\", \"P1\", \"P2\", \"P3\", \"P4\"] satisfies ReadonlyArray<SuggestionSeverityFilter>\n const states = [\n \"all\",\n ...new Set(suggestions.map(({ state }) => state))\n ] satisfies ReadonlyArray<SuggestionStateFilter>\n\n return (\n <>\n <section aria-label=\"Review suggestion filters\" className={styles.filters}>\n <div aria-label=\"Severity\" role=\"group\">\n {severities.map((severity) => (\n <button\n aria-label={`Filter suggestions by ${severity === \"all\" ? \"all\" : severity} severity`}\n aria-pressed={severityFilter === severity}\n key={severity}\n onClick={() => setSeverityFilter(severity)}\n type=\"button\"\n >\n {severity === \"all\" ? \"All severities\" : severity}\n </button>\n ))}\n </div>\n <div aria-label=\"Suggestion state\" role=\"group\">\n {states.map((state) => (\n <button\n aria-label={`Filter suggestions by ${state} state`}\n aria-pressed={suggestionStateFilter === state}\n key={state}\n onClick={() => setSuggestionStateFilter(state)}\n type=\"button\"\n >\n {state === \"all\" ? \"All states\" : state}\n </button>\n ))}\n </div>\n </section>\n <Suspense fallback={null}>\n <ReviewSuggestionOverview\n entries={entries}\n onNavigate={navigateToLine}\n onSelectAnchor={(anchor) => {\n const entry = entryForSuggestionAnchor(entries, anchor)\n if (entry === undefined) return\n navigateToLine(\n entry.anchor,\n anchor.line,\n anchor.relativeFileVersion === \"BEFORE\" ? \"deletions\" : \"additions\"\n )\n }}\n suggestions={visibleSuggestions}\n />\n </Suspense>\n {unattachedSuggestionCount === 0 ? null : (\n <p role=\"status\">\n {unattachedSuggestionCount} validated review{\" \"}\n {unattachedSuggestionCount === 1 ? \"suggestion is\" : \"suggestions are\"} not attached because the anchor path\n is absent from this diff inventory.\n </p>\n )}\n <DiffWorkbench\n emptyFindings=\"No validated review suggestions are attached to this revision.\"\n findings={findings}\n header={\n <DiffHeader\n findingFilter={findingFilter}\n heading={heading}\n indexedCount={files.length}\n isWrapped={isWrapped}\n layout={layout}\n onFindingFilterChange={setFindingFilter}\n onLayoutChange={setLayout}\n onWrapChange={setIsWrapped}\n totalCount={files.length}\n {...(selectedEntry === undefined ? {} : { selectedFileLabel: selectedEntry.path })}\n />\n }\n inventory={\n <DiffFileTree\n data={inventory}\n heading=\"Complete file inventory\"\n onSelectedFileChange={(fileId) => {\n allFilesTargetRef.current = undefined\n appliedAllFilesGenerationsRef.current.clear()\n if (contentStates.get(fileId)?.state === \"error\") {\n setContentStates((current) => {\n const next = new Map(current)\n next.delete(fileId)\n return next\n })\n setContentRetryKey((current) => current + 1)\n }\n setSelectedFileId(fileId)\n }}\n {...(selectedFileId === undefined ? {} : { selectedFileId })}\n />\n }\n label={`Complete diff for ${heading}`}\n onShowAllFiles={() => {\n allFilesTargetRef.current = visibleCodeItems[0]?.id ?? loadedCodeItems.at(-1)?.id\n appliedAllFilesGenerationsRef.current.clear()\n setSelectedFileId(undefined)\n }}\n scope={\n selectedEntry === undefined\n ? { label: \"All changed files\", mode: \"all-files\" }\n : { fileId: selectedEntry.anchor, label: selectedEntry.path, mode: \"selected-file\" }\n }\n statusNotice={\n selectedEntry === undefined\n ? loadedCodeItems.length === 0\n ? \"Select a supported file to load its content.\"\n : `Showing ${String(loadedCodeItems.length)} lazily loaded ${\n loadedCodeItems.length === 1 ? \"file\" : \"files\"\n }.`\n : visibleCodeItems.length === 0\n ? contentStates.get(selectedEntry.anchor)?.state === \"loading\"\n ? \"Loading this file only.\"\n : \"Content is not rendered for this file.\"\n : undefined\n }\n viewer={\n visibleCodeItems.length === 0 ? (\n \"Select a supported text file to render its change.\"\n ) : (\n <div className={styles.viewerTarget} ref={viewerRef}>\n <Suspense fallback={<p aria-live=\"polite\">Rendering complete diff…</p>}>\n <CompleteDiffCodeView\n annotations={annotations}\n key={selectedFileId ?? \"all-files\"}\n initialItems={visibleCodeItems}\n mode={layout}\n onItemRender={onDiffItemRender}\n ref={attachDiffCodeView}\n wrap={isWrapped}\n />\n </Suspense>\n {focusRequest === undefined || focusRequest.fileId !== selectedFileId ? null : (\n <Suspense fallback={null}>\n <DiffLineFocus\n fileId={focusRequest.fileId}\n key={focusRequest.requestId}\n lineNumber={focusRequest.lineNumber}\n root={viewerRef}\n side={focusRequest.side}\n viewer={diffCodeView}\n />\n </Suspense>\n )}\n </div>\n )\n }\n />\n </>\n )\n}\n","import { Person, type RlyPerson } from \"@knpkv/rly/patterns\"\nimport { Text } from \"@knpkv/rly/primitives\"\nimport * as Match from \"effect/Match\"\nimport * as AsyncResult from \"effect/unstable/reactivity/AsyncResult\"\nimport { type ReactElement, type ReactNode, lazy, Suspense, useCallback, useMemo, useState } from \"react\"\n\nimport type { DurableAgentPrompt, PullRequestReviewState } from \"../../api/agent.js\"\nimport type { PrReviewSuggestion } from \"../../domain/prReview.js\"\nimport type { WorkspacePullRequestPresentation } from \"./presentWorkspacePullRequest.js\"\nimport type { ReviewSuggestionRevisionTransport } from \"./useReviewSuggestionRevisions.js\"\nimport type {\n PullRequestReviewControllerState,\n PullRequestReviewPublicationState,\n ReviewSuggestionPublicationTarget,\n ReviewSuggestionTarget\n} from \"./usePullRequestReview.js\"\nimport styles from \"./WorkspacePullRequestDetails.module.css\"\nimport { WorkspacePullRequestDiff } from \"./WorkspacePullRequestDiff.js\"\nimport { WorkspaceRichText } from \"./WorkspaceRichText.js\"\n\nconst PullRequestReviewPanel = lazy(() => import(\"./PullRequestReviewPanel.js\"))\n\ntype CompletedPullRequestReview = Extract<PullRequestReviewState, { readonly _tag: \"completed\" }>\ntype CompletedPullRequestReviewResult =\n AsyncResult.Initial<CompletedPullRequestReview> | AsyncResult.Success<CompletedPullRequestReview>\n\nconst completedReviewResult = Match.type<PullRequestReviewControllerState>().pipe(\n Match.when({ _tag: \"ready\", review: { _tag: \"completed\" } }, ({ review }): CompletedPullRequestReviewResult =>\n AsyncResult.success(review)\n ),\n Match.orElse((): CompletedPullRequestReviewResult => AsyncResult.initial())\n)\n\nconst Section = ({\n children,\n heading,\n meta\n}: {\n readonly children: ReactNode\n readonly heading: string\n readonly meta: string\n}): ReactElement => (\n <section className={styles.section}>\n <header className={styles.sectionHeading}>\n <Text as=\"h2\" variant=\"section-title\">\n {heading}\n </Text>\n <Text tone=\"secondary\" variant=\"meta\">\n {meta}\n </Text>\n </header>\n {children}\n </section>\n)\n\nconst People = ({ empty, people }: { readonly empty: string; readonly people: ReadonlyArray<RlyPerson> }) =>\n people.length === 0 ? (\n <Text tone=\"secondary\">{empty}</Text>\n ) : (\n <ul className={styles.people}>\n {people.map((person) => (\n <li key={person.id}>\n <Person person={person} size=\"compact\" />\n </li>\n ))}\n </ul>\n )\n\n/** Render the exact CodeCommit revision as a compact review document. */\nexport const WorkspacePullRequestDetails = ({\n approvers,\n onReviewCancel,\n onReviewExtendBudget,\n onReviewLoadEarlier,\n onReviewPublicationCancel,\n onReviewPublicationPreview,\n onReviewRetry,\n onReviewStart,\n onReviewSuggestionPublish,\n onReviewTargetSuggestion = () => undefined,\n onSessionExpired,\n pullRequest,\n reviewCanEnqueue,\n reviewPublication,\n reviewState,\n reviewSuggestionRevisionTransport,\n reviewers,\n sessionKey\n}: {\n readonly approvers: ReadonlyArray<RlyPerson>\n readonly onSessionExpired: (sessionKey: string) => void\n readonly onReviewPublicationCancel: () => void\n readonly onReviewCancel: () => void\n readonly onReviewExtendBudget: () => void\n readonly onReviewLoadEarlier: () => void\n readonly onReviewPublicationPreview: (selection: ReviewSuggestionPublicationTarget) => void\n readonly onReviewRetry: () => void\n readonly onReviewSuggestionPublish: (finalContent: string) => void\n readonly onReviewTargetSuggestion?: (target: ReviewSuggestionTarget) => void\n readonly onReviewStart: (prompt?: DurableAgentPrompt) => void\n readonly pullRequest: WorkspacePullRequestPresentation\n readonly reviewCanEnqueue: boolean\n readonly reviewPublication: PullRequestReviewPublicationState\n readonly reviewSuggestionRevisionTransport?: ReviewSuggestionRevisionTransport\n readonly reviewState: PullRequestReviewControllerState\n readonly reviewers: ReadonlyArray<RlyPerson>\n readonly sessionKey: string | null\n}): ReactElement => {\n const completedReview = AsyncResult.builder(completedReviewResult(reviewState))\n .onInitial(() => null)\n .onSuccess((review) => review)\n .exhaustive()\n const reviewJobId = completedReview?.jobId ?? null\n const reportSuggestions = completedReview?.report.suggestions ?? []\n const [suggestionOverrides, setSuggestionOverrides] = useState<{\n readonly jobId: string | null\n readonly suggestions: ReadonlyMap<string, PrReviewSuggestion>\n }>(() => ({ jobId: reviewJobId, suggestions: new Map() }))\n const presentedSuggestions = useMemo(() => {\n if (suggestionOverrides.jobId !== reviewJobId) return reportSuggestions\n return reportSuggestions.map((suggestion) => {\n const accepted = suggestionOverrides.suggestions.get(suggestion.suggestionId)\n if (accepted === undefined) return suggestion\n return suggestion.state === \"published\" || suggestion.state === \"resolved\"\n ? { ...accepted, state: suggestion.state }\n : accepted\n })\n }, [reportSuggestions, reviewJobId, suggestionOverrides])\n const onSuggestionRevisionAccepted = useCallback(\n (suggestion: PrReviewSuggestion): void => {\n if (reviewJobId === null) return\n setSuggestionOverrides((current) => {\n const suggestions =\n current.jobId === reviewJobId ? new Map(current.suggestions) : new Map<string, PrReviewSuggestion>()\n suggestions.set(suggestion.suggestionId, suggestion)\n return { jobId: reviewJobId, suggestions }\n })\n },\n [reviewJobId]\n )\n\n return (\n <article className={styles.document} data-workspace-pull-request-detail>\n <div className={styles.revisionCard}>\n <div className={styles.branchPair}>\n <span>\n <small>Head</small>\n <strong>{pullRequest.sourceBranch}</strong>\n </span>\n <span aria-hidden=\"true\" className={styles.direction}>\n →\n </span>\n <span>\n <small>Base</small>\n <strong>{pullRequest.targetBranch}</strong>\n </span>\n </div>\n <div className={styles.commitPair}>\n <code title={pullRequest.headRevision}>{pullRequest.headRevision}</code>\n <span>against</span>\n <code title={pullRequest.baseRevision ?? undefined}>\n {pullRequest.baseRevision ?? \"Base revision unavailable\"}\n </code>\n </div>\n <dl className={styles.revisionMeta}>\n <div>\n <dt>Created</dt>\n <dd>\n {pullRequest.createdAt === null ? (\n \"Not synchronized\"\n ) : (\n <time dateTime={pullRequest.createdAt.dateTime}>{pullRequest.createdAt.label}</time>\n )}\n </dd>\n </div>\n <div>\n <dt>Merge base</dt>\n <dd>{pullRequest.mergeBaseRevision ?? \"Not synchronized\"}</dd>\n </div>\n <div>\n <dt>Last activity</dt>\n <dd>\n {pullRequest.updatedAt === null ? (\n \"Not synchronized\"\n ) : (\n <time dateTime={pullRequest.updatedAt.dateTime}>{pullRequest.updatedAt.label}</time>\n )}\n </dd>\n </div>\n </dl>\n </div>\n\n <Section heading=\"Description\" meta=\"What this revision changes\">\n {pullRequest.description === null ? (\n <Text tone=\"secondary\">No description was synchronized from CodeCommit.</Text>\n ) : (\n <WorkspaceRichText className={styles.description} value={pullRequest.description} />\n )}\n </Section>\n\n <Section heading=\"People\" meta=\"Author, reviewers, and approvers\">\n <div className={styles.peopleGroups}>\n <div>\n <Text tone=\"secondary\" variant=\"meta\">\n Author\n </Text>\n {pullRequest.author === null ? (\n <Text tone=\"secondary\">No author identity was synchronized.</Text>\n ) : (\n <Person person={pullRequest.author} />\n )}\n </div>\n <div>\n <Text tone=\"secondary\" variant=\"meta\">\n Reviewers\n </Text>\n <People empty=\"No reviewer is assigned in the canonical workspace.\" people={reviewers} />\n </div>\n <div>\n <Text tone=\"secondary\" variant=\"meta\">\n Approvers\n </Text>\n <People empty=\"No approver is assigned in the canonical workspace.\" people={approvers} />\n </div>\n </div>\n </Section>\n\n <Section heading=\"Review\" meta=\"Human decisions stay separate from agent advice\">\n <div className={styles.reviewLanes}>\n <div>\n <small>Human decision</small>\n <strong>{pullRequest.reviewLabel}</strong>\n <span>Only provider and workspace evidence can change this state.</span>\n </div>\n <div>\n <small>Relay recommendation</small>\n <Suspense fallback={<span>Loading review tools…</span>}>\n <PullRequestReviewPanel\n canEnqueue={reviewCanEnqueue}\n onCancelReview={onReviewCancel}\n onCancelPublication={onReviewPublicationCancel}\n onExtendReviewBudget={onReviewExtendBudget}\n onLoadEarlier={onReviewLoadEarlier}\n onPreviewPublication={onReviewPublicationPreview}\n onPublishSuggestion={onReviewSuggestionPublish}\n onTargetSuggestion={onReviewTargetSuggestion}\n onRetry={onReviewRetry}\n onStart={onReviewStart}\n onSuggestionRevisionAccepted={onSuggestionRevisionAccepted}\n publication={reviewPublication}\n {...(reviewSuggestionRevisionTransport === undefined\n ? {}\n : { revisionTransport: reviewSuggestionRevisionTransport })}\n state={reviewState}\n suggestions={presentedSuggestions}\n />\n </Suspense>\n </div>\n </div>\n </Section>\n\n <Section heading=\"Delivery evidence\" meta=\"Connected work around this exact head\">\n <dl className={styles.deliveryCounts}>\n <div>\n <dt>Jira items</dt>\n <dd>{pullRequest.issueCountLabel}</dd>\n </div>\n <div>\n <dt>Pipeline runs</dt>\n <dd>{pullRequest.pipelineCountLabel}</dd>\n </div>\n <div>\n <dt>Releases</dt>\n <dd>{pullRequest.releaseCountLabel}</dd>\n </div>\n </dl>\n <Text tone=\"secondary\">The delivery relationships below explain every linked item and its evidence.</Text>\n </Section>\n\n <Section heading=\"Files\" meta=\"Complete immutable diff\">\n <WorkspacePullRequestDiff\n heading={`Pull request ${pullRequest.headRevision.slice(0, 12)}`}\n onSessionExpired={onSessionExpired}\n suggestions={presentedSuggestions}\n scope={pullRequest.diffScope}\n sessionKey={sessionKey}\n />\n {pullRequest.filesHref === null ? null : (\n <a className={styles.filesLink} href={pullRequest.filesHref} rel=\"noreferrer\" target=\"_blank\">\n Open this revision in CodeCommit\n </a>\n )}\n </Section>\n </article>\n )\n}\n"],"file":"WorkspacePullRequestDetails-HwDgp12e.js"}
|
package/dist/client/assets/{WorkspaceReleaseLayout-cfboC5Qh.js → WorkspaceReleaseLayout-CGHi8eoo.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{t}from"./react-CZI7_Jkm.js";import{c as n,d as r,f as i,m as a,t as o,u as s}from"./lib-BzlsKFNV.js";import{t as c}from"./jsx-runtime-By8HlURe.js";import{n as l}from"./Dialog-xSrBk0Vv-ClGyDPlc.js";import{a as u,i as d}from"./releasePaths-XoI2BHX3.js";import{i as f,n as p,o as m,r as h}from"./releaseRoutes-
|
|
2
|
-
//# sourceMappingURL=WorkspaceReleaseLayout-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{t}from"./react-CZI7_Jkm.js";import{c as n,d as r,f as i,m as a,t as o,u as s}from"./lib-BzlsKFNV.js";import{t as c}from"./jsx-runtime-By8HlURe.js";import{n as l}from"./Dialog-xSrBk0Vv-ClGyDPlc.js";import{a as u,i as d}from"./releasePaths-XoI2BHX3.js";import{i as f,n as p,o as m,r as h}from"./releaseRoutes-t9uCfs5T.js";import{PortfolioOverviewView as g,usePortfolioOverviewController as _}from"./PortfolioOverview-CEI4gpXi.js";import{n as v}from"./useCompactReleasePreview-BBBQ2fKX.js";var y=e(t(),1),b={state:`_state_1or46_1`},x=c(),S=()=>(0,x.jsx)(`section`,{className:b.state,children:(0,x.jsx)(l,{action:(0,x.jsx)(o,{to:`/`,children:`Return to Control Center`}),description:`This workspace is unavailable to the current browser session. Check the address or return home.`,title:`Workspace not found`})}),C=(e,t)=>e._tag!==`ready`||e.portfolio.workspaceId===t,w=()=>{let e=_(),t=s(),o=i(),c=v(),l=(0,y.useRef)(null),b=a(),[w,T]=(0,y.useState)(null),E=h(b.workspaceId),D=r(`/w/:workspaceId/overview`)!==null,O=p(r(`/w/:workspaceId/releases/:releaseId/preview`)?.params.releaseId),k=E!==null&&O!==null&&e.state._tag===`ready`&&e.state.portfolio.releases.some(e=>e.id===O),A=D||k;if((0,y.useEffect)(()=>{w===null||E===null||e.state._tag!==`ready`||t.pathname!==d(E)||([...l.current?.querySelectorAll(`[data-portfolio-release-id]`)??[]].find(e=>e.dataset.portfolioReleaseId===w)?.querySelector(`button`)?.focus(),T(null))},[e.state,t.pathname,w,E]),E===null||!C(e.state,E))return(0,x.jsx)(S,{});let j=e=>{let n=f(E,e,m(t));o(u(E,e),{preventScrollReset:!0,state:n,viewTransition:!c})},M={controller:e,requestReleaseFocus:T,workspaceId:E};return(0,x.jsxs)(x.Fragment,{children:[A?(0,x.jsx)(`div`,{ref:l,children:(0,x.jsx)(g,{onPreviewRelease:j,onRetry:e.onRetry,previewPathForRelease:e=>u(E,e),state:e.state})}):null,(0,x.jsx)(n,{context:M})]})},T=()=>null,E=()=>{let e=h(a().workspaceId);return(0,x.jsx)(`section`,{className:b.state,children:(0,x.jsx)(l,{action:e===null?(0,x.jsx)(o,{to:`/`,children:`Return to Control Center`}):(0,x.jsx)(o,{to:d(e),children:`Open workspace overview`}),description:`The requested Control Center page does not exist.`,title:`Page not found`})})};export{E as WorkspaceNotFoundRoute,T as WorkspaceOverviewRoute,w as WorkspaceReleaseLayout};
|
|
2
|
+
//# sourceMappingURL=WorkspaceReleaseLayout-CGHi8eoo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceReleaseLayout-
|
|
1
|
+
{"version":3,"file":"WorkspaceReleaseLayout-CGHi8eoo.js","names":[],"sources":["../../../src/client/releases/WorkspaceReleaseLayout.module.css","../../../src/client/releases/WorkspaceReleaseLayout.tsx"],"sourcesContent":[".state {\n display: grid;\n min-block-size: 60dvh;\n place-items: center;\n}\n\n.state a {\n color: inherit;\n font: var(--rly-type-label-weight) var(--rly-type-label-size) / var(--rly-type-label-line-height)\n var(--rly-type-label-font);\n}\n","import { StatePanel } from \"@knpkv/rly/primitives\"\nimport { type ReactElement, useEffect, useRef, useState } from \"react\"\nimport { Link, Outlet, useLocation, useMatch, useNavigate, useParams } from \"react-router\"\n\nimport {\n PortfolioOverviewView,\n type PortfolioOverviewController,\n type PortfolioOverviewState,\n usePortfolioOverviewController\n} from \"../portfolio/PortfolioOverview.js\"\nimport type { PortfolioReleasePresentation } from \"../portfolio/presentPortfolio.js\"\nimport {\n decodeReleaseRouteId,\n decodeWorkspaceRouteId,\n makeReleaseRouteState,\n releaseOriginFromLocation,\n releaseParentPath,\n releasePreviewPath\n} from \"./releaseRoutes.js\"\nimport styles from \"./WorkspaceReleaseLayout.module.css\"\nimport { usePrefersReducedReleaseMotion } from \"./useCompactReleasePreview.js\"\n\nexport interface WorkspaceReleaseOutletContext {\n readonly controller: PortfolioOverviewController\n readonly requestReleaseFocus: (releaseId: PortfolioReleasePresentation[\"id\"]) => void\n readonly workspaceId: NonNullable<ReturnType<typeof decodeWorkspaceRouteId>>\n}\n\nconst WorkspaceNotFound = (): ReactElement => (\n <section className={styles.state}>\n <StatePanel\n action={<Link to=\"/\">Return to Control Center</Link>}\n description=\"This workspace is unavailable to the current browser session. Check the address or return home.\"\n title=\"Workspace not found\"\n />\n </section>\n)\n\nconst isMatchingWorkspace = (\n state: PortfolioOverviewState,\n workspaceId: NonNullable<ReturnType<typeof decodeWorkspaceRouteId>>\n): boolean => state._tag !== \"ready\" || state.portfolio.workspaceId === workspaceId\n\n/** Keep the canonical workspace overview mounted behind route-owned release previews. */\nexport const WorkspaceReleaseLayout = (): ReactElement => {\n const controller = usePortfolioOverviewController()\n const location = useLocation()\n const navigate = useNavigate()\n const prefersReducedMotion = usePrefersReducedReleaseMotion()\n const overviewRef = useRef<HTMLDivElement>(null)\n const params = useParams()\n const [pendingReleaseFocus, setPendingReleaseFocus] = useState<PortfolioReleasePresentation[\"id\"] | null>(null)\n const workspaceId = decodeWorkspaceRouteId(params.workspaceId)\n const isOverview = useMatch(\"/w/:workspaceId/overview\") !== null\n const previewMatch = useMatch(\"/w/:workspaceId/releases/:releaseId/preview\")\n\n const previewReleaseId = decodeReleaseRouteId(previewMatch?.params.releaseId)\n const isKnownPreview =\n workspaceId !== null &&\n previewReleaseId !== null &&\n controller.state._tag === \"ready\" &&\n controller.state.portfolio.releases.some((release) => release.id === previewReleaseId)\n const shouldRenderPortfolio = isOverview || isKnownPreview\n\n useEffect(() => {\n if (\n pendingReleaseFocus === null ||\n workspaceId === null ||\n controller.state._tag !== \"ready\" ||\n location.pathname !== releaseParentPath(workspaceId)\n ) {\n return\n }\n const releaseEntry = [\n ...(overviewRef.current?.querySelectorAll<HTMLElement>(\"[data-portfolio-release-id]\") ?? [])\n ].find((entry) => entry.dataset.portfolioReleaseId === pendingReleaseFocus)\n releaseEntry?.querySelector<HTMLButtonElement>(\"button\")?.focus()\n setPendingReleaseFocus(null)\n }, [controller.state, location.pathname, pendingReleaseFocus, workspaceId])\n\n if (workspaceId === null || !isMatchingWorkspace(controller.state, workspaceId)) return <WorkspaceNotFound />\n\n const onPreviewRelease = (releaseId: PortfolioReleasePresentation[\"id\"]): void => {\n const state = makeReleaseRouteState(workspaceId, releaseId, releaseOriginFromLocation(location))\n navigate(releasePreviewPath(workspaceId, releaseId), {\n preventScrollReset: true,\n state,\n viewTransition: !prefersReducedMotion\n })\n }\n const outletContext = {\n controller,\n requestReleaseFocus: setPendingReleaseFocus,\n workspaceId\n } satisfies WorkspaceReleaseOutletContext\n\n return (\n <>\n {shouldRenderPortfolio ? (\n <div ref={overviewRef}>\n <PortfolioOverviewView\n onPreviewRelease={onPreviewRelease}\n onRetry={controller.onRetry}\n previewPathForRelease={(releaseId) => releasePreviewPath(workspaceId, releaseId)}\n state={controller.state}\n />\n </div>\n ) : null}\n <Outlet context={outletContext} />\n </>\n )\n}\n\n/** Render no extra content for the overview child because its layout owns the live view. */\nexport const WorkspaceOverviewRoute = (): null => null\n\n/** Keep an unknown workspace child URL stable instead of substituting another route. */\nexport const WorkspaceNotFoundRoute = (): ReactElement => {\n const params = useParams()\n const workspaceId = decodeWorkspaceRouteId(params.workspaceId)\n return (\n <section className={styles.state}>\n <StatePanel\n action={\n workspaceId === null ? (\n <Link to=\"/\">Return to Control Center</Link>\n ) : (\n <Link to={releaseParentPath(workspaceId)}>Open workspace overview</Link>\n )\n }\n description=\"The requested Control Center page does not exist.\"\n title=\"Page not found\"\n />\n </section>\n )\n}\n"],"mappings":"ilBC4BM,OACJ,EAAA,EAAA,IAAA,CAAC,UAAD,CAAS,UAAW,EAAO,gBACzB,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAQ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAG,aAAI,0BAA8B,CAAA,EACnD,YAAY,kGACZ,MAAM,qBACP,CAAA,CACM,CAAA,EAGL,GACJ,EACA,IACY,EAAM,OAAS,SAAW,EAAM,UAAU,cAAgB,EAG3D,MAA6C,CACxD,IAAM,EAAa,EAA+B,EAC5C,EAAW,EAAY,EACvB,EAAW,EAAY,EACvB,EAAuB,EAA+B,EACtD,GAAA,EAAA,EAAA,OAAA,CAAqC,IAAI,EACzC,EAAS,EAAU,EACnB,CAAC,EAAqB,IAAA,EAAA,EAAA,SAAA,CAA8E,IAAI,EACxG,EAAc,EAAuB,EAAO,WAAW,EACvD,EAAa,EAAS,0BAA0B,IAAM,KAGtD,EAAmB,EAFJ,EAAS,6CAEgB,CAAA,EAAc,OAAO,SAAS,EACtE,EACJ,IAAgB,MAChB,IAAqB,MACrB,EAAW,MAAM,OAAS,SAC1B,EAAW,MAAM,UAAU,SAAS,KAAM,GAAY,EAAQ,KAAO,CAAgB,EACjF,EAAwB,GAAc,EAkB5C,IAhBA,EAAA,EAAA,UAAA,KAAgB,CAEZ,IAAwB,MACxB,IAAgB,MAChB,EAAW,MAAM,OAAS,SAC1B,EAAS,WAAa,EAAkB,CAAW,IAOrD,CAFE,GAAI,EAAY,SAAS,iBAA8B,6BAA6B,GAAK,CAAC,CAC5F,CAAC,CAAC,KAAM,GAAU,EAAM,QAAQ,qBAAuB,CACvD,CAAA,EAAc,cAAiC,QAAQ,CAAC,EAAE,MAAM,EAChE,EAAuB,IAAI,EAC7B,EAAG,CAAC,EAAW,MAAO,EAAS,SAAU,EAAqB,CAAW,CAAC,EAEtE,IAAgB,MAAQ,CAAC,EAAoB,EAAW,MAAO,CAAW,EAAG,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAoB,CAAA,EAE5G,IAAM,EAAoB,GAAwD,CAChF,IAAM,EAAQ,EAAsB,EAAa,EAAW,EAA0B,CAAQ,CAAC,EAC/F,EAAS,EAAmB,EAAa,CAAS,EAAG,CACnD,mBAAoB,GACpB,QACA,eAAgB,CAAC,CACnB,CAAC,CACH,EACM,EAAgB,CACpB,aACA,oBAAqB,EACrB,aACF,EAEA,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,GACC,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,IAAK,YACR,EAAA,EAAA,IAAA,CAAC,EAAD,CACoB,mBAClB,QAAS,EAAW,QACpB,sBAAwB,GAAc,EAAmB,EAAa,CAAS,EAC/E,MAAO,EAAW,KACnB,CAAA,CACE,CAAA,EACH,MACJ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,QAAS,CAAgB,CAAA,CACjC,CAAA,CAAA,CAEN,EAGa,MAAqC,KAGrC,MAA6C,CAExD,IAAM,EAAc,EADL,EAC4B,CAAA,CAAO,WAAW,EAC7D,OACE,EAAA,EAAA,IAAA,CAAC,UAAD,CAAS,UAAW,EAAO,gBACzB,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,OACE,IAAgB,MACd,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAG,aAAI,0BAA8B,CAAA,GAE3C,EAAA,EAAA,IAAA,CAAC,EAAD,CAAM,GAAI,EAAkB,CAAW,WAAG,yBAA6B,CAAA,EAG3E,YAAY,oDACZ,MAAM,gBACP,CAAA,CACM,CAAA,CAEb"}
|
package/dist/client/assets/{WorkspaceSettingsPage-Fy7Wx8Y2.js → WorkspaceSettingsPage-DyoGiGJG.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{t}from"./react-CZI7_Jkm.js";import{m as n}from"./lib-BzlsKFNV.js";import{t as r}from"./jsx-runtime-By8HlURe.js";import{n as i,t as a}from"./Dialog-xSrBk0Vv-ClGyDPlc.js";import{a as o,c as s,l as c,u as l}from"./index-j5ze816l.js";import{n as u,r as d}from"./primitives-nKxQGSsE-CJNmac__.js";import{_r as f,za as p}from"./agent-api-QVqt4a0O.js";import{i as m,n as h,r as g}from"./client-D27unen8.js";import{browserWorkspaceSettingsTransport as _}from"./workspaceSettingsTransport-CZWYL5T7.js";var v=e(t(),1),y={page:`_page_1cf73_1`,heading:`_heading_1cf73_9`,theme:`_theme_1cf73_10`,save:`_save_1cf73_11`,actions:`_actions_1cf73_12`,notice:`_notice_1cf73_34`,governance:`_governance_1cf73_39`,sections:`_sections_1cf73_47`,section:`_section_1cf73_47`,sectionHeading:`_sectionHeading_1cf73_60`,fields:`_fields_1cf73_61`,field:`_field_1cf73_61`,checkbox:`_checkbox_1cf73_79`,control:`_control_1cf73_92`},b=p(`ConflictApiError`),x=p(`UnauthorizedApiError`),S=(e,t,n,r=Object.is)=>r(e,t)?n:t,C=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),w=(e,t,n)=>{let r={schemaVersion:1,agent:{allowedProviders:S(e.agent.allowedProviders,t.agent.allowedProviders,n.agent.allowedProviders,C),defaultModel:S(e.agent.defaultModel,t.agent.defaultModel,n.agent.defaultModel),defaultProvider:S(e.agent.defaultProvider,t.agent.defaultProvider,n.agent.defaultProvider),profilePolicy:S(e.agent.profilePolicy,t.agent.profilePolicy,n.agent.profilePolicy),toolPolicy:S(e.agent.toolPolicy,t.agent.toolPolicy,n.agent.toolPolicy)},inference:{enabled:S(e.inference.enabled,t.inference.enabled,n.inference.enabled),minimumConfidencePercent:S(e.inference.minimumConfidencePercent,t.inference.minimumConfidencePercent,n.inference.minimumConfidencePercent)},investigation:{consecutiveFailureThreshold:S(e.investigation.consecutiveFailureThreshold,t.investigation.consecutiveFailureThreshold,n.investigation.consecutiveFailureThreshold),mode:S(e.investigation.mode,t.investigation.mode,n.investigation.mode)},jira:{commentMode:S(e.jira.commentMode,t.jira.commentMode,n.jira.commentMode),includeControlCenterAttribution:S(e.jira.includeControlCenterAttribution,t.jira.includeControlCenterAttribution,n.jira.includeControlCenterAttribution)},pipeline:{maximumAttempts:S(e.pipeline.maximumAttempts,t.pipeline.maximumAttempts,n.pipeline.maximumAttempts),retryMode:S(e.pipeline.retryMode,t.pipeline.retryMode,n.pipeline.retryMode)},presentation:{defaultLanding:S(e.presentation.defaultLanding,t.presentation.defaultLanding,n.presentation.defaultLanding),density:S(e.presentation.density,t.presentation.density,n.presentation.density)},retention:{agentActivityDays:S(e.retention.agentActivityDays,t.retention.agentActivityDays,n.retention.agentActivityDays),auditDays:S(e.retention.auditDays,t.retention.auditDays,n.retention.auditDays),contentDays:S(e.retention.contentDays,t.retention.contentDays,n.retention.contentDays),evidenceDays:S(e.retention.evidenceDays,t.retention.evidenceDays,n.retention.evidenceDays),sandboxArtifactDays:S(e.retention.sandboxArtifactDays,t.retention.sandboxArtifactDays,n.retention.sandboxArtifactDays)},synchronization:{cadence:S(e.synchronization.cadence,t.synchronization.cadence,n.synchronization.cadence),intervalMinutes:S(e.synchronization.intervalMinutes,t.synchronization.intervalMinutes,n.synchronization.intervalMinutes),staleAfterMinutes:S(e.synchronization.staleAfterMinutes,t.synchronization.staleAfterMinutes,n.synchronization.staleAfterMinutes)}};return f(h)(r)?r:null},T=(e,t,n=_)=>{let[r,i]=(0,v.useState)({_tag:`idle`}),a=(0,v.useRef)(r),[s,c]=(0,v.useState)(0),l=(0,v.useRef)(null),u=(0,v.useCallback)(e=>{a.current=e,i(e)},[]);(0,v.useEffect)(()=>{if(l.current?.abort(),e===null){u({_tag:`idle`});return}let r=new AbortController;return l.current=r,u({_tag:`loading`}),n.load(r.signal).then(e=>{r.signal.aborted||(o(e),u({_tag:`ready`,draft:e.settings,pendingMutationId:null,server:e,status:`saved`}))},n=>{r.signal.aborted||(x(n)&&t(e),u({_tag:`failed`}))}),()=>r.abort()},[t,s,e,u,n]);let d=(0,v.useCallback)(e=>{let t=a.current;t._tag!==`ready`||t.status===`saving`||u({...t,draft:e,pendingMutationId:null,status:g(t.server.settings,e).length===0?`saved`:`dirty`})},[u]),f=(0,v.useCallback)(()=>{if(e===null)return;let r=a.current;if(r._tag!==`ready`||r.status!==`dirty`&&r.status!==`failed`)return;let i=new AbortController;l.current?.abort(),l.current=i;let s=r.server,c=r.draft,d=g(s.settings,c).filter(m);u({...r,status:`saving`}),(r.pendingMutationId===null?n.makeMutationId():Promise.resolve(r.pendingMutationId)).then(r=>{n.update({mutationId:r,expectedRevision:s.revision,settings:c,acknowledgedGovernedSections:d},i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`ready`,draft:e.settings,pendingMutationId:null,server:e,status:`saved`}))},a=>{if(!i.signal.aborted){if(x(a)){t(e),u({_tag:`failed`});return}if(!b(a)){u({_tag:`ready`,draft:c,pendingMutationId:r,server:s,status:`failed`});return}n.load(i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`conflict`,base:s,candidate:c,latest:e,reapplyFailed:!1}))},n=>{if(!i.signal.aborted){if(x(n)){t(e),u({_tag:`failed`});return}u({_tag:`conflict-recovery-failed`,base:s,candidate:c})}})}})},()=>{i.signal.aborted||u({_tag:`ready`,draft:c,pendingMutationId:null,server:s,status:`failed`})})},[t,e,u,n]);return{discardConflict:(0,v.useCallback)(()=>{let e=a.current;e._tag===`conflict`&&u({_tag:`ready`,draft:e.latest.settings,pendingMutationId:null,server:e.latest,status:`saved`})},[u]),edit:d,reapplyConflict:(0,v.useCallback)(()=>{let e=a.current;if(e._tag!==`conflict`)return;let t=w(e.base.settings,e.candidate,e.latest.settings);if(t===null){u({...e,reapplyFailed:!0});return}u({_tag:`ready`,draft:t,pendingMutationId:null,server:e.latest,status:g(e.latest.settings,t).length===0?`saved`:`dirty`})},[u]),retry:()=>c(e=>e+1),retryConflict:(0,v.useCallback)(()=>{let r=a.current;if(r._tag!==`conflict-recovery-failed`)return;let i=new AbortController;l.current?.abort(),l.current=i;let{base:s,candidate:c}=r;u({_tag:`conflict-recovery-loading`,base:s,candidate:c}),n.load(i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`conflict`,base:s,candidate:c,latest:e,reapplyFailed:!1}))},n=>{if(!i.signal.aborted){if(e!==null&&x(n)){t(e),u({_tag:`failed`});return}u({_tag:`conflict-recovery-failed`,base:s,candidate:c})}})},[t,e,u,n]),save:f,state:r}},E=r(),D=(e,t)=>{let n=Number.parseInt(e.currentTarget.value,10);return Number.isNaN(n)?t:n},O=e=>[...new Set(e.split(`,`).map(e=>e.trim().toLowerCase()).filter(e=>e.length>0))].sort(),k=({children:e,description:t,title:n})=>(0,E.jsxs)(u,{className:y.section,padding:`default`,shape:`grouped`,children:[(0,E.jsxs)(`div`,{className:y.sectionHeading,children:[(0,E.jsx)(d,{as:`h2`,variant:`section-title`,children:n}),(0,E.jsx)(d,{as:`p`,tone:`secondary`,children:t})]}),(0,E.jsx)(`div`,{className:y.fields,children:e})]}),A=({children:e,controlId:t,error:n,hint:r,label:i})=>(0,E.jsxs)(`label`,{className:y.field,htmlFor:t,children:[(0,E.jsx)(`span`,{children:i}),e,r===void 0?null:(0,E.jsx)(`small`,{children:r}),n===void 0?null:(0,E.jsx)(`small`,{id:t===void 0?void 0:`${t}-error`,role:`alert`,children:n})]}),j=({checked:e,disabled:t,label:n,onChange:r})=>(0,E.jsxs)(`label`,{className:y.checkbox,children:[(0,E.jsx)(`input`,{checked:e,disabled:t,onChange:e=>r(e.currentTarget.checked),type:`checkbox`}),(0,E.jsx)(`span`,{children:n})]}),M=({disabled:e,label:t,onChange:n,options:r,value:i})=>(0,E.jsx)(A,{label:t,children:(0,E.jsx)(`select`,{className:y.control,disabled:e,onChange:e=>{let t=r.find(([t])=>t===e.currentTarget.value);t!==void 0&&n(t[0])},value:i,children:r.map(([e,t])=>(0,E.jsx)(`option`,{value:e,children:t},e))})}),N=[[`evidenceDays`,`Evidence (days)`,3650],[`contentDays`,`Content (days)`,3650],[`auditDays`,`Audit history (days)`,3650],[`agentActivityDays`,`Agent activity (days)`,365],[`sandboxArtifactDays`,`Sandbox artifacts (days)`,30]],P=({disabled:e,error:t,label:n,maximum:r,minimum:i,onChange:a,value:o})=>{let s=(0,v.useId)(),c=t??(!Number.isInteger(o)||o<i||o>r?`${n} must be a whole number from ${String(i)} to ${String(r)}.`:void 0);return(0,E.jsx)(A,{controlId:s,...c===void 0?{}:{error:c},label:n,children:(0,E.jsx)(`input`,{"aria-describedby":c===void 0?void 0:`${s}-error`,"aria-invalid":c!==void 0||void 0,className:y.control,disabled:e,id:s,max:r,min:i,onChange:e=>a(D(e,o)),type:`number`,value:o})})},F=({canEdit:e,draft:t,onChange:n})=>{let r=!e,i=t.agent.allowedProviders.join(`, `),[a,o]=(0,v.useState)(i),s=(0,v.useRef)(i),c=(0,v.useRef)(!1),l=(e,r)=>n({...t,[e]:r}),u=e=>{let n=O(e);s.current=n.join(`, `),l(`agent`,{...t.agent,allowedProviders:n,defaultProvider:t.agent.defaultProvider!==null&&n.includes(t.agent.defaultProvider)?t.agent.defaultProvider:null,defaultModel:t.agent.defaultProvider!==null&&n.includes(t.agent.defaultProvider)?t.agent.defaultModel:null})};return(0,v.useEffect)(()=>{i!==s.current&&o(i),s.current=i},[i]),(0,E.jsxs)(`div`,{className:y.sections,children:[(0,E.jsxs)(k,{description:`Controls whether inferred delivery relationships are proposed and the confidence floor.`,title:`Inference`,children:[(0,E.jsx)(j,{checked:t.inference.enabled,disabled:r,label:`Enable relationship inference`,onChange:e=>l(`inference`,{...t.inference,enabled:e})}),(0,E.jsx)(P,{disabled:r,label:`Minimum confidence (%)`,maximum:100,minimum:0,onChange:e=>l(`inference`,{...t.inference,minimumConfidencePercent:e}),value:t.inference.minimumConfidencePercent})]}),(0,E.jsxs)(k,{description:`Records the intended synchronization cadence; Sync now remains the active execution path. Also sets the age at which source data is stale.`,title:`Synchronization`,children:[(0,E.jsx)(M,{disabled:r,label:`Cadence`,onChange:e=>l(`synchronization`,{...t.synchronization,cadence:e,intervalMinutes:e===`manual`?null:t.synchronization.intervalMinutes??60}),options:[[`manual`,`Manual`],[`interval`,`Scheduled interval`]],value:t.synchronization.cadence}),t.synchronization.intervalMinutes===null?null:(0,E.jsx)(P,{disabled:r,label:`Interval (minutes)`,maximum:10080,minimum:5,onChange:e=>l(`synchronization`,{...t.synchronization,intervalMinutes:e}),value:t.synchronization.intervalMinutes}),(0,E.jsx)(P,{disabled:r,label:`Stale after (minutes)`,maximum:43200,minimum:5,onChange:e=>l(`synchronization`,{...t.synchronization,staleAfterMinutes:e}),value:t.synchronization.staleAfterMinutes})]}),(0,E.jsx)(k,{description:`Governed lifecycle policy. Evidence expiry applies to new materialization; bounded final-class sweeps run through lifecycle operations.`,title:`Retention`,children:N.map(([e,n,i])=>(0,v.createElement)(P,{disabled:r,...(()=>{let n=(e===`evidenceDays`||e===`auditDays`)&&t.retention.auditDays<t.retention.evidenceDays?`Audit retention must be at least as long as evidence retention.`:(e===`agentActivityDays`||e===`sandboxArtifactDays`)&&t.retention.agentActivityDays<t.retention.sandboxArtifactDays?`Agent activity retention must be at least as long as sandbox artifact retention.`:void 0;return n===void 0?{}:{error:n}})(),key:e,label:n,maximum:i,minimum:1,onChange:n=>l(`retention`,{...t.retention,[e]:n}),value:t.retention[e]}))}),(0,E.jsxs)(k,{description:`Records the threshold for investigation automation; investigation creation currently remains manual.`,title:`Investigation`,children:[(0,E.jsx)(M,{disabled:r,label:`Mode`,onChange:e=>l(`investigation`,{...t.investigation,mode:e}),options:[[`manual`,`Manual`],[`automatic`,`Automatic`]],value:t.investigation.mode}),(0,E.jsx)(P,{disabled:r,label:`Consecutive failure threshold`,maximum:20,minimum:1,onChange:e=>l(`investigation`,{...t.investigation,consecutiveFailureThreshold:e}),value:t.investigation.consecutiveFailureThreshold})]}),(0,E.jsxs)(k,{description:`Governed publishing defaults. Credentials and tokens never belong in workspace settings.`,title:`Jira`,children:[(0,E.jsx)(M,{disabled:r,label:`Comment publishing`,onChange:e=>l(`jira`,{...t.jira,commentMode:e}),options:[[`manual-only`,`Manual only`],[`confirm-before-publish`,`Confirm before publishing`]],value:t.jira.commentMode}),(0,E.jsx)(j,{checked:t.jira.includeControlCenterAttribution,disabled:r,label:`Include Control Center attribution`,onChange:e=>l(`jira`,{...t.jira,includeControlCenterAttribution:e})})]}),(0,E.jsxs)(k,{description:`Governed retry defaults for pipeline operations.`,title:`Pipeline`,children:[(0,E.jsx)(M,{disabled:r,label:`Retry behavior`,onChange:e=>l(`pipeline`,{...t.pipeline,retryMode:e}),options:[[`manual-only`,`Manual only`],[`confirm-before-retry`,`Confirm before retry`]],value:t.pipeline.retryMode}),(0,E.jsx)(P,{disabled:r,label:`Maximum attempts`,maximum:10,minimum:1,onChange:e=>l(`pipeline`,{...t.pipeline,maximumAttempts:e}),value:t.pipeline.maximumAttempts})]}),(0,E.jsxs)(k,{description:`Governed provider and sandbox policy. Provider identifiers are names only, never secrets.`,title:`Agent`,children:[(0,E.jsx)(A,{hint:`Comma-separated lowercase identifiers; saved in canonical order.`,label:`Allowed providers`,children:(0,E.jsx)(`input`,{className:y.control,disabled:r,onBlur:()=>o(i),onCompositionEnd:e=>{c.current=!1,u(e.currentTarget.value)},onCompositionStart:()=>{c.current=!0},onChange:e=>{let t=e.currentTarget.value;o(t),c.current||u(t)},type:`text`,value:a})}),(0,E.jsx)(A,{label:`Default provider`,children:(0,E.jsx)(`input`,{className:y.control,disabled:r,list:`allowed-agent-providers`,onChange:e=>{let n=e.currentTarget.value.trim().toLowerCase()||null;l(`agent`,{...t.agent,defaultProvider:n,defaultModel:n===null?null:t.agent.defaultModel})},type:`text`,value:t.agent.defaultProvider??``})}),(0,E.jsx)(`datalist`,{id:`allowed-agent-providers`,children:t.agent.allowedProviders.map(e=>(0,E.jsx)(`option`,{value:e},e))}),(0,E.jsx)(A,{label:`Default model`,children:(0,E.jsx)(`input`,{className:y.control,disabled:r||t.agent.defaultProvider===null,onChange:e=>l(`agent`,{...t.agent,defaultModel:e.currentTarget.value.trim()||null}),type:`text`,value:t.agent.defaultModel??``})}),(0,E.jsx)(M,{disabled:r,label:`Tool policy`,onChange:e=>l(`agent`,{...t.agent,toolPolicy:e}),options:[[`read-only`,`Read only`],[`review-sandbox`,`Review sandbox`]],value:t.agent.toolPolicy}),(0,E.jsx)(M,{disabled:r,label:`Profile policy`,onChange:e=>l(`agent`,{...t.agent,profilePolicy:e}),options:[[`isolated`,`Isolated`],[`local-profile`,`Local profile`]],value:t.agent.profilePolicy})]}),(0,E.jsxs)(k,{description:`Workspace presentation defaults shared by collaborators.`,title:`Presentation`,children:[(0,E.jsx)(M,{disabled:r,label:`Density`,onChange:e=>l(`presentation`,{...t.presentation,density:e}),options:[[`comfortable`,`Comfortable`],[`compact`,`Compact`]],value:t.presentation.density}),(0,E.jsx)(M,{disabled:r,label:`Default landing`,onChange:e=>l(`presentation`,{...t.presentation,defaultLanding:e}),options:[[`overview`,`Overview`],[`active-work`,`Active work`]],value:t.presentation.defaultLanding})]})]})},I=({transport:e=_}={})=>{let t=l(),r=n().workspaceId,o=t.state._tag===`authenticated`||t.state._tag===`storage-unavailable`?t.state.session:null,p=o===null||r===o.workspaceId,b=p?c(t.state):null,x=T(b,t.invalidateSession,e),S=s(),[C,w]=(0,v.useState)(null),D=t.state._tag===`authenticated`&&o?.permission===`workspace-owner`;if(!p)return(0,E.jsx)(i,{description:`This route does not match the workspace authorized for the current browser session.`,title:`Workspace not found`,tone:`critical`});if(b===null&&t.state._tag!==`checking`){let e=t.state._tag===`anonymous`;return(0,E.jsx)(i,{description:e?`Sign in to inspect the settings authorized for this workspace.`:`The current browser session cannot read workspace settings.`,title:e?`Authentication required`:`Settings unavailable`,tone:e?`caution`:`critical`})}if(x.state._tag===`idle`||x.state._tag===`loading`)return(0,E.jsx)(i,{title:`Loading workspace settings`});if(x.state._tag===`failed`)return(0,E.jsx)(i,{action:(0,E.jsx)(a,{onClick:x.retry,children:`Retry`}),description:`The current settings document could not be loaded.`,title:`Settings unavailable`,tone:`critical`});if(x.state._tag===`conflict-recovery-failed`)return(0,E.jsx)(i,{action:(0,E.jsx)(a,{onClick:x.retryConflict,children:`Retry latest revision`}),description:`Your unsaved draft is retained, but the latest server revision could not be loaded.`,title:`Conflict recovery interrupted`,tone:`critical`});if(x.state._tag===`conflict-recovery-loading`)return(0,E.jsx)(i,{description:`Your unsaved draft is retained while the latest server revision is loaded.`,title:`Retrying conflict recovery`});if(x.state._tag===`conflict`)return(0,E.jsx)(`div`,{className:y.page,children:(0,E.jsx)(i,{action:(0,E.jsxs)(`div`,{className:y.actions,children:[(0,E.jsx)(a,{onClick:x.discardConflict,children:`Use latest`}),x.state.reapplyFailed?null:(0,E.jsx)(a,{onClick:x.reapplyConflict,variant:`primary`,children:`Reapply my changes`})]}),description:x.state.reapplyFailed?`Your changed fields cannot be combined safely with the latest settings. Use the latest document, then re-enter and review your changes.`:`Another session saved revision ${String(x.state.latest.revision)}. Choose the latest document or reapply only the fields you changed, then review and save.`,title:x.state.reapplyFailed?`Settings conflict needs manual recovery`:`Settings changed in another session`,tone:`caution`})});let{draft:O,server:k,status:A}=x.state,M=g(k.settings,O).filter(m),N=M.length>0,P=N?JSON.stringify([k.revision,...M.map(e=>[e,O[e]])]):null,I=P!==null&&C===P,L=f(h)(O),R=O.agent.profilePolicy===`local-profile`;return(0,E.jsxs)(`div`,{className:y.page,children:[(0,E.jsxs)(`header`,{className:y.heading,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(d,{as:`h1`,variant:`page-title`,children:`Workspace settings`}),(0,E.jsxs)(d,{as:`p`,tone:`secondary`,children:[`Revision `,k.revision,`. Changes are protected against stale writes and attributable to the current session.`]})]}),(0,E.jsxs)(`div`,{className:y.save,children:[(0,E.jsx)(`span`,{"aria-live":`polite`,children:A===`saving`?`Saving…`:A===`failed`?`Save failed — retry when ready`:A===`dirty`?`Unsaved changes`:`Saved`}),(0,E.jsx)(a,{disabled:!D||A!==`dirty`&&A!==`failed`||!L||R||N&&!I,loading:A===`saving`,onClick:x.save,variant:`primary`,children:`Save settings`})]})]}),D?null:(0,E.jsx)(d,{as:`p`,className:y.notice,tone:`secondary`,children:o?.permission===`workspace-approver`?`Approvers can inspect settings. A workspace owner must save changes.`:`A workspace-owner session with mutation storage is required to change settings.`}),D&&!L?(0,E.jsx)(d,{as:`p`,className:y.notice,tone:`secondary`,children:`Correct the highlighted bounds and policy relationships before saving. Audit retention must cover evidence, sandbox artifacts must expire before agent activity, and default agent providers must be allowed.`}):null,D&&R?(0,E.jsx)(d,{as:`p`,className:y.notice,tone:`secondary`,children:`Local profile is unavailable: no installed CLI capability generation proves that hooks, plugins, MCP servers, browser control, and extra writable roots are disabled. Compared with isolated mode, those surfaces would be added and must be verified before this governed policy can be saved.`}):null,D&&N?(0,E.jsx)(u,{className:y.governance,padding:`default`,shape:`grouped`,children:(0,E.jsx)(j,{checked:I,disabled:A===`saving`,label:`I reviewed the governed ${M.join(`, `)} policy change${M.length===1?``:`s`} and authorize this exact revision.`,onChange:e=>w(e?P:null)})}):null,(0,E.jsxs)(u,{className:y.theme,padding:`default`,shape:`grouped`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(d,{as:`h2`,variant:`section-title`,children:`Theme`}),(0,E.jsx)(d,{as:`p`,tone:`secondary`,children:`This preference is browser-local and is never sent to the server.`})]}),(0,E.jsxs)(`select`,{"aria-label":`Theme`,className:y.control,onChange:e=>{let t=e.currentTarget.value;(t===`dark`||t===`light`||t===`system`)&&S.setTheme(t)},value:S.theme,children:[(0,E.jsx)(`option`,{value:`system`,children:`System`}),(0,E.jsx)(`option`,{value:`light`,children:`Light`}),(0,E.jsx)(`option`,{value:`dark`,children:`Dark`})]})]}),(0,E.jsx)(F,{canEdit:D&&A!==`saving`,draft:O,onChange:e=>{w(null),x.edit(e)}})]})};export{F as SettingsForm,I as WorkspaceSettingsPage};
|
|
2
|
-
//# sourceMappingURL=WorkspaceSettingsPage-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{t}from"./react-CZI7_Jkm.js";import{m as n}from"./lib-BzlsKFNV.js";import{t as r}from"./jsx-runtime-By8HlURe.js";import{n as i,t as a}from"./Dialog-xSrBk0Vv-ClGyDPlc.js";import{a as o,d as s,l as c,u as l}from"./index-C7_FDTU7.js";import{n as u,r as d}from"./primitives-nKxQGSsE-CJNmac__.js";import{Oa as f,nr as p}from"./agent-api-CeONl_8w.js";import{i as m,n as h,r as g}from"./client-DKS82kT_.js";import{browserWorkspaceSettingsTransport as _}from"./workspaceSettingsTransport-Dw2hueXv.js";var v=e(t(),1),y={page:`_page_1cf73_1`,heading:`_heading_1cf73_9`,theme:`_theme_1cf73_10`,save:`_save_1cf73_11`,actions:`_actions_1cf73_12`,notice:`_notice_1cf73_34`,governance:`_governance_1cf73_39`,sections:`_sections_1cf73_47`,section:`_section_1cf73_47`,sectionHeading:`_sectionHeading_1cf73_60`,fields:`_fields_1cf73_61`,field:`_field_1cf73_61`,checkbox:`_checkbox_1cf73_79`,control:`_control_1cf73_92`},b=f(`ConflictApiError`),x=f(`UnauthorizedApiError`),S=(e,t,n,r=Object.is)=>r(e,t)?n:t,C=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),w=(e,t,n)=>{let r={schemaVersion:1,agent:{allowedProviders:S(e.agent.allowedProviders,t.agent.allowedProviders,n.agent.allowedProviders,C),defaultModel:S(e.agent.defaultModel,t.agent.defaultModel,n.agent.defaultModel),defaultProvider:S(e.agent.defaultProvider,t.agent.defaultProvider,n.agent.defaultProvider),profilePolicy:S(e.agent.profilePolicy,t.agent.profilePolicy,n.agent.profilePolicy),toolPolicy:S(e.agent.toolPolicy,t.agent.toolPolicy,n.agent.toolPolicy)},inference:{enabled:S(e.inference.enabled,t.inference.enabled,n.inference.enabled),minimumConfidencePercent:S(e.inference.minimumConfidencePercent,t.inference.minimumConfidencePercent,n.inference.minimumConfidencePercent)},investigation:{consecutiveFailureThreshold:S(e.investigation.consecutiveFailureThreshold,t.investigation.consecutiveFailureThreshold,n.investigation.consecutiveFailureThreshold),mode:S(e.investigation.mode,t.investigation.mode,n.investigation.mode)},jira:{commentMode:S(e.jira.commentMode,t.jira.commentMode,n.jira.commentMode),includeControlCenterAttribution:S(e.jira.includeControlCenterAttribution,t.jira.includeControlCenterAttribution,n.jira.includeControlCenterAttribution)},pipeline:{maximumAttempts:S(e.pipeline.maximumAttempts,t.pipeline.maximumAttempts,n.pipeline.maximumAttempts),retryMode:S(e.pipeline.retryMode,t.pipeline.retryMode,n.pipeline.retryMode)},presentation:{defaultLanding:S(e.presentation.defaultLanding,t.presentation.defaultLanding,n.presentation.defaultLanding),density:S(e.presentation.density,t.presentation.density,n.presentation.density)},retention:{agentActivityDays:S(e.retention.agentActivityDays,t.retention.agentActivityDays,n.retention.agentActivityDays),auditDays:S(e.retention.auditDays,t.retention.auditDays,n.retention.auditDays),contentDays:S(e.retention.contentDays,t.retention.contentDays,n.retention.contentDays),evidenceDays:S(e.retention.evidenceDays,t.retention.evidenceDays,n.retention.evidenceDays),sandboxArtifactDays:S(e.retention.sandboxArtifactDays,t.retention.sandboxArtifactDays,n.retention.sandboxArtifactDays)},synchronization:{cadence:S(e.synchronization.cadence,t.synchronization.cadence,n.synchronization.cadence),intervalMinutes:S(e.synchronization.intervalMinutes,t.synchronization.intervalMinutes,n.synchronization.intervalMinutes),staleAfterMinutes:S(e.synchronization.staleAfterMinutes,t.synchronization.staleAfterMinutes,n.synchronization.staleAfterMinutes)}};return p(h)(r)?r:null},T=(e,t,n=_)=>{let[r,i]=(0,v.useState)({_tag:`idle`}),a=(0,v.useRef)(r),[s,c]=(0,v.useState)(0),l=(0,v.useRef)(null),u=(0,v.useCallback)(e=>{a.current=e,i(e)},[]);(0,v.useEffect)(()=>{if(l.current?.abort(),e===null){u({_tag:`idle`});return}let r=new AbortController;return l.current=r,u({_tag:`loading`}),n.load(r.signal).then(e=>{r.signal.aborted||(o(e),u({_tag:`ready`,draft:e.settings,pendingMutationId:null,server:e,status:`saved`}))},n=>{r.signal.aborted||(x(n)&&t(e),u({_tag:`failed`}))}),()=>r.abort()},[t,s,e,u,n]);let d=(0,v.useCallback)(e=>{let t=a.current;t._tag!==`ready`||t.status===`saving`||u({...t,draft:e,pendingMutationId:null,status:g(t.server.settings,e).length===0?`saved`:`dirty`})},[u]),f=(0,v.useCallback)(()=>{if(e===null)return;let r=a.current;if(r._tag!==`ready`||r.status!==`dirty`&&r.status!==`failed`)return;let i=new AbortController;l.current?.abort(),l.current=i;let s=r.server,c=r.draft,d=g(s.settings,c).filter(m);u({...r,status:`saving`}),(r.pendingMutationId===null?n.makeMutationId():Promise.resolve(r.pendingMutationId)).then(r=>{n.update({mutationId:r,expectedRevision:s.revision,settings:c,acknowledgedGovernedSections:d},i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`ready`,draft:e.settings,pendingMutationId:null,server:e,status:`saved`}))},a=>{if(!i.signal.aborted){if(x(a)){t(e),u({_tag:`failed`});return}if(!b(a)){u({_tag:`ready`,draft:c,pendingMutationId:r,server:s,status:`failed`});return}n.load(i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`conflict`,base:s,candidate:c,latest:e,reapplyFailed:!1}))},n=>{if(!i.signal.aborted){if(x(n)){t(e),u({_tag:`failed`});return}u({_tag:`conflict-recovery-failed`,base:s,candidate:c})}})}})},()=>{i.signal.aborted||u({_tag:`ready`,draft:c,pendingMutationId:null,server:s,status:`failed`})})},[t,e,u,n]);return{discardConflict:(0,v.useCallback)(()=>{let e=a.current;e._tag===`conflict`&&u({_tag:`ready`,draft:e.latest.settings,pendingMutationId:null,server:e.latest,status:`saved`})},[u]),edit:d,reapplyConflict:(0,v.useCallback)(()=>{let e=a.current;if(e._tag!==`conflict`)return;let t=w(e.base.settings,e.candidate,e.latest.settings);if(t===null){u({...e,reapplyFailed:!0});return}u({_tag:`ready`,draft:t,pendingMutationId:null,server:e.latest,status:g(e.latest.settings,t).length===0?`saved`:`dirty`})},[u]),retry:()=>c(e=>e+1),retryConflict:(0,v.useCallback)(()=>{let r=a.current;if(r._tag!==`conflict-recovery-failed`)return;let i=new AbortController;l.current?.abort(),l.current=i;let{base:s,candidate:c}=r;u({_tag:`conflict-recovery-loading`,base:s,candidate:c}),n.load(i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`conflict`,base:s,candidate:c,latest:e,reapplyFailed:!1}))},n=>{if(!i.signal.aborted){if(e!==null&&x(n)){t(e),u({_tag:`failed`});return}u({_tag:`conflict-recovery-failed`,base:s,candidate:c})}})},[t,e,u,n]),save:f,state:r}},E=r(),D=(e,t)=>{let n=Number.parseInt(e.currentTarget.value,10);return Number.isNaN(n)?t:n},O=e=>[...new Set(e.split(`,`).map(e=>e.trim().toLowerCase()).filter(e=>e.length>0))].sort(),k=({children:e,description:t,title:n})=>(0,E.jsxs)(u,{className:y.section,padding:`default`,shape:`grouped`,children:[(0,E.jsxs)(`div`,{className:y.sectionHeading,children:[(0,E.jsx)(d,{as:`h2`,variant:`section-title`,children:n}),(0,E.jsx)(d,{as:`p`,tone:`secondary`,children:t})]}),(0,E.jsx)(`div`,{className:y.fields,children:e})]}),A=({children:e,controlId:t,error:n,hint:r,label:i})=>(0,E.jsxs)(`label`,{className:y.field,htmlFor:t,children:[(0,E.jsx)(`span`,{children:i}),e,r===void 0?null:(0,E.jsx)(`small`,{children:r}),n===void 0?null:(0,E.jsx)(`small`,{id:t===void 0?void 0:`${t}-error`,role:`alert`,children:n})]}),j=({checked:e,disabled:t,label:n,onChange:r})=>(0,E.jsxs)(`label`,{className:y.checkbox,children:[(0,E.jsx)(`input`,{checked:e,disabled:t,onChange:e=>r(e.currentTarget.checked),type:`checkbox`}),(0,E.jsx)(`span`,{children:n})]}),M=({disabled:e,label:t,onChange:n,options:r,value:i})=>(0,E.jsx)(A,{label:t,children:(0,E.jsx)(`select`,{className:y.control,disabled:e,onChange:e=>{let t=r.find(([t])=>t===e.currentTarget.value);t!==void 0&&n(t[0])},value:i,children:r.map(([e,t])=>(0,E.jsx)(`option`,{value:e,children:t},e))})}),N=[[`evidenceDays`,`Evidence (days)`,3650],[`contentDays`,`Content (days)`,3650],[`auditDays`,`Audit history (days)`,3650],[`agentActivityDays`,`Agent activity (days)`,365],[`sandboxArtifactDays`,`Sandbox artifacts (days)`,30]],P=({disabled:e,error:t,label:n,maximum:r,minimum:i,onChange:a,value:o})=>{let s=(0,v.useId)(),c=t??(!Number.isInteger(o)||o<i||o>r?`${n} must be a whole number from ${String(i)} to ${String(r)}.`:void 0);return(0,E.jsx)(A,{controlId:s,...c===void 0?{}:{error:c},label:n,children:(0,E.jsx)(`input`,{"aria-describedby":c===void 0?void 0:`${s}-error`,"aria-invalid":c!==void 0||void 0,className:y.control,disabled:e,id:s,max:r,min:i,onChange:e=>a(D(e,o)),type:`number`,value:o})})},F=({canEdit:e,draft:t,onChange:n})=>{let r=!e,i=t.agent.allowedProviders.join(`, `),[a,o]=(0,v.useState)(i),s=(0,v.useRef)(i),c=(0,v.useRef)(!1),l=(e,r)=>n({...t,[e]:r}),u=e=>{let n=O(e);s.current=n.join(`, `),l(`agent`,{...t.agent,allowedProviders:n,defaultProvider:t.agent.defaultProvider!==null&&n.includes(t.agent.defaultProvider)?t.agent.defaultProvider:null,defaultModel:t.agent.defaultProvider!==null&&n.includes(t.agent.defaultProvider)?t.agent.defaultModel:null})};return(0,v.useEffect)(()=>{i!==s.current&&o(i),s.current=i},[i]),(0,E.jsxs)(`div`,{className:y.sections,children:[(0,E.jsxs)(k,{description:`Controls whether inferred delivery relationships are proposed and the confidence floor.`,title:`Inference`,children:[(0,E.jsx)(j,{checked:t.inference.enabled,disabled:r,label:`Enable relationship inference`,onChange:e=>l(`inference`,{...t.inference,enabled:e})}),(0,E.jsx)(P,{disabled:r,label:`Minimum confidence (%)`,maximum:100,minimum:0,onChange:e=>l(`inference`,{...t.inference,minimumConfidencePercent:e}),value:t.inference.minimumConfidencePercent})]}),(0,E.jsxs)(k,{description:`Records the intended synchronization cadence; Sync now remains the active execution path. Also sets the age at which source data is stale.`,title:`Synchronization`,children:[(0,E.jsx)(M,{disabled:r,label:`Cadence`,onChange:e=>l(`synchronization`,{...t.synchronization,cadence:e,intervalMinutes:e===`manual`?null:t.synchronization.intervalMinutes??60}),options:[[`manual`,`Manual`],[`interval`,`Scheduled interval`]],value:t.synchronization.cadence}),t.synchronization.intervalMinutes===null?null:(0,E.jsx)(P,{disabled:r,label:`Interval (minutes)`,maximum:10080,minimum:5,onChange:e=>l(`synchronization`,{...t.synchronization,intervalMinutes:e}),value:t.synchronization.intervalMinutes}),(0,E.jsx)(P,{disabled:r,label:`Stale after (minutes)`,maximum:43200,minimum:5,onChange:e=>l(`synchronization`,{...t.synchronization,staleAfterMinutes:e}),value:t.synchronization.staleAfterMinutes})]}),(0,E.jsx)(k,{description:`Governed lifecycle policy. Evidence expiry applies to new materialization; bounded final-class sweeps run through lifecycle operations.`,title:`Retention`,children:N.map(([e,n,i])=>(0,v.createElement)(P,{disabled:r,...(()=>{let n=(e===`evidenceDays`||e===`auditDays`)&&t.retention.auditDays<t.retention.evidenceDays?`Audit retention must be at least as long as evidence retention.`:(e===`agentActivityDays`||e===`sandboxArtifactDays`)&&t.retention.agentActivityDays<t.retention.sandboxArtifactDays?`Agent activity retention must be at least as long as sandbox artifact retention.`:void 0;return n===void 0?{}:{error:n}})(),key:e,label:n,maximum:i,minimum:1,onChange:n=>l(`retention`,{...t.retention,[e]:n}),value:t.retention[e]}))}),(0,E.jsxs)(k,{description:`Records the threshold for investigation automation; investigation creation currently remains manual.`,title:`Investigation`,children:[(0,E.jsx)(M,{disabled:r,label:`Mode`,onChange:e=>l(`investigation`,{...t.investigation,mode:e}),options:[[`manual`,`Manual`],[`automatic`,`Automatic`]],value:t.investigation.mode}),(0,E.jsx)(P,{disabled:r,label:`Consecutive failure threshold`,maximum:20,minimum:1,onChange:e=>l(`investigation`,{...t.investigation,consecutiveFailureThreshold:e}),value:t.investigation.consecutiveFailureThreshold})]}),(0,E.jsxs)(k,{description:`Governed publishing defaults. Credentials and tokens never belong in workspace settings.`,title:`Jira`,children:[(0,E.jsx)(M,{disabled:r,label:`Comment publishing`,onChange:e=>l(`jira`,{...t.jira,commentMode:e}),options:[[`manual-only`,`Manual only`],[`confirm-before-publish`,`Confirm before publishing`]],value:t.jira.commentMode}),(0,E.jsx)(j,{checked:t.jira.includeControlCenterAttribution,disabled:r,label:`Include Control Center attribution`,onChange:e=>l(`jira`,{...t.jira,includeControlCenterAttribution:e})})]}),(0,E.jsxs)(k,{description:`Governed retry defaults for pipeline operations.`,title:`Pipeline`,children:[(0,E.jsx)(M,{disabled:r,label:`Retry behavior`,onChange:e=>l(`pipeline`,{...t.pipeline,retryMode:e}),options:[[`manual-only`,`Manual only`],[`confirm-before-retry`,`Confirm before retry`]],value:t.pipeline.retryMode}),(0,E.jsx)(P,{disabled:r,label:`Maximum attempts`,maximum:10,minimum:1,onChange:e=>l(`pipeline`,{...t.pipeline,maximumAttempts:e}),value:t.pipeline.maximumAttempts})]}),(0,E.jsxs)(k,{description:`Governed provider and sandbox policy. Provider identifiers are names only, never secrets.`,title:`Agent`,children:[(0,E.jsx)(A,{hint:`Comma-separated lowercase identifiers; saved in canonical order.`,label:`Allowed providers`,children:(0,E.jsx)(`input`,{className:y.control,disabled:r,onBlur:()=>o(i),onCompositionEnd:e=>{c.current=!1,u(e.currentTarget.value)},onCompositionStart:()=>{c.current=!0},onChange:e=>{let t=e.currentTarget.value;o(t),c.current||u(t)},type:`text`,value:a})}),(0,E.jsx)(A,{label:`Default provider`,children:(0,E.jsx)(`input`,{className:y.control,disabled:r,list:`allowed-agent-providers`,onChange:e=>{let n=e.currentTarget.value.trim().toLowerCase()||null;l(`agent`,{...t.agent,defaultProvider:n,defaultModel:n===null?null:t.agent.defaultModel})},type:`text`,value:t.agent.defaultProvider??``})}),(0,E.jsx)(`datalist`,{id:`allowed-agent-providers`,children:t.agent.allowedProviders.map(e=>(0,E.jsx)(`option`,{value:e},e))}),(0,E.jsx)(A,{label:`Default model`,children:(0,E.jsx)(`input`,{className:y.control,disabled:r||t.agent.defaultProvider===null,onChange:e=>l(`agent`,{...t.agent,defaultModel:e.currentTarget.value.trim()||null}),type:`text`,value:t.agent.defaultModel??``})}),(0,E.jsx)(M,{disabled:r,label:`Tool policy`,onChange:e=>l(`agent`,{...t.agent,toolPolicy:e}),options:[[`read-only`,`Read only`],[`review-sandbox`,`Review sandbox`]],value:t.agent.toolPolicy}),(0,E.jsx)(M,{disabled:r,label:`Profile policy`,onChange:e=>l(`agent`,{...t.agent,profilePolicy:e}),options:[[`isolated`,`Isolated`],[`local-profile`,`Local profile`]],value:t.agent.profilePolicy})]}),(0,E.jsxs)(k,{description:`Workspace presentation defaults shared by collaborators.`,title:`Presentation`,children:[(0,E.jsx)(M,{disabled:r,label:`Density`,onChange:e=>l(`presentation`,{...t.presentation,density:e}),options:[[`comfortable`,`Comfortable`],[`compact`,`Compact`]],value:t.presentation.density}),(0,E.jsx)(M,{disabled:r,label:`Default landing`,onChange:e=>l(`presentation`,{...t.presentation,defaultLanding:e}),options:[[`overview`,`Overview`],[`active-work`,`Active work`]],value:t.presentation.defaultLanding})]})]})},I=({transport:e=_}={})=>{let t=s(),r=n().workspaceId,o=t.state._tag===`authenticated`||t.state._tag===`storage-unavailable`?t.state.session:null,f=o===null||r===o.workspaceId,b=f?l(t.state):null,x=T(b,t.invalidateSession,e),S=c(),[C,w]=(0,v.useState)(null),D=t.state._tag===`authenticated`&&o?.permission===`workspace-owner`;if(!f)return(0,E.jsx)(i,{description:`This route does not match the workspace authorized for the current browser session.`,title:`Workspace not found`,tone:`critical`});if(b===null&&t.state._tag!==`checking`){let e=t.state._tag===`anonymous`;return(0,E.jsx)(i,{description:e?`Sign in to inspect the settings authorized for this workspace.`:`The current browser session cannot read workspace settings.`,title:e?`Authentication required`:`Settings unavailable`,tone:e?`caution`:`critical`})}if(x.state._tag===`idle`||x.state._tag===`loading`)return(0,E.jsx)(i,{title:`Loading workspace settings`});if(x.state._tag===`failed`)return(0,E.jsx)(i,{action:(0,E.jsx)(a,{onClick:x.retry,children:`Retry`}),description:`The current settings document could not be loaded.`,title:`Settings unavailable`,tone:`critical`});if(x.state._tag===`conflict-recovery-failed`)return(0,E.jsx)(i,{action:(0,E.jsx)(a,{onClick:x.retryConflict,children:`Retry latest revision`}),description:`Your unsaved draft is retained, but the latest server revision could not be loaded.`,title:`Conflict recovery interrupted`,tone:`critical`});if(x.state._tag===`conflict-recovery-loading`)return(0,E.jsx)(i,{description:`Your unsaved draft is retained while the latest server revision is loaded.`,title:`Retrying conflict recovery`});if(x.state._tag===`conflict`)return(0,E.jsx)(`div`,{className:y.page,children:(0,E.jsx)(i,{action:(0,E.jsxs)(`div`,{className:y.actions,children:[(0,E.jsx)(a,{onClick:x.discardConflict,children:`Use latest`}),x.state.reapplyFailed?null:(0,E.jsx)(a,{onClick:x.reapplyConflict,variant:`primary`,children:`Reapply my changes`})]}),description:x.state.reapplyFailed?`Your changed fields cannot be combined safely with the latest settings. Use the latest document, then re-enter and review your changes.`:`Another session saved revision ${String(x.state.latest.revision)}. Choose the latest document or reapply only the fields you changed, then review and save.`,title:x.state.reapplyFailed?`Settings conflict needs manual recovery`:`Settings changed in another session`,tone:`caution`})});let{draft:O,server:k,status:A}=x.state,M=g(k.settings,O).filter(m),N=M.length>0,P=N?JSON.stringify([k.revision,...M.map(e=>[e,O[e]])]):null,I=P!==null&&C===P,L=p(h)(O),R=O.agent.profilePolicy===`local-profile`;return(0,E.jsxs)(`div`,{className:y.page,children:[(0,E.jsxs)(`header`,{className:y.heading,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(d,{as:`h1`,variant:`page-title`,children:`Workspace settings`}),(0,E.jsxs)(d,{as:`p`,tone:`secondary`,children:[`Revision `,k.revision,`. Changes are protected against stale writes and attributable to the current session.`]})]}),(0,E.jsxs)(`div`,{className:y.save,children:[(0,E.jsx)(`span`,{"aria-live":`polite`,children:A===`saving`?`Saving…`:A===`failed`?`Save failed — retry when ready`:A===`dirty`?`Unsaved changes`:`Saved`}),(0,E.jsx)(a,{disabled:!D||A!==`dirty`&&A!==`failed`||!L||R||N&&!I,loading:A===`saving`,onClick:x.save,variant:`primary`,children:`Save settings`})]})]}),D?null:(0,E.jsx)(d,{as:`p`,className:y.notice,tone:`secondary`,children:o?.permission===`workspace-approver`?`Approvers can inspect settings. A workspace owner must save changes.`:`A workspace-owner session with mutation storage is required to change settings.`}),D&&!L?(0,E.jsx)(d,{as:`p`,className:y.notice,tone:`secondary`,children:`Correct the highlighted bounds and policy relationships before saving. Audit retention must cover evidence, sandbox artifacts must expire before agent activity, and default agent providers must be allowed.`}):null,D&&R?(0,E.jsx)(d,{as:`p`,className:y.notice,tone:`secondary`,children:`Local profile is unavailable: no installed CLI capability generation proves that hooks, plugins, MCP servers, browser control, and extra writable roots are disabled. Compared with isolated mode, those surfaces would be added and must be verified before this governed policy can be saved.`}):null,D&&N?(0,E.jsx)(u,{className:y.governance,padding:`default`,shape:`grouped`,children:(0,E.jsx)(j,{checked:I,disabled:A===`saving`,label:`I reviewed the governed ${M.join(`, `)} policy change${M.length===1?``:`s`} and authorize this exact revision.`,onChange:e=>w(e?P:null)})}):null,(0,E.jsxs)(u,{className:y.theme,padding:`default`,shape:`grouped`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(d,{as:`h2`,variant:`section-title`,children:`Theme`}),(0,E.jsx)(d,{as:`p`,tone:`secondary`,children:`This preference is browser-local and is never sent to the server.`})]}),(0,E.jsxs)(`select`,{"aria-label":`Theme`,className:y.control,onChange:e=>{let t=e.currentTarget.value;(t===`dark`||t===`light`||t===`system`)&&S.setTheme(t)},value:S.theme,children:[(0,E.jsx)(`option`,{value:`system`,children:`System`}),(0,E.jsx)(`option`,{value:`light`,children:`Light`}),(0,E.jsx)(`option`,{value:`dark`,children:`Dark`})]})]}),(0,E.jsx)(F,{canEdit:D&&A!==`saving`,draft:O,onChange:e=>{w(null),x.edit(e)}})]})};export{F as SettingsForm,I as WorkspaceSettingsPage};
|
|
2
|
+
//# sourceMappingURL=WorkspaceSettingsPage-DyoGiGJG.js.map
|