@shipit-ai/cli 1.166.2 → 1.167.1
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 +26 -5
- package/apis/json-schema/AgentConfig.yaml +3 -0
- package/apis/json-schema/AgentPermissionSettings.yaml +23 -0
- package/apis/json-schema/AgentType.yaml +0 -1
- package/apis/json-schema/ClaudeCodePermissionMode.yaml +9 -0
- package/apis/json-schema/CodexPermissionMode.yaml +8 -0
- package/apis/json-schema/CopilotPermissionMode.yaml +8 -0
- package/apis/json-schema/CursorPermissionMode.yaml +7 -0
- package/apis/json-schema/Feature.yaml +3 -0
- package/apis/json-schema/GeminiPermissionMode.yaml +8 -0
- package/apis/json-schema/RovoDevPermissionMode.yaml +8 -0
- package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts +8 -0
- package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts.map +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/ports/output/agents/interactive-agent-executor.interface.d.ts +3 -0
- package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/index.d.ts +1 -0
- package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.d.ts +13 -0
- package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.js +1 -0
- package/dist/packages/core/src/application/use-cases/agents/configure-agent.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/configure-agent.use-case.js +4 -6
- package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.js +1 -0
- 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 +2 -0
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -0
- 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/resume-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +1 -0
- 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 +1 -0
- package/dist/packages/core/src/application/use-cases/settings/complete-onboarding.use-case.d.ts +2 -0
- package/dist/packages/core/src/application/use-cases/settings/complete-onboarding.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/settings/complete-onboarding.use-case.js +23 -0
- 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 +9 -1
- package/dist/packages/core/src/domain/generated/output.d.ts +68 -2
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +36 -1
- package/dist/packages/core/src/infrastructure/di/modules/agents.module.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/modules/agents.module.js +4 -2
- package/dist/packages/core/src/infrastructure/di/modules/services.module.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/modules/services.module.js +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +4 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +6 -0
- 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 +31 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-agent-permission-modes.d.ts +21 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-agent-permission-modes.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-add-agent-permission-modes.js +35 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-feature-permission-mode.d.ts +14 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-feature-permission-mode.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-feature-permission-mode.js +19 -0
- package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.js +18 -7
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +1 -6
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-permissions.d.ts +21 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-permissions.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-permissions.js +49 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.js +4 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.js +0 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +11 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.js +4 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.js +11 -4
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.js +11 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.js +2 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.js +11 -4
- package/dist/packages/core/src/infrastructure/services/agents/common/structured-agent-caller.service.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/structured-agent-caller.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/structured-agent-caller.service.js +13 -6
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.js +12 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +5 -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 +18 -1
- 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 +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 +8 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.js +3 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +2 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +11 -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 +20 -5
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js +6 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +1 -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 +4 -0
- package/dist/packages/core/src/infrastructure/services/settings-reader.service.d.ts +7 -0
- package/dist/packages/core/src/infrastructure/services/settings-reader.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/settings-reader.service.js +25 -0
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +18 -0
- package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/show.command.js +2 -1
- package/dist/src/presentation/cli/commands/settings/agent.command.js +2 -2
- package/dist/src/presentation/cli/commands/settings/index.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/settings/index.js +3 -1
- package/dist/src/presentation/cli/commands/settings/permission-modes.d.ts +19 -0
- package/dist/src/presentation/cli/commands/settings/permission-modes.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/settings/permission-modes.js +38 -0
- package/dist/src/presentation/cli/commands/settings/permissions.command.d.ts +16 -0
- package/dist/src/presentation/cli/commands/settings/permissions.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/settings/permissions.command.js +147 -0
- package/dist/src/presentation/tui/prompts/agent-select.prompt.d.ts +4 -10
- package/dist/src/presentation/tui/prompts/agent-select.prompt.d.ts.map +1 -1
- package/dist/src/presentation/tui/prompts/agent-select.prompt.js +8 -13
- package/dist/src/presentation/tui/wizards/onboarding/onboarding.wizard.d.ts +5 -3
- package/dist/src/presentation/tui/wizards/onboarding/onboarding.wizard.d.ts.map +1 -1
- package/dist/src/presentation/tui/wizards/onboarding/onboarding.wizard.js +10 -5
- package/dist/src/presentation/tui/wizards/onboarding/steps/agent-permissions.step.d.ts +17 -0
- package/dist/src/presentation/tui/wizards/onboarding/steps/agent-permissions.step.d.ts.map +1 -0
- package/dist/src/presentation/tui/wizards/onboarding/steps/agent-permissions.step.js +48 -0
- package/dist/src/presentation/tui/wizards/onboarding/types.d.ts +2 -0
- package/dist/src/presentation/tui/wizards/onboarding/types.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/agent-permissions.d.ts +14 -0
- package/dist/src/presentation/web/app/actions/agent-permissions.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/agent-permissions.js +181 -0
- package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/check-agent-auth.js +2 -5
- package/dist/src/presentation/web/app/actions/check-agent-tool.js +1 -1
- package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-all-agent-models.js +2 -17
- package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-merge-review-data.js +5 -0
- package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-shell.js +5 -0
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +43 -9
- 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 +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/types.d.ts +2 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/types.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.d.ts +2 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.js +6 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.d.ts +7 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.js +24 -3
- package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.js +3 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.js +2 -2
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts +2 -2
- 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 +4 -11
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.js +5 -6
- 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 +2 -2
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +10 -10
- package/dist/src/presentation/web/components/features/control-center/control-center.stories.js +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +2 -2
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.js +3 -3
- package/dist/src/presentation/web/components/features/settings/agent-permission-picker.d.ts +8 -0
- package/dist/src/presentation/web/components/features/settings/agent-permission-picker.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/agent-permission-picker.js +33 -0
- package/dist/src/presentation/web/components/features/settings/agent-permission-picker.stories.d.ts +15 -0
- package/dist/src/presentation/web/components/features/settings/agent-permission-picker.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/agent-permission-picker.stories.js +75 -0
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +32 -4
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +2 -2
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +2 -2
- package/dist/src/presentation/web/lib/path-sanitizers.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/path-sanitizers.js +5 -0
- package/dist/translations/ar/cli.json +16 -0
- package/dist/translations/ar/tui.json +12 -10
- package/dist/translations/ar/web.json +15 -0
- package/dist/translations/de/cli.json +16 -0
- package/dist/translations/de/tui.json +13 -5
- package/dist/translations/de/web.json +15 -0
- package/dist/translations/en/cli.json +16 -0
- package/dist/translations/en/tui.json +12 -10
- package/dist/translations/en/web.json +15 -0
- package/dist/translations/es/cli.json +16 -0
- package/dist/translations/es/tui.json +12 -10
- package/dist/translations/es/web.json +15 -0
- package/dist/translations/fr/cli.json +16 -0
- package/dist/translations/fr/tui.json +12 -10
- package/dist/translations/fr/web.json +15 -0
- package/dist/translations/he/cli.json +16 -0
- package/dist/translations/he/tui.json +12 -10
- package/dist/translations/he/web.json +15 -0
- package/dist/translations/pt/cli.json +16 -0
- package/dist/translations/pt/tui.json +12 -10
- package/dist/translations/pt/web.json +15 -0
- package/dist/translations/ru/cli.json +16 -0
- package/dist/translations/ru/tui.json +12 -10
- package/dist/translations/ru/web.json +15 -0
- 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 +3 -3
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +2 -2
- package/web/.next/required-server-files.json +2 -2
- 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 +2 -3
- 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 +2 -3
- 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 +72 -60
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
- 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 +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -4
- 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 +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -4
- 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 +2 -3
- 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 +2 -3
- 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 +2 -3
- 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 +72 -60
- package/web/.next/server/app/(dashboard)/create/page.js +3 -3
- 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 +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -4
- 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 +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -4
- 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 +2 -3
- 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 +2 -3
- 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 +2 -3
- 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 +1 -1
- 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 +2 -3
- 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/dialog/pick-files/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 +11 -11
- package/web/.next/server/app/settings/page.js +3 -4
- 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 +3 -3
- 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 +3 -3
- 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 +2 -3
- 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/11es_next_dist_esm_build_templates_app-route_067cwst.js +1 -1
- package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_01mq~sm._.js → 11es_next_0q-kz~8._.js} +2 -2
- package/web/.next/server/chunks/ssr/11es_next_0q-kz~8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__02.89uf._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__02.89uf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04rq9lr._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04rq9lr._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0c0xoi_._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0c0xoi_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0r5zhk.._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0r5zhk.._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0uy_5rw._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0uy_5rw._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_04rrcmm._.js → _0-.ckn5._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0-.ckn5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_00k65h-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_069y.js._.js +6 -0
- package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0__4si~._.js +4 -0
- package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0_m17kl._.js +4 -0
- package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0aaotn-._.js +3 -0
- package/web/.next/server/chunks/ssr/_0aaotn-._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0d4miu.._.js +4 -0
- package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0e8ern9._.js +4 -0
- package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_109n-y4._.js → _0n.magx._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0n.magx._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js +6 -0
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js +4 -0
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0t59q8r._.js +4 -0
- package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0tcccbb._.js +3 -0
- package/web/.next/server/chunks/ssr/_0tcccbb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js +4 -0
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1161g9x._.js +4 -0
- package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_0c497sr._.js → _138qywk._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0c497sr._.js.map → _138qywk._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js +1 -1
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +127 -109
- package/web/.next/static/chunks/0-woqr2brccx_.js +3 -0
- package/web/.next/static/chunks/{0ex35-_jtxyjc.js → 022nrd6snse79.js} +1 -1
- package/web/.next/static/chunks/{0t_6hx6ul7umb.js → 02phgt~f2c-2q.js} +1 -1
- package/web/.next/static/chunks/{0whez3wju~9ok.js → 03s7z6w1lj0w~.js} +1 -1
- package/web/.next/static/chunks/04~sw.nhpwy6s.css +1 -0
- package/web/.next/static/chunks/05enics63g._-.js +7 -0
- package/web/.next/static/chunks/08611baheit.t.js +1 -0
- package/web/.next/static/chunks/0_9k2ybutuphq.js +1 -0
- package/web/.next/static/chunks/{0oq-cvtg8rjjp.js → 0j.wph28jrce1.js} +1 -1
- package/web/.next/static/chunks/{0k~55i.ofbdeb.js → 0ls0v8h_qbctm.js} +1 -1
- package/web/.next/static/chunks/0ma7k9iohb3bb.js +1 -0
- package/web/.next/static/chunks/0ps5sykbi-z5-.js +1 -0
- package/web/.next/static/chunks/{0c_bi0dck80dt.js → 0q7ohuqneuur4.js} +1 -1
- package/web/.next/static/chunks/{07gx-h_y91lay.js → 0q8ax~44oybo2.js} +2 -2
- package/web/.next/static/chunks/15rbgqykl.er8.js +1 -0
- package/web/.next/static/chunks/{04xk1iouwcfcq.js → 17z2sq7c5z8cr.js} +3 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.d.ts +0 -12
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.js +0 -233
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.d.ts +0 -8
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.js +0 -94
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts +0 -8
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.js +0 -140
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.d.ts +0 -8
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.js +0 -81
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.d.ts +0 -8
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.js +0 -131
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts +0 -6
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.js +0 -146
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js +0 -3
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js.map +0 -1
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js +0 -3
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js.map +0 -1
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js +0 -3
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04nnbmc._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04nnbmc._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07740t6._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07740t6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l~puw4._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l~puw4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0o3qggc._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0vwjc_m._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0vwjc_m._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0w4__yd._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0w4__yd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0.rsra~._.js +0 -3
- package/web/.next/server/chunks/ssr/_0.rsra~._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_01mq~sm._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_04rrcmm._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0c741v_._.js +0 -3
- package/web/.next/server/chunks/ssr/_0c741v_._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0jpbsh_._.js +0 -4
- package/web/.next/server/chunks/ssr/_0jpbsh_._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_109n-y4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js.map +0 -1
- package/web/.next/static/chunks/0-fy~80ui.5os.js +0 -7
- package/web/.next/static/chunks/039ic1ygq-to3.js +0 -1
- package/web/.next/static/chunks/07a4jt64wdipb.js +0 -1
- package/web/.next/static/chunks/0_imq4rg3q.fe.js +0 -3
- package/web/.next/static/chunks/0i084mozx131g.js +0 -1
- package/web/.next/static/chunks/0j_0i2qsrwh-c.js +0 -1
- package/web/.next/static/chunks/0r5dju6f1-i38.css +0 -1
- /package/web/.next/static/{ynyh_sSxbFA995FRvBUxs → GSG_c1emY-f_AA00vD56y}/_buildManifest.js +0 -0
- /package/web/.next/static/{ynyh_sSxbFA995FRvBUxs → GSG_c1emY-f_AA00vD56y}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{ynyh_sSxbFA995FRvBUxs → GSG_c1emY-f_AA00vD56y}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { resolve } from '../../lib/server-container.js';
|
|
3
|
+
import { updateSettings as updateSettingsSingleton } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
|
|
4
|
+
import { revalidatePath } from 'next/cache';
|
|
5
|
+
import { AgentType, ClaudeCodePermissionMode, CursorPermissionMode, GeminiPermissionMode, CodexPermissionMode, CopilotPermissionMode, RovoDevPermissionMode, } from '../../../../../packages/core/src/domain/generated/output.js';
|
|
6
|
+
const VALID_MODES = {
|
|
7
|
+
[AgentType.ClaudeCode]: [
|
|
8
|
+
{
|
|
9
|
+
value: ClaudeCodePermissionMode.BypassPermissions,
|
|
10
|
+
label: 'Bypass permissions',
|
|
11
|
+
description: 'Skip all permission checks. Fastest for batch runs.',
|
|
12
|
+
batchSafe: true,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
value: ClaudeCodePermissionMode.AcceptEdits,
|
|
16
|
+
label: 'Accept edits',
|
|
17
|
+
description: 'Auto-approve file edits; prompt for shell/network.',
|
|
18
|
+
batchSafe: false,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
value: ClaudeCodePermissionMode.Plan,
|
|
22
|
+
label: 'Plan',
|
|
23
|
+
description: 'Read-only; proposes changes without acting.',
|
|
24
|
+
batchSafe: false,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
value: ClaudeCodePermissionMode.Default,
|
|
28
|
+
label: 'Default',
|
|
29
|
+
description: 'Prompt for everything except reads.',
|
|
30
|
+
batchSafe: false,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
[AgentType.Cursor]: [
|
|
34
|
+
{
|
|
35
|
+
value: CursorPermissionMode.Yolo,
|
|
36
|
+
label: 'Yolo',
|
|
37
|
+
description: 'Write files and execute commands autonomously.',
|
|
38
|
+
batchSafe: true,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
value: CursorPermissionMode.Propose,
|
|
42
|
+
label: 'Propose',
|
|
43
|
+
description: 'Read and analyze; output a diff without writing.',
|
|
44
|
+
batchSafe: true,
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
[AgentType.GeminiCli]: [
|
|
48
|
+
{
|
|
49
|
+
value: GeminiPermissionMode.Yolo,
|
|
50
|
+
label: 'Yolo',
|
|
51
|
+
description: 'Auto-approve all tool calls.',
|
|
52
|
+
batchSafe: true,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
value: GeminiPermissionMode.AutoEdit,
|
|
56
|
+
label: 'Auto-edit',
|
|
57
|
+
description: 'Auto-approve edits; prompt for shell.',
|
|
58
|
+
batchSafe: false,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
value: GeminiPermissionMode.Default,
|
|
62
|
+
label: 'Default',
|
|
63
|
+
description: 'Prompt for every tool call.',
|
|
64
|
+
batchSafe: false,
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
[AgentType.CodexCli]: [
|
|
68
|
+
{
|
|
69
|
+
value: CodexPermissionMode.DangerFullAccess,
|
|
70
|
+
label: 'Full access',
|
|
71
|
+
description: 'No sandbox. Unrestricted access.',
|
|
72
|
+
batchSafe: true,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
value: CodexPermissionMode.WorkspaceWrite,
|
|
76
|
+
label: 'Workspace write',
|
|
77
|
+
description: 'Writes inside worktree, no network.',
|
|
78
|
+
batchSafe: true,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
value: CodexPermissionMode.ReadOnly,
|
|
82
|
+
label: 'Read only',
|
|
83
|
+
description: 'Cannot modify anything.',
|
|
84
|
+
batchSafe: true,
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
[AgentType.CopilotCli]: [
|
|
88
|
+
{
|
|
89
|
+
value: CopilotPermissionMode.Yolo,
|
|
90
|
+
label: 'Yolo',
|
|
91
|
+
description: 'Disable all permission prompts.',
|
|
92
|
+
batchSafe: true,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
value: CopilotPermissionMode.AllowPaths,
|
|
96
|
+
label: 'Allow paths',
|
|
97
|
+
description: 'Filesystem access auto-approved; shell prompts.',
|
|
98
|
+
batchSafe: false,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
value: CopilotPermissionMode.Prompt,
|
|
102
|
+
label: 'Prompt',
|
|
103
|
+
description: 'Built-in tool category defaults.',
|
|
104
|
+
batchSafe: false,
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
[AgentType.RovoDev]: [
|
|
108
|
+
{
|
|
109
|
+
value: RovoDevPermissionMode.Yolo,
|
|
110
|
+
label: 'Yolo',
|
|
111
|
+
description: 'Bypass all prompts.',
|
|
112
|
+
batchSafe: true,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
value: RovoDevPermissionMode.Shadow,
|
|
116
|
+
label: 'Shadow',
|
|
117
|
+
description: 'Temporary workspace clone. Experimental.',
|
|
118
|
+
batchSafe: false,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
value: RovoDevPermissionMode.Config,
|
|
122
|
+
label: 'Config',
|
|
123
|
+
description: 'Respect ~/.rovodev/config.yml settings.',
|
|
124
|
+
batchSafe: false,
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
};
|
|
128
|
+
/** Agent type to AgentPermissionSettings key mapping */
|
|
129
|
+
const AGENT_TYPE_TO_PERMISSION_KEY = {
|
|
130
|
+
[AgentType.ClaudeCode]: 'claudeCode',
|
|
131
|
+
[AgentType.Cursor]: 'cursor',
|
|
132
|
+
[AgentType.GeminiCli]: 'geminiCli',
|
|
133
|
+
[AgentType.CodexCli]: 'codexCli',
|
|
134
|
+
[AgentType.CopilotCli]: 'copilotCli',
|
|
135
|
+
[AgentType.RovoDev]: 'rovoDev',
|
|
136
|
+
};
|
|
137
|
+
export async function getAgentPermissionOptions(agentType) {
|
|
138
|
+
return VALID_MODES[agentType] ?? [];
|
|
139
|
+
}
|
|
140
|
+
export async function getCurrentAgentPermissionMode(agentType) {
|
|
141
|
+
const loadUseCase = resolve('LoadSettingsUseCase');
|
|
142
|
+
const settings = await loadUseCase.execute();
|
|
143
|
+
const key = AGENT_TYPE_TO_PERMISSION_KEY[agentType];
|
|
144
|
+
if (!key)
|
|
145
|
+
return undefined;
|
|
146
|
+
return settings.agent?.permissions?.[key];
|
|
147
|
+
}
|
|
148
|
+
export async function setAgentPermissionMode(agentType, mode) {
|
|
149
|
+
try {
|
|
150
|
+
const key = AGENT_TYPE_TO_PERMISSION_KEY[agentType];
|
|
151
|
+
if (!key) {
|
|
152
|
+
return { success: false, error: `Unsupported agent type: ${agentType}` };
|
|
153
|
+
}
|
|
154
|
+
const modes = VALID_MODES[agentType];
|
|
155
|
+
if (!modes?.some((m) => m.value === mode)) {
|
|
156
|
+
return { success: false, error: `Invalid permission mode: ${mode}` };
|
|
157
|
+
}
|
|
158
|
+
const loadUseCase = resolve('LoadSettingsUseCase');
|
|
159
|
+
const current = await loadUseCase.execute();
|
|
160
|
+
const updatedSettings = {
|
|
161
|
+
...current,
|
|
162
|
+
agent: {
|
|
163
|
+
...current.agent,
|
|
164
|
+
permissions: {
|
|
165
|
+
...current.agent?.permissions,
|
|
166
|
+
[key]: mode,
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
updatedAt: new Date(),
|
|
170
|
+
};
|
|
171
|
+
const updateUseCase = resolve('UpdateSettingsUseCase');
|
|
172
|
+
await updateUseCase.execute(updatedSettings);
|
|
173
|
+
updateSettingsSingleton(updatedSettings);
|
|
174
|
+
revalidatePath('/', 'layout');
|
|
175
|
+
return { success: true };
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
const message = error instanceof Error ? error.message : 'Failed to update permission mode';
|
|
179
|
+
return { success: false, error: message };
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-agent-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-agent-auth.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,0FAA0F;IAC1F,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,wDAAwD;IACxD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"check-agent-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-agent-auth.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,0FAA0F;IAC1F,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,wDAAwD;IACxD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AA4ID;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,CA4H/D"}
|
|
@@ -12,9 +12,6 @@ const AGENT_LABELS = {
|
|
|
12
12
|
cursor: 'Cursor CLI',
|
|
13
13
|
'gemini-cli': 'Gemini CLI',
|
|
14
14
|
'rovo-dev': 'Rovo Dev CLI',
|
|
15
|
-
aider: 'Aider',
|
|
16
|
-
continue: 'Continue',
|
|
17
|
-
dev: 'Demo',
|
|
18
15
|
};
|
|
19
16
|
const AGENT_TOOL_MAP = {
|
|
20
17
|
'claude-code': 'claude-code',
|
|
@@ -92,7 +89,7 @@ function tier1AuthCheck(agentType) {
|
|
|
92
89
|
return existsSync(acliDir) ? 'file' : false;
|
|
93
90
|
}
|
|
94
91
|
default:
|
|
95
|
-
//
|
|
92
|
+
// Unknown agents — assume no auth needed
|
|
96
93
|
return 'env-var';
|
|
97
94
|
}
|
|
98
95
|
}
|
|
@@ -169,7 +166,7 @@ export async function checkAgentAuth() {
|
|
|
169
166
|
const label = AGENT_LABELS[agentType] ?? agentType;
|
|
170
167
|
const toolId = AGENT_TOOL_MAP[agentType] ?? null;
|
|
171
168
|
const binaryName = AGENT_BINARY_MAP[agentType] ?? null;
|
|
172
|
-
//
|
|
169
|
+
// Agents without a tool mapping — always good
|
|
173
170
|
if (!toolId) {
|
|
174
171
|
return {
|
|
175
172
|
agentType,
|
|
@@ -22,7 +22,7 @@ const AGENT_BINARY_MAP = {
|
|
|
22
22
|
export async function checkAgentTool(agentType) {
|
|
23
23
|
const toolId = AGENT_TOOL_MAP[agentType] ?? null;
|
|
24
24
|
const binaryName = AGENT_BINARY_MAP[agentType] ?? null;
|
|
25
|
-
//
|
|
25
|
+
// Agents without a tool mapping don't need a tool check
|
|
26
26
|
if (!toolId) {
|
|
27
27
|
return { agentType, toolId: null, tool: null, installed: true, binaryName: null };
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-all-agent-models.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-all-agent-models.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"get-all-agent-models.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-all-agent-models.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAkCD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAsCpE"}
|
|
@@ -8,9 +8,8 @@ const AGENT_LABELS = {
|
|
|
8
8
|
cursor: 'Cursor CLI',
|
|
9
9
|
'gemini-cli': 'Gemini CLI',
|
|
10
10
|
'rovo-dev': 'Rovo Dev CLI',
|
|
11
|
-
dev: 'Demo',
|
|
12
11
|
};
|
|
13
|
-
/** Sort weight —
|
|
12
|
+
/** Sort weight — lower = further up in the list. */
|
|
14
13
|
const AGENT_ORDER = {
|
|
15
14
|
'claude-code': 0,
|
|
16
15
|
'codex-cli': 1,
|
|
@@ -18,7 +17,6 @@ const AGENT_ORDER = {
|
|
|
18
17
|
cursor: 3,
|
|
19
18
|
'gemini-cli': 4,
|
|
20
19
|
'rovo-dev': 5,
|
|
21
|
-
dev: 99,
|
|
22
20
|
};
|
|
23
21
|
/**
|
|
24
22
|
* Maps agent types to their corresponding tool IDs for availability checks.
|
|
@@ -45,25 +43,12 @@ export async function getAllAgentModels() {
|
|
|
45
43
|
...getModelMeta(id),
|
|
46
44
|
})),
|
|
47
45
|
}))
|
|
48
|
-
.map((g) => {
|
|
49
|
-
// Dev agent gets fun demo models
|
|
50
|
-
if (g.agentType === 'dev' && g.models.length === 0) {
|
|
51
|
-
return {
|
|
52
|
-
...g,
|
|
53
|
-
models: [
|
|
54
|
-
{ id: 'gpt-8', ...getModelMeta('gpt-8') },
|
|
55
|
-
{ id: 'opus-7', ...getModelMeta('opus-7') },
|
|
56
|
-
],
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
return g;
|
|
60
|
-
})
|
|
61
46
|
.filter((g) => g.models.length > 0);
|
|
62
47
|
// Check which agents are actually installed
|
|
63
48
|
const toolService = resolve('IToolInstallerService');
|
|
64
49
|
const groupsWithStatus = await Promise.all(groups.map(async (group) => {
|
|
65
50
|
const toolId = AGENT_TOOL_IDS[group.agentType];
|
|
66
|
-
if (!toolId
|
|
51
|
+
if (!toolId) {
|
|
67
52
|
return { ...group, installed: true };
|
|
68
53
|
}
|
|
69
54
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-merge-review-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-merge-review-data.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,sDAAsD,CAAC;AAI9D,KAAK,wBAAwB,GAAG,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAwDpE,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,
|
|
1
|
+
{"version":3,"file":"get-merge-review-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-merge-review-data.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,sDAAsD,CAAC;AAI9D,KAAK,wBAAwB,GAAG,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAwDpE,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA4I7F"}
|
|
@@ -130,6 +130,11 @@ export async function getMergeReviewData(featureId) {
|
|
|
130
130
|
isWithinRoot(resolvedEvidenceDir, resolvedHome)) {
|
|
131
131
|
const resolvedManifest = realpathOrNull(join(resolvedEvidenceDir, 'manifest.json'));
|
|
132
132
|
if (resolvedManifest && isWithinRoot(resolvedManifest, resolvedEvidenceDir)) {
|
|
133
|
+
// SECURITY: resolvedManifest validated by realpathOrNull + isWithinRoot
|
|
134
|
+
// containment on line 159. featureId flows through SHA-256 hash in
|
|
135
|
+
// computeEvidenceDir (hex-only output neutralizes injection). Double
|
|
136
|
+
// containment check: home dir → evidence dir → manifest. Alert
|
|
137
|
+
// js/path-injection #27 dismissed as false positive.
|
|
133
138
|
const raw = JSON.parse(readFileSync(resolvedManifest, 'utf-8'));
|
|
134
139
|
// Pass the UNRESOLVED evidenceDir so returned paths share the
|
|
135
140
|
// same root form the evidence route's prefix check expects.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"AAmDA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"AAmDA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgG9E"}
|
|
@@ -77,6 +77,11 @@ export async function openShell(input) {
|
|
|
77
77
|
// shell treats as a single literal argument to `cd`.
|
|
78
78
|
const escapedPath = shellEscapePosixPath(targetPath);
|
|
79
79
|
const command = config.openDirectory.replaceAll('{dir}', escapedPath);
|
|
80
|
+
// SECURITY: targetPath from realpathSync (must exist on disk); single-quote
|
|
81
|
+
// shell-escaped via shellEscapePosixPath; localhost-only server action.
|
|
82
|
+
// shell:true is required by tool configs using `cd {dir} && exec <tool>`.
|
|
83
|
+
// CodeQL flags this because it does not model custom sanitizer functions —
|
|
84
|
+
// alert js/command-line-injection #29 dismissed as false positive.
|
|
80
85
|
const child = spawn(command, [], {
|
|
81
86
|
detached: true,
|
|
82
87
|
stdio: 'ignore',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/base-drawer/base-drawer.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiBlE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,QAAA,MAAM,cAAc;;8EAWlB,CAAC;AAEH,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,OAAO,cAAc,CAAC;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yGAAyG;IACzG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,KAAa,EACb,qBAA6B,EAC7B,KAAgB,EAChB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,aAAa,EAAE,MAAM,EACrB,YAAY,GACb,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"base-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/base-drawer/base-drawer.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiBlE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,QAAA,MAAM,cAAc;;8EAWlB,CAAC;AAEH,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,OAAO,cAAc,CAAC;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yGAAyG;IACzG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,KAAa,EACb,qBAA6B,EAC7B,KAAgB,EAChB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,aAAa,EAAE,MAAM,EACrB,YAAY,GACb,EAAE,eAAe,2CAmLjB"}
|
|
@@ -60,30 +60,64 @@ export function BaseDrawer({ open, onClose, modal = false, dismissOnOutsideClick
|
|
|
60
60
|
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
61
61
|
}, [open, modal, onClose]);
|
|
62
62
|
// Close when clicking outside the drawer panel (no overlay needed — canvas stays draggable).
|
|
63
|
-
//
|
|
63
|
+
//
|
|
64
|
+
// Uses `click` (not `pointerdown`) as the trigger so canvas drags don't close the drawer,
|
|
65
|
+
// but tracks the `pointerdown` target separately. When the user presses the mouse on an
|
|
66
|
+
// in-drawer control that opens a portaled popover (Radix Select, DropdownMenu, Popover),
|
|
67
|
+
// Radix calls preventDefault on pointerdown and opens its portal over the trigger. By
|
|
68
|
+
// the time pointerup fires, the cursor is over the portal overlay, and Chrome computes
|
|
69
|
+
// the `click` event's target as the common ancestor of pointerdown/pointerup — which is
|
|
70
|
+
// `<body>` because the portal is detached from the drawer subtree. Without tracking the
|
|
71
|
+
// pointerdown origin we would misread this as an outside click and close the drawer.
|
|
64
72
|
useEffect(() => {
|
|
65
73
|
if (!open || modal)
|
|
66
74
|
return;
|
|
75
|
+
// When dismissOnOutsideClick is false (default), also respect data-no-drawer-close guards.
|
|
76
|
+
const ignoreSelector = dismissOnOutsideClick
|
|
77
|
+
? '[role="alertdialog"], [role="dialog"], [role="menu"], [role="listbox"], [data-radix-popper-content-wrapper]'
|
|
78
|
+
: '[data-no-drawer-close], [role="alertdialog"], [role="dialog"], [role="menu"], [role="listbox"], [data-radix-popper-content-wrapper]';
|
|
79
|
+
/** True when `el` is inside the drawer or an explicitly-ignored overlay. */
|
|
80
|
+
const isInsideOrIgnored = (el) => {
|
|
81
|
+
if (!el)
|
|
82
|
+
return false;
|
|
83
|
+
if (contentRef.current?.contains(el))
|
|
84
|
+
return true;
|
|
85
|
+
if (el.closest(ignoreSelector))
|
|
86
|
+
return true;
|
|
87
|
+
return false;
|
|
88
|
+
};
|
|
89
|
+
// Track the most recent pointerdown target so the click handler can check
|
|
90
|
+
// where the gesture ORIGINATED, not just where it landed.
|
|
91
|
+
let pointerDownOrigin = null;
|
|
92
|
+
const handlePointerDown = (e) => {
|
|
93
|
+
pointerDownOrigin = e.target;
|
|
94
|
+
};
|
|
67
95
|
const handleClick = (e) => {
|
|
96
|
+
const origin = pointerDownOrigin;
|
|
97
|
+
// Clear for the next gesture regardless of outcome.
|
|
98
|
+
pointerDownOrigin = null;
|
|
68
99
|
const target = e.target;
|
|
69
100
|
// If the clicked element was unmounted by React before the event reached
|
|
70
101
|
// the document (e.g. a "Next" button removed on the last step), it is no
|
|
71
102
|
// longer in the DOM tree — treat it as an internal click, not an outside one.
|
|
72
103
|
if (!document.body.contains(target))
|
|
73
104
|
return;
|
|
74
|
-
|
|
105
|
+
// Click landed inside the drawer or a protected overlay.
|
|
106
|
+
if (isInsideOrIgnored(target))
|
|
75
107
|
return;
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
: '[data-no-drawer-close], [role="alertdialog"], [role="dialog"], [role="menu"], [role="listbox"], [data-radix-popper-content-wrapper]';
|
|
81
|
-
if (target.closest(ignoreSelector))
|
|
108
|
+
// Click landed outside, but the gesture ORIGINATED inside the drawer or a
|
|
109
|
+
// protected overlay (e.g. a Radix Select trigger whose portal stole the
|
|
110
|
+
// pointerup target). This is not a real outside click — bail out.
|
|
111
|
+
if (isInsideOrIgnored(origin))
|
|
82
112
|
return;
|
|
83
113
|
onClose();
|
|
84
114
|
};
|
|
115
|
+
document.addEventListener('pointerdown', handlePointerDown, true);
|
|
85
116
|
document.addEventListener('click', handleClick);
|
|
86
|
-
return () =>
|
|
117
|
+
return () => {
|
|
118
|
+
document.removeEventListener('pointerdown', handlePointerDown, true);
|
|
119
|
+
document.removeEventListener('click', handleClick);
|
|
120
|
+
};
|
|
87
121
|
}, [open, modal, onClose, dismissOnOutsideClick]);
|
|
88
122
|
return (_jsxs(Drawer, { direction: drawerDirection, modal: modal, handleOnly: true, open: open, onOpenChange: (isOpen) => {
|
|
89
123
|
if (!isOpen)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAM5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE3F,YAAY,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAClG,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;AAC5E,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,kGAAkG;IAClG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,YAAoB,EACpB,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAM5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE3F,YAAY,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAClG,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;AAC5E,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,kGAAkG;IAClG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,YAAoB,EACpB,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,EAAE,wBAAwB,2CAgM1B"}
|
package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js
CHANGED
|
@@ -46,5 +46,5 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
|
|
|
46
46
|
form.validRepoPath.split('/').pop() })] })) : null, _jsx(PromptSection, { description: form.description, onDescriptionChange: form.setDescription, attachments: form.attachments, onRemoveFile: form.handleRemoveFile, onNotesChange: form.handleNotesChange, onPaste: form.handlePaste, onDragEnter: form.handleDragEnter, onDragLeave: form.handleDragLeave, onDragOver: form.handleDragOver, onDrop: form.handleDrop, onAddFiles: form.handleAddFiles, isDragOver: form.isDragOver, uploadError: form.uploadError, isPromptFocused: form.isPromptFocused, onPromptFocus: () => form.setIsPromptFocused(true), onPromptBlur: () => form.setIsPromptFocused(false), fast: form.fast, onFastChange: form.setFast, pending: form.pending, onPendingChange: form.setPending, overrideAgent: form.overrideAgent, overrideModel: form.overrideModel, currentAgentType: currentAgentType, currentModel: currentModel, onAgentModelChange: (agent, model) => {
|
|
47
47
|
form.setOverrideAgent(agent);
|
|
48
48
|
form.setOverrideModel(model);
|
|
49
|
-
}, isSubmitting: isSubmitting }), hasFeatures && initialParentId !== undefined ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "parent-feature", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: t('createDrawer.parentFeature') }), _jsx(ParentFeatureCombobox, { features: features, value: form.parentId, onChange: form.setParentId, disabled: isSubmitting })] })) : null, _jsx(WorkflowOptionsSection, { approvalGates: form.approvalGates, onApprovalGatesChange: form.setApprovalGates, enableEvidence: form.enableEvidence, onEnableEvidenceChange: form.setEnableEvidence, commitEvidence: form.commitEvidence, onCommitEvidenceChange: form.setCommitEvidence, push: form.push, onPushChange: form.setPush, openPr: form.openPr, onOpenPrChange: form.setOpenPr, ciWatchEnabled: form.ciWatchEnabled, onCiWatchChange: form.setCiWatchEnabled, rebaseBeforeBranch: form.rebaseBeforeBranch, onRebaseBeforeBranchChange: form.setRebaseBeforeBranch, commitSpecs: form.commitSpecs, onCommitSpecsChange: form.setCommitSpecs, forkAndPr: form.forkAndPr, onForkAndPrChange: form.setForkAndPr, canPush: form.canPush, fast: form.fast, computedPush: form.computedPush, computedOpenPr: form.computedOpenPr, isSubmitting: isSubmitting })] }) }) }) }));
|
|
49
|
+
}, isSubmitting: isSubmitting }), hasFeatures && initialParentId !== undefined ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "parent-feature", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: t('createDrawer.parentFeature') }), _jsx(ParentFeatureCombobox, { features: features, value: form.parentId, onChange: form.setParentId, disabled: isSubmitting })] })) : null, _jsx(WorkflowOptionsSection, { approvalGates: form.approvalGates, onApprovalGatesChange: form.setApprovalGates, enableEvidence: form.enableEvidence, onEnableEvidenceChange: form.setEnableEvidence, commitEvidence: form.commitEvidence, onCommitEvidenceChange: form.setCommitEvidence, push: form.push, onPushChange: form.setPush, openPr: form.openPr, onOpenPrChange: form.setOpenPr, ciWatchEnabled: form.ciWatchEnabled, onCiWatchChange: form.setCiWatchEnabled, rebaseBeforeBranch: form.rebaseBeforeBranch, onRebaseBeforeBranchChange: form.setRebaseBeforeBranch, commitSpecs: form.commitSpecs, onCommitSpecsChange: form.setCommitSpecs, forkAndPr: form.forkAndPr, onForkAndPrChange: form.setForkAndPr, canPush: form.canPush, fast: form.fast, computedPush: form.computedPush, computedOpenPr: form.computedOpenPr, isSubmitting: isSubmitting, agentType: form.overrideAgent ?? currentAgentType, permissionMode: form.permissionMode, onPermissionModeChange: form.setPermissionMode })] }) }) }) }));
|
|
50
50
|
}
|
|
@@ -50,6 +50,8 @@ export interface FeatureCreatePayload {
|
|
|
50
50
|
agentType?: string;
|
|
51
51
|
/** Optional model override for this feature run */
|
|
52
52
|
model?: string;
|
|
53
|
+
/** Optional per-feature permission mode override (overrides agent default from settings) */
|
|
54
|
+
permissionMode?: string;
|
|
53
55
|
sessionId?: string;
|
|
54
56
|
}
|
|
55
57
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAElG,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,uFAAuF;IACvF,WAAW,EAAE,OAAO,CAAC;IACrB,gFAAgF;IAChF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAElG,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,uFAAuF;IACvF,WAAW,EAAE,OAAO,CAAC;IACrB,gFAAgF;IAChF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -50,6 +50,8 @@ export declare function useFeatureCreateForm({ open, onClose, onSubmit, reposito
|
|
|
50
50
|
setOverrideAgent: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
|
|
51
51
|
overrideModel: string | undefined;
|
|
52
52
|
setOverrideModel: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
|
|
53
|
+
permissionMode: string | undefined;
|
|
54
|
+
setPermissionMode: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
|
|
53
55
|
selectedRepoPath: string | undefined;
|
|
54
56
|
setSelectedRepoPath: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
|
|
55
57
|
localRepos: RepositoryOption[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-feature-create-form.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAyEtF,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,EAAE,yBAAyB
|
|
1
|
+
{"version":3,"file":"use-feature-create-form.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAyEtF,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,EAAE,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA0JuB,IAAI,EAAE;yBA8Df,KAAK,CAAC,SAAS;yBASf,KAAK,CAAC,SAAS;wBAShB,KAAK,CAAC,SAAS;oBAMhD,KAAK,CAAC,SAAS;qBAef,KAAK,CAAC,cAAc;sBAqBpB,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;;2BA+GI,MAAM;4BAIL,MAAM,SAAS,MAAM;;EA6EjE"}
|
package/dist/src/presentation/web/components/common/feature-create-drawer/use-feature-create-form.js
CHANGED
|
@@ -111,6 +111,7 @@ export function useFeatureCreateForm({ open, onClose, onSubmit, repositoryPath,
|
|
|
111
111
|
const [rebaseBeforeBranch, setRebaseBeforeBranch] = useState(true);
|
|
112
112
|
const [overrideAgent, setOverrideAgent] = useState(undefined);
|
|
113
113
|
const [overrideModel, setOverrideModel] = useState(undefined);
|
|
114
|
+
const [permissionMode, setPermissionMode] = useState(undefined);
|
|
114
115
|
const [selectedRepoPath, setSelectedRepoPath] = useState(validRepoPath || undefined);
|
|
115
116
|
const [localRepos, setLocalRepos] = useState(repositories ?? []);
|
|
116
117
|
const [isDragOver, setIsDragOver] = useState(false);
|
|
@@ -185,6 +186,7 @@ export function useFeatureCreateForm({ open, onClose, onSubmit, repositoryPath,
|
|
|
185
186
|
setRebaseBeforeBranch(true);
|
|
186
187
|
setOverrideAgent(undefined);
|
|
187
188
|
setOverrideModel(undefined);
|
|
189
|
+
setPermissionMode(undefined);
|
|
188
190
|
setUploadError(null);
|
|
189
191
|
dragCounterRef.current = 0;
|
|
190
192
|
setIsDragOver(false);
|
|
@@ -334,6 +336,7 @@ export function useFeatureCreateForm({ open, onClose, onSubmit, repositoryPath,
|
|
|
334
336
|
...(pending ? { pending } : {}),
|
|
335
337
|
...(overrideAgent ? { agentType: overrideAgent } : {}),
|
|
336
338
|
...(overrideModel ? { model: overrideModel } : {}),
|
|
339
|
+
...(permissionMode ? { permissionMode } : {}),
|
|
337
340
|
...(parentId ? { parentId } : {}),
|
|
338
341
|
sessionId: sessionIdRef.current,
|
|
339
342
|
});
|
|
@@ -357,6 +360,7 @@ export function useFeatureCreateForm({ open, onClose, onSubmit, repositoryPath,
|
|
|
357
360
|
pending,
|
|
358
361
|
overrideAgent,
|
|
359
362
|
overrideModel,
|
|
363
|
+
permissionMode,
|
|
360
364
|
parentId,
|
|
361
365
|
createSound,
|
|
362
366
|
resetForm,
|
|
@@ -456,6 +460,8 @@ export function useFeatureCreateForm({ open, onClose, onSubmit, repositoryPath,
|
|
|
456
460
|
setOverrideAgent,
|
|
457
461
|
overrideModel,
|
|
458
462
|
setOverrideModel,
|
|
463
|
+
permissionMode,
|
|
464
|
+
setPermissionMode,
|
|
459
465
|
selectedRepoPath,
|
|
460
466
|
setSelectedRepoPath,
|
|
461
467
|
localRepos,
|
|
@@ -22,6 +22,12 @@ export interface WorkflowOptionsSectionProps {
|
|
|
22
22
|
computedPush: boolean;
|
|
23
23
|
computedOpenPr: boolean;
|
|
24
24
|
isSubmitting: boolean;
|
|
25
|
+
/** Currently selected agent type (for permission mode options) */
|
|
26
|
+
agentType?: string;
|
|
27
|
+
/** Selected per-feature permission mode override */
|
|
28
|
+
permissionMode?: string;
|
|
29
|
+
/** Callback when permission mode changes */
|
|
30
|
+
onPermissionModeChange?: (mode: string | undefined) => void;
|
|
25
31
|
}
|
|
26
|
-
export declare function WorkflowOptionsSection({ approvalGates, onApprovalGatesChange, enableEvidence, onEnableEvidenceChange, commitEvidence, onCommitEvidenceChange, push: _push, onPushChange, openPr, onOpenPrChange, ciWatchEnabled, onCiWatchChange, rebaseBeforeBranch, onRebaseBeforeBranchChange, commitSpecs, onCommitSpecsChange, forkAndPr, onForkAndPrChange, canPush, fast, computedPush, computedOpenPr, isSubmitting, }: WorkflowOptionsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
export declare function WorkflowOptionsSection({ approvalGates, onApprovalGatesChange, enableEvidence, onEnableEvidenceChange, commitEvidence, onCommitEvidenceChange, push: _push, onPushChange, openPr, onOpenPrChange, ciWatchEnabled, onCiWatchChange, rebaseBeforeBranch, onRebaseBeforeBranchChange, commitSpecs, onCommitSpecsChange, forkAndPr, onForkAndPrChange, canPush, fast, computedPush, computedOpenPr, isSubmitting, agentType, permissionMode, onPermissionModeChange, }: WorkflowOptionsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
27
33
|
//# sourceMappingURL=workflow-options-section.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-options-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/workflow-options-section.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow-options-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/workflow-options-section.tsx"],"names":[],"mappings":"AAoBA,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAChE,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,0BAA0B,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAC7D;AAED,wBAAgB,sBAAsB,CAAC,EACrC,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,sBAAsB,EACtB,IAAI,EAAE,KAAK,EACX,YAAY,EACZ,MAAM,EACN,cAAc,EACd,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,cAAc,EACd,sBAAsB,GACvB,EAAE,2BAA2B,2CAsT7B"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
3
4
|
import { useTranslation } from 'react-i18next';
|
|
4
|
-
import { GitFork, FileText, RefreshCw } from 'lucide-react';
|
|
5
|
+
import { GitFork, FileText, RefreshCw, Shield } from 'lucide-react';
|
|
5
6
|
import { cn } from '../../../lib/utils.js';
|
|
6
7
|
import { Label } from '../../ui/label.js';
|
|
7
8
|
import { Switch } from '../../ui/switch.js';
|
|
9
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/select.js';
|
|
8
10
|
import { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip.js';
|
|
11
|
+
import { getAgentPermissionOptions } from '../../../app/actions/agent-permissions.js';
|
|
9
12
|
const AUTO_APPROVE_OPTION_IDS = ['allowPrd', 'allowPlan', 'allowMerge'];
|
|
10
|
-
export function WorkflowOptionsSection({ approvalGates, onApprovalGatesChange, enableEvidence, onEnableEvidenceChange, commitEvidence, onCommitEvidenceChange, push: _push, onPushChange, openPr, onOpenPrChange, ciWatchEnabled, onCiWatchChange, rebaseBeforeBranch, onRebaseBeforeBranchChange, commitSpecs, onCommitSpecsChange, forkAndPr, onForkAndPrChange, canPush, fast, computedPush, computedOpenPr, isSubmitting, }) {
|
|
13
|
+
export function WorkflowOptionsSection({ approvalGates, onApprovalGatesChange, enableEvidence, onEnableEvidenceChange, commitEvidence, onCommitEvidenceChange, push: _push, onPushChange, openPr, onOpenPrChange, ciWatchEnabled, onCiWatchChange, rebaseBeforeBranch, onRebaseBeforeBranchChange, commitSpecs, onCommitSpecsChange, forkAndPr, onForkAndPrChange, canPush, fast, computedPush, computedOpenPr, isSubmitting, agentType, permissionMode, onPermissionModeChange, }) {
|
|
11
14
|
const { t } = useTranslation('web');
|
|
12
15
|
const AUTO_APPROVE_OPTIONS = [
|
|
13
16
|
{ id: 'allowPrd', label: t('createDrawer.prd'), description: t('createDrawer.prdDescription') },
|
|
@@ -51,5 +54,23 @@ export function WorkflowOptionsSection({ approvalGates, onApprovalGatesChange, e
|
|
|
51
54
|
// Auto-flip commitSpecs to false when enabling contribute mode
|
|
52
55
|
if (v)
|
|
53
56
|
onCommitSpecsChange(false);
|
|
54
|
-
}, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "fork-and-pr", className: "flex cursor-pointer items-center gap-1 text-xs font-medium", children: [_jsx(GitFork, { className: "h-3 w-3" }), t('createDrawer.forkAndPr')] })] }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.forkAndPrDescription') })] }))] })] })] }));
|
|
57
|
+
}, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "fork-and-pr", className: "flex cursor-pointer items-center gap-1 text-xs font-medium", children: [_jsx(GitFork, { className: "h-3 w-3" }), t('createDrawer.forkAndPr')] })] }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.forkAndPrDescription') })] }))] })] }), agentType && onPermissionModeChange ? (_jsx(PermissionModeRow, { agentType: agentType, permissionMode: permissionMode, onPermissionModeChange: onPermissionModeChange, isSubmitting: isSubmitting })) : null] }));
|
|
58
|
+
}
|
|
59
|
+
/** Internal sub-component for the permission mode select in the workflow options row. */
|
|
60
|
+
function PermissionModeRow({ agentType, permissionMode, onPermissionModeChange, isSubmitting, }) {
|
|
61
|
+
const { t } = useTranslation('web');
|
|
62
|
+
const [options, setOptions] = useState([]);
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
let cancelled = false;
|
|
65
|
+
getAgentPermissionOptions(agentType).then((opts) => {
|
|
66
|
+
if (!cancelled)
|
|
67
|
+
setOptions(opts);
|
|
68
|
+
});
|
|
69
|
+
return () => {
|
|
70
|
+
cancelled = true;
|
|
71
|
+
};
|
|
72
|
+
}, [agentType]);
|
|
73
|
+
if (options.length === 0)
|
|
74
|
+
return null;
|
|
75
|
+
return (_jsxs("div", { className: "border-input flex items-center gap-4 rounded-md border px-3 py-2.5", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { className: "text-muted-foreground flex w-16 shrink-0 cursor-default items-center gap-1 text-xs font-semibold tracking-wider", children: [_jsx(Shield, { className: "h-3 w-3" }), t('feature.create.permissionMode')] }) }), _jsx(TooltipContent, { side: "bottom", children: t('settings.agent.permissions.description', { agent: agentType }) })] }), _jsx("div", { className: "flex-1", children: _jsxs(Select, { value: permissionMode ?? '__default__', onValueChange: (v) => onPermissionModeChange(v === '__default__' ? undefined : v), disabled: isSubmitting, children: [_jsx(SelectTrigger, { id: "permission-mode", "data-testid": "permission-mode-select", className: "h-7 text-xs", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "__default__", children: t('feature.create.permissionModeDefault') }), options.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value)))] })] }) })] }));
|
|
55
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-options-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,sBAAsB,
|
|
1
|
+
{"version":3,"file":"workflow-options-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/workflow-options-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,sBAAsB,CA4C7C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAErD,kEAAkE;AAClE,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,kCAAkC;AAClC,eAAO,MAAM,gBAAgB,EAAE,KAI9B,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,cAAc,EAAE,KAK5B,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,eAAe,EAAE,KAM7B,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,KAKzB,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,eAAe,EAAE,KAQ7B,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,eAAe,EAAE,KAI7B,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ComponentType, SVGProps } from 'react';
|
|
2
|
-
/** Agent type values mirroring the TypeSpec AgentType enum. */
|
|
3
|
-
export type AgentTypeValue = 'claude-code' | 'codex-cli' | '
|
|
2
|
+
/** Agent type values mirroring the TypeSpec AgentType enum (UI-visible subset). */
|
|
3
|
+
export type AgentTypeValue = 'claude-code' | 'codex-cli' | 'copilot-cli' | 'cursor' | 'gemini-cli' | 'rovo-dev';
|
|
4
4
|
type IconProps = SVGProps<SVGSVGElement> & {
|
|
5
5
|
className?: string;
|
|
6
6
|
};
|