@shepai/cli 1.37.3 → 1.38.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/README.md +1 -1
- package/dist/packages/core/src/application/use-cases/features/get-feature-artifact.use-case.d.ts +19 -0
- package/dist/packages/core/src/application/use-cases/features/get-feature-artifact.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/features/get-feature-artifact.use-case.js +52 -0
- package/dist/packages/core/src/application/use-cases/features/get-research-artifact.use-case.d.ts +19 -0
- package/dist/packages/core/src/application/use-cases/features/get-research-artifact.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/features/get-research-artifact.use-case.js +52 -0
- package/dist/packages/core/src/domain/factories/spec-yaml-parser.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/spec-yaml-parser.js +3 -1
- package/dist/packages/core/src/domain/generated/output.d.ts +84 -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 +14 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.js +27 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/research.prompt.js +14 -1
- package/dist/packages/core/src/infrastructure/services/notifications/notification-bus.d.ts +2 -17
- package/dist/packages/core/src/infrastructure/services/notifications/notification-bus.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/notifications/notification-bus.js +3 -27
- package/dist/src/presentation/web/app/actions/approve-feature.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/approve-feature.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/approve-feature.js +27 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts +22 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/create-feature.js +41 -0
- package/dist/src/presentation/web/app/actions/delete-feature.d.ts +6 -0
- package/dist/src/presentation/web/app/actions/delete-feature.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/delete-feature.js +16 -0
- package/dist/src/presentation/web/app/actions/get-feature-artifact.d.ts +10 -0
- package/dist/src/presentation/web/app/actions/get-feature-artifact.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-feature-artifact.js +43 -0
- package/dist/src/presentation/web/app/actions/get-research-artifact.d.ts +14 -0
- package/dist/src/presentation/web/app/actions/get-research-artifact.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-research-artifact.js +25 -0
- package/dist/src/presentation/web/app/actions/open-folder.d.ts +6 -0
- package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/open-folder.js +39 -0
- package/dist/src/presentation/web/app/actions/open-ide.d.ts +12 -0
- package/dist/src/presentation/web/app/actions/open-ide.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/open-ide.js +22 -0
- package/dist/src/presentation/web/app/actions/open-shell.d.ts +12 -0
- package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/open-shell.js +45 -0
- package/dist/src/presentation/web/app/actions/pick-folder.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/pick-folder.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/pick-folder.js +13 -0
- package/dist/src/presentation/web/app/api/agent-events/route.d.ts +1 -1
- package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/agent-events/route.js +2 -9
- package/dist/src/presentation/web/app/api/dialog/pick-files/route.d.ts +1 -9
- package/dist/src/presentation/web/app/api/dialog/pick-files/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/dialog/pick-files/route.js +3 -6
- package/dist/src/presentation/web/app/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/page.js +1 -0
- package/dist/src/presentation/web/components/common/add-repository-node/pick-folder.d.ts +1 -1
- package/dist/src/presentation/web/components/common/add-repository-node/pick-folder.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/add-repository-node/pick-folder.js +6 -7
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/pick-files.d.ts +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/pick-files.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/pick-files.js +6 -7
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +7 -7
- package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts +4 -0
- package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.js +52 -14
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.js +2 -2
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +2 -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/feature-node/feature-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.js +33 -2
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +10 -0
- package/dist/src/presentation/web/components/common/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/index.js +3 -0
- package/dist/src/presentation/web/components/common/notification-permission-banner/index.d.ts +2 -0
- package/dist/src/presentation/web/components/common/notification-permission-banner/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/notification-permission-banner/index.js +1 -0
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.d.ts +2 -0
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.js +33 -0
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.d.ts +6 -0
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.js +24 -0
- package/dist/src/presentation/web/components/common/open-action-menu/config.d.ts +10 -0
- package/dist/src/presentation/web/components/common/open-action-menu/config.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/open-action-menu/config.js +1 -0
- package/dist/src/presentation/web/components/common/open-action-menu/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/open-action-menu/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/open-action-menu/index.js +1 -0
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.d.ts +3 -0
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.js +18 -0
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts +14 -0
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.js +54 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts +4 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/index.js +2 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.d.ts +41 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.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 +7 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.d.ts +3 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.js +42 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +26 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +267 -0
- package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node.js +2 -2
- package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts +3 -0
- package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.js +51 -14
- 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 +24 -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 +17 -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 +4 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/index.js +2 -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 +7 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.d.ts +39 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.js +1 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts +3 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.js +39 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +22 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +108 -0
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +133 -2
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +28 -19
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +6 -1
- package/dist/src/presentation/web/components/ui/drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/drawer.js +3 -1
- package/dist/src/presentation/web/components/ui/dropdown-menu.d.ts +28 -0
- package/dist/src/presentation/web/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/dropdown-menu.js +33 -0
- package/dist/src/presentation/web/hooks/agent-events-provider.d.ts +13 -0
- package/dist/src/presentation/web/hooks/agent-events-provider.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/agent-events-provider.js +20 -0
- package/dist/src/presentation/web/hooks/use-agent-events.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-agent-events.js +21 -1
- package/dist/src/presentation/web/hooks/use-notifications.d.ts +1 -5
- package/dist/src/presentation/web/hooks/use-notifications.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-notifications.js +5 -10
- package/dist/src/presentation/web/next.config.d.ts.map +1 -1
- package/dist/src/presentation/web/next.config.js +5 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +0 -5
- package/web/.next/build-manifest.json +6 -6
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +4 -4
- package/web/.next/required-server-files.json +4 -4
- package/web/.next/routes-manifest.json +1 -34
- package/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
- package/web/.next/server/app/_global-error/page.js +1 -1
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +7 -7
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
- package/web/.next/server/app/_not-found/page.js +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/agent-events/route.js +1 -1
- package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
- package/web/.next/server/app/api/dialog/pick-files/route.js +2 -2
- package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
- package/web/.next/server/app/page/build-manifest.json +4 -4
- package/web/.next/server/app/page/server-reference-manifest.json +137 -1
- package/web/.next/server/app/page.js +2 -2
- package/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +4 -4
- package/web/.next/server/app/version/page.js +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +0 -5
- package/web/.next/server/chunks/{403f9_next_567de315._.js → 403f9_next_435614de._.js} +7 -6
- package/web/.next/server/chunks/403f9_next_435614de._.js.map +1 -0
- package/web/.next/server/chunks/[externals]__ba6223e5._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__7d5c8b74._.js +6 -0
- package/web/.next/server/chunks/[root-of-the-server]__7d5c8b74._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[externals]_node:path_d28a9bfe._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +12 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__19354aea._.js +9 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__19354aea._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__685eaa45._.js → [root-of-the-server]__32472b89._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__a21ef212._.js → [root-of-the-server]__d21f0894._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e1c44885._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f12b60be._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f47a461b._.js +3 -0
- package/web/.next/server/chunks/ssr/_285de9aa._.js +3 -0
- package/web/.next/server/chunks/ssr/_285de9aa._.js.map +1 -0
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_94d22d37._.js → server/chunks/ssr/_b1f2507a._.js} +4 -4
- package/web/.next/server/chunks/ssr/_b1f2507a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_badge_tsx_964c2a3b._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_badge_tsx_964c2a3b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +4 -4
- 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 +138 -2
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/app-path-routes-manifest.json +0 -5
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +6 -6
- package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +4 -4
- package/web/.next/standalone/src/presentation/web/.next/routes-manifest.json +1 -34
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +7 -7
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/route.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-files/route.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +4 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +137 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +4 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app-paths-manifest.json +0 -5
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/{403f9_next_567de315._.js → 403f9_next_435614de._.js} +7 -6
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[externals]__ba6223e5._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__7d5c8b74._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[externals]_node:path_d28a9bfe._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +12 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__19354aea._.js +9 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__685eaa45._.js → [root-of-the-server]__32472b89._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__a21ef212._.js → [root-of-the-server]__d21f0894._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e1c44885._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f12b60be._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f47a461b._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_285de9aa._.js +3 -0
- package/web/.next/{server/chunks/ssr/_94d22d37._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_b1f2507a._.js} +4 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_ui_badge_tsx_964c2a3b._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +4 -4
- package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +138 -2
- package/web/.next/standalone/src/presentation/web/app/actions/approve-feature.ts +38 -0
- package/web/.next/standalone/src/presentation/web/app/actions/create-feature.ts +81 -0
- package/web/.next/standalone/src/presentation/web/app/actions/delete-feature.ts +22 -0
- package/web/.next/standalone/src/presentation/web/app/actions/get-feature-artifact.ts +55 -0
- package/web/.next/standalone/src/presentation/web/app/actions/get-research-artifact.ts +42 -0
- package/web/.next/standalone/src/presentation/web/app/actions/open-folder.ts +44 -0
- package/web/.next/standalone/src/presentation/web/app/actions/open-ide.ts +37 -0
- package/web/.next/standalone/src/presentation/web/app/{api/shell/open/route.ts → actions/open-shell.ts} +19 -27
- package/web/.next/standalone/src/presentation/web/app/{api/dialog/pick-folder/route.ts → actions/pick-folder.ts} +5 -9
- package/web/.next/standalone/src/presentation/web/app/api/agent-events/route.ts +2 -14
- package/web/.next/standalone/src/presentation/web/app/api/dialog/pick-files/route.ts +8 -10
- package/web/.next/standalone/src/presentation/web/app/globals.css +10 -0
- package/web/.next/standalone/src/presentation/web/app/page.tsx +1 -0
- package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/pick-folder.ts +7 -7
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/pick-files.ts +6 -7
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +15 -19
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/use-feature-actions.ts +61 -17
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/agent-type-icons.tsx +10 -2
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node-state-config.ts +2 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.stories.tsx +10 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.tsx +38 -7
- package/web/.next/standalone/src/presentation/web/components/common/index.ts +18 -0
- package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/index.ts +1 -0
- package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.tsx +52 -0
- package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.tsx +55 -0
- package/web/.next/standalone/src/presentation/web/components/common/open-action-menu/config.ts +10 -0
- package/web/.next/standalone/src/presentation/web/components/common/open-action-menu/index.ts +2 -0
- package/web/.next/standalone/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.tsx +64 -0
- package/web/.next/standalone/src/presentation/web/components/common/open-action-menu/open-action-menu.tsx +111 -0
- package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/index.ts +10 -0
- package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.ts +48 -0
- package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.tsx +34 -0
- package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx +384 -0
- package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.tsx +216 -0
- package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-node.tsx +20 -1
- package/web/.next/standalone/src/presentation/web/components/common/repository-node/use-repository-actions.ts +83 -20
- package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/index.ts +2 -0
- package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.ts +24 -0
- package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.tsx +85 -0
- package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx +139 -0
- package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/index.ts +8 -0
- package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.tsx +34 -0
- package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.ts +42 -0
- package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx +177 -0
- package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx +188 -0
- package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +189 -2
- package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +28 -19
- package/web/.next/standalone/src/presentation/web/components/layouts/app-shell/app-shell.tsx +11 -1
- package/web/.next/standalone/src/presentation/web/components/ui/drawer.tsx +4 -2
- package/web/.next/standalone/src/presentation/web/components/ui/dropdown-menu.tsx +187 -0
- package/web/.next/standalone/src/presentation/web/hooks/agent-events-provider.tsx +32 -0
- package/web/.next/standalone/src/presentation/web/hooks/use-agent-events.ts +23 -1
- package/web/.next/standalone/src/presentation/web/hooks/use-notifications.ts +5 -16
- package/web/.next/standalone/src/presentation/web/next.config.ts +6 -0
- package/web/.next/standalone/src/presentation/web/package.json +2 -1
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/{70993ebedee7eab0.js → 084314470f2144d2.js} +1 -1
- package/web/.next/static/chunks/36bb03a0314fb990.css +2 -0
- package/web/.next/static/chunks/83ff3b6bbee54bce.js +1 -0
- package/web/.next/static/chunks/{fe5e04e707adb039.js → 8c0b96eb95dd31a9.js} +1 -1
- package/web/.next/static/chunks/{df7d29673e0ac11d.js → b13aa397579082e7.js} +1 -1
- package/web/.next/static/chunks/{f3b4460b1496ef52.js → cfe4dc9904fcfddb.js} +1 -1
- package/web/.next/static/chunks/e21d644e5a584136.js +1 -0
- package/web/.next/static/chunks/eca1959e083d0a45.js +10 -0
- package/web/.next/static/chunks/f9519a5c455143e6.js +1 -0
- package/web/.next/static/chunks/{c4b1e95eceaa36ca.js → fe6427c156bda6b0.js} +2 -2
- package/web/.next/static/chunks/{37bc3e283f734dca.js → fe70e73feb07bcfd.js} +1 -1
- package/web/.next/static/chunks/{turbopack-a5a88a85e7ac8e8d.js → turbopack-35ff53de4dab1e56.js} +2 -2
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/link.d.ts +1 -6
- package/web/.next/types/routes.d.ts +1 -6
- package/web/.next/types/validator.ts +0 -45
- package/web/package.json +2 -1
- package/dist/src/presentation/web/app/api/dialog/pick-folder/route.d.ts +0 -11
- package/dist/src/presentation/web/app/api/dialog/pick-folder/route.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/dialog/pick-folder/route.js +0 -16
- package/dist/src/presentation/web/app/api/features/[id]/route.d.ts +0 -11
- package/dist/src/presentation/web/app/api/features/[id]/route.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/features/[id]/route.js +0 -17
- package/dist/src/presentation/web/app/api/features/create/route.d.ts +0 -5
- package/dist/src/presentation/web/app/api/features/create/route.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/features/create/route.js +0 -65
- package/dist/src/presentation/web/app/api/ide/open/route.d.ts +0 -9
- package/dist/src/presentation/web/app/api/ide/open/route.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/ide/open/route.js +0 -36
- package/dist/src/presentation/web/app/api/shell/open/route.d.ts +0 -9
- package/dist/src/presentation/web/app/api/shell/open/route.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/shell/open/route.js +0 -57
- package/dist/src/presentation/web/app/api/validate-toolbar-input.d.ts +0 -18
- package/dist/src/presentation/web/app/api/validate-toolbar-input.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/validate-toolbar-input.js +0 -29
- package/web/.next/server/app/api/dialog/pick-folder/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/api/dialog/pick-folder/route/build-manifest.json +0 -11
- package/web/.next/server/app/api/dialog/pick-folder/route/server-reference-manifest.json +0 -4
- package/web/.next/server/app/api/dialog/pick-folder/route.js +0 -7
- package/web/.next/server/app/api/dialog/pick-folder/route.js.map +0 -5
- package/web/.next/server/app/api/dialog/pick-folder/route.js.nft.json +0 -1
- package/web/.next/server/app/api/dialog/pick-folder/route_client-reference-manifest.js +0 -2
- package/web/.next/server/app/api/features/[id]/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/api/features/[id]/route/build-manifest.json +0 -11
- package/web/.next/server/app/api/features/[id]/route/server-reference-manifest.json +0 -4
- package/web/.next/server/app/api/features/[id]/route.js +0 -7
- package/web/.next/server/app/api/features/[id]/route.js.map +0 -5
- package/web/.next/server/app/api/features/[id]/route.js.nft.json +0 -1
- package/web/.next/server/app/api/features/[id]/route_client-reference-manifest.js +0 -2
- package/web/.next/server/app/api/features/create/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/api/features/create/route/build-manifest.json +0 -11
- package/web/.next/server/app/api/features/create/route/server-reference-manifest.json +0 -4
- package/web/.next/server/app/api/features/create/route.js +0 -7
- package/web/.next/server/app/api/features/create/route.js.map +0 -5
- package/web/.next/server/app/api/features/create/route.js.nft.json +0 -1
- package/web/.next/server/app/api/features/create/route_client-reference-manifest.js +0 -2
- package/web/.next/server/app/api/ide/open/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/api/ide/open/route/build-manifest.json +0 -11
- package/web/.next/server/app/api/ide/open/route/server-reference-manifest.json +0 -4
- package/web/.next/server/app/api/ide/open/route.js +0 -7
- package/web/.next/server/app/api/ide/open/route.js.map +0 -5
- package/web/.next/server/app/api/ide/open/route.js.nft.json +0 -1
- package/web/.next/server/app/api/ide/open/route_client-reference-manifest.js +0 -2
- package/web/.next/server/app/api/shell/open/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/api/shell/open/route/build-manifest.json +0 -11
- package/web/.next/server/app/api/shell/open/route/server-reference-manifest.json +0 -4
- package/web/.next/server/app/api/shell/open/route.js +0 -7
- package/web/.next/server/app/api/shell/open/route.js.map +0 -5
- package/web/.next/server/app/api/shell/open/route.js.nft.json +0 -1
- package/web/.next/server/app/api/shell/open/route_client-reference-manifest.js +0 -2
- package/web/.next/server/chunks/403f9_next_567de315._.js.map +0 -1
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_dialog_pick-folder_route_actions_375ed12f.js +0 -3
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_[id]_route_actions_03b9a4b5.js +0 -3
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_create_route_actions_de49a114.js +0 -3
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_create_route_actions_de49a114.js.map +0 -1
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_shell_open_route_actions_814dc5b6.js +0 -3
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_shell_open_route_actions_814dc5b6.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__04ae3a77._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__04ae3a77._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__3d63a020._.js +0 -8
- package/web/.next/server/chunks/[root-of-the-server]__3d63a020._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__a6bf88cc._.js +0 -4
- package/web/.next/server/chunks/[root-of-the-server]__a6bf88cc._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__acfd2769._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__acfd2769._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__ec87d735._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__ec87d735._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__ecaf05bc._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__ecaf05bc._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__f32c280c._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__f32c280c._.js.map +0 -1
- package/web/.next/server/chunks/b1a17_presentation_web__next-internal_server_app_api_ide_open_route_actions_9fe6e1cd.js +0 -3
- package/web/.next/server/chunks/b1a17_presentation_web__next-internal_server_app_api_ide_open_route_actions_9fe6e1cd.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1eade43f._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1eade43f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__97377864._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a21ef212._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f285e474._.js +0 -3
- package/web/.next/server/chunks/ssr/_09afa42a._.js +0 -10
- package/web/.next/server/chunks/ssr/_09afa42a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_4676cf52._.js +0 -3
- package/web/.next/server/chunks/ssr/_4676cf52._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_94d22d37._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_a4e3cb6f.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_a4e3cb6f.js.map +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route/app-paths-manifest.json +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route/build-manifest.json +0 -11
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route/server-reference-manifest.json +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route.js +0 -7
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route.js.map +0 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route.js.nft.json +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-folder/route_client-reference-manifest.js +0 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route/app-paths-manifest.json +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route/build-manifest.json +0 -11
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route/server-reference-manifest.json +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route.js +0 -7
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route.js.map +0 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route.js.nft.json +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/[id]/route_client-reference-manifest.js +0 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route/app-paths-manifest.json +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route/build-manifest.json +0 -11
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route/server-reference-manifest.json +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route.js +0 -7
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route.js.map +0 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route.js.nft.json +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/features/create/route_client-reference-manifest.js +0 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route/app-paths-manifest.json +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route/build-manifest.json +0 -11
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route/server-reference-manifest.json +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route.js +0 -7
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route.js.map +0 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route.js.nft.json +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/ide/open/route_client-reference-manifest.js +0 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route/app-paths-manifest.json +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route/build-manifest.json +0 -11
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route/server-reference-manifest.json +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route.js +0 -7
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route.js.map +0 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route.js.nft.json +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/shell/open/route_client-reference-manifest.js +0 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_dialog_pick-folder_route_actions_375ed12f.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_[id]_route_actions_03b9a4b5.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_features_create_route_actions_de49a114.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_shell_open_route_actions_814dc5b6.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__04ae3a77._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__3d63a020._.js +0 -8
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__a6bf88cc._.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__acfd2769._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__ec87d735._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__ecaf05bc._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__f32c280c._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/b1a17_presentation_web__next-internal_server_app_api_ide_open_route_actions_9fe6e1cd.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__1eade43f._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__97377864._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f285e474._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_09afa42a._.js +0 -10
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_4676cf52._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_a4e3cb6f.js +0 -3
- package/web/.next/standalone/src/presentation/web/app/api/features/[id]/route.ts +0 -20
- package/web/.next/standalone/src/presentation/web/app/api/features/create/route.ts +0 -103
- package/web/.next/standalone/src/presentation/web/app/api/ide/open/route.ts +0 -44
- package/web/.next/standalone/src/presentation/web/app/api/validate-toolbar-input.ts +0 -46
- package/web/.next/static/chunks/54743561bbaa307a.js +0 -8
- package/web/.next/static/chunks/74f27128e5fbfe52.css +0 -2
- package/web/.next/static/chunks/9993505b2a26c454.js +0 -1
- package/web/.next/static/chunks/c95b4cf170b7f301.js +0 -1
- package/web/.next/static/chunks/e78d1b265b8110c3.js +0 -1
- /package/web/.next/server/chunks/{744ca_web__next-internal_server_app_api_dialog_pick-folder_route_actions_375ed12f.js.map → [externals]__ba6223e5._.js.map} +0 -0
- /package/web/.next/server/chunks/{744ca_web__next-internal_server_app_api_features_[id]_route_actions_03b9a4b5.js.map → ssr/[externals]_node:path_d28a9bfe._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__685eaa45._.js.map → [root-of-the-server]__32472b89._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__f285e474._.js.map → [root-of-the-server]__e1c44885._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__97377864._.js.map → [root-of-the-server]__f47a461b._.js.map} +0 -0
- /package/web/.next/static/{O1yesm5Dga4m8eBi7EwM0 → yvV-GEMagQiZhZAF0YqQs}/_buildManifest.js +0 -0
- /package/web/.next/static/{O1yesm5Dga4m8eBi7EwM0 → yvV-GEMagQiZhZAF0YqQs}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{O1yesm5Dga4m8eBi7EwM0 → yvV-GEMagQiZhZAF0YqQs}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import {
|
|
5
|
+
Code2,
|
|
6
|
+
Terminal,
|
|
7
|
+
FolderOpen,
|
|
8
|
+
ChevronDown,
|
|
9
|
+
Copy,
|
|
10
|
+
Check,
|
|
11
|
+
Loader2,
|
|
12
|
+
CircleAlert,
|
|
13
|
+
} from 'lucide-react';
|
|
14
|
+
import { Button } from '@/components/ui/button';
|
|
15
|
+
import {
|
|
16
|
+
DropdownMenu,
|
|
17
|
+
DropdownMenuContent,
|
|
18
|
+
DropdownMenuItem,
|
|
19
|
+
DropdownMenuLabel,
|
|
20
|
+
DropdownMenuSeparator,
|
|
21
|
+
DropdownMenuTrigger,
|
|
22
|
+
} from '@/components/ui/dropdown-menu';
|
|
23
|
+
import type { OpenActionMenuProps } from './config';
|
|
24
|
+
|
|
25
|
+
const COPY_FEEDBACK_DELAY = 2000;
|
|
26
|
+
|
|
27
|
+
export function OpenActionMenu({ actions, repositoryPath, showSpecs }: OpenActionMenuProps) {
|
|
28
|
+
const [copied, setCopied] = useState(false);
|
|
29
|
+
|
|
30
|
+
const handleCopyPath = () => {
|
|
31
|
+
void navigator.clipboard.writeText(repositoryPath);
|
|
32
|
+
setCopied(true);
|
|
33
|
+
setTimeout(() => setCopied(false), COPY_FEEDBACK_DELAY);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const anyLoading = actions.ideLoading || actions.shellLoading || actions.specsLoading;
|
|
37
|
+
const anyError = actions.ideError ?? actions.shellError ?? actions.specsError;
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<DropdownMenu modal={false}>
|
|
41
|
+
<DropdownMenuTrigger asChild>
|
|
42
|
+
<Button variant="outline" size="sm" className="gap-1.5" disabled={anyLoading}>
|
|
43
|
+
{anyLoading ? (
|
|
44
|
+
<Loader2 className="size-4 animate-spin" />
|
|
45
|
+
) : anyError ? (
|
|
46
|
+
<CircleAlert className="text-destructive size-4" />
|
|
47
|
+
) : (
|
|
48
|
+
<FolderOpen className="size-4" />
|
|
49
|
+
)}
|
|
50
|
+
Open
|
|
51
|
+
<ChevronDown className="size-3 opacity-60" />
|
|
52
|
+
</Button>
|
|
53
|
+
</DropdownMenuTrigger>
|
|
54
|
+
<DropdownMenuContent align="start" className="w-48">
|
|
55
|
+
<DropdownMenuLabel>Open in</DropdownMenuLabel>
|
|
56
|
+
|
|
57
|
+
<DropdownMenuItem
|
|
58
|
+
onClick={actions.openInIde}
|
|
59
|
+
disabled={actions.ideLoading}
|
|
60
|
+
className="gap-2"
|
|
61
|
+
>
|
|
62
|
+
{actions.ideLoading ? (
|
|
63
|
+
<Loader2 className="size-4 animate-spin" />
|
|
64
|
+
) : actions.ideError ? (
|
|
65
|
+
<CircleAlert className="text-destructive size-4" />
|
|
66
|
+
) : (
|
|
67
|
+
<Code2 className="size-4" />
|
|
68
|
+
)}
|
|
69
|
+
IDE
|
|
70
|
+
</DropdownMenuItem>
|
|
71
|
+
|
|
72
|
+
<DropdownMenuItem
|
|
73
|
+
onClick={actions.openInShell}
|
|
74
|
+
disabled={actions.shellLoading}
|
|
75
|
+
className="gap-2"
|
|
76
|
+
>
|
|
77
|
+
{actions.shellLoading ? (
|
|
78
|
+
<Loader2 className="size-4 animate-spin" />
|
|
79
|
+
) : actions.shellError ? (
|
|
80
|
+
<CircleAlert className="text-destructive size-4" />
|
|
81
|
+
) : (
|
|
82
|
+
<Terminal className="size-4" />
|
|
83
|
+
)}
|
|
84
|
+
Terminal
|
|
85
|
+
</DropdownMenuItem>
|
|
86
|
+
|
|
87
|
+
<DropdownMenuItem
|
|
88
|
+
onClick={actions.openSpecsFolder}
|
|
89
|
+
disabled={actions.specsLoading || !showSpecs}
|
|
90
|
+
className="gap-2"
|
|
91
|
+
>
|
|
92
|
+
{actions.specsLoading ? (
|
|
93
|
+
<Loader2 className="size-4 animate-spin" />
|
|
94
|
+
) : actions.specsError ? (
|
|
95
|
+
<CircleAlert className="text-destructive size-4" />
|
|
96
|
+
) : (
|
|
97
|
+
<FolderOpen className="size-4" />
|
|
98
|
+
)}
|
|
99
|
+
Specs Folder
|
|
100
|
+
</DropdownMenuItem>
|
|
101
|
+
|
|
102
|
+
<DropdownMenuSeparator />
|
|
103
|
+
|
|
104
|
+
<DropdownMenuItem onClick={handleCopyPath} className="gap-2">
|
|
105
|
+
{copied ? <Check className="size-4 text-green-600" /> : <Copy className="size-4" />}
|
|
106
|
+
{copied ? 'Copied!' : 'Copy path'}
|
|
107
|
+
</DropdownMenuItem>
|
|
108
|
+
</DropdownMenuContent>
|
|
109
|
+
</DropdownMenu>
|
|
110
|
+
);
|
|
111
|
+
}
|
package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/index.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { PrdQuestionnaire } from './prd-questionnaire';
|
|
2
|
+
export { PrdQuestionnaireDrawer } from './prd-questionnaire-drawer';
|
|
3
|
+
export type {
|
|
4
|
+
PrdQuestionnaireProps,
|
|
5
|
+
PrdQuestionnaireDrawerProps,
|
|
6
|
+
PrdOption,
|
|
7
|
+
PrdQuestion,
|
|
8
|
+
PrdFinalAction,
|
|
9
|
+
PrdQuestionnaireData,
|
|
10
|
+
} from './prd-questionnaire-config';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
PrdOption,
|
|
3
|
+
PrdQuestion,
|
|
4
|
+
PrdFinalAction,
|
|
5
|
+
PrdQuestionnaireData,
|
|
6
|
+
} from '@shepai/core/domain/generated/output';
|
|
7
|
+
|
|
8
|
+
export type { PrdOption, PrdQuestion, PrdFinalAction, PrdQuestionnaireData };
|
|
9
|
+
|
|
10
|
+
export interface PrdQuestionnaireProps {
|
|
11
|
+
/** Questionnaire data from the domain (questions, context, finalAction) */
|
|
12
|
+
data: PrdQuestionnaireData;
|
|
13
|
+
/** Map of questionId to selected optionId (controlled state) */
|
|
14
|
+
selections: Record<string, string>;
|
|
15
|
+
/** Selection change callback */
|
|
16
|
+
onSelect: (questionId: string, optionId: string) => void;
|
|
17
|
+
/** Chat refinement submit callback */
|
|
18
|
+
onRefine: (text: string) => void;
|
|
19
|
+
/** Finalize requirements callback */
|
|
20
|
+
onApprove: (actionId: string) => void;
|
|
21
|
+
/** Controls disabled/animated state during refinement */
|
|
22
|
+
isProcessing?: boolean;
|
|
23
|
+
/** Show the goal/context header (default: false) */
|
|
24
|
+
showHeader?: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface PrdQuestionnaireDrawerProps extends PrdQuestionnaireProps {
|
|
28
|
+
/** Whether the drawer is open */
|
|
29
|
+
open: boolean;
|
|
30
|
+
/** Callback when drawer should close */
|
|
31
|
+
onClose: () => void;
|
|
32
|
+
/** Feature name shown in drawer header */
|
|
33
|
+
featureName: string;
|
|
34
|
+
/** Feature ID shown below the name */
|
|
35
|
+
featureId?: string;
|
|
36
|
+
/** Current lifecycle stage label */
|
|
37
|
+
lifecycleLabel?: string;
|
|
38
|
+
/** Absolute path to the repository on disk */
|
|
39
|
+
repositoryPath?: string;
|
|
40
|
+
/** Git branch name for this feature */
|
|
41
|
+
branch?: string;
|
|
42
|
+
/** Absolute path to the specs folder on disk */
|
|
43
|
+
specPath?: string;
|
|
44
|
+
/** Callback to delete the feature — shows delete button when provided */
|
|
45
|
+
onDelete?: (featureId: string) => void;
|
|
46
|
+
/** Whether a delete operation is in progress */
|
|
47
|
+
isDeleting?: boolean;
|
|
48
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { ReviewDrawerShell } from '@/components/common/review-drawer-shell';
|
|
4
|
+
import { PrdQuestionnaire } from './prd-questionnaire';
|
|
5
|
+
import type { PrdQuestionnaireDrawerProps } from './prd-questionnaire-config';
|
|
6
|
+
|
|
7
|
+
export function PrdQuestionnaireDrawer({
|
|
8
|
+
open,
|
|
9
|
+
onClose,
|
|
10
|
+
featureName,
|
|
11
|
+
featureId,
|
|
12
|
+
repositoryPath,
|
|
13
|
+
branch,
|
|
14
|
+
specPath,
|
|
15
|
+
onDelete,
|
|
16
|
+
isDeleting,
|
|
17
|
+
...questionnaireProps
|
|
18
|
+
}: PrdQuestionnaireDrawerProps) {
|
|
19
|
+
return (
|
|
20
|
+
<ReviewDrawerShell
|
|
21
|
+
open={open}
|
|
22
|
+
onClose={onClose}
|
|
23
|
+
featureName={featureName}
|
|
24
|
+
featureId={featureId}
|
|
25
|
+
repositoryPath={repositoryPath}
|
|
26
|
+
branch={branch}
|
|
27
|
+
specPath={specPath}
|
|
28
|
+
onDelete={onDelete}
|
|
29
|
+
isDeleting={isDeleting}
|
|
30
|
+
>
|
|
31
|
+
<PrdQuestionnaire {...questionnaireProps} />
|
|
32
|
+
</ReviewDrawerShell>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
4
|
+
import { PrdQuestionnaire } from './prd-questionnaire';
|
|
5
|
+
import { PrdQuestionnaireDrawer } from './prd-questionnaire-drawer';
|
|
6
|
+
import type { PrdQuestionnaireData } from './prd-questionnaire-config';
|
|
7
|
+
|
|
8
|
+
const mockQuestions: PrdQuestionnaireData['questions'] = [
|
|
9
|
+
{
|
|
10
|
+
id: 'problem',
|
|
11
|
+
question: 'What specific problem does this feature solve?',
|
|
12
|
+
type: 'select',
|
|
13
|
+
options: [
|
|
14
|
+
{
|
|
15
|
+
id: 'user_pain',
|
|
16
|
+
label: 'User Pain Point',
|
|
17
|
+
rationale: 'Addresses a recurring user complaint or friction',
|
|
18
|
+
recommended: true,
|
|
19
|
+
},
|
|
20
|
+
{ id: 'market_gap', label: 'Market Gap', rationale: 'Fills a gap vs competitors' },
|
|
21
|
+
{ id: 'tech_debt', label: 'Technical Debt', rationale: 'Reduces accumulated technical debt' },
|
|
22
|
+
{
|
|
23
|
+
id: 'compliance',
|
|
24
|
+
label: 'Compliance',
|
|
25
|
+
rationale: 'Meets regulatory or policy requirements',
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: 'priority',
|
|
31
|
+
question: 'What is the business priority level?',
|
|
32
|
+
type: 'select',
|
|
33
|
+
options: [
|
|
34
|
+
{ id: 'p0', label: 'P0 - Critical', rationale: 'Blocking issue, must fix immediately' },
|
|
35
|
+
{ id: 'p1', label: 'P1 - High', rationale: 'Important for next release', recommended: true },
|
|
36
|
+
{ id: 'p2', label: 'P2 - Medium', rationale: 'Nice to have, schedule when possible' },
|
|
37
|
+
{ id: 'p3', label: 'P3 - Low', rationale: 'Backlog item, no urgency' },
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: 'success',
|
|
42
|
+
question: 'What metrics define success?',
|
|
43
|
+
type: 'select',
|
|
44
|
+
options: [
|
|
45
|
+
{
|
|
46
|
+
id: 'adoption',
|
|
47
|
+
label: 'Adoption Rate',
|
|
48
|
+
rationale: 'Percentage of users who adopt the feature',
|
|
49
|
+
recommended: true,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: 'performance',
|
|
53
|
+
label: 'Performance',
|
|
54
|
+
rationale: 'Latency, throughput, or resource improvements',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 'revenue',
|
|
58
|
+
label: 'Revenue Impact',
|
|
59
|
+
rationale: 'Direct or indirect revenue contribution',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'satisfaction',
|
|
63
|
+
label: 'User Satisfaction',
|
|
64
|
+
rationale: 'NPS or CSAT score improvement',
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'timeline',
|
|
70
|
+
question: 'What is the target timeline?',
|
|
71
|
+
type: 'select',
|
|
72
|
+
options: [
|
|
73
|
+
{
|
|
74
|
+
id: 'sprint',
|
|
75
|
+
label: 'This Sprint',
|
|
76
|
+
rationale: 'Deliverable within the current sprint',
|
|
77
|
+
recommended: true,
|
|
78
|
+
},
|
|
79
|
+
{ id: 'quarter', label: 'This Quarter', rationale: 'Target completion within 3 months' },
|
|
80
|
+
{ id: 'half', label: 'This Half', rationale: 'Target completion within 6 months' },
|
|
81
|
+
{ id: 'year', label: 'This Year', rationale: 'Long-term initiative for the year' },
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: 'scope',
|
|
86
|
+
question: 'What is the feature scope?',
|
|
87
|
+
type: 'select',
|
|
88
|
+
options: [
|
|
89
|
+
{
|
|
90
|
+
id: 'mvp',
|
|
91
|
+
label: 'MVP',
|
|
92
|
+
rationale: 'Minimum viable product — core functionality only',
|
|
93
|
+
recommended: true,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
id: 'full',
|
|
97
|
+
label: 'Full Feature',
|
|
98
|
+
rationale: 'Complete feature with all planned capabilities',
|
|
99
|
+
},
|
|
100
|
+
{ id: 'experiment', label: 'Experiment', rationale: 'A/B test or limited rollout' },
|
|
101
|
+
{
|
|
102
|
+
id: 'platform',
|
|
103
|
+
label: 'Platform',
|
|
104
|
+
rationale: 'Foundational work enabling future features',
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: 'stakeholders',
|
|
110
|
+
question: 'Who are the primary stakeholders?',
|
|
111
|
+
type: 'select',
|
|
112
|
+
options: [
|
|
113
|
+
{
|
|
114
|
+
id: 'end_users',
|
|
115
|
+
label: 'End Users',
|
|
116
|
+
rationale: 'Direct users of the product',
|
|
117
|
+
recommended: true,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
id: 'internal',
|
|
121
|
+
label: 'Internal Teams',
|
|
122
|
+
rationale: 'Engineering, product, or design teams',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
id: 'enterprise',
|
|
126
|
+
label: 'Enterprise Clients',
|
|
127
|
+
rationale: 'B2B customers with specific needs',
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
id: 'partners',
|
|
131
|
+
label: 'Partners',
|
|
132
|
+
rationale: 'Third-party integrations or ecosystem partners',
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
];
|
|
137
|
+
|
|
138
|
+
const mockFinalAction = {
|
|
139
|
+
id: 'approve-reqs',
|
|
140
|
+
label: 'Approve Requirements',
|
|
141
|
+
description: 'Finalize and lock the requirements for implementation',
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
/* ─── Interactive wrapper for stories ─── */
|
|
145
|
+
|
|
146
|
+
function InteractiveQuestionnaire({
|
|
147
|
+
selections: initialSelections = {},
|
|
148
|
+
...props
|
|
149
|
+
}: Omit<
|
|
150
|
+
React.ComponentProps<typeof PrdQuestionnaire>,
|
|
151
|
+
'onSelect' | 'onRefine' | 'onApprove' | 'selections'
|
|
152
|
+
> & { selections?: Record<string, string> }) {
|
|
153
|
+
const [selections, setSelections] = useState<Record<string, string>>(initialSelections);
|
|
154
|
+
|
|
155
|
+
return (
|
|
156
|
+
<PrdQuestionnaire
|
|
157
|
+
{...props}
|
|
158
|
+
selections={selections}
|
|
159
|
+
onSelect={(qId, optId) => setSelections((prev) => ({ ...prev, [qId]: optId }))}
|
|
160
|
+
onRefine={fn().mockName('onRefine')}
|
|
161
|
+
onApprove={fn().mockName('onApprove')}
|
|
162
|
+
/>
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* ─── Standalone PrdQuestionnaire ─── */
|
|
167
|
+
|
|
168
|
+
const meta: Meta<typeof PrdQuestionnaire> = {
|
|
169
|
+
title: 'Composed/PrdQuestionnaire',
|
|
170
|
+
component: PrdQuestionnaire,
|
|
171
|
+
tags: ['autodocs'],
|
|
172
|
+
parameters: {
|
|
173
|
+
layout: 'fullscreen',
|
|
174
|
+
},
|
|
175
|
+
argTypes: {
|
|
176
|
+
onSelect: { action: 'onSelect' },
|
|
177
|
+
onRefine: { action: 'onRefine' },
|
|
178
|
+
onApprove: { action: 'onApprove' },
|
|
179
|
+
},
|
|
180
|
+
decorators: [
|
|
181
|
+
(Story) => (
|
|
182
|
+
<div style={{ height: '600px', width: '400px', border: '1px solid var(--color-border)' }}>
|
|
183
|
+
<Story />
|
|
184
|
+
</div>
|
|
185
|
+
),
|
|
186
|
+
],
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
export default meta;
|
|
190
|
+
type Story = StoryObj<typeof PrdQuestionnaire>;
|
|
191
|
+
|
|
192
|
+
const mockData: PrdQuestionnaireData = {
|
|
193
|
+
question: 'Review Feature Requirements',
|
|
194
|
+
context:
|
|
195
|
+
'Please review the AI-generated requirements below. Select the best option for each question, or ask the AI to refine them.',
|
|
196
|
+
questions: mockQuestions,
|
|
197
|
+
finalAction: mockFinalAction,
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
/** Default state — first step shown, no selections. Click options to auto-advance. */
|
|
201
|
+
export const Default: Story = {
|
|
202
|
+
render: () => <InteractiveQuestionnaire data={mockData} />,
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
/** Starting with partial selections — step dots reflect answered state. */
|
|
206
|
+
export const WithSelections: Story = {
|
|
207
|
+
render: () => (
|
|
208
|
+
<InteractiveQuestionnaire
|
|
209
|
+
data={mockData}
|
|
210
|
+
selections={{
|
|
211
|
+
problem: 'user_pain',
|
|
212
|
+
priority: 'p1',
|
|
213
|
+
success: 'adoption',
|
|
214
|
+
}}
|
|
215
|
+
/>
|
|
216
|
+
),
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
/** All questions answered — last step shows Approve button enabled. */
|
|
220
|
+
export const AllAnswered: Story = {
|
|
221
|
+
render: () => (
|
|
222
|
+
<InteractiveQuestionnaire
|
|
223
|
+
data={mockData}
|
|
224
|
+
selections={{
|
|
225
|
+
problem: 'user_pain',
|
|
226
|
+
priority: 'p1',
|
|
227
|
+
success: 'adoption',
|
|
228
|
+
timeline: 'sprint',
|
|
229
|
+
scope: 'mvp',
|
|
230
|
+
stakeholders: 'end_users',
|
|
231
|
+
}}
|
|
232
|
+
/>
|
|
233
|
+
),
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
/** Processing state — all inputs disabled, indeterminate progress bar. */
|
|
237
|
+
export const Refining: Story = {
|
|
238
|
+
args: {
|
|
239
|
+
data: mockData,
|
|
240
|
+
selections: {
|
|
241
|
+
problem: 'user_pain',
|
|
242
|
+
priority: 'p1',
|
|
243
|
+
},
|
|
244
|
+
isProcessing: true,
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
/** Single question — minimal stepper with one step. */
|
|
249
|
+
export const MinimalData: Story = {
|
|
250
|
+
render: () => (
|
|
251
|
+
<InteractiveQuestionnaire
|
|
252
|
+
data={{
|
|
253
|
+
question: 'Quick Check',
|
|
254
|
+
context: 'A simple yes/no decision.',
|
|
255
|
+
questions: [
|
|
256
|
+
{
|
|
257
|
+
id: 'confirm',
|
|
258
|
+
question: 'Should we proceed?',
|
|
259
|
+
type: 'select' as const,
|
|
260
|
+
options: [
|
|
261
|
+
{
|
|
262
|
+
id: 'yes',
|
|
263
|
+
label: 'Yes',
|
|
264
|
+
rationale: 'Proceed with implementation',
|
|
265
|
+
recommended: true,
|
|
266
|
+
},
|
|
267
|
+
{ id: 'no', label: 'No', rationale: 'Go back and reconsider' },
|
|
268
|
+
],
|
|
269
|
+
},
|
|
270
|
+
],
|
|
271
|
+
finalAction: {
|
|
272
|
+
id: 'confirm-action',
|
|
273
|
+
label: 'Confirm',
|
|
274
|
+
description: 'Confirm the decision',
|
|
275
|
+
},
|
|
276
|
+
}}
|
|
277
|
+
/>
|
|
278
|
+
),
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
/* ─── Drawer Variant ─── */
|
|
282
|
+
|
|
283
|
+
type DrawerStory = StoryObj<typeof PrdQuestionnaireDrawer>;
|
|
284
|
+
|
|
285
|
+
const drawerMeta = {
|
|
286
|
+
title: 'Composed/PrdQuestionnaireDrawer',
|
|
287
|
+
component: PrdQuestionnaireDrawer,
|
|
288
|
+
tags: ['autodocs'],
|
|
289
|
+
parameters: {
|
|
290
|
+
layout: 'fullscreen',
|
|
291
|
+
},
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
function DrawerTemplate({
|
|
295
|
+
selections: initialSelections = {},
|
|
296
|
+
...props
|
|
297
|
+
}: Omit<
|
|
298
|
+
React.ComponentProps<typeof PrdQuestionnaireDrawer>,
|
|
299
|
+
'open' | 'onClose' | 'onSelect' | 'onRefine' | 'onApprove' | 'selections'
|
|
300
|
+
> & { selections?: Record<string, string> }) {
|
|
301
|
+
const [open, setOpen] = useState(true);
|
|
302
|
+
const [selections, setSelections] = useState<Record<string, string>>(initialSelections);
|
|
303
|
+
|
|
304
|
+
return (
|
|
305
|
+
<div style={{ height: '100vh', background: '#f8fafc', padding: '2rem' }}>
|
|
306
|
+
<button
|
|
307
|
+
type="button"
|
|
308
|
+
onClick={() => setOpen(true)}
|
|
309
|
+
style={{ padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }}
|
|
310
|
+
>
|
|
311
|
+
Open Drawer
|
|
312
|
+
</button>
|
|
313
|
+
<PrdQuestionnaireDrawer
|
|
314
|
+
{...props}
|
|
315
|
+
open={open}
|
|
316
|
+
onClose={() => setOpen(false)}
|
|
317
|
+
selections={selections}
|
|
318
|
+
onSelect={(qId, optId) => setSelections((prev) => ({ ...prev, [qId]: optId }))}
|
|
319
|
+
onRefine={fn().mockName('onRefine')}
|
|
320
|
+
onApprove={fn().mockName('onApprove')}
|
|
321
|
+
/>
|
|
322
|
+
</div>
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/** Drawer with stepper — navigate questions one at a time. */
|
|
327
|
+
export const InDrawer: DrawerStory = {
|
|
328
|
+
...drawerMeta,
|
|
329
|
+
render: () => (
|
|
330
|
+
<DrawerTemplate
|
|
331
|
+
featureName="User Authentication Flow"
|
|
332
|
+
featureId="FEAT-042"
|
|
333
|
+
lifecycleLabel="Requirements"
|
|
334
|
+
data={mockData}
|
|
335
|
+
/>
|
|
336
|
+
),
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
/** Drawer with partial selections showing progress dots. */
|
|
340
|
+
export const InDrawerWithSelections: DrawerStory = {
|
|
341
|
+
...drawerMeta,
|
|
342
|
+
render: () => (
|
|
343
|
+
<DrawerTemplate
|
|
344
|
+
featureName="User Authentication Flow"
|
|
345
|
+
featureId="FEAT-042"
|
|
346
|
+
lifecycleLabel="Requirements"
|
|
347
|
+
data={mockData}
|
|
348
|
+
selections={{
|
|
349
|
+
problem: 'user_pain',
|
|
350
|
+
priority: 'p1',
|
|
351
|
+
success: 'adoption',
|
|
352
|
+
}}
|
|
353
|
+
/>
|
|
354
|
+
),
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
/** Drawer with delete button visible. */
|
|
358
|
+
export const WithDeleteButton: DrawerStory = {
|
|
359
|
+
...drawerMeta,
|
|
360
|
+
render: () => (
|
|
361
|
+
<DrawerTemplate
|
|
362
|
+
featureName="User Authentication Flow"
|
|
363
|
+
featureId="FEAT-042"
|
|
364
|
+
lifecycleLabel="Requirements"
|
|
365
|
+
data={mockData}
|
|
366
|
+
onDelete={fn().mockName('onDelete')}
|
|
367
|
+
/>
|
|
368
|
+
),
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
/** Drawer with delete in progress (button disabled). */
|
|
372
|
+
export const DeletingState: DrawerStory = {
|
|
373
|
+
...drawerMeta,
|
|
374
|
+
render: () => (
|
|
375
|
+
<DrawerTemplate
|
|
376
|
+
featureName="User Authentication Flow"
|
|
377
|
+
featureId="FEAT-042"
|
|
378
|
+
lifecycleLabel="Requirements"
|
|
379
|
+
data={mockData}
|
|
380
|
+
onDelete={fn().mockName('onDelete')}
|
|
381
|
+
isDeleting
|
|
382
|
+
/>
|
|
383
|
+
),
|
|
384
|
+
};
|