@shepai/cli 1.78.1-pr241.ee88d2d → 1.78.1-pr246.ca9db57
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/apis/json-schema/Attachment.yaml +31 -0
- package/apis/json-schema/Feature.yaml +5 -0
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +3 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +35 -3
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +7 -1
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.d.ts +33 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +3 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +4 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +11 -0
- package/dist/packages/core/src/infrastructure/services/attachment-storage.service.d.ts +28 -0
- package/dist/packages/core/src/infrastructure/services/attachment-storage.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/attachment-storage.service.js +125 -0
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +21 -1
- 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 +1 -14
- package/dist/src/presentation/web/app/actions/compose-user-input.d.ts +7 -0
- package/dist/src/presentation/web/app/actions/compose-user-input.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/compose-user-input.js +7 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts +1 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/create-feature.js +3 -9
- package/dist/src/presentation/web/app/api/attachments/upload/route.d.ts +3 -0
- package/dist/src/presentation/web/app/api/attachments/upload/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/attachments/upload/route.js +101 -0
- package/dist/src/presentation/web/app/build-feature-node-data.d.ts +1 -7
- 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 +1 -7
- package/dist/src/presentation/web/app/build-graph-nodes.js +3 -7
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.d.ts +16 -0
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.js +53 -0
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.js +55 -0
- package/dist/src/presentation/web/components/common/attachment-card/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/attachment-card/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/attachment-card/index.js +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +19 -7
- 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 +85 -48
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +11 -2
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +194 -59
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +6 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +18 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts +9 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +60 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +47 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +307 -0
- 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-node/feature-node-state-config.d.ts +0 -12
- 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 +4 -3
- package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/index.js +4 -3
- package/dist/src/presentation/web/components/common/merge-review/index.d.ts +2 -1
- 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 +1 -0
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts +3 -0
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.js +8 -0
- package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts +8 -0
- 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 +33 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts +2 -1
- 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 +1 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts +3 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.js +8 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +10 -0
- 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 +38 -1
- package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/index.js +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts +26 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.js +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts +3 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +29 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts +14 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.js +33 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts +2 -1
- 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 +1 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts +3 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.js +8 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +8 -0
- 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 +29 -1
- package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/index.js +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts +21 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.js +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts +3 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.js +12 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts +16 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.js +110 -0
- package/dist/src/presentation/web/next.config.d.ts.map +1 -1
- package/dist/src/presentation/web/next.config.js +6 -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 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -0
- package/web/.next/required-server-files.json +3 -0
- package/web/.next/routes-manifest.json +6 -6
- 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 +38 -68
- 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 +38 -68
- 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/attachments/upload/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/attachments/upload/route.js +7 -0
- package/web/.next/server/app/api/attachments/upload/route.js.nft.json +1 -0
- package/web/.next/server/app/api/attachments/upload/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 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_attachments_upload_route_actions_48fe4a8f.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__b2f9a412._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__b2f9a412._.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]__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]__ae824a5b._.js → [root-of-the-server]__a337ca5c._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a337ca5c._.js.map +1 -0
- 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]__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]__f0d8d054._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_3e88ce9d._.js → _06db7efd._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_3e88ce9d._.js.map → _06db7efd._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_1bb131c4._.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/{_887258d0._.js → _4031d614._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_887258d0._.js.map → _4031d614._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_5c4ce700._.js +3 -0
- package/web/.next/server/chunks/ssr/{_5d4e7151._.js.map → _5c4ce700._.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/_6e08ce21._.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/{_4b251edf._.js → _c66a5a32._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_4b251edf._.js.map → _c66a5a32._.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_5412e589._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_5412e589._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.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_c4348b8a._.js +2 -3
- 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 +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_80b5b4bc._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_82416b8f._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_82416b8f._.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 -3
- 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 +64 -108
- package/web/.next/static/chunks/{2a24ac257fc1c10b.js → 1f57d0c949dbb44d.js} +1 -1
- package/web/.next/static/chunks/27a7dd213b6da211.js +1 -0
- package/web/.next/static/chunks/{a2a8c7488178523b.js → 294840464b615929.js} +2 -2
- package/web/.next/static/chunks/2a0156732d824304.js +1 -0
- package/web/.next/static/chunks/55cfb5d3bc98f2e9.js +1 -0
- package/web/.next/static/chunks/6a3e8ea6e1fd2113.js +1 -0
- package/web/.next/static/chunks/{40b4ba55a08cc340.js → 6beed3db056fe481.js} +1 -1
- package/web/.next/static/chunks/{1ed35030fddfaf83.js → 76ddfd21093dc7e7.js} +1 -1
- package/web/.next/static/chunks/b0c8d477fe52559a.js +1 -0
- package/web/.next/static/chunks/{1943a885d38cec14.js → ca4247da9701312c.js} +2 -2
- package/web/.next/static/chunks/e933e992fdc663fb.js +1 -0
- package/web/.next/static/chunks/f6f770ab32a69286.css +2 -0
- package/web/.next/static/chunks/{bdf60cf8dc75a90f.js → f7ed5cfe0c81a863.js} +1 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +0 -17
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +0 -25
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts +0 -18
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/get-feature-plan.js +0 -31
- package/dist/src/presentation/web/app/api/feature-logs/route.d.ts +0 -16
- package/dist/src/presentation/web/app/api/feature-logs/route.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/feature-logs/route.js +0 -184
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts +0 -8
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +0 -90
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +0 -20
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.js +0 -252
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +0 -31
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +0 -123
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts +0 -20
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.js +0 -315
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts +0 -3
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.js +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts +0 -7
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.js +0 -35
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts +0 -18
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.js +0 -89
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts +0 -6
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +0 -78
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +0 -28
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +0 -157
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts +0 -8
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.js +0 -40
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts +0 -22
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.js +0 -188
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts +0 -30
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.js +0 -100
- package/dist/src/presentation/web/hooks/use-feature-logs.d.ts +0 -7
- package/dist/src/presentation/web/hooks/use-feature-logs.d.ts.map +0 -1
- package/dist/src/presentation/web/hooks/use-feature-logs.js +0 -52
- package/web/.next/server/app/api/feature-logs/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/api/feature-logs/route.js +0 -6
- package/web/.next/server/app/api/feature-logs/route.js.nft.json +0 -1
- package/web/.next/server/app/api/feature-logs/route_client-reference-manifest.js +0 -2
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_feature-logs_route_actions_177445e7.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__91d44424._.js +0 -12
- package/web/.next/server/chunks/[root-of-the-server]__91d44424._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ae824a5b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_08bf9375._.js +0 -3
- package/web/.next/server/chunks/ssr/_08bf9375._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_5d4e7151._.js +0 -3
- package/web/.next/server/chunks/ssr/_e7eb01d5._.js +0 -3
- package/web/.next/server/chunks/ssr/_e7eb01d5._.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_7efa14ca._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_7efa14ca._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.js.map +0 -1
- package/web/.next/static/chunks/1ac497a4b2a7a143.js +0 -1
- package/web/.next/static/chunks/201456645dc32523.js +0 -1
- package/web/.next/static/chunks/46de72d1231c72e6.js +0 -1
- package/web/.next/static/chunks/54f920b6a940da52.js +0 -1
- package/web/.next/static/chunks/96bab6d3820504f3.css +0 -2
- package/web/.next/static/chunks/a1c2ecb710b44081.js +0 -1
- package/web/.next/static/chunks/b590b965ec136ece.js +0 -1
- /package/web/.next/server/app/api/{feature-logs → attachments/upload}/route/build-manifest.json +0 -0
- /package/web/.next/server/app/api/{feature-logs → attachments/upload}/route/server-reference-manifest.json +0 -0
- /package/web/.next/server/app/api/{feature-logs → attachments/upload}/route.js.map +0 -0
- /package/web/.next/server/chunks/{744ca_web__next-internal_server_app_api_feature-logs_route_actions_177445e7.js.map → 744ca_web__next-internal_server_app_api_attachments_upload_route_actions_48fe4a8f.js.map} +0 -0
- /package/web/.next/static/{nOcqEXIvW4HbIOdPWtEmW → 2GTN_fvpyiJGx65yUAuBB}/_buildManifest.js +0 -0
- /package/web/.next/static/{nOcqEXIvW4HbIOdPWtEmW → 2GTN_fvpyiJGx65yUAuBB}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{nOcqEXIvW4HbIOdPWtEmW → 2GTN_fvpyiJGx65yUAuBB}/_ssgManifest.js +0 -0
package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
4
|
-
import { Loader2, Check } from 'lucide-react';
|
|
5
|
-
import { Tabs, TabsList, TabsTrigger, TabsContent } from '../../ui/tabs.js';
|
|
6
|
-
import { getFeaturePhaseTimings } from '../../../app/actions/get-feature-phase-timings.js';
|
|
7
|
-
import { getFeaturePlan } from '../../../app/actions/get-feature-plan.js';
|
|
8
|
-
import { PrdQuestionnaire } from '../../common/prd-questionnaire/index.js';
|
|
9
|
-
import { TechDecisionsContent } from '../../common/tech-decisions-review/index.js';
|
|
10
|
-
import { ProductDecisionsSummary } from '../../common/product-decisions-summary/index.js';
|
|
11
|
-
import { MergeReview } from '../../common/merge-review/index.js';
|
|
12
|
-
import { DrawerActionBar } from '../../common/drawer-action-bar/index.js';
|
|
13
|
-
import { OverviewTab } from './overview-tab.js';
|
|
14
|
-
import { ActivityTab } from './activity-tab.js';
|
|
15
|
-
import { LogTab } from './log-tab.js';
|
|
16
|
-
import { PlanTab } from './plan-tab.js';
|
|
17
|
-
import { useFeatureLogs } from '../../../hooks/use-feature-logs.js';
|
|
18
|
-
import { useTabDataFetch } from './use-tab-data-fetch.js';
|
|
19
|
-
/** All possible tabs in display order. */
|
|
20
|
-
const ALL_TABS = [
|
|
21
|
-
{ key: 'overview', label: 'Overview' },
|
|
22
|
-
{ key: 'activity', label: 'Activity' },
|
|
23
|
-
{ key: 'log', label: 'Log' },
|
|
24
|
-
{ key: 'plan', label: 'Plan' },
|
|
25
|
-
{ key: 'prd-review', label: 'PRD Review' },
|
|
26
|
-
{ key: 'tech-decisions', label: 'Tech Decisions' },
|
|
27
|
-
{ key: 'product-decisions', label: 'Product' },
|
|
28
|
-
{ key: 'merge-review', label: 'Merge Review' },
|
|
29
|
-
];
|
|
30
|
-
/** Phases where a plan exists (planning happens at start of implementation). */
|
|
31
|
-
const PLAN_PHASES = new Set(['implementation', 'review', 'deploy', 'maintain']);
|
|
32
|
-
/** Compute which tabs are visible based on feature lifecycle + state. */
|
|
33
|
-
function computeVisibleTabs(node) {
|
|
34
|
-
const tabs = ['overview', 'activity', 'log'];
|
|
35
|
-
if (PLAN_PHASES.has(node.lifecycle) &&
|
|
36
|
-
!(node.lifecycle === 'implementation' && node.state === 'action-required')) {
|
|
37
|
-
tabs.push('plan');
|
|
38
|
-
}
|
|
39
|
-
if (node.lifecycle === 'requirements' && node.state === 'action-required') {
|
|
40
|
-
tabs.push('prd-review');
|
|
41
|
-
}
|
|
42
|
-
if (node.lifecycle === 'implementation' && node.state === 'action-required') {
|
|
43
|
-
tabs.push('tech-decisions', 'product-decisions');
|
|
44
|
-
}
|
|
45
|
-
if (node.lifecycle === 'review' && (node.state === 'action-required' || node.state === 'error')) {
|
|
46
|
-
tabs.push('merge-review');
|
|
47
|
-
}
|
|
48
|
-
return tabs;
|
|
49
|
-
}
|
|
50
|
-
async function fetchActivity(featureId) {
|
|
51
|
-
const result = await getFeaturePhaseTimings(featureId);
|
|
52
|
-
if ('error' in result)
|
|
53
|
-
throw new Error(result.error);
|
|
54
|
-
return result.timings;
|
|
55
|
-
}
|
|
56
|
-
async function fetchPlan(featureId) {
|
|
57
|
-
const result = await getFeaturePlan(featureId);
|
|
58
|
-
if ('error' in result)
|
|
59
|
-
throw new Error(result.error);
|
|
60
|
-
return result.plan;
|
|
61
|
-
}
|
|
62
|
-
const TAB_FETCHERS = {
|
|
63
|
-
activity: fetchActivity,
|
|
64
|
-
plan: fetchPlan,
|
|
65
|
-
};
|
|
66
|
-
export function FeatureDrawerTabs({ featureNode, featureId, initialTab, prdData, prdSelections, onPrdSelect, onPrdApprove, onPrdReject, isPrdLoading, techData, onTechApprove, onTechReject, isTechLoading, productData, mergeData, onMergeApprove, onMergeReject, isMergeLoading, isRejecting, chatInput, onChatInputChange, }) {
|
|
67
|
-
const featureLogs = useFeatureLogs(featureId);
|
|
68
|
-
const visibleTabs = useMemo(() => computeVisibleTabs(featureNode), [featureNode]);
|
|
69
|
-
const visibleTabDefs = useMemo(() => ALL_TABS.filter((t) => visibleTabs.includes(t.key)), [visibleTabs]);
|
|
70
|
-
// Use initialTab if it's visible, otherwise default to 'overview'
|
|
71
|
-
const effectiveInitial = initialTab && visibleTabs.includes(initialTab) ? initialTab : 'overview';
|
|
72
|
-
const [activeTab, setActiveTab] = useState(effectiveInitial);
|
|
73
|
-
const { tabs, fetchTab, refreshTab } = useTabDataFetch(featureId, TAB_FETCHERS);
|
|
74
|
-
// Reset tab when featureId changes
|
|
75
|
-
const prevFeatureIdRef = useRef(featureId);
|
|
76
|
-
useEffect(() => {
|
|
77
|
-
if (prevFeatureIdRef.current !== featureId) {
|
|
78
|
-
prevFeatureIdRef.current = featureId;
|
|
79
|
-
setActiveTab('overview');
|
|
80
|
-
}
|
|
81
|
-
}, [featureId]);
|
|
82
|
-
// When initialTab changes (e.g. SSE updates lifecycle), switch to it if visible
|
|
83
|
-
const prevInitialTabRef = useRef(initialTab);
|
|
84
|
-
useEffect(() => {
|
|
85
|
-
if (prevInitialTabRef.current !== initialTab &&
|
|
86
|
-
initialTab &&
|
|
87
|
-
visibleTabs.includes(initialTab)) {
|
|
88
|
-
prevInitialTabRef.current = initialTab;
|
|
89
|
-
setActiveTab(initialTab);
|
|
90
|
-
}
|
|
91
|
-
}, [initialTab, visibleTabs]);
|
|
92
|
-
// If the active tab becomes invisible (lifecycle changed), fall back to overview
|
|
93
|
-
useEffect(() => {
|
|
94
|
-
if (!visibleTabs.includes(activeTab)) {
|
|
95
|
-
setActiveTab('overview');
|
|
96
|
-
}
|
|
97
|
-
}, [visibleTabs, activeTab]);
|
|
98
|
-
// SSE refresh: re-fetch active lazy tab when featureNode reference changes
|
|
99
|
-
const featureNodeRef = useRef(featureNode);
|
|
100
|
-
const activeTabRef = useRef(activeTab);
|
|
101
|
-
activeTabRef.current = activeTab;
|
|
102
|
-
useEffect(() => {
|
|
103
|
-
if (featureNodeRef.current !== featureNode) {
|
|
104
|
-
featureNodeRef.current = featureNode;
|
|
105
|
-
const current = activeTabRef.current;
|
|
106
|
-
if (current === 'activity' || current === 'plan') {
|
|
107
|
-
refreshTab(current);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}, [featureNode, refreshTab]);
|
|
111
|
-
const handleTabChange = useCallback((value) => {
|
|
112
|
-
const tab = value;
|
|
113
|
-
setActiveTab(tab);
|
|
114
|
-
if (tab === 'activity' || tab === 'plan') {
|
|
115
|
-
fetchTab(tab);
|
|
116
|
-
}
|
|
117
|
-
}, [fetchTab]);
|
|
118
|
-
return (_jsx("div", { className: "flex min-h-0 flex-1 flex-col", children: _jsxs(Tabs, { value: activeTab, onValueChange: handleTabChange, className: "flex min-h-0 flex-1 flex-col", children: [_jsx("div", { className: "shrink-0 overflow-x-auto px-4 pt-4", children: _jsx(TabsList, { className: "flex w-full", children: visibleTabDefs.map((tab) => (_jsx(TabsTrigger, { value: tab.key, className: "flex-1", children: tab.label }, tab.key))) }) }), _jsx(TabsContent, { value: "overview", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(OverviewTab, { data: featureNode }) }), _jsx(TabsContent, { value: "activity", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(ActivityTab, { timings: tabs.activity.data, loading: tabs.activity.loading, error: tabs.activity.error }) }), _jsx(TabsContent, { value: "log", className: "mt-0 flex-1 overflow-hidden", children: _jsx(LogTab, { content: featureLogs.content, isConnected: featureLogs.isConnected, error: featureLogs.error }) }), _jsx(TabsContent, { value: "plan", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(PlanTab, { plan: tabs.plan.data, loading: tabs.plan.loading, error: tabs.plan.error }) }), visibleTabs.includes('prd-review') ? (_jsx(TabsContent, { value: "prd-review", className: "mt-0 flex min-h-0 flex-1 flex-col", children: prdData ? (_jsx(PrdQuestionnaire, { data: prdData, selections: prdSelections ?? {}, onSelect: onPrdSelect ?? (() => undefined), onApprove: onPrdApprove ?? (() => undefined), onReject: onPrdReject, isProcessing: isPrdLoading, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: onChatInputChange })) : (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })) })) : null, visibleTabs.includes('tech-decisions') ? (_jsx(TabsContent, { value: "tech-decisions", className: "mt-0 flex min-h-0 flex-1 flex-col", children: techData ? (_jsxs("div", { className: "flex min-h-0 flex-1 flex-col", children: [_jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(TechDecisionsContent, { data: techData }) }), _jsx(DrawerActionBarForTech, { onApprove: onTechApprove ?? (() => undefined), onReject: onTechReject, isProcessing: isTechLoading, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: onChatInputChange })] })) : (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })) })) : null, visibleTabs.includes('product-decisions') ? (_jsx(TabsContent, { value: "product-decisions", className: "mt-0 flex-1 overflow-y-auto", children: productData === null ? (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })) : productData ? (_jsx(ProductDecisionsSummary, { data: productData })) : (_jsx("p", { className: "text-muted-foreground p-4 text-center text-sm", children: "No product decisions available." })) })) : null, visibleTabs.includes('merge-review') ? (_jsx(TabsContent, { value: "merge-review", className: "mt-0 flex min-h-0 flex-1 flex-col", children: mergeData ? (_jsx(MergeReview, { data: mergeData, onApprove: onMergeApprove ?? (() => undefined), onReject: onMergeReject, isProcessing: isMergeLoading, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: onChatInputChange })) : (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })) })) : null] }) }));
|
|
119
|
-
}
|
|
120
|
-
// ── Private helper ──────────────────────────────────────────────────────
|
|
121
|
-
function DrawerActionBarForTech({ onApprove, onReject, isProcessing, isRejecting, chatInput, onChatInputChange, }) {
|
|
122
|
-
return (_jsx(DrawerActionBar, { onReject: onReject, onApprove: onApprove, approveLabel: "Approve Plan", approveIcon: _jsx(Check, { className: "mr-1.5 h-4 w-4" }), revisionPlaceholder: "Ask AI to revise the plan...", isProcessing: isProcessing, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: onChatInputChange }));
|
|
123
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { FeatureDrawerTabs } from './feature-drawer-tabs.js';
|
|
3
|
-
declare const meta: Meta<typeof FeatureDrawerTabs>;
|
|
4
|
-
export default meta;
|
|
5
|
-
type Story = StoryObj<typeof FeatureDrawerTabs>;
|
|
6
|
-
/** Default — running feature with full data. Overview tab active. */
|
|
7
|
-
export declare const Default: Story;
|
|
8
|
-
/** Completed feature in deploy phase with merged PR. */
|
|
9
|
-
export declare const CompletedFeature: Story;
|
|
10
|
-
/** Early-stage feature in requirements phase, no progress. */
|
|
11
|
-
export declare const RequirementsPhase: Story;
|
|
12
|
-
/** Feature in error state. */
|
|
13
|
-
export declare const ErrorState: Story;
|
|
14
|
-
/** PRD Review tab active — requirements lifecycle, action-required state. */
|
|
15
|
-
export declare const PrdReviewActive: Story;
|
|
16
|
-
/** Tech Decisions tab active — implementation lifecycle, action-required state. */
|
|
17
|
-
export declare const TechReviewActive: Story;
|
|
18
|
-
/** Merge Review tab active — review lifecycle, action-required state. */
|
|
19
|
-
export declare const MergeReviewActive: Story;
|
|
20
|
-
//# sourceMappingURL=feature-drawer-tabs.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"feature-drawer-tabs.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO1D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,iBAAiB,CAcxC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAyPhD,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,EAAE,KAK9B,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAE,KAK/B,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC;AAMF,6EAA6E;AAC7E,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,EAAE,KAU9B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,EAAE,KAS/B,CAAC"}
|
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { PrStatus, CiStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
3
|
-
import { FeatureDrawerTabs } from './feature-drawer-tabs.js';
|
|
4
|
-
const meta = {
|
|
5
|
-
title: 'Drawers/Feature/Tabs/FeatureDrawerTabs',
|
|
6
|
-
component: FeatureDrawerTabs,
|
|
7
|
-
tags: ['autodocs'],
|
|
8
|
-
parameters: {
|
|
9
|
-
layout: 'fullscreen',
|
|
10
|
-
},
|
|
11
|
-
decorators: [
|
|
12
|
-
(Story) => (_jsx("div", { style: { height: '600px', width: '400px', border: '1px solid var(--color-border)' }, children: _jsx(Story, {}) })),
|
|
13
|
-
],
|
|
14
|
-
};
|
|
15
|
-
export default meta;
|
|
16
|
-
/* ---------------------------------------------------------------------------
|
|
17
|
-
* Data fixtures
|
|
18
|
-
* ------------------------------------------------------------------------- */
|
|
19
|
-
const runningFeature = {
|
|
20
|
-
name: 'Auth Module',
|
|
21
|
-
description: 'Implement OAuth2 authentication flow with multiple providers',
|
|
22
|
-
featureId: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
|
|
23
|
-
lifecycle: 'implementation',
|
|
24
|
-
state: 'running',
|
|
25
|
-
progress: 65,
|
|
26
|
-
agentType: 'claude-code',
|
|
27
|
-
runtime: '2h 15m',
|
|
28
|
-
repositoryPath: '/home/user/my-repo',
|
|
29
|
-
branch: 'feat/auth-module',
|
|
30
|
-
oneLiner: 'implement oauth2 authentication flow with google and github providers',
|
|
31
|
-
userQuery: 'add oauth2 authentication with google and github',
|
|
32
|
-
summary: 'Implement OAuth2 authentication flow with multiple providers including Google, GitHub, and custom OIDC',
|
|
33
|
-
createdAt: Date.now() - 2 * 60 * 60 * 1000, // 2 hours ago
|
|
34
|
-
repositoryName: 'my-repo',
|
|
35
|
-
baseBranch: 'main',
|
|
36
|
-
pr: {
|
|
37
|
-
url: 'https://github.com/org/repo/pull/42',
|
|
38
|
-
number: 42,
|
|
39
|
-
status: PrStatus.Open,
|
|
40
|
-
ciStatus: CiStatus.Pending,
|
|
41
|
-
commitHash: 'abc1234567890def',
|
|
42
|
-
},
|
|
43
|
-
};
|
|
44
|
-
const doneFeature = {
|
|
45
|
-
name: 'Payment Gateway',
|
|
46
|
-
description: 'Stripe integration for subscriptions',
|
|
47
|
-
featureId: 'b2c3d4e5-f6a7-8901-bcde-f23456789012',
|
|
48
|
-
lifecycle: 'deploy',
|
|
49
|
-
state: 'done',
|
|
50
|
-
progress: 100,
|
|
51
|
-
runtime: '1h 42m',
|
|
52
|
-
repositoryPath: '/home/user/my-repo',
|
|
53
|
-
branch: 'feat/payment-gateway',
|
|
54
|
-
oneLiner: 'stripe payment gateway integration for subscriptions and one-time purchases',
|
|
55
|
-
userQuery: 'integrate stripe for payments',
|
|
56
|
-
summary: 'Stripe integration for subscriptions and one-time payments',
|
|
57
|
-
createdAt: Date.now() - 3 * 24 * 60 * 60 * 1000, // 3 days ago
|
|
58
|
-
repositoryName: 'my-repo',
|
|
59
|
-
baseBranch: 'main',
|
|
60
|
-
pr: {
|
|
61
|
-
url: 'https://github.com/org/repo/pull/55',
|
|
62
|
-
number: 55,
|
|
63
|
-
status: PrStatus.Merged,
|
|
64
|
-
ciStatus: CiStatus.Success,
|
|
65
|
-
commitHash: 'def4567890abc123',
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
const requirementsFeature = {
|
|
69
|
-
name: 'API Rate Limiting',
|
|
70
|
-
description: 'Implement sliding window rate limiting for public endpoints',
|
|
71
|
-
featureId: 'c3d4e5f6-a7b8-9012-cdef-345678901234',
|
|
72
|
-
lifecycle: 'requirements',
|
|
73
|
-
state: 'action-required',
|
|
74
|
-
progress: 0,
|
|
75
|
-
repositoryPath: '/home/user/my-repo',
|
|
76
|
-
branch: 'feat/api-rate-limiting',
|
|
77
|
-
oneLiner: 'sliding window rate limiter for all public-facing api endpoints',
|
|
78
|
-
userQuery: 'add rate limiting to public api endpoints',
|
|
79
|
-
summary: 'Implement sliding window rate limiting for public endpoints',
|
|
80
|
-
createdAt: Date.now() - 30 * 60 * 1000, // 30 minutes ago
|
|
81
|
-
repositoryName: 'my-repo',
|
|
82
|
-
baseBranch: 'main',
|
|
83
|
-
};
|
|
84
|
-
const techReviewFeature = {
|
|
85
|
-
name: 'Agent Executor',
|
|
86
|
-
description: 'Abstraction layer for multiple AI agent backends',
|
|
87
|
-
featureId: 'd4e5f6a7-b8c9-0123-defa-456789012345',
|
|
88
|
-
lifecycle: 'implementation',
|
|
89
|
-
state: 'action-required',
|
|
90
|
-
progress: 25,
|
|
91
|
-
repositoryPath: '/home/user/my-repo',
|
|
92
|
-
branch: 'feat/agent-executor',
|
|
93
|
-
oneLiner: 'agent executor abstraction layer supporting multiple ai backends',
|
|
94
|
-
userQuery: 'abstract agent executors for multi-backend support',
|
|
95
|
-
summary: 'Abstraction layer for multiple AI agent backends',
|
|
96
|
-
createdAt: Date.now() - 5 * 60 * 60 * 1000, // 5 hours ago
|
|
97
|
-
repositoryName: 'my-repo',
|
|
98
|
-
baseBranch: 'develop',
|
|
99
|
-
};
|
|
100
|
-
const mergeReviewFeature = {
|
|
101
|
-
name: 'Auth Module',
|
|
102
|
-
description: 'OAuth2 authentication flow',
|
|
103
|
-
featureId: 'e5f6a7b8-c9d0-1234-efab-567890123456',
|
|
104
|
-
lifecycle: 'review',
|
|
105
|
-
state: 'action-required',
|
|
106
|
-
progress: 90,
|
|
107
|
-
repositoryPath: '/home/user/my-repo',
|
|
108
|
-
branch: 'feat/auth-module',
|
|
109
|
-
oneLiner: 'oauth2 login flow with google and github identity providers',
|
|
110
|
-
userQuery: 'add oauth2 login flow',
|
|
111
|
-
summary: 'OAuth2 authentication flow with Google and GitHub providers',
|
|
112
|
-
createdAt: Date.now() - 2 * 24 * 60 * 60 * 1000, // 2 days ago
|
|
113
|
-
repositoryName: 'my-repo',
|
|
114
|
-
baseBranch: 'main',
|
|
115
|
-
pr: {
|
|
116
|
-
url: 'https://github.com/shep-ai/cli/pull/42',
|
|
117
|
-
number: 42,
|
|
118
|
-
status: PrStatus.Open,
|
|
119
|
-
ciStatus: CiStatus.Success,
|
|
120
|
-
commitHash: 'a1b2c3d4e5f6789',
|
|
121
|
-
},
|
|
122
|
-
};
|
|
123
|
-
const errorFeature = {
|
|
124
|
-
name: 'Email Service',
|
|
125
|
-
description: 'Transactional email with SendGrid',
|
|
126
|
-
featureId: 'f6a7b8c9-d0e1-2345-fabc-678901234567',
|
|
127
|
-
lifecycle: 'review',
|
|
128
|
-
state: 'error',
|
|
129
|
-
progress: 30,
|
|
130
|
-
errorMessage: 'Build failed: type mismatch in EmailHandler',
|
|
131
|
-
repositoryPath: '/home/user/my-repo',
|
|
132
|
-
branch: 'feat/email-service',
|
|
133
|
-
oneLiner: 'sendgrid-based transactional email service for notifications and alerts',
|
|
134
|
-
userQuery: 'set up sendgrid for transactional emails',
|
|
135
|
-
summary: 'Transactional email with SendGrid for notifications and alerts',
|
|
136
|
-
createdAt: Date.now() - 7 * 24 * 60 * 60 * 1000, // 1 week ago
|
|
137
|
-
repositoryName: 'my-repo',
|
|
138
|
-
baseBranch: 'main',
|
|
139
|
-
};
|
|
140
|
-
/* ---------------------------------------------------------------------------
|
|
141
|
-
* Review data fixtures
|
|
142
|
-
* ------------------------------------------------------------------------- */
|
|
143
|
-
const prdFixture = {
|
|
144
|
-
question: 'Review Feature Requirements',
|
|
145
|
-
context: 'Please review the AI-generated requirements below.',
|
|
146
|
-
questions: [
|
|
147
|
-
{
|
|
148
|
-
id: 'problem',
|
|
149
|
-
question: 'What specific problem does this feature solve?',
|
|
150
|
-
type: 'select',
|
|
151
|
-
options: [
|
|
152
|
-
{
|
|
153
|
-
id: 'user_pain',
|
|
154
|
-
label: 'User Pain Point',
|
|
155
|
-
rationale: 'Addresses a recurring user complaint',
|
|
156
|
-
recommended: true,
|
|
157
|
-
},
|
|
158
|
-
{ id: 'market_gap', label: 'Market Gap', rationale: 'Fills a gap vs competitors' },
|
|
159
|
-
{
|
|
160
|
-
id: 'tech_debt',
|
|
161
|
-
label: 'Technical Debt',
|
|
162
|
-
rationale: 'Reduces accumulated technical debt',
|
|
163
|
-
},
|
|
164
|
-
],
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
id: 'priority',
|
|
168
|
-
question: 'What is the business priority level?',
|
|
169
|
-
type: 'select',
|
|
170
|
-
options: [
|
|
171
|
-
{ id: 'p0', label: 'P0 - Critical', rationale: 'Blocking issue, must fix immediately' },
|
|
172
|
-
{
|
|
173
|
-
id: 'p1',
|
|
174
|
-
label: 'P1 - High',
|
|
175
|
-
rationale: 'Important for next release',
|
|
176
|
-
recommended: true,
|
|
177
|
-
},
|
|
178
|
-
{ id: 'p2', label: 'P2 - Medium', rationale: 'Nice to have' },
|
|
179
|
-
],
|
|
180
|
-
},
|
|
181
|
-
],
|
|
182
|
-
finalAction: {
|
|
183
|
-
id: 'approve-reqs',
|
|
184
|
-
label: 'Approve Requirements',
|
|
185
|
-
description: 'Finalize and lock the requirements for implementation',
|
|
186
|
-
},
|
|
187
|
-
};
|
|
188
|
-
const techFixture = {
|
|
189
|
-
name: 'Agent Executor Abstraction',
|
|
190
|
-
summary: 'Research into the best approach for abstracting agent executors.',
|
|
191
|
-
technologies: ['TypeScript', 'tsyringe', 'LangGraph'],
|
|
192
|
-
decisions: [
|
|
193
|
-
{
|
|
194
|
-
title: 'Agent Execution Framework',
|
|
195
|
-
chosen: 'LangGraph',
|
|
196
|
-
rejected: ['Custom state machine', 'Temporal.io'],
|
|
197
|
-
rationale: 'LangGraph provides built-in checkpointing and human-in-the-loop support.',
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
title: 'Dependency Injection',
|
|
201
|
-
chosen: 'tsyringe',
|
|
202
|
-
rejected: ['InversifyJS', 'Manual DI'],
|
|
203
|
-
rationale: 'Lightweight, uses standard decorators, minimal overhead.',
|
|
204
|
-
},
|
|
205
|
-
],
|
|
206
|
-
};
|
|
207
|
-
const productFixture = {
|
|
208
|
-
question: 'Goal',
|
|
209
|
-
context: 'Add user authentication to the application',
|
|
210
|
-
questions: [
|
|
211
|
-
{
|
|
212
|
-
question: 'Which authentication strategy should we use?',
|
|
213
|
-
selectedOption: 'OAuth 2.0',
|
|
214
|
-
rationale: 'Industry standard with broad provider support.',
|
|
215
|
-
wasRecommended: true,
|
|
216
|
-
},
|
|
217
|
-
{
|
|
218
|
-
question: 'How should we handle session management?',
|
|
219
|
-
selectedOption: 'JWT tokens',
|
|
220
|
-
rationale: 'Stateless and scalable across services.',
|
|
221
|
-
wasRecommended: false,
|
|
222
|
-
},
|
|
223
|
-
],
|
|
224
|
-
};
|
|
225
|
-
const mergeFixture = {
|
|
226
|
-
pr: {
|
|
227
|
-
url: 'https://github.com/shep-ai/cli/pull/42',
|
|
228
|
-
number: 42,
|
|
229
|
-
status: PrStatus.Open,
|
|
230
|
-
commitHash: 'a1b2c3d4e5f6789',
|
|
231
|
-
ciStatus: CiStatus.Success,
|
|
232
|
-
},
|
|
233
|
-
branch: { source: 'feat/add-auth', target: 'main' },
|
|
234
|
-
phases: [
|
|
235
|
-
{ id: 'phase-1', name: 'Foundation & Config', description: 'Set up types and server action' },
|
|
236
|
-
{ id: 'phase-2', name: 'Component Implementation', description: 'Build the merge review UI' },
|
|
237
|
-
],
|
|
238
|
-
diffSummary: { filesChanged: 12, additions: 340, deletions: 85, commitCount: 5 },
|
|
239
|
-
};
|
|
240
|
-
/* ---------------------------------------------------------------------------
|
|
241
|
-
* Stories
|
|
242
|
-
*
|
|
243
|
-
* Note: In Storybook, server actions are mocked and return error states.
|
|
244
|
-
* The Overview tab renders fully since it uses FeatureNodeData (no server action).
|
|
245
|
-
* Activity and Plan tabs show error states from the mocked actions.
|
|
246
|
-
* The Log tab shows empty/disconnected state (no EventSource in Storybook).
|
|
247
|
-
* See individual tab stories (ActivityTab, LogTab, PlanTab) for populated states.
|
|
248
|
-
* ------------------------------------------------------------------------- */
|
|
249
|
-
/** Default — running feature with full data. Overview tab active. */
|
|
250
|
-
export const Default = {
|
|
251
|
-
args: {
|
|
252
|
-
featureNode: runningFeature,
|
|
253
|
-
featureId: runningFeature.featureId,
|
|
254
|
-
},
|
|
255
|
-
};
|
|
256
|
-
/** Completed feature in deploy phase with merged PR. */
|
|
257
|
-
export const CompletedFeature = {
|
|
258
|
-
args: {
|
|
259
|
-
featureNode: doneFeature,
|
|
260
|
-
featureId: doneFeature.featureId,
|
|
261
|
-
},
|
|
262
|
-
};
|
|
263
|
-
/** Early-stage feature in requirements phase, no progress. */
|
|
264
|
-
export const RequirementsPhase = {
|
|
265
|
-
args: {
|
|
266
|
-
featureNode: requirementsFeature,
|
|
267
|
-
featureId: requirementsFeature.featureId,
|
|
268
|
-
},
|
|
269
|
-
};
|
|
270
|
-
/** Feature in error state. */
|
|
271
|
-
export const ErrorState = {
|
|
272
|
-
args: {
|
|
273
|
-
featureNode: errorFeature,
|
|
274
|
-
featureId: errorFeature.featureId,
|
|
275
|
-
},
|
|
276
|
-
};
|
|
277
|
-
/* ---------------------------------------------------------------------------
|
|
278
|
-
* Review tab stories
|
|
279
|
-
* ------------------------------------------------------------------------- */
|
|
280
|
-
/** PRD Review tab active — requirements lifecycle, action-required state. */
|
|
281
|
-
export const PrdReviewActive = {
|
|
282
|
-
args: {
|
|
283
|
-
featureNode: requirementsFeature,
|
|
284
|
-
featureId: requirementsFeature.featureId,
|
|
285
|
-
initialTab: 'prd-review',
|
|
286
|
-
prdData: prdFixture,
|
|
287
|
-
prdSelections: { problem: 'user_pain', priority: 'p1' },
|
|
288
|
-
onPrdSelect: () => undefined,
|
|
289
|
-
onPrdApprove: () => undefined,
|
|
290
|
-
onPrdReject: () => undefined,
|
|
291
|
-
},
|
|
292
|
-
};
|
|
293
|
-
/** Tech Decisions tab active — implementation lifecycle, action-required state. */
|
|
294
|
-
export const TechReviewActive = {
|
|
295
|
-
args: {
|
|
296
|
-
featureNode: techReviewFeature,
|
|
297
|
-
featureId: techReviewFeature.featureId,
|
|
298
|
-
initialTab: 'tech-decisions',
|
|
299
|
-
techData: techFixture,
|
|
300
|
-
productData: productFixture,
|
|
301
|
-
onTechApprove: () => undefined,
|
|
302
|
-
onTechReject: () => undefined,
|
|
303
|
-
},
|
|
304
|
-
};
|
|
305
|
-
/** Merge Review tab active — review lifecycle, action-required state. */
|
|
306
|
-
export const MergeReviewActive = {
|
|
307
|
-
args: {
|
|
308
|
-
featureNode: mergeReviewFeature,
|
|
309
|
-
featureId: mergeReviewFeature.featureId,
|
|
310
|
-
initialTab: 'merge-review',
|
|
311
|
-
mergeData: mergeFixture,
|
|
312
|
-
onMergeApprove: () => undefined,
|
|
313
|
-
onMergeReject: () => undefined,
|
|
314
|
-
},
|
|
315
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { FeatureDrawerTabs } from './feature-drawer-tabs.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/log-tab.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,WAAW,2CA6ElE"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useRef, useEffect, useState, useCallback } from 'react';
|
|
4
|
-
import { AlertCircle, Terminal, ArrowDown } from 'lucide-react';
|
|
5
|
-
export function LogTab({ content, isConnected, error }) {
|
|
6
|
-
const containerRef = useRef(null);
|
|
7
|
-
const [autoScroll, setAutoScroll] = useState(true);
|
|
8
|
-
const handleScroll = useCallback(() => {
|
|
9
|
-
const el = containerRef.current;
|
|
10
|
-
if (!el)
|
|
11
|
-
return;
|
|
12
|
-
const isAtBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 40;
|
|
13
|
-
setAutoScroll(isAtBottom);
|
|
14
|
-
}, []);
|
|
15
|
-
const jumpToBottom = useCallback(() => {
|
|
16
|
-
const el = containerRef.current;
|
|
17
|
-
if (!el)
|
|
18
|
-
return;
|
|
19
|
-
el.scrollTop = el.scrollHeight;
|
|
20
|
-
setAutoScroll(true);
|
|
21
|
-
}, []);
|
|
22
|
-
// Auto-scroll when new content arrives (only if auto-scroll is active)
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
if (autoScroll && containerRef.current) {
|
|
25
|
-
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
26
|
-
}
|
|
27
|
-
}, [content, autoScroll]);
|
|
28
|
-
if (error) {
|
|
29
|
-
return (_jsxs("div", { className: "flex items-center gap-2 p-4 text-sm text-red-600", children: [_jsx(AlertCircle, { className: "h-4 w-4 shrink-0" }), _jsx("span", { children: error })] }));
|
|
30
|
-
}
|
|
31
|
-
if (!content) {
|
|
32
|
-
return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-2 p-8", children: [_jsx(Terminal, { className: "text-muted-foreground h-8 w-8" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "No log output yet" }), isConnected ? (_jsx("p", { className: "text-muted-foreground text-xs", children: "Waiting for log data..." })) : null] }));
|
|
33
|
-
}
|
|
34
|
-
return (_jsxs("div", { className: "flex h-full flex-col", "data-testid": "log-tab", children: [_jsxs("div", { className: "flex items-center gap-2 border-b px-3 py-1.5", children: [_jsx("span", { className: `h-2 w-2 rounded-full ${isConnected ? 'bg-emerald-500' : 'bg-zinc-400'}` }), _jsx("span", { className: "text-muted-foreground text-xs", children: isConnected ? 'Live' : 'Disconnected' }), !autoScroll ? (_jsxs("button", { type: "button", onClick: jumpToBottom, className: "text-muted-foreground hover:text-foreground ml-auto flex items-center gap-1 text-xs", children: [_jsx(ArrowDown, { className: "h-3 w-3" }), "Jump to bottom"] })) : null] }), _jsx("div", { ref: containerRef, onScroll: handleScroll, className: "flex-1 overflow-y-auto bg-zinc-950 p-3 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap text-zinc-300", children: content })] }));
|
|
35
|
-
}
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { LogTab } from './log-tab.js';
|
|
3
|
-
declare const meta: Meta<typeof LogTab>;
|
|
4
|
-
export default meta;
|
|
5
|
-
type Story = StoryObj<typeof LogTab>;
|
|
6
|
-
/** Default — typical agent log output with live connection. */
|
|
7
|
-
export declare const Default: Story;
|
|
8
|
-
/** LongLog — 200 lines of log output to test scrolling behavior. */
|
|
9
|
-
export declare const LongLog: Story;
|
|
10
|
-
/** Disconnected — log content present but connection is lost. */
|
|
11
|
-
export declare const Disconnected: Story;
|
|
12
|
-
/** Empty — no log content yet, connected and waiting. */
|
|
13
|
-
export declare const Empty: Story;
|
|
14
|
-
/** EmptyDisconnected — no log content and not connected. */
|
|
15
|
-
export declare const EmptyDisconnected: Story;
|
|
16
|
-
/** Error — error message displayed when connection fails. */
|
|
17
|
-
export declare const Error: Story;
|
|
18
|
-
//# sourceMappingURL=log-tab.stories.d.ts.map
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAc7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,MAAM,CAAC,CAAC;AAqCrC,+DAA+D;AAC/D,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { LogTab } from './log-tab.js';
|
|
3
|
-
const meta = {
|
|
4
|
-
title: 'Drawers/Feature/Tabs/LogTab',
|
|
5
|
-
component: LogTab,
|
|
6
|
-
tags: ['autodocs'],
|
|
7
|
-
parameters: {
|
|
8
|
-
layout: 'fullscreen',
|
|
9
|
-
},
|
|
10
|
-
decorators: [
|
|
11
|
-
(Story) => (_jsx("div", { style: { height: '600px', width: '400px', border: '1px solid var(--color-border)' }, children: _jsx(Story, {}) })),
|
|
12
|
-
],
|
|
13
|
-
};
|
|
14
|
-
export default meta;
|
|
15
|
-
/* ---------------------------------------------------------------------------
|
|
16
|
-
* Data fixtures
|
|
17
|
-
* ------------------------------------------------------------------------- */
|
|
18
|
-
const typicalLogContent = `[2026-03-08T10:00:01.123Z] Starting agent run for feature "auth-module"
|
|
19
|
-
[2026-03-08T10:00:02.789Z] Agent started — analyzing codebase
|
|
20
|
-
[2026-03-08T10:00:03.456Z] Scanning repository structure...
|
|
21
|
-
[2026-03-08T10:00:04.012Z] Found 127 source files across 14 packages
|
|
22
|
-
[2026-03-08T10:00:05.234Z] Identified entry points: src/index.ts, src/auth/providers.ts
|
|
23
|
-
[2026-03-08T10:00:06.890Z] Running dependency analysis...
|
|
24
|
-
[2026-03-08T10:00:08.345Z] Resolved 42 internal dependencies
|
|
25
|
-
[2026-03-08T10:00:09.567Z] Generating implementation plan...
|
|
26
|
-
[2026-03-08T10:00:11.123Z] Plan generated — 3 phases, 8 tasks
|
|
27
|
-
[2026-03-08T10:00:12.789Z] Phase 1: scaffold auth module structure
|
|
28
|
-
[2026-03-08T10:00:14.456Z] Creating src/auth/oauth-provider.ts
|
|
29
|
-
[2026-03-08T10:00:15.012Z] Creating src/auth/token-manager.ts
|
|
30
|
-
[2026-03-08T10:00:16.234Z] Phase 1 complete — 2 files created
|
|
31
|
-
[2026-03-08T10:00:17.890Z] Phase 2: implement OAuth2 flow
|
|
32
|
-
[2026-03-08T10:00:19.345Z] Writing Google OAuth provider...
|
|
33
|
-
[2026-03-08T10:00:21.567Z] Writing GitHub OAuth provider...
|
|
34
|
-
[2026-03-08T10:00:23.123Z] Phase 2 complete — providers implemented
|
|
35
|
-
[2026-03-08T10:00:24.789Z] Phase 3: add tests and documentation
|
|
36
|
-
[2026-03-08T10:00:26.456Z] Generating test suite...
|
|
37
|
-
[2026-03-08T10:00:28.012Z] All phases complete — feature "auth-module" ready for review`;
|
|
38
|
-
const longLogContent = Array.from({ length: 200 }, (_, i) => `[2026-03-08T10:${String(Math.floor(i / 60)).padStart(2, '0')}:${String(i % 60).padStart(2, '0')}.${String((i * 7) % 1000).padStart(3, '0')}Z] Step ${i + 1}: processing task batch ${Math.floor(i / 10) + 1} — file ${i + 1} of 200`).join('\n');
|
|
39
|
-
/* ---------------------------------------------------------------------------
|
|
40
|
-
* Stories
|
|
41
|
-
* ------------------------------------------------------------------------- */
|
|
42
|
-
/** Default — typical agent log output with live connection. */
|
|
43
|
-
export const Default = {
|
|
44
|
-
args: {
|
|
45
|
-
content: typicalLogContent,
|
|
46
|
-
isConnected: true,
|
|
47
|
-
error: null,
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
/** LongLog — 200 lines of log output to test scrolling behavior. */
|
|
51
|
-
export const LongLog = {
|
|
52
|
-
args: {
|
|
53
|
-
content: longLogContent,
|
|
54
|
-
isConnected: true,
|
|
55
|
-
error: null,
|
|
56
|
-
},
|
|
57
|
-
};
|
|
58
|
-
/** Disconnected — log content present but connection is lost. */
|
|
59
|
-
export const Disconnected = {
|
|
60
|
-
args: {
|
|
61
|
-
content: typicalLogContent,
|
|
62
|
-
isConnected: false,
|
|
63
|
-
error: null,
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
/** Empty — no log content yet, connected and waiting. */
|
|
67
|
-
export const Empty = {
|
|
68
|
-
args: {
|
|
69
|
-
content: '',
|
|
70
|
-
isConnected: true,
|
|
71
|
-
error: null,
|
|
72
|
-
},
|
|
73
|
-
};
|
|
74
|
-
/** EmptyDisconnected — no log content and not connected. */
|
|
75
|
-
export const EmptyDisconnected = {
|
|
76
|
-
args: {
|
|
77
|
-
content: '',
|
|
78
|
-
isConnected: false,
|
|
79
|
-
error: null,
|
|
80
|
-
},
|
|
81
|
-
};
|
|
82
|
-
/** Error — error message displayed when connection fails. */
|
|
83
|
-
export const Error = {
|
|
84
|
-
args: {
|
|
85
|
-
content: '',
|
|
86
|
-
isConnected: false,
|
|
87
|
-
error: 'WebSocket connection lost. Unable to stream agent logs.',
|
|
88
|
-
},
|
|
89
|
-
};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { FeatureNodeData } from '../../common/feature-node/index.js';
|
|
2
|
-
export interface OverviewTabProps {
|
|
3
|
-
data: FeatureNodeData;
|
|
4
|
-
}
|
|
5
|
-
export declare function OverviewTab({ data }: OverviewTabProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
-
//# sourceMappingURL=overview-tab.d.ts.map
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overview-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/overview-tab.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAMxE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,gBAAgB,2CAoCrD"}
|