@shepai/cli 1.106.3-pr326.2d86e1d → 1.106.4

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 (219) hide show
  1. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.d.ts.map +1 -1
  2. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.js +48 -5
  3. package/dist/src/presentation/web/app/actions/get-graph-data.d.ts +10 -0
  4. package/dist/src/presentation/web/app/actions/get-graph-data.d.ts.map +1 -0
  5. package/dist/src/presentation/web/app/actions/get-graph-data.js +10 -0
  6. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  7. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +25 -9
  8. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  9. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +2 -6
  10. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  11. package/dist/src/presentation/web/hooks/use-graph-state.js +0 -26
  12. package/dist/tsconfig.build.tsbuildinfo +1 -1
  13. package/package.json +1 -1
  14. package/web/.next/BUILD_ID +1 -1
  15. package/web/.next/app-path-routes-manifest.json +0 -1
  16. package/web/.next/build-manifest.json +2 -2
  17. package/web/.next/fallback-build-manifest.json +2 -2
  18. package/web/.next/prerender-manifest.json +3 -3
  19. package/web/.next/required-server-files.js +2 -2
  20. package/web/.next/required-server-files.json +2 -2
  21. package/web/.next/routes-manifest.json +0 -6
  22. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +53 -38
  23. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
  24. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  25. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  26. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +63 -63
  27. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +4 -4
  28. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  29. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  30. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +63 -63
  31. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +4 -4
  32. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  33. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  34. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +49 -34
  35. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
  36. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  37. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  38. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +53 -38
  39. package/web/.next/server/app/(dashboard)/create/page.js +3 -3
  40. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  41. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  42. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +63 -63
  43. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +4 -4
  44. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  45. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  46. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +63 -63
  47. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +4 -4
  48. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  49. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  50. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +49 -34
  51. package/web/.next/server/app/(dashboard)/page.js +3 -3
  52. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  53. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  54. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +49 -34
  55. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
  56. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  57. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  58. package/web/.next/server/app/_global-error.html +2 -2
  59. package/web/.next/server/app/_global-error.rsc +1 -1
  60. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  61. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  62. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  63. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  64. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  65. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  66. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/api/agent-events/route.js +2 -1
  68. package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
  69. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  70. package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
  71. package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
  72. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  73. package/web/.next/server/app/api/feature-logs/route.js +1 -1
  74. package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -1
  75. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  76. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  77. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  78. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  79. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  80. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  82. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  83. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  85. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  86. package/web/.next/server/app-paths-manifest.json +0 -1
  87. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +6 -0
  88. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -0
  89. package/web/.next/server/chunks/[root-of-the-server]__3b22a1eb._.js +3 -0
  90. package/web/.next/server/chunks/[root-of-the-server]__3b22a1eb._.js.map +1 -0
  91. package/web/.next/server/chunks/{[root-of-the-server]__d8037e14._.js → [root-of-the-server]__91d44424._.js} +2 -2
  92. package/web/.next/server/chunks/{[root-of-the-server]__a5879003._.js → [root-of-the-server]__db04ed44._.js} +2 -2
  93. package/web/.next/server/chunks/[root-of-the-server]__f47bb8a5._.js +1 -1
  94. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  95. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  96. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js +3 -0
  97. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js.map +1 -0
  98. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js +3 -0
  99. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js.map +1 -0
  100. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  101. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  102. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  103. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
  104. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  105. package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js +3 -0
  106. package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js.map +1 -0
  107. package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js +3 -0
  108. package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js.map +1 -0
  109. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  110. package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js +3 -0
  111. package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js.map +1 -0
  112. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  115. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js +3 -0
  116. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js.map +1 -0
  117. package/web/.next/server/chunks/ssr/[root-of-the-server]__94128fa9._.js +3 -0
  118. package/web/.next/server/chunks/ssr/[root-of-the-server]__94128fa9._.js.map +1 -0
  119. package/web/.next/server/chunks/ssr/[root-of-the-server]__9bfb8e7c._.js +3 -0
  120. package/web/.next/server/chunks/ssr/[root-of-the-server]__9bfb8e7c._.js.map +1 -0
  121. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  122. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  124. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  125. package/web/.next/server/chunks/ssr/{_148140cb._.js → _0619c65b._.js} +2 -2
  126. package/web/.next/server/chunks/ssr/{_148140cb._.js.map → _0619c65b._.js.map} +1 -1
  127. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  128. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/{_350fda95._.js → _4059434a._.js} +2 -2
  130. package/web/.next/server/chunks/ssr/{_350fda95._.js.map → _4059434a._.js.map} +1 -1
  131. package/web/.next/server/chunks/ssr/{_250a63ae._.js → _6e08ce21._.js} +2 -2
  132. package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +1 -0
  133. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  134. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  135. package/web/.next/server/chunks/ssr/{_09345032._.js → _a8d9cc2f._.js} +2 -2
  136. package/web/.next/server/chunks/ssr/{_09345032._.js.map → _a8d9cc2f._.js.map} +1 -1
  137. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  138. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  139. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  140. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  141. package/web/.next/server/chunks/ssr/{src_presentation_web_d7392251._.js → src_presentation_web_7275ce5d._.js} +3 -3
  142. package/web/.next/server/chunks/ssr/{src_presentation_web_9f444130._.js.map → src_presentation_web_7275ce5d._.js.map} +1 -1
  143. package/web/.next/server/chunks/ssr/{src_presentation_web_9f444130._.js → src_presentation_web_758dfa10._.js} +3 -3
  144. package/web/.next/server/chunks/ssr/{src_presentation_web_d7392251._.js.map → src_presentation_web_758dfa10._.js.map} +1 -1
  145. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js +3 -0
  146. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js.map +1 -0
  147. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  148. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  150. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +3 -0
  152. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -0
  153. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  154. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  155. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  156. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  157. package/web/.next/server/pages/500.html +2 -2
  158. package/web/.next/server/server-reference-manifest.js +1 -1
  159. package/web/.next/server/server-reference-manifest.json +285 -250
  160. package/web/.next/static/chunks/{b01b8b69f482e41e.js → 15e6c83214978e2a.js} +1 -1
  161. package/web/.next/static/chunks/{125326eff68aa819.js → 229caf9bd06f0c45.js} +2 -2
  162. package/web/.next/static/chunks/{0142224c5471ee38.js → 524307fe3f73c1cf.js} +1 -1
  163. package/web/.next/static/chunks/{6c1aca2a14151ad0.js → 71733e636d34974a.js} +1 -1
  164. package/web/.next/static/chunks/{be1de18677065920.js → 7f3823482bd3f594.js} +1 -1
  165. package/web/.next/static/chunks/{a126ccd4e7c0ff4b.js → 8a2e6fabcbb6720d.js} +1 -1
  166. package/web/.next/static/chunks/{41c6f0c0a51d55c0.js → 9144d63a39898da5.js} +1 -1
  167. package/web/.next/static/chunks/{4ea34a453fed162c.js → a5bcb76c9dcfaee6.js} +2 -2
  168. package/web/.next/static/chunks/{f59bd516c57406f7.js → abb2cdec13050512.js} +1 -1
  169. package/web/.next/static/chunks/{b744fa8c0ec5f4ef.js → cacd384748cf0bd2.js} +1 -1
  170. package/dist/src/presentation/web/app/actions/get-feature-drawer-data.d.ts +0 -8
  171. package/dist/src/presentation/web/app/actions/get-feature-drawer-data.d.ts.map +0 -1
  172. package/dist/src/presentation/web/app/actions/get-feature-drawer-data.js +0 -67
  173. package/dist/src/presentation/web/app/api/graph-data/route.d.ts +0 -14
  174. package/dist/src/presentation/web/app/api/graph-data/route.d.ts.map +0 -1
  175. package/dist/src/presentation/web/app/api/graph-data/route.js +0 -14
  176. package/dist/src/presentation/web/components/common/control-center-drawer/use-drawer-sync.d.ts +0 -12
  177. package/dist/src/presentation/web/components/common/control-center-drawer/use-drawer-sync.d.ts.map +0 -1
  178. package/dist/src/presentation/web/components/common/control-center-drawer/use-drawer-sync.js +0 -75
  179. package/web/.next/server/app/api/graph-data/route/app-paths-manifest.json +0 -3
  180. package/web/.next/server/app/api/graph-data/route/build-manifest.json +0 -11
  181. package/web/.next/server/app/api/graph-data/route/server-reference-manifest.json +0 -4
  182. package/web/.next/server/app/api/graph-data/route.js +0 -8
  183. package/web/.next/server/app/api/graph-data/route.js.map +0 -5
  184. package/web/.next/server/app/api/graph-data/route.js.nft.json +0 -1
  185. package/web/.next/server/app/api/graph-data/route_client-reference-manifest.js +0 -2
  186. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +0 -3
  187. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +0 -1
  188. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_graph-data_route_actions_26df8a4e.js +0 -3
  189. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_graph-data_route_actions_26df8a4e.js.map +0 -1
  190. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js +0 -3
  191. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js.map +0 -1
  192. package/web/.next/server/chunks/[root-of-the-server]__aae14de3._.js +0 -6
  193. package/web/.next/server/chunks/[root-of-the-server]__aae14de3._.js.map +0 -1
  194. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_7fc19e0a.js +0 -3
  195. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_7fc19e0a.js.map +0 -1
  196. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_c3aca900.js +0 -3
  197. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_c3aca900.js.map +0 -1
  198. package/web/.next/server/chunks/ssr/[root-of-the-server]__13dc8e37._.js +0 -3
  199. package/web/.next/server/chunks/ssr/[root-of-the-server]__13dc8e37._.js.map +0 -1
  200. package/web/.next/server/chunks/ssr/[root-of-the-server]__3a2d3067._.js +0 -3
  201. package/web/.next/server/chunks/ssr/[root-of-the-server]__3a2d3067._.js.map +0 -1
  202. package/web/.next/server/chunks/ssr/[root-of-the-server]__5f776c10._.js +0 -3
  203. package/web/.next/server/chunks/ssr/[root-of-the-server]__5f776c10._.js.map +0 -1
  204. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +0 -3
  205. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js.map +0 -1
  206. package/web/.next/server/chunks/ssr/[root-of-the-server]__c03a4370._.js +0 -3
  207. package/web/.next/server/chunks/ssr/[root-of-the-server]__c03a4370._.js.map +0 -1
  208. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +0 -3
  209. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js.map +0 -1
  210. package/web/.next/server/chunks/ssr/_250a63ae._.js.map +0 -1
  211. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_85d37ebe.js +0 -3
  212. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_85d37ebe.js.map +0 -1
  213. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +0 -3
  214. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +0 -1
  215. /package/web/.next/server/chunks/{[root-of-the-server]__d8037e14._.js.map → [root-of-the-server]__91d44424._.js.map} +0 -0
  216. /package/web/.next/server/chunks/{[root-of-the-server]__a5879003._.js.map → [root-of-the-server]__db04ed44._.js.map} +0 -0
  217. /package/web/.next/static/{kzC4UZpGoyGxtfEZ-FWzG → ORc-CcNcyS9ide_AZZ8ay}/_buildManifest.js +0 -0
  218. /package/web/.next/static/{kzC4UZpGoyGxtfEZ-FWzG → ORc-CcNcyS9ide_AZZ8ay}/_clientMiddlewareManifest.json +0 -0
  219. /package/web/.next/static/{kzC4UZpGoyGxtfEZ-FWzG → ORc-CcNcyS9ide_AZZ8ay}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.tsx"],"names":[],"mappings":"AAOA,oEAAoE;AACpE,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,UAAU,sBAAsB;IAC9B,MAAM,EAAE,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxC;AAED,wBAA8B,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,sBAAsB,2DAmCjF"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.tsx"],"names":[],"mappings":"AAiBA,oEAAoE;AACpE,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,UAAU,sBAAsB;IAC9B,MAAM,EAAE,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxC;AAED,wBAA8B,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,sBAAsB,2DAyEjF"}
