@shipit-ai/cli 1.164.2 → 1.165.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 +3 -7
- package/dist/packages/core/src/application/ports/output/services/environment-detector.service.d.ts +54 -0
- package/dist/packages/core/src/application/ports/output/services/environment-detector.service.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/environment-detector.service.js +8 -0
- 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/tool-metadata-service.interface.d.ts +5 -1
- package/dist/packages/core/src/application/ports/output/services/tool-metadata-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/configure-agent.use-case.d.ts +1 -1
- package/dist/packages/core/src/application/use-cases/agents/configure-agent.use-case.js +1 -1
- package/dist/packages/core/src/application/use-cases/agents/stop-agent-run.use-case.d.ts +1 -1
- package/dist/packages/core/src/application/use-cases/agents/stop-agent-run.use-case.js +1 -1
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts +1 -1
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +1 -1
- package/dist/packages/core/src/application/use-cases/settings/detect-environment-defaults.use-case.d.ts +18 -0
- package/dist/packages/core/src/application/use-cases/settings/detect-environment-defaults.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/settings/detect-environment-defaults.use-case.js +40 -0
- package/dist/packages/core/src/application/use-cases/settings/index.d.ts +1 -0
- package/dist/packages/core/src/application/use-cases/settings/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/settings/index.js +1 -0
- package/dist/packages/core/src/application/use-cases/settings/initialize-settings.use-case.d.ts +10 -4
- package/dist/packages/core/src/application/use-cases/settings/initialize-settings.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/settings/initialize-settings.use-case.js +34 -7
- package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts +1 -1
- package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts +18 -2
- 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 +16 -5
- package/dist/packages/core/src/index.d.ts +2 -2
- package/dist/packages/core/src/index.js +2 -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/di/modules/use-cases.module.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/modules/use-cases.module.js +2 -0
- package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.js +4 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/plan.fixture.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/research.fixture.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.d.ts +2 -2
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.js +5 -5
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.d.ts +2 -2
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.js +6 -6
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/fixtures/tasks.fixture.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +1 -1
- package/dist/packages/core/src/infrastructure/services/environment-detector.service.d.ts +38 -0
- package/dist/packages/core/src/infrastructure/services/environment-detector.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/environment-detector.service.js +196 -0
- package/dist/packages/core/src/infrastructure/services/filesystem/shipit-ai-directory.service.d.ts +2 -2
- package/dist/packages/core/src/infrastructure/services/filesystem/shipit-ai-directory.service.js +4 -4
- package/dist/packages/core/src/infrastructure/services/git/pr-branding.d.ts +4 -4
- package/dist/packages/core/src/infrastructure/services/git/pr-branding.js +4 -4
- package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.js +7 -7
- package/dist/packages/core/src/infrastructure/services/port.service.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/port.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/port.service.js +1 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts +6 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.js +7 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.service.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.service.js +4 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/CLAUDE.md +2 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/bash.json +20 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/codex-cli.json +31 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/fish.json +19 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/powershell.json +24 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zsh.json +19 -0
- package/dist/src/presentation/cli/commands/agent/approve.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/agent/approve.command.js +1 -1
- package/dist/src/presentation/cli/commands/agent/delete.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/agent/delete.command.js +1 -1
- package/dist/src/presentation/cli/commands/agent/index.d.ts +6 -6
- package/dist/src/presentation/cli/commands/agent/index.js +6 -6
- package/dist/src/presentation/cli/commands/agent/logs.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/agent/logs.command.js +3 -3
- package/dist/src/presentation/cli/commands/agent/ls.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/agent/ls.command.js +1 -1
- package/dist/src/presentation/cli/commands/agent/reject.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/agent/reject.command.js +1 -1
- package/dist/src/presentation/cli/commands/agent/show.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/agent/show.command.js +1 -1
- package/dist/src/presentation/cli/commands/agent/stop.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/agent/stop.command.js +1 -1
- package/dist/src/presentation/cli/commands/daemon/start-daemon.d.ts +4 -4
- package/dist/src/presentation/cli/commands/daemon/start-daemon.js +4 -4
- package/dist/src/presentation/cli/commands/daemon/stop-daemon.d.ts +5 -5
- package/dist/src/presentation/cli/commands/daemon/stop-daemon.js +5 -5
- package/dist/src/presentation/cli/commands/feat/adopt.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/feat/adopt.command.js +3 -3
- package/dist/src/presentation/cli/commands/feat/approve.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/feat/approve.command.js +1 -1
- package/dist/src/presentation/cli/commands/feat/archive.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/feat/archive.command.js +3 -3
- package/dist/src/presentation/cli/commands/feat/del.command.d.ts +5 -5
- package/dist/src/presentation/cli/commands/feat/del.command.js +5 -5
- package/dist/src/presentation/cli/commands/feat/index.d.ts +4 -4
- package/dist/src/presentation/cli/commands/feat/index.js +4 -4
- package/dist/src/presentation/cli/commands/feat/logs.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/feat/logs.command.js +3 -3
- package/dist/src/presentation/cli/commands/feat/ls.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/feat/ls.command.js +3 -3
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/feat/new.command.js +4 -4
- package/dist/src/presentation/cli/commands/feat/reject.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/feat/reject.command.js +1 -1
- package/dist/src/presentation/cli/commands/feat/resume.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/feat/resume.command.js +1 -1
- package/dist/src/presentation/cli/commands/feat/review.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/feat/review.command.js +1 -1
- package/dist/src/presentation/cli/commands/feat/show.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/show.command.js +4 -3
- package/dist/src/presentation/cli/commands/feat/start.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/feat/start.command.js +1 -1
- package/dist/src/presentation/cli/commands/feat/unarchive.command.d.ts +2 -2
- package/dist/src/presentation/cli/commands/feat/unarchive.command.js +2 -2
- package/dist/src/presentation/cli/commands/ide-open.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/ide-open.command.js +1 -1
- package/dist/src/presentation/cli/commands/log-viewer.d.ts +1 -1
- package/dist/src/presentation/cli/commands/log-viewer.js +1 -1
- package/dist/src/presentation/cli/commands/repo/add.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/repo/add.command.js +3 -3
- package/dist/src/presentation/cli/commands/repo/index.d.ts +4 -4
- package/dist/src/presentation/cli/commands/repo/index.js +4 -4
- package/dist/src/presentation/cli/commands/repo/ls.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/repo/ls.command.js +1 -1
- package/dist/src/presentation/cli/commands/repo/show.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/repo/show.command.js +1 -1
- package/dist/src/presentation/cli/commands/restart.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/restart.command.js +5 -5
- package/dist/src/presentation/cli/commands/run.command.d.ts +5 -5
- package/dist/src/presentation/cli/commands/run.command.js +5 -5
- package/dist/src/presentation/cli/commands/session/index.d.ts +3 -3
- package/dist/src/presentation/cli/commands/session/index.js +3 -3
- package/dist/src/presentation/cli/commands/session/ls.command.d.ts +6 -6
- package/dist/src/presentation/cli/commands/session/ls.command.js +6 -6
- package/dist/src/presentation/cli/commands/session/show.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/session/show.command.js +3 -3
- package/dist/src/presentation/cli/commands/settings/agent.command.d.ts +4 -4
- package/dist/src/presentation/cli/commands/settings/agent.command.js +7 -7
- package/dist/src/presentation/cli/commands/settings/ide.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/settings/ide.command.js +6 -6
- package/dist/src/presentation/cli/commands/settings/index.d.ts +10 -10
- package/dist/src/presentation/cli/commands/settings/index.js +10 -10
- package/dist/src/presentation/cli/commands/settings/init.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/settings/init.command.js +6 -6
- package/dist/src/presentation/cli/commands/settings/language.command.d.ts +2 -2
- package/dist/src/presentation/cli/commands/settings/language.command.js +3 -3
- package/dist/src/presentation/cli/commands/settings/model.command.d.ts +2 -2
- package/dist/src/presentation/cli/commands/settings/model.command.js +3 -3
- package/dist/src/presentation/cli/commands/settings/show.command.d.ts +4 -4
- package/dist/src/presentation/cli/commands/settings/show.command.js +7 -7
- package/dist/src/presentation/cli/commands/settings/workflow.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/settings/workflow.command.js +6 -6
- package/dist/src/presentation/cli/commands/start.command.d.ts +3 -3
- package/dist/src/presentation/cli/commands/start.command.js +5 -5
- package/dist/src/presentation/cli/commands/status.command.d.ts +4 -4
- package/dist/src/presentation/cli/commands/status.command.js +4 -4
- package/dist/src/presentation/cli/commands/stop.command.d.ts +2 -2
- package/dist/src/presentation/cli/commands/stop.command.js +2 -2
- package/dist/src/presentation/cli/commands/tools.command.d.ts +1 -1
- package/dist/src/presentation/cli/commands/tools.command.js +1 -1
- package/dist/src/presentation/cli/commands/ui.command.d.ts +4 -4
- package/dist/src/presentation/cli/commands/ui.command.js +7 -7
- package/dist/src/presentation/cli/commands/upgrade.command.d.ts +2 -2
- package/dist/src/presentation/cli/commands/upgrade.command.js +2 -2
- package/dist/src/presentation/cli/commands/version.command.d.ts +2 -2
- package/dist/src/presentation/cli/commands/version.command.js +2 -2
- package/dist/src/presentation/cli/index.d.ts +3 -3
- package/dist/src/presentation/cli/index.js +4 -4
- package/dist/src/presentation/cli/ui/index.d.ts +1 -1
- package/dist/src/presentation/cli/ui/index.js +1 -1
- package/dist/src/presentation/tui/themes/shipit-ai.theme.d.ts +4 -4
- package/dist/src/presentation/tui/themes/shipit-ai.theme.js +4 -4
- 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 +69 -24
- package/dist/src/presentation/web/app/actions/deploy-feature.js +2 -2
- package/dist/src/presentation/web/app/actions/deploy-repository.js +2 -2
- package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts +1 -0
- 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 +28 -3
- package/dist/src/presentation/web/app/actions/get-available-editors.d.ts +14 -0
- package/dist/src/presentation/web/app/actions/get-available-editors.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-available-editors.js +24 -0
- package/dist/src/presentation/web/app/actions/get-available-shells.d.ts +14 -0
- package/dist/src/presentation/web/app/actions/get-available-shells.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-available-shells.js +22 -0
- package/dist/src/presentation/web/app/actions/get-merge-review-data.js +3 -3
- package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
- package/dist/src/presentation/web/app/layout.js +4 -13
- package/dist/src/presentation/web/app/settings/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/settings/page.js +6 -2
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.js +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.js +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.js +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +2 -2
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +8 -8
- package/dist/src/presentation/web/components/common/github-import-dialog/github-import-dialog.js +1 -1
- package/dist/src/presentation/web/components/common/inline-attachments/inline-attachments.stories.js +5 -5
- package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +8 -8
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -1
- package/dist/src/presentation/web/components/common/shipit-ai-logo/index.d.ts +2 -2
- package/dist/src/presentation/web/components/common/shipit-ai-logo/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/shipit-ai-logo/index.js +1 -1
- package/dist/src/presentation/web/components/common/shipit-ai-logo/{shep-logo.d.ts → shipit-ai-logo.d.ts} +1 -1
- package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.js +8 -0
- package/dist/src/presentation/web/components/common/shipit-ai-logo/{shep-logo.stories.d.ts → shipit-ai-logo.stories.d.ts} +2 -2
- package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/shipit-ai-logo/{shep-logo.stories.js → shipit-ai-logo.stories.js} +1 -1
- package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.js +2 -2
- package/dist/src/presentation/web/components/features/chat/ChatSheet.js +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +1 -1
- package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +6 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +19 -19
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +13 -2
- package/dist/src/presentation/web/components/features/settings/database-settings-section.js +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts +5 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +33 -27
- package/dist/src/presentation/web/components/features/tools/tool-card.js +1 -1
- package/dist/src/presentation/web/components/features/version/version-page-client.js +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +3 -3
- package/dist/src/presentation/web/components/ui/sidebar.stories.js +1 -1
- package/dist/src/presentation/web/lib/session-scanner.js +2 -2
- package/dist/src/presentation/web/lib/version.d.ts +1 -1
- package/dist/src/presentation/web/lib/version.js +1 -1
- package/dist/src/presentation/web/{middleware.d.ts → proxy.d.ts} +4 -4
- package/dist/src/presentation/web/proxy.d.ts.map +1 -0
- package/dist/src/presentation/web/{middleware.js → proxy.js} +3 -3
- package/dist/src/presentation/web/types/theme.d.ts +1 -1
- package/dist/src/presentation/web/types/theme.js +1 -1
- package/dist/translations/ar/cli.json +17 -17
- package/dist/translations/ar/tui.json +2 -2
- package/dist/translations/ar/web.json +7 -5
- package/dist/translations/de/cli.json +17 -17
- package/dist/translations/de/tui.json +2 -2
- package/dist/translations/de/web.json +7 -5
- package/dist/translations/en/cli.json +17 -17
- package/dist/translations/en/tui.json +2 -2
- package/dist/translations/en/web.json +7 -5
- package/dist/translations/es/cli.json +17 -17
- package/dist/translations/es/tui.json +2 -2
- package/dist/translations/es/web.json +7 -5
- package/dist/translations/fr/cli.json +17 -17
- package/dist/translations/fr/tui.json +2 -2
- package/dist/translations/fr/web.json +7 -5
- package/dist/translations/he/cli.json +17 -17
- package/dist/translations/he/tui.json +2 -2
- package/dist/translations/he/web.json +7 -5
- package/dist/translations/pt/cli.json +17 -17
- package/dist/translations/pt/tui.json +2 -2
- package/dist/translations/pt/web.json +7 -5
- package/dist/translations/ru/cli.json +17 -17
- package/dist/translations/ru/tui.json +2 -2
- package/dist/translations/ru/web.json +7 -5
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +5 -5
- 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/build-manifest.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 -1
- 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/build-manifest.json +2 -2
- 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 -1
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -1
- 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/build-manifest.json +2 -2
- 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 +2 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
- 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 +2 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/build-manifest.json +2 -2
- 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 -1
- 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/build-manifest.json +2 -2
- 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 -1
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js +2 -1
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/create/page.js +2 -1
- 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/build-manifest.json +2 -2
- 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 +2 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
- 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 +2 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/page.js +2 -1
- 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/build-manifest.json +2 -2
- 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 -1
- 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/build-manifest.json +2 -2
- 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 -1
- 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/page/build-manifest.json +2 -2
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/_not-found/page.js +2 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/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/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/build-manifest.json +2 -2
- package/web/.next/server/app/settings/page/server-reference-manifest.json +42 -18
- package/web/.next/server/app/settings/page.js +3 -2
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/skills/page.js +2 -2
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js +2 -2
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/version/page.js +2 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/[externals]__11vad82._.js +3 -0
- package/web/.next/server/chunks/[externals]__11vad82._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0.2exzi._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__02xmnal._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__04jjtl_._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__07suer1._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__09118p2._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0_.w-eb._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0ip_e1x._.js.map +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__0ob3z53._.js → [root-of-the-server]__0l1p8bx._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__0ob3z53._.js.map → [root-of-the-server]__0l1p8bx._.js.map} +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__13ni_ow._.js +20 -0
- package/web/.next/server/chunks/[root-of-the-server]__13ni_ow._.js.map +1 -0
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js +3 -0
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_00~eq5i.js.map +1 -0
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js +3 -0
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_0979_c..js.map +1 -0
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.js +3 -0
- package/web/.next/server/chunks/ssr/0j.8_web__next-internal_server_app_(dashboard)_chat_page_actions_0dqll_1.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/11es_next_dist_0e36~wi._.js +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_global-chat-drawer-client_tsx_03s32.q._.js +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_global-chat-drawer-client_tsx_03s32.q._.js.map +1 -1
- 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]__01~y8wi._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__01~y8wi._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0np51e2._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0np51e2._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0qh.wn.._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0uxn6-j._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0uxn6-j._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0~h382a._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0~h382a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11-~i9u._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11-~i9u._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12g8h3_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12qqi.~._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12qqi.~._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_13e1_1b._.js → _0.gy.n8._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_13e1_1b._.js.map → _0.gy.n8._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_0sgeiju._.js → _01mq~sm._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0sgeiju._.js.map → _01mq~sm._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0e5cv3q._.js +1 -1
- package/web/.next/server/chunks/ssr/_0e5cv3q._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0ez.1o4._.js +1 -1
- package/web/.next/server/chunks/ssr/_0ez.1o4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_05h68we._.js → _0jk5q_z._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_05h68we._.js.map → _0jk5q_z._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0jpbsh_._.js +4 -0
- package/web/.next/server/chunks/ssr/_0jpbsh_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0n.xy38._.js +3 -0
- package/web/.next/server/chunks/ssr/_0n.xy38._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0rvaoj4._.js +3 -0
- package/web/.next/server/chunks/ssr/_0rvaoj4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0v.yfmg._.js +1 -1
- package/web/.next/server/chunks/ssr/_0v.yfmg._.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/_11kuznh._.js +1 -1
- package/web/.next/server/chunks/ssr/_11kuznh._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0ts70ov._.js → _13bl-l1._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0ts70ov._.js.map → _13bl-l1._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_13euo-f._.js +1 -1
- package/web/.next/server/chunks/ssr/_13euo-f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_0.e4~xc._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_00dvh.m._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js +5 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_06b6~lt._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_08fy2mf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_0f~udu1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js +5 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_0qys821._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_0q~dt0o._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_11jrkxt._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_1199d3x.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_0m2jqxx.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_0krkh_0.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_load-settings_ts_0b8f3pf._.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_0sk2qdt._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_0sk2qdt._.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/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js.map +1 -1
- package/web/.next/server/functions-config-manifest.json +11 -1
- package/web/.next/server/middleware/middleware-manifest.json +1 -27
- package/web/.next/server/middleware-build-manifest.js +5 -5
- package/web/.next/server/middleware-manifest.json +2 -32
- package/web/.next/server/middleware.js +5 -0
- package/web/.next/server/middleware.js.map +5 -0
- package/web/.next/server/middleware.js.nft.json +1 -0
- 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 +80 -56
- package/web/.next/static/chunks/00racug7sobut.js +1 -0
- package/web/.next/static/chunks/06sdx5zm71_u5.js +1 -0
- package/web/.next/static/chunks/{122mzkbtrj4-k.js → 071_2_.sfp-im.js} +2 -2
- package/web/.next/static/chunks/{0g-so1fagegtp.js → 08iq.j3rbmhbm.js} +1 -1
- package/web/.next/static/chunks/{0bdtgeoys8bq..js → 08iuksm8rvb09.js} +1 -1
- package/web/.next/static/chunks/{01~tm1-qp0baa.js → 08se-_opmk~.7.js} +1 -1
- package/web/.next/static/chunks/{17jsatqy81xc..js → 0icjwdqytqa_8.js} +2 -2
- package/web/.next/static/chunks/0r5dju6f1-i38.css +1 -0
- package/web/.next/static/chunks/{13xg0bjtuso~r.js → 0riti1bs-erm~.js} +1 -1
- package/web/.next/static/chunks/{0.2owry_sk_ak.js → 0s-e-ekdbgoqa.js} +1 -1
- package/web/.next/static/chunks/0t_48qc0x7bhs.js +3 -0
- package/web/.next/static/chunks/{0qz02~wj25f-f.js → 0u5.s.lv2bae5.js} +1 -1
- package/web/.next/static/chunks/{12pwrbjphv3z7.js → 0vgbvqu82ac1x.js} +1 -1
- package/web/.next/static/chunks/{0vlx6s5d1~d-w.js → 0wmckrtphfa12.js} +1 -1
- package/web/.next/static/chunks/0w~84g7r9307~.js +1 -0
- package/web/.next/static/chunks/0y1nwnouroh6k.js +1 -0
- package/web/.next/static/chunks/{07lrq10rx0tp1.js → 0~er~22zwvx0i.js} +1 -1
- package/web/.next/static/chunks/{0xs4~af3nc_15.js → 15lcx-697j_3z.js} +2 -2
- package/web/.next/static/chunks/{0rnvcu2blaow4.js → 15m2wfd5k_7fj.js} +1 -1
- package/web/.next/static/chunks/{turbopack-10upsk2jydmq4.js → turbopack-0ve8f54_veg.u.js} +1 -1
- package/web/.next/static/{CJ4Fr1ggL4xWEe_fapYLv → xP_-L4TLYvd3i_sEmljLs}/_clientMiddlewareManifest.js +1 -1
- package/web/public/apple-touch-icon.png +0 -0
- package/web/public/favicon-32x32.png +0 -0
- package/web/public/icon-192.png +0 -0
- package/web/public/icon-512.png +0 -0
- package/web/public/icons/agents/openai.svg +1 -1
- package/web/public/shipit-brain.png +0 -0
- package/web/public/shipit-icon.svg +68 -0
- package/web/public/shipit-logo.png +0 -0
- package/dist/src/presentation/web/components/common/shipit-ai-logo/shep-logo.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/shipit-ai-logo/shep-logo.js +0 -5
- package/dist/src/presentation/web/components/common/shipit-ai-logo/shep-logo.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/middleware.d.ts.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0.j0ktf._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0.j0ktf._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07m44ax._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07m44ax._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0frgz11._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0frgz11._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0oi7r67._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0oi7r67._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0pti1a3._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0pti1a3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0s9k_s3._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0s9k_s3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0v-vmgt._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0v-vmgt._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0yky~xo._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0yky~xo._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11dc42t._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11dc42t._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0__4si~._.js +0 -4
- package/web/.next/server/chunks/ssr/_0__4si~._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0_m17kl._.js +0 -4
- package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0d4miu.._.js +0 -4
- package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0e8ern9._.js +0 -4
- package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0hovej-._.js +0 -6
- package/web/.next/server/chunks/ssr/_0hovej-._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0p3zs6p._.js +0 -3
- package/web/.next/server/chunks/ssr/_0p3zs6p._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0qpq3xl._.js +0 -3
- package/web/.next/server/chunks/ssr/_0qpq3xl._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js +0 -4
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0t59q8r._.js +0 -4
- package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js +0 -4
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0~ev6dw._.js +0 -6
- package/web/.next/server/chunks/ssr/_0~ev6dw._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1161g9x._.js +0 -4
- package/web/.next/server/chunks/ssr/_1161g9x._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +0 -1
- package/web/.next/server/edge/chunks/0pax_next_dist_esm_build_templates_edge-wrapper_0atr6ca.js +0 -3
- package/web/.next/server/edge/chunks/11es_next_dist_esm_build_templates_edge-wrapper_0atr6ca.js.map +0 -1
- package/web/.next/server/edge/chunks/11es_next_dist_esm_build_templates_edge-wrapper_0xg0zx-.js +0 -3
- package/web/.next/server/edge/chunks/11es_next_dist_esm_build_templates_edge-wrapper_0xg0zx-.js.map +0 -1
- package/web/.next/server/edge/chunks/[root-of-the-server]__0m078x4._.js +0 -11
- package/web/.next/server/edge/chunks/[root-of-the-server]__0m078x4._.js.map +0 -1
- package/web/.next/static/chunks/0_9hv9_f66hur.js +0 -1
- package/web/.next/static/chunks/0dr6q94jmx86b.css +0 -1
- package/web/.next/static/chunks/0in40lx7y7f8o.js +0 -1
- package/web/.next/static/chunks/0rv6fo9ui94r9.js +0 -1
- package/web/.next/static/chunks/0t82zfhqgor5r.js +0 -1
- package/web/.next/static/chunks/0whetjaoa5y.l.js +0 -3
- package/web/public/favicon-dark.svg +0 -6
- package/web/public/favicon-light.svg +0 -6
- /package/web/.next/static/{CJ4Fr1ggL4xWEe_fapYLv → xP_-L4TLYvd3i_sEmljLs}/_buildManifest.js +0 -0
- /package/web/.next/static/{CJ4Fr1ggL4xWEe_fapYLv → xP_-L4TLYvd3i_sEmljLs}/_ssgManifest.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Plan Fixture
|
|
3
3
|
*
|
|
4
|
-
* Realistic fixture for the fictional "Add dark-mode toggle to
|
|
4
|
+
* Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
|
|
5
5
|
* Passes validatePlan() with zero repair iterations.
|
|
6
6
|
*/
|
|
7
7
|
export declare const PLAN_FIXTURE = "name: dark-mode-toggle\nsummary: >\n Implement dark-mode toggle across 3 phases: ThemeProvider context foundation,\n ThemeToggle component, and settings panel integration. No interface changes\n required; the feature slots into existing React context and component patterns.\n\nrelatedFeatures: []\n\ntechnologies:\n - React 19 context API\n - Tailwind CSS v4\n - shadcn/ui Switch\n - Next.js App Router\n - Storybook\n - Vitest\n\nrelatedLinks: []\n\nphases:\n - id: phase-1\n name: 'Theme Context Foundation'\n description: >\n Create the ThemeProvider component and useTheme hook. This phase establishes\n the theme state management infrastructure that all subsequent phases depend on.\n ThemeProvider reads from localStorage on mount and writes on toggle.\n parallel: false\n\n - id: phase-2\n name: 'ThemeToggle Component'\n description: >\n Create the ThemeToggle UI component using shadcn/ui Switch and Label.\n Includes Storybook story with light and dark variant knobs and unit tests\n using jsdom for DOM interaction.\n parallel: false\n\n - id: phase-3\n name: 'Settings Panel Integration'\n description: >\n Mount ThemeProvider in the root layout and add ThemeToggle to the settings\n panel. Run full pnpm validate and pnpm test to confirm no regressions.\n parallel: false\n\nfilesToCreate:\n - src/presentation/web/components/common/theme/theme-provider.tsx\n - src/presentation/web/components/common/theme/use-theme.ts\n - src/presentation/web/components/common/theme/theme-toggle.tsx\n - src/presentation/web/components/common/theme/theme-toggle.stories.tsx\n\nfilesToModify:\n - src/presentation/web/app/layout.tsx\n - src/presentation/web/components/features/settings/settings-panel.tsx\n\nopenQuestions: []\n\ncontent: |\n ## Architecture Overview\n\n The ThemeProvider wraps the Next.js App Router root layout, making the theme context\n available to the entire component tree via useTheme hook. The ThemeToggle component\n is a pure UI component that consumes useTheme and renders a shadcn/ui Switch with\n no business logic.\n\n ## Key Design Decisions\n\n **ThemeProvider in root layout**: Placing the provider at the top of the component\n tree avoids prop drilling and matches the SettingsProvider pattern already in use.\n\n **localStorage persistence**: Read on mount, write on toggle. No SSR conflicts\n because localStorage is only accessed in useEffect (client-side only).\n\n **Tailwind dark: class**: Toggling the html element class is the zero-config\n approach for Tailwind v4. No tailwind.config.ts changes needed.\n\n ## Implementation Strategy\n\n Phase 1 establishes the foundation (context, hook) before any UI is built.\n Phase 2 builds the UI component in isolation \u2014 fully testable without the settings\n panel. Phase 3 wires everything together and validates the full integration. This\n dependency ordering ensures each phase is independently verifiable.\n\n ## Risk Mitigation\n\n | Risk | Mitigation |\n | ---- | ---------- |\n | FOUC on initial load | ThemeProvider sets html class synchronously from localStorage on mount |\n | localStorage unavailable (SSR) | useEffect guard: only access localStorage in browser context |\n | shadcn/ui Switch not yet installed | Check if component exists; install via shadcn add switch if needed |\n";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Plan Fixture
|
|
3
3
|
*
|
|
4
|
-
* Realistic fixture for the fictional "Add dark-mode toggle to
|
|
4
|
+
* Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
|
|
5
5
|
* Passes validatePlan() with zero repair iterations.
|
|
6
6
|
*/
|
|
7
7
|
export const PLAN_FIXTURE = `name: dark-mode-toggle
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Research Fixture
|
|
3
3
|
*
|
|
4
|
-
* Realistic fixture for the fictional "Add dark-mode toggle to
|
|
4
|
+
* Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
|
|
5
5
|
* Passes validateResearch() with zero repair iterations.
|
|
6
6
|
*/
|
|
7
7
|
export declare const RESEARCH_FIXTURE = "name: dark-mode-toggle\nsummary: >\n The dark-mode implementation uses React context for theme state distribution,\n Tailwind CSS v4 class-based dark mode, and localStorage for preference persistence.\n No new npm dependencies are required. Three architectural decisions cover state\n management, CSS strategy, and persistence layer.\n\nrelatedFeatures: []\n\ntechnologies:\n - React 19 context API\n - 'Tailwind CSS v4 (dark: modifier)'\n - localStorage Web API\n - shadcn/ui Switch component\n - Next.js App Router root layout\n\nrelatedLinks: []\n\ndecisions:\n - title: 'Theme State Management'\n chosen: >\n React context with a ThemeProvider component and useTheme hook. The provider\n reads the initial value from localStorage and sets the html element class on\n mount and on toggle.\n rejected:\n - >\n Zustand global store: adds a new state management library dependency for a\n single boolean value; over-engineered for this scope when React context\n achieves the same result in ~40 lines.\n - >\n next-themes library: a popular choice but adds a new npm package for\n functionality achievable in-house; the project guideline prefers no new\n dependencies when existing tools suffice (NFR-3).\n rationale: >\n The project already uses React context extensively (e.g., SettingsProvider).\n A simple context-based ThemeProvider follows the established pattern and\n requires zero new dependencies \u2014 consistent with NFR-3.\n\n - title: 'CSS Dark Mode Strategy'\n chosen: >\n Tailwind CSS v4 class-based dark mode: add the dark class to the html element\n and rely on Tailwind dark: variants already present in shadcn/ui components.\n rejected:\n - >\n CSS custom properties (CSS variables) approach: requires redefining all\n existing Tailwind color tokens as CSS variables and large changes to every\n styled component \u2014 disproportionate for this feature.\n - >\n Inline style overrides on individual components: does not scale; breaks\n existing Tailwind utility classes; produces unmaintainable ad-hoc styling.\n rationale: >\n Tailwind CSS v4 with darkMode: class is already configured in the project.\n All shadcn/ui components expose dark: variants. Toggling the html class is\n the minimal, canonical approach that requires no additional configuration.\n\n - title: 'Persistence Layer for Theme Preference'\n chosen: >\n localStorage Web API. Read on ThemeProvider mount to restore the preference;\n write on every toggleTheme() call. Key: shep-theme, values: light or dark.\n rejected:\n - >\n SQLite settings via backend API: requires a new settings field, API endpoint,\n and schema migration \u2014 out of scope for a client-side preference.\n - >\n sessionStorage: does not persist across browser sessions; the whole point\n is remembering the user preference between visits.\n rationale: >\n localStorage is the de-facto standard for persisting UI theme preferences\n client-side. It is synchronous, zero-dependency, available in all target\n browsers, and requires no backend changes \u2014 satisfying NFR-3.\n\nopenQuestions: []\n\ncontent: |\n ## Technology Decisions\n\n ### 1. Theme State Management\n\n **Chosen:** React context ThemeProvider + useTheme hook\n\n **Rejected:**\n - Zustand global store \u2014 adds a new dependency for a single boolean\n - next-themes library \u2014 adds a package for functionality achievable in ~40 lines\n\n **Rationale:** Follows established SettingsProvider pattern. Zero new dependencies.\n\n ### 2. CSS Dark Mode Strategy\n\n **Chosen:** Tailwind CSS v4 dark: class-based (dark class on html element)\n\n **Rejected:**\n - CSS custom properties \u2014 requires redefining all color tokens (large change surface)\n - Inline style overrides \u2014 unmaintainable, breaks Tailwind utilities\n\n **Rationale:** Already configured; shadcn/ui components expose dark: variants natively.\n\n ### 3. Persistence Layer\n\n **Chosen:** localStorage (key: shep-theme, values: light | dark)\n\n **Rejected:**\n - SQLite settings via API \u2014 out of scope, requires migration\n - sessionStorage \u2014 does not survive browser restarts\n\n **Rationale:** De-facto standard for client-side theme persistence. Zero backend changes.\n\n ## Library Analysis\n\n | Library | Purpose | Decision | Reasoning |\n | ------- | ------- | -------- | --------- |\n | next-themes | SSR-safe theme management | Reject | Adds dependency for in-house functionality |\n | Tailwind CSS v4 | Dark mode via dark: class | Use (existing) | Already configured, shadcn/ui compatible |\n | shadcn/ui Switch | Toggle UI control | Use (existing) | Already a project dependency, accessible |\n | localStorage | Preference persistence | Use (built-in) | No dependency, synchronous, universally available |\n\n ## Security Considerations\n\n localStorage is readable by any JavaScript on the page. The stored value is\n light or dark \u2014 no sensitive data. The ThemeProvider must sanitize the retrieved\n value (only accept light or dark; default to light for any other value) to prevent\n unexpected CSS class injection.\n\n ## Performance Implications\n\n localStorage.getItem() is synchronous and executes in under 1ms. Setting the html\n class on mount avoids a flash of unstyled content (FOUC) provided the ThemeProvider\n is high enough in the component tree.\n\n ## Architecture Notes\n\n ThemeProvider wraps the root layout, making theme state available to all pages and\n components without prop drilling. The useTheme hook is consumed only by ThemeToggle\n and the root layout. This follows the existing SettingsProvider pattern.\n";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Research Fixture
|
|
3
3
|
*
|
|
4
|
-
* Realistic fixture for the fictional "Add dark-mode toggle to
|
|
4
|
+
* Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
|
|
5
5
|
* Passes validateResearch() with zero repair iterations.
|
|
6
6
|
*/
|
|
7
7
|
export const RESEARCH_FIXTURE = `name: dark-mode-toggle
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Spec (Analyze Phase) Fixture
|
|
3
3
|
*
|
|
4
|
-
* Realistic fixture for the fictional "Add dark-mode toggle to
|
|
4
|
+
* Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
|
|
5
5
|
* Passes validateSpecAnalyze() with zero repair iterations.
|
|
6
6
|
*/
|
|
7
|
-
export declare const SPEC_ANALYZE_FIXTURE = "name: dark-mode-toggle\nnumber: 42\nbranch: feat/042-dark-mode-toggle\noneLiner: Add a dark-mode toggle to the
|
|
7
|
+
export declare const SPEC_ANALYZE_FIXTURE = "name: dark-mode-toggle\nnumber: 42\nbranch: feat/042-dark-mode-toggle\noneLiner: Add a dark-mode toggle to the ShipIT web UI settings panel\nsummary: >\n Introduce a persistent dark-mode toggle to the ShipIT web UI settings panel that\n applies a CSS class-based theme, stores the user preference in localStorage, and\n is surfaced as a shadcn/ui Switch component with full Storybook coverage.\nphase: Analysis\nsizeEstimate: M\n\nrelatedFeatures: []\n\ntechnologies:\n - React 19\n - Next.js 16 (App Router)\n - Tailwind CSS v4\n - shadcn/ui\n - Storybook\n - TypeScript\n\nrelatedLinks: []\n\nopenQuestions: []\n\ncontent: |\n ## Problem Statement\n\n The ShipIT web UI currently renders only in light mode. Developers working in dark\n environments or those who prefer dark themes have no way to switch the UI appearance.\n Adding a first-class dark-mode toggle improves developer experience and demonstrates\n the ShipIT settings panel as a configurable surface.\n\n ## Codebase Analysis\n\n ### Project Structure\n\n The web UI lives in src/presentation/web/ following Next.js App Router conventions.\n Components are organized into four tiers: ui/ (Tier 0), common/ (Tier 1),\n layouts/ (Tier 2), and features/ (Tier 3). Storybook stories are mandatory for every\n component.\n\n ### Architecture Patterns\n\n The project uses shadcn/ui (Radix primitives + Tailwind CSS v4) for all UI components.\n Theme state would live in a React context provider wrapping the root layout, following\n the existing SettingsProvider pattern in the codebase. Clean Architecture layers keep\n theme state in the presentation layer only.\n\n ### Relevant Technologies\n\n Tailwind CSS v4 supports dark mode via the `dark` CSS class on the html element.\n shadcn/ui provides a Switch component suitable for the toggle control. localStorage\n provides client-side persistence without any backend changes.\n\n ## Affected Areas\n\n | Area | Impact | Reasoning |\n | ---- | ------ | --------- |\n | src/presentation/web/components/features/settings/ | High | Settings panel receives the toggle component |\n | src/presentation/web/app/layout.tsx | Medium | Root layout needs ThemeProvider wrapper |\n | src/presentation/web/components/common/ | Medium | ThemeToggle and ThemeProvider components created here |\n | tailwind.config.ts | Low | Verify darkMode: class is configured |\n\n ## Dependencies\n\n - shadcn/ui Switch component\n - React context for theme state distribution\n - localStorage Web API for persistence (built-in, no new dependency)\n\n ## Size Estimate\n\n **M (days)** \u2014 Context setup, toggle component, settings integration, Storybook stories,\n and tests across 3 phases add up to roughly 2 developer-days with TDD.\n";
|
|
8
8
|
//# sourceMappingURL=spec-analyze.fixture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-analyze.fixture.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"spec-analyze.fixture.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-analyze.fixture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,oBAAoB,wtFA0EhC,CAAC"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Spec (Analyze Phase) Fixture
|
|
3
3
|
*
|
|
4
|
-
* Realistic fixture for the fictional "Add dark-mode toggle to
|
|
4
|
+
* Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
|
|
5
5
|
* Passes validateSpecAnalyze() with zero repair iterations.
|
|
6
6
|
*/
|
|
7
7
|
export const SPEC_ANALYZE_FIXTURE = `name: dark-mode-toggle
|
|
8
8
|
number: 42
|
|
9
9
|
branch: feat/042-dark-mode-toggle
|
|
10
|
-
oneLiner: Add a dark-mode toggle to the
|
|
10
|
+
oneLiner: Add a dark-mode toggle to the ShipIT web UI settings panel
|
|
11
11
|
summary: >
|
|
12
|
-
Introduce a persistent dark-mode toggle to the
|
|
12
|
+
Introduce a persistent dark-mode toggle to the ShipIT web UI settings panel that
|
|
13
13
|
applies a CSS class-based theme, stores the user preference in localStorage, and
|
|
14
14
|
is surfaced as a shadcn/ui Switch component with full Storybook coverage.
|
|
15
15
|
phase: Analysis
|
|
@@ -32,10 +32,10 @@ openQuestions: []
|
|
|
32
32
|
content: |
|
|
33
33
|
## Problem Statement
|
|
34
34
|
|
|
35
|
-
The
|
|
35
|
+
The ShipIT web UI currently renders only in light mode. Developers working in dark
|
|
36
36
|
environments or those who prefer dark themes have no way to switch the UI appearance.
|
|
37
37
|
Adding a first-class dark-mode toggle improves developer experience and demonstrates
|
|
38
|
-
the
|
|
38
|
+
the ShipIT settings panel as a configurable surface.
|
|
39
39
|
|
|
40
40
|
## Codebase Analysis
|
|
41
41
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Spec (Requirements Phase) Fixture
|
|
3
3
|
*
|
|
4
|
-
* Realistic fixture for the fictional "Add dark-mode toggle to
|
|
4
|
+
* Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
|
|
5
5
|
* Passes validateSpecRequirements() with zero repair iterations.
|
|
6
6
|
*/
|
|
7
|
-
export declare const SPEC_REQUIREMENTS_FIXTURE = "name: dark-mode-toggle\nnumber: 42\nbranch: feat/042-dark-mode-toggle\noneLiner: Add a dark-mode toggle to the
|
|
7
|
+
export declare const SPEC_REQUIREMENTS_FIXTURE = "name: dark-mode-toggle\nnumber: 42\nbranch: feat/042-dark-mode-toggle\noneLiner: Add a dark-mode toggle to the ShipIT web UI settings panel\nsummary: >\n Introduce a persistent dark-mode toggle to the ShipIT web UI settings panel that\n applies a CSS class-based theme via Tailwind dark: variants, stores the user\n preference in localStorage, and is surfaced as a shadcn/ui Switch component\n with full Storybook coverage and TDD-driven unit tests.\nphase: Requirements\nsizeEstimate: M\n\nrelatedFeatures: []\n\ntechnologies:\n - React 19\n - Next.js 16 (App Router)\n - Tailwind CSS v4\n - shadcn/ui\n - Storybook\n - TypeScript\n - localStorage Web API\n\nrelatedLinks: []\n\nopenQuestions:\n - question: 'Where should the dark-mode preference be persisted?'\n resolved: true\n options:\n - option: 'localStorage only'\n description: >\n Store the theme preference in localStorage. Zero backend changes,\n instant read on page load, and no need for a settings schema migration.\n The ThemeProvider reads the key on mount and writes on toggle.\n selected: true\n - option: 'SQLite settings via backend API'\n description: >\n Persist the preference in the ShipIT SQLite settings store alongside\n other settings. Syncs across devices but requires API changes and a\n settings migration \u2014 out of scope for this feature.\n selected: false\n selectionRationale: >\n localStorage is the conventional approach for client-side theme preferences\n and requires no backend changes. The ShipIT settings API is out of scope for\n this feature; localStorage ships the value faster with zero migration risk.\n answer: 'localStorage only'\n\n - question: 'How should the CSS dark-mode implementation be applied?'\n resolved: true\n options:\n - option: 'Tailwind CSS class-based dark mode (dark: modifier)'\n description: >\n Add the dark class to the html element and use Tailwind dark: modifier\n on all themed elements. Supported natively in Tailwind CSS v4 and fully\n compatible with the shadcn/ui component library.\n selected: true\n - option: 'CSS custom properties via a custom ThemeProvider stylesheet'\n description: >\n Define a set of CSS custom properties (--color-bg, --color-text, etc.)\n and swap them by toggling a data attribute. More flexible but requires\n redefining all existing color tokens \u2014 a large change surface.\n selected: false\n selectionRationale: >\n Tailwind CSS v4 with dark: modifier is already the standard in this codebase.\n All shadcn/ui components are built to accept Tailwind dark: variants. Using\n the dark class on html is the minimal, zero-extra-dependency approach.\n answer: 'Tailwind CSS class-based dark mode (dark: modifier)'\n\ncontent: |\n ## Problem Statement\n\n The ShipIT web UI currently renders only in light mode. Developers working in dark\n environments or those who prefer dark themes have no way to switch the UI appearance.\n\n ## Success Criteria\n\n - [ ] A ThemeProvider wraps the root layout and provides a useTheme hook\n - [ ] A ThemeToggle component renders in the settings panel with a Switch and label\n - [ ] Clicking the toggle switches the html element class between light and dark\n - [ ] The preference persists across page refreshes via localStorage\n - [ ] All new components have Storybook stories with light and dark variants\n - [ ] pnpm validate passes with no new errors\n\n ## Functional Requirements\n\n - **FR-1**: A ThemeProvider component must wrap the root Next.js App Router layout\n and provide theme state to the component tree via React context.\n - **FR-2**: A useTheme hook must expose { theme, toggleTheme } to any component.\n - **FR-3**: A ThemeToggle component must render a Switch and a label (Dark mode).\n - **FR-4**: Toggling the Switch must apply the dark CSS class to the html element.\n - **FR-5**: The selected theme must be persisted to localStorage and restored on load.\n - **FR-6**: ThemeToggle must appear in the settings panel (features/settings/).\n\n ## Non-Functional Requirements\n\n - **NFR-1**: Theme switch must complete within one animation frame (no FOUC).\n - **NFR-2**: All new components must have Storybook stories per project conventions.\n - **NFR-3**: No new npm dependencies may be added; use existing React, Tailwind, shadcn/ui.\n - **NFR-4**: Each new file must stay within the 150-line project guideline.\n\n ## Product Questions & AI Recommendations\n\n | # | Question | AI Recommendation | Rationale |\n | - | -------- | ----------------- | --------- |\n | 1 | Persistence layer? | localStorage | Zero backend changes required |\n | 2 | CSS implementation? | Tailwind dark: class | Already standard in the codebase |\n\n ## Affected Areas\n\n | Area | Impact | Reasoning |\n | ---- | ------ | --------- |\n | src/presentation/web/components/features/settings/ | High | Toggle component added here |\n | src/presentation/web/app/layout.tsx | Medium | ThemeProvider wrapper added |\n | src/presentation/web/components/common/ | Medium | ThemeToggle and ThemeProvider created |\n\n ## Dependencies\n\n - shadcn/ui Switch and Label components (already installed)\n - React context API (built-in)\n - localStorage Web API (built-in)\n\n ## Size Estimate\n\n **M (days)** \u2014 3 phases: context + provider, toggle component, settings integration.\n";
|
|
8
8
|
//# sourceMappingURL=spec-requirements.fixture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-requirements.fixture.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"spec-requirements.fixture.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/fixtures/spec-requirements.fixture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,yBAAyB,68KA4HrC,CAAC"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Spec (Requirements Phase) Fixture
|
|
3
3
|
*
|
|
4
|
-
* Realistic fixture for the fictional "Add dark-mode toggle to
|
|
4
|
+
* Realistic fixture for the fictional "Add dark-mode toggle to ShipIT Web UI" feature.
|
|
5
5
|
* Passes validateSpecRequirements() with zero repair iterations.
|
|
6
6
|
*/
|
|
7
7
|
export const SPEC_REQUIREMENTS_FIXTURE = `name: dark-mode-toggle
|
|
8
8
|
number: 42
|
|
9
9
|
branch: feat/042-dark-mode-toggle
|
|
10
|
-
oneLiner: Add a dark-mode toggle to the
|
|
10
|
+
oneLiner: Add a dark-mode toggle to the ShipIT web UI settings panel
|
|
11
11
|
summary: >
|
|
12
|
-
Introduce a persistent dark-mode toggle to the
|
|
12
|
+
Introduce a persistent dark-mode toggle to the ShipIT web UI settings panel that
|
|
13
13
|
applies a CSS class-based theme via Tailwind dark: variants, stores the user
|
|
14
14
|
preference in localStorage, and is surfaced as a shadcn/ui Switch component
|
|
15
15
|
with full Storybook coverage and TDD-driven unit tests.
|
|
@@ -41,13 +41,13 @@ openQuestions:
|
|
|
41
41
|
selected: true
|
|
42
42
|
- option: 'SQLite settings via backend API'
|
|
43
43
|
description: >
|
|
44
|
-
Persist the preference in the
|
|
44
|
+
Persist the preference in the ShipIT SQLite settings store alongside
|
|
45
45
|
other settings. Syncs across devices but requires API changes and a
|
|
46
46
|
settings migration — out of scope for this feature.
|
|
47
47
|
selected: false
|
|
48
48
|
selectionRationale: >
|
|
49
49
|
localStorage is the conventional approach for client-side theme preferences
|
|
50
|
-
and requires no backend changes. The
|
|
50
|
+
and requires no backend changes. The ShipIT settings API is out of scope for
|
|
51
51
|
this feature; localStorage ships the value faster with zero migration risk.
|
|
52
52
|
answer: 'localStorage only'
|
|
53
53
|
|
|
@@ -75,7 +75,7 @@ openQuestions:
|
|
|
75
75
|
content: |
|
|
76
76
|
## Problem Statement
|
|
77
77
|
|
|
78
|
-
The
|
|
78
|
+
The ShipIT web UI currently renders only in light mode. Developers working in dark
|
|
79
79
|
environments or those who prefer dark themes have no way to switch the UI appearance.
|
|
80
80
|
|
|
81
81
|
## Success Criteria
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tasks Fixture — fictional "Add dark-mode toggle to
|
|
2
|
+
* Tasks Fixture — fictional "Add dark-mode toggle to ShipIT Web UI" feature.
|
|
3
3
|
* Passes validateTasks() against plan phase IDs [phase-1, phase-2, phase-3].
|
|
4
4
|
*/
|
|
5
5
|
export declare const TASKS_FIXTURE = "name: dark-mode-toggle\nsummary: >\n 8 tasks across 3 phases: ThemeProvider context (phase-1), ThemeToggle component\n (phase-2), settings panel integration and validation (phase-3).\n\nrelatedFeatures: []\ntechnologies: []\nrelatedLinks: []\n\ntasks:\n - id: task-1\n phaseId: phase-1\n title: 'Create ThemeProvider and useTheme hook'\n description: 'ThemeProvider managing light/dark state via React context with localStorage persistence.'\n state: Todo\n dependencies: []\n acceptanceCriteria:\n - 'ThemeProvider renders children without error'\n - 'useTheme returns { theme, toggleTheme } where theme is \"light\" or \"dark\"'\n - 'toggleTheme() switches theme and toggles html element dark class'\n - 'Theme persists to localStorage key \"shep-theme\" on toggle'\n tdd:\n red: ['Write test: useTheme default is \"light\" with no localStorage entry', 'Write test: toggleTheme() adds dark class to html element']\n green: ['Implement ThemeProvider reading localStorage and calling classList.toggle', 'Implement useTheme hook calling useContext(ThemeContext)']\n refactor: ['Extract THEME_KEY constant; add sanitization for non-light/dark values']\n estimatedEffort: '2h'\n\n - id: task-2\n phaseId: phase-1\n title: 'Write unit tests for ThemeProvider edge cases'\n description: 'Cover edge cases: invalid stored value, double-toggle cycle, SSR safety.'\n state: Todo\n dependencies: ['task-1']\n acceptanceCriteria:\n - 'Test: invalid localStorage value \"purple\" defaults to \"light\"'\n - 'Test: toggling twice returns to original theme'\n - 'Test: ThemeProvider handles window being undefined (SSR safety)'\n tdd:\n red: ['Write test: localStorage \"purple\" \u2192 theme defaults to \"light\"']\n green: ['Sanitization branch handles all non-light/dark values']\n refactor: ['Consolidate theme validation into isValidTheme() helper']\n estimatedEffort: '1h'\n\n - id: task-3\n phaseId: phase-2\n title: 'Create ThemeToggle component'\n description: 'shadcn/ui Switch + Label component wired to useTheme(). onClick calls toggleTheme().'\n state: Todo\n dependencies: ['task-1']\n acceptanceCriteria:\n - 'ThemeToggle renders a Switch with aria-label \"Toggle dark mode\"'\n - 'Switch checked reflects current theme (\"dark\" = checked)'\n - 'Clicking Switch calls toggleTheme() exactly once'\n - 'Component file is <= 50 lines'\n tdd:\n red: ['Write test: Switch checked is false when theme is \"light\"', 'Write test: Switch click triggers toggleTheme()']\n green: ['Implement ThemeToggle with Switch checked wired to theme === \"dark\"']\n refactor: ['Extract aria-label constant; remove any inline styles']\n estimatedEffort: '1h'\n\n - id: task-4\n phaseId: phase-2\n title: 'Create Storybook story for ThemeToggle'\n description: 'theme-toggle.stories.tsx with Default and DarkMode variants using ThemeProvider decorator.'\n state: Todo\n dependencies: ['task-3']\n acceptanceCriteria:\n - 'Story includes Default and DarkMode variants with ThemeProvider decorator'\n - 'pnpm dev:storybook runs without error for the new story'\n tdd: null\n estimatedEffort: '30min'\n\n - id: task-5\n phaseId: phase-2\n title: 'Write integration test for ThemeToggle + ThemeProvider'\n description: 'Mount ThemeProvider wrapping ThemeToggle; assert full toggle cycle including localStorage.'\n state: Todo\n dependencies: ['task-3']\n acceptanceCriteria:\n - 'After clicking Toggle: html has dark class, localStorage has \"dark\"'\n - 'After clicking Toggle again: html has no dark class, localStorage has \"light\"'\n tdd:\n red: ['Write integration test: html class and localStorage after two toggle cycles']\n green: ['Test passes with existing ThemeProvider + ThemeToggle implementations']\n refactor: ['Extract renderWithTheme() test helper for reuse']\n estimatedEffort: '45min'\n\n - id: task-6\n phaseId: phase-3\n title: 'Wrap root layout in ThemeProvider'\n description: 'Update app/layout.tsx to wrap children with ThemeProvider.'\n state: Todo\n dependencies: ['task-1']\n acceptanceCriteria:\n - 'layout.tsx imports ThemeProvider and wraps children'\n - 'Existing Playwright e2e tests continue to pass'\n tdd:\n red: ['Write e2e test: dark class persists after page reload when toggled']\n green: ['Add ThemeProvider wrapping children in layout.tsx']\n refactor: ['Ensure import order follows project eslint rules']\n estimatedEffort: '30min'\n\n - id: task-7\n phaseId: phase-3\n title: 'Add ThemeToggle to settings panel'\n description: 'Add ThemeToggle to the Appearance section of settings-panel.tsx.'\n state: Todo\n dependencies: ['task-3', 'task-6']\n acceptanceCriteria:\n - 'settings-panel.tsx imports and renders ThemeToggle in the Appearance section'\n - 'ThemeToggle is visible and functional in the running web UI'\n tdd:\n red: ['Write unit test: ThemeToggle is present in rendered SettingsPanel']\n green: ['Add import and render ThemeToggle in the Appearance section']\n refactor: ['Ensure Appearance section heading is semantically correct (h2/h3)']\n estimatedEffort: '30min'\n\n - id: task-8\n phaseId: phase-3\n title: 'Run full validation and fix any issues'\n description: 'Run pnpm validate and pnpm test; fix any failures before marking complete.'\n state: Todo\n dependencies: ['task-6', 'task-7']\n acceptanceCriteria:\n - 'pnpm lint passes with no errors'\n - 'pnpm typecheck passes with no errors'\n - 'pnpm test passes with no failures'\n - 'pnpm build completes successfully'\n tdd: null\n estimatedEffort: '30min'\n\ntotalEstimate: '7.25h'\nopenQuestions: []\n\ncontent: |\n ## Summary\n\n Phase-1 builds ThemeProvider + useTheme hook with full test coverage.\n Phase-2 creates ThemeToggle in isolation with Storybook stories and integration tests.\n Phase-3 wires the provider into the root layout, adds the toggle to the settings panel,\n then validates with pnpm validate + pnpm test.\n";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tasks Fixture — fictional "Add dark-mode toggle to
|
|
2
|
+
* Tasks Fixture — fictional "Add dark-mode toggle to ShipIT Web UI" feature.
|
|
3
3
|
* Passes validateTasks() against plan phase IDs [phase-1, phase-2, phase-3].
|
|
4
4
|
*/
|
|
5
5
|
export const TASKS_FIXTURE = `name: dark-mode-toggle
|
|
@@ -50,7 +50,7 @@ ${tasksContent}
|
|
|
50
50
|
|
|
51
51
|
Save all evidence files to BOTH locations:
|
|
52
52
|
|
|
53
|
-
1. **
|
|
53
|
+
1. **ShipIT AI home folder** (persistent local storage):
|
|
54
54
|
\`mkdir -p ${shipitAiEvidenceDir}/\`
|
|
55
55
|
Save each file here first.
|
|
56
56
|
|
|
@@ -155,7 +155,7 @@ export function buildCommitPushPrPrompt(state, branch, baseBranch, repoUrl) {
|
|
|
155
155
|
- Write a descriptive PR title using conventional commit format
|
|
156
156
|
- Write a rich PR body that summarizes the changes using the spec context below
|
|
157
157
|
- The PR body MUST end with this exact branding line (on its own line): \`${PR_BRANDING}\`
|
|
158
|
-
- Do NOT include any other attribution footer (e.g. "Generated with Claude Code" or similar) — only the
|
|
158
|
+
- Do NOT include any other attribution footer (e.g. "Generated with Claude Code" or similar) — only the ShipIT branding line above`);
|
|
159
159
|
}
|
|
160
160
|
const resumeContext = buildResumeContext(state.resumeReason);
|
|
161
161
|
return `${resumeContext}You are performing git operations in a feature worktree.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Detector Service Implementation
|
|
3
|
+
*
|
|
4
|
+
* Probes environment variables and system binaries to detect the user's
|
|
5
|
+
* default editor, shell, and terminal emulator. Used during onboarding
|
|
6
|
+
* to pre-populate settings with sensible defaults.
|
|
7
|
+
*/
|
|
8
|
+
import type { IEnvironmentDetectorService, DetectedEnvironment, AvailableEditorEntry, AvailableShellEntry } from '../../application/ports/output/services/environment-detector.service.js';
|
|
9
|
+
import type { IToolInstallerService } from '../../application/ports/output/services/tool-installer.service.js';
|
|
10
|
+
export declare class EnvironmentDetectorServiceImpl implements IEnvironmentDetectorService {
|
|
11
|
+
private readonly toolInstallerService;
|
|
12
|
+
constructor(toolInstallerService: IToolInstallerService);
|
|
13
|
+
/**
|
|
14
|
+
* Detect default editor, shell, and terminal from environment variables.
|
|
15
|
+
*/
|
|
16
|
+
detectDefaults(): DetectedEnvironment;
|
|
17
|
+
/**
|
|
18
|
+
* List all known editors with their availability on the current system.
|
|
19
|
+
*/
|
|
20
|
+
listAvailableEditors(): Promise<AvailableEditorEntry[]>;
|
|
21
|
+
/**
|
|
22
|
+
* List all known shells with their availability on the current system.
|
|
23
|
+
*/
|
|
24
|
+
listAvailableShells(): Promise<AvailableShellEntry[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Detect the default editor from $VISUAL or $EDITOR environment variables.
|
|
27
|
+
*/
|
|
28
|
+
private detectEditor;
|
|
29
|
+
/**
|
|
30
|
+
* Detect the default shell from $SHELL or Windows environment.
|
|
31
|
+
*/
|
|
32
|
+
private detectShell;
|
|
33
|
+
/**
|
|
34
|
+
* Detect the default terminal from $TERM_PROGRAM or $TERM.
|
|
35
|
+
*/
|
|
36
|
+
private detectTerminal;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=environment-detector.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-detector.service.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/services/environment-detector.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,yEAAyE,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mEAAmE,CAAC;AA0E/G,qBACa,8BAA+B,YAAW,2BAA2B;IAG9E,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAApB,oBAAoB,EAAE,qBAAqB;IAG9D;;OAEG;IACH,cAAc,IAAI,mBAAmB;IAQrC;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAe7D;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoC3D;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,OAAO,CAAC,cAAc;CAcvB"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Detector Service Implementation
|
|
3
|
+
*
|
|
4
|
+
* Probes environment variables and system binaries to detect the user's
|
|
5
|
+
* default editor, shell, and terminal emulator. Used during onboarding
|
|
6
|
+
* to pre-populate settings with sensible defaults.
|
|
7
|
+
*/
|
|
8
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
9
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
10
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
11
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
12
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
13
|
+
};
|
|
14
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
15
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
16
|
+
};
|
|
17
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
18
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
19
|
+
};
|
|
20
|
+
import { injectable, inject } from 'tsyringe';
|
|
21
|
+
import { platform } from 'node:os';
|
|
22
|
+
import path from 'node:path';
|
|
23
|
+
import { EditorType, TerminalType } from '../../domain/generated/output.js';
|
|
24
|
+
import { checkBinaryExists } from './tool-installer/binary-exists.js';
|
|
25
|
+
/**
|
|
26
|
+
* Maps editor binary basenames to EditorType enum values.
|
|
27
|
+
*/
|
|
28
|
+
const EDITOR_BINARY_MAP = {
|
|
29
|
+
code: EditorType.VsCode,
|
|
30
|
+
cursor: EditorType.Cursor,
|
|
31
|
+
windsurf: EditorType.Windsurf,
|
|
32
|
+
zed: EditorType.Zed,
|
|
33
|
+
antigravity: EditorType.Antigravity,
|
|
34
|
+
agy: EditorType.Antigravity,
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Maps TERM_PROGRAM environment variable values to TerminalType enum values.
|
|
38
|
+
*/
|
|
39
|
+
const TERM_PROGRAM_MAP = {
|
|
40
|
+
WarpTerminal: TerminalType.Warp,
|
|
41
|
+
'iTerm.app': TerminalType.ITerm2,
|
|
42
|
+
Apple_Terminal: TerminalType.System,
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Fallback mapping from $TERM to TerminalType when TERM_PROGRAM is not set.
|
|
46
|
+
*/
|
|
47
|
+
const TERM_FALLBACK_MAP = {
|
|
48
|
+
alacritty: TerminalType.Alacritty,
|
|
49
|
+
'xterm-kitty': TerminalType.Kitty,
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Maps shell basenames to canonical shell identifier strings.
|
|
53
|
+
*/
|
|
54
|
+
const SHELL_BASENAME_MAP = {
|
|
55
|
+
bash: 'bash',
|
|
56
|
+
zsh: 'zsh',
|
|
57
|
+
fish: 'fish',
|
|
58
|
+
sh: 'bash',
|
|
59
|
+
pwsh: 'powershell',
|
|
60
|
+
powershell: 'powershell',
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Editor entries mapping tool metadata IDs to EditorType and display names.
|
|
64
|
+
*/
|
|
65
|
+
const EDITOR_ENTRIES = [
|
|
66
|
+
{ toolId: 'vscode', editorType: EditorType.VsCode, name: 'VS Code' },
|
|
67
|
+
{ toolId: 'cursor', editorType: EditorType.Cursor, name: 'Cursor' },
|
|
68
|
+
{ toolId: 'windsurf', editorType: EditorType.Windsurf, name: 'Windsurf' },
|
|
69
|
+
{ toolId: 'zed', editorType: EditorType.Zed, name: 'Zed' },
|
|
70
|
+
{ toolId: 'antigravity', editorType: EditorType.Antigravity, name: 'Antigravity' },
|
|
71
|
+
];
|
|
72
|
+
/**
|
|
73
|
+
* Shell entries with display names and platform constraints.
|
|
74
|
+
*/
|
|
75
|
+
const SHELL_ENTRIES = [
|
|
76
|
+
{ id: 'bash', name: 'Bash', platforms: null },
|
|
77
|
+
{ id: 'zsh', name: 'Zsh', platforms: ['darwin', 'linux'] },
|
|
78
|
+
{ id: 'fish', name: 'Fish', platforms: ['darwin', 'linux'] },
|
|
79
|
+
{ id: 'powershell', name: 'PowerShell', platforms: null },
|
|
80
|
+
];
|
|
81
|
+
let EnvironmentDetectorServiceImpl = class EnvironmentDetectorServiceImpl {
|
|
82
|
+
toolInstallerService;
|
|
83
|
+
constructor(toolInstallerService) {
|
|
84
|
+
this.toolInstallerService = toolInstallerService;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Detect default editor, shell, and terminal from environment variables.
|
|
88
|
+
*/
|
|
89
|
+
detectDefaults() {
|
|
90
|
+
return {
|
|
91
|
+
defaultEditor: this.detectEditor(),
|
|
92
|
+
defaultShell: this.detectShell(),
|
|
93
|
+
defaultTerminal: this.detectTerminal(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* List all known editors with their availability on the current system.
|
|
98
|
+
*/
|
|
99
|
+
async listAvailableEditors() {
|
|
100
|
+
const results = [];
|
|
101
|
+
for (const entry of EDITOR_ENTRIES) {
|
|
102
|
+
const status = await this.toolInstallerService.checkAvailability(entry.toolId);
|
|
103
|
+
results.push({
|
|
104
|
+
id: entry.editorType,
|
|
105
|
+
name: entry.name,
|
|
106
|
+
available: status.status === 'available',
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return results;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* List all known shells with their availability on the current system.
|
|
113
|
+
*/
|
|
114
|
+
async listAvailableShells() {
|
|
115
|
+
const currentPlatform = platform();
|
|
116
|
+
const results = [];
|
|
117
|
+
for (const entry of SHELL_ENTRIES) {
|
|
118
|
+
// Skip shells not available on this platform
|
|
119
|
+
if (entry.platforms && !entry.platforms.includes(currentPlatform)) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
let available = false;
|
|
123
|
+
if (entry.id === 'powershell') {
|
|
124
|
+
// Check pwsh first (cross-platform PowerShell), then powershell (Windows-only)
|
|
125
|
+
const pwshResult = await checkBinaryExists('pwsh');
|
|
126
|
+
if (pwshResult.found) {
|
|
127
|
+
available = true;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
const powershellResult = await checkBinaryExists('powershell');
|
|
131
|
+
available = powershellResult.found;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
const result = await checkBinaryExists(entry.id);
|
|
136
|
+
available = result.found;
|
|
137
|
+
}
|
|
138
|
+
results.push({
|
|
139
|
+
id: entry.id,
|
|
140
|
+
name: entry.name,
|
|
141
|
+
available,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
return results;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Detect the default editor from $VISUAL or $EDITOR environment variables.
|
|
148
|
+
*/
|
|
149
|
+
detectEditor() {
|
|
150
|
+
const editorEnv = process.env.VISUAL ?? process.env.EDITOR;
|
|
151
|
+
if (!editorEnv) {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
const basename = path.basename(editorEnv);
|
|
155
|
+
return EDITOR_BINARY_MAP[basename] ?? null;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Detect the default shell from $SHELL or Windows environment.
|
|
159
|
+
*/
|
|
160
|
+
detectShell() {
|
|
161
|
+
const shellEnv = process.env.SHELL;
|
|
162
|
+
if (shellEnv) {
|
|
163
|
+
const basename = path.basename(shellEnv);
|
|
164
|
+
return SHELL_BASENAME_MAP[basename] ?? basename;
|
|
165
|
+
}
|
|
166
|
+
// Windows fallback: no $SHELL env var
|
|
167
|
+
if (platform() === 'win32') {
|
|
168
|
+
if (process.env.PSModulePath) {
|
|
169
|
+
return 'powershell';
|
|
170
|
+
}
|
|
171
|
+
return 'bash';
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Detect the default terminal from $TERM_PROGRAM or $TERM.
|
|
177
|
+
*/
|
|
178
|
+
detectTerminal() {
|
|
179
|
+
const termProgram = process.env.TERM_PROGRAM;
|
|
180
|
+
if (termProgram) {
|
|
181
|
+
return TERM_PROGRAM_MAP[termProgram] ?? null;
|
|
182
|
+
}
|
|
183
|
+
// Fallback to $TERM for terminals that only set this
|
|
184
|
+
const term = process.env.TERM;
|
|
185
|
+
if (term) {
|
|
186
|
+
return TERM_FALLBACK_MAP[term] ?? null;
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
EnvironmentDetectorServiceImpl = __decorate([
|
|
192
|
+
injectable(),
|
|
193
|
+
__param(0, inject('IToolInstallerService')),
|
|
194
|
+
__metadata("design:paramtypes", [Object])
|
|
195
|
+
], EnvironmentDetectorServiceImpl);
|
|
196
|
+
export { EnvironmentDetectorServiceImpl };
|
package/dist/packages/core/src/infrastructure/services/filesystem/shipit-ai-directory.service.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* ShipIT AI Directory Service
|
|
3
3
|
*
|
|
4
4
|
* Manages the ~/.shipit-ai/ directory for global settings and data storage.
|
|
5
5
|
* Ensures directory exists with correct permissions before database operations.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Supports SHIPIT_AI_HOME env var for test isolation (overrides default ~/.shipit-ai/).
|
|
8
8
|
*/
|
|
9
9
|
/**
|
|
10
|
-
* Gets the path to the
|
|
10
|
+
* Gets the path to the ShipIT AI home directory.
|
|
11
11
|
* Uses SHIPIT_AI_HOME env var if set, otherwise ~/.shipit-ai/
|
|
12
12
|
*
|
|
13
13
|
* @returns Path to shipit-ai home directory
|
package/dist/packages/core/src/infrastructure/services/filesystem/shipit-ai-directory.service.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* ShipIT AI Directory Service
|
|
3
3
|
*
|
|
4
4
|
* Manages the ~/.shipit-ai/ directory for global settings and data storage.
|
|
5
5
|
* Ensures directory exists with correct permissions before database operations.
|
|
@@ -11,14 +11,14 @@ import { homedir } from 'node:os';
|
|
|
11
11
|
import { join } from 'node:path';
|
|
12
12
|
import { existsSync } from 'node:fs';
|
|
13
13
|
/**
|
|
14
|
-
* Resolves the
|
|
14
|
+
* Resolves the ShipIT AI home directory.
|
|
15
15
|
* Respects SHIPIT_AI_HOME env var for test isolation, falls back to ~/.shipit-ai/
|
|
16
16
|
*/
|
|
17
17
|
function resolveShipitAiHomeDir() {
|
|
18
18
|
return process.env.SHIPIT_AI_HOME ?? join(homedir(), '.shipit-ai');
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* Gets the path to the
|
|
21
|
+
* Gets the path to the ShipIT AI home directory.
|
|
22
22
|
* Uses SHIPIT_AI_HOME env var if set, otherwise ~/.shipit-ai/
|
|
23
23
|
*
|
|
24
24
|
* @returns Path to shipit-ai home directory
|
|
@@ -73,6 +73,6 @@ export async function ensureShipitAiDirectory() {
|
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
75
|
catch (error) {
|
|
76
|
-
throw new Error(`Failed to create
|
|
76
|
+
throw new Error(`Failed to create ShipIT AI directory at ${shipitAiDir}: ${error instanceof Error ? error.message : String(error)}`);
|
|
77
77
|
}
|
|
78
78
|
}
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
* PR Branding
|
|
3
3
|
*
|
|
4
4
|
* Centralizes the branding footer used in pull request bodies
|
|
5
|
-
* created by
|
|
5
|
+
* created by ShipIT AI. Ensures consistent attribution across all
|
|
6
6
|
* PR creation paths (agent-driven, fork-and-PR, etc.).
|
|
7
7
|
*/
|
|
8
8
|
/** The branding line to append to PR bodies. */
|
|
9
|
-
export declare const PR_BRANDING = "Built with
|
|
9
|
+
export declare const PR_BRANDING = "Built with ShipIT AI \uD83D\uDC11 [ShipIT AI Bot](https://github.com/jrmatherly/shipit)";
|
|
10
10
|
/**
|
|
11
|
-
* Ensure a PR body carries the correct
|
|
11
|
+
* Ensure a PR body carries the correct ShipIT AI branding.
|
|
12
12
|
*
|
|
13
13
|
* 1. Strips any unwanted AI-tool attribution footers
|
|
14
|
-
* 2. Appends the
|
|
14
|
+
* 2. Appends the ShipIT AI branding line if not already present
|
|
15
15
|
*/
|
|
16
16
|
export declare function applyPrBranding(body: string): string;
|
|
17
17
|
//# sourceMappingURL=pr-branding.d.ts.map
|
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
* PR Branding
|
|
3
3
|
*
|
|
4
4
|
* Centralizes the branding footer used in pull request bodies
|
|
5
|
-
* created by
|
|
5
|
+
* created by ShipIT AI. Ensures consistent attribution across all
|
|
6
6
|
* PR creation paths (agent-driven, fork-and-PR, etc.).
|
|
7
7
|
*/
|
|
8
8
|
/** The branding line to append to PR bodies. */
|
|
9
|
-
export const PR_BRANDING = 'Built with
|
|
9
|
+
export const PR_BRANDING = 'Built with ShipIT AI \uD83D\uDC11 [ShipIT AI Bot](https://github.com/jrmatherly/shipit)';
|
|
10
10
|
/**
|
|
11
11
|
* Pattern matching common AI-tool attribution footers that should be
|
|
12
12
|
* replaced (e.g. "Generated with Claude Code", "Co-Authored-By: Claude").
|
|
13
13
|
*/
|
|
14
14
|
const UNWANTED_BRANDING_PATTERN = /\n*(?:🤖\s*)?Generated with \[Claude Code\]\(https:\/\/claude\.com\/claude-code\)\s*/gi;
|
|
15
15
|
/**
|
|
16
|
-
* Ensure a PR body carries the correct
|
|
16
|
+
* Ensure a PR body carries the correct ShipIT AI branding.
|
|
17
17
|
*
|
|
18
18
|
* 1. Strips any unwanted AI-tool attribution footers
|
|
19
|
-
* 2. Appends the
|
|
19
|
+
* 2. Appends the ShipIT AI branding line if not already present
|
|
20
20
|
*/
|
|
21
21
|
export function applyPrBranding(body) {
|
|
22
22
|
// Strip unwanted branding
|
package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Feature Context Builder
|
|
3
3
|
*
|
|
4
4
|
* Builds the system prompt context for the interactive agent session.
|
|
5
|
-
* Includes
|
|
5
|
+
* Includes ShipIT AI identity, CLI reference, feature context, and behavioral guidelines.
|
|
6
6
|
* The output string is suitable for use as systemPrompt content in SDK sessions.
|
|
7
7
|
*/
|
|
8
8
|
import type { Feature } from '../../../domain/generated/output.js';
|