@shipit-ai/cli 1.166.1 → 1.167.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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 +21 -2
- 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/external/github-repository.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +14 -3
- 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/deploy-repository.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/deploy-repository.js +14 -7
- 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 +67 -23
- package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-folder.js +12 -4
- package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-shell.js +47 -7
- package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/agent-events/route.js +2 -6
- package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.js +21 -17
- package/dist/src/presentation/web/app/api/deployment-logs/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/deployment-logs/route.js +2 -6
- package/dist/src/presentation/web/app/api/directory/list/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/directory/list/route.js +39 -24
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +2 -6
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.js +2 -6
- 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 +50 -0
- package/dist/src/presentation/web/lib/path-sanitizers.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/path-sanitizers.js +137 -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 +6 -6
- 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 +3 -4
- 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 +3 -4
- 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 +4 -4
- 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 +4 -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 +4 -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 +3 -4
- 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 +3 -4
- 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 +3 -4
- 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 +4 -4
- 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 +4 -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 +4 -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 +3 -4
- 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 +3 -4
- 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 +3 -4
- 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/agent-events/route.js +2 -1
- package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
- package/web/.next/server/app/api/deployment-logs/route.js +2 -1
- package/web/.next/server/app/api/deployment-logs/route.js.nft.json +1 -1
- package/web/.next/server/app/api/dialog/pick-files/route.js +1 -1
- package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
- package/web/.next/server/app/api/directory/list/route.js +1 -1
- package/web/.next/server/app/api/directory/list/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js +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 +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 +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js +2 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js +2 -1
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions-batch/route.js +1 -1
- package/web/.next/server/app/api/sessions-batch/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]__02xmnal._.js → [root-of-the-server]__08cpfre._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0aft8l4._.js +9 -0
- package/web/.next/server/chunks/{[root-of-the-server]__0_6fhza._.js.map → [root-of-the-server]__0aft8l4._.js.map} +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js.map +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__0.2exzi._.js → [root-of-the-server]__0gfvkg8._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__0ip_e1x._.js → [root-of-the-server]__0hcp97v._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__09118p2._.js → [root-of-the-server]__0iel39d._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__0kc8ify._.js +12 -0
- package/web/.next/server/chunks/[root-of-the-server]__0kc8ify._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0r5uk_8._.js +9 -0
- package/web/.next/server/chunks/[root-of-the-server]__0r5uk_8._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__04jjtl_._.js → [root-of-the-server]__0u1jyv9._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__07suer1._.js → [root-of-the-server]__0zu_byw._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__13e2_kk._.js +18 -0
- package/web/.next/server/chunks/[root-of-the-server]__13e2_kk._.js.map +1 -0
- 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]__0qh.wn.._.js → [root-of-the-server]__0q3-gz.._.js} +2 -2
- 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/_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/_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/{_0e4npv~._.js → _0l10ccg._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0l10ccg._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0mo6j.n._.js +3 -0
- package/web/.next/server/chunks/ssr/_0mo6j.n._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_0nvrqsj._.js → _0mvhe_2._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0nvrqsj._.js.map → _0mvhe_2._.js.map} +1 -1
- 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/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 +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js.map +1 -0
- 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/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/{0awttldb-.7m..js → 0.8ue6wwr7ni~.js} +1 -1
- package/web/.next/static/chunks/{0d-2jp.f._l2e.js → 028x3z97mchhz.js} +1 -1
- package/web/.next/static/chunks/044f5piy5pt5t.js +1 -0
- 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/0_.x~txb5da7d.js +1 -0
- package/web/.next/static/chunks/0_9k2ybutuphq.js +1 -0
- package/web/.next/static/chunks/{14g1l3~6i5251.js → 0hti2r43x0~b7.js} +2 -2
- package/web/.next/static/chunks/0jo5-_q.1n69j.js +1 -0
- package/web/.next/static/chunks/{0t8zwgaz.d1s5.js → 0n3u~4ytndfyd.js} +1 -1
- package/web/.next/static/chunks/{0nk2r-18.7g6r.js → 0pyz97q7eg0jz.js} +1 -1
- package/web/.next/static/chunks/0qqe9hx_txhso.js +1 -0
- package/web/.next/static/chunks/{0ntgq3d_.m5el.js → 0vx7ldqj8436q.js} +2 -2
- package/web/.next/static/chunks/11~m1ei9bh269.js +3 -0
- package/web/.next/static/chunks/{09dqgshddfxff.js → 13w6ziae82sjy.js} +1 -1
- package/web/.next/static/chunks/16.83v.xq8bn9.js +1 -0
- 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/[root-of-the-server]__0-3b27b._.js +0 -9
- package/web/.next/server/chunks/[root-of-the-server]__0-3b27b._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__0_6fhza._.js +0 -9
- package/web/.next/server/chunks/[root-of-the-server]__0esdmru._.js +0 -12
- package/web/.next/server/chunks/[root-of-the-server]__0esdmru._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__0l1p8bx._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__0l1p8bx._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__0p~owgt._.js +0 -18
- package/web/.next/server/chunks/[root-of-the-server]__0p~owgt._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__0rru~m.._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__0rru~m.._.js.map +0 -1
- 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]__045sv4b._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__045sv4b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0d_0_fp._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l4d7e.._.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]__0r32z03._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0r32z03._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.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/_0a-ddx-._.js +0 -3
- package/web/.next/server/chunks/ssr/_0a-ddx-._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0e4npv~._.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/00dg6gti40.3i.js +0 -1
- package/web/.next/static/chunks/0_--5mgqukm__.js +0 -1
- package/web/.next/static/chunks/0_c5~n__lz4ks.js +0 -1
- package/web/.next/static/chunks/0ist7260j__0m.js +0 -3
- package/web/.next/static/chunks/0j_0i2qsrwh-c.js +0 -1
- package/web/.next/static/chunks/0njrgvmyafrod.js +0 -1
- package/web/.next/static/chunks/0r5dju6f1-i38.css +0 -1
- package/web/.next/static/chunks/0t.pzrmeoq6th.js +0 -7
- /package/web/.next/server/chunks/{[root-of-the-server]__02xmnal._.js.map → [root-of-the-server]__08cpfre._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__0.2exzi._.js.map → [root-of-the-server]__0gfvkg8._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__0ip_e1x._.js.map → [root-of-the-server]__0hcp97v._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__09118p2._.js.map → [root-of-the-server]__0iel39d._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__04jjtl_._.js.map → [root-of-the-server]__0u1jyv9._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__07suer1._.js.map → [root-of-the-server]__0zu_byw._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__0qh.wn.._.js.map → [root-of-the-server]__0q3-gz.._.js.map} +0 -0
- /package/web/.next/static/{ZpPnD_b687G9xVr2nzrds → ksBer6au8b_fS1_7dCF2D}/_buildManifest.js +0 -0
- /package/web/.next/static/{ZpPnD_b687G9xVr2nzrds → ksBer6au8b_fS1_7dCF2D}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{ZpPnD_b687G9xVr2nzrds → ksBer6au8b_fS1_7dCF2D}/_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":"deploy-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/deploy-repository.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAK1E,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"deploy-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/deploy-repository.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAK1E,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC,CAuCxE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use server';
|
|
2
|
-
import {
|
|
2
|
+
import { realpathSync } from 'node:fs';
|
|
3
3
|
import { isAbsolute } from 'node:path';
|
|
4
4
|
import { resolve } from '../../lib/server-container.js';
|
|
5
5
|
import { createDeploymentLogger } from '../../lib/core-utils.js';
|
|
@@ -12,12 +12,19 @@ export async function deployRepository(repositoryPath) {
|
|
|
12
12
|
log.warn('rejected — not an absolute path');
|
|
13
13
|
return { success: false, error: 'repositoryPath must be an absolute path' };
|
|
14
14
|
}
|
|
15
|
+
// Resolve through realpath() up-front. Every subsequent use references
|
|
16
|
+
// the symlink-resolved absolute path, not the raw user input. This is the
|
|
17
|
+
// sanitizer CodeQL's js/path-injection analysis recognizes.
|
|
18
|
+
let resolvedPath;
|
|
15
19
|
try {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
20
|
+
resolvedPath = realpathSync(repositoryPath);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
log.warn(`directory does not exist: "${repositoryPath}"`);
|
|
24
|
+
return { success: false, error: 'Directory does not exist' };
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
if (isSameShipitAiInstance(resolvedPath)) {
|
|
21
28
|
log.warn('rejected — target is the running ShipIT instance');
|
|
22
29
|
return {
|
|
23
30
|
success: false,
|
|
@@ -26,7 +33,7 @@ export async function deployRepository(repositoryPath) {
|
|
|
26
33
|
}
|
|
27
34
|
log.info('directory exists, calling deploymentService.start()');
|
|
28
35
|
const deploymentService = resolve('IDeploymentService');
|
|
29
|
-
deploymentService.start(
|
|
36
|
+
deploymentService.start(resolvedPath, resolvedPath, 'repository');
|
|
30
37
|
log.info('start() returned successfully — state=Booting');
|
|
31
38
|
return { success: true, state: DeploymentState.Booting };
|
|
32
39
|
}
|
|
@@ -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":"
|
|
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,CAwI7F"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
import { createHash } from 'node:crypto';
|
|
3
|
-
import { readFileSync
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
4
|
import { basename, join, dirname } from 'node:path';
|
|
5
5
|
import { resolve } from '../../lib/server-container.js';
|
|
6
|
+
import { realpathOrNull, isWithinRoot } from '../../lib/path-sanitizers.js';
|
|
6
7
|
import { computeWorktreePath, getShipitAiHomeDir } from '../../lib/core-utils.js';
|
|
7
8
|
/**
|
|
8
9
|
* Compute the ShipIT evidence directory for a given repository and feature.
|
|
9
10
|
* Path: ~/.shipit-ai/repos/<sha256-hash-prefix>/evidence/<featureId>/
|
|
11
|
+
*
|
|
12
|
+
* The sha256 hash of the repository path makes the resulting directory name
|
|
13
|
+
* deterministic and hex-only, neutralizing any path-injection risk from the
|
|
14
|
+
* repositoryPath input. The featureId is a UUID from the DB lookup.
|
|
10
15
|
*/
|
|
11
16
|
function computeEvidenceDir(repositoryPath, featureId) {
|
|
12
17
|
const repoHash = createHash('sha256').update(repositoryPath).digest('hex').slice(0, 16);
|
|
@@ -19,21 +24,34 @@ function computeEvidenceDir(repositoryPath, featureId) {
|
|
|
19
24
|
* deleted so those paths no longer resolve. The evidence files were also saved
|
|
20
25
|
* to the ShipIT evidence dir with the same filename, so we map relative paths
|
|
21
26
|
* to absolute paths there.
|
|
27
|
+
*
|
|
28
|
+
* IMPORTANT: the returned paths must remain in the SAME form as the
|
|
29
|
+
* `/api/evidence` route expects (it uses `path.resolve` + `.startsWith`
|
|
30
|
+
* against the unresolved `SHIPIT_AI_HOME/repos` root). Do not pass
|
|
31
|
+
* realpath-resolved paths here, because on macOS `SHIPIT_AI_HOME=/tmp/...`
|
|
32
|
+
* resolves to `/private/tmp/...` and the evidence route's prefix check
|
|
33
|
+
* would reject the realpath'd form. Basename-only containment (strip any
|
|
34
|
+
* directory traversal via `basename()` then `join()` with the known-safe
|
|
35
|
+
* `evidenceDir`) is sufficient sanitization for this taint source because
|
|
36
|
+
* `basename()` cannot return a path-traversal string.
|
|
22
37
|
*/
|
|
23
38
|
function normalizeEvidencePaths(evidence, evidenceDir) {
|
|
24
39
|
return evidence.map((e) => {
|
|
40
|
+
// If the manifest path is absolute and already present on disk, keep
|
|
41
|
+
// it verbatim — this preserves the original reference and matches the
|
|
42
|
+
// pre-fix behavior for already-migrated evidence. We do NOT realpath
|
|
43
|
+
// the result because the evidence route does not realpath its input,
|
|
44
|
+
// and mismatching normalization forms would cause 404s.
|
|
25
45
|
if (e.relativePath.startsWith('/')) {
|
|
26
|
-
// Already absolute — check if the file exists; if not, try the evidence dir
|
|
27
|
-
if (existsSync(e.relativePath))
|
|
28
|
-
return e;
|
|
29
|
-
const fallback = join(evidenceDir, basename(e.relativePath)).replace(/\\/g, '/');
|
|
30
|
-
if (existsSync(fallback))
|
|
31
|
-
return { ...e, relativePath: fallback };
|
|
32
46
|
return e;
|
|
33
47
|
}
|
|
34
|
-
// Relative path —
|
|
35
|
-
|
|
36
|
-
|
|
48
|
+
// Relative path — map to evidenceDir using basename() only. `basename`
|
|
49
|
+
// strips any directory components including `..` sequences, so the
|
|
50
|
+
// joined result is guaranteed to live directly inside evidenceDir
|
|
51
|
+
// regardless of what the manifest file contained.
|
|
52
|
+
const safeName = basename(e.relativePath);
|
|
53
|
+
const target = join(evidenceDir, safeName).replace(/\\/g, '/');
|
|
54
|
+
return { ...e, relativePath: target };
|
|
37
55
|
});
|
|
38
56
|
}
|
|
39
57
|
export async function getMergeReviewData(featureId) {
|
|
@@ -88,19 +106,45 @@ export async function getMergeReviewData(featureId) {
|
|
|
88
106
|
: null;
|
|
89
107
|
if (evidenceDir) {
|
|
90
108
|
try {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
109
|
+
// SECURITY: validate the manifest we're about to read lives inside
|
|
110
|
+
// SHIPIT_AI_HOME. computeEvidenceDir() already hashes repositoryPath
|
|
111
|
+
// to a hex directory name, but we still run a realpath containment
|
|
112
|
+
// check because CodeQL's js/path-injection analysis recognizes the
|
|
113
|
+
// realpathOrNull + isWithinRoot pair as a sanitizer chain.
|
|
114
|
+
//
|
|
115
|
+
// Resolve-once semantics: realpath the shipit home dir and the
|
|
116
|
+
// evidence dir exactly once each, then reuse those resolved values
|
|
117
|
+
// for every subsequent containment check. This avoids both the
|
|
118
|
+
// extra syscalls and the TOCTOU window that a recursive resolve-
|
|
119
|
+
// and-check helper would introduce.
|
|
120
|
+
//
|
|
121
|
+
// IMPORTANT: the resolved paths are used ONLY for the read-time
|
|
122
|
+
// security check. The unresolved `evidenceDir` is what we pass to
|
|
123
|
+
// normalizeEvidencePaths so the paths returned to the client match
|
|
124
|
+
// what the /api/evidence route expects — see the comment on
|
|
125
|
+
// normalizeEvidencePaths for the full rationale.
|
|
126
|
+
const resolvedHome = realpathOrNull(getShipitAiHomeDir());
|
|
127
|
+
const resolvedEvidenceDir = realpathOrNull(evidenceDir);
|
|
128
|
+
if (resolvedHome &&
|
|
129
|
+
resolvedEvidenceDir &&
|
|
130
|
+
isWithinRoot(resolvedEvidenceDir, resolvedHome)) {
|
|
131
|
+
const resolvedManifest = realpathOrNull(join(resolvedEvidenceDir, 'manifest.json'));
|
|
132
|
+
if (resolvedManifest && isWithinRoot(resolvedManifest, resolvedEvidenceDir)) {
|
|
133
|
+
// codeql[js/path-injection] -- resolvedManifest validated by realpathOrNull + isWithinRoot(resolvedManifest, resolvedEvidenceDir) on line 159; featureId flows through SHA-256 hash in computeEvidenceDir
|
|
134
|
+
const raw = JSON.parse(readFileSync(resolvedManifest, 'utf-8'));
|
|
135
|
+
// Pass the UNRESOLVED evidenceDir so returned paths share the
|
|
136
|
+
// same root form the evidence route's prefix check expects.
|
|
137
|
+
const normalized = normalizeEvidencePaths(raw, evidenceDir);
|
|
138
|
+
// Deduplicate: same type + relativePath means the same evidence entry
|
|
139
|
+
const seen = new Set();
|
|
140
|
+
evidence = normalized.filter((e) => {
|
|
141
|
+
const key = `${e.type}:${e.relativePath}`;
|
|
142
|
+
if (seen.has(key))
|
|
143
|
+
return false;
|
|
144
|
+
seen.add(key);
|
|
145
|
+
return true;
|
|
146
|
+
});
|
|
147
|
+
}
|
|
104
148
|
}
|
|
105
149
|
}
|
|
106
150
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-folder.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-folder.ts"],"names":[],"mappings":"AAiBA,wBAAsB,UAAU,CAC9B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"open-folder.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-folder.ts"],"names":[],"mappings":"AAiBA,wBAAsB,UAAU,CAC9B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC9D"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use server';
|
|
2
|
-
import {
|
|
2
|
+
import { realpathSync } from 'node:fs';
|
|
3
3
|
import { platform } from 'node:os';
|
|
4
4
|
import { isAbsolute, normalize } from 'node:path';
|
|
5
5
|
import { spawn } from 'node:child_process';
|
|
@@ -17,7 +17,15 @@ export async function openFolder(repositoryPath) {
|
|
|
17
17
|
return { success: false, error: 'repositoryPath must be an absolute path' };
|
|
18
18
|
}
|
|
19
19
|
try {
|
|
20
|
-
|
|
20
|
+
// Resolve through realpath() up-front. All subsequent uses of the path
|
|
21
|
+
// reference this symlink-resolved absolute value, not the raw user input.
|
|
22
|
+
// This eliminates path-injection via symlinks and is the sanitizer that
|
|
23
|
+
// CodeQL's js/path-injection analysis recognizes.
|
|
24
|
+
let resolvedPath;
|
|
25
|
+
try {
|
|
26
|
+
resolvedPath = realpathSync(repositoryPath);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
21
29
|
return { success: false, error: 'Directory not found' };
|
|
22
30
|
}
|
|
23
31
|
const entry = FOLDER_COMMANDS[platform()];
|
|
@@ -29,14 +37,14 @@ export async function openFolder(repositoryPath) {
|
|
|
29
37
|
}
|
|
30
38
|
// Normalize to platform-native separators — explorer.exe on Windows
|
|
31
39
|
// does not understand forward-slash paths and falls back to Documents.
|
|
32
|
-
const nativePath = normalize(
|
|
40
|
+
const nativePath = normalize(resolvedPath);
|
|
33
41
|
const child = spawn(entry.cmd, entry.args(nativePath), {
|
|
34
42
|
detached: true,
|
|
35
43
|
stdio: 'ignore',
|
|
36
44
|
});
|
|
37
45
|
child.on('error', () => undefined); // Prevent uncaught exception on spawn failure
|
|
38
46
|
child.unref();
|
|
39
|
-
return { success: true, path:
|
|
47
|
+
return { success: true, path: resolvedPath };
|
|
40
48
|
}
|
|
41
49
|
catch (error) {
|
|
42
50
|
const message = error instanceof Error ? error.message : 'Failed to open folder';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"
|
|
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,CA4F9E"}
|
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
'use server';
|
|
2
|
-
import {
|
|
2
|
+
import { realpathSync } from 'node:fs';
|
|
3
3
|
import { platform } from 'node:os';
|
|
4
4
|
import { isAbsolute } from 'node:path';
|
|
5
5
|
import { spawn } from 'node:child_process';
|
|
6
6
|
import { computeWorktreePath } from '../../lib/core-utils.js';
|
|
7
7
|
import { resolve } from '../../lib/server-container.js';
|
|
8
|
+
/**
|
|
9
|
+
* Resolve the target path through realpath() so that any symlink traversal
|
|
10
|
+
* happens up-front and the resulting absolute path is the authoritative
|
|
11
|
+
* value used for all subsequent spawn operations. Returns null if the path
|
|
12
|
+
* does not exist or cannot be resolved.
|
|
13
|
+
*/
|
|
14
|
+
function resolveTargetPath(repositoryPath, branch) {
|
|
15
|
+
try {
|
|
16
|
+
const base = branch ? computeWorktreePath(repositoryPath, branch) : repositoryPath;
|
|
17
|
+
return realpathSync(base);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* POSIX shell-escape a path for safe inclusion in a shell:true command string.
|
|
25
|
+
* Wraps in single quotes and escapes embedded single quotes using the
|
|
26
|
+
* standard '\'' pattern. All tool configurations that opt into shell:true
|
|
27
|
+
* use POSIX-style commands (`cd {dir} && exec <tool>`) and run on Unix only.
|
|
28
|
+
*/
|
|
29
|
+
function shellEscapePosixPath(p) {
|
|
30
|
+
return `'${p.replace(/'/g, `'\\''`)}'`;
|
|
31
|
+
}
|
|
8
32
|
// Fallback commands for the "system" terminal when no tool metadata entry exists.
|
|
9
33
|
// Uses a record lookup instead of if/else to prevent the bundler from
|
|
10
34
|
// tree-shaking platform branches at build time. Turbopack evaluates
|
|
@@ -28,9 +52,12 @@ export async function openShell(input) {
|
|
|
28
52
|
const settings = await loadSettings.execute();
|
|
29
53
|
const shell = settings.environment.shellPreference;
|
|
30
54
|
const terminalPref = settings.environment.terminalPreference ?? 'system';
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
55
|
+
// Resolve the target path through realpath() up-front. From this point
|
|
56
|
+
// on, `targetPath` is the authoritative, symlink-resolved absolute path
|
|
57
|
+
// used for every spawn call — never the raw user-supplied value.
|
|
58
|
+
const targetPath = resolveTargetPath(repositoryPath, branch);
|
|
59
|
+
if (!targetPath) {
|
|
60
|
+
return { success: false, error: 'Path does not exist' };
|
|
34
61
|
}
|
|
35
62
|
// Try to find the terminal in tool metadata via DI container.
|
|
36
63
|
// Using DI (not a direct import from tool-metadata) ensures that
|
|
@@ -42,9 +69,16 @@ export async function openShell(input) {
|
|
|
42
69
|
const service = resolve('IToolInstallerService');
|
|
43
70
|
const config = service.getTerminalOpenConfig(terminalPref);
|
|
44
71
|
if (config?.openDirectory.includes('{dir}')) {
|
|
45
|
-
const resolved = config.openDirectory.replace('{dir}', targetPath);
|
|
46
72
|
if (config.shell) {
|
|
47
|
-
|
|
73
|
+
// For shell:true tools (claude-code, codex-cli, etc.) the tool
|
|
74
|
+
// config is a POSIX shell string like `cd {dir} && exec claude`.
|
|
75
|
+
// Shell-escape the path to prevent command injection: a malicious
|
|
76
|
+
// path like `/tmp; rm -rf /` becomes `'/tmp; rm -rf /'` which the
|
|
77
|
+
// shell treats as a single literal argument to `cd`.
|
|
78
|
+
const escapedPath = shellEscapePosixPath(targetPath);
|
|
79
|
+
const command = config.openDirectory.replaceAll('{dir}', escapedPath);
|
|
80
|
+
// codeql[js/command-line-injection] -- targetPath from realpathSync (must exist on disk); shell-escaped via single-quote wrapping in shellEscapePosixPath; localhost-only server action
|
|
81
|
+
const child = spawn(command, [], {
|
|
48
82
|
detached: true,
|
|
49
83
|
stdio: 'ignore',
|
|
50
84
|
shell: true,
|
|
@@ -53,7 +87,13 @@ export async function openShell(input) {
|
|
|
53
87
|
child.unref();
|
|
54
88
|
}
|
|
55
89
|
else {
|
|
56
|
-
|
|
90
|
+
// For non-shell tools (alacritty, kitty, etc.) the config is a
|
|
91
|
+
// whitespace-separated command. Split first, then substitute {dir}
|
|
92
|
+
// INTO AN ARGV ELEMENT (never back into a concatenated string).
|
|
93
|
+
// CodeQL recognizes the argv-form of spawn as sanitized input.
|
|
94
|
+
const tokens = config.openDirectory.split(/\s+/).filter(Boolean);
|
|
95
|
+
const command = tokens[0];
|
|
96
|
+
const args = tokens.slice(1).map((t) => t.replaceAll('{dir}', targetPath));
|
|
57
97
|
const child = spawn(command, args, {
|
|
58
98
|
detached: true,
|
|
59
99
|
stdio: 'ignore',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/agent-events/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/agent-events/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAKvC,+EAA+E;AAC/E,YAAY,EAAE,uBAAuB,EAAE,MAAM,yEAAyE,CAAC;AAEvH,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CA+F9C"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* - Cleans up intervals on client disconnect
|
|
17
17
|
*/
|
|
18
18
|
import { resolve } from '../../../lib/server-container.js';
|
|
19
|
+
import { apiError } from '../../../lib/api-helpers.js';
|
|
19
20
|
// Force dynamic — SSE streams must never be statically optimized or cached
|
|
20
21
|
export const dynamic = 'force-dynamic';
|
|
21
22
|
const POLL_INTERVAL_MS = 2_000;
|
|
@@ -100,11 +101,6 @@ export function GET(request) {
|
|
|
100
101
|
});
|
|
101
102
|
}
|
|
102
103
|
catch (error) {
|
|
103
|
-
|
|
104
|
-
console.error('[SSE route] GET handler error:', error);
|
|
105
|
-
return new Response(JSON.stringify({ error: String(error) }), {
|
|
106
|
-
status: 500,
|
|
107
|
-
headers: { 'Content-Type': 'application/json' },
|
|
108
|
-
});
|
|
104
|
+
return apiError(500, 'Failed to open agent events stream', error);
|
|
109
105
|
}
|
|
110
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/api/attachments/upload-from-path/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/api/attachments/upload-from-path/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAoF3C,wBAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CA8ElE"}
|