@knpkv/control-center 0.7.0 → 0.8.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.
Files changed (162) hide show
  1. package/dist/client/.vite/manifest.json +312 -255
  2. package/dist/client/assets/ActiveWorkPage-C6lIQfjL.js +2 -0
  3. package/dist/client/assets/{ActiveWorkPage-BsaIr8ah.js.map → ActiveWorkPage-C6lIQfjL.js.map} +1 -1
  4. package/dist/client/assets/AgentPage-DqB5BilE.js +6 -0
  5. package/dist/client/assets/{AgentPage-Cybynsnc.js.map → AgentPage-DqB5BilE.js.map} +1 -1
  6. package/dist/client/assets/{AtlassianOAuthCallbackPage-Du3pHuS9.js → AtlassianOAuthCallbackPage-DzTO6SqN.js} +2 -2
  7. package/dist/client/assets/{AtlassianOAuthCallbackPage-Du3pHuS9.js.map → AtlassianOAuthCallbackPage-DzTO6SqN.js.map} +1 -1
  8. package/dist/client/assets/AuthorizedSharePage-V_E5giT7.js +2 -0
  9. package/dist/client/assets/{AuthorizedSharePage-tfTdXNjt.js.map → AuthorizedSharePage-V_E5giT7.js.map} +1 -1
  10. package/dist/client/assets/BrowserCrypto-CoBR2WBd.js +2 -0
  11. package/dist/client/assets/{BrowserCrypto-DVxU0-Oc.js.map → BrowserCrypto-CoBR2WBd.js.map} +1 -1
  12. package/dist/client/assets/BrowserSessionHydrator-CEypgMkR.js +2 -0
  13. package/dist/client/assets/{BrowserSessionHydrator-CvtvZstV.js.map → BrowserSessionHydrator-CEypgMkR.js.map} +1 -1
  14. package/dist/client/assets/CommandSearch-syQMt_rx.js +2 -0
  15. package/dist/client/assets/{CommandSearch-Bf_oW_kD.js.map → CommandSearch-syQMt_rx.js.map} +1 -1
  16. package/dist/client/assets/Dialog-DSwimdwG-BeHnBpPp.js +42 -0
  17. package/dist/client/assets/Dialog-DSwimdwG-BeHnBpPp.js.map +1 -0
  18. package/dist/client/assets/Domain-cJ5aJFpE.js +2 -0
  19. package/dist/client/assets/Domain-cJ5aJFpE.js.map +1 -0
  20. package/dist/client/assets/ItemsPage-Cr3--iJc.js +2 -0
  21. package/dist/client/assets/{ItemsPage-BmWEHinz.js.map → ItemsPage-Cr3--iJc.js.map} +1 -1
  22. package/dist/client/assets/OpenPullRequestPage-BYoRmtui.js +2 -0
  23. package/dist/client/assets/OpenPullRequestPage-BYoRmtui.js.map +1 -0
  24. package/dist/client/assets/{Pages-BmZj4KzS.js → Pages-DrDuXLFH.js} +2 -2
  25. package/dist/client/assets/{Pages-BmZj4KzS.js.map → Pages-DrDuXLFH.js.map} +1 -1
  26. package/dist/client/assets/PairPage-ByOBKuBB.js +2 -0
  27. package/dist/client/assets/{PairPage-CLLUweYZ.js.map → PairPage-ByOBKuBB.js.map} +1 -1
  28. package/dist/client/assets/PortalProvider-CN_81Fy3-D_japesx.js +2 -0
  29. package/dist/client/assets/{PortalProvider-BpgZwSpw-nEH0TqWT.js.map → PortalProvider-CN_81Fy3-D_japesx.js.map} +1 -1
  30. package/dist/client/assets/PortfolioOverview-BacOXO-c.js +2 -0
  31. package/dist/client/assets/{PortfolioOverview-BBKSc-yI.js.map → PortfolioOverview-BacOXO-c.js.map} +1 -1
  32. package/dist/client/assets/{PullRequestReviewPanel-Boi0A6pq.js → PullRequestReviewPanel-DwVYuZ8Q.js} +5 -5
  33. package/dist/client/assets/{PullRequestReviewPanel-Boi0A6pq.js.map → PullRequestReviewPanel-DwVYuZ8Q.js.map} +1 -1
  34. package/dist/client/assets/ReleaseRoute-C-MfQKnL.js +2 -0
  35. package/dist/client/assets/{ReleaseRoute-D4CttCjC.js.map → ReleaseRoute-C-MfQKnL.js.map} +1 -1
  36. package/dist/client/assets/ReleaseWorkset-MV3I0HCi.js +2 -0
  37. package/dist/client/assets/{ReleaseWorkset-Dt-ArwsN.js.map → ReleaseWorkset-MV3I0HCi.js.map} +1 -1
  38. package/dist/client/assets/ReviewSuggestionPublicationSurface-BZIa-Vvc.js +2 -0
  39. package/dist/client/assets/{ReviewSuggestionPublicationSurface-N9Qwdh2n.js.map → ReviewSuggestionPublicationSurface-BZIa-Vvc.js.map} +1 -1
  40. package/dist/client/assets/ServicesPage-BjeCOlsh.js +2 -0
  41. package/dist/client/assets/{ServicesPage-D0ygZTFD.js.map → ServicesPage-BjeCOlsh.js.map} +1 -1
  42. package/dist/client/assets/TimelinePage-Ccnp6Mmg.js +2 -0
  43. package/dist/client/assets/{TimelinePage-Bb2o9DGU.js.map → TimelinePage-Ccnp6Mmg.js.map} +1 -1
  44. package/dist/client/assets/{WorkspaceEntityLink-Cw675wTN.js → WorkspaceEntityLink-D3TXDcD0.js} +2 -2
  45. package/dist/client/assets/{WorkspaceEntityLink-Cw675wTN.js.map → WorkspaceEntityLink-D3TXDcD0.js.map} +1 -1
  46. package/dist/client/assets/WorkspaceEntityRoute-uUK6vwM_.js +14 -0
  47. package/dist/client/assets/WorkspaceEntityRoute-uUK6vwM_.js.map +1 -0
  48. package/dist/client/assets/WorkspaceHomeLink-D5SdEgJJ.js +2 -0
  49. package/dist/client/assets/{WorkspaceHomeLink-FGslxXCu.js.map → WorkspaceHomeLink-D5SdEgJJ.js.map} +1 -1
  50. package/dist/client/assets/WorkspacePullRequestDetails-CKedGIT8.js +3 -0
  51. package/dist/client/assets/{WorkspacePullRequestDetails-Dxg8argO.js.map → WorkspacePullRequestDetails-CKedGIT8.js.map} +1 -1
  52. package/dist/client/assets/{WorkspaceReleaseLayout-BvEiZJEb.js → WorkspaceReleaseLayout-Bdvl0q99.js} +2 -2
  53. package/dist/client/assets/{WorkspaceReleaseLayout-BvEiZJEb.js.map → WorkspaceReleaseLayout-Bdvl0q99.js.map} +1 -1
  54. package/dist/client/assets/{WorkspaceRichText-CocmKQ4T.js → WorkspaceRichText-Beh64wsV.js} +2 -2
  55. package/dist/client/assets/{WorkspaceRichText-CocmKQ4T.js.map → WorkspaceRichText-Beh64wsV.js.map} +1 -1
  56. package/dist/client/assets/WorkspaceSettingsPage-BxFq65Vf.js +2 -0
  57. package/dist/client/assets/{WorkspaceSettingsPage-iZhUs-pg.js.map → WorkspaceSettingsPage-BxFq65Vf.js.map} +1 -1
  58. package/dist/client/assets/{agent-api-CzdQFCcD.js → agent-api-CUWP1qs8.js} +2 -2
  59. package/dist/client/assets/{agent-api-CzdQFCcD.js.map → agent-api-CUWP1qs8.js.map} +1 -1
  60. package/dist/client/assets/{atlassianOAuthSetupIntentStorage-BxsxmjSm.js → atlassianOAuthSetupIntentStorage-Cy1Gw639.js} +2 -2
  61. package/dist/client/assets/{atlassianOAuthSetupIntentStorage-BxsxmjSm.js.map → atlassianOAuthSetupIntentStorage-Cy1Gw639.js.map} +1 -1
  62. package/dist/client/assets/authenticatedMutationClient-Bc_-Jpbo.js +2 -0
  63. package/dist/client/assets/{authenticatedMutationClient-DUqEcJHu.js.map → authenticatedMutationClient-Bc_-Jpbo.js.map} +1 -1
  64. package/dist/client/assets/authorizedShareTransport-kkT3Jf6q.js +2 -0
  65. package/dist/client/assets/{authorizedShareTransport-7YCNH9l3.js.map → authorizedShareTransport-kkT3Jf6q.js.map} +1 -1
  66. package/dist/client/assets/client-D3WRV6yl.js +5 -0
  67. package/dist/client/assets/client-D3WRV6yl.js.map +1 -0
  68. package/dist/client/assets/{confluenceTasks-D9yrB-oV.js → confluenceTasks-By7BV0WN.js} +2 -2
  69. package/dist/client/assets/{confluenceTasks-D9yrB-oV.js.map → confluenceTasks-By7BV0WN.js.map} +1 -1
  70. package/dist/client/assets/connectionTestTransport-CRq7l9X0.js +2 -0
  71. package/dist/client/assets/{connectionTestTransport-D8tiZ4ym.js.map → connectionTestTransport-CRq7l9X0.js.map} +1 -1
  72. package/dist/client/assets/controlCenterRelayDock-D7375HPG.js +3 -0
  73. package/dist/client/assets/controlCenterRelayDock-D7375HPG.js.map +1 -0
  74. package/dist/client/assets/controlCenterRelayDockChrome-B7jSUI3t.js +3 -0
  75. package/dist/client/assets/controlCenterRelayDockChrome-B7jSUI3t.js.map +1 -0
  76. package/dist/client/assets/index-BVikncBH.js +11 -0
  77. package/dist/client/assets/index-BVikncBH.js.map +1 -0
  78. package/dist/client/assets/index-tjRpNCt_.css +1 -0
  79. package/dist/client/assets/openPullRequest-BMlmibLP.js +2 -0
  80. package/dist/client/assets/openPullRequest-BMlmibLP.js.map +1 -0
  81. package/dist/client/assets/patterns-DAeEdyxU.js +2 -0
  82. package/dist/client/assets/patterns-DAeEdyxU.js.map +1 -0
  83. package/dist/client/assets/{presentPortfolio-c8-wbodG.js → presentPortfolio-DVP-zqTg.js} +2 -2
  84. package/dist/client/assets/{presentPortfolio-c8-wbodG.js.map → presentPortfolio-DVP-zqTg.js.map} +1 -1
  85. package/dist/client/assets/{presentWorkspaceItems-DfhyQeSY.js → presentWorkspaceItems-BY8bmqjF.js} +2 -2
  86. package/dist/client/assets/{presentWorkspaceItems-DfhyQeSY.js.map → presentWorkspaceItems-BY8bmqjF.js.map} +1 -1
  87. package/dist/client/assets/primitives-DYGtIZqB-r-Glkv2i.js +2 -0
  88. package/dist/client/assets/primitives-DYGtIZqB-r-Glkv2i.js.map +1 -0
  89. package/dist/client/assets/pullRequestReviewFailures-CCNxSXP6.js +2 -0
  90. package/dist/client/assets/{pullRequestReviewFailures-QvtS729d.js.map → pullRequestReviewFailures-CCNxSXP6.js.map} +1 -1
  91. package/dist/client/assets/pullRequestReviewThreadReplay-eI3Y4i6s.js +2 -0
  92. package/dist/client/assets/{pullRequestReviewThreadReplay-CpPdYxQE.js.map → pullRequestReviewThreadReplay-eI3Y4i6s.js.map} +1 -1
  93. package/dist/client/assets/{releaseAgentTransport-BCQDYqZt.js → releaseAgentTransport-CJjWwE8y.js} +2 -2
  94. package/dist/client/assets/{releaseAgentTransport-BCQDYqZt.js.map → releaseAgentTransport-CJjWwE8y.js.map} +1 -1
  95. package/dist/client/assets/releaseRoutes-h4FVwFvJ.js +2 -0
  96. package/dist/client/assets/{releaseRoutes-CSP_eBj6.js.map → releaseRoutes-h4FVwFvJ.js.map} +1 -1
  97. package/dist/client/assets/{serviceOnboarding-B6v5VXTG.js → serviceOnboarding-F9Lj6a7y.js} +2 -2
  98. package/dist/client/assets/{serviceOnboarding-B6v5VXTG.js.map → serviceOnboarding-F9Lj6a7y.js.map} +1 -1
  99. package/dist/client/assets/useWorkspaceDefaultLanding-DMWfrZfF.js +3 -0
  100. package/dist/client/assets/{useWorkspaceDefaultLanding-C3PRrLgk.js.map → useWorkspaceDefaultLanding-DMWfrZfF.js.map} +1 -1
  101. package/dist/client/assets/useWorkspaceItems-6KWfmFtx.js +2 -0
  102. package/dist/client/assets/{useWorkspaceItems-CHYpfLmL.js.map → useWorkspaceItems-6KWfmFtx.js.map} +1 -1
  103. package/dist/client/assets/{workspaceEntityRoutes-CFPO-iFw.js → workspaceEntityRoutes-BJ-SC0Jd.js} +2 -2
  104. package/dist/client/assets/{workspaceEntityRoutes-CFPO-iFw.js.map → workspaceEntityRoutes-BJ-SC0Jd.js.map} +1 -1
  105. package/dist/client/assets/{workspaceScrollCapture-DUj-_YMd.js → workspaceScrollCapture-CwBIBHg8.js} +2 -2
  106. package/dist/client/assets/{workspaceScrollCapture-DUj-_YMd.js.map → workspaceScrollCapture-CwBIBHg8.js.map} +1 -1
  107. package/dist/client/assets/workspaceSettingsTransport-BwRQteEH.js +2 -0
  108. package/dist/client/assets/{workspaceSettingsTransport-Kq7lfPsC.js.map → workspaceSettingsTransport-BwRQteEH.js.map} +1 -1
  109. package/dist/client/build-graph.json +63 -0
  110. package/dist/client/index.html +3 -3
  111. package/dist/server/api/index.js +1 -1
  112. package/dist/server/assets/{BindConfig-hNWrGfu2.js → BindConfig-D8aIjI_R.js} +2 -2
  113. package/dist/server/assets/{BindConfig-hNWrGfu2.js.map → BindConfig-D8aIjI_R.js.map} +1 -1
  114. package/dist/server/assets/{controlCenterApi-BcVWTP9F.js → controlCenterApi-WaKi6EUb.js} +2 -1
  115. package/dist/server/assets/controlCenterApi-WaKi6EUb.js.map +1 -0
  116. package/dist/server/index.js +1 -1
  117. package/dist/server/server/cli.js +1 -1
  118. package/dist/server/server/index.js +1 -1
  119. package/package.json +7 -6
  120. package/dist/client/assets/ActiveWorkPage-BsaIr8ah.js +0 -2
  121. package/dist/client/assets/AgentPage-Cybynsnc.js +0 -6
  122. package/dist/client/assets/AuthorizedSharePage-tfTdXNjt.js +0 -2
  123. package/dist/client/assets/BrowserCrypto-DVxU0-Oc.js +0 -2
  124. package/dist/client/assets/BrowserSessionHydrator-CvtvZstV.js +0 -2
  125. package/dist/client/assets/CommandSearch-Bf_oW_kD.js +0 -2
  126. package/dist/client/assets/Dialog-1WvU8GjA-C7r26HF0.js +0 -42
  127. package/dist/client/assets/Dialog-1WvU8GjA-C7r26HF0.js.map +0 -1
  128. package/dist/client/assets/ItemsPage-BmWEHinz.js +0 -2
  129. package/dist/client/assets/OpenPullRequestPage-DkCom6mf.js +0 -2
  130. package/dist/client/assets/OpenPullRequestPage-DkCom6mf.js.map +0 -1
  131. package/dist/client/assets/PairPage-CLLUweYZ.js +0 -2
  132. package/dist/client/assets/PortalProvider-BpgZwSpw-nEH0TqWT.js +0 -2
  133. package/dist/client/assets/PortfolioOverview-BBKSc-yI.js +0 -2
  134. package/dist/client/assets/ReleaseRoute-D4CttCjC.js +0 -2
  135. package/dist/client/assets/ReleaseWorkset-Dt-ArwsN.js +0 -2
  136. package/dist/client/assets/ReviewSuggestionPublicationSurface-N9Qwdh2n.js +0 -2
  137. package/dist/client/assets/ServicesPage-D0ygZTFD.js +0 -2
  138. package/dist/client/assets/TimelinePage-Bb2o9DGU.js +0 -2
  139. package/dist/client/assets/WorkspaceEntityRoute-rLRiaF8b.js +0 -14
  140. package/dist/client/assets/WorkspaceEntityRoute-rLRiaF8b.js.map +0 -1
  141. package/dist/client/assets/WorkspaceHomeLink-FGslxXCu.js +0 -2
  142. package/dist/client/assets/WorkspacePullRequestDetails-Dxg8argO.js +0 -3
  143. package/dist/client/assets/WorkspaceSettingsPage-iZhUs-pg.js +0 -2
  144. package/dist/client/assets/authenticatedMutationClient-DUqEcJHu.js +0 -2
  145. package/dist/client/assets/authorizedShareTransport-7YCNH9l3.js +0 -2
  146. package/dist/client/assets/client-D2F6HlDk.js +0 -5
  147. package/dist/client/assets/client-D2F6HlDk.js.map +0 -1
  148. package/dist/client/assets/connectionTestTransport-D8tiZ4ym.js +0 -2
  149. package/dist/client/assets/index-BWx9sNOT.js +0 -11
  150. package/dist/client/assets/index-BWx9sNOT.js.map +0 -1
  151. package/dist/client/assets/index-CIfiz7oF.css +0 -1
  152. package/dist/client/assets/patterns-CxMz8DKX-ByHwV03y.js +0 -2
  153. package/dist/client/assets/patterns-CxMz8DKX-ByHwV03y.js.map +0 -1
  154. package/dist/client/assets/primitives-CW89TsFB-BBLwFFPo.js +0 -2
  155. package/dist/client/assets/primitives-CW89TsFB-BBLwFFPo.js.map +0 -1
  156. package/dist/client/assets/pullRequestReviewFailures-QvtS729d.js +0 -2
  157. package/dist/client/assets/pullRequestReviewThreadReplay-CpPdYxQE.js +0 -2
  158. package/dist/client/assets/releaseRoutes-CSP_eBj6.js +0 -2
  159. package/dist/client/assets/useWorkspaceDefaultLanding-C3PRrLgk.js +0 -3
  160. package/dist/client/assets/useWorkspaceItems-CHYpfLmL.js +0 -2
  161. package/dist/client/assets/workspaceSettingsTransport-Kq7lfPsC.js +0 -2
  162. package/dist/server/assets/controlCenterApi-BcVWTP9F.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{l as e,r as t}from"./hooks-K-sIfGqH.js";import{s as n,t as r}from"./lib-6h955hh9.js";import{t as i}from"./jsx-runtime-NZYk81nU.js";import{g as a}from"./Dialog-DSwimdwG-BeHnBpPp.js";import{r as o,t as s}from"./releasePaths-XoI2BHX3.js";import{_ as c,o as l,v as u}from"./patterns-DAeEdyxU.js";import{n as d}from"./primitives-DYGtIZqB-r-Glkv2i.js";import{i as f,l as p,n as m}from"./releaseRoutes-h4FVwFvJ.js";import{portfolioSessionBoundaryPresentation as h}from"./PortfolioOverview-BacOXO-c.js";import{t as g}from"./ReleaseWorkset-MV3I0HCi.js";import{ReleaseAction as _,ReleaseAgentEntry as v,ReleaseEvidence as y,t as b}from"./ReleaseRoute-C-MfQKnL.js";var x={page:`_page_rorzd_1`,hero:`_hero_rorzd_2`,selectedRelease:`_selectedRelease_rorzd_3`,identity:`_identity_rorzd_4`,contextSection:`_contextSection_rorzd_5`,intro:`_intro_rorzd_28`,releaseSelector:`_releaseSelector_rorzd_32`,releaseChoice:`_releaseChoice_rorzd_40`,fullLink:`_fullLink_rorzd_90`},S=i(),C=e=>m(new URLSearchParams(e).get(`release`)),w=({releases:e,selected:t,stateForRelease:n,workspaceId:i})=>(0,S.jsx)(`nav`,{"aria-label":`Release decisions`,className:x.releaseSelector,children:e.map(e=>(0,S.jsxs)(r,{"aria-current":e.id===t.id?`page`:void 0,className:x.releaseChoice,"data-active":e.id===t.id?`true`:`false`,state:n(e),to:s(i,e.id),children:[(0,S.jsx)(`span`,{children:e.relay.codename}),(0,S.jsx)(`strong`,{children:e.release.verdict})]},e.id))}),T=()=>{let i=e(),m=t();if(i.controller.state._tag===`session`)return(0,S.jsx)(a,{...h(i.controller.state.reason)});if(i.controller.state._tag!==`ready`)return(0,S.jsx)(a,{description:`Control Center is loading the release portfolio before opening the decision queue.`,title:`Loading active work`});let T=i.controller.state.portfolio.releases;if(T.length===0)return(0,S.jsx)(a,{action:(0,S.jsx)(r,{to:`/w/${i.workspaceId}/overview`,children:`Return to overview`}),description:`Active work appears when a synchronized release needs a human decision.`,title:`No active release work`});let E=C(m.search);if(E===null){let e=T[0];if(e===void 0)throw Error(`unreachable empty release portfolio`);return(0,S.jsx)(n,{replace:!0,to:s(i.workspaceId,e.id)})}let D=T.find(({id:e})=>e===E);if(D===void 0)return(0,S.jsx)(a,{action:(0,S.jsx)(r,{to:s(i.workspaceId,T[0]?.id??E),children:`Open current work`}),description:`This release is not part of the current workspace snapshot.`,title:`Release work not found`});let O=p(m.state,i.workspaceId,D.id);return(0,S.jsxs)(`article`,{className:x.page,children:[(0,S.jsxs)(`header`,{className:x.hero,children:[(0,S.jsx)(d,{as:`p`,tone:`secondary`,variant:`label`,children:`Active work`}),(0,S.jsxs)(d,{as:`h1`,variant:`verdict`,children:[`Decisions,`,(0,S.jsx)(`br`,{}),`not tickets.`]}),(0,S.jsx)(d,{className:x.intro,tone:`secondary`,variant:`body-large`,children:`One place to review the relationship changes that decide whether a release can move.`})]}),(0,S.jsx)(w,{releases:T,selected:D,stateForRelease:e=>O.isStored?f(i.workspaceId,e.id,O.origin):void 0,workspaceId:i.workspaceId}),(0,S.jsxs)(`section`,{"aria-labelledby":`active-release-title`,className:x.selectedRelease,children:[(0,S.jsxs)(`div`,{className:x.identity,children:[(0,S.jsx)(u,{algorithm:D.relay.algorithm,codename:D.relay.codename,size:`hero`,symbolIndices:D.relay.symbolIndices}),(0,S.jsxs)(`div`,{children:[(0,S.jsx)(d,{as:`h2`,id:`active-release-title`,variant:`page-title`,children:D.serviceName}),(0,S.jsx)(r,{className:x.fullLink,state:m.state,to:o(i.workspaceId,D.id),children:`Open full release`})]})]}),(0,S.jsx)(c,{reason:D.readinessReason,tone:D.release.tone,verdict:D.release.verdict}),D.collaborators.length===0?null:(0,S.jsx)(l,{"aria-label":`${D.relay.codename} collaborators`,expanded:!0,limit:D.collaborators.length,onExpandedChange:()=>void 0,people:D.collaborators}),(0,S.jsx)(_,{release:D}),(0,S.jsxs)(`section`,{"aria-labelledby":`active-workset-title`,className:x.contextSection,children:[(0,S.jsx)(d,{as:`h3`,id:`active-workset-title`,variant:`section-title`,children:`Release work`}),(0,S.jsx)(g,{release:D,workspaceId:i.workspaceId})]}),(0,S.jsx)(b,{release:D}),(0,S.jsxs)(`section`,{"aria-labelledby":`active-evidence-title`,className:x.contextSection,children:[(0,S.jsx)(d,{as:`h3`,id:`active-evidence-title`,variant:`section-title`,children:`Evidence`}),(0,S.jsx)(y,{release:D})]}),(0,S.jsxs)(`section`,{"aria-labelledby":`active-agent-title`,className:x.contextSection,children:[(0,S.jsx)(d,{as:`h3`,id:`active-agent-title`,variant:`section-title`,children:`Release agent`}),(0,S.jsx)(v,{release:D})]})]})]})};export{T as ActiveWorkPage};
