@shepai/cli 1.85.0-pr250.edcd813 → 1.85.0-pr257.92952e7
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]/[tab]/page.d.ts +11 -0
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +49 -0
- package/dist/src/presentation/web/app/(dashboard)/feature/[featureId]/[tab]/page.d.ts +3 -0
- package/dist/src/presentation/web/app/(dashboard)/feature/[featureId]/[tab]/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/(dashboard)/feature/[featureId]/[tab]/page.js +4 -0
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts +0 -10
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-feature-plan.js +0 -8
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +4 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +17 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts +4 -2
- 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 +2 -2
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +3 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +64 -3
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.js +20 -3
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.js +0 -74
- 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 +2 -0
- 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/routes-manifest.json +9 -0
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
- 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/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +18 -0
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +320 -0
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +20 -0
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.map +5 -0
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -0
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +2 -0
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
- 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 +14 -14
- 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 +18 -18
- 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/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +18 -0
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +320 -0
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +20 -0
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.map +5 -0
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -0
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +2 -0
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
- 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 +14 -14
- 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 +14 -14
- 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/page.js +1 -1
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error/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.js +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.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/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 +1 -1
- 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 +2 -2
- 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 +2 -2
- 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.js +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +2 -0
- package/web/.next/server/chunks/{[root-of-the-server]__52c318d1._.js → [root-of-the-server]__91d44424._.js} +2 -2
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c29a2302.js +4 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c29a2302.js.map +1 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d1fd387b.js +4 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d1fd387b.js.map +1 -0
- 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_e56b3bd6._.js +3 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_e56b3bd6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.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]__17143953._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__8d9536c4._.js → [root-of-the-server]__3534949f._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5b00ed0b._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5b00ed0b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.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]__f8210f45._.js → [root-of-the-server]__63647d21._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__f0d8d054._.js → [root-of-the-server]__89e8a5cc._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.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]__9de266fa._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- 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]__f1a05100._.js → [root-of-the-server]__ad2b2a3c._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__b65f78cf._.js → [root-of-the-server]__d78d1479._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__b3a4cef4._.js → [root-of-the-server]__e630cc47._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e630cc47._.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/_050a0a7c._.js +3 -0
- package/web/.next/server/chunks/ssr/_050a0a7c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1e3cf73b._.js +1 -1
- package/web/.next/server/chunks/ssr/_1e3cf73b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_63868199._.js +1 -1
- package/web/.next/server/chunks/ssr/_63868199._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_7c3589a0._.js +3 -0
- package/web/.next/server/chunks/ssr/_7c3589a0._.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/_922aa39f._.js +3 -0
- package/web/.next/server/chunks/ssr/_922aa39f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_de1a716c._.js → _ffaee675._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_de1a716c._.js.map → _ffaee675._.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/node_modules__pnpm_20d65f43._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_20d65f43._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
- 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)_feature_[featureId]_[tab]_page_tsx_40a5d287._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_feature_[featureId]_[tab]_page_tsx_40a5d287._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_80b5b4bc._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_80b5b4bc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_82416b8f._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_82416b8f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_a5e6c910._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_a5e6c910._.js.map +1 -0
- 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_e4510d10._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.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 +322 -28
- package/web/.next/static/chunks/4deda912c9a894d0.js +1 -0
- package/web/.next/static/chunks/50f89c3112f6dd23.css +2 -0
- package/web/.next/static/chunks/5584cb9e831c532d.js +1 -0
- package/web/.next/static/chunks/{d30abacd431cdcba.js → 6b658e21fc94967b.js} +1 -1
- package/web/.next/static/chunks/6f95093ff53ba7cf.js +11 -0
- package/web/.next/static/chunks/{3cab322155d95001.js → 89b6185ad3713455.js} +1 -1
- package/web/.next/static/chunks/8ce8f561822f9884.js +1 -0
- package/web/.next/static/chunks/8d4efb009d9c65d5.js +1 -0
- package/web/.next/static/chunks/{66d77699ae515947.js → aa6f7ce19a812899.js} +1 -1
- package/web/.next/static/chunks/c07e4c3ed0c2f36e.js +1 -0
- package/web/.next/static/chunks/{bc721b8be0dd63d4.js → c0bb23da11a00d51.js} +1 -1
- package/web/.next/static/chunks/{22fc35c70797da48.js → f9ac40d1adcdac42.js} +1 -1
- package/web/.next/static/chunks/{49fa8d816446d299.js → fa86cbce7eca09bc.js} +1 -1
- package/dist/src/presentation/web/components/common/task-progress-view/index.d.ts +0 -3
- package/dist/src/presentation/web/components/common/task-progress-view/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/task-progress-view/index.js +0 -1
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.d.ts +0 -6
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.js +0 -84
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts +0 -16
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.js +0 -194
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ae824a5b._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ae824a5b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_887258d0._.js +0 -3
- package/web/.next/server/chunks/ssr/_887258d0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_cf366ac8._.js +0 -3
- package/web/.next/server/chunks/ssr/_cf366ac8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_d42594dd._.js +0 -3
- package/web/.next/server/chunks/ssr/_d42594dd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f38b49fe._.js +0 -3
- package/web/.next/server/chunks/ssr/_f38b49fe._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_07f6911c._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_07f6911c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_d80c1060._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_d80c1060._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_5124369c._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_components_5124369c._.js.map +0 -1
- package/web/.next/static/chunks/30c827a88342741e.js +0 -1
- package/web/.next/static/chunks/58c0c7e0ba4eb800.js +0 -1
- package/web/.next/static/chunks/91d63f8e429f5900.css +0 -2
- package/web/.next/static/chunks/91f4b9b71f996fa2.js +0 -1
- package/web/.next/static/chunks/9563588568084e9f.js +0 -11
- package/web/.next/static/chunks/a1c2ecb710b44081.js +0 -1
- package/web/.next/static/chunks/bca16a8f7c5c8640.js +0 -1
- /package/web/.next/server/chunks/{[root-of-the-server]__52c318d1._.js.map → [root-of-the-server]__91d44424._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__8d9536c4._.js.map → [root-of-the-server]__3534949f._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__f8210f45._.js.map → [root-of-the-server]__63647d21._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__f1a05100._.js.map → [root-of-the-server]__ad2b2a3c._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__b65f78cf._.js.map → [root-of-the-server]__d78d1479._.js.map} +0 -0
- /package/web/.next/static/{bR3UuAR1sk0-SFvYGdbqM → s4G7a46cPIgMf5aAsf3lY}/_buildManifest.js +0 -0
- /package/web/.next/static/{bR3UuAR1sk0-SFvYGdbqM → s4G7a46cPIgMf5aAsf3lY}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{bR3UuAR1sk0-SFvYGdbqM → s4G7a46cPIgMf5aAsf3lY}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/task-progress-view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { TaskProgressView } from './task-progress-view.js';
|
package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { PlanTaskData } from '../../../app/actions/get-feature-plan.js';
|
|
2
|
-
export interface TaskProgressViewProps {
|
|
3
|
-
tasks: PlanTaskData[];
|
|
4
|
-
}
|
|
5
|
-
export declare function TaskProgressView({ tasks }: TaskProgressViewProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
-
//# sourceMappingURL=task-progress-view.d.ts.map
|
package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-progress-view.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/task-progress-view/task-progress-view.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,gCAAgC,CAAC;AAEnF,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AA8CD,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,qBAAqB,2CAmBhE"}
|
package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useCallback, useMemo } from 'react';
|
|
4
|
-
import { Loader2, Circle, Check, Eye, ChevronRight, CheckCircle2, CircleDashed, } from 'lucide-react';
|
|
5
|
-
import { cn } from '../../../lib/utils.js';
|
|
6
|
-
const taskStateConfig = {
|
|
7
|
-
Todo: {
|
|
8
|
-
icon: Circle,
|
|
9
|
-
colorClass: 'text-muted-foreground',
|
|
10
|
-
borderClass: 'border-border',
|
|
11
|
-
label: 'Todo',
|
|
12
|
-
},
|
|
13
|
-
'Work in Progress': {
|
|
14
|
-
icon: Loader2,
|
|
15
|
-
colorClass: 'text-blue-600',
|
|
16
|
-
borderClass: 'border-blue-200',
|
|
17
|
-
spinning: true,
|
|
18
|
-
label: 'In Progress',
|
|
19
|
-
},
|
|
20
|
-
Done: {
|
|
21
|
-
icon: Check,
|
|
22
|
-
colorClass: 'text-emerald-600',
|
|
23
|
-
borderClass: 'border-emerald-200',
|
|
24
|
-
label: 'Done',
|
|
25
|
-
},
|
|
26
|
-
Review: {
|
|
27
|
-
icon: Eye,
|
|
28
|
-
colorClass: 'text-amber-600',
|
|
29
|
-
borderClass: 'border-amber-200',
|
|
30
|
-
label: 'Review',
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
const defaultTaskConfig = {
|
|
34
|
-
icon: Circle,
|
|
35
|
-
colorClass: 'text-muted-foreground',
|
|
36
|
-
borderClass: 'border-border',
|
|
37
|
-
label: 'Unknown',
|
|
38
|
-
};
|
|
39
|
-
export function TaskProgressView({ tasks }) {
|
|
40
|
-
if (tasks.length === 0) {
|
|
41
|
-
return (_jsx("div", { className: "flex flex-col items-center justify-center gap-2 py-4", children: _jsx("p", { className: "text-muted-foreground text-sm", children: "No tasks defined yet" }) }));
|
|
42
|
-
}
|
|
43
|
-
return (_jsxs("div", { "data-testid": "task-progress-view", className: "flex flex-col gap-3", children: [_jsx(ProgressSummary, { tasks: tasks }), _jsx("div", { "data-testid": "task-progress-list", className: "flex flex-col gap-2", children: tasks.map((task, index) => (_jsx(TaskCard, { task: task, index: index }, task.title || `task-${index}`))) })] }));
|
|
44
|
-
}
|
|
45
|
-
// ── Progress Summary ─────────────────────────────────────────────────
|
|
46
|
-
function ProgressSummary({ tasks }) {
|
|
47
|
-
const counts = useMemo(() => {
|
|
48
|
-
const done = tasks.filter((t) => t.state === 'Done').length;
|
|
49
|
-
const wip = tasks.filter((t) => t.state === 'Work in Progress').length;
|
|
50
|
-
const review = tasks.filter((t) => t.state === 'Review').length;
|
|
51
|
-
const todo = tasks.filter((t) => t.state !== 'Done' && t.state !== 'Work in Progress' && t.state !== 'Review').length;
|
|
52
|
-
const total = tasks.length;
|
|
53
|
-
const percent = total > 0 ? Math.round((done / total) * 100) : 0;
|
|
54
|
-
return { done, wip, review, todo, total, percent };
|
|
55
|
-
}, [tasks]);
|
|
56
|
-
return (_jsxs("div", { "data-testid": "task-progress-summary", className: "flex flex-col gap-2", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Task Progress" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [counts.done, " of ", counts.total, " done"] })] }), _jsx("div", { className: "bg-muted h-2 w-full overflow-hidden rounded-full", children: _jsx("div", { "data-testid": "task-progress-bar", className: "h-full rounded-full bg-emerald-500 transition-all", style: { width: `${counts.percent}%` } }) }), _jsxs("div", { className: "flex flex-wrap gap-3", children: [counts.done > 0 ? (_jsx(StatChip, { icon: Check, label: "Done", count: counts.done, className: "text-emerald-600" })) : null, counts.wip > 0 ? (_jsx(StatChip, { icon: Loader2, label: "In Progress", count: counts.wip, className: "text-blue-600" })) : null, counts.review > 0 ? (_jsx(StatChip, { icon: Eye, label: "Review", count: counts.review, className: "text-amber-600" })) : null, counts.todo > 0 ? (_jsx(StatChip, { icon: Circle, label: "Todo", count: counts.todo, className: "text-muted-foreground" })) : null] })] }));
|
|
57
|
-
}
|
|
58
|
-
function StatChip({ icon: Icon, label, count, className, }) {
|
|
59
|
-
return (_jsxs("span", { className: cn('flex items-center gap-1 text-xs', className), children: [_jsx(Icon, { className: "h-3 w-3" }), count, " ", label] }));
|
|
60
|
-
}
|
|
61
|
-
// ── Task Card ────────────────────────────────────────────────────────
|
|
62
|
-
function TaskCard({ task, index }) {
|
|
63
|
-
const [expanded, setExpanded] = useState(false);
|
|
64
|
-
const config = taskStateConfig[task.state] ?? defaultTaskConfig;
|
|
65
|
-
const Icon = config.icon;
|
|
66
|
-
const hasDetails = task.actionItems.length > 0;
|
|
67
|
-
const handleToggle = useCallback(() => {
|
|
68
|
-
if (hasDetails) {
|
|
69
|
-
setExpanded((prev) => !prev);
|
|
70
|
-
}
|
|
71
|
-
}, [hasDetails]);
|
|
72
|
-
return (_jsxs("div", { "data-testid": `task-card-${index}`, className: cn('rounded-lg border', config.borderClass), children: [_jsxs("button", { type: "button", onClick: handleToggle, disabled: !hasDetails, className: cn('flex w-full items-start gap-2 px-3 py-2.5 text-left', hasDetails && 'hover:bg-muted/50 cursor-pointer transition-colors'), children: [_jsx(Icon, { className: cn('mt-0.5 h-4 w-4 shrink-0', config.colorClass, config.spinning && 'animate-spin') }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [_jsx("span", { className: cn('text-sm font-medium', config.colorClass), children: task.title }), task.description ? (_jsx("span", { className: "text-muted-foreground text-xs", children: task.description })) : null] }), hasDetails ? (_jsx(ChevronRight, { className: cn('text-muted-foreground mt-0.5 h-4 w-4 shrink-0 transition-transform', expanded && 'rotate-90') })) : null] }), expanded && hasDetails ? (_jsx("div", { className: "border-t px-3 py-2.5", children: _jsx("div", { className: "flex flex-col gap-2", children: task.actionItems.map((item, aiIndex) => (_jsx(ActionItemRow, { item: item }, item.name || `ai-${aiIndex}`))) }) })) : null] }));
|
|
73
|
-
}
|
|
74
|
-
// ── Action Item Row ──────────────────────────────────────────────────
|
|
75
|
-
function ActionItemRow({ item }) {
|
|
76
|
-
const totalCriteria = item.acceptanceCriteria.length;
|
|
77
|
-
const verifiedCriteria = item.acceptanceCriteria.filter((ac) => ac.verified).length;
|
|
78
|
-
const allVerified = totalCriteria > 0 && verifiedCriteria === totalCriteria;
|
|
79
|
-
return (_jsxs("div", { "data-testid": "action-item", className: "flex flex-col gap-1.5", children: [_jsxs("div", { className: "flex items-start gap-2", children: [allVerified ? (_jsx(CheckCircle2, { className: "mt-0.5 h-3.5 w-3.5 shrink-0 text-emerald-600" })) : (_jsx(CircleDashed, { className: "text-muted-foreground mt-0.5 h-3.5 w-3.5 shrink-0" })), _jsxs("div", { className: "flex min-w-0 flex-col gap-0.5", children: [_jsx("span", { className: "text-xs font-medium", children: item.name }), item.description ? (_jsx("span", { className: "text-muted-foreground text-[11px]", children: item.description })) : null] }), totalCriteria > 0 ? (_jsxs("span", { className: "text-muted-foreground ml-auto shrink-0 text-[11px]", children: [verifiedCriteria, "/", totalCriteria] })) : null] }), totalCriteria > 0 ? (_jsx("div", { className: "ml-5.5 flex flex-col gap-1", children: item.acceptanceCriteria.map((ac, acIndex) => (_jsx(AcceptanceCriterionRow, { criterion: ac }, ac.description || `ac-${acIndex}`))) })) : null] }));
|
|
80
|
-
}
|
|
81
|
-
// ── Acceptance Criterion Row ─────────────────────────────────────────
|
|
82
|
-
function AcceptanceCriterionRow({ criterion, }) {
|
|
83
|
-
return (_jsxs("div", { "data-testid": "acceptance-criterion", className: "flex items-start gap-1.5", children: [criterion.verified ? (_jsx(Check, { className: "mt-0.5 h-3 w-3 shrink-0 text-emerald-600" })) : (_jsx(Circle, { className: "text-muted-foreground mt-0.5 h-3 w-3 shrink-0" })), _jsx("span", { className: cn('text-[11px]', criterion.verified ? 'text-muted-foreground line-through' : 'text-foreground'), children: criterion.description })] }));
|
|
84
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { TaskProgressView } from './task-progress-view.js';
|
|
3
|
-
declare const meta: Meta<typeof TaskProgressView>;
|
|
4
|
-
export default meta;
|
|
5
|
-
type Story = StoryObj<typeof TaskProgressView>;
|
|
6
|
-
/** Default — tasks in mixed states with action items and acceptance criteria. */
|
|
7
|
-
export declare const Default: Story;
|
|
8
|
-
/** All tasks completed. */
|
|
9
|
-
export declare const AllDone: Story;
|
|
10
|
-
/** All tasks in Todo state. */
|
|
11
|
-
export declare const AllTodo: Story;
|
|
12
|
-
/** Empty — no tasks defined. */
|
|
13
|
-
export declare const Empty: Story;
|
|
14
|
-
/** Single task with detailed action items. */
|
|
15
|
-
export declare const SingleTaskDetailed: Story;
|
|
16
|
-
//# sourceMappingURL=task-progress-view.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-progress-view.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/task-progress-view/task-progress-view.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAYvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AA+J/C,iFAAiF;AACjF,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,gCAAgC;AAChC,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,kBAAkB,EAAE,KAIhC,CAAC"}
|
package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.js
DELETED
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { TaskProgressView } from './task-progress-view.js';
|
|
3
|
-
const meta = {
|
|
4
|
-
title: 'Composed/TaskProgressView',
|
|
5
|
-
component: TaskProgressView,
|
|
6
|
-
tags: ['autodocs'],
|
|
7
|
-
parameters: { layout: 'padded' },
|
|
8
|
-
decorators: [
|
|
9
|
-
(Story) => (_jsx("div", { style: { width: '400px', border: '1px solid var(--color-border)', padding: '16px' }, children: _jsx(Story, {}) })),
|
|
10
|
-
],
|
|
11
|
-
};
|
|
12
|
-
export default meta;
|
|
13
|
-
/* ---------------------------------------------------------------------------
|
|
14
|
-
* Data fixtures
|
|
15
|
-
* ------------------------------------------------------------------------- */
|
|
16
|
-
const mixedTasks = [
|
|
17
|
-
{
|
|
18
|
-
title: 'Set up OAuth provider configuration',
|
|
19
|
-
description: 'Configure Google and GitHub OAuth apps with client IDs and secrets',
|
|
20
|
-
state: 'Done',
|
|
21
|
-
actionItems: [
|
|
22
|
-
{
|
|
23
|
-
name: 'Create OAuth config module',
|
|
24
|
-
description: 'Define provider configuration schema and load from env',
|
|
25
|
-
acceptanceCriteria: [
|
|
26
|
-
{ description: 'Config loads from environment variables', verified: true },
|
|
27
|
-
{ description: 'Validation rejects missing client ID or secret', verified: true },
|
|
28
|
-
],
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
name: 'Register OAuth apps',
|
|
32
|
-
description: 'Register apps with Google and GitHub developer consoles',
|
|
33
|
-
acceptanceCriteria: [
|
|
34
|
-
{ description: 'Google OAuth app created with correct scopes', verified: true },
|
|
35
|
-
{ description: 'GitHub OAuth app created with correct callback URL', verified: true },
|
|
36
|
-
],
|
|
37
|
-
},
|
|
38
|
-
],
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
title: 'Implement callback handler',
|
|
42
|
-
description: 'Handle OAuth callback with authorization code exchange',
|
|
43
|
-
state: 'Done',
|
|
44
|
-
actionItems: [
|
|
45
|
-
{
|
|
46
|
-
name: 'Build callback endpoint',
|
|
47
|
-
description: 'GET /auth/callback with code exchange logic',
|
|
48
|
-
acceptanceCriteria: [
|
|
49
|
-
{ description: 'Exchanges authorization code for tokens', verified: true },
|
|
50
|
-
],
|
|
51
|
-
},
|
|
52
|
-
],
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
title: 'Add token refresh logic',
|
|
56
|
-
description: 'Implement silent token refresh using refresh tokens stored in httpOnly cookies',
|
|
57
|
-
state: 'Work in Progress',
|
|
58
|
-
actionItems: [
|
|
59
|
-
{
|
|
60
|
-
name: 'Implement refresh endpoint',
|
|
61
|
-
description: 'POST /auth/refresh to issue new access token',
|
|
62
|
-
acceptanceCriteria: [
|
|
63
|
-
{ description: 'Returns new access token when refresh token is valid', verified: true },
|
|
64
|
-
{ description: 'Returns 401 when refresh token is expired', verified: false },
|
|
65
|
-
],
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
name: 'Add httpOnly cookie handling',
|
|
69
|
-
description: 'Store refresh tokens in secure httpOnly cookies',
|
|
70
|
-
acceptanceCriteria: [
|
|
71
|
-
{ description: 'Cookies are set with Secure and HttpOnly flags', verified: false },
|
|
72
|
-
],
|
|
73
|
-
},
|
|
74
|
-
],
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
title: 'Create user profile sync',
|
|
78
|
-
description: 'Sync user profile data from identity providers on login',
|
|
79
|
-
state: 'Todo',
|
|
80
|
-
actionItems: [
|
|
81
|
-
{
|
|
82
|
-
name: 'Fetch profile from provider',
|
|
83
|
-
description: 'Use access token to retrieve user profile from Google/GitHub',
|
|
84
|
-
acceptanceCriteria: [
|
|
85
|
-
{ description: 'Retrieves name, email, and avatar from Google', verified: false },
|
|
86
|
-
{ description: 'Retrieves name, email, and avatar from GitHub', verified: false },
|
|
87
|
-
],
|
|
88
|
-
},
|
|
89
|
-
],
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
title: 'Write integration tests',
|
|
93
|
-
description: 'Test the full OAuth flow with mocked providers',
|
|
94
|
-
state: 'Todo',
|
|
95
|
-
actionItems: [],
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
title: 'Update API documentation',
|
|
99
|
-
description: 'Document new authentication endpoints and flows',
|
|
100
|
-
state: 'Review',
|
|
101
|
-
actionItems: [
|
|
102
|
-
{
|
|
103
|
-
name: 'Document auth endpoints',
|
|
104
|
-
description: 'Add OpenAPI specs for all auth routes',
|
|
105
|
-
acceptanceCriteria: [
|
|
106
|
-
{ description: 'All endpoints have OpenAPI documentation', verified: true },
|
|
107
|
-
{ description: 'Examples included for each endpoint', verified: true },
|
|
108
|
-
],
|
|
109
|
-
},
|
|
110
|
-
],
|
|
111
|
-
},
|
|
112
|
-
];
|
|
113
|
-
const allDoneTasks = [
|
|
114
|
-
{
|
|
115
|
-
title: 'Design sliding window algorithm',
|
|
116
|
-
description: 'Implement Redis-backed sliding window counter',
|
|
117
|
-
state: 'Done',
|
|
118
|
-
actionItems: [
|
|
119
|
-
{
|
|
120
|
-
name: 'Implement counter',
|
|
121
|
-
description: 'Redis ZADD-based sliding window',
|
|
122
|
-
acceptanceCriteria: [
|
|
123
|
-
{ description: 'Counts requests in time window', verified: true },
|
|
124
|
-
{ description: 'Cleans up expired entries', verified: true },
|
|
125
|
-
],
|
|
126
|
-
},
|
|
127
|
-
],
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
title: 'Add rate limit middleware',
|
|
131
|
-
description: 'Express middleware that checks rate limits per IP',
|
|
132
|
-
state: 'Done',
|
|
133
|
-
actionItems: [],
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
title: 'Configure limits per endpoint',
|
|
137
|
-
description: 'Set different rate limits for public vs authenticated endpoints',
|
|
138
|
-
state: 'Done',
|
|
139
|
-
actionItems: [],
|
|
140
|
-
},
|
|
141
|
-
];
|
|
142
|
-
const allTodoTasks = [
|
|
143
|
-
{
|
|
144
|
-
title: 'Define notification types',
|
|
145
|
-
description: 'Enumerate all notification events and their payloads',
|
|
146
|
-
state: 'Todo',
|
|
147
|
-
actionItems: [],
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
title: 'Set up WebSocket server',
|
|
151
|
-
description: 'Configure Socket.io with Redis adapter',
|
|
152
|
-
state: 'Todo',
|
|
153
|
-
actionItems: [],
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
title: 'Implement notification store',
|
|
157
|
-
description: 'Persist notifications in database',
|
|
158
|
-
state: 'Todo',
|
|
159
|
-
actionItems: [],
|
|
160
|
-
},
|
|
161
|
-
];
|
|
162
|
-
/* ---------------------------------------------------------------------------
|
|
163
|
-
* Stories
|
|
164
|
-
* ------------------------------------------------------------------------- */
|
|
165
|
-
/** Default — tasks in mixed states with action items and acceptance criteria. */
|
|
166
|
-
export const Default = {
|
|
167
|
-
args: {
|
|
168
|
-
tasks: mixedTasks,
|
|
169
|
-
},
|
|
170
|
-
};
|
|
171
|
-
/** All tasks completed. */
|
|
172
|
-
export const AllDone = {
|
|
173
|
-
args: {
|
|
174
|
-
tasks: allDoneTasks,
|
|
175
|
-
},
|
|
176
|
-
};
|
|
177
|
-
/** All tasks in Todo state. */
|
|
178
|
-
export const AllTodo = {
|
|
179
|
-
args: {
|
|
180
|
-
tasks: allTodoTasks,
|
|
181
|
-
},
|
|
182
|
-
};
|
|
183
|
-
/** Empty — no tasks defined. */
|
|
184
|
-
export const Empty = {
|
|
185
|
-
args: {
|
|
186
|
-
tasks: [],
|
|
187
|
-
},
|
|
188
|
-
};
|
|
189
|
-
/** Single task with detailed action items. */
|
|
190
|
-
export const SingleTaskDetailed = {
|
|
191
|
-
args: {
|
|
192
|
-
tasks: [mixedTasks[2]],
|
|
193
|
-
},
|
|
194
|
-
};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},3410,a=>{"use strict";let b=(0,a.i(25700).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);a.s(["ChevronRight",()=>b],3410)},94132,a=>{"use strict";let b=(0,a.i(25700).default)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);a.s(["ChevronLeft",()=>b],94132)},71716,a=>{"use strict";let b=(0,a.i(25700).default)("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);a.s(["ChevronDown",()=>b],71716)},83886,a=>{"use strict";let b=(0,a.i(25700).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Eye",()=>b],83886)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__ae824a5b._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/chevron-right.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/chevron-left.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/chevron-down.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/eye.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }]];\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('chevron-left', __iconNode);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n key: '1nclc0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n];\n\n/**\n * @component @name Eye\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/eye\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Eye = createLucideIcon('eye', __iconNode);\n\nexport default Eye;\n"],"names":[],"mappings":"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","ignoreList":[0,1,2,3]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/hooks-client-context.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/server-inserted-html.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/module.compiled.js","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-dom.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/app-router-context.ts","../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-direction%401.1.1_%40types%2Breact%4019.2.10_react%4019.2.4/node_modules/%40radix-ui/react-direction/src/direction.tsx","../../../../../../../src/presentation/web/components/ui/input.tsx","../../../../../../../node_modules/.pnpm/%40radix-ui%2Bnumber%401.1.1/node_modules/%40radix-ui/number/src/number.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/puzzle.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/plus.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/wrench.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/circle-check.ts","../../../../../../../src/presentation/web/hooks/agent-events-provider.tsx","../../../../../../../src/presentation/web/hooks/use-agent-events.ts","../../../../../../../src/presentation/web/app/actions/data%3Acd8000%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/add-repository-button/pick-folder.ts","../../../../../../../src/presentation/web/hooks/sidebar-features-context.tsx"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].HooksClientContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].ServerInsertedHtml\n","if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxRuntime\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.React\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactDOM\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactServerDOMTurbopackClient\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].AppRouterContext\n","import * as React from 'react';\n\ntype Direction = 'ltr' | 'rtl';\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Direction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DirectionProviderProps {\n children?: React.ReactNode;\n dir: Direction;\n}\nconst DirectionProvider: React.FC<DirectionProviderProps> = (props) => {\n const { dir, children } = props;\n return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useDirection(localDir?: Direction) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || 'ltr';\n}\n\nconst Provider = DirectionProvider;\n\nexport {\n useDirection,\n //\n Provider,\n //\n DirectionProvider,\n};\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","function clamp(value: number, [min, max]: [number, number]): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z',\n key: 'w46dr5',\n },\n ],\n];\n\n/**\n * @component @name Puzzle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/puzzle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Puzzle = createLucideIcon('puzzle', __iconNode);\n\nexport default Puzzle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n];\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Plus = createLucideIcon('plus', __iconNode);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z',\n key: '1ngwbx',\n },\n ],\n];\n\n/**\n * @component @name Wrench\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/wrench\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Wrench = createLucideIcon('wrench', __iconNode);\n\nexport default Wrench;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'm9 12 2 2 4-4', key: 'dzmm74' }],\n];\n\n/**\n * @component @name CircleCheck\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/circle-check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleCheck = createLucideIcon('circle-check', __iconNode);\n\nexport default CircleCheck;\n","'use client';\n\nimport { createContext, useContext, useMemo, type ReactNode } from 'react';\nimport {\n useAgentEvents,\n type UseAgentEventsOptions,\n type UseAgentEventsResult,\n} from './use-agent-events';\n\nconst AgentEventsContext = createContext<UseAgentEventsResult | null>(null);\n\ninterface AgentEventsProviderProps extends UseAgentEventsOptions {\n children: ReactNode;\n}\n\n/**\n * Single SSE connection for agent events shared across all consumers.\n * Wrap the app once; use `useAgentEventsContext()` to read.\n */\nexport function AgentEventsProvider({ children, runId }: AgentEventsProviderProps) {\n const { events, lastEvent, connectionStatus } = useAgentEvents({ runId });\n\n const value = useMemo<UseAgentEventsResult>(\n () => ({ events, lastEvent, connectionStatus }),\n [events, lastEvent, connectionStatus]\n );\n\n return <AgentEventsContext.Provider value={value}>{children}</AgentEventsContext.Provider>;\n}\n\nexport function useAgentEventsContext(): UseAgentEventsResult {\n const ctx = useContext(AgentEventsContext);\n if (!ctx) {\n throw new Error('useAgentEventsContext must be used within an <AgentEventsProvider>');\n }\n return ctx;\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport type { NotificationEvent } from '@shepai/core/domain/generated/output';\nimport { createLogger } from '@/lib/logger';\n\nexport type ConnectionStatus = 'connected' | 'connecting' | 'disconnected';\n\nexport interface UseAgentEventsOptions {\n runId?: string;\n}\n\nexport interface UseAgentEventsResult {\n events: NotificationEvent[];\n lastEvent: NotificationEvent | null;\n connectionStatus: ConnectionStatus;\n}\n\nconst log = createLogger('[SSE]');\nconst SW_PATH = '/agent-events-sw.js';\nconst MAX_EVENTS = 500;\nconst PRUNE_KEEP = 250;\n\n/**\n * Hook that receives real-time agent notification events via a Service Worker.\n *\n * The SW maintains a single SSE connection to /api/agent-events and\n * broadcasts events to all open tabs. Falls back to direct EventSource\n * when Service Workers are unavailable.\n */\nexport function useAgentEvents(options?: UseAgentEventsOptions): UseAgentEventsResult {\n const [events, setEvents] = useState<NotificationEvent[]>([]);\n const [lastEvent, setLastEvent] = useState<NotificationEvent | null>(null);\n const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>('disconnected');\n\n const runId = options?.runId;\n const swRef = useRef<ServiceWorker | null>(null);\n\n const onMessage = useCallback((event: MessageEvent) => {\n const msg = event.data;\n if (!msg || typeof msg !== 'object') return;\n\n if (msg.type === 'notification') {\n const parsed = msg.data as NotificationEvent;\n log.debug('event received:', parsed.eventType, parsed);\n setEvents((prev) => {\n const next = [...prev, parsed];\n return next.length > MAX_EVENTS ? next.slice(-PRUNE_KEEP) : next;\n });\n setLastEvent(parsed);\n } else if (msg.type === 'status') {\n setConnectionStatus(msg.status as ConnectionStatus);\n }\n }, []);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n // ?sse=direct bypasses the Service Worker for debugging\n const bypassSW =\n typeof location !== 'undefined' && new URLSearchParams(location.search).has('sse');\n\n // Fallback: direct EventSource when SW not supported or bypassed\n if (!navigator.serviceWorker || bypassSW) {\n return connectDirectEventSource(runId, setEvents, setLastEvent, setConnectionStatus);\n }\n\n let cancelled = false;\n const fallbackCleanupRef = { current: undefined as (() => void) | undefined };\n\n function subscribeToWorker(worker: ServiceWorker) {\n if (cancelled) return;\n swRef.current = worker;\n worker.postMessage({ type: 'subscribe', runId });\n setConnectionStatus('connecting');\n }\n\n // Listen for messages from whatever SW controls this page\n navigator.serviceWorker.addEventListener('message', onMessage);\n\n // Re-subscribe when SW controller changes (e.g., after SW update via skipWaiting)\n function handleControllerChange() {\n if (cancelled) return;\n const newController = navigator.serviceWorker.controller;\n if (newController) {\n swRef.current = newController;\n newController.postMessage({ type: 'subscribe', runId });\n setConnectionStatus('connecting');\n }\n }\n navigator.serviceWorker.addEventListener('controllerchange', handleControllerChange);\n\n navigator.serviceWorker\n .register(SW_PATH, { scope: '/' })\n .then((registration) => {\n if (cancelled) return;\n\n // Use the active worker, or wait for it to activate\n const sw = registration.active ?? registration.installing ?? registration.waiting;\n if (!sw) {\n // No worker at all — fall back to direct EventSource\n fallbackCleanupRef.current = connectDirectEventSource(\n runId,\n setEvents,\n setLastEvent,\n setConnectionStatus\n );\n return;\n }\n\n if (sw.state === 'activated') {\n subscribeToWorker(sw);\n } else {\n const onStateChange = () => {\n if (sw.state === 'activated') {\n sw.removeEventListener('statechange', onStateChange);\n subscribeToWorker(sw);\n }\n };\n sw.addEventListener('statechange', onStateChange);\n }\n })\n .catch(() => {\n // SW registration failed — fall back to direct EventSource\n if (!cancelled) {\n fallbackCleanupRef.current = connectDirectEventSource(\n runId,\n setEvents,\n setLastEvent,\n setConnectionStatus\n );\n }\n });\n\n return () => {\n cancelled = true;\n navigator.serviceWorker.removeEventListener('message', onMessage);\n navigator.serviceWorker.removeEventListener('controllerchange', handleControllerChange);\n swRef.current?.postMessage({ type: 'unsubscribe' });\n swRef.current = null;\n fallbackCleanupRef.current?.();\n };\n }, [runId, onMessage]);\n\n return { events, lastEvent, connectionStatus };\n}\n\n// --- EventSource fallback (identical to the previous implementation) ---\n\nconst BASE_BACKOFF_MS = 1000;\nconst MAX_BACKOFF_MS = 30_000;\nconst STABLE_CONNECTION_MS = 5_000;\n\nfunction connectDirectEventSource(\n runId: string | undefined,\n setEvents: React.Dispatch<React.SetStateAction<NotificationEvent[]>>,\n setLastEvent: React.Dispatch<React.SetStateAction<NotificationEvent | null>>,\n setConnectionStatus: React.Dispatch<React.SetStateAction<ConnectionStatus>>\n): () => void {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n if (typeof EventSource === 'undefined') return () => {};\n\n let es: EventSource | null = null;\n let stopped = false;\n let backoff = BASE_BACKOFF_MS;\n let reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n let stableTimer: ReturnType<typeof setTimeout> | null = null;\n\n function connect() {\n if (stopped) return;\n\n const url = runId\n ? `/api/agent-events?runId=${encodeURIComponent(runId)}`\n : '/api/agent-events';\n\n es = new EventSource(url);\n setConnectionStatus('connecting');\n\n es.onopen = () => {\n setConnectionStatus('connected');\n stableTimer = setTimeout(() => {\n stableTimer = null;\n backoff = BASE_BACKOFF_MS;\n }, STABLE_CONNECTION_MS);\n };\n\n es.onerror = () => {\n es?.close();\n es = null;\n setConnectionStatus('disconnected');\n\n if (stableTimer !== null) {\n clearTimeout(stableTimer);\n stableTimer = null;\n }\n\n const delay = backoff;\n backoff = Math.min(delay * 2, MAX_BACKOFF_MS);\n\n reconnectTimer = setTimeout(() => {\n reconnectTimer = null;\n connect();\n }, delay);\n };\n\n es.addEventListener('notification', ((event: MessageEvent) => {\n const parsed: NotificationEvent = JSON.parse(event.data);\n setEvents((prev) => {\n const next = [...prev, parsed];\n return next.length > MAX_EVENTS ? next.slice(-PRUNE_KEEP) : next;\n });\n setLastEvent(parsed);\n }) as EventListener);\n }\n\n connect();\n\n return () => {\n stopped = true;\n if (reconnectTimer !== null) {\n clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n if (stableTimer !== null) {\n clearTimeout(stableTimer);\n stableTimer = null;\n }\n if (es) {\n es.close();\n es = null;\n }\n };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"002e24c6c36820ab007019e9c2eedd6f3f94e23fbb\":\"pickFolder\"},\"src/presentation/web/app/actions/pick-folder.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"002e24c6c36820ab007019e9c2eedd6f3f94e23fbb\",callServer,void 0,findSourceMapURL,\"pickFolder\");export{$$RSC_SERVER_ACTION_0 as pickFolder};","import { pickFolder as pickFolderAction } from '@/app/actions/pick-folder';\n\n/**\n * Opens a native OS folder picker dialog via server action.\n * Returns the selected absolute path, or null if the user cancelled.\n */\nexport async function pickFolder(): Promise<string | null> {\n const result = await pickFolderAction();\n\n if (result.error) {\n throw new Error(result.error);\n }\n\n return result.path;\n}\n","'use client';\n\nimport { createContext, useContext, useState, useMemo, type ReactNode } from 'react';\nimport type { FeatureNodeState } from '@/components/common/feature-node/feature-node-state-config';\nimport type { FeatureStatus } from '@/components/common/feature-status-config';\n\n// Re-export the FeatureItem type so consumers can import from one place.\n// This will gain `featureId` in a later phase.\nexport interface SidebarFeatureItem {\n name: string;\n status: FeatureStatus;\n featureId: string;\n startedAt?: number;\n duration?: string;\n agentType?: string;\n modelId?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Pure mapping: FeatureNodeState (6-state) → FeatureStatus (3-state) | null\n// ---------------------------------------------------------------------------\n\nconst stateMapping: Record<FeatureNodeState, FeatureStatus | null> = {\n 'action-required': 'action-needed',\n running: 'in-progress',\n done: 'done',\n blocked: 'in-progress',\n error: 'in-progress',\n creating: null,\n};\n\n/**\n * Maps a canvas FeatureNodeState to the sidebar's 3-state FeatureStatus.\n * Returns `null` for `creating` (optimistic UI) — these should be excluded from the sidebar.\n */\nexport function mapNodeStateToSidebarStatus(state: FeatureNodeState): FeatureStatus | null {\n return stateMapping[state];\n}\n\n// ---------------------------------------------------------------------------\n// SidebarFeaturesContext\n// ---------------------------------------------------------------------------\n\ninterface SidebarFeaturesContextValue {\n features: SidebarFeatureItem[];\n setFeatures: (features: SidebarFeatureItem[]) => void;\n}\n\nconst SidebarFeaturesContext = createContext<SidebarFeaturesContextValue | null>(null);\n\ninterface SidebarFeaturesProviderProps {\n children: ReactNode;\n}\n\nexport function SidebarFeaturesProvider({ children }: SidebarFeaturesProviderProps) {\n const [features, setFeatures] = useState<SidebarFeatureItem[]>([]);\n\n const value = useMemo<SidebarFeaturesContextValue>(() => ({ features, setFeatures }), [features]);\n\n return (\n <SidebarFeaturesContext.Provider value={value}>{children}</SidebarFeaturesContext.Provider>\n );\n}\n\nexport function useSidebarFeaturesContext(): SidebarFeaturesContextValue {\n const ctx = useContext(SidebarFeaturesContext);\n if (!ctx) {\n throw new Error('useSidebarFeaturesContext must be used within a <SidebarFeaturesProvider>');\n }\n return ctx;\n}\n"],"names":["module","exports","require","vendored","HooksClientContext","ServerInsertedHtml","process","env","NEXT_RUNTIME","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK","ReactJsxRuntime","React","ReactDOM","ReactServerDOMTurbopackClient","AppRouterContext"],"mappings":"6CAAAA,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,QAAW,CAACC,kBAAkB,+BCFzCJ,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,QAAW,CAACE,kBAAkB,8sBCwBjCL,GAAOC,OAAO,CAAGC,EAAQ,CAAA,CAAA,IAAA,iCC1BjCF,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAES,eAAe,+BCFxCZ,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAEU,KAAK,+BCF9Bb,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAEW,QAAQ,+BCFjCd,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,YAAY,CAAEY,6BAA6B,+BCFtDf,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRC,QAAQ,CAAC,QAAW,CAACa,gBAAgB,yBCFvC,IAAA,EAAuB,EAAA,CAAA,CAAA,EAAX,KAeH,EAAA,CAAA,CAAA,EAfc,KAGvB,IAAM,EAAyB,EAAA,aAAA,CAAqC,KAAA,CAAS,EAiB7E,SAAS,EAAa,CAAA,EAAsB,AAC1C,IAAM,EAAkB,EAAA,UAAA,CAAW,GACnC,OAAO,GAAY,GADgC,AACnB,KAClC,sECrBA,EAAA,EAAA,CAAA,CAAA,OAEA,SAAS,EAAM,WAAE,CAAS,MAAE,CAAI,CAAE,GAAG,EAAsC,EACzE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,KAAM,EACN,YAAU,QACV,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,6bACA,gFACA,yGACA,GAED,GAAG,CAAK,EAGf,8CClBA,SAAS,EAAM,CAAA,CAAe,CAAC,EAAK,EAAG,CAAA,CAA6B,AAClE,OAAO,KAAK,GAAA,CAAI,EAAK,KAAK,GAAA,CAAI,EAAK,GACrC,EAD0C,CAAC,2CCuB3C,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAS,CAAT,AAAS,CAAT,AAAS,CAAA,AAAT,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CArBI,CAqBM,AApBxC,CAoBwC,AAnBtC,CAAA,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAlBtC,AAkBsC,CAjBpC,AAiBoC,CAjBpC,AAiB8C,CAAA,AAjB3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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","ignoreList":[0,1,2,3,4,5,6,7,11,12,13]}
|
|
@@ -1,3 +0,0 @@
|
|
|
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))},59975,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))},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(14703),e=a.i(45273);async function f({params:a}){let{featureId:f}=await a;try{var g;let a=(0,c.resolve)("IFeatureRepository"),h=(0,c.resolve)("IAgentRunRepository"),i=(0,c.resolve)("IRepositoryRepository"),j=(0,c.resolve)("IGitPrService"),k=await a.findById(f);if(!k)return null;let l=k.agentRunId?await h.findById(k.agentRunId):null,m=(0,c.resolve)("GetFeatureArtifactUseCase"),[n,o,p,q]=await Promise.all([i.findByPath(k.repositoryPath).catch(()=>null),j.getDefaultBranch(k.repositoryPath).catch(()=>"main"),m.execute(f).catch(()=>null),j.getRemoteUrl(k.repositoryPath).catch(()=>null)]),r=(g={repositoryName:n?.name,baseBranch:o,oneLiner:p?.oneLiner,remoteUrl:q??void 0},{name:k.name,description:k.description??k.slug,featureId:k.id,lifecycle:(0,d.deriveLifecycle)(k,l),repositoryPath:k.repositoryPath,branch:k.branch,specPath:k.specPath,state:(0,d.deriveNodeState)(k,l),progress:(0,d.deriveProgress)(k),summary:k.description,userQuery:k.userQuery,createdAt:k.createdAt instanceof Date?k.createdAt.getTime():k.createdAt,...k.fast&&{fastMode:!0},...g?.repositoryName&&{repositoryName:g.repositoryName},...g?.baseBranch&&{baseBranch:g.baseBranch},...g?.oneLiner&&{oneLiner:g.oneLiner},...g?.remoteUrl&&{remoteUrl:g.remoteUrl},...l?.agentType&&{agentType:l.agentType},...l?.modelId&&{modelId:l.modelId},...l?.error&&{errorMessage:l.error},...k.pr&&{pr:{url:k.pr.url,number:k.pr.number,status:k.pr.status,ciStatus:k.pr.ciStatus,commitHash:k.pr.commitHash}}}),s=function({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}({selectedNode:r,isCreateDrawerOpen:!1,pendingRepositoryPath:"",pendingParentFeatureId:void 0,selectedRepoNode:null,features:[],workflowDefaults:void 0});if(!s)return null;return(0,b.jsx)(e.FeatureDrawerClient,{view:s})}catch{return null}}a.s(["default",()=>f,"dynamic",0,"force-dynamic"],14994)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__c3c963c6._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../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","../../../../../../../src/presentation/web/app/build-feature-node-data.ts","../../../../../../../src/presentation/web/components/common/control-center-drawer/drawer-view.ts"],"sourcesContent":["// 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 { 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\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] = 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 ]);\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","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 },\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/**\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"],"names":[],"mappings":"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","ignoreList":[0]}
|