@shepai/cli 1.102.0 → 1.103.0-pr306.386dbd0
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/README.md +5 -4
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +2 -1
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.js +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +2 -2
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +1 -3
- package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts +19 -0
- package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/check-agent-auth.js +178 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node.js +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +46 -8
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +28 -5
- 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 +0 -2
- package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +26 -148
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +29 -8
- package/dist/src/presentation/web/components/ui/dialog.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/dialog.js +2 -2
- package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-graph-state.js +26 -6
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/web/.next/BUILD_ID +1 -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 +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +48 -48
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- 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 +58 -58
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
- 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 +58 -58
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
- 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 +44 -44
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- 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 +48 -48
- package/web/.next/server/app/(dashboard)/create/page.js +1 -1
- 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 +58 -58
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
- 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 +58 -58
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
- 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 +44 -44
- package/web/.next/server/app/(dashboard)/page.js +1 -1
- 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 +44 -44
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- 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/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/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/chunks/[root-of-the-server]__f47bb8a5._.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2eacac96.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2eacac96.js.map +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_46d6bf1b.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_46d6bf1b.js.map +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_54b1e179.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_54b1e179.js.map +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_6c70ecca.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_6c70ecca.js.map +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c29a2302.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c29a2302.js.map +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c9978986.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c9978986.js.map +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_ce6dae5d.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_ce6dae5d.js.map +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d1fd387b.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d1fd387b.js.map +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d82f78f0.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d82f78f0.js.map +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/7f428_lucide-react_dist_esm_icons_d0119342._.js +3 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js.map +1 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_rocket_1575cd4d.js +3 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_rocket_1575cd4d.js.map +1 -0
- 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]__0880ff0e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0880ff0e._.js.map +1 -1
- 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]__23b5ca2c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.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]__357d99f9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__ec9a1550._.js → [root-of-the-server]__51fc98b0._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0b6bb4ae._.js.map → [root-of-the-server]__51fc98b0._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__f8932d55._.js → [root-of-the-server]__57f37786._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__ec9a1550._.js.map → [root-of-the-server]__57f37786._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5edfc56b._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5edfc56b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0b6bb4ae._.js → [root-of-the-server]__708dcad1._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__f8932d55._.js.map → [root-of-the-server]__708dcad1._.js.map} +1 -1
- 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]__8c88ef55._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8c88ef55._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__6a82177d._.js → [root-of-the-server]__8e002910._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__6a82177d._.js.map → [root-of-the-server]__8e002910._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__94128fa9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__94128fa9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9bfb8e7c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9bfb8e7c._.js.map +1 -1
- 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]__c9777776._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d91fdd51._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d91fdd51._.js.map +1 -0
- 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/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_d2a282c5._.js → _15b363de._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_d2a282c5._.js.map → _15b363de._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_16235e5e._.js +1 -1
- package/web/.next/server/chunks/ssr/_16235e5e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_273d4632._.js +3 -0
- package/web/.next/server/chunks/ssr/_273d4632._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_507aa36a._.js +3 -0
- package/web/.next/server/chunks/ssr/_507aa36a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_6887cba3._.js +1 -1
- package/web/.next/server/chunks/ssr/_6887cba3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_9d0908a8._.js → _86635d23._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_9d0908a8._.js.map → _86635d23._.js.map} +1 -1
- 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/_8eeee4db._.js +1 -1
- package/web/.next/server/chunks/ssr/_8eeee4db._.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/_ed11dcd6._.js +1 -1
- package/web/.next/server/chunks/ssr/_ed11dcd6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f4d222d6._.js +1 -1
- package/web/.next/server/chunks/ssr/_f4d222d6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f5316e67._.js +3 -0
- package/web/.next/server/chunks/ssr/_f5316e67._.js.map +1 -0
- 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_3c53a23d._.js → src_presentation_web_7275ce5d._.js} +3 -3
- package/web/.next/server/chunks/ssr/{src_presentation_web_3c53a23d._.js.map → src_presentation_web_7275ce5d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{src_presentation_web_ec8c7a4f._.js → src_presentation_web_758dfa10._.js} +3 -3
- package/web/.next/server/chunks/ssr/{src_presentation_web_ec8c7a4f._.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_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +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_de814675._.js.map +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/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.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 +273 -273
- package/web/.next/static/chunks/07b853e29af1e5f2.js +1 -0
- package/web/.next/static/chunks/{bfee4f72255f4654.js → 1b64d539e3301b42.js} +2 -2
- package/web/.next/static/chunks/2a99432c60666d13.js +1 -0
- package/web/.next/static/chunks/3a806cf059241bc9.js +1 -0
- package/web/.next/static/chunks/561c934a22a57935.js +1 -0
- package/web/.next/static/chunks/{0ecdad7af8d93397.js → 56487ce1ff5fe4b9.js} +1 -1
- package/web/.next/static/chunks/{d3c337aa9acbfd96.js → 80648e7478cfaf5c.js} +2 -2
- package/web/.next/static/chunks/93058c22968e2fef.css +1 -0
- package/web/.next/static/chunks/{d994924b9107401b.js → b017804cd070a36b.js} +1 -1
- package/web/.next/static/chunks/b9baf0e3bc5777f0.js +1 -0
- package/web/.next/static/chunks/c1a9d9c698c60cd6.js +1 -0
- package/web/.next/static/chunks/da7d0e6baf7863fd.js +1 -0
- package/web/.next/static/chunks/f3138f795d0f0618.js +1 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_6ba7eb21._.js +0 -3
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_6ba7eb21._.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_c757eb00.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_c757eb00.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_7eb49631.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_7eb49631.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7b49fcb3._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7b49fcb3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_60e203af._.js +0 -3
- package/web/.next/server/chunks/ssr/_60e203af._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_6a83bd29._.js +0 -3
- package/web/.next/server/chunks/ssr/_6a83bd29._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_7d954884._.js +0 -3
- package/web/.next/server/chunks/ssr/_7d954884._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_befd865a.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_befd865a.js.map +0 -1
- package/web/.next/static/chunks/0a370e5d6fd1bb24.js +0 -1
- package/web/.next/static/chunks/2d3dc372f05429dd.css +0 -1
- package/web/.next/static/chunks/3092c9611e2dc032.js +0 -1
- package/web/.next/static/chunks/30dc64780817371a.js +0 -1
- package/web/.next/static/chunks/ac12b8d2bd59675e.js +0 -1
- package/web/.next/static/chunks/b272ac93b52dceeb.js +0 -1
- package/web/.next/static/chunks/d61cbdfc00003e44.js +0 -1
- package/web/.next/static/chunks/e248c85913405af4.js +0 -1
- package/web/.next/static/chunks/e24a024affc634d9.js +0 -1
- /package/web/.next/static/{_-n7Ii9h0sTnlzE_aFMQI → f-A8sWnRla5g7MiKDP0IX}/_buildManifest.js +0 -0
- /package/web/.next/static/{_-n7Ii9h0sTnlzE_aFMQI → f-A8sWnRla5g7MiKDP0IX}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{_-n7Ii9h0sTnlzE_aFMQI → f-A8sWnRla5g7MiKDP0IX}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},47407,a=>{a.n(a.i(5983))},
|
|
1
|
+
module.exports=[93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},47407,a=>{a.n(a.i(5983))},3621,a=>{a.n(a.i(72884))},63754,a=>{a.n(a.i(39838))},27075,a=>{a.n(a.i(26048))},37458,a=>{a.n(a.i(72330))},27559,a=>{a.n(a.i(19981))},66840,a=>{a.n(a.i(25768))},11754,a=>{a.n(a.i(14994))},31747,66953,a=>{"use strict";var b=a.i(14703);function c(a,c,d){return{name:a.name,description:a.description??a.slug,featureId:a.id,lifecycle:(0,b.deriveLifecycle)(a,c),repositoryPath:a.repositoryPath,branch:a.branch,specPath:a.specPath,state:(0,b.deriveNodeState)(a,c),progress:(0,b.deriveProgress)(a),summary:a.description,userQuery:a.userQuery,createdAt:a.createdAt instanceof Date?a.createdAt.getTime():a.createdAt,...a.fast&&{fastMode:!0},...d?.repositoryName&&{repositoryName:d.repositoryName},...d?.baseBranch&&{baseBranch:d.baseBranch},...d?.oneLiner&&{oneLiner:d.oneLiner},...d?.remoteUrl&&{remoteUrl:d.remoteUrl},...c?.agentType&&{agentType:c.agentType},...c?.modelId&&{modelId:c.modelId},...c?.error&&{errorMessage:c.error},...a.pr&&{pr:{url:a.pr.url,number:a.pr.number,status:a.pr.status,ciStatus:a.pr.ciStatus,commitHash:a.pr.commitHash,mergeable:a.pr.mergeable}}}}a.s(["buildFeatureNodeData",()=>c],31747);let d=new Set(["overview","activity","log","plan","prd-review","tech-decisions","product-decisions","merge-review"]);function e(a){if(a&&d.has(a))return a}function f({selectedNode:a,isCreateDrawerOpen:b,pendingRepositoryPath:c,pendingParentFeatureId:d,selectedRepoNode:e,features:f,workflowDefaults:g}){if(b)return{type:"feature-create",repositoryPath:c,initialParentId:d,features:f,workflowDefaults:g};if(a)return{type:"feature",node:a,initialTab:"requirements"===a.lifecycle&&"action-required"===a.state?"prd-review":"implementation"===a.lifecycle&&"action-required"===a.state?"tech-decisions":"review"===a.lifecycle&&("action-required"===a.state||"error"===a.state)?"merge-review":"overview"};return e?{type:"repository",data:e}:null}a.s(["computeDrawerView",()=>f,"parseTabKey",()=>e],66953)},9875,a=>{"use strict";a.s(["FeatureDrawerClient",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call FeatureDrawerClient() from the server but FeatureDrawerClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx <module evaluation>","FeatureDrawerClient")},57863,a=>{"use strict";a.s(["FeatureDrawerClient",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call FeatureDrawerClient() from the server but FeatureDrawerClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx","FeatureDrawerClient")},45273,a=>{"use strict";a.i(9875);var b=a.i(57863);a.n(b)},14994,a=>{"use strict";var b=a.i(92807),c=a.i(96380),d=a.i(81719),e=a.i(31747),f=a.i(66953),g=a.i(45273);let h={success:d.CiStatus.Success,failure:d.CiStatus.Failure,pending:d.CiStatus.Pending};async function i({params:a}){let{featureId:i}=await a;try{let a=(0,c.resolve)("IFeatureRepository"),j=(0,c.resolve)("IAgentRunRepository"),k=(0,c.resolve)("IRepositoryRepository"),l=(0,c.resolve)("IGitPrService"),m=await a.findById(i);if(!m)return null;let n=m.agentRunId?await j.findById(m.agentRunId):null,o=(0,c.resolve)("GetFeatureArtifactUseCase"),[p,q,r,s,t,u]=await Promise.all([k.findByPath(m.repositoryPath).catch(()=>null),l.getDefaultBranch(m.repositoryPath).catch(()=>"main"),o.execute(i).catch(()=>null),l.getRemoteUrl(m.repositoryPath).catch(()=>null),m.pr?.number?l.getMergeableStatus(m.repositoryPath,m.pr.number).catch(()=>void 0):Promise.resolve(void 0),m.branch?l.getCiStatus(m.repositoryPath,m.branch).catch(()=>void 0):Promise.resolve(void 0)]);if(m.pr){let b=u?h[u.status]??d.CiStatus.Pending:void 0,c={};void 0!==t&&(c.mergeable=t),void 0!==b&&(c.ciStatus=b),Object.keys(c).length>0&&(m.pr={...m.pr,...c},a.update(m).catch(()=>{}))}let v=(0,e.buildFeatureNodeData)(m,n,{repositoryName:p?.name,baseBranch:q,oneLiner:r?.oneLiner,remoteUrl:s??void 0}),w=(0,f.computeDrawerView)({selectedNode:v,isCreateDrawerOpen:!1,pendingRepositoryPath:"",pendingParentFeatureId:void 0,selectedRepoNode:null,features:[],workflowDefaults:void 0});if(!w)return null;return(0,b.jsx)(g.FeatureDrawerClient,{view:w})}catch{return null}}a.s(["default",()=>i,"dynamic",0,"force-dynamic"])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=%5Broot-of-the-server%5D__9bfb8e7c._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/presentation/web/app/build-feature-node-data.ts","../../../../../../../src/presentation/web/components/common/control-center-drawer/drawer-view.ts","../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx/__nextjs-internal-proxy.mjs","../../../../../../../src/presentation/web/app/%28dashboard%29/%40drawer/feature/%5BfeatureId%5D/page.tsx"],"sourcesContent":["import type { Feature, AgentRun } from '@shepai/core/domain/generated/output';\nimport {\n deriveNodeState,\n deriveProgress,\n deriveLifecycle,\n} from '@/components/common/feature-node/derive-feature-state';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\n\nexport interface BuildFeatureNodeDataOptions {\n baseBranch?: string;\n repositoryName?: string;\n /** AI-generated one-liner from FeatureArtifact */\n oneLiner?: string;\n /** Remote URL for the repository (HTTPS) */\n remoteUrl?: string;\n}\n\n/**\n * Builds a FeatureNodeData object from a Feature entity and optional AgentRun.\n * This is the single-feature version of the logic in `buildGraphNodes`.\n */\nexport function buildFeatureNodeData(\n feature: Feature,\n run: AgentRun | null,\n options?: BuildFeatureNodeDataOptions\n): FeatureNodeData {\n return {\n name: feature.name,\n description: feature.description ?? feature.slug,\n featureId: feature.id,\n lifecycle: deriveLifecycle(feature, run),\n repositoryPath: feature.repositoryPath,\n branch: feature.branch,\n specPath: feature.specPath,\n state: deriveNodeState(feature, run),\n progress: deriveProgress(feature),\n summary: feature.description,\n userQuery: feature.userQuery,\n createdAt: feature.createdAt instanceof Date ? feature.createdAt.getTime() : feature.createdAt,\n ...(feature.fast && { fastMode: true }),\n ...(options?.repositoryName && { repositoryName: options.repositoryName }),\n ...(options?.baseBranch && { baseBranch: options.baseBranch }),\n ...(options?.oneLiner && { oneLiner: options.oneLiner }),\n ...(options?.remoteUrl && { remoteUrl: options.remoteUrl }),\n ...(run?.agentType && { agentType: run.agentType as FeatureNodeData['agentType'] }),\n ...(run?.modelId && { modelId: run.modelId }),\n ...(run?.error && { errorMessage: run.error }),\n ...(feature.pr && {\n pr: {\n url: feature.pr.url,\n number: feature.pr.number,\n status: feature.pr.status,\n ciStatus: feature.pr.ciStatus,\n commitHash: feature.pr.commitHash,\n mergeable: feature.pr.mergeable,\n },\n }),\n };\n}\n","import type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport type { ParentFeatureOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\nimport type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';\n\n/** Tab key matching FeatureDrawerTabs */\nexport type FeatureTabKey =\n | 'overview'\n | 'activity'\n | 'log'\n | 'plan'\n | 'prd-review'\n | 'tech-decisions'\n | 'product-decisions'\n | 'merge-review';\n\n/** All valid tab key values — used for URL param validation. */\nexport const VALID_TAB_KEYS: ReadonlySet<string> = new Set<FeatureTabKey>([\n 'overview',\n 'activity',\n 'log',\n 'plan',\n 'prd-review',\n 'tech-decisions',\n 'product-decisions',\n 'merge-review',\n]);\n\n/** Type-guard: returns the value as FeatureTabKey if valid, otherwise undefined. */\nexport function parseTabKey(value: string | null | undefined): FeatureTabKey | undefined {\n if (value && VALID_TAB_KEYS.has(value)) return value as FeatureTabKey;\n return undefined;\n}\n\n/**\n * Discriminated union representing every possible drawer state in the control center.\n * Only one view can be active at a time.\n */\nexport type DrawerView =\n /** All feature views — tabs handle the lifecycle-specific content */\n | { type: 'feature'; node: FeatureNodeData; initialTab: FeatureTabKey }\n /** Feature creation form */\n | {\n type: 'feature-create';\n repositoryPath: string;\n initialParentId?: string;\n features: ParentFeatureOption[];\n workflowDefaults?: WorkflowDefaults;\n }\n /** Repository node actions */\n | { type: 'repository'; data: RepositoryNodeData };\n\n/** Derives the initial tab from node lifecycle + state. */\nexport function deriveInitialTab(node: FeatureNodeData): FeatureTabKey {\n if (node.lifecycle === 'requirements' && node.state === 'action-required') return 'prd-review';\n if (node.lifecycle === 'implementation' && node.state === 'action-required')\n return 'tech-decisions';\n if (node.lifecycle === 'review' && (node.state === 'action-required' || node.state === 'error'))\n return 'merge-review';\n return 'overview';\n}\n\n/**\n * Derives the active DrawerView from control-center state.\n * Priority: feature-create > selected-node > repository\n */\nexport function computeDrawerView({\n selectedNode,\n isCreateDrawerOpen,\n pendingRepositoryPath,\n pendingParentFeatureId,\n selectedRepoNode,\n features,\n workflowDefaults,\n}: {\n selectedNode: FeatureNodeData | null;\n isCreateDrawerOpen: boolean;\n pendingRepositoryPath: string;\n pendingParentFeatureId: string | undefined;\n selectedRepoNode: RepositoryNodeData | null;\n features: ParentFeatureOption[];\n workflowDefaults: WorkflowDefaults | undefined;\n}): DrawerView | null {\n if (isCreateDrawerOpen) {\n return {\n type: 'feature-create',\n repositoryPath: pendingRepositoryPath,\n initialParentId: pendingParentFeatureId,\n features,\n workflowDefaults,\n };\n }\n\n if (selectedNode) {\n return { type: 'feature', node: selectedNode, initialTab: deriveInitialTab(selectedNode) };\n }\n\n if (selectedRepoNode) {\n return { type: 'repository', data: selectedRepoNode };\n }\n\n return null;\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const FeatureDrawerClient = registerClientReference(\n function() { throw new Error(\"Attempted to call FeatureDrawerClient() from the server but FeatureDrawerClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx\",\n \"FeatureDrawerClient\",\n);\n","import { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\nimport type { IRepositoryRepository } from '@shepai/core/application/ports/output/repositories/repository-repository.interface';\nimport type { IGitPrService } from '@shepai/core/application/ports/output/services/git-pr-service.interface';\nimport type { GetFeatureArtifactUseCase } from '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport { CiStatus } from '@shepai/core/domain/generated/output';\nimport { buildFeatureNodeData } from '@/app/build-feature-node-data';\nimport { computeDrawerView } from '@/components/common/control-center-drawer/drawer-view';\nimport { FeatureDrawerClient } from '@/components/common/control-center-drawer/feature-drawer-client';\n\nconst CI_STATUS_MAP: Record<string, CiStatus> = {\n success: CiStatus.Success,\n failure: CiStatus.Failure,\n pending: CiStatus.Pending,\n};\n\n/** Skip static pre-rendering since we need runtime DI container. */\nexport const dynamic = 'force-dynamic';\n\ninterface FeatureDrawerPageProps {\n params: Promise<{ featureId: string }>;\n}\n\nexport default async function FeatureDrawerPage({ params }: FeatureDrawerPageProps) {\n const { featureId } = await params;\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const agentRunRepo = resolve<IAgentRunRepository>('IAgentRunRepository');\n const repoRepo = resolve<IRepositoryRepository>('IRepositoryRepository');\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n\n const feature = await featureRepo.findById(featureId);\n if (!feature) return null;\n\n const run = feature.agentRunId ? await agentRunRepo.findById(feature.agentRunId) : null;\n\n // Resolve repository name, base branch, and one-liner for the overview tab\n const getArtifact = resolve<GetFeatureArtifactUseCase>('GetFeatureArtifactUseCase');\n const [repo, baseBranch, artifact, remoteUrl, liveMergeable, liveCiResult] = await Promise.all([\n repoRepo.findByPath(feature.repositoryPath).catch(() => null),\n gitPrService.getDefaultBranch(feature.repositoryPath).catch(() => 'main'),\n getArtifact.execute(featureId).catch(() => null),\n gitPrService.getRemoteUrl(feature.repositoryPath).catch(() => null),\n feature.pr?.number\n ? gitPrService\n .getMergeableStatus(feature.repositoryPath, feature.pr.number)\n .catch(() => undefined)\n : Promise.resolve(undefined),\n feature.branch\n ? gitPrService.getCiStatus(feature.repositoryPath, feature.branch).catch(() => undefined)\n : Promise.resolve(undefined),\n ]);\n\n // Merge live PR status into feature data so the UI always reflects\n // the current GitHub state, even if the background watcher hasn't polled yet.\n if (feature.pr) {\n const liveCiStatus = liveCiResult\n ? (CI_STATUS_MAP[liveCiResult.status] ?? CiStatus.Pending)\n : undefined;\n const updates: Record<string, unknown> = {};\n if (liveMergeable !== undefined) updates.mergeable = liveMergeable;\n if (liveCiStatus !== undefined) updates.ciStatus = liveCiStatus;\n\n if (Object.keys(updates).length > 0) {\n feature.pr = { ...feature.pr, ...updates };\n featureRepo.update(feature).catch(() => {\n /* best-effort persist */\n });\n }\n }\n\n const nodeData = buildFeatureNodeData(feature, run, {\n repositoryName: repo?.name,\n baseBranch,\n oneLiner: artifact?.oneLiner,\n remoteUrl: remoteUrl ?? undefined,\n });\n\n const view = computeDrawerView({\n selectedNode: nodeData,\n isCreateDrawerOpen: false,\n pendingRepositoryPath: '',\n pendingParentFeatureId: undefined,\n selectedRepoNode: null,\n features: [],\n workflowDefaults: undefined,\n });\n\n if (!view) return null;\n\n return <FeatureDrawerClient view={view} />;\n } catch {\n // Feature not found — render nothing (drawer stays closed)\n return null;\n }\n}\n"],"names":[],"mappings":"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","ignoreList":[2]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/presentation/web/app/build-feature-node-data.ts","../../../../../../../src/presentation/web/components/common/control-center-drawer/drawer-view.ts","../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx/__nextjs-internal-proxy.mjs","../../../../../../../src/presentation/web/app/%28dashboard%29/%40drawer/feature/%5BfeatureId%5D/page.tsx"],"sourcesContent":["import type { Feature, AgentRun } from '@shepai/core/domain/generated/output';\nimport {\n deriveNodeState,\n deriveProgress,\n deriveLifecycle,\n} from '@/components/common/feature-node/derive-feature-state';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\n\nexport interface BuildFeatureNodeDataOptions {\n baseBranch?: string;\n repositoryName?: string;\n /** AI-generated one-liner from FeatureArtifact */\n oneLiner?: string;\n /** Remote URL for the repository (HTTPS) */\n remoteUrl?: string;\n}\n\n/**\n * Builds a FeatureNodeData object from a Feature entity and optional AgentRun.\n * This is the single-feature version of the logic in `buildGraphNodes`.\n */\nexport function buildFeatureNodeData(\n feature: Feature,\n run: AgentRun | null,\n options?: BuildFeatureNodeDataOptions\n): FeatureNodeData {\n return {\n name: feature.name,\n description: feature.description ?? feature.slug,\n featureId: feature.id,\n lifecycle: deriveLifecycle(feature, run),\n repositoryPath: feature.repositoryPath,\n branch: feature.branch,\n specPath: feature.specPath,\n state: deriveNodeState(feature, run),\n progress: deriveProgress(feature),\n summary: feature.description,\n userQuery: feature.userQuery,\n createdAt: feature.createdAt instanceof Date ? feature.createdAt.getTime() : feature.createdAt,\n ...(feature.fast && { fastMode: true }),\n ...(options?.repositoryName && { repositoryName: options.repositoryName }),\n ...(options?.baseBranch && { baseBranch: options.baseBranch }),\n ...(options?.oneLiner && { oneLiner: options.oneLiner }),\n ...(options?.remoteUrl && { remoteUrl: options.remoteUrl }),\n ...(run?.agentType && { agentType: run.agentType as FeatureNodeData['agentType'] }),\n ...(run?.modelId && { modelId: run.modelId }),\n ...(run?.error && { errorMessage: run.error }),\n ...(feature.pr && {\n pr: {\n url: feature.pr.url,\n number: feature.pr.number,\n status: feature.pr.status,\n ciStatus: feature.pr.ciStatus,\n commitHash: feature.pr.commitHash,\n mergeable: feature.pr.mergeable,\n },\n }),\n };\n}\n","import type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport type { ParentFeatureOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\nimport type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';\n\n/** Tab key matching FeatureDrawerTabs */\nexport type FeatureTabKey =\n | 'overview'\n | 'activity'\n | 'log'\n | 'plan'\n | 'prd-review'\n | 'tech-decisions'\n | 'product-decisions'\n | 'merge-review';\n\n/** All valid tab key values — used for URL param validation. */\nexport const VALID_TAB_KEYS: ReadonlySet<string> = new Set<FeatureTabKey>([\n 'overview',\n 'activity',\n 'log',\n 'plan',\n 'prd-review',\n 'tech-decisions',\n 'product-decisions',\n 'merge-review',\n]);\n\n/** Type-guard: returns the value as FeatureTabKey if valid, otherwise undefined. */\nexport function parseTabKey(value: string | null | undefined): FeatureTabKey | undefined {\n if (value && VALID_TAB_KEYS.has(value)) return value as FeatureTabKey;\n return undefined;\n}\n\n/**\n * Discriminated union representing every possible drawer state in the control center.\n * Only one view can be active at a time.\n */\nexport type DrawerView =\n /** All feature views — tabs handle the lifecycle-specific content */\n | { type: 'feature'; node: FeatureNodeData; initialTab: FeatureTabKey }\n /** Feature creation form */\n | {\n type: 'feature-create';\n repositoryPath: string;\n initialParentId?: string;\n features: ParentFeatureOption[];\n workflowDefaults?: WorkflowDefaults;\n }\n /** Repository node actions */\n | { type: 'repository'; data: RepositoryNodeData };\n\n/** Derives the initial tab from node lifecycle + state. */\nexport function deriveInitialTab(node: FeatureNodeData): FeatureTabKey {\n if (node.lifecycle === 'requirements' && node.state === 'action-required') return 'prd-review';\n if (node.lifecycle === 'implementation' && node.state === 'action-required')\n return 'tech-decisions';\n if (node.lifecycle === 'review' && (node.state === 'action-required' || node.state === 'error'))\n return 'merge-review';\n return 'overview';\n}\n\n/**\n * Derives the active DrawerView from control-center state.\n * Priority: feature-create > selected-node > repository\n */\nexport function computeDrawerView({\n selectedNode,\n isCreateDrawerOpen,\n pendingRepositoryPath,\n pendingParentFeatureId,\n selectedRepoNode,\n features,\n workflowDefaults,\n}: {\n selectedNode: FeatureNodeData | null;\n isCreateDrawerOpen: boolean;\n pendingRepositoryPath: string;\n pendingParentFeatureId: string | undefined;\n selectedRepoNode: RepositoryNodeData | null;\n features: ParentFeatureOption[];\n workflowDefaults: WorkflowDefaults | undefined;\n}): DrawerView | null {\n if (isCreateDrawerOpen) {\n return {\n type: 'feature-create',\n repositoryPath: pendingRepositoryPath,\n initialParentId: pendingParentFeatureId,\n features,\n workflowDefaults,\n };\n }\n\n if (selectedNode) {\n return { type: 'feature', node: selectedNode, initialTab: deriveInitialTab(selectedNode) };\n }\n\n if (selectedRepoNode) {\n return { type: 'repository', data: selectedRepoNode };\n }\n\n return null;\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const FeatureDrawerClient = registerClientReference(\n function() { throw new Error(\"Attempted to call FeatureDrawerClient() from the server but FeatureDrawerClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx\",\n \"FeatureDrawerClient\",\n);\n","import { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\nimport type { IRepositoryRepository } from '@shepai/core/application/ports/output/repositories/repository-repository.interface';\nimport type { IGitPrService } from '@shepai/core/application/ports/output/services/git-pr-service.interface';\nimport type { GetFeatureArtifactUseCase } from '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport { CiStatus } from '@shepai/core/domain/generated/output';\nimport { buildFeatureNodeData } from '@/app/build-feature-node-data';\nimport { computeDrawerView } from '@/components/common/control-center-drawer/drawer-view';\nimport { FeatureDrawerClient } from '@/components/common/control-center-drawer/feature-drawer-client';\n\nconst CI_STATUS_MAP: Record<string, CiStatus> = {\n success: CiStatus.Success,\n failure: CiStatus.Failure,\n pending: CiStatus.Pending,\n};\n\n/** Skip static pre-rendering since we need runtime DI container. */\nexport const dynamic = 'force-dynamic';\n\ninterface FeatureDrawerPageProps {\n params: Promise<{ featureId: string }>;\n}\n\nexport default async function FeatureDrawerPage({ params }: FeatureDrawerPageProps) {\n const { featureId } = await params;\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const agentRunRepo = resolve<IAgentRunRepository>('IAgentRunRepository');\n const repoRepo = resolve<IRepositoryRepository>('IRepositoryRepository');\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n\n const feature = await featureRepo.findById(featureId);\n if (!feature) return null;\n\n const run = feature.agentRunId ? await agentRunRepo.findById(feature.agentRunId) : null;\n\n // Resolve repository name, base branch, and one-liner for the overview tab\n const getArtifact = resolve<GetFeatureArtifactUseCase>('GetFeatureArtifactUseCase');\n const [repo, baseBranch, artifact, remoteUrl, liveMergeable, liveCiResult] = await Promise.all([\n repoRepo.findByPath(feature.repositoryPath).catch(() => null),\n gitPrService.getDefaultBranch(feature.repositoryPath).catch(() => 'main'),\n getArtifact.execute(featureId).catch(() => null),\n gitPrService.getRemoteUrl(feature.repositoryPath).catch(() => null),\n feature.pr?.number\n ? gitPrService\n .getMergeableStatus(feature.repositoryPath, feature.pr.number)\n .catch(() => undefined)\n : Promise.resolve(undefined),\n feature.branch\n ? gitPrService.getCiStatus(feature.repositoryPath, feature.branch).catch(() => undefined)\n : Promise.resolve(undefined),\n ]);\n\n // Merge live PR status into feature data so the UI always reflects\n // the current GitHub state, even if the background watcher hasn't polled yet.\n if (feature.pr) {\n const liveCiStatus = liveCiResult\n ? (CI_STATUS_MAP[liveCiResult.status] ?? CiStatus.Pending)\n : undefined;\n const updates: Record<string, unknown> = {};\n if (liveMergeable !== undefined) updates.mergeable = liveMergeable;\n if (liveCiStatus !== undefined) updates.ciStatus = liveCiStatus;\n\n if (Object.keys(updates).length > 0) {\n feature.pr = { ...feature.pr, ...updates };\n featureRepo.update(feature).catch(() => {\n /* best-effort persist */\n });\n }\n }\n\n const nodeData = buildFeatureNodeData(feature, run, {\n repositoryName: repo?.name,\n baseBranch,\n oneLiner: artifact?.oneLiner,\n remoteUrl: remoteUrl ?? undefined,\n });\n\n const view = computeDrawerView({\n selectedNode: nodeData,\n isCreateDrawerOpen: false,\n pendingRepositoryPath: '',\n pendingParentFeatureId: undefined,\n selectedRepoNode: null,\n features: [],\n workflowDefaults: undefined,\n });\n\n if (!view) return null;\n\n return <FeatureDrawerClient view={view} />;\n } catch {\n // Feature not found — render nothing (drawer stays closed)\n return null;\n }\n}\n"],"names":[],"mappings":"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","ignoreList":[2]}
|