@shipit-ai/cli 1.166.0 → 1.166.1

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 (163) hide show
  1. package/dist/tsconfig.build.tsbuildinfo +1 -1
  2. package/package.json +4 -2
  3. package/web/.next/BUILD_ID +1 -1
  4. package/web/.next/build-manifest.json +3 -3
  5. package/web/.next/fallback-build-manifest.json +3 -3
  6. package/web/.next/prerender-manifest.json +3 -3
  7. package/web/.next/required-server-files.js +2 -2
  8. package/web/.next/required-server-files.json +2 -2
  9. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  10. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  11. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  12. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  13. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  14. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  15. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  16. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  17. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  18. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  19. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  20. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  21. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  22. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  23. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  24. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  25. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  26. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  27. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  28. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  29. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  30. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  31. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  32. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  33. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  34. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  37. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  38. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  39. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  40. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  41. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  42. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  43. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  44. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  45. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  46. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  49. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  50. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  51. package/web/.next/server/app/_global-error.html +1 -1
  52. package/web/.next/server/app/_global-error.rsc +1 -1
  53. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  54. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  55. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  56. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  57. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  58. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  59. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  60. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
  62. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  63. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  65. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  66. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  68. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  69. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  71. package/web/.next/server/app/version/page.js.nft.json +1 -1
  72. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  74. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js +1 -1
  75. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js.map +1 -1
  76. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js +1 -1
  77. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js.map +1 -1
  78. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js +1 -1
  79. package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js.map +1 -1
  80. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  81. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  82. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  83. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  84. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  85. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  86. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  87. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  88. package/web/.next/server/chunks/ssr/[root-of-the-server]__045sv4b._.js +1 -1
  89. package/web/.next/server/chunks/ssr/[root-of-the-server]__045sv4b._.js.map +1 -1
  90. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js +1 -1
  91. package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js.map +1 -1
  92. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.js +1 -1
  93. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.js.map +1 -1
  94. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js +1 -1
  95. package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js.map +1 -1
  96. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r32z03._.js +1 -1
  97. package/web/.next/server/chunks/ssr/[root-of-the-server]__0r32z03._.js.map +1 -1
  98. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  99. package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js +1 -1
  100. package/web/.next/server/chunks/ssr/_01mq~sm._.js +1 -1
  101. package/web/.next/server/chunks/ssr/_01mq~sm._.js.map +1 -1
  102. package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
  103. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
  104. package/web/.next/server/chunks/ssr/{_0r~xv6k._.js → _0a-ddx-._.js} +2 -2
  105. package/web/.next/server/chunks/ssr/{_0r~xv6k._.js.map → _0a-ddx-._.js.map} +1 -1
  106. package/web/.next/server/chunks/ssr/{_09di2m~._.js → _0e4npv~._.js} +2 -2
  107. package/web/.next/server/chunks/ssr/{_09di2m~._.js.map → _0e4npv~._.js.map} +1 -1
  108. package/web/.next/server/chunks/ssr/_0jpbsh_._.js +1 -1
  109. package/web/.next/server/chunks/ssr/{_12104w0._.js → _0nvrqsj._.js} +2 -2
  110. package/web/.next/server/chunks/ssr/{_12104w0._.js.map → _0nvrqsj._.js.map} +1 -1
  111. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
  112. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
  113. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  114. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  115. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
  116. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
  117. package/web/.next/server/chunks/ssr/_109n-y4._.js +1 -1
  118. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js +1 -1
  119. package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js.map +1 -1
  120. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js +1 -1
  121. package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js +2 -2
  123. package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js.map +1 -1
  124. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js +1 -1
  125. package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js +1 -1
  127. package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js.map +1 -1
  128. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js +2 -2
  129. package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js.map +1 -1
  130. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js +1 -1
  131. package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js.map +1 -1
  132. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js +1 -1
  133. package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js.map +1 -1
  134. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js +1 -1
  135. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js +1 -1
  137. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js.map +1 -1
  138. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js +1 -1
  139. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js.map +1 -1
  140. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js +1 -1
  141. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  142. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  143. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  144. package/web/.next/server/middleware-build-manifest.js +3 -3
  145. package/web/.next/server/pages/500.html +1 -1
  146. package/web/.next/server/server-reference-manifest.js +1 -1
  147. package/web/.next/server/server-reference-manifest.json +49 -49
  148. package/web/.next/static/chunks/{13ryk8qc9y3qu.js → 00dg6gti40.3i.js} +1 -1
  149. package/web/.next/static/chunks/{0ntps8p7wo1re.js → 09dqgshddfxff.js} +1 -1
  150. package/web/.next/static/chunks/{121l3o3vd~hvn.js → 0_--5mgqukm__.js} +1 -1
  151. package/web/.next/static/chunks/{0rfap2l5xz_-p.js → 0_c5~n__lz4ks.js} +1 -1
  152. package/web/.next/static/chunks/{0fmbl3o08a~-h.js → 0awttldb-.7m..js} +1 -1
  153. package/web/.next/static/chunks/{16jcg65-2mxc..js → 0d-2jp.f._l2e.js} +1 -1
  154. package/web/.next/static/chunks/{01hf_nf2ge.tn.js → 0ist7260j__0m.js} +2 -2
  155. package/web/.next/static/chunks/{0b_anwzlzr9p7.js → 0njrgvmyafrod.js} +1 -1
  156. package/web/.next/static/chunks/{0b01fd0lkhnzf.js → 0nk2r-18.7g6r.js} +1 -1
  157. package/web/.next/static/chunks/{00uywouqbytc0.js → 0ntgq3d_.m5el.js} +3 -3
  158. package/web/.next/static/chunks/{0rhoh5o1y7grf.js → 0t.pzrmeoq6th.js} +1 -1
  159. package/web/.next/static/chunks/{0sywjtf8m0_fb.js → 0t8zwgaz.d1s5.js} +1 -1
  160. package/web/.next/static/chunks/{0tutcr7trd_7d.js → 14g1l3~6i5251.js} +2 -2
  161. /package/web/.next/static/{21GZVGanhwKlq9p5dtTCB → ZpPnD_b687G9xVr2nzrds}/_buildManifest.js +0 -0
  162. /package/web/.next/static/{21GZVGanhwKlq9p5dtTCB → ZpPnD_b687G9xVr2nzrds}/_clientMiddlewareManifest.js +0 -0
  163. /package/web/.next/static/{21GZVGanhwKlq9p5dtTCB → ZpPnD_b687G9xVr2nzrds}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../node_modules/.pnpm/%40dagrejs%2Bdagre%403.0.0/node_modules/%40dagrejs/dagre/dist/dagre.esm.js","../../../../../../../src/presentation/web/components/features/control-center/use-control-center-state.ts","../../../../../../../src/presentation/web/hooks/use-graph-derivation.ts","../../../../../../../src/presentation/web/hooks/use-graph-state.ts","../../../../../../../src/presentation/web/app/actions/data%3Ae55871%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/hooks/use-sse-event-handler.ts","../../../../../../../src/presentation/web/app/actions/data%3A356916%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Aa4e2a7%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A875285%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A0a3537%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/hooks/use-server-actions.ts","../../../../../../../src/presentation/web/lib/layout-with-dagre.ts","../../../../../../../src/presentation/web/lib/derive-graph.ts","../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx","../../../../../../../src/presentation/web/components/common/repository-node/repository-drawer.tsx","../../../../../../../src/presentation/web/components/features/features-canvas/dependency-edge.tsx","../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.tsx","../../../../../../../src/presentation/web/components/features/features-canvas/canvas-toolbar.tsx","../../../../../../../src/presentation/web/components/common/floating-action-button/floating-action-button.tsx","../../../../../../../src/presentation/web/hooks/use-selected-feature-id.ts","../../../../../../../src/presentation/web/hooks/use-selected-repository.ts","../../../../../../../src/presentation/web/hooks/use-viewport-persistence.ts","../../../../../../../src/presentation/web/app/actions/data%3A0f299c%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A9f8161%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/features/control-center/control-center.tsx","../../../../../../../src/presentation/web/app/actions/data%3Ab83810%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/features/control-center/welcome-agent-setup.tsx","../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx","../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx","../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/zoom-in.ts","../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/maximize.ts","../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/zoom-out.ts","../../../../../../../src/presentation/web/components/ui/github-icon.tsx","../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/eye-off.ts"],"sourcesContent":["var ge=Object.defineProperty;var hn=(e,n,t)=>n in e?ge(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;var fn=(e,n)=>{for(var t in n)ge(e,t,{get:n[t],enumerable:!0})};var pe=(e,n,t)=>hn(e,typeof n!=\"symbol\"?n+\"\":n,t);var z={};fn(z,{Graph:()=>p,alg:()=>R,json:()=>ye,version:()=>pn});var bn=Object.defineProperty,Le=(e,n)=>{for(var t in n)bn(e,t,{get:n[t],enumerable:!0})},p=class{constructor(e){this._isDirected=!0,this._isMultigraph=!1,this._isCompound=!1,this._nodes={},this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={},this._nodeCount=0,this._edgeCount=0,this._defaultNodeLabelFn=()=>{},this._defaultEdgeLabelFn=()=>{},e&&(this._isDirected=\"directed\"in e?e.directed:!0,this._isMultigraph=\"multigraph\"in e?e.multigraph:!1,this._isCompound=\"compound\"in e?e.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[\"\\0\"]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return typeof e!=\"function\"?this._defaultNodeLabelFn=()=>e:this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){return this.nodes().filter(e=>Object.keys(this._in[e]).length===0)}sinks(){return this.nodes().filter(e=>Object.keys(this._out[e]).length===0)}setNodes(e,n){return e.forEach(t=>{n!==void 0?this.setNode(t,n):this.setNode(t)}),this}setNode(e,n){return e in this._nodes?(arguments.length>1&&(this._nodes[e]=n),this):(this._nodes[e]=arguments.length>1?n:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=\"\\0\",this._children[e]={},this._children[\"\\0\"][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return e in this._nodes}removeNode(e){if(e in this._nodes){let n=t=>this.removeEdge(this._edgeObjs[t]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],this.children(e).forEach(t=>{this.setParent(t)}),delete this._children[e]),Object.keys(this._in[e]).forEach(n),delete this._in[e],delete this._preds[e],Object.keys(this._out[e]).forEach(n),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,n){if(!this._isCompound)throw new Error(\"Cannot set parent in a non-compound graph\");if(n===void 0)n=\"\\0\";else{n+=\"\";for(let t=n;t!==void 0;t=this.parent(t))if(t===e)throw new Error(\"Setting \"+n+\" as parent of \"+e+\" would create a cycle\");this.setNode(n)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=n,this._children[n][e]=!0,this}parent(e){if(this._isCompound){let n=this._parent[e];if(n!==\"\\0\")return n}}children(e=\"\\0\"){if(this._isCompound){let n=this._children[e];if(n)return Object.keys(n)}else{if(e===\"\\0\")return this.nodes();if(this.hasNode(e))return[]}return[]}predecessors(e){let n=this._preds[e];if(n)return Object.keys(n)}successors(e){let n=this._sucs[e];if(n)return Object.keys(n)}neighbors(e){let n=this.predecessors(e);if(n){let t=new Set(n);for(let r of this.successors(e))t.add(r);return Array.from(t.values())}}isLeaf(e){let n;return this.isDirected()?n=this.successors(e):n=this.neighbors(e),n.length===0}filterNodes(e){let n=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});n.setGraph(this.graph()),Object.entries(this._nodes).forEach(([o,i])=>{e(o)&&n.setNode(o,i)}),Object.values(this._edgeObjs).forEach(o=>{n.hasNode(o.v)&&n.hasNode(o.w)&&n.setEdge(o,this.edge(o))});let t={},r=o=>{let i=this.parent(o);return!i||n.hasNode(i)?(t[o]=i!=null?i:void 0,i!=null?i:void 0):i in t?t[i]:r(i)};return this._isCompound&&n.nodes().forEach(o=>n.setParent(o,r(o))),n}setDefaultEdgeLabel(e){return typeof e!=\"function\"?this._defaultEdgeLabelFn=()=>e:this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(e,n){return e.reduce((t,r)=>(n!==void 0?this.setEdge(t,r,n):this.setEdge(t,r),r)),this}setEdge(e,n,t,r){let o,i,s,a,d=!1;typeof e==\"object\"&&e!==null&&\"v\"in e?(o=e.v,i=e.w,s=e.name,arguments.length===2&&(a=n,d=!0)):(o=e,i=n,s=r,arguments.length>2&&(a=t,d=!0)),o=\"\"+o,i=\"\"+i,s!==void 0&&(s=\"\"+s);let l=C(this._isDirected,o,i,s);if(l in this._edgeLabels)return d&&(this._edgeLabels[l]=a),this;if(s!==void 0&&!this._isMultigraph)throw new Error(\"Cannot set a named edge when isMultigraph = false\");this.setNode(o),this.setNode(i),this._edgeLabels[l]=d?a:this._defaultEdgeLabelFn(o,i,s);let u=gn(this._isDirected,o,i,s);return o=u.v,i=u.w,Object.freeze(u),this._edgeObjs[l]=u,me(this._preds[i],o),me(this._sucs[o],i),this._in[i][l]=u,this._out[o][l]=u,this._edgeCount++,this}edge(e,n,t){let r=arguments.length===1?Y(this._isDirected,e):C(this._isDirected,e,n,t);return this._edgeLabels[r]}edgeAsObj(e,n,t){let r=arguments.length===1?this.edge(e):this.edge(e,n,t);return typeof r!=\"object\"?{label:r}:r}hasEdge(e,n,t){return(arguments.length===1?Y(this._isDirected,e):C(this._isDirected,e,n,t))in this._edgeLabels}removeEdge(e,n,t){let r=arguments.length===1?Y(this._isDirected,e):C(this._isDirected,e,n,t),o=this._edgeObjs[r];if(o){let i=o.v,s=o.w;delete this._edgeLabels[r],delete this._edgeObjs[r],Ee(this._preds[s],i),Ee(this._sucs[i],s),delete this._in[s][r],delete this._out[i][r],this._edgeCount--}return this}inEdges(e,n){return this.isDirected()?this.filterEdges(this._in[e],e,n):this.nodeEdges(e,n)}outEdges(e,n){return this.isDirected()?this.filterEdges(this._out[e],e,n):this.nodeEdges(e,n)}nodeEdges(e,n){if(e in this._nodes)return this.filterEdges({...this._in[e],...this._out[e]},e,n)}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}filterEdges(e,n,t){if(!e)return;let r=Object.values(e);return t?r.filter(o=>o.v===n&&o.w===t||o.v===t&&o.w===n):r}};function me(e,n){e[n]?e[n]++:e[n]=1}function Ee(e,n){e[n]!==void 0&&!--e[n]&&delete e[n]}function C(e,n,t,r){let o=\"\"+n,i=\"\"+t;if(!e&&o>i){let s=o;o=i,i=s}return o+\"\u0001\"+i+\"\u0001\"+(r===void 0?\"\\0\":r)}function gn(e,n,t,r){let o=\"\"+n,i=\"\"+t;if(!e&&o>i){let a=o;o=i,i=a}let s={v:o,w:i};return r&&(s.name=r),s}function Y(e,n){return C(e,n.v,n.w,n.name)}var pn=\"4.0.1\",ye={};Le(ye,{read:()=>yn,write:()=>mn});function mn(e){let n={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:En(e),edges:Ln(e)},t=e.graph();return t!==void 0&&(n.value=structuredClone(t)),n}function En(e){return e.nodes().map(n=>{let t=e.node(n),r=e.parent(n),o={v:n};return t!==void 0&&(o.value=t),r!==void 0&&(o.parent=r),o})}function Ln(e){return e.edges().map(n=>{let t=e.edge(n),r={v:n.v,w:n.w};return n.name!==void 0&&(r.name=n.name),t!==void 0&&(r.value=t),r})}function yn(e){let n=new p(e.options);return e.value!==void 0&&n.setGraph(e.value),e.nodes.forEach(t=>{n.setNode(t.v,t.value),t.parent&&n.setParent(t.v,t.parent)}),e.edges.forEach(t=>{n.setEdge({v:t.v,w:t.w,name:t.name},t.value)}),n}var R={};Le(R,{CycleException:()=>D,bellmanFord:()=>we,components:()=>Gn,dijkstra:()=>F,dijkstraAll:()=>_n,findCycles:()=>xn,floydWarshall:()=>On,isAcyclic:()=>Cn,postorder:()=>Pn,preorder:()=>Mn,prim:()=>jn,shortestPaths:()=>Sn,tarjan:()=>Ge,topsort:()=>ke});var wn=()=>1;function we(e,n,t,r){return Nn(e,String(n),t||wn,r||function(o){return e.outEdges(o)})}function Nn(e,n,t,r){let o={},i,s=0,a=e.nodes(),d=function(c){let h=t(c);o[c.v].distance+h<o[c.w].distance&&(o[c.w]={distance:o[c.v].distance+h,predecessor:c.v},i=!0)},l=function(){a.forEach(function(c){r(c).forEach(function(h){let f=h.v===c?h.v:h.w,g=f===h.v?h.w:h.v;d({v:f,w:g})})})};a.forEach(function(c){let h=c===n?0:Number.POSITIVE_INFINITY;o[c]={distance:h,predecessor:\"\"}});let u=a.length;for(let c=1;c<u&&(i=!1,s++,l(),!!i);c++);if(s===u-1&&(i=!1,l(),i))throw new Error(\"The graph contains a negative weight cycle\");return o}function Gn(e){let n={},t=[],r;function o(i){i in n||(n[i]=!0,r.push(i),e.successors(i).forEach(o),e.predecessors(i).forEach(o))}return e.nodes().forEach(function(i){r=[],o(i),r.length&&t.push(r)}),t}var Ne=class{constructor(){this._arr=[],this._keyIndices={}}size(){return this._arr.length}keys(){return this._arr.map(e=>e.key)}has(e){return e in this._keyIndices}priority(e){let n=this._keyIndices[e];if(n!==void 0)return this._arr[n].priority}min(){if(this.size()===0)throw new Error(\"Queue underflow\");return this._arr[0].key}add(e,n){let t=this._keyIndices,r=String(e);if(!(r in t)){let o=this._arr,i=o.length;return t[r]=i,o.push({key:r,priority:n}),this._decrease(i),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);let e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key}decrease(e,n){let t=this._keyIndices[e];if(t===void 0)throw new Error(`Key not found: ${e}`);let r=this._arr[t].priority;if(n>r)throw new Error(`New priority is greater than current priority. Key: ${e} Old: ${r} New: ${n}`);this._arr[t].priority=n,this._decrease(t)}_heapify(e){let n=this._arr,t=2*e,r=t+1,o=e;t<n.length&&(o=n[t].priority<n[o].priority?t:o,r<n.length&&(o=n[r].priority<n[o].priority?r:o),o!==e&&(this._swap(e,o),this._heapify(o)))}_decrease(e){let n=this._arr,t=n[e].priority,r;for(;e!==0&&(r=e>>1,!(n[r].priority<t));)this._swap(e,r),e=r}_swap(e,n){let t=this._arr,r=this._keyIndices,o=t[e],i=t[n];t[e]=i,t[n]=o,r[i.key]=e,r[o.key]=n}},kn=()=>1;function F(e,n,t,r){let o=function(i){return e.outEdges(i)};return vn(e,String(n),t||kn,r||o)}function vn(e,n,t,r){let o={},i=new Ne,s,a,d=function(l){let u=l.v!==s?l.v:l.w,c=o[u],h=t(l),f=a.distance+h;if(h<0)throw new Error(\"dijkstra does not allow negative edge weights. Bad edge: \"+l+\" Weight: \"+h);f<c.distance&&(c.distance=f,c.predecessor=s,i.decrease(u,f))};for(e.nodes().forEach(function(l){let u=l===n?0:Number.POSITIVE_INFINITY;o[l]={distance:u,predecessor:\"\"},i.add(l,u)});i.size()>0&&(s=i.removeMin(),a=o[s],a.distance!==Number.POSITIVE_INFINITY);)r(s).forEach(d);return o}function _n(e,n,t){return e.nodes().reduce(function(r,o){return r[o]=F(e,o,n,t),r},{})}function Ge(e){let n=0,t=[],r={},o=[];function i(s){let a=r[s]={onStack:!0,lowlink:n,index:n++};if(t.push(s),e.successors(s).forEach(function(d){d in r?r[d].onStack&&(a.lowlink=Math.min(a.lowlink,r[d].index)):(i(d),a.lowlink=Math.min(a.lowlink,r[d].lowlink))}),a.lowlink===a.index){let d=[],l;do l=t.pop(),r[l].onStack=!1,d.push(l);while(s!==l);o.push(d)}}return e.nodes().forEach(function(s){s in r||i(s)}),o}function xn(e){return Ge(e).filter(function(n){return n.length>1||n.length===1&&e.hasEdge(n[0],n[0])})}var Tn=()=>1;function On(e,n,t){return In(e,n||Tn,t||function(r){return e.outEdges(r)})}function In(e,n,t){let r={},o=e.nodes();return o.forEach(function(i){r[i]={},r[i][i]={distance:0,predecessor:\"\"},o.forEach(function(s){i!==s&&(r[i][s]={distance:Number.POSITIVE_INFINITY,predecessor:\"\"})}),t(i).forEach(function(s){let a=s.v===i?s.w:s.v,d=n(s);r[i][a]={distance:d,predecessor:i}})}),o.forEach(function(i){let s=r[i];o.forEach(function(a){let d=r[a];o.forEach(function(l){let u=d[i],c=s[l],h=d[l],f=u.distance+c.distance;f<h.distance&&(h.distance=f,h.predecessor=c.predecessor)})})}),r}var D=class extends Error{constructor(...e){super(...e)}};function ke(e){let n={},t={},r=[];function o(i){if(i in t)throw new D;i in n||(t[i]=!0,n[i]=!0,e.predecessors(i).forEach(o),delete t[i],r.push(i))}if(e.sinks().forEach(o),Object.keys(n).length!==e.nodeCount())throw new D;return r}function Cn(e){try{ke(e)}catch(n){if(n instanceof D)return!1;throw n}return!0}function Rn(e,n,t,r,o){Array.isArray(n)||(n=[n]);let i=(a=>{var d;return(d=e.isDirected()?e.successors(a):e.neighbors(a))!=null?d:[]}),s={};return n.forEach(function(a){if(!e.hasNode(a))throw new Error(\"Graph does not have node: \"+a);o=ve(e,a,t===\"post\",s,i,r,o)}),o}function ve(e,n,t,r,o,i,s){return n in r||(r[n]=!0,t||(s=i(s,n)),o(n).forEach(function(a){s=ve(e,a,t,r,o,i,s)}),t&&(s=i(s,n))),s}function _e(e,n,t){return Rn(e,n,t,function(r,o){return r.push(o),r},[])}function Pn(e,n){return _e(e,n,\"post\")}function Mn(e,n){return _e(e,n,\"pre\")}function jn(e,n){let t=new p,r={},o=new Ne,i;function s(d){let l=d.v===i?d.w:d.v,u=o.priority(l);if(u!==void 0){let c=n(d);c<u&&(r[l]=i,o.decrease(l,c))}}if(e.nodeCount()===0)return t;e.nodes().forEach(function(d){o.add(d,Number.POSITIVE_INFINITY),t.setNode(d)}),o.decrease(e.nodes()[0],0);let a=!1;for(;o.size()>0;){if(i=o.removeMin(),i in r)t.setEdge(i,r[i]);else{if(a)throw new Error(\"Input graph is not connected: \"+e);a=!0}e.nodeEdges(i).forEach(s)}return t}function Sn(e,n,t,r){return Fn(e,n,t,r!=null?r:(o=>{let i=e.outEdges(o);return i!=null?i:[]}))}function Fn(e,n,t,r){if(t===void 0)return F(e,n,t,r);let o=!1,i=e.nodes();for(let s=0;s<i.length;s++){let a=r(i[s]);for(let d=0;d<a.length;d++){let l=a[d],u=l.v===i[s]?l.v:l.w,c=u===l.v?l.w:l.v;t({v:u,w:c})<0&&(o=!0)}if(o)return we(e,n,t,r)}return F(e,n,t,r)}function w(e,n,t,r){let o=r;for(;e.hasNode(o);)o=j(r);return t.dummy=n,e.setNode(o,t),o}function xe(e){let n=new p().setGraph(e.graph());return e.nodes().forEach(t=>n.setNode(t,e.node(t))),e.edges().forEach(t=>{let r=n.edge(t.v,t.w)||{weight:0,minlen:1},o=e.edge(t);n.setEdge(t.v,t.w,{weight:r.weight+o.weight,minlen:Math.max(r.minlen,o.minlen)})}),n}function A(e){let n=new p({multigraph:e.isMultigraph()}).setGraph(e.graph());return e.nodes().forEach(t=>{e.children(t).length||n.setNode(t,e.node(t))}),e.edges().forEach(t=>{n.setEdge(t,e.edge(t))}),n}function H(e,n){let t=e.x,r=e.y,o=n.x-t,i=n.y-r,s=e.width/2,a=e.height/2;if(!o&&!i)throw new Error(\"Not possible to find intersection inside of the rectangle\");let d,l;return Math.abs(i)*s>Math.abs(o)*a?(i<0&&(a=-a),d=a*o/i,l=a):(o<0&&(s=-s),d=s,l=s*i/o),{x:t+d,y:r+l}}function N(e){let n=k(X(e)+1).map(()=>[]);return e.nodes().forEach(t=>{let r=e.node(t),o=r.rank;o!==void 0&&(n[o]||(n[o]=[]),n[o][r.order]=t)}),n}function Te(e){let n=e.nodes().map(r=>{let o=e.node(r).rank;return o===void 0?Number.MAX_VALUE:o}),t=L(Math.min,n);e.nodes().forEach(r=>{let o=e.node(r);Object.hasOwn(o,\"rank\")&&(o.rank-=t)})}function Oe(e){let n=e.nodes().map(s=>e.node(s).rank).filter(s=>s!==void 0),t=L(Math.min,n),r=[];e.nodes().forEach(s=>{let a=e.node(s).rank-t;r[a]||(r[a]=[]),r[a].push(s)});let o=0,i=e.graph().nodeRankFactor;Array.from(r).forEach((s,a)=>{s===void 0&&a%i!==0?--o:s!==void 0&&o&&s.forEach(d=>e.node(d).rank+=o)})}function q(e,n,t,r){let o={width:0,height:0};return arguments.length>=4&&(o.rank=t,o.order=r),w(e,\"border\",o,n)}function Dn(e,n=Ie){let t=[];for(let r=0;r<e.length;r+=n){let o=e.slice(r,r+n);t.push(o)}return t}var Ie=65535;function L(e,n){if(n.length>Ie){let t=Dn(n);return e(...t.map(r=>e(...r)))}else return e(...n)}function X(e){let t=e.nodes().map(r=>{let o=e.node(r).rank;return o===void 0?Number.MIN_VALUE:o});return L(Math.max,t)}function Ce(e,n){let t={lhs:[],rhs:[]};return e.forEach(r=>{n(r)?t.lhs.push(r):t.rhs.push(r)}),t}function P(e,n){let t=Date.now();try{return n()}finally{console.log(e+\" time: \"+(Date.now()-t)+\"ms\")}}function M(e,n){return n()}var An=0;function j(e){let n=++An;return e+(\"\"+n)}function k(e,n,t=1){n==null&&(n=e,e=0);let r=i=>i<n;t<0&&(r=i=>n<i);let o=[];for(let i=e;r(i);i+=t)o.push(i);return o}function T(e,n){let t={};for(let r of n)e[r]!==void 0&&(t[r]=e[r]);return t}function O(e,n){let t;return typeof n==\"string\"?t=r=>r[n]:t=n,Object.entries(e).reduce((r,[o,i])=>(r[o]=t(i,o),r),{})}function Re(e,n){return e.reduce((t,r,o)=>(t[r]=n[o],t),{})}var _=\"\\0\";var U=\"3.0.0\";var K=class{constructor(){pe(this,\"_sentinel\");let n={};n._next=n._prev=n,this._sentinel=n}dequeue(){let n=this._sentinel,t=n._prev;if(t!==n)return Pe(t),t}enqueue(n){let t=this._sentinel;n._prev&&n._next&&Pe(n),n._next=t._next,t._next._prev=n,t._next=n,n._prev=t}toString(){let n=[],t=this._sentinel,r=t._prev;for(;r!==t;)n.push(JSON.stringify(r,Vn)),r=r._prev;return\"[\"+n.join(\", \")+\"]\"}};function Pe(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function Vn(e,n){if(e!==\"_next\"&&e!==\"_prev\")return n}var Me=K;var Wn=()=>1;function Q(e,n){if(e.nodeCount()<=1)return[];let t=Yn(e,n||Wn);return Bn(t.graph,t.buckets,t.zeroIdx).flatMap(o=>e.outEdges(o.v,o.w)||[])}function Bn(e,n,t){var a;let r=[],o=n[n.length-1],i=n[0],s;for(;e.nodeCount();){for(;s=i.dequeue();)$(e,n,t,s);for(;s=o.dequeue();)$(e,n,t,s);if(e.nodeCount()){for(let d=n.length-2;d>0;--d)if(s=(a=n[d])==null?void 0:a.dequeue(),s){r=r.concat($(e,n,t,s,!0)||[]);break}}}return r}function $(e,n,t,r,o){let i=[],s=o?i:void 0;return(e.inEdges(r.v)||[]).forEach(a=>{let d=e.edge(a),l=e.node(a.v);o&&i.push({v:a.v,w:a.w}),l.out-=d,J(n,t,l)}),(e.outEdges(r.v)||[]).forEach(a=>{let d=e.edge(a),l=a.w,u=e.node(l);u.in-=d,J(n,t,u)}),e.removeNode(r.v),s}function Yn(e,n){let t=new p,r=0,o=0;e.nodes().forEach(a=>{t.setNode(a,{v:a,in:0,out:0})}),e.edges().forEach(a=>{let d=t.edge(a.v,a.w)||0,l=n(a),u=d+l;t.setEdge(a.v,a.w,u);let c=t.node(a.v),h=t.node(a.w);o=Math.max(o,c.out+=l),r=Math.max(r,h.in+=l)});let i=zn(o+r+3).map(()=>new Me),s=r+1;return t.nodes().forEach(a=>{J(i,s,t.node(a))}),{graph:t,buckets:i,zeroIdx:s}}function J(e,n,t){var r,o,i;t.out?t.in?(i=e[t.out-t.in+n])==null||i.enqueue(t):(o=e[e.length-1])==null||o.enqueue(t):(r=e[0])==null||r.enqueue(t)}function zn(e){let n=[];for(let t=0;t<e;t++)n.push(t);return n}function je(e){(e.graph().acyclicer===\"greedy\"?Q(e,t(e)):Hn(e)).forEach(r=>{let o=e.edge(r);e.removeEdge(r),o.forwardName=r.name,o.reversed=!0,e.setEdge(r.w,r.v,o,j(\"rev\"))});function t(r){return o=>r.edge(o).weight}}function Hn(e){let n=[],t={},r={};function o(i){Object.hasOwn(r,i)||(r[i]=!0,t[i]=!0,e.outEdges(i).forEach(s=>{Object.hasOwn(t,s.w)?n.push(s):o(s.w)}),delete t[i])}return e.nodes().forEach(o),n}function Se(e){e.edges().forEach(n=>{let t=e.edge(n);if(t.reversed){e.removeEdge(n);let r=t.forwardName;delete t.reversed,delete t.forwardName,e.setEdge(n.w,n.v,t,r)}})}function Fe(e){e.graph().dummyChains=[],e.edges().forEach(n=>Xn(e,n))}function Xn(e,n){let t=n.v,r=e.node(t).rank,o=n.w,i=e.node(o).rank,s=n.name,a=e.edge(n),d=a.labelRank;if(i===r+1)return;e.removeEdge(n);let l,u,c;for(c=0,++r;r<i;++c,++r)a.points=[],u={width:0,height:0,edgeLabel:a,edgeObj:n,rank:r},l=w(e,\"edge\",u,\"_d\"),r===d&&(u.width=a.width,u.height=a.height,u.dummy=\"edge-label\",u.labelpos=a.labelpos),e.setEdge(t,l,{weight:a.weight},s),c===0&&e.graph().dummyChains.push(l),t=l;e.setEdge(t,o,{weight:a.weight},s)}function De(e){e.graph().dummyChains.forEach(n=>{let t=e.node(n),r=t.edgeLabel,o;for(e.setEdge(t.edgeObj,r);t.dummy;)o=e.successors(n)[0],e.removeNode(n),r.points.push({x:t.x,y:t.y}),t.dummy===\"edge-label\"&&(r.x=t.x,r.y=t.y,r.width=t.width,r.height=t.height),n=o,t=e.node(n)})}function S(e){let n={};function t(r){let o=e.node(r);if(Object.hasOwn(n,r))return o.rank;n[r]=!0;let i=e.outEdges(r),s=i?i.map(d=>d==null?Number.POSITIVE_INFINITY:t(d.w)-e.edge(d).minlen):[],a=L(Math.min,s);return a===Number.POSITIVE_INFINITY&&(a=0),o.rank=a}e.sources().forEach(t)}function v(e,n){return e.node(n.w).rank-e.node(n.v).rank-e.edge(n).minlen}var V=Kn;function Kn(e){let n=new p({directed:!1}),t=e.nodes();if(t.length===0)throw new Error(\"Graph must have at least one node\");let r=t[0],o=e.nodeCount();n.setNode(r,{});let i,s;for(;$n(n,e)<o&&(i=Jn(n,e),!!i);)s=n.hasNode(i.v)?v(e,i):-v(e,i),Qn(n,e,s);return n}function $n(e,n){function t(r){let o=n.nodeEdges(r);o&&o.forEach(i=>{let s=i.v,a=r===s?i.w:s;!e.hasNode(a)&&!v(n,i)&&(e.setNode(a,{}),e.setEdge(r,a,{}),t(a))})}return e.nodes().forEach(t),e.nodeCount()}function Jn(e,n){return n.edges().reduce((r,o)=>{let i=Number.POSITIVE_INFINITY;return e.hasNode(o.v)!==e.hasNode(o.w)&&(i=v(n,o)),i<r[0]?[i,o]:r},[Number.POSITIVE_INFINITY,null])[1]}function Qn(e,n,t){e.nodes().forEach(r=>n.node(r).rank+=t)}var{preorder:Zn,postorder:et}=R,Ve=x;x.initLowLimValues=ee;x.initCutValues=Z;x.calcCutValue=We;x.leaveEdge=Ye;x.enterEdge=ze;x.exchangeEdges=He;function x(e){e=xe(e),S(e);let n=V(e);ee(n),Z(n,e);let t,r;for(;t=Ye(n);)r=ze(n,e,t),He(n,e,t,r)}function Z(e,n){let t=et(e,e.nodes());t=t.slice(0,t.length-1),t.forEach(r=>nt(e,n,r))}function nt(e,n,t){let o=e.node(t).parent,i=e.edge(t,o);i.cutvalue=We(e,n,t)}function We(e,n,t){let o=e.node(t).parent,i=!0,s=n.edge(t,o),a=0;s||(i=!1,s=n.edge(o,t)),a=s.weight;let d=n.nodeEdges(t);return d&&d.forEach(l=>{let u=l.v===t,c=u?l.w:l.v;if(c!==o){let h=u===i,f=n.edge(l).weight;if(a+=h?f:-f,rt(e,t,c)){let b=e.edge(t,c).cutvalue;a+=h?-b:b}}}),a}function ee(e,n){arguments.length<2&&(n=e.nodes()[0]),Be(e,{},1,n)}function Be(e,n,t,r,o){let i=t,s=e.node(r);n[r]=!0;let a=e.neighbors(r);return a&&a.forEach(d=>{Object.hasOwn(n,d)||(t=Be(e,n,t,d,r))}),s.low=i,s.lim=t++,o?s.parent=o:delete s.parent,t}function Ye(e){return e.edges().find(n=>e.edge(n).cutvalue<0)}function ze(e,n,t){let r=t.v,o=t.w;n.hasEdge(r,o)||(r=t.w,o=t.v);let i=e.node(r),s=e.node(o),a=i,d=!1;return i.lim>s.lim&&(a=s,d=!0),n.edges().filter(u=>d===Ae(e,e.node(u.v),a)&&d!==Ae(e,e.node(u.w),a)).reduce((u,c)=>v(n,c)<v(n,u)?c:u)}function He(e,n,t,r){let o=t.v,i=t.w;e.removeEdge(o,i),e.setEdge(r.v,r.w,{}),ee(e),Z(e,n),tt(e,n)}function tt(e,n){let t=e.nodes().find(o=>!e.node(o).parent);if(!t)return;let r=Zn(e,[t]);r=r.slice(1),r.forEach(o=>{let s=e.node(o).parent,a=n.edge(o,s),d=!1;a||(a=n.edge(s,o),d=!0),n.node(o).rank=n.node(s).rank+(d?a.minlen:-a.minlen)})}function rt(e,n,t){return e.hasEdge(n,t)}function Ae(e,n,t){return t.low<=n.lim&&n.lim<=t.lim}var Xe=ot;function ot(e){let n=e.graph().ranker;if(typeof n==\"function\")return n(e);switch(n){case\"network-simplex\":qe(e);break;case\"tight-tree\":st(e);break;case\"longest-path\":it(e);break;case\"none\":break;default:qe(e)}}var it=S;function st(e){S(e),V(e)}function qe(e){Ve(e)}var Ue=at;function at(e){let n=lt(e);e.graph().dummyChains.forEach(t=>{let r=e.node(t),o=r.edgeObj,i=dt(e,n,o.v,o.w),s=i.path,a=i.lca,d=0,l=s[d],u=!0;for(;t!==o.w;){if(r=e.node(t),u){for(;(l=s[d])!==a&&e.node(l).maxRank<r.rank;)d++;l===a&&(u=!1)}if(!u){for(;d<s.length-1&&e.node(s[d+1]).minRank<=r.rank;)d++;l=s[d]}l!==void 0&&e.setParent(t,l),t=e.successors(t)[0]}})}function dt(e,n,t,r){let o=[],i=[],s=Math.min(n[t].low,n[r].low),a=Math.max(n[t].lim,n[r].lim),d;d=t;do d=e.parent(d),o.push(d);while(d&&(n[d].low>s||a>n[d].lim));let l=d,u=r;for(;(u=e.parent(u))!==l;)i.push(u);return{path:o.concat(i.reverse()),lca:l}}function lt(e){let n={},t=0;function r(o){let i=t;e.children(o).forEach(r),n[o]={low:i,lim:t++}}return e.children(_).forEach(r),n}function Ke(e){let n=w(e,\"root\",{},\"_root\"),t=ut(e),r=Object.values(t),o=L(Math.max,r)-1,i=2*o+1;e.graph().nestingRoot=n,e.edges().forEach(a=>e.edge(a).minlen*=i);let s=ct(e)+1;e.children(_).forEach(a=>$e(e,n,i,s,o,t,a)),e.graph().nodeRankFactor=i}function $e(e,n,t,r,o,i,s){var c;let a=e.children(s);if(!a.length){s!==n&&e.setEdge(n,s,{weight:0,minlen:t});return}let d=q(e,\"_bt\"),l=q(e,\"_bb\"),u=e.node(s);e.setParent(d,s),u.borderTop=d,e.setParent(l,s),u.borderBottom=l,a.forEach(h=>{var y;$e(e,n,t,r,o,i,h);let f=e.node(h),g=f.borderTop?f.borderTop:h,b=f.borderBottom?f.borderBottom:h,m=f.borderTop?r:2*r,E=g!==b?1:o-((y=i[s])!=null?y:0)+1;e.setEdge(d,g,{weight:m,minlen:E,nestingEdge:!0}),e.setEdge(b,l,{weight:m,minlen:E,nestingEdge:!0})}),e.parent(s)||e.setEdge(n,d,{weight:0,minlen:o+((c=i[s])!=null?c:0)})}function ut(e){let n={};function t(r,o){let i=e.children(r);i&&i.length&&i.forEach(s=>t(s,o+1)),n[r]=o}return e.children(_).forEach(r=>t(r,1)),n}function ct(e){return e.edges().reduce((n,t)=>n+e.edge(t).weight,0)}function Je(e){let n=e.graph();e.removeNode(n.nestingRoot),delete n.nestingRoot,e.edges().forEach(t=>{e.edge(t).nestingEdge&&e.removeEdge(t)})}var Ze=ft;function ft(e){function n(t){let r=e.children(t),o=e.node(t);if(r.length&&r.forEach(n),Object.hasOwn(o,\"minRank\")){o.borderLeft=[],o.borderRight=[];for(let i=o.minRank,s=o.maxRank+1;i<s;++i)Qe(e,\"borderLeft\",\"_bl\",t,o,i),Qe(e,\"borderRight\",\"_br\",t,o,i)}}e.children(_).forEach(n)}function Qe(e,n,t,r,o,i){let s={width:0,height:0,rank:i,borderType:n},a=o[n][i-1],d=w(e,\"border\",s,t);o[n][i]=d,e.setParent(d,r),a&&e.setEdge(a,d,{weight:1})}function nn(e){var t;let n=(t=e.graph().rankdir)==null?void 0:t.toLowerCase();(n===\"lr\"||n===\"rl\")&&rn(e)}function tn(e){var t;let n=(t=e.graph().rankdir)==null?void 0:t.toLowerCase();(n===\"bt\"||n===\"rl\")&&bt(e),(n===\"lr\"||n===\"rl\")&&(gt(e),rn(e))}function rn(e){e.nodes().forEach(n=>en(e.node(n))),e.edges().forEach(n=>en(e.edge(n)))}function en(e){let n=e.width;e.width=e.height,e.height=n}function bt(e){e.nodes().forEach(n=>ne(e.node(n))),e.edges().forEach(n=>{var r;let t=e.edge(n);(r=t.points)==null||r.forEach(ne),Object.hasOwn(t,\"y\")&&ne(t)})}function ne(e){e.y=-e.y}function gt(e){e.nodes().forEach(n=>te(e.node(n))),e.edges().forEach(n=>{var r;let t=e.edge(n);(r=t.points)==null||r.forEach(te),Object.hasOwn(t,\"x\")&&te(t)})}function te(e){let n=e.x;e.x=e.y,e.y=n}function re(e){let n={},t=e.nodes().filter(d=>!e.children(d).length),r=t.map(d=>e.node(d).rank),o=L(Math.max,r),i=k(o+1).map(()=>[]);function s(d){if(n[d])return;n[d]=!0;let l=e.node(d);i[l.rank].push(d);let u=e.successors(d);u&&u.forEach(s)}return t.sort((d,l)=>e.node(d).rank-e.node(l).rank).forEach(s),i}function oe(e,n){let t=0;for(let r=1;r<n.length;++r)t+=mt(e,n[r-1],n[r]);return t}function mt(e,n,t){let r=Re(t,t.map((l,u)=>u)),o=n.flatMap(l=>{let u=e.outEdges(l);return u?u.map(c=>({pos:r[c.w],weight:e.edge(c).weight})).sort((c,h)=>c.pos-h.pos):[]}),i=1;for(;i<t.length;)i<<=1;let s=2*i-1;i-=1;let a=new Array(s).fill(0),d=0;return o.forEach(l=>{let u=l.pos+i;a[u]+=l.weight;let c=0;for(;u>0;)u%2&&(c+=a[u+1]),u=u-1>>1,a[u]+=l.weight;d+=l.weight*c}),d}function ie(e,n=[]){return n.map(t=>{let r=e.inEdges(t);if(!r||!r.length)return{v:t};{let o=r.reduce((i,s)=>{let a=e.edge(s),d=e.node(s.v);return{sum:i.sum+a.weight*d.order,weight:i.weight+a.weight}},{sum:0,weight:0});return{v:t,barycenter:o.sum/o.weight,weight:o.weight}}})}function se(e,n){let t={};e.forEach((o,i)=>{let s={indegree:0,in:[],out:[],vs:[o.v],i};o.barycenter!==void 0&&(s.barycenter=o.barycenter,s.weight=o.weight),t[o.v]=s}),n.edges().forEach(o=>{let i=t[o.v],s=t[o.w];i!==void 0&&s!==void 0&&(s.indegree++,i.out.push(s))});let r=Object.values(t).filter(o=>!o.indegree);return Et(r)}function Et(e){let n=[];function t(o){return i=>{i.merged||(i.barycenter===void 0||o.barycenter===void 0||i.barycenter>=o.barycenter)&&Lt(o,i)}}function r(o){return i=>{i.in.push(o),--i.indegree===0&&e.push(i)}}for(;e.length;){let o=e.pop();n.push(o),o.in.reverse().forEach(t(o)),o.out.forEach(r(o))}return n.filter(o=>!o.merged).map(o=>T(o,[\"vs\",\"i\",\"barycenter\",\"weight\"]))}function Lt(e,n){let t=0,r=0;e.weight&&(t+=e.barycenter*e.weight,r+=e.weight),n.weight&&(t+=n.barycenter*n.weight,r+=n.weight),e.vs=n.vs.concat(e.vs),e.barycenter=t/r,e.weight=r,e.i=Math.min(n.i,e.i),n.merged=!0}function ae(e,n){let t=Ce(e,u=>Object.hasOwn(u,\"barycenter\")),r=t.lhs,o=t.rhs.sort((u,c)=>c.i-u.i),i=[],s=0,a=0,d=0;r.sort(yt(!!n)),d=on(i,o,d),r.forEach(u=>{d+=u.vs.length,i.push(u.vs),s+=u.barycenter*u.weight,a+=u.weight,d=on(i,o,d)});let l={vs:i.flat(1)};return a&&(l.barycenter=s/a,l.weight=a),l}function on(e,n,t){let r;for(;n.length&&(r=n[n.length-1]).i<=t;)n.pop(),e.push(r.vs),t++;return t}function yt(e){return(n,t)=>n.barycenter<t.barycenter?-1:n.barycenter>t.barycenter?1:e?t.i-n.i:n.i-t.i}function W(e,n,t,r){let o=e.children(n),i=e.node(n),s=i?i.borderLeft:void 0,a=i?i.borderRight:void 0,d={};s&&(o=o.filter(h=>h!==s&&h!==a));let l=ie(e,o);l.forEach(h=>{if(e.children(h.v).length){let f=W(e,h.v,t,r);d[h.v]=f,Object.hasOwn(f,\"barycenter\")&&Nt(h,f)}});let u=se(l,t);wt(u,d);let c=ae(u,r);if(s&&a){c.vs=[s,c.vs,a].flat(1);let h=e.predecessors(s);if(h&&h.length){let f=e.node(h[0]),g=e.predecessors(a),b=e.node(g[0]);Object.hasOwn(c,\"barycenter\")||(c.barycenter=0,c.weight=0),c.barycenter=(c.barycenter*c.weight+f.order+b.order)/(c.weight+2),c.weight+=2}}return c}function wt(e,n){e.forEach(t=>{t.vs=t.vs.flatMap(r=>n[r]?n[r].vs:r)})}function Nt(e,n){e.barycenter!==void 0?(e.barycenter=(e.barycenter*e.weight+n.barycenter*n.weight)/(e.weight+n.weight),e.weight+=n.weight):(e.barycenter=n.barycenter,e.weight=n.weight)}function de(e,n,t,r){r||(r=e.nodes());let o=Gt(e),i=new p({compound:!0}).setGraph({root:o}).setDefaultNodeLabel(s=>e.node(s));return r.forEach(s=>{let a=e.node(s),d=e.parent(s);if(a.rank===n||a.minRank<=n&&n<=a.maxRank){i.setNode(s),i.setParent(s,d||o);let l=e[t](s);l&&l.forEach(u=>{let c=u.v===s?u.w:u.v,h=i.edge(c,s),f=h!==void 0?h.weight:0;i.setEdge(c,s,{weight:e.edge(u).weight+f})}),Object.hasOwn(a,\"minRank\")&&i.setNode(s,{borderLeft:a.borderLeft[n],borderRight:a.borderRight[n]})}}),i}function Gt(e){let n;for(;e.hasNode(n=j(\"_root\")););return n}function le(e,n,t){let r={},o;t.forEach(i=>{let s=e.parent(i),a,d;for(;s;){if(a=e.parent(s),a?(d=r[a],r[a]=s):(d=o,o=s),d&&d!==s){n.setEdge(d,s);return}s=a}})}function B(e,n={}){if(typeof n.customOrder==\"function\"){n.customOrder(e,B);return}let t=X(e),r=sn(e,k(1,t+1),\"inEdges\"),o=sn(e,k(t-1,-1,-1),\"outEdges\"),i=re(e);if(an(e,i),n.disableOptimalOrderHeuristic)return;let s=Number.POSITIVE_INFINITY,a,d=n.constraints||[];for(let l=0,u=0;u<4;++l,++u){kt(l%2?r:o,l%4>=2,d),i=N(e);let c=oe(e,i);c<s?(u=0,a=Object.assign({},i),s=c):c===s&&(a=structuredClone(i))}an(e,a)}function sn(e,n,t){let r=new Map,o=(i,s)=>{r.has(i)||r.set(i,[]),r.get(i).push(s)};for(let i of e.nodes()){let s=e.node(i);if(typeof s.rank==\"number\"&&o(s.rank,i),typeof s.minRank==\"number\"&&typeof s.maxRank==\"number\")for(let a=s.minRank;a<=s.maxRank;a++)a!==s.rank&&o(a,i)}return n.map(function(i){return de(e,i,t,r.get(i)||[])})}function kt(e,n,t){let r=new p;e.forEach(function(o){t.forEach(a=>r.setEdge(a.left,a.right));let i=o.graph().root,s=W(o,i,r,n);s.vs.forEach((a,d)=>o.node(a).order=d),le(o,r,s.vs)})}function an(e,n){Object.values(n).forEach(t=>t.forEach((r,o)=>e.node(r).order=o))}function vt(e,n){let t={};function r(o,i){let s=0,a=0,d=o.length,l=i[i.length-1];return i.forEach((u,c)=>{let h=xt(e,u),f=h?e.node(h).order:d;(h||u===l)&&(i.slice(a,c+1).forEach(g=>{let b=e.predecessors(g);b&&b.forEach(m=>{let E=e.node(m),y=E.order;(y<s||f<y)&&!(E.dummy&&e.node(g).dummy)&&dn(t,m,g)})}),a=c+1,s=f)}),i}return n.length&&n.reduce(r),t}function _t(e,n){let t={};function r(i,s,a,d,l){k(s,a).forEach(u=>{let c=i[u];if(c!==void 0&&e.node(c).dummy){let h=e.predecessors(c);h&&h.forEach(f=>{if(f===void 0)return;let g=e.node(f);g.dummy&&(g.order<d||g.order>l)&&dn(t,f,c)})}})}function o(i,s){let a=-1,d=-1,l=0;return s.forEach((u,c)=>{if(e.node(u).dummy===\"border\"){let h=e.predecessors(u);if(h&&h.length){let f=h[0];if(f===void 0)return;d=e.node(f).order,r(s,l,c,a,d),l=c,a=d}}r(s,l,s.length,d,i.length)}),s}return n.length&&n.reduce(o),t}function xt(e,n){if(e.node(n).dummy){let t=e.predecessors(n);if(t)return t.find(r=>e.node(r).dummy)}}function dn(e,n,t){if(n>t){let o=n;n=t,t=o}let r=e[n];r||(e[n]=r={}),r[t]=!0}function Tt(e,n,t){if(n>t){let o=n;n=t,t=o}let r=e[n];return r!==void 0&&Object.hasOwn(r,t)}function Ot(e,n,t,r){let o={},i={},s={};return n.forEach(a=>{a.forEach((d,l)=>{o[d]=d,i[d]=d,s[d]=l})}),n.forEach(a=>{let d=-1;a.forEach(l=>{let u=r(l);if(u&&u.length){let c=u.sort((f,g)=>{let b=s[f],m=s[g];return(b!==void 0?b:0)-(m!==void 0?m:0)}),h=(c.length-1)/2;for(let f=Math.floor(h),g=Math.ceil(h);f<=g;++f){let b=c[f];if(b===void 0)continue;let m=s[b];if(m!==void 0&&i[l]===l&&d<m&&!Tt(t,l,b)){let E=o[b];E!==void 0&&(i[b]=l,i[l]=o[l]=E,d=m)}}}})}),{root:o,align:i}}function It(e,n,t,r,o=!1){let i={},s=Ct(e,n,t,o),a=o?\"borderLeft\":\"borderRight\";function d(f,g){let b=s.nodes().slice(),m={},E=b.pop();for(;E;){if(m[E])f(E);else{m[E]=!0,b.push(E);for(let y of g(E))b.push(y)}E=b.pop()}}function l(f){let g=s.inEdges(f);g?i[f]=g.reduce((b,m)=>{var I;let E=(I=i[m.v])!=null?I:0,y=s.edge(m);return Math.max(b,E+(y!==void 0?y:0))},0):i[f]=0}function u(f){let g=s.outEdges(f),b=Number.POSITIVE_INFINITY;g&&(b=g.reduce((E,y)=>{let I=i[y.w],be=s.edge(y);return Math.min(E,(I!==void 0?I:0)-(be!==void 0?be:0))},Number.POSITIVE_INFINITY));let m=e.node(f);b!==Number.POSITIVE_INFINITY&&m.borderType!==a&&(i[f]=Math.max(i[f]!==void 0?i[f]:0,b))}function c(f){return s.predecessors(f)||[]}function h(f){return s.successors(f)||[]}return d(l,c),d(u,h),Object.keys(r).forEach(f=>{var b;let g=t[f];g!==void 0&&(i[f]=(b=i[g])!=null?b:0)}),i}function Ct(e,n,t,r){let o=new p,i=e.graph(),s=jt(i.nodesep,i.edgesep,r);return n.forEach(a=>{let d;a.forEach(l=>{let u=t[l];if(u!==void 0){if(o.setNode(u),d!==void 0){let c=t[d];if(c!==void 0){let h=o.edge(c,u);o.setEdge(c,u,Math.max(s(e,l,d),h||0))}}d=l}})}),o}function Rt(e,n){return Object.values(n).reduce((t,r)=>{let o=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;Object.entries(r).forEach(([a,d])=>{let l=St(e,a)/2;o=Math.max(d+l,o),i=Math.min(d-l,i)});let s=o-i;return s<t[0]&&(t=[s,r]),t},[Number.POSITIVE_INFINITY,null])[1]}function Pt(e,n){let t=Object.values(n),r=L(Math.min,t),o=L(Math.max,t);[\"u\",\"d\"].forEach(i=>{[\"l\",\"r\"].forEach(s=>{let a=i+s,d=e[a];if(!d||d===n)return;let l=Object.values(d),u=r-L(Math.min,l);s!==\"l\"&&(u=o-L(Math.max,l)),u&&(e[a]=O(d,c=>c+u))})})}function Mt(e,n=void 0){let t=e.ul;return t?O(t,(r,o)=>{var s,a;if(n){let d=n.toLowerCase(),l=e[d];if(l&&l[o]!==void 0)return l[o]}let i=Object.values(e).map(d=>{let l=d[o];return l!==void 0?l:0}).sort((d,l)=>d-l);return(((s=i[1])!=null?s:0)+((a=i[2])!=null?a:0))/2}):{}}function ln(e){let n=N(e),t=Object.assign(vt(e,n),_t(e,n)),r={},o;[\"u\",\"d\"].forEach(s=>{o=s===\"u\"?n:Object.values(n).reverse(),[\"l\",\"r\"].forEach(a=>{a===\"r\"&&(o=o.map(c=>Object.values(c).reverse()));let l=Ot(e,o,t,c=>(s===\"u\"?e.predecessors(c):e.successors(c))||[]),u=It(e,o,l.root,l.align,a===\"r\");a===\"r\"&&(u=O(u,c=>-c)),r[s+a]=u})});let i=Rt(e,r);return Pt(r,i),Mt(r,e.graph().align)}function jt(e,n,t){return(r,o,i)=>{let s=r.node(o),a=r.node(i),d=0,l;if(d+=s.width/2,Object.hasOwn(s,\"labelpos\"))switch(s.labelpos.toLowerCase()){case\"l\":l=-s.width/2;break;case\"r\":l=s.width/2;break}if(l&&(d+=t?l:-l),l=void 0,d+=(s.dummy?n:e)/2,d+=(a.dummy?n:e)/2,d+=a.width/2,Object.hasOwn(a,\"labelpos\"))switch(a.labelpos.toLowerCase()){case\"l\":l=a.width/2;break;case\"r\":l=-a.width/2;break}return l&&(d+=t?l:-l),d}}function St(e,n){return e.node(n).width}function un(e){e=A(e),Ft(e),Object.entries(ln(e)).forEach(([n,t])=>e.node(n).x=t)}function Ft(e){let n=N(e),t=e.graph(),r=t.ranksep,o=t.rankalign,i=0;n.forEach(s=>{let a=s.reduce((d,l)=>{var c;let u=(c=e.node(l).height)!=null?c:0;return d>u?d:u},0);s.forEach(d=>{let l=e.node(d);o===\"top\"?l.y=i+l.height/2:o===\"bottom\"?l.y=i+a-l.height/2:l.y=i+a/2}),i+=a+r})}function he(e,n={}){let t=n.debugTiming?P:M;return t(\"layout\",()=>{let r=t(\" buildLayoutGraph\",()=>Xt(e));return t(\" runLayout\",()=>Dt(r,t,n)),t(\" updateInputGraph\",()=>At(e,r)),r})}function Dt(e,n,t){n(\" makeSpaceForEdgeLabels\",()=>Ut(e)),n(\" removeSelfEdges\",()=>rr(e)),n(\" acyclic\",()=>je(e)),n(\" nestingGraph.run\",()=>Ke(e)),n(\" rank\",()=>Xe(A(e))),n(\" injectEdgeLabelProxies\",()=>Kt(e)),n(\" removeEmptyRanks\",()=>Oe(e)),n(\" nestingGraph.cleanup\",()=>Je(e)),n(\" normalizeRanks\",()=>Te(e)),n(\" assignRankMinMax\",()=>$t(e)),n(\" removeEdgeLabelProxies\",()=>Jt(e)),n(\" normalize.run\",()=>Fe(e)),n(\" parentDummyChains\",()=>Ue(e)),n(\" addBorderSegments\",()=>Ze(e)),n(\" order\",()=>B(e,t)),n(\" insertSelfEdges\",()=>or(e)),n(\" adjustCoordinateSystem\",()=>nn(e)),n(\" position\",()=>un(e)),n(\" positionSelfEdges\",()=>ir(e)),n(\" removeBorderNodes\",()=>tr(e)),n(\" normalize.undo\",()=>De(e)),n(\" fixupEdgeLabelCoords\",()=>er(e)),n(\" undoCoordinateSystem\",()=>tn(e)),n(\" translateGraph\",()=>Qt(e)),n(\" assignNodeIntersects\",()=>Zt(e)),n(\" reversePoints\",()=>nr(e)),n(\" acyclic.undo\",()=>Se(e))}function At(e,n){e.nodes().forEach(t=>{let r=e.node(t),o=n.node(t);r&&(r.x=o.x,r.y=o.y,r.order=o.order,r.rank=o.rank,n.children(t).length&&(r.width=o.width,r.height=o.height))}),e.edges().forEach(t=>{let r=e.edge(t),o=n.edge(t);r.points=o.points,Object.hasOwn(o,\"x\")&&(r.x=o.x,r.y=o.y)}),e.graph().width=n.graph().width,e.graph().height=n.graph().height}var Vt=[\"nodesep\",\"edgesep\",\"ranksep\",\"marginx\",\"marginy\"],Wt={ranksep:50,edgesep:20,nodesep:50,rankdir:\"TB\",rankalign:\"center\"},Bt=[\"acyclicer\",\"ranker\",\"rankdir\",\"align\",\"rankalign\"],Yt=[\"width\",\"height\",\"rank\"],cn={width:0,height:0},zt=[\"minlen\",\"weight\",\"width\",\"height\",\"labeloffset\"],Ht={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:\"r\"},qt=[\"labelpos\"];function Xt(e){let n=new p({multigraph:!0,compound:!0}),t=ce(e.graph());return n.setGraph(Object.assign({},Wt,ue(t,Vt),T(t,Bt))),e.nodes().forEach(r=>{let o=ce(e.node(r)),i=ue(o,Yt);Object.keys(cn).forEach(a=>{i[a]===void 0&&(i[a]=cn[a])}),n.setNode(r,i);let s=e.parent(r);s!==void 0&&n.setParent(r,s)}),e.edges().forEach(r=>{let o=ce(e.edge(r));n.setEdge(r,Object.assign({},Ht,ue(o,zt),T(o,qt)))}),n}function Ut(e){let n=e.graph();n.ranksep/=2,e.edges().forEach(t=>{let r=e.edge(t);r.minlen*=2,r.labelpos.toLowerCase()!==\"c\"&&(n.rankdir===\"TB\"||n.rankdir===\"BT\"?r.width+=r.labeloffset:r.height+=r.labeloffset)})}function Kt(e){e.edges().forEach(n=>{let t=e.edge(n);if(t.width&&t.height){let r=e.node(n.v),i={rank:(e.node(n.w).rank-r.rank)/2+r.rank,e:n};w(e,\"edge-proxy\",i,\"_ep\")}})}function $t(e){let n=0;e.nodes().forEach(t=>{let r=e.node(t);r.borderTop&&(r.minRank=e.node(r.borderTop).rank,r.maxRank=e.node(r.borderBottom).rank,n=Math.max(n,r.maxRank))}),e.graph().maxRank=n}function Jt(e){e.nodes().forEach(n=>{let t=e.node(n);if(t.dummy===\"edge-proxy\"){let r=t;e.edge(r.e).labelRank=t.rank,e.removeNode(n)}})}function Qt(e){let n=Number.POSITIVE_INFINITY,t=0,r=Number.POSITIVE_INFINITY,o=0,i=e.graph(),s=i.marginx||0,a=i.marginy||0;function d(l){let u=l.x,c=l.y,h=l.width,f=l.height;n=Math.min(n,u-h/2),t=Math.max(t,u+h/2),r=Math.min(r,c-f/2),o=Math.max(o,c+f/2)}e.nodes().forEach(l=>d(e.node(l))),e.edges().forEach(l=>{let u=e.edge(l);Object.hasOwn(u,\"x\")&&d(u)}),n-=s,r-=a,e.nodes().forEach(l=>{let u=e.node(l);u.x-=n,u.y-=r}),e.edges().forEach(l=>{let u=e.edge(l);u.points.forEach(c=>{c.x-=n,c.y-=r}),Object.hasOwn(u,\"x\")&&(u.x-=n),Object.hasOwn(u,\"y\")&&(u.y-=r)}),i.width=t-n+s,i.height=o-r+a}function Zt(e){e.edges().forEach(n=>{let t=e.edge(n),r=e.node(n.v),o=e.node(n.w),i,s;t.points?(i=t.points[0],s=t.points[t.points.length-1]):(t.points=[],i=o,s=r),t.points.unshift(H(r,i)),t.points.push(H(o,s))})}function er(e){e.edges().forEach(n=>{let t=e.edge(n);if(Object.hasOwn(t,\"x\"))switch((t.labelpos===\"l\"||t.labelpos===\"r\")&&(t.width-=t.labeloffset),t.labelpos){case\"l\":t.x-=t.width/2+t.labeloffset;break;case\"r\":t.x+=t.width/2+t.labeloffset;break}})}function nr(e){e.edges().forEach(n=>{let t=e.edge(n);t.reversed&&t.points.reverse()})}function tr(e){e.nodes().forEach(n=>{if(e.children(n).length){let t=e.node(n),r=e.node(t.borderTop),o=e.node(t.borderBottom),i=e.node(t.borderLeft[t.borderLeft.length-1]),s=e.node(t.borderRight[t.borderRight.length-1]);t.width=Math.abs(s.x-i.x),t.height=Math.abs(o.y-r.y),t.x=i.x+t.width/2,t.y=r.y+t.height/2}}),e.nodes().forEach(n=>{e.node(n).dummy===\"border\"&&e.removeNode(n)})}function rr(e){e.edges().forEach(n=>{if(n.v===n.w){let t=e.node(n.v);t.selfEdges||(t.selfEdges=[]),t.selfEdges.push({e:n,label:e.edge(n)}),e.removeEdge(n)}})}function or(e){N(e).forEach(t=>{let r=0;t.forEach((o,i)=>{let s=e.node(o);s.order=i+r,(s.selfEdges||[]).forEach(a=>{w(e,\"selfedge\",{width:a.label.width,height:a.label.height,rank:s.rank,order:i+ ++r,e:a.e,label:a.label},\"_se\")}),delete s.selfEdges})})}function ir(e){e.nodes().forEach(n=>{let t=e.node(n);if(t.dummy===\"selfedge\"){let r=t,o=e.node(r.e.v),i=o.x+o.width/2,s=o.y,a=t.x-i,d=o.height/2;e.setEdge(r.e,r.label),e.removeNode(n),r.label.points=[{x:i+2*a/3,y:s-d},{x:i+5*a/6,y:s-d},{x:i+a,y:s},{x:i+5*a/6,y:s+d},{x:i+2*a/3,y:s+d}],r.label.x=t.x,r.label.y=t.y}})}function ue(e,n){return O(T(e,n),Number)}function ce(e){let n={};return e&&Object.entries(e).forEach(([t,r])=>{typeof t==\"string\"&&(t=t.toLowerCase()),n[t]=r}),n}function fe(e){let n=N(e),t=new p({compound:!0,multigraph:!0}).setGraph({});return e.nodes().forEach(r=>{t.setNode(r,{label:r}),t.setParent(r,\"layer\"+e.node(r).rank)}),e.edges().forEach(r=>t.setEdge(r.v,r.w,{},r.name)),n.forEach((r,o)=>{let i=\"layer\"+o;t.setNode(i,{rank:\"same\"}),r.reduce((s,a)=>(t.setEdge(s,a,{style:\"invis\"}),a))}),t}var xo={time:P,notime:M},sr={graphlib:z,version:U,layout:he,debug:fe,util:{time:P,notime:M}},To=sr;export{p as Graph,fe as debug,To as default,z as graphlib,he as layout,xo as util,U as version};\n/*! For license information please see dagre.esm.js.LEGAL.txt */\n//# sourceMappingURL=dagre.esm.js.map\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { toast } from 'sonner';\nimport type { Connection, Edge, NodeChange } from '@xyflow/react';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport { type LayoutDirection } from '@/lib/layout-with-dagre';\nimport { createLogger } from '@/lib/logger';\n\nimport { mapEventTypeToState } from '@/components/common/feature-node/derive-feature-state';\nimport { useGraphState, type GraphCallbacks } from '@/hooks/use-graph-state';\nimport { useSSEEventHandler } from '@/hooks/use-sse-event-handler';\nimport { useServerActions } from '@/hooks/use-server-actions';\nimport { useAgentEventsContext } from '@/hooks/agent-events-provider';\n\nconst log = createLogger('[Polling]');\nconst POLL_INTERVAL_MS = 15_000;\n\nexport interface ControlCenterState {\n nodes: CanvasNodeType[];\n edges: Edge[];\n onNodesChange: (changes: NodeChange<CanvasNodeType>[]) => void;\n handleConnect: (connection: Connection) => void;\n handleAddRepository: (path: string) => { wasEmpty: boolean; repoPath: string };\n handleLayout: (direction: LayoutDirection) => void;\n handleArchiveFeature: (featureId: string) => void;\n handleDeleteFeature: (\n featureId: string,\n cleanup?: boolean,\n cascadeDelete?: boolean,\n closePr?: boolean\n ) => void;\n handleRetryFeature: (featureId: string) => void;\n handleStartFeature: (featureId: string) => void;\n handleStopFeature: (featureId: string) => void;\n handleUnarchiveFeature: (featureId: string) => void;\n handleDeleteRepository: (repositoryId: string) => Promise<void>;\n createFeatureNode: (\n sourceNodeId: string | null,\n dataOverride?: Partial<FeatureNodeData>,\n edgeType?: string\n ) => string;\n /** Whether archived features are shown on the canvas. */\n showArchived: boolean;\n /** Toggle archived feature visibility. */\n setShowArchived: (show: boolean) => void;\n /** Stable lookup: repositoryPath for a feature node. */\n getFeatureRepositoryPath: (featureNodeId: string) => string | undefined;\n /** Stable lookup: repository data by nodeId. */\n getRepositoryData: (nodeId: string) => RepositoryNodeData | undefined;\n /** Sync callbacks into derived node data (does not trigger re-render). */\n setCallbacks: (callbacks: GraphCallbacks) => void;\n}\n\nlet nextFeatureId = 0;\n\nexport function useControlCenterState(\n initialNodes: CanvasNodeType[],\n initialEdges: Edge[]\n): ControlCenterState {\n const router = useRouter();\n\n // Archive toggle: persists during session, resets on page reload (FR-10)\n const [showArchived, setShowArchived] = useState(false);\n\n const {\n nodes,\n edges,\n reconcile,\n updateFeature,\n addPendingFeature,\n removeFeature,\n restoreFeature,\n addRepository: addRepositoryToMap,\n removeRepository,\n replaceRepository,\n getFeatureRepositoryPath,\n getRepositoryData,\n getRepoMapSize,\n setCallbacks,\n beginMutation,\n endMutation,\n isMutating,\n } = useGraphState(initialNodes, initialEdges, showArchived);\n\n // Refs for stable access to latest nodes/edges without callback recreation\n const nodesRef = useRef(nodes);\n const edgesRef = useRef(edges);\n useEffect(() => {\n nodesRef.current = nodes;\n edgesRef.current = edges;\n }, [nodes, edges]);\n\n // Sync server props into domain Maps when initialNodes/initialEdges change.\n // Keyed by a stable string so we don't re-reconcile on every render.\n const initialNodeKey = useMemo(\n () =>\n initialNodes\n .map((n) => n.id)\n .sort()\n .join(','),\n [initialNodes]\n );\n const initialDataKey = useMemo(\n () =>\n initialNodes\n .filter((n) => n.type === 'featureNode')\n .map((n) => {\n const d = n.data as FeatureNodeData;\n return `${n.id}:${d.state}:${d.lifecycle}`;\n })\n .sort()\n .join(','),\n [initialNodes]\n );\n\n const prevReconcileKey = useRef('');\n\n useEffect(() => {\n const key = `${initialNodeKey}|${initialDataKey}`;\n if (key !== prevReconcileKey.current) {\n prevReconcileKey.current = key;\n reconcile(initialNodes, initialEdges);\n }\n }, [initialNodeKey, initialDataKey, initialNodes, initialEdges, reconcile]);\n\n // Track previous feature states for fallback notifications\n const prevFeatureStatesRef = useRef<Map<string, FeatureNodeData['state']>>(new Map());\n\n const { events } = useAgentEventsContext();\n\n useEffect(() => {\n const prevStates = prevFeatureStatesRef.current;\n for (const node of initialNodes) {\n if (node.type !== 'featureNode') continue;\n const data = node.data as FeatureNodeData;\n const prev = prevStates.get(node.id);\n if (prev !== undefined && prev !== data.state) {\n const sseAlreadyCovered = events.some(\n (e) => e.featureId === data.featureId && mapEventTypeToState(e.eventType) === data.state\n );\n if (!sseAlreadyCovered) {\n if (data.state === 'done') {\n toast.success(data.name, { description: 'Feature completed!' });\n } else if (data.state === 'action-required') {\n toast.warning(data.name, {\n description: 'Waiting for your approval',\n action: {\n label: 'Review',\n onClick: () => router.push(`/feature/${data.featureId}`),\n },\n });\n } else if (data.state === 'error') {\n toast.error(data.name, { description: data.errorMessage ?? 'Agent failed' });\n }\n }\n }\n prevStates.set(node.id, data.state);\n }\n }, [initialDataKey, initialNodes, events, router]);\n\n // SSE event processing: state/lifecycle updates, metadata fetches, approval events.\n // Extracted into useSSEEventHandler for focus.\n useSSEEventHandler({\n nodesRef,\n updateFeature,\n isMutating,\n beginMutation,\n endMutation,\n });\n\n // --- Polling fallback: catch any SSE events that were missed ---\n useEffect(() => {\n log.debug(`polling enabled (${POLL_INTERVAL_MS}ms interval)`);\n\n const timer = setInterval(async () => {\n // Skip when tab is hidden — no point polling for a user who isn't looking.\n if (document.hidden) return;\n // Skip fetch entirely while a mutation is in-flight — the response\n // would contain pre-mutation data that reconcile would discard anyway.\n if (isMutating()) return;\n\n try {\n // Use a plain fetch instead of a server action so the poll\n // doesn't trigger the Next.js \"Rendering…\" indicator.\n const res = await fetch('/api/graph-data');\n if (!res.ok) throw new Error(`status ${res.status}`);\n const { nodes: freshNodes, edges: freshEdges } = await res.json();\n reconcile(freshNodes, freshEdges);\n } catch {\n log.warn('poll fetch failed — will retry next interval');\n }\n }, POLL_INTERVAL_MS);\n\n return () => {\n log.debug('polling disabled');\n clearInterval(timer);\n };\n }, [reconcile, isMutating]);\n\n // Server action handlers: retry, start, stop, archive, unarchive, delete, deleteRepo, addRepo.\n // Extracted into useServerActions for focus.\n const {\n handleRetryFeature,\n handleStartFeature,\n handleStopFeature,\n handleArchiveFeature,\n handleUnarchiveFeature,\n handleDeleteFeature,\n handleDeleteRepository,\n handleLayout,\n handleAddRepository,\n } = useServerActions({\n nodesRef,\n edgesRef,\n updateFeature,\n removeFeature,\n restoreFeature,\n addRepositoryToMap,\n removeRepository,\n replaceRepository,\n getRepositoryData,\n getRepoMapSize,\n reconcile,\n beginMutation,\n endMutation,\n });\n\n // onNodesChange is a no-op: nodes are derived from domain Maps.\n // Since nodesDraggable=false and elementsSelectable=false, only React Flow's\n // internal replace/dimensions changes come through — we ignore them all.\n const onNodesChange = useCallback((_changes: NodeChange<CanvasNodeType>[]) => {\n // Intentional no-op: domain Maps are the source of truth.\n }, []);\n\n const handleConnect = useCallback((_connection: Connection) => {\n // Connections are managed via domain operations, not direct edge manipulation.\n }, []);\n\n const createFeatureNode = useCallback(\n (\n sourceNodeId: string | null,\n dataOverride?: Partial<FeatureNodeData>,\n edgeType?: string\n ): string => {\n // Use real feature ID when available (from server), otherwise temp ID\n const id = dataOverride?.featureId\n ? `feat-${dataOverride.featureId}`\n : `feature-${Date.now()}-${nextFeatureId++}`;\n const newFeatureData: FeatureNodeData = {\n name: dataOverride?.name ?? 'New Feature',\n description: dataOverride?.description ?? 'Describe what this feature does',\n featureId: dataOverride?.featureId ?? `#${id.slice(-4)}`,\n lifecycle: 'requirements',\n state: dataOverride?.state ?? 'running',\n progress: 0,\n repositoryPath: dataOverride?.repositoryPath ?? '',\n branch: dataOverride?.branch ?? '',\n };\n\n const parentNodeId = edgeType === 'dependencyEdge' && sourceNodeId ? sourceNodeId : undefined;\n\n addPendingFeature(id, newFeatureData, parentNodeId);\n\n return id;\n },\n [addPendingFeature]\n );\n\n return {\n nodes,\n edges,\n onNodesChange,\n handleConnect,\n handleAddRepository,\n handleArchiveFeature,\n handleLayout,\n handleDeleteFeature,\n handleRetryFeature,\n handleStartFeature,\n handleStopFeature,\n handleUnarchiveFeature,\n handleDeleteRepository,\n createFeatureNode,\n showArchived,\n setShowArchived,\n getFeatureRepositoryPath,\n getRepositoryData,\n setCallbacks,\n };\n}\n","'use client';\n\n/**\n * useGraphDerivation\n *\n * Focused hook: takes pre-derived graph nodes/edges from deriveGraph() and\n * applies dagre layout with position caching. Topology-only re-runs dagre;\n * data-only changes reuse cached positions.\n *\n * Extracted from use-graph-state.ts — see Graph State Architecture in\n * src/presentation/web/CLAUDE.md for design rationale.\n */\n\nimport { useMemo, useRef } from 'react';\nimport type { Edge, Position } from '@xyflow/react';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport { layoutWithDagre, type LayoutOptions } from '@/lib/layout-with-dagre';\n\ninterface DerivedGraph {\n nodes: CanvasNodeType[];\n edges: Edge[];\n}\n\nexport interface UseGraphDerivationReturn {\n nodes: CanvasNodeType[];\n edges: Edge[];\n}\n\n/**\n * Apply dagre layout to a pre-derived graph, caching positions so dagre only\n * re-runs when topology (node IDs or edge connections) actually changes.\n *\n * On topology change the new layout is anchored to the first surviving node's\n * previous position so the graph doesn't drift when nodes are added/removed.\n */\nexport function useGraphDerivation(\n derived: DerivedGraph,\n layoutDefaults: LayoutOptions\n): UseGraphDerivationReturn {\n const layoutCacheRef = useRef<{\n key: string;\n positions: Map<\n string,\n { position: { x: number; y: number }; targetPosition: Position; sourcePosition: Position }\n >;\n }>({ key: '', positions: new Map() });\n\n return useMemo(() => {\n const nodeIds = derived.nodes\n .map((n) => n.id)\n .sort()\n .join(',');\n const edgeKeys = derived.edges\n .map((e) => `${e.source}-${e.target}`)\n .sort()\n .join(',');\n const topologyKey = `${nodeIds}|${edgeKeys}|${layoutDefaults.direction}`;\n\n if (topologyKey !== layoutCacheRef.current.key) {\n // Topology changed — re-run dagre\n const result = layoutWithDagre(derived.nodes, derived.edges, layoutDefaults);\n const positions = new Map<\n string,\n { position: { x: number; y: number }; targetPosition: Position; sourcePosition: Position }\n >();\n for (const node of result.nodes) {\n positions.set(node.id, {\n position: node.position,\n targetPosition: (node as Record<string, unknown>).targetPosition as Position,\n sourcePosition: (node as Record<string, unknown>).sourcePosition as Position,\n });\n }\n\n // Anchor new layout to previous positions so the graph doesn't drift.\n // Find the first surviving node (exists in both old and new layouts) and\n // shift the entire new layout by the delta between its old and new position.\n const prevPositions = layoutCacheRef.current.positions;\n if (prevPositions.size > 0) {\n let dx = 0;\n let dy = 0;\n for (const [id, newPos] of positions) {\n const oldPos = prevPositions.get(id);\n if (oldPos) {\n dx = oldPos.position.x - newPos.position.x;\n dy = oldPos.position.y - newPos.position.y;\n break;\n }\n }\n if (dx !== 0 || dy !== 0) {\n for (const pos of positions.values()) {\n pos.position = { x: pos.position.x + dx, y: pos.position.y + dy };\n }\n for (const node of result.nodes) {\n node.position = { x: node.position.x + dx, y: node.position.y + dy };\n }\n }\n }\n\n layoutCacheRef.current = { key: topologyKey, positions };\n return result;\n }\n\n // Data-only change — apply cached positions without re-running dagre\n const { positions } = layoutCacheRef.current;\n const nodes = derived.nodes.map((node) => {\n const cached = positions.get(node.id);\n return cached ? { ...node, ...cached } : node;\n });\n return { nodes, edges: derived.edges };\n }, [derived, layoutDefaults]);\n}\n","'use client';\n\nimport { useState, useMemo, useCallback, useRef, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { Edge } from '@xyflow/react';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport {\n deriveGraph,\n type FeatureEntry,\n type RepoEntry,\n type GraphCallbacks,\n} from '@/lib/derive-graph';\nimport { getCanvasLayoutDefaults } from '@/lib/layout-with-dagre';\nimport { useGraphDerivation } from './use-graph-derivation';\n\nexport type { GraphCallbacks } from '@/lib/derive-graph';\n\nexport interface UseGraphStateReturn {\n /** Derived React Flow nodes (from domain Maps). */\n nodes: CanvasNodeType[];\n /** Derived React Flow edges (from domain Maps). */\n edges: Edge[];\n /**\n * Reconcile domain Maps with fresh server data (new initialNodes/initialEdges).\n * Preserves pending (creating) nodes unless a matching real feature appears.\n * No-ops when a mutation is in-flight (see beginMutation/endMutation).\n */\n reconcile: (newNodes: CanvasNodeType[], newEdges: Edge[]) => void;\n /** Update a feature's state/lifecycle/name (e.g., from SSE events). */\n updateFeature: (featureNodeId: string, updates: FeatureDataUpdates) => void;\n /** Add a pending (optimistic) feature node (state='creating'). */\n addPendingFeature: (nodeId: string, data: FeatureNodeData, parentNodeId?: string) => void;\n /** Remove a pending feature node (e.g., on rollback). */\n removePendingFeature: (nodeId: string) => void;\n /** Remove a real feature node from the domain Map. */\n removeFeature: (nodeId: string) => void;\n /** Restore a previously removed feature (rollback). */\n restoreFeature: (nodeId: string, entry: FeatureEntry) => void;\n /** Add a repository node (may use a temp ID initially). */\n addRepository: (nodeId: string, data: RepositoryNodeData) => void;\n /** Remove a repository node. */\n removeRepository: (nodeId: string) => void;\n /** Replace a temp repo ID with the real one (atomic). */\n replaceRepository: (tempId: string, realId: string, data: RepositoryNodeData) => void;\n /** Stable lookup: get the repositoryPath for a feature node. */\n getFeatureRepositoryPath: (featureNodeId: string) => string | undefined;\n /** Stable lookup: get repository node data by nodeId. */\n getRepositoryData: (nodeId: string) => RepositoryNodeData | undefined;\n /** Stable lookup: get the current number of repositories in the domain Map. */\n getRepoMapSize: () => number;\n /** Update callbacks injected into node data (does NOT trigger re-render). */\n setCallbacks: (callbacks: GraphCallbacks) => void;\n /**\n * Signal that an optimistic mutation has started. While any mutation is\n * in-flight, `reconcile` becomes a no-op so stale poll data cannot\n * overwrite optimistic state. Calls are ref-counted — nest freely.\n */\n beginMutation: () => void;\n /**\n * Signal that an optimistic mutation has resolved. Adds a one-poll-interval\n * cooldown (default 3 s) so the next poll fetches post-mutation data.\n */\n endMutation: (cooldownMs?: number) => void;\n /** Whether a mutation is currently in-flight (for polling skip logic). */\n isMutating: () => boolean;\n}\n\n/** Parse initialNodes + initialEdges into domain Maps. */\nfunction parseMaps(\n initialNodes: CanvasNodeType[],\n initialEdges: Edge[]\n): {\n featureMap: Map<string, FeatureEntry>;\n repoMap: Map<string, RepoEntry>;\n} {\n // Build parentNodeId map from dependency edges\n const parentByChild = new Map<string, string>();\n for (const edge of initialEdges) {\n if (edge.type === 'dependencyEdge') {\n parentByChild.set(edge.target, edge.source);\n }\n }\n\n const featureMap = new Map<string, FeatureEntry>();\n const repoMap = new Map<string, RepoEntry>();\n\n for (const node of initialNodes) {\n if (node.type === 'featureNode') {\n featureMap.set(node.id, {\n nodeId: node.id,\n data: node.data as FeatureNodeData,\n parentNodeId: parentByChild.get(node.id),\n });\n } else if (node.type === 'repositoryNode') {\n repoMap.set(node.id, {\n nodeId: node.id,\n data: node.data as RepositoryNodeData,\n });\n }\n }\n\n return { featureMap, repoMap };\n}\n\ntype FeatureDataUpdates = Partial<\n Pick<FeatureNodeData, 'state' | 'lifecycle' | 'name' | 'description'>\n>;\n\nfunction isFeatureDataUnchanged(data: FeatureNodeData, updates: FeatureDataUpdates): boolean {\n return (\n (updates.state === undefined || updates.state === data.state) &&\n (updates.lifecycle === undefined || updates.lifecycle === data.lifecycle) &&\n (updates.name === undefined || updates.name === data.name) &&\n (updates.description === undefined || updates.description === data.description)\n );\n}\n\n/**\n * Shallow-compare two Maps by key set and entry data (JSON equality).\n * Returns true if they are structurally identical, avoiding unnecessary re-renders.\n */\nfunction mapsEqual<T extends { data: unknown; parentNodeId?: string }>(\n a: Map<string, T>,\n b: Map<string, T>\n): boolean {\n if (a.size !== b.size) return false;\n for (const [key, aEntry] of a) {\n const bEntry = b.get(key);\n if (!bEntry) return false;\n if (aEntry.parentNodeId !== bEntry.parentNodeId) return false;\n if (aEntry.data === bEntry.data) continue;\n if (JSON.stringify(aEntry.data) !== JSON.stringify(bEntry.data)) return false;\n }\n return true;\n}\n\nexport function useGraphState(\n initialNodes: CanvasNodeType[],\n initialEdges: Edge[],\n showArchived = false\n): UseGraphStateReturn {\n const { i18n } = useTranslation();\n const layoutDefaults = useMemo(() => getCanvasLayoutDefaults(i18n.dir()), [i18n]);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- intentional: parse only on mount (like useState initializer)\n const init = useMemo(() => parseMaps(initialNodes, initialEdges), []);\n\n const [featureMap, setFeatureMap] = useState<Map<string, FeatureEntry>>(init.featureMap);\n const [repoMap, setRepoMap] = useState<Map<string, RepoEntry>>(init.repoMap);\n const [pendingMap, setPendingMap] = useState<Map<string, FeatureEntry>>(\n new Map<string, FeatureEntry>()\n );\n\n // Buffer for SSE updates that arrive before their feature is in featureMap.\n // When reconcile adds new features, buffered updates are applied automatically.\n const pendingUpdatesRef = useRef<\n Map<string, Partial<Pick<FeatureNodeData, 'state' | 'lifecycle' | 'name' | 'description'>>>\n >(new Map());\n\n // Protect recently-added/replaced repos from stale-poll reconcile.\n // After addRepository or replaceRepository, the repo ID is marked as protected.\n // Once reconcile sees the repo in server data, the protection is cleared.\n // This prevents a stale poll (that fetched data before the server action completed)\n // from wiping a repo that the client has already added.\n const protectedRepoIdsRef = useRef<Set<string>>(new Set());\n\n // Mutation guard: ref-counted counter. While > 0, reconcile is a no-op\n // so stale poll data cannot overwrite optimistic state.\n const mutationCountRef = useRef(0);\n const mutationTimersRef = useRef<Set<ReturnType<typeof setTimeout>>>(new Set());\n\n // Track 'deleting' features that the server no longer returns.\n // Retained for one extra reconcile cycle so the user sees the deleting state\n // before the node disappears from the canvas.\n const deletingRetainedRef = useRef<Set<string>>(new Set());\n\n // Callbacks stored in a ref so changing them doesn't trigger re-render.\n // The stable wrapper object reads from the ref so node closures always use latest callbacks.\n const callbacksRef = useRef<GraphCallbacks>({});\n const stableCallbacks = useMemo<GraphCallbacks>(\n () => ({\n onNodeAction: (nodeId) => callbacksRef.current.onNodeAction?.(nodeId),\n onNodeSettings: (nodeId) => callbacksRef.current.onNodeSettings?.(nodeId),\n onFeatureDelete: (featureId, cleanup, cascadeDelete, closePr) =>\n callbacksRef.current.onFeatureDelete?.(featureId, cleanup, cascadeDelete, closePr),\n onRepositoryAdd: (nodeId) => callbacksRef.current.onRepositoryAdd?.(nodeId),\n onRepositoryClick: (nodeId) => callbacksRef.current.onRepositoryClick?.(nodeId),\n onRepositoryDelete: (repositoryId) => callbacksRef.current.onRepositoryDelete?.(repositoryId),\n onRetryFeature: (featureId) => callbacksRef.current.onRetryFeature?.(featureId),\n onStartFeature: (featureId) => callbacksRef.current.onStartFeature?.(featureId),\n onArchiveFeature: (featureId) => callbacksRef.current.onArchiveFeature?.(featureId),\n onUnarchiveFeature: (featureId) => callbacksRef.current.onUnarchiveFeature?.(featureId),\n }),\n []\n );\n\n // Stable refs for domain Maps (for use in callbacks without depending on state)\n const featureMapRef = useRef(featureMap);\n featureMapRef.current = featureMap;\n const repoMapRef = useRef(repoMap);\n repoMapRef.current = repoMap;\n\n // Filter archived features from the Map when the toggle is off.\n // This gives instant toggle response (no server round-trip) per NFR-3.\n const visibleFeatureMap = useMemo(() => {\n if (showArchived) return featureMap;\n const filtered = new Map<string, FeatureEntry>();\n for (const [id, entry] of featureMap) {\n if ((entry.data.state as string) !== 'archived') {\n filtered.set(id, entry);\n }\n }\n return filtered.size === featureMap.size ? featureMap : filtered;\n }, [featureMap, showArchived]);\n\n // Derive graph from domain Maps (runs on every Map change, but dagre only on topology change)\n const derived = useMemo(\n () => deriveGraph(visibleFeatureMap, repoMap, pendingMap, stableCallbacks),\n [visibleFeatureMap, repoMap, pendingMap, stableCallbacks]\n );\n\n // Cache dagre layout positions — only re-run when node set or edge connections change.\n // Extracted into useGraphDerivation for focus; see hooks/use-graph-derivation.ts.\n const { nodes, edges } = useGraphDerivation(derived, layoutDefaults);\n\n // --- Mutations ---\n\n const reconcile = useCallback((newNodes: CanvasNodeType[], newEdges: Edge[]) => {\n // Skip reconciliation while an optimistic mutation is in-flight.\n // Stale poll data fetched before the mutation completed would overwrite\n // the optimistic state, causing flicker (nodes disappearing/reappearing).\n if (mutationCountRef.current > 0) return;\n\n const { featureMap: newFeatureMap, repoMap: newRepoMap } = parseMaps(newNodes, newEdges);\n\n // Precompute match keys so we don't scan newFeatureMap.values() per pending entry\n const realFeatureKeys = new Set(\n [...newFeatureMap.values()].map((e) => `${e.data.name}\\0${e.data.repositoryPath}`)\n );\n\n setFeatureMap((currentFeatureMap) => {\n // Preserve pending (creating) nodes unless matched by name+repositoryPath from newFeatureMap\n const pendingEntries = [...currentFeatureMap.entries()].filter(\n ([, e]) => e.data.state === 'creating'\n );\n\n const merged = new Map(newFeatureMap);\n\n // Keep pending nodes that don't have a real counterpart in new data\n for (const [tempId, pendingEntry] of pendingEntries) {\n const key = `${pendingEntry.data.name}\\0${pendingEntry.data.repositoryPath}`;\n if (!realFeatureKeys.has(key)) {\n merged.set(tempId, pendingEntry);\n }\n }\n\n // Preserve 'deleting' state for features being deleted.\n // If the server still returns the feature, override its state to 'deleting'.\n // If the server no longer returns it (soft-deleted), retain it for one\n // extra reconcile cycle so the user sees the deleting animation.\n const nextRetained = new Set<string>();\n for (const [id, entry] of currentFeatureMap) {\n if (entry.data.state === 'deleting') {\n if (merged.has(id)) {\n // Server still has it — override state to keep showing 'deleting'\n merged.set(id, {\n ...merged.get(id)!,\n data: { ...merged.get(id)!.data, state: 'deleting' },\n });\n } else if (!deletingRetainedRef.current.has(id)) {\n // First reconcile after server removal — retain with deleting state\n merged.set(id, entry);\n nextRetained.add(id);\n }\n // else: already retained once — let it disappear\n }\n }\n deletingRetainedRef.current = nextRetained;\n\n // Apply any buffered SSE updates to features that now exist in the map\n for (const [nodeId, updates] of pendingUpdatesRef.current) {\n const entry = merged.get(nodeId);\n if (entry) {\n merged.set(nodeId, { ...entry, data: { ...entry.data, ...updates } });\n pendingUpdatesRef.current.delete(nodeId);\n }\n }\n\n // Avoid re-render when polling returns identical data\n if (mapsEqual(currentFeatureMap, merged)) return currentFeatureMap;\n return merged;\n });\n\n // Clean pendingMap entries that now have a real counterpart in server data\n setPendingMap((currentPendingMap) => {\n if (currentPendingMap.size === 0) return currentPendingMap;\n let changed = false;\n const next = new Map(currentPendingMap);\n for (const [tempId, pendingEntry] of currentPendingMap) {\n const key = `${pendingEntry.data.name}\\0${pendingEntry.data.repositoryPath}`;\n if (realFeatureKeys.has(key)) {\n next.delete(tempId);\n changed = true;\n }\n }\n return changed ? next : currentPendingMap;\n });\n\n // Merge repoMap: preserve optimistic (temp) repos AND recently-added/replaced\n // repos that the server doesn't know about yet. Without this, a polling\n // reconcile that fires before the server action returns (or uses stale data\n // from an in-flight fetch) would wipe the repo, causing a canvas→empty flicker.\n setRepoMap((currentRepoMap) => {\n // Start with everything the server returned\n const merged = new Map(newRepoMap);\n\n // Build a set of repositoryPaths present in server data for dedup\n const serverPaths = new Set([...newRepoMap.values()].map((e) => e.data.repositoryPath));\n\n for (const [id, entry] of currentRepoMap) {\n if (merged.has(id)) {\n // Server confirmed this repo — no longer needs protection\n protectedRepoIdsRef.current.delete(id);\n continue;\n }\n if (serverPaths.has(entry.data.repositoryPath)) {\n // Server has a repo with same path — clear protection\n protectedRepoIdsRef.current.delete(id);\n continue;\n }\n // Keep temp repos or protected (recently added/replaced) repos\n if (id.startsWith('repo-temp-') || protectedRepoIdsRef.current.has(id)) {\n merged.set(id, entry);\n }\n }\n\n // Avoid re-render when polling returns identical data\n if (mapsEqual(currentRepoMap, merged)) return currentRepoMap;\n return merged;\n });\n }, []);\n\n const updateFeature = useCallback((featureNodeId: string, updates: FeatureDataUpdates) => {\n setFeatureMap((prev) => {\n const entry = prev.get(featureNodeId);\n if (!entry) {\n // Feature not yet in map — buffer update for when reconcile adds it\n pendingUpdatesRef.current.set(featureNodeId, {\n ...pendingUpdatesRef.current.get(featureNodeId),\n ...updates,\n });\n return prev;\n }\n // Clear any buffered update for this feature since it's now in the map\n pendingUpdatesRef.current.delete(featureNodeId);\n if (isFeatureDataUnchanged(entry.data, updates)) return prev;\n const next = new Map(prev);\n next.set(featureNodeId, { ...entry, data: { ...entry.data, ...updates } });\n return next;\n });\n\n // Also check pendingMap\n setPendingMap((prev) => {\n const entry = prev.get(featureNodeId);\n if (!entry) return prev;\n if (isFeatureDataUnchanged(entry.data, updates)) return prev;\n const next = new Map(prev);\n next.set(featureNodeId, { ...entry, data: { ...entry.data, ...updates } });\n return next;\n });\n }, []);\n\n const addPendingFeature = useCallback(\n (nodeId: string, data: FeatureNodeData, parentNodeId?: string) => {\n setPendingMap((prev) => {\n const next = new Map(prev);\n next.set(nodeId, { nodeId, data, parentNodeId });\n return next;\n });\n },\n []\n );\n\n const removePendingFeature = useCallback((nodeId: string) => {\n setPendingMap((prev) => {\n if (!prev.has(nodeId)) return prev;\n const next = new Map(prev);\n next.delete(nodeId);\n return next;\n });\n }, []);\n\n const removeFeature = useCallback((nodeId: string) => {\n setFeatureMap((prev) => {\n if (!prev.has(nodeId)) return prev;\n const next = new Map(prev);\n next.delete(nodeId);\n return next;\n });\n }, []);\n\n const restoreFeature = useCallback((nodeId: string, entry: FeatureEntry) => {\n setFeatureMap((prev) => {\n const next = new Map(prev);\n next.set(nodeId, entry);\n return next;\n });\n }, []);\n\n const addRepository = useCallback((nodeId: string, data: RepositoryNodeData) => {\n protectedRepoIdsRef.current.add(nodeId);\n setRepoMap((prev) => {\n const next = new Map(prev);\n next.set(nodeId, { nodeId, data });\n return next;\n });\n }, []);\n\n const removeRepository = useCallback((nodeId: string) => {\n protectedRepoIdsRef.current.delete(nodeId);\n setRepoMap((prev) => {\n if (!prev.has(nodeId)) return prev;\n const next = new Map(prev);\n next.delete(nodeId);\n return next;\n });\n }, []);\n\n const replaceRepository = useCallback(\n (tempId: string, realId: string, data: RepositoryNodeData) => {\n protectedRepoIdsRef.current.delete(tempId);\n protectedRepoIdsRef.current.add(realId);\n setRepoMap((prev) => {\n if (!prev.has(tempId)) return prev;\n const next = new Map(prev);\n next.delete(tempId);\n next.set(realId, { nodeId: realId, data });\n return next;\n });\n },\n []\n );\n\n const getFeatureRepositoryPath = useCallback((featureNodeId: string): string | undefined => {\n return featureMapRef.current.get(featureNodeId)?.data.repositoryPath;\n }, []);\n\n const getRepositoryData = useCallback((nodeId: string): RepositoryNodeData | undefined => {\n return repoMapRef.current.get(nodeId)?.data;\n }, []);\n\n const getRepoMapSize = useCallback((): number => {\n return repoMapRef.current.size;\n }, []);\n\n const setCallbacks = useCallback((callbacks: GraphCallbacks) => {\n callbacksRef.current = callbacks;\n }, []);\n\n const beginMutation = useCallback(() => {\n mutationCountRef.current++;\n }, []);\n\n const endMutation = useCallback((cooldownMs = 3_000) => {\n // Delay decrement by one poll interval so the next fetch after the\n // mutation returns post-mutation data, not a stale in-flight response.\n const timer = setTimeout(() => {\n mutationCountRef.current = Math.max(0, mutationCountRef.current - 1);\n mutationTimersRef.current.delete(timer);\n }, cooldownMs);\n mutationTimersRef.current.add(timer);\n }, []);\n\n const isMutating = useCallback(() => mutationCountRef.current > 0, []);\n\n // Cleanup cooldown timers on unmount\n useEffect(() => {\n const timers = mutationTimersRef.current;\n return () => {\n for (const timer of timers) clearTimeout(timer);\n timers.clear();\n };\n }, []);\n\n return {\n nodes,\n edges,\n reconcile,\n updateFeature,\n addPendingFeature,\n removePendingFeature,\n removeFeature,\n restoreFeature,\n addRepository,\n removeRepository,\n replaceRepository,\n getFeatureRepositoryPath,\n getRepositoryData,\n getRepoMapSize,\n setCallbacks,\n beginMutation,\n endMutation,\n isMutating,\n };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40264230f863970e48854876df9f3fc11a8bf79378\":{\"name\":\"getFeatureMetadata\"}},\"src/presentation/web/app/actions/get-feature-metadata.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40264230f863970e48854876df9f3fc11a8bf79378\",callServer,void 0,findSourceMapURL,\"getFeatureMetadata\");export{$$RSC_SERVER_ACTION_0 as getFeatureMetadata};","'use client';\n\n/**\n * useSSEEventHandler\n *\n * Focused hook: processes SSE agent events and updates the graph state.\n * Handles state/lifecycle updates, metadata fetches, and the feature-approved\n * optimistic update event.\n *\n * Extracted from use-control-center-state.ts — see SSE Architecture in\n * src/presentation/web/CLAUDE.md for design rationale.\n */\n\nimport { useEffect, useRef, type RefObject } from 'react';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport { getFeatureMetadata } from '@/app/actions/get-feature-metadata';\nimport { useAgentEventsContext } from '@/hooks/agent-events-provider';\nimport { resolveSseEventUpdates } from '@/components/common/feature-node/derive-feature-state';\n\n/** Must match the message string emitted by the SSE route in agent-events/route.ts */\nconst METADATA_UPDATED_MESSAGE = 'Feature metadata updated';\n\ntype FeatureDataUpdates = Partial<\n Pick<FeatureNodeData, 'state' | 'lifecycle' | 'name' | 'description'>\n>;\n\nexport interface UseSSEEventHandlerDeps {\n /** Current derived nodes (used to read feature state before applying SSE updates). */\n nodesRef: RefObject<CanvasNodeType[]>;\n /** Update a feature's state/lifecycle/name in the domain Maps. */\n updateFeature: (featureNodeId: string, updates: FeatureDataUpdates) => void;\n /** Whether a mutation is currently in-flight. */\n isMutating: () => boolean;\n /** Signal that an optimistic mutation has started. */\n beginMutation: () => void;\n /** Signal that an optimistic mutation has resolved. */\n endMutation: (cooldownMs?: number) => void;\n}\n\n/**\n * Processes incoming SSE agent events and applies state/lifecycle/metadata\n * updates to the graph domain Maps. Also handles the `shipit-ai:feature-approved`\n * custom DOM event for optimistic approval state.\n */\nexport function useSSEEventHandler({\n nodesRef,\n updateFeature,\n isMutating,\n beginMutation,\n endMutation,\n}: UseSSEEventHandlerDeps): void {\n const { events } = useAgentEventsContext();\n\n // SSE effect: only state + lifecycle updates\n const processedEventCountRef = useRef(0);\n\n useEffect(() => {\n // Clamp cursor if events were pruned\n if (processedEventCountRef.current > events.length) {\n processedEventCountRef.current = 0;\n }\n if (events.length <= processedEventCountRef.current) return;\n const newEvents = events.slice(processedEventCountRef.current);\n processedEventCountRef.current = events.length;\n\n for (const { featureId, state, lifecycle } of resolveSseEventUpdates(newEvents)) {\n if (state !== undefined || lifecycle !== undefined) {\n const nodeId = `feat-${featureId}`;\n const existingNode = nodesRef.current.find((n) => n.id === nodeId);\n const existingState = existingNode\n ? (existingNode.data as FeatureNodeData).state\n : undefined;\n\n // Skip SSE updates for features in 'deleting' state — the optimistic\n // delete state must not be overwritten by stale SSE events (e.g. agent\n // cancellation emitting AgentFailed during the soft-delete window).\n if (existingState === 'deleting') continue;\n\n // Skip SSE error events during mutation cooldown — after approve/reject\n // the agent may still report AgentFailed from the previous run before\n // the resume kicks in. The optimistic 'running' state must not be\n // overwritten by stale error events during this transition window.\n if (state === 'error' && isMutating() && existingState === 'running') continue;\n\n updateFeature(nodeId, {\n ...(state !== undefined && { state }),\n ...(lifecycle !== undefined && { lifecycle }),\n });\n }\n }\n }, [events, updateFeature, isMutating, nodesRef]);\n\n // Listen for optimistic approval/rejection events from the drawer (fires before SSE arrives).\n // Uses beginMutation + endMutation to prevent stale poll/reconcile data from overwriting\n // the optimistic 'running' state during the transition window (avoids brief \"Something went wrong\" flash).\n useEffect(() => {\n const handler = (e: Event) => {\n const { featureId } = (e as CustomEvent<{ featureId: string }>).detail;\n beginMutation();\n updateFeature(`feat-${featureId}`, { state: 'running' });\n endMutation();\n };\n window.addEventListener('shipit-ai:feature-approved', handler);\n return () => window.removeEventListener('shipit-ai:feature-approved', handler);\n }, [updateFeature, beginMutation, endMutation]);\n\n // Separate effect: fetch metadata (name + description) when SSE reports it changed\n const metadataFetchedRef = useRef<Set<string>>(new Set());\n const processedMetadataCountRef = useRef(0);\n\n useEffect(() => {\n // Clamp cursor if events were pruned\n if (processedMetadataCountRef.current > events.length) {\n processedMetadataCountRef.current = 0;\n }\n if (events.length <= processedMetadataCountRef.current) return;\n const newEvents = events.slice(processedMetadataCountRef.current);\n processedMetadataCountRef.current = events.length;\n\n for (const event of newEvents) {\n if (event.message !== METADATA_UPDATED_MESSAGE) continue;\n if (metadataFetchedRef.current.has(event.featureId)) continue;\n metadataFetchedRef.current.add(event.featureId);\n\n const nodeId = `feat-${event.featureId}`;\n getFeatureMetadata(event.featureId)\n .then((meta) => {\n if (meta) {\n updateFeature(nodeId, { name: meta.name, description: meta.description });\n }\n })\n .catch(() => {\n // Silent: metadata fetch failure is non-critical\n });\n }\n }, [events, updateFeature]);\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"409e7f6d9000f7ab91dd4401f2543b2147adb23f81\":{\"name\":\"archiveFeature\"}},\"src/presentation/web/app/actions/archive-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"409e7f6d9000f7ab91dd4401f2543b2147adb23f81\",callServer,void 0,findSourceMapURL,\"archiveFeature\");export{$$RSC_SERVER_ACTION_0 as archiveFeature};","/* __next_internal_action_entry_do_not_use__ [{\"78e46dbafd792b86405e361f7de33fab8345767ddd\":{\"name\":\"deleteFeature\"}},\"src/presentation/web/app/actions/delete-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"78e46dbafd792b86405e361f7de33fab8345767ddd\",callServer,void 0,findSourceMapURL,\"deleteFeature\");export{$$RSC_SERVER_ACTION_0 as deleteFeature};","/* __next_internal_action_entry_do_not_use__ [{\"402537786e22ad05934fa43a551ed5b45acf5ff3c0\":{\"name\":\"unarchiveFeature\"}},\"src/presentation/web/app/actions/unarchive-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"402537786e22ad05934fa43a551ed5b45acf5ff3c0\",callServer,void 0,findSourceMapURL,\"unarchiveFeature\");export{$$RSC_SERVER_ACTION_0 as unarchiveFeature};","/* __next_internal_action_entry_do_not_use__ [{\"404720e2231380d52c29929a6a219b7cc885ea0502\":{\"name\":\"deleteRepository\"}},\"src/presentation/web/app/actions/delete-repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"404720e2231380d52c29929a6a219b7cc885ea0502\",callServer,void 0,findSourceMapURL,\"deleteRepository\");export{$$RSC_SERVER_ACTION_0 as deleteRepository};","'use client';\n\n/**\n * useServerActions\n *\n * Focused hook: wraps all server actions for the control center with optimistic\n * state updates, mutation guards, and rollback on error.\n *\n * All handlers follow the pattern:\n * beginMutation → optimistic update → server action → rollback on error → endMutation\n *\n * Extracted from use-control-center-state.ts — see Mutation Paths in\n * src/presentation/web/CLAUDE.md for design rationale.\n */\n\nimport { useCallback, useRef, type RefObject } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { toast } from 'sonner';\nimport type { Edge } from '@xyflow/react';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport {\n layoutWithDagre,\n getCanvasLayoutDefaults,\n type LayoutDirection,\n} from '@/lib/layout-with-dagre';\nimport { archiveFeature } from '@/app/actions/archive-feature';\nimport { deleteFeature } from '@/app/actions/delete-feature';\nimport { resumeFeature } from '@/app/actions/resume-feature';\nimport { startFeature } from '@/app/actions/start-feature';\nimport { stopFeature } from '@/app/actions/stop-feature';\nimport { unarchiveFeature } from '@/app/actions/unarchive-feature';\nimport { addRepository } from '@/app/actions/add-repository';\nimport { deleteRepository } from '@/app/actions/delete-repository';\nimport { useSoundAction } from '@/hooks/use-sound-action';\nimport type { FeatureEntry } from '@/lib/derive-graph';\n\ntype FeatureDataUpdates = Partial<\n Pick<FeatureNodeData, 'state' | 'lifecycle' | 'name' | 'description'>\n>;\n\nexport interface UseServerActionsDeps {\n /** Stable ref to the current derived nodes (read during delete/rollback). */\n nodesRef: RefObject<CanvasNodeType[]>;\n /** Stable ref to the current derived edges (read during delete cascade). */\n edgesRef: RefObject<Edge[]>;\n /** Update a feature's data in the domain Maps. */\n updateFeature: (featureNodeId: string, updates: FeatureDataUpdates) => void;\n /** Remove a real feature node from the domain Map. */\n removeFeature: (nodeId: string) => void;\n /** Restore a previously removed feature (rollback). */\n restoreFeature: (nodeId: string, entry: FeatureEntry) => void;\n /** Add a repository node (may use a temp ID initially). */\n addRepositoryToMap: (nodeId: string, data: RepositoryNodeData) => void;\n /** Remove a repository node. */\n removeRepository: (nodeId: string) => void;\n /** Replace a temp repo ID with the real one (atomic). */\n replaceRepository: (tempId: string, realId: string, data: RepositoryNodeData) => void;\n /** Stable lookup: repository data by nodeId. */\n getRepositoryData: (nodeId: string) => RepositoryNodeData | undefined;\n /** Stable lookup: current number of repositories in the domain Map. */\n getRepoMapSize: () => number;\n /** Reconcile domain Maps with fresh layout data. */\n reconcile: (newNodes: CanvasNodeType[], newEdges: Edge[]) => void;\n /** Signal that an optimistic mutation has started. */\n beginMutation: () => void;\n /** Signal that an optimistic mutation has resolved. */\n endMutation: (cooldownMs?: number) => void;\n}\n\nexport interface UseServerActionsReturn {\n handleRetryFeature: (featureId: string) => void;\n handleStartFeature: (featureId: string) => void;\n handleStopFeature: (featureId: string) => void;\n handleArchiveFeature: (featureId: string) => void;\n handleUnarchiveFeature: (featureId: string) => void;\n handleDeleteFeature: (\n featureId: string,\n cleanup?: boolean,\n cascadeDelete?: boolean,\n closePr?: boolean\n ) => void;\n handleDeleteRepository: (repositoryId: string) => Promise<void>;\n handleLayout: (direction: LayoutDirection) => void;\n handleAddRepository: (path: string) => { wasEmpty: boolean; repoPath: string };\n}\n\n/**\n * Returns stable handler functions for all control-center server actions.\n * Each handler performs optimistic UI updates via domain Map mutations and\n * uses the mutation guard to prevent stale reconcile overwrites.\n */\nexport function useServerActions({\n nodesRef,\n edgesRef,\n updateFeature,\n removeFeature,\n restoreFeature,\n addRepositoryToMap,\n removeRepository,\n replaceRepository,\n getRepositoryData,\n getRepoMapSize,\n reconcile,\n beginMutation,\n endMutation,\n}: UseServerActionsDeps): UseServerActionsReturn {\n const router = useRouter();\n const deleteSound = useSoundAction('delete');\n const createSound = useSoundAction('create');\n\n // Stable counter for temporary repo IDs — incremented each time a new temp repo is created\n const nextRepoTempIdRef = useRef(0);\n\n const handleRetryFeature = useCallback(\n (featureId: string) => {\n const nodeId = `feat-${featureId}`;\n beginMutation();\n updateFeature(nodeId, { state: 'running' });\n\n resumeFeature(featureId)\n .then((result) => {\n if (result.error) {\n updateFeature(nodeId, { state: 'error' });\n toast.error(result.error);\n } else {\n toast.success('Feature resumed');\n }\n })\n .catch(() => {\n updateFeature(nodeId, { state: 'error' });\n toast.error('Failed to resume feature');\n })\n .finally(() => endMutation());\n },\n [updateFeature, beginMutation, endMutation]\n );\n\n const handleStartFeature = useCallback(\n (featureId: string) => {\n const nodeId = `feat-${featureId}`;\n beginMutation();\n updateFeature(nodeId, { state: 'running' });\n\n startFeature(featureId)\n .then((result) => {\n if (result.error) {\n updateFeature(nodeId, { state: 'pending' });\n toast.error(result.error);\n } else {\n toast.success('Feature started');\n }\n })\n .catch(() => {\n updateFeature(nodeId, { state: 'pending' });\n toast.error('Failed to start feature');\n })\n .finally(() => endMutation());\n },\n [updateFeature, beginMutation, endMutation]\n );\n\n const handleStopFeature = useCallback(\n (featureId: string) => {\n beginMutation();\n\n stopFeature(featureId)\n .then((result) => {\n if (result.error) {\n toast.error(result.error);\n } else {\n toast.success('Agent stopped');\n }\n })\n .catch(() => {\n toast.error('Failed to stop agent');\n })\n .finally(() => endMutation());\n },\n [beginMutation, endMutation]\n );\n\n const handleArchiveFeature = useCallback(\n (featureId: string) => {\n const nodeId = `feat-${featureId}`;\n beginMutation();\n updateFeature(nodeId, { state: 'archived' });\n\n archiveFeature(featureId)\n .then((result) => {\n if (result.error) {\n updateFeature(nodeId, { state: 'done' });\n toast.error(result.error);\n } else {\n toast.success('Feature archived');\n }\n })\n .catch(() => {\n updateFeature(nodeId, { state: 'done' });\n toast.error('Failed to archive feature');\n })\n .finally(() => endMutation());\n },\n [updateFeature, beginMutation, endMutation]\n );\n\n const handleUnarchiveFeature = useCallback(\n (featureId: string) => {\n const nodeId = `feat-${featureId}`;\n beginMutation();\n updateFeature(nodeId, { state: 'done' });\n\n unarchiveFeature(featureId)\n .then((result) => {\n if (result.error) {\n updateFeature(nodeId, { state: 'archived' });\n toast.error(result.error);\n } else {\n toast.success('Feature unarchived');\n }\n })\n .catch(() => {\n updateFeature(nodeId, { state: 'archived' });\n toast.error('Failed to unarchive feature');\n })\n .finally(() => endMutation());\n },\n [updateFeature, beginMutation, endMutation]\n );\n\n const handleDeleteFeature = useCallback(\n (featureId: string, cleanup?: boolean, cascadeDelete?: boolean, closePr?: boolean) => {\n const nodeId = `feat-${featureId}`;\n const shouldCascade = cascadeDelete === true;\n\n // Collect all descendant feature node IDs (children, grandchildren, etc.)\n const descendants: string[] = [];\n if (shouldCascade) {\n const queue = [nodeId];\n while (queue.length > 0) {\n const current = queue.shift()!;\n for (const edge of edgesRef.current) {\n if (edge.type === 'dependencyEdge' && edge.source === current) {\n descendants.push(edge.target);\n queue.push(edge.target);\n }\n }\n }\n }\n\n // Snapshot current states for rollback (parent + descendants)\n const prevStates = new Map<string, FeatureNodeData['state']>();\n for (const nid of [nodeId, ...descendants]) {\n const node = nodesRef.current.find((n) => n.id === nid);\n if (node) {\n prevStates.set(nid, (node.data as FeatureNodeData).state);\n }\n }\n\n // Optimistic: show \"deleting\" state on parent (and descendants if cascading)\n beginMutation();\n updateFeature(nodeId, { state: 'deleting' });\n for (const childId of descendants) {\n updateFeature(childId, { state: 'deleting' });\n }\n deleteSound.play();\n router.push('/');\n\n deleteFeature(featureId, cleanup, cascadeDelete, closePr)\n .then((result) => {\n if (result.error) {\n // Rollback all to previous states\n for (const [nid, prevState] of prevStates) {\n if (prevState) updateFeature(nid, { state: prevState });\n }\n toast.error(result.error);\n } else {\n // Delete succeeded — remove features from the canvas. The polling\n // reconcile would eventually clean them up, but we remove them\n // explicitly so the user sees them disappear promptly.\n removeFeature(nodeId);\n for (const childId of descendants) {\n removeFeature(childId);\n }\n }\n })\n .catch(() => {\n for (const [nid, prevState] of prevStates) {\n if (prevState) updateFeature(nid, { state: prevState });\n }\n toast.error('Failed to delete feature');\n })\n .finally(() => endMutation());\n },\n [\n router,\n deleteSound,\n updateFeature,\n removeFeature,\n beginMutation,\n endMutation,\n nodesRef,\n edgesRef,\n ]\n );\n\n const handleDeleteRepository = useCallback(\n async (repositoryId: string) => {\n const repoNodeId = `repo-${repositoryId}`;\n\n // Find children of this repo via edges\n const childFeatureIds = new Set(\n edgesRef.current.filter((e) => e.source === repoNodeId).map((e) => e.target)\n );\n\n // Snapshot for rollback\n const prevRepoData = getRepositoryData(repoNodeId);\n const childSnapshots = new Map<string, FeatureEntry>();\n for (const childId of childFeatureIds) {\n const childNode = nodesRef.current.find((n) => n.id === childId);\n if (childNode) {\n childSnapshots.set(childId, { nodeId: childId, data: childNode.data as FeatureNodeData });\n }\n }\n\n const rollback = () => {\n if (prevRepoData) addRepositoryToMap(repoNodeId, prevRepoData);\n for (const [childId, entry] of childSnapshots) {\n restoreFeature(childId, entry);\n }\n };\n\n // Optimistic: remove repo + children\n beginMutation();\n removeRepository(repoNodeId);\n for (const childId of childFeatureIds) {\n removeFeature(childId);\n }\n\n try {\n const result = await deleteRepository(repositoryId);\n if (!result.success) {\n toast.error(result.error ?? 'Failed to remove repository');\n rollback();\n return;\n }\n deleteSound.play();\n } catch {\n toast.error('Failed to remove repository');\n rollback();\n } finally {\n endMutation();\n }\n },\n [\n deleteSound,\n removeRepository,\n removeFeature,\n addRepositoryToMap,\n restoreFeature,\n getRepositoryData,\n beginMutation,\n endMutation,\n nodesRef,\n edgesRef,\n ]\n );\n\n const handleLayout = useCallback(\n (direction: LayoutDirection) => {\n // Layout is applied via reconcile on next server prop update.\n // For immediate re-layout, apply dagre and trigger a reconcile-like update.\n const result = layoutWithDagre(nodesRef.current, edgesRef.current, {\n ...getCanvasLayoutDefaults(),\n direction,\n });\n reconcile(result.nodes, result.edges);\n },\n [reconcile, nodesRef, edgesRef]\n );\n\n const handleAddRepository = useCallback(\n (path: string): { wasEmpty: boolean; repoPath: string } => {\n const wasEmpty = getRepoMapSize() === 0;\n const tempId = `repo-temp-${++nextRepoTempIdRef.current}`;\n const repoName =\n path\n .replace(/[\\\\/]+$/, '')\n .split(/[\\\\/]/)\n .pop() ?? path;\n\n beginMutation();\n addRepositoryToMap(tempId, {\n name: repoName,\n repositoryPath: path,\n id: tempId,\n createdAt: Date.now(),\n gitInfoStatus: 'loading',\n });\n\n addRepository({ path, name: repoName })\n .then((result) => {\n if (result.error) {\n removeRepository(tempId);\n toast.error(result.error);\n return;\n }\n const repo = result.repository!;\n const realId = `repo-${repo.id}`;\n replaceRepository(tempId, realId, {\n name: repo.name,\n repositoryPath: repo.path,\n id: repo.id,\n createdAt:\n repo.createdAt instanceof Date ? repo.createdAt.getTime() : Number(repo.createdAt),\n });\n createSound.play();\n })\n .catch(() => {\n removeRepository(tempId);\n toast.error('Failed to add repository');\n })\n .finally(() => endMutation());\n\n return { wasEmpty, repoPath: path };\n },\n [\n addRepositoryToMap,\n removeRepository,\n replaceRepository,\n createSound,\n getRepoMapSize,\n beginMutation,\n endMutation,\n ]\n );\n\n return {\n handleRetryFeature,\n handleStartFeature,\n handleStopFeature,\n handleArchiveFeature,\n handleUnarchiveFeature,\n handleDeleteFeature,\n handleDeleteRepository,\n handleLayout,\n handleAddRepository,\n };\n}\n","import dagre from '@dagrejs/dagre';\nimport type { Edge, Node } from '@xyflow/react';\n\nexport type LayoutDirection = 'TB' | 'LR' | 'BT' | 'RL';\n\nexport interface LayoutOptions {\n /** Graph direction: top-bottom, left-right, etc. Default \"TB\" */\n direction?: LayoutDirection;\n /** Default node size when per-node size is unavailable */\n nodeSize?: { width: number; height: number };\n /** Vertical separation between ranks (default 80) */\n ranksep?: number;\n /** Horizontal separation between nodes in the same rank (default 30) */\n nodesep?: number;\n}\n\n/** Canonical layout defaults for the control-center canvas. */\nexport const CANVAS_LAYOUT_DEFAULTS: LayoutOptions = {\n direction: 'LR',\n ranksep: 200,\n nodesep: 30,\n};\n\n/** Returns canvas layout defaults with direction adjusted for text direction. */\nexport function getCanvasLayoutDefaults(dir: 'ltr' | 'rtl' = 'ltr'): LayoutOptions {\n return { ...CANVAS_LAYOUT_DEFAULTS, direction: dir === 'rtl' ? 'RL' : 'LR' };\n}\n\n/** Known node-type dimensions for the canvas node types */\nconst NODE_DIMENSIONS: Record<string, { width: number; height: number }> = {\n featureNode: { width: 388, height: 140 },\n repositoryNode: { width: 400, height: 140 },\n};\n\nfunction getNodeSize(\n node: Node,\n defaultSize: { width: number; height: number }\n): { width: number; height: number } {\n // Prefer per-node size from data, then type-based lookup, then default\n const data = node.data as Record<string, unknown> | undefined;\n if (data && typeof data.width === 'number' && typeof data.height === 'number') {\n return { width: data.width, height: data.height };\n }\n return NODE_DIMENSIONS[node.type ?? ''] ?? defaultSize;\n}\n\nfunction getHandlePositions(direction: LayoutDirection) {\n switch (direction) {\n case 'LR':\n return { targetPosition: 'left' as const, sourcePosition: 'right' as const };\n case 'RL':\n return { targetPosition: 'right' as const, sourcePosition: 'left' as const };\n case 'BT':\n return { targetPosition: 'bottom' as const, sourcePosition: 'top' as const };\n case 'TB':\n default:\n return { targetPosition: 'top' as const, sourcePosition: 'bottom' as const };\n }\n}\n\n/**\n * Compute an automatic hierarchical layout for React Flow nodes and edges\n * using Dagre. Returns new node/edge arrays — never mutates the originals.\n *\n * Disconnected nodes (no edges) are interleaved with connected root trees\n * in their original input order, preserving the caller's sort (e.g. createdAt).\n */\nexport function layoutWithDagre<N extends Node>(\n nodes: N[],\n edges: Edge[],\n opts: LayoutOptions = {}\n): { nodes: N[]; edges: Edge[] } {\n const {\n direction = 'TB',\n nodeSize = { width: 172, height: 36 },\n ranksep = 80,\n nodesep = 30,\n } = opts;\n\n if (nodes.length === 0) {\n return { nodes: [], edges: [] };\n }\n\n const g = new dagre.graphlib.Graph({ multigraph: true });\n g.setDefaultEdgeLabel(() => ({}));\n g.setGraph({ rankdir: direction, ranksep, nodesep });\n\n // Separate connected from disconnected nodes\n const connectedIds = new Set<string>();\n for (const edge of edges) {\n connectedIds.add(edge.source);\n connectedIds.add(edge.target);\n }\n\n const graphNodes = nodes.filter((n) => connectedIds.has(n.id));\n const disconnectedNodes = nodes.filter((n) => !connectedIds.has(n.id));\n\n // Add nodes to the dagre graph\n for (const node of graphNodes) {\n const size = getNodeSize(node, nodeSize);\n g.setNode(node.id, { width: size.width, height: size.height });\n }\n\n // Add edges — use edge.id as key to support multigraph (duplicate source→target)\n for (const edge of edges) {\n if (!g.hasNode(edge.source) || !g.hasNode(edge.target)) continue;\n g.setEdge(edge.source, edge.target, {}, edge.id);\n }\n\n dagre.layout(g);\n\n const { targetPosition, sourcePosition } = getHandlePositions(direction);\n const isHorizontal = direction === 'LR' || direction === 'RL';\n\n // Collect dagre center positions keyed by node id\n const centerMap = new Map<string, { cx: number; cy: number; w: number; h: number }>();\n for (const node of graphNodes) {\n const dagreNode = g.node(node.id);\n const size = getNodeSize(node, nodeSize);\n centerMap.set(node.id, { cx: dagreNode.x, cy: dagreNode.y, w: size.width, h: size.height });\n }\n\n // Add disconnected nodes to centerMap so they participate in root positioning.\n // Use the same primary-axis position as connected roots (rank 0) so they align\n // visually with repos that have features attached.\n let rootPrimaryAxis = 0;\n for (const c of centerMap.values()) {\n rootPrimaryAxis = isHorizontal ? c.cx : c.cy;\n break; // Use the first connected node's primary position\n }\n for (const node of disconnectedNodes) {\n const size = getNodeSize(node, nodeSize);\n centerMap.set(node.id, {\n cx: isHorizontal ? rootPrimaryAxis : 0,\n cy: isHorizontal ? 0 : rootPrimaryAxis,\n w: size.width,\n h: size.height,\n });\n }\n\n // ── Proper tree layout for the secondary axis ──\n // Dagre gives us correct primary-axis (rank/X) positions but its secondary-\n // axis (Y) positioning doesn't respect our tree structure well. Replace it\n // with a bottom-up tree layout:\n // 1. Compute subtree heights (leaves → roots)\n // 2. Position children centered on parent (roots → leaves)\n // This guarantees: no overlaps, parents centered on children, and straight\n // lines for 1-to-1 connections at every depth.\n\n // Build parent→children map from edges\n const childrenOf = new Map<string, string[]>();\n for (const edge of edges) {\n if (!centerMap.has(edge.source) || !centerMap.has(edge.target)) continue;\n if (!childrenOf.has(edge.source)) childrenOf.set(edge.source, []);\n childrenOf.get(edge.source)!.push(edge.target);\n }\n\n // Sort children by input order (preserves caller's ordering, e.g. createdAt)\n const inputIndex = new Map<string, number>();\n for (let i = 0; i < nodes.length; i++) {\n inputIndex.set(nodes[i].id, i);\n }\n for (const [, kids] of childrenOf) {\n kids.sort((a, b) => (inputIndex.get(a) ?? 0) - (inputIndex.get(b) ?? 0));\n }\n\n // Find tree roots: connected nodes that are not children of another node\n const childSet = new Set<string>();\n for (const ids of childrenOf.values()) {\n for (const id of ids) childSet.add(id);\n }\n const connectedRoots = [...connectedIds].filter((id) => centerMap.has(id) && !childSet.has(id));\n // Merge connected roots and disconnected nodes, sorted by input order\n // so repos maintain their original creation-time ordering regardless of\n // whether they have features attached.\n const allRoots = [...connectedRoots, ...disconnectedNodes.map((n) => n.id)];\n allRoots.sort((a, b) => (inputIndex.get(a) ?? 0) - (inputIndex.get(b) ?? 0));\n\n // Bottom-up: compute the total secondary-axis span each subtree needs\n const subtreeSpan = new Map<string, number>();\n function computeSpan(nodeId: string): number {\n if (subtreeSpan.has(nodeId)) return subtreeSpan.get(nodeId)!;\n const c = centerMap.get(nodeId)!;\n const nodeSpan = isHorizontal ? c.h : c.w;\n const kids = childrenOf.get(nodeId);\n if (!kids || kids.length === 0) {\n subtreeSpan.set(nodeId, nodeSpan);\n return nodeSpan;\n }\n let childrenTotalSpan = 0;\n for (const kid of kids) {\n childrenTotalSpan += computeSpan(kid);\n }\n childrenTotalSpan += (kids.length - 1) * nodesep;\n const span = Math.max(nodeSpan, childrenTotalSpan);\n subtreeSpan.set(nodeId, span);\n return span;\n }\n\n for (const root of allRoots) computeSpan(root);\n\n // Top-down: position each node on the secondary axis, centering parent\n // on its children block. For 1-to-1 edges the child gets the same\n // secondary-axis value as its parent (straight line).\n function positionTree(nodeId: string, centerPos: number): void {\n const c = centerMap.get(nodeId)!;\n if (isHorizontal) {\n c.cy = centerPos;\n } else {\n c.cx = centerPos;\n }\n const kids = childrenOf.get(nodeId);\n if (!kids || kids.length === 0) return;\n\n // Total span occupied by children\n let childrenTotalSpan = 0;\n for (const kid of kids) {\n childrenTotalSpan += subtreeSpan.get(kid) ?? 0;\n }\n childrenTotalSpan += (kids.length - 1) * nodesep;\n\n // Start from the top of the centered children block\n let cursor = centerPos - childrenTotalSpan / 2;\n for (const kid of kids) {\n const kidSpan = subtreeSpan.get(kid) ?? 0;\n positionTree(kid, cursor + kidSpan / 2);\n cursor += kidSpan + nodesep;\n }\n }\n\n // Position all root trees (connected and disconnected) in input order.\n let rootCursor = 0;\n for (const root of allRoots) {\n const span = subtreeSpan.get(root) ?? 0;\n positionTree(root, rootCursor + span / 2);\n rootCursor += span + nodesep;\n }\n\n // Build result array converting center-coords to React Flow top-left\n const result: N[] = [];\n for (const node of nodes) {\n const c = centerMap.get(node.id);\n if (!c) continue;\n result.push({\n ...node,\n targetPosition,\n sourcePosition,\n position: { x: c.cx - c.w / 2, y: c.cy - c.h / 2 },\n } as N);\n }\n\n return { nodes: result, edges: [...edges] };\n}\n","/**\n * derive-graph.ts\n *\n * Pure client-side derivation: domain Maps → React Flow nodes + edges.\n * All edges are derived from domain relationships (repositoryPath matching,\n * parentNodeId) — never stored independently.\n */\n\nimport type { Edge } from '@xyflow/react';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\n/** A feature node entry stored in the domain Map. */\nexport interface FeatureEntry {\n nodeId: string;\n data: FeatureNodeData;\n /** If set, this feature connects to a parent feature via a dependency edge (no repo→feature edge). */\n parentNodeId?: string;\n}\n\n/** A repository node entry stored in the domain Map. */\nexport interface RepoEntry {\n nodeId: string;\n data: RepositoryNodeData;\n}\n\n/** Stable callbacks passed by the consumer, injected into derived node data. */\nexport interface GraphCallbacks {\n /** Called when the user triggers an action on a feature node (e.g., adds a sub-feature). */\n onNodeAction?: (nodeId: string) => void;\n /** Called when the user opens settings/details on a feature node. */\n onNodeSettings?: (nodeId: string) => void;\n /** Called when the user deletes a feature. */\n onFeatureDelete?: (\n featureId: string,\n cleanup?: boolean,\n cascadeDelete?: boolean,\n closePr?: boolean\n ) => void;\n /** Called when the user clicks the \"+\" add-feature button on a repo node. */\n onRepositoryAdd?: (repoNodeId: string) => void;\n /** Called when the user clicks a repo node to navigate to its detail page. */\n onRepositoryClick?: (repoNodeId: string) => void;\n /** Called when the user deletes a repository. */\n onRepositoryDelete?: (repositoryId: string) => void;\n /** Called when the user retries a failed feature. */\n onRetryFeature?: (featureId: string) => void;\n /** Called when the user starts a pending feature. */\n onStartFeature?: (featureId: string) => void;\n /** Called when the user stops a running feature. */\n onStopFeature?: (featureId: string) => void;\n /** Called when the user archives a feature. */\n onArchiveFeature?: (featureId: string) => void;\n /** Called when the user unarchives a feature. */\n onUnarchiveFeature?: (featureId: string) => void;\n}\n\n/**\n * Derives React Flow nodes and edges from domain Maps.\n *\n * - Feature nodes without a parentNodeId → repo→feature edge (matched by repositoryPath)\n * - Feature nodes without a parentNodeId but with no matching repo → virtual repo node\n * - Feature nodes with a parentNodeId → dependency edge (parentNodeId→nodeId)\n * - Pending feature nodes (creating state) from pendingMap → same rules, no action callbacks\n * - Callbacks are injected into node data via closures\n */\nexport function deriveGraph(\n featureMap: Map<string, FeatureEntry>,\n repoMap: Map<string, RepoEntry>,\n pendingMap: Map<string, FeatureEntry>,\n callbacks?: GraphCallbacks\n): { nodes: CanvasNodeType[]; edges: Edge[] } {\n const nodes: CanvasNodeType[] = [];\n const edges: Edge[] = [];\n\n // Normalize path separators so Windows backslash paths match forward-slash paths\n const normalizePath = (p: string) => p.replace(/\\\\/g, '/');\n\n // Build a lookup: repositoryPath → repoNodeId\n const repoByPath = new Map<string, string>();\n for (const [nodeId, entry] of repoMap) {\n if (entry.data.repositoryPath) {\n repoByPath.set(normalizePath(entry.data.repositoryPath), nodeId);\n }\n }\n\n // Virtual repo nodes created for orphaned features (not in repoMap)\n const virtualRepos = new Map<string, string>(); // path → virtualNodeId\n\n function getOrCreateVirtualRepo(repositoryPath: string): string {\n if (virtualRepos.has(repositoryPath)) {\n return virtualRepos.get(repositoryPath)!;\n }\n const virtualId = `virtual-repo-${repositoryPath}`;\n const repoName = repositoryPath.split('/').filter(Boolean).at(-1) ?? repositoryPath;\n nodes.push({\n id: virtualId,\n type: 'repositoryNode',\n position: { x: 0, y: 0 },\n data: { name: repoName, repositoryPath } satisfies RepositoryNodeData,\n } as CanvasNodeType);\n virtualRepos.set(repositoryPath, virtualId);\n return virtualId;\n }\n\n // Add repo nodes (real ones) — sorted by createdAt for stable vertical order.\n // The server-side layoutWithDagre may reorder the node array (connected vs\n // disconnected split), so we cannot rely on Map insertion order alone.\n // Use Infinity fallback so repos without createdAt sort last (appear at bottom).\n const sortedRepoEntries = [...repoMap.entries()].sort((a, b) => {\n const aRaw = a[1].data.createdAt;\n const bRaw = b[1].data.createdAt;\n const aTime = typeof aRaw === 'number' && !Number.isNaN(aRaw) ? aRaw : Infinity;\n const bTime = typeof bRaw === 'number' && !Number.isNaN(bRaw) ? bRaw : Infinity;\n return aTime - bTime;\n });\n for (const [nodeId, entry] of sortedRepoEntries) {\n const data: RepositoryNodeData = {\n ...entry.data,\n ...(callbacks?.onRepositoryAdd && {\n onAdd: () => callbacks.onRepositoryAdd!(nodeId),\n }),\n ...(callbacks?.onRepositoryClick && {\n onClick: () => callbacks.onRepositoryClick!(nodeId),\n }),\n ...(callbacks?.onRepositoryDelete && {\n onDelete: callbacks.onRepositoryDelete,\n }),\n };\n nodes.push({\n id: nodeId,\n type: 'repositoryNode',\n position: { x: 0, y: 0 },\n data,\n } as CanvasNodeType);\n }\n\n // Process feature entries (both real and pending).\n // Skip pendingMap entries that already exist in featureMap (reconcile may not\n // have cleaned them up yet if the AI-generated name differs from the original).\n const allFeatureEntries: [string, FeatureEntry, boolean][] = [\n ...[...featureMap.entries()].map(\n ([id, e]) => [id, e, false] as [string, FeatureEntry, boolean]\n ),\n ...[...pendingMap.entries()]\n .filter(([id]) => !featureMap.has(id))\n .map(([id, e]) => [id, e, true] as [string, FeatureEntry, boolean]),\n ];\n\n for (const [nodeId, entry, isPending] of allFeatureEntries) {\n const isCreating = entry.data.state === 'creating' || isPending;\n\n const data: FeatureNodeData = {\n ...entry.data,\n // Callbacks only for non-creating nodes\n ...(!isCreating &&\n callbacks?.onNodeAction && {\n onAction: () => callbacks.onNodeAction!(nodeId),\n }),\n ...(!isCreating &&\n callbacks?.onNodeSettings && {\n onSettings: () => callbacks.onNodeSettings!(nodeId),\n }),\n ...(!isCreating &&\n callbacks?.onFeatureDelete && {\n onDelete: callbacks.onFeatureDelete,\n }),\n ...(!isCreating &&\n entry.data.state === 'error' &&\n callbacks?.onRetryFeature && {\n onRetry: callbacks.onRetryFeature,\n }),\n ...(!isCreating &&\n entry.data.state === 'pending' &&\n callbacks?.onStartFeature && {\n onStart: callbacks.onStartFeature,\n }),\n ...(!isCreating &&\n (entry.data.state === 'running' || entry.data.state === 'action-required') &&\n callbacks?.onStopFeature && {\n onStop: callbacks.onStopFeature,\n }),\n ...(!isCreating &&\n entry.data.state !== 'archived' &&\n entry.data.state !== 'deleting' &&\n callbacks?.onArchiveFeature && {\n onArchive: callbacks.onArchiveFeature,\n }),\n ...(!isCreating &&\n entry.data.state === 'archived' &&\n callbacks?.onUnarchiveFeature && {\n onUnarchive: callbacks.onUnarchiveFeature,\n }),\n };\n\n nodes.push({\n id: nodeId,\n type: 'featureNode',\n position: { x: 0, y: 0 },\n data,\n } as CanvasNodeType);\n\n // Edge derivation\n // If parentNodeId references a feature that's not visible (e.g. archived/filtered),\n // fall through to repo→feature edge so the child reconnects to the repository.\n if (\n entry.parentNodeId &&\n (featureMap.has(entry.parentNodeId) || pendingMap.has(entry.parentNodeId))\n ) {\n // Dependency edge (parent→child feature)\n edges.push({\n id: `dep-${entry.parentNodeId}-${nodeId}`,\n source: entry.parentNodeId,\n target: nodeId,\n type: 'dependencyEdge',\n });\n } else {\n // Repo→feature edge (matched by repositoryPath)\n const repositoryPath = normalizePath(entry.data.repositoryPath);\n const repoNodeId = repoByPath.get(repositoryPath) ?? getOrCreateVirtualRepo(repositoryPath);\n edges.push({\n id: `edge-${repoNodeId}-${nodeId}`,\n source: repoNodeId,\n target: nodeId,\n style: { strokeDasharray: '5 5' },\n });\n }\n }\n\n // Build set of feature node IDs that have children (are dependency edge sources)\n const parentNodeIds = new Set<string>();\n for (const edge of edges) {\n if (edge.type === 'dependencyEdge') {\n parentNodeIds.add(edge.source);\n }\n }\n\n // Inject showHandles and hasChildren based on edges\n const hasEdges = edges.length > 0;\n for (const node of nodes) {\n const data = node.data as Record<string, unknown>;\n data.showHandles = hasEdges;\n if (node.type === 'featureNode') {\n data.hasChildren = parentNodeIds.has(node.id);\n }\n }\n\n return { nodes, edges };\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { Handle, Position } from '@xyflow/react';\nimport { useRouter } from 'next/navigation';\nimport {\n Plus,\n Code2,\n Terminal,\n FolderOpen,\n Trash2,\n Play,\n Square,\n GitBranch,\n GitCommitHorizontal,\n ArrowDown,\n User,\n RotateCcw,\n MessageSquare,\n} from 'lucide-react';\nimport { GithubIcon } from '@/components/ui/github-icon';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { ActionButton } from '@/components/common/action-button';\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { useDeployAction } from '@/hooks/use-deploy-action';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\nimport type { RepositoryNodeData } from './repository-node-config';\nimport { useRepositoryActions } from './use-repository-actions';\nimport { ChatDotIndicator } from '@/components/features/chat/ChatDotIndicator';\nimport { useTurnStatus } from '@/hooks/turn-statuses-provider';\nimport {\n FeatureSessionsDropdown,\n type SessionSummary,\n} from '@/components/common/feature-node/feature-sessions-dropdown';\n\nexport function RepositoryNode({\n data,\n selected,\n}: {\n data: RepositoryNodeData;\n selected?: boolean;\n [key: string]: unknown;\n}) {\n const { t, i18n } = useTranslation('web');\n const router = useRouter();\n const isRtl = i18n.dir() === 'rtl';\n const targetHandlePos = isRtl ? Position.Right : Position.Left;\n const sourceHandlePos = isRtl ? Position.Left : Position.Right;\n const featureFlags = useFeatureFlags();\n const [confirmOpen, setConfirmOpen] = useState(false);\n const repoScopeId = data.id ? `repo-${data.id}` : `repo-${data.name}`;\n const chatTurnStatus = useTurnStatus(repoScopeId);\n const actions = useRepositoryActions(\n data.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null\n );\n const deployAction = useDeployAction(\n data.repositoryPath\n ? {\n targetId: data.repositoryPath,\n targetType: 'repository',\n repositoryPath: data.repositoryPath,\n }\n : null\n );\n const isDeploymentActive = deployAction.status === 'Booting' || deployAction.status === 'Ready';\n\n const handleCreateFromSession = useCallback(\n (session: SessionSummary, sessionFilePath: string) => {\n if (!data.repositoryPath) return;\n const preview = session.preview ? session.preview.slice(0, 200) : 'Unknown conversation';\n const prompt = [\n `Continue work from a previous agent session.`,\n ``,\n `## Session Context`,\n `- Session ID: ${session.id}`,\n `- Messages: ${session.messageCount}`,\n session.lastMessageAt ? `- Last active: ${session.lastMessageAt}` : '',\n `- Conversation file: ${sessionFilePath}`,\n ``,\n `## Session Preview`,\n `> ${preview}`,\n ``,\n `## Instructions`,\n `1. Read the full conversation history from the file above`,\n `2. Analyze the current state of the repository — what was done, what remains`,\n `3. Create or update spec files to accurately reflect the current state and remaining work`,\n `4. Continue implementing any unfinished work from the conversation`,\n ]\n .filter(Boolean)\n .join('\\n');\n\n const params = new URLSearchParams({\n repo: data.repositoryPath,\n prompt,\n });\n router.push(`/create?${params.toString()}`);\n },\n [data.repositoryPath, router]\n );\n\n return (\n <div\n className={cn('group relative', data.onDelete && data.id && 'ps-10')}\n style={{ direction: isRtl ? 'rtl' : 'ltr' }}\n >\n {data.showHandles ? (\n <Handle\n type=\"target\"\n position={targetHandlePos}\n isConnectable={false}\n className=\"opacity-0!\"\n style={{ top: 70 }}\n />\n ) : null}\n\n {/* Delete button — visible on hover, positioned to the left */}\n {data.onDelete && data.id ? (\n <>\n <div className=\"absolute -start-3 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100\">\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label={t('repositoryNode.removeRepository')}\n data-testid=\"repository-node-delete-button\"\n onClick={(e) => {\n e.stopPropagation();\n setConfirmOpen(true);\n }}\n className=\"bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('repositoryNode.removeRepository')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n <Dialog open={confirmOpen} onOpenChange={setConfirmOpen}>\n <DialogContent className=\"max-w-xs\">\n <DialogHeader>\n <DialogTitle>{t('repositoryNode.removeConfirmTitle')}</DialogTitle>\n <DialogDescription>\n {t('repositoryNode.removeConfirmDescription', { name: data.name })}\n </DialogDescription>\n </DialogHeader>\n <DialogFooter className=\"grid grid-cols-2 gap-2 sm:flex-none\">\n <DialogClose asChild>\n <Button variant=\"outline\">{t('repositoryNode.cancel')}</Button>\n </DialogClose>\n <Button\n variant=\"destructive\"\n onClick={() => {\n setConfirmOpen(false);\n data.onDelete?.(data.id!);\n }}\n >\n {t('repositoryNode.remove')}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n ) : null}\n\n <div\n role=\"button\"\n tabIndex={0}\n data-testid=\"repository-node-card\"\n data-repo-name={data.name}\n onClick={(e) => {\n e.stopPropagation();\n data.onClick?.();\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n data.onClick?.();\n }\n }}\n className={cn(\n 'nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm transition-[border-color,box-shadow] duration-200 dark:bg-neutral-800/80',\n selected && 'border-blue-400 dark:border-amber-500/60'\n )}\n >\n {/* Row 1: Repository name + action buttons */}\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <GithubIcon className=\"text-muted-foreground h-5 w-5 shrink-0\" />\n <span data-testid=\"repository-node-name\" className=\"min-w-0 truncate text-sm font-medium\">\n {data.name}\n </span>\n\n <div\n className={cn(\n 'flex shrink-0 items-center gap-2',\n (data.repositoryPath ?? data.onAdd) && 'ms-auto'\n )}\n onClick={(e) => e.stopPropagation()}\n >\n {data.repositoryPath ? (\n <>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"flex items-center\">\n <ActionButton\n label={t('repositoryNode.openInIde')}\n onClick={actions.openInIde}\n loading={actions.ideLoading}\n error={!!actions.ideError}\n icon={Code2}\n iconOnly\n variant=\"ghost\"\n size=\"icon-xs\"\n />\n </span>\n </TooltipTrigger>\n <TooltipContent>{t('repositoryNode.openInIde')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"flex items-center\">\n <ActionButton\n label={t('repositoryNode.openInShell')}\n onClick={actions.openInShell}\n loading={actions.shellLoading}\n error={!!actions.shellError}\n icon={Terminal}\n iconOnly\n variant=\"ghost\"\n size=\"icon-xs\"\n />\n </span>\n </TooltipTrigger>\n <TooltipContent>{t('repositoryNode.openInShell')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"flex items-center\">\n <ActionButton\n label={t('repositoryNode.openFolder')}\n onClick={actions.openFolder}\n loading={actions.folderLoading}\n error={!!actions.folderError}\n icon={FolderOpen}\n iconOnly\n variant=\"ghost\"\n size=\"icon-xs\"\n />\n </span>\n </TooltipTrigger>\n <TooltipContent>{t('repositoryNode.openFolder')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label={t('repositoryNode.chatWithAgent')}\n onClick={(e) => {\n e.stopPropagation();\n if (data.id)\n router.push(\n `/repository/${data.id}/chat` as Parameters<typeof router.push>[0]\n );\n }}\n className=\"nodrag relative cursor-pointer text-violet-500 hover:text-violet-600 dark:text-violet-400 dark:hover:text-violet-300\"\n >\n <MessageSquare className=\"h-3 w-3\" />\n <ChatDotIndicator status={chatTurnStatus} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{t('repositoryNode.chatWithAgent')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <FeatureSessionsDropdown\n repositoryPath={data.repositoryPath}\n includeWorktrees\n onCreateFromSession={handleCreateFromSession}\n />\n </>\n ) : null}\n\n {data.onAdd ? <div className=\"ms-1.5\" /> : null}\n {data.onAdd ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label={t('repositoryNode.newFeature')}\n data-testid=\"repository-node-add-button\"\n onClick={(e) => {\n e.stopPropagation();\n data.onAdd?.();\n }}\n className={cn(\n 'flex h-6 shrink-0 cursor-pointer items-center gap-0.5 rounded bg-blue-500 px-1.5 text-[11px] font-bold text-white transition-colors hover:bg-blue-600 dark:bg-amber-500 dark:hover:bg-amber-400',\n data.pulseAdd && 'animate-pulse-cta'\n )}\n >\n <Plus className=\"h-3 w-3\" />\n <span className=\"translate-y-px\">{t('repositoryNode.new')}</span>\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{t('repositoryNode.newFeature')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n </div>\n\n {/* Row 2 & 3: Git info or placeholder */}\n {data.branch ? (\n <>\n {/* Row 2: Branch + behind status */}\n <div\n data-testid=\"repository-node-git-info\"\n className=\"text-muted-foreground border-border/50 border-t px-4 py-2\"\n >\n <div className=\"flex items-center gap-3 text-xs\">\n <span\n className=\"flex items-center gap-1 truncate\"\n data-testid=\"repository-node-branch\"\n >\n <GitBranch className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">{data.branch}</span>\n </span>\n {data.behindCount != null && data.behindCount > 0 ? (\n <span\n className=\"flex shrink-0 items-center gap-1 whitespace-nowrap text-amber-500\"\n data-testid=\"repository-node-behind\"\n >\n <ArrowDown className=\"h-3 w-3 shrink-0\" />\n {t('repositoryNode.behind', { count: data.behindCount })}\n </span>\n ) : null}\n </div>\n </div>\n {/* Row 3: Latest commit */}\n {data.commitMessage ? (\n <div\n data-testid=\"repository-node-commit-info\"\n className=\"text-muted-foreground border-border/50 border-t px-4 py-2\"\n >\n <div className=\"flex items-center gap-2 text-xs\">\n <GitCommitHorizontal className=\"h-3 w-3 shrink-0\" />\n <span className=\"min-w-0 truncate\" data-testid=\"repository-node-commit-message\">\n {data.commitMessage}\n </span>\n {data.committer ? (\n <span\n className=\"text-muted-foreground/70 ms-auto flex shrink-0 items-center gap-1\"\n data-testid=\"repository-node-committer\"\n >\n <User className=\"h-3 w-3 shrink-0\" />\n <span>{data.committer}</span>\n </span>\n ) : null}\n </div>\n </div>\n ) : null}\n </>\n ) : data.gitInfoStatus === 'not-a-repo' ? (\n /* Not a git repo — two rows for consistency with loading/ready states */\n <>\n <div\n data-testid=\"repository-node-not-repo\"\n className=\"text-muted-foreground border-border/50 border-t px-4 py-2\"\n >\n <div className=\"flex items-center gap-2 text-xs\">\n <FolderOpen className=\"h-3 w-3 shrink-0\" />\n <span className=\"min-w-0 truncate opacity-60\">\n {data.repositoryPath ?? 'Unknown path'}\n </span>\n </div>\n </div>\n <div className=\"text-muted-foreground border-border/50 border-t px-4 py-2\">\n <div className=\"flex items-center gap-2 text-xs opacity-40\">\n <GitBranch className=\"h-3 w-3 shrink-0\" />\n <span>{t('repositoryNode.notAGitRepository')}</span>\n </div>\n </div>\n </>\n ) : data.gitInfoStatus !== 'ready' ? (\n /* Loading — show skeleton placeholders for both rows */\n <>\n <div\n data-testid=\"repository-node-git-loading\"\n className=\"border-border/50 border-t px-4 py-2\"\n >\n <div className=\"flex h-4 items-center gap-2 text-xs\">\n <GitBranch className=\"text-muted-foreground h-3 w-3 shrink-0\" />\n <span className=\"bg-muted h-3 w-20 animate-pulse rounded\" />\n </div>\n </div>\n <div className=\"border-border/50 border-t px-4 py-2\">\n <div className=\"flex h-4 items-center gap-2 text-xs\">\n <GitCommitHorizontal className=\"text-muted-foreground h-3 w-3 shrink-0\" />\n <span className=\"bg-muted h-3 w-36 animate-pulse rounded\" />\n </div>\n </div>\n </>\n ) : null}\n\n {/* Row 4: Local dev server — always visible when envDeploy flag is on */}\n {featureFlags.envDeploy && data.repositoryPath ? (\n <div\n data-testid=\"repository-node-dev-preview\"\n className=\"border-border/50 border-t px-4 py-2\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center gap-2 text-xs\">\n {deployAction.deployError ? (\n <span className=\"truncate text-xs text-red-500\">{deployAction.deployError}</span>\n ) : isDeploymentActive ? (\n <>\n <span className=\"me-0.5 inline-block h-2 w-2 shrink-0 rounded-full bg-green-500\" />\n {deployAction.url ? (\n <a\n href={deployAction.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"truncate text-green-700 hover:underline dark:text-green-400\"\n >\n {deployAction.url}\n </a>\n ) : (\n <span className=\"text-muted-foreground\">{t('repositoryNode.starting')}</span>\n )}\n </>\n ) : (\n <span className=\"text-muted-foreground inline-flex items-baseline gap-2\">\n <span>{t('repositoryNode.run')}</span>\n <span className=\"text-muted-foreground/50 text-[10px]\">\n {t('repositoryNode.startLocalEnvironment')}\n </span>\n </span>\n )}\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n 'ms-auto flex items-center',\n !isDeploymentActive &&\n !deployAction.deployError &&\n '[&_button]:text-green-600 [&_button]:hover:text-green-700 dark:[&_button]:text-green-400 dark:[&_button]:hover:text-green-300'\n )}\n >\n <ActionButton\n label={\n deployAction.deployError\n ? t('repositoryNode.retry')\n : isDeploymentActive\n ? t('repositoryNode.stopDevServer')\n : t('repositoryNode.startDevServer')\n }\n onClick={isDeploymentActive ? deployAction.stop : deployAction.deploy}\n loading={deployAction.deployLoading || deployAction.stopLoading}\n error={false}\n icon={\n deployAction.deployError ? RotateCcw : isDeploymentActive ? Square : Play\n }\n iconOnly\n variant=\"ghost\"\n size=\"icon-xs\"\n />\n </span>\n </TooltipTrigger>\n <TooltipContent>\n {isDeploymentActive\n ? t('repositoryNode.stopDevServer')\n : t('repositoryNode.startDevServer')}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n </div>\n ) : null}\n </div>\n\n {/* Source handle — invisible, for edge connections */}\n {data.onAdd || data.showHandles ? (\n <Handle\n type=\"source\"\n position={sourceHandlePos}\n isConnectable={!data.showHandles}\n className=\"opacity-0!\"\n style={{ top: 70 }}\n />\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport { useCallback } from 'react';\nimport { Code2, Terminal, FolderOpen, RefreshCw } from 'lucide-react';\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DrawerTitle, DrawerDescription } from '@/components/ui/drawer';\nimport { Separator } from '@/components/ui/separator';\nimport { ActionButton } from '@/components/common/action-button';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\nimport type { RepositoryNodeData } from './repository-node-config';\nimport { useRepositoryActions } from './use-repository-actions';\n\nexport interface RepositoryDrawerProps {\n data: RepositoryNodeData | null;\n onClose: () => void;\n}\n\nexport function RepositoryDrawer({ data, onClose }: RepositoryDrawerProps) {\n const featureFlags = useFeatureFlags();\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const actions = useRepositoryActions(\n data?.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null\n );\n\n return (\n <BaseDrawer\n open={data !== null}\n onClose={handleClose}\n size=\"md\"\n modal={false}\n data-testid=\"repository-drawer\"\n deployTarget={\n data?.repositoryPath\n ? {\n targetId: data.repositoryPath,\n targetType: 'repository',\n repositoryPath: data.repositoryPath,\n }\n : undefined\n }\n header={\n data ? (\n <div data-testid=\"repository-drawer-header\">\n <DrawerTitle>{data.name}</DrawerTitle>\n {data.repositoryPath ? (\n <DrawerDescription className=\"truncate font-mono text-xs\">\n {data.repositoryPath}\n </DrawerDescription>\n ) : null}\n </div>\n ) : undefined\n }\n >\n {data?.repositoryPath ? (\n <>\n <Separator />\n <div className=\"flex flex-col gap-3 p-4\">\n <div className=\"text-muted-foreground text-xs font-semibold tracking-wider\">\n OPEN WITH\n </div>\n <div className=\"flex flex-col gap-2\">\n <ActionButton\n label=\"Open in IDE\"\n onClick={actions.openInIde}\n loading={actions.ideLoading}\n error={!!actions.ideError}\n icon={Code2}\n variant=\"outline\"\n size=\"sm\"\n />\n <ActionButton\n label=\"Open in Shell\"\n onClick={actions.openInShell}\n loading={actions.shellLoading}\n error={!!actions.shellError}\n icon={Terminal}\n variant=\"outline\"\n size=\"sm\"\n />\n <ActionButton\n label=\"Open Folder\"\n onClick={actions.openFolder}\n loading={actions.folderLoading}\n error={!!actions.folderError}\n icon={FolderOpen}\n variant=\"outline\"\n size=\"sm\"\n />\n </div>\n </div>\n {data.id && featureFlags.gitRebaseSync ? (\n <>\n <Separator />\n <div className=\"flex flex-col gap-3 p-4\">\n <div className=\"text-muted-foreground text-xs font-semibold tracking-wider\">\n GIT OPERATIONS\n </div>\n <div className=\"flex flex-col gap-2\">\n <ActionButton\n label=\"Sync Main\"\n onClick={actions.syncMain}\n loading={actions.syncLoading}\n error={!!actions.syncError}\n icon={RefreshCw}\n variant=\"outline\"\n size=\"sm\"\n />\n {actions.syncError ? (\n <p className=\"text-destructive text-xs\">{actions.syncError}</p>\n ) : null}\n </div>\n </div>\n </>\n ) : null}\n </>\n ) : null}\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport { BaseEdge, getBezierPath } from '@xyflow/react';\nimport type { EdgeProps } from '@xyflow/react';\n\n/**\n * Custom React Flow edge for parent→child feature dependencies.\n * Uses bezier curves and dashed style matching repo→feature edges.\n */\nexport function DependencyEdge(props: EdgeProps) {\n const [edgePath] = getBezierPath({\n sourceX: props.sourceX,\n sourceY: props.sourceY,\n targetX: props.targetX,\n targetY: props.targetY,\n sourcePosition: props.sourcePosition,\n targetPosition: props.targetPosition,\n });\n\n return (\n <BaseEdge\n id={props.id}\n path={edgePath}\n style={{\n strokeDasharray: '5 5',\n }}\n />\n );\n}\n","'use client';\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { ReactFlow, Background, BackgroundVariant, Panel } from '@xyflow/react';\nimport type { Connection, Edge, NodeChange, OnMoveEnd, Viewport } from '@xyflow/react';\nimport { Plus } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { EmptyState } from '@/components/common/empty-state';\nimport { FeatureNode } from '@/components/common/feature-node';\nimport type { FeatureNodeType, FeatureNodeData } from '@/components/common/feature-node';\nimport { RepositoryNode } from '@/components/common/repository-node';\nimport type { RepositoryNodeType, RepositoryNodeData } from '@/components/common/repository-node';\nimport { DependencyEdge } from './dependency-edge';\n\nexport type CanvasNodeType = FeatureNodeType | RepositoryNodeType;\n\nexport interface FeaturesCanvasProps {\n nodes: CanvasNodeType[];\n edges: Edge[];\n selectedFeatureId?: string | null;\n selectedRepository?: { id: string | null; path: string | null };\n defaultViewport?: Viewport;\n onNodesChange?: (changes: NodeChange<CanvasNodeType>[]) => void;\n onAddFeature?: () => void;\n onNodeClick?: (event: React.MouseEvent, node: CanvasNodeType) => void;\n onPaneClick?: (event: React.MouseEvent) => void;\n onConnect?: (connection: Connection) => void;\n onCanvasDrag?: () => void;\n onMoveEnd?: OnMoveEnd;\n toolbar?: React.ReactNode;\n emptyState?: React.ReactNode;\n}\n\nconst FALLBACK_VIEWPORT: Viewport = { x: 30, y: 30, zoom: 0.85 };\n\nexport function FeaturesCanvas({\n nodes,\n edges,\n selectedFeatureId,\n selectedRepository,\n defaultViewport,\n onNodesChange,\n onAddFeature,\n onConnect,\n onNodeClick,\n onPaneClick,\n onCanvasDrag,\n onMoveEnd,\n toolbar,\n emptyState,\n}: FeaturesCanvasProps) {\n const { t } = useTranslation('web');\n const nodeTypes = useMemo(\n () => ({\n featureNode: FeatureNode,\n repositoryNode: RepositoryNode,\n }),\n []\n );\n\n const edgeTypes = useMemo(\n () => ({\n dependencyEdge: DependencyEdge,\n }),\n []\n );\n\n // Callbacks and showHandles are already injected into node.data by deriveGraph.\n // Apply selectedFeatureId and selectedRepository highlighting here.\n const enrichedNodes = useMemo(() => {\n const hasFeatureSel = selectedFeatureId != null;\n const hasRepoSel =\n selectedRepository != null &&\n (selectedRepository.id != null || selectedRepository.path != null);\n if (!hasFeatureSel && !hasRepoSel) return nodes;\n return nodes.map((node) => {\n if (\n hasFeatureSel &&\n node.type === 'featureNode' &&\n (node.data as FeatureNodeData).featureId === selectedFeatureId\n ) {\n return { ...node, selected: true };\n }\n if (hasRepoSel && node.type === 'repositoryNode') {\n const rd = node.data as RepositoryNodeData;\n const matchById =\n selectedRepository!.id != null &&\n (node.id === selectedRepository!.id || rd.id === selectedRepository!.id);\n const matchByPath =\n selectedRepository!.path != null && rd.repositoryPath === selectedRepository!.path;\n if (matchById || matchByPath) return { ...node, selected: true };\n }\n return node;\n }) as CanvasNodeType[];\n }, [nodes, selectedFeatureId, selectedRepository]);\n\n const isEmpty = nodes.length === 0;\n\n // Track empty→populated transition for exit animation.\n // When isEmpty flips from true to false, keep the overlay mounted\n // and fade it out before removing it from the DOM.\n const [showOverlay, setShowOverlay] = useState(isEmpty);\n const [overlayExiting, setOverlayExiting] = useState(false);\n const prevEmptyRef = useRef(isEmpty);\n\n useEffect(() => {\n if (prevEmptyRef.current && !isEmpty) {\n // Was empty, now populated — start exit animation\n setOverlayExiting(true);\n const timer = setTimeout(() => {\n setShowOverlay(false);\n setOverlayExiting(false);\n }, 300);\n prevEmptyRef.current = isEmpty;\n return () => clearTimeout(timer);\n }\n if (!prevEmptyRef.current && isEmpty) {\n // Was populated, now empty — show overlay immediately\n setShowOverlay(true);\n }\n prevEmptyRef.current = isEmpty;\n }, [isEmpty]);\n\n const fallbackEmptyState =\n isEmpty && !emptyState ? (\n <EmptyState\n title={t('canvas.noFeatures')}\n description={t('canvas.noFeaturesDescription')}\n action={\n <Button onClick={onAddFeature}>\n <Plus className=\"me-2 h-4 w-4\" />\n {t('canvas.newFeature')}\n </Button>\n }\n />\n ) : null;\n\n const overlayContent = emptyState ?? fallbackEmptyState;\n\n return (\n <div\n data-testid={isEmpty ? 'features-canvas-empty' : 'features-canvas'}\n data-no-drawer-close\n className=\"dark:bg-background pointer-events-auto relative h-full w-full bg-[#f6f7f8]\"\n >\n <ReactFlow\n nodes={enrichedNodes}\n edges={edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onConnect={onConnect}\n onNodesChange={onNodesChange}\n onNodeClick={onNodeClick}\n onPaneClick={onPaneClick}\n onMoveStart={onCanvasDrag}\n onMoveEnd={onMoveEnd}\n defaultViewport={defaultViewport ?? FALLBACK_VIEWPORT}\n nodesDraggable={false}\n nodesConnectable={false}\n elementsSelectable={false}\n proOptions={{ hideAttribution: true }}\n className=\"[&_.react-flow__pane]:!cursor-default\"\n >\n <Background\n variant={BackgroundVariant.Dots}\n gap={24}\n size={1}\n color=\"#b8bcc4\"\n className=\"dark:[&_circle]:!fill-white/[0.1]\"\n />\n {!isEmpty && toolbar ? (\n <Panel position=\"top-right\" className=\"!me-3 !mt-3\">\n {toolbar}\n </Panel>\n ) : null}\n </ReactFlow>\n {showOverlay && overlayContent ? (\n <div\n className={cn(\n 'pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300',\n overlayExiting ? 'opacity-0' : 'animate-in fade-in opacity-100 duration-200'\n )}\n >\n <div className=\"pointer-events-auto h-full w-full\">{overlayContent}</div>\n </div>\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport { useCallback } from 'react';\nimport { useReactFlow } from '@xyflow/react';\nimport type { Viewport } from '@xyflow/react';\nimport { Eye, EyeOff, ZoomIn, ZoomOut, Maximize, RotateCcw } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\n\nexport interface CanvasToolbarProps {\n showArchived: boolean;\n onToggleArchived: () => void;\n onResetViewport?: () => Viewport;\n}\n\nexport function CanvasToolbar({\n showArchived,\n onToggleArchived,\n onResetViewport,\n}: CanvasToolbarProps) {\n const { t } = useTranslation('web');\n const { zoomIn, zoomOut, fitView, setViewport } = useReactFlow();\n\n const handleZoomIn = useCallback(() => {\n zoomIn({ duration: 200 });\n }, [zoomIn]);\n\n const handleZoomOut = useCallback(() => {\n zoomOut({ duration: 200 });\n }, [zoomOut]);\n\n const handleFitView = useCallback(() => {\n fitView({ duration: 400, padding: 0.3 });\n }, [fitView]);\n\n const handleReset = useCallback(() => {\n if (onResetViewport) {\n const viewport = onResetViewport();\n setViewport(viewport, { duration: 400 });\n }\n }, [onResetViewport, setViewport]);\n\n return (\n <div className=\"bg-background flex items-center gap-1 rounded-xl border px-2 py-1.5 shadow-md dark:bg-neutral-900\">\n {/* View controls */}\n <ToolbarButton\n onClick={onToggleArchived}\n title={showArchived ? t('canvas.hideArchived') : t('canvas.showArchived')}\n active={showArchived}\n label={showArchived ? t('canvas.hideArchivedLabel') : t('canvas.showArchivedLabel')}\n >\n {showArchived ? <Eye className=\"h-4 w-4\" /> : <EyeOff className=\"h-4 w-4\" />}\n </ToolbarButton>\n\n <div className=\"bg-border mx-1 h-5 w-px\" />\n\n {/* Zoom controls */}\n <ToolbarButton onClick={handleZoomOut} title={t('canvas.zoomOut')}>\n <ZoomOut className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton onClick={handleZoomIn} title={t('canvas.zoomIn')}>\n <ZoomIn className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton onClick={handleFitView} title={t('canvas.fitView')}>\n <Maximize className=\"h-4 w-4\" />\n </ToolbarButton>\n {onResetViewport ? (\n <ToolbarButton onClick={handleReset} title={t('canvas.resetView')}>\n <RotateCcw className=\"h-4 w-4\" />\n </ToolbarButton>\n ) : null}\n </div>\n );\n}\n\n// ── Internal button ──────────────────────────────────────────────────────\n\nfunction ToolbarButton({\n children,\n onClick,\n title,\n label,\n active,\n}: {\n children: React.ReactNode;\n onClick: () => void;\n title: string;\n label?: string;\n active?: boolean;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={title}\n title={title}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-xs font-medium transition-colors',\n 'hover:bg-accent hover:text-accent-foreground',\n active ? 'text-primary bg-primary/10' : 'text-muted-foreground'\n )}\n >\n {children}\n {label ? <span>{label}</span> : null}\n </button>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { Plus, LoaderCircle, X } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\n\nexport interface FloatingActionButtonAction {\n /** Unique key for the action. */\n id: string;\n /** Accessible label shown next to the icon. */\n label: string;\n /** Lucide icon component. */\n icon: React.ReactNode;\n /** Called when the action is clicked. */\n onClick: () => void;\n /** Whether the action is currently loading. */\n loading?: boolean;\n /** Whether the action is disabled. */\n disabled?: boolean;\n}\n\nexport interface FloatingActionButtonProps {\n /** Action items shown when the FAB is expanded. */\n actions: FloatingActionButtonAction[];\n /** Additional CSS classes for the wrapper. */\n className?: string;\n /** Inline styles for the wrapper (e.g. dynamic positioning). */\n style?: React.CSSProperties;\n}\n\n/** Stagger delay between each item animation in ms. */\nconst STAGGER_MS = 50;\n\n/** Total animation duration in ms. */\nconst DURATION_MS = 250;\n\n/**\n * (+) FAB with expandable action menu.\n * Renders inline — parent controls positioning.\n */\nexport function FloatingActionButton({ actions, className, style }: FloatingActionButtonProps) {\n const { t } = useTranslation('web');\n const [open, setOpen] = useState(false);\n\n // Close on Escape key\n useEffect(() => {\n if (!open) return;\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [open]);\n\n return (\n <>\n {/* Invisible click-outside catcher */}\n {open ? (\n <div\n data-testid=\"fab-overlay\"\n className=\"fixed inset-0 z-40\"\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n />\n ) : null}\n\n <div\n data-testid=\"floating-action-button\"\n className={cn('relative z-50', className)}\n style={style}\n >\n {/* Action chips — expand upward */}\n <div\n className={cn(\n 'absolute start-0 bottom-[calc(100%+24px)] flex flex-col items-start gap-2',\n !open && 'pointer-events-none'\n )}\n data-testid=\"fab-actions\"\n >\n {actions.map((action, i) => {\n const openDelay = (actions.length - 1 - i) * STAGGER_MS;\n\n return (\n <button\n key={action.id}\n data-testid={`fab-action-${action.id}`}\n aria-label={action.label}\n disabled={action.disabled ?? action.loading}\n className={cn(\n 'flex h-10 items-center gap-2.5 rounded-full px-4',\n 'bg-background text-foreground shadow-md',\n 'border-border border',\n 'hover:bg-accent hover:text-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'text-sm font-medium whitespace-nowrap',\n open ? 'translate-y-0 opacity-100' : 'pointer-events-none translate-y-0 opacity-0'\n )}\n style={{\n transition: `opacity ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms, transform ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms`,\n }}\n onClick={() => {\n action.onClick();\n setOpen(false);\n }}\n >\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n {action.loading ? <LoaderCircle className=\"h-4 w-4 animate-spin\" /> : action.icon}\n </span>\n <span>{action.label}</span>\n </button>\n );\n })}\n </div>\n\n {/* FAB trigger */}\n <Button\n size=\"icon\"\n data-testid=\"fab-trigger\"\n aria-label={open ? t('fab.closeActions') : t('fab.createNew')}\n className={cn(\n 'relative h-14 w-14 rounded-full shadow-lg',\n 'bg-indigo-500 text-white hover:bg-indigo-400 dark:bg-indigo-500 dark:hover:bg-indigo-400',\n 'transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95'\n )}\n onClick={() => setOpen((prev) => !prev)}\n >\n <Plus\n className={cn(\n 'absolute h-7 w-7 stroke-[2.5] transition-all',\n open ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100'\n )}\n style={{ transitionDuration: `${DURATION_MS}ms` }}\n />\n <X\n className={cn(\n 'absolute h-6 w-6 stroke-[2.5] transition-all',\n open ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0'\n )}\n style={{ transitionDuration: `${DURATION_MS}ms` }}\n />\n </Button>\n </div>\n </>\n );\n}\n","'use client';\n\nimport { usePathname } from 'next/navigation';\n\n/**\n * Extracts the selected feature ID from the current URL path.\n * Returns `null` when no feature drawer route is active.\n */\nexport function useSelectedFeatureId(): string | null {\n const pathname = usePathname();\n const match = pathname.match(/^\\/feature\\/([^/]+)/);\n return match?.[1] ?? null;\n}\n","'use client';\n\nimport { usePathname, useSearchParams } from 'next/navigation';\n\n/**\n * Extracts the selected repository context from the current URL.\n * Returns `{ id, path }` — either or both may be set depending on the route.\n *\n * Matches:\n * - `/repository/<id>` → id is set\n * - `/create?repo=<path>` → path is set\n */\nexport function useSelectedRepository(): { id: string | null; path: string | null } {\n const pathname = usePathname();\n const searchParams = useSearchParams();\n\n const repoIdMatch = pathname.match(/^\\/repository\\/([^/]+)/);\n const id = repoIdMatch?.[1] ?? null;\n\n const isCreate = pathname.startsWith('/create');\n const path = isCreate ? searchParams.get('repo') : null;\n\n return { id, path };\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { Viewport } from '@xyflow/react';\n\nexport type { Viewport } from '@xyflow/react';\n\nexport const STORAGE_KEY = 'shipit-ai-canvas-viewport';\nexport const DEBOUNCE_MS = 500;\n\nexport const DEFAULT_VIEWPORT: Viewport = { x: 30, y: 30, zoom: 0.85 };\n\nexport interface UseViewportPersistenceResult {\n defaultViewport: Viewport;\n onMoveEnd: (viewport: Viewport) => void;\n resetViewport: () => Viewport;\n}\n\nfunction isValidViewport(value: unknown): value is Viewport {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const v = value as Record<string, unknown>;\n return (\n typeof v.x === 'number' &&\n typeof v.y === 'number' &&\n typeof v.zoom === 'number' &&\n Number.isFinite(v.x) &&\n Number.isFinite(v.y) &&\n Number.isFinite(v.zoom) &&\n v.zoom > 0\n );\n}\n\nfunction readViewport(): Viewport {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (raw == null) return DEFAULT_VIEWPORT;\n const parsed: unknown = JSON.parse(raw);\n return isValidViewport(parsed) ? parsed : DEFAULT_VIEWPORT;\n } catch {\n return DEFAULT_VIEWPORT;\n }\n}\n\nexport function useViewportPersistence(): UseViewportPersistenceResult {\n const defaultViewport = useRef<Viewport>(readViewport()).current;\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (timerRef.current != null) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n const onMoveEnd = useCallback((viewport: Viewport) => {\n if (timerRef.current != null) {\n clearTimeout(timerRef.current);\n }\n timerRef.current = setTimeout(() => {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(viewport));\n } catch {\n // Silently ignore localStorage errors (quota exceeded, private browsing, etc.)\n }\n }, DEBOUNCE_MS);\n }, []);\n\n const resetViewport = useCallback((): Viewport => {\n try {\n localStorage.removeItem(STORAGE_KEY);\n } catch {\n // Silently ignore localStorage errors\n }\n return DEFAULT_VIEWPORT;\n }, []);\n\n return { defaultViewport, onMoveEnd, resetViewport };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"00ea2e4aeb96147be0df27de0fb0811dcd46d7b284\":{\"name\":\"isAgentSetupComplete\"}},\"src/presentation/web/app/actions/agent-setup-flag.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"00ea2e4aeb96147be0df27de0fb0811dcd46d7b284\",callServer,void 0,findSourceMapURL,\"isAgentSetupComplete\");export{$$RSC_SERVER_ACTION_0 as isAgentSetupComplete};","/* __next_internal_action_entry_do_not_use__ [{\"0095abc4000335aa7827a56915d9196e945df0ab50\":{\"name\":\"checkAgentAuth\"}},\"src/presentation/web/app/actions/check-agent-auth.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"0095abc4000335aa7827a56915d9196e945df0ab50\",callServer,void 0,findSourceMapURL,\"checkAgentAuth\");export{$$RSC_SERVER_ACTION_0 as checkAgentAuth};","'use client';\n\nimport type { ReactNode } from 'react';\nimport { ReactFlowProvider } from '@xyflow/react';\nimport type { Edge } from '@xyflow/react';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport { SessionsProvider } from '@/hooks/sessions-provider';\nimport { ControlCenterInner } from './control-center-inner';\n\nexport interface ControlCenterProps {\n initialNodes: CanvasNodeType[];\n initialEdges: Edge[];\n /** Drawer content rendered by the @drawer parallel route slot. */\n drawer?: ReactNode;\n}\n\nexport function ControlCenter({ initialNodes, initialEdges, drawer }: ControlCenterProps) {\n return (\n <div data-testid=\"control-center\" className=\"h-full w-full\">\n <SessionsProvider>\n <ReactFlowProvider>\n <ControlCenterInner initialNodes={initialNodes} initialEdges={initialEdges} />\n </ReactFlowProvider>\n </SessionsProvider>\n <div key=\"drawer\">{drawer}</div>\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"00d00bca5810b627fd7f843fa04a97b6756eac2112\":{\"name\":\"checkToolStatus\"}},\"src/presentation/web/app/actions/check-tool-status.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"00d00bca5810b627fd7f843fa04a97b6756eac2112\",callServer,void 0,findSourceMapURL,\"checkToolStatus\");export{$$RSC_SERVER_ACTION_0 as checkToolStatus};","'use client';\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport { ChevronLeft, LoaderCircle, TriangleAlert } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { getAllAgentModels } from '@/app/actions/get-all-agent-models';\nimport type { AgentModelGroup } from '@/app/actions/get-all-agent-models';\nimport { updateAgentAndModel } from '@/app/actions/update-agent-and-model';\nimport { checkToolStatus } from '@/app/actions/check-tool-status';\nimport { getAgentTypeIcon } from '@/components/common/feature-node/agent-type-icons';\nimport { getModelMeta } from '@/lib/model-metadata';\nimport { cn } from '@/lib/utils';\n\nexport interface WelcomeAgentSetupProps {\n onComplete: () => void;\n className?: string;\n}\n\ntype SetupStep = 'select-agent' | 'select-model';\n\nconst STEPS: SetupStep[] = ['select-agent', 'select-model'];\n\nexport function WelcomeAgentSetup({ onComplete, className }: WelcomeAgentSetupProps) {\n const { t } = useTranslation('web');\n const [groups, setGroups] = useState<AgentModelGroup[]>([]);\n const [loading, setLoading] = useState(true);\n const [step, setStep] = useState<SetupStep>('select-agent');\n const [selectedAgent, setSelectedAgent] = useState<string | null>(null);\n const [saving, setSaving] = useState(false);\n const [transitioning, setTransitioning] = useState(false);\n const [visible, setVisible] = useState(true);\n const [ghInstalled, setGhInstalled] = useState(true);\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(() => {\n getAllAgentModels()\n .then(setGroups)\n .finally(() => setLoading(false));\n checkToolStatus()\n .then((status) => setGhInstalled(status.gh.installed))\n .catch(() => undefined);\n }, []);\n\n const activeGroup = selectedAgent ? groups.find((g) => g.agentType === selectedAgent) : null;\n\n const transitionTo = useCallback((nextStep: SetupStep, setup?: () => void) => {\n setTransitioning(true);\n setVisible(false);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n setup?.();\n setStep(nextStep);\n requestAnimationFrame(() => {\n setVisible(true);\n setTransitioning(false);\n });\n }, 150);\n }, []);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const saveAndComplete = useCallback(\n async (agentType: string, model: string | null) => {\n setSaving(true);\n try {\n await updateAgentAndModel(agentType, model);\n // Fade out the entire wizard before handing off to the next view\n setVisible(false);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n onComplete();\n }, 200);\n } catch {\n setSaving(false);\n }\n },\n [onComplete]\n );\n\n const handleAgentSelect = useCallback(\n (agentType: string) => {\n const group = groups.find((g) => g.agentType === agentType);\n if (group && group.models.length > 0) {\n transitionTo('select-model', () => {\n setSelectedAgent(agentType);\n });\n } else {\n saveAndComplete(agentType, null);\n }\n },\n [groups, transitionTo, saveAndComplete]\n );\n\n const handleModelSelect = useCallback(\n (model: string) => {\n if (!selectedAgent) return;\n saveAndComplete(selectedAgent, model);\n },\n [selectedAgent, saveAndComplete]\n );\n\n const handleBack = useCallback(() => {\n if (step === 'select-model') {\n transitionTo('select-agent', () => {\n setSelectedAgent(null);\n });\n }\n }, [step, transitionTo]);\n\n if (loading) {\n return (\n <div\n data-testid=\"welcome-agent-setup\"\n className={cn('flex flex-col items-center justify-center gap-4', className)}\n >\n <LoaderCircle className=\"text-muted-foreground h-5 w-5 animate-spin\" />\n <p className=\"text-muted-foreground text-sm\">{t('welcome.loadingAgents')}</p>\n </div>\n );\n }\n\n const stepIndex = STEPS.indexOf(step);\n\n // Dynamic hero text per step\n const heroTitle = step === 'select-agent' ? t('welcome.chooseAgent') : t('welcome.pickModel');\n\n const heroSubtitle =\n step === 'select-agent'\n ? t('welcome.selectAgentSubtitle')\n : activeGroup\n ? t('welcome.chooseModelSubtitle', { label: activeGroup.label })\n : '';\n\n return (\n <div\n data-testid=\"welcome-agent-setup\"\n className={cn('flex w-full flex-col items-center', className)}\n >\n {/* Step indicator — stays visible across transitions */}\n <div className=\"mb-8 flex w-full max-w-xs items-center gap-1.5\">\n {STEPS.map((s, i) => (\n <div\n key={s}\n className={cn(\n 'h-[3px] flex-1 rounded-full transition-colors duration-300',\n i <= stepIndex ? 'bg-foreground/60' : 'bg-muted'\n )}\n />\n ))}\n </div>\n\n {/* Hero + content — all fade together on step transitions */}\n <div\n className={cn(\n 'flex w-full flex-col items-center transition-opacity duration-200',\n visible && !transitioning ? 'opacity-100' : 'opacity-0'\n )}\n >\n <h1 className=\"text-foreground/90 text-center text-5xl font-extralight tracking-tight\">\n {heroTitle}\n </h1>\n <p className=\"text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light\">\n {heroSubtitle}\n </p>\n\n {step === 'select-agent' && !ghInstalled && (\n <div\n data-testid=\"gh-cli-notice\"\n className=\"mt-5 flex items-start gap-2 rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 dark:border-amber-900 dark:bg-amber-950/40\"\n >\n <TriangleAlert className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-500\" />\n <p className=\"text-sm leading-relaxed text-amber-800 dark:text-amber-300\">\n <span className=\"font-medium\">{t('welcome.ghCliRequired')}</span>{' '}\n {t('welcome.ghCliRequiredText')}{' '}\n <a\n href=\"https://cli.github.com/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline underline-offset-2 hover:text-amber-900 dark:hover:text-amber-200\"\n >\n {t('welcome.installHere')}\n </a>\n .\n </p>\n </div>\n )}\n\n <div className=\"mt-8 flex w-full flex-col items-center\">\n {/* Step 1: Agent selection — horizontal grid */}\n {step === 'select-agent' && (\n <div\n data-testid=\"agent-list\"\n className=\"grid w-full max-w-lg gap-3\"\n style={{\n gridTemplateColumns: `repeat(${Math.min(groups.length, 4)}, minmax(0, 1fr))`,\n }}\n >\n {groups.map((group) => {\n const GroupIcon = getAgentTypeIcon(group.agentType);\n return (\n <button\n key={group.agentType}\n type=\"button\"\n disabled={saving}\n data-testid={`agent-option-${group.agentType}`}\n className=\"border-border hover:bg-accent hover:border-foreground/20 flex cursor-pointer flex-col items-center gap-3 rounded-2xl border px-4 py-5 transition-all duration-150 active:scale-[0.97] disabled:opacity-50\"\n onClick={() => handleAgentSelect(group.agentType)}\n >\n <GroupIcon className=\"text-foreground/70 h-7 w-7\" />\n <span className=\"text-sm font-medium\">{group.label}</span>\n </button>\n );\n })}\n </div>\n )}\n\n {/* Step 2: Model selection — horizontal grid */}\n {step === 'select-model' && activeGroup ? (\n <div\n data-testid=\"model-list\"\n className=\"flex w-full max-w-lg flex-col items-center gap-4\"\n >\n <button\n type=\"button\"\n disabled={saving}\n className=\"text-muted-foreground hover:text-foreground flex cursor-pointer items-center gap-1.5 self-start text-sm transition-colors\"\n onClick={handleBack}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n {t('welcome.back')}\n </button>\n <div\n className=\"grid w-full gap-3\"\n style={{\n gridTemplateColumns: `repeat(${Math.min(activeGroup.models.length, 3)}, minmax(0, 1fr))`,\n }}\n >\n {activeGroup.models.map((m) => {\n const meta = getModelMeta(m.id);\n return (\n <button\n key={m.id}\n type=\"button\"\n disabled={saving}\n data-testid={`model-option-${m.id}`}\n className=\"border-border hover:bg-accent hover:border-foreground/20 flex cursor-pointer flex-col items-center gap-2 rounded-2xl border px-4 py-5 text-center transition-all duration-150 active:scale-[0.97] disabled:opacity-50\"\n onClick={() => handleModelSelect(m.id)}\n >\n <span className=\"text-sm font-medium\">\n {meta.displayName || m.displayName}\n </span>\n <span className=\"text-muted-foreground text-xs leading-tight\">\n {meta.description || m.description}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport {\n FolderOpen,\n Copy,\n Check,\n LoaderCircle,\n CircleCheck,\n CircleAlert,\n Terminal,\n ChevronDown,\n ExternalLink,\n} from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { pickFolder } from '@/components/common/add-repository-button/pick-folder';\nimport { ReactFileManagerDialog } from '@/components/common/react-file-manager-dialog';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\nimport { isAgentSetupComplete } from '@/app/actions/agent-setup-flag';\nimport { checkAgentAuth } from '@/app/actions/check-agent-auth';\nimport type { AgentAuthStatus } from '@/app/actions/check-agent-auth';\nimport { checkToolStatus } from '@/app/actions/check-tool-status';\nimport type { ToolStatusResult, ToolStatusEntry } from '@/app/actions/check-tool-status';\nimport { WelcomeAgentSetup } from './welcome-agent-setup';\n\nexport interface ControlCenterEmptyStateProps {\n onRepositorySelect?: (path: string) => void;\n className?: string;\n}\n\nconst commands = ['cd ~/my-repo', 'shipit-ai feat new \"sleek dashboard\"'];\n\nexport function ControlCenterEmptyState({\n onRepositorySelect,\n className,\n}: ControlCenterEmptyStateProps) {\n const { t } = useTranslation('web');\n const [copied, setCopied] = useState(false);\n const [loading, setLoading] = useState(false);\n const [showReactPicker, setShowReactPicker] = useState(false);\n const [agentReady, setAgentReady] = useState<boolean | null>(null);\n const [authStatus, setAuthStatus] = useState<AgentAuthStatus | null>(null);\n const [cliExpanded, setCliExpanded] = useState(false);\n const [toolStatus, setToolStatus] = useState<ToolStatusResult | null>(null);\n const { reactFileManager: useReactFileManager } = useFeatureFlags();\n\n useEffect(() => {\n isAgentSetupComplete().then((done) => {\n setAgentReady(done);\n });\n }, []);\n\n useEffect(() => {\n if (!agentReady) return;\n checkAgentAuth().then(setAuthStatus);\n checkToolStatus().then(setToolStatus);\n }, [agentReady]);\n\n async function handlePickerClick() {\n if (loading) return;\n\n if (useReactFileManager) {\n setShowReactPicker(true);\n return;\n }\n\n setLoading(true);\n try {\n const path = await pickFolder();\n if (path) {\n onRepositorySelect?.(path);\n }\n } catch {\n // Native picker failed — fall back to React file manager\n setShowReactPicker(true);\n } finally {\n setLoading(false);\n }\n }\n\n function handleReactPickerSelect(path: string | null) {\n if (path) {\n onRepositorySelect?.(path);\n }\n setShowReactPicker(false);\n }\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(commands.join('\\n'));\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, []);\n\n const handleAgentSetupComplete = useCallback(() => {\n setAgentReady(true);\n }, []);\n\n const handleRetryAuth = useCallback(() => {\n setAuthStatus(null);\n checkAgentAuth().then(setAuthStatus);\n }, []);\n\n if (agentReady === null) return null;\n\n return (\n <div\n data-testid=\"control-center-empty-state\"\n className={cn(\n 'relative flex h-full w-full flex-col items-center justify-center px-8',\n className\n )}\n >\n {/* Vertically centered content */}\n {!agentReady ? (\n /* Agent setup wizard — owns its own hero */\n <WelcomeAgentSetup onComplete={handleAgentSetupComplete} />\n ) : (\n /* Repository step — fade in to match wizard transitions */\n <div className=\"animate-in fade-in flex w-full max-w-md flex-col items-center duration-300\">\n <h1 className=\"text-foreground/90 text-center text-5xl font-extralight tracking-tight\">\n {t('emptyState.addProject')}\n </h1>\n <p className=\"text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light\">\n {t('emptyState.addProjectDescription')}\n <br />\n {t('emptyState.addProjectDescriptionLine2')}\n </p>\n\n {/* Status checklist */}\n <div className=\"mt-8 flex w-full flex-col gap-3\">\n <AgentAuthBanner status={authStatus} onRetry={handleRetryAuth} />\n <ToolStatusRow\n label={t('emptyState.git')}\n status={toolStatus?.git ?? null}\n missingHint={t('emptyState.gitRequired')}\n />\n <ToolStatusRow\n label={t('emptyState.githubCli')}\n status={toolStatus?.gh ?? null}\n missingHint={t('emptyState.githubCliRequired')}\n />\n </div>\n {/* Primary CTA */}\n <button\n type=\"button\"\n data-testid=\"empty-state-add-repository\"\n onClick={handlePickerClick}\n disabled={loading}\n className=\"bg-foreground text-background hover:bg-foreground/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-medium shadow-lg transition-all duration-200 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50\"\n >\n {loading ? (\n <LoaderCircle className=\"h-5 w-5 animate-spin\" />\n ) : (\n <FolderOpen className=\"h-5 w-5\" />\n )}\n {loading ? t('emptyState.opening') : t('emptyState.chooseFolder')}\n </button>\n\n {/* Subtitle under CTA */}\n <p className=\"text-muted-foreground/60 mt-3 text-center text-sm\">\n {t('emptyState.folderHint')}\n </p>\n </div>\n )}\n\n {/* CLI toggle — anchored to bottom, doesn't shift centered content */}\n {agentReady ? (\n <div\n className=\"absolute bottom-8 flex flex-col items-center\"\n style={{\n animationDelay: '400ms',\n animationDuration: '600ms',\n animationFillMode: 'both',\n }}\n >\n <button\n type=\"button\"\n onClick={() => setCliExpanded(!cliExpanded)}\n className=\"text-muted-foreground hover:text-foreground flex cursor-pointer items-center gap-1.5 transition-colors duration-200\"\n >\n <Terminal className=\"h-3.5 w-3.5\" />\n <span className=\"text-sm\">{t('emptyState.orUseCli')}</span>\n <ChevronDown\n className={cn(\n 'h-3.5 w-3.5 transition-transform duration-200',\n cliExpanded ? '' : 'rotate-180'\n )}\n />\n </button>\n\n {cliExpanded ? (\n <div className=\"animate-in fade-in slide-in-from-top-1 mt-3 w-80 duration-200\">\n <div\n data-testid=\"cli-code-block\"\n className=\"relative rounded-xl bg-zinc-900 px-5 py-4 font-mono text-[13px] leading-relaxed text-zinc-400\"\n >\n <button\n type=\"button\"\n data-testid=\"cli-code-block-copy\"\n onClick={handleCopy}\n className=\"absolute top-3 right-3 cursor-pointer rounded-md p-1.5 text-zinc-600 transition-colors hover:bg-zinc-800 hover:text-zinc-300\"\n aria-label={t('emptyState.copyCommands')}\n >\n {copied ? (\n <Check className=\"h-3.5 w-3.5 text-emerald-400\" />\n ) : (\n <Copy className=\"h-3.5 w-3.5\" />\n )}\n </button>\n <div className=\"space-y-1\">\n {commands.map((cmd) => (\n <div key={cmd} className=\"whitespace-nowrap\">\n <span className=\"text-zinc-600 select-none\">$ </span>\n <span className=\"text-zinc-300\">{cmd}</span>\n </div>\n ))}\n </div>\n </div>\n </div>\n ) : null}\n </div>\n ) : null}\n <ReactFileManagerDialog\n open={showReactPicker}\n onOpenChange={(open) => {\n if (!open) setShowReactPicker(false);\n }}\n onSelect={handleReactPickerSelect}\n />\n </div>\n );\n}\n\n/** Status row for the AI agent (Claude Code, etc.) */\nfunction AgentAuthBanner({\n status,\n onRetry,\n}: {\n status: AgentAuthStatus | null;\n onRetry: () => void;\n}) {\n const { t } = useTranslation('web');\n\n if (!status) {\n return (\n <ChecklistRow\n icon={<LoaderCircle className=\"text-muted-foreground/50 h-4 w-4 animate-spin\" />}\n >\n <span className=\"text-muted-foreground/50 text-sm\">{t('emptyState.checkingSetup')}</span>\n </ChecklistRow>\n );\n }\n\n if (status.installed && status.authenticated) {\n return (\n <ChecklistRow icon={<CircleCheck className=\"h-4 w-4 text-emerald-500\" />}>\n <span className=\"text-sm text-emerald-600 dark:text-emerald-400\">\n {t('emptyState.ready', { label: status.label })}\n </span>\n </ChecklistRow>\n );\n }\n\n if (!status.installed) {\n return (\n <ChecklistRow icon={<CircleAlert className=\"h-4 w-4 text-amber-500\" />}>\n <span className=\"text-sm font-medium text-amber-600 dark:text-amber-400\">\n {t('emptyState.notInstalled', { label: status.label })}\n </span>\n {status.installCommand ? <CopyableCommand command={status.installCommand} /> : null}\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400\"\n >\n {t('emptyState.reCheck')}\n </button>\n </ChecklistRow>\n );\n }\n\n return (\n <ChecklistRow icon={<CircleAlert className=\"h-4 w-4 text-amber-500\" />}>\n <span className=\"text-sm font-medium text-amber-600 dark:text-amber-400\">\n {t('emptyState.needsAuth', { label: status.label })}\n </span>\n {status.authCommand ? <CopyableCommand command={status.authCommand} /> : null}\n <div className=\"flex items-center gap-3\">\n {status.binaryName ? (\n <button\n type=\"button\"\n data-testid=\"auth-banner-open-terminal\"\n onClick={async () => {\n try {\n const toolId =\n status.agentType === 'claude-code' ? 'claude-code' : status.agentType;\n await fetch(`/api/tools/${toolId}/launch`, { method: 'POST' });\n } catch {\n /* best effort */\n }\n }}\n className=\"flex items-center gap-1 text-xs font-medium text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400\"\n >\n <Terminal className=\"h-3 w-3\" />\n {t('emptyState.open', { label: status.label })}\n </button>\n ) : null}\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400\"\n >\n {t('emptyState.reCheck')}\n </button>\n </div>\n </ChecklistRow>\n );\n}\n\n/** Status row for system tools (git, gh) */\nfunction ToolStatusRow({\n label,\n status,\n missingHint,\n}: {\n label: string;\n status: ToolStatusEntry | null;\n missingHint: string;\n}) {\n const { t } = useTranslation('web');\n\n if (!status) {\n return (\n <ChecklistRow\n icon={<LoaderCircle className=\"text-muted-foreground/50 h-4 w-4 animate-spin\" />}\n >\n <span className=\"text-muted-foreground/50 text-sm\">\n {t('emptyState.checking', { label })}\n </span>\n </ChecklistRow>\n );\n }\n\n if (status.installed) {\n return (\n <ChecklistRow icon={<CircleCheck className=\"h-4 w-4 text-emerald-500\" />}>\n <span className=\"flex items-baseline gap-2\">\n <span className=\"text-sm text-emerald-600 dark:text-emerald-400\">\n {t('emptyState.ready', { label })}\n </span>\n {status.version ? (\n <span className=\"text-muted-foreground/40 text-xs\">v{status.version}</span>\n ) : null}\n </span>\n </ChecklistRow>\n );\n }\n\n return (\n <ChecklistRow icon={<CircleAlert className=\"h-4 w-4 text-amber-500\" />}>\n <span className=\"text-sm font-medium text-amber-600 dark:text-amber-400\">\n {t('emptyState.notFound', { label })}\n </span>\n <span className=\"text-muted-foreground/50 text-xs\">{missingHint}</span>\n {status.installCommand ? <CopyableCommand command={status.installCommand} /> : null}\n {status.installUrl ? (\n <a\n href={status.installUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400\"\n >\n {t('emptyState.docs')} <ExternalLink className=\"h-3 w-3\" />\n </a>\n ) : null}\n </ChecklistRow>\n );\n}\n\n/** Checklist row: icon pinned left, children stacked vertically and fill width */\nfunction ChecklistRow({ icon, children }: { icon: React.ReactNode; children: React.ReactNode }) {\n return (\n <div className=\"animate-in fade-in flex items-start gap-2.5\">\n <div className=\"mt-0.5 shrink-0\">{icon}</div>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">{children}</div>\n </div>\n );\n}\n\n/** Compact copyable command block — fills available row width */\nfunction CopyableCommand({ command }: { command: string }) {\n const [copied, setCopied] = useState(false);\n\n return (\n <button\n type=\"button\"\n onClick={async () => {\n await navigator.clipboard.writeText(command);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }}\n className=\"group/cmd flex cursor-pointer items-center justify-between gap-2 rounded-md bg-zinc-100 py-1 ps-2.5 pe-2 text-start transition-colors hover:bg-zinc-200 dark:bg-zinc-800 dark:hover:bg-zinc-700\"\n >\n <code className=\"min-w-0 truncate text-[11px] leading-relaxed text-zinc-600 dark:text-zinc-300\">\n {command}\n </code>\n {copied ? (\n <Check className=\"h-3 w-3 shrink-0 text-emerald-500\" />\n ) : (\n <Copy className=\"h-3 w-3 shrink-0 text-zinc-400 opacity-0 transition-opacity group-hover/cmd:opacity-100\" />\n )}\n </button>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRouter, usePathname } from 'next/navigation';\nimport { Sparkles, FolderPlus, GitBranch } from 'lucide-react';\nimport { GithubIcon } from '@/components/ui/github-icon';\nimport type { Edge, Viewport } from '@xyflow/react';\nimport { useReactFlow } from '@xyflow/react';\nimport { FeaturesCanvas } from '@/components/features/features-canvas';\nimport { CanvasToolbar } from '@/components/features/features-canvas/canvas-toolbar';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport {\n FloatingActionButton,\n type FloatingActionButtonAction,\n} from '@/components/common/floating-action-button';\nimport {\n useSidebarFeaturesContext,\n mapNodeStateToSidebarStatus,\n} from '@/hooks/sidebar-features-context';\nimport { useTranslation } from 'react-i18next';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\n\nimport { useSelectedFeatureId } from '@/hooks/use-selected-feature-id';\nimport { useSelectedRepository } from '@/hooks/use-selected-repository';\nimport { useSoundAction } from '@/hooks/use-sound-action';\nimport { useDrawerCloseGuard } from '@/hooks/drawer-close-guard';\nimport { useViewportPersistence } from '@/hooks/use-viewport-persistence';\nimport { useSidebar } from '@/components/ui/sidebar';\nimport { useFabLayout } from '@/hooks/fab-layout-context';\nimport { ControlCenterEmptyState } from './control-center-empty-state';\nimport { useControlCenterState } from './use-control-center-state';\n\nconst AUTO_FOCUS_OPTIONS = {\n maxZoom: 1.0,\n padding: 0.5,\n duration: 500,\n} as const;\n\nconst AUTO_FOCUS_DRAWER_DELAY_MS = 600;\n\ninterface ControlCenterInnerProps {\n initialNodes: CanvasNodeType[];\n initialEdges: Edge[];\n}\n\nexport function ControlCenterInner({ initialNodes, initialEdges }: ControlCenterInnerProps) {\n const { t } = useTranslation('web');\n const router = useRouter();\n const pathname = usePathname();\n const selectedFeatureId = useSelectedFeatureId();\n const selectedRepository = useSelectedRepository();\n const clickSound = useSoundAction('click');\n const { guardedNavigate } = useDrawerCloseGuard();\n const { fitView } = useReactFlow();\n const drawerTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const {\n defaultViewport,\n onMoveEnd: handleViewportChange,\n resetViewport,\n } = useViewportPersistence();\n\n const {\n nodes,\n edges,\n onNodesChange,\n handleConnect,\n handleAddRepository,\n handleArchiveFeature,\n handleDeleteFeature,\n handleRetryFeature,\n handleStartFeature,\n handleStopFeature,\n handleUnarchiveFeature,\n handleDeleteRepository,\n createFeatureNode,\n showArchived,\n setShowArchived,\n setCallbacks,\n } = useControlCenterState(initialNodes, initialEdges);\n\n // Publish sidebar features + repo state to context\n const { setFeatures: setSidebarFeatures, setHasRepositories: setSidebarHasRepos } =\n useSidebarFeaturesContext();\n\n const featureNodes = useMemo(() => nodes.filter((n) => n.type === 'featureNode'), [nodes]);\n\n const sidebarKey = useMemo(() => {\n return featureNodes\n .map((n) => {\n const d = n.data as FeatureNodeData;\n return `${d.featureId}:${d.state}:${d.name}:${d.repositoryPath}`;\n })\n .sort()\n .join(',');\n }, [featureNodes]);\n\n useEffect(() => {\n const sidebarItems = featureNodes\n .map((n) => {\n const d = n.data as FeatureNodeData;\n const status = mapNodeStateToSidebarStatus(d.state);\n if (!status) return null;\n const repoPath = d.repositoryPath ?? '';\n return {\n featureId: d.featureId,\n name: d.name,\n status,\n repositoryPath: repoPath,\n repositoryName: d.repositoryName ?? repoPath.split('/').filter(Boolean).pop() ?? repoPath,\n ...(d.startedAt != null && { startedAt: d.startedAt }),\n ...(d.runtime != null && { duration: d.runtime }),\n ...(d.agentType && { agentType: d.agentType }),\n ...(d.modelId && { modelId: d.modelId }),\n };\n })\n .filter(Boolean) as {\n featureId: string;\n name: string;\n status: 'action-needed' | 'in-progress' | 'done';\n repositoryPath: string;\n repositoryName: string;\n startedAt?: number;\n duration?: string;\n agentType?: string;\n modelId?: string;\n }[];\n\n setSidebarFeatures(sidebarItems);\n }, [sidebarKey, featureNodes, setSidebarFeatures]);\n\n // ── URL-based navigation handlers ────────────────────────────────────\n\n const handleNodeClick = useCallback(\n (event: React.MouseEvent, node: CanvasNodeType) => {\n if (node.type === 'featureNode') {\n const data = node.data as FeatureNodeData;\n if (data.state === 'creating' || data.state === 'deleting') return;\n // Only navigate when the click lands on the card itself, not on\n // overlay buttons (delete, add) or pointer events leaking from dialogs.\n const target = event.target as HTMLElement;\n if (!target.closest('[data-testid=\"feature-node-card\"]')) return;\n guardedNavigate(() => {\n clickSound.play();\n router.push(`/feature/${data.featureId}`);\n });\n }\n },\n [router, clickSound, guardedNavigate]\n );\n\n const handleAddFeature = useCallback(() => {\n clickSound.play();\n router.push('/create');\n }, [router, clickSound]);\n\n const handleAddFeatureToRepo = useCallback(\n (repoNodeId: string) => {\n clickSound.play();\n const node = nodes.find((n) => n.id === repoNodeId);\n const repoPath = (node?.data as { repositoryPath?: string } | undefined)?.repositoryPath;\n if (repoPath) {\n router.push(`/create?repo=${encodeURIComponent(repoPath)}`);\n } else {\n router.push('/create');\n }\n },\n [nodes, router, clickSound]\n );\n\n const handleAddFeatureToFeature = useCallback(\n (featureNodeId: string) => {\n const featureId = featureNodeId.startsWith('feat-') ? featureNodeId.slice(5) : featureNodeId;\n // Find the repo node that owns this feature\n const repoEdge = edges.find((e) => e.target === featureNodeId);\n const repoNode = repoEdge ? nodes.find((n) => n.id === repoEdge.source) : null;\n const repoPath = (repoNode?.data as { repositoryPath?: string } | undefined)?.repositoryPath;\n\n clickSound.play();\n const params = new URLSearchParams();\n if (repoPath) params.set('repo', repoPath);\n params.set('parent', featureId);\n router.push(`/create?${params.toString()}`);\n },\n [nodes, edges, router, clickSound]\n );\n\n const handleRepositoryClick = useCallback(\n (nodeId: string) => {\n const node = nodes.find((n) => n.id === nodeId);\n if (node?.type === 'repositoryNode') {\n const data = node.data as RepositoryNodeData;\n if (data.id) {\n guardedNavigate(() => router.push(`/repository/${data.id}`));\n }\n }\n },\n [nodes, router, guardedNavigate]\n );\n\n // Close all drawers — navigate back to root\n const handleClearDrawers = useCallback(() => {\n if (pathname !== '/') {\n guardedNavigate(() => router.push('/'));\n }\n }, [router, pathname, guardedNavigate]);\n\n // Shared: after adding first repo, center canvas and open create drawer\n const focusAndOpenDrawer = useCallback(\n (repoPath: string) => {\n // Wait for next render so the repo node exists in the DOM\n setTimeout(() => {\n fitView(AUTO_FOCUS_OPTIONS);\n\n // Open the create-feature drawer after the fitView animation completes\n drawerTimerRef.current = setTimeout(() => {\n guardedNavigate(() => router.push(`/create?repo=${encodeURIComponent(repoPath)}`));\n }, AUTO_FOCUS_DRAWER_DELAY_MS);\n }, 0);\n },\n [fitView, guardedNavigate, router]\n );\n\n // Wrapper: add repo + auto-focus if canvas was empty\n const addRepoAndFocus = useCallback(\n (path: string) => {\n const { wasEmpty, repoPath } = handleAddRepository(path);\n if (wasEmpty) {\n focusAndOpenDrawer(repoPath);\n }\n },\n [handleAddRepository, focusAndOpenDrawer]\n );\n\n // Listen for global \"add repository\" events from the top bar button\n useEffect(() => {\n const handler = (e: Event) => {\n const path = (e as CustomEvent<{ path: string }>).detail.path;\n addRepoAndFocus(path);\n };\n window.addEventListener('shipit-ai:add-repository', handler);\n return () => {\n window.removeEventListener('shipit-ai:add-repository', handler);\n if (drawerTimerRef.current != null) {\n clearTimeout(drawerTimerRef.current);\n }\n };\n }, [addRepoAndFocus]);\n\n // Listen for create events from the create drawer (with real feature ID from server)\n useEffect(() => {\n const handler = (e: Event) => {\n const detail = (\n e as CustomEvent<{\n featureId: string;\n name: string;\n description?: string;\n repositoryPath: string;\n parentId?: string;\n }>\n ).detail;\n\n // When a parentId is provided, connect to the parent feature node\n // via a dependency edge instead of the repo node.\n if (detail.parentId) {\n const parentNodeId = `feat-${detail.parentId}`;\n createFeatureNode(\n parentNodeId,\n {\n state: 'creating',\n featureId: detail.featureId,\n name: detail.name,\n description: detail.description,\n repositoryPath: detail.repositoryPath,\n },\n 'dependencyEdge'\n );\n return;\n }\n\n // Find the repo node to connect to\n const repoNode = nodes.find(\n (n) =>\n n.type === 'repositoryNode' &&\n (n.data as { repositoryPath?: string }).repositoryPath === detail.repositoryPath\n );\n\n createFeatureNode(repoNode?.id ?? null, {\n state: 'running',\n featureId: detail.featureId,\n name: detail.name,\n description: detail.description,\n repositoryPath: detail.repositoryPath,\n });\n };\n window.addEventListener('shipit-ai:feature-created', handler);\n return () => window.removeEventListener('shipit-ai:feature-created', handler);\n }, [nodes, createFeatureNode]);\n\n // Listen for delete requests from the feature drawer (fires when the user\n // confirms delete inside the drawer). Delegates to handleDeleteFeature so\n // the canvas gets optimistic state, mutation guard, and node removal.\n useEffect(() => {\n const handler = (e: Event) => {\n const { featureId, cleanup, cascadeDelete, closePr } = (\n e as CustomEvent<{\n featureId: string;\n cleanup?: boolean;\n cascadeDelete?: boolean;\n closePr?: boolean;\n }>\n ).detail;\n handleDeleteFeature(featureId, cleanup, cascadeDelete, closePr);\n };\n window.addEventListener('shipit-ai:feature-delete-requested', handler);\n return () => window.removeEventListener('shipit-ai:feature-delete-requested', handler);\n }, [handleDeleteFeature]);\n\n // Listen for archive requests from the feature drawer.\n useEffect(() => {\n const handler = (e: Event) => {\n const { featureId } = (e as CustomEvent<{ featureId: string }>).detail;\n handleArchiveFeature(featureId);\n };\n window.addEventListener('shipit-ai:feature-archive-requested', handler);\n return () => window.removeEventListener('shipit-ai:feature-archive-requested', handler);\n }, [handleArchiveFeature]);\n\n // Listen for unarchive requests from the feature drawer.\n useEffect(() => {\n const handler = (e: Event) => {\n const { featureId } = (e as CustomEvent<{ featureId: string }>).detail;\n handleUnarchiveFeature(featureId);\n };\n window.addEventListener('shipit-ai:feature-unarchive-requested', handler);\n return () => window.removeEventListener('shipit-ai:feature-unarchive-requested', handler);\n }, [handleUnarchiveFeature]);\n\n // Wire callbacks into derived node data (via ref — no re-render).\n useEffect(() => {\n setCallbacks({\n onNodeAction: handleAddFeatureToFeature,\n onFeatureDelete: handleDeleteFeature,\n onRetryFeature: handleRetryFeature,\n onStartFeature: handleStartFeature,\n onStopFeature: handleStopFeature,\n onArchiveFeature: handleArchiveFeature,\n onUnarchiveFeature: handleUnarchiveFeature,\n onRepositoryAdd: handleAddFeatureToRepo,\n onRepositoryClick: handleRepositoryClick,\n onRepositoryDelete: handleDeleteRepository,\n });\n }, [\n setCallbacks,\n handleAddFeatureToFeature,\n handleArchiveFeature,\n handleDeleteFeature,\n handleRetryFeature,\n handleStartFeature,\n handleStopFeature,\n handleUnarchiveFeature,\n handleAddFeatureToRepo,\n handleRepositoryClick,\n handleDeleteRepository,\n ]);\n\n const handleMoveEnd = useCallback(\n (_event: unknown, viewport: Viewport) => {\n handleViewportChange(viewport);\n },\n [handleViewportChange]\n );\n\n const hasRepositories = nodes.some((n) => n.type === 'repositoryNode');\n\n // Publish repo state to sidebar context so AppShell can hide FAB during onboarding\n useEffect(() => {\n setSidebarHasRepos(hasRepositories);\n }, [hasRepositories, setSidebarHasRepos]);\n\n // Debounced latch: prevent empty-state flicker during brief reconcile gaps\n // (e.g. stale poll momentarily drops repos), but allow the empty state to\n // return after a real delete once repos stay gone past the debounce window.\n const [showCanvas, setShowCanvas] = useState(hasRepositories);\n const latchTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (hasRepositories) {\n // Repos exist — show canvas immediately, cancel any pending unlatch\n if (latchTimerRef.current) {\n clearTimeout(latchTimerRef.current);\n latchTimerRef.current = null;\n }\n setShowCanvas(true);\n } else if (showCanvas) {\n // Repos gone — clear saved viewport so next add starts centered,\n // then wait before showing empty state (debounce stale polls)\n resetViewport();\n latchTimerRef.current = setTimeout(() => {\n setShowCanvas(false);\n latchTimerRef.current = null;\n }, 500);\n }\n return () => {\n if (latchTimerRef.current) clearTimeout(latchTimerRef.current);\n };\n }, [hasRepositories, showCanvas, resetViewport]);\n\n // Pulse the \"+\" button when there's a single repo with no features and the\n // create-feature drawer is not open — draws attention to the next action.\n const isCreateDrawerOpen = pathname.startsWith('/create');\n const displayNodes = useMemo(() => {\n const repoNodes = nodes.filter((n) => n.type === 'repositoryNode');\n const hasFeatures = nodes.some((n) => n.type === 'featureNode');\n const shouldPulse = repoNodes.length === 1 && !hasFeatures && !isCreateDrawerOpen;\n\n if (!shouldPulse) return nodes;\n\n return nodes.map((n) =>\n n.type === 'repositoryNode' ? { ...n, data: { ...n.data, pulseAdd: true } } : n\n );\n }, [nodes, isCreateDrawerOpen]);\n\n const handlePickFolder = useCallback(() => {\n window.dispatchEvent(new CustomEvent('shipit-ai:pick-folder'));\n }, []);\n\n const featureFlags = useFeatureFlags();\n\n // (+) FAB actions — only visible on control center\n const fabActions = useMemo<FloatingActionButtonAction[]>(() => {\n const actions: FloatingActionButtonAction[] = [\n {\n id: 'new-feature',\n label: t('fab.newFeature'),\n icon: <Sparkles className=\"h-4 w-4\" />,\n onClick: () => {\n clickSound.play();\n guardedNavigate(() => router.push('/create'));\n },\n },\n {\n id: 'add-local-repo',\n label: t('fab.localFolder'),\n icon: <FolderPlus className=\"h-4 w-4\" />,\n onClick: handlePickFolder,\n },\n ];\n if (featureFlags.adoptBranch) {\n actions.push({\n id: 'adopt-branch',\n label: t('fab.adoptBranch'),\n icon: <GitBranch className=\"h-4 w-4\" />,\n onClick: () => {\n guardedNavigate(() => router.push('/adopt' as Parameters<typeof router.push>[0]));\n },\n });\n }\n if (featureFlags.githubImport) {\n actions.push({\n id: 'add-github-repo',\n label: t('fab.fromGithub'),\n icon: <GithubIcon className=\"h-4 w-4\" />,\n onClick: () => {\n window.dispatchEvent(new CustomEvent('shipit-ai:open-github-import'));\n },\n });\n }\n return actions;\n }, [\n t,\n clickSound,\n guardedNavigate,\n router,\n handlePickFolder,\n featureFlags.adoptBranch,\n featureFlags.githubImport,\n ]);\n\n const canvasToolbar = (\n <CanvasToolbar\n showArchived={showArchived}\n onToggleArchived={() => setShowArchived(!showArchived)}\n onResetViewport={resetViewport}\n />\n );\n\n return (\n <>\n <FeaturesCanvas\n nodes={showCanvas ? displayNodes : []}\n edges={showCanvas ? edges : []}\n selectedFeatureId={selectedFeatureId}\n selectedRepository={selectedRepository}\n defaultViewport={defaultViewport}\n onNodesChange={onNodesChange}\n onConnect={handleConnect}\n onAddFeature={handleAddFeature}\n onNodeClick={handleNodeClick}\n onPaneClick={handleClearDrawers}\n onMoveEnd={handleMoveEnd}\n toolbar={canvasToolbar}\n emptyState={<ControlCenterEmptyState onRepositorySelect={addRepoAndFocus} />}\n />\n {/* (+) FAB — bottom-left, moves with sidebar */}\n {showCanvas ? <CreateFab actions={fabActions} /> : null}\n </>\n );\n}\n\n/** (+) FAB that tracks sidebar width via CSS var + transition.\n * When fabLayout.swapPosition is true, moves to the end side (right in LTR). */\nfunction CreateFab({ actions }: { actions: FloatingActionButtonAction[] }) {\n const { state } = useSidebar();\n const { i18n } = useTranslation('web');\n const { swapPosition } = useFabLayout();\n const isRtl = i18n.dir() === 'rtl';\n\n // Default: start side (left in LTR), tracking sidebar width\n // Swapped: end side (right in LTR), fixed 32px from edge\n if (swapPosition) {\n const positionStyle: React.CSSProperties = isRtl\n ? {\n left: 'calc(var(--sidebar-width-icon) + 32px)',\n transition: 'left 200ms ease-in-out',\n }\n : { right: '32px', transition: 'right 200ms ease-in-out' };\n\n return (\n <FloatingActionButton actions={actions} className=\"!fixed bottom-6\" style={positionStyle} />\n );\n }\n\n // Sidebar expanded = var(--sidebar-width) = 16rem, collapsed = var(--sidebar-width-icon) = 3rem\n // Position just outside the sidebar edge with 16px gap\n const offset =\n state === 'expanded'\n ? 'calc(var(--sidebar-width) + 32px)'\n : 'calc(var(--sidebar-width-icon) + 32px)';\n\n const positionStyle: React.CSSProperties = isRtl\n ? { right: offset, transition: 'right 200ms ease-in-out' }\n : { left: offset, transition: 'left 200ms ease-in-out' };\n\n return (\n <FloatingActionButton actions={actions} className=\"!fixed bottom-6\" style={positionStyle} />\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ['line', { x1: '21', x2: '16.65', y1: '21', y2: '16.65', key: '13gj7c' }],\n ['line', { x1: '11', x2: '11', y1: '8', y2: '14', key: '1vmskp' }],\n ['line', { x1: '8', x2: '14', y1: '11', y2: '11', key: 'durymu' }],\n];\n\n/**\n * @component @name ZoomIn\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjExIiByPSI4IiAvPgogIDxsaW5lIHgxPSIyMSIgeDI9IjE2LjY1IiB5MT0iMjEiIHkyPSIxNi42NSIgLz4KICA8bGluZSB4MT0iMTEiIHgyPSIxMSIgeTE9IjgiIHkyPSIxNCIgLz4KICA8bGluZSB4MT0iOCIgeDI9IjE0IiB5MT0iMTEiIHkyPSIxMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/zoom-in\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ZoomIn = createLucideIcon('zoom-in', __iconNode);\n\nexport default ZoomIn;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M8 3H5a2 2 0 0 0-2 2v3', key: '1dcmit' }],\n ['path', { d: 'M21 8V5a2 2 0 0 0-2-2h-3', key: '1e4gt3' }],\n ['path', { d: 'M3 16v3a2 2 0 0 0 2 2h3', key: 'wsl5sc' }],\n ['path', { d: 'M16 21h3a2 2 0 0 0 2-2v-3', key: '18trek' }],\n];\n\n/**\n * @component @name Maximize\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzIiAvPgogIDxwYXRoIGQ9Ik0yMSA4VjVhMiAyIDAgMCAwLTItMmgtMyIgLz4KICA8cGF0aCBkPSJNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMyIgLz4KICA8cGF0aCBkPSJNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/maximize\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Maximize = createLucideIcon('maximize', __iconNode);\n\nexport default Maximize;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ['line', { x1: '21', x2: '16.65', y1: '21', y2: '16.65', key: '13gj7c' }],\n ['line', { x1: '8', x2: '14', y1: '11', y2: '11', key: 'durymu' }],\n];\n\n/**\n * @component @name ZoomOut\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjExIiByPSI4IiAvPgogIDxsaW5lIHgxPSIyMSIgeDI9IjE2LjY1IiB5MT0iMjEiIHkyPSIxNi42NSIgLz4KICA8bGluZSB4MT0iOCIgeDI9IjE0IiB5MT0iMTEiIHkyPSIxMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/zoom-out\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ZoomOut = createLucideIcon('zoom-out', __iconNode);\n\nexport default ZoomOut;\n","import { forwardRef } from 'react';\n\n/**\n * GitHub logo icon.\n *\n * The `Github` icon was removed from lucide-react v1.0 due to trademark\n * concerns. This component renders the official GitHub mark from\n * Simple Icons so consumers can import it as a drop-in replacement.\n *\n * Accepts the same props as a native `<svg>` element (className, size\n * attributes, etc.) and uses `currentColor` as the fill so it inherits\n * the parent text color, matching the lucide-react convention.\n */\nexport const GithubIcon = forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>(\n ({ width = 24, height = 24, ...props }, ref) => (\n <svg\n ref={ref}\n role=\"img\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width={width}\n height={height}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </svg>\n )\n);\n\nGithubIcon.displayName = 'GithubIcon';\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n key: 'ct8e1f',\n },\n ],\n ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242', key: '151rxh' }],\n [\n 'path',\n {\n d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n key: '13bj9a',\n },\n ],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n];\n\n/**\n * @component @name EyeOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAuNzMzIDUuMDc2YTEwLjc0NCAxMC43NDQgMCAwIDEgMTEuMjA1IDYuNTc1IDEgMSAwIDAgMSAwIC42OTYgMTAuNzQ3IDEwLjc0NyAwIDAgMS0xLjQ0NCAyLjQ5IiAvPgogIDxwYXRoIGQ9Ik0xNC4wODQgMTQuMTU4YTMgMyAwIDAgMS00LjI0Mi00LjI0MiIgLz4KICA8cGF0aCBkPSJNMTcuNDc5IDE3LjQ5OWExMC43NSAxMC43NSAwIDAgMS0xNS40MTctNS4xNTEgMSAxIDAgMCAxIDAtLjY5NiAxMC43NSAxMC43NSAwIDAgMSA0LjQ0Ni01LjE0MyIgLz4KICA8cGF0aCBkPSJtMiAyIDIwIDIwIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/eye-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst EyeOff = createLucideIcon('eye-off', __iconNode);\n\nexport default EyeOff;\n"],"names":["featureMap","callbacks","edges","p","replace","nodeId","virtualRepos","getOrCreateVirtualRepo","repositoryPath","get","repoName","Boolean","push","type","position","x","data","name","virtualId","repoMap","entries","sort","aRaw","a","createdAt","b","Number","Infinity","aTime","onClick","onRepositoryDelete","nodes","id","pendingMap","has","map","isPending","allFeatureEntries","isCreating","state","entry","onSettings","onFeatureDelete","onStart","onStartFeature","onUnarchiveFeature","source","target","Set","node","showHandles","hasChildren","parentNodeIds","deriveGraph","normalizePath","repoByPath","Map","set","split","filter","at","y","sortedRepoEntries","bRaw","isNaN","bTime","onRepositoryAdd","onAdd","onRepositoryClick","onDelete","e","onNodeAction","onAction","onNodeSettings","onRetryFeature","onRetry","onStopFeature","onStop","onArchiveFeature","onArchive","parentNodeId","onUnarchive","edge","repoNodeId","style","strokeDasharray","add","hasEdges","length","GithubIcon","width","height","props","ref","role","viewBox","xmlns","fill","d","displayName"],"mappings":"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","ignoreList":[0,29,30,31,33]}
1
+ {"version":3,"sources":["../../../../../../../node_modules/.pnpm/%40dagrejs%2Bdagre%403.0.0/node_modules/%40dagrejs/dagre/dist/dagre.esm.js","../../../../../../../src/presentation/web/components/features/control-center/use-control-center-state.ts","../../../../../../../src/presentation/web/hooks/use-graph-derivation.ts","../../../../../../../src/presentation/web/hooks/use-graph-state.ts","../../../../../../../src/presentation/web/app/actions/data%3A880547%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/hooks/use-sse-event-handler.ts","../../../../../../../src/presentation/web/app/actions/data%3Aece329%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A6c301d%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A4678cd%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A354a1c%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/hooks/use-server-actions.ts","../../../../../../../src/presentation/web/lib/layout-with-dagre.ts","../../../../../../../src/presentation/web/lib/derive-graph.ts","../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx","../../../../../../../src/presentation/web/components/common/repository-node/repository-drawer.tsx","../../../../../../../src/presentation/web/components/features/features-canvas/dependency-edge.tsx","../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.tsx","../../../../../../../src/presentation/web/components/features/features-canvas/canvas-toolbar.tsx","../../../../../../../src/presentation/web/components/common/floating-action-button/floating-action-button.tsx","../../../../../../../src/presentation/web/hooks/use-selected-feature-id.ts","../../../../../../../src/presentation/web/hooks/use-selected-repository.ts","../../../../../../../src/presentation/web/hooks/use-viewport-persistence.ts","../../../../../../../src/presentation/web/app/actions/data%3A67523b%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Aeae431%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/features/control-center/control-center.tsx","../../../../../../../src/presentation/web/app/actions/data%3Abf4f70%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/features/control-center/welcome-agent-setup.tsx","../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx","../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx","../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/zoom-in.ts","../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/maximize.ts","../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/zoom-out.ts","../../../../../../../src/presentation/web/components/ui/github-icon.tsx","../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/eye-off.ts"],"sourcesContent":["var ge=Object.defineProperty;var hn=(e,n,t)=>n in e?ge(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;var fn=(e,n)=>{for(var t in n)ge(e,t,{get:n[t],enumerable:!0})};var pe=(e,n,t)=>hn(e,typeof n!=\"symbol\"?n+\"\":n,t);var z={};fn(z,{Graph:()=>p,alg:()=>R,json:()=>ye,version:()=>pn});var bn=Object.defineProperty,Le=(e,n)=>{for(var t in n)bn(e,t,{get:n[t],enumerable:!0})},p=class{constructor(e){this._isDirected=!0,this._isMultigraph=!1,this._isCompound=!1,this._nodes={},this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={},this._nodeCount=0,this._edgeCount=0,this._defaultNodeLabelFn=()=>{},this._defaultEdgeLabelFn=()=>{},e&&(this._isDirected=\"directed\"in e?e.directed:!0,this._isMultigraph=\"multigraph\"in e?e.multigraph:!1,this._isCompound=\"compound\"in e?e.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[\"\\0\"]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return typeof e!=\"function\"?this._defaultNodeLabelFn=()=>e:this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){return this.nodes().filter(e=>Object.keys(this._in[e]).length===0)}sinks(){return this.nodes().filter(e=>Object.keys(this._out[e]).length===0)}setNodes(e,n){return e.forEach(t=>{n!==void 0?this.setNode(t,n):this.setNode(t)}),this}setNode(e,n){return e in this._nodes?(arguments.length>1&&(this._nodes[e]=n),this):(this._nodes[e]=arguments.length>1?n:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=\"\\0\",this._children[e]={},this._children[\"\\0\"][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return e in this._nodes}removeNode(e){if(e in this._nodes){let n=t=>this.removeEdge(this._edgeObjs[t]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],this.children(e).forEach(t=>{this.setParent(t)}),delete this._children[e]),Object.keys(this._in[e]).forEach(n),delete this._in[e],delete this._preds[e],Object.keys(this._out[e]).forEach(n),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,n){if(!this._isCompound)throw new Error(\"Cannot set parent in a non-compound graph\");if(n===void 0)n=\"\\0\";else{n+=\"\";for(let t=n;t!==void 0;t=this.parent(t))if(t===e)throw new Error(\"Setting \"+n+\" as parent of \"+e+\" would create a cycle\");this.setNode(n)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=n,this._children[n][e]=!0,this}parent(e){if(this._isCompound){let n=this._parent[e];if(n!==\"\\0\")return n}}children(e=\"\\0\"){if(this._isCompound){let n=this._children[e];if(n)return Object.keys(n)}else{if(e===\"\\0\")return this.nodes();if(this.hasNode(e))return[]}return[]}predecessors(e){let n=this._preds[e];if(n)return Object.keys(n)}successors(e){let n=this._sucs[e];if(n)return Object.keys(n)}neighbors(e){let n=this.predecessors(e);if(n){let t=new Set(n);for(let r of this.successors(e))t.add(r);return Array.from(t.values())}}isLeaf(e){let n;return this.isDirected()?n=this.successors(e):n=this.neighbors(e),n.length===0}filterNodes(e){let n=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});n.setGraph(this.graph()),Object.entries(this._nodes).forEach(([o,i])=>{e(o)&&n.setNode(o,i)}),Object.values(this._edgeObjs).forEach(o=>{n.hasNode(o.v)&&n.hasNode(o.w)&&n.setEdge(o,this.edge(o))});let t={},r=o=>{let i=this.parent(o);return!i||n.hasNode(i)?(t[o]=i!=null?i:void 0,i!=null?i:void 0):i in t?t[i]:r(i)};return this._isCompound&&n.nodes().forEach(o=>n.setParent(o,r(o))),n}setDefaultEdgeLabel(e){return typeof e!=\"function\"?this._defaultEdgeLabelFn=()=>e:this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(e,n){return e.reduce((t,r)=>(n!==void 0?this.setEdge(t,r,n):this.setEdge(t,r),r)),this}setEdge(e,n,t,r){let o,i,s,a,d=!1;typeof e==\"object\"&&e!==null&&\"v\"in e?(o=e.v,i=e.w,s=e.name,arguments.length===2&&(a=n,d=!0)):(o=e,i=n,s=r,arguments.length>2&&(a=t,d=!0)),o=\"\"+o,i=\"\"+i,s!==void 0&&(s=\"\"+s);let l=C(this._isDirected,o,i,s);if(l in this._edgeLabels)return d&&(this._edgeLabels[l]=a),this;if(s!==void 0&&!this._isMultigraph)throw new Error(\"Cannot set a named edge when isMultigraph = false\");this.setNode(o),this.setNode(i),this._edgeLabels[l]=d?a:this._defaultEdgeLabelFn(o,i,s);let u=gn(this._isDirected,o,i,s);return o=u.v,i=u.w,Object.freeze(u),this._edgeObjs[l]=u,me(this._preds[i],o),me(this._sucs[o],i),this._in[i][l]=u,this._out[o][l]=u,this._edgeCount++,this}edge(e,n,t){let r=arguments.length===1?Y(this._isDirected,e):C(this._isDirected,e,n,t);return this._edgeLabels[r]}edgeAsObj(e,n,t){let r=arguments.length===1?this.edge(e):this.edge(e,n,t);return typeof r!=\"object\"?{label:r}:r}hasEdge(e,n,t){return(arguments.length===1?Y(this._isDirected,e):C(this._isDirected,e,n,t))in this._edgeLabels}removeEdge(e,n,t){let r=arguments.length===1?Y(this._isDirected,e):C(this._isDirected,e,n,t),o=this._edgeObjs[r];if(o){let i=o.v,s=o.w;delete this._edgeLabels[r],delete this._edgeObjs[r],Ee(this._preds[s],i),Ee(this._sucs[i],s),delete this._in[s][r],delete this._out[i][r],this._edgeCount--}return this}inEdges(e,n){return this.isDirected()?this.filterEdges(this._in[e],e,n):this.nodeEdges(e,n)}outEdges(e,n){return this.isDirected()?this.filterEdges(this._out[e],e,n):this.nodeEdges(e,n)}nodeEdges(e,n){if(e in this._nodes)return this.filterEdges({...this._in[e],...this._out[e]},e,n)}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}filterEdges(e,n,t){if(!e)return;let r=Object.values(e);return t?r.filter(o=>o.v===n&&o.w===t||o.v===t&&o.w===n):r}};function me(e,n){e[n]?e[n]++:e[n]=1}function Ee(e,n){e[n]!==void 0&&!--e[n]&&delete e[n]}function C(e,n,t,r){let o=\"\"+n,i=\"\"+t;if(!e&&o>i){let s=o;o=i,i=s}return o+\"\u0001\"+i+\"\u0001\"+(r===void 0?\"\\0\":r)}function gn(e,n,t,r){let o=\"\"+n,i=\"\"+t;if(!e&&o>i){let a=o;o=i,i=a}let s={v:o,w:i};return r&&(s.name=r),s}function Y(e,n){return C(e,n.v,n.w,n.name)}var pn=\"4.0.1\",ye={};Le(ye,{read:()=>yn,write:()=>mn});function mn(e){let n={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:En(e),edges:Ln(e)},t=e.graph();return t!==void 0&&(n.value=structuredClone(t)),n}function En(e){return e.nodes().map(n=>{let t=e.node(n),r=e.parent(n),o={v:n};return t!==void 0&&(o.value=t),r!==void 0&&(o.parent=r),o})}function Ln(e){return e.edges().map(n=>{let t=e.edge(n),r={v:n.v,w:n.w};return n.name!==void 0&&(r.name=n.name),t!==void 0&&(r.value=t),r})}function yn(e){let n=new p(e.options);return e.value!==void 0&&n.setGraph(e.value),e.nodes.forEach(t=>{n.setNode(t.v,t.value),t.parent&&n.setParent(t.v,t.parent)}),e.edges.forEach(t=>{n.setEdge({v:t.v,w:t.w,name:t.name},t.value)}),n}var R={};Le(R,{CycleException:()=>D,bellmanFord:()=>we,components:()=>Gn,dijkstra:()=>F,dijkstraAll:()=>_n,findCycles:()=>xn,floydWarshall:()=>On,isAcyclic:()=>Cn,postorder:()=>Pn,preorder:()=>Mn,prim:()=>jn,shortestPaths:()=>Sn,tarjan:()=>Ge,topsort:()=>ke});var wn=()=>1;function we(e,n,t,r){return Nn(e,String(n),t||wn,r||function(o){return e.outEdges(o)})}function Nn(e,n,t,r){let o={},i,s=0,a=e.nodes(),d=function(c){let h=t(c);o[c.v].distance+h<o[c.w].distance&&(o[c.w]={distance:o[c.v].distance+h,predecessor:c.v},i=!0)},l=function(){a.forEach(function(c){r(c).forEach(function(h){let f=h.v===c?h.v:h.w,g=f===h.v?h.w:h.v;d({v:f,w:g})})})};a.forEach(function(c){let h=c===n?0:Number.POSITIVE_INFINITY;o[c]={distance:h,predecessor:\"\"}});let u=a.length;for(let c=1;c<u&&(i=!1,s++,l(),!!i);c++);if(s===u-1&&(i=!1,l(),i))throw new Error(\"The graph contains a negative weight cycle\");return o}function Gn(e){let n={},t=[],r;function o(i){i in n||(n[i]=!0,r.push(i),e.successors(i).forEach(o),e.predecessors(i).forEach(o))}return e.nodes().forEach(function(i){r=[],o(i),r.length&&t.push(r)}),t}var Ne=class{constructor(){this._arr=[],this._keyIndices={}}size(){return this._arr.length}keys(){return this._arr.map(e=>e.key)}has(e){return e in this._keyIndices}priority(e){let n=this._keyIndices[e];if(n!==void 0)return this._arr[n].priority}min(){if(this.size()===0)throw new Error(\"Queue underflow\");return this._arr[0].key}add(e,n){let t=this._keyIndices,r=String(e);if(!(r in t)){let o=this._arr,i=o.length;return t[r]=i,o.push({key:r,priority:n}),this._decrease(i),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);let e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key}decrease(e,n){let t=this._keyIndices[e];if(t===void 0)throw new Error(`Key not found: ${e}`);let r=this._arr[t].priority;if(n>r)throw new Error(`New priority is greater than current priority. Key: ${e} Old: ${r} New: ${n}`);this._arr[t].priority=n,this._decrease(t)}_heapify(e){let n=this._arr,t=2*e,r=t+1,o=e;t<n.length&&(o=n[t].priority<n[o].priority?t:o,r<n.length&&(o=n[r].priority<n[o].priority?r:o),o!==e&&(this._swap(e,o),this._heapify(o)))}_decrease(e){let n=this._arr,t=n[e].priority,r;for(;e!==0&&(r=e>>1,!(n[r].priority<t));)this._swap(e,r),e=r}_swap(e,n){let t=this._arr,r=this._keyIndices,o=t[e],i=t[n];t[e]=i,t[n]=o,r[i.key]=e,r[o.key]=n}},kn=()=>1;function F(e,n,t,r){let o=function(i){return e.outEdges(i)};return vn(e,String(n),t||kn,r||o)}function vn(e,n,t,r){let o={},i=new Ne,s,a,d=function(l){let u=l.v!==s?l.v:l.w,c=o[u],h=t(l),f=a.distance+h;if(h<0)throw new Error(\"dijkstra does not allow negative edge weights. Bad edge: \"+l+\" Weight: \"+h);f<c.distance&&(c.distance=f,c.predecessor=s,i.decrease(u,f))};for(e.nodes().forEach(function(l){let u=l===n?0:Number.POSITIVE_INFINITY;o[l]={distance:u,predecessor:\"\"},i.add(l,u)});i.size()>0&&(s=i.removeMin(),a=o[s],a.distance!==Number.POSITIVE_INFINITY);)r(s).forEach(d);return o}function _n(e,n,t){return e.nodes().reduce(function(r,o){return r[o]=F(e,o,n,t),r},{})}function Ge(e){let n=0,t=[],r={},o=[];function i(s){let a=r[s]={onStack:!0,lowlink:n,index:n++};if(t.push(s),e.successors(s).forEach(function(d){d in r?r[d].onStack&&(a.lowlink=Math.min(a.lowlink,r[d].index)):(i(d),a.lowlink=Math.min(a.lowlink,r[d].lowlink))}),a.lowlink===a.index){let d=[],l;do l=t.pop(),r[l].onStack=!1,d.push(l);while(s!==l);o.push(d)}}return e.nodes().forEach(function(s){s in r||i(s)}),o}function xn(e){return Ge(e).filter(function(n){return n.length>1||n.length===1&&e.hasEdge(n[0],n[0])})}var Tn=()=>1;function On(e,n,t){return In(e,n||Tn,t||function(r){return e.outEdges(r)})}function In(e,n,t){let r={},o=e.nodes();return o.forEach(function(i){r[i]={},r[i][i]={distance:0,predecessor:\"\"},o.forEach(function(s){i!==s&&(r[i][s]={distance:Number.POSITIVE_INFINITY,predecessor:\"\"})}),t(i).forEach(function(s){let a=s.v===i?s.w:s.v,d=n(s);r[i][a]={distance:d,predecessor:i}})}),o.forEach(function(i){let s=r[i];o.forEach(function(a){let d=r[a];o.forEach(function(l){let u=d[i],c=s[l],h=d[l],f=u.distance+c.distance;f<h.distance&&(h.distance=f,h.predecessor=c.predecessor)})})}),r}var D=class extends Error{constructor(...e){super(...e)}};function ke(e){let n={},t={},r=[];function o(i){if(i in t)throw new D;i in n||(t[i]=!0,n[i]=!0,e.predecessors(i).forEach(o),delete t[i],r.push(i))}if(e.sinks().forEach(o),Object.keys(n).length!==e.nodeCount())throw new D;return r}function Cn(e){try{ke(e)}catch(n){if(n instanceof D)return!1;throw n}return!0}function Rn(e,n,t,r,o){Array.isArray(n)||(n=[n]);let i=(a=>{var d;return(d=e.isDirected()?e.successors(a):e.neighbors(a))!=null?d:[]}),s={};return n.forEach(function(a){if(!e.hasNode(a))throw new Error(\"Graph does not have node: \"+a);o=ve(e,a,t===\"post\",s,i,r,o)}),o}function ve(e,n,t,r,o,i,s){return n in r||(r[n]=!0,t||(s=i(s,n)),o(n).forEach(function(a){s=ve(e,a,t,r,o,i,s)}),t&&(s=i(s,n))),s}function _e(e,n,t){return Rn(e,n,t,function(r,o){return r.push(o),r},[])}function Pn(e,n){return _e(e,n,\"post\")}function Mn(e,n){return _e(e,n,\"pre\")}function jn(e,n){let t=new p,r={},o=new Ne,i;function s(d){let l=d.v===i?d.w:d.v,u=o.priority(l);if(u!==void 0){let c=n(d);c<u&&(r[l]=i,o.decrease(l,c))}}if(e.nodeCount()===0)return t;e.nodes().forEach(function(d){o.add(d,Number.POSITIVE_INFINITY),t.setNode(d)}),o.decrease(e.nodes()[0],0);let a=!1;for(;o.size()>0;){if(i=o.removeMin(),i in r)t.setEdge(i,r[i]);else{if(a)throw new Error(\"Input graph is not connected: \"+e);a=!0}e.nodeEdges(i).forEach(s)}return t}function Sn(e,n,t,r){return Fn(e,n,t,r!=null?r:(o=>{let i=e.outEdges(o);return i!=null?i:[]}))}function Fn(e,n,t,r){if(t===void 0)return F(e,n,t,r);let o=!1,i=e.nodes();for(let s=0;s<i.length;s++){let a=r(i[s]);for(let d=0;d<a.length;d++){let l=a[d],u=l.v===i[s]?l.v:l.w,c=u===l.v?l.w:l.v;t({v:u,w:c})<0&&(o=!0)}if(o)return we(e,n,t,r)}return F(e,n,t,r)}function w(e,n,t,r){let o=r;for(;e.hasNode(o);)o=j(r);return t.dummy=n,e.setNode(o,t),o}function xe(e){let n=new p().setGraph(e.graph());return e.nodes().forEach(t=>n.setNode(t,e.node(t))),e.edges().forEach(t=>{let r=n.edge(t.v,t.w)||{weight:0,minlen:1},o=e.edge(t);n.setEdge(t.v,t.w,{weight:r.weight+o.weight,minlen:Math.max(r.minlen,o.minlen)})}),n}function A(e){let n=new p({multigraph:e.isMultigraph()}).setGraph(e.graph());return e.nodes().forEach(t=>{e.children(t).length||n.setNode(t,e.node(t))}),e.edges().forEach(t=>{n.setEdge(t,e.edge(t))}),n}function H(e,n){let t=e.x,r=e.y,o=n.x-t,i=n.y-r,s=e.width/2,a=e.height/2;if(!o&&!i)throw new Error(\"Not possible to find intersection inside of the rectangle\");let d,l;return Math.abs(i)*s>Math.abs(o)*a?(i<0&&(a=-a),d=a*o/i,l=a):(o<0&&(s=-s),d=s,l=s*i/o),{x:t+d,y:r+l}}function N(e){let n=k(X(e)+1).map(()=>[]);return e.nodes().forEach(t=>{let r=e.node(t),o=r.rank;o!==void 0&&(n[o]||(n[o]=[]),n[o][r.order]=t)}),n}function Te(e){let n=e.nodes().map(r=>{let o=e.node(r).rank;return o===void 0?Number.MAX_VALUE:o}),t=L(Math.min,n);e.nodes().forEach(r=>{let o=e.node(r);Object.hasOwn(o,\"rank\")&&(o.rank-=t)})}function Oe(e){let n=e.nodes().map(s=>e.node(s).rank).filter(s=>s!==void 0),t=L(Math.min,n),r=[];e.nodes().forEach(s=>{let a=e.node(s).rank-t;r[a]||(r[a]=[]),r[a].push(s)});let o=0,i=e.graph().nodeRankFactor;Array.from(r).forEach((s,a)=>{s===void 0&&a%i!==0?--o:s!==void 0&&o&&s.forEach(d=>e.node(d).rank+=o)})}function q(e,n,t,r){let o={width:0,height:0};return arguments.length>=4&&(o.rank=t,o.order=r),w(e,\"border\",o,n)}function Dn(e,n=Ie){let t=[];for(let r=0;r<e.length;r+=n){let o=e.slice(r,r+n);t.push(o)}return t}var Ie=65535;function L(e,n){if(n.length>Ie){let t=Dn(n);return e(...t.map(r=>e(...r)))}else return e(...n)}function X(e){let t=e.nodes().map(r=>{let o=e.node(r).rank;return o===void 0?Number.MIN_VALUE:o});return L(Math.max,t)}function Ce(e,n){let t={lhs:[],rhs:[]};return e.forEach(r=>{n(r)?t.lhs.push(r):t.rhs.push(r)}),t}function P(e,n){let t=Date.now();try{return n()}finally{console.log(e+\" time: \"+(Date.now()-t)+\"ms\")}}function M(e,n){return n()}var An=0;function j(e){let n=++An;return e+(\"\"+n)}function k(e,n,t=1){n==null&&(n=e,e=0);let r=i=>i<n;t<0&&(r=i=>n<i);let o=[];for(let i=e;r(i);i+=t)o.push(i);return o}function T(e,n){let t={};for(let r of n)e[r]!==void 0&&(t[r]=e[r]);return t}function O(e,n){let t;return typeof n==\"string\"?t=r=>r[n]:t=n,Object.entries(e).reduce((r,[o,i])=>(r[o]=t(i,o),r),{})}function Re(e,n){return e.reduce((t,r,o)=>(t[r]=n[o],t),{})}var _=\"\\0\";var U=\"3.0.0\";var K=class{constructor(){pe(this,\"_sentinel\");let n={};n._next=n._prev=n,this._sentinel=n}dequeue(){let n=this._sentinel,t=n._prev;if(t!==n)return Pe(t),t}enqueue(n){let t=this._sentinel;n._prev&&n._next&&Pe(n),n._next=t._next,t._next._prev=n,t._next=n,n._prev=t}toString(){let n=[],t=this._sentinel,r=t._prev;for(;r!==t;)n.push(JSON.stringify(r,Vn)),r=r._prev;return\"[\"+n.join(\", \")+\"]\"}};function Pe(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function Vn(e,n){if(e!==\"_next\"&&e!==\"_prev\")return n}var Me=K;var Wn=()=>1;function Q(e,n){if(e.nodeCount()<=1)return[];let t=Yn(e,n||Wn);return Bn(t.graph,t.buckets,t.zeroIdx).flatMap(o=>e.outEdges(o.v,o.w)||[])}function Bn(e,n,t){var a;let r=[],o=n[n.length-1],i=n[0],s;for(;e.nodeCount();){for(;s=i.dequeue();)$(e,n,t,s);for(;s=o.dequeue();)$(e,n,t,s);if(e.nodeCount()){for(let d=n.length-2;d>0;--d)if(s=(a=n[d])==null?void 0:a.dequeue(),s){r=r.concat($(e,n,t,s,!0)||[]);break}}}return r}function $(e,n,t,r,o){let i=[],s=o?i:void 0;return(e.inEdges(r.v)||[]).forEach(a=>{let d=e.edge(a),l=e.node(a.v);o&&i.push({v:a.v,w:a.w}),l.out-=d,J(n,t,l)}),(e.outEdges(r.v)||[]).forEach(a=>{let d=e.edge(a),l=a.w,u=e.node(l);u.in-=d,J(n,t,u)}),e.removeNode(r.v),s}function Yn(e,n){let t=new p,r=0,o=0;e.nodes().forEach(a=>{t.setNode(a,{v:a,in:0,out:0})}),e.edges().forEach(a=>{let d=t.edge(a.v,a.w)||0,l=n(a),u=d+l;t.setEdge(a.v,a.w,u);let c=t.node(a.v),h=t.node(a.w);o=Math.max(o,c.out+=l),r=Math.max(r,h.in+=l)});let i=zn(o+r+3).map(()=>new Me),s=r+1;return t.nodes().forEach(a=>{J(i,s,t.node(a))}),{graph:t,buckets:i,zeroIdx:s}}function J(e,n,t){var r,o,i;t.out?t.in?(i=e[t.out-t.in+n])==null||i.enqueue(t):(o=e[e.length-1])==null||o.enqueue(t):(r=e[0])==null||r.enqueue(t)}function zn(e){let n=[];for(let t=0;t<e;t++)n.push(t);return n}function je(e){(e.graph().acyclicer===\"greedy\"?Q(e,t(e)):Hn(e)).forEach(r=>{let o=e.edge(r);e.removeEdge(r),o.forwardName=r.name,o.reversed=!0,e.setEdge(r.w,r.v,o,j(\"rev\"))});function t(r){return o=>r.edge(o).weight}}function Hn(e){let n=[],t={},r={};function o(i){Object.hasOwn(r,i)||(r[i]=!0,t[i]=!0,e.outEdges(i).forEach(s=>{Object.hasOwn(t,s.w)?n.push(s):o(s.w)}),delete t[i])}return e.nodes().forEach(o),n}function Se(e){e.edges().forEach(n=>{let t=e.edge(n);if(t.reversed){e.removeEdge(n);let r=t.forwardName;delete t.reversed,delete t.forwardName,e.setEdge(n.w,n.v,t,r)}})}function Fe(e){e.graph().dummyChains=[],e.edges().forEach(n=>Xn(e,n))}function Xn(e,n){let t=n.v,r=e.node(t).rank,o=n.w,i=e.node(o).rank,s=n.name,a=e.edge(n),d=a.labelRank;if(i===r+1)return;e.removeEdge(n);let l,u,c;for(c=0,++r;r<i;++c,++r)a.points=[],u={width:0,height:0,edgeLabel:a,edgeObj:n,rank:r},l=w(e,\"edge\",u,\"_d\"),r===d&&(u.width=a.width,u.height=a.height,u.dummy=\"edge-label\",u.labelpos=a.labelpos),e.setEdge(t,l,{weight:a.weight},s),c===0&&e.graph().dummyChains.push(l),t=l;e.setEdge(t,o,{weight:a.weight},s)}function De(e){e.graph().dummyChains.forEach(n=>{let t=e.node(n),r=t.edgeLabel,o;for(e.setEdge(t.edgeObj,r);t.dummy;)o=e.successors(n)[0],e.removeNode(n),r.points.push({x:t.x,y:t.y}),t.dummy===\"edge-label\"&&(r.x=t.x,r.y=t.y,r.width=t.width,r.height=t.height),n=o,t=e.node(n)})}function S(e){let n={};function t(r){let o=e.node(r);if(Object.hasOwn(n,r))return o.rank;n[r]=!0;let i=e.outEdges(r),s=i?i.map(d=>d==null?Number.POSITIVE_INFINITY:t(d.w)-e.edge(d).minlen):[],a=L(Math.min,s);return a===Number.POSITIVE_INFINITY&&(a=0),o.rank=a}e.sources().forEach(t)}function v(e,n){return e.node(n.w).rank-e.node(n.v).rank-e.edge(n).minlen}var V=Kn;function Kn(e){let n=new p({directed:!1}),t=e.nodes();if(t.length===0)throw new Error(\"Graph must have at least one node\");let r=t[0],o=e.nodeCount();n.setNode(r,{});let i,s;for(;$n(n,e)<o&&(i=Jn(n,e),!!i);)s=n.hasNode(i.v)?v(e,i):-v(e,i),Qn(n,e,s);return n}function $n(e,n){function t(r){let o=n.nodeEdges(r);o&&o.forEach(i=>{let s=i.v,a=r===s?i.w:s;!e.hasNode(a)&&!v(n,i)&&(e.setNode(a,{}),e.setEdge(r,a,{}),t(a))})}return e.nodes().forEach(t),e.nodeCount()}function Jn(e,n){return n.edges().reduce((r,o)=>{let i=Number.POSITIVE_INFINITY;return e.hasNode(o.v)!==e.hasNode(o.w)&&(i=v(n,o)),i<r[0]?[i,o]:r},[Number.POSITIVE_INFINITY,null])[1]}function Qn(e,n,t){e.nodes().forEach(r=>n.node(r).rank+=t)}var{preorder:Zn,postorder:et}=R,Ve=x;x.initLowLimValues=ee;x.initCutValues=Z;x.calcCutValue=We;x.leaveEdge=Ye;x.enterEdge=ze;x.exchangeEdges=He;function x(e){e=xe(e),S(e);let n=V(e);ee(n),Z(n,e);let t,r;for(;t=Ye(n);)r=ze(n,e,t),He(n,e,t,r)}function Z(e,n){let t=et(e,e.nodes());t=t.slice(0,t.length-1),t.forEach(r=>nt(e,n,r))}function nt(e,n,t){let o=e.node(t).parent,i=e.edge(t,o);i.cutvalue=We(e,n,t)}function We(e,n,t){let o=e.node(t).parent,i=!0,s=n.edge(t,o),a=0;s||(i=!1,s=n.edge(o,t)),a=s.weight;let d=n.nodeEdges(t);return d&&d.forEach(l=>{let u=l.v===t,c=u?l.w:l.v;if(c!==o){let h=u===i,f=n.edge(l).weight;if(a+=h?f:-f,rt(e,t,c)){let b=e.edge(t,c).cutvalue;a+=h?-b:b}}}),a}function ee(e,n){arguments.length<2&&(n=e.nodes()[0]),Be(e,{},1,n)}function Be(e,n,t,r,o){let i=t,s=e.node(r);n[r]=!0;let a=e.neighbors(r);return a&&a.forEach(d=>{Object.hasOwn(n,d)||(t=Be(e,n,t,d,r))}),s.low=i,s.lim=t++,o?s.parent=o:delete s.parent,t}function Ye(e){return e.edges().find(n=>e.edge(n).cutvalue<0)}function ze(e,n,t){let r=t.v,o=t.w;n.hasEdge(r,o)||(r=t.w,o=t.v);let i=e.node(r),s=e.node(o),a=i,d=!1;return i.lim>s.lim&&(a=s,d=!0),n.edges().filter(u=>d===Ae(e,e.node(u.v),a)&&d!==Ae(e,e.node(u.w),a)).reduce((u,c)=>v(n,c)<v(n,u)?c:u)}function He(e,n,t,r){let o=t.v,i=t.w;e.removeEdge(o,i),e.setEdge(r.v,r.w,{}),ee(e),Z(e,n),tt(e,n)}function tt(e,n){let t=e.nodes().find(o=>!e.node(o).parent);if(!t)return;let r=Zn(e,[t]);r=r.slice(1),r.forEach(o=>{let s=e.node(o).parent,a=n.edge(o,s),d=!1;a||(a=n.edge(s,o),d=!0),n.node(o).rank=n.node(s).rank+(d?a.minlen:-a.minlen)})}function rt(e,n,t){return e.hasEdge(n,t)}function Ae(e,n,t){return t.low<=n.lim&&n.lim<=t.lim}var Xe=ot;function ot(e){let n=e.graph().ranker;if(typeof n==\"function\")return n(e);switch(n){case\"network-simplex\":qe(e);break;case\"tight-tree\":st(e);break;case\"longest-path\":it(e);break;case\"none\":break;default:qe(e)}}var it=S;function st(e){S(e),V(e)}function qe(e){Ve(e)}var Ue=at;function at(e){let n=lt(e);e.graph().dummyChains.forEach(t=>{let r=e.node(t),o=r.edgeObj,i=dt(e,n,o.v,o.w),s=i.path,a=i.lca,d=0,l=s[d],u=!0;for(;t!==o.w;){if(r=e.node(t),u){for(;(l=s[d])!==a&&e.node(l).maxRank<r.rank;)d++;l===a&&(u=!1)}if(!u){for(;d<s.length-1&&e.node(s[d+1]).minRank<=r.rank;)d++;l=s[d]}l!==void 0&&e.setParent(t,l),t=e.successors(t)[0]}})}function dt(e,n,t,r){let o=[],i=[],s=Math.min(n[t].low,n[r].low),a=Math.max(n[t].lim,n[r].lim),d;d=t;do d=e.parent(d),o.push(d);while(d&&(n[d].low>s||a>n[d].lim));let l=d,u=r;for(;(u=e.parent(u))!==l;)i.push(u);return{path:o.concat(i.reverse()),lca:l}}function lt(e){let n={},t=0;function r(o){let i=t;e.children(o).forEach(r),n[o]={low:i,lim:t++}}return e.children(_).forEach(r),n}function Ke(e){let n=w(e,\"root\",{},\"_root\"),t=ut(e),r=Object.values(t),o=L(Math.max,r)-1,i=2*o+1;e.graph().nestingRoot=n,e.edges().forEach(a=>e.edge(a).minlen*=i);let s=ct(e)+1;e.children(_).forEach(a=>$e(e,n,i,s,o,t,a)),e.graph().nodeRankFactor=i}function $e(e,n,t,r,o,i,s){var c;let a=e.children(s);if(!a.length){s!==n&&e.setEdge(n,s,{weight:0,minlen:t});return}let d=q(e,\"_bt\"),l=q(e,\"_bb\"),u=e.node(s);e.setParent(d,s),u.borderTop=d,e.setParent(l,s),u.borderBottom=l,a.forEach(h=>{var y;$e(e,n,t,r,o,i,h);let f=e.node(h),g=f.borderTop?f.borderTop:h,b=f.borderBottom?f.borderBottom:h,m=f.borderTop?r:2*r,E=g!==b?1:o-((y=i[s])!=null?y:0)+1;e.setEdge(d,g,{weight:m,minlen:E,nestingEdge:!0}),e.setEdge(b,l,{weight:m,minlen:E,nestingEdge:!0})}),e.parent(s)||e.setEdge(n,d,{weight:0,minlen:o+((c=i[s])!=null?c:0)})}function ut(e){let n={};function t(r,o){let i=e.children(r);i&&i.length&&i.forEach(s=>t(s,o+1)),n[r]=o}return e.children(_).forEach(r=>t(r,1)),n}function ct(e){return e.edges().reduce((n,t)=>n+e.edge(t).weight,0)}function Je(e){let n=e.graph();e.removeNode(n.nestingRoot),delete n.nestingRoot,e.edges().forEach(t=>{e.edge(t).nestingEdge&&e.removeEdge(t)})}var Ze=ft;function ft(e){function n(t){let r=e.children(t),o=e.node(t);if(r.length&&r.forEach(n),Object.hasOwn(o,\"minRank\")){o.borderLeft=[],o.borderRight=[];for(let i=o.minRank,s=o.maxRank+1;i<s;++i)Qe(e,\"borderLeft\",\"_bl\",t,o,i),Qe(e,\"borderRight\",\"_br\",t,o,i)}}e.children(_).forEach(n)}function Qe(e,n,t,r,o,i){let s={width:0,height:0,rank:i,borderType:n},a=o[n][i-1],d=w(e,\"border\",s,t);o[n][i]=d,e.setParent(d,r),a&&e.setEdge(a,d,{weight:1})}function nn(e){var t;let n=(t=e.graph().rankdir)==null?void 0:t.toLowerCase();(n===\"lr\"||n===\"rl\")&&rn(e)}function tn(e){var t;let n=(t=e.graph().rankdir)==null?void 0:t.toLowerCase();(n===\"bt\"||n===\"rl\")&&bt(e),(n===\"lr\"||n===\"rl\")&&(gt(e),rn(e))}function rn(e){e.nodes().forEach(n=>en(e.node(n))),e.edges().forEach(n=>en(e.edge(n)))}function en(e){let n=e.width;e.width=e.height,e.height=n}function bt(e){e.nodes().forEach(n=>ne(e.node(n))),e.edges().forEach(n=>{var r;let t=e.edge(n);(r=t.points)==null||r.forEach(ne),Object.hasOwn(t,\"y\")&&ne(t)})}function ne(e){e.y=-e.y}function gt(e){e.nodes().forEach(n=>te(e.node(n))),e.edges().forEach(n=>{var r;let t=e.edge(n);(r=t.points)==null||r.forEach(te),Object.hasOwn(t,\"x\")&&te(t)})}function te(e){let n=e.x;e.x=e.y,e.y=n}function re(e){let n={},t=e.nodes().filter(d=>!e.children(d).length),r=t.map(d=>e.node(d).rank),o=L(Math.max,r),i=k(o+1).map(()=>[]);function s(d){if(n[d])return;n[d]=!0;let l=e.node(d);i[l.rank].push(d);let u=e.successors(d);u&&u.forEach(s)}return t.sort((d,l)=>e.node(d).rank-e.node(l).rank).forEach(s),i}function oe(e,n){let t=0;for(let r=1;r<n.length;++r)t+=mt(e,n[r-1],n[r]);return t}function mt(e,n,t){let r=Re(t,t.map((l,u)=>u)),o=n.flatMap(l=>{let u=e.outEdges(l);return u?u.map(c=>({pos:r[c.w],weight:e.edge(c).weight})).sort((c,h)=>c.pos-h.pos):[]}),i=1;for(;i<t.length;)i<<=1;let s=2*i-1;i-=1;let a=new Array(s).fill(0),d=0;return o.forEach(l=>{let u=l.pos+i;a[u]+=l.weight;let c=0;for(;u>0;)u%2&&(c+=a[u+1]),u=u-1>>1,a[u]+=l.weight;d+=l.weight*c}),d}function ie(e,n=[]){return n.map(t=>{let r=e.inEdges(t);if(!r||!r.length)return{v:t};{let o=r.reduce((i,s)=>{let a=e.edge(s),d=e.node(s.v);return{sum:i.sum+a.weight*d.order,weight:i.weight+a.weight}},{sum:0,weight:0});return{v:t,barycenter:o.sum/o.weight,weight:o.weight}}})}function se(e,n){let t={};e.forEach((o,i)=>{let s={indegree:0,in:[],out:[],vs:[o.v],i};o.barycenter!==void 0&&(s.barycenter=o.barycenter,s.weight=o.weight),t[o.v]=s}),n.edges().forEach(o=>{let i=t[o.v],s=t[o.w];i!==void 0&&s!==void 0&&(s.indegree++,i.out.push(s))});let r=Object.values(t).filter(o=>!o.indegree);return Et(r)}function Et(e){let n=[];function t(o){return i=>{i.merged||(i.barycenter===void 0||o.barycenter===void 0||i.barycenter>=o.barycenter)&&Lt(o,i)}}function r(o){return i=>{i.in.push(o),--i.indegree===0&&e.push(i)}}for(;e.length;){let o=e.pop();n.push(o),o.in.reverse().forEach(t(o)),o.out.forEach(r(o))}return n.filter(o=>!o.merged).map(o=>T(o,[\"vs\",\"i\",\"barycenter\",\"weight\"]))}function Lt(e,n){let t=0,r=0;e.weight&&(t+=e.barycenter*e.weight,r+=e.weight),n.weight&&(t+=n.barycenter*n.weight,r+=n.weight),e.vs=n.vs.concat(e.vs),e.barycenter=t/r,e.weight=r,e.i=Math.min(n.i,e.i),n.merged=!0}function ae(e,n){let t=Ce(e,u=>Object.hasOwn(u,\"barycenter\")),r=t.lhs,o=t.rhs.sort((u,c)=>c.i-u.i),i=[],s=0,a=0,d=0;r.sort(yt(!!n)),d=on(i,o,d),r.forEach(u=>{d+=u.vs.length,i.push(u.vs),s+=u.barycenter*u.weight,a+=u.weight,d=on(i,o,d)});let l={vs:i.flat(1)};return a&&(l.barycenter=s/a,l.weight=a),l}function on(e,n,t){let r;for(;n.length&&(r=n[n.length-1]).i<=t;)n.pop(),e.push(r.vs),t++;return t}function yt(e){return(n,t)=>n.barycenter<t.barycenter?-1:n.barycenter>t.barycenter?1:e?t.i-n.i:n.i-t.i}function W(e,n,t,r){let o=e.children(n),i=e.node(n),s=i?i.borderLeft:void 0,a=i?i.borderRight:void 0,d={};s&&(o=o.filter(h=>h!==s&&h!==a));let l=ie(e,o);l.forEach(h=>{if(e.children(h.v).length){let f=W(e,h.v,t,r);d[h.v]=f,Object.hasOwn(f,\"barycenter\")&&Nt(h,f)}});let u=se(l,t);wt(u,d);let c=ae(u,r);if(s&&a){c.vs=[s,c.vs,a].flat(1);let h=e.predecessors(s);if(h&&h.length){let f=e.node(h[0]),g=e.predecessors(a),b=e.node(g[0]);Object.hasOwn(c,\"barycenter\")||(c.barycenter=0,c.weight=0),c.barycenter=(c.barycenter*c.weight+f.order+b.order)/(c.weight+2),c.weight+=2}}return c}function wt(e,n){e.forEach(t=>{t.vs=t.vs.flatMap(r=>n[r]?n[r].vs:r)})}function Nt(e,n){e.barycenter!==void 0?(e.barycenter=(e.barycenter*e.weight+n.barycenter*n.weight)/(e.weight+n.weight),e.weight+=n.weight):(e.barycenter=n.barycenter,e.weight=n.weight)}function de(e,n,t,r){r||(r=e.nodes());let o=Gt(e),i=new p({compound:!0}).setGraph({root:o}).setDefaultNodeLabel(s=>e.node(s));return r.forEach(s=>{let a=e.node(s),d=e.parent(s);if(a.rank===n||a.minRank<=n&&n<=a.maxRank){i.setNode(s),i.setParent(s,d||o);let l=e[t](s);l&&l.forEach(u=>{let c=u.v===s?u.w:u.v,h=i.edge(c,s),f=h!==void 0?h.weight:0;i.setEdge(c,s,{weight:e.edge(u).weight+f})}),Object.hasOwn(a,\"minRank\")&&i.setNode(s,{borderLeft:a.borderLeft[n],borderRight:a.borderRight[n]})}}),i}function Gt(e){let n;for(;e.hasNode(n=j(\"_root\")););return n}function le(e,n,t){let r={},o;t.forEach(i=>{let s=e.parent(i),a,d;for(;s;){if(a=e.parent(s),a?(d=r[a],r[a]=s):(d=o,o=s),d&&d!==s){n.setEdge(d,s);return}s=a}})}function B(e,n={}){if(typeof n.customOrder==\"function\"){n.customOrder(e,B);return}let t=X(e),r=sn(e,k(1,t+1),\"inEdges\"),o=sn(e,k(t-1,-1,-1),\"outEdges\"),i=re(e);if(an(e,i),n.disableOptimalOrderHeuristic)return;let s=Number.POSITIVE_INFINITY,a,d=n.constraints||[];for(let l=0,u=0;u<4;++l,++u){kt(l%2?r:o,l%4>=2,d),i=N(e);let c=oe(e,i);c<s?(u=0,a=Object.assign({},i),s=c):c===s&&(a=structuredClone(i))}an(e,a)}function sn(e,n,t){let r=new Map,o=(i,s)=>{r.has(i)||r.set(i,[]),r.get(i).push(s)};for(let i of e.nodes()){let s=e.node(i);if(typeof s.rank==\"number\"&&o(s.rank,i),typeof s.minRank==\"number\"&&typeof s.maxRank==\"number\")for(let a=s.minRank;a<=s.maxRank;a++)a!==s.rank&&o(a,i)}return n.map(function(i){return de(e,i,t,r.get(i)||[])})}function kt(e,n,t){let r=new p;e.forEach(function(o){t.forEach(a=>r.setEdge(a.left,a.right));let i=o.graph().root,s=W(o,i,r,n);s.vs.forEach((a,d)=>o.node(a).order=d),le(o,r,s.vs)})}function an(e,n){Object.values(n).forEach(t=>t.forEach((r,o)=>e.node(r).order=o))}function vt(e,n){let t={};function r(o,i){let s=0,a=0,d=o.length,l=i[i.length-1];return i.forEach((u,c)=>{let h=xt(e,u),f=h?e.node(h).order:d;(h||u===l)&&(i.slice(a,c+1).forEach(g=>{let b=e.predecessors(g);b&&b.forEach(m=>{let E=e.node(m),y=E.order;(y<s||f<y)&&!(E.dummy&&e.node(g).dummy)&&dn(t,m,g)})}),a=c+1,s=f)}),i}return n.length&&n.reduce(r),t}function _t(e,n){let t={};function r(i,s,a,d,l){k(s,a).forEach(u=>{let c=i[u];if(c!==void 0&&e.node(c).dummy){let h=e.predecessors(c);h&&h.forEach(f=>{if(f===void 0)return;let g=e.node(f);g.dummy&&(g.order<d||g.order>l)&&dn(t,f,c)})}})}function o(i,s){let a=-1,d=-1,l=0;return s.forEach((u,c)=>{if(e.node(u).dummy===\"border\"){let h=e.predecessors(u);if(h&&h.length){let f=h[0];if(f===void 0)return;d=e.node(f).order,r(s,l,c,a,d),l=c,a=d}}r(s,l,s.length,d,i.length)}),s}return n.length&&n.reduce(o),t}function xt(e,n){if(e.node(n).dummy){let t=e.predecessors(n);if(t)return t.find(r=>e.node(r).dummy)}}function dn(e,n,t){if(n>t){let o=n;n=t,t=o}let r=e[n];r||(e[n]=r={}),r[t]=!0}function Tt(e,n,t){if(n>t){let o=n;n=t,t=o}let r=e[n];return r!==void 0&&Object.hasOwn(r,t)}function Ot(e,n,t,r){let o={},i={},s={};return n.forEach(a=>{a.forEach((d,l)=>{o[d]=d,i[d]=d,s[d]=l})}),n.forEach(a=>{let d=-1;a.forEach(l=>{let u=r(l);if(u&&u.length){let c=u.sort((f,g)=>{let b=s[f],m=s[g];return(b!==void 0?b:0)-(m!==void 0?m:0)}),h=(c.length-1)/2;for(let f=Math.floor(h),g=Math.ceil(h);f<=g;++f){let b=c[f];if(b===void 0)continue;let m=s[b];if(m!==void 0&&i[l]===l&&d<m&&!Tt(t,l,b)){let E=o[b];E!==void 0&&(i[b]=l,i[l]=o[l]=E,d=m)}}}})}),{root:o,align:i}}function It(e,n,t,r,o=!1){let i={},s=Ct(e,n,t,o),a=o?\"borderLeft\":\"borderRight\";function d(f,g){let b=s.nodes().slice(),m={},E=b.pop();for(;E;){if(m[E])f(E);else{m[E]=!0,b.push(E);for(let y of g(E))b.push(y)}E=b.pop()}}function l(f){let g=s.inEdges(f);g?i[f]=g.reduce((b,m)=>{var I;let E=(I=i[m.v])!=null?I:0,y=s.edge(m);return Math.max(b,E+(y!==void 0?y:0))},0):i[f]=0}function u(f){let g=s.outEdges(f),b=Number.POSITIVE_INFINITY;g&&(b=g.reduce((E,y)=>{let I=i[y.w],be=s.edge(y);return Math.min(E,(I!==void 0?I:0)-(be!==void 0?be:0))},Number.POSITIVE_INFINITY));let m=e.node(f);b!==Number.POSITIVE_INFINITY&&m.borderType!==a&&(i[f]=Math.max(i[f]!==void 0?i[f]:0,b))}function c(f){return s.predecessors(f)||[]}function h(f){return s.successors(f)||[]}return d(l,c),d(u,h),Object.keys(r).forEach(f=>{var b;let g=t[f];g!==void 0&&(i[f]=(b=i[g])!=null?b:0)}),i}function Ct(e,n,t,r){let o=new p,i=e.graph(),s=jt(i.nodesep,i.edgesep,r);return n.forEach(a=>{let d;a.forEach(l=>{let u=t[l];if(u!==void 0){if(o.setNode(u),d!==void 0){let c=t[d];if(c!==void 0){let h=o.edge(c,u);o.setEdge(c,u,Math.max(s(e,l,d),h||0))}}d=l}})}),o}function Rt(e,n){return Object.values(n).reduce((t,r)=>{let o=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;Object.entries(r).forEach(([a,d])=>{let l=St(e,a)/2;o=Math.max(d+l,o),i=Math.min(d-l,i)});let s=o-i;return s<t[0]&&(t=[s,r]),t},[Number.POSITIVE_INFINITY,null])[1]}function Pt(e,n){let t=Object.values(n),r=L(Math.min,t),o=L(Math.max,t);[\"u\",\"d\"].forEach(i=>{[\"l\",\"r\"].forEach(s=>{let a=i+s,d=e[a];if(!d||d===n)return;let l=Object.values(d),u=r-L(Math.min,l);s!==\"l\"&&(u=o-L(Math.max,l)),u&&(e[a]=O(d,c=>c+u))})})}function Mt(e,n=void 0){let t=e.ul;return t?O(t,(r,o)=>{var s,a;if(n){let d=n.toLowerCase(),l=e[d];if(l&&l[o]!==void 0)return l[o]}let i=Object.values(e).map(d=>{let l=d[o];return l!==void 0?l:0}).sort((d,l)=>d-l);return(((s=i[1])!=null?s:0)+((a=i[2])!=null?a:0))/2}):{}}function ln(e){let n=N(e),t=Object.assign(vt(e,n),_t(e,n)),r={},o;[\"u\",\"d\"].forEach(s=>{o=s===\"u\"?n:Object.values(n).reverse(),[\"l\",\"r\"].forEach(a=>{a===\"r\"&&(o=o.map(c=>Object.values(c).reverse()));let l=Ot(e,o,t,c=>(s===\"u\"?e.predecessors(c):e.successors(c))||[]),u=It(e,o,l.root,l.align,a===\"r\");a===\"r\"&&(u=O(u,c=>-c)),r[s+a]=u})});let i=Rt(e,r);return Pt(r,i),Mt(r,e.graph().align)}function jt(e,n,t){return(r,o,i)=>{let s=r.node(o),a=r.node(i),d=0,l;if(d+=s.width/2,Object.hasOwn(s,\"labelpos\"))switch(s.labelpos.toLowerCase()){case\"l\":l=-s.width/2;break;case\"r\":l=s.width/2;break}if(l&&(d+=t?l:-l),l=void 0,d+=(s.dummy?n:e)/2,d+=(a.dummy?n:e)/2,d+=a.width/2,Object.hasOwn(a,\"labelpos\"))switch(a.labelpos.toLowerCase()){case\"l\":l=a.width/2;break;case\"r\":l=-a.width/2;break}return l&&(d+=t?l:-l),d}}function St(e,n){return e.node(n).width}function un(e){e=A(e),Ft(e),Object.entries(ln(e)).forEach(([n,t])=>e.node(n).x=t)}function Ft(e){let n=N(e),t=e.graph(),r=t.ranksep,o=t.rankalign,i=0;n.forEach(s=>{let a=s.reduce((d,l)=>{var c;let u=(c=e.node(l).height)!=null?c:0;return d>u?d:u},0);s.forEach(d=>{let l=e.node(d);o===\"top\"?l.y=i+l.height/2:o===\"bottom\"?l.y=i+a-l.height/2:l.y=i+a/2}),i+=a+r})}function he(e,n={}){let t=n.debugTiming?P:M;return t(\"layout\",()=>{let r=t(\" buildLayoutGraph\",()=>Xt(e));return t(\" runLayout\",()=>Dt(r,t,n)),t(\" updateInputGraph\",()=>At(e,r)),r})}function Dt(e,n,t){n(\" makeSpaceForEdgeLabels\",()=>Ut(e)),n(\" removeSelfEdges\",()=>rr(e)),n(\" acyclic\",()=>je(e)),n(\" nestingGraph.run\",()=>Ke(e)),n(\" rank\",()=>Xe(A(e))),n(\" injectEdgeLabelProxies\",()=>Kt(e)),n(\" removeEmptyRanks\",()=>Oe(e)),n(\" nestingGraph.cleanup\",()=>Je(e)),n(\" normalizeRanks\",()=>Te(e)),n(\" assignRankMinMax\",()=>$t(e)),n(\" removeEdgeLabelProxies\",()=>Jt(e)),n(\" normalize.run\",()=>Fe(e)),n(\" parentDummyChains\",()=>Ue(e)),n(\" addBorderSegments\",()=>Ze(e)),n(\" order\",()=>B(e,t)),n(\" insertSelfEdges\",()=>or(e)),n(\" adjustCoordinateSystem\",()=>nn(e)),n(\" position\",()=>un(e)),n(\" positionSelfEdges\",()=>ir(e)),n(\" removeBorderNodes\",()=>tr(e)),n(\" normalize.undo\",()=>De(e)),n(\" fixupEdgeLabelCoords\",()=>er(e)),n(\" undoCoordinateSystem\",()=>tn(e)),n(\" translateGraph\",()=>Qt(e)),n(\" assignNodeIntersects\",()=>Zt(e)),n(\" reversePoints\",()=>nr(e)),n(\" acyclic.undo\",()=>Se(e))}function At(e,n){e.nodes().forEach(t=>{let r=e.node(t),o=n.node(t);r&&(r.x=o.x,r.y=o.y,r.order=o.order,r.rank=o.rank,n.children(t).length&&(r.width=o.width,r.height=o.height))}),e.edges().forEach(t=>{let r=e.edge(t),o=n.edge(t);r.points=o.points,Object.hasOwn(o,\"x\")&&(r.x=o.x,r.y=o.y)}),e.graph().width=n.graph().width,e.graph().height=n.graph().height}var Vt=[\"nodesep\",\"edgesep\",\"ranksep\",\"marginx\",\"marginy\"],Wt={ranksep:50,edgesep:20,nodesep:50,rankdir:\"TB\",rankalign:\"center\"},Bt=[\"acyclicer\",\"ranker\",\"rankdir\",\"align\",\"rankalign\"],Yt=[\"width\",\"height\",\"rank\"],cn={width:0,height:0},zt=[\"minlen\",\"weight\",\"width\",\"height\",\"labeloffset\"],Ht={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:\"r\"},qt=[\"labelpos\"];function Xt(e){let n=new p({multigraph:!0,compound:!0}),t=ce(e.graph());return n.setGraph(Object.assign({},Wt,ue(t,Vt),T(t,Bt))),e.nodes().forEach(r=>{let o=ce(e.node(r)),i=ue(o,Yt);Object.keys(cn).forEach(a=>{i[a]===void 0&&(i[a]=cn[a])}),n.setNode(r,i);let s=e.parent(r);s!==void 0&&n.setParent(r,s)}),e.edges().forEach(r=>{let o=ce(e.edge(r));n.setEdge(r,Object.assign({},Ht,ue(o,zt),T(o,qt)))}),n}function Ut(e){let n=e.graph();n.ranksep/=2,e.edges().forEach(t=>{let r=e.edge(t);r.minlen*=2,r.labelpos.toLowerCase()!==\"c\"&&(n.rankdir===\"TB\"||n.rankdir===\"BT\"?r.width+=r.labeloffset:r.height+=r.labeloffset)})}function Kt(e){e.edges().forEach(n=>{let t=e.edge(n);if(t.width&&t.height){let r=e.node(n.v),i={rank:(e.node(n.w).rank-r.rank)/2+r.rank,e:n};w(e,\"edge-proxy\",i,\"_ep\")}})}function $t(e){let n=0;e.nodes().forEach(t=>{let r=e.node(t);r.borderTop&&(r.minRank=e.node(r.borderTop).rank,r.maxRank=e.node(r.borderBottom).rank,n=Math.max(n,r.maxRank))}),e.graph().maxRank=n}function Jt(e){e.nodes().forEach(n=>{let t=e.node(n);if(t.dummy===\"edge-proxy\"){let r=t;e.edge(r.e).labelRank=t.rank,e.removeNode(n)}})}function Qt(e){let n=Number.POSITIVE_INFINITY,t=0,r=Number.POSITIVE_INFINITY,o=0,i=e.graph(),s=i.marginx||0,a=i.marginy||0;function d(l){let u=l.x,c=l.y,h=l.width,f=l.height;n=Math.min(n,u-h/2),t=Math.max(t,u+h/2),r=Math.min(r,c-f/2),o=Math.max(o,c+f/2)}e.nodes().forEach(l=>d(e.node(l))),e.edges().forEach(l=>{let u=e.edge(l);Object.hasOwn(u,\"x\")&&d(u)}),n-=s,r-=a,e.nodes().forEach(l=>{let u=e.node(l);u.x-=n,u.y-=r}),e.edges().forEach(l=>{let u=e.edge(l);u.points.forEach(c=>{c.x-=n,c.y-=r}),Object.hasOwn(u,\"x\")&&(u.x-=n),Object.hasOwn(u,\"y\")&&(u.y-=r)}),i.width=t-n+s,i.height=o-r+a}function Zt(e){e.edges().forEach(n=>{let t=e.edge(n),r=e.node(n.v),o=e.node(n.w),i,s;t.points?(i=t.points[0],s=t.points[t.points.length-1]):(t.points=[],i=o,s=r),t.points.unshift(H(r,i)),t.points.push(H(o,s))})}function er(e){e.edges().forEach(n=>{let t=e.edge(n);if(Object.hasOwn(t,\"x\"))switch((t.labelpos===\"l\"||t.labelpos===\"r\")&&(t.width-=t.labeloffset),t.labelpos){case\"l\":t.x-=t.width/2+t.labeloffset;break;case\"r\":t.x+=t.width/2+t.labeloffset;break}})}function nr(e){e.edges().forEach(n=>{let t=e.edge(n);t.reversed&&t.points.reverse()})}function tr(e){e.nodes().forEach(n=>{if(e.children(n).length){let t=e.node(n),r=e.node(t.borderTop),o=e.node(t.borderBottom),i=e.node(t.borderLeft[t.borderLeft.length-1]),s=e.node(t.borderRight[t.borderRight.length-1]);t.width=Math.abs(s.x-i.x),t.height=Math.abs(o.y-r.y),t.x=i.x+t.width/2,t.y=r.y+t.height/2}}),e.nodes().forEach(n=>{e.node(n).dummy===\"border\"&&e.removeNode(n)})}function rr(e){e.edges().forEach(n=>{if(n.v===n.w){let t=e.node(n.v);t.selfEdges||(t.selfEdges=[]),t.selfEdges.push({e:n,label:e.edge(n)}),e.removeEdge(n)}})}function or(e){N(e).forEach(t=>{let r=0;t.forEach((o,i)=>{let s=e.node(o);s.order=i+r,(s.selfEdges||[]).forEach(a=>{w(e,\"selfedge\",{width:a.label.width,height:a.label.height,rank:s.rank,order:i+ ++r,e:a.e,label:a.label},\"_se\")}),delete s.selfEdges})})}function ir(e){e.nodes().forEach(n=>{let t=e.node(n);if(t.dummy===\"selfedge\"){let r=t,o=e.node(r.e.v),i=o.x+o.width/2,s=o.y,a=t.x-i,d=o.height/2;e.setEdge(r.e,r.label),e.removeNode(n),r.label.points=[{x:i+2*a/3,y:s-d},{x:i+5*a/6,y:s-d},{x:i+a,y:s},{x:i+5*a/6,y:s+d},{x:i+2*a/3,y:s+d}],r.label.x=t.x,r.label.y=t.y}})}function ue(e,n){return O(T(e,n),Number)}function ce(e){let n={};return e&&Object.entries(e).forEach(([t,r])=>{typeof t==\"string\"&&(t=t.toLowerCase()),n[t]=r}),n}function fe(e){let n=N(e),t=new p({compound:!0,multigraph:!0}).setGraph({});return e.nodes().forEach(r=>{t.setNode(r,{label:r}),t.setParent(r,\"layer\"+e.node(r).rank)}),e.edges().forEach(r=>t.setEdge(r.v,r.w,{},r.name)),n.forEach((r,o)=>{let i=\"layer\"+o;t.setNode(i,{rank:\"same\"}),r.reduce((s,a)=>(t.setEdge(s,a,{style:\"invis\"}),a))}),t}var xo={time:P,notime:M},sr={graphlib:z,version:U,layout:he,debug:fe,util:{time:P,notime:M}},To=sr;export{p as Graph,fe as debug,To as default,z as graphlib,he as layout,xo as util,U as version};\n/*! For license information please see dagre.esm.js.LEGAL.txt */\n//# sourceMappingURL=dagre.esm.js.map\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { toast } from 'sonner';\nimport type { Connection, Edge, NodeChange } from '@xyflow/react';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport { type LayoutDirection } from '@/lib/layout-with-dagre';\nimport { createLogger } from '@/lib/logger';\n\nimport { mapEventTypeToState } from '@/components/common/feature-node/derive-feature-state';\nimport { useGraphState, type GraphCallbacks } from '@/hooks/use-graph-state';\nimport { useSSEEventHandler } from '@/hooks/use-sse-event-handler';\nimport { useServerActions } from '@/hooks/use-server-actions';\nimport { useAgentEventsContext } from '@/hooks/agent-events-provider';\n\nconst log = createLogger('[Polling]');\nconst POLL_INTERVAL_MS = 15_000;\n\nexport interface ControlCenterState {\n nodes: CanvasNodeType[];\n edges: Edge[];\n onNodesChange: (changes: NodeChange<CanvasNodeType>[]) => void;\n handleConnect: (connection: Connection) => void;\n handleAddRepository: (path: string) => { wasEmpty: boolean; repoPath: string };\n handleLayout: (direction: LayoutDirection) => void;\n handleArchiveFeature: (featureId: string) => void;\n handleDeleteFeature: (\n featureId: string,\n cleanup?: boolean,\n cascadeDelete?: boolean,\n closePr?: boolean\n ) => void;\n handleRetryFeature: (featureId: string) => void;\n handleStartFeature: (featureId: string) => void;\n handleStopFeature: (featureId: string) => void;\n handleUnarchiveFeature: (featureId: string) => void;\n handleDeleteRepository: (repositoryId: string) => Promise<void>;\n createFeatureNode: (\n sourceNodeId: string | null,\n dataOverride?: Partial<FeatureNodeData>,\n edgeType?: string\n ) => string;\n /** Whether archived features are shown on the canvas. */\n showArchived: boolean;\n /** Toggle archived feature visibility. */\n setShowArchived: (show: boolean) => void;\n /** Stable lookup: repositoryPath for a feature node. */\n getFeatureRepositoryPath: (featureNodeId: string) => string | undefined;\n /** Stable lookup: repository data by nodeId. */\n getRepositoryData: (nodeId: string) => RepositoryNodeData | undefined;\n /** Sync callbacks into derived node data (does not trigger re-render). */\n setCallbacks: (callbacks: GraphCallbacks) => void;\n}\n\nlet nextFeatureId = 0;\n\nexport function useControlCenterState(\n initialNodes: CanvasNodeType[],\n initialEdges: Edge[]\n): ControlCenterState {\n const router = useRouter();\n\n // Archive toggle: persists during session, resets on page reload (FR-10)\n const [showArchived, setShowArchived] = useState(false);\n\n const {\n nodes,\n edges,\n reconcile,\n updateFeature,\n addPendingFeature,\n removeFeature,\n restoreFeature,\n addRepository: addRepositoryToMap,\n removeRepository,\n replaceRepository,\n getFeatureRepositoryPath,\n getRepositoryData,\n getRepoMapSize,\n setCallbacks,\n beginMutation,\n endMutation,\n isMutating,\n } = useGraphState(initialNodes, initialEdges, showArchived);\n\n // Refs for stable access to latest nodes/edges without callback recreation\n const nodesRef = useRef(nodes);\n const edgesRef = useRef(edges);\n useEffect(() => {\n nodesRef.current = nodes;\n edgesRef.current = edges;\n }, [nodes, edges]);\n\n // Sync server props into domain Maps when initialNodes/initialEdges change.\n // Keyed by a stable string so we don't re-reconcile on every render.\n const initialNodeKey = useMemo(\n () =>\n initialNodes\n .map((n) => n.id)\n .sort()\n .join(','),\n [initialNodes]\n );\n const initialDataKey = useMemo(\n () =>\n initialNodes\n .filter((n) => n.type === 'featureNode')\n .map((n) => {\n const d = n.data as FeatureNodeData;\n return `${n.id}:${d.state}:${d.lifecycle}`;\n })\n .sort()\n .join(','),\n [initialNodes]\n );\n\n const prevReconcileKey = useRef('');\n\n useEffect(() => {\n const key = `${initialNodeKey}|${initialDataKey}`;\n if (key !== prevReconcileKey.current) {\n prevReconcileKey.current = key;\n reconcile(initialNodes, initialEdges);\n }\n }, [initialNodeKey, initialDataKey, initialNodes, initialEdges, reconcile]);\n\n // Track previous feature states for fallback notifications\n const prevFeatureStatesRef = useRef<Map<string, FeatureNodeData['state']>>(new Map());\n\n const { events } = useAgentEventsContext();\n\n useEffect(() => {\n const prevStates = prevFeatureStatesRef.current;\n for (const node of initialNodes) {\n if (node.type !== 'featureNode') continue;\n const data = node.data as FeatureNodeData;\n const prev = prevStates.get(node.id);\n if (prev !== undefined && prev !== data.state) {\n const sseAlreadyCovered = events.some(\n (e) => e.featureId === data.featureId && mapEventTypeToState(e.eventType) === data.state\n );\n if (!sseAlreadyCovered) {\n if (data.state === 'done') {\n toast.success(data.name, { description: 'Feature completed!' });\n } else if (data.state === 'action-required') {\n toast.warning(data.name, {\n description: 'Waiting for your approval',\n action: {\n label: 'Review',\n onClick: () => router.push(`/feature/${data.featureId}`),\n },\n });\n } else if (data.state === 'error') {\n toast.error(data.name, { description: data.errorMessage ?? 'Agent failed' });\n }\n }\n }\n prevStates.set(node.id, data.state);\n }\n }, [initialDataKey, initialNodes, events, router]);\n\n // SSE event processing: state/lifecycle updates, metadata fetches, approval events.\n // Extracted into useSSEEventHandler for focus.\n useSSEEventHandler({\n nodesRef,\n updateFeature,\n isMutating,\n beginMutation,\n endMutation,\n });\n\n // --- Polling fallback: catch any SSE events that were missed ---\n useEffect(() => {\n log.debug(`polling enabled (${POLL_INTERVAL_MS}ms interval)`);\n\n const timer = setInterval(async () => {\n // Skip when tab is hidden — no point polling for a user who isn't looking.\n if (document.hidden) return;\n // Skip fetch entirely while a mutation is in-flight — the response\n // would contain pre-mutation data that reconcile would discard anyway.\n if (isMutating()) return;\n\n try {\n // Use a plain fetch instead of a server action so the poll\n // doesn't trigger the Next.js \"Rendering…\" indicator.\n const res = await fetch('/api/graph-data');\n if (!res.ok) throw new Error(`status ${res.status}`);\n const { nodes: freshNodes, edges: freshEdges } = await res.json();\n reconcile(freshNodes, freshEdges);\n } catch {\n log.warn('poll fetch failed — will retry next interval');\n }\n }, POLL_INTERVAL_MS);\n\n return () => {\n log.debug('polling disabled');\n clearInterval(timer);\n };\n }, [reconcile, isMutating]);\n\n // Server action handlers: retry, start, stop, archive, unarchive, delete, deleteRepo, addRepo.\n // Extracted into useServerActions for focus.\n const {\n handleRetryFeature,\n handleStartFeature,\n handleStopFeature,\n handleArchiveFeature,\n handleUnarchiveFeature,\n handleDeleteFeature,\n handleDeleteRepository,\n handleLayout,\n handleAddRepository,\n } = useServerActions({\n nodesRef,\n edgesRef,\n updateFeature,\n removeFeature,\n restoreFeature,\n addRepositoryToMap,\n removeRepository,\n replaceRepository,\n getRepositoryData,\n getRepoMapSize,\n reconcile,\n beginMutation,\n endMutation,\n });\n\n // onNodesChange is a no-op: nodes are derived from domain Maps.\n // Since nodesDraggable=false and elementsSelectable=false, only React Flow's\n // internal replace/dimensions changes come through — we ignore them all.\n const onNodesChange = useCallback((_changes: NodeChange<CanvasNodeType>[]) => {\n // Intentional no-op: domain Maps are the source of truth.\n }, []);\n\n const handleConnect = useCallback((_connection: Connection) => {\n // Connections are managed via domain operations, not direct edge manipulation.\n }, []);\n\n const createFeatureNode = useCallback(\n (\n sourceNodeId: string | null,\n dataOverride?: Partial<FeatureNodeData>,\n edgeType?: string\n ): string => {\n // Use real feature ID when available (from server), otherwise temp ID\n const id = dataOverride?.featureId\n ? `feat-${dataOverride.featureId}`\n : `feature-${Date.now()}-${nextFeatureId++}`;\n const newFeatureData: FeatureNodeData = {\n name: dataOverride?.name ?? 'New Feature',\n description: dataOverride?.description ?? 'Describe what this feature does',\n featureId: dataOverride?.featureId ?? `#${id.slice(-4)}`,\n lifecycle: 'requirements',\n state: dataOverride?.state ?? 'running',\n progress: 0,\n repositoryPath: dataOverride?.repositoryPath ?? '',\n branch: dataOverride?.branch ?? '',\n };\n\n const parentNodeId = edgeType === 'dependencyEdge' && sourceNodeId ? sourceNodeId : undefined;\n\n addPendingFeature(id, newFeatureData, parentNodeId);\n\n return id;\n },\n [addPendingFeature]\n );\n\n return {\n nodes,\n edges,\n onNodesChange,\n handleConnect,\n handleAddRepository,\n handleArchiveFeature,\n handleLayout,\n handleDeleteFeature,\n handleRetryFeature,\n handleStartFeature,\n handleStopFeature,\n handleUnarchiveFeature,\n handleDeleteRepository,\n createFeatureNode,\n showArchived,\n setShowArchived,\n getFeatureRepositoryPath,\n getRepositoryData,\n setCallbacks,\n };\n}\n","'use client';\n\n/**\n * useGraphDerivation\n *\n * Focused hook: takes pre-derived graph nodes/edges from deriveGraph() and\n * applies dagre layout with position caching. Topology-only re-runs dagre;\n * data-only changes reuse cached positions.\n *\n * Extracted from use-graph-state.ts — see Graph State Architecture in\n * src/presentation/web/CLAUDE.md for design rationale.\n */\n\nimport { useMemo, useRef } from 'react';\nimport type { Edge, Position } from '@xyflow/react';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport { layoutWithDagre, type LayoutOptions } from '@/lib/layout-with-dagre';\n\ninterface DerivedGraph {\n nodes: CanvasNodeType[];\n edges: Edge[];\n}\n\nexport interface UseGraphDerivationReturn {\n nodes: CanvasNodeType[];\n edges: Edge[];\n}\n\n/**\n * Apply dagre layout to a pre-derived graph, caching positions so dagre only\n * re-runs when topology (node IDs or edge connections) actually changes.\n *\n * On topology change the new layout is anchored to the first surviving node's\n * previous position so the graph doesn't drift when nodes are added/removed.\n */\nexport function useGraphDerivation(\n derived: DerivedGraph,\n layoutDefaults: LayoutOptions\n): UseGraphDerivationReturn {\n const layoutCacheRef = useRef<{\n key: string;\n positions: Map<\n string,\n { position: { x: number; y: number }; targetPosition: Position; sourcePosition: Position }\n >;\n }>({ key: '', positions: new Map() });\n\n return useMemo(() => {\n const nodeIds = derived.nodes\n .map((n) => n.id)\n .sort()\n .join(',');\n const edgeKeys = derived.edges\n .map((e) => `${e.source}-${e.target}`)\n .sort()\n .join(',');\n const topologyKey = `${nodeIds}|${edgeKeys}|${layoutDefaults.direction}`;\n\n if (topologyKey !== layoutCacheRef.current.key) {\n // Topology changed — re-run dagre\n const result = layoutWithDagre(derived.nodes, derived.edges, layoutDefaults);\n const positions = new Map<\n string,\n { position: { x: number; y: number }; targetPosition: Position; sourcePosition: Position }\n >();\n for (const node of result.nodes) {\n positions.set(node.id, {\n position: node.position,\n targetPosition: (node as Record<string, unknown>).targetPosition as Position,\n sourcePosition: (node as Record<string, unknown>).sourcePosition as Position,\n });\n }\n\n // Anchor new layout to previous positions so the graph doesn't drift.\n // Find the first surviving node (exists in both old and new layouts) and\n // shift the entire new layout by the delta between its old and new position.\n const prevPositions = layoutCacheRef.current.positions;\n if (prevPositions.size > 0) {\n let dx = 0;\n let dy = 0;\n for (const [id, newPos] of positions) {\n const oldPos = prevPositions.get(id);\n if (oldPos) {\n dx = oldPos.position.x - newPos.position.x;\n dy = oldPos.position.y - newPos.position.y;\n break;\n }\n }\n if (dx !== 0 || dy !== 0) {\n for (const pos of positions.values()) {\n pos.position = { x: pos.position.x + dx, y: pos.position.y + dy };\n }\n for (const node of result.nodes) {\n node.position = { x: node.position.x + dx, y: node.position.y + dy };\n }\n }\n }\n\n layoutCacheRef.current = { key: topologyKey, positions };\n return result;\n }\n\n // Data-only change — apply cached positions without re-running dagre\n const { positions } = layoutCacheRef.current;\n const nodes = derived.nodes.map((node) => {\n const cached = positions.get(node.id);\n return cached ? { ...node, ...cached } : node;\n });\n return { nodes, edges: derived.edges };\n }, [derived, layoutDefaults]);\n}\n","'use client';\n\nimport { useState, useMemo, useCallback, useRef, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { Edge } from '@xyflow/react';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport {\n deriveGraph,\n type FeatureEntry,\n type RepoEntry,\n type GraphCallbacks,\n} from '@/lib/derive-graph';\nimport { getCanvasLayoutDefaults } from '@/lib/layout-with-dagre';\nimport { useGraphDerivation } from './use-graph-derivation';\n\nexport type { GraphCallbacks } from '@/lib/derive-graph';\n\nexport interface UseGraphStateReturn {\n /** Derived React Flow nodes (from domain Maps). */\n nodes: CanvasNodeType[];\n /** Derived React Flow edges (from domain Maps). */\n edges: Edge[];\n /**\n * Reconcile domain Maps with fresh server data (new initialNodes/initialEdges).\n * Preserves pending (creating) nodes unless a matching real feature appears.\n * No-ops when a mutation is in-flight (see beginMutation/endMutation).\n */\n reconcile: (newNodes: CanvasNodeType[], newEdges: Edge[]) => void;\n /** Update a feature's state/lifecycle/name (e.g., from SSE events). */\n updateFeature: (featureNodeId: string, updates: FeatureDataUpdates) => void;\n /** Add a pending (optimistic) feature node (state='creating'). */\n addPendingFeature: (nodeId: string, data: FeatureNodeData, parentNodeId?: string) => void;\n /** Remove a pending feature node (e.g., on rollback). */\n removePendingFeature: (nodeId: string) => void;\n /** Remove a real feature node from the domain Map. */\n removeFeature: (nodeId: string) => void;\n /** Restore a previously removed feature (rollback). */\n restoreFeature: (nodeId: string, entry: FeatureEntry) => void;\n /** Add a repository node (may use a temp ID initially). */\n addRepository: (nodeId: string, data: RepositoryNodeData) => void;\n /** Remove a repository node. */\n removeRepository: (nodeId: string) => void;\n /** Replace a temp repo ID with the real one (atomic). */\n replaceRepository: (tempId: string, realId: string, data: RepositoryNodeData) => void;\n /** Stable lookup: get the repositoryPath for a feature node. */\n getFeatureRepositoryPath: (featureNodeId: string) => string | undefined;\n /** Stable lookup: get repository node data by nodeId. */\n getRepositoryData: (nodeId: string) => RepositoryNodeData | undefined;\n /** Stable lookup: get the current number of repositories in the domain Map. */\n getRepoMapSize: () => number;\n /** Update callbacks injected into node data (does NOT trigger re-render). */\n setCallbacks: (callbacks: GraphCallbacks) => void;\n /**\n * Signal that an optimistic mutation has started. While any mutation is\n * in-flight, `reconcile` becomes a no-op so stale poll data cannot\n * overwrite optimistic state. Calls are ref-counted — nest freely.\n */\n beginMutation: () => void;\n /**\n * Signal that an optimistic mutation has resolved. Adds a one-poll-interval\n * cooldown (default 3 s) so the next poll fetches post-mutation data.\n */\n endMutation: (cooldownMs?: number) => void;\n /** Whether a mutation is currently in-flight (for polling skip logic). */\n isMutating: () => boolean;\n}\n\n/** Parse initialNodes + initialEdges into domain Maps. */\nfunction parseMaps(\n initialNodes: CanvasNodeType[],\n initialEdges: Edge[]\n): {\n featureMap: Map<string, FeatureEntry>;\n repoMap: Map<string, RepoEntry>;\n} {\n // Build parentNodeId map from dependency edges\n const parentByChild = new Map<string, string>();\n for (const edge of initialEdges) {\n if (edge.type === 'dependencyEdge') {\n parentByChild.set(edge.target, edge.source);\n }\n }\n\n const featureMap = new Map<string, FeatureEntry>();\n const repoMap = new Map<string, RepoEntry>();\n\n for (const node of initialNodes) {\n if (node.type === 'featureNode') {\n featureMap.set(node.id, {\n nodeId: node.id,\n data: node.data as FeatureNodeData,\n parentNodeId: parentByChild.get(node.id),\n });\n } else if (node.type === 'repositoryNode') {\n repoMap.set(node.id, {\n nodeId: node.id,\n data: node.data as RepositoryNodeData,\n });\n }\n }\n\n return { featureMap, repoMap };\n}\n\ntype FeatureDataUpdates = Partial<\n Pick<FeatureNodeData, 'state' | 'lifecycle' | 'name' | 'description'>\n>;\n\nfunction isFeatureDataUnchanged(data: FeatureNodeData, updates: FeatureDataUpdates): boolean {\n return (\n (updates.state === undefined || updates.state === data.state) &&\n (updates.lifecycle === undefined || updates.lifecycle === data.lifecycle) &&\n (updates.name === undefined || updates.name === data.name) &&\n (updates.description === undefined || updates.description === data.description)\n );\n}\n\n/**\n * Shallow-compare two Maps by key set and entry data (JSON equality).\n * Returns true if they are structurally identical, avoiding unnecessary re-renders.\n */\nfunction mapsEqual<T extends { data: unknown; parentNodeId?: string }>(\n a: Map<string, T>,\n b: Map<string, T>\n): boolean {\n if (a.size !== b.size) return false;\n for (const [key, aEntry] of a) {\n const bEntry = b.get(key);\n if (!bEntry) return false;\n if (aEntry.parentNodeId !== bEntry.parentNodeId) return false;\n if (aEntry.data === bEntry.data) continue;\n if (JSON.stringify(aEntry.data) !== JSON.stringify(bEntry.data)) return false;\n }\n return true;\n}\n\nexport function useGraphState(\n initialNodes: CanvasNodeType[],\n initialEdges: Edge[],\n showArchived = false\n): UseGraphStateReturn {\n const { i18n } = useTranslation();\n const layoutDefaults = useMemo(() => getCanvasLayoutDefaults(i18n.dir()), [i18n]);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- intentional: parse only on mount (like useState initializer)\n const init = useMemo(() => parseMaps(initialNodes, initialEdges), []);\n\n const [featureMap, setFeatureMap] = useState<Map<string, FeatureEntry>>(init.featureMap);\n const [repoMap, setRepoMap] = useState<Map<string, RepoEntry>>(init.repoMap);\n const [pendingMap, setPendingMap] = useState<Map<string, FeatureEntry>>(\n new Map<string, FeatureEntry>()\n );\n\n // Buffer for SSE updates that arrive before their feature is in featureMap.\n // When reconcile adds new features, buffered updates are applied automatically.\n const pendingUpdatesRef = useRef<\n Map<string, Partial<Pick<FeatureNodeData, 'state' | 'lifecycle' | 'name' | 'description'>>>\n >(new Map());\n\n // Protect recently-added/replaced repos from stale-poll reconcile.\n // After addRepository or replaceRepository, the repo ID is marked as protected.\n // Once reconcile sees the repo in server data, the protection is cleared.\n // This prevents a stale poll (that fetched data before the server action completed)\n // from wiping a repo that the client has already added.\n const protectedRepoIdsRef = useRef<Set<string>>(new Set());\n\n // Mutation guard: ref-counted counter. While > 0, reconcile is a no-op\n // so stale poll data cannot overwrite optimistic state.\n const mutationCountRef = useRef(0);\n const mutationTimersRef = useRef<Set<ReturnType<typeof setTimeout>>>(new Set());\n\n // Track 'deleting' features that the server no longer returns.\n // Retained for one extra reconcile cycle so the user sees the deleting state\n // before the node disappears from the canvas.\n const deletingRetainedRef = useRef<Set<string>>(new Set());\n\n // Callbacks stored in a ref so changing them doesn't trigger re-render.\n // The stable wrapper object reads from the ref so node closures always use latest callbacks.\n const callbacksRef = useRef<GraphCallbacks>({});\n const stableCallbacks = useMemo<GraphCallbacks>(\n () => ({\n onNodeAction: (nodeId) => callbacksRef.current.onNodeAction?.(nodeId),\n onNodeSettings: (nodeId) => callbacksRef.current.onNodeSettings?.(nodeId),\n onFeatureDelete: (featureId, cleanup, cascadeDelete, closePr) =>\n callbacksRef.current.onFeatureDelete?.(featureId, cleanup, cascadeDelete, closePr),\n onRepositoryAdd: (nodeId) => callbacksRef.current.onRepositoryAdd?.(nodeId),\n onRepositoryClick: (nodeId) => callbacksRef.current.onRepositoryClick?.(nodeId),\n onRepositoryDelete: (repositoryId) => callbacksRef.current.onRepositoryDelete?.(repositoryId),\n onRetryFeature: (featureId) => callbacksRef.current.onRetryFeature?.(featureId),\n onStartFeature: (featureId) => callbacksRef.current.onStartFeature?.(featureId),\n onArchiveFeature: (featureId) => callbacksRef.current.onArchiveFeature?.(featureId),\n onUnarchiveFeature: (featureId) => callbacksRef.current.onUnarchiveFeature?.(featureId),\n }),\n []\n );\n\n // Stable refs for domain Maps (for use in callbacks without depending on state)\n const featureMapRef = useRef(featureMap);\n featureMapRef.current = featureMap;\n const repoMapRef = useRef(repoMap);\n repoMapRef.current = repoMap;\n\n // Filter archived features from the Map when the toggle is off.\n // This gives instant toggle response (no server round-trip) per NFR-3.\n const visibleFeatureMap = useMemo(() => {\n if (showArchived) return featureMap;\n const filtered = new Map<string, FeatureEntry>();\n for (const [id, entry] of featureMap) {\n if ((entry.data.state as string) !== 'archived') {\n filtered.set(id, entry);\n }\n }\n return filtered.size === featureMap.size ? featureMap : filtered;\n }, [featureMap, showArchived]);\n\n // Derive graph from domain Maps (runs on every Map change, but dagre only on topology change)\n const derived = useMemo(\n () => deriveGraph(visibleFeatureMap, repoMap, pendingMap, stableCallbacks),\n [visibleFeatureMap, repoMap, pendingMap, stableCallbacks]\n );\n\n // Cache dagre layout positions — only re-run when node set or edge connections change.\n // Extracted into useGraphDerivation for focus; see hooks/use-graph-derivation.ts.\n const { nodes, edges } = useGraphDerivation(derived, layoutDefaults);\n\n // --- Mutations ---\n\n const reconcile = useCallback((newNodes: CanvasNodeType[], newEdges: Edge[]) => {\n // Skip reconciliation while an optimistic mutation is in-flight.\n // Stale poll data fetched before the mutation completed would overwrite\n // the optimistic state, causing flicker (nodes disappearing/reappearing).\n if (mutationCountRef.current > 0) return;\n\n const { featureMap: newFeatureMap, repoMap: newRepoMap } = parseMaps(newNodes, newEdges);\n\n // Precompute match keys so we don't scan newFeatureMap.values() per pending entry\n const realFeatureKeys = new Set(\n [...newFeatureMap.values()].map((e) => `${e.data.name}\\0${e.data.repositoryPath}`)\n );\n\n setFeatureMap((currentFeatureMap) => {\n // Preserve pending (creating) nodes unless matched by name+repositoryPath from newFeatureMap\n const pendingEntries = [...currentFeatureMap.entries()].filter(\n ([, e]) => e.data.state === 'creating'\n );\n\n const merged = new Map(newFeatureMap);\n\n // Keep pending nodes that don't have a real counterpart in new data\n for (const [tempId, pendingEntry] of pendingEntries) {\n const key = `${pendingEntry.data.name}\\0${pendingEntry.data.repositoryPath}`;\n if (!realFeatureKeys.has(key)) {\n merged.set(tempId, pendingEntry);\n }\n }\n\n // Preserve 'deleting' state for features being deleted.\n // If the server still returns the feature, override its state to 'deleting'.\n // If the server no longer returns it (soft-deleted), retain it for one\n // extra reconcile cycle so the user sees the deleting animation.\n const nextRetained = new Set<string>();\n for (const [id, entry] of currentFeatureMap) {\n if (entry.data.state === 'deleting') {\n if (merged.has(id)) {\n // Server still has it — override state to keep showing 'deleting'\n merged.set(id, {\n ...merged.get(id)!,\n data: { ...merged.get(id)!.data, state: 'deleting' },\n });\n } else if (!deletingRetainedRef.current.has(id)) {\n // First reconcile after server removal — retain with deleting state\n merged.set(id, entry);\n nextRetained.add(id);\n }\n // else: already retained once — let it disappear\n }\n }\n deletingRetainedRef.current = nextRetained;\n\n // Apply any buffered SSE updates to features that now exist in the map\n for (const [nodeId, updates] of pendingUpdatesRef.current) {\n const entry = merged.get(nodeId);\n if (entry) {\n merged.set(nodeId, { ...entry, data: { ...entry.data, ...updates } });\n pendingUpdatesRef.current.delete(nodeId);\n }\n }\n\n // Avoid re-render when polling returns identical data\n if (mapsEqual(currentFeatureMap, merged)) return currentFeatureMap;\n return merged;\n });\n\n // Clean pendingMap entries that now have a real counterpart in server data\n setPendingMap((currentPendingMap) => {\n if (currentPendingMap.size === 0) return currentPendingMap;\n let changed = false;\n const next = new Map(currentPendingMap);\n for (const [tempId, pendingEntry] of currentPendingMap) {\n const key = `${pendingEntry.data.name}\\0${pendingEntry.data.repositoryPath}`;\n if (realFeatureKeys.has(key)) {\n next.delete(tempId);\n changed = true;\n }\n }\n return changed ? next : currentPendingMap;\n });\n\n // Merge repoMap: preserve optimistic (temp) repos AND recently-added/replaced\n // repos that the server doesn't know about yet. Without this, a polling\n // reconcile that fires before the server action returns (or uses stale data\n // from an in-flight fetch) would wipe the repo, causing a canvas→empty flicker.\n setRepoMap((currentRepoMap) => {\n // Start with everything the server returned\n const merged = new Map(newRepoMap);\n\n // Build a set of repositoryPaths present in server data for dedup\n const serverPaths = new Set([...newRepoMap.values()].map((e) => e.data.repositoryPath));\n\n for (const [id, entry] of currentRepoMap) {\n if (merged.has(id)) {\n // Server confirmed this repo — no longer needs protection\n protectedRepoIdsRef.current.delete(id);\n continue;\n }\n if (serverPaths.has(entry.data.repositoryPath)) {\n // Server has a repo with same path — clear protection\n protectedRepoIdsRef.current.delete(id);\n continue;\n }\n // Keep temp repos or protected (recently added/replaced) repos\n if (id.startsWith('repo-temp-') || protectedRepoIdsRef.current.has(id)) {\n merged.set(id, entry);\n }\n }\n\n // Avoid re-render when polling returns identical data\n if (mapsEqual(currentRepoMap, merged)) return currentRepoMap;\n return merged;\n });\n }, []);\n\n const updateFeature = useCallback((featureNodeId: string, updates: FeatureDataUpdates) => {\n setFeatureMap((prev) => {\n const entry = prev.get(featureNodeId);\n if (!entry) {\n // Feature not yet in map — buffer update for when reconcile adds it\n pendingUpdatesRef.current.set(featureNodeId, {\n ...pendingUpdatesRef.current.get(featureNodeId),\n ...updates,\n });\n return prev;\n }\n // Clear any buffered update for this feature since it's now in the map\n pendingUpdatesRef.current.delete(featureNodeId);\n if (isFeatureDataUnchanged(entry.data, updates)) return prev;\n const next = new Map(prev);\n next.set(featureNodeId, { ...entry, data: { ...entry.data, ...updates } });\n return next;\n });\n\n // Also check pendingMap\n setPendingMap((prev) => {\n const entry = prev.get(featureNodeId);\n if (!entry) return prev;\n if (isFeatureDataUnchanged(entry.data, updates)) return prev;\n const next = new Map(prev);\n next.set(featureNodeId, { ...entry, data: { ...entry.data, ...updates } });\n return next;\n });\n }, []);\n\n const addPendingFeature = useCallback(\n (nodeId: string, data: FeatureNodeData, parentNodeId?: string) => {\n setPendingMap((prev) => {\n const next = new Map(prev);\n next.set(nodeId, { nodeId, data, parentNodeId });\n return next;\n });\n },\n []\n );\n\n const removePendingFeature = useCallback((nodeId: string) => {\n setPendingMap((prev) => {\n if (!prev.has(nodeId)) return prev;\n const next = new Map(prev);\n next.delete(nodeId);\n return next;\n });\n }, []);\n\n const removeFeature = useCallback((nodeId: string) => {\n setFeatureMap((prev) => {\n if (!prev.has(nodeId)) return prev;\n const next = new Map(prev);\n next.delete(nodeId);\n return next;\n });\n }, []);\n\n const restoreFeature = useCallback((nodeId: string, entry: FeatureEntry) => {\n setFeatureMap((prev) => {\n const next = new Map(prev);\n next.set(nodeId, entry);\n return next;\n });\n }, []);\n\n const addRepository = useCallback((nodeId: string, data: RepositoryNodeData) => {\n protectedRepoIdsRef.current.add(nodeId);\n setRepoMap((prev) => {\n const next = new Map(prev);\n next.set(nodeId, { nodeId, data });\n return next;\n });\n }, []);\n\n const removeRepository = useCallback((nodeId: string) => {\n protectedRepoIdsRef.current.delete(nodeId);\n setRepoMap((prev) => {\n if (!prev.has(nodeId)) return prev;\n const next = new Map(prev);\n next.delete(nodeId);\n return next;\n });\n }, []);\n\n const replaceRepository = useCallback(\n (tempId: string, realId: string, data: RepositoryNodeData) => {\n protectedRepoIdsRef.current.delete(tempId);\n protectedRepoIdsRef.current.add(realId);\n setRepoMap((prev) => {\n if (!prev.has(tempId)) return prev;\n const next = new Map(prev);\n next.delete(tempId);\n next.set(realId, { nodeId: realId, data });\n return next;\n });\n },\n []\n );\n\n const getFeatureRepositoryPath = useCallback((featureNodeId: string): string | undefined => {\n return featureMapRef.current.get(featureNodeId)?.data.repositoryPath;\n }, []);\n\n const getRepositoryData = useCallback((nodeId: string): RepositoryNodeData | undefined => {\n return repoMapRef.current.get(nodeId)?.data;\n }, []);\n\n const getRepoMapSize = useCallback((): number => {\n return repoMapRef.current.size;\n }, []);\n\n const setCallbacks = useCallback((callbacks: GraphCallbacks) => {\n callbacksRef.current = callbacks;\n }, []);\n\n const beginMutation = useCallback(() => {\n mutationCountRef.current++;\n }, []);\n\n const endMutation = useCallback((cooldownMs = 3_000) => {\n // Delay decrement by one poll interval so the next fetch after the\n // mutation returns post-mutation data, not a stale in-flight response.\n const timer = setTimeout(() => {\n mutationCountRef.current = Math.max(0, mutationCountRef.current - 1);\n mutationTimersRef.current.delete(timer);\n }, cooldownMs);\n mutationTimersRef.current.add(timer);\n }, []);\n\n const isMutating = useCallback(() => mutationCountRef.current > 0, []);\n\n // Cleanup cooldown timers on unmount\n useEffect(() => {\n const timers = mutationTimersRef.current;\n return () => {\n for (const timer of timers) clearTimeout(timer);\n timers.clear();\n };\n }, []);\n\n return {\n nodes,\n edges,\n reconcile,\n updateFeature,\n addPendingFeature,\n removePendingFeature,\n removeFeature,\n restoreFeature,\n addRepository,\n removeRepository,\n replaceRepository,\n getFeatureRepositoryPath,\n getRepositoryData,\n getRepoMapSize,\n setCallbacks,\n beginMutation,\n endMutation,\n isMutating,\n };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40306a89a2c907442e515b25e00379f8fd0b4403d3\":{\"name\":\"getFeatureMetadata\"}},\"src/presentation/web/app/actions/get-feature-metadata.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40306a89a2c907442e515b25e00379f8fd0b4403d3\",callServer,void 0,findSourceMapURL,\"getFeatureMetadata\");export{$$RSC_SERVER_ACTION_0 as getFeatureMetadata};","'use client';\n\n/**\n * useSSEEventHandler\n *\n * Focused hook: processes SSE agent events and updates the graph state.\n * Handles state/lifecycle updates, metadata fetches, and the feature-approved\n * optimistic update event.\n *\n * Extracted from use-control-center-state.ts — see SSE Architecture in\n * src/presentation/web/CLAUDE.md for design rationale.\n */\n\nimport { useEffect, useRef, type RefObject } from 'react';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport { getFeatureMetadata } from '@/app/actions/get-feature-metadata';\nimport { useAgentEventsContext } from '@/hooks/agent-events-provider';\nimport { resolveSseEventUpdates } from '@/components/common/feature-node/derive-feature-state';\n\n/** Must match the message string emitted by the SSE route in agent-events/route.ts */\nconst METADATA_UPDATED_MESSAGE = 'Feature metadata updated';\n\ntype FeatureDataUpdates = Partial<\n Pick<FeatureNodeData, 'state' | 'lifecycle' | 'name' | 'description'>\n>;\n\nexport interface UseSSEEventHandlerDeps {\n /** Current derived nodes (used to read feature state before applying SSE updates). */\n nodesRef: RefObject<CanvasNodeType[]>;\n /** Update a feature's state/lifecycle/name in the domain Maps. */\n updateFeature: (featureNodeId: string, updates: FeatureDataUpdates) => void;\n /** Whether a mutation is currently in-flight. */\n isMutating: () => boolean;\n /** Signal that an optimistic mutation has started. */\n beginMutation: () => void;\n /** Signal that an optimistic mutation has resolved. */\n endMutation: (cooldownMs?: number) => void;\n}\n\n/**\n * Processes incoming SSE agent events and applies state/lifecycle/metadata\n * updates to the graph domain Maps. Also handles the `shipit-ai:feature-approved`\n * custom DOM event for optimistic approval state.\n */\nexport function useSSEEventHandler({\n nodesRef,\n updateFeature,\n isMutating,\n beginMutation,\n endMutation,\n}: UseSSEEventHandlerDeps): void {\n const { events } = useAgentEventsContext();\n\n // SSE effect: only state + lifecycle updates\n const processedEventCountRef = useRef(0);\n\n useEffect(() => {\n // Clamp cursor if events were pruned\n if (processedEventCountRef.current > events.length) {\n processedEventCountRef.current = 0;\n }\n if (events.length <= processedEventCountRef.current) return;\n const newEvents = events.slice(processedEventCountRef.current);\n processedEventCountRef.current = events.length;\n\n for (const { featureId, state, lifecycle } of resolveSseEventUpdates(newEvents)) {\n if (state !== undefined || lifecycle !== undefined) {\n const nodeId = `feat-${featureId}`;\n const existingNode = nodesRef.current.find((n) => n.id === nodeId);\n const existingState = existingNode\n ? (existingNode.data as FeatureNodeData).state\n : undefined;\n\n // Skip SSE updates for features in 'deleting' state — the optimistic\n // delete state must not be overwritten by stale SSE events (e.g. agent\n // cancellation emitting AgentFailed during the soft-delete window).\n if (existingState === 'deleting') continue;\n\n // Skip SSE error events during mutation cooldown — after approve/reject\n // the agent may still report AgentFailed from the previous run before\n // the resume kicks in. The optimistic 'running' state must not be\n // overwritten by stale error events during this transition window.\n if (state === 'error' && isMutating() && existingState === 'running') continue;\n\n updateFeature(nodeId, {\n ...(state !== undefined && { state }),\n ...(lifecycle !== undefined && { lifecycle }),\n });\n }\n }\n }, [events, updateFeature, isMutating, nodesRef]);\n\n // Listen for optimistic approval/rejection events from the drawer (fires before SSE arrives).\n // Uses beginMutation + endMutation to prevent stale poll/reconcile data from overwriting\n // the optimistic 'running' state during the transition window (avoids brief \"Something went wrong\" flash).\n useEffect(() => {\n const handler = (e: Event) => {\n const { featureId } = (e as CustomEvent<{ featureId: string }>).detail;\n beginMutation();\n updateFeature(`feat-${featureId}`, { state: 'running' });\n endMutation();\n };\n window.addEventListener('shipit-ai:feature-approved', handler);\n return () => window.removeEventListener('shipit-ai:feature-approved', handler);\n }, [updateFeature, beginMutation, endMutation]);\n\n // Separate effect: fetch metadata (name + description) when SSE reports it changed\n const metadataFetchedRef = useRef<Set<string>>(new Set());\n const processedMetadataCountRef = useRef(0);\n\n useEffect(() => {\n // Clamp cursor if events were pruned\n if (processedMetadataCountRef.current > events.length) {\n processedMetadataCountRef.current = 0;\n }\n if (events.length <= processedMetadataCountRef.current) return;\n const newEvents = events.slice(processedMetadataCountRef.current);\n processedMetadataCountRef.current = events.length;\n\n for (const event of newEvents) {\n if (event.message !== METADATA_UPDATED_MESSAGE) continue;\n if (metadataFetchedRef.current.has(event.featureId)) continue;\n metadataFetchedRef.current.add(event.featureId);\n\n const nodeId = `feat-${event.featureId}`;\n getFeatureMetadata(event.featureId)\n .then((meta) => {\n if (meta) {\n updateFeature(nodeId, { name: meta.name, description: meta.description });\n }\n })\n .catch(() => {\n // Silent: metadata fetch failure is non-critical\n });\n }\n }, [events, updateFeature]);\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"409c6a3d317fe8f02d58823e588796a071e81be44f\":{\"name\":\"archiveFeature\"}},\"src/presentation/web/app/actions/archive-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"409c6a3d317fe8f02d58823e588796a071e81be44f\",callServer,void 0,findSourceMapURL,\"archiveFeature\");export{$$RSC_SERVER_ACTION_0 as archiveFeature};","/* __next_internal_action_entry_do_not_use__ [{\"785f41cd02af89c4b44f8d222d661a4a534b081923\":{\"name\":\"deleteFeature\"}},\"src/presentation/web/app/actions/delete-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"785f41cd02af89c4b44f8d222d661a4a534b081923\",callServer,void 0,findSourceMapURL,\"deleteFeature\");export{$$RSC_SERVER_ACTION_0 as deleteFeature};","/* __next_internal_action_entry_do_not_use__ [{\"4056493ad4e1f0b52d9ffb6cd926ce616630546083\":{\"name\":\"unarchiveFeature\"}},\"src/presentation/web/app/actions/unarchive-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"4056493ad4e1f0b52d9ffb6cd926ce616630546083\",callServer,void 0,findSourceMapURL,\"unarchiveFeature\");export{$$RSC_SERVER_ACTION_0 as unarchiveFeature};","/* __next_internal_action_entry_do_not_use__ [{\"40090d50d2dfeaaa5c021cfb7c005a37c84488a7f7\":{\"name\":\"deleteRepository\"}},\"src/presentation/web/app/actions/delete-repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40090d50d2dfeaaa5c021cfb7c005a37c84488a7f7\",callServer,void 0,findSourceMapURL,\"deleteRepository\");export{$$RSC_SERVER_ACTION_0 as deleteRepository};","'use client';\n\n/**\n * useServerActions\n *\n * Focused hook: wraps all server actions for the control center with optimistic\n * state updates, mutation guards, and rollback on error.\n *\n * All handlers follow the pattern:\n * beginMutation → optimistic update → server action → rollback on error → endMutation\n *\n * Extracted from use-control-center-state.ts — see Mutation Paths in\n * src/presentation/web/CLAUDE.md for design rationale.\n */\n\nimport { useCallback, useRef, type RefObject } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { toast } from 'sonner';\nimport type { Edge } from '@xyflow/react';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport {\n layoutWithDagre,\n getCanvasLayoutDefaults,\n type LayoutDirection,\n} from '@/lib/layout-with-dagre';\nimport { archiveFeature } from '@/app/actions/archive-feature';\nimport { deleteFeature } from '@/app/actions/delete-feature';\nimport { resumeFeature } from '@/app/actions/resume-feature';\nimport { startFeature } from '@/app/actions/start-feature';\nimport { stopFeature } from '@/app/actions/stop-feature';\nimport { unarchiveFeature } from '@/app/actions/unarchive-feature';\nimport { addRepository } from '@/app/actions/add-repository';\nimport { deleteRepository } from '@/app/actions/delete-repository';\nimport { useSoundAction } from '@/hooks/use-sound-action';\nimport type { FeatureEntry } from '@/lib/derive-graph';\n\ntype FeatureDataUpdates = Partial<\n Pick<FeatureNodeData, 'state' | 'lifecycle' | 'name' | 'description'>\n>;\n\nexport interface UseServerActionsDeps {\n /** Stable ref to the current derived nodes (read during delete/rollback). */\n nodesRef: RefObject<CanvasNodeType[]>;\n /** Stable ref to the current derived edges (read during delete cascade). */\n edgesRef: RefObject<Edge[]>;\n /** Update a feature's data in the domain Maps. */\n updateFeature: (featureNodeId: string, updates: FeatureDataUpdates) => void;\n /** Remove a real feature node from the domain Map. */\n removeFeature: (nodeId: string) => void;\n /** Restore a previously removed feature (rollback). */\n restoreFeature: (nodeId: string, entry: FeatureEntry) => void;\n /** Add a repository node (may use a temp ID initially). */\n addRepositoryToMap: (nodeId: string, data: RepositoryNodeData) => void;\n /** Remove a repository node. */\n removeRepository: (nodeId: string) => void;\n /** Replace a temp repo ID with the real one (atomic). */\n replaceRepository: (tempId: string, realId: string, data: RepositoryNodeData) => void;\n /** Stable lookup: repository data by nodeId. */\n getRepositoryData: (nodeId: string) => RepositoryNodeData | undefined;\n /** Stable lookup: current number of repositories in the domain Map. */\n getRepoMapSize: () => number;\n /** Reconcile domain Maps with fresh layout data. */\n reconcile: (newNodes: CanvasNodeType[], newEdges: Edge[]) => void;\n /** Signal that an optimistic mutation has started. */\n beginMutation: () => void;\n /** Signal that an optimistic mutation has resolved. */\n endMutation: (cooldownMs?: number) => void;\n}\n\nexport interface UseServerActionsReturn {\n handleRetryFeature: (featureId: string) => void;\n handleStartFeature: (featureId: string) => void;\n handleStopFeature: (featureId: string) => void;\n handleArchiveFeature: (featureId: string) => void;\n handleUnarchiveFeature: (featureId: string) => void;\n handleDeleteFeature: (\n featureId: string,\n cleanup?: boolean,\n cascadeDelete?: boolean,\n closePr?: boolean\n ) => void;\n handleDeleteRepository: (repositoryId: string) => Promise<void>;\n handleLayout: (direction: LayoutDirection) => void;\n handleAddRepository: (path: string) => { wasEmpty: boolean; repoPath: string };\n}\n\n/**\n * Returns stable handler functions for all control-center server actions.\n * Each handler performs optimistic UI updates via domain Map mutations and\n * uses the mutation guard to prevent stale reconcile overwrites.\n */\nexport function useServerActions({\n nodesRef,\n edgesRef,\n updateFeature,\n removeFeature,\n restoreFeature,\n addRepositoryToMap,\n removeRepository,\n replaceRepository,\n getRepositoryData,\n getRepoMapSize,\n reconcile,\n beginMutation,\n endMutation,\n}: UseServerActionsDeps): UseServerActionsReturn {\n const router = useRouter();\n const deleteSound = useSoundAction('delete');\n const createSound = useSoundAction('create');\n\n // Stable counter for temporary repo IDs — incremented each time a new temp repo is created\n const nextRepoTempIdRef = useRef(0);\n\n const handleRetryFeature = useCallback(\n (featureId: string) => {\n const nodeId = `feat-${featureId}`;\n beginMutation();\n updateFeature(nodeId, { state: 'running' });\n\n resumeFeature(featureId)\n .then((result) => {\n if (result.error) {\n updateFeature(nodeId, { state: 'error' });\n toast.error(result.error);\n } else {\n toast.success('Feature resumed');\n }\n })\n .catch(() => {\n updateFeature(nodeId, { state: 'error' });\n toast.error('Failed to resume feature');\n })\n .finally(() => endMutation());\n },\n [updateFeature, beginMutation, endMutation]\n );\n\n const handleStartFeature = useCallback(\n (featureId: string) => {\n const nodeId = `feat-${featureId}`;\n beginMutation();\n updateFeature(nodeId, { state: 'running' });\n\n startFeature(featureId)\n .then((result) => {\n if (result.error) {\n updateFeature(nodeId, { state: 'pending' });\n toast.error(result.error);\n } else {\n toast.success('Feature started');\n }\n })\n .catch(() => {\n updateFeature(nodeId, { state: 'pending' });\n toast.error('Failed to start feature');\n })\n .finally(() => endMutation());\n },\n [updateFeature, beginMutation, endMutation]\n );\n\n const handleStopFeature = useCallback(\n (featureId: string) => {\n beginMutation();\n\n stopFeature(featureId)\n .then((result) => {\n if (result.error) {\n toast.error(result.error);\n } else {\n toast.success('Agent stopped');\n }\n })\n .catch(() => {\n toast.error('Failed to stop agent');\n })\n .finally(() => endMutation());\n },\n [beginMutation, endMutation]\n );\n\n const handleArchiveFeature = useCallback(\n (featureId: string) => {\n const nodeId = `feat-${featureId}`;\n beginMutation();\n updateFeature(nodeId, { state: 'archived' });\n\n archiveFeature(featureId)\n .then((result) => {\n if (result.error) {\n updateFeature(nodeId, { state: 'done' });\n toast.error(result.error);\n } else {\n toast.success('Feature archived');\n }\n })\n .catch(() => {\n updateFeature(nodeId, { state: 'done' });\n toast.error('Failed to archive feature');\n })\n .finally(() => endMutation());\n },\n [updateFeature, beginMutation, endMutation]\n );\n\n const handleUnarchiveFeature = useCallback(\n (featureId: string) => {\n const nodeId = `feat-${featureId}`;\n beginMutation();\n updateFeature(nodeId, { state: 'done' });\n\n unarchiveFeature(featureId)\n .then((result) => {\n if (result.error) {\n updateFeature(nodeId, { state: 'archived' });\n toast.error(result.error);\n } else {\n toast.success('Feature unarchived');\n }\n })\n .catch(() => {\n updateFeature(nodeId, { state: 'archived' });\n toast.error('Failed to unarchive feature');\n })\n .finally(() => endMutation());\n },\n [updateFeature, beginMutation, endMutation]\n );\n\n const handleDeleteFeature = useCallback(\n (featureId: string, cleanup?: boolean, cascadeDelete?: boolean, closePr?: boolean) => {\n const nodeId = `feat-${featureId}`;\n const shouldCascade = cascadeDelete === true;\n\n // Collect all descendant feature node IDs (children, grandchildren, etc.)\n const descendants: string[] = [];\n if (shouldCascade) {\n const queue = [nodeId];\n while (queue.length > 0) {\n const current = queue.shift()!;\n for (const edge of edgesRef.current) {\n if (edge.type === 'dependencyEdge' && edge.source === current) {\n descendants.push(edge.target);\n queue.push(edge.target);\n }\n }\n }\n }\n\n // Snapshot current states for rollback (parent + descendants)\n const prevStates = new Map<string, FeatureNodeData['state']>();\n for (const nid of [nodeId, ...descendants]) {\n const node = nodesRef.current.find((n) => n.id === nid);\n if (node) {\n prevStates.set(nid, (node.data as FeatureNodeData).state);\n }\n }\n\n // Optimistic: show \"deleting\" state on parent (and descendants if cascading)\n beginMutation();\n updateFeature(nodeId, { state: 'deleting' });\n for (const childId of descendants) {\n updateFeature(childId, { state: 'deleting' });\n }\n deleteSound.play();\n router.push('/');\n\n deleteFeature(featureId, cleanup, cascadeDelete, closePr)\n .then((result) => {\n if (result.error) {\n // Rollback all to previous states\n for (const [nid, prevState] of prevStates) {\n if (prevState) updateFeature(nid, { state: prevState });\n }\n toast.error(result.error);\n } else {\n // Delete succeeded — remove features from the canvas. The polling\n // reconcile would eventually clean them up, but we remove them\n // explicitly so the user sees them disappear promptly.\n removeFeature(nodeId);\n for (const childId of descendants) {\n removeFeature(childId);\n }\n }\n })\n .catch(() => {\n for (const [nid, prevState] of prevStates) {\n if (prevState) updateFeature(nid, { state: prevState });\n }\n toast.error('Failed to delete feature');\n })\n .finally(() => endMutation());\n },\n [\n router,\n deleteSound,\n updateFeature,\n removeFeature,\n beginMutation,\n endMutation,\n nodesRef,\n edgesRef,\n ]\n );\n\n const handleDeleteRepository = useCallback(\n async (repositoryId: string) => {\n const repoNodeId = `repo-${repositoryId}`;\n\n // Find children of this repo via edges\n const childFeatureIds = new Set(\n edgesRef.current.filter((e) => e.source === repoNodeId).map((e) => e.target)\n );\n\n // Snapshot for rollback\n const prevRepoData = getRepositoryData(repoNodeId);\n const childSnapshots = new Map<string, FeatureEntry>();\n for (const childId of childFeatureIds) {\n const childNode = nodesRef.current.find((n) => n.id === childId);\n if (childNode) {\n childSnapshots.set(childId, { nodeId: childId, data: childNode.data as FeatureNodeData });\n }\n }\n\n const rollback = () => {\n if (prevRepoData) addRepositoryToMap(repoNodeId, prevRepoData);\n for (const [childId, entry] of childSnapshots) {\n restoreFeature(childId, entry);\n }\n };\n\n // Optimistic: remove repo + children\n beginMutation();\n removeRepository(repoNodeId);\n for (const childId of childFeatureIds) {\n removeFeature(childId);\n }\n\n try {\n const result = await deleteRepository(repositoryId);\n if (!result.success) {\n toast.error(result.error ?? 'Failed to remove repository');\n rollback();\n return;\n }\n deleteSound.play();\n } catch {\n toast.error('Failed to remove repository');\n rollback();\n } finally {\n endMutation();\n }\n },\n [\n deleteSound,\n removeRepository,\n removeFeature,\n addRepositoryToMap,\n restoreFeature,\n getRepositoryData,\n beginMutation,\n endMutation,\n nodesRef,\n edgesRef,\n ]\n );\n\n const handleLayout = useCallback(\n (direction: LayoutDirection) => {\n // Layout is applied via reconcile on next server prop update.\n // For immediate re-layout, apply dagre and trigger a reconcile-like update.\n const result = layoutWithDagre(nodesRef.current, edgesRef.current, {\n ...getCanvasLayoutDefaults(),\n direction,\n });\n reconcile(result.nodes, result.edges);\n },\n [reconcile, nodesRef, edgesRef]\n );\n\n const handleAddRepository = useCallback(\n (path: string): { wasEmpty: boolean; repoPath: string } => {\n const wasEmpty = getRepoMapSize() === 0;\n const tempId = `repo-temp-${++nextRepoTempIdRef.current}`;\n const repoName =\n path\n .replace(/[\\\\/]+$/, '')\n .split(/[\\\\/]/)\n .pop() ?? path;\n\n beginMutation();\n addRepositoryToMap(tempId, {\n name: repoName,\n repositoryPath: path,\n id: tempId,\n createdAt: Date.now(),\n gitInfoStatus: 'loading',\n });\n\n addRepository({ path, name: repoName })\n .then((result) => {\n if (result.error) {\n removeRepository(tempId);\n toast.error(result.error);\n return;\n }\n const repo = result.repository!;\n const realId = `repo-${repo.id}`;\n replaceRepository(tempId, realId, {\n name: repo.name,\n repositoryPath: repo.path,\n id: repo.id,\n createdAt:\n repo.createdAt instanceof Date ? repo.createdAt.getTime() : Number(repo.createdAt),\n });\n createSound.play();\n })\n .catch(() => {\n removeRepository(tempId);\n toast.error('Failed to add repository');\n })\n .finally(() => endMutation());\n\n return { wasEmpty, repoPath: path };\n },\n [\n addRepositoryToMap,\n removeRepository,\n replaceRepository,\n createSound,\n getRepoMapSize,\n beginMutation,\n endMutation,\n ]\n );\n\n return {\n handleRetryFeature,\n handleStartFeature,\n handleStopFeature,\n handleArchiveFeature,\n handleUnarchiveFeature,\n handleDeleteFeature,\n handleDeleteRepository,\n handleLayout,\n handleAddRepository,\n };\n}\n","import dagre from '@dagrejs/dagre';\nimport type { Edge, Node } from '@xyflow/react';\n\nexport type LayoutDirection = 'TB' | 'LR' | 'BT' | 'RL';\n\nexport interface LayoutOptions {\n /** Graph direction: top-bottom, left-right, etc. Default \"TB\" */\n direction?: LayoutDirection;\n /** Default node size when per-node size is unavailable */\n nodeSize?: { width: number; height: number };\n /** Vertical separation between ranks (default 80) */\n ranksep?: number;\n /** Horizontal separation between nodes in the same rank (default 30) */\n nodesep?: number;\n}\n\n/** Canonical layout defaults for the control-center canvas. */\nexport const CANVAS_LAYOUT_DEFAULTS: LayoutOptions = {\n direction: 'LR',\n ranksep: 200,\n nodesep: 30,\n};\n\n/** Returns canvas layout defaults with direction adjusted for text direction. */\nexport function getCanvasLayoutDefaults(dir: 'ltr' | 'rtl' = 'ltr'): LayoutOptions {\n return { ...CANVAS_LAYOUT_DEFAULTS, direction: dir === 'rtl' ? 'RL' : 'LR' };\n}\n\n/** Known node-type dimensions for the canvas node types */\nconst NODE_DIMENSIONS: Record<string, { width: number; height: number }> = {\n featureNode: { width: 388, height: 140 },\n repositoryNode: { width: 400, height: 140 },\n};\n\nfunction getNodeSize(\n node: Node,\n defaultSize: { width: number; height: number }\n): { width: number; height: number } {\n // Prefer per-node size from data, then type-based lookup, then default\n const data = node.data as Record<string, unknown> | undefined;\n if (data && typeof data.width === 'number' && typeof data.height === 'number') {\n return { width: data.width, height: data.height };\n }\n return NODE_DIMENSIONS[node.type ?? ''] ?? defaultSize;\n}\n\nfunction getHandlePositions(direction: LayoutDirection) {\n switch (direction) {\n case 'LR':\n return { targetPosition: 'left' as const, sourcePosition: 'right' as const };\n case 'RL':\n return { targetPosition: 'right' as const, sourcePosition: 'left' as const };\n case 'BT':\n return { targetPosition: 'bottom' as const, sourcePosition: 'top' as const };\n case 'TB':\n default:\n return { targetPosition: 'top' as const, sourcePosition: 'bottom' as const };\n }\n}\n\n/**\n * Compute an automatic hierarchical layout for React Flow nodes and edges\n * using Dagre. Returns new node/edge arrays — never mutates the originals.\n *\n * Disconnected nodes (no edges) are interleaved with connected root trees\n * in their original input order, preserving the caller's sort (e.g. createdAt).\n */\nexport function layoutWithDagre<N extends Node>(\n nodes: N[],\n edges: Edge[],\n opts: LayoutOptions = {}\n): { nodes: N[]; edges: Edge[] } {\n const {\n direction = 'TB',\n nodeSize = { width: 172, height: 36 },\n ranksep = 80,\n nodesep = 30,\n } = opts;\n\n if (nodes.length === 0) {\n return { nodes: [], edges: [] };\n }\n\n const g = new dagre.graphlib.Graph({ multigraph: true });\n g.setDefaultEdgeLabel(() => ({}));\n g.setGraph({ rankdir: direction, ranksep, nodesep });\n\n // Separate connected from disconnected nodes\n const connectedIds = new Set<string>();\n for (const edge of edges) {\n connectedIds.add(edge.source);\n connectedIds.add(edge.target);\n }\n\n const graphNodes = nodes.filter((n) => connectedIds.has(n.id));\n const disconnectedNodes = nodes.filter((n) => !connectedIds.has(n.id));\n\n // Add nodes to the dagre graph\n for (const node of graphNodes) {\n const size = getNodeSize(node, nodeSize);\n g.setNode(node.id, { width: size.width, height: size.height });\n }\n\n // Add edges — use edge.id as key to support multigraph (duplicate source→target)\n for (const edge of edges) {\n if (!g.hasNode(edge.source) || !g.hasNode(edge.target)) continue;\n g.setEdge(edge.source, edge.target, {}, edge.id);\n }\n\n dagre.layout(g);\n\n const { targetPosition, sourcePosition } = getHandlePositions(direction);\n const isHorizontal = direction === 'LR' || direction === 'RL';\n\n // Collect dagre center positions keyed by node id\n const centerMap = new Map<string, { cx: number; cy: number; w: number; h: number }>();\n for (const node of graphNodes) {\n const dagreNode = g.node(node.id);\n const size = getNodeSize(node, nodeSize);\n centerMap.set(node.id, { cx: dagreNode.x, cy: dagreNode.y, w: size.width, h: size.height });\n }\n\n // Add disconnected nodes to centerMap so they participate in root positioning.\n // Use the same primary-axis position as connected roots (rank 0) so they align\n // visually with repos that have features attached.\n let rootPrimaryAxis = 0;\n for (const c of centerMap.values()) {\n rootPrimaryAxis = isHorizontal ? c.cx : c.cy;\n break; // Use the first connected node's primary position\n }\n for (const node of disconnectedNodes) {\n const size = getNodeSize(node, nodeSize);\n centerMap.set(node.id, {\n cx: isHorizontal ? rootPrimaryAxis : 0,\n cy: isHorizontal ? 0 : rootPrimaryAxis,\n w: size.width,\n h: size.height,\n });\n }\n\n // ── Proper tree layout for the secondary axis ──\n // Dagre gives us correct primary-axis (rank/X) positions but its secondary-\n // axis (Y) positioning doesn't respect our tree structure well. Replace it\n // with a bottom-up tree layout:\n // 1. Compute subtree heights (leaves → roots)\n // 2. Position children centered on parent (roots → leaves)\n // This guarantees: no overlaps, parents centered on children, and straight\n // lines for 1-to-1 connections at every depth.\n\n // Build parent→children map from edges\n const childrenOf = new Map<string, string[]>();\n for (const edge of edges) {\n if (!centerMap.has(edge.source) || !centerMap.has(edge.target)) continue;\n if (!childrenOf.has(edge.source)) childrenOf.set(edge.source, []);\n childrenOf.get(edge.source)!.push(edge.target);\n }\n\n // Sort children by input order (preserves caller's ordering, e.g. createdAt)\n const inputIndex = new Map<string, number>();\n for (let i = 0; i < nodes.length; i++) {\n inputIndex.set(nodes[i].id, i);\n }\n for (const [, kids] of childrenOf) {\n kids.sort((a, b) => (inputIndex.get(a) ?? 0) - (inputIndex.get(b) ?? 0));\n }\n\n // Find tree roots: connected nodes that are not children of another node\n const childSet = new Set<string>();\n for (const ids of childrenOf.values()) {\n for (const id of ids) childSet.add(id);\n }\n const connectedRoots = [...connectedIds].filter((id) => centerMap.has(id) && !childSet.has(id));\n // Merge connected roots and disconnected nodes, sorted by input order\n // so repos maintain their original creation-time ordering regardless of\n // whether they have features attached.\n const allRoots = [...connectedRoots, ...disconnectedNodes.map((n) => n.id)];\n allRoots.sort((a, b) => (inputIndex.get(a) ?? 0) - (inputIndex.get(b) ?? 0));\n\n // Bottom-up: compute the total secondary-axis span each subtree needs\n const subtreeSpan = new Map<string, number>();\n function computeSpan(nodeId: string): number {\n if (subtreeSpan.has(nodeId)) return subtreeSpan.get(nodeId)!;\n const c = centerMap.get(nodeId)!;\n const nodeSpan = isHorizontal ? c.h : c.w;\n const kids = childrenOf.get(nodeId);\n if (!kids || kids.length === 0) {\n subtreeSpan.set(nodeId, nodeSpan);\n return nodeSpan;\n }\n let childrenTotalSpan = 0;\n for (const kid of kids) {\n childrenTotalSpan += computeSpan(kid);\n }\n childrenTotalSpan += (kids.length - 1) * nodesep;\n const span = Math.max(nodeSpan, childrenTotalSpan);\n subtreeSpan.set(nodeId, span);\n return span;\n }\n\n for (const root of allRoots) computeSpan(root);\n\n // Top-down: position each node on the secondary axis, centering parent\n // on its children block. For 1-to-1 edges the child gets the same\n // secondary-axis value as its parent (straight line).\n function positionTree(nodeId: string, centerPos: number): void {\n const c = centerMap.get(nodeId)!;\n if (isHorizontal) {\n c.cy = centerPos;\n } else {\n c.cx = centerPos;\n }\n const kids = childrenOf.get(nodeId);\n if (!kids || kids.length === 0) return;\n\n // Total span occupied by children\n let childrenTotalSpan = 0;\n for (const kid of kids) {\n childrenTotalSpan += subtreeSpan.get(kid) ?? 0;\n }\n childrenTotalSpan += (kids.length - 1) * nodesep;\n\n // Start from the top of the centered children block\n let cursor = centerPos - childrenTotalSpan / 2;\n for (const kid of kids) {\n const kidSpan = subtreeSpan.get(kid) ?? 0;\n positionTree(kid, cursor + kidSpan / 2);\n cursor += kidSpan + nodesep;\n }\n }\n\n // Position all root trees (connected and disconnected) in input order.\n let rootCursor = 0;\n for (const root of allRoots) {\n const span = subtreeSpan.get(root) ?? 0;\n positionTree(root, rootCursor + span / 2);\n rootCursor += span + nodesep;\n }\n\n // Build result array converting center-coords to React Flow top-left\n const result: N[] = [];\n for (const node of nodes) {\n const c = centerMap.get(node.id);\n if (!c) continue;\n result.push({\n ...node,\n targetPosition,\n sourcePosition,\n position: { x: c.cx - c.w / 2, y: c.cy - c.h / 2 },\n } as N);\n }\n\n return { nodes: result, edges: [...edges] };\n}\n","/**\n * derive-graph.ts\n *\n * Pure client-side derivation: domain Maps → React Flow nodes + edges.\n * All edges are derived from domain relationships (repositoryPath matching,\n * parentNodeId) — never stored independently.\n */\n\nimport type { Edge } from '@xyflow/react';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\n/** A feature node entry stored in the domain Map. */\nexport interface FeatureEntry {\n nodeId: string;\n data: FeatureNodeData;\n /** If set, this feature connects to a parent feature via a dependency edge (no repo→feature edge). */\n parentNodeId?: string;\n}\n\n/** A repository node entry stored in the domain Map. */\nexport interface RepoEntry {\n nodeId: string;\n data: RepositoryNodeData;\n}\n\n/** Stable callbacks passed by the consumer, injected into derived node data. */\nexport interface GraphCallbacks {\n /** Called when the user triggers an action on a feature node (e.g., adds a sub-feature). */\n onNodeAction?: (nodeId: string) => void;\n /** Called when the user opens settings/details on a feature node. */\n onNodeSettings?: (nodeId: string) => void;\n /** Called when the user deletes a feature. */\n onFeatureDelete?: (\n featureId: string,\n cleanup?: boolean,\n cascadeDelete?: boolean,\n closePr?: boolean\n ) => void;\n /** Called when the user clicks the \"+\" add-feature button on a repo node. */\n onRepositoryAdd?: (repoNodeId: string) => void;\n /** Called when the user clicks a repo node to navigate to its detail page. */\n onRepositoryClick?: (repoNodeId: string) => void;\n /** Called when the user deletes a repository. */\n onRepositoryDelete?: (repositoryId: string) => void;\n /** Called when the user retries a failed feature. */\n onRetryFeature?: (featureId: string) => void;\n /** Called when the user starts a pending feature. */\n onStartFeature?: (featureId: string) => void;\n /** Called when the user stops a running feature. */\n onStopFeature?: (featureId: string) => void;\n /** Called when the user archives a feature. */\n onArchiveFeature?: (featureId: string) => void;\n /** Called when the user unarchives a feature. */\n onUnarchiveFeature?: (featureId: string) => void;\n}\n\n/**\n * Derives React Flow nodes and edges from domain Maps.\n *\n * - Feature nodes without a parentNodeId → repo→feature edge (matched by repositoryPath)\n * - Feature nodes without a parentNodeId but with no matching repo → virtual repo node\n * - Feature nodes with a parentNodeId → dependency edge (parentNodeId→nodeId)\n * - Pending feature nodes (creating state) from pendingMap → same rules, no action callbacks\n * - Callbacks are injected into node data via closures\n */\nexport function deriveGraph(\n featureMap: Map<string, FeatureEntry>,\n repoMap: Map<string, RepoEntry>,\n pendingMap: Map<string, FeatureEntry>,\n callbacks?: GraphCallbacks\n): { nodes: CanvasNodeType[]; edges: Edge[] } {\n const nodes: CanvasNodeType[] = [];\n const edges: Edge[] = [];\n\n // Normalize path separators so Windows backslash paths match forward-slash paths\n const normalizePath = (p: string) => p.replace(/\\\\/g, '/');\n\n // Build a lookup: repositoryPath → repoNodeId\n const repoByPath = new Map<string, string>();\n for (const [nodeId, entry] of repoMap) {\n if (entry.data.repositoryPath) {\n repoByPath.set(normalizePath(entry.data.repositoryPath), nodeId);\n }\n }\n\n // Virtual repo nodes created for orphaned features (not in repoMap)\n const virtualRepos = new Map<string, string>(); // path → virtualNodeId\n\n function getOrCreateVirtualRepo(repositoryPath: string): string {\n if (virtualRepos.has(repositoryPath)) {\n return virtualRepos.get(repositoryPath)!;\n }\n const virtualId = `virtual-repo-${repositoryPath}`;\n const repoName = repositoryPath.split('/').filter(Boolean).at(-1) ?? repositoryPath;\n nodes.push({\n id: virtualId,\n type: 'repositoryNode',\n position: { x: 0, y: 0 },\n data: { name: repoName, repositoryPath } satisfies RepositoryNodeData,\n } as CanvasNodeType);\n virtualRepos.set(repositoryPath, virtualId);\n return virtualId;\n }\n\n // Add repo nodes (real ones) — sorted by createdAt for stable vertical order.\n // The server-side layoutWithDagre may reorder the node array (connected vs\n // disconnected split), so we cannot rely on Map insertion order alone.\n // Use Infinity fallback so repos without createdAt sort last (appear at bottom).\n const sortedRepoEntries = [...repoMap.entries()].sort((a, b) => {\n const aRaw = a[1].data.createdAt;\n const bRaw = b[1].data.createdAt;\n const aTime = typeof aRaw === 'number' && !Number.isNaN(aRaw) ? aRaw : Infinity;\n const bTime = typeof bRaw === 'number' && !Number.isNaN(bRaw) ? bRaw : Infinity;\n return aTime - bTime;\n });\n for (const [nodeId, entry] of sortedRepoEntries) {\n const data: RepositoryNodeData = {\n ...entry.data,\n ...(callbacks?.onRepositoryAdd && {\n onAdd: () => callbacks.onRepositoryAdd!(nodeId),\n }),\n ...(callbacks?.onRepositoryClick && {\n onClick: () => callbacks.onRepositoryClick!(nodeId),\n }),\n ...(callbacks?.onRepositoryDelete && {\n onDelete: callbacks.onRepositoryDelete,\n }),\n };\n nodes.push({\n id: nodeId,\n type: 'repositoryNode',\n position: { x: 0, y: 0 },\n data,\n } as CanvasNodeType);\n }\n\n // Process feature entries (both real and pending).\n // Skip pendingMap entries that already exist in featureMap (reconcile may not\n // have cleaned them up yet if the AI-generated name differs from the original).\n const allFeatureEntries: [string, FeatureEntry, boolean][] = [\n ...[...featureMap.entries()].map(\n ([id, e]) => [id, e, false] as [string, FeatureEntry, boolean]\n ),\n ...[...pendingMap.entries()]\n .filter(([id]) => !featureMap.has(id))\n .map(([id, e]) => [id, e, true] as [string, FeatureEntry, boolean]),\n ];\n\n for (const [nodeId, entry, isPending] of allFeatureEntries) {\n const isCreating = entry.data.state === 'creating' || isPending;\n\n const data: FeatureNodeData = {\n ...entry.data,\n // Callbacks only for non-creating nodes\n ...(!isCreating &&\n callbacks?.onNodeAction && {\n onAction: () => callbacks.onNodeAction!(nodeId),\n }),\n ...(!isCreating &&\n callbacks?.onNodeSettings && {\n onSettings: () => callbacks.onNodeSettings!(nodeId),\n }),\n ...(!isCreating &&\n callbacks?.onFeatureDelete && {\n onDelete: callbacks.onFeatureDelete,\n }),\n ...(!isCreating &&\n entry.data.state === 'error' &&\n callbacks?.onRetryFeature && {\n onRetry: callbacks.onRetryFeature,\n }),\n ...(!isCreating &&\n entry.data.state === 'pending' &&\n callbacks?.onStartFeature && {\n onStart: callbacks.onStartFeature,\n }),\n ...(!isCreating &&\n (entry.data.state === 'running' || entry.data.state === 'action-required') &&\n callbacks?.onStopFeature && {\n onStop: callbacks.onStopFeature,\n }),\n ...(!isCreating &&\n entry.data.state !== 'archived' &&\n entry.data.state !== 'deleting' &&\n callbacks?.onArchiveFeature && {\n onArchive: callbacks.onArchiveFeature,\n }),\n ...(!isCreating &&\n entry.data.state === 'archived' &&\n callbacks?.onUnarchiveFeature && {\n onUnarchive: callbacks.onUnarchiveFeature,\n }),\n };\n\n nodes.push({\n id: nodeId,\n type: 'featureNode',\n position: { x: 0, y: 0 },\n data,\n } as CanvasNodeType);\n\n // Edge derivation\n // If parentNodeId references a feature that's not visible (e.g. archived/filtered),\n // fall through to repo→feature edge so the child reconnects to the repository.\n if (\n entry.parentNodeId &&\n (featureMap.has(entry.parentNodeId) || pendingMap.has(entry.parentNodeId))\n ) {\n // Dependency edge (parent→child feature)\n edges.push({\n id: `dep-${entry.parentNodeId}-${nodeId}`,\n source: entry.parentNodeId,\n target: nodeId,\n type: 'dependencyEdge',\n });\n } else {\n // Repo→feature edge (matched by repositoryPath)\n const repositoryPath = normalizePath(entry.data.repositoryPath);\n const repoNodeId = repoByPath.get(repositoryPath) ?? getOrCreateVirtualRepo(repositoryPath);\n edges.push({\n id: `edge-${repoNodeId}-${nodeId}`,\n source: repoNodeId,\n target: nodeId,\n style: { strokeDasharray: '5 5' },\n });\n }\n }\n\n // Build set of feature node IDs that have children (are dependency edge sources)\n const parentNodeIds = new Set<string>();\n for (const edge of edges) {\n if (edge.type === 'dependencyEdge') {\n parentNodeIds.add(edge.source);\n }\n }\n\n // Inject showHandles and hasChildren based on edges\n const hasEdges = edges.length > 0;\n for (const node of nodes) {\n const data = node.data as Record<string, unknown>;\n data.showHandles = hasEdges;\n if (node.type === 'featureNode') {\n data.hasChildren = parentNodeIds.has(node.id);\n }\n }\n\n return { nodes, edges };\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { Handle, Position } from '@xyflow/react';\nimport { useRouter } from 'next/navigation';\nimport {\n Plus,\n Code2,\n Terminal,\n FolderOpen,\n Trash2,\n Play,\n Square,\n GitBranch,\n GitCommitHorizontal,\n ArrowDown,\n User,\n RotateCcw,\n MessageSquare,\n} from 'lucide-react';\nimport { GithubIcon } from '@/components/ui/github-icon';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { ActionButton } from '@/components/common/action-button';\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { useDeployAction } from '@/hooks/use-deploy-action';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\nimport type { RepositoryNodeData } from './repository-node-config';\nimport { useRepositoryActions } from './use-repository-actions';\nimport { ChatDotIndicator } from '@/components/features/chat/ChatDotIndicator';\nimport { useTurnStatus } from '@/hooks/turn-statuses-provider';\nimport {\n FeatureSessionsDropdown,\n type SessionSummary,\n} from '@/components/common/feature-node/feature-sessions-dropdown';\n\nexport function RepositoryNode({\n data,\n selected,\n}: {\n data: RepositoryNodeData;\n selected?: boolean;\n [key: string]: unknown;\n}) {\n const { t, i18n } = useTranslation('web');\n const router = useRouter();\n const isRtl = i18n.dir() === 'rtl';\n const targetHandlePos = isRtl ? Position.Right : Position.Left;\n const sourceHandlePos = isRtl ? Position.Left : Position.Right;\n const featureFlags = useFeatureFlags();\n const [confirmOpen, setConfirmOpen] = useState(false);\n const repoScopeId = data.id ? `repo-${data.id}` : `repo-${data.name}`;\n const chatTurnStatus = useTurnStatus(repoScopeId);\n const actions = useRepositoryActions(\n data.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null\n );\n const deployAction = useDeployAction(\n data.repositoryPath\n ? {\n targetId: data.repositoryPath,\n targetType: 'repository',\n repositoryPath: data.repositoryPath,\n }\n : null\n );\n const isDeploymentActive = deployAction.status === 'Booting' || deployAction.status === 'Ready';\n\n const handleCreateFromSession = useCallback(\n (session: SessionSummary, sessionFilePath: string) => {\n if (!data.repositoryPath) return;\n const preview = session.preview ? session.preview.slice(0, 200) : 'Unknown conversation';\n const prompt = [\n `Continue work from a previous agent session.`,\n ``,\n `## Session Context`,\n `- Session ID: ${session.id}`,\n `- Messages: ${session.messageCount}`,\n session.lastMessageAt ? `- Last active: ${session.lastMessageAt}` : '',\n `- Conversation file: ${sessionFilePath}`,\n ``,\n `## Session Preview`,\n `> ${preview}`,\n ``,\n `## Instructions`,\n `1. Read the full conversation history from the file above`,\n `2. Analyze the current state of the repository — what was done, what remains`,\n `3. Create or update spec files to accurately reflect the current state and remaining work`,\n `4. Continue implementing any unfinished work from the conversation`,\n ]\n .filter(Boolean)\n .join('\\n');\n\n const params = new URLSearchParams({\n repo: data.repositoryPath,\n prompt,\n });\n router.push(`/create?${params.toString()}`);\n },\n [data.repositoryPath, router]\n );\n\n return (\n <div\n className={cn('group relative', data.onDelete && data.id && 'ps-10')}\n style={{ direction: isRtl ? 'rtl' : 'ltr' }}\n >\n {data.showHandles ? (\n <Handle\n type=\"target\"\n position={targetHandlePos}\n isConnectable={false}\n className=\"opacity-0!\"\n style={{ top: 70 }}\n />\n ) : null}\n\n {/* Delete button — visible on hover, positioned to the left */}\n {data.onDelete && data.id ? (\n <>\n <div className=\"absolute -start-3 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100\">\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label={t('repositoryNode.removeRepository')}\n data-testid=\"repository-node-delete-button\"\n onClick={(e) => {\n e.stopPropagation();\n setConfirmOpen(true);\n }}\n className=\"bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('repositoryNode.removeRepository')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n <Dialog open={confirmOpen} onOpenChange={setConfirmOpen}>\n <DialogContent className=\"max-w-xs\">\n <DialogHeader>\n <DialogTitle>{t('repositoryNode.removeConfirmTitle')}</DialogTitle>\n <DialogDescription>\n {t('repositoryNode.removeConfirmDescription', { name: data.name })}\n </DialogDescription>\n </DialogHeader>\n <DialogFooter className=\"grid grid-cols-2 gap-2 sm:flex-none\">\n <DialogClose asChild>\n <Button variant=\"outline\">{t('repositoryNode.cancel')}</Button>\n </DialogClose>\n <Button\n variant=\"destructive\"\n onClick={() => {\n setConfirmOpen(false);\n data.onDelete?.(data.id!);\n }}\n >\n {t('repositoryNode.remove')}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n ) : null}\n\n <div\n role=\"button\"\n tabIndex={0}\n data-testid=\"repository-node-card\"\n data-repo-name={data.name}\n onClick={(e) => {\n e.stopPropagation();\n data.onClick?.();\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n data.onClick?.();\n }\n }}\n className={cn(\n 'nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm transition-[border-color,box-shadow] duration-200 dark:bg-neutral-800/80',\n selected && 'border-blue-400 dark:border-amber-500/60'\n )}\n >\n {/* Row 1: Repository name + action buttons */}\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <GithubIcon className=\"text-muted-foreground h-5 w-5 shrink-0\" />\n <span data-testid=\"repository-node-name\" className=\"min-w-0 truncate text-sm font-medium\">\n {data.name}\n </span>\n\n <div\n className={cn(\n 'flex shrink-0 items-center gap-2',\n (data.repositoryPath ?? data.onAdd) && 'ms-auto'\n )}\n onClick={(e) => e.stopPropagation()}\n >\n {data.repositoryPath ? (\n <>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"flex items-center\">\n <ActionButton\n label={t('repositoryNode.openInIde')}\n onClick={actions.openInIde}\n loading={actions.ideLoading}\n error={!!actions.ideError}\n icon={Code2}\n iconOnly\n variant=\"ghost\"\n size=\"icon-xs\"\n />\n </span>\n </TooltipTrigger>\n <TooltipContent>{t('repositoryNode.openInIde')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"flex items-center\">\n <ActionButton\n label={t('repositoryNode.openInShell')}\n onClick={actions.openInShell}\n loading={actions.shellLoading}\n error={!!actions.shellError}\n icon={Terminal}\n iconOnly\n variant=\"ghost\"\n size=\"icon-xs\"\n />\n </span>\n </TooltipTrigger>\n <TooltipContent>{t('repositoryNode.openInShell')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"flex items-center\">\n <ActionButton\n label={t('repositoryNode.openFolder')}\n onClick={actions.openFolder}\n loading={actions.folderLoading}\n error={!!actions.folderError}\n icon={FolderOpen}\n iconOnly\n variant=\"ghost\"\n size=\"icon-xs\"\n />\n </span>\n </TooltipTrigger>\n <TooltipContent>{t('repositoryNode.openFolder')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label={t('repositoryNode.chatWithAgent')}\n onClick={(e) => {\n e.stopPropagation();\n if (data.id)\n router.push(\n `/repository/${data.id}/chat` as Parameters<typeof router.push>[0]\n );\n }}\n className=\"nodrag relative cursor-pointer text-violet-500 hover:text-violet-600 dark:text-violet-400 dark:hover:text-violet-300\"\n >\n <MessageSquare className=\"h-3 w-3\" />\n <ChatDotIndicator status={chatTurnStatus} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>{t('repositoryNode.chatWithAgent')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <FeatureSessionsDropdown\n repositoryPath={data.repositoryPath}\n includeWorktrees\n onCreateFromSession={handleCreateFromSession}\n />\n </>\n ) : null}\n\n {data.onAdd ? <div className=\"ms-1.5\" /> : null}\n {data.onAdd ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label={t('repositoryNode.newFeature')}\n data-testid=\"repository-node-add-button\"\n onClick={(e) => {\n e.stopPropagation();\n data.onAdd?.();\n }}\n className={cn(\n 'flex h-6 shrink-0 cursor-pointer items-center gap-0.5 rounded bg-blue-500 px-1.5 text-[11px] font-bold text-white transition-colors hover:bg-blue-600 dark:bg-amber-500 dark:hover:bg-amber-400',\n data.pulseAdd && 'animate-pulse-cta'\n )}\n >\n <Plus className=\"h-3 w-3\" />\n <span className=\"translate-y-px\">{t('repositoryNode.new')}</span>\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{t('repositoryNode.newFeature')}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n </div>\n\n {/* Row 2 & 3: Git info or placeholder */}\n {data.branch ? (\n <>\n {/* Row 2: Branch + behind status */}\n <div\n data-testid=\"repository-node-git-info\"\n className=\"text-muted-foreground border-border/50 border-t px-4 py-2\"\n >\n <div className=\"flex items-center gap-3 text-xs\">\n <span\n className=\"flex items-center gap-1 truncate\"\n data-testid=\"repository-node-branch\"\n >\n <GitBranch className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">{data.branch}</span>\n </span>\n {data.behindCount != null && data.behindCount > 0 ? (\n <span\n className=\"flex shrink-0 items-center gap-1 whitespace-nowrap text-amber-500\"\n data-testid=\"repository-node-behind\"\n >\n <ArrowDown className=\"h-3 w-3 shrink-0\" />\n {t('repositoryNode.behind', { count: data.behindCount })}\n </span>\n ) : null}\n </div>\n </div>\n {/* Row 3: Latest commit */}\n {data.commitMessage ? (\n <div\n data-testid=\"repository-node-commit-info\"\n className=\"text-muted-foreground border-border/50 border-t px-4 py-2\"\n >\n <div className=\"flex items-center gap-2 text-xs\">\n <GitCommitHorizontal className=\"h-3 w-3 shrink-0\" />\n <span className=\"min-w-0 truncate\" data-testid=\"repository-node-commit-message\">\n {data.commitMessage}\n </span>\n {data.committer ? (\n <span\n className=\"text-muted-foreground/70 ms-auto flex shrink-0 items-center gap-1\"\n data-testid=\"repository-node-committer\"\n >\n <User className=\"h-3 w-3 shrink-0\" />\n <span>{data.committer}</span>\n </span>\n ) : null}\n </div>\n </div>\n ) : null}\n </>\n ) : data.gitInfoStatus === 'not-a-repo' ? (\n /* Not a git repo — two rows for consistency with loading/ready states */\n <>\n <div\n data-testid=\"repository-node-not-repo\"\n className=\"text-muted-foreground border-border/50 border-t px-4 py-2\"\n >\n <div className=\"flex items-center gap-2 text-xs\">\n <FolderOpen className=\"h-3 w-3 shrink-0\" />\n <span className=\"min-w-0 truncate opacity-60\">\n {data.repositoryPath ?? 'Unknown path'}\n </span>\n </div>\n </div>\n <div className=\"text-muted-foreground border-border/50 border-t px-4 py-2\">\n <div className=\"flex items-center gap-2 text-xs opacity-40\">\n <GitBranch className=\"h-3 w-3 shrink-0\" />\n <span>{t('repositoryNode.notAGitRepository')}</span>\n </div>\n </div>\n </>\n ) : data.gitInfoStatus !== 'ready' ? (\n /* Loading — show skeleton placeholders for both rows */\n <>\n <div\n data-testid=\"repository-node-git-loading\"\n className=\"border-border/50 border-t px-4 py-2\"\n >\n <div className=\"flex h-4 items-center gap-2 text-xs\">\n <GitBranch className=\"text-muted-foreground h-3 w-3 shrink-0\" />\n <span className=\"bg-muted h-3 w-20 animate-pulse rounded\" />\n </div>\n </div>\n <div className=\"border-border/50 border-t px-4 py-2\">\n <div className=\"flex h-4 items-center gap-2 text-xs\">\n <GitCommitHorizontal className=\"text-muted-foreground h-3 w-3 shrink-0\" />\n <span className=\"bg-muted h-3 w-36 animate-pulse rounded\" />\n </div>\n </div>\n </>\n ) : null}\n\n {/* Row 4: Local dev server — always visible when envDeploy flag is on */}\n {featureFlags.envDeploy && data.repositoryPath ? (\n <div\n data-testid=\"repository-node-dev-preview\"\n className=\"border-border/50 border-t px-4 py-2\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center gap-2 text-xs\">\n {deployAction.deployError ? (\n <span className=\"truncate text-xs text-red-500\">{deployAction.deployError}</span>\n ) : isDeploymentActive ? (\n <>\n <span className=\"me-0.5 inline-block h-2 w-2 shrink-0 rounded-full bg-green-500\" />\n {deployAction.url ? (\n <a\n href={deployAction.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"truncate text-green-700 hover:underline dark:text-green-400\"\n >\n {deployAction.url}\n </a>\n ) : (\n <span className=\"text-muted-foreground\">{t('repositoryNode.starting')}</span>\n )}\n </>\n ) : (\n <span className=\"text-muted-foreground inline-flex items-baseline gap-2\">\n <span>{t('repositoryNode.run')}</span>\n <span className=\"text-muted-foreground/50 text-[10px]\">\n {t('repositoryNode.startLocalEnvironment')}\n </span>\n </span>\n )}\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n 'ms-auto flex items-center',\n !isDeploymentActive &&\n !deployAction.deployError &&\n '[&_button]:text-green-600 [&_button]:hover:text-green-700 dark:[&_button]:text-green-400 dark:[&_button]:hover:text-green-300'\n )}\n >\n <ActionButton\n label={\n deployAction.deployError\n ? t('repositoryNode.retry')\n : isDeploymentActive\n ? t('repositoryNode.stopDevServer')\n : t('repositoryNode.startDevServer')\n }\n onClick={isDeploymentActive ? deployAction.stop : deployAction.deploy}\n loading={deployAction.deployLoading || deployAction.stopLoading}\n error={false}\n icon={\n deployAction.deployError ? RotateCcw : isDeploymentActive ? Square : Play\n }\n iconOnly\n variant=\"ghost\"\n size=\"icon-xs\"\n />\n </span>\n </TooltipTrigger>\n <TooltipContent>\n {isDeploymentActive\n ? t('repositoryNode.stopDevServer')\n : t('repositoryNode.startDevServer')}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n </div>\n ) : null}\n </div>\n\n {/* Source handle — invisible, for edge connections */}\n {data.onAdd || data.showHandles ? (\n <Handle\n type=\"source\"\n position={sourceHandlePos}\n isConnectable={!data.showHandles}\n className=\"opacity-0!\"\n style={{ top: 70 }}\n />\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport { useCallback } from 'react';\nimport { Code2, Terminal, FolderOpen, RefreshCw } from 'lucide-react';\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DrawerTitle, DrawerDescription } from '@/components/ui/drawer';\nimport { Separator } from '@/components/ui/separator';\nimport { ActionButton } from '@/components/common/action-button';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\nimport type { RepositoryNodeData } from './repository-node-config';\nimport { useRepositoryActions } from './use-repository-actions';\n\nexport interface RepositoryDrawerProps {\n data: RepositoryNodeData | null;\n onClose: () => void;\n}\n\nexport function RepositoryDrawer({ data, onClose }: RepositoryDrawerProps) {\n const featureFlags = useFeatureFlags();\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const actions = useRepositoryActions(\n data?.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null\n );\n\n return (\n <BaseDrawer\n open={data !== null}\n onClose={handleClose}\n size=\"md\"\n modal={false}\n data-testid=\"repository-drawer\"\n deployTarget={\n data?.repositoryPath\n ? {\n targetId: data.repositoryPath,\n targetType: 'repository',\n repositoryPath: data.repositoryPath,\n }\n : undefined\n }\n header={\n data ? (\n <div data-testid=\"repository-drawer-header\">\n <DrawerTitle>{data.name}</DrawerTitle>\n {data.repositoryPath ? (\n <DrawerDescription className=\"truncate font-mono text-xs\">\n {data.repositoryPath}\n </DrawerDescription>\n ) : null}\n </div>\n ) : undefined\n }\n >\n {data?.repositoryPath ? (\n <>\n <Separator />\n <div className=\"flex flex-col gap-3 p-4\">\n <div className=\"text-muted-foreground text-xs font-semibold tracking-wider\">\n OPEN WITH\n </div>\n <div className=\"flex flex-col gap-2\">\n <ActionButton\n label=\"Open in IDE\"\n onClick={actions.openInIde}\n loading={actions.ideLoading}\n error={!!actions.ideError}\n icon={Code2}\n variant=\"outline\"\n size=\"sm\"\n />\n <ActionButton\n label=\"Open in Shell\"\n onClick={actions.openInShell}\n loading={actions.shellLoading}\n error={!!actions.shellError}\n icon={Terminal}\n variant=\"outline\"\n size=\"sm\"\n />\n <ActionButton\n label=\"Open Folder\"\n onClick={actions.openFolder}\n loading={actions.folderLoading}\n error={!!actions.folderError}\n icon={FolderOpen}\n variant=\"outline\"\n size=\"sm\"\n />\n </div>\n </div>\n {data.id && featureFlags.gitRebaseSync ? (\n <>\n <Separator />\n <div className=\"flex flex-col gap-3 p-4\">\n <div className=\"text-muted-foreground text-xs font-semibold tracking-wider\">\n GIT OPERATIONS\n </div>\n <div className=\"flex flex-col gap-2\">\n <ActionButton\n label=\"Sync Main\"\n onClick={actions.syncMain}\n loading={actions.syncLoading}\n error={!!actions.syncError}\n icon={RefreshCw}\n variant=\"outline\"\n size=\"sm\"\n />\n {actions.syncError ? (\n <p className=\"text-destructive text-xs\">{actions.syncError}</p>\n ) : null}\n </div>\n </div>\n </>\n ) : null}\n </>\n ) : null}\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport { BaseEdge, getBezierPath } from '@xyflow/react';\nimport type { EdgeProps } from '@xyflow/react';\n\n/**\n * Custom React Flow edge for parent→child feature dependencies.\n * Uses bezier curves and dashed style matching repo→feature edges.\n */\nexport function DependencyEdge(props: EdgeProps) {\n const [edgePath] = getBezierPath({\n sourceX: props.sourceX,\n sourceY: props.sourceY,\n targetX: props.targetX,\n targetY: props.targetY,\n sourcePosition: props.sourcePosition,\n targetPosition: props.targetPosition,\n });\n\n return (\n <BaseEdge\n id={props.id}\n path={edgePath}\n style={{\n strokeDasharray: '5 5',\n }}\n />\n );\n}\n","'use client';\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { ReactFlow, Background, BackgroundVariant, Panel } from '@xyflow/react';\nimport type { Connection, Edge, NodeChange, OnMoveEnd, Viewport } from '@xyflow/react';\nimport { Plus } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { EmptyState } from '@/components/common/empty-state';\nimport { FeatureNode } from '@/components/common/feature-node';\nimport type { FeatureNodeType, FeatureNodeData } from '@/components/common/feature-node';\nimport { RepositoryNode } from '@/components/common/repository-node';\nimport type { RepositoryNodeType, RepositoryNodeData } from '@/components/common/repository-node';\nimport { DependencyEdge } from './dependency-edge';\n\nexport type CanvasNodeType = FeatureNodeType | RepositoryNodeType;\n\nexport interface FeaturesCanvasProps {\n nodes: CanvasNodeType[];\n edges: Edge[];\n selectedFeatureId?: string | null;\n selectedRepository?: { id: string | null; path: string | null };\n defaultViewport?: Viewport;\n onNodesChange?: (changes: NodeChange<CanvasNodeType>[]) => void;\n onAddFeature?: () => void;\n onNodeClick?: (event: React.MouseEvent, node: CanvasNodeType) => void;\n onPaneClick?: (event: React.MouseEvent) => void;\n onConnect?: (connection: Connection) => void;\n onCanvasDrag?: () => void;\n onMoveEnd?: OnMoveEnd;\n toolbar?: React.ReactNode;\n emptyState?: React.ReactNode;\n}\n\nconst FALLBACK_VIEWPORT: Viewport = { x: 30, y: 30, zoom: 0.85 };\n\nexport function FeaturesCanvas({\n nodes,\n edges,\n selectedFeatureId,\n selectedRepository,\n defaultViewport,\n onNodesChange,\n onAddFeature,\n onConnect,\n onNodeClick,\n onPaneClick,\n onCanvasDrag,\n onMoveEnd,\n toolbar,\n emptyState,\n}: FeaturesCanvasProps) {\n const { t } = useTranslation('web');\n const nodeTypes = useMemo(\n () => ({\n featureNode: FeatureNode,\n repositoryNode: RepositoryNode,\n }),\n []\n );\n\n const edgeTypes = useMemo(\n () => ({\n dependencyEdge: DependencyEdge,\n }),\n []\n );\n\n // Callbacks and showHandles are already injected into node.data by deriveGraph.\n // Apply selectedFeatureId and selectedRepository highlighting here.\n const enrichedNodes = useMemo(() => {\n const hasFeatureSel = selectedFeatureId != null;\n const hasRepoSel =\n selectedRepository != null &&\n (selectedRepository.id != null || selectedRepository.path != null);\n if (!hasFeatureSel && !hasRepoSel) return nodes;\n return nodes.map((node) => {\n if (\n hasFeatureSel &&\n node.type === 'featureNode' &&\n (node.data as FeatureNodeData).featureId === selectedFeatureId\n ) {\n return { ...node, selected: true };\n }\n if (hasRepoSel && node.type === 'repositoryNode') {\n const rd = node.data as RepositoryNodeData;\n const matchById =\n selectedRepository!.id != null &&\n (node.id === selectedRepository!.id || rd.id === selectedRepository!.id);\n const matchByPath =\n selectedRepository!.path != null && rd.repositoryPath === selectedRepository!.path;\n if (matchById || matchByPath) return { ...node, selected: true };\n }\n return node;\n }) as CanvasNodeType[];\n }, [nodes, selectedFeatureId, selectedRepository]);\n\n const isEmpty = nodes.length === 0;\n\n // Track empty→populated transition for exit animation.\n // When isEmpty flips from true to false, keep the overlay mounted\n // and fade it out before removing it from the DOM.\n const [showOverlay, setShowOverlay] = useState(isEmpty);\n const [overlayExiting, setOverlayExiting] = useState(false);\n const prevEmptyRef = useRef(isEmpty);\n\n useEffect(() => {\n if (prevEmptyRef.current && !isEmpty) {\n // Was empty, now populated — start exit animation\n setOverlayExiting(true);\n const timer = setTimeout(() => {\n setShowOverlay(false);\n setOverlayExiting(false);\n }, 300);\n prevEmptyRef.current = isEmpty;\n return () => clearTimeout(timer);\n }\n if (!prevEmptyRef.current && isEmpty) {\n // Was populated, now empty — show overlay immediately\n setShowOverlay(true);\n }\n prevEmptyRef.current = isEmpty;\n }, [isEmpty]);\n\n const fallbackEmptyState =\n isEmpty && !emptyState ? (\n <EmptyState\n title={t('canvas.noFeatures')}\n description={t('canvas.noFeaturesDescription')}\n action={\n <Button onClick={onAddFeature}>\n <Plus className=\"me-2 h-4 w-4\" />\n {t('canvas.newFeature')}\n </Button>\n }\n />\n ) : null;\n\n const overlayContent = emptyState ?? fallbackEmptyState;\n\n return (\n <div\n data-testid={isEmpty ? 'features-canvas-empty' : 'features-canvas'}\n data-no-drawer-close\n className=\"dark:bg-background pointer-events-auto relative h-full w-full bg-[#f6f7f8]\"\n >\n <ReactFlow\n nodes={enrichedNodes}\n edges={edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onConnect={onConnect}\n onNodesChange={onNodesChange}\n onNodeClick={onNodeClick}\n onPaneClick={onPaneClick}\n onMoveStart={onCanvasDrag}\n onMoveEnd={onMoveEnd}\n defaultViewport={defaultViewport ?? FALLBACK_VIEWPORT}\n nodesDraggable={false}\n nodesConnectable={false}\n elementsSelectable={false}\n proOptions={{ hideAttribution: true }}\n className=\"[&_.react-flow__pane]:!cursor-default\"\n >\n <Background\n variant={BackgroundVariant.Dots}\n gap={24}\n size={1}\n color=\"#b8bcc4\"\n className=\"dark:[&_circle]:!fill-white/[0.1]\"\n />\n {!isEmpty && toolbar ? (\n <Panel position=\"top-right\" className=\"!me-3 !mt-3\">\n {toolbar}\n </Panel>\n ) : null}\n </ReactFlow>\n {showOverlay && overlayContent ? (\n <div\n className={cn(\n 'pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300',\n overlayExiting ? 'opacity-0' : 'animate-in fade-in opacity-100 duration-200'\n )}\n >\n <div className=\"pointer-events-auto h-full w-full\">{overlayContent}</div>\n </div>\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport { useCallback } from 'react';\nimport { useReactFlow } from '@xyflow/react';\nimport type { Viewport } from '@xyflow/react';\nimport { Eye, EyeOff, ZoomIn, ZoomOut, Maximize, RotateCcw } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\n\nexport interface CanvasToolbarProps {\n showArchived: boolean;\n onToggleArchived: () => void;\n onResetViewport?: () => Viewport;\n}\n\nexport function CanvasToolbar({\n showArchived,\n onToggleArchived,\n onResetViewport,\n}: CanvasToolbarProps) {\n const { t } = useTranslation('web');\n const { zoomIn, zoomOut, fitView, setViewport } = useReactFlow();\n\n const handleZoomIn = useCallback(() => {\n zoomIn({ duration: 200 });\n }, [zoomIn]);\n\n const handleZoomOut = useCallback(() => {\n zoomOut({ duration: 200 });\n }, [zoomOut]);\n\n const handleFitView = useCallback(() => {\n fitView({ duration: 400, padding: 0.3 });\n }, [fitView]);\n\n const handleReset = useCallback(() => {\n if (onResetViewport) {\n const viewport = onResetViewport();\n setViewport(viewport, { duration: 400 });\n }\n }, [onResetViewport, setViewport]);\n\n return (\n <div className=\"bg-background flex items-center gap-1 rounded-xl border px-2 py-1.5 shadow-md dark:bg-neutral-900\">\n {/* View controls */}\n <ToolbarButton\n onClick={onToggleArchived}\n title={showArchived ? t('canvas.hideArchived') : t('canvas.showArchived')}\n active={showArchived}\n label={showArchived ? t('canvas.hideArchivedLabel') : t('canvas.showArchivedLabel')}\n >\n {showArchived ? <Eye className=\"h-4 w-4\" /> : <EyeOff className=\"h-4 w-4\" />}\n </ToolbarButton>\n\n <div className=\"bg-border mx-1 h-5 w-px\" />\n\n {/* Zoom controls */}\n <ToolbarButton onClick={handleZoomOut} title={t('canvas.zoomOut')}>\n <ZoomOut className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton onClick={handleZoomIn} title={t('canvas.zoomIn')}>\n <ZoomIn className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton onClick={handleFitView} title={t('canvas.fitView')}>\n <Maximize className=\"h-4 w-4\" />\n </ToolbarButton>\n {onResetViewport ? (\n <ToolbarButton onClick={handleReset} title={t('canvas.resetView')}>\n <RotateCcw className=\"h-4 w-4\" />\n </ToolbarButton>\n ) : null}\n </div>\n );\n}\n\n// ── Internal button ──────────────────────────────────────────────────────\n\nfunction ToolbarButton({\n children,\n onClick,\n title,\n label,\n active,\n}: {\n children: React.ReactNode;\n onClick: () => void;\n title: string;\n label?: string;\n active?: boolean;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={title}\n title={title}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-xs font-medium transition-colors',\n 'hover:bg-accent hover:text-accent-foreground',\n active ? 'text-primary bg-primary/10' : 'text-muted-foreground'\n )}\n >\n {children}\n {label ? <span>{label}</span> : null}\n </button>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { Plus, LoaderCircle, X } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\n\nexport interface FloatingActionButtonAction {\n /** Unique key for the action. */\n id: string;\n /** Accessible label shown next to the icon. */\n label: string;\n /** Lucide icon component. */\n icon: React.ReactNode;\n /** Called when the action is clicked. */\n onClick: () => void;\n /** Whether the action is currently loading. */\n loading?: boolean;\n /** Whether the action is disabled. */\n disabled?: boolean;\n}\n\nexport interface FloatingActionButtonProps {\n /** Action items shown when the FAB is expanded. */\n actions: FloatingActionButtonAction[];\n /** Additional CSS classes for the wrapper. */\n className?: string;\n /** Inline styles for the wrapper (e.g. dynamic positioning). */\n style?: React.CSSProperties;\n}\n\n/** Stagger delay between each item animation in ms. */\nconst STAGGER_MS = 50;\n\n/** Total animation duration in ms. */\nconst DURATION_MS = 250;\n\n/**\n * (+) FAB with expandable action menu.\n * Renders inline — parent controls positioning.\n */\nexport function FloatingActionButton({ actions, className, style }: FloatingActionButtonProps) {\n const { t } = useTranslation('web');\n const [open, setOpen] = useState(false);\n\n // Close on Escape key\n useEffect(() => {\n if (!open) return;\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [open]);\n\n return (\n <>\n {/* Invisible click-outside catcher */}\n {open ? (\n <div\n data-testid=\"fab-overlay\"\n className=\"fixed inset-0 z-40\"\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n />\n ) : null}\n\n <div\n data-testid=\"floating-action-button\"\n className={cn('relative z-50', className)}\n style={style}\n >\n {/* Action chips — expand upward */}\n <div\n className={cn(\n 'absolute start-0 bottom-[calc(100%+24px)] flex flex-col items-start gap-2',\n !open && 'pointer-events-none'\n )}\n data-testid=\"fab-actions\"\n >\n {actions.map((action, i) => {\n const openDelay = (actions.length - 1 - i) * STAGGER_MS;\n\n return (\n <button\n key={action.id}\n data-testid={`fab-action-${action.id}`}\n aria-label={action.label}\n disabled={action.disabled ?? action.loading}\n className={cn(\n 'flex h-10 items-center gap-2.5 rounded-full px-4',\n 'bg-background text-foreground shadow-md',\n 'border-border border',\n 'hover:bg-accent hover:text-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'text-sm font-medium whitespace-nowrap',\n open ? 'translate-y-0 opacity-100' : 'pointer-events-none translate-y-0 opacity-0'\n )}\n style={{\n transition: `opacity ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms, transform ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms`,\n }}\n onClick={() => {\n action.onClick();\n setOpen(false);\n }}\n >\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n {action.loading ? <LoaderCircle className=\"h-4 w-4 animate-spin\" /> : action.icon}\n </span>\n <span>{action.label}</span>\n </button>\n );\n })}\n </div>\n\n {/* FAB trigger */}\n <Button\n size=\"icon\"\n data-testid=\"fab-trigger\"\n aria-label={open ? t('fab.closeActions') : t('fab.createNew')}\n className={cn(\n 'relative h-14 w-14 rounded-full shadow-lg',\n 'bg-indigo-500 text-white hover:bg-indigo-400 dark:bg-indigo-500 dark:hover:bg-indigo-400',\n 'transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95'\n )}\n onClick={() => setOpen((prev) => !prev)}\n >\n <Plus\n className={cn(\n 'absolute h-7 w-7 stroke-[2.5] transition-all',\n open ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100'\n )}\n style={{ transitionDuration: `${DURATION_MS}ms` }}\n />\n <X\n className={cn(\n 'absolute h-6 w-6 stroke-[2.5] transition-all',\n open ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0'\n )}\n style={{ transitionDuration: `${DURATION_MS}ms` }}\n />\n </Button>\n </div>\n </>\n );\n}\n","'use client';\n\nimport { usePathname } from 'next/navigation';\n\n/**\n * Extracts the selected feature ID from the current URL path.\n * Returns `null` when no feature drawer route is active.\n */\nexport function useSelectedFeatureId(): string | null {\n const pathname = usePathname();\n const match = pathname.match(/^\\/feature\\/([^/]+)/);\n return match?.[1] ?? null;\n}\n","'use client';\n\nimport { usePathname, useSearchParams } from 'next/navigation';\n\n/**\n * Extracts the selected repository context from the current URL.\n * Returns `{ id, path }` — either or both may be set depending on the route.\n *\n * Matches:\n * - `/repository/<id>` → id is set\n * - `/create?repo=<path>` → path is set\n */\nexport function useSelectedRepository(): { id: string | null; path: string | null } {\n const pathname = usePathname();\n const searchParams = useSearchParams();\n\n const repoIdMatch = pathname.match(/^\\/repository\\/([^/]+)/);\n const id = repoIdMatch?.[1] ?? null;\n\n const isCreate = pathname.startsWith('/create');\n const path = isCreate ? searchParams.get('repo') : null;\n\n return { id, path };\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { Viewport } from '@xyflow/react';\n\nexport type { Viewport } from '@xyflow/react';\n\nexport const STORAGE_KEY = 'shipit-ai-canvas-viewport';\nexport const DEBOUNCE_MS = 500;\n\nexport const DEFAULT_VIEWPORT: Viewport = { x: 30, y: 30, zoom: 0.85 };\n\nexport interface UseViewportPersistenceResult {\n defaultViewport: Viewport;\n onMoveEnd: (viewport: Viewport) => void;\n resetViewport: () => Viewport;\n}\n\nfunction isValidViewport(value: unknown): value is Viewport {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const v = value as Record<string, unknown>;\n return (\n typeof v.x === 'number' &&\n typeof v.y === 'number' &&\n typeof v.zoom === 'number' &&\n Number.isFinite(v.x) &&\n Number.isFinite(v.y) &&\n Number.isFinite(v.zoom) &&\n v.zoom > 0\n );\n}\n\nfunction readViewport(): Viewport {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (raw == null) return DEFAULT_VIEWPORT;\n const parsed: unknown = JSON.parse(raw);\n return isValidViewport(parsed) ? parsed : DEFAULT_VIEWPORT;\n } catch {\n return DEFAULT_VIEWPORT;\n }\n}\n\nexport function useViewportPersistence(): UseViewportPersistenceResult {\n const defaultViewport = useRef<Viewport>(readViewport()).current;\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (timerRef.current != null) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n const onMoveEnd = useCallback((viewport: Viewport) => {\n if (timerRef.current != null) {\n clearTimeout(timerRef.current);\n }\n timerRef.current = setTimeout(() => {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(viewport));\n } catch {\n // Silently ignore localStorage errors (quota exceeded, private browsing, etc.)\n }\n }, DEBOUNCE_MS);\n }, []);\n\n const resetViewport = useCallback((): Viewport => {\n try {\n localStorage.removeItem(STORAGE_KEY);\n } catch {\n // Silently ignore localStorage errors\n }\n return DEFAULT_VIEWPORT;\n }, []);\n\n return { defaultViewport, onMoveEnd, resetViewport };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"006d6a821da9c521f994872f6661ea6406703cf09d\":{\"name\":\"isAgentSetupComplete\"}},\"src/presentation/web/app/actions/agent-setup-flag.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"006d6a821da9c521f994872f6661ea6406703cf09d\",callServer,void 0,findSourceMapURL,\"isAgentSetupComplete\");export{$$RSC_SERVER_ACTION_0 as isAgentSetupComplete};","/* __next_internal_action_entry_do_not_use__ [{\"0060e775107df16b7b19d6e47a7415dd6aedad7619\":{\"name\":\"checkAgentAuth\"}},\"src/presentation/web/app/actions/check-agent-auth.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"0060e775107df16b7b19d6e47a7415dd6aedad7619\",callServer,void 0,findSourceMapURL,\"checkAgentAuth\");export{$$RSC_SERVER_ACTION_0 as checkAgentAuth};","'use client';\n\nimport type { ReactNode } from 'react';\nimport { ReactFlowProvider } from '@xyflow/react';\nimport type { Edge } from '@xyflow/react';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport { SessionsProvider } from '@/hooks/sessions-provider';\nimport { ControlCenterInner } from './control-center-inner';\n\nexport interface ControlCenterProps {\n initialNodes: CanvasNodeType[];\n initialEdges: Edge[];\n /** Drawer content rendered by the @drawer parallel route slot. */\n drawer?: ReactNode;\n}\n\nexport function ControlCenter({ initialNodes, initialEdges, drawer }: ControlCenterProps) {\n return (\n <div data-testid=\"control-center\" className=\"h-full w-full\">\n <SessionsProvider>\n <ReactFlowProvider>\n <ControlCenterInner initialNodes={initialNodes} initialEdges={initialEdges} />\n </ReactFlowProvider>\n </SessionsProvider>\n <div key=\"drawer\">{drawer}</div>\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"009df0ec5808a1a338bfdec3c05ddefa2e7406617a\":{\"name\":\"checkToolStatus\"}},\"src/presentation/web/app/actions/check-tool-status.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"009df0ec5808a1a338bfdec3c05ddefa2e7406617a\",callServer,void 0,findSourceMapURL,\"checkToolStatus\");export{$$RSC_SERVER_ACTION_0 as checkToolStatus};","'use client';\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport { ChevronLeft, LoaderCircle, TriangleAlert } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { getAllAgentModels } from '@/app/actions/get-all-agent-models';\nimport type { AgentModelGroup } from '@/app/actions/get-all-agent-models';\nimport { updateAgentAndModel } from '@/app/actions/update-agent-and-model';\nimport { checkToolStatus } from '@/app/actions/check-tool-status';\nimport { getAgentTypeIcon } from '@/components/common/feature-node/agent-type-icons';\nimport { getModelMeta } from '@/lib/model-metadata';\nimport { cn } from '@/lib/utils';\n\nexport interface WelcomeAgentSetupProps {\n onComplete: () => void;\n className?: string;\n}\n\ntype SetupStep = 'select-agent' | 'select-model';\n\nconst STEPS: SetupStep[] = ['select-agent', 'select-model'];\n\nexport function WelcomeAgentSetup({ onComplete, className }: WelcomeAgentSetupProps) {\n const { t } = useTranslation('web');\n const [groups, setGroups] = useState<AgentModelGroup[]>([]);\n const [loading, setLoading] = useState(true);\n const [step, setStep] = useState<SetupStep>('select-agent');\n const [selectedAgent, setSelectedAgent] = useState<string | null>(null);\n const [saving, setSaving] = useState(false);\n const [transitioning, setTransitioning] = useState(false);\n const [visible, setVisible] = useState(true);\n const [ghInstalled, setGhInstalled] = useState(true);\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(() => {\n getAllAgentModels()\n .then(setGroups)\n .finally(() => setLoading(false));\n checkToolStatus()\n .then((status) => setGhInstalled(status.gh.installed))\n .catch(() => undefined);\n }, []);\n\n const activeGroup = selectedAgent ? groups.find((g) => g.agentType === selectedAgent) : null;\n\n const transitionTo = useCallback((nextStep: SetupStep, setup?: () => void) => {\n setTransitioning(true);\n setVisible(false);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n setup?.();\n setStep(nextStep);\n requestAnimationFrame(() => {\n setVisible(true);\n setTransitioning(false);\n });\n }, 150);\n }, []);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const saveAndComplete = useCallback(\n async (agentType: string, model: string | null) => {\n setSaving(true);\n try {\n await updateAgentAndModel(agentType, model);\n // Fade out the entire wizard before handing off to the next view\n setVisible(false);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n onComplete();\n }, 200);\n } catch {\n setSaving(false);\n }\n },\n [onComplete]\n );\n\n const handleAgentSelect = useCallback(\n (agentType: string) => {\n const group = groups.find((g) => g.agentType === agentType);\n if (group && group.models.length > 0) {\n transitionTo('select-model', () => {\n setSelectedAgent(agentType);\n });\n } else {\n saveAndComplete(agentType, null);\n }\n },\n [groups, transitionTo, saveAndComplete]\n );\n\n const handleModelSelect = useCallback(\n (model: string) => {\n if (!selectedAgent) return;\n saveAndComplete(selectedAgent, model);\n },\n [selectedAgent, saveAndComplete]\n );\n\n const handleBack = useCallback(() => {\n if (step === 'select-model') {\n transitionTo('select-agent', () => {\n setSelectedAgent(null);\n });\n }\n }, [step, transitionTo]);\n\n if (loading) {\n return (\n <div\n data-testid=\"welcome-agent-setup\"\n className={cn('flex flex-col items-center justify-center gap-4', className)}\n >\n <LoaderCircle className=\"text-muted-foreground h-5 w-5 animate-spin\" />\n <p className=\"text-muted-foreground text-sm\">{t('welcome.loadingAgents')}</p>\n </div>\n );\n }\n\n const stepIndex = STEPS.indexOf(step);\n\n // Dynamic hero text per step\n const heroTitle = step === 'select-agent' ? t('welcome.chooseAgent') : t('welcome.pickModel');\n\n const heroSubtitle =\n step === 'select-agent'\n ? t('welcome.selectAgentSubtitle')\n : activeGroup\n ? t('welcome.chooseModelSubtitle', { label: activeGroup.label })\n : '';\n\n return (\n <div\n data-testid=\"welcome-agent-setup\"\n className={cn('flex w-full flex-col items-center', className)}\n >\n {/* Step indicator — stays visible across transitions */}\n <div className=\"mb-8 flex w-full max-w-xs items-center gap-1.5\">\n {STEPS.map((s, i) => (\n <div\n key={s}\n className={cn(\n 'h-[3px] flex-1 rounded-full transition-colors duration-300',\n i <= stepIndex ? 'bg-foreground/60' : 'bg-muted'\n )}\n />\n ))}\n </div>\n\n {/* Hero + content — all fade together on step transitions */}\n <div\n className={cn(\n 'flex w-full flex-col items-center transition-opacity duration-200',\n visible && !transitioning ? 'opacity-100' : 'opacity-0'\n )}\n >\n <h1 className=\"text-foreground/90 text-center text-5xl font-extralight tracking-tight\">\n {heroTitle}\n </h1>\n <p className=\"text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light\">\n {heroSubtitle}\n </p>\n\n {step === 'select-agent' && !ghInstalled && (\n <div\n data-testid=\"gh-cli-notice\"\n className=\"mt-5 flex items-start gap-2 rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 dark:border-amber-900 dark:bg-amber-950/40\"\n >\n <TriangleAlert className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-500\" />\n <p className=\"text-sm leading-relaxed text-amber-800 dark:text-amber-300\">\n <span className=\"font-medium\">{t('welcome.ghCliRequired')}</span>{' '}\n {t('welcome.ghCliRequiredText')}{' '}\n <a\n href=\"https://cli.github.com/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline underline-offset-2 hover:text-amber-900 dark:hover:text-amber-200\"\n >\n {t('welcome.installHere')}\n </a>\n .\n </p>\n </div>\n )}\n\n <div className=\"mt-8 flex w-full flex-col items-center\">\n {/* Step 1: Agent selection — horizontal grid */}\n {step === 'select-agent' && (\n <div\n data-testid=\"agent-list\"\n className=\"grid w-full max-w-lg gap-3\"\n style={{\n gridTemplateColumns: `repeat(${Math.min(groups.length, 4)}, minmax(0, 1fr))`,\n }}\n >\n {groups.map((group) => {\n const GroupIcon = getAgentTypeIcon(group.agentType);\n return (\n <button\n key={group.agentType}\n type=\"button\"\n disabled={saving}\n data-testid={`agent-option-${group.agentType}`}\n className=\"border-border hover:bg-accent hover:border-foreground/20 flex cursor-pointer flex-col items-center gap-3 rounded-2xl border px-4 py-5 transition-all duration-150 active:scale-[0.97] disabled:opacity-50\"\n onClick={() => handleAgentSelect(group.agentType)}\n >\n <GroupIcon className=\"text-foreground/70 h-7 w-7\" />\n <span className=\"text-sm font-medium\">{group.label}</span>\n </button>\n );\n })}\n </div>\n )}\n\n {/* Step 2: Model selection — horizontal grid */}\n {step === 'select-model' && activeGroup ? (\n <div\n data-testid=\"model-list\"\n className=\"flex w-full max-w-lg flex-col items-center gap-4\"\n >\n <button\n type=\"button\"\n disabled={saving}\n className=\"text-muted-foreground hover:text-foreground flex cursor-pointer items-center gap-1.5 self-start text-sm transition-colors\"\n onClick={handleBack}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n {t('welcome.back')}\n </button>\n <div\n className=\"grid w-full gap-3\"\n style={{\n gridTemplateColumns: `repeat(${Math.min(activeGroup.models.length, 3)}, minmax(0, 1fr))`,\n }}\n >\n {activeGroup.models.map((m) => {\n const meta = getModelMeta(m.id);\n return (\n <button\n key={m.id}\n type=\"button\"\n disabled={saving}\n data-testid={`model-option-${m.id}`}\n className=\"border-border hover:bg-accent hover:border-foreground/20 flex cursor-pointer flex-col items-center gap-2 rounded-2xl border px-4 py-5 text-center transition-all duration-150 active:scale-[0.97] disabled:opacity-50\"\n onClick={() => handleModelSelect(m.id)}\n >\n <span className=\"text-sm font-medium\">\n {meta.displayName || m.displayName}\n </span>\n <span className=\"text-muted-foreground text-xs leading-tight\">\n {meta.description || m.description}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport {\n FolderOpen,\n Copy,\n Check,\n LoaderCircle,\n CircleCheck,\n CircleAlert,\n Terminal,\n ChevronDown,\n ExternalLink,\n} from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { pickFolder } from '@/components/common/add-repository-button/pick-folder';\nimport { ReactFileManagerDialog } from '@/components/common/react-file-manager-dialog';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\nimport { isAgentSetupComplete } from '@/app/actions/agent-setup-flag';\nimport { checkAgentAuth } from '@/app/actions/check-agent-auth';\nimport type { AgentAuthStatus } from '@/app/actions/check-agent-auth';\nimport { checkToolStatus } from '@/app/actions/check-tool-status';\nimport type { ToolStatusResult, ToolStatusEntry } from '@/app/actions/check-tool-status';\nimport { WelcomeAgentSetup } from './welcome-agent-setup';\n\nexport interface ControlCenterEmptyStateProps {\n onRepositorySelect?: (path: string) => void;\n className?: string;\n}\n\nconst commands = ['cd ~/my-repo', 'shipit-ai feat new \"sleek dashboard\"'];\n\nexport function ControlCenterEmptyState({\n onRepositorySelect,\n className,\n}: ControlCenterEmptyStateProps) {\n const { t } = useTranslation('web');\n const [copied, setCopied] = useState(false);\n const [loading, setLoading] = useState(false);\n const [showReactPicker, setShowReactPicker] = useState(false);\n const [agentReady, setAgentReady] = useState<boolean | null>(null);\n const [authStatus, setAuthStatus] = useState<AgentAuthStatus | null>(null);\n const [cliExpanded, setCliExpanded] = useState(false);\n const [toolStatus, setToolStatus] = useState<ToolStatusResult | null>(null);\n const { reactFileManager: useReactFileManager } = useFeatureFlags();\n\n useEffect(() => {\n isAgentSetupComplete().then((done) => {\n setAgentReady(done);\n });\n }, []);\n\n useEffect(() => {\n if (!agentReady) return;\n checkAgentAuth().then(setAuthStatus);\n checkToolStatus().then(setToolStatus);\n }, [agentReady]);\n\n async function handlePickerClick() {\n if (loading) return;\n\n if (useReactFileManager) {\n setShowReactPicker(true);\n return;\n }\n\n setLoading(true);\n try {\n const path = await pickFolder();\n if (path) {\n onRepositorySelect?.(path);\n }\n } catch {\n // Native picker failed — fall back to React file manager\n setShowReactPicker(true);\n } finally {\n setLoading(false);\n }\n }\n\n function handleReactPickerSelect(path: string | null) {\n if (path) {\n onRepositorySelect?.(path);\n }\n setShowReactPicker(false);\n }\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(commands.join('\\n'));\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, []);\n\n const handleAgentSetupComplete = useCallback(() => {\n setAgentReady(true);\n }, []);\n\n const handleRetryAuth = useCallback(() => {\n setAuthStatus(null);\n checkAgentAuth().then(setAuthStatus);\n }, []);\n\n if (agentReady === null) return null;\n\n return (\n <div\n data-testid=\"control-center-empty-state\"\n className={cn(\n 'relative flex h-full w-full flex-col items-center justify-center px-8',\n className\n )}\n >\n {/* Vertically centered content */}\n {!agentReady ? (\n /* Agent setup wizard — owns its own hero */\n <WelcomeAgentSetup onComplete={handleAgentSetupComplete} />\n ) : (\n /* Repository step — fade in to match wizard transitions */\n <div className=\"animate-in fade-in flex w-full max-w-md flex-col items-center duration-300\">\n <h1 className=\"text-foreground/90 text-center text-5xl font-extralight tracking-tight\">\n {t('emptyState.addProject')}\n </h1>\n <p className=\"text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light\">\n {t('emptyState.addProjectDescription')}\n <br />\n {t('emptyState.addProjectDescriptionLine2')}\n </p>\n\n {/* Status checklist */}\n <div className=\"mt-8 flex w-full flex-col gap-3\">\n <AgentAuthBanner status={authStatus} onRetry={handleRetryAuth} />\n <ToolStatusRow\n label={t('emptyState.git')}\n status={toolStatus?.git ?? null}\n missingHint={t('emptyState.gitRequired')}\n />\n <ToolStatusRow\n label={t('emptyState.githubCli')}\n status={toolStatus?.gh ?? null}\n missingHint={t('emptyState.githubCliRequired')}\n />\n </div>\n {/* Primary CTA */}\n <button\n type=\"button\"\n data-testid=\"empty-state-add-repository\"\n onClick={handlePickerClick}\n disabled={loading}\n className=\"bg-foreground text-background hover:bg-foreground/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-medium shadow-lg transition-all duration-200 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50\"\n >\n {loading ? (\n <LoaderCircle className=\"h-5 w-5 animate-spin\" />\n ) : (\n <FolderOpen className=\"h-5 w-5\" />\n )}\n {loading ? t('emptyState.opening') : t('emptyState.chooseFolder')}\n </button>\n\n {/* Subtitle under CTA */}\n <p className=\"text-muted-foreground/60 mt-3 text-center text-sm\">\n {t('emptyState.folderHint')}\n </p>\n </div>\n )}\n\n {/* CLI toggle — anchored to bottom, doesn't shift centered content */}\n {agentReady ? (\n <div\n className=\"absolute bottom-8 flex flex-col items-center\"\n style={{\n animationDelay: '400ms',\n animationDuration: '600ms',\n animationFillMode: 'both',\n }}\n >\n <button\n type=\"button\"\n onClick={() => setCliExpanded(!cliExpanded)}\n className=\"text-muted-foreground hover:text-foreground flex cursor-pointer items-center gap-1.5 transition-colors duration-200\"\n >\n <Terminal className=\"h-3.5 w-3.5\" />\n <span className=\"text-sm\">{t('emptyState.orUseCli')}</span>\n <ChevronDown\n className={cn(\n 'h-3.5 w-3.5 transition-transform duration-200',\n cliExpanded ? '' : 'rotate-180'\n )}\n />\n </button>\n\n {cliExpanded ? (\n <div className=\"animate-in fade-in slide-in-from-top-1 mt-3 w-80 duration-200\">\n <div\n data-testid=\"cli-code-block\"\n className=\"relative rounded-xl bg-zinc-900 px-5 py-4 font-mono text-[13px] leading-relaxed text-zinc-400\"\n >\n <button\n type=\"button\"\n data-testid=\"cli-code-block-copy\"\n onClick={handleCopy}\n className=\"absolute top-3 right-3 cursor-pointer rounded-md p-1.5 text-zinc-600 transition-colors hover:bg-zinc-800 hover:text-zinc-300\"\n aria-label={t('emptyState.copyCommands')}\n >\n {copied ? (\n <Check className=\"h-3.5 w-3.5 text-emerald-400\" />\n ) : (\n <Copy className=\"h-3.5 w-3.5\" />\n )}\n </button>\n <div className=\"space-y-1\">\n {commands.map((cmd) => (\n <div key={cmd} className=\"whitespace-nowrap\">\n <span className=\"text-zinc-600 select-none\">$ </span>\n <span className=\"text-zinc-300\">{cmd}</span>\n </div>\n ))}\n </div>\n </div>\n </div>\n ) : null}\n </div>\n ) : null}\n <ReactFileManagerDialog\n open={showReactPicker}\n onOpenChange={(open) => {\n if (!open) setShowReactPicker(false);\n }}\n onSelect={handleReactPickerSelect}\n />\n </div>\n );\n}\n\n/** Status row for the AI agent (Claude Code, etc.) */\nfunction AgentAuthBanner({\n status,\n onRetry,\n}: {\n status: AgentAuthStatus | null;\n onRetry: () => void;\n}) {\n const { t } = useTranslation('web');\n\n if (!status) {\n return (\n <ChecklistRow\n icon={<LoaderCircle className=\"text-muted-foreground/50 h-4 w-4 animate-spin\" />}\n >\n <span className=\"text-muted-foreground/50 text-sm\">{t('emptyState.checkingSetup')}</span>\n </ChecklistRow>\n );\n }\n\n if (status.installed && status.authenticated) {\n return (\n <ChecklistRow icon={<CircleCheck className=\"h-4 w-4 text-emerald-500\" />}>\n <span className=\"text-sm text-emerald-600 dark:text-emerald-400\">\n {t('emptyState.ready', { label: status.label })}\n </span>\n </ChecklistRow>\n );\n }\n\n if (!status.installed) {\n return (\n <ChecklistRow icon={<CircleAlert className=\"h-4 w-4 text-amber-500\" />}>\n <span className=\"text-sm font-medium text-amber-600 dark:text-amber-400\">\n {t('emptyState.notInstalled', { label: status.label })}\n </span>\n {status.installCommand ? <CopyableCommand command={status.installCommand} /> : null}\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400\"\n >\n {t('emptyState.reCheck')}\n </button>\n </ChecklistRow>\n );\n }\n\n return (\n <ChecklistRow icon={<CircleAlert className=\"h-4 w-4 text-amber-500\" />}>\n <span className=\"text-sm font-medium text-amber-600 dark:text-amber-400\">\n {t('emptyState.needsAuth', { label: status.label })}\n </span>\n {status.authCommand ? <CopyableCommand command={status.authCommand} /> : null}\n <div className=\"flex items-center gap-3\">\n {status.binaryName ? (\n <button\n type=\"button\"\n data-testid=\"auth-banner-open-terminal\"\n onClick={async () => {\n try {\n const toolId =\n status.agentType === 'claude-code' ? 'claude-code' : status.agentType;\n await fetch(`/api/tools/${toolId}/launch`, { method: 'POST' });\n } catch {\n /* best effort */\n }\n }}\n className=\"flex items-center gap-1 text-xs font-medium text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400\"\n >\n <Terminal className=\"h-3 w-3\" />\n {t('emptyState.open', { label: status.label })}\n </button>\n ) : null}\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400\"\n >\n {t('emptyState.reCheck')}\n </button>\n </div>\n </ChecklistRow>\n );\n}\n\n/** Status row for system tools (git, gh) */\nfunction ToolStatusRow({\n label,\n status,\n missingHint,\n}: {\n label: string;\n status: ToolStatusEntry | null;\n missingHint: string;\n}) {\n const { t } = useTranslation('web');\n\n if (!status) {\n return (\n <ChecklistRow\n icon={<LoaderCircle className=\"text-muted-foreground/50 h-4 w-4 animate-spin\" />}\n >\n <span className=\"text-muted-foreground/50 text-sm\">\n {t('emptyState.checking', { label })}\n </span>\n </ChecklistRow>\n );\n }\n\n if (status.installed) {\n return (\n <ChecklistRow icon={<CircleCheck className=\"h-4 w-4 text-emerald-500\" />}>\n <span className=\"flex items-baseline gap-2\">\n <span className=\"text-sm text-emerald-600 dark:text-emerald-400\">\n {t('emptyState.ready', { label })}\n </span>\n {status.version ? (\n <span className=\"text-muted-foreground/40 text-xs\">v{status.version}</span>\n ) : null}\n </span>\n </ChecklistRow>\n );\n }\n\n return (\n <ChecklistRow icon={<CircleAlert className=\"h-4 w-4 text-amber-500\" />}>\n <span className=\"text-sm font-medium text-amber-600 dark:text-amber-400\">\n {t('emptyState.notFound', { label })}\n </span>\n <span className=\"text-muted-foreground/50 text-xs\">{missingHint}</span>\n {status.installCommand ? <CopyableCommand command={status.installCommand} /> : null}\n {status.installUrl ? (\n <a\n href={status.installUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400\"\n >\n {t('emptyState.docs')} <ExternalLink className=\"h-3 w-3\" />\n </a>\n ) : null}\n </ChecklistRow>\n );\n}\n\n/** Checklist row: icon pinned left, children stacked vertically and fill width */\nfunction ChecklistRow({ icon, children }: { icon: React.ReactNode; children: React.ReactNode }) {\n return (\n <div className=\"animate-in fade-in flex items-start gap-2.5\">\n <div className=\"mt-0.5 shrink-0\">{icon}</div>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">{children}</div>\n </div>\n );\n}\n\n/** Compact copyable command block — fills available row width */\nfunction CopyableCommand({ command }: { command: string }) {\n const [copied, setCopied] = useState(false);\n\n return (\n <button\n type=\"button\"\n onClick={async () => {\n await navigator.clipboard.writeText(command);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }}\n className=\"group/cmd flex cursor-pointer items-center justify-between gap-2 rounded-md bg-zinc-100 py-1 ps-2.5 pe-2 text-start transition-colors hover:bg-zinc-200 dark:bg-zinc-800 dark:hover:bg-zinc-700\"\n >\n <code className=\"min-w-0 truncate text-[11px] leading-relaxed text-zinc-600 dark:text-zinc-300\">\n {command}\n </code>\n {copied ? (\n <Check className=\"h-3 w-3 shrink-0 text-emerald-500\" />\n ) : (\n <Copy className=\"h-3 w-3 shrink-0 text-zinc-400 opacity-0 transition-opacity group-hover/cmd:opacity-100\" />\n )}\n </button>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRouter, usePathname } from 'next/navigation';\nimport { Sparkles, FolderPlus, GitBranch } from 'lucide-react';\nimport { GithubIcon } from '@/components/ui/github-icon';\nimport type { Edge, Viewport } from '@xyflow/react';\nimport { useReactFlow } from '@xyflow/react';\nimport { FeaturesCanvas } from '@/components/features/features-canvas';\nimport { CanvasToolbar } from '@/components/features/features-canvas/canvas-toolbar';\nimport type { CanvasNodeType } from '@/components/features/features-canvas';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport {\n FloatingActionButton,\n type FloatingActionButtonAction,\n} from '@/components/common/floating-action-button';\nimport {\n useSidebarFeaturesContext,\n mapNodeStateToSidebarStatus,\n} from '@/hooks/sidebar-features-context';\nimport { useTranslation } from 'react-i18next';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\n\nimport { useSelectedFeatureId } from '@/hooks/use-selected-feature-id';\nimport { useSelectedRepository } from '@/hooks/use-selected-repository';\nimport { useSoundAction } from '@/hooks/use-sound-action';\nimport { useDrawerCloseGuard } from '@/hooks/drawer-close-guard';\nimport { useViewportPersistence } from '@/hooks/use-viewport-persistence';\nimport { useSidebar } from '@/components/ui/sidebar';\nimport { useFabLayout } from '@/hooks/fab-layout-context';\nimport { ControlCenterEmptyState } from './control-center-empty-state';\nimport { useControlCenterState } from './use-control-center-state';\n\nconst AUTO_FOCUS_OPTIONS = {\n maxZoom: 1.0,\n padding: 0.5,\n duration: 500,\n} as const;\n\nconst AUTO_FOCUS_DRAWER_DELAY_MS = 600;\n\ninterface ControlCenterInnerProps {\n initialNodes: CanvasNodeType[];\n initialEdges: Edge[];\n}\n\nexport function ControlCenterInner({ initialNodes, initialEdges }: ControlCenterInnerProps) {\n const { t } = useTranslation('web');\n const router = useRouter();\n const pathname = usePathname();\n const selectedFeatureId = useSelectedFeatureId();\n const selectedRepository = useSelectedRepository();\n const clickSound = useSoundAction('click');\n const { guardedNavigate } = useDrawerCloseGuard();\n const { fitView } = useReactFlow();\n const drawerTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const {\n defaultViewport,\n onMoveEnd: handleViewportChange,\n resetViewport,\n } = useViewportPersistence();\n\n const {\n nodes,\n edges,\n onNodesChange,\n handleConnect,\n handleAddRepository,\n handleArchiveFeature,\n handleDeleteFeature,\n handleRetryFeature,\n handleStartFeature,\n handleStopFeature,\n handleUnarchiveFeature,\n handleDeleteRepository,\n createFeatureNode,\n showArchived,\n setShowArchived,\n setCallbacks,\n } = useControlCenterState(initialNodes, initialEdges);\n\n // Publish sidebar features + repo state to context\n const { setFeatures: setSidebarFeatures, setHasRepositories: setSidebarHasRepos } =\n useSidebarFeaturesContext();\n\n const featureNodes = useMemo(() => nodes.filter((n) => n.type === 'featureNode'), [nodes]);\n\n const sidebarKey = useMemo(() => {\n return featureNodes\n .map((n) => {\n const d = n.data as FeatureNodeData;\n return `${d.featureId}:${d.state}:${d.name}:${d.repositoryPath}`;\n })\n .sort()\n .join(',');\n }, [featureNodes]);\n\n useEffect(() => {\n const sidebarItems = featureNodes\n .map((n) => {\n const d = n.data as FeatureNodeData;\n const status = mapNodeStateToSidebarStatus(d.state);\n if (!status) return null;\n const repoPath = d.repositoryPath ?? '';\n return {\n featureId: d.featureId,\n name: d.name,\n status,\n repositoryPath: repoPath,\n repositoryName: d.repositoryName ?? repoPath.split('/').filter(Boolean).pop() ?? repoPath,\n ...(d.startedAt != null && { startedAt: d.startedAt }),\n ...(d.runtime != null && { duration: d.runtime }),\n ...(d.agentType && { agentType: d.agentType }),\n ...(d.modelId && { modelId: d.modelId }),\n };\n })\n .filter(Boolean) as {\n featureId: string;\n name: string;\n status: 'action-needed' | 'in-progress' | 'done';\n repositoryPath: string;\n repositoryName: string;\n startedAt?: number;\n duration?: string;\n agentType?: string;\n modelId?: string;\n }[];\n\n setSidebarFeatures(sidebarItems);\n }, [sidebarKey, featureNodes, setSidebarFeatures]);\n\n // ── URL-based navigation handlers ────────────────────────────────────\n\n const handleNodeClick = useCallback(\n (event: React.MouseEvent, node: CanvasNodeType) => {\n if (node.type === 'featureNode') {\n const data = node.data as FeatureNodeData;\n if (data.state === 'creating' || data.state === 'deleting') return;\n // Only navigate when the click lands on the card itself, not on\n // overlay buttons (delete, add) or pointer events leaking from dialogs.\n const target = event.target as HTMLElement;\n if (!target.closest('[data-testid=\"feature-node-card\"]')) return;\n guardedNavigate(() => {\n clickSound.play();\n router.push(`/feature/${data.featureId}`);\n });\n }\n },\n [router, clickSound, guardedNavigate]\n );\n\n const handleAddFeature = useCallback(() => {\n clickSound.play();\n router.push('/create');\n }, [router, clickSound]);\n\n const handleAddFeatureToRepo = useCallback(\n (repoNodeId: string) => {\n clickSound.play();\n const node = nodes.find((n) => n.id === repoNodeId);\n const repoPath = (node?.data as { repositoryPath?: string } | undefined)?.repositoryPath;\n if (repoPath) {\n router.push(`/create?repo=${encodeURIComponent(repoPath)}`);\n } else {\n router.push('/create');\n }\n },\n [nodes, router, clickSound]\n );\n\n const handleAddFeatureToFeature = useCallback(\n (featureNodeId: string) => {\n const featureId = featureNodeId.startsWith('feat-') ? featureNodeId.slice(5) : featureNodeId;\n // Find the repo node that owns this feature\n const repoEdge = edges.find((e) => e.target === featureNodeId);\n const repoNode = repoEdge ? nodes.find((n) => n.id === repoEdge.source) : null;\n const repoPath = (repoNode?.data as { repositoryPath?: string } | undefined)?.repositoryPath;\n\n clickSound.play();\n const params = new URLSearchParams();\n if (repoPath) params.set('repo', repoPath);\n params.set('parent', featureId);\n router.push(`/create?${params.toString()}`);\n },\n [nodes, edges, router, clickSound]\n );\n\n const handleRepositoryClick = useCallback(\n (nodeId: string) => {\n const node = nodes.find((n) => n.id === nodeId);\n if (node?.type === 'repositoryNode') {\n const data = node.data as RepositoryNodeData;\n if (data.id) {\n guardedNavigate(() => router.push(`/repository/${data.id}`));\n }\n }\n },\n [nodes, router, guardedNavigate]\n );\n\n // Close all drawers — navigate back to root\n const handleClearDrawers = useCallback(() => {\n if (pathname !== '/') {\n guardedNavigate(() => router.push('/'));\n }\n }, [router, pathname, guardedNavigate]);\n\n // Shared: after adding first repo, center canvas and open create drawer\n const focusAndOpenDrawer = useCallback(\n (repoPath: string) => {\n // Wait for next render so the repo node exists in the DOM\n setTimeout(() => {\n fitView(AUTO_FOCUS_OPTIONS);\n\n // Open the create-feature drawer after the fitView animation completes\n drawerTimerRef.current = setTimeout(() => {\n guardedNavigate(() => router.push(`/create?repo=${encodeURIComponent(repoPath)}`));\n }, AUTO_FOCUS_DRAWER_DELAY_MS);\n }, 0);\n },\n [fitView, guardedNavigate, router]\n );\n\n // Wrapper: add repo + auto-focus if canvas was empty\n const addRepoAndFocus = useCallback(\n (path: string) => {\n const { wasEmpty, repoPath } = handleAddRepository(path);\n if (wasEmpty) {\n focusAndOpenDrawer(repoPath);\n }\n },\n [handleAddRepository, focusAndOpenDrawer]\n );\n\n // Listen for global \"add repository\" events from the top bar button\n useEffect(() => {\n const handler = (e: Event) => {\n const path = (e as CustomEvent<{ path: string }>).detail.path;\n addRepoAndFocus(path);\n };\n window.addEventListener('shipit-ai:add-repository', handler);\n return () => {\n window.removeEventListener('shipit-ai:add-repository', handler);\n if (drawerTimerRef.current != null) {\n clearTimeout(drawerTimerRef.current);\n }\n };\n }, [addRepoAndFocus]);\n\n // Listen for create events from the create drawer (with real feature ID from server)\n useEffect(() => {\n const handler = (e: Event) => {\n const detail = (\n e as CustomEvent<{\n featureId: string;\n name: string;\n description?: string;\n repositoryPath: string;\n parentId?: string;\n }>\n ).detail;\n\n // When a parentId is provided, connect to the parent feature node\n // via a dependency edge instead of the repo node.\n if (detail.parentId) {\n const parentNodeId = `feat-${detail.parentId}`;\n createFeatureNode(\n parentNodeId,\n {\n state: 'creating',\n featureId: detail.featureId,\n name: detail.name,\n description: detail.description,\n repositoryPath: detail.repositoryPath,\n },\n 'dependencyEdge'\n );\n return;\n }\n\n // Find the repo node to connect to\n const repoNode = nodes.find(\n (n) =>\n n.type === 'repositoryNode' &&\n (n.data as { repositoryPath?: string }).repositoryPath === detail.repositoryPath\n );\n\n createFeatureNode(repoNode?.id ?? null, {\n state: 'running',\n featureId: detail.featureId,\n name: detail.name,\n description: detail.description,\n repositoryPath: detail.repositoryPath,\n });\n };\n window.addEventListener('shipit-ai:feature-created', handler);\n return () => window.removeEventListener('shipit-ai:feature-created', handler);\n }, [nodes, createFeatureNode]);\n\n // Listen for delete requests from the feature drawer (fires when the user\n // confirms delete inside the drawer). Delegates to handleDeleteFeature so\n // the canvas gets optimistic state, mutation guard, and node removal.\n useEffect(() => {\n const handler = (e: Event) => {\n const { featureId, cleanup, cascadeDelete, closePr } = (\n e as CustomEvent<{\n featureId: string;\n cleanup?: boolean;\n cascadeDelete?: boolean;\n closePr?: boolean;\n }>\n ).detail;\n handleDeleteFeature(featureId, cleanup, cascadeDelete, closePr);\n };\n window.addEventListener('shipit-ai:feature-delete-requested', handler);\n return () => window.removeEventListener('shipit-ai:feature-delete-requested', handler);\n }, [handleDeleteFeature]);\n\n // Listen for archive requests from the feature drawer.\n useEffect(() => {\n const handler = (e: Event) => {\n const { featureId } = (e as CustomEvent<{ featureId: string }>).detail;\n handleArchiveFeature(featureId);\n };\n window.addEventListener('shipit-ai:feature-archive-requested', handler);\n return () => window.removeEventListener('shipit-ai:feature-archive-requested', handler);\n }, [handleArchiveFeature]);\n\n // Listen for unarchive requests from the feature drawer.\n useEffect(() => {\n const handler = (e: Event) => {\n const { featureId } = (e as CustomEvent<{ featureId: string }>).detail;\n handleUnarchiveFeature(featureId);\n };\n window.addEventListener('shipit-ai:feature-unarchive-requested', handler);\n return () => window.removeEventListener('shipit-ai:feature-unarchive-requested', handler);\n }, [handleUnarchiveFeature]);\n\n // Wire callbacks into derived node data (via ref — no re-render).\n useEffect(() => {\n setCallbacks({\n onNodeAction: handleAddFeatureToFeature,\n onFeatureDelete: handleDeleteFeature,\n onRetryFeature: handleRetryFeature,\n onStartFeature: handleStartFeature,\n onStopFeature: handleStopFeature,\n onArchiveFeature: handleArchiveFeature,\n onUnarchiveFeature: handleUnarchiveFeature,\n onRepositoryAdd: handleAddFeatureToRepo,\n onRepositoryClick: handleRepositoryClick,\n onRepositoryDelete: handleDeleteRepository,\n });\n }, [\n setCallbacks,\n handleAddFeatureToFeature,\n handleArchiveFeature,\n handleDeleteFeature,\n handleRetryFeature,\n handleStartFeature,\n handleStopFeature,\n handleUnarchiveFeature,\n handleAddFeatureToRepo,\n handleRepositoryClick,\n handleDeleteRepository,\n ]);\n\n const handleMoveEnd = useCallback(\n (_event: unknown, viewport: Viewport) => {\n handleViewportChange(viewport);\n },\n [handleViewportChange]\n );\n\n const hasRepositories = nodes.some((n) => n.type === 'repositoryNode');\n\n // Publish repo state to sidebar context so AppShell can hide FAB during onboarding\n useEffect(() => {\n setSidebarHasRepos(hasRepositories);\n }, [hasRepositories, setSidebarHasRepos]);\n\n // Debounced latch: prevent empty-state flicker during brief reconcile gaps\n // (e.g. stale poll momentarily drops repos), but allow the empty state to\n // return after a real delete once repos stay gone past the debounce window.\n const [showCanvas, setShowCanvas] = useState(hasRepositories);\n const latchTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (hasRepositories) {\n // Repos exist — show canvas immediately, cancel any pending unlatch\n if (latchTimerRef.current) {\n clearTimeout(latchTimerRef.current);\n latchTimerRef.current = null;\n }\n setShowCanvas(true);\n } else if (showCanvas) {\n // Repos gone — clear saved viewport so next add starts centered,\n // then wait before showing empty state (debounce stale polls)\n resetViewport();\n latchTimerRef.current = setTimeout(() => {\n setShowCanvas(false);\n latchTimerRef.current = null;\n }, 500);\n }\n return () => {\n if (latchTimerRef.current) clearTimeout(latchTimerRef.current);\n };\n }, [hasRepositories, showCanvas, resetViewport]);\n\n // Pulse the \"+\" button when there's a single repo with no features and the\n // create-feature drawer is not open — draws attention to the next action.\n const isCreateDrawerOpen = pathname.startsWith('/create');\n const displayNodes = useMemo(() => {\n const repoNodes = nodes.filter((n) => n.type === 'repositoryNode');\n const hasFeatures = nodes.some((n) => n.type === 'featureNode');\n const shouldPulse = repoNodes.length === 1 && !hasFeatures && !isCreateDrawerOpen;\n\n if (!shouldPulse) return nodes;\n\n return nodes.map((n) =>\n n.type === 'repositoryNode' ? { ...n, data: { ...n.data, pulseAdd: true } } : n\n );\n }, [nodes, isCreateDrawerOpen]);\n\n const handlePickFolder = useCallback(() => {\n window.dispatchEvent(new CustomEvent('shipit-ai:pick-folder'));\n }, []);\n\n const featureFlags = useFeatureFlags();\n\n // (+) FAB actions — only visible on control center\n const fabActions = useMemo<FloatingActionButtonAction[]>(() => {\n const actions: FloatingActionButtonAction[] = [\n {\n id: 'new-feature',\n label: t('fab.newFeature'),\n icon: <Sparkles className=\"h-4 w-4\" />,\n onClick: () => {\n clickSound.play();\n guardedNavigate(() => router.push('/create'));\n },\n },\n {\n id: 'add-local-repo',\n label: t('fab.localFolder'),\n icon: <FolderPlus className=\"h-4 w-4\" />,\n onClick: handlePickFolder,\n },\n ];\n if (featureFlags.adoptBranch) {\n actions.push({\n id: 'adopt-branch',\n label: t('fab.adoptBranch'),\n icon: <GitBranch className=\"h-4 w-4\" />,\n onClick: () => {\n guardedNavigate(() => router.push('/adopt' as Parameters<typeof router.push>[0]));\n },\n });\n }\n if (featureFlags.githubImport) {\n actions.push({\n id: 'add-github-repo',\n label: t('fab.fromGithub'),\n icon: <GithubIcon className=\"h-4 w-4\" />,\n onClick: () => {\n window.dispatchEvent(new CustomEvent('shipit-ai:open-github-import'));\n },\n });\n }\n return actions;\n }, [\n t,\n clickSound,\n guardedNavigate,\n router,\n handlePickFolder,\n featureFlags.adoptBranch,\n featureFlags.githubImport,\n ]);\n\n const canvasToolbar = (\n <CanvasToolbar\n showArchived={showArchived}\n onToggleArchived={() => setShowArchived(!showArchived)}\n onResetViewport={resetViewport}\n />\n );\n\n return (\n <>\n <FeaturesCanvas\n nodes={showCanvas ? displayNodes : []}\n edges={showCanvas ? edges : []}\n selectedFeatureId={selectedFeatureId}\n selectedRepository={selectedRepository}\n defaultViewport={defaultViewport}\n onNodesChange={onNodesChange}\n onConnect={handleConnect}\n onAddFeature={handleAddFeature}\n onNodeClick={handleNodeClick}\n onPaneClick={handleClearDrawers}\n onMoveEnd={handleMoveEnd}\n toolbar={canvasToolbar}\n emptyState={<ControlCenterEmptyState onRepositorySelect={addRepoAndFocus} />}\n />\n {/* (+) FAB — bottom-left, moves with sidebar */}\n {showCanvas ? <CreateFab actions={fabActions} /> : null}\n </>\n );\n}\n\n/** (+) FAB that tracks sidebar width via CSS var + transition.\n * When fabLayout.swapPosition is true, moves to the end side (right in LTR). */\nfunction CreateFab({ actions }: { actions: FloatingActionButtonAction[] }) {\n const { state } = useSidebar();\n const { i18n } = useTranslation('web');\n const { swapPosition } = useFabLayout();\n const isRtl = i18n.dir() === 'rtl';\n\n // Default: start side (left in LTR), tracking sidebar width\n // Swapped: end side (right in LTR), fixed 32px from edge\n if (swapPosition) {\n const positionStyle: React.CSSProperties = isRtl\n ? {\n left: 'calc(var(--sidebar-width-icon) + 32px)',\n transition: 'left 200ms ease-in-out',\n }\n : { right: '32px', transition: 'right 200ms ease-in-out' };\n\n return (\n <FloatingActionButton actions={actions} className=\"!fixed bottom-6\" style={positionStyle} />\n );\n }\n\n // Sidebar expanded = var(--sidebar-width) = 16rem, collapsed = var(--sidebar-width-icon) = 3rem\n // Position just outside the sidebar edge with 16px gap\n const offset =\n state === 'expanded'\n ? 'calc(var(--sidebar-width) + 32px)'\n : 'calc(var(--sidebar-width-icon) + 32px)';\n\n const positionStyle: React.CSSProperties = isRtl\n ? { right: offset, transition: 'right 200ms ease-in-out' }\n : { left: offset, transition: 'left 200ms ease-in-out' };\n\n return (\n <FloatingActionButton actions={actions} className=\"!fixed bottom-6\" style={positionStyle} />\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ['line', { x1: '21', x2: '16.65', y1: '21', y2: '16.65', key: '13gj7c' }],\n ['line', { x1: '11', x2: '11', y1: '8', y2: '14', key: '1vmskp' }],\n ['line', { x1: '8', x2: '14', y1: '11', y2: '11', key: 'durymu' }],\n];\n\n/**\n * @component @name ZoomIn\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjExIiByPSI4IiAvPgogIDxsaW5lIHgxPSIyMSIgeDI9IjE2LjY1IiB5MT0iMjEiIHkyPSIxNi42NSIgLz4KICA8bGluZSB4MT0iMTEiIHgyPSIxMSIgeTE9IjgiIHkyPSIxNCIgLz4KICA8bGluZSB4MT0iOCIgeDI9IjE0IiB5MT0iMTEiIHkyPSIxMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/zoom-in\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ZoomIn = createLucideIcon('zoom-in', __iconNode);\n\nexport default ZoomIn;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M8 3H5a2 2 0 0 0-2 2v3', key: '1dcmit' }],\n ['path', { d: 'M21 8V5a2 2 0 0 0-2-2h-3', key: '1e4gt3' }],\n ['path', { d: 'M3 16v3a2 2 0 0 0 2 2h3', key: 'wsl5sc' }],\n ['path', { d: 'M16 21h3a2 2 0 0 0 2-2v-3', key: '18trek' }],\n];\n\n/**\n * @component @name Maximize\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzIiAvPgogIDxwYXRoIGQ9Ik0yMSA4VjVhMiAyIDAgMCAwLTItMmgtMyIgLz4KICA8cGF0aCBkPSJNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMyIgLz4KICA8cGF0aCBkPSJNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/maximize\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Maximize = createLucideIcon('maximize', __iconNode);\n\nexport default Maximize;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ['line', { x1: '21', x2: '16.65', y1: '21', y2: '16.65', key: '13gj7c' }],\n ['line', { x1: '8', x2: '14', y1: '11', y2: '11', key: 'durymu' }],\n];\n\n/**\n * @component @name ZoomOut\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjExIiByPSI4IiAvPgogIDxsaW5lIHgxPSIyMSIgeDI9IjE2LjY1IiB5MT0iMjEiIHkyPSIxNi42NSIgLz4KICA8bGluZSB4MT0iOCIgeDI9IjE0IiB5MT0iMTEiIHkyPSIxMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/zoom-out\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ZoomOut = createLucideIcon('zoom-out', __iconNode);\n\nexport default ZoomOut;\n","import { forwardRef } from 'react';\n\n/**\n * GitHub logo icon.\n *\n * The `Github` icon was removed from lucide-react v1.0 due to trademark\n * concerns. This component renders the official GitHub mark from\n * Simple Icons so consumers can import it as a drop-in replacement.\n *\n * Accepts the same props as a native `<svg>` element (className, size\n * attributes, etc.) and uses `currentColor` as the fill so it inherits\n * the parent text color, matching the lucide-react convention.\n */\nexport const GithubIcon = forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>(\n ({ width = 24, height = 24, ...props }, ref) => (\n <svg\n ref={ref}\n role=\"img\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width={width}\n height={height}\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </svg>\n )\n);\n\nGithubIcon.displayName = 'GithubIcon';\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n key: 'ct8e1f',\n },\n ],\n ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242', key: '151rxh' }],\n [\n 'path',\n {\n d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n key: '13bj9a',\n },\n ],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n];\n\n/**\n * @component @name EyeOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAuNzMzIDUuMDc2YTEwLjc0NCAxMC43NDQgMCAwIDEgMTEuMjA1IDYuNTc1IDEgMSAwIDAgMSAwIC42OTYgMTAuNzQ3IDEwLjc0NyAwIDAgMS0xLjQ0NCAyLjQ5IiAvPgogIDxwYXRoIGQ9Ik0xNC4wODQgMTQuMTU4YTMgMyAwIDAgMS00LjI0Mi00LjI0MiIgLz4KICA8cGF0aCBkPSJNMTcuNDc5IDE3LjQ5OWExMC43NSAxMC43NSAwIDAgMS0xNS40MTctNS4xNTEgMSAxIDAgMCAxIDAtLjY5NiAxMC43NSAxMC43NSAwIDAgMSA0LjQ0Ni01LjE0MyIgLz4KICA8cGF0aCBkPSJtMiAyIDIwIDIwIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/eye-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst EyeOff = createLucideIcon('eye-off', __iconNode);\n\nexport default EyeOff;\n"],"names":["featureMap","callbacks","edges","p","replace","nodeId","virtualRepos","getOrCreateVirtualRepo","repositoryPath","get","repoName","Boolean","push","type","position","x","data","name","virtualId","repoMap","entries","sort","aRaw","a","createdAt","b","Number","Infinity","aTime","onClick","onRepositoryDelete","nodes","id","pendingMap","has","map","isPending","allFeatureEntries","isCreating","state","entry","onSettings","onFeatureDelete","onStart","onStartFeature","onUnarchiveFeature","source","target","Set","node","showHandles","hasChildren","parentNodeIds","deriveGraph","normalizePath","repoByPath","Map","set","split","filter","at","y","sortedRepoEntries","bRaw","isNaN","bTime","onRepositoryAdd","onAdd","onRepositoryClick","onDelete","e","onNodeAction","onAction","onNodeSettings","onRetryFeature","onRetry","onStopFeature","onStop","onArchiveFeature","onArchive","parentNodeId","onUnarchive","edge","repoNodeId","style","strokeDasharray","add","hasEdges","length","GithubIcon","width","height","props","ref","role","viewBox","xmlns","fill","d","displayName"],"mappings":"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","ignoreList":[0,29,30,31,33]}