@shepai/cli 1.164.1 → 1.165.0-pr513.2621e83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apis/json-schema/Feature.yaml +17 -5
- package/apis/json-schema/FeatureMode.yaml +8 -0
- package/apis/json-schema/SdlcLifecycle.yaml +1 -0
- package/apis/json-schema/WorkflowConfig.yaml +10 -5
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +2 -2
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +4 -3
- package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +2 -2
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +2 -2
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +3 -2
- package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.js +2 -2
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +18 -7
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +3 -2
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.js +13 -0
- package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts +40 -0
- package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.js +125 -0
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -2
- package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +5 -3
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +2 -1
- package/dist/packages/core/src/domain/generated/output.d.ts +22 -4
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +7 -0
- package/dist/packages/core/src/domain/lifecycle-gates.d.ts +21 -6
- package/dist/packages/core/src/domain/lifecycle-gates.d.ts.map +1 -1
- package/dist/packages/core/src/domain/lifecycle-gates.js +25 -6
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +5 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +10 -4
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +2 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +7 -2
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts +19 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.js +46 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts +17 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.js +37 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.js +17 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +5 -3
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts +362 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.js +72 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +20 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +68 -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-process.service.d.ts +2 -2
- 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 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +2 -2
- 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 +19 -8
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.js +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts +18 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.js +52 -0
- 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 +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts +24 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.js +38 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts +31 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.js +240 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts +21 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.js +134 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +4 -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 +17 -0
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +7 -4
- package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts +12 -0
- package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/feat/feedback.command.js +64 -0
- package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/index.js +5 -1
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +18 -5
- package/dist/src/presentation/cli/commands/feat/promote.command.d.ts +13 -0
- package/dist/src/presentation/cli/commands/feat/promote.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/feat/promote.command.js +41 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts +3 -2
- package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/create-feature.js +3 -3
- package/dist/src/presentation/web/app/actions/discard-exploration.d.ts +9 -0
- package/dist/src/presentation/web/app/actions/discard-exploration.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/discard-exploration.js +29 -0
- package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts +2 -1
- package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +2 -1
- package/dist/src/presentation/web/app/actions/promote-exploration.d.ts +11 -0
- package/dist/src/presentation/web/app/actions/promote-exploration.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/promote-exploration.js +21 -0
- package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts +12 -0
- package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/submit-exploration-feedback.js +40 -0
- 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 +1 -0
- package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-feature-node-data.js +4 -2
- package/dist/src/presentation/web/app/build-graph-nodes.js +4 -2
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +3 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +65 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +3 -2
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +15 -11
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +2 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts +8 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.js +33 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.js +33 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +6 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +16 -4
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts +11 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.js +34 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts +16 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.js +70 -0
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +2 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +6 -2
- 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-state-config.js +12 -0
- 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 +7 -2
- package/dist/src/presentation/web/components/common/repo-group/repo-group.d.ts +3 -1
- package/dist/src/presentation/web/components/common/repo-group/repo-group.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repo-group/repo-group.js +6 -3
- package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts +1 -0
- package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.js +10 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +6 -6
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +3 -3
- 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 +4 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +3 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +2 -0
- package/dist/src/presentation/web/components/ui/toggle-group.d.ts +10 -0
- package/dist/src/presentation/web/components/ui/toggle-group.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/toggle-group.js +22 -0
- package/dist/src/presentation/web/components/ui/toggle.d.ts +10 -0
- package/dist/src/presentation/web/components/ui/toggle.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/toggle.js +26 -0
- package/dist/translations/ar/cli.json +24 -0
- package/dist/translations/ar/web.json +6 -2
- package/dist/translations/de/cli.json +24 -0
- package/dist/translations/de/web.json +6 -2
- package/dist/translations/en/cli.json +24 -0
- package/dist/translations/en/web.json +6 -2
- package/dist/translations/es/cli.json +24 -0
- package/dist/translations/es/web.json +6 -2
- package/dist/translations/fr/cli.json +24 -0
- package/dist/translations/fr/web.json +6 -2
- package/dist/translations/he/cli.json +24 -0
- package/dist/translations/he/web.json +6 -2
- package/dist/translations/pt/cli.json +24 -0
- package/dist/translations/pt/web.json +6 -2
- package/dist/translations/ru/cli.json +24 -0
- package/dist/translations/ru/web.json +6 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +119 -74
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +119 -74
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +119 -74
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +119 -74
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- 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/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +3 -3
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2d0c3840._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2d0c3840._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4ed9b909._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__58a5b819._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__58a5b819._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__67a193c8._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__67a193c8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__754fb18e._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__754fb18e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__96ba046b._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__96ba046b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c1262d08._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dffa13c5._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dffa13c5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
- package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0727935d._.js +1 -1
- package/web/.next/server/chunks/ssr/_0727935d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0dc06d07._.js +1 -1
- package/web/.next/server/chunks/ssr/_0dc06d07._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_423abf07._.js → _11cefd16._.js} +2 -2
- package/web/.next/server/chunks/ssr/_11cefd16._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_12c98a3d._.js +3 -0
- package/web/.next/server/chunks/ssr/_12c98a3d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
- package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1e08a336._.js +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_43ba79e7._.js +3 -0
- package/web/.next/server/chunks/ssr/_43ba79e7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_5119a3df._.js +1 -1
- package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_5eb460b1._.js +3 -0
- package/web/.next/server/chunks/ssr/_5eb460b1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_3694ac1d._.js → _75f0b0fe._.js} +2 -2
- package/web/.next/server/chunks/ssr/_75f0b0fe._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_997b560b._.js +3 -0
- package/web/.next/server/chunks/ssr/_997b560b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_acc5e43e._.js +9 -0
- package/web/.next/server/chunks/ssr/_acc5e43e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
- package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
- package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_97d6bed3._.js → _f4086cb6._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_97d6bed3._.js.map → _f4086cb6._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +303 -195
- package/web/.next/static/chunks/{d5366257d6b9f855.js → 2a9af061f4fbe7f5.js} +1 -1
- package/web/.next/static/chunks/2ceebcc839ee0d4b.js +1 -0
- package/web/.next/static/chunks/3425e7d1b8c44fcf.js +5 -0
- package/web/.next/static/chunks/387b61bf5fe98489.js +1 -0
- package/web/.next/static/chunks/3ffd3d331ce9991e.js +1 -0
- package/web/.next/static/chunks/{2bf4ef44d86ffc3b.js → 408f0fae9aebd4ce.js} +3 -3
- package/web/.next/static/chunks/7b2ba627f78d1730.js +1 -0
- package/web/.next/static/chunks/84ecdec18d323210.css +1 -0
- package/web/.next/static/chunks/{779b5c49587b074e.js → 884fceb3e6a67215.js} +1 -1
- package/web/.next/static/chunks/{abffc5c232738d87.js → 8a0b6b5e00501f7d.js} +1 -1
- package/web/.next/static/chunks/8b0a9cb5109fe899.js +1 -0
- package/web/.next/static/chunks/{6590ee22b55e119c.js → 9aa8486d10ba7131.js} +1 -1
- package/web/.next/static/chunks/a32e0107a4ad74d3.js +1 -0
- package/web/.next/static/chunks/{ba1873d442ce6a95.js → b1335961d331f89d.js} +1 -1
- package/web/.next/static/chunks/{dbd876611e25a77a.js → c1d5987a3df2faa3.js} +2 -2
- package/web/.next/static/chunks/ec8409b3fd25f477.js +1 -0
- package/web/.next/static/chunks/{2afb3ff30c02d222.js → edb42f3dc7a611e5.js} +1 -1
- package/web/.next/static/chunks/f10474885c41b290.js +7 -0
- package/web/.next/static/chunks/fbbd01277183d8f5.js +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_3694ac1d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_423abf07._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_4d49a312._.js +0 -3
- package/web/.next/server/chunks/ssr/_4d49a312._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_9215e9ec._.js +0 -3
- package/web/.next/server/chunks/ssr/_9215e9ec._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_c45aee16._.js +0 -3
- package/web/.next/server/chunks/ssr/_c45aee16._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_cc654b75._.js +0 -9
- package/web/.next/server/chunks/ssr/_cc654b75._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js.map +0 -1
- package/web/.next/static/chunks/28ae5046faef6cec.js +0 -1
- package/web/.next/static/chunks/57ab723edeb11139.js +0 -5
- package/web/.next/static/chunks/648c64fc71830213.js +0 -1
- package/web/.next/static/chunks/87aab386fe53c79a.js +0 -1
- package/web/.next/static/chunks/89846d73600950d1.js +0 -1
- package/web/.next/static/chunks/966eb2688300b7f5.js +0 -1
- package/web/.next/static/chunks/9ddf7523e76e17a5.js +0 -7
- package/web/.next/static/chunks/9f8caef46056054a.js +0 -1
- package/web/.next/static/chunks/d45bab7ae6805b07.js +0 -1
- package/web/.next/static/chunks/eeadf13c0ea6cbe0.css +0 -1
- /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_buildManifest.js +0 -0
- /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_ssgManifest.js +0 -0
package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js
CHANGED
|
@@ -9,6 +9,7 @@ export const lifecycleDisplayLabels = {
|
|
|
9
9
|
awaitingUpstream: 'AWAITING UPSTREAM',
|
|
10
10
|
deploy: 'DEPLOY & QA',
|
|
11
11
|
maintain: 'COMPLETED',
|
|
12
|
+
exploring: 'EXPLORING',
|
|
12
13
|
};
|
|
13
14
|
/** Inline-start border color for each lifecycle phase. */
|
|
14
15
|
export const lifecycleBorderColors = {
|
|
@@ -20,6 +21,7 @@ export const lifecycleBorderColors = {
|
|
|
20
21
|
awaitingUpstream: 'border-s-amber-500',
|
|
21
22
|
deploy: 'border-s-emerald-500',
|
|
22
23
|
maintain: 'border-s-gray-400',
|
|
24
|
+
exploring: 'border-s-amber-400',
|
|
23
25
|
};
|
|
24
26
|
/** Accent bar background color for each lifecycle phase. */
|
|
25
27
|
export const lifecycleAccentColors = {
|
|
@@ -31,6 +33,7 @@ export const lifecycleAccentColors = {
|
|
|
31
33
|
awaitingUpstream: 'bg-amber-500',
|
|
32
34
|
deploy: 'bg-emerald-500',
|
|
33
35
|
maintain: 'bg-gray-400',
|
|
36
|
+
exploring: 'bg-amber-400',
|
|
34
37
|
};
|
|
35
38
|
/** Phase badge: short letter, color classes, and user-friendly tooltip. */
|
|
36
39
|
export const lifecyclePhaseBadge = {
|
|
@@ -98,6 +101,14 @@ export const lifecyclePhaseBadge = {
|
|
|
98
101
|
tooltip: 'Completed',
|
|
99
102
|
description: 'All done — the feature has been merged and delivered successfully.',
|
|
100
103
|
},
|
|
104
|
+
exploring: {
|
|
105
|
+
letter: 'E',
|
|
106
|
+
bg: 'bg-amber-100 dark:bg-amber-900/40',
|
|
107
|
+
text: 'text-amber-600 dark:text-amber-300',
|
|
108
|
+
dot: 'bg-amber-400',
|
|
109
|
+
tooltip: 'Exploring',
|
|
110
|
+
description: 'Prototyping — the AI is generating a quick prototype. Review it and provide feedback to iterate.',
|
|
111
|
+
},
|
|
101
112
|
};
|
|
102
113
|
/** State-based inline-start border overrides (takes precedence over lifecycle). */
|
|
103
114
|
export const stateBorderColors = {
|
|
@@ -121,6 +132,7 @@ export const lifecycleRunningVerbs = {
|
|
|
121
132
|
awaitingUpstream: 'Awaiting upstream',
|
|
122
133
|
deploy: 'Deploying',
|
|
123
134
|
maintain: 'Maintaining',
|
|
135
|
+
exploring: 'Prototyping',
|
|
124
136
|
};
|
|
125
137
|
export const featureNodeStateConfig = {
|
|
126
138
|
creating: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAmDnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA8nBA"}
|
|
@@ -4,7 +4,7 @@ import { useState } from 'react';
|
|
|
4
4
|
import { useTranslation } from 'react-i18next';
|
|
5
5
|
import { useRouter } from 'next/navigation';
|
|
6
6
|
import { Handle, Position } from '@xyflow/react';
|
|
7
|
-
import { Plus, Trash2, Zap, ClipboardList, Loader2, Globe, RotateCcw, Play, Square, Eye, Archive, ArchiveRestore, MessageSquare, } from 'lucide-react';
|
|
7
|
+
import { Plus, Trash2, Zap, ClipboardList, FlaskConical, Loader2, Globe, RotateCcw, Play, Square, Eye, Archive, ArchiveRestore, MessageSquare, } from 'lucide-react';
|
|
8
8
|
import { cn } from '../../../lib/utils.js';
|
|
9
9
|
import { ActionButton } from '../../common/action-button/action-button.js';
|
|
10
10
|
import { Button } from '../../ui/button.js';
|
|
@@ -16,6 +16,7 @@ import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
|
|
|
16
16
|
import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '../../ui/alert-dialog.js';
|
|
17
17
|
import { DeleteFeatureDialog } from '../../common/delete-feature-dialog/index.js';
|
|
18
18
|
import { featureNodeStateConfig, lifecycleRunningVerbs, lifecyclePhaseBadge, } from './feature-node-state-config.js';
|
|
19
|
+
import { FeatureMode } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
19
20
|
import { getAgentTypeIcon } from './agent-type-icons.js';
|
|
20
21
|
import { FeatureSessionsDropdown } from './feature-sessions-dropdown.js';
|
|
21
22
|
function AgentIcon({ agentType, className }) {
|
|
@@ -111,7 +112,11 @@ export function FeatureNode({ data, selected, }) {
|
|
|
111
112
|
selected &&
|
|
112
113
|
'border-e-rose-400 border-t-rose-400 border-b-rose-400 dark:border-e-amber-500 dark:border-t-amber-500 dark:border-b-amber-500', selected &&
|
|
113
114
|
data.state !== 'action-required' &&
|
|
114
|
-
'border-blue-400 dark:border-amber-500/60', data.state === 'deleting' && 'opacity-60', data.state === 'archived' && 'opacity-50'), children: [data.state !== 'creating' ? (_jsx("div", { className: "absolute end-4 top-3", children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { "data-testid": "feature-node-phase-badge", className: "flex items-center gap-1.5", children: [_jsx("span", { className: "text-muted-foreground text-[10px]", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("span", { className: cn('h-1.5 w-1.5 -translate-y-px rounded-full', lifecyclePhaseBadge[data.lifecycle].dot) })] }) }), _jsxs(TooltipContent, { side: "right", className: "max-w-56", children: [_jsx("p", { className: "font-semibold", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("p", { className: "mt-1 text-xs leading-relaxed text-neutral-500", children: lifecyclePhaseBadge[data.lifecycle].description })] })] }) }) })) : null, _jsxs("div", { className: "flex items-center gap-1.5 pe-24", children: [data.agentType ? (_jsx(AgentIcon, { agentType: data.agentType, className: "h-4 w-4 shrink-0" })) : null, _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { "data-testid": "feature-node-
|
|
115
|
+
'border-blue-400 dark:border-amber-500/60', data.state === 'deleting' && 'opacity-60', data.state === 'archived' && 'opacity-50'), children: [data.state !== 'creating' ? (_jsx("div", { className: "absolute end-4 top-3", children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { "data-testid": "feature-node-phase-badge", className: "flex items-center gap-1.5", children: [_jsx("span", { className: "text-muted-foreground text-[10px]", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("span", { className: cn('h-1.5 w-1.5 -translate-y-px rounded-full', lifecyclePhaseBadge[data.lifecycle].dot) })] }) }), _jsxs(TooltipContent, { side: "right", className: "max-w-56", children: [_jsx("p", { className: "font-semibold", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("p", { className: "mt-1 text-xs leading-relaxed text-neutral-500", children: lifecyclePhaseBadge[data.lifecycle].description })] })] }) }) })) : null, _jsxs("div", { className: "flex items-center gap-1.5 pe-24", children: [data.agentType ? (_jsx(AgentIcon, { agentType: data.agentType, className: "h-4 w-4 shrink-0" })) : null, _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { "data-testid": "feature-node-mode-badge", className: "shrink-0", children: data.mode === FeatureMode.Exploration ? (_jsx(FlaskConical, { className: "h-3.5 w-3.5 text-amber-500" })) : data.mode === FeatureMode.Fast || data.fastMode ? (_jsx(Zap, { className: "h-3.5 w-3.5 text-amber-500" })) : (_jsx(ClipboardList, { className: "h-3.5 w-3.5 text-indigo-500" })) }) }), _jsx(TooltipContent, { side: "top", children: data.mode === FeatureMode.Exploration
|
|
116
|
+
? t('featureNode.explorationMode')
|
|
117
|
+
: data.mode === FeatureMode.Fast || data.fastMode
|
|
118
|
+
? t('featureNode.fastMode')
|
|
119
|
+
: t('featureNode.specDriven') })] }) }), _jsx("h3", { className: "min-w-0 truncate text-sm font-bold", children: data.name })] }), data.description ? (_jsx("p", { "data-testid": "feature-node-description", className: "text-muted-foreground mt-1 line-clamp-2 text-xs", children: data.description })) : null, _jsxs("div", { className: "mt-auto pt-2", children: [config.showProgressBar ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-muted-foreground flex items-center justify-end text-[10px]", children: _jsxs("span", { children: [data.progress, "%"] }) }), _jsx("div", { "data-testid": "feature-node-progress-bar", className: "bg-muted mt-1.5 h-1 w-full overflow-hidden rounded-full", children: _jsx("div", { className: cn('h-full rounded-full transition-all', config.progressClass), style: { width: `${data.progress}%` } }) })] })) : null, !config.showProgressBar &&
|
|
115
120
|
![
|
|
116
121
|
'deleting',
|
|
117
122
|
'creating',
|
|
@@ -7,6 +7,8 @@ export interface RepoGroupProps {
|
|
|
7
7
|
children: ReactNode;
|
|
8
8
|
/** Whether the group starts expanded (default: true) */
|
|
9
9
|
defaultOpen?: boolean;
|
|
10
|
+
/** Called when the user clicks the + button to add a feature */
|
|
11
|
+
onAddFeature?: () => void;
|
|
10
12
|
}
|
|
11
|
-
export declare function RepoGroup({ repoName, featureCount, children, defaultOpen, }: RepoGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function RepoGroup({ repoName, featureCount, children, defaultOpen, onAddFeature, }: RepoGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
12
14
|
//# sourceMappingURL=repo-group.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-group.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repo-group/repo-group.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"repo-group.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repo-group/repo-group.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,WAAkB,EAClB,YAAY,GACb,EAAE,cAAc,2CAoDhB"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from 'react';
|
|
4
|
-
import { ChevronDown, GitFork } from 'lucide-react';
|
|
4
|
+
import { ChevronDown, GitFork, Plus } from 'lucide-react';
|
|
5
5
|
import { cn } from '../../../lib/utils.js';
|
|
6
|
-
export function RepoGroup({ repoName, featureCount, children, defaultOpen = true, }) {
|
|
6
|
+
export function RepoGroup({ repoName, featureCount, children, defaultOpen = true, onAddFeature, }) {
|
|
7
7
|
const [open, setOpen] = useState(defaultOpen);
|
|
8
|
-
return (_jsxs("div", { "data-testid": "repo-group", className: "mb-1", children: [_jsxs("button", { type: "button", onClick: () => setOpen(!open), className: cn('text-sidebar-foreground hover:bg-sidebar-accent flex w-
|
|
8
|
+
return (_jsxs("div", { "data-testid": "repo-group", className: "group/repo mb-1", children: [_jsxs("div", { className: "flex items-center", children: [_jsxs("button", { type: "button", onClick: () => setOpen(!open), className: cn('text-sidebar-foreground hover:bg-sidebar-accent flex min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-xs font-semibold', 'transition-colors duration-100'), "aria-expanded": open, children: [_jsx(ChevronDown, { className: cn('text-muted-foreground h-3.5 w-3.5 shrink-0 transition-transform duration-200', !open && '-rotate-90') }), _jsx(GitFork, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: repoName }), _jsx("span", { "aria-label": `${featureCount} features`, className: "bg-sidebar-accent text-sidebar-accent-foreground ml-auto inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums", role: "img", children: featureCount })] }), onAddFeature ? (_jsx("button", { type: "button", "data-testid": "repo-add-feature", onClick: (e) => {
|
|
9
|
+
e.stopPropagation();
|
|
10
|
+
onAddFeature();
|
|
11
|
+
}, className: cn('text-muted-foreground hover:text-sidebar-foreground hover:bg-sidebar-accent shrink-0 rounded-md p-1 opacity-0 transition-all duration-100 group-hover/repo:opacity-100', 'focus-visible:ring-ring focus-visible:opacity-100 focus-visible:ring-1 focus-visible:outline-none'), "aria-label": `Add feature to ${repoName}`, children: _jsx(Plus, { className: "h-3.5 w-3.5" }) })) : null] }), open ? _jsx("div", { className: "pl-2", children: children }) : null] }));
|
|
9
12
|
}
|
|
@@ -6,5 +6,6 @@ type Story = StoryObj<typeof meta>;
|
|
|
6
6
|
export declare const Default: Story;
|
|
7
7
|
export declare const SingleFeature: Story;
|
|
8
8
|
export declare const Collapsed: Story;
|
|
9
|
+
export declare const WithAddFeature: Story;
|
|
9
10
|
export declare const MultipleRepos: Story;
|
|
10
11
|
//# sourceMappingURL=repo-group.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-group.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repo-group/repo-group.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"repo-group.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repo-group/repo-group.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CAgBhC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAgBrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAU3B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAevB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAgB5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAyB3B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { fn } from '@storybook/test';
|
|
2
3
|
import { SidebarProvider } from '../../ui/sidebar.js';
|
|
3
4
|
import { FeatureListItem } from '../../common/feature-list-item/index.js';
|
|
4
5
|
import { FeatureStatusGroup } from '../../common/feature-status-group/index.js';
|
|
@@ -37,6 +38,14 @@ export const Collapsed = {
|
|
|
37
38
|
children: (_jsxs(FeatureStatusGroup, { label: "In Progress", count: 5, children: [_jsx(FeatureListItem, { name: "Feature A", status: "in-progress", startedAt: Date.now() - 60_000 }), _jsx(FeatureListItem, { name: "Feature B", status: "in-progress", startedAt: Date.now() - 120_000 }), _jsx(FeatureListItem, { name: "Feature C", status: "in-progress", startedAt: Date.now() - 180_000 }), _jsx(FeatureListItem, { name: "Feature D", status: "in-progress", startedAt: Date.now() - 240_000 }), _jsx(FeatureListItem, { name: "Feature E", status: "in-progress", startedAt: Date.now() - 300_000 })] })),
|
|
38
39
|
},
|
|
39
40
|
};
|
|
41
|
+
export const WithAddFeature = {
|
|
42
|
+
args: {
|
|
43
|
+
repoName: 'my-project',
|
|
44
|
+
featureCount: 2,
|
|
45
|
+
onAddFeature: fn(),
|
|
46
|
+
children: (_jsxs(_Fragment, { children: [_jsx(FeatureStatusGroup, { label: "In Progress", count: 1, children: _jsx(FeatureListItem, { name: "Dashboard", status: "in-progress", startedAt: Date.now() - 330_000 }) }), _jsx(FeatureStatusGroup, { label: "Done", count: 1, children: _jsx(FeatureListItem, { name: "Settings Page", status: "done", duration: "2h" }) })] })),
|
|
47
|
+
},
|
|
48
|
+
};
|
|
40
49
|
export const MultipleRepos = {
|
|
41
|
-
render: () => (_jsxs(_Fragment, { children: [_jsxs(RepoGroup, { repoName: "frontend", featureCount: 2, children: [_jsx(FeatureStatusGroup, { label: "In Progress", count: 1, children: _jsx(FeatureListItem, { name: "Dashboard", status: "in-progress", startedAt: Date.now() - 330_000 }) }), _jsx(FeatureStatusGroup, { label: "Done", count: 1, children: _jsx(FeatureListItem, { name: "Settings Page", status: "done", duration: "2h" }) })] }), _jsxs(RepoGroup, { repoName: "backend-api", featureCount: 2, children: [_jsx(FeatureStatusGroup, { label: "Action Needed", count: 1, children: _jsx(FeatureListItem, { name: "Auth Module", status: "action-needed" }) }), _jsx(FeatureStatusGroup, { label: "In Progress", count: 1, children: _jsx(FeatureListItem, { name: "API Gateway", status: "in-progress", startedAt: Date.now() - 60_000 }) })] })] })),
|
|
50
|
+
render: () => (_jsxs(_Fragment, { children: [_jsxs(RepoGroup, { repoName: "frontend", featureCount: 2, onAddFeature: fn(), children: [_jsx(FeatureStatusGroup, { label: "In Progress", count: 1, children: _jsx(FeatureListItem, { name: "Dashboard", status: "in-progress", startedAt: Date.now() - 330_000 }) }), _jsx(FeatureStatusGroup, { label: "Done", count: 1, children: _jsx(FeatureListItem, { name: "Settings Page", status: "done", duration: "2h" }) })] }), _jsxs(RepoGroup, { repoName: "backend-api", featureCount: 2, onAddFeature: fn(), children: [_jsx(FeatureStatusGroup, { label: "Action Needed", count: 1, children: _jsx(FeatureListItem, { name: "Auth Module", status: "action-needed" }) }), _jsx(FeatureStatusGroup, { label: "In Progress", count: 1, children: _jsx(FeatureListItem, { name: "API Gateway", status: "in-progress", startedAt: Date.now() - 60_000 }) })] })] })),
|
|
42
51
|
};
|
package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AA8B/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AA+QD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,kBAAkB,GACnB,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AA8B/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AA+QD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,kBAAkB,GACnB,EAAE,uBAAuB,2CA+3CzB"}
|
|
@@ -158,7 +158,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
|
|
|
158
158
|
const [commitEvidence, setCommitEvidence] = useState(settings.workflow.commitEvidence);
|
|
159
159
|
const [ciWatchEnabled, setCiWatchEnabled] = useState(settings.workflow.ciWatchEnabled !== false);
|
|
160
160
|
const [hideCiStatus, setHideCiStatus] = useState(settings.workflow.hideCiStatus !== false);
|
|
161
|
-
const [
|
|
161
|
+
const [defaultMode, setDefaultMode] = useState(settings.workflow.defaultMode ?? 'Fast');
|
|
162
162
|
// Auto-archive state
|
|
163
163
|
const [autoArchiveEnabled, setAutoArchiveEnabled] = useState((settings.workflow.autoArchiveDelayMinutes ?? 10) > 0);
|
|
164
164
|
const [autoArchiveDelay, setAutoArchiveDelay] = useState(String(settings.workflow.autoArchiveDelayMinutes ?? 10));
|
|
@@ -259,7 +259,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
|
|
|
259
259
|
commitEvidence: overrides.commitEvidence ?? commitEvidence,
|
|
260
260
|
ciWatchEnabled: overrides.ciWatchEnabled ?? ciWatchEnabled,
|
|
261
261
|
hideCiStatus: overrides.hideCiStatus ?? hideCiStatus,
|
|
262
|
-
|
|
262
|
+
defaultMode: overrides.defaultMode ?? defaultMode,
|
|
263
263
|
autoArchiveDelayMinutes: archiveEnabled
|
|
264
264
|
? Number.isNaN(archiveDelay) || archiveDelay < 1
|
|
265
265
|
? 10
|
|
@@ -374,10 +374,10 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
|
|
|
374
374
|
label: t('settings.environment.links.configurationGuide'),
|
|
375
375
|
href: 'https://github.com/shep-ai/shep/blob/main/docs/guides/configuration.md',
|
|
376
376
|
},
|
|
377
|
-
], children: t('settings.environment.hint') })] }), _jsxs("div", { id: "section-workflow", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: GitBranch, title: t('settings.workflow.title'), description: t('settings.workflow.sectionDescription'), testId: "workflow-settings-section", children: [_jsx(
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
377
|
+
], children: t('settings.environment.hint') })] }), _jsxs("div", { id: "section-workflow", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: GitBranch, title: t('settings.workflow.title'), description: t('settings.workflow.sectionDescription'), testId: "workflow-settings-section", children: [_jsx(SettingsRow, { label: t('settings.workflow.defaultMode'), description: t('settings.workflow.defaultModeDescription'), children: _jsxs(Select, { value: defaultMode, onValueChange: (v) => {
|
|
378
|
+
setDefaultMode(v);
|
|
379
|
+
save(buildWorkflowPayload({ defaultMode: v }));
|
|
380
|
+
}, children: [_jsx(SelectTrigger, { id: "default-mode", "data-testid": "default-mode-select", className: "w-55 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "Regular", children: t('settings.workflow.modeRegular') }), _jsx(SelectItem, { value: "Fast", children: t('settings.workflow.modeFast') }), _jsx(SelectItem, { value: "Exploration", children: t('settings.workflow.modeExploration') })] })] }) }), _jsx(SubsectionLabel, { children: t('settings.workflow.subsections.approve') }), _jsx(SwitchRow, { label: t('settings.workflow.autoApprovePrd'), description: t('settings.workflow.autoApprovePrdDescription'), id: "allow-prd", testId: "switch-allow-prd", checked: allowPrd, onChange: (v) => {
|
|
381
381
|
setAllowPrd(v);
|
|
382
382
|
save(buildWorkflowPayload({ allowPrd: v }));
|
|
383
383
|
} }), _jsx(SwitchRow, { label: t('settings.workflow.autoApprovePlan'), description: t('settings.workflow.autoApprovePlanDescription'), id: "allow-plan", testId: "switch-allow-plan", checked: allowPlan, onChange: (v) => {
|
package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js
CHANGED
|
@@ -21,7 +21,7 @@ export const Default = {
|
|
|
21
21
|
ciWatchEnabled: true,
|
|
22
22
|
enableEvidence: false,
|
|
23
23
|
commitEvidence: false,
|
|
24
|
-
|
|
24
|
+
defaultMode: 'Fast',
|
|
25
25
|
},
|
|
26
26
|
},
|
|
27
27
|
};
|
|
@@ -52,7 +52,7 @@ export const AllEnabled = {
|
|
|
52
52
|
ciWatchEnabled: true,
|
|
53
53
|
enableEvidence: true,
|
|
54
54
|
commitEvidence: true,
|
|
55
|
-
|
|
55
|
+
defaultMode: 'Fast',
|
|
56
56
|
},
|
|
57
57
|
},
|
|
58
58
|
};
|
|
@@ -83,7 +83,7 @@ export const WithCiSettings = {
|
|
|
83
83
|
ciWatchEnabled: true,
|
|
84
84
|
enableEvidence: false,
|
|
85
85
|
commitEvidence: false,
|
|
86
|
-
|
|
86
|
+
defaultMode: 'Fast',
|
|
87
87
|
},
|
|
88
88
|
},
|
|
89
89
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAqBzE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAqBzE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAyHD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,aAAa,2CAiBhE"}
|
|
@@ -26,6 +26,9 @@ function AppShellInner({ children, sidebarOpen }) {
|
|
|
26
26
|
const handleFeatureClick = useCallback((featureId) => {
|
|
27
27
|
guardedNavigate(() => router.push(`/feature/${featureId}`));
|
|
28
28
|
}, [router, guardedNavigate]);
|
|
29
|
+
const handleAddFeature = useCallback((repositoryPath) => {
|
|
30
|
+
guardedNavigate(() => router.push(`/create?repo=${encodeURIComponent(repositoryPath)}`));
|
|
31
|
+
}, [router, guardedNavigate]);
|
|
29
32
|
const [addingRepo, setAddingRepo] = useState(false);
|
|
30
33
|
const [githubDialogOpen, setGithubDialogOpen] = useState(false);
|
|
31
34
|
const [showReactPicker, setShowReactPicker] = useState(false);
|
|
@@ -76,7 +79,7 @@ function AppShellInner({ children, sidebarOpen }) {
|
|
|
76
79
|
window.dispatchEvent(new CustomEvent('shep:add-repository', { detail: { path: repository.path } }));
|
|
77
80
|
}
|
|
78
81
|
}, []);
|
|
79
|
-
return (_jsxs(SidebarProvider, { defaultOpen: sidebarOpen ?? false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsx("main", { className: "h-full", children: children }), _jsx(GlobalChatPopup, {}), featureFlags.githubImport ? (_jsx(GitHubImportDialog, { open: githubDialogOpen, onOpenChange: setGithubDialogOpen, onImportComplete: handleGitHubImportComplete })) : null] }) }), _jsx(ReactFileManagerDialog, { open: showReactPicker, onOpenChange: (open) => {
|
|
82
|
+
return (_jsxs(SidebarProvider, { defaultOpen: sidebarOpen ?? false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick, onAddFeature: handleAddFeature }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsx("main", { className: "h-full", children: children }), _jsx(GlobalChatPopup, {}), featureFlags.githubImport ? (_jsx(GitHubImportDialog, { open: githubDialogOpen, onOpenChange: setGithubDialogOpen, onImportComplete: handleGitHubImportComplete })) : null] }) }), _jsx(ReactFileManagerDialog, { open: showReactPicker, onOpenChange: (open) => {
|
|
80
83
|
if (!open)
|
|
81
84
|
setShowReactPicker(false);
|
|
82
85
|
}, onSelect: handleReactPickerSelect })] }));
|
|
@@ -15,6 +15,8 @@ export interface AppSidebarProps {
|
|
|
15
15
|
features: FeatureItem[];
|
|
16
16
|
featureFlags: FeatureFlagsState;
|
|
17
17
|
onFeatureClick?: (featureId: string) => void;
|
|
18
|
+
/** Called when the user clicks the + button on a repo group to create a feature */
|
|
19
|
+
onAddFeature?: (repositoryPath: string) => void;
|
|
18
20
|
}
|
|
19
|
-
export declare function AppSidebar({ features, featureFlags, onFeatureClick, }: AppSidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export declare function AppSidebar({ features, featureFlags, onFeatureClick, onAddFeature, }: AppSidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
20
22
|
//# sourceMappingURL=app-sidebar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,mFAAmF;IACnF,YAAY,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,EACd,YAAY,GACb,EAAE,eAAe,2CA0QjB"}
|
|
@@ -22,7 +22,7 @@ import { featureStatusConfig, featureStatusOrder } from '../../common/feature-st
|
|
|
22
22
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
|
|
23
23
|
import { useDeferredMount } from '../../../hooks/use-deferred-mount.js';
|
|
24
24
|
import { useVersion } from '../../../hooks/use-version.js';
|
|
25
|
-
export function AppSidebar({ features, featureFlags, onFeatureClick, }) {
|
|
25
|
+
export function AppSidebar({ features, featureFlags, onFeatureClick, onAddFeature, }) {
|
|
26
26
|
const { t, i18n } = useTranslation('web');
|
|
27
27
|
const pathname = usePathname();
|
|
28
28
|
const { state } = useSidebar();
|
|
@@ -68,7 +68,7 @@ export function AppSidebar({ features, featureFlags, onFeatureClick, }) {
|
|
|
68
68
|
'flex min-h-0 flex-1 flex-col overflow-hidden transition-opacity duration-200 ease-out',
|
|
69
69
|
'[&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none',
|
|
70
70
|
expandedVisible ? 'opacity-100' : 'opacity-0',
|
|
71
|
-
].join(' '), children: [_jsx(SidebarSectionHeader, { label: t('sidebar.features') }), _jsx(ScrollArea, { className: "min-h-0 flex-1", children: repoGroups.map(({ repoPath, repoName, featureCount, statusGroups }) => (_jsx(RepoGroup, { repoName: repoName, featureCount: featureCount, children: statusGroups.map(({ statusKey, label, items }) => (_jsx(FeatureStatusGroup, { label: label, count: items.length, children: items.map((feature) => (_jsx(FeatureListItem, { name: feature.name, status: feature.status, startedAt: feature.startedAt, duration: feature.duration, agentType: feature.agentType, modelId: feature.modelId, onClick: onFeatureClick ? () => onFeatureClick(feature.featureId) : undefined }, feature.featureId))) }, statusKey))) }, repoPath))) })] })) : null }), _jsx(SidebarFooter, { className: "border-t p-2", children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx("div", { className: "flex items-center gap-1", children: _jsxs(TooltipProvider, { children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { className: "w-auto flex-none", onClick: (e) => {
|
|
71
|
+
].join(' '), children: [_jsx(SidebarSectionHeader, { label: t('sidebar.features') }), _jsx(ScrollArea, { className: "min-h-0 flex-1", children: repoGroups.map(({ repoPath, repoName, featureCount, statusGroups }) => (_jsx(RepoGroup, { repoName: repoName, featureCount: featureCount, onAddFeature: onAddFeature ? () => onAddFeature(repoPath) : undefined, children: statusGroups.map(({ statusKey, label, items }) => (_jsx(FeatureStatusGroup, { label: label, count: items.length, children: items.map((feature) => (_jsx(FeatureListItem, { name: feature.name, status: feature.status, startedAt: feature.startedAt, duration: feature.duration, agentType: feature.agentType, modelId: feature.modelId, onClick: onFeatureClick ? () => onFeatureClick(feature.featureId) : undefined }, feature.featureId))) }, statusKey))) }, repoPath))) })] })) : null }), _jsx(SidebarFooter, { className: "border-t p-2", children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx("div", { className: "flex items-center gap-1", children: _jsxs(TooltipProvider, { children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { className: "w-auto flex-none", onClick: (e) => {
|
|
72
72
|
const currentResolved = theme === 'system' ? resolvedTheme : theme;
|
|
73
73
|
const goingToDark = currentResolved !== 'dark';
|
|
74
74
|
const newTheme = theme === 'system'
|
package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"app-sidebar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAgB3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAyBjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA+DnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAKlC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KA6BrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAmElC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { fn } from '@storybook/test';
|
|
2
3
|
import { SidebarProvider, SidebarInset } from '../../ui/sidebar.js';
|
|
3
4
|
import { AppSidebar } from './app-sidebar.js';
|
|
4
5
|
const defaultFeatureFlags = {
|
|
@@ -96,6 +97,7 @@ export const Default = {
|
|
|
96
97
|
export const WithNewFeatureButton = {
|
|
97
98
|
args: {
|
|
98
99
|
features: mockFeatures,
|
|
100
|
+
onAddFeature: fn(),
|
|
99
101
|
},
|
|
100
102
|
};
|
|
101
103
|
export const Collapsed = {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
+
import { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';
|
|
4
|
+
import { toggleVariants } from '../ui/toggle.js';
|
|
5
|
+
declare function ToggleGroup({ className, variant, size, spacing, children, ...props }: React.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants> & {
|
|
6
|
+
spacing?: number;
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
declare function ToggleGroupItem({ className, children, variant, size, ...props }: React.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export { ToggleGroup, ToggleGroupItem };
|
|
10
|
+
//# sourceMappingURL=toggle-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/toggle-group.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAYxD,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAW,EACX,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GACvD,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,2CAmBF;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,2CAuB9F;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';
|
|
5
|
+
import { cn } from '../../lib/utils.js';
|
|
6
|
+
import { toggleVariants } from '../ui/toggle.js';
|
|
7
|
+
const ToggleGroupContext = React.createContext({
|
|
8
|
+
size: 'default',
|
|
9
|
+
variant: 'default',
|
|
10
|
+
spacing: 0,
|
|
11
|
+
});
|
|
12
|
+
function ToggleGroup({ className, variant, size, spacing = 0, children, ...props }) {
|
|
13
|
+
return (_jsx(ToggleGroupPrimitive.Root, { "data-slot": "toggle-group", "data-variant": variant, "data-size": size, "data-spacing": spacing, style: { '--gap': spacing }, className: cn('group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs', className), ...props, children: _jsx(ToggleGroupContext.Provider, { value: { variant, size, spacing }, children: children }) }));
|
|
14
|
+
}
|
|
15
|
+
function ToggleGroupItem({ className, children, variant, size, ...props }) {
|
|
16
|
+
const context = React.useContext(ToggleGroupContext);
|
|
17
|
+
return (_jsx(ToggleGroupPrimitive.Item, { "data-slot": "toggle-group-item", "data-variant": context.variant ?? variant, "data-size": context.size ?? size, "data-spacing": context.spacing, className: cn(toggleVariants({
|
|
18
|
+
variant: context.variant ?? variant,
|
|
19
|
+
size: context.size ?? size,
|
|
20
|
+
}), 'w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10', 'data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l', className), ...props, children: children }));
|
|
21
|
+
}
|
|
22
|
+
export { ToggleGroup, ToggleGroupItem };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
+
import { Toggle as TogglePrimitive } from 'radix-ui';
|
|
4
|
+
declare const toggleVariants: (props?: ({
|
|
5
|
+
variant?: "default" | "outline" | null | undefined;
|
|
6
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
declare function Toggle({ className, variant, size, ...props }: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export { Toggle, toggleVariants };
|
|
10
|
+
//# sourceMappingURL=toggle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/toggle.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AAIrD,QAAA,MAAM,cAAc;;;8EAoBnB,CAAC;AAEF,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAO,EACP,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,2CAQzF;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { Toggle as TogglePrimitive } from 'radix-ui';
|
|
5
|
+
import { cn } from '../../lib/utils.js';
|
|
6
|
+
const toggleVariants = cva("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
7
|
+
variants: {
|
|
8
|
+
variant: {
|
|
9
|
+
default: 'bg-transparent',
|
|
10
|
+
outline: 'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',
|
|
11
|
+
},
|
|
12
|
+
size: {
|
|
13
|
+
default: 'h-9 min-w-9 px-2',
|
|
14
|
+
sm: 'h-8 min-w-8 px-1.5',
|
|
15
|
+
lg: 'h-10 min-w-10 px-2.5',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
variant: 'default',
|
|
20
|
+
size: 'default',
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
function Toggle({ className, variant, size, ...props }) {
|
|
24
|
+
return (_jsx(TogglePrimitive.Root, { "data-slot": "toggle", className: cn(toggleVariants({ variant, size, className })), ...props }));
|
|
25
|
+
}
|
|
26
|
+
export { Toggle, toggleVariants };
|
|
@@ -204,6 +204,8 @@
|
|
|
204
204
|
"pendingOption": "إنشاء الميزة بدون بدء الوكيل",
|
|
205
205
|
"fastOption": "تخطي مراحل SDLC والتنفيذ مباشرة من الأمر (الافتراضي: مفعّل)",
|
|
206
206
|
"noFastOption": "تشغيل جميع مراحل SDLC (تحليل → متطلبات → خطة → تنفيذ)",
|
|
207
|
+
"exploreOption": "Start an exploration/prototyping session for iterative design",
|
|
208
|
+
"exploreAndFastConflict": "Cannot use --explore and --fast together. Choose one mode.",
|
|
207
209
|
"modelOption": "معرّف نموذج LLM لهذا التشغيل (مثال: claude-opus-4-6)",
|
|
208
210
|
"noRebaseOption": "Skip syncing main from remote before creating the feature branch",
|
|
209
211
|
"attachOption": "إرفاق ملف (قابل للتكرار)",
|
|
@@ -414,6 +416,28 @@
|
|
|
414
416
|
"restoredLabel": "تمت الاستعادة:",
|
|
415
417
|
"failedToUnarchive": "فشل إلغاء أرشفة الميزة"
|
|
416
418
|
},
|
|
419
|
+
"feedback": {
|
|
420
|
+
"description": "Send feedback on an exploration prototype to iterate",
|
|
421
|
+
"idArgument": "Feature ID or prefix",
|
|
422
|
+
"feedbackArgument": "Feedback text for the next iteration",
|
|
423
|
+
"feedbackSubmitted": "Feedback submitted for: {{name}}",
|
|
424
|
+
"iterationLabel": "Iteration:",
|
|
425
|
+
"agentLabel": "Agent:",
|
|
426
|
+
"agentIterating": "iterating on feedback",
|
|
427
|
+
"notExploration": "Feature \"{{name}}\" is not in exploration mode (mode: {{mode}}, lifecycle: {{lifecycle}})",
|
|
428
|
+
"failedToSubmit": "Failed to submit feedback"
|
|
429
|
+
},
|
|
430
|
+
"promote": {
|
|
431
|
+
"description": "Promote an exploration feature to Regular or Fast mode",
|
|
432
|
+
"idArgument": "Feature ID or prefix",
|
|
433
|
+
"fastOption": "Promote to Fast mode (skip SDLC phases)",
|
|
434
|
+
"promoted": "Exploration promoted: {{name}}",
|
|
435
|
+
"modeLabel": "Mode:",
|
|
436
|
+
"statusLabel": "Status:",
|
|
437
|
+
"agentLabel": "Agent:",
|
|
438
|
+
"agentSpawned": "spawned for {{mode}} mode",
|
|
439
|
+
"failedToPromote": "Failed to promote exploration"
|
|
440
|
+
},
|
|
417
441
|
"resolveWaiting": {
|
|
418
442
|
"featureNotFound": "الميزة غير موجودة: \"{{id}}\"",
|
|
419
443
|
"noAgentRun": "الميزة \"{{name}}\" ليس لديها تشغيل وكيل",
|
|
@@ -68,8 +68,11 @@
|
|
|
68
68
|
"title": "سير العمل",
|
|
69
69
|
"description": "تكوين سلوك PR وبوابات الموافقة وإعدادات CI",
|
|
70
70
|
"sectionDescription": "سلوك الأتمتة بعد التنفيذ",
|
|
71
|
-
"
|
|
72
|
-
"
|
|
71
|
+
"defaultMode": "وضع الميزة الافتراضي",
|
|
72
|
+
"defaultModeDescription": "الوضع الافتراضي للميزات الجديدة المنشأة عبر CLI أو واجهة الويب",
|
|
73
|
+
"modeRegular": "عادي",
|
|
74
|
+
"modeFast": "سريع",
|
|
75
|
+
"modeExploration": "استكشاف",
|
|
73
76
|
"subsections": {
|
|
74
77
|
"approve": "الموافقة",
|
|
75
78
|
"evidence": "الأدلة",
|
|
@@ -342,6 +345,7 @@
|
|
|
342
345
|
"cancel": "إلغاء",
|
|
343
346
|
"archive": "أرشفة",
|
|
344
347
|
"fastMode": "الوضع السريع",
|
|
348
|
+
"explorationMode": "Exploration Mode",
|
|
345
349
|
"specDriven": "مبني على المواصفات",
|
|
346
350
|
"copied": "تم النسخ!",
|
|
347
351
|
"chatWithAgent": "محادثة مع الوكيل",
|
|
@@ -204,6 +204,8 @@
|
|
|
204
204
|
"pendingOption": "Feature erstellen, ohne den Agenten zu starten",
|
|
205
205
|
"fastOption": "SDLC-Phasen überspringen und direkt nach Ihrem Prompt implementieren (Standard: ein)",
|
|
206
206
|
"noFastOption": "Alle SDLC-Phasen durchlaufen (Analyse → Anforderungen → Plan → Implementierung)",
|
|
207
|
+
"exploreOption": "Start an exploration/prototyping session for iterative design",
|
|
208
|
+
"exploreAndFastConflict": "Cannot use --explore and --fast together. Choose one mode.",
|
|
207
209
|
"modelOption": "LLM-Modellbezeichnung für diesen Lauf (z.B. claude-opus-4-6)",
|
|
208
210
|
"noRebaseOption": "Skip syncing main from remote before creating the feature branch",
|
|
209
211
|
"attachOption": "Eine Datei anhängen (wiederholbar)",
|
|
@@ -414,6 +416,28 @@
|
|
|
414
416
|
"restoredLabel": "Wiederhergestellt:",
|
|
415
417
|
"failedToUnarchive": "Feature konnte nicht wiederhergestellt werden"
|
|
416
418
|
},
|
|
419
|
+
"feedback": {
|
|
420
|
+
"description": "Send feedback on an exploration prototype to iterate",
|
|
421
|
+
"idArgument": "Feature ID or prefix",
|
|
422
|
+
"feedbackArgument": "Feedback text for the next iteration",
|
|
423
|
+
"feedbackSubmitted": "Feedback submitted for: {{name}}",
|
|
424
|
+
"iterationLabel": "Iteration:",
|
|
425
|
+
"agentLabel": "Agent:",
|
|
426
|
+
"agentIterating": "iterating on feedback",
|
|
427
|
+
"notExploration": "Feature \"{{name}}\" is not in exploration mode (mode: {{mode}}, lifecycle: {{lifecycle}})",
|
|
428
|
+
"failedToSubmit": "Failed to submit feedback"
|
|
429
|
+
},
|
|
430
|
+
"promote": {
|
|
431
|
+
"description": "Promote an exploration feature to Regular or Fast mode",
|
|
432
|
+
"idArgument": "Feature ID or prefix",
|
|
433
|
+
"fastOption": "Promote to Fast mode (skip SDLC phases)",
|
|
434
|
+
"promoted": "Exploration promoted: {{name}}",
|
|
435
|
+
"modeLabel": "Mode:",
|
|
436
|
+
"statusLabel": "Status:",
|
|
437
|
+
"agentLabel": "Agent:",
|
|
438
|
+
"agentSpawned": "spawned for {{mode}} mode",
|
|
439
|
+
"failedToPromote": "Failed to promote exploration"
|
|
440
|
+
},
|
|
417
441
|
"resolveWaiting": {
|
|
418
442
|
"featureNotFound": "Feature nicht gefunden: \"{{id}}\"",
|
|
419
443
|
"noAgentRun": "Feature \"{{name}}\" hat keinen Agentlauf",
|
|
@@ -66,8 +66,11 @@
|
|
|
66
66
|
"title": "Workflow",
|
|
67
67
|
"description": "Konfigurieren Sie PR-Verhalten, Genehmigungsstufen und CI-Einstellungen",
|
|
68
68
|
"sectionDescription": "Automatisierungsverhalten nach der Implementierung",
|
|
69
|
-
"
|
|
70
|
-
"
|
|
69
|
+
"defaultMode": "Standard-Feature-Modus",
|
|
70
|
+
"defaultModeDescription": "Standardmodus für neue Features, die über CLI oder Web-UI erstellt werden",
|
|
71
|
+
"modeRegular": "Standard",
|
|
72
|
+
"modeFast": "Schnell",
|
|
73
|
+
"modeExploration": "Erkundung",
|
|
71
74
|
"subsections": { "approve": "Genehmigen", "evidence": "Nachweise", "git": "Git" },
|
|
72
75
|
"autoApprovePrd": "PRD automatisch genehmigen",
|
|
73
76
|
"autoApprovePrdDescription": "Manuelle Überprüfung der Anforderungen überspringen",
|
|
@@ -328,6 +331,7 @@
|
|
|
328
331
|
"cancel": "Abbrechen",
|
|
329
332
|
"archive": "Archivieren",
|
|
330
333
|
"fastMode": "Schnellmodus",
|
|
334
|
+
"explorationMode": "Exploration Mode",
|
|
331
335
|
"specDriven": "Spezifikationsbasiert",
|
|
332
336
|
"copied": "Kopiert!",
|
|
333
337
|
"chatWithAgent": "Chat mit Agent",
|
|
@@ -204,6 +204,8 @@
|
|
|
204
204
|
"pendingOption": "Create feature without starting the agent",
|
|
205
205
|
"fastOption": "Skip SDLC phases and implement directly from your prompt (default: on)",
|
|
206
206
|
"noFastOption": "Run full SDLC phases (analyze → requirements → plan → implement)",
|
|
207
|
+
"exploreOption": "Start an exploration/prototyping session for iterative design",
|
|
208
|
+
"exploreAndFastConflict": "Cannot use --explore and --fast together. Choose one mode.",
|
|
207
209
|
"modelOption": "LLM model identifier for this run (e.g. claude-opus-4-6)",
|
|
208
210
|
"noRebaseOption": "Skip syncing main from remote before creating the feature branch",
|
|
209
211
|
"attachOption": "Attach a file (repeatable)",
|
|
@@ -414,6 +416,28 @@
|
|
|
414
416
|
"restoredLabel": "Restored:",
|
|
415
417
|
"failedToUnarchive": "Failed to unarchive feature"
|
|
416
418
|
},
|
|
419
|
+
"feedback": {
|
|
420
|
+
"description": "Send feedback on an exploration prototype to iterate",
|
|
421
|
+
"idArgument": "Feature ID or prefix",
|
|
422
|
+
"feedbackArgument": "Feedback text for the next iteration",
|
|
423
|
+
"feedbackSubmitted": "Feedback submitted for: {{name}}",
|
|
424
|
+
"iterationLabel": "Iteration:",
|
|
425
|
+
"agentLabel": "Agent:",
|
|
426
|
+
"agentIterating": "iterating on feedback",
|
|
427
|
+
"notExploration": "Feature \"{{name}}\" is not in exploration mode (mode: {{mode}}, lifecycle: {{lifecycle}})",
|
|
428
|
+
"failedToSubmit": "Failed to submit feedback"
|
|
429
|
+
},
|
|
430
|
+
"promote": {
|
|
431
|
+
"description": "Promote an exploration feature to Regular or Fast mode",
|
|
432
|
+
"idArgument": "Feature ID or prefix",
|
|
433
|
+
"fastOption": "Promote to Fast mode (skip SDLC phases)",
|
|
434
|
+
"promoted": "Exploration promoted: {{name}}",
|
|
435
|
+
"modeLabel": "Mode:",
|
|
436
|
+
"statusLabel": "Status:",
|
|
437
|
+
"agentLabel": "Agent:",
|
|
438
|
+
"agentSpawned": "spawned for {{mode}} mode",
|
|
439
|
+
"failedToPromote": "Failed to promote exploration"
|
|
440
|
+
},
|
|
417
441
|
"resolveWaiting": {
|
|
418
442
|
"featureNotFound": "Feature not found: \"{{id}}\"",
|
|
419
443
|
"noAgentRun": "Feature \"{{name}}\" has no agent run",
|