@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.
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.js +48 -5
- package/dist/src/presentation/web/app/actions/get-graph-data.d.ts +10 -0
- package/dist/src/presentation/web/app/actions/get-graph-data.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-graph-data.js +10 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +25 -9
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +2 -6
- package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-graph-state.js +0 -26
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +0 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +2 -2
- package/web/.next/required-server-files.json +2 -2
- package/web/.next/routes-manifest.json +0 -6
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +53 -38
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +63 -63
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +63 -63
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +49 -34
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +53 -38
- package/web/.next/server/app/(dashboard)/create/page.js +3 -3
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +63 -63
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +4 -4
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +63 -63
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +4 -4
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +49 -34
- package/web/.next/server/app/(dashboard)/page.js +3 -3
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +49 -34
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/agent-events/route.js +2 -1
- package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/feature-logs/route.js +1 -1
- package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +0 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +6 -0
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__3b22a1eb._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__3b22a1eb._.js.map +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__d8037e14._.js → [root-of-the-server]__91d44424._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__a5879003._.js → [root-of-the-server]__db04ed44._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__f47bb8a5._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js +3 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js.map +1 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js +3 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__94128fa9._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__94128fa9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9bfb8e7c._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9bfb8e7c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_148140cb._.js → _0619c65b._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_148140cb._.js.map → _0619c65b._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_350fda95._.js → _4059434a._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_350fda95._.js.map → _4059434a._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_250a63ae._.js → _6e08ce21._.js} +2 -2
- package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_09345032._.js → _a8d9cc2f._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_09345032._.js.map → _a8d9cc2f._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{src_presentation_web_d7392251._.js → src_presentation_web_7275ce5d._.js} +3 -3
- package/web/.next/server/chunks/ssr/{src_presentation_web_9f444130._.js.map → src_presentation_web_7275ce5d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{src_presentation_web_9f444130._.js → src_presentation_web_758dfa10._.js} +3 -3
- package/web/.next/server/chunks/ssr/{src_presentation_web_d7392251._.js.map → src_presentation_web_758dfa10._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +285 -250
- package/web/.next/static/chunks/{b01b8b69f482e41e.js → 15e6c83214978e2a.js} +1 -1
- package/web/.next/static/chunks/{125326eff68aa819.js → 229caf9bd06f0c45.js} +2 -2
- package/web/.next/static/chunks/{0142224c5471ee38.js → 524307fe3f73c1cf.js} +1 -1
- package/web/.next/static/chunks/{6c1aca2a14151ad0.js → 71733e636d34974a.js} +1 -1
- package/web/.next/static/chunks/{be1de18677065920.js → 7f3823482bd3f594.js} +1 -1
- package/web/.next/static/chunks/{a126ccd4e7c0ff4b.js → 8a2e6fabcbb6720d.js} +1 -1
- package/web/.next/static/chunks/{41c6f0c0a51d55c0.js → 9144d63a39898da5.js} +1 -1
- package/web/.next/static/chunks/{4ea34a453fed162c.js → a5bcb76c9dcfaee6.js} +2 -2
- package/web/.next/static/chunks/{f59bd516c57406f7.js → abb2cdec13050512.js} +1 -1
- package/web/.next/static/chunks/{b744fa8c0ec5f4ef.js → cacd384748cf0bd2.js} +1 -1
- package/dist/src/presentation/web/app/actions/get-feature-drawer-data.d.ts +0 -8
- package/dist/src/presentation/web/app/actions/get-feature-drawer-data.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/get-feature-drawer-data.js +0 -67
- package/dist/src/presentation/web/app/api/graph-data/route.d.ts +0 -14
- package/dist/src/presentation/web/app/api/graph-data/route.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/graph-data/route.js +0 -14
- package/dist/src/presentation/web/components/common/control-center-drawer/use-drawer-sync.d.ts +0 -12
- package/dist/src/presentation/web/components/common/control-center-drawer/use-drawer-sync.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/use-drawer-sync.js +0 -75
- package/web/.next/server/app/api/graph-data/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/api/graph-data/route/build-manifest.json +0 -11
- package/web/.next/server/app/api/graph-data/route/server-reference-manifest.json +0 -4
- package/web/.next/server/app/api/graph-data/route.js +0 -8
- package/web/.next/server/app/api/graph-data/route.js.map +0 -5
- package/web/.next/server/app/api/graph-data/route.js.nft.json +0 -1
- package/web/.next/server/app/api/graph-data/route_client-reference-manifest.js +0 -2
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +0 -3
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +0 -1
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_graph-data_route_actions_26df8a4e.js +0 -3
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_graph-data_route_actions_26df8a4e.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__aae14de3._.js +0 -6
- package/web/.next/server/chunks/[root-of-the-server]__aae14de3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_7fc19e0a.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_7fc19e0a.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_c3aca900.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_c3aca900.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13dc8e37._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13dc8e37._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3a2d3067._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3a2d3067._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5f776c10._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5f776c10._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c03a4370._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c03a4370._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_250a63ae._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_85d37ebe.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_85d37ebe.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +0 -1
- /package/web/.next/server/chunks/{[root-of-the-server]__d8037e14._.js.map → [root-of-the-server]__91d44424._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__a5879003._.js.map → [root-of-the-server]__db04ed44._.js.map} +0 -0
- /package/web/.next/static/{kzC4UZpGoyGxtfEZ-FWzG → ORc-CcNcyS9ide_AZZ8ay}/_buildManifest.js +0 -0
- /package/web/.next/static/{kzC4UZpGoyGxtfEZ-FWzG → ORc-CcNcyS9ide_AZZ8ay}/_clientMiddlewareManifest.json +0 -0
- /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":"
|
|
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
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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;
|
|
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"}
|
package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js
CHANGED
|
@@ -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
|
|
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
|
-
//
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
// re-
|
|
89
|
-
|
|
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;
|
|
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"}
|
package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js
CHANGED
|
@@ -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
|
-
|
|
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;
|
|
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
|
}, []);
|