@shepai/cli 1.78.1 → 1.79.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.js +14 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +17 -0
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +25 -0
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts +18 -0
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-feature-plan.js +31 -0
- package/dist/src/presentation/web/app/api/feature-logs/route.d.ts +16 -0
- package/dist/src/presentation/web/app/api/feature-logs/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/feature-logs/route.js +184 -0
- package/dist/src/presentation/web/app/build-feature-node-data.d.ts +7 -1
- package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-feature-node-data.js +7 -1
- package/dist/src/presentation/web/app/build-graph-nodes.js +7 -3
- package/dist/src/presentation/web/app/settings/page.js +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +7 -19
- 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 +6 -6
- 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 +48 -85
- package/dist/src/presentation/web/components/common/feature-drawer/index.d.ts +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/index.js +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts +8 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +90 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +20 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.js +252 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +31 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +123 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts +20 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.js +315 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.js +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts +7 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.js +35 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts +18 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.js +89 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts +6 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +78 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +28 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +157 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts +8 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.js +40 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts +22 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.js +188 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts +30 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.js +100 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +12 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/index.d.ts +3 -4
- package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/index.js +3 -4
- package/dist/src/presentation/web/components/common/merge-review/index.d.ts +1 -2
- package/dist/src/presentation/web/components/common/merge-review/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/index.js +0 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts +0 -8
- package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +1 -33
- package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts +1 -2
- package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/index.js +0 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +0 -10
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -38
- package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts +1 -2
- package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/index.js +0 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +0 -8
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +1 -29
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +2 -2
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +9 -9
- package/dist/src/presentation/web/hooks/use-feature-logs.d.ts +7 -0
- package/dist/src/presentation/web/hooks/use-feature-logs.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-feature-logs.js +52 -0
- 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 +1 -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/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/routes-manifest.json +6 -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.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]/page/server-reference-manifest.json +68 -38
- 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 +14 -14
- 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.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]/page/server-reference-manifest.json +68 -38
- 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 +14 -14
- 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.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/feature-logs/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/feature-logs/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/feature-logs/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/feature-logs/route.js +6 -0
- package/web/.next/server/app/api/feature-logs/route.js.map +5 -0
- package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -0
- package/web/.next/server/app/api/feature-logs/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +1 -0
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_feature-logs_route_actions_177445e7.js +3 -0
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_feature-logs_route_actions_177445e7.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__91d44424._.js +12 -0
- package/web/.next/server/chunks/[root-of-the-server]__91d44424._.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/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]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +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]__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]__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]__a337ca5c._.js → [root-of-the-server]__ae824a5b._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ae824a5b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +2 -2
- 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/_1e3cf73b._.js +1 -1
- package/web/.next/server/chunks/ssr/_1e3cf73b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_34fbed18._.js +1 -1
- package/web/.next/server/chunks/ssr/_34fbed18._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_06db7efd._.js → _3e88ce9d._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_06db7efd._.js.map → _3e88ce9d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_5d4e7151._.js +3 -0
- package/web/.next/server/chunks/ssr/{_5c4ce700._.js.map → _5d4e7151._.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/{_b0924a46._.js → _83cf28a3._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_b0924a46._.js.map → _83cf28a3._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_4031d614._.js → _887258d0._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_4031d614._.js.map → _887258d0._.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/_acb6a73d._.js +3 -0
- package/web/.next/server/chunks/ssr/{_a38f282a._.js.map → _acb6a73d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_5dab501b._.js → _ba97cfd3._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_5dab501b._.js.map → _ba97cfd3._.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_d80c1060._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_d80c1060._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_7efa14ca._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_7efa14ca._.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)_get-graph-data_ts_b018483e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.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_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 +108 -64
- package/web/.next/static/chunks/{87152e918f80ea8b.js → 297458261f67218c.js} +1 -1
- package/web/.next/static/chunks/{1f57d0c949dbb44d.js → 2a24ac257fc1c10b.js} +1 -1
- package/web/.next/static/chunks/352e25e1bb2b9edb.js +1 -0
- package/web/.next/static/chunks/{8fe834f8a3c36e2f.js → 47ecde22e9663419.js} +2 -2
- package/web/.next/static/chunks/{27c4a8493483e6f3.js → 49743c83c9bced40.js} +1 -1
- package/web/.next/static/chunks/4b20d522b4f5ca7e.js +1 -0
- package/web/.next/static/chunks/{9d8c6c874071efb2.js → 5688494bf052915d.js} +1 -1
- package/web/.next/static/chunks/77a956d5dd063fef.js +1 -0
- package/web/.next/static/chunks/{78455afb0164395c.js → 8eff15a7f35164f9.js} +2 -2
- package/web/.next/static/chunks/96bab6d3820504f3.css +2 -0
- package/web/.next/static/chunks/a1c2ecb710b44081.js +1 -0
- package/web/.next/static/chunks/{6f7ba7846dcc8b21.js → d8d464c156573994.js} +1 -1
- package/web/.next/static/chunks/e29d1e26c2694f78.js +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts +0 -9
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +0 -60
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +0 -47
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +0 -307
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts +0 -3
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.js +0 -8
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts +0 -3
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.js +0 -8
- package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts +0 -3
- package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/review-drawer-shell/index.js +0 -1
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts +0 -26
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.js +0 -1
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts +0 -3
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +0 -29
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts +0 -14
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.js +0 -33
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts +0 -3
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.js +0 -8
- package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts +0 -3
- package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/tech-review-tabs/index.js +0 -1
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts +0 -21
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.js +0 -1
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts +0 -3
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.js +0 -12
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts +0 -16
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.js +0 -110
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a337ca5c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_5c4ce700._.js +0 -3
- package/web/.next/server/chunks/ssr/_a38f282a._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_5412e589._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_5412e589._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js.map +0 -1
- package/web/.next/static/chunks/08c0a9667c05866c.css +0 -2
- package/web/.next/static/chunks/0fb8038f7ad4d2cf.js +0 -1
- package/web/.next/static/chunks/1211dcaac5963f92.js +0 -1
- package/web/.next/static/chunks/6a3e8ea6e1fd2113.js +0 -1
- package/web/.next/static/chunks/7336f9ec160c7bd8.js +0 -1
- package/web/.next/static/chunks/ba8b2aaa356a5487.js +0 -1
- /package/web/.next/static/{M0oz1_1InoSyr7OMLAKf7 → hVGa8-vd4pFs9splpgq-k}/_buildManifest.js +0 -0
- /package/web/.next/static/{M0oz1_1InoSyr7OMLAKf7 → hVGa8-vd4pFs9splpgq-k}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{M0oz1_1InoSyr7OMLAKf7 → hVGa8-vd4pFs9splpgq-k}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { MergeReview } from './merge-review.js';
|
|
2
|
-
export {
|
|
3
|
-
export type { MergeReviewProps, MergeReviewDrawerProps, MergeReviewData, } from './merge-review-config.js';
|
|
2
|
+
export type { MergeReviewProps, MergeReviewData } from './merge-review-config.js';
|
|
4
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
import { MergeReview } from './merge-review.js';
|
|
3
|
-
import { MergeReviewDrawer } from './merge-review-drawer.js';
|
|
4
3
|
declare const meta: Meta<typeof MergeReview>;
|
|
5
4
|
export default meta;
|
|
6
5
|
type Story = StoryObj<typeof MergeReview>;
|
|
@@ -22,11 +21,4 @@ export declare const NoPrWithDiff: Story;
|
|
|
22
21
|
export declare const NoPrNoDiff: Story;
|
|
23
22
|
/** With implementation phases shown. */
|
|
24
23
|
export declare const WithPhases: Story;
|
|
25
|
-
type DrawerStory = StoryObj<typeof MergeReviewDrawer>;
|
|
26
|
-
/** Merge review drawer with full data. */
|
|
27
|
-
export declare const InDrawer: DrawerStory;
|
|
28
|
-
/** Drawer with delete button visible. */
|
|
29
|
-
export declare const WithDeleteButton: DrawerStory;
|
|
30
|
-
/** Drawer without PR — direct merge with diff summary and branch info. */
|
|
31
|
-
export declare const InDrawerNoPr: DrawerStory;
|
|
32
24
|
//# sourceMappingURL=merge-review.stories.d.ts.map
|
package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/merge-review.stories.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merge-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/merge-review.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAsC7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAE1C,kDAAkD;AAClD,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,YAAY,EAAE,KAS1B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
2
|
-
import { useState } from 'react';
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
2
|
import { fn } from '@storybook/test';
|
|
4
3
|
import { PrStatus, CiStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
5
4
|
import { MergeReview } from './merge-review.js';
|
|
6
|
-
import { MergeReviewDrawer } from './merge-review-drawer.js';
|
|
7
5
|
const fullPr = {
|
|
8
6
|
url: 'https://github.com/shep-ai/cli/pull/42',
|
|
9
7
|
number: 42,
|
|
@@ -132,33 +130,3 @@ export const WithPhases = {
|
|
|
132
130
|
...defaultActions,
|
|
133
131
|
},
|
|
134
132
|
};
|
|
135
|
-
const drawerMeta = {
|
|
136
|
-
component: MergeReviewDrawer,
|
|
137
|
-
tags: ['autodocs'],
|
|
138
|
-
parameters: {
|
|
139
|
-
layout: 'fullscreen',
|
|
140
|
-
},
|
|
141
|
-
};
|
|
142
|
-
function DrawerTemplate(props) {
|
|
143
|
-
const [open, setOpen] = useState(true);
|
|
144
|
-
return (_jsxs("div", { style: { height: '100vh', background: '#f8fafc', padding: '2rem' }, children: [_jsx("button", { type: "button", onClick: () => setOpen(true), style: { padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }, children: "Open Drawer" }), _jsx(MergeReviewDrawer, { ...props, open: open, onClose: () => setOpen(false) })] }));
|
|
145
|
-
}
|
|
146
|
-
/** Merge review drawer with full data. */
|
|
147
|
-
export const InDrawer = {
|
|
148
|
-
...drawerMeta,
|
|
149
|
-
render: () => (_jsx(DrawerTemplate, { featureName: "Add User Authentication", featureId: "FEAT-042", repositoryPath: "/home/user/projects/my-app", branch: "feat/add-auth", data: fullData, ...defaultActions })),
|
|
150
|
-
};
|
|
151
|
-
/** Drawer with delete button visible. */
|
|
152
|
-
export const WithDeleteButton = {
|
|
153
|
-
...drawerMeta,
|
|
154
|
-
render: () => (_jsx(DrawerTemplate, { featureName: "Add User Authentication", featureId: "FEAT-042", repositoryPath: "/home/user/projects/my-app", branch: "feat/add-auth", data: fullData, ...defaultActions, onDelete: fn().mockName('onDelete') })),
|
|
155
|
-
};
|
|
156
|
-
/** Drawer without PR — direct merge with diff summary and branch info. */
|
|
157
|
-
export const InDrawerNoPr = {
|
|
158
|
-
...drawerMeta,
|
|
159
|
-
render: () => (_jsx(DrawerTemplate, { featureName: "Fix Login Bug", featureId: "FEAT-099", repositoryPath: "/home/user/projects/my-app", branch: "feat/fix-login", data: {
|
|
160
|
-
branch: { source: 'feat/fix-login', target: 'main' },
|
|
161
|
-
phases: samplePhases,
|
|
162
|
-
diffSummary: fullData.diffSummary,
|
|
163
|
-
}, ...defaultActions, onDelete: fn().mockName('onDelete') })),
|
|
164
|
-
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { PrdQuestionnaire } from './prd-questionnaire.js';
|
|
2
|
-
export {
|
|
3
|
-
export type { PrdQuestionnaireProps, PrdQuestionnaireDrawerProps, PrdOption, PrdQuestion, PrdFinalAction, PrdQuestionnaireData, } from './prd-questionnaire-config.js';
|
|
2
|
+
export type { PrdQuestionnaireProps, PrdOption, PrdQuestion, PrdFinalAction, PrdQuestionnaireData, } from './prd-questionnaire-config.js';
|
|
4
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/prd-questionnaire/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/prd-questionnaire/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EACV,qBAAqB,EACrB,SAAS,EACT,WAAW,EACX,cAAc,EACd,oBAAoB,GACrB,MAAM,4BAA4B,CAAC"}
|
package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
import { PrdQuestionnaire } from './prd-questionnaire.js';
|
|
3
|
-
import { PrdQuestionnaireDrawer } from './prd-questionnaire-drawer.js';
|
|
4
3
|
declare const meta: Meta<typeof PrdQuestionnaire>;
|
|
5
4
|
export default meta;
|
|
6
5
|
type Story = StoryObj<typeof PrdQuestionnaire>;
|
|
@@ -14,15 +13,6 @@ export declare const AllAnswered: Story;
|
|
|
14
13
|
export declare const Refining: Story;
|
|
15
14
|
/** Single question — minimal stepper with one step. */
|
|
16
15
|
export declare const MinimalData: Story;
|
|
17
|
-
type DrawerStory = StoryObj<typeof PrdQuestionnaireDrawer>;
|
|
18
|
-
/** Drawer with stepper — navigate questions one at a time. */
|
|
19
|
-
export declare const InDrawer: DrawerStory;
|
|
20
|
-
/** Drawer with partial selections showing progress dots. */
|
|
21
|
-
export declare const InDrawerWithSelections: DrawerStory;
|
|
22
|
-
/** Drawer with delete button visible. */
|
|
23
|
-
export declare const WithDeleteButton: DrawerStory;
|
|
24
|
-
/** Drawer with delete in progress (button disabled). */
|
|
25
|
-
export declare const DeletingState: DrawerStory;
|
|
26
16
|
/** All answered with reject button visible on last step. */
|
|
27
17
|
export declare const WithRejectButton: Story;
|
|
28
18
|
/** Rejecting state — reject button disabled with spinner while reject action is in flight. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prd-questionnaire.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"prd-questionnaire.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAiKvD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAkBvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAU/C,sJAAsJ;AACtJ,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAAE,KAW5B,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,WAAW,EAAE,KAczB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,EAAE,KAStB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,WAAW,EAAE,KA8BzB,CAAC;AAaF,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,EAAE,KAQ9B,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC"}
|
package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { fn } from '@storybook/test';
|
|
4
4
|
import { PrdQuestionnaire } from './prd-questionnaire.js';
|
|
5
|
-
import { PrdQuestionnaireDrawer } from './prd-questionnaire-drawer.js';
|
|
6
5
|
const mockQuestions = [
|
|
7
6
|
{
|
|
8
7
|
id: 'problem',
|
|
@@ -227,42 +226,6 @@ export const MinimalData = {
|
|
|
227
226
|
},
|
|
228
227
|
} })),
|
|
229
228
|
};
|
|
230
|
-
const drawerMeta = {
|
|
231
|
-
component: PrdQuestionnaireDrawer,
|
|
232
|
-
tags: ['autodocs'],
|
|
233
|
-
parameters: {
|
|
234
|
-
layout: 'fullscreen',
|
|
235
|
-
},
|
|
236
|
-
};
|
|
237
|
-
function DrawerTemplate({ selections: initialSelections = {}, ...props }) {
|
|
238
|
-
const [open, setOpen] = useState(true);
|
|
239
|
-
const [selections, setSelections] = useState(initialSelections);
|
|
240
|
-
return (_jsxs("div", { style: { height: '100vh', background: '#f8fafc', padding: '2rem' }, children: [_jsx("button", { type: "button", onClick: () => setOpen(true), style: { padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }, children: "Open Drawer" }), _jsx(PrdQuestionnaireDrawer, { ...props, open: open, onClose: () => setOpen(false), selections: selections, onSelect: (qId, optId) => setSelections((prev) => ({ ...prev, [qId]: optId })), onApprove: fn().mockName('onApprove') })] }));
|
|
241
|
-
}
|
|
242
|
-
/** Drawer with stepper — navigate questions one at a time. */
|
|
243
|
-
export const InDrawer = {
|
|
244
|
-
...drawerMeta,
|
|
245
|
-
render: () => (_jsx(DrawerTemplate, { featureName: "User Authentication Flow", featureDescription: "Implement OAuth2 login with social providers and MFA support", featureId: "FEAT-042", lifecycleLabel: "Requirements", data: mockData })),
|
|
246
|
-
};
|
|
247
|
-
/** Drawer with partial selections showing progress dots. */
|
|
248
|
-
export const InDrawerWithSelections = {
|
|
249
|
-
...drawerMeta,
|
|
250
|
-
render: () => (_jsx(DrawerTemplate, { featureName: "User Authentication Flow", featureId: "FEAT-042", lifecycleLabel: "Requirements", data: mockData, selections: {
|
|
251
|
-
problem: 'user_pain',
|
|
252
|
-
priority: 'p1',
|
|
253
|
-
success: 'adoption',
|
|
254
|
-
} })),
|
|
255
|
-
};
|
|
256
|
-
/** Drawer with delete button visible. */
|
|
257
|
-
export const WithDeleteButton = {
|
|
258
|
-
...drawerMeta,
|
|
259
|
-
render: () => (_jsx(DrawerTemplate, { featureName: "User Authentication Flow", featureId: "FEAT-042", lifecycleLabel: "Requirements", data: mockData, onDelete: fn().mockName('onDelete') })),
|
|
260
|
-
};
|
|
261
|
-
/** Drawer with delete in progress (button disabled). */
|
|
262
|
-
export const DeletingState = {
|
|
263
|
-
...drawerMeta,
|
|
264
|
-
render: () => (_jsx(DrawerTemplate, { featureName: "User Authentication Flow", featureId: "FEAT-042", lifecycleLabel: "Requirements", data: mockData, onDelete: fn().mockName('onDelete'), isDeleting: true })),
|
|
265
|
-
};
|
|
266
229
|
/* ─── Reject Variants ─── */
|
|
267
230
|
const allAnsweredSelections = {
|
|
268
231
|
problem: 'user_pain',
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { TechDecisionsReview, TechDecisionsContent } from './tech-decisions-review.js';
|
|
2
|
-
export {
|
|
3
|
-
export type { TechDecisionsReviewProps, TechDecisionsDrawerProps, TechDecisionsReviewData, TechDecision, } from './tech-decisions-review-config.js';
|
|
2
|
+
export type { TechDecisionsReviewProps, TechDecisionsReviewData, TechDecision, } from './tech-decisions-review-config.js';
|
|
4
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpF,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpF,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,YAAY,GACb,MAAM,gCAAgC,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
import { TechDecisionsReview } from './tech-decisions-review.js';
|
|
3
|
-
import { TechDecisionsDrawer } from './tech-decisions-drawer.js';
|
|
4
3
|
declare const meta: Meta<typeof TechDecisionsReview>;
|
|
5
4
|
export default meta;
|
|
6
5
|
type Story = StoryObj<typeof TechDecisionsReview>;
|
|
@@ -12,13 +11,6 @@ export declare const Processing: Story;
|
|
|
12
11
|
export declare const SingleDecision: Story;
|
|
13
12
|
/** No technologies listed. */
|
|
14
13
|
export declare const NoTechnologies: Story;
|
|
15
|
-
type DrawerStory = StoryObj<typeof TechDecisionsDrawer>;
|
|
16
|
-
/** Drawer with tech decisions list. */
|
|
17
|
-
export declare const InDrawer: DrawerStory;
|
|
18
|
-
/** Drawer with delete button visible. */
|
|
19
|
-
export declare const WithDeleteButton: DrawerStory;
|
|
20
|
-
/** Drawer with delete in progress (button disabled). */
|
|
21
|
-
export declare const DeletingState: DrawerStory;
|
|
22
14
|
/** With reject button visible next to approve. */
|
|
23
15
|
export declare const WithRejectButton: Story;
|
|
24
16
|
/** Rejecting state — reject button disabled while reject action is in flight. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tech-decisions-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tech-decisions-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AA0C9D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAc1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAElD,oHAAoH;AACpH,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,uBAAuB;AACvB,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAIF,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
2
|
-
import { useState } from 'react';
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
2
|
import { fn } from '@storybook/test';
|
|
4
3
|
import { TechDecisionsReview } from './tech-decisions-review.js';
|
|
5
|
-
import { TechDecisionsDrawer } from './tech-decisions-drawer.js';
|
|
6
4
|
const mockData = {
|
|
7
5
|
name: 'Agent Executor Abstraction',
|
|
8
6
|
summary: 'Research into the best approach for abstracting agent executors to support multiple AI backends (Claude Code, Cursor, custom agents).',
|
|
@@ -79,32 +77,6 @@ export const NoTechnologies = {
|
|
|
79
77
|
onApprove: fn().mockName('onApprove'),
|
|
80
78
|
},
|
|
81
79
|
};
|
|
82
|
-
const drawerMeta = {
|
|
83
|
-
component: TechDecisionsDrawer,
|
|
84
|
-
tags: ['autodocs'],
|
|
85
|
-
parameters: {
|
|
86
|
-
layout: 'fullscreen',
|
|
87
|
-
},
|
|
88
|
-
};
|
|
89
|
-
function DrawerTemplate(props) {
|
|
90
|
-
const [open, setOpen] = useState(true);
|
|
91
|
-
return (_jsxs("div", { style: { height: '100vh', background: '#f8fafc', padding: '2rem' }, children: [_jsx("button", { type: "button", onClick: () => setOpen(true), style: { padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }, children: "Open Drawer" }), _jsx(TechDecisionsDrawer, { ...props, open: open, onClose: () => setOpen(false) })] }));
|
|
92
|
-
}
|
|
93
|
-
/** Drawer with tech decisions list. */
|
|
94
|
-
export const InDrawer = {
|
|
95
|
-
...drawerMeta,
|
|
96
|
-
render: () => (_jsx(DrawerTemplate, { featureName: "Agent Executor Abstraction", featureId: "FEAT-099", data: mockData, onApprove: fn().mockName('onApprove'), onReject: fn().mockName('onReject') })),
|
|
97
|
-
};
|
|
98
|
-
/** Drawer with delete button visible. */
|
|
99
|
-
export const WithDeleteButton = {
|
|
100
|
-
...drawerMeta,
|
|
101
|
-
render: () => (_jsx(DrawerTemplate, { featureName: "Agent Executor Abstraction", featureId: "FEAT-099", data: mockData, onApprove: fn().mockName('onApprove'), onReject: fn().mockName('onReject'), onDelete: fn().mockName('onDelete') })),
|
|
102
|
-
};
|
|
103
|
-
/** Drawer with delete in progress (button disabled). */
|
|
104
|
-
export const DeletingState = {
|
|
105
|
-
...drawerMeta,
|
|
106
|
-
render: () => (_jsx(DrawerTemplate, { featureName: "Agent Executor Abstraction", featureId: "FEAT-099", data: mockData, onApprove: fn().mockName('onApprove'), onReject: fn().mockName('onReject'), onDelete: fn().mockName('onDelete'), isDeleting: true })),
|
|
107
|
-
};
|
|
108
80
|
/* ─── Reject Variants ─── */
|
|
109
81
|
/** With reject button visible next to approve. */
|
|
110
82
|
export const WithRejectButton = {
|
|
@@ -88,7 +88,7 @@ export function AgentModelPicker({ initialAgentType, initialModel, onAgentModelC
|
|
|
88
88
|
const GroupIcon = getAgentTypeIcon(group.agentType);
|
|
89
89
|
const isActive = agentType === group.agentType;
|
|
90
90
|
const hasModels = group.models.length > 0;
|
|
91
|
-
return (_jsxs("button", { type: "button", className: cn('flex w-full cursor-pointer items-center gap-2.5 px-3 py-2 text-
|
|
91
|
+
return (_jsxs("button", { type: "button", className: cn('flex w-full cursor-pointer items-center gap-2.5 px-3 py-2 text-xs transition-colors', 'hover:bg-accent hover:text-accent-foreground', isActive && 'bg-accent/50'), onClick: () => {
|
|
92
92
|
if (hasModels) {
|
|
93
93
|
drillInto(group.agentType);
|
|
94
94
|
}
|
|
@@ -98,6 +98,6 @@ export function AgentModelPicker({ initialAgentType, initialModel, onAgentModelC
|
|
|
98
98
|
}, children: [_jsx(GroupIcon, { className: "h-4 w-4 shrink-0" }), _jsx("span", { className: "flex-1 text-left", children: group.label }), isActive && !hasModels ? (_jsx(Check, { className: "text-primary h-3.5 w-3.5 shrink-0" })) : null, hasModels ? (_jsx(ChevronRight, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" })) : null] }, group.agentType));
|
|
99
99
|
})] }), _jsx("div", { className: "w-1/2 shrink-0", children: activeGroup ? (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "text-muted-foreground hover:text-foreground flex w-full cursor-pointer items-center gap-1.5 border-b px-3 py-2 text-xs font-medium transition-colors", onClick: drillBack, children: [_jsx(ChevronLeft, { className: "h-3.5 w-3.5" }), activeGroup.label] }), activeGroup.models.map((m) => {
|
|
100
100
|
const isSelected = agentType === activeGroup.agentType && model === m.id;
|
|
101
|
-
return (_jsxs("button", { type: "button", className: cn('flex w-full cursor-pointer items-center gap-3 px-3 py-2 text-left transition-colors', 'hover:bg-accent hover:text-accent-foreground', isSelected && 'bg-accent/50'), onClick: () => handleSelect(activeGroup.agentType, m.id), children: [_jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsx("span", { className: "text-
|
|
101
|
+
return (_jsxs("button", { type: "button", className: cn('flex w-full cursor-pointer items-center gap-3 px-3 py-2 text-left transition-colors', 'hover:bg-accent hover:text-accent-foreground', isSelected && 'bg-accent/50'), onClick: () => handleSelect(activeGroup.agentType, m.id), children: [_jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsx("span", { className: "text-xs font-medium", children: m.displayName }), _jsx("span", { className: "text-muted-foreground text-xs", children: m.description })] }), isSelected ? (_jsx(Check, { className: "text-primary h-3.5 w-3.5 shrink-0" })) : null] }, m.id));
|
|
102
102
|
})] })) : null })] }) })] }), Boolean(error) && _jsx("p", { className: "text-destructive text-sm", children: error })] }));
|
|
103
103
|
}
|
|
@@ -204,7 +204,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
204
204
|
setActiveSection(entry.target.id.replace('section-', ''));
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
|
-
}, { rootMargin: '-
|
|
207
|
+
}, { rootMargin: '-65px 0px -60% 0px', threshold: 0 });
|
|
208
208
|
for (const el of els)
|
|
209
209
|
observer.observe(el);
|
|
210
210
|
return () => observer.disconnect();
|
|
@@ -220,13 +220,13 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
220
220
|
void el.offsetHeight;
|
|
221
221
|
el.style.animation = 'section-flash 1s ease-out';
|
|
222
222
|
}, []);
|
|
223
|
-
return (_jsxs("div", { "data-testid": "settings-page-client", className: "max-w-5xl", children: [_jsx("div", { className: "bg-background/95 supports-backdrop-filter:bg-background/80 sticky top-0 z-10
|
|
223
|
+
return (_jsxs("div", { "data-testid": "settings-page-client", className: "max-w-5xl", children: [_jsx("div", { className: "bg-background/95 supports-backdrop-filter:bg-background/80 sticky top-0 z-10 grid grid-cols-1 gap-x-5 pt-6 pb-4 backdrop-blur lg:grid-cols-[1fr_280px]", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Settings2, { className: "text-muted-foreground h-4 w-4" }), _jsx("h1", { className: "text-sm font-bold tracking-tight", children: "Settings" }), _jsxs("span", { className: "relative h-4 w-16", children: [_jsx("span", { className: cn('text-muted-foreground absolute inset-0 flex items-center text-xs transition-opacity duration-300', showSaving ? 'opacity-100' : 'opacity-0'), children: "Saving..." }), _jsxs("span", { className: cn('absolute inset-0 flex items-center gap-1 text-xs text-green-600 transition-opacity duration-300', showSaved && !showSaving ? 'opacity-100' : 'opacity-0'), children: [_jsx(Check, { className: "h-3 w-3" }), "Saved"] })] }), _jsx("nav", { className: "ml-auto flex items-center gap-0.5", children: SECTIONS.map((s) => {
|
|
224
224
|
const SectionIcon = s.icon;
|
|
225
225
|
const isActive = activeSection === s.id;
|
|
226
226
|
return (_jsxs("button", { type: "button", onClick: () => scrollToSection(s.id), className: cn('flex cursor-pointer items-center gap-1 rounded-md px-1.5 py-1 text-[11px] transition-all', isActive
|
|
227
227
|
? 'bg-accent text-foreground font-medium'
|
|
228
228
|
: 'text-muted-foreground/60 hover:text-foreground hover:bg-accent/50'), children: [_jsx(SectionIcon, { className: "h-3 w-3" }), _jsx("span", { className: "hidden sm:inline", children: s.label })] }, s.id));
|
|
229
|
-
}) })] }) }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { id: "section-agent", className: "grid scroll-mt-
|
|
229
|
+
}) })] }) }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { id: "section-agent", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Bot, title: "Agent", description: "AI coding agent and authentication", testId: "agent-settings-section", children: [_jsx(SettingsRow, { label: "Agent & Model", description: "Provider and model for all operations", htmlFor: "agent-model-picker", children: _jsx(AgentModelPicker, { initialAgentType: agentType, initialModel: settings.models.default, mode: "settings", onAgentModelChange: (newAgent) => setAgentType(newAgent), className: "w-55" }) }), _jsx(SettingsRow, { label: "Authentication", description: "How the agent authenticates", htmlFor: "auth-method", children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("div", { children: _jsxs(Select, { value: authMethod, disabled: true, children: [_jsx(SelectTrigger, { id: "auth-method", "data-testid": "auth-method-select", className: "w-55 cursor-not-allowed text-xs opacity-60", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AUTH_METHOD_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] }) }) }), _jsx(TooltipContent, { children: "Coming soon" })] }) }) }), authMethod === AgentAuthMethod.Token && (_jsx(SettingsRow, { label: "API Token", htmlFor: "agent-token", children: _jsxs("div", { className: "relative w-45", children: [_jsx(Input, { id: "agent-token", "data-testid": "agent-token-input", type: showToken ? 'text' : 'password', value: token, onChange: (e) => setToken(e.target.value), onBlur: () => {
|
|
230
230
|
if (token !== (settings.agent.token ?? '')) {
|
|
231
231
|
save(buildAgentPayload({ token }));
|
|
232
232
|
}
|
|
@@ -243,7 +243,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
243
243
|
label: 'Configuration guide',
|
|
244
244
|
href: 'https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md',
|
|
245
245
|
},
|
|
246
|
-
], children: "Choose which AI coding agent powers your features. Each agent supports different models and capabilities. Authentication is resolved automatically via your active session." })] }), _jsxs("div", { id: "section-environment", className: "grid scroll-mt-
|
|
246
|
+
], children: "Choose which AI coding agent powers your features. Each agent supports different models and capabilities. Authentication is resolved automatically via your active session." })] }), _jsxs("div", { id: "section-environment", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsx(SettingsSection, { icon: Terminal, title: "Environment", description: "Editor and shell preferences", testId: "environment-settings-section", children: _jsx(SettingsRow, { label: "Default Editor", description: "Editor launched for file operations", htmlFor: "default-editor", children: _jsxs(Select, { value: editor, onValueChange: (v) => {
|
|
247
247
|
setEditor(v);
|
|
248
248
|
save({
|
|
249
249
|
environment: { defaultEditor: v, shellPreference: shell },
|
|
@@ -256,7 +256,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
256
256
|
label: 'Configuration guide',
|
|
257
257
|
href: 'https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md',
|
|
258
258
|
},
|
|
259
|
-
], children: "Your preferred editor is used when opening files for review or editing during the development workflow." })] }), _jsxs("div", { id: "section-workflow", className: "grid scroll-mt-
|
|
259
|
+
], children: "Your preferred editor is used when opening files for review or editing during the development workflow." })] }), _jsxs("div", { id: "section-workflow", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: GitBranch, title: "Workflow", description: "Automation behavior after implementation", testId: "workflow-settings-section", children: [_jsx(SwitchRow, { label: "Auto-approve PRD", description: "Skip manual review of requirements", id: "allow-prd", testId: "switch-allow-prd", checked: allowPrd, onChange: (v) => {
|
|
260
260
|
setAllowPrd(v);
|
|
261
261
|
save(buildWorkflowPayload({ allowPrd: v }));
|
|
262
262
|
} }), _jsx(SwitchRow, { label: "Auto-approve Plan", description: "Skip manual review of implementation plan", id: "allow-plan", testId: "switch-allow-plan", checked: allowPlan, onChange: (v) => {
|
|
@@ -280,7 +280,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
280
280
|
label: 'Push & PR flags',
|
|
281
281
|
href: 'https://github.com/shep-ai/cli/blob/main/specs/037-feature-pr-push-flags/spec.yaml',
|
|
282
282
|
},
|
|
283
|
-
], children: "Control how autonomous each feature run is. Auto-approve skips the human review pause at each phase. Push and PR options control what happens after successful implementation." })] }), _jsxs("div", { id: "section-ci", className: "grid scroll-mt-
|
|
283
|
+
], children: "Control how autonomous each feature run is. Auto-approve skips the human review pause at each phase. Push and PR options control what happens after successful implementation." })] }), _jsxs("div", { id: "section-ci", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Activity, title: "Continuous Integration", description: "Limits and timeouts for CI monitoring", testId: "ci-settings-section", children: [_jsx(SettingsRow, { label: "Max fix attempts", description: "Agent retries on failing CI", htmlFor: "ci-max-fix", children: _jsx(NumberStepper, { id: "ci-max-fix", testId: "ci-max-fix-input", placeholder: "3", value: ciMaxFix, onChange: setCiMaxFix, onBlur: () => {
|
|
284
284
|
if (ciMaxFix !== originalCiMaxFix)
|
|
285
285
|
save(buildWorkflowPayload({ ciMaxFix }));
|
|
286
286
|
}, min: 1, max: 10 }) }), _jsx(SettingsRow, { label: "Watch timeout", description: "Max wait for CI completion", htmlFor: "ci-timeout", children: _jsx(NumberStepper, { id: "ci-timeout", testId: "ci-timeout-input", placeholder: "300", value: ciTimeout, onChange: setCiTimeout, onBlur: () => {
|
|
@@ -298,7 +298,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
298
298
|
label: 'CI security gates',
|
|
299
299
|
href: 'https://github.com/shep-ai/cli/blob/main/specs/003-cicd-security-gates/spec.md',
|
|
300
300
|
},
|
|
301
|
-
], children: "When a feature completes, the agent can watch CI and auto-fix failures. These limits prevent runaway retries and control how much log output is sent to the agent for analysis." })] }), _jsxs("div", { id: "section-notifications", className: "grid scroll-mt-
|
|
301
|
+
], children: "When a feature completes, the agent can watch CI and auto-fix failures. These limits prevent runaway retries and control how much log output is sent to the agent for analysis." })] }), _jsxs("div", { id: "section-notifications", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Bell, title: "Notifications", description: "How and when you get notified", testId: "notification-settings-section", children: [_jsx(SubsectionLabel, { children: "Channels" }), _jsx(SwitchRow, { label: "In-app", description: "Notifications inside the Shep UI", id: "notif-in-app", testId: "switch-in-app", checked: inApp, onChange: (v) => {
|
|
302
302
|
setInApp(v);
|
|
303
303
|
save(buildNotificationPayload({ inApp: v }));
|
|
304
304
|
} }), _jsx(SwitchRow, { label: "Browser", description: "Push notifications via the browser", id: "notif-browser", testId: "switch-browser", checked: browser, onChange: (v) => {
|
|
@@ -348,7 +348,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
348
348
|
label: 'Notification system',
|
|
349
349
|
href: 'https://github.com/shep-ai/cli/blob/main/specs/021-agent-notifications/spec.yaml',
|
|
350
350
|
},
|
|
351
|
-
], children: "Three notification channels keep you in the loop: in-app toasts, browser push notifications, and native desktop alerts. Fine-tune which agent lifecycle events trigger a notification." })] }), _jsxs("div", { id: "section-feature-flags", className: "grid scroll-mt-
|
|
351
|
+
], children: "Three notification channels keep you in the loop: in-app toasts, browser push notifications, and native desktop alerts. Fine-tune which agent lifecycle events trigger a notification." })] }), _jsxs("div", { id: "section-feature-flags", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Flag, title: "Feature Flags", description: "Enable or disable experimental features", badge: "Experimental", testId: "feature-flags-settings-section", children: [_jsx(SwitchRow, { label: "Skills", description: "Enable the skills system for agent capabilities", id: "flag-skills", testId: "switch-flag-skills", checked: flags.skills, onChange: (v) => {
|
|
352
352
|
const newFlags = { ...flags, skills: v };
|
|
353
353
|
setFlags(newFlags);
|
|
354
354
|
save({ featureFlags: newFlags });
|
|
@@ -360,7 +360,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
360
360
|
const newFlags = { ...flags, debug: v };
|
|
361
361
|
setFlags(newFlags);
|
|
362
362
|
save({ featureFlags: newFlags });
|
|
363
|
-
} })] }), _jsx(SectionHint, { children: "Experimental features that are still under development. Enable at your own risk \u2014 they may change or be removed in future versions. Debug mode adds verbose logging useful for troubleshooting." })] }), _jsxs("div", { id: "section-database", className: "grid scroll-mt-
|
|
363
|
+
} })] }), _jsx(SectionHint, { children: "Experimental features that are still under development. Enable at your own risk \u2014 they may change or be removed in future versions. Debug mode adds verbose logging useful for troubleshooting." })] }), _jsxs("div", { id: "section-database", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Database, title: "Database", description: "Local storage information", testId: "database-settings-section", children: [_jsx(SettingsRow, { label: "Location", description: "Path to the local SQLite database", children: _jsx("span", { className: "text-muted-foreground max-w-50 truncate font-mono text-xs", "data-testid": "shep-home-path", children: shepHome }) }), _jsx(SettingsRow, { label: "Size", children: _jsx("span", { className: "text-muted-foreground text-xs", "data-testid": "db-file-size", children: dbFileSize }) })] }), _jsx(SectionHint, { links: [
|
|
364
364
|
{
|
|
365
365
|
label: 'Settings service',
|
|
366
366
|
href: 'https://github.com/shep-ai/cli/blob/main/docs/architecture/settings-service.md',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-feature-logs.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-feature-logs.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,oBAAoB,CA4DzF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState, useEffect, useRef, useCallback } from 'react';
|
|
3
|
+
export function useFeatureLogs(featureId) {
|
|
4
|
+
const [content, setContent] = useState('');
|
|
5
|
+
const [isConnected, setIsConnected] = useState(false);
|
|
6
|
+
const [error, setError] = useState(null);
|
|
7
|
+
const eventSourceRef = useRef(null);
|
|
8
|
+
const cleanup = useCallback(() => {
|
|
9
|
+
if (eventSourceRef.current) {
|
|
10
|
+
eventSourceRef.current.close();
|
|
11
|
+
eventSourceRef.current = null;
|
|
12
|
+
}
|
|
13
|
+
setIsConnected(false);
|
|
14
|
+
}, []);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (!featureId) {
|
|
17
|
+
setContent('');
|
|
18
|
+
setIsConnected(false);
|
|
19
|
+
setError(null);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// Reset state for new featureId
|
|
23
|
+
setContent('');
|
|
24
|
+
setError(null);
|
|
25
|
+
// Connect EventSource for live updates
|
|
26
|
+
const es = new EventSource(`/api/feature-logs?featureId=${featureId}`);
|
|
27
|
+
eventSourceRef.current = es;
|
|
28
|
+
es.onopen = () => {
|
|
29
|
+
setIsConnected(true);
|
|
30
|
+
};
|
|
31
|
+
es.addEventListener('initial', (event) => {
|
|
32
|
+
const data = JSON.parse(event.data);
|
|
33
|
+
setContent(data.content);
|
|
34
|
+
});
|
|
35
|
+
es.addEventListener('log', (event) => {
|
|
36
|
+
const data = JSON.parse(event.data);
|
|
37
|
+
setContent((prev) => prev + data.content);
|
|
38
|
+
});
|
|
39
|
+
es.addEventListener('error', (event) => {
|
|
40
|
+
const data = JSON.parse(event.data);
|
|
41
|
+
setError(data.error);
|
|
42
|
+
});
|
|
43
|
+
es.onerror = () => {
|
|
44
|
+
setIsConnected(false);
|
|
45
|
+
};
|
|
46
|
+
return () => {
|
|
47
|
+
es.close();
|
|
48
|
+
eventSourceRef.current = null;
|
|
49
|
+
};
|
|
50
|
+
}, [featureId, cleanup]);
|
|
51
|
+
return { content, isConnected, error };
|
|
52
|
+
}
|