2
+ //# sourceMappingURL=ActiveWorkPage-C6lIQfjL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveWorkPage-BsaIr8ah.js","names":[],"sources":["../../../src/client/releases/ActiveWorkPage.module.css","../../../src/client/releases/ActiveWorkPage.tsx"],"sourcesContent":[".page,\n.hero,\n.selectedRelease,\n.identity,\n.contextSection {\n display: grid;\n}\n\n.page {\n gap: clamp(3rem, 8vw, 7rem);\n}\n\n.hero {\n gap: var(--rly-space-16);\n}\n\n.hero p,\n.hero h1 {\n margin: 0;\n}\n\n.hero h1 {\n max-inline-size: 10ch;\n letter-spacing: -0.07em;\n text-wrap: balance;\n}\n\n.intro {\n max-inline-size: 48rem;\n}\n\n.releaseSelector {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n overflow: hidden;\n border: 1px solid var(--rly-color-border-1);\n border-radius: var(--rly-radius-group);\n}\n\n.releaseChoice {\n display: grid;\n gap: var(--rly-space-8);\n min-block-size: 7rem;\n padding: var(--rly-space-20);\n color: var(--rly-color-text-2);\n text-decoration: none;\n}\n\n.releaseChoice + .releaseChoice {\n border-inline-start: 1px solid var(--rly-color-border-1);\n}\n\n.releaseChoice:nth-child(n + 4) {\n border-block-start: 1px solid var(--rly-color-border-1);\n}\n\n.releaseChoice[data-active=\"true\"] {\n background: var(--rly-color-action-background);\n color: var(--rly-color-action-foreground);\n}\n\n.releaseChoice:focus-visible {\n z-index: 1;\n outline: 2px solid var(--rly-color-focus);\n outline-offset: -2px;\n}\n\n.selectedRelease {\n gap: var(--rly-space-32);\n}\n\n.identity {\n grid-template-columns: auto 1fr;\n align-items: center;\n gap: var(--rly-space-20);\n}\n\n.identity h2 {\n margin: 0;\n}\n\n.contextSection {\n gap: var(--rly-space-20);\n}\n\n.contextSection h3 {\n margin: 0;\n}\n\n.fullLink {\n color: var(--rly-color-text-2);\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 text-underline-offset: var(--rly-space-2);\n}\n\n@media (max-width: 48rem) {\n .releaseSelector {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .releaseChoice:nth-child(n + 3) {\n border-block-start: 1px solid var(--rly-color-border-1);\n }\n\n .releaseChoice:nth-child(odd) {\n border-inline-start: 0;\n }\n}\n\n@media (max-width: 30rem) {\n .releaseSelector {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .releaseChoice + .releaseChoice {\n border-block-start: 1px solid var(--rly-color-border-1);\n border-inline-start: 0;\n }\n}\n","import { PeopleStrip, ReleaseRelay, Verdict } from \"@knpkv/rly/patterns\"\nimport { StatePanel, Text } from \"@knpkv/rly/primitives\"\nimport type { ReactElement } from \"react\"\nimport { Link, Navigate, useLocation, useOutletContext } from \"react-router\"\n\nimport { portfolioSessionBoundaryPresentation } from \"../portfolio/PortfolioOverview.js\"\nimport type { PortfolioReleasePresentation } from \"../portfolio/presentPortfolio.js\"\nimport type { WorkspaceReleaseOutletContext } from \"./WorkspaceReleaseLayout.js\"\nimport { RelationshipRepairPanel } from \"./RelationshipRepairPanel.js\"\nimport { ReleaseAction, ReleaseAgentEntry, ReleaseEvidence } from \"./ReleaseRoute.js\"\nimport { ReleaseWorkset } from \"./ReleaseWorkset.js\"\nimport { releaseActiveWorkPath, releaseFullPath } from \"./releasePaths.js\"\nimport {\n decodeReleaseRouteId,\n makeReleaseRouteState,\n resolveReleaseOrigin,\n type ReleaseRouteState\n} from \"./releaseRoutes.js\"\nimport styles from \"./ActiveWorkPage.module.css\"\n\nconst selectedReleaseId = (search: string): ReturnType<typeof decodeReleaseRouteId> =>\n decodeReleaseRouteId(new URLSearchParams(search).get(\"release\"))\n\nconst ReleaseSelector = ({\n releases,\n selected,\n stateForRelease,\n workspaceId\n}: {\n readonly releases: ReadonlyArray<PortfolioReleasePresentation>\n readonly selected: PortfolioReleasePresentation\n readonly stateForRelease: (release: PortfolioReleasePresentation) => ReleaseRouteState | undefined\n readonly workspaceId: WorkspaceReleaseOutletContext[\"workspaceId\"]\n}): ReactElement => (\n <nav aria-label=\"Release decisions\" className={styles.releaseSelector}>\n {releases.map((release) => (\n <Link\n aria-current={release.id === selected.id ? \"page\" : undefined}\n className={styles.releaseChoice}\n data-active={release.id === selected.id ? \"true\" : \"false\"}\n key={release.id}\n state={stateForRelease(release)}\n to={releaseActiveWorkPath(workspaceId, release.id)}\n >\n <span>{release.relay.codename}</span>\n <strong>{release.release.verdict}</strong>\n </Link>\n ))}\n </nav>\n)\n\n/** Render one durable human decision ledger as a workspace-level queue. */\nexport const ActiveWorkPage = (): ReactElement => {\n const context = useOutletContext<WorkspaceReleaseOutletContext>()\n const location = useLocation()\n if (context.controller.state._tag === \"session\") {\n return <StatePanel {...portfolioSessionBoundaryPresentation(context.controller.state.reason)} />\n }\n if (context.controller.state._tag !== \"ready\") {\n return (\n <StatePanel\n description=\"Control Center is loading the release portfolio before opening the decision queue.\"\n title=\"Loading active work\"\n />\n )\n }\n const releases = context.controller.state.portfolio.releases\n if (releases.length === 0) {\n return (\n <StatePanel\n action={<Link to={`/w/${context.workspaceId}/overview`}>Return to overview</Link>}\n description=\"Active work appears when a synchronized release needs a human decision.\"\n title=\"No active release work\"\n />\n )\n }\n const requestedId = selectedReleaseId(location.search)\n if (requestedId === null) {\n const first = releases[0]\n if (first === undefined) throw new Error(\"unreachable empty release portfolio\")\n return <Navigate replace to={releaseActiveWorkPath(context.workspaceId, first.id)} />\n }\n const selected = releases.find(({ id }) => id === requestedId)\n if (selected === undefined) {\n return (\n <StatePanel\n action={\n <Link to={releaseActiveWorkPath(context.workspaceId, releases[0]?.id ?? requestedId)}>Open current work</Link>\n }\n description=\"This release is not part of the current workspace snapshot.\"\n title=\"Release work not found\"\n />\n )\n }\n const resolvedOrigin = resolveReleaseOrigin(location.state, context.workspaceId, selected.id)\n const stateForRelease = (release: PortfolioReleasePresentation): ReleaseRouteState | undefined =>\n resolvedOrigin.isStored ? makeReleaseRouteState(context.workspaceId, release.id, resolvedOrigin.origin) : undefined\n\n return (\n <article className={styles.page}>\n <header className={styles.hero}>\n <Text as=\"p\" tone=\"secondary\" variant=\"label\">\n Active work\n </Text>\n <Text as=\"h1\" variant=\"verdict\">\n Decisions,\n <br />\n not tickets.\n </Text>\n <Text className={styles.intro} tone=\"secondary\" variant=\"body-large\">\n One place to review the relationship changes that decide whether a release can move.\n </Text>\n </header>\n\n <ReleaseSelector\n releases={releases}\n selected={selected}\n stateForRelease={stateForRelease}\n workspaceId={context.workspaceId}\n />\n\n <section aria-labelledby=\"active-release-title\" className={styles.selectedRelease}>\n <div className={styles.identity}>\n <ReleaseRelay\n algorithm={selected.relay.algorithm}\n codename={selected.relay.codename}\n size=\"hero\"\n symbolIndices={selected.relay.symbolIndices}\n />\n <div>\n <Text as=\"h2\" id=\"active-release-title\" variant=\"page-title\">\n {selected.serviceName}\n </Text>\n <Link\n className={styles.fullLink}\n state={location.state}\n to={releaseFullPath(context.workspaceId, selected.id)}\n >\n Open full release\n </Link>\n </div>\n </div>\n <Verdict reason={selected.readinessReason} tone={selected.release.tone} verdict={selected.release.verdict} />\n {selected.collaborators.length === 0 ? null : (\n <PeopleStrip\n aria-label={`${selected.relay.codename} collaborators`}\n expanded\n limit={selected.collaborators.length}\n onExpandedChange={() => undefined}\n people={selected.collaborators}\n />\n )}\n <ReleaseAction release={selected} />\n <section aria-labelledby=\"active-workset-title\" className={styles.contextSection}>\n <Text as=\"h3\" id=\"active-workset-title\" variant=\"section-title\">\n Release work\n </Text>\n <ReleaseWorkset release={selected} workspaceId={context.workspaceId} />\n </section>\n <RelationshipRepairPanel release={selected} />\n <section aria-labelledby=\"active-evidence-title\" className={styles.contextSection}>\n <Text as=\"h3\" id=\"active-evidence-title\" variant=\"section-title\">\n Evidence\n </Text>\n <ReleaseEvidence release={selected} />\n </section>\n <section aria-labelledby=\"active-agent-title\" className={styles.contextSection}>\n <Text as=\"h3\" id=\"active-agent-title\" variant=\"section-title\">\n Release agent\n </Text>\n <ReleaseAgentEntry release={selected} />\n </section>\n </section>\n </article>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ActiveWorkPage-C6lIQfjL.js","names":[],"sources":["../../../src/client/releases/ActiveWorkPage.module.css","../../../src/client/releases/ActiveWorkPage.tsx"],"sourcesContent":[".page,\n.hero,\n.selectedRelease,\n.identity,\n.contextSection {\n display: grid;\n}\n\n.page {\n gap: clamp(3rem, 8vw, 7rem);\n}\n\n.hero {\n gap: var(--rly-space-16);\n}\n\n.hero p,\n.hero h1 {\n margin: 0;\n}\n\n.hero h1 {\n max-inline-size: 10ch;\n letter-spacing: -0.07em;\n text-wrap: balance;\n}\n\n.intro {\n max-inline-size: 48rem;\n}\n\n.releaseSelector {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n overflow: hidden;\n border: 1px solid var(--rly-color-border-1);\n border-radius: var(--rly-radius-group);\n}\n\n.releaseChoice {\n display: grid;\n gap: var(--rly-space-8);\n min-block-size: 7rem;\n padding: var(--rly-space-20);\n color: var(--rly-color-text-2);\n text-decoration: none;\n}\n\n.releaseChoice + .releaseChoice {\n border-inline-start: 1px solid var(--rly-color-border-1);\n}\n\n.releaseChoice:nth-child(n + 4) {\n border-block-start: 1px solid var(--rly-color-border-1);\n}\n\n.releaseChoice[data-active=\"true\"] {\n background: var(--rly-color-action-background);\n color: var(--rly-color-action-foreground);\n}\n\n.releaseChoice:focus-visible {\n z-index: 1;\n outline: 2px solid var(--rly-color-focus);\n outline-offset: -2px;\n}\n\n.selectedRelease {\n gap: var(--rly-space-32);\n}\n\n.identity {\n grid-template-columns: auto 1fr;\n align-items: center;\n gap: var(--rly-space-20);\n}\n\n.identity h2 {\n margin: 0;\n}\n\n.contextSection {\n gap: var(--rly-space-20);\n}\n\n.contextSection h3 {\n margin: 0;\n}\n\n.fullLink {\n color: var(--rly-color-text-2);\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 text-underline-offset: var(--rly-space-2);\n}\n\n@media (max-width: 48rem) {\n .releaseSelector {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .releaseChoice:nth-child(n + 3) {\n border-block-start: 1px solid var(--rly-color-border-1);\n }\n\n .releaseChoice:nth-child(odd) {\n border-inline-start: 0;\n }\n}\n\n@media (max-width: 30rem) {\n .releaseSelector {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .releaseChoice + .releaseChoice {\n border-block-start: 1px solid var(--rly-color-border-1);\n border-inline-start: 0;\n }\n}\n","import { PeopleStrip, ReleaseRelay, Verdict } from \"@knpkv/rly/patterns\"\nimport { StatePanel, Text } from \"@knpkv/rly/primitives\"\nimport type { ReactElement } from \"react\"\nimport { Link, Navigate, useLocation, useOutletContext } from \"react-router\"\n\nimport { portfolioSessionBoundaryPresentation } from \"../portfolio/PortfolioOverview.js\"\nimport type { PortfolioReleasePresentation } from \"../portfolio/presentPortfolio.js\"\nimport type { WorkspaceReleaseOutletContext } from \"./WorkspaceReleaseLayout.js\"\nimport { RelationshipRepairPanel } from \"./RelationshipRepairPanel.js\"\nimport { ReleaseAction, ReleaseAgentEntry, ReleaseEvidence } from \"./ReleaseRoute.js\"\nimport { ReleaseWorkset } from \"./ReleaseWorkset.js\"\nimport { releaseActiveWorkPath, releaseFullPath } from \"./releasePaths.js\"\nimport {\n decodeReleaseRouteId,\n makeReleaseRouteState,\n resolveReleaseOrigin,\n type ReleaseRouteState\n} from \"./releaseRoutes.js\"\nimport styles from \"./ActiveWorkPage.module.css\"\n\nconst selectedReleaseId = (search: string): ReturnType<typeof decodeReleaseRouteId> =>\n decodeReleaseRouteId(new URLSearchParams(search).get(\"release\"))\n\nconst ReleaseSelector = ({\n releases,\n selected,\n stateForRelease,\n workspaceId\n}: {\n readonly releases: ReadonlyArray<PortfolioReleasePresentation>\n readonly selected: PortfolioReleasePresentation\n readonly stateForRelease: (release: PortfolioReleasePresentation) => ReleaseRouteState | undefined\n readonly workspaceId: WorkspaceReleaseOutletContext[\"workspaceId\"]\n}): ReactElement => (\n <nav aria-label=\"Release decisions\" className={styles.releaseSelector}>\n {releases.map((release) => (\n <Link\n aria-current={release.id === selected.id ? \"page\" : undefined}\n className={styles.releaseChoice}\n data-active={release.id === selected.id ? \"true\" : \"false\"}\n key={release.id}\n state={stateForRelease(release)}\n to={releaseActiveWorkPath(workspaceId, release.id)}\n >\n <span>{release.relay.codename}</span>\n <strong>{release.release.verdict}</strong>\n </Link>\n ))}\n </nav>\n)\n\n/** Render one durable human decision ledger as a workspace-level queue. */\nexport const ActiveWorkPage = (): ReactElement => {\n const context = useOutletContext<WorkspaceReleaseOutletContext>()\n const location = useLocation()\n if (context.controller.state._tag === \"session\") {\n return <StatePanel {...portfolioSessionBoundaryPresentation(context.controller.state.reason)} />\n }\n if (context.controller.state._tag !== \"ready\") {\n return (\n <StatePanel\n description=\"Control Center is loading the release portfolio before opening the decision queue.\"\n title=\"Loading active work\"\n />\n )\n }\n const releases = context.controller.state.portfolio.releases\n if (releases.length === 0) {\n return (\n <StatePanel\n action={<Link to={`/w/${context.workspaceId}/overview`}>Return to overview</Link>}\n description=\"Active work appears when a synchronized release needs a human decision.\"\n title=\"No active release work\"\n />\n )\n }\n const requestedId = selectedReleaseId(location.search)\n if (requestedId === null) {\n const first = releases[0]\n if (first === undefined) throw new Error(\"unreachable empty release portfolio\")\n return <Navigate replace to={releaseActiveWorkPath(context.workspaceId, first.id)} />\n }\n const selected = releases.find(({ id }) => id === requestedId)\n if (selected === undefined) {\n return (\n <StatePanel\n action={\n <Link to={releaseActiveWorkPath(context.workspaceId, releases[0]?.id ?? requestedId)}>Open current work</Link>\n }\n description=\"This release is not part of the current workspace snapshot.\"\n title=\"Release work not found\"\n />\n )\n }\n const resolvedOrigin = resolveReleaseOrigin(location.state, context.workspaceId, selected.id)\n const stateForRelease = (release: PortfolioReleasePresentation): ReleaseRouteState | undefined =>\n resolvedOrigin.isStored ? makeReleaseRouteState(context.workspaceId, release.id, resolvedOrigin.origin) : undefined\n\n return (\n <article className={styles.page}>\n <header className={styles.hero}>\n <Text as=\"p\" tone=\"secondary\" variant=\"label\">\n Active work\n </Text>\n <Text as=\"h1\" variant=\"verdict\">\n Decisions,\n <br />\n not tickets.\n </Text>\n <Text className={styles.intro} tone=\"secondary\" variant=\"body-large\">\n One place to review the relationship changes that decide whether a release can move.\n </Text>\n </header>\n\n <ReleaseSelector\n releases={releases}\n selected={selected}\n stateForRelease={stateForRelease}\n workspaceId={context.workspaceId}\n />\n\n <section aria-labelledby=\"active-release-title\" className={styles.selectedRelease}>\n <div className={styles.identity}>\n <ReleaseRelay\n algorithm={selected.relay.algorithm}\n codename={selected.relay.codename}\n size=\"hero\"\n symbolIndices={selected.relay.symbolIndices}\n />\n <div>\n <Text as=\"h2\" id=\"active-release-title\" variant=\"page-title\">\n {selected.serviceName}\n </Text>\n <Link\n className={styles.fullLink}\n state={location.state}\n to={releaseFullPath(context.workspaceId, selected.id)}\n >\n Open full release\n </Link>\n </div>\n </div>\n <Verdict reason={selected.readinessReason} tone={selected.release.tone} verdict={selected.release.verdict} />\n {selected.collaborators.length === 0 ? null : (\n <PeopleStrip\n aria-label={`${selected.relay.codename} collaborators`}\n expanded\n limit={selected.collaborators.length}\n onExpandedChange={() => undefined}\n people={selected.collaborators}\n />\n )}\n <ReleaseAction release={selected} />\n <section aria-labelledby=\"active-workset-title\" className={styles.contextSection}>\n <Text as=\"h3\" id=\"active-workset-title\" variant=\"section-title\">\n Release work\n </Text>\n <ReleaseWorkset release={selected} workspaceId={context.workspaceId} />\n </section>\n <RelationshipRepairPanel release={selected} />\n <section aria-labelledby=\"active-evidence-title\" className={styles.contextSection}>\n <Text as=\"h3\" id=\"active-evidence-title\" variant=\"section-title\">\n Evidence\n </Text>\n <ReleaseEvidence release={selected} />\n </section>\n <section aria-labelledby=\"active-agent-title\" className={styles.contextSection}>\n <Text as=\"h3\" id=\"active-agent-title\" variant=\"section-title\">\n Release agent\n </Text>\n <ReleaseAgentEntry release={selected} />\n </section>\n </section>\n </article>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./react-CwJFpaho.js";import{l as n,r,u as i}from"./hooks-K-sIfGqH.js";import{a,s as o,t as s}from"./lib-6h955hh9.js";import{t as c}from"./jsx-runtime-NZYk81nU.js";import{g as l,l as u,r as d}from"./Dialog-DSwimdwG-BeHnBpPp.js";import{r as f}from"./releasePaths-XoI2BHX3.js";import{f as p,p as m,u as h}from"./index-BVikncBH.js";import{h as ee,o as te,v as ne}from"./patterns-DAeEdyxU.js";import{n as g,t as _}from"./primitives-DYGtIZqB-r-Glkv2i.js";import{$r as v,Bn as y,Dn as re,Fn as b,Ga as x,Ja as ie,Jr as S,Sr as C,Ya as ae,Yr as oe,Zt as w,_ as T,_r as E,fn as se,g as D,ga as O,hr as k,lr as A,ma as j,or as M,qt as ce,rr as N,sr as P,tn as F,v as le,wr as I,zn as L}from"./agent-api-CUWP1qs8.js";import{a as ue,i as de,n as fe,o as R,r as z,t as B}from"./releaseAgentTransport-CJjWwE8y.js";import{c as pe,n as V,r as H}from"./releaseRoutes-h4FVwFvJ.js";import{usePortfolioOverviewController as U}from"./PortfolioOverview-BacOXO-c.js";import{s as W,t as me}from"./workspaceEntityRoutes-BJ-SC0Jd.js";import{t as G}from"./useWorkspaceItems-6KWfmFtx.js";var K=e(t(),1),he=e=>`${e} release`,q=24,J=256e3,Y=y({eventCursor:F,relayCodename:le,serviceName:D,updatedAt:w,version:T}),ge=y({content:L.check(E(),k(32e3)),context:I(Y),dateTime:L.check(E(),k(64)),id:L.check(E(),k(100)),provider:I(b([`codex`,`claude`])),role:b([`user`,`assistant`]),time:L.check(E(),k(32))}),_e=re(ge).check(C(e=>e.length<=q,{expected:`at most ${q} stored release-agent messages`}),C(e=>e.reduce((e,t)=>e+t.content.length,0)<=J,{expected:`at most ${J} stored release-agent characters`}),C(e=>{let t=new Set;for(let n of e){if(t.has(n.id))return!1;t.add(n.id)}return!0},{expected:`unique stored release-agent message ids`})),X=P(_e),ve=e=>{let t=sessionStorage.getItem(`cc_session_id`);return t===null||!A(se)(t)?null:`cc_release_agent_thread:${t}:${e}`},ye=e=>{let t=[],n=0;for(let r of e.slice(-24).reverse()){if(n+r.content.length>J)break;t.unshift(r),n+=r.content.length}return t},be=e=>{try{let t=ve(e);if(t===null)return[];let n=sessionStorage.getItem(t);if(n===null)return[];let r=N(X)(n);return O(r)?r.success:[]}catch{return[]}},xe=(e,t)=>{let n=M(X)(ye(t));if(!j(n))try{let t=ve(e);if(t===null)return;sessionStorage.setItem(t,n.success)}catch{}},Se=50,Ce=8,we=/\btemplate\b/iu,Te=e=>{let t=e.details;return e.entityState===`present`&&t._tag===`page`&&t.contentState===`loaded`&&t.content?.markdown!==void 0&&t.content.markdown.trim().length>0?{entityId:e.entityId,markdown:t.content.markdown,revision:t.revision,title:e.title}:null},Ee=e=>[...e].sort((e,t)=>!we.test(e.title)-+!we.test(t.title)||e.title.localeCompare(t.title)),De=e=>e.entityState===`present`&&e.details._tag===`page`&&we.test(e.title),Oe=(e=>async t=>{let n=(await e.list(t)).filter(De).slice(0,Se),r=[];for(let i=0;i<n.length;i+=Ce){let a=n.slice(i,i+Ce),o=await Promise.allSettled(a.map(({entityId:n})=>e.load(n,t)));for(let e of o){if(e.status===`rejected`){if(ae(`NotFoundApiError`)(e.reason))continue;throw e.reason}let t=Te(e.value);t!==null&&r.push(t)}}return Ee(r)})({list:async e=>(await G.load(e,{owner:`all`,query:``,service:`all`,status:`all`,type:`page`})).items.map(({projection:e})=>e),load:async(e,t)=>(await de.load(e,t)).entity.projection}),Z={room:`_room_19zge_1`,hero:`_hero_19zge_2`,heroCopy:`_heroCopy_19zge_3`,people:`_people_19zge_4`,starters:`_starters_19zge_5`,composer:`_composer_19zge_6`,templatePicker:`_templatePicker_19zge_7`,legacy:`_legacy_19zge_8`,legacyHeader:`_legacyHeader_19zge_9`,legacyContext:`_legacyContext_19zge_10`,back:`_back_19zge_19`,eyebrow:`_eyebrow_19zge_60`,publication:`_publication_19zge_70`,publicationAction:`_publicationAction_19zge_74`,presetList:`_presetList_19zge_90`,preset:`_preset_19zge_90`,suggestionList:`_suggestionList_19zge_97`,suggestion:`_suggestion_19zge_97`,thread:`_thread_19zge_168`,threadContext:`_threadContext_19zge_172`,failure:`_failure_19zge_202`,state:`_state_19zge_206`},Q=c(),ke=(e,t,n)=>{let r=t.length===1?t[0]:void 0;return r===void 0?void 0:h(e,r.id,n)},Ae={description:`The workspace-wide view of release readiness, people, source health, and agent work.`,label:`Overview`,path:`/`},je={"/":Ae,"/pair":{description:`The private browser-pairing flow. Credentials never become part of the agent context.`,label:`Browser pairing`,path:`/pair`},"/releases":{description:`Release relationships, blockers, collaborators, pull requests, and deployment evidence.`,label:`Releases`,path:`/releases`},"/services":{description:`Negotiated plugin health and the connections that provide delivery evidence.`,label:`Services`,path:`/services`}},Me=`https://control-center.invalid`,Ne=/^\/(?![\\/])[^\\]*$/u,Pe=(e,t)=>e!==null&&Ne.test(e)?e:t,$=e=>{if(e===null)return Ae;let t=URL.parse(e,Me);if(t===null||t.origin!==Me)return{description:`The calling page is not a recognized Control Center context. No fallback workspace or entity is substituted.`,label:`Context unavailable`,path:null};let n=`${t.pathname}${t.search}${t.hash}`,r=je[t.pathname];if(r!==void 0)return{...r,path:n};let i=t.pathname.split(`/`),a=H(i[2]),o=i[3],s=V(i[4]),c=i[5],l=i[1]===`w`&&i[4]===void 0,u=i[1]===`w`&&a!==null&&o===`releases`&&s!==null&&(c===void 0||c===`preview`||c===`agent`);if(l&&a!==null&&o===`overview`&&s===null)return{description:`Workspace ${a} release readiness, people, source health, and agent work.`,label:`Workspace overview`,path:n};if(l&&a!==null&&o===`items`&&s===null){let e=me(t.searchParams.get(`object`));return e===null?{description:`Current normalized delivery items in workspace ${a}, including the exact active filters and selection.`,label:`Workspace items`,path:n}:{description:`Workspace item ${e} is selected in the normalized delivery view. Relay will keep this exact entity selection and the surrounding item filters in context.`,label:`Workspace item ${e.slice(-6)}`,path:n}}let d=i[1]===`w`&&a!==null&&o===`items`&&c===void 0?me(i[4]):null;if(d!==null)return{description:`Workspace item ${d} is open in the normalized delivery view. Relay will keep this exact entity in context.`,label:`Workspace item ${d.slice(-6)}`,path:n};if(l&&a!==null&&o===`timeline`&&s===null){let e=t.searchParams.get(`event`);return{description:e===null?`Attributable delivery activity in workspace ${a}, including the exact actor and date filters.`:`Timeline event ${e} in workspace ${a}, including the exact actor and date filters.`,label:`Workspace timeline`,path:n}}let f=t.searchParams.get(`release`),p=f===null||V(f)!==null;return l&&a!==null&&o===`work`&&s===null&&p?{description:`Active release decisions in workspace ${a}, including the exact selected release and filters.`,label:`Active work`,path:n}:u?{description:`Release ${s} in workspace ${a}. Relay will resolve current release facts on the server before answering.`,label:`Release ${s.slice(-6)}`,path:n}:{description:`The calling page is not a recognized Control Center context. No fallback workspace or entity is substituted.`,label:`Context unavailable`,path:null}},Fe=()=>{let e=v();return{dateTime:S(e),time:oe(e,{hour:`2-digit`,minute:`2-digit`})}},Ie=e=>!x(e,`_tag`)||!ie(e._tag)?null:e._tag,Le=e=>{switch(Ie(e)){case`UnauthorizedApiError`:return`session-expired`;case`ForbiddenApiError`:return`blocked`;case`NotFoundApiError`:case`ApplicationResourceNotFound`:return`not-found`;case`ConflictApiError`:return`conflict`;case`ServiceUnavailableApiError`:case`ApplicationServiceUnavailable`:return`unavailable`;case`RateLimitedApiError`:return`rate-limited`;case`RequestTimedOutApiError`:return`timed-out`;default:return`failed`}},Re=e=>{switch(e){case`session-expired`:return(0,Q.jsx)(l,{action:(0,Q.jsx)(s,{to:`/pair`,children:`Pair this browser`}),announce:`assertive`,description:`Pair this browser again, then return to the release thread. Your local messages remain in this tab.`,title:`Session expired`,tone:`caution`});case`blocked`:return(0,Q.jsx)(l,{announce:`assertive`,description:`This connection cannot run a release agent. Use an allowed Control Center address.`,title:`Agent access blocked`,tone:`critical`});case`not-found`:return(0,Q.jsx)(l,{announce:`assertive`,description:`This release is no longer in the current workspace snapshot. Return to the release before asking again.`,title:`Release not found`,tone:`caution`});case`conflict`:return(0,Q.jsx)(l,{announce:`assertive`,description:`The release publication state changed or its destination is ambiguous. Refresh the release context and use the explicit publication controls.`,title:`Release publication needs attention`,tone:`caution`});case`unavailable`:return(0,Q.jsx)(l,{announce:`assertive`,description:`Start the configured local Codex or Claude runner, then ask again.`,title:`Relay is unavailable`,tone:`caution`});case`rate-limited`:return(0,Q.jsx)(l,{announce:`assertive`,description:`Relay has reached its local turn budget. Wait a moment, then submit the message again.`,title:`Too many agent turns`,tone:`caution`});case`timed-out`:return(0,Q.jsx)(l,{announce:`assertive`,description:`The local model exceeded this turn's deadline. Narrow the question, then submit it again.`,title:`Relay took too long`,tone:`caution`});case`failed`:return(0,Q.jsx)(l,{announce:`assertive`,description:`The agent did not complete this turn. Your message is still here; ask again when the runtime is ready.`,title:`Relay could not answer`,tone:`critical`})}},ze=[{description:`Fast, repository-aware release work with the configured Codex CLI.`,label:`Run with Codex`,provider:`codex`},{description:`Use the configured Claude CLI for a second agent perspective.`,label:`Run with Claude`,provider:`claude`}],Be=[{label:`Release blockers`,prompt:`What blocks this release?`},{label:`Release summary`,prompt:`Write a concise release summary.`},{label:`Missing evidence`,prompt:`Which evidence is still missing?`}],Ve=12e3,He=64e3,Ue=`
2
+ [earlier content truncated]`,We=e=>{let t=[],n=0;for(let r of e.slice(-12).reverse()){let e=r.content.length<=Ve?r.content:`${r.content.slice(0,11972)}${Ue}`;if(n+e.length>He)break;t.unshift({content:e,role:r.role}),n+=e.length}return t},Ge={kind:`human`,person:{avatarFallback:`YO`,id:`current-operator`,name:`You`,role:`Release operator`}},Ke={avatarFallback:`AI`,id:`relay`,kind:`agent`,name:`Relay`,role:`Release agent`},qe=e=>e.map(e=>({actor:e.role===`user`?Ge:Ke,content:e.content,dateTime:e.dateTime,id:e.id,time:e.time,...e.context!==void 0&&{evidence:(0,Q.jsxs)(`span`,{children:[`Answered from `,e.context.serviceName,` `,e.context.version,` · `,e.context.relayCodename,` · snapshot `,e.context.eventCursor]})}})),Je=e=>e.reduce((e,{id:t})=>{let n=Number(t.split(`-`)[1]);return Number.isSafeInteger(n)&&n>=e?n+1:e},0),Ye=({disabled:e,isRunning:t,onPromptChange:n,onSubmit:r,prompt:i,provider:a})=>(0,Q.jsxs)(`form`,{className:Z.composer,onSubmit:r,children:[(0,Q.jsx)(u,{label:`What do you need?`,children:t=>(0,Q.jsx)(`textarea`,{...t,autoFocus:!0,disabled:e,maxLength:8e3,onChange:e=>n(e.currentTarget.value),placeholder:`Ask about blockers, people, checks, or release notes…`,rows:4,value:i})}),(0,Q.jsx)(d,{disabled:e||i.trim().length===0,loading:t,size:`principal`,stretch:!0,type:`submit`,variant:`primary`,children:`Ask Relay with ${a===`codex`?`Codex`:`Claude`}`})]}),Xe=(e,t)=>{let n=[`Work on the exact synchronized Confluence page below.`,`Page title: ${t.title}`,`Current revision: ${t.revision}`,t.contentState===`loaded`?`Current safe-Markdown page body:`:`The current page body was not synchronized. Draft a complete replacement body.`].join(`
3
+ `),r=t.contentState===`loaded`?`
4
+ `:`
5
+ No current body is available.`,i=`\n\nUser request:\n${e}`,a=n.length+r.length+i.length;if(a>8e3)return e;let o=8e3-a;return`${n}${r}${t.contentState===`loaded`?t.markdown.slice(0,o):``}${i}`},Ze=(e,t)=>{if(e._tag!==`ready`&&e._tag!==`stale`)return null;let{entity:n,source:r}=e.inspection,i=n.projection.details;if(r.providerId!==`confluence`||i._tag!==`page`||!n.releaseIds.includes(t))return null;let a=R(i,e.inspection);return{contentState:a.contentState,entityId:n.projection.entityId,markdown:a.content??``,revision:a.revision,title:n.projection.title}},Qe=({availableProviders:e,confluencePage:t,loadConfluenceTemplates:n,providerCatalogPending:i,release:o,runTurn:c,submitPublication:p,workspaceId:m})=>{let h=r(),[v]=a(),y=$(v.get(`from`)),[re,b]=(0,K.useState)(``),[x,ie]=(0,K.useState)(`codex`),S=(0,K.useRef)(!1),[C,ae]=(0,K.useState)(()=>be(o.id)),[oe,w]=(0,K.useState)(null),[T,E]=(0,K.useState)(!1),[se,D]=(0,K.useState)(``),O=t._tag===`ready`?t.target:null,k=O?.title??he(o.version),A=O?.markdown??`Release `+o.version+` for `+o.serviceName+`. Published by Relay after human confirmation.`,[j,M]=(0,K.useState)(k),[N,P]=(0,K.useState)(A),[F,le]=(0,K.useState)(null),[I,L]=(0,K.useState)(n===void 0?{_tag:`ready`,templates:[]}:{_tag:`loading`}),[ue,de]=(0,K.useState)(null),fe=(0,K.useRef)(Je(C)),R=(0,K.useRef)(null),z=(0,K.useRef)(null),B=pe(o.id);(0,K.useEffect)(()=>()=>{let e=R.current;R.current=null,e?.abort()},[]),(0,K.useEffect)(()=>{xe(o.id,C)},[C,o.id]),(0,K.useEffect)(()=>{M(k),P(A)},[O?.entityId,O?.revision,A,k]),(0,K.useEffect)(()=>{O!==null&&z.current?.scrollIntoView({block:`start`})},[O?.entityId]),(0,K.useEffect)(()=>{if(n===void 0||O!==null)return;let e=new AbortController;return L({_tag:`loading`}),n(e.signal).then(t=>{e.signal.aborted||L({_tag:`ready`,templates:t})},()=>{e.signal.aborted||L({_tag:`failed`})}),()=>e.abort()},[O?.entityId,n]);let V=(0,K.useMemo)(()=>qe(C),[C]),H=[...C].reverse().find(e=>e.provider!==void 0)?.provider,U=c===void 0,W=i||e!==void 0&&!e.includes(x),me=e?.length===0,G=o.releasePageAwareness,q=I._tag===`ready`?I.templates.find(({entityId:e})=>e===ue)??null:null,J=G?.state===`not-published`,Y=G?.state===`stale`&&G.publicationActionId!==void 0,ge=O!==null||q!==null||J||Y,_e=G===void 0||G.state===`unknown`,X=[...C].reverse().find(({role:e})=>e===`assistant`)?.content;(0,K.useEffect)(()=>{if(e===void 0||S.current&&e.includes(x))return;let t=e[0];t!==void 0&&ie(t)},[e,x]);let ve=e=>{e.preventDefault();let t=re.trim();if(t.length===0||c===void 0||W||T)return;let n=We(C),r={...Fe(),content:t,id:`turn-${fe.current++}-human`,role:`user`},i=new AbortController;R.current?.abort(),R.current=i,ae(e=>[...e,r]),b(``),w(null),E(!0),D(`Relay is reading the release context.`),c({history:n,originPath:Pe(v.get(`from`),`${h.pathname}${h.hash}`),prompt:O===null?q===null?t:Xe(t,{contentState:`loaded`,entityId:q.entityId,markdown:q.markdown,revision:q.revision,title:q.title}):Xe(t,O),provider:x,releaseId:o.id,workspaceId:m},{signal:i.signal}).then(e=>{if(i.signal.aborted)return;let t=e.reply.trim();if(t.length===0){w(`failed`),D(`Relay returned an empty answer.`);return}ae(n=>[...n,{...Fe(),content:t,context:{eventCursor:e.eventCursor,relayCodename:e.release.relay.codename,serviceName:e.release.serviceName,updatedAt:e.release.updatedAt,version:e.release.version},id:`turn-${fe.current++}-agent`,provider:e.provider,role:`assistant`}]),D(`Relay answered in this release thread.`)},e=>{i.signal.aborted||(w(Le(e)),D(`Relay could not complete this turn.`))}).finally(()=>{R.current===i&&(R.current=null,E(!1))})},ye=e=>{if(F!==null||j.trim()===``||N.trim()===``||e===`confluence`&&!ge)return;le(e);let t=e===`confluence`&&(O!==null||Y);D(`Relay is `+(t?`updating`:`creating`)+` the `+e+` release artifact.`),p({releaseId:o.id,provider:e,title:j.trim(),markdown:N.trim(),...t&&O===null&&G?.publicationActionId!==void 0&&{publicationActionId:G.publicationActionId},...e===`confluence`&&O!==null&&{targetEntityId:O.entityId,targetRevision:ce.make(O.revision)},...e===`confluence`&&O===null&&q!==null&&{templateEntityId:q.entityId}}).then(n=>D(`Relay submitted a governed `+(t?`Confluence page update`:e+` publication`)+` (`+n.state+`).`),()=>D(`Relay could not publish the `+e+` release artifact.`)).finally(()=>le(null))};return(0,Q.jsxs)(`article`,{className:Z.room,"data-release-agent-id":o.id,children:[(0,Q.jsx)(s,{className:Z.back,state:h.state,to:f(m,o.id),children:`Back to release`}),y.path===null?null:(0,Q.jsx)(s,{className:Z.back,to:y.path,children:`Return to calling page`}),y.path===null?null:(0,Q.jsx)(g,{className:Z.eyebrow,tone:`secondary`,variant:`label`,children:y.label}),(0,Q.jsxs)(`header`,{className:Z.hero,children:[(0,Q.jsx)(ne,{algorithm:o.relay.algorithm,codename:o.relay.codename,"data-rly-release-transition-name":B.relay,"data-rly-release-transition-part":`relay`,size:`hero`,style:{viewTransitionName:B.relay},symbolIndices:o.relay.symbolIndices}),(0,Q.jsxs)(`div`,{className:Z.heroCopy,children:[(0,Q.jsxs)(g,{className:Z.eyebrow,tone:`secondary`,variant:`label`,children:[o.lifecycleLabel,` · `,o.version]}),(0,Q.jsxs)(g,{as:`h1`,id:`agent-title`,variant:`verdict`,children:[`Ask `,o.relay.codename,`.`]}),(0,Q.jsx)(g,{tone:`secondary`,variant:`body-large`,children:`Relay resolves the current release before every answer. This thread stays in this tab.`})]})]}),(0,Q.jsxs)(`section`,{"aria-labelledby":`agent-collaborators`,className:Z.people,children:[(0,Q.jsx)(g,{as:`h2`,id:`agent-collaborators`,variant:`section-title`,children:`In this release`}),o.collaborators.length===0?(0,Q.jsx)(g,{tone:`secondary`,children:`No owner or approver is assigned yet.`}):(0,Q.jsx)(te,{"aria-label":`${o.serviceName} release collaborators`,expanded:!0,limit:o.collaborators.length,onExpandedChange:()=>void 0,people:o.collaborators})]}),(0,Q.jsxs)(`section`,{"aria-labelledby":`agent-presets`,className:Z.starters,children:[(0,Q.jsx)(g,{as:`h2`,id:`agent-presets`,tone:`secondary`,variant:`label`,children:`Agent preset`}),(0,Q.jsx)(`div`,{"aria-label":`Agent presets`,className:Z.presetList,role:`radiogroup`,children:ze.map(t=>(0,Q.jsxs)(`button`,{"aria-checked":x===t.provider,className:Z.preset,disabled:U||T||i||e!==void 0&&!e.includes(t.provider),onClick:()=>{S.current=!0,ie(t.provider)},role:`radio`,type:`button`,children:[(0,Q.jsx)(`strong`,{children:t.label}),(0,Q.jsx)(`span`,{children:t.description}),e!==void 0&&!e.includes(t.provider)?(0,Q.jsx)(`small`,{children:`Not configured`}):null]},t.provider))}),(0,Q.jsx)(g,{as:`h2`,id:`agent-starters`,tone:`secondary`,variant:`label`,children:`Prompt templates`}),(0,Q.jsx)(`div`,{className:Z.suggestionList,children:[...O===null?[]:[{label:`Draft this page`,prompt:`Draft the complete updated Confluence page in Markdown for this release. Return only the page body, ready for owner review.`}],...Be].map(e=>(0,Q.jsxs)(`button`,{className:Z.suggestion,disabled:U||W||T,onClick:()=>b(e.prompt),type:`button`,children:[(0,Q.jsx)(`strong`,{children:e.label}),(0,Q.jsx)(`span`,{children:e.prompt})]},e.label))})]}),U?(0,Q.jsx)(l,{description:`Connect the server to a local Codex or Claude runner. Provider credentials and repository access stay server-side; this tab stores its bounded thread locally.`,title:`Local agent not connected`}):i?null:me?(0,Q.jsx)(l,{action:(0,Q.jsx)(s,{to:`/settings`,children:`Configure an agent`}),description:`Enable a local Codex or Claude runner in Settings, then return here to draft or review this release.`,title:`No agent is configured`,tone:`caution`}):W?(0,Q.jsx)(l,{description:`Choose a configured Codex or Claude preset before starting this turn.`,title:`Selected agent is not configured`,tone:`caution`}):null,oe===null?null:(0,Q.jsx)(`div`,{className:Z.failure,children:Re(oe)}),(0,Q.jsx)(ee,{...se.length===0?{}:{announcement:se},className:Z.thread,composer:(0,Q.jsx)(Ye,{disabled:U||W,isRunning:T,onPromptChange:b,onSubmit:ve,prompt:re,provider:x}),context:(0,Q.jsxs)(`div`,{className:Z.threadContext,children:[(0,Q.jsx)(`strong`,{children:o.serviceName}),(0,Q.jsx)(`span`,{children:o.version}),(0,Q.jsx)(`span`,{children:o.relay.codename}),(0,Q.jsxs)(`span`,{children:[`Preset `,x]}),H===void 0?null:(0,Q.jsxs)(`span`,{children:[`Last answer `,H]})]}),emptyLabel:`Ask one useful question. Relay will answer only for this release.`,heading:`Release thread`,messages:V}),(0,Q.jsxs)(_,{as:`section`,"aria-labelledby":`relay-publication`,className:`${Z.people} ${Z.publication}`,padding:`spacious`,ref:z,form:`grouped`,children:[(0,Q.jsx)(g,{as:`h2`,id:`relay-publication`,variant:`section-title`,children:O===null?`Publish a release artifact`:`Edit this Confluence page`}),(0,Q.jsx)(g,{tone:`secondary`,children:O===null?`These governed actions use the current release context and require your workspace-owner confirmation. Jira issue edits remain proposal-only.`:`You are editing the synchronized page at revision ${O.revision}. Type directly, or ask Relay for a draft and bring its latest answer into the editor. Publishing is an explicit, revision-guarded owner action.`}),O===null?(0,Q.jsxs)(`div`,{className:Z.templatePicker,children:[(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(g,{as:`h3`,variant:`card-title`,children:`Start from a Confluence template`}),(0,Q.jsx)(g,{tone:`secondary`,children:`Choose any synchronized Confluence page. Control Center creates a separate release-owned copy; the source page remains unchanged.`})]}),I._tag===`loading`?(0,Q.jsx)(g,{tone:`secondary`,children:`Loading Confluence templates…`}):null,I._tag===`failed`?(0,Q.jsx)(g,{tone:`secondary`,children:`Templates could not be loaded. You can still write a new page from scratch.`}):null,I._tag===`ready`&&I.templates.length===0?(0,Q.jsx)(g,{tone:`secondary`,children:`No synchronized page body is available yet. Synchronize Confluence, then return here.`}):null,I._tag===`ready`&&I.templates.length>0?(0,Q.jsx)(u,{label:`Existing Confluence page`,children:e=>(0,Q.jsxs)(`select`,{...e,onChange:e=>{let t=I.templates.find(({entityId:t})=>t===e.target.value);if(t===void 0){de(null);return}de(t.entityId),M(`${t.title} — ${o.version}`),P(t.markdown),D(`A copy of the template is now in the editor. The source page is unchanged.`)},value:ue??``,children:[(0,Q.jsx)(`option`,{value:``,children:`Write a new page`}),I.templates.map(e=>(0,Q.jsxs)(`option`,{value:e.entityId,children:[e.title,` · revision `,e.revision]},e.entityId))]})}):null,q===null?null:(0,Q.jsx)(d,{disabled:U||W||T,onClick:()=>b(`Adapt the selected Confluence template for this release. Preserve its useful structure, replace placeholders with current release facts, and return only the complete Markdown body.`),variant:`secondary`,children:`Ask Relay to adapt this copy`})]}):null,t._tag===`loading`?(0,Q.jsx)(g,{tone:`secondary`,children:`Loading the exact Confluence page that opened Relay…`}):null,t._tag===`unavailable`?(0,Q.jsx)(g,{tone:`secondary`,children:`The calling item is not an editable Confluence page in this release. The generic release publication controls remain available.`}):null,O?.contentState===`lazy`?(0,Q.jsx)(g,{tone:`secondary`,children:`The existing page body was not synchronized. Start from a complete Relay draft or paste the complete page body before publishing; an empty replacement is blocked.`}):null,G?.state===`stale`?(0,Q.jsx)(g,{tone:`secondary`,children:`The release changed after the last successful Confluence publication. Relay suggests updating the page; publishing requires an explicit owner confirmation.`}):null,(0,Q.jsx)(u,{label:O===null?`Title`:`Confluence page title`,children:e=>(0,Q.jsx)(`input`,{...e,value:j,onChange:e=>M(e.target.value)})}),(0,Q.jsx)(u,{label:O===null?`Release notes`:`Page body (Markdown)`,children:e=>(0,Q.jsx)(`textarea`,{...e,rows:O===null?6:10,value:N,onChange:e=>P(e.target.value)})}),(O!==null||q!==null)&&X!==void 0?(0,Q.jsx)(d,{disabled:F!==null,onClick:()=>{P(X),D(`The latest Relay answer is now in the page editor. Review it before publishing.`)},variant:`secondary`,children:`Use latest Relay answer`}):null,(0,Q.jsxs)(`div`,{className:O===null?Z.presetList:Z.publicationAction,children:[O===null?(0,Q.jsx)(d,{disabled:F!==null,loading:F===`jira`,onClick:()=>ye(`jira`),children:`Create Jira release version`}):null,(0,Q.jsx)(d,{disabled:F!==null||!ge||t._tag===`loading`||j.trim()===``||N.trim()===``,loading:F===`confluence`,onClick:()=>ye(`confluence`),children:O===null?q===null?G?.state===`stale`?`Update Confluence release page`:G?.state===`current`?`Confluence release page is current`:`Create Confluence release page`:`Create template copy in Confluence`:`Publish page update`}),G?.state===`current`?(0,Q.jsx)(g,{tone:`secondary`,children:`Relay will suggest an update after synchronized release changes make this page stale.`}):null,G?.state===`stale`&&!Y?(0,Q.jsx)(g,{tone:`secondary`,children:`The existing page identity is unavailable, so Relay will not create a duplicate page.`}):null,_e?(0,Q.jsx)(g,{tone:`secondary`,children:`Confluence publication status is unavailable. Refresh the release context before publishing to avoid creating a duplicate page.`}):null]})]})]})},$e=({entityId:e,...t})=>{let n=m(),r=p(n.state),i=ue(t.workspaceId,e,`${t.release.id}:${t.release.version}`,r,n.invalidateSession),a=Ze(i.state,t.release.id),o=i.state._tag===`idle`||i.state._tag===`loading`?{_tag:`loading`}:a===null?{_tag:`unavailable`}:{_tag:`ready`,target:a};return(0,Q.jsx)(Qe,{...t,confluencePage:o})},et=e=>{let[t]=a(),n=W(t.get(`from`)??``);return n!==null&&n.workspaceId===e.workspaceId?(0,Q.jsx)($e,{...e,entityId:n.entityId}):(0,Q.jsx)(Qe,{...e,confluencePage:{_tag:`none`}})},tt=({context:e})=>{switch(e.controller.state._tag){case`loading`:return(0,Q.jsx)(l,{description:`Control Center is loading the exact release and its collaborators.`,title:`Loading release context`});case`session`:return(0,Q.jsx)(l,{action:e.controller.state.reason===`anonymous`?(0,Q.jsx)(s,{to:`/pair`,children:`Pair this browser`}):void 0,description:`Release context must be available before Relay can answer.`,title:e.controller.state.reason===`blocked`?`Release access blocked`:`Release context unavailable`,tone:e.controller.state.reason===`blocked`?`critical`:`caution`});case`failed`:return(0,Q.jsx)(l,{action:(0,Q.jsx)(d,{onClick:e.controller.onRetry,children:`Try again`}),description:`Control Center could not load the release. Check the server, then try again.`,title:`Release context unavailable`,tone:`critical`});case`ready`:return(0,Q.jsx)(Q.Fragment,{})}},nt=()=>{let[e]=a(),t=$(e.get(`from`));return(0,Q.jsxs)(`section`,{"aria-labelledby":`agent-title`,className:Z.legacy,children:[(0,Q.jsxs)(`header`,{className:Z.legacyHeader,children:[(0,Q.jsx)(g,{className:Z.eyebrow,tone:`secondary`,variant:`label`,children:`Relay`}),(0,Q.jsx)(g,{as:`h1`,id:`agent-title`,variant:`verdict`,children:`Ask in context.`}),(0,Q.jsx)(g,{tone:`secondary`,variant:`body-large`,children:`Open Relay from a release to start an exact, release-owned thread.`})]}),(0,Q.jsxs)(_,{as:`section`,className:Z.legacyContext,padding:`spacious`,form:`grouped`,tone:`secondary`,children:[(0,Q.jsx)(g,{tone:`secondary`,variant:`label`,children:`Current context`}),(0,Q.jsx)(g,{as:`h2`,variant:`section-title`,children:t.label}),(0,Q.jsx)(g,{tone:`secondary`,children:t.description}),t.path===null?null:(0,Q.jsxs)(s,{className:Z.back,to:t.path,children:[`Return to `,t.label]})]}),(0,Q.jsxs)(_,{as:`section`,className:Z.legacyContext,padding:`spacious`,form:`grouped`,children:[(0,Q.jsx)(g,{tone:`secondary`,variant:`label`,children:`Choose a release`}),(0,Q.jsx)(g,{as:`h2`,variant:`section-title`,children:`Run Relay with an exact release context`}),(0,Q.jsx)(g,{tone:`secondary`,children:`Relay never runs as an unscoped chatbot. Choose the release whose evidence, freshness, and permissions should bound the thread before sending a message.`}),(0,Q.jsx)(s,{className:Z.back,to:`/releases`,children:`Choose a release to run Relay`})]})]})},rt=({originPath:e})=>{let t=U(),n=$(e);switch(t.state._tag){case`session`:return(0,Q.jsxs)(`section`,{"aria-labelledby":`agent-title`,className:Z.state,children:[(0,Q.jsx)(g,{as:`h2`,id:`agent-title`,variant:`section-title`,children:`Release context stays private`}),(0,Q.jsx)(l,{action:t.state.reason===`anonymous`?(0,Q.jsx)(s,{to:`/pair`,children:`Pair this browser`}):void 0,description:`Pair this browser before Relay reads a workspace release.`,title:`Pairing required`,tone:`caution`})]});case`loading`:return(0,Q.jsxs)(`section`,{"aria-labelledby":`agent-title`,className:Z.state,children:[(0,Q.jsx)(g,{as:`h2`,id:`agent-title`,variant:`section-title`,children:`Choosing a release`}),(0,Q.jsx)(l,{description:`Loading the releases for this page context.`,title:`Choosing a release`})]});case`failed`:return(0,Q.jsxs)(`section`,{"aria-labelledby":`agent-title`,className:Z.state,children:[(0,Q.jsx)(g,{as:`h2`,id:`agent-title`,variant:`section-title`,children:`Release context unavailable`}),(0,Q.jsx)(l,{action:(0,Q.jsx)(d,{onClick:t.onRetry,children:`Try again`}),description:`Relay could not load the releases needed to preserve this page context.`,title:`Release context unavailable`,tone:`critical`})]});case`ready`:{let{portfolio:r}=t.state,i=ke(r.workspaceId,r.releases,e);return i===void 0?(0,Q.jsxs)(`section`,{"aria-labelledby":`agent-title`,className:Z.legacy,children:[(0,Q.jsxs)(`header`,{className:Z.legacyHeader,children:[(0,Q.jsx)(g,{className:Z.eyebrow,tone:`secondary`,variant:`label`,children:`Relay`}),(0,Q.jsx)(g,{as:`h1`,id:`agent-title`,variant:`verdict`,children:`Choose a release.`}),(0,Q.jsx)(g,{tone:`secondary`,variant:`body-large`,children:`Relay will keep the exact page context below and answer inside the release you choose.`})]}),(0,Q.jsxs)(_,{as:`section`,className:Z.legacyContext,padding:`spacious`,form:`grouped`,tone:`secondary`,children:[(0,Q.jsx)(g,{tone:`secondary`,variant:`label`,children:`Calling page`}),(0,Q.jsx)(g,{as:`h2`,variant:`section-title`,children:n.label}),(0,Q.jsx)(g,{tone:`secondary`,children:n.description}),n.path===null?null:(0,Q.jsx)(s,{className:Z.back,to:n.path,children:`Return to calling page`})]}),r.releases.length===0?(0,Q.jsx)(l,{action:(0,Q.jsx)(s,{to:`/services`,children:`Connect a service`}),description:`Relay needs one synchronized release before it can start a scoped thread.`,title:`No releases available`}):(0,Q.jsx)(`div`,{"aria-label":`Releases available to Relay`,className:Z.presetList,children:r.releases.map(t=>(0,Q.jsxs)(s,{className:Z.preset,to:h(r.workspaceId,t.id,e),children:[(0,Q.jsx)(`strong`,{children:t.relay.codename}),(0,Q.jsxs)(`span`,{children:[t.serviceName,` · `,t.version]}),(0,Q.jsx)(`small`,{children:t.lifecycleLabel})]},t.id))})]}):(0,Q.jsx)(o,{replace:!0,to:i})}}},it=({availableProviders:e,loadConfluenceTemplates:t,providerCatalogPending:r=!1,runTurn:a,submitPublication:o=z})=>{let c=n(),u=i(),d=H(u.workspaceId),f=V(u.releaseId);if(u.workspaceId===void 0&&u.releaseId===void 0)return(0,Q.jsx)(nt,{});if(d===null||f===null||c===null||c.workspaceId!==d)return(0,Q.jsx)(`section`,{className:Z.state,children:(0,Q.jsx)(l,{action:d===null?(0,Q.jsx)(s,{to:`/`,children:`Return to Control Center`}):void 0,description:`This address does not identify a release in the current workspace.`,title:`Release not found`})});if(c.controller.state._tag!==`ready`)return(0,Q.jsx)(tt,{context:c});let p=c.controller.state.portfolio.releases.find(e=>e.id===f);return p===void 0?(0,Q.jsx)(`section`,{className:Z.state,children:(0,Q.jsx)(l,{action:(0,Q.jsx)(s,{to:c.controller.state.portfolio.workspaceId===d?`/w/${d}/overview`:`/`,children:`Return to workspace`}),description:`This release does not exist in the current workspace snapshot.`,title:`Release not found`})}):(0,Q.jsx)(et,{availableProviders:e,...t===void 0?{}:{loadConfluenceTemplates:t},providerCatalogPending:r,release:p,runTurn:a,submitPublication:o,workspaceId:d},p.id)},at=({loadConfluenceTemplates:e=Oe,loadPresets:t=B,runTurn:n=fe}={})=>{let o=r(),[s]=a(),c=i(),[u,f]=(0,K.useState)({_tag:`loading`}),[p,m]=(0,K.useState)(0);(0,K.useEffect)(()=>{let e=new AbortController;return f({_tag:`loading`}),t(e.signal).then(t=>{e.signal.aborted||f({_tag:`ready`,providers:t})},()=>{e.signal.aborted||f({_tag:`failed`})}),()=>e.abort()},[p,t]);let h=u._tag===`ready`?u.providers:void 0,ee=c.workspaceId!==void 0||c.releaseId!==void 0,te=Pe(s.get(`from`),`${o.pathname}${o.hash}`);return(0,Q.jsxs)(Q.Fragment,{children:[u._tag===`failed`?(0,Q.jsx)(`section`,{className:Z.state,children:(0,Q.jsx)(l,{action:(0,Q.jsx)(d,{onClick:()=>m(e=>e+1),children:`Retry agent presets`}),description:`Relay could not confirm the configured local runners. You can retry without leaving this release.`,title:`Agent presets could not be refreshed`,tone:`caution`})}):null,ee?(0,Q.jsx)(it,{...h===void 0?{}:{availableProviders:h},loadConfluenceTemplates:e,providerCatalogPending:u._tag!==`ready`,runTurn:n}):(0,Q.jsx)(rt,{originPath:te})]})};export{it as AgentPage,at as ConnectedAgentPage,We as boundedReleaseAgentHistory,Ze as confluencePageDraftTarget,$ as contextFor,ke as contextualSingleReleaseAgentPath,Xe as pageAwareAgentPrompt};
6
+ //# sourceMappingURL=AgentPage-DqB5BilE.js.map