@shipit-ai/cli 1.168.0 → 1.169.0-pr12.6d78faf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apis/json-schema/FeatureFlags.yaml +5 -0
- package/apis/json-schema/LiteLLMProxyConfig.yaml +14 -0
- package/apis/json-schema/Settings.yaml +3 -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/plugin-marketplace.interface.d.ts +46 -0
- package/dist/packages/core/src/application/ports/output/services/plugin-marketplace.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/plugin-marketplace.interface.js +12 -0
- package/dist/packages/core/src/application/use-cases/plugins/add-marketplace.use-case.d.ts +16 -0
- package/dist/packages/core/src/application/use-cases/plugins/add-marketplace.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/plugins/add-marketplace.use-case.js +34 -0
- package/dist/packages/core/src/application/use-cases/plugins/fetch-plugin-catalog.use-case.d.ts +24 -0
- package/dist/packages/core/src/application/use-cases/plugins/fetch-plugin-catalog.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/plugins/fetch-plugin-catalog.use-case.js +52 -0
- package/dist/packages/core/src/application/use-cases/plugins/install-plugin.use-case.d.ts +17 -0
- package/dist/packages/core/src/application/use-cases/plugins/install-plugin.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/plugins/install-plugin.use-case.js +33 -0
- package/dist/packages/core/src/application/use-cases/plugins/toggle-plugin.use-case.d.ts +17 -0
- package/dist/packages/core/src/application/use-cases/plugins/toggle-plugin.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/plugins/toggle-plugin.use-case.js +33 -0
- package/dist/packages/core/src/application/use-cases/plugins/uninstall-plugin.use-case.d.ts +16 -0
- package/dist/packages/core/src/application/use-cases/plugins/uninstall-plugin.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/plugins/uninstall-plugin.use-case.js +33 -0
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +25 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- 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 +13 -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 +12 -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 +22 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +4 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +18 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-litellm-proxy.d.ts +14 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-litellm-proxy.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-add-litellm-proxy.js +28 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/index.d.ts +4 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/index.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/index.js +3 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.schema.d.ts +78 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.schema.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.schema.js +46 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.service.d.ts +29 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.service.js +147 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.validators.d.ts +11 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.validators.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/plugin-marketplace/plugin-marketplace.validators.js +47 -0
- package/dist/src/presentation/web/app/actions/add-marketplace.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/add-marketplace.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/add-marketplace.js +11 -0
- package/dist/src/presentation/web/app/actions/fetch-plugin-catalog.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/fetch-plugin-catalog.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/fetch-plugin-catalog.js +11 -0
- package/dist/src/presentation/web/app/actions/install-plugin.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/install-plugin.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/install-plugin.js +11 -0
- package/dist/src/presentation/web/app/actions/toggle-plugin.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/toggle-plugin.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/toggle-plugin.js +11 -0
- package/dist/src/presentation/web/app/actions/uninstall-plugin.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/uninstall-plugin.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/uninstall-plugin.js +11 -0
- package/dist/src/presentation/web/app/plugins/page.d.ts +2 -0
- package/dist/src/presentation/web/app/plugins/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/plugins/page.js +23 -0
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +1 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-card.d.ts +9 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-card.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-card.js +15 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-card.stories.d.ts +17 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-card.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-card.stories.js +60 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.d.ts +11 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.js +33 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.stories.d.ts +18 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/plugins/plugin-detail-drawer.stories.js +51 -0
- package/dist/src/presentation/web/components/features/plugins/plugins-page-client.d.ts +6 -0
- package/dist/src/presentation/web/components/features/plugins/plugins-page-client.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/plugins/plugins-page-client.js +115 -0
- package/dist/src/presentation/web/components/features/plugins/plugins-page-client.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/features/plugins/plugins-page-client.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/plugins/plugins-page-client.stories.js +24 -0
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts +3 -3
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +23 -102
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +2 -3
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +18 -22
- package/dist/src/presentation/web/components/features/settings/ci-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/ci-settings-section.js +14 -5
- package/dist/src/presentation/web/components/features/settings/database-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/database-settings-section.js +14 -4
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts +9 -3
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.js +75 -65
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.js +20 -18
- package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.js +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts +3 -3
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +53 -50
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +27 -25
- package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.js +3 -3
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.d.ts +6 -0
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.js +76 -0
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.stories.d.ts +15 -0
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.stories.js +29 -0
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts +3 -3
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.js +64 -47
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.js +32 -24
- 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 +29 -378
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +2 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +14 -0
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts +8 -8
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.js +3 -6
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.js +7 -7
- package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.js +1 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts +3 -3
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +118 -165
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +26 -64
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -0
- package/dist/src/presentation/web/components/ui/tooltip.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/tooltip.js +3 -3
- package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/feature-flags-context.js +1 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/feature-flags.js +6 -0
- package/dist/translations/ar/web.json +40 -2
- package/dist/translations/de/web.json +40 -2
- package/dist/translations/en/web.json +40 -2
- package/dist/translations/es/web.json +40 -2
- package/dist/translations/fr/web.json +40 -2
- package/dist/translations/he/web.json +40 -2
- package/dist/translations/pt/web.json +40 -2
- package/dist/translations/ru/web.json +40 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/build-manifest.json +3 -3
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/routes-manifest.json +6 -0
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +1 -1
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions-batch/route.js +1 -1
- package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
- package/web/.next/server/app/plugins/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/plugins/page/build-manifest.json +18 -0
- package/web/.next/server/app/plugins/page/next-font-manifest.json +10 -0
- package/web/.next/server/app/plugins/page/react-loadable-manifest.json +8 -0
- package/web/.next/server/app/plugins/page/server-reference-manifest.json +185 -0
- package/web/.next/server/app/plugins/page.js +17 -0
- package/web/.next/server/app/plugins/page.js.map +5 -0
- package/web/.next/server/app/plugins/page.js.nft.json +1 -0
- package/web/.next/server/app/plugins/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/settings/page/server-reference-manifest.json +34 -22
- package/web/.next/server/app/settings/page.js +1 -1
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +1 -0
- package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js.map +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__0zu_byw._.js → [root-of-the-server]__07suer1._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__0u1jyv9._.js → [root-of-the-server]__0sgzo7y._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__08cpfre._.js → [root-of-the-server]__0uxlr84._.js} +2 -2
- 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_esm_build_templates_app-page_0y6lfp8.js +4 -0
- package/web/.next/server/chunks/ssr/11es_next_dist_esm_build_templates_app-page_0y6lfp8.js.map +1 -0
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_04s_q5r._.js → 12k._sonner_dist_index_mjs_0-vmpk5._.js} +2 -2
- package/web/.next/server/chunks/ssr/12k._sonner_dist_index_mjs_0-vmpk5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0rvrr1j._.js → [root-of-the-server]__0.5ojmt._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04h~gav._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04h~gav._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.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]__0tq2syh._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0~v1~b9._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0~v1~b9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_00u~.41._.js → _03x4h9e._.js} +2 -2
- package/web/.next/server/chunks/ssr/_03x4h9e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_0~0jkp_._.js → _05fk0a4._.js} +2 -2
- package/web/.next/server/chunks/ssr/_05fk0a4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_069y.js._.js +2 -2
- package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0r04xhw._.js → _07u.4jr._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0r04xhw._.js.map → _07u.4jr._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_083k45~._.js +3 -0
- package/web/.next/server/chunks/ssr/_083k45~._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0__4si~._.js +1 -1
- package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0_m17kl._.js +1 -1
- package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0d4miu.._.js +1 -1
- package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0e8ern9._.js +1 -1
- package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0i~-084._.js +3 -0
- package/web/.next/server/chunks/ssr/_0i~-084._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0kt18~b._.js +3 -0
- package/web/.next/server/chunks/ssr/_0kt18~b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_08_079y._.js → _0mj-tmi._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_08_079y._.js.map → _0mj-tmi._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_0hw~zvl._.js → _0o_oaao._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0o_oaao._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js +2 -2
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js +1 -1
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0rcx2-c._.js +9 -0
- package/web/.next/server/chunks/ssr/_0rcx2-c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0t59q8r._.js +1 -1
- package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0tcccbb._.js +1 -1
- package/web/.next/server/chunks/ssr/_0tcccbb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0tfz1v_._.js +3 -0
- package/web/.next/server/chunks/ssr/_0tfz1v_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_0txr945._.js → _0u3d8.n._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0u3d8.n._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_09r54oy._.js → _0ygafoy._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_09r54oy._.js.map → _0ygafoy._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js +1 -1
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_10joy2y._.js +3 -0
- package/web/.next/server/chunks/ssr/_10joy2y._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1161g9x._.js +1 -1
- package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_12uy.45._.js +3 -0
- package/web/.next/server/chunks/ssr/_12uy.45._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/next-font-manifest.js +1 -1
- package/web/.next/server/next-font-manifest.json +3 -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 +187 -61
- package/web/.next/static/chunks/{0_xww9bsde~1x.js → 01~u_q8i2zgcl.js} +2 -2
- package/web/.next/static/chunks/{06nsv-_ec9ehn.js → 025ml1.quzhqf.js} +1 -1
- package/web/.next/static/chunks/{0fg~vc93spa9c.js → 07gal-~-zwagj.js} +1 -1
- package/web/.next/static/chunks/07le1mov593z9.js +1 -0
- package/web/.next/static/chunks/09ungqk9~va40.js +1 -0
- package/web/.next/static/chunks/0ab36sfvo.9ai.js +1 -0
- package/web/.next/static/chunks/0aq9-lg.5r.nk.js +5 -0
- package/web/.next/static/chunks/{0in4l8mne5y~_.js → 0b2pi58fg3lt3.js} +1 -1
- package/web/.next/static/chunks/{0cv09-g0prv4o.js → 0cvyulutrctst.js} +1 -1
- package/web/.next/static/chunks/0eqi_uuiepxhf.js +1 -0
- package/web/.next/static/chunks/{0v~n9z6b639zm.js → 0jwq.mr-.ltps.js} +1 -1
- package/web/.next/static/chunks/0k8m.qcahm63g.js +1 -0
- package/web/.next/static/chunks/0lc0x8kcu46ae.js +1 -0
- package/web/.next/static/chunks/0lz-oq74e_ciu.js +1 -0
- package/web/.next/static/chunks/0nkujbu62z1jl.js +7 -0
- package/web/.next/static/chunks/0oadtfnesfdqc.js +1 -0
- package/web/.next/static/chunks/{0ygtupas8pxdi.js → 0uryz2ek77e2a.js} +1 -1
- package/web/.next/static/chunks/0v7r7y~3e~oo6.css +1 -0
- package/web/.next/static/chunks/{0hg8qgtv~kuys.js → 0xo.hi4px83w2.js} +1 -1
- package/web/.next/static/chunks/{0_v4t6gzx.332.js → 0xr0p_ynap2~d.js} +1 -1
- package/web/.next/static/chunks/0xtzpbc5mm5z7.js +5 -0
- package/web/.next/static/chunks/{133q8d69p6cl0.js → 0~-kk8o121_13.js} +1 -1
- package/web/.next/static/chunks/{078lp287u~c~b.js → 16k169s1a_8ru.js} +1 -1
- package/web/.next/static/chunks/{17c31c1biwfyi.js → 17dp77weos4ao.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0qxd563._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0qxd563._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_00u~.41._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_04s_q5r._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0dy8.0k._.js +0 -3
- package/web/.next/server/chunks/ssr/_0dy8.0k._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0gdghcr._.js +0 -3
- package/web/.next/server/chunks/ssr/_0gdghcr._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0hw~zvl._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0l2~~pi._.js +0 -3
- package/web/.next/server/chunks/ssr/_0l2~~pi._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0mi5qj~._.js +0 -3
- package/web/.next/server/chunks/ssr/_0mi5qj~._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0n.magx._.js +0 -3
- package/web/.next/server/chunks/ssr/_0n.magx._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0txr945._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0y8u4.e._.js +0 -9
- package/web/.next/server/chunks/ssr/_0y8u4.e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0~0jkp_._.js.map +0 -1
- package/web/.next/static/chunks/0-ud~1jj7chzu.js +0 -7
- package/web/.next/static/chunks/01znjuvi5t9~q.js +0 -5
- package/web/.next/static/chunks/033sl_l5o3uo8.css +0 -1
- package/web/.next/static/chunks/04r9m_5p953mf.js +0 -1
- package/web/.next/static/chunks/07i3-aamszsoh.js +0 -1
- package/web/.next/static/chunks/0ee1d3_y40g9f.js +0 -1
- package/web/.next/static/chunks/0n3kuj7t_-jzp.js +0 -1
- package/web/.next/static/chunks/0pt-d18f7zxvv.js +0 -1
- package/web/.next/static/chunks/12pd180jp8zu..js +0 -5
- package/web/.next/static/chunks/13fcwhkw7dle2.js +0 -1
- package/web/.next/static/chunks/15mks7_3venc1.js +0 -1
- /package/web/.next/server/chunks/{[root-of-the-server]__0zu_byw._.js.map → [root-of-the-server]__07suer1._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__0u1jyv9._.js.map → [root-of-the-server]__0sgzo7y._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__08cpfre._.js.map → [root-of-the-server]__0uxlr84._.js.map} +0 -0
- /package/web/.next/static/{LQMB6QAutWzPQnLUZG96y → vD7xT4_iwKDhgj4-rr637}/_buildManifest.js +0 -0
- /package/web/.next/static/{LQMB6QAutWzPQnLUZG96y → vD7xT4_iwKDhgj4-rr637}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{LQMB6QAutWzPQnLUZG96y → vD7xT4_iwKDhgj4-rr637}/_ssgManifest.js +0 -0
|
@@ -1,104 +1,25 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx
|
|
3
|
-
import { useState
|
|
4
|
-
import { Bot
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
{ value: AgentAuthMethod.Session, label: 'Session' },
|
|
26
|
-
{ value: AgentAuthMethod.Token, label: 'Token' },
|
|
27
|
-
];
|
|
28
|
-
/** Resolve the current permission mode for the active agent from settings. */
|
|
29
|
-
function resolvePermissionMode(agent) {
|
|
30
|
-
const perms = agent.permissions;
|
|
31
|
-
if (!perms)
|
|
32
|
-
return undefined;
|
|
33
|
-
const keyMap = {
|
|
34
|
-
[AgentType.ClaudeCode]: 'claudeCode',
|
|
35
|
-
[AgentType.Cursor]: 'cursor',
|
|
36
|
-
[AgentType.GeminiCli]: 'geminiCli',
|
|
37
|
-
[AgentType.CodexCli]: 'codexCli',
|
|
38
|
-
[AgentType.CopilotCli]: 'copilotCli',
|
|
39
|
-
[AgentType.RovoDev]: 'rovoDev',
|
|
40
|
-
};
|
|
41
|
-
const key = keyMap[agent.type];
|
|
42
|
-
return key ? perms[key] : undefined;
|
|
43
|
-
}
|
|
44
|
-
export function AgentSettingsSection({ agent }) {
|
|
45
|
-
const [agentType, setAgentType] = useState(agent.type);
|
|
46
|
-
const [authMethod, setAuthMethod] = useState(agent.authMethod);
|
|
47
|
-
const [token, setToken] = useState(agent.token ?? '');
|
|
48
|
-
const [showToken, setShowToken] = useState(false);
|
|
49
|
-
const [permissionMode, setPermissionMode] = useState(resolvePermissionMode(agent));
|
|
50
|
-
const [isPending, startTransition] = useTransition();
|
|
51
|
-
const [showSaved, setShowSaved] = useState(false);
|
|
52
|
-
const prevPendingRef = useRef(false);
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
if (prevPendingRef.current && !isPending) {
|
|
55
|
-
setShowSaved(true);
|
|
56
|
-
const timer = setTimeout(() => setShowSaved(false), 2000);
|
|
57
|
-
return () => clearTimeout(timer);
|
|
58
|
-
}
|
|
59
|
-
prevPendingRef.current = isPending;
|
|
60
|
-
}, [isPending]);
|
|
61
|
-
function save(payload) {
|
|
62
|
-
startTransition(async () => {
|
|
63
|
-
const result = await updateSettingsAction(payload);
|
|
64
|
-
if (!result.success) {
|
|
65
|
-
toast.error(result.error ?? 'Failed to save agent settings');
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
function buildPayload(overrides = {}) {
|
|
70
|
-
const merged = { type: agentType, authMethod, ...overrides };
|
|
71
|
-
const result = { type: merged.type, authMethod: merged.authMethod };
|
|
72
|
-
if (merged.authMethod === AgentAuthMethod.Token) {
|
|
73
|
-
result.token = overrides.token ?? token;
|
|
74
|
-
}
|
|
75
|
-
return { agent: result };
|
|
76
|
-
}
|
|
77
|
-
function handleAgentTypeChange(value) {
|
|
78
|
-
setAgentType(value);
|
|
79
|
-
setPermissionMode(undefined); // Reset permission mode when agent changes
|
|
80
|
-
save(buildPayload({ type: value }));
|
|
81
|
-
}
|
|
82
|
-
function handlePermissionModeChange(mode) {
|
|
83
|
-
setPermissionMode(mode);
|
|
84
|
-
startTransition(async () => {
|
|
85
|
-
const result = await setAgentPermissionMode(agentType, mode);
|
|
86
|
-
if (!result.success) {
|
|
87
|
-
toast.error(result.error ?? 'Failed to save permission mode');
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
function handleAuthMethodChange(value) {
|
|
92
|
-
setAuthMethod(value);
|
|
93
|
-
save(buildPayload({ authMethod: value }));
|
|
94
|
-
}
|
|
95
|
-
function handleTokenBlur() {
|
|
96
|
-
if (token !== (agent.token ?? '')) {
|
|
97
|
-
save(buildPayload({ token }));
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return (_jsxs(Card, { id: "agent", className: "scroll-mt-6", "data-testid": "agent-settings-section", children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Bot, { className: "text-muted-foreground h-4 w-4" }), _jsx(CardTitle, { children: "Preferred Agent" })] }), isPending ? _jsx("span", { className: "text-muted-foreground text-xs", children: "Saving..." }) : null, showSaved && !isPending ? (_jsxs("span", { className: "flex items-center gap-1 text-xs text-green-600", children: [_jsx(Check, { className: "h-3 w-3" }), "Saved"] })) : null] }), _jsx(CardDescription, { children: "Choose your AI coding agent and authentication method" })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "agent-type", children: "Agent Type" }), _jsxs(Select, { value: agentType, onValueChange: handleAgentTypeChange, children: [_jsx(SelectTrigger, { id: "agent-type", "data-testid": "agent-type-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AGENT_TYPE_OPTIONS.map((opt) => {
|
|
101
|
-
const Icon = getAgentTypeIcon(opt.value);
|
|
102
|
-
return (_jsx(SelectItem, { value: opt.value, children: _jsxs("span", { className: "flex items-center gap-2", children: [_jsx(Icon, { className: "h-4 w-4 shrink-0" }), opt.label] }) }, opt.value));
|
|
103
|
-
}) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "auth-method", children: "Authentication Method" }), _jsxs(Select, { value: authMethod, onValueChange: handleAuthMethodChange, children: [_jsx(SelectTrigger, { id: "auth-method", "data-testid": "auth-method-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AUTH_METHOD_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] })] }), _jsx(AgentPermissionPicker, { agentType: agentType, currentMode: permissionMode, onChange: handlePermissionModeChange, disabled: isPending }), authMethod === AgentAuthMethod.Token && (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "agent-token", children: "API Token" }), _jsxs("div", { className: "relative", children: [_jsx(Input, { id: "agent-token", "data-testid": "agent-token-input", type: showToken ? 'text' : 'password', value: token, onChange: (e) => setToken(e.target.value), onBlur: handleTokenBlur, placeholder: "Enter your API token", className: "pe-10" }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "absolute top-0 right-0 h-full px-3 hover:bg-transparent", onClick: () => setShowToken(!showToken), "data-testid": "toggle-token-visibility", "aria-label": showToken ? 'Hide token' : 'Show token', children: showToken ? _jsx(EyeOff, { className: "h-4 w-4" }) : _jsx(Eye, { className: "h-4 w-4" }) })] }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Saves automatically when you leave the field" })] }))] })] }));
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { Bot } from 'lucide-react';
|
|
5
|
+
import { useTranslation } from 'react-i18next';
|
|
6
|
+
import { AgentModelPicker } from '../../features/settings/AgentModelPicker/index.js';
|
|
7
|
+
import { SettingsSection, SettingsRow } from './settings-section-utils.js';
|
|
8
|
+
export function AgentSettingsSection({ settings }) {
|
|
9
|
+
const { t } = useTranslation('web');
|
|
10
|
+
const [agentType, setAgentType] = useState(settings.agent.type);
|
|
11
|
+
return (_jsx(SettingsSection, { icon: Bot, title: t('settings.agent.sectionTitle'), description: t('settings.agent.sectionDescription'), testId: "agent-settings-section", tooltip: t('settings.agent.hint'), tooltipLinks: [
|
|
12
|
+
{
|
|
13
|
+
label: t('settings.agent.links.agentSystem'),
|
|
14
|
+
href: 'https://github.com/jrmatherly/shipit/blob/main/docs/architecture/agent-system.md',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
label: t('settings.agent.links.addingAgents'),
|
|
18
|
+
href: 'https://github.com/jrmatherly/shipit/blob/main/docs/development/adding-agents.md',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
label: t('settings.agent.links.configurationGuide'),
|
|
22
|
+
href: 'https://github.com/jrmatherly/shipit/blob/main/docs/guides/configuration.md',
|
|
23
|
+
},
|
|
24
|
+
], children: _jsx(SettingsRow, { label: t('settings.agent.agentAndModel'), description: t('settings.agent.agentAndModelDescription'), tooltip: "Changing the agent switches which AI CLI tool runs your features. Each agent has different capabilities, speed, and cost tradeoffs.", htmlFor: "agent-model-picker", children: _jsx(AgentModelPicker, { initialAgentType: agentType, initialModel: settings.models.default, mode: "settings", onAgentModelChange: (newAgent) => setAgentType(newAgent), className: "w-55" }) }) }));
|
|
104
25
|
}
|
package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts
CHANGED
|
@@ -11,7 +11,6 @@ declare const meta: {
|
|
|
11
11
|
export default meta;
|
|
12
12
|
type Story = StoryObj<typeof meta>;
|
|
13
13
|
export declare const Default: Story;
|
|
14
|
-
export declare const
|
|
15
|
-
export declare const
|
|
16
|
-
export declare const CopilotCli: Story;
|
|
14
|
+
export declare const GeminiAgent: Story;
|
|
15
|
+
export declare const CursorAgent: Story;
|
|
17
16
|
//# sourceMappingURL=agent-settings-section.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/agent-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/agent-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAMhE,QAAA,MAAM,IAAI;;;;;;;CAOmC,CAAC;AAE9C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAUzB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAUzB,CAAC"}
|
package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { AgentSettingsSection } from './agent-settings-section.js';
|
|
2
|
-
import {
|
|
2
|
+
import { createDefaultSettings } from '../../../../../../packages/core/src/domain/factories/settings-defaults.factory.js';
|
|
3
|
+
import { AgentType } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
4
|
+
const baseSettings = createDefaultSettings();
|
|
3
5
|
const meta = {
|
|
4
6
|
title: 'Features/Settings/AgentSettingsSection',
|
|
5
7
|
component: AgentSettingsSection,
|
|
@@ -11,34 +13,28 @@ const meta = {
|
|
|
11
13
|
export default meta;
|
|
12
14
|
export const Default = {
|
|
13
15
|
args: {
|
|
14
|
-
|
|
15
|
-
type: AgentType.ClaudeCode,
|
|
16
|
-
authMethod: AgentAuthMethod.Session,
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
};
|
|
20
|
-
export const TokenAuth = {
|
|
21
|
-
args: {
|
|
22
|
-
agent: {
|
|
23
|
-
type: AgentType.GeminiCli,
|
|
24
|
-
authMethod: AgentAuthMethod.Token,
|
|
25
|
-
token: 'sk-test-token-12345',
|
|
26
|
-
},
|
|
16
|
+
settings: baseSettings,
|
|
27
17
|
},
|
|
28
18
|
};
|
|
29
|
-
export const
|
|
19
|
+
export const GeminiAgent = {
|
|
30
20
|
args: {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
21
|
+
settings: {
|
|
22
|
+
...baseSettings,
|
|
23
|
+
agent: {
|
|
24
|
+
...baseSettings.agent,
|
|
25
|
+
type: AgentType.GeminiCli,
|
|
26
|
+
},
|
|
34
27
|
},
|
|
35
28
|
},
|
|
36
29
|
};
|
|
37
|
-
export const
|
|
30
|
+
export const CursorAgent = {
|
|
38
31
|
args: {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
settings: {
|
|
33
|
+
...baseSettings,
|
|
34
|
+
agent: {
|
|
35
|
+
...baseSettings.agent,
|
|
36
|
+
type: AgentType.Cursor,
|
|
37
|
+
},
|
|
42
38
|
},
|
|
43
39
|
},
|
|
44
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/ci-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAGxE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAQD,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"ci-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/ci-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAGxE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAQD,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CA8KrE"}
|
|
@@ -52,19 +52,28 @@ export function CiSettingsSection({ settings }) {
|
|
|
52
52
|
},
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
-
return (_jsxs(SettingsSection, { icon: Activity, title: t('settings.ci.title'), description: t('settings.ci.description'), testId: "ci-settings-section",
|
|
55
|
+
return (_jsxs(SettingsSection, { icon: Activity, title: t('settings.ci.title'), description: t('settings.ci.description'), testId: "ci-settings-section", tooltip: t('settings.ci.hint'), tooltipLinks: [
|
|
56
|
+
{
|
|
57
|
+
label: t('settings.ci.links.cicdPipeline'),
|
|
58
|
+
href: 'https://github.com/jrmatherly/shipit/blob/main/docs/development/cicd.md',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
label: t('settings.ci.links.ciSecurityGates'),
|
|
62
|
+
href: 'https://github.com/jrmatherly/shipit/blob/main/specs/003-cicd-security-gates/spec.md',
|
|
63
|
+
},
|
|
64
|
+
], children: [_jsx(SettingsRow, { label: t('settings.ci.maxFixAttempts'), description: t('settings.ci.maxFixAttemptsDescription'), tooltip: "How many times the agent will attempt to fix failing CI checks before giving up. Higher values increase the chance of auto-resolution but consume more agent time and API calls.", htmlFor: "ci-max-fix", children: _jsx(NumberStepper, { id: "ci-max-fix", testId: "ci-max-fix-input", placeholder: "3", value: ciMaxFix, onChange: setCiMaxFix, onBlur: () => {
|
|
56
65
|
if (ciMaxFix !== originalCiMaxFix)
|
|
57
66
|
save(buildPayload({ ciMaxFix }));
|
|
58
|
-
}, min: 1, max: 10 }) }), _jsx(SettingsRow, { label: t('settings.ci.watchTimeout'), description: t('settings.ci.watchTimeoutDescription'), htmlFor: "ci-timeout", children: _jsx(NumberStepper, { id: "ci-timeout", testId: "ci-timeout-input", placeholder: "300", value: ciTimeout, onChange: setCiTimeout, onBlur: () => {
|
|
67
|
+
}, min: 1, max: 10 }) }), _jsx(SettingsRow, { label: t('settings.ci.watchTimeout'), description: t('settings.ci.watchTimeoutDescription'), tooltip: "Maximum time the agent will wait for CI to finish. If CI hasn't completed within this window, the agent stops watching. Increase for repos with slow CI pipelines.", htmlFor: "ci-timeout", children: _jsx(NumberStepper, { id: "ci-timeout", testId: "ci-timeout-input", placeholder: "300", value: ciTimeout, onChange: setCiTimeout, onBlur: () => {
|
|
59
68
|
if (ciTimeout !== originalCiTimeout)
|
|
60
69
|
save(buildPayload({ ciTimeout }));
|
|
61
|
-
}, min: 30, step: 30, suffix: "sec" }) }), _jsx(SettingsRow, { label: t('settings.ci.maxLogSize'), description: t('settings.ci.maxLogSizeDescription'), htmlFor: "ci-log-max", children: _jsx(NumberStepper, { id: "ci-log-max", testId: "ci-log-max-input", placeholder: "50000", value: ciLogMax, onChange: setCiLogMax, onBlur: () => {
|
|
70
|
+
}, min: 30, step: 30, suffix: "sec" }) }), _jsx(SettingsRow, { label: t('settings.ci.maxLogSize'), description: t('settings.ci.maxLogSizeDescription'), tooltip: "CI logs beyond this character limit are truncated before being sent to the agent for analysis. Keeps agent context focused and avoids excessive token usage.", htmlFor: "ci-log-max", children: _jsx(NumberStepper, { id: "ci-log-max", testId: "ci-log-max-input", placeholder: "50000", value: ciLogMax, onChange: setCiLogMax, onBlur: () => {
|
|
62
71
|
if (ciLogMax !== originalCiLogMax)
|
|
63
72
|
save(buildPayload({ ciLogMax }));
|
|
64
|
-
}, min: 1000, step: 5000, suffix: "chars" }) }), _jsx(SettingsRow, { label: t('settings.ci.pollInterval'), description: t('settings.ci.pollIntervalDescription'), htmlFor: "ci-poll-interval", children: _jsx(NumberStepper, { id: "ci-poll-interval", testId: "ci-poll-interval-input", placeholder: "30", value: ciPollInterval, onChange: setCiPollInterval, onBlur: () => {
|
|
73
|
+
}, min: 1000, step: 5000, suffix: "chars" }) }), _jsx(SettingsRow, { label: t('settings.ci.pollInterval'), description: t('settings.ci.pollIntervalDescription'), tooltip: "How frequently the agent checks GitHub for CI status updates. Lower values give faster feedback but increase API call volume.", htmlFor: "ci-poll-interval", children: _jsx(NumberStepper, { id: "ci-poll-interval", testId: "ci-poll-interval-input", placeholder: "30", value: ciPollInterval, onChange: setCiPollInterval, onBlur: () => {
|
|
65
74
|
if (ciPollInterval !== originalCiPollInterval)
|
|
66
75
|
save(buildPayload({ ciPollInterval }));
|
|
67
|
-
}, min: 5, step: 5, suffix: "sec" }) }), _jsx(SwitchRow, { label: t('settings.ci.hideCiStatus'), description: t('settings.ci.hideCiStatusDescription'), id: "hide-ci-status", testId: "switch-hide-ci-status", checked: hideCiStatus, onChange: (v) => {
|
|
76
|
+
}, min: 5, step: 5, suffix: "sec" }) }), _jsx(SwitchRow, { label: t('settings.ci.hideCiStatus'), description: t('settings.ci.hideCiStatusDescription'), tooltip: "When enabled, CI status indicators are hidden from the feature drawer and merge review panels. Useful if you monitor CI through GitHub directly.", id: "hide-ci-status", testId: "switch-hide-ci-status", checked: hideCiStatus, onChange: (v) => {
|
|
68
77
|
setHideCiStatus(v);
|
|
69
78
|
save(buildPayload({ hideCiStatus: v }));
|
|
70
79
|
} })] }));
|
package/dist/src/presentation/web/components/features/settings/database-settings-section.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/database-settings-section.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,UAAU,GACX,EAAE,4BAA4B,
|
|
1
|
+
{"version":3,"file":"database-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/database-settings-section.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,UAAU,GACX,EAAE,4BAA4B,2CA2C9B"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Database
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { Database } from 'lucide-react';
|
|
4
|
+
import { useTranslation } from 'react-i18next';
|
|
5
|
+
import { SettingsSection, SettingsRow } from './settings-section-utils.js';
|
|
6
6
|
export function DatabaseSettingsSection({ shipitAiHome, dbFileSize, }) {
|
|
7
|
-
|
|
7
|
+
const { t } = useTranslation('web');
|
|
8
|
+
return (_jsxs(SettingsSection, { icon: Database, title: t('settings.database.title'), description: t('settings.database.sectionDescription'), testId: "database-settings-section", tooltip: t('settings.database.hint'), tooltipLinks: [
|
|
9
|
+
{
|
|
10
|
+
label: t('settings.database.links.settingsService'),
|
|
11
|
+
href: 'https://github.com/jrmatherly/shipit/blob/main/docs/architecture/settings-service.md',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
label: t('settings.database.links.settingsSpec'),
|
|
15
|
+
href: 'https://github.com/jrmatherly/shipit/blob/main/specs/005-global-settings-service/spec.md',
|
|
16
|
+
},
|
|
17
|
+
], children: [_jsx(SettingsRow, { label: t('settings.database.location'), description: t('settings.database.locationDescription'), tooltip: "The directory where ShipIT stores its SQLite database, logs, and configuration files. Change this via the SHIPIT_AI_HOME environment variable.", children: _jsx("span", { className: "text-muted-foreground max-w-50 truncate font-mono text-xs", "data-testid": "shipit-ai-home-path", children: shipitAiHome }) }), _jsx(SettingsRow, { label: t('settings.database.size'), tooltip: "Current size of the SQLite database file on disk. Large databases may slow down startup; consider archiving old features if this grows significantly.", children: _jsx("span", { className: "text-muted-foreground text-xs", "data-testid": "db-file-size", children: dbFileSize }) })] }));
|
|
8
18
|
}
|
package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Settings } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
2
2
|
import type { AvailableTerminal } from '../../../app/actions/get-available-terminals.js';
|
|
3
|
+
import type { AvailableEditor } from '../../../app/actions/get-available-editors.js';
|
|
4
|
+
import type { AvailableShell } from '../../../app/actions/get-available-shells.js';
|
|
5
|
+
export declare const DEFAULT_EDITOR_OPTIONS: AvailableEditor[];
|
|
6
|
+
export declare const DEFAULT_SHELL_OPTIONS: AvailableShell[];
|
|
3
7
|
export interface EnvironmentSettingsSectionProps {
|
|
4
|
-
|
|
8
|
+
settings: Settings;
|
|
9
|
+
availableEditors?: AvailableEditor[];
|
|
10
|
+
availableShells?: AvailableShell[];
|
|
5
11
|
availableTerminals?: AvailableTerminal[];
|
|
6
12
|
}
|
|
7
|
-
export declare function EnvironmentSettingsSection({
|
|
13
|
+
export declare function EnvironmentSettingsSection({ settings, availableEditors, availableShells, availableTerminals, }: EnvironmentSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
8
14
|
//# sourceMappingURL=environment-settings-section.d.ts.map
|
package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/environment-settings-section.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"environment-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/environment-settings-section.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,eAAO,MAAM,sBAAsB,EAAE,eAAe,EAMnD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,cAAc,EAIjD,CAAC;AAEF,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAED,wBAAgB,0BAA0B,CAAC,EACzC,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,EAAE,+BAA+B,2CAkMjC"}
|
package/dist/src/presentation/web/components/features/settings/environment-settings-section.js
CHANGED
|
@@ -1,81 +1,91 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useTransition
|
|
4
|
-
import { Terminal
|
|
3
|
+
import { useState, useTransition } from 'react';
|
|
4
|
+
import { Terminal } from 'lucide-react';
|
|
5
5
|
import { toast } from 'sonner';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
|
+
import { cn } from '../../../lib/utils.js';
|
|
8
8
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/select.js';
|
|
9
|
+
import { Badge } from '../../ui/badge.js';
|
|
9
10
|
import { updateSettingsAction } from '../../../app/actions/update-settings.js';
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
{
|
|
15
|
-
{
|
|
16
|
-
{
|
|
11
|
+
import { TerminalType } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
12
|
+
import { getEditorTypeIcon } from '../../common/editor-type-icons.js';
|
|
13
|
+
import { SettingsSection, SettingsRow } from './settings-section-utils.js';
|
|
14
|
+
export const DEFAULT_EDITOR_OPTIONS = [
|
|
15
|
+
{ id: 'vscode', name: 'VS Code', available: true },
|
|
16
|
+
{ id: 'cursor', name: 'Cursor', available: true },
|
|
17
|
+
{ id: 'windsurf', name: 'Windsurf', available: true },
|
|
18
|
+
{ id: 'zed', name: 'Zed', available: true },
|
|
19
|
+
{ id: 'antigravity', name: 'Antigravity', available: true },
|
|
17
20
|
];
|
|
18
|
-
const
|
|
19
|
-
{
|
|
20
|
-
{
|
|
21
|
-
{
|
|
21
|
+
export const DEFAULT_SHELL_OPTIONS = [
|
|
22
|
+
{ id: 'bash', name: 'Bash', available: true },
|
|
23
|
+
{ id: 'zsh', name: 'Zsh', available: true },
|
|
24
|
+
{ id: 'fish', name: 'Fish', available: true },
|
|
22
25
|
];
|
|
23
|
-
export function EnvironmentSettingsSection({
|
|
24
|
-
const
|
|
25
|
-
const [
|
|
26
|
-
const [
|
|
27
|
-
const [
|
|
28
|
-
const [
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
export function EnvironmentSettingsSection({ settings, availableEditors, availableShells, availableTerminals, }) {
|
|
27
|
+
const { t } = useTranslation('web');
|
|
28
|
+
const [, startTransition] = useTransition();
|
|
29
|
+
const [editor, setEditor] = useState(settings.environment.defaultEditor);
|
|
30
|
+
const [shell, setShell] = useState(settings.environment.shellPreference);
|
|
31
|
+
const [terminal, setTerminal] = useState(settings.environment.terminalPreference ?? TerminalType.System);
|
|
32
|
+
const terminalOptions = availableTerminals ?? [
|
|
33
|
+
{
|
|
34
|
+
id: TerminalType.System,
|
|
35
|
+
name: t('settings.environment.systemTerminal'),
|
|
36
|
+
available: true,
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
const editorOptions = availableEditors ?? DEFAULT_EDITOR_OPTIONS;
|
|
40
|
+
const shellOptions = availableShells ?? DEFAULT_SHELL_OPTIONS;
|
|
38
41
|
function save(payload) {
|
|
39
42
|
startTransition(async () => {
|
|
40
43
|
const result = await updateSettingsAction(payload);
|
|
41
44
|
if (!result.success) {
|
|
42
|
-
toast.error(result.error ?? '
|
|
45
|
+
toast.error(result.error ?? t('settings.failedToSave'));
|
|
43
46
|
}
|
|
44
47
|
});
|
|
45
48
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
defaultEditor: value,
|
|
51
|
-
shellPreference: shell,
|
|
52
|
-
terminalPreference: terminal,
|
|
49
|
+
return (_jsxs(SettingsSection, { icon: Terminal, title: t('settings.environment.sectionTitle'), description: t('settings.environment.sectionDescription'), testId: "environment-settings-section", tooltip: t('settings.environment.hint'), tooltipLinks: [
|
|
50
|
+
{
|
|
51
|
+
label: t('settings.environment.links.configurationGuide'),
|
|
52
|
+
href: 'https://github.com/jrmatherly/shipit/blob/main/docs/guides/configuration.md',
|
|
53
53
|
},
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
54
|
+
], children: [_jsx(SettingsRow, { label: t('settings.environment.defaultEditor'), description: t('settings.environment.defaultEditorDescription'), tooltip: "The editor that opens when you click 'Launch' on a tool card or when ShipIT needs to open a file for review.", htmlFor: "default-editor", children: _jsxs(Select, { value: editor, onValueChange: (v) => {
|
|
55
|
+
setEditor(v);
|
|
56
|
+
save({
|
|
57
|
+
environment: {
|
|
58
|
+
defaultEditor: v,
|
|
59
|
+
shellPreference: shell,
|
|
60
|
+
terminalPreference: terminal,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
}, children: [_jsx(SelectTrigger, { id: "default-editor", "data-testid": "editor-select", className: "w-64 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: editorOptions.map((opt) => {
|
|
64
|
+
const Icon = getEditorTypeIcon(opt.id);
|
|
65
|
+
return (_jsx(SelectItem, { value: opt.id, disabled: !opt.available, children: _jsxs("span", { className: "flex items-center gap-2 text-xs", children: [_jsx(Icon, { className: "h-4 w-4 shrink-0" }), opt.name, _jsx(Badge, { variant: "outline", className: cn('ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal', opt.available
|
|
66
|
+
? 'border-emerald-500/30 text-emerald-500'
|
|
67
|
+
: 'border-muted-foreground/30 text-muted-foreground'), children: opt.available ? 'Installed' : 'Not Installed' })] }) }, opt.id));
|
|
68
|
+
}) })] }) }), _jsx(SettingsRow, { label: t('settings.environment.shell'), description: t('settings.environment.shellDescription'), tooltip: "Controls which shell runs generated scripts like install commands and git operations. Match this to your daily driver shell.", htmlFor: "shell-preference", children: _jsxs(Select, { value: shell, onValueChange: (v) => {
|
|
69
|
+
setShell(v);
|
|
70
|
+
save({
|
|
71
|
+
environment: {
|
|
72
|
+
defaultEditor: editor,
|
|
73
|
+
shellPreference: v,
|
|
74
|
+
terminalPreference: terminal,
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
}, children: [_jsx(SelectTrigger, { id: "shell-preference", "data-testid": "shell-select", className: "w-64 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: shellOptions.map((opt) => (_jsx(SelectItem, { value: opt.id, disabled: !opt.available, children: _jsxs("span", { className: "flex items-center gap-2 text-xs", children: [opt.name, _jsx(Badge, { variant: "outline", className: cn('ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal', opt.available
|
|
78
|
+
? 'border-emerald-500/30 text-emerald-500'
|
|
79
|
+
: 'border-muted-foreground/30 text-muted-foreground'), children: opt.available ? 'Installed' : 'Not Installed' })] }) }, opt.id))) })] }) }), _jsx(SettingsRow, { label: t('settings.environment.terminal'), description: t('settings.environment.terminalDescription'), tooltip: "The terminal emulator launched when opening shell sessions from the web UI. Only affects web-launched terminals, not CLI usage.", htmlFor: "terminal-preference", children: _jsxs(Select, { value: terminal, onValueChange: (v) => {
|
|
80
|
+
setTerminal(v);
|
|
81
|
+
save({
|
|
82
|
+
environment: {
|
|
83
|
+
defaultEditor: editor,
|
|
84
|
+
shellPreference: shell,
|
|
85
|
+
terminalPreference: v,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}, children: [_jsx(SelectTrigger, { id: "terminal-preference", "data-testid": "terminal-select", className: "w-64 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: terminalOptions.map((opt) => (_jsx(SelectItem, { value: opt.id, disabled: !opt.available, children: _jsxs("span", { className: "flex items-center gap-2 text-xs", children: [opt.name, _jsx(Badge, { variant: "outline", className: cn('ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal', opt.available
|
|
89
|
+
? 'border-emerald-500/30 text-emerald-500'
|
|
90
|
+
: 'border-muted-foreground/30 text-muted-foreground'), children: opt.available ? 'Installed' : 'Not Installed' })] }) }, opt.id))) })] }) })] }));
|
|
81
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/environment-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"environment-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/environment-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAM5E,QAAA,MAAM,IAAI;;;;;;;CAOyC,CAAC;AAEpD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KASrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAa3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAmB1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAIhC,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { EnvironmentSettingsSection } from './environment-settings-section.js';
|
|
2
|
+
import { createDefaultSettings } from '../../../../../../packages/core/src/domain/factories/settings-defaults.factory.js';
|
|
2
3
|
import { EditorType, TerminalType } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
4
|
+
const baseSettings = createDefaultSettings();
|
|
3
5
|
const meta = {
|
|
4
6
|
title: 'Features/Settings/EnvironmentSettingsSection',
|
|
5
7
|
component: EnvironmentSettingsSection,
|
|
@@ -11,11 +13,7 @@ const meta = {
|
|
|
11
13
|
export default meta;
|
|
12
14
|
export const Default = {
|
|
13
15
|
args: {
|
|
14
|
-
|
|
15
|
-
defaultEditor: EditorType.VsCode,
|
|
16
|
-
shellPreference: 'bash',
|
|
17
|
-
terminalPreference: TerminalType.System,
|
|
18
|
-
},
|
|
16
|
+
settings: baseSettings,
|
|
19
17
|
availableTerminals: [
|
|
20
18
|
{ id: 'system', name: 'System Terminal', available: true },
|
|
21
19
|
{ id: 'warp', name: 'Warp', available: true },
|
|
@@ -25,20 +23,28 @@ export const Default = {
|
|
|
25
23
|
};
|
|
26
24
|
export const CursorWithZsh = {
|
|
27
25
|
args: {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
settings: {
|
|
27
|
+
...baseSettings,
|
|
28
|
+
environment: {
|
|
29
|
+
...baseSettings.environment,
|
|
30
|
+
defaultEditor: EditorType.Cursor,
|
|
31
|
+
shellPreference: 'zsh',
|
|
32
|
+
terminalPreference: TerminalType.System,
|
|
33
|
+
},
|
|
32
34
|
},
|
|
33
35
|
availableTerminals: [{ id: 'system', name: 'System Terminal', available: true }],
|
|
34
36
|
},
|
|
35
37
|
};
|
|
36
38
|
export const WarpSelected = {
|
|
37
39
|
args: {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
settings: {
|
|
41
|
+
...baseSettings,
|
|
42
|
+
environment: {
|
|
43
|
+
...baseSettings.environment,
|
|
44
|
+
defaultEditor: EditorType.VsCode,
|
|
45
|
+
shellPreference: 'zsh',
|
|
46
|
+
terminalPreference: TerminalType.Warp,
|
|
47
|
+
},
|
|
42
48
|
},
|
|
43
49
|
availableTerminals: [
|
|
44
50
|
{ id: 'system', name: 'System Terminal', available: true },
|
|
@@ -51,10 +57,6 @@ export const WarpSelected = {
|
|
|
51
57
|
};
|
|
52
58
|
export const OnlySystemTerminal = {
|
|
53
59
|
args: {
|
|
54
|
-
|
|
55
|
-
defaultEditor: EditorType.VsCode,
|
|
56
|
-
shellPreference: 'bash',
|
|
57
|
-
terminalPreference: TerminalType.System,
|
|
58
|
-
},
|
|
60
|
+
settings: baseSettings,
|
|
59
61
|
},
|
|
60
62
|
};
|
package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fab-layout-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/fab-layout-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,yCAAyC,CAAC;AAGzF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,6BAA6B,
|
|
1
|
+
{"version":3,"file":"fab-layout-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/fab-layout-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,yCAAyC,CAAC;AAGzF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,6BAA6B,2CAsCnF"}
|
package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.js
CHANGED
|
@@ -19,7 +19,7 @@ export function FabLayoutSettingsSection({ settings }) {
|
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
|
-
return (_jsx(SettingsSection, { icon: LayoutGrid, title: t('settings.fabLayout.title'), description: t('settings.fabLayout.description'), testId: "fab-layout-settings-section", children: _jsx(SwitchRow, { label: t('settings.fabLayout.swapPosition'), description: t('settings.fabLayout.swapPositionDescription'), id: "fab-swap-position", testId: "switch-fab-swap-position", checked: fabSwapPosition, onChange: (v) => {
|
|
22
|
+
return (_jsx(SettingsSection, { icon: LayoutGrid, title: t('settings.fabLayout.title'), description: t('settings.fabLayout.description'), testId: "fab-layout-settings-section", tooltip: t('settings.fabLayout.hint'), children: _jsx(SwitchRow, { label: t('settings.fabLayout.swapPosition'), description: t('settings.fabLayout.swapPositionDescription'), tooltip: "Swaps the Create button (bottom-right) and Chat button (bottom-left) positions on the control center canvas.", id: "fab-swap-position", testId: "switch-fab-swap-position", checked: fabSwapPosition, onChange: (v) => {
|
|
23
23
|
setFabSwapPosition(v);
|
|
24
24
|
save({ fabLayout: { swapPosition: v } });
|
|
25
25
|
} }) }));
|
package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Settings } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
2
2
|
export interface FeatureFlagsSettingsSectionProps {
|
|
3
|
-
|
|
3
|
+
settings: Settings;
|
|
4
4
|
}
|
|
5
|
-
export declare function FeatureFlagsSettingsSection({
|
|
5
|
+
export declare function FeatureFlagsSettingsSection({ settings }: FeatureFlagsSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
//# sourceMappingURL=feature-flags-settings-section.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/feature-flags-settings-section.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"feature-flags-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/feature-flags-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,yCAAyC,CAAC;AAGtF,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,2BAA2B,CAAC,EAAE,QAAQ,EAAE,EAAE,gCAAgC,2CA6IzF"}
|