@@ -1,8 +1,14 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { resolve } from '../../../../../lib/server-container.js';
3
+ import { CiStatus } from '../../../../../../../../packages/core/src/domain/generated/output.js';
3
4
  import { buildFeatureNodeData } from '../../../../build-feature-node-data.js';
4
5
  import { computeDrawerView } from '../../../../../components/common/control-center-drawer/drawer-view.js';
5
6
  import { FeatureDrawerClient } from '../../../../../components/common/control-center-drawer/feature-drawer-client.js';
7
+ const CI_STATUS_MAP = {
8
+ success: CiStatus.Success,
9
+ failure: CiStatus.Failure,
10
+ pending: CiStatus.Pending,
11
+ };
6
12
  /** Skip static pre-rendering since we need runtime DI container. */
7
13
  export const dynamic = 'force-dynamic';
8
14
  export default async function FeatureDrawerPage({ params }) {
@@ -10,15 +16,52 @@ export default async function FeatureDrawerPage({ params }) {
10
16
  try {
11
17
  const featureRepo = resolve('IFeatureRepository');
12
18
  const agentRunRepo = resolve('IAgentRunRepository');
13
- // Critical path only: feature + agent run (fast DB lookups).
14
- // Expensive operations (git remote URL, GitHub CI/mergeable status,
15
- // artifact, repo name, base branch) are deferred to useDrawerSync
16
- // which runs client-side after the drawer is already visible.
19
+ const repoRepo = resolve('IRepositoryRepository');
20
+ const gitPrService = resolve('IGitPrService');
17
21
  const feature = await featureRepo.findById(featureId);
18
22
  if (!feature)
19
23
  return null;
20
24
  const run = feature.agentRunId ? await agentRunRepo.findById(feature.agentRunId) : null;
21
- const nodeData = buildFeatureNodeData(feature, run);
25
+ // Resolve repository name, base branch, and one-liner for the overview tab
26
+ const getArtifact = resolve('GetFeatureArtifactUseCase');
27
+ const [repo, baseBranch, artifact, remoteUrl, liveMergeable, liveCiResult] = await Promise.all([
28
+ repoRepo.findByPath(feature.repositoryPath).catch(() => null),
29
+ gitPrService.getDefaultBranch(feature.repositoryPath).catch(() => 'main'),
30
+ getArtifact.execute(featureId).catch(() => null),
31
+ gitPrService.getRemoteUrl(feature.repositoryPath).catch(() => null),
32
+ feature.pr?.number
33
+ ? gitPrService
34
+ .getMergeableStatus(feature.repositoryPath, feature.pr.number)
35
+ .catch(() => undefined)
36
+ : Promise.resolve(undefined),
37
+ feature.branch
38
+ ? gitPrService.getCiStatus(feature.repositoryPath, feature.branch).catch(() => undefined)
39
+ : Promise.resolve(undefined),
40
+ ]);
41
+ // Merge live PR status into feature data so the UI always reflects
42
+ // the current GitHub state, even if the background watcher hasn't polled yet.
43
+ if (feature.pr) {
44
+ const liveCiStatus = liveCiResult
45
+ ? (CI_STATUS_MAP[liveCiResult.status] ?? CiStatus.Pending)
46
+ : undefined;
47
+ const updates = {};
48
+ if (liveMergeable !== undefined)
49
+ updates.mergeable = liveMergeable;
50
+ if (liveCiStatus !== undefined)
51
+ updates.ciStatus = liveCiStatus;
52
+ if (Object.keys(updates).length > 0) {
53
+ feature.pr = { ...feature.pr, ...updates };
54
+ featureRepo.update(feature).catch(() => {
55
+ /* best-effort persist */
56
+ });
57
+ }
58
+ }
59
+ const nodeData = buildFeatureNodeData(feature, run, {
60
+ repositoryName: repo?.name,
61
+ baseBranch,
62
+ oneLiner: artifact?.oneLiner,
63
+ remoteUrl: remoteUrl ?? undefined,
64
+ });
22
65
  const view = computeDrawerView({
23
66
  selectedNode: nodeData,
24
67
  isCreateDrawerOpen: false,
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Server action that fetches fresh graph nodes and edges.
3
+ * Used as a lightweight polling fallback for active features,
4
+ * avoiding full router.refresh() page re-renders.
5
+ */
6
+ export declare function fetchGraphData(): Promise<{
7
+ nodes: import("../../components/features/features-canvas/index.js").CanvasNodeType[];
8
+ edges: import("@xyflow/react").Edge[];
9
+ }>;
10
+ //# sourceMappingURL=get-graph-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-graph-data.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAsB,cAAc;;;GAEnC"}
@@ -0,0 +1,10 @@
1
+ 'use server';
2
+ import { getGraphData } from '../(dashboard)/get-graph-data.js';
3
+ /**
4
+ * Server action that fetches fresh graph nodes and edges.
5
+ * Used as a lightweight polling fallback for active features,
6
+ * avoiding full router.refresh() page re-renders.
7
+ */
8
+ export async function fetchGraphData() {
9
+ return getGraphData();
10
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CA0hB1F"}
1
+ {"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CA6iB1F"}
@@ -28,7 +28,6 @@ import { useFeatureActions } from '../../common/feature-drawer/use-feature-actio
28
28
  import { resolveSseEventUpdates } from '../../common/feature-node/derive-feature-state.js';
29
29
  import { deriveInitialTab } from './drawer-view.js';
30
30
  import { useArtifactFetch } from './use-artifact-fetch.js';
31
- import { useDrawerSync } from './use-drawer-sync.js';
32
31
  export function FeatureDrawerClient({ view: initialView, urlTab }) {
33
32
  const featureFlags = useFeatureFlags();
34
33
  const router = useRouter();
@@ -36,7 +35,7 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
36
35
  const rejectSound = useSoundAction('reject');
37
36
  // Track the view locally so SSE events can update the drawer type in real-time
38
37
  const [view, setView] = useState(initialView);
39
- // Sync when server re-renders with new props (e.g. after navigation)
38
+ // Sync when server re-renders with new props (e.g. after router.refresh())
40
39
  useEffect(() => {
41
40
  setView(initialView);
42
41
  }, [initialView]);
@@ -61,9 +60,15 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
61
60
  // fetches (which would fail with "not found" for soft-deleted features).
62
61
  if (featureNode.state === 'deleting')
63
62
  continue;
63
+ // Trigger a server refresh to get the latest drawer view,
64
+ // but skip when the drawer is closed, the user has unsaved changes,
65
+ // or a rejection is in-flight to avoid unnecessary refreshes.
66
+ if (isOpenRef.current && !isDirtyRef.current && !isRejectingRef.current)
67
+ router.refresh();
64
68
  if (update.state !== undefined || update.lifecycle !== undefined) {
65
- // Update the node data AND re-derive the initial tab so the drawer
66
- // switches immediately (e.g. prd-review → overview when agent resumes).
69
+ // Optimistically update the node data AND re-derive the initial tab so the
70
+ // drawer switches immediately (e.g. prd-review → overview when agent resumes)
71
+ // without waiting for the router.refresh() round-trip.
67
72
  setView((prev) => {
68
73
  if (prev.type !== 'feature')
69
74
  return prev;
@@ -76,17 +81,24 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
76
81
  });
77
82
  }
78
83
  }
79
- }, [events, featureNode]);
84
+ }, [events, featureNode, router]);
80
85
  // Derive open state from the URL. Next.js parallel routes preserve slot
81
86
  // content during soft navigation, so this component is NOT unmounted when
82
87
  // navigating to `/`. Instead, we watch the pathname and let Vaul handle
83
88
  // the close animation when the path no longer matches a feature route.
84
89
  const pathname = usePathname();
85
90
  const isOpen = pathname.startsWith('/feature/');
86
- // Targeted data sync: fetches fresh FeatureNodeData on drawer open and
87
- // periodically while open. Replaces router.refresh() to avoid full-page
88
- // re-renders that cause visible flashing and can reset form state.
89
- useDrawerSync(isOpen, featureNode?.featureId ?? null, setView);
91
+ const isOpenRef = useRef(isOpen);
92
+ const wasOpenRef = useRef(isOpen);
93
+ // When the drawer re-opens, force a server refresh so the view is always fresh.
94
+ // SSE skips router.refresh() while the drawer is closed, so data can go stale.
95
+ useEffect(() => {
96
+ if (isOpen && !wasOpenRef.current) {
97
+ router.refresh();
98
+ }
99
+ wasOpenRef.current = isOpen;
100
+ }, [isOpen, router]);
101
+ isOpenRef.current = isOpen;
90
102
  const onClose = useCallback(() => {
91
103
  router.push('/');
92
104
  }, [router]);
@@ -170,6 +182,10 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
170
182
  featureNode?.state === 'action-required' &&
171
183
  Object.keys(prdDefaultSelections).some((k) => prdDefaultSelections[k] !== prdSelections[k]);
172
184
  const isDirty = isChatDirty || isPrdDirty;
185
+ // Keep dirty state in a ref so the SSE handler can read the latest value
186
+ // without re-running the effect on every keystroke.
187
+ const isDirtyRef = useRef(isDirty);
188
+ isDirtyRef.current = isDirty;
173
189
  const onReset = useCallback(() => {
174
190
  setChatInput('');
175
191
  setPrdSelections({ ...prdDefaultSelections });
@@ -1 +1 @@
1
- {"version":3,"file":"use-control-center-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/use-control-center-state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAajC,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAM7E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,YAAY,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpE,sBAAsB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,iBAAiB,EAAE,CACjB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACvC,QAAQ,CAAC,EAAE,MAAM,KACd,MAAM,CAAC;IACZ,wDAAwD;IACxD,wBAAwB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACxE,gDAAgD;IAChD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAC;IACtE,0EAA0E;IAC1E,YAAY,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;CACnD;AAQD,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,cAAc,EAAE,EAC9B,YAAY,EAAE,IAAI,EAAE,GACnB,kBAAkB,CAqapB"}
1
+ {"version":3,"file":"use-control-center-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/use-control-center-state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAcjC,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAM7E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,YAAY,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpE,sBAAsB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,iBAAiB,EAAE,CACjB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACvC,QAAQ,CAAC,EAAE,MAAM,KACd,MAAM,CAAC;IACZ,wDAAwD;IACxD,wBAAwB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACxE,gDAAgD;IAChD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAC;IACtE,0EAA0E;IAC1E,YAAY,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;CACnD;AAQD,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,cAAc,EAAE,EAC9B,YAAY,EAAE,IAAI,EAAE,GACnB,kBAAkB,CAiapB"}
@@ -7,6 +7,7 @@ import { deleteFeature } from '../../../app/actions/delete-feature.js';
7
7
  import { addRepository } from '../../../app/actions/add-repository.js';
8
8
  import { deleteRepository } from '../../../app/actions/delete-repository.js';
9
9
  import { getFeatureMetadata } from '../../../app/actions/get-feature-metadata.js';
10
+ import { fetchGraphData } from '../../../app/actions/get-graph-data.js';
10
11
  import { useAgentEventsContext } from '../../../hooks/agent-events-provider.js';
11
12
  import { useSoundAction } from '../../../hooks/use-sound-action.js';
12
13
  import { createLogger } from '../../../lib/logger.js';
@@ -156,12 +157,7 @@ export function useControlCenterState(initialNodes, initialEdges) {
156
157
  log.debug(`polling enabled (${POLL_INTERVAL_MS}ms interval)`);
157
158
  const timer = setInterval(async () => {
158
159
  try {
159
- // Use a plain fetch instead of a server action so the poll
160
- // doesn't trigger the Next.js "Rendering…" indicator.
161
- const res = await fetch('/api/graph-data');
162
- if (!res.ok)
163
- throw new Error(`status ${res.status}`);
164
- const { nodes: freshNodes, edges: freshEdges } = await res.json();
160
+ const { nodes: freshNodes, edges: freshEdges } = await fetchGraphData();
165
161
  reconcile(freshNodes, freshEdges);
166
162
  }
167
163
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"use-graph-state.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-graph-state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,mDAAmD;IACnD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;OAGG;IACH,SAAS,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAClE,uEAAuE;IACvE,aAAa,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5E,kEAAkE;IAClE,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1F,yDAAyD;IACzD,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,sDAAsD;IACtD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,uDAAuD;IACvD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9D,2DAA2D;IAC3D,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAClE,gCAAgC;IAChC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,yDAAyD;IACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtF,gEAAgE;IAChE,wBAAwB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACxE,yDAAyD;IACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAC;IACtE,+EAA+E;IAC/E,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,6EAA6E;IAC7E,YAAY,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;CACnD;AAuCD,KAAK,kBAAkB,GAAG,OAAO,CAC/B,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,aAAa,CAAC,CACtE,CAAC;AA8BF,wBAAgB,aAAa,CAC3B,YAAY,EAAE,cAAc,EAAE,EAC9B,YAAY,EAAE,IAAI,EAAE,GACnB,mBAAmB,CAsXrB"}
1
+ {"version":3,"file":"use-graph-state.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-graph-state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,mDAAmD;IACnD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;OAGG;IACH,SAAS,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAClE,uEAAuE;IACvE,aAAa,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5E,kEAAkE;IAClE,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1F,yDAAyD;IACzD,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,sDAAsD;IACtD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,uDAAuD;IACvD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9D,2DAA2D;IAC3D,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAClE,gCAAgC;IAChC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,yDAAyD;IACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtF,gEAAgE;IAChE,wBAAwB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACxE,yDAAyD;IACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAC;IACtE,+EAA+E;IAC/E,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,6EAA6E;IAC7E,YAAY,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;CACnD;AAuCD,KAAK,kBAAkB,GAAG,OAAO,CAC/B,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,aAAa,CAAC,CACtE,CAAC;AAWF,wBAAgB,aAAa,CAC3B,YAAY,EAAE,cAAc,EAAE,EAC9B,YAAY,EAAE,IAAI,EAAE,GACnB,mBAAmB,CAkXrB"}
@@ -36,26 +36,6 @@ function isFeatureDataUnchanged(data, updates) {
36
36
  (updates.name === undefined || updates.name === data.name) &&
37
37
  (updates.description === undefined || updates.description === data.description));
38
38
  }
39
- /**
40
- * Shallow-compare two Maps by key set and entry data (JSON equality).
41
- * Returns true if they are structurally identical, avoiding unnecessary re-renders.
42
- */
43
- function mapsEqual(a, b) {
44
- if (a.size !== b.size)
45
- return false;
46
- for (const [key, aEntry] of a) {
47
- const bEntry = b.get(key);
48
- if (!bEntry)
49
- return false;
50
- if (aEntry.parentNodeId !== bEntry.parentNodeId)
51
- return false;
52
- if (aEntry.data === bEntry.data)
53
- continue;
54
- if (JSON.stringify(aEntry.data) !== JSON.stringify(bEntry.data))
55
- return false;
56
- }
57
- return true;
58
- }
59
39
  export function useGraphState(initialNodes, initialEdges) {
60
40
  // eslint-disable-next-line react-hooks/exhaustive-deps -- intentional: parse only on mount (like useState initializer)
61
41
  const init = useMemo(() => parseMaps(initialNodes, initialEdges), []);
@@ -198,9 +178,6 @@ export function useGraphState(initialNodes, initialEdges) {
198
178
  pendingUpdatesRef.current.delete(nodeId);
199
179
  }
200
180
  }
201
- // Avoid re-render when polling returns identical data
202
- if (mapsEqual(currentFeatureMap, merged))
203
- return currentFeatureMap;
204
181
  return merged;
205
182
  });
206
183
  // Clean pendingMap entries that now have a real counterpart in server data
@@ -243,9 +220,6 @@ export function useGraphState(initialNodes, initialEdges) {
243
220
  merged.set(id, entry);
244
221
  }
245
222
  }
246
- // Avoid re-render when polling returns identical data
247
- if (mapsEqual(currentRepoMap, merged))
248
- return currentRepoMap;
249
223
  return merged;
250
224
  });
251
225
  }, []);