@shepai/cli 1.37.3 → 1.39.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/ports/output/agents/feature-agent-process.interface.d.ts +1 -0
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts +5 -4
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +36 -14
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.d.ts +12 -3
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +88 -8
- package/dist/packages/core/src/application/use-cases/agents/review-feature.use-case.d.ts +35 -0
- package/dist/packages/core/src/application/use-cases/agents/review-feature.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/agents/review-feature.use-case.js +88 -0
- 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 +186 -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 +16 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +51 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.js +21 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +31 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +19 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +101 -16
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts +2 -1
- 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 +59 -9
- 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/agents/feature-agent/phase-timing-context.d.ts +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/phase-timing-context.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/phase-timing-context.js +28 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +13 -0
- 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/cli/commands/agent/reject.command.js +1 -1
- package/dist/src/presentation/cli/commands/feat/reject.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/reject.command.js +6 -4
- package/dist/src/presentation/cli/commands/feat/review.command.d.ts +3 -2
- package/dist/src/presentation/cli/commands/feat/review.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/review.command.js +87 -12
- package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/show.command.js +38 -3
- package/dist/src/presentation/tui/prompts/prd-review-question.prompt.d.ts +30 -0
- package/dist/src/presentation/tui/prompts/prd-review-question.prompt.d.ts.map +1 -0
- package/dist/src/presentation/tui/prompts/prd-review-question.prompt.js +23 -0
- package/dist/src/presentation/tui/prompts/prd-review-summary.prompt.d.ts +29 -0
- package/dist/src/presentation/tui/prompts/prd-review-summary.prompt.d.ts.map +1 -0
- package/dist/src/presentation/tui/prompts/prd-review-summary.prompt.js +29 -0
- package/dist/src/presentation/tui/wizards/merge-review.wizard.d.ts +13 -0
- package/dist/src/presentation/tui/wizards/merge-review.wizard.d.ts.map +1 -0
- package/dist/src/presentation/tui/wizards/merge-review.wizard.js +43 -0
- package/dist/src/presentation/tui/wizards/plan-review.wizard.d.ts +13 -0
- package/dist/src/presentation/tui/wizards/plan-review.wizard.d.ts.map +1 -0
- package/dist/src/presentation/tui/wizards/plan-review.wizard.js +43 -0
- package/dist/src/presentation/tui/wizards/prd-review.wizard.d.ts +26 -0
- package/dist/src/presentation/tui/wizards/prd-review.wizard.d.ts.map +1 -0
- package/dist/src/presentation/tui/wizards/prd-review.wizard.js +42 -0
- 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/429ee8f94032181c.js +10 -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/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 → t8z43Apwz2m0TFf1MnAKq}/_buildManifest.js +0 -0
- /package/web/.next/static/{O1yesm5Dga4m8eBi7EwM0 → t8z43Apwz2m0TFf1MnAKq}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{O1yesm5Dga4m8eBi7EwM0 → t8z43Apwz2m0TFf1MnAKq}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reject.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/reject.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,mBAAmB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"reject.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/reject.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,mBAAmB,IAAI,OAAO,CAwC7C"}
|
|
@@ -16,7 +16,7 @@ export function createRejectCommand() {
|
|
|
16
16
|
return new Command('reject')
|
|
17
17
|
.description('Reject a feature waiting for review')
|
|
18
18
|
.argument('[id]', 'Feature ID (auto-resolves if omitted)')
|
|
19
|
-
.
|
|
19
|
+
.requiredOption('--reason <text>', 'Rejection feedback (required)')
|
|
20
20
|
.action(async (featureId, options) => {
|
|
21
21
|
try {
|
|
22
22
|
const featureRepo = container.resolve('IFeatureRepository');
|
|
@@ -35,10 +35,12 @@ export function createRejectCommand() {
|
|
|
35
35
|
}
|
|
36
36
|
messages.newline();
|
|
37
37
|
messages.warning(`Rejected: ${feature.name}`);
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
console.log(` ${colors.muted('Reason:')} ${options.reason}`);
|
|
39
|
+
console.log(` ${colors.muted('Iteration:')} ${result.iteration}`);
|
|
40
|
+
if (result.iterationWarning) {
|
|
41
|
+
messages.warning('Warning: 5+ iterations. Consider refining the prompt instead.');
|
|
40
42
|
}
|
|
41
|
-
console.log(` ${colors.muted('Agent:')}
|
|
43
|
+
console.log(` ${colors.muted('Agent:')} re-running requirements`);
|
|
42
44
|
messages.newline();
|
|
43
45
|
}
|
|
44
46
|
catch (error) {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Feature Review Command
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Interactive review of a feature waiting for approval.
|
|
5
|
+
* Routes to phase-specific TUI wizard (PRD, Plan, or Merge),
|
|
6
|
+
* then calls approve or reject use case based on user action.
|
|
6
7
|
*
|
|
7
8
|
* Usage:
|
|
8
9
|
* shep feat review [id]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/review.command.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"review.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/review.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiEpC,wBAAgB,mBAAmB,IAAI,OAAO,CA2E7C"}
|
|
@@ -1,19 +1,60 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Feature Review Command
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Interactive review of a feature waiting for approval.
|
|
5
|
+
* Routes to phase-specific TUI wizard (PRD, Plan, or Merge),
|
|
6
|
+
* then calls approve or reject use case based on user action.
|
|
6
7
|
*
|
|
7
8
|
* Usage:
|
|
8
9
|
* shep feat review [id]
|
|
9
10
|
*/
|
|
10
11
|
import { Command } from 'commander';
|
|
11
12
|
import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
|
|
13
|
+
import { ReviewFeatureUseCase } from '../../../../../packages/core/src/application/use-cases/agents/review-feature.use-case.js';
|
|
14
|
+
import { ApproveAgentRunUseCase } from '../../../../../packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js';
|
|
15
|
+
import { RejectAgentRunUseCase } from '../../../../../packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js';
|
|
12
16
|
import { resolveWaitingFeature } from './resolve-waiting-feature.js';
|
|
17
|
+
import { prdReviewWizard } from '../../../tui/wizards/prd-review.wizard.js';
|
|
18
|
+
import { planReviewWizard } from '../../../tui/wizards/plan-review.wizard.js';
|
|
19
|
+
import { mergeReviewWizard } from '../../../tui/wizards/merge-review.wizard.js';
|
|
13
20
|
import { colors, messages } from '../../ui/index.js';
|
|
21
|
+
function parsePhase(runResult) {
|
|
22
|
+
return runResult?.startsWith('node:') ? runResult.slice(5) : 'unknown';
|
|
23
|
+
}
|
|
24
|
+
async function runPhaseWizard(phase, featureId, repoPath) {
|
|
25
|
+
if (phase === 'requirements') {
|
|
26
|
+
const reviewUseCase = container.resolve(ReviewFeatureUseCase);
|
|
27
|
+
const reviewResult = await reviewUseCase.execute(featureId, repoPath);
|
|
28
|
+
if (!reviewResult.success) {
|
|
29
|
+
throw new Error(reviewResult.reason);
|
|
30
|
+
}
|
|
31
|
+
return prdReviewWizard(reviewResult.questions);
|
|
32
|
+
}
|
|
33
|
+
if (phase === 'plan') {
|
|
34
|
+
const result = await planReviewWizard();
|
|
35
|
+
return { action: result.action, feedback: result.feedback };
|
|
36
|
+
}
|
|
37
|
+
if (phase === 'merge') {
|
|
38
|
+
const result = await mergeReviewWizard();
|
|
39
|
+
return { action: result.action, feedback: result.feedback };
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`Unknown approval phase: ${phase}`);
|
|
42
|
+
}
|
|
43
|
+
function phaseNextStep(phase) {
|
|
44
|
+
switch (phase) {
|
|
45
|
+
case 'requirements':
|
|
46
|
+
return 'research';
|
|
47
|
+
case 'plan':
|
|
48
|
+
return 'implementation';
|
|
49
|
+
case 'merge':
|
|
50
|
+
return 'merge';
|
|
51
|
+
default:
|
|
52
|
+
return 'next step';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
14
55
|
export function createReviewCommand() {
|
|
15
56
|
return new Command('review')
|
|
16
|
-
.description('
|
|
57
|
+
.description('Interactive review of a feature waiting for approval')
|
|
17
58
|
.argument('[id]', 'Feature ID (auto-resolves if omitted)')
|
|
18
59
|
.action(async (featureId) => {
|
|
19
60
|
try {
|
|
@@ -26,19 +67,53 @@ export function createReviewCommand() {
|
|
|
26
67
|
featureRepo,
|
|
27
68
|
runRepo,
|
|
28
69
|
});
|
|
29
|
-
const phase =
|
|
70
|
+
const phase = parsePhase(run.result);
|
|
30
71
|
messages.newline();
|
|
31
|
-
messages.info(`
|
|
32
|
-
console.log(` ${colors.muted('ID:')} ${feature.id.slice(0, 8)}`);
|
|
72
|
+
messages.info(`Reviewing: ${colors.accent(feature.name)}`);
|
|
33
73
|
console.log(` ${colors.muted('Phase:')} ${colors.warning(phase)}`);
|
|
34
74
|
console.log(` ${colors.muted('Branch:')} ${colors.accent(feature.branch)}`);
|
|
35
|
-
if (feature.specPath) {
|
|
36
|
-
console.log(` ${colors.muted('Specs:')} ${feature.specPath}`);
|
|
37
|
-
}
|
|
38
|
-
messages.newline();
|
|
39
|
-
console.log(` ${colors.muted('To approve:')} shep feat approve ${feature.id.slice(0, 8)}`);
|
|
40
|
-
console.log(` ${colors.muted('To reject:')} shep feat reject ${feature.id.slice(0, 8)}`);
|
|
41
75
|
messages.newline();
|
|
76
|
+
const wizardResult = await runPhaseWizard(phase, feature.id, repoPath);
|
|
77
|
+
if (wizardResult.action === 'approve') {
|
|
78
|
+
const approveUseCase = container.resolve(ApproveAgentRunUseCase);
|
|
79
|
+
const payload = wizardResult.changedSelections && wizardResult.changedSelections.length > 0
|
|
80
|
+
? { approved: true, changedSelections: wizardResult.changedSelections }
|
|
81
|
+
: undefined;
|
|
82
|
+
const approveResult = await approveUseCase.execute(run.id, payload);
|
|
83
|
+
if (approveResult.approved) {
|
|
84
|
+
messages.newline();
|
|
85
|
+
messages.success(`Approved: ${feature.name}`);
|
|
86
|
+
if (wizardResult.changedSelections && wizardResult.changedSelections.length > 0) {
|
|
87
|
+
console.log(` ${colors.muted('Changes:')} ${wizardResult.changedSelections.length} selection(s) updated`);
|
|
88
|
+
}
|
|
89
|
+
if (wizardResult.feedback) {
|
|
90
|
+
console.log(` ${colors.muted('Comment:')} ${wizardResult.feedback}`);
|
|
91
|
+
}
|
|
92
|
+
console.log(` ${colors.muted('Agent:')} proceeding to ${phaseNextStep(phase)}`);
|
|
93
|
+
messages.newline();
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
throw new Error(approveResult.reason);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const rejectUseCase = container.resolve(RejectAgentRunUseCase);
|
|
101
|
+
const rejectResult = await rejectUseCase.execute(run.id, wizardResult.feedback);
|
|
102
|
+
if (rejectResult.rejected) {
|
|
103
|
+
messages.newline();
|
|
104
|
+
messages.warning(`Rejected: ${feature.name}`);
|
|
105
|
+
console.log(` ${colors.muted('Feedback:')} ${wizardResult.feedback}`);
|
|
106
|
+
console.log(` ${colors.muted('Iteration:')} ${rejectResult.iteration}`);
|
|
107
|
+
if (rejectResult.iterationWarning) {
|
|
108
|
+
messages.warning('Warning: 5+ iterations. Consider refining the prompt instead.');
|
|
109
|
+
}
|
|
110
|
+
console.log(` ${colors.muted('Agent:')} re-running ${phase}`);
|
|
111
|
+
messages.newline();
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
throw new Error(rejectResult.reason);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
42
117
|
}
|
|
43
118
|
catch (error) {
|
|
44
119
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"show.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/show.command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"show.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/show.command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+VpC,wBAAgB,iBAAiB,IAAI,OAAO,CAyJ3C"}
|
|
@@ -6,7 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Usage: shep feat show <id>
|
|
8
8
|
*/
|
|
9
|
+
import { readFileSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
9
11
|
import { Command } from 'commander';
|
|
12
|
+
import yaml from 'js-yaml';
|
|
10
13
|
import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
|
|
11
14
|
import { ShowFeatureUseCase } from '../../../../../packages/core/src/application/use-cases/features/show-feature.use-case.js';
|
|
12
15
|
import { colors, symbols, messages, renderDetailView } from '../../ui/index.js';
|
|
@@ -94,6 +97,23 @@ function isProcessAlive(pid) {
|
|
|
94
97
|
return false;
|
|
95
98
|
}
|
|
96
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Load rejection feedback entries from spec.yaml (best-effort).
|
|
102
|
+
*/
|
|
103
|
+
function loadRejectionFeedback(specPath) {
|
|
104
|
+
if (!specPath)
|
|
105
|
+
return [];
|
|
106
|
+
try {
|
|
107
|
+
const content = readFileSync(join(specPath, 'spec.yaml'), 'utf-8');
|
|
108
|
+
const spec = yaml.load(content);
|
|
109
|
+
return Array.isArray(spec?.rejectionFeedback)
|
|
110
|
+
? spec.rejectionFeedback
|
|
111
|
+
: [];
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
}
|
|
97
117
|
/**
|
|
98
118
|
* Group timings by agentRunId, preserving order.
|
|
99
119
|
*/
|
|
@@ -117,7 +137,7 @@ function renderNodeTiming(t, isLast, isWaiting, isRunTerminal, run, maxDurationM
|
|
|
117
137
|
const lines = [];
|
|
118
138
|
const isSubPhase = t.phase.includes(':');
|
|
119
139
|
const label = isSubPhase
|
|
120
|
-
? ` \u21b3 ${t.phase.split(':')[1]}`.padEnd(16)
|
|
140
|
+
? ` \u21b3 rev ${t.phase.split(':')[1]}`.padEnd(16)
|
|
121
141
|
: (NODE_TO_PHASE[t.phase] ?? t.phase).padEnd(16);
|
|
122
142
|
// Completed phase - green bar with duration
|
|
123
143
|
if (t.completedAt && t.durationMs != null) {
|
|
@@ -185,7 +205,7 @@ function renderNodeTiming(t, isLast, isWaiting, isRunTerminal, run, maxDurationM
|
|
|
185
205
|
/**
|
|
186
206
|
* Render the full phase timing section, grouped by agent run with lifecycle events.
|
|
187
207
|
*/
|
|
188
|
-
function renderPhaseTimings(timings, currentRun) {
|
|
208
|
+
function renderPhaseTimings(timings, currentRun, rejections = []) {
|
|
189
209
|
const groups = groupTimingsByRun(timings);
|
|
190
210
|
const multiRun = groups.length > 1;
|
|
191
211
|
// Compute max duration across ALL timings for consistent bar scaling
|
|
@@ -220,12 +240,26 @@ function renderPhaseTimings(timings, currentRun) {
|
|
|
220
240
|
currentRun?.status === 'failed' ||
|
|
221
241
|
currentRun?.status === 'cancelled';
|
|
222
242
|
const isWaiting = isCurrentRun && currentRun?.status === 'waiting_approval';
|
|
243
|
+
let resumedIdx = 0;
|
|
223
244
|
for (const [idx, t] of group.timings.entries()) {
|
|
224
245
|
const isLast = isLastGroup && idx === group.timings.length - 1;
|
|
225
246
|
// Lifecycle event - render as a marker line
|
|
226
247
|
if (isLifecycleEvent(t.phase)) {
|
|
227
248
|
const event = LIFECYCLE_EVENTS[t.phase];
|
|
228
249
|
if (event) {
|
|
250
|
+
// For resumed events, show rejection feedback if available
|
|
251
|
+
if (t.phase === 'run:resumed' && rejections.length > 0) {
|
|
252
|
+
const feedback = rejections[resumedIdx];
|
|
253
|
+
resumedIdx++;
|
|
254
|
+
if (feedback?.message) {
|
|
255
|
+
const maxLen = 60;
|
|
256
|
+
const msg = feedback.message.length > maxLen
|
|
257
|
+
? `${feedback.message.slice(0, maxLen)}…`
|
|
258
|
+
: feedback.message;
|
|
259
|
+
lines.push(` ${colors.error(`↩ rejected: "${msg}"`)}`);
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
229
263
|
const sym = t.phase === 'run:completed'
|
|
230
264
|
? symbols.success
|
|
231
265
|
: t.phase === 'run:failed' || t.phase === 'run:crashed'
|
|
@@ -292,7 +326,8 @@ export function createShowCommand() {
|
|
|
292
326
|
});
|
|
293
327
|
}
|
|
294
328
|
if (timings.length > 0) {
|
|
295
|
-
const
|
|
329
|
+
const rejections = loadRejectionFeedback(feature.specPath);
|
|
330
|
+
const lines = renderPhaseTimings(timings, run, rejections);
|
|
296
331
|
textBlocks.push({ title: 'Phase Timing', content: lines.join('\n') });
|
|
297
332
|
}
|
|
298
333
|
if (run?.status === 'waiting_approval') {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Review Question Prompt Configuration
|
|
3
|
+
*
|
|
4
|
+
* Creates an @inquirer/select config for reviewing a single open question
|
|
5
|
+
* from the PRD spec.yaml. Users select from the available options.
|
|
6
|
+
*/
|
|
7
|
+
import type { QuestionOption } from '../../../../packages/core/src/domain/generated/output.js';
|
|
8
|
+
/**
|
|
9
|
+
* Creates the @inquirer/select configuration for a single open question.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createQuestionSelectConfig(question: string, options: QuestionOption[], currentAnswer?: string): {
|
|
12
|
+
message: string;
|
|
13
|
+
choices: {
|
|
14
|
+
name: string;
|
|
15
|
+
value: string;
|
|
16
|
+
description: string;
|
|
17
|
+
}[];
|
|
18
|
+
default: string | undefined;
|
|
19
|
+
theme: {
|
|
20
|
+
readonly prefix: {
|
|
21
|
+
readonly idle: string;
|
|
22
|
+
readonly done: string;
|
|
23
|
+
};
|
|
24
|
+
readonly style: {
|
|
25
|
+
readonly highlight: import("picocolors/types.js").Formatter;
|
|
26
|
+
readonly answer: import("picocolors/types.js").Formatter;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=prd-review-question.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prd-review-question.prompt.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/tui/prompts/prd-review-question.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EAAE,EACzB,aAAa,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;EAcvB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Review Question Prompt Configuration
|
|
3
|
+
*
|
|
4
|
+
* Creates an @inquirer/select config for reviewing a single open question
|
|
5
|
+
* from the PRD spec.yaml. Users select from the available options.
|
|
6
|
+
*/
|
|
7
|
+
import { shepTheme } from '../themes/shep.theme.js';
|
|
8
|
+
/**
|
|
9
|
+
* Creates the @inquirer/select configuration for a single open question.
|
|
10
|
+
*/
|
|
11
|
+
export function createQuestionSelectConfig(question, options, currentAnswer) {
|
|
12
|
+
const choices = options.map((opt) => ({
|
|
13
|
+
name: opt.option,
|
|
14
|
+
value: opt.option,
|
|
15
|
+
description: opt.description,
|
|
16
|
+
}));
|
|
17
|
+
return {
|
|
18
|
+
message: question,
|
|
19
|
+
choices,
|
|
20
|
+
default: currentAnswer,
|
|
21
|
+
theme: shepTheme,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Review Summary Prompt Configuration
|
|
3
|
+
*
|
|
4
|
+
* Creates an @inquirer/select config for the final approve/reject
|
|
5
|
+
* action after reviewing open questions.
|
|
6
|
+
*/
|
|
7
|
+
export type ReviewAction = 'approve' | 'reject';
|
|
8
|
+
/**
|
|
9
|
+
* Creates the @inquirer/select configuration for the review action prompt.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createReviewActionConfig(changeCount: number): {
|
|
12
|
+
message: string;
|
|
13
|
+
choices: {
|
|
14
|
+
name: string;
|
|
15
|
+
value: ReviewAction;
|
|
16
|
+
description: string;
|
|
17
|
+
}[];
|
|
18
|
+
theme: {
|
|
19
|
+
readonly prefix: {
|
|
20
|
+
readonly idle: string;
|
|
21
|
+
readonly done: string;
|
|
22
|
+
};
|
|
23
|
+
readonly style: {
|
|
24
|
+
readonly highlight: import("picocolors/types.js").Formatter;
|
|
25
|
+
readonly answer: import("picocolors/types.js").Formatter;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=prd-review-summary.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prd-review-summary.prompt.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/tui/prompts/prd-review-summary.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM;;;;eAShC,YAAY;;;;;;;;;;;;;EAWvC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Review Summary Prompt Configuration
|
|
3
|
+
*
|
|
4
|
+
* Creates an @inquirer/select config for the final approve/reject
|
|
5
|
+
* action after reviewing open questions.
|
|
6
|
+
*/
|
|
7
|
+
import { shepTheme } from '../themes/shep.theme.js';
|
|
8
|
+
/**
|
|
9
|
+
* Creates the @inquirer/select configuration for the review action prompt.
|
|
10
|
+
*/
|
|
11
|
+
export function createReviewActionConfig(changeCount) {
|
|
12
|
+
const changeLabel = changeCount > 0 ? ` (${changeCount} change${changeCount !== 1 ? 's' : ''})` : '';
|
|
13
|
+
return {
|
|
14
|
+
message: `Review complete${changeLabel}. What would you like to do?`,
|
|
15
|
+
choices: [
|
|
16
|
+
{
|
|
17
|
+
name: 'Approve and continue',
|
|
18
|
+
value: 'approve',
|
|
19
|
+
description: 'Accept the requirements and proceed to research',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'Reject and iterate',
|
|
23
|
+
value: 'reject',
|
|
24
|
+
description: 'Provide feedback and re-run requirements',
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
theme: shepTheme,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Placeholder TUI wizard for the merge approval phase.
|
|
5
|
+
* Shows approve/reject action with optional comment.
|
|
6
|
+
*/
|
|
7
|
+
export type MergeReviewAction = 'approve' | 'reject';
|
|
8
|
+
export interface MergeReviewWizardResult {
|
|
9
|
+
action: MergeReviewAction;
|
|
10
|
+
feedback?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function mergeReviewWizard(): Promise<MergeReviewWizardResult>;
|
|
13
|
+
//# sourceMappingURL=merge-review.wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-review.wizard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/tui/wizards/merge-review.wizard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAkC1E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Placeholder TUI wizard for the merge approval phase.
|
|
5
|
+
* Shows approve/reject action with optional comment.
|
|
6
|
+
*/
|
|
7
|
+
import { select, input } from '@inquirer/prompts';
|
|
8
|
+
import { shepTheme } from '../themes/shep.theme.js';
|
|
9
|
+
export async function mergeReviewWizard() {
|
|
10
|
+
const action = await select({
|
|
11
|
+
message: 'Review the merge. What would you like to do?',
|
|
12
|
+
choices: [
|
|
13
|
+
{
|
|
14
|
+
name: 'Approve and merge',
|
|
15
|
+
value: 'approve',
|
|
16
|
+
description: 'Accept the changes and merge the branch',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'Reject',
|
|
20
|
+
value: 'reject',
|
|
21
|
+
description: 'Provide feedback — implementation will iterate',
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
theme: shepTheme,
|
|
25
|
+
});
|
|
26
|
+
let feedback;
|
|
27
|
+
if (action === 'reject') {
|
|
28
|
+
feedback = await input({
|
|
29
|
+
message: 'What needs to change before merging?',
|
|
30
|
+
theme: shepTheme,
|
|
31
|
+
validate: (value) => value.trim().length > 0 || 'Feedback is required for rejection',
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
feedback = await input({
|
|
36
|
+
message: 'Any comments? (optional, press Enter to skip)',
|
|
37
|
+
theme: shepTheme,
|
|
38
|
+
});
|
|
39
|
+
if (feedback?.trim().length === 0)
|
|
40
|
+
feedback = undefined;
|
|
41
|
+
}
|
|
42
|
+
return { action, feedback };
|
|
43
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Placeholder TUI wizard for the plan approval phase.
|
|
5
|
+
* Shows approve/reject action with optional comment.
|
|
6
|
+
*/
|
|
7
|
+
export type PlanReviewAction = 'approve' | 'reject';
|
|
8
|
+
export interface PlanReviewWizardResult {
|
|
9
|
+
action: PlanReviewAction;
|
|
10
|
+
feedback?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function planReviewWizard(): Promise<PlanReviewWizardResult>;
|
|
13
|
+
//# sourceMappingURL=plan-review.wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-review.wizard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/tui/wizards/plan-review.wizard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAkCxE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Placeholder TUI wizard for the plan approval phase.
|
|
5
|
+
* Shows approve/reject action with optional comment.
|
|
6
|
+
*/
|
|
7
|
+
import { select, input } from '@inquirer/prompts';
|
|
8
|
+
import { shepTheme } from '../themes/shep.theme.js';
|
|
9
|
+
export async function planReviewWizard() {
|
|
10
|
+
const action = await select({
|
|
11
|
+
message: 'Review the implementation plan. What would you like to do?',
|
|
12
|
+
choices: [
|
|
13
|
+
{
|
|
14
|
+
name: 'Approve and continue',
|
|
15
|
+
value: 'approve',
|
|
16
|
+
description: 'Accept the plan and proceed to implementation',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'Reject and iterate',
|
|
20
|
+
value: 'reject',
|
|
21
|
+
description: 'Provide feedback and re-run planning',
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
theme: shepTheme,
|
|
25
|
+
});
|
|
26
|
+
let feedback;
|
|
27
|
+
if (action === 'reject') {
|
|
28
|
+
feedback = await input({
|
|
29
|
+
message: 'What needs to change in the plan?',
|
|
30
|
+
theme: shepTheme,
|
|
31
|
+
validate: (value) => value.trim().length > 0 || 'Feedback is required for rejection',
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
feedback = await input({
|
|
36
|
+
message: 'Any comments? (optional, press Enter to skip)',
|
|
37
|
+
theme: shepTheme,
|
|
38
|
+
});
|
|
39
|
+
if (feedback?.trim().length === 0)
|
|
40
|
+
feedback = undefined;
|
|
41
|
+
}
|
|
42
|
+
return { action, feedback };
|
|
43
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Interactive TUI wizard that walks users through open questions
|
|
5
|
+
* from a PRD spec, lets them change selections, and approve or
|
|
6
|
+
* reject with feedback.
|
|
7
|
+
*/
|
|
8
|
+
import { type ReviewAction } from '../prompts/prd-review-summary.prompt.js';
|
|
9
|
+
import type { OpenQuestion } from '../../../../packages/core/src/application/use-cases/agents/review-feature.use-case.js';
|
|
10
|
+
import type { QuestionSelectionChange } from '../../../../packages/core/src/domain/generated/output.js';
|
|
11
|
+
export interface PrdReviewWizardResult {
|
|
12
|
+
action: ReviewAction;
|
|
13
|
+
changedSelections: QuestionSelectionChange[];
|
|
14
|
+
feedback?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Runs the interactive PRD review wizard.
|
|
18
|
+
*
|
|
19
|
+
* Steps:
|
|
20
|
+
* 1. For each open question, show select prompt with current options
|
|
21
|
+
* 2. Track which selections changed from the original
|
|
22
|
+
* 3. Show approve/reject action prompt
|
|
23
|
+
* 4. If reject, prompt for feedback
|
|
24
|
+
*/
|
|
25
|
+
export declare function prdReviewWizard(questions: OpenQuestion[]): Promise<PrdReviewWizardResult>;
|
|
26
|
+
//# sourceMappingURL=prd-review.wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prd-review.wizard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/tui/wizards/prd-review.wizard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAC;AAC9F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAG5E,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA4B/F"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Interactive TUI wizard that walks users through open questions
|
|
5
|
+
* from a PRD spec, lets them change selections, and approve or
|
|
6
|
+
* reject with feedback.
|
|
7
|
+
*/
|
|
8
|
+
import { select, input } from '@inquirer/prompts';
|
|
9
|
+
import { createQuestionSelectConfig } from '../prompts/prd-review-question.prompt.js';
|
|
10
|
+
import { createReviewActionConfig, } from '../prompts/prd-review-summary.prompt.js';
|
|
11
|
+
import { shepTheme } from '../themes/shep.theme.js';
|
|
12
|
+
/**
|
|
13
|
+
* Runs the interactive PRD review wizard.
|
|
14
|
+
*
|
|
15
|
+
* Steps:
|
|
16
|
+
* 1. For each open question, show select prompt with current options
|
|
17
|
+
* 2. Track which selections changed from the original
|
|
18
|
+
* 3. Show approve/reject action prompt
|
|
19
|
+
* 4. If reject, prompt for feedback
|
|
20
|
+
*/
|
|
21
|
+
export async function prdReviewWizard(questions) {
|
|
22
|
+
const changedSelections = [];
|
|
23
|
+
for (const q of questions) {
|
|
24
|
+
const selected = await select(createQuestionSelectConfig(q.question, q.options, q.selectedOption));
|
|
25
|
+
if (selected !== q.selectedOption) {
|
|
26
|
+
changedSelections.push({
|
|
27
|
+
questionId: q.question,
|
|
28
|
+
selectedOption: selected,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const action = await select(createReviewActionConfig(changedSelections.length));
|
|
33
|
+
let feedback;
|
|
34
|
+
if (action === 'reject') {
|
|
35
|
+
feedback = await input({
|
|
36
|
+
message: 'What needs to change? (feedback for re-iteration)',
|
|
37
|
+
theme: shepTheme,
|
|
38
|
+
validate: (value) => value.trim().length > 0 || 'Feedback is required for rejection',
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return { action, changedSelections, feedback };
|
|
42
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/approve-feature.ts"],"names":[],"mappings":"AAMA,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6BhD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { resolve } from '../../lib/server-container.js';
|
|
3
|
+
export async function approveFeature(featureId) {
|
|
4
|
+
if (!featureId.trim()) {
|
|
5
|
+
return { approved: false, error: 'Feature id is required' };
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const featureRepo = resolve('IFeatureRepository');
|
|
9
|
+
const feature = await featureRepo.findById(featureId);
|
|
10
|
+
if (!feature) {
|
|
11
|
+
return { approved: false, error: 'Feature not found' };
|
|
12
|
+
}
|
|
13
|
+
if (!feature.agentRunId) {
|
|
14
|
+
return { approved: false, error: 'Feature has no agent run' };
|
|
15
|
+
}
|
|
16
|
+
const approveUseCase = resolve('ApproveAgentRunUseCase');
|
|
17
|
+
const result = await approveUseCase.execute(feature.agentRunId);
|
|
18
|
+
if (!result.approved) {
|
|
19
|
+
return { approved: false, error: result.reason };
|
|
20
|
+
}
|
|
21
|
+
return { approved: true };
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const message = error instanceof Error ? error.message : 'Failed to approve feature';
|
|
25
|
+
return { approved: false, error: message };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Feature } from '../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
interface Attachment {
|
|
3
|
+
path: string;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
interface CreateFeatureInput {
|
|
7
|
+
name: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
repositoryPath: string;
|
|
10
|
+
attachments?: Attachment[];
|
|
11
|
+
approvalGates?: {
|
|
12
|
+
allowPrd: boolean;
|
|
13
|
+
allowPlan: boolean;
|
|
14
|
+
allowMerge?: boolean;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare function createFeature(input: CreateFeatureInput): Promise<{
|
|
18
|
+
feature?: Feature;
|
|
19
|
+
error?: string;
|
|
20
|
+
}>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=create-feature.d.ts.map
|