@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
@@ -1,5 +1,5 @@
1
- import{Dn as e,Gr as t,Mn as n,Qr as r,Rn as i,Zr as a,dr as o,ur as s,zn as c}from"./agent-api-CzdQFCcD.js";var l=new Intl.DateTimeFormat(`en-GB`,{dateStyle:`medium`,timeStyle:`short`,timeZone:`UTC`}),u=e=>e.replace(/([a-z])([A-Z])/gu,`$1 $2`).split(/[._\-\s]+/u).filter(e=>e.length>0).map(e=>`${e.charAt(0).toLocaleUpperCase(`en-US`)}${e.slice(1)}`).join(` `),d=e=>e==null?null:{dateTime:t(e),label:l.format(a(e))},f=(e,t,n=!1)=>{if(e==null||t==null)return n?`In progress`:`Not available`;let i=Math.max(0,Math.round((r(t)-r(e))/1e3));if(i<60)return`${String(i)}s`;let a=Math.floor(i/60),o=i%60;return o===0?`${String(a)}m`:`${String(a)}m ${String(o)}s`},p=e=>{switch(e){case`succeeded`:return`positive`;case`failed`:return`critical`;case`running`:return`progress`;case`stopped`:return`caution`;case`queued`:return`neutral`}},m=e=>({id:e.name,name:e.name,reason:`${String(e.actionCount)} action${e.actionCount===1?``:`s`}${e.actionsTruncated?` · detail is partial`:``}`,state:u(e.status),tone:p(e.status)}),h=e=>(e??[]).map(m),g=e=>{let t=e.split(`/`).filter(e=>e.length>0).at(-1)??e;return t.includes(`@`)?t:u(t)||e},_=e=>{let t=new Map(e.graph.nodes.flatMap(({nodeId:e,resolution:t})=>t._tag===`resolved`&&t.target._tag===`entity`?[[e,t.target.entityId]]:[])),n=new Set(e.graph.nodes.flatMap(({nodeId:t,resolution:n})=>n._tag===`resolved`&&n.target._tag===`entity`&&n.target.entityId===e.entity.projection.entityId?[t]:[]));return new Set(e.graph.relationships.flatMap(e=>{if(e.lifecycle._tag===`missing`||e.lifecycle._tag===`rejected`||e.lifecycle._tag===`superseded`)return[];if(n.has(e.sourceNodeId)){let n=t.get(e.targetNodeId);return n===void 0?[]:[n]}if(n.has(e.targetNodeId)){let n=t.get(e.sourceNodeId);return n===void 0?[]:[n]}return[]}))},v=e=>{let t=e.actions?.find(({category:e})=>e?.toLocaleLowerCase(`en-US`)===`deploy`);return t===void 0?`Not linked`:`${t.stageName} · ${t.region??`region unknown`}`},y=(e,t)=>{let n=_(t),r=e=>t.graph.relatedEntityProjections.filter(({projection:t})=>t.entityState===`present`&&t.entityType===e&&n.has(t.entityId)).length,i=(e,t)=>`${String(e)}${t?`+`:``}`,a=e.actions??[],o=[...new Set(a.flatMap(({updatedBy:e})=>e===null?[]:[g(e)]))],s=[...new Set(a.flatMap(({category:e,updatedBy:t})=>e?.toLocaleLowerCase(`en-US`)===`approval`&&t!==null?[g(t)]:[]))];return{actionCountLabel:i(e.actionCount??a.length,e.actionsTruncated??!1),actions:a.map(e=>({actor:e.updatedBy===null?null:g(e.updatedBy),artifacts:e.artifacts.map(e=>({accessLabel:`Proxy required`,direction:e.direction,name:e.name})),duration:f(e.startedAt,e.updatedAt,e.status===`running`),error:e.errorMessage??e.errorCode,id:e.actionExecutionId,name:e.actionName,provider:[e.owner,e.provider,e.version].filter(e=>e!==null).join(` · `)||`Provider unavailable`,region:e.region,stageName:e.stageName,status:u(e.status),summary:e.externalExecutionSummary,tone:p(e.status)})),actionsTruncated:e.actionsTruncated??!1,approvers:s,duration:f(e.startedAt,e.updatedAt,e.status===`running`),executionId:e.executionId,executionMode:[e.executionMode,e.executionType].filter(e=>e!=null).join(` · `)||`Not synchronized`,operators:o.filter(e=>!s.includes(e)),pagesRead:e.actionPagesRead??0,pipelineName:e.pipelineName,pipelineVersion:e.pipelineVersion===null||e.pipelineVersion===void 0?`Unknown`:`v${String(e.pipelineVersion)}`,pullRequestCountLabel:i(r(`pull-request`),t.graph.truncated),releaseCountLabel:i(t.entity.releaseIds.length,t.entity.releaseMembershipsTruncated),runbookCountLabel:i(r(`page`),t.graph.truncated),sourceArtifacts:(e.sourceArtifacts??[]).map(e=>({accessLabel:`Proxy required`,createdAt:d(e.createdAt),name:e.name,revision:e.revisionId??`Revision unavailable`,summary:e.revisionSummary})),stages:h(e.stages),startedAt:d(e.startedAt),status:u(e.status),statusSummary:e.statusSummary??null,targetEnvironment:v(e),triggerDetail:e.triggerDetail===null||e.triggerDetail===void 0?`Trigger identity unavailable`:g(e.triggerDetail),triggerRevision:e.triggerRevision,triggerType:e.triggerType===null||e.triggerType===void 0?`Unknown trigger`:u(e.triggerType),updatedAt:d(e.updatedAt)}};c({checked:e,label:i,lineIndex:n.check(o(0)),lineNumber:n.check(s(0))});var b=/^(?:\s*(?:(?:[-*+]|\d+\.)\s+)?)(?:\[( |x|X)?\]|\\\[( |x|X)?\\\])\s+(.+?)\s*$/u,x=/^\s*(`{3,}|~{3,})/u,S=/^\s*(`{3,}|~{3,})\s*$/u,C=e=>{let t=[],n=null;for(let[r,i]of e.split(`
1
+ import{Bn as e,Jr as t,Nn as n,On as r,ei as i,fr as a,pr as o,ti as s,zn as c}from"./agent-api-CUWP1qs8.js";var l=new Intl.DateTimeFormat(`en-GB`,{dateStyle:`medium`,timeStyle:`short`,timeZone:`UTC`}),u=e=>e.replace(/([a-z])([A-Z])/gu,`$1 $2`).split(/[._\-\s]+/u).filter(e=>e.length>0).map(e=>`${e.charAt(0).toLocaleUpperCase(`en-US`)}${e.slice(1)}`).join(` `),d=e=>e==null?null:{dateTime:t(e),label:l.format(i(e))},f=(e,t,n=!1)=>{if(e==null||t==null)return n?`In progress`:`Not available`;let r=Math.max(0,Math.round((s(t)-s(e))/1e3));if(r<60)return`${String(r)}s`;let i=Math.floor(r/60),a=r%60;return a===0?`${String(i)}m`:`${String(i)}m ${String(a)}s`},p=e=>{switch(e){case`succeeded`:return`positive`;case`failed`:return`critical`;case`running`:return`progress`;case`stopped`:return`caution`;case`queued`:return`neutral`}},m=e=>({id:e.name,name:e.name,reason:`${String(e.actionCount)} action${e.actionCount===1?``:`s`}${e.actionsTruncated?` · detail is partial`:``}`,state:u(e.status),tone:p(e.status)}),h=e=>(e??[]).map(m),g=e=>{let t=e.split(`/`).filter(e=>e.length>0).at(-1)??e;return t.includes(`@`)?t:u(t)||e},_=e=>{let t=new Map(e.graph.nodes.flatMap(({nodeId:e,resolution:t})=>t._tag===`resolved`&&t.target._tag===`entity`?[[e,t.target.entityId]]:[])),n=new Set(e.graph.nodes.flatMap(({nodeId:t,resolution:n})=>n._tag===`resolved`&&n.target._tag===`entity`&&n.target.entityId===e.entity.projection.entityId?[t]:[]));return new Set(e.graph.relationships.flatMap(e=>{if(e.lifecycle._tag===`missing`||e.lifecycle._tag===`rejected`||e.lifecycle._tag===`superseded`)return[];if(n.has(e.sourceNodeId)){let n=t.get(e.targetNodeId);return n===void 0?[]:[n]}if(n.has(e.targetNodeId)){let n=t.get(e.sourceNodeId);return n===void 0?[]:[n]}return[]}))},v=e=>{let t=e.actions?.find(({category:e})=>e?.toLocaleLowerCase(`en-US`)===`deploy`);return t===void 0?`Not linked`:`${t.stageName} · ${t.region??`region unknown`}`},y=(e,t)=>{let n=_(t),r=e=>t.graph.relatedEntityProjections.filter(({projection:t})=>t.entityState===`present`&&t.entityType===e&&n.has(t.entityId)).length,i=(e,t)=>`${String(e)}${t?`+`:``}`,a=e.actions??[],o=[...new Set(a.flatMap(({updatedBy:e})=>e===null?[]:[g(e)]))],s=[...new Set(a.flatMap(({category:e,updatedBy:t})=>e?.toLocaleLowerCase(`en-US`)===`approval`&&t!==null?[g(t)]:[]))];return{actionCountLabel:i(e.actionCount??a.length,e.actionsTruncated??!1),actions:a.map(e=>({actor:e.updatedBy===null?null:g(e.updatedBy),artifacts:e.artifacts.map(e=>({accessLabel:`Proxy required`,direction:e.direction,name:e.name})),duration:f(e.startedAt,e.updatedAt,e.status===`running`),error:e.errorMessage??e.errorCode,id:e.actionExecutionId,name:e.actionName,provider:[e.owner,e.provider,e.version].filter(e=>e!==null).join(` · `)||`Provider unavailable`,region:e.region,stageName:e.stageName,status:u(e.status),summary:e.externalExecutionSummary,tone:p(e.status)})),actionsTruncated:e.actionsTruncated??!1,approvers:s,duration:f(e.startedAt,e.updatedAt,e.status===`running`),executionId:e.executionId,executionMode:[e.executionMode,e.executionType].filter(e=>e!=null).join(` · `)||`Not synchronized`,operators:o.filter(e=>!s.includes(e)),pagesRead:e.actionPagesRead??0,pipelineName:e.pipelineName,pipelineVersion:e.pipelineVersion===null||e.pipelineVersion===void 0?`Unknown`:`v${String(e.pipelineVersion)}`,pullRequestCountLabel:i(r(`pull-request`),t.graph.truncated),releaseCountLabel:i(t.entity.releaseIds.length,t.entity.releaseMembershipsTruncated),runbookCountLabel:i(r(`page`),t.graph.truncated),sourceArtifacts:(e.sourceArtifacts??[]).map(e=>({accessLabel:`Proxy required`,createdAt:d(e.createdAt),name:e.name,revision:e.revisionId??`Revision unavailable`,summary:e.revisionSummary})),stages:h(e.stages),startedAt:d(e.startedAt),status:u(e.status),statusSummary:e.statusSummary??null,targetEnvironment:v(e),triggerDetail:e.triggerDetail===null||e.triggerDetail===void 0?`Trigger identity unavailable`:g(e.triggerDetail),triggerRevision:e.triggerRevision,triggerType:e.triggerType===null||e.triggerType===void 0?`Unknown trigger`:u(e.triggerType),updatedAt:d(e.updatedAt)}};e({checked:r,label:c,lineIndex:n.check(o(0)),lineNumber:n.check(a(0))});var b=/^(?:\s*(?:(?:[-*+]|\d+\.)\s+)?)(?:\[( |x|X)?\]|\\\[( |x|X)?\\\])\s+(.+?)\s*$/u,x=/^\s*(`{3,}|~{3,})/u,S=/^\s*(`{3,}|~{3,})\s*$/u,C=e=>{let t=[],n=null;for(let[r,i]of e.split(`
2
2
  `).entries()){let e=(n===null?x:S).exec(i);if(e?.[1]!==void 0){let t=e[1],r=t[0];(r==="`"||r===`~`)&&(n===null?n={character:r,length:t.length}:n.character===r&&t.length>=n.length&&(n=null));continue}if(n!==null)continue;let a=b.exec(i);if(a?.[3]===void 0)continue;let o=a[1]??a[2];t.push({checked:o?.toLocaleLowerCase(`en-US`)===`x`,label:a[3],lineIndex:r,lineNumber:r+1})}return t},w=(e,t,n)=>{let r=e.split(`
3
3
  `),i=r[t];return i===void 0||!C(i).some(e=>e.lineIndex===0)?null:(r[t]=i.replace(/(\\?)\[(?: |x|X)?(\\?)\]/u,(e,t,r)=>`${String(t)}[${n?`x`:` `}${String(r)}]`),r.join(`
4
4
  `))},T=e=>{let t=C(e),n=t.filter(({checked:e})=>e).length;return{completed:n,outstanding:t.length-n,tasks:t,total:t.length}};export{y as i,w as n,h as r,T as t};
5
- //# sourceMappingURL=confluenceTasks-D9yrB-oV.js.map
5
+ //# sourceMappingURL=confluenceTasks-By7BV0WN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"confluenceTasks-D9yrB-oV.js","names":[],"sources":["../../../src/client/entities/presentWorkspacePipelineExecution.ts","../../../src/domain/confluenceTasks.ts"],"sourcesContent":["import type { RlyStage, RlyVerdictTone } from \"@knpkv/rly/patterns\"\nimport * as DateTime from \"effect/DateTime\"\n\nimport type { WorkspaceEntityInspection } from \"../../api/deliveryGraph.js\"\nimport type { DeliveryEntityDetails } from \"../../domain/deliveryGraph.js\"\n\ntype PipelineDetails = Extract<DeliveryEntityDetails, { readonly _tag: \"pipeline-execution\" }>\ntype PipelineStatus = PipelineDetails[\"status\"]\n\nexport interface WorkspacePipelineTimestamp {\n readonly dateTime: string\n readonly label: string\n}\n\nexport interface WorkspacePipelineActionPresentation {\n readonly actor: string | null\n readonly artifacts: ReadonlyArray<{\n readonly accessLabel: string\n readonly direction: \"input\" | \"output\"\n readonly name: string\n }>\n readonly duration: string\n readonly error: string | null\n readonly id: string\n readonly name: string\n readonly provider: string\n readonly region: string | null\n readonly stageName: string\n readonly status: string\n readonly summary: string | null\n readonly tone: RlyVerdictTone\n}\n\nexport interface WorkspacePipelineExecutionPresentation {\n readonly actionCountLabel: string\n readonly actions: ReadonlyArray<WorkspacePipelineActionPresentation>\n readonly actionsTruncated: boolean\n readonly approvers: ReadonlyArray<string>\n readonly duration: string\n readonly executionId: string\n readonly executionMode: string\n readonly operators: ReadonlyArray<string>\n readonly pagesRead: number\n readonly pipelineName: string\n readonly pipelineVersion: string\n readonly pullRequestCountLabel: string\n readonly releaseCountLabel: string\n readonly runbookCountLabel: string\n readonly sourceArtifacts: ReadonlyArray<{\n readonly accessLabel: string\n readonly createdAt: WorkspacePipelineTimestamp | null\n readonly name: string\n readonly revision: string\n readonly summary: string | null\n }>\n readonly stages: ReadonlyArray<RlyStage>\n readonly startedAt: WorkspacePipelineTimestamp | null\n readonly status: string\n readonly statusSummary: string | null\n readonly targetEnvironment: string\n readonly triggerDetail: string\n readonly triggerRevision: string\n readonly triggerType: string\n readonly updatedAt: WorkspacePipelineTimestamp | null\n}\n\nconst timestampFormatter = new Intl.DateTimeFormat(\"en-GB\", {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n timeZone: \"UTC\"\n})\n\nconst titleCase = (value: string): string =>\n value\n .replace(/([a-z])([A-Z])/gu, \"$1 $2\")\n .split(/[._\\-\\s]+/u)\n .filter((part) => part.length > 0)\n .map((part) => `${part.charAt(0).toLocaleUpperCase(\"en-US\")}${part.slice(1)}`)\n .join(\" \")\n\nconst timestampFor = (value: DateTime.DateTime | null | undefined): WorkspacePipelineTimestamp | null =>\n value === null || value === undefined\n ? null\n : {\n dateTime: DateTime.formatIso(value),\n label: timestampFormatter.format(DateTime.toDateUtc(value))\n }\n\nconst durationBetween = (\n startedAt: DateTime.DateTime | null | undefined,\n updatedAt: DateTime.DateTime | null | undefined,\n running = false\n): string => {\n if (startedAt === null || startedAt === undefined || updatedAt === null || updatedAt === undefined) {\n return running ? \"In progress\" : \"Not available\"\n }\n const seconds = Math.max(\n 0,\n Math.round((DateTime.toEpochMillis(updatedAt) - DateTime.toEpochMillis(startedAt)) / 1_000)\n )\n if (seconds < 60) return `${String(seconds)}s`\n const minutes = Math.floor(seconds / 60)\n const remainder = seconds % 60\n return remainder === 0 ? `${String(minutes)}m` : `${String(minutes)}m ${String(remainder)}s`\n}\n\nconst toneFor = (status: PipelineStatus): RlyVerdictTone => {\n switch (status) {\n case \"succeeded\":\n return \"positive\"\n case \"failed\":\n return \"critical\"\n case \"running\":\n return \"progress\"\n case \"stopped\":\n return \"caution\"\n case \"queued\":\n return \"neutral\"\n }\n}\n\nconst stageFor = (stage: NonNullable<PipelineDetails[\"stages\"]>[number]): RlyStage => ({\n id: stage.name,\n name: stage.name,\n reason: `${String(stage.actionCount)} action${stage.actionCount === 1 ? \"\" : \"s\"}${\n stage.actionsTruncated ? \" · detail is partial\" : \"\"\n }`,\n state: titleCase(stage.status),\n tone: toneFor(stage.status)\n})\n\n/** Present the provider-observed stages for one immutable pipeline execution. */\nexport const presentPipelineExecutionStages = (\n stages: PipelineDetails[\"stages\"]\n): ReadonlyArray<RlyStage> => (stages ?? []).map(stageFor)\n\nconst identityLabel = (identity: string): string => {\n const leaf = identity.split(\"/\").filter((part) => part.length > 0).at(-1) ?? identity\n return leaf.includes(\"@\") ? leaf : titleCase(leaf) || identity\n}\n\nconst currentlyRelatedEntityIds = (inspection: WorkspaceEntityInspection): ReadonlySet<string> => {\n const entityIdByNode = new Map(\n inspection.graph.nodes.flatMap(({ nodeId, resolution }): ReadonlyArray<readonly [string, string]> =>\n resolution._tag === \"resolved\" && resolution.target._tag === \"entity\"\n ? [[nodeId, resolution.target.entityId]]\n : []\n )\n )\n const subjectNodeIds = new Set(\n inspection.graph.nodes.flatMap(({ nodeId, resolution }) =>\n resolution._tag === \"resolved\" && resolution.target._tag === \"entity\" &&\n resolution.target.entityId === inspection.entity.projection.entityId\n ? [nodeId]\n : []\n )\n )\n return new Set(inspection.graph.relationships.flatMap((relationship) => {\n if (\n relationship.lifecycle._tag === \"missing\" ||\n relationship.lifecycle._tag === \"rejected\" ||\n relationship.lifecycle._tag === \"superseded\"\n ) return []\n if (subjectNodeIds.has(relationship.sourceNodeId)) {\n const entityId = entityIdByNode.get(relationship.targetNodeId)\n return entityId === undefined ? [] : [entityId]\n }\n if (subjectNodeIds.has(relationship.targetNodeId)) {\n const entityId = entityIdByNode.get(relationship.sourceNodeId)\n return entityId === undefined ? [] : [entityId]\n }\n return []\n }))\n}\n\nconst targetEnvironment = (details: PipelineDetails): string => {\n const deploymentAction = details.actions?.find(({ category }) => category?.toLocaleLowerCase(\"en-US\") === \"deploy\")\n return deploymentAction === undefined\n ? \"Not linked\"\n : `${deploymentAction.stageName} · ${deploymentAction.region ?? \"region unknown\"}`\n}\n\n/** Present one immutable CodePipeline execution as a compact operator flight recorder. */\nexport const presentWorkspacePipelineExecution = (\n details: PipelineDetails,\n inspection: WorkspaceEntityInspection\n): WorkspacePipelineExecutionPresentation => {\n const related = currentlyRelatedEntityIds(inspection)\n const relatedCount = (kind: \"page\" | \"pull-request\"): number =>\n inspection.graph.relatedEntityProjections.filter(({ projection }) =>\n projection.entityState === \"present\" && projection.entityType === kind && related.has(projection.entityId)\n ).length\n const lowerBound = (count: number, truncated: boolean): string => `${String(count)}${truncated ? \"+\" : \"\"}`\n const actions = details.actions ?? []\n const actors = [...new Set(actions.flatMap(({ updatedBy }) => updatedBy === null ? [] : [identityLabel(updatedBy)]))]\n const approvers = [\n ...new Set(\n actions.flatMap(({ category, updatedBy }) =>\n category?.toLocaleLowerCase(\"en-US\") === \"approval\" && updatedBy !== null ? [identityLabel(updatedBy)] : []\n )\n )\n ]\n return {\n actionCountLabel: lowerBound(details.actionCount ?? actions.length, details.actionsTruncated ?? false),\n actions: actions.map((action) => ({\n actor: action.updatedBy === null ? null : identityLabel(action.updatedBy),\n artifacts: action.artifacts.map((artifact) => ({\n accessLabel: \"Proxy required\",\n direction: artifact.direction,\n name: artifact.name\n })),\n duration: durationBetween(action.startedAt, action.updatedAt, action.status === \"running\"),\n error: action.errorMessage ?? action.errorCode,\n id: action.actionExecutionId,\n name: action.actionName,\n provider: [action.owner, action.provider, action.version].filter((value) => value !== null).join(\" · \") ||\n \"Provider unavailable\",\n region: action.region,\n stageName: action.stageName,\n status: titleCase(action.status),\n summary: action.externalExecutionSummary,\n tone: toneFor(action.status)\n })),\n actionsTruncated: details.actionsTruncated ?? false,\n approvers,\n duration: durationBetween(details.startedAt, details.updatedAt, details.status === \"running\"),\n executionId: details.executionId,\n executionMode:\n [details.executionMode, details.executionType].filter((value) => value !== null && value !== undefined).join(\n \" · \"\n ) || \"Not synchronized\",\n operators: actors.filter((actor) => !approvers.includes(actor)),\n pagesRead: details.actionPagesRead ?? 0,\n pipelineName: details.pipelineName,\n pipelineVersion: details.pipelineVersion === null || details.pipelineVersion === undefined\n ? \"Unknown\"\n : `v${String(details.pipelineVersion)}`,\n pullRequestCountLabel: lowerBound(relatedCount(\"pull-request\"), inspection.graph.truncated),\n releaseCountLabel: lowerBound(inspection.entity.releaseIds.length, inspection.entity.releaseMembershipsTruncated),\n runbookCountLabel: lowerBound(relatedCount(\"page\"), inspection.graph.truncated),\n sourceArtifacts: (details.sourceArtifacts ?? []).map((artifact) => ({\n accessLabel: \"Proxy required\",\n createdAt: timestampFor(artifact.createdAt),\n name: artifact.name,\n revision: artifact.revisionId ?? \"Revision unavailable\",\n summary: artifact.revisionSummary\n })),\n stages: presentPipelineExecutionStages(details.stages),\n startedAt: timestampFor(details.startedAt),\n status: titleCase(details.status),\n statusSummary: details.statusSummary ?? null,\n targetEnvironment: targetEnvironment(details),\n triggerDetail: details.triggerDetail === null || details.triggerDetail === undefined\n ? \"Trigger identity unavailable\"\n : identityLabel(details.triggerDetail),\n triggerRevision: details.triggerRevision,\n triggerType: details.triggerType === null || details.triggerType === undefined\n ? \"Unknown trigger\"\n : titleCase(details.triggerType),\n updatedAt: timestampFor(details.updatedAt)\n }\n}\n","import * as Schema from \"effect/Schema\"\n\n/** One Markdown checkbox that participates in release readiness. */\nexport const ConfluenceTask = Schema.Struct({\n checked: Schema.Boolean,\n label: Schema.String,\n lineIndex: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n lineNumber: Schema.Int.check(Schema.isGreaterThan(0))\n})\n\n/** Decoded Markdown checkbox participating in release readiness. */\nexport type ConfluenceTask = typeof ConfluenceTask.Type\n\nconst taskLine = /^(?:\\s*(?:(?:[-*+]|\\d+\\.)\\s+)?)(?:\\[( |x|X)?\\]|\\\\\\[( |x|X)?\\\\\\])\\s+(.+?)\\s*$/u\nconst openingFenceLine = /^\\s*(`{3,}|~{3,})/u\nconst closingFenceLine = /^\\s*(`{3,}|~{3,})\\s*$/u\n\n/** Read task-list checkboxes while ignoring examples inside fenced code blocks. */\nexport const confluenceTasks = (markdown: string): ReadonlyArray<ConfluenceTask> => {\n const tasks: Array<ConfluenceTask> = []\n let fence: { readonly character: \"`\" | \"~\"; readonly length: number } | null = null\n for (const [lineIndex, line] of markdown.split(\"\\n\").entries()) {\n const activeFencePattern: RegExp = fence === null ? openingFenceLine : closingFenceLine\n const fenceMatch: RegExpExecArray | null = activeFencePattern.exec(line)\n if (fenceMatch?.[1] !== undefined) {\n const marker: string = fenceMatch[1]\n const character: string | undefined = marker[0]\n if (character === \"`\" || character === \"~\") {\n if (fence === null) fence = { character, length: marker.length }\n else if (fence.character === character && marker.length >= fence.length) fence = null\n }\n continue\n }\n if (fence !== null) continue\n const match = taskLine.exec(line)\n if (match?.[3] === undefined) continue\n const marker = match[1] ?? match[2]\n tasks.push({\n checked: marker?.toLocaleLowerCase(\"en-US\") === \"x\",\n label: match[3],\n lineIndex,\n lineNumber: lineIndex + 1\n })\n }\n return tasks\n}\n\n/** Change one already-parsed task without rewriting any surrounding Markdown. */\nexport const setConfluenceTaskChecked = (\n markdown: string,\n lineIndex: number,\n checked: boolean\n): string | null => {\n const lines = markdown.split(\"\\n\")\n const line = lines[lineIndex]\n if (line === undefined || !confluenceTasks(line).some((task) => task.lineIndex === 0)) return null\n lines[lineIndex] = line.replace(\n /(\\\\?)\\[(?: |x|X)?(\\\\?)\\]/u,\n (_marker, openingEscape, closingEscape) =>\n `${String(openingEscape)}[${checked ? \"x\" : \" \"}${String(closingEscape)}]`\n )\n return lines.join(\"\\n\")\n}\n\n/** Summarize task completion for UI counts and release gates. */\nexport const confluenceTaskSummary = (markdown: string) => {\n const tasks = confluenceTasks(markdown)\n const completed = tasks.filter(({ checked }) => checked).length\n return { completed, outstanding: tasks.length - completed, tasks, total: tasks.length }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"confluenceTasks-By7BV0WN.js","names":[],"sources":["../../../src/client/entities/presentWorkspacePipelineExecution.ts","../../../src/domain/confluenceTasks.ts"],"sourcesContent":["import type { RlyStage, RlyVerdictTone } from \"@knpkv/rly/patterns\"\nimport * as DateTime from \"effect/DateTime\"\n\nimport type { WorkspaceEntityInspection } from \"../../api/deliveryGraph.js\"\nimport type { DeliveryEntityDetails } from \"../../domain/deliveryGraph.js\"\n\ntype PipelineDetails = Extract<DeliveryEntityDetails, { readonly _tag: \"pipeline-execution\" }>\ntype PipelineStatus = PipelineDetails[\"status\"]\n\nexport interface WorkspacePipelineTimestamp {\n readonly dateTime: string\n readonly label: string\n}\n\nexport interface WorkspacePipelineActionPresentation {\n readonly actor: string | null\n readonly artifacts: ReadonlyArray<{\n readonly accessLabel: string\n readonly direction: \"input\" | \"output\"\n readonly name: string\n }>\n readonly duration: string\n readonly error: string | null\n readonly id: string\n readonly name: string\n readonly provider: string\n readonly region: string | null\n readonly stageName: string\n readonly status: string\n readonly summary: string | null\n readonly tone: RlyVerdictTone\n}\n\nexport interface WorkspacePipelineExecutionPresentation {\n readonly actionCountLabel: string\n readonly actions: ReadonlyArray<WorkspacePipelineActionPresentation>\n readonly actionsTruncated: boolean\n readonly approvers: ReadonlyArray<string>\n readonly duration: string\n readonly executionId: string\n readonly executionMode: string\n readonly operators: ReadonlyArray<string>\n readonly pagesRead: number\n readonly pipelineName: string\n readonly pipelineVersion: string\n readonly pullRequestCountLabel: string\n readonly releaseCountLabel: string\n readonly runbookCountLabel: string\n readonly sourceArtifacts: ReadonlyArray<{\n readonly accessLabel: string\n readonly createdAt: WorkspacePipelineTimestamp | null\n readonly name: string\n readonly revision: string\n readonly summary: string | null\n }>\n readonly stages: ReadonlyArray<RlyStage>\n readonly startedAt: WorkspacePipelineTimestamp | null\n readonly status: string\n readonly statusSummary: string | null\n readonly targetEnvironment: string\n readonly triggerDetail: string\n readonly triggerRevision: string\n readonly triggerType: string\n readonly updatedAt: WorkspacePipelineTimestamp | null\n}\n\nconst timestampFormatter = new Intl.DateTimeFormat(\"en-GB\", {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n timeZone: \"UTC\"\n})\n\nconst titleCase = (value: string): string =>\n value\n .replace(/([a-z])([A-Z])/gu, \"$1 $2\")\n .split(/[._\\-\\s]+/u)\n .filter((part) => part.length > 0)\n .map((part) => `${part.charAt(0).toLocaleUpperCase(\"en-US\")}${part.slice(1)}`)\n .join(\" \")\n\nconst timestampFor = (value: DateTime.DateTime | null | undefined): WorkspacePipelineTimestamp | null =>\n value === null || value === undefined\n ? null\n : {\n dateTime: DateTime.formatIso(value),\n label: timestampFormatter.format(DateTime.toDateUtc(value))\n }\n\nconst durationBetween = (\n startedAt: DateTime.DateTime | null | undefined,\n updatedAt: DateTime.DateTime | null | undefined,\n running = false\n): string => {\n if (startedAt === null || startedAt === undefined || updatedAt === null || updatedAt === undefined) {\n return running ? \"In progress\" : \"Not available\"\n }\n const seconds = Math.max(\n 0,\n Math.round((DateTime.toEpochMillis(updatedAt) - DateTime.toEpochMillis(startedAt)) / 1_000)\n )\n if (seconds < 60) return `${String(seconds)}s`\n const minutes = Math.floor(seconds / 60)\n const remainder = seconds % 60\n return remainder === 0 ? `${String(minutes)}m` : `${String(minutes)}m ${String(remainder)}s`\n}\n\nconst toneFor = (status: PipelineStatus): RlyVerdictTone => {\n switch (status) {\n case \"succeeded\":\n return \"positive\"\n case \"failed\":\n return \"critical\"\n case \"running\":\n return \"progress\"\n case \"stopped\":\n return \"caution\"\n case \"queued\":\n return \"neutral\"\n }\n}\n\nconst stageFor = (stage: NonNullable<PipelineDetails[\"stages\"]>[number]): RlyStage => ({\n id: stage.name,\n name: stage.name,\n reason: `${String(stage.actionCount)} action${stage.actionCount === 1 ? \"\" : \"s\"}${\n stage.actionsTruncated ? \" · detail is partial\" : \"\"\n }`,\n state: titleCase(stage.status),\n tone: toneFor(stage.status)\n})\n\n/** Present the provider-observed stages for one immutable pipeline execution. */\nexport const presentPipelineExecutionStages = (\n stages: PipelineDetails[\"stages\"]\n): ReadonlyArray<RlyStage> => (stages ?? []).map(stageFor)\n\nconst identityLabel = (identity: string): string => {\n const leaf = identity.split(\"/\").filter((part) => part.length > 0).at(-1) ?? identity\n return leaf.includes(\"@\") ? leaf : titleCase(leaf) || identity\n}\n\nconst currentlyRelatedEntityIds = (inspection: WorkspaceEntityInspection): ReadonlySet<string> => {\n const entityIdByNode = new Map(\n inspection.graph.nodes.flatMap(({ nodeId, resolution }): ReadonlyArray<readonly [string, string]> =>\n resolution._tag === \"resolved\" && resolution.target._tag === \"entity\"\n ? [[nodeId, resolution.target.entityId]]\n : []\n )\n )\n const subjectNodeIds = new Set(\n inspection.graph.nodes.flatMap(({ nodeId, resolution }) =>\n resolution._tag === \"resolved\" && resolution.target._tag === \"entity\" &&\n resolution.target.entityId === inspection.entity.projection.entityId\n ? [nodeId]\n : []\n )\n )\n return new Set(inspection.graph.relationships.flatMap((relationship) => {\n if (\n relationship.lifecycle._tag === \"missing\" ||\n relationship.lifecycle._tag === \"rejected\" ||\n relationship.lifecycle._tag === \"superseded\"\n ) return []\n if (subjectNodeIds.has(relationship.sourceNodeId)) {\n const entityId = entityIdByNode.get(relationship.targetNodeId)\n return entityId === undefined ? [] : [entityId]\n }\n if (subjectNodeIds.has(relationship.targetNodeId)) {\n const entityId = entityIdByNode.get(relationship.sourceNodeId)\n return entityId === undefined ? [] : [entityId]\n }\n return []\n }))\n}\n\nconst targetEnvironment = (details: PipelineDetails): string => {\n const deploymentAction = details.actions?.find(({ category }) => category?.toLocaleLowerCase(\"en-US\") === \"deploy\")\n return deploymentAction === undefined\n ? \"Not linked\"\n : `${deploymentAction.stageName} · ${deploymentAction.region ?? \"region unknown\"}`\n}\n\n/** Present one immutable CodePipeline execution as a compact operator flight recorder. */\nexport const presentWorkspacePipelineExecution = (\n details: PipelineDetails,\n inspection: WorkspaceEntityInspection\n): WorkspacePipelineExecutionPresentation => {\n const related = currentlyRelatedEntityIds(inspection)\n const relatedCount = (kind: \"page\" | \"pull-request\"): number =>\n inspection.graph.relatedEntityProjections.filter(({ projection }) =>\n projection.entityState === \"present\" && projection.entityType === kind && related.has(projection.entityId)\n ).length\n const lowerBound = (count: number, truncated: boolean): string => `${String(count)}${truncated ? \"+\" : \"\"}`\n const actions = details.actions ?? []\n const actors = [...new Set(actions.flatMap(({ updatedBy }) => updatedBy === null ? [] : [identityLabel(updatedBy)]))]\n const approvers = [\n ...new Set(\n actions.flatMap(({ category, updatedBy }) =>\n category?.toLocaleLowerCase(\"en-US\") === \"approval\" && updatedBy !== null ? [identityLabel(updatedBy)] : []\n )\n )\n ]\n return {\n actionCountLabel: lowerBound(details.actionCount ?? actions.length, details.actionsTruncated ?? false),\n actions: actions.map((action) => ({\n actor: action.updatedBy === null ? null : identityLabel(action.updatedBy),\n artifacts: action.artifacts.map((artifact) => ({\n accessLabel: \"Proxy required\",\n direction: artifact.direction,\n name: artifact.name\n })),\n duration: durationBetween(action.startedAt, action.updatedAt, action.status === \"running\"),\n error: action.errorMessage ?? action.errorCode,\n id: action.actionExecutionId,\n name: action.actionName,\n provider: [action.owner, action.provider, action.version].filter((value) => value !== null).join(\" · \") ||\n \"Provider unavailable\",\n region: action.region,\n stageName: action.stageName,\n status: titleCase(action.status),\n summary: action.externalExecutionSummary,\n tone: toneFor(action.status)\n })),\n actionsTruncated: details.actionsTruncated ?? false,\n approvers,\n duration: durationBetween(details.startedAt, details.updatedAt, details.status === \"running\"),\n executionId: details.executionId,\n executionMode:\n [details.executionMode, details.executionType].filter((value) => value !== null && value !== undefined).join(\n \" · \"\n ) || \"Not synchronized\",\n operators: actors.filter((actor) => !approvers.includes(actor)),\n pagesRead: details.actionPagesRead ?? 0,\n pipelineName: details.pipelineName,\n pipelineVersion: details.pipelineVersion === null || details.pipelineVersion === undefined\n ? \"Unknown\"\n : `v${String(details.pipelineVersion)}`,\n pullRequestCountLabel: lowerBound(relatedCount(\"pull-request\"), inspection.graph.truncated),\n releaseCountLabel: lowerBound(inspection.entity.releaseIds.length, inspection.entity.releaseMembershipsTruncated),\n runbookCountLabel: lowerBound(relatedCount(\"page\"), inspection.graph.truncated),\n sourceArtifacts: (details.sourceArtifacts ?? []).map((artifact) => ({\n accessLabel: \"Proxy required\",\n createdAt: timestampFor(artifact.createdAt),\n name: artifact.name,\n revision: artifact.revisionId ?? \"Revision unavailable\",\n summary: artifact.revisionSummary\n })),\n stages: presentPipelineExecutionStages(details.stages),\n startedAt: timestampFor(details.startedAt),\n status: titleCase(details.status),\n statusSummary: details.statusSummary ?? null,\n targetEnvironment: targetEnvironment(details),\n triggerDetail: details.triggerDetail === null || details.triggerDetail === undefined\n ? \"Trigger identity unavailable\"\n : identityLabel(details.triggerDetail),\n triggerRevision: details.triggerRevision,\n triggerType: details.triggerType === null || details.triggerType === undefined\n ? \"Unknown trigger\"\n : titleCase(details.triggerType),\n updatedAt: timestampFor(details.updatedAt)\n }\n}\n","import * as Schema from \"effect/Schema\"\n\n/** One Markdown checkbox that participates in release readiness. */\nexport const ConfluenceTask = Schema.Struct({\n checked: Schema.Boolean,\n label: Schema.String,\n lineIndex: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n lineNumber: Schema.Int.check(Schema.isGreaterThan(0))\n})\n\n/** Decoded Markdown checkbox participating in release readiness. */\nexport type ConfluenceTask = typeof ConfluenceTask.Type\n\nconst taskLine = /^(?:\\s*(?:(?:[-*+]|\\d+\\.)\\s+)?)(?:\\[( |x|X)?\\]|\\\\\\[( |x|X)?\\\\\\])\\s+(.+?)\\s*$/u\nconst openingFenceLine = /^\\s*(`{3,}|~{3,})/u\nconst closingFenceLine = /^\\s*(`{3,}|~{3,})\\s*$/u\n\n/** Read task-list checkboxes while ignoring examples inside fenced code blocks. */\nexport const confluenceTasks = (markdown: string): ReadonlyArray<ConfluenceTask> => {\n const tasks: Array<ConfluenceTask> = []\n let fence: { readonly character: \"`\" | \"~\"; readonly length: number } | null = null\n for (const [lineIndex, line] of markdown.split(\"\\n\").entries()) {\n const activeFencePattern: RegExp = fence === null ? openingFenceLine : closingFenceLine\n const fenceMatch: RegExpExecArray | null = activeFencePattern.exec(line)\n if (fenceMatch?.[1] !== undefined) {\n const marker: string = fenceMatch[1]\n const character: string | undefined = marker[0]\n if (character === \"`\" || character === \"~\") {\n if (fence === null) fence = { character, length: marker.length }\n else if (fence.character === character && marker.length >= fence.length) fence = null\n }\n continue\n }\n if (fence !== null) continue\n const match = taskLine.exec(line)\n if (match?.[3] === undefined) continue\n const marker = match[1] ?? match[2]\n tasks.push({\n checked: marker?.toLocaleLowerCase(\"en-US\") === \"x\",\n label: match[3],\n lineIndex,\n lineNumber: lineIndex + 1\n })\n }\n return tasks\n}\n\n/** Change one already-parsed task without rewriting any surrounding Markdown. */\nexport const setConfluenceTaskChecked = (\n markdown: string,\n lineIndex: number,\n checked: boolean\n): string | null => {\n const lines = markdown.split(\"\\n\")\n const line = lines[lineIndex]\n if (line === undefined || !confluenceTasks(line).some((task) => task.lineIndex === 0)) return null\n lines[lineIndex] = line.replace(\n /(\\\\?)\\[(?: |x|X)?(\\\\?)\\]/u,\n (_marker, openingEscape, closingEscape) =>\n `${String(openingEscape)}[${checked ? \"x\" : \" \"}${String(closingEscape)}]`\n )\n return lines.join(\"\\n\")\n}\n\n/** Summarize task completion for UI counts and release gates. */\nexport const confluenceTaskSummary = (markdown: string) => {\n const tasks = confluenceTasks(markdown)\n const completed = tasks.filter(({ checked }) => checked).length\n return { completed, outstanding: tasks.length - completed, tasks, total: tasks.length }\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{Ti as e,_i as t,ki as n,sn as r,tr as i}from"./agent-api-CUWP1qs8.js";import{a,t as o}from"./client-D3WRV6yl.js";import{n as s,t as c}from"./BrowserCrypto-CoBR2WBd.js";import{t as l}from"./authenticatedMutationClient-Bc_-Jpbo.js";var u={startAtlassianOAuthGrant:(r,i,o)=>n(t(function*(){return yield*(yield*l).plugins.createAtlassianOAuthGrant({payload:{providers:r,...o!==void 0&&{configuration:o}}})}).pipe(e(a)),{signal:i}),exchangeAtlassianOAuthGrant:(r,i,o)=>n(t(function*(){return yield*(yield*l).plugins.exchangeAtlassianOAuthGrant({params:{grantId:r},payload:{code:i}})}).pipe(e(a)),{signal:o}),completeAtlassianOAuthGrant:(r,i,o)=>n(t(function*(){return yield*(yield*l).plugins.completeAtlassianOAuthGrant({params:{grantId:r},payload:{cloudId:i}})}).pipe(e(a)),{signal:o}),discoverAtlassianProfiles:r=>n(t(function*(){return yield*(yield*o()).plugins.discoverAtlassianProfiles()}).pipe(e(a)),{signal:r}),discoverAwsProfiles:r=>n(t(function*(){return yield*(yield*o()).plugins.discoverAwsProfiles()}).pipe(e(a)),{signal:r}),discoverAwsResources:(r,i)=>n(t(function*(){return yield*(yield*l).plugins.discoverAwsResources({payload:r})}).pipe(e(a)),{signal:i}),overview:r=>n(t(function*(){return yield*(yield*o()).plugins.overview()}).pipe(e(a)),{signal:r}),patchAccount:(r,i,o)=>n(t(function*(){return yield*(yield*l).plugins.patchProviderAccount({params:{providerAccountId:r},payload:i})}).pipe(e(a)),{signal:o}),create:(r,i)=>n(t(function*(){return yield*(yield*l).plugins.createConnection({payload:r})}).pipe(e(a)),{signal:i}),createBatch:(r,i)=>n(t(function*(){return yield*(yield*l).plugins.createConnections({payload:r})}).pipe(e(a)),{signal:i}),makeConnectionId:()=>n(t(function*(){let e=yield*s;return yield*i(r)(yield*e.randomUUIDv7)}).pipe(e(c))),setEnabled:(r,i,o)=>n(t(function*(){return yield*(yield*l).plugins.setConnectionEnabled({params:{pluginConnectionId:r},payload:{isEnabled:i}})}).pipe(e(a)),{signal:o}),test:(r,i)=>n(t(function*(){return yield*(yield*l).plugins.testConnection({params:{pluginConnectionId:r}})}).pipe(e(a)),{signal:i}),synchronization:(r,i)=>n(t(function*(){return yield*(yield*o()).plugins.synchronization({params:{pluginConnectionId:r}})}).pipe(e(a)),{signal:i}),synchronize:(r,i)=>n(t(function*(){return yield*(yield*l).plugins.synchronizeConnection({params:{pluginConnectionId:r}})}).pipe(e(a)),{signal:i}),administration:(r,i)=>n(t(function*(){return yield*(yield*o()).plugins.administration({params:{pluginConnectionId:r}})}).pipe(e(a)),{signal:i}),reauthorize:(r,i,o,s)=>n(t(function*(){return yield*(yield*l).plugins.reauthorizeConnection({params:{pluginConnectionId:r},payload:{expectedRevision:i,credentials:o}})}).pipe(e(a)),{signal:s}),revoke:(r,i,o)=>n(t(function*(){return yield*(yield*l).plugins.revokeConnection({params:{pluginConnectionId:r},payload:{expectedRevision:i}})}).pipe(e(a)),{signal:o})};export{u as t};
2
+ //# sourceMappingURL=connectionTestTransport-CRq7l9X0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connectionTestTransport-D8tiZ4ym.js","names":[],"sources":["../../../src/client/services/connectionTestTransport.ts"],"sourcesContent":["import * as BrowserCrypto from \"@effect/platform-browser/BrowserCrypto\"\nimport * as Crypto from \"effect/Crypto\"\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\nimport * as FetchHttpClient from \"effect/unstable/http/FetchHttpClient\"\n\nimport { makeControlCenterApiClient } from \"../../api/client.js\"\nimport type {\n AtlassianOAuthClientConfiguration,\n AtlassianOAuthGrantExchangeResponse,\n AtlassianOAuthGrantId,\n AtlassianOAuthGrantStartResponse,\n AtlassianOAuthProviderIntent,\n AtlassianProfileDiscoveryResponse,\n AwsProfileDiscoveryResponse,\n AwsResourceDiscoveryRequest,\n AwsResourceDiscoveryResponse,\n CreatePluginConnectionRequest,\n CreatePluginConnectionResponse,\n CreatePluginConnectionsRequest,\n CreatePluginConnectionsResponse,\n PatchProviderAccountRequest,\n PluginConnectionAdministration,\n PluginConnectionSummary,\n PluginConnectionTestResult,\n PluginCredentialReplacement,\n PluginOverviewResponse,\n PluginSynchronizationState\n} from \"../../api/index.js\"\nimport type { DiscoveredAtlassianProfile, ProviderAccountSummary } from \"../../api/plugins.js\"\nimport { PluginConnectionId, type ProviderAccountId } from \"../../domain/identifiers.js\"\nimport { makeAuthenticatedMutationClient } from \"../authenticatedMutationClient.js\"\n\n/** Browser boundary for connection administration reads and live tests. */\nexport interface ConnectionTestTransport {\n /** Optional only for injected legacy/test transports; the browser transport always discovers profiles. */\n readonly discoverAwsProfiles?: (signal: AbortSignal) => Promise<AwsProfileDiscoveryResponse>\n readonly discoverAwsResources?: (\n request: AwsResourceDiscoveryRequest,\n signal: AbortSignal\n ) => Promise<AwsResourceDiscoveryResponse>\n readonly discoverAtlassianProfiles?: (signal: AbortSignal) => Promise<AtlassianProfileDiscoveryResponse>\n readonly startAtlassianOAuthGrant?: (\n providers: AtlassianOAuthProviderIntent,\n signal: AbortSignal,\n configuration?: AtlassianOAuthClientConfiguration\n ) => Promise<AtlassianOAuthGrantStartResponse>\n readonly exchangeAtlassianOAuthGrant?: (\n grantId: AtlassianOAuthGrantId,\n code: string,\n signal: AbortSignal\n ) => Promise<AtlassianOAuthGrantExchangeResponse>\n readonly completeAtlassianOAuthGrant?: (\n grantId: AtlassianOAuthGrantId,\n cloudId: string,\n signal: AbortSignal\n ) => Promise<DiscoveredAtlassianProfile>\n readonly overview: (signal: AbortSignal) => Promise<PluginOverviewResponse>\n readonly patchAccount?: (\n providerAccountId: ProviderAccountId,\n patch: PatchProviderAccountRequest,\n signal: AbortSignal\n ) => Promise<ProviderAccountSummary>\n readonly create: (\n request: CreatePluginConnectionRequest,\n signal: AbortSignal\n ) => Promise<CreatePluginConnectionResponse>\n readonly createBatch?: (\n request: CreatePluginConnectionsRequest,\n signal: AbortSignal\n ) => Promise<CreatePluginConnectionsResponse>\n readonly makeConnectionId: () => Promise<PluginConnectionId>\n readonly setEnabled: (\n pluginConnectionId: PluginConnectionId,\n isEnabled: boolean,\n signal: AbortSignal\n ) => Promise<PluginConnectionSummary>\n readonly test: (pluginConnectionId: PluginConnectionId, signal: AbortSignal) => Promise<PluginConnectionTestResult>\n readonly synchronization?: (\n pluginConnectionId: PluginConnectionId,\n signal: AbortSignal\n ) => Promise<PluginSynchronizationState>\n readonly synchronize?: (\n pluginConnectionId: PluginConnectionId,\n signal: AbortSignal\n ) => Promise<PluginSynchronizationState>\n readonly administration?: (\n pluginConnectionId: PluginConnectionId,\n signal: AbortSignal\n ) => Promise<PluginConnectionAdministration>\n readonly reauthorize?: (\n pluginConnectionId: PluginConnectionId,\n expectedRevision: number,\n credentials: ReadonlyArray<PluginCredentialReplacement>,\n signal: AbortSignal\n ) => Promise<CreatePluginConnectionResponse>\n readonly revoke?: (\n pluginConnectionId: PluginConnectionId,\n expectedRevision: number,\n signal: AbortSignal\n ) => Promise<PluginConnectionSummary>\n}\n\n/** Generated-client transport carrying cookies and the current tab's mutation proof. */\nexport const browserConnectionTestTransport: ConnectionTestTransport = {\n startAtlassianOAuthGrant: (providers, signal, configuration) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.createAtlassianOAuthGrant({\n payload: { providers, ...(!(configuration === undefined) && { configuration }) }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n exchangeAtlassianOAuthGrant: (grantId, code, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.exchangeAtlassianOAuthGrant({\n params: { grantId },\n payload: { code }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n completeAtlassianOAuthGrant: (grantId, cloudId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.completeAtlassianOAuthGrant({\n params: { grantId },\n payload: { cloudId }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n discoverAtlassianProfiles: (signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.discoverAtlassianProfiles()\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n discoverAwsProfiles: (signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.discoverAwsProfiles()\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n discoverAwsResources: (request, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.discoverAwsResources({ payload: request })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n overview: (signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.overview()\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n patchAccount: (providerAccountId, patch, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.patchProviderAccount({\n params: { providerAccountId },\n payload: patch\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n create: (request, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.createConnection({ payload: request })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n createBatch: (request, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.createConnections({ payload: request })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n makeConnectionId: () =>\n Effect.runPromise(\n Effect.gen(function*() {\n const cryptoService = yield* Crypto.Crypto\n return yield* Schema.decodeUnknownEffect(PluginConnectionId)(yield* cryptoService.randomUUIDv7)\n }).pipe(Effect.provide(BrowserCrypto.layer))\n ),\n setEnabled: (pluginConnectionId, isEnabled, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.setConnectionEnabled({\n params: { pluginConnectionId },\n payload: { isEnabled }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n test: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.testConnection({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n synchronization: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.synchronization({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n synchronize: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.synchronizeConnection({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n administration: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.administration({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n reauthorize: (pluginConnectionId, expectedRevision, credentials, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.reauthorizeConnection({\n params: { pluginConnectionId },\n payload: { expectedRevision, credentials }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n revoke: (pluginConnectionId, expectedRevision, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.revokeConnection({\n params: { pluginConnectionId },\n payload: { expectedRevision }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"connectionTestTransport-CRq7l9X0.js","names":[],"sources":["../../../src/client/services/connectionTestTransport.ts"],"sourcesContent":["import * as BrowserCrypto from \"@effect/platform-browser/BrowserCrypto\"\nimport * as Crypto from \"effect/Crypto\"\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\nimport * as FetchHttpClient from \"effect/unstable/http/FetchHttpClient\"\n\nimport { makeControlCenterApiClient } from \"../../api/client.js\"\nimport type {\n AtlassianOAuthClientConfiguration,\n AtlassianOAuthGrantExchangeResponse,\n AtlassianOAuthGrantId,\n AtlassianOAuthGrantStartResponse,\n AtlassianOAuthProviderIntent,\n AtlassianProfileDiscoveryResponse,\n AwsProfileDiscoveryResponse,\n AwsResourceDiscoveryRequest,\n AwsResourceDiscoveryResponse,\n CreatePluginConnectionRequest,\n CreatePluginConnectionResponse,\n CreatePluginConnectionsRequest,\n CreatePluginConnectionsResponse,\n PatchProviderAccountRequest,\n PluginConnectionAdministration,\n PluginConnectionSummary,\n PluginConnectionTestResult,\n PluginCredentialReplacement,\n PluginOverviewResponse,\n PluginSynchronizationState\n} from \"../../api/index.js\"\nimport type { DiscoveredAtlassianProfile, ProviderAccountSummary } from \"../../api/plugins.js\"\nimport { PluginConnectionId, type ProviderAccountId } from \"../../domain/identifiers.js\"\nimport { makeAuthenticatedMutationClient } from \"../authenticatedMutationClient.js\"\n\n/** Browser boundary for connection administration reads and live tests. */\nexport interface ConnectionTestTransport {\n /** Optional only for injected legacy/test transports; the browser transport always discovers profiles. */\n readonly discoverAwsProfiles?: (signal: AbortSignal) => Promise<AwsProfileDiscoveryResponse>\n readonly discoverAwsResources?: (\n request: AwsResourceDiscoveryRequest,\n signal: AbortSignal\n ) => Promise<AwsResourceDiscoveryResponse>\n readonly discoverAtlassianProfiles?: (signal: AbortSignal) => Promise<AtlassianProfileDiscoveryResponse>\n readonly startAtlassianOAuthGrant?: (\n providers: AtlassianOAuthProviderIntent,\n signal: AbortSignal,\n configuration?: AtlassianOAuthClientConfiguration\n ) => Promise<AtlassianOAuthGrantStartResponse>\n readonly exchangeAtlassianOAuthGrant?: (\n grantId: AtlassianOAuthGrantId,\n code: string,\n signal: AbortSignal\n ) => Promise<AtlassianOAuthGrantExchangeResponse>\n readonly completeAtlassianOAuthGrant?: (\n grantId: AtlassianOAuthGrantId,\n cloudId: string,\n signal: AbortSignal\n ) => Promise<DiscoveredAtlassianProfile>\n readonly overview: (signal: AbortSignal) => Promise<PluginOverviewResponse>\n readonly patchAccount?: (\n providerAccountId: ProviderAccountId,\n patch: PatchProviderAccountRequest,\n signal: AbortSignal\n ) => Promise<ProviderAccountSummary>\n readonly create: (\n request: CreatePluginConnectionRequest,\n signal: AbortSignal\n ) => Promise<CreatePluginConnectionResponse>\n readonly createBatch?: (\n request: CreatePluginConnectionsRequest,\n signal: AbortSignal\n ) => Promise<CreatePluginConnectionsResponse>\n readonly makeConnectionId: () => Promise<PluginConnectionId>\n readonly setEnabled: (\n pluginConnectionId: PluginConnectionId,\n isEnabled: boolean,\n signal: AbortSignal\n ) => Promise<PluginConnectionSummary>\n readonly test: (pluginConnectionId: PluginConnectionId, signal: AbortSignal) => Promise<PluginConnectionTestResult>\n readonly synchronization?: (\n pluginConnectionId: PluginConnectionId,\n signal: AbortSignal\n ) => Promise<PluginSynchronizationState>\n readonly synchronize?: (\n pluginConnectionId: PluginConnectionId,\n signal: AbortSignal\n ) => Promise<PluginSynchronizationState>\n readonly administration?: (\n pluginConnectionId: PluginConnectionId,\n signal: AbortSignal\n ) => Promise<PluginConnectionAdministration>\n readonly reauthorize?: (\n pluginConnectionId: PluginConnectionId,\n expectedRevision: number,\n credentials: ReadonlyArray<PluginCredentialReplacement>,\n signal: AbortSignal\n ) => Promise<CreatePluginConnectionResponse>\n readonly revoke?: (\n pluginConnectionId: PluginConnectionId,\n expectedRevision: number,\n signal: AbortSignal\n ) => Promise<PluginConnectionSummary>\n}\n\n/** Generated-client transport carrying cookies and the current tab's mutation proof. */\nexport const browserConnectionTestTransport: ConnectionTestTransport = {\n startAtlassianOAuthGrant: (providers, signal, configuration) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.createAtlassianOAuthGrant({\n payload: { providers, ...(!(configuration === undefined) && { configuration }) }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n exchangeAtlassianOAuthGrant: (grantId, code, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.exchangeAtlassianOAuthGrant({\n params: { grantId },\n payload: { code }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n completeAtlassianOAuthGrant: (grantId, cloudId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.completeAtlassianOAuthGrant({\n params: { grantId },\n payload: { cloudId }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n discoverAtlassianProfiles: (signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.discoverAtlassianProfiles()\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n discoverAwsProfiles: (signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.discoverAwsProfiles()\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n discoverAwsResources: (request, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.discoverAwsResources({ payload: request })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n overview: (signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.overview()\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n patchAccount: (providerAccountId, patch, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.patchProviderAccount({\n params: { providerAccountId },\n payload: patch\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n create: (request, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.createConnection({ payload: request })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n createBatch: (request, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.createConnections({ payload: request })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n makeConnectionId: () =>\n Effect.runPromise(\n Effect.gen(function*() {\n const cryptoService = yield* Crypto.Crypto\n return yield* Schema.decodeUnknownEffect(PluginConnectionId)(yield* cryptoService.randomUUIDv7)\n }).pipe(Effect.provide(BrowserCrypto.layer))\n ),\n setEnabled: (pluginConnectionId, isEnabled, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.setConnectionEnabled({\n params: { pluginConnectionId },\n payload: { isEnabled }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n test: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.testConnection({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n synchronization: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.synchronization({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n synchronize: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.synchronizeConnection({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n administration: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.administration({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n reauthorize: (pluginConnectionId, expectedRevision, credentials, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.reauthorizeConnection({\n params: { pluginConnectionId },\n payload: { expectedRevision, credentials }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n revoke: (pluginConnectionId, expectedRevision, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.revokeConnection({\n params: { pluginConnectionId },\n payload: { expectedRevision }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/patterns-DAeEdyxU.js","assets/rolldown-runtime-hePW80VL.js","assets/react-CwJFpaho.js","assets/PortalProvider-CN_81Fy3-D_japesx.js","assets/loader-circle-Dem7LJJw.js","assets/jsx-runtime-NZYk81nU.js","assets/Dialog-DSwimdwG-BeHnBpPp.js","assets/component-DKy8kjZl-DJ62HeaY.js","assets/index-BVikncBH.js","assets/hooks-K-sIfGqH.js","assets/lib-6h955hh9.js","assets/preload-helper-Czpn1I53.js","assets/releasePaths-XoI2BHX3.js","assets/index-tjRpNCt_.css"])))=>i.map(i=>d[i]);
2
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./react-CwJFpaho.js";import{t as n}from"./preload-helper-Czpn1I53.js";import{t as r}from"./jsx-runtime-NZYk81nU.js";import{s as i}from"./index-BVikncBH.js";import{Ai as a,Bn as o,Dn as s,Fi as c,Fn as l,Ii as u,Nn as d,Pn as f,Sr as p,Un as m,Vn as h,Xn as g,Yi as ee,_r as _,aa as te,br as ne,ca as re,fr as ie,gr as v,hr as y,ma as b,mi as ae,rr as x,tr as oe,vr as S,wr as C,xa as se,xi as ce,yr as w,zn as T}from"./agent-api-CUWP1qs8.js";var E=e(t(),1),D=r(),O=T.check(w(),_(),y(200)).pipe(g(`RelaySelectorId`)),k=o({id:O,label:T.check(w(),_(),y(200))}),A=o({modelId:O,models:s(k).check(v(1)),profileId:O,profiles:s(k).check(v(1))}),j=e=>new Set(e.map(({id:e})=>e)).size===e.length,M=A.check(p(({profiles:e})=>j(e),{expected:`unique Relay profile option identifiers`}),p(({models:e})=>j(e),{expected:`unique Relay model option identifiers`}),p(({profileId:e,profiles:t})=>t.some(({id:t})=>t===e),{expected:`a selected Relay profile present in the profile options`}),p(({modelId:e,models:t})=>t.some(({id:t})=>t===e),{expected:`a selected Relay model present in the model options`})),N=m({collapsed:{},expanded:{}}),le=o({dock:N,selection:M}),P=class extends h()(`InvalidRelaySelectorState`,{reason:l([`duplicate-model`,`duplicate-profile`,`invalid-input`,`model-not-found`,`profile-not-found`])}){},ue=oe(A);ae(`RelayProduct.makeInitialRelayState`)(function*(e){let t=yield*ue(e).pipe(ce(()=>new P({reason:`invalid-input`})));return j(t.profiles)?j(t.models)?t.profiles.some(({id:e})=>e===t.profileId)?t.models.some(({id:e})=>e===t.modelId)?le.make({dock:N.cases.collapsed.make({}),selection:M.make(t)}):yield*new P({reason:`model-not-found`}):yield*new P({reason:`profile-not-found`}):yield*new P({reason:`duplicate-model`}):yield*new P({reason:`duplicate-profile`})});var F=e=>T.check(w(),_(),y(e)),I=e=>T.check(ne(7),S(/^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u,{expected:`a canonical lowercase UUID v7`})).pipe(g(e)),L=l([`codecommit`,`control-center`]),R=l([`continue-pull-request-conversation`,`locate-pull-request-conversation`]),z=F(200).pipe(g(`RelayPrincipalId`)),B=I(`RelayWorkspaceId`),de=I(`RelayPluginConnectionId`),fe=I(`RelayEntityId`),V=F(1e3).pipe(g(`RelayRepositoryName`)),H=F(200).pipe(g(`RelayPullRequestId`)),U=F(200).pipe(g(`RelayAccountId`)),W=F(100).pipe(g(`RelayRegion`)),G=T.check(w(),_(),y(4096),S(/^\/(?!\/)/u,{expected:`an application-owned absolute path`}));m({codecommit:{principalId:z},"control-center":{principalId:z,workspaceId:B}});var pe=o({accountId:C(U),provider:f(`codecommit`),pullRequestId:H,region:W,repositoryName:V}),K=o({pluginConnectionId:de,pullRequestId:H,repositoryName:V,workspaceId:B}),q=o({accountId:U,pullRequestId:H,region:W,repositoryName:V}),me=o({entityId:fe,href:G}),he=o({accountId:U,href:G,pullRequestId:H,routeAccountId:C(U)}),J=m({codecommit:{...q.fields},"control-center":{...K.fields}}),Y=m({codecommit:{route:he,selection:M,thread:q},"control-center":{route:me,selection:M,thread:K}}).check(p(e=>{switch(e._tag){case`codecommit`:return e.route.accountId===e.thread.accountId&&e.route.pullRequestId===e.thread.pullRequestId&&e.route.href===`/accounts/${encodeURIComponent(e.route.routeAccountId??e.route.accountId)}/prs/${encodeURIComponent(e.route.pullRequestId)}`;case`control-center`:return e.route.href===`/w/${e.thread.workspaceId}/items/${e.route.entityId}`}},{expected:`a product-qualified thread paired with its exact pull-request route`})),X=e=>{switch(e._tag){case`codecommit`:return J.cases.codecommit.make(e.thread);case`control-center`:return J.cases[`control-center`].make(e.thread)}},ge=T.check(w(),_(),y(8e3)).pipe(g(`PullRequestContinuationMessage`)),_e=o({conversation:Y,message:ge,selection:M}),ve=F(200).pipe(g(`RelayContinuationMessageId`));o({messageId:ve,thread:J});var ye=class extends h()(`RelayAuthenticationRequired`,{operation:R,product:L}){},be=class extends h()(`RelayAuthorizationDenied`,{operation:R,product:L}){};h()(`RelayAuthenticationUnavailable`,{operation:R,product:L});var xe=class extends h()(`PullRequestConversationNotFound`,{product:L,pullRequestId:H,repositoryName:V}){},Se=class extends h()(`PullRequestConversationAmbiguous`,{matches:d.check(ie(1)),product:L,pullRequestId:H,repositoryName:V}){},Ce=class extends h()(`PullRequestConversationLookupFailed`,{product:L}){},we=class extends h()(`PullRequestConversationRedirectFailed`,{href:G,product:L}){},Te=class extends h()(`PullRequestConversationContinuationRejected`,{product:L,reason:l([`conversation-busy`,`selection-unavailable`,`thread-not-found`]),thread:J}){},Ee=class extends h()(`PullRequestConversationContinuationFailed`,{product:L,thread:J}){};h()(`RelayProductAdapterContractError`,{actualProduct:L,expectedProduct:L,operation:R}),h()(`RelayProductContinuationReceiptMismatch`,{actualThread:J,expectedThread:J}),se()(`@knpkv/relay-product/RelayProduct`);var Z=class extends ee(`RelayProductDockInvariantViolation`){},De=(0,E.lazy)(async()=>({default:(await n(()=>import(`./patterns-DAeEdyxU.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]))).RelayDock})),Oe=class extends E.Component{state={failed:!1};static getDerivedStateFromError(e){return{failed:!0}}render(){return this.state.failed?null:this.props.children}},ke=e=>{switch(e._tag){case`RelayAuthenticationRequired`:return`Authenticate with this product before using its Relay conversations.`;case`RelayAuthorizationDenied`:return`This session cannot use Relay for pull-request conversations.`;case`RelayAuthenticationUnavailable`:return`The product authentication boundary is unavailable.`;case`PullRequestConversationNotFound`:return`No Relay conversation matches ${e.repositoryName} PR #${e.pullRequestId}.`;case`PullRequestConversationAmbiguous`:return`${String(e.matches)} Relay conversations match this pull request; include its account.`;case`PullRequestConversationLookupFailed`:return`Relay could not search the product's pull-request conversations.`;case`PullRequestConversationRedirectFailed`:return`Relay found the conversation but could not open its exact pull-request page.`;case`PullRequestConversationContinuationRejected`:return e.reason===`conversation-busy`?`This pull-request conversation already has a run in progress.`:e.reason===`selection-unavailable`?`The selected Relay profile or model is no longer available.`:`This pull-request conversation no longer exists.`;case`PullRequestConversationContinuationFailed`:return`Relay could not continue this pull-request conversation.`;case`RelayProductAdapterContractError`:return`The active product does not own this pull-request conversation.`;case`RelayProductContinuationReceiptMismatch`:return`Relay returned a continuation receipt for another pull-request conversation.`}},Ae=e=>{let t=e.reasons.find(te);return t===void 0?`Relay ended unexpectedly. No request was accepted.`:ke(t.error)},Q=()=>{let[e,t]=(0,E.useState)({description:null,pending:!1}),n=(0,E.useRef)(0);return(0,E.useEffect)(()=>()=>{n.current+=1},[]),[e,(0,E.useCallback)(e=>{n.current+=1;let r=n.current;t({description:null,pending:!0}),a(e).then(e=>{n.current===r&&t(re(e)?{description:null,pending:!1}:{description:Ae(e.cause),pending:!1})})},[])]},je=({host:e})=>{let[t,n]=(0,E.useState)(``),[r,i]=(0,E.useState)(``),[a,o]=(0,E.useState)(``),[s,c]=(0,E.useState)(``),[l,u]=(0,E.useState)(null),[d,f]=Q();return(0,D.jsxs)(`form`,{"aria-label":`Find a pull request conversation`,onSubmit:n=>{n.preventDefault();let i=t.trim(),o=i.length===0?{provider:`codecommit`,pullRequestId:r.trim(),region:a.trim(),repositoryName:s.trim()}:{accountId:i,provider:`codecommit`,pullRequestId:r.trim(),region:a.trim(),repositoryName:s.trim()},c=x(pe)(o);if(b(c)){u(`Enter a region, repository, and pull-request number.`);return}u(null),f(e.locatePullRequestConversation(c.success))},children:[(0,D.jsx)(`h2`,{children:`Find a pull request conversation`}),(0,D.jsx)(`p`,{children:`Relay opens the exact product page before continuing a PR thread.`}),(0,D.jsxs)(`label`,{children:[(0,D.jsx)(`span`,{children:`Region`}),(0,D.jsx)(`input`,{onChange:e=>o(e.currentTarget.value),value:a})]}),(0,D.jsxs)(`label`,{children:[(0,D.jsx)(`span`,{children:`Repository`}),(0,D.jsx)(`input`,{onChange:e=>c(e.currentTarget.value),value:s})]}),(0,D.jsxs)(`label`,{children:[(0,D.jsx)(`span`,{children:`Pull request`}),(0,D.jsx)(`input`,{inputMode:`numeric`,onChange:e=>i(e.currentTarget.value),value:r})]}),(0,D.jsxs)(`label`,{children:[(0,D.jsx)(`span`,{children:`Account (optional)`}),(0,D.jsx)(`input`,{onChange:e=>n(e.currentTarget.value),value:t})]}),l===null&&d.description===null?null:(0,D.jsx)(`p`,{"aria-live":`assertive`,role:`alert`,children:l??d.description}),(0,D.jsx)(`button`,{disabled:d.pending,type:`submit`,children:d.pending?`Opening PR conversation…`:`Open PR conversation`})]})},Me=({messages:e})=>e.length===0?(0,D.jsx)(`p`,{children:`No Relay turns yet. The first message starts this PR's durable thread.`}):(0,D.jsx)(`ol`,{"aria-label":`Pull request conversation`,children:e.map(e=>(0,D.jsxs)(`li`,{"data-relay-message-role":e.role,children:[(0,D.jsx)(`strong`,{children:e.role===`relay`?`Relay`:e.role===`operator`?`You`:`System`}),(0,D.jsx)(`p`,{children:e.text})]},e.id))}),Ne=(e,t)=>t.selection.profiles.some(({id:t})=>t===e.profileId)&&t.selection.models.some(({id:t})=>t===e.modelId),Pe=({registration:e,selection:t})=>{let[n,r]=(0,E.useState)(``),[i,a]=(0,E.useState)(null),[o,s]=Q(),l=Ne(t,e);return(0,D.jsxs)(`form`,{"aria-label":`Continue pull request conversation`,onSubmit:i=>{if(i.preventDefault(),!l){a(`Rerun Relay with the selected profile or model before continuing this PR thread.`);return}let o=x(_e)({conversation:e.conversation,message:n.trim(),selection:t});if(b(o)){a(`Enter a pull-request request of 8,000 characters or fewer.`);return}a(null),s(e.continuePullRequestConversation(o.success).pipe(u(()=>c(()=>r(``)))))},children:[(0,D.jsxs)(`label`,{children:[(0,D.jsx)(`span`,{children:`Continue this PR thread`}),(0,D.jsx)(`textarea`,{maxLength:8e3,onChange:e=>r(e.currentTarget.value),placeholder:`Ask Relay to verify one concrete part of this pull request…`,rows:3,value:n})]}),i===null&&o.description===null?null:(0,D.jsx)(`p`,{"aria-live":`assertive`,role:`alert`,children:i??o.description}),!l&&i===null?(0,D.jsx)(`p`,{"aria-live":`polite`,children:`Rerun Relay with the selected profile or model before continuing this PR thread.`}):null,(0,D.jsx)(`button`,{disabled:o.pending||n.trim().length===0||!l,type:`submit`,children:o.pending?`Continuing on this PR…`:`Continue on this PR`})]})},Fe=(e,t)=>{if(t===null)return{content:(0,D.jsx)(je,{host:e}),status:`ready`};switch(t.status){case`loading`:return{description:`Loading the durable conversation for this pull request.`,status:`loading`,title:`Loading PR thread`};case`error`:return{description:t.description,status:`error`,title:`PR thread unavailable`};case`unavailable`:return{description:t.description,status:`unavailable`,title:`Relay unavailable for this PR`};case`ready`:return{content:(0,D.jsx)(Me,{messages:t.messages}),status:`ready`}}},Ie=e=>e===null?`host`:JSON.stringify(X(e.conversation)),Le=e=>JSON.stringify({modelId:e.modelId,models:e.models,profileId:e.profileId,profiles:e.profiles}),Re=({host:e})=>{let t=i(),n=t?.selection??e.selection,r=Ie(t),a=Le(n),[o,s]=(0,E.useState)(n);(0,E.useEffect)(()=>s(n),[a,r]);let c=e=>{let t=o.models.find(({id:t})=>t===e);if(t===void 0)return;let n=o.profiles.find(({id:e})=>e===t.id);s(n===void 0?{...o,modelId:t.id}:{...o,modelId:t.id,profileId:n.id})},l=e=>{let t=o.profiles.find(({id:t})=>t===e);if(t===void 0)return;let n=o.models.find(({id:e})=>e===t.id);s(n===void 0?{...o,profileId:t.id}:{...o,modelId:n.id,profileId:t.id})},u=t?.status===`ready`?t:null;return(0,D.jsx)(`div`,{"data-relay-product-dock-chrome":``,style:{insetBlockEnd:`max(var(--rly-space-16), env(safe-area-inset-bottom, 0px))`,insetInlineEnd:`max(var(--rly-space-16), env(safe-area-inset-right, 0px))`,position:`fixed`,zIndex:80},children:(0,D.jsx)(Oe,{children:(0,D.jsx)(E.Suspense,{fallback:null,children:(0,D.jsx)(De,{context:t?.context??e.context,defaultOpen:!1,footer:u===null?void 0:(0,D.jsx)(Pe,{registration:u,selection:o},r),selection:{model:{onValueChange:c,options:o.models.map(({id:e,label:t})=>({label:t,value:e})),value:o.modelId},profile:{onValueChange:l,options:o.profiles.map(({id:e,label:t})=>({label:t,value:e})),value:o.profileId}},state:Fe(e,t)})})})})},$=(e,t)=>e.accountLabel===t||e.accountLabel.endsWith(` · AWS ${t}`),ze=(e,t)=>{switch(e._tag){case`found`:return t===void 0||$(e.candidate,t)?[e.candidate]:[];case`ambiguous`:return t===void 0?e.candidates:e.candidates.filter(e=>$(e,t));case`account-identity-unavailable`:case`not-found`:return[]}},Be=(e,t)=>{let n=ze(e,t);return n.length===1?n[0]:void 0},Ve=e=>{let t=x(M)(e);if(b(t))throw new Z({boundary:`selector`});return t.success},He=e=>{let t=x(Y)(e);if(b(t))throw new Z({boundary:`conversation`});return t.success},Ue=Ve({modelId:`configured-default`,models:[{id:`configured-default`,label:`Configured default`}],profileId:`read-only-review`,profiles:[{id:`read-only-review`,label:`Read-only PR review`}]});export{Be as a,Ee as c,xe as d,we as f,X as h,Ve as i,Te as l,be as m,Ue as n,Re as o,ye as p,He as r,Se as s,ze as t,Ce as u};
3
+ //# sourceMappingURL=controlCenterRelayDock-D7375HPG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../relay-product/dist/model.js","../../../../relay-product/dist/conversation.js","../../../../relay-product/dist/dock.js","../../../src/client/controlCenterRelayDock.tsx"],"sourcesContent":["import * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nconst SelectorId = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200)).pipe(Schema.brand(\"RelaySelectorId\"));\nexport const RelaySelectorOption = Schema.Struct({\n id: SelectorId,\n label: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200))\n});\nconst RelaySelectorStateInput = Schema.Struct({\n modelId: SelectorId,\n models: Schema.Array(RelaySelectorOption).check(Schema.isMinLength(1)),\n profileId: SelectorId,\n profiles: Schema.Array(RelaySelectorOption).check(Schema.isMinLength(1))\n});\nconst hasUniqueOptionIds = (options) => new Set(options.map(({ id }) => id)).size === options.length;\nexport const RelaySelectorState = RelaySelectorStateInput.check(Schema.makeFilter(({ profiles }) => hasUniqueOptionIds(profiles), {\n expected: \"unique Relay profile option identifiers\"\n}), Schema.makeFilter(({ models }) => hasUniqueOptionIds(models), {\n expected: \"unique Relay model option identifiers\"\n}), Schema.makeFilter(({ profileId, profiles }) => profiles.some(({ id }) => id === profileId), {\n expected: \"a selected Relay profile present in the profile options\"\n}), Schema.makeFilter(({ modelId, models }) => models.some(({ id }) => id === modelId), {\n expected: \"a selected Relay model present in the model options\"\n}));\nexport const RelayDockState = Schema.TaggedUnion({\n collapsed: {},\n expanded: {}\n});\nexport const RelayState = Schema.Struct({\n dock: RelayDockState,\n selection: RelaySelectorState\n});\nexport class InvalidRelaySelectorState extends Schema.TaggedError()(\"InvalidRelaySelectorState\", {\n reason: Schema.Literals([\n \"duplicate-model\",\n \"duplicate-profile\",\n \"invalid-input\",\n \"model-not-found\",\n \"profile-not-found\"\n ])\n}) {\n}\nconst decodeSelectorStateInput = Schema.decodeUnknownEffect(RelaySelectorStateInput);\n/** Decode the visible selector state and initialize the product-owned dock as collapsed. */\nexport const makeInitialRelayState = Effect.fn(\"RelayProduct.makeInitialRelayState\")(function* (input) {\n const selection = yield* decodeSelectorStateInput(input).pipe(Effect.mapError(() => new InvalidRelaySelectorState({ reason: \"invalid-input\" })));\n if (!hasUniqueOptionIds(selection.profiles)) {\n return yield* new InvalidRelaySelectorState({ reason: \"duplicate-profile\" });\n }\n if (!hasUniqueOptionIds(selection.models)) {\n return yield* new InvalidRelaySelectorState({ reason: \"duplicate-model\" });\n }\n if (!selection.profiles.some(({ id }) => id === selection.profileId)) {\n return yield* new InvalidRelaySelectorState({ reason: \"profile-not-found\" });\n }\n if (!selection.models.some(({ id }) => id === selection.modelId)) {\n return yield* new InvalidRelaySelectorState({ reason: \"model-not-found\" });\n }\n return RelayState.make({\n dock: RelayDockState.cases.collapsed.make({}),\n selection: RelaySelectorState.make(selection)\n });\n});\n//# sourceMappingURL=model.js.map","import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\nimport { RelaySelectorState } from \"./model.js\";\nconst trimmedIdentifier = (maximumLength) => Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(maximumLength));\nconst canonicalUuid = (brand) => Schema.String.check(Schema.isUUID(7), Schema.isPattern(/^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u, {\n expected: \"a canonical lowercase UUID v7\"\n})).pipe(Schema.brand(brand));\nexport const AgenticProduct = Schema.Literals([\"codecommit\", \"control-center\"]);\nexport const RelayProductOperation = Schema.Literals([\n \"continue-pull-request-conversation\",\n \"locate-pull-request-conversation\"\n]);\nconst PrincipalId = trimmedIdentifier(200).pipe(Schema.brand(\"RelayPrincipalId\"));\nconst WorkspaceId = canonicalUuid(\"RelayWorkspaceId\");\nconst PluginConnectionId = canonicalUuid(\"RelayPluginConnectionId\");\nconst EntityId = canonicalUuid(\"RelayEntityId\");\nconst RepositoryName = trimmedIdentifier(1_000).pipe(Schema.brand(\"RelayRepositoryName\"));\nconst PullRequestId = trimmedIdentifier(200).pipe(Schema.brand(\"RelayPullRequestId\"));\nconst AccountId = trimmedIdentifier(200).pipe(Schema.brand(\"RelayAccountId\"));\nconst Region = trimmedIdentifier(100).pipe(Schema.brand(\"RelayRegion\"));\nconst ProductPath = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(4_096), Schema.isPattern(/^\\/(?!\\/)/u, { expected: \"an application-owned absolute path\" }));\nexport const ProductAuthorization = Schema.TaggedUnion({\n codecommit: {\n principalId: PrincipalId\n },\n \"control-center\": {\n principalId: PrincipalId,\n workspaceId: WorkspaceId\n }\n});\n/** Provider identity a host agent may use to find one PR conversation. */\nexport const PullRequestConversationLocator = Schema.Struct({\n accountId: Schema.optionalKey(AccountId),\n provider: Schema.Literal(\"codecommit\"),\n pullRequestId: PullRequestId,\n region: Region,\n repositoryName: RepositoryName\n});\nconst ControlCenterThreadIdentity = Schema.Struct({\n pluginConnectionId: PluginConnectionId,\n pullRequestId: PullRequestId,\n repositoryName: RepositoryName,\n workspaceId: WorkspaceId\n});\nconst CodeCommitThreadIdentity = Schema.Struct({\n accountId: AccountId,\n pullRequestId: PullRequestId,\n region: Region,\n repositoryName: RepositoryName\n});\nconst ControlCenterPullRequestRoute = Schema.Struct({\n entityId: EntityId,\n href: ProductPath\n});\nconst CodeCommitPullRequestRoute = Schema.Struct({\n accountId: AccountId,\n href: ProductPath,\n /** Credential/account alias used by the browser URL; accountId stays canonical. */\n pullRequestId: PullRequestId,\n routeAccountId: Schema.optionalKey(AccountId)\n});\n/** Stable product-qualified identity. Head revisions never participate in thread identity. */\nexport const PullRequestThreadIdentity = Schema.TaggedUnion({\n codecommit: {\n ...CodeCommitThreadIdentity.fields\n },\n \"control-center\": {\n ...ControlCenterThreadIdentity.fields\n }\n});\n/** Durable thread identity, exact product route, and explicit Relay selection for one PR. */\nexport const PullRequestConversation = Schema.TaggedUnion({\n codecommit: {\n route: CodeCommitPullRequestRoute,\n selection: RelaySelectorState,\n thread: CodeCommitThreadIdentity\n },\n \"control-center\": {\n route: ControlCenterPullRequestRoute,\n selection: RelaySelectorState,\n thread: ControlCenterThreadIdentity\n }\n}).check(Schema.makeFilter((conversation) => {\n switch (conversation._tag) {\n case \"codecommit\":\n return (conversation.route.accountId === conversation.thread.accountId &&\n conversation.route.pullRequestId === conversation.thread.pullRequestId &&\n conversation.route.href ===\n `/accounts/${encodeURIComponent(conversation.route.routeAccountId ?? conversation.route.accountId)}/prs/${encodeURIComponent(conversation.route.pullRequestId)}`);\n case \"control-center\":\n return (conversation.route.href ===\n `/w/${conversation.thread.workspaceId}/items/${conversation.route.entityId}`);\n }\n}, { expected: \"a product-qualified thread paired with its exact pull-request route\" }));\nexport const pullRequestThreadIdentity = (conversation) => {\n switch (conversation._tag) {\n case \"codecommit\":\n return PullRequestThreadIdentity.cases.codecommit.make(conversation.thread);\n case \"control-center\":\n return PullRequestThreadIdentity.cases[\"control-center\"].make(conversation.thread);\n }\n};\nexport const PullRequestContinuationMessage = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(8_000)).pipe(Schema.brand(\"PullRequestContinuationMessage\"));\nexport const ContinuePullRequestConversationRequest = Schema.Struct({\n conversation: PullRequestConversation,\n message: PullRequestContinuationMessage,\n selection: RelaySelectorState\n});\nconst ContinuationMessageId = trimmedIdentifier(200).pipe(Schema.brand(\"RelayContinuationMessageId\"));\nexport const PullRequestConversationContinuation = Schema.Struct({\n messageId: ContinuationMessageId,\n thread: PullRequestThreadIdentity\n});\nexport class RelayAuthenticationRequired extends Schema.TaggedError()(\"RelayAuthenticationRequired\", {\n operation: RelayProductOperation,\n product: AgenticProduct\n}) {\n}\nexport class RelayAuthorizationDenied extends Schema.TaggedError()(\"RelayAuthorizationDenied\", {\n operation: RelayProductOperation,\n product: AgenticProduct\n}) {\n}\nexport class RelayAuthenticationUnavailable extends Schema.TaggedError()(\"RelayAuthenticationUnavailable\", {\n operation: RelayProductOperation,\n product: AgenticProduct\n}) {\n}\nexport class PullRequestConversationNotFound extends Schema.TaggedError()(\"PullRequestConversationNotFound\", {\n product: AgenticProduct,\n pullRequestId: PullRequestId,\n repositoryName: RepositoryName\n}) {\n}\nexport class PullRequestConversationAmbiguous extends Schema.TaggedError()(\"PullRequestConversationAmbiguous\", {\n matches: Schema.Int.check(Schema.isGreaterThan(1)),\n product: AgenticProduct,\n pullRequestId: PullRequestId,\n repositoryName: RepositoryName\n}) {\n}\nexport class PullRequestConversationLookupFailed extends Schema.TaggedError()(\"PullRequestConversationLookupFailed\", {\n product: AgenticProduct\n}) {\n}\nexport class PullRequestConversationRedirectFailed extends Schema.TaggedError()(\"PullRequestConversationRedirectFailed\", {\n href: ProductPath,\n product: AgenticProduct\n}) {\n}\nexport class PullRequestConversationContinuationRejected extends Schema.TaggedError()(\"PullRequestConversationContinuationRejected\", {\n product: AgenticProduct,\n reason: Schema.Literals([\"conversation-busy\", \"selection-unavailable\", \"thread-not-found\"]),\n thread: PullRequestThreadIdentity\n}) {\n}\nexport class PullRequestConversationContinuationFailed extends Schema.TaggedError()(\"PullRequestConversationContinuationFailed\", {\n product: AgenticProduct,\n thread: PullRequestThreadIdentity\n}) {\n}\nexport class RelayProductAdapterContractError extends Schema.TaggedError()(\"RelayProductAdapterContractError\", {\n actualProduct: AgenticProduct,\n expectedProduct: AgenticProduct,\n operation: RelayProductOperation\n}) {\n}\nexport class RelayProductContinuationReceiptMismatch extends Schema.TaggedError()(\"RelayProductContinuationReceiptMismatch\", {\n actualThread: PullRequestThreadIdentity,\n expectedThread: PullRequestThreadIdentity\n}) {\n}\nexport class RelayProduct extends Context.Service()(\"@knpkv/relay-product/RelayProduct\") {\n}\nconst requireProduct = (expectedProduct, actualProduct, operation) => expectedProduct === actualProduct\n ? Effect.void\n : new RelayProductAdapterContractError({ actualProduct, expectedProduct, operation });\nconst samePullRequestThread = (left, right) => {\n if (left._tag !== right._tag)\n return false;\n switch (left._tag) {\n case \"codecommit\":\n return (right._tag === \"codecommit\" &&\n left.accountId === right.accountId &&\n left.pullRequestId === right.pullRequestId &&\n left.region === right.region &&\n left.repositoryName === right.repositoryName);\n case \"control-center\":\n return (right._tag === \"control-center\" &&\n left.pluginConnectionId === right.pluginConnectionId &&\n left.pullRequestId === right.pullRequestId &&\n left.repositoryName === right.repositoryName &&\n left.workspaceId === right.workspaceId);\n }\n};\n/** One orchestration path shared by Control Center and CodeCommit product ports. */\nexport const makeRelayProductAdapter = (port) => {\n const openPullRequestConversation = Effect.fn(\"RelayProduct.openPullRequestConversation\")(function* (locator) {\n const operation = \"locate-pull-request-conversation\";\n const authorization = yield* port.authorize(operation);\n yield* requireProduct(port.product, authorization._tag, operation);\n const conversation = yield* port.locatePullRequestConversation(authorization, locator);\n yield* requireProduct(port.product, conversation._tag, operation);\n yield* port.redirectToPullRequest(conversation);\n return conversation;\n });\n const continuePullRequestConversation = Effect.fn(\"RelayProduct.continuePullRequestConversation\")(function* (request) {\n const operation = \"continue-pull-request-conversation\";\n const authorization = yield* port.authorize(operation);\n yield* requireProduct(port.product, authorization._tag, operation);\n yield* requireProduct(port.product, request.conversation._tag, operation);\n const receipt = yield* port.continuePullRequestConversation(authorization, request);\n const expectedThread = pullRequestThreadIdentity(request.conversation);\n if (!samePullRequestThread(expectedThread, receipt.thread)) {\n return yield* new RelayProductContinuationReceiptMismatch({\n actualThread: receipt.thread,\n expectedThread\n });\n }\n return receipt;\n });\n return RelayProduct.of({ continuePullRequestConversation, openPullRequestConversation });\n};\nexport const layer = (port) => Layer.succeed(RelayProduct, makeRelayProductAdapter(port));\n//# sourceMappingURL=conversation.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as Cause from \"effect/Cause\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport { Component, lazy, Suspense, useCallback, useEffect, useRef, useState } from \"react\";\nimport { ContinuePullRequestConversationRequest, PullRequestConversationLocator, pullRequestThreadIdentity } from \"./conversation.js\";\nimport { RelayProductDockProvider, useRelayProductDockRegistration } from \"./registry.js\";\nexport class RelayProductDockInvariantViolation extends Data.TaggedError(\"RelayProductDockInvariantViolation\") {\n}\nconst LazyRelayDock = lazy(async () => {\n const patterns = await import(\"@knpkv/rly/patterns\");\n return { default: patterns.RelayDock };\n});\n/** Keep routed product content mounted when optional Relay chrome cannot load. */\nexport class RelayProductDockChromeBoundary extends Component {\n state = { failed: false };\n static getDerivedStateFromError(cause) {\n void cause;\n return { failed: true };\n }\n render() {\n return this.state.failed ? null : this.props.children;\n }\n}\nconst actionFailureDescription = (failure) => {\n switch (failure._tag) {\n case \"RelayAuthenticationRequired\":\n return \"Authenticate with this product before using its Relay conversations.\";\n case \"RelayAuthorizationDenied\":\n return \"This session cannot use Relay for pull-request conversations.\";\n case \"RelayAuthenticationUnavailable\":\n return \"The product authentication boundary is unavailable.\";\n case \"PullRequestConversationNotFound\":\n return `No Relay conversation matches ${failure.repositoryName} PR #${failure.pullRequestId}.`;\n case \"PullRequestConversationAmbiguous\":\n return `${String(failure.matches)} Relay conversations match this pull request; include its account.`;\n case \"PullRequestConversationLookupFailed\":\n return \"Relay could not search the product's pull-request conversations.\";\n case \"PullRequestConversationRedirectFailed\":\n return \"Relay found the conversation but could not open its exact pull-request page.\";\n case \"PullRequestConversationContinuationRejected\":\n return failure.reason === \"conversation-busy\"\n ? \"This pull-request conversation already has a run in progress.\"\n : failure.reason === \"selection-unavailable\"\n ? \"The selected Relay profile or model is no longer available.\"\n : \"This pull-request conversation no longer exists.\";\n case \"PullRequestConversationContinuationFailed\":\n return \"Relay could not continue this pull-request conversation.\";\n case \"RelayProductAdapterContractError\":\n return \"The active product does not own this pull-request conversation.\";\n case \"RelayProductContinuationReceiptMismatch\":\n return \"Relay returned a continuation receipt for another pull-request conversation.\";\n }\n};\nconst failureFromCause = (cause) => {\n const failure = cause.reasons.find(Cause.isFailReason);\n return failure === undefined\n ? \"Relay ended unexpectedly. No request was accepted.\"\n : actionFailureDescription(failure.error);\n};\nconst useRelayDockAction = () => {\n const [state, setState] = useState({ description: null, pending: false });\n const request = useRef(0);\n useEffect(() => () => {\n request.current += 1;\n }, []);\n const run = useCallback((effect) => {\n request.current += 1;\n const current = request.current;\n setState({ description: null, pending: true });\n void Effect.runPromiseExit(effect).then((exit) => {\n if (request.current !== current)\n return;\n setState(Exit.isSuccess(exit)\n ? { description: null, pending: false }\n : { description: failureFromCause(exit.cause), pending: false });\n });\n }, []);\n return [state, run];\n};\nconst HostConversationLocator = ({ host }) => {\n const [accountId, setAccountId] = useState(\"\");\n const [pullRequestId, setPullRequestId] = useState(\"\");\n const [region, setRegion] = useState(\"\");\n const [repositoryName, setRepositoryName] = useState(\"\");\n const [validation, setValidation] = useState(null);\n const [action, runAction] = useRelayDockAction();\n const submit = (event) => {\n event.preventDefault();\n const account = accountId.trim();\n const locatorInput = account.length === 0\n ? {\n provider: \"codecommit\",\n pullRequestId: pullRequestId.trim(),\n region: region.trim(),\n repositoryName: repositoryName.trim()\n }\n : {\n accountId: account,\n provider: \"codecommit\",\n pullRequestId: pullRequestId.trim(),\n region: region.trim(),\n repositoryName: repositoryName.trim()\n };\n const decoded = Schema.decodeUnknownResult(PullRequestConversationLocator)(locatorInput);\n if (Result.isFailure(decoded)) {\n setValidation(\"Enter a region, repository, and pull-request number.\");\n return;\n }\n setValidation(null);\n runAction(host.locatePullRequestConversation(decoded.success));\n };\n return (_jsxs(\"form\", { \"aria-label\": \"Find a pull request conversation\", onSubmit: submit, children: [_jsx(\"h2\", { children: \"Find a pull request conversation\" }), _jsx(\"p\", { children: \"Relay opens the exact product page before continuing a PR thread.\" }), _jsxs(\"label\", { children: [_jsx(\"span\", { children: \"Region\" }), _jsx(\"input\", { onChange: (event) => setRegion(event.currentTarget.value), value: region })] }), _jsxs(\"label\", { children: [_jsx(\"span\", { children: \"Repository\" }), _jsx(\"input\", { onChange: (event) => setRepositoryName(event.currentTarget.value), value: repositoryName })] }), _jsxs(\"label\", { children: [_jsx(\"span\", { children: \"Pull request\" }), _jsx(\"input\", { inputMode: \"numeric\", onChange: (event) => setPullRequestId(event.currentTarget.value), value: pullRequestId })] }), _jsxs(\"label\", { children: [_jsx(\"span\", { children: \"Account (optional)\" }), _jsx(\"input\", { onChange: (event) => setAccountId(event.currentTarget.value), value: accountId })] }), validation === null && action.description === null ? null : (_jsx(\"p\", { \"aria-live\": \"assertive\", role: \"alert\", children: validation ?? action.description })), _jsx(\"button\", { disabled: action.pending, type: \"submit\", children: action.pending ? \"Opening PR conversation…\" : \"Open PR conversation\" })] }));\n};\nconst ThreadMessages = ({ messages }) => messages.length === 0 ? (_jsx(\"p\", { children: \"No Relay turns yet. The first message starts this PR's durable thread.\" })) : (_jsx(\"ol\", { \"aria-label\": \"Pull request conversation\", children: messages.map((message) => (_jsxs(\"li\", { \"data-relay-message-role\": message.role, children: [_jsx(\"strong\", { children: message.role === \"relay\" ? \"Relay\" : message.role === \"operator\" ? \"You\" : \"System\" }), _jsx(\"p\", { children: message.text })] }, message.id))) }));\nexport const relaySelectionMatchesRegistration = (selection, registration) => registration.selection.profiles.some(({ id }) => id === selection.profileId) &&\n registration.selection.models.some(({ id }) => id === selection.modelId);\nconst PullRequestContinuation = ({ registration, selection }) => {\n const [message, setMessage] = useState(\"\");\n const [validation, setValidation] = useState(null);\n const [action, runAction] = useRelayDockAction();\n const selectionMatchesRegistration = relaySelectionMatchesRegistration(selection, registration);\n const submit = (event) => {\n event.preventDefault();\n if (!selectionMatchesRegistration) {\n setValidation(\"Rerun Relay with the selected profile or model before continuing this PR thread.\");\n return;\n }\n const decoded = Schema.decodeUnknownResult(ContinuePullRequestConversationRequest)({\n conversation: registration.conversation,\n message: message.trim(),\n selection\n });\n if (Result.isFailure(decoded)) {\n setValidation(\"Enter a pull-request request of 8,000 characters or fewer.\");\n return;\n }\n setValidation(null);\n runAction(registration\n .continuePullRequestConversation(decoded.success)\n .pipe(Effect.tap(() => Effect.sync(() => setMessage(\"\")))));\n };\n return (_jsxs(\"form\", { \"aria-label\": \"Continue pull request conversation\", onSubmit: submit, children: [_jsxs(\"label\", { children: [_jsx(\"span\", { children: \"Continue this PR thread\" }), _jsx(\"textarea\", { maxLength: 8_000, onChange: (event) => setMessage(event.currentTarget.value), placeholder: \"Ask Relay to verify one concrete part of this pull request\\u2026\", rows: 3, value: message })] }), validation === null && action.description === null ? null : (_jsx(\"p\", { \"aria-live\": \"assertive\", role: \"alert\", children: validation ?? action.description })), !selectionMatchesRegistration && validation === null ? (_jsx(\"p\", { \"aria-live\": \"polite\", children: \"Rerun Relay with the selected profile or model before continuing this PR thread.\" })) : null, _jsx(\"button\", { disabled: action.pending || message.trim().length === 0 || !selectionMatchesRegistration, type: \"submit\", children: action.pending ? \"Continuing on this PR…\" : \"Continue on this PR\" })] }));\n};\nconst relayDockState = (host, registration) => {\n if (registration === null) {\n return { content: _jsx(HostConversationLocator, { host: host }), status: \"ready\" };\n }\n switch (registration.status) {\n case \"loading\":\n return {\n description: \"Loading the durable conversation for this pull request.\",\n status: \"loading\",\n title: \"Loading PR thread\"\n };\n case \"error\":\n return { description: registration.description, status: \"error\", title: \"PR thread unavailable\" };\n case \"unavailable\":\n return { description: registration.description, status: \"unavailable\", title: \"Relay unavailable for this PR\" };\n case \"ready\":\n return { content: _jsx(ThreadMessages, { messages: registration.messages }), status: \"ready\" };\n }\n};\nconst selectionIdentity = (registration) => registration === null ? \"host\" : JSON.stringify(pullRequestThreadIdentity(registration.conversation));\nconst selectorRevision = (selection) => JSON.stringify({\n modelId: selection.modelId,\n models: selection.models,\n profileId: selection.profileId,\n profiles: selection.profiles\n});\n/** Own one collapsed Relay dock while application pages register exact PR threads underneath it. */\nexport const RelayProductDock = ({ children, host }) => {\n return (_jsxs(RelayProductDockProvider, { children: [children, _jsx(RelayProductDockChrome, { host: host })] }));\n};\n/** Render the chrome for a registration provider; keep this component lazy at product route boundaries. */\nexport const RelayProductDockChrome = ({ host }) => {\n const registration = useRelayProductDockRegistration();\n const activeSelection = registration?.selection ?? host.selection;\n const identity = selectionIdentity(registration);\n const activeSelectorRevision = selectorRevision(activeSelection);\n const [selection, setSelection] = useState(activeSelection);\n useEffect(() => setSelection(activeSelection), [activeSelectorRevision, identity]);\n const setModel = (value) => {\n const option = selection.models.find(({ id }) => id === value);\n if (option === undefined)\n return;\n const pairedProfile = selection.profiles.find(({ id }) => id === option.id);\n setSelection(pairedProfile === undefined\n ? { ...selection, modelId: option.id }\n : { ...selection, modelId: option.id, profileId: pairedProfile.id });\n };\n const setProfile = (value) => {\n const option = selection.profiles.find(({ id }) => id === value);\n if (option === undefined)\n return;\n const pairedModel = selection.models.find(({ id }) => id === option.id);\n setSelection(pairedModel === undefined\n ? { ...selection, profileId: option.id }\n : { ...selection, modelId: pairedModel.id, profileId: option.id });\n };\n const readyRegistration = registration?.status === \"ready\" ? registration : null;\n return (_jsx(\"div\", { \"data-relay-product-dock-chrome\": \"\", style: {\n insetBlockEnd: \"max(var(--rly-space-16), env(safe-area-inset-bottom, 0px))\",\n insetInlineEnd: \"max(var(--rly-space-16), env(safe-area-inset-right, 0px))\",\n position: \"fixed\",\n zIndex: 80\n }, children: _jsx(RelayProductDockChromeBoundary, { children: _jsx(Suspense, { fallback: null, children: _jsx(LazyRelayDock, { context: registration?.context ?? host.context, defaultOpen: false, footer: readyRegistration === null ? undefined : (_jsx(PullRequestContinuation, { registration: readyRegistration, selection: selection }, identity)), selection: {\n model: {\n onValueChange: setModel,\n options: selection.models.map(({ id, label }) => ({ label, value: id })),\n value: selection.modelId\n },\n profile: {\n onValueChange: setProfile,\n options: selection.profiles.map(({ id, label }) => ({ label, value: id })),\n value: selection.profileId\n }\n }, state: relayDockState(host, registration) }) }) }) }));\n};\nexport { RelayProductDockProvider, RelayProductDockProviderMissing, useRelayProductDockRegistration, useRelayPullRequestDock } from \"./registry.js\";\n//# sourceMappingURL=dock.js.map","import { PullRequestConversation } from \"@knpkv/relay-product/conversation\"\nimport { RelayProductDockInvariantViolation } from \"@knpkv/relay-product\"\nimport { RelaySelectorState } from \"@knpkv/relay-product/model\"\nimport * as Result from \"effect/Result\"\nimport * as Schema from \"effect/Schema\"\n\nimport type { OpenPullRequestCandidate, OpenPullRequestResolution } from \"./openPullRequest/openPullRequest.js\"\n\n/** Enforce an optional browser-safe account label for every resolver outcome. */\nconst candidateMatchesAccount = (candidate: OpenPullRequestCandidate, accountId: string): boolean =>\n candidate.accountLabel === accountId || candidate.accountLabel.endsWith(` · AWS ${accountId}`)\n\n/** Apply the host account constraint before classifying a locator result. */\nexport const controlCenterRelayCandidatesForAccount = (\n resolution: OpenPullRequestResolution,\n accountId: string | undefined\n): ReadonlyArray<OpenPullRequestCandidate> => {\n switch (resolution._tag) {\n case \"found\":\n return accountId === undefined || candidateMatchesAccount(resolution.candidate, accountId)\n ? [resolution.candidate]\n : []\n case \"ambiguous\":\n return accountId === undefined\n ? resolution.candidates\n : resolution.candidates.filter((candidate) => candidateMatchesAccount(candidate, accountId))\n case \"account-identity-unavailable\":\n case \"not-found\":\n return []\n }\n}\n\nexport const selectControlCenterRelayCandidate = (\n resolution: OpenPullRequestResolution,\n accountId: string | undefined\n): OpenPullRequestCandidate | undefined => {\n const matches = controlCenterRelayCandidatesForAccount(resolution, accountId)\n return matches.length === 1 ? matches[0] : undefined\n}\n\nexport const decodeControlCenterRelaySelector = (input: typeof RelaySelectorState.Encoded): RelaySelectorState => {\n const decoded = Schema.decodeUnknownResult(RelaySelectorState)(input)\n if (Result.isFailure(decoded)) throw new RelayProductDockInvariantViolation({ boundary: \"selector\" })\n return decoded.success\n}\n\nexport const decodeControlCenterRelayConversation = (\n input: typeof PullRequestConversation.Encoded\n): PullRequestConversation => {\n const decoded = Schema.decodeUnknownResult(PullRequestConversation)(input)\n if (Result.isFailure(decoded)) throw new RelayProductDockInvariantViolation({ boundary: \"conversation\" })\n return decoded.success\n}\n\nexport const controlCenterRelayHostSelection = decodeControlCenterRelaySelector({\n modelId: \"configured-default\",\n models: [{ id: \"configured-default\", label: \"Configured default\" }],\n profileId: \"read-only-review\",\n profiles: [{ id: \"read-only-review\", label: \"Read-only PR review\" }]\n})\n"],"file":"controlCenterRelayDock-D7375HPG.js"}
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/openPullRequest-BMlmibLP.js","assets/agent-api-CUWP1qs8.js","assets/client-D3WRV6yl.js","assets/Domain-cJ5aJFpE.js","assets/authenticatedMutationClient-Bc_-Jpbo.js"])))=>i.map(i=>d[i]);
2
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./react-CwJFpaho.js";import{o as n}from"./hooks-K-sIfGqH.js";import{t as r}from"./preload-helper-Czpn1I53.js";import{t as i}from"./jsx-runtime-NZYk81nU.js";import{p as a}from"./index-BVikncBH.js";import{Li as o,mi as s,tr as c,xi as l}from"./agent-api-CUWP1qs8.js";import{t as u}from"./Domain-cJ5aJFpE.js";import{n as d}from"./workspaceEntityPaths-xAl2jRFm.js";import{a as f,d as p,f as m,m as h,n as g,o as _,p as v,s as y,t as b,u as x}from"./controlCenterRelayDock-D7375HPG.js";var S=e(t(),1),C=i(),w=()=>{let e=a(),t=n(),i=(0,S.useMemo)(()=>({context:[{id:`product`,label:`Product`,value:`Control Center`}],locatePullRequestConversation:s(`ControlCenterRelayDock.locatePullRequestConversation`)(function*(n){if(e.state._tag!==`authenticated`)return yield*new v({operation:`locate-pull-request-conversation`,product:`control-center`});let i=e.state.session;if(i.permission!==`workspace-owner`&&i.permission!==`workspace-approver`)return yield*new h({operation:`locate-pull-request-conversation`,product:`control-center`});let a=yield*c(u)({pullRequestId:n.pullRequestId,region:n.region,repositoryName:n.repositoryName}).pipe(l(()=>new x({product:`control-center`}))),s=yield*o({try:()=>r(()=>import(`./openPullRequest-BMlmibLP.js`),__vite__mapDeps([0,1,2,3,4])),catch:()=>new x({product:`control-center`})}),g=yield*o({try:e=>s.browserOpenPullRequestTransport.resolve(a,e),catch:()=>new x({product:`control-center`})}),_=f(g,n.accountId);if(_!==void 0){let e=d(i.workspaceId,_.entityId);return yield*o({try:async()=>{await t(e)},catch:()=>new m({href:e,product:`control-center`})})}if(g._tag===`ambiguous`){let e=b(g,n.accountId);return n.accountId!==void 0&&e.length===0?yield*new p({product:`control-center`,pullRequestId:n.pullRequestId,repositoryName:n.repositoryName}):yield*new y({matches:e.length,product:`control-center`,pullRequestId:n.pullRequestId,repositoryName:n.repositoryName})}return g._tag===`account-identity-unavailable`?yield*new x({product:`control-center`}):yield*new p({product:`control-center`,pullRequestId:n.pullRequestId,repositoryName:n.repositoryName})}),product:`control-center`,selection:g}),[e.state,t]);return(0,C.jsx)(_,{host:i})};export{w as ControlCenterRelayDockChrome};
3
+ //# sourceMappingURL=controlCenterRelayDockChrome-B7jSUI3t.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":";ujBA0Ba,MAAmD,CAC9D,IAAM,EAAiB,EAAkB,EACnC,EAAW,EAAY,EACvB,KAAO,gBACJ,CACL,QAAS,CAAC,CAAE,GAAI,UAAW,MAAO,UAAW,MAAO,gBAAiB,CAAC,EACtE,8BAA+B,EAAU,sDAAsD,CAAC,CAAC,UAC/F,EACA,CACA,GAAI,EAAe,MAAM,OAAS,gBAChC,OAAO,MAAO,IAAI,EAA4B,CAC5C,UAAW,mCACX,QAAS,gBACX,CAAC,EAEH,IAAM,EAAU,EAAe,MAAM,QACrC,GAAI,EAAQ,aAAe,mBAAqB,EAAQ,aAAe,qBACrE,OAAO,MAAO,IAAI,EAAyB,CACzC,UAAW,mCACX,QAAS,gBACX,CAAC,EAEH,IAAM,EAAkB,MAAO,EAA2B,CAA6C,CAAC,CAAC,CACvG,cAAe,EAAQ,cACvB,OAAQ,EAAQ,OAChB,eAAgB,EAAQ,cAC1B,CAAC,CAAC,CAAC,KACD,MAEI,IAAI,EAAoC,CAAE,QAAS,gBAAiB,CAAC,CACzE,CACF,EACM,EAAkB,MAAO,EAAkB,CAC/C,cAAW,OAAO,+DAClB,UACE,IAAI,EAAoC,CAAE,QAAS,gBAAiB,CAAC,CACzE,CAAC,EACK,EAAa,MAAO,EAAkB,CAC1C,IAAM,GAAW,EAAgB,gCAAgC,QAAQ,EAAiB,CAAM,EAChG,UACE,IAAI,EAAoC,CAAE,QAAS,gBAAiB,CAAC,CACzE,CAAC,EACK,EAAY,EAAkC,EAAY,EAAQ,SAAS,EACjF,GAAI,IAAc,OAAW,CAC3B,IAAM,EAAO,EAAoB,EAAQ,YAAa,EAAU,QAAQ,EACxE,OAAO,MAAO,EAAkB,CAC9B,IAAK,SAAY,CACf,MAAM,EAAS,CAAI,CACrB,EACA,UACE,IAAI,EAAsC,CAAE,OAAM,QAAS,gBAAiB,CAAC,CACjF,CAAC,CACH,CACA,GAAI,EAAW,OAAS,YAAa,CACnC,IAAM,EAAU,EAAuC,EAAY,EAAQ,SAAS,EAQpF,OAPI,EAAQ,YAAc,QAAa,EAAQ,SAAW,EACjD,MAAO,IAAI,EAAgC,CAChD,QAAS,iBACT,cAAe,EAAQ,cACvB,eAAgB,EAAQ,cAC1B,CAAC,EAEI,MAAO,IAAI,EAAiC,CACjD,QAAS,EAAQ,OACjB,QAAS,iBACT,cAAe,EAAQ,cACvB,eAAgB,EAAQ,cAC1B,CAAC,CACH,CAIA,OAHI,EAAW,OAAS,+BACf,MAAO,IAAI,EAAoC,CAAE,QAAS,gBAAiB,CAAC,EAE9E,MAAO,IAAI,EAAgC,CAChD,QAAS,iBACT,cAAe,EAAQ,cACvB,eAAgB,EAAQ,cAC1B,CAAC,CACH,CAAC,EACD,QAAS,iBACT,UAAW,CACb,GACA,CAAC,EAAe,MAAO,CAAQ,CACjC,EACA,OAAO,SAAC,EAAD,CAA8B,MAAO,EAC9C","names":[],"ignoreList":[],"sources":["../../../src/client/controlCenterRelayDockChrome.tsx"],"sourcesContent":["import {\n PullRequestConversationAmbiguous,\n type PullRequestConversationLocator,\n PullRequestConversationLookupFailed,\n PullRequestConversationNotFound,\n PullRequestConversationRedirectFailed,\n RelayAuthenticationRequired,\n RelayAuthorizationDenied,\n RelayProductDockChrome,\n type RelayProductDockHost\n} from \"@knpkv/relay-product\"\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\nimport { type ReactElement, useMemo } from \"react\"\nimport { useNavigate } from \"react-router\"\n\nimport * as CodeCommitDomain from \"@knpkv/codecommit-core/Domain.js\"\nimport { useBrowserSession } from \"./BrowserSession.js\"\nimport {\n controlCenterRelayCandidatesForAccount,\n controlCenterRelayHostSelection,\n selectControlCenterRelayCandidate\n} from \"./controlCenterRelayDock.js\"\nimport { workspaceEntityPath } from \"./workspaceEntityPaths.js\"\n\n/** Install Control Center's authenticated resolver behind the shared Relay chrome. */\nexport const ControlCenterRelayDockChrome = (): ReactElement => {\n const browserSession = useBrowserSession()\n const navigate = useNavigate()\n const host = useMemo<RelayProductDockHost>(\n () => ({\n context: [{ id: \"product\", label: \"Product\", value: \"Control Center\" }],\n locatePullRequestConversation: Effect.fn(\"ControlCenterRelayDock.locatePullRequestConversation\")(function* (\n locator: PullRequestConversationLocator\n ) {\n if (browserSession.state._tag !== \"authenticated\") {\n return yield* new RelayAuthenticationRequired({\n operation: \"locate-pull-request-conversation\",\n product: \"control-center\"\n })\n }\n const session = browserSession.state.session\n if (session.permission !== \"workspace-owner\" && session.permission !== \"workspace-approver\") {\n return yield* new RelayAuthorizationDenied({\n operation: \"locate-pull-request-conversation\",\n product: \"control-center\"\n })\n }\n const providerLocator = yield* Schema.decodeUnknownEffect(CodeCommitDomain.CodeCommitPullRequestLocator)({\n pullRequestId: locator.pullRequestId,\n region: locator.region,\n repositoryName: locator.repositoryName\n }).pipe(\n Effect.mapError(\n (): PullRequestConversationLookupFailed =>\n new PullRequestConversationLookupFailed({ product: \"control-center\" })\n )\n )\n const openPullRequest = yield* Effect.tryPromise({\n try: () => import(\"./openPullRequest/openPullRequest.js\"),\n catch: (): PullRequestConversationLookupFailed =>\n new PullRequestConversationLookupFailed({ product: \"control-center\" })\n })\n const resolution = yield* Effect.tryPromise({\n try: (signal) => openPullRequest.browserOpenPullRequestTransport.resolve(providerLocator, signal),\n catch: (): PullRequestConversationLookupFailed =>\n new PullRequestConversationLookupFailed({ product: \"control-center\" })\n })\n const candidate = selectControlCenterRelayCandidate(resolution, locator.accountId)\n if (candidate !== undefined) {\n const href = workspaceEntityPath(session.workspaceId, candidate.entityId)\n return yield* Effect.tryPromise({\n try: async () => {\n await navigate(href)\n },\n catch: (): PullRequestConversationRedirectFailed =>\n new PullRequestConversationRedirectFailed({ href, product: \"control-center\" })\n })\n }\n if (resolution._tag === \"ambiguous\") {\n const matches = controlCenterRelayCandidatesForAccount(resolution, locator.accountId)\n if (locator.accountId !== undefined && matches.length === 0) {\n return yield* new PullRequestConversationNotFound({\n product: \"control-center\",\n pullRequestId: locator.pullRequestId,\n repositoryName: locator.repositoryName\n })\n }\n return yield* new PullRequestConversationAmbiguous({\n matches: matches.length,\n product: \"control-center\",\n pullRequestId: locator.pullRequestId,\n repositoryName: locator.repositoryName\n })\n }\n if (resolution._tag === \"account-identity-unavailable\") {\n return yield* new PullRequestConversationLookupFailed({ product: \"control-center\" })\n }\n return yield* new PullRequestConversationNotFound({\n product: \"control-center\",\n pullRequestId: locator.pullRequestId,\n repositoryName: locator.repositoryName\n })\n }),\n product: \"control-center\",\n selection: controlCenterRelayHostSelection\n }),\n [browserSession.state, navigate]\n )\n return <RelayProductDockChrome host={host} />\n}\n"],"file":"controlCenterRelayDockChrome-B7jSUI3t.js"}