@shepai/cli 1.117.0 → 1.118.0-pr379.a71d408
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/EnvironmentConfig.yaml +5 -0
- package/apis/json-schema/TerminalType.yaml +10 -0
- package/apis/json-schema/WorkflowConfig.yaml +5 -0
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +2 -1
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
- 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 +7 -1
- package/dist/packages/core/src/domain/generated/output.d.ts +15 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +8 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -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 +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.d.ts +11 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.js +13 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.js +3 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts +5 -10
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +5 -73
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +12 -3
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts +5 -0
- 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/tools/system-terminal.json +24 -0
- package/dist/src/presentation/web/app/actions/get-available-terminals.d.ts +12 -0
- package/dist/src/presentation/web/app/actions/get-available-terminals.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-available-terminals.js +53 -0
- package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-shell.js +47 -3
- 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/features/settings/environment-settings-section.d.ts +3 -1
- 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 +32 -5
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts +2 -0
- 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 +34 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts +3 -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 +56 -14
- 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 +4 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
- 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 +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -3
- 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 +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
- 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]/page/server-reference-manifest.json +19 -19
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
- 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)/create/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/create/page.js +2 -2
- 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 +27 -27
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -3
- 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 +27 -27
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
- 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 +19 -19
- package/web/.next/server/app/(dashboard)/page.js +2 -2
- 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]/page/server-reference-manifest.json +19 -19
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
- 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.js +1 -1
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js +2 -2
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +25 -10
- package/web/.next/server/app/settings/page.js +3 -3
- 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 +6 -6
- 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/server-reference-manifest.json +6 -6
- 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/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.js +2 -2
- 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/[root-of-the-server]__7d5492a0._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__4af0afe0._.js → [root-of-the-server]__2dddfea9._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__4af0afe0._.js.map → [root-of-the-server]__2dddfea9._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2ff2daf6._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2ff2daf6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__ac0304e7._.js → [root-of-the-server]__3155add4._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__ac0304e7._.js.map → [root-of-the-server]__3155add4._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__9bc1434f._.js → [root-of-the-server]__4c7486cb._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__9bc1434f._.js.map → [root-of-the-server]__4c7486cb._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +4 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__11033878._.js.map → [root-of-the-server]__6b17a22d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +4 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__aad040c0._.js.map → [root-of-the-server]__6bb00d90._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7b707feb._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7b707feb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +4 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__fdc75809._.js.map → [root-of-the-server]__804c006d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__89e8a5cc._.js → [root-of-the-server]__8763fd7a._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8763fd7a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__2a5592d5._.js → [root-of-the-server]__9c56d724._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__2a5592d5._.js.map → [root-of-the-server]__9c56d724._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__a93289b0._.js → [root-of-the-server]__cfc116d5._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__a93289b0._.js.map → [root-of-the-server]__cfc116d5._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__172d9576._.js → [root-of-the-server]__d3841d9e._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__172d9576._.js.map → [root-of-the-server]__d3841d9e._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__db9afe04._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__b1e68e34._.js.map → [root-of-the-server]__db9afe04._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_a8d14ab2._.js → _08d85106._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_a8d14ab2._.js.map → _08d85106._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1bb131c4._.js +1 -1
- package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_250a63ae._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_8dacd1e7._.js → _2f6f48b8._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_8dacd1e7._.js.map → _2f6f48b8._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_d6a1ec27._.js → _34950c42._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_d6a1ec27._.js.map → _34950c42._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_125679ad._.js → _367737e0._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_125679ad._.js.map → _367737e0._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +52 -37
- package/web/.next/static/chunks/{c76f6d06b1b69b57.js → 149c044db14ba247.js} +1 -1
- package/web/.next/static/chunks/2ccf294babe8a526.js +1 -0
- package/web/.next/static/chunks/{34b275db4ad6fb5d.js → 2ff4e51636afec0a.js} +1 -1
- package/web/.next/static/chunks/6e33380b294e51db.js +1 -0
- package/web/.next/static/chunks/8ce7853a87d4957e.js +1 -0
- package/web/.next/static/chunks/{2c98935265aa3622.js → a07b01a57cdb92f2.js} +2 -2
- package/web/.next/static/chunks/{498777301470975b.js → a9523cf5247ee791.js} +1 -1
- package/web/.next/static/chunks/{b855de1b1e5458f6.js → b8796bba61c5f1f9.js} +1 -1
- package/web/.next/static/chunks/{5fe03deadb83628b.js → cc5b77d2674bae26.js} +1 -1
- package/web/.next/static/chunks/{fcde0cbb2976b933.js → e2ef95d904c360f3.js} +1 -1
- package/web/.next/static/chunks/{425894e5bf370bd2.js → f5021ad2ecc5916b.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +0 -4
- package/web/.next/static/chunks/2251df6427162751.js +0 -1
- package/web/.next/static/chunks/50f06bb71bace452.js +0 -1
- package/web/.next/static/chunks/e2caffa0bb759c6c.js +0 -1
- /package/web/.next/static/{bAT4Gm6M7U0lGmNAN3mTn → 4lwbtGuLakkOP4dusXn2B}/_buildManifest.js +0 -0
- /package/web/.next/static/{bAT4Gm6M7U0lGmNAN3mTn → 4lwbtGuLakkOP4dusXn2B}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{bAT4Gm6M7U0lGmNAN3mTn → 4lwbtGuLakkOP4dusXn2B}/_ssgManifest.js +0 -0
package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,oFAAoF;IACpF,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IAEnD,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iDAAiD;IACjD,SAAS,CAAC,EAAE,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;IAE7C,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;yGAEqG;IACrG,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;iGAE6F;IAC7F,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAEF;;;;wEAIoE;IACpE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AAmDD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAsB,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAExD"}
|
|
1
|
+
{"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,oFAAoF;IACpF,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IAEnD,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iDAAiD;IACjD,SAAS,CAAC,EAAE,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;IAE7C,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;yGAEqG;IACrG,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;iGAE6F;IAC7F,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAEF;;;;wEAIoE;IACpE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AAmDD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAsB,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAExD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAI7D"}
|
|
@@ -63,3 +63,10 @@ export const TOOL_METADATA = loadToolMetadata();
|
|
|
63
63
|
export function getIdeEntries() {
|
|
64
64
|
return Object.entries(TOOL_METADATA).filter(([, meta]) => meta.openDirectory != null);
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns entries from TOOL_METADATA tagged as "terminal" that have an
|
|
68
|
+
* `openDirectory` field. Each entry is [toolId, metadata].
|
|
69
|
+
*/
|
|
70
|
+
export function getTerminalEntries() {
|
|
71
|
+
return Object.entries(TOOL_METADATA).filter(([, meta]) => meta.tags.includes('terminal') && meta.openDirectory != null);
|
|
72
|
+
}
|
package/dist/packages/core/src/infrastructure/services/tool-installer/tools/system-terminal.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "System Terminal",
|
|
3
|
+
"summary": "OS default terminal emulator",
|
|
4
|
+
"description": "The default terminal emulator for your operating system: Terminal.app on macOS, x-terminal-emulator on Linux, and PowerShell on Windows.",
|
|
5
|
+
"tags": ["terminal"],
|
|
6
|
+
"author": "System",
|
|
7
|
+
"platforms": ["linux", "darwin", "win32"],
|
|
8
|
+
"binary": {
|
|
9
|
+
"darwin": "open",
|
|
10
|
+
"linux": "x-terminal-emulator",
|
|
11
|
+
"win32": "powershell"
|
|
12
|
+
},
|
|
13
|
+
"packageManager": "system",
|
|
14
|
+
"commands": {},
|
|
15
|
+
"timeout": 5000,
|
|
16
|
+
"documentationUrl": "https://support.apple.com/guide/terminal/welcome/mac",
|
|
17
|
+
"verifyCommand": "true",
|
|
18
|
+
"autoInstall": false,
|
|
19
|
+
"openDirectory": {
|
|
20
|
+
"darwin": "open -a Terminal {dir}",
|
|
21
|
+
"linux": "x-terminal-emulator --working-directory={dir}",
|
|
22
|
+
"win32": "powershell -NoExit -Command \"Set-Location \\\"{dir}\\\"\""
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface AvailableTerminal {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
available: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Returns the list of terminal entries from tool metadata, filtered to the
|
|
8
|
+
* current platform, with availability checks. The "system-terminal" entry
|
|
9
|
+
* is always marked available and listed first.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getAvailableTerminals(): Promise<AvailableTerminal[]>;
|
|
12
|
+
//# sourceMappingURL=get-available-terminals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-available-terminals.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-available-terminals.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkD1E"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { platform } from 'node:os';
|
|
3
|
+
import { getTerminalEntries } from '../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.js';
|
|
4
|
+
import { checkBinaryExists } from '../../../../../packages/core/src/infrastructure/services/tool-installer/binary-exists.js';
|
|
5
|
+
/**
|
|
6
|
+
* Returns the list of terminal entries from tool metadata, filtered to the
|
|
7
|
+
* current platform, with availability checks. The "system-terminal" entry
|
|
8
|
+
* is always marked available and listed first.
|
|
9
|
+
*/
|
|
10
|
+
export async function getAvailableTerminals() {
|
|
11
|
+
const currentPlatform = platform();
|
|
12
|
+
const entries = getTerminalEntries();
|
|
13
|
+
const results = [];
|
|
14
|
+
for (const [id, meta] of entries) {
|
|
15
|
+
// Skip terminals not supported on this platform
|
|
16
|
+
if (meta.platforms &&
|
|
17
|
+
!meta.platforms.includes(currentPlatform)) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
// System terminal is always available
|
|
21
|
+
if (id === 'system-terminal') {
|
|
22
|
+
results.unshift({ id: 'system', name: meta.name, available: true });
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
// Check binary availability
|
|
26
|
+
const binary = typeof meta.binary === 'string' ? meta.binary : meta.binary[currentPlatform];
|
|
27
|
+
if (!binary)
|
|
28
|
+
continue;
|
|
29
|
+
// For app-bundle terminals (Warp, iTerm2) that use verifyCommand instead of binary check
|
|
30
|
+
let available = false;
|
|
31
|
+
if (meta.verifyCommand.startsWith('test ')) {
|
|
32
|
+
// Use verifyCommand for app-bundle checks (e.g., "test -d /Applications/Warp.app")
|
|
33
|
+
try {
|
|
34
|
+
const { execSync } = await import('node:child_process');
|
|
35
|
+
execSync(meta.verifyCommand, { stdio: 'ignore' });
|
|
36
|
+
available = true;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
available = false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const result = await checkBinaryExists(binary);
|
|
44
|
+
available = result.found;
|
|
45
|
+
}
|
|
46
|
+
results.push({ id, name: meta.name, available });
|
|
47
|
+
}
|
|
48
|
+
// Ensure system terminal is always present even if not in tool metadata
|
|
49
|
+
if (!results.some((r) => r.id === 'system')) {
|
|
50
|
+
results.unshift({ id: 'system', name: 'System Terminal', available: true });
|
|
51
|
+
}
|
|
52
|
+
return results;
|
|
53
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"AA+BA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2E9E"}
|
|
@@ -5,11 +5,19 @@ import { isAbsolute } from 'node:path';
|
|
|
5
5
|
import { spawn } from 'node:child_process';
|
|
6
6
|
import { getSettings } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
|
|
7
7
|
import { computeWorktreePath } from '../../../../../packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js';
|
|
8
|
-
|
|
8
|
+
import { getTerminalEntries } from '../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.js';
|
|
9
|
+
/** Resolves a platform-keyed value to the current platform string. */
|
|
10
|
+
function resolvePlatformValue(value) {
|
|
11
|
+
if (typeof value === 'string')
|
|
12
|
+
return value;
|
|
13
|
+
return value[platform()] ?? Object.values(value)[0];
|
|
14
|
+
}
|
|
15
|
+
// Fallback commands for the "system" terminal when no tool metadata entry exists.
|
|
16
|
+
// Uses a record lookup instead of if/else to prevent the bundler from
|
|
9
17
|
// tree-shaking platform branches at build time. Turbopack evaluates
|
|
10
18
|
// os.platform() during the build and dead-code-eliminates unused branches,
|
|
11
19
|
// baking in the CI platform (linux) and breaking macOS/Windows installs.
|
|
12
|
-
const
|
|
20
|
+
const SYSTEM_TERMINAL_COMMANDS = {
|
|
13
21
|
darwin: { cmd: 'open', args: (p) => ['-a', 'Terminal', p] },
|
|
14
22
|
linux: { cmd: 'x-terminal-emulator', args: (p) => [`--working-directory=${p}`] },
|
|
15
23
|
win32: {
|
|
@@ -25,11 +33,47 @@ export async function openShell(input) {
|
|
|
25
33
|
try {
|
|
26
34
|
const settings = getSettings();
|
|
27
35
|
const shell = settings.environment.shellPreference;
|
|
36
|
+
const terminalPref = settings.environment.terminalPreference ?? 'system';
|
|
28
37
|
const targetPath = branch ? computeWorktreePath(repositoryPath, branch) : repositoryPath;
|
|
29
38
|
if (!existsSync(targetPath)) {
|
|
30
39
|
return { success: false, error: `Path does not exist: ${targetPath}` };
|
|
31
40
|
}
|
|
32
|
-
|
|
41
|
+
// Try to find the terminal in tool metadata for non-system terminals
|
|
42
|
+
if (terminalPref !== 'system') {
|
|
43
|
+
const entries = getTerminalEntries();
|
|
44
|
+
const terminalEntry = entries.find(([id]) => id === terminalPref);
|
|
45
|
+
if (terminalEntry) {
|
|
46
|
+
const [, meta] = terminalEntry;
|
|
47
|
+
if (meta.openDirectory) {
|
|
48
|
+
const openCmd = resolvePlatformValue(meta.openDirectory);
|
|
49
|
+
if (openCmd.includes('{dir}')) {
|
|
50
|
+
const resolved = openCmd.replace('{dir}', targetPath);
|
|
51
|
+
const useShell = meta.spawnOptions?.shell === true;
|
|
52
|
+
if (useShell) {
|
|
53
|
+
const child = spawn(resolved, [], {
|
|
54
|
+
detached: true,
|
|
55
|
+
stdio: 'ignore',
|
|
56
|
+
shell: true,
|
|
57
|
+
});
|
|
58
|
+
child.on('error', () => undefined);
|
|
59
|
+
child.unref();
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const [command, ...args] = resolved.split(/\s+/);
|
|
63
|
+
const child = spawn(command, args, {
|
|
64
|
+
detached: true,
|
|
65
|
+
stdio: 'ignore',
|
|
66
|
+
});
|
|
67
|
+
child.on('error', () => undefined);
|
|
68
|
+
child.unref();
|
|
69
|
+
}
|
|
70
|
+
return { success: true, path: targetPath, shell };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Fallback to system terminal
|
|
76
|
+
const entry = SYSTEM_TERMINAL_COMMANDS[platform()];
|
|
33
77
|
if (!entry) {
|
|
34
78
|
return {
|
|
35
79
|
success: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/settings/page.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/settings/page.tsx"],"names":[],"mappings":"AAIA,uFAAuF;AACvF,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAA8B,YAAY,qDAwBzC"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { loadSettings } from '../actions/load-settings.js';
|
|
3
|
+
import { getAvailableTerminals } from '../actions/get-available-terminals.js';
|
|
3
4
|
import { SettingsPageClient } from '../../components/features/settings/settings-page-client.js';
|
|
4
5
|
/** Skip static pre-rendering since we need runtime DI container and server context. */
|
|
5
6
|
export const dynamic = 'force-dynamic';
|
|
6
7
|
export default async function SettingsPage() {
|
|
7
|
-
const { settings, shepHome, dbFileSize, error } = await
|
|
8
|
+
const [{ settings, shepHome, dbFileSize, error }, availableTerminals] = await Promise.all([
|
|
9
|
+
loadSettings(),
|
|
10
|
+
getAvailableTerminals(),
|
|
11
|
+
]);
|
|
8
12
|
if (error || !settings) {
|
|
9
13
|
return (_jsx("div", { className: "flex h-full flex-col p-6", children: _jsxs("p", { className: "text-destructive text-sm", children: ["Failed to load settings: ", error] }) }));
|
|
10
14
|
}
|
|
11
|
-
return (_jsx("div", { className: "flex h-full flex-col px-6 pb-6", children: _jsx(SettingsPageClient, { settings: settings, shepHome: shepHome ?? '', dbFileSize: dbFileSize ?? 'Unknown' }) }));
|
|
15
|
+
return (_jsx("div", { className: "flex h-full flex-col px-6 pb-6", children: _jsx(SettingsPageClient, { settings: settings, shepHome: shepHome ?? '', dbFileSize: dbFileSize ?? 'Unknown', availableTerminals: availableTerminals }) }));
|
|
12
16
|
}
|
package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { EnvironmentConfig } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
import type { AvailableTerminal } from '../../../app/actions/get-available-terminals.js';
|
|
2
3
|
export interface EnvironmentSettingsSectionProps {
|
|
3
4
|
environment: EnvironmentConfig;
|
|
5
|
+
availableTerminals?: AvailableTerminal[];
|
|
4
6
|
}
|
|
5
|
-
export declare function EnvironmentSettingsSection({ environment }: EnvironmentSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare function EnvironmentSettingsSection({ environment, availableTerminals, }: EnvironmentSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
6
8
|
//# 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":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"environment-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/environment-settings-section.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAgB/E,MAAM,WAAW,+BAA+B;IAC9C,WAAW,EAAE,iBAAiB,CAAC;IAC/B,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAED,wBAAgB,0BAA0B,CAAC,EACzC,WAAW,EACX,kBAAkB,GACnB,EAAE,+BAA+B,2CAuIjC"}
|
package/dist/src/presentation/web/components/features/settings/environment-settings-section.js
CHANGED
|
@@ -7,7 +7,7 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../..
|
|
|
7
7
|
import { Label } from '../../ui/label.js';
|
|
8
8
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/select.js';
|
|
9
9
|
import { updateSettingsAction } from '../../../app/actions/update-settings.js';
|
|
10
|
-
import { EditorType } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
10
|
+
import { EditorType, TerminalType } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
11
11
|
const EDITOR_OPTIONS = [
|
|
12
12
|
{ value: EditorType.VsCode, label: 'VS Code' },
|
|
13
13
|
{ value: EditorType.Cursor, label: 'Cursor' },
|
|
@@ -20,9 +20,10 @@ const SHELL_OPTIONS = [
|
|
|
20
20
|
{ value: 'zsh', label: 'Zsh' },
|
|
21
21
|
{ value: 'fish', label: 'Fish' },
|
|
22
22
|
];
|
|
23
|
-
export function EnvironmentSettingsSection({ environment }) {
|
|
23
|
+
export function EnvironmentSettingsSection({ environment, availableTerminals, }) {
|
|
24
24
|
const [editor, setEditor] = useState(environment.defaultEditor);
|
|
25
25
|
const [shell, setShell] = useState(environment.shellPreference);
|
|
26
|
+
const [terminal, setTerminal] = useState(environment.terminalPreference ?? TerminalType.System);
|
|
26
27
|
const [isPending, startTransition] = useTransition();
|
|
27
28
|
const [showSaved, setShowSaved] = useState(false);
|
|
28
29
|
const prevPendingRef = useRef(false);
|
|
@@ -44,11 +45,37 @@ export function EnvironmentSettingsSection({ environment }) {
|
|
|
44
45
|
}
|
|
45
46
|
function handleEditorChange(value) {
|
|
46
47
|
setEditor(value);
|
|
47
|
-
save({
|
|
48
|
+
save({
|
|
49
|
+
environment: {
|
|
50
|
+
defaultEditor: value,
|
|
51
|
+
shellPreference: shell,
|
|
52
|
+
terminalPreference: terminal,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
48
55
|
}
|
|
49
56
|
function handleShellChange(value) {
|
|
50
57
|
setShell(value);
|
|
51
|
-
save({
|
|
58
|
+
save({
|
|
59
|
+
environment: {
|
|
60
|
+
defaultEditor: editor,
|
|
61
|
+
shellPreference: value,
|
|
62
|
+
terminalPreference: terminal,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function handleTerminalChange(value) {
|
|
67
|
+
setTerminal(value);
|
|
68
|
+
save({
|
|
69
|
+
environment: {
|
|
70
|
+
defaultEditor: editor,
|
|
71
|
+
shellPreference: shell,
|
|
72
|
+
terminalPreference: value,
|
|
73
|
+
},
|
|
74
|
+
});
|
|
52
75
|
}
|
|
53
|
-
|
|
76
|
+
// Filter to only show installed terminals
|
|
77
|
+
const terminalOptions = availableTerminals
|
|
78
|
+
? availableTerminals.filter((t) => t.available)
|
|
79
|
+
: [{ id: TerminalType.System, name: 'System Terminal', available: true }];
|
|
80
|
+
return (_jsxs(Card, { id: "environment", className: "scroll-mt-6", "data-testid": "environment-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(Terminal, { className: "text-muted-foreground h-4 w-4" }), _jsx(CardTitle, { children: "IDE & Terminal" })] }), 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: "Configure your default editor, shell, and terminal preferences" })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "default-editor", children: "Default Editor" }), _jsxs(Select, { value: editor, onValueChange: handleEditorChange, children: [_jsx(SelectTrigger, { id: "default-editor", "data-testid": "editor-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: EDITOR_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "shell-preference", children: "Shell Preference" }), _jsxs(Select, { value: shell, onValueChange: handleShellChange, children: [_jsx(SelectTrigger, { id: "shell-preference", "data-testid": "shell-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: SHELL_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "terminal-preference", children: "Terminal Emulator" }), _jsxs(Select, { value: terminal, onValueChange: handleTerminalChange, children: [_jsx(SelectTrigger, { id: "terminal-preference", "data-testid": "terminal-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: terminalOptions.map((opt) => (_jsx(SelectItem, { value: opt.id, children: opt.name }, opt.id))) })] })] })] })] }));
|
|
54
81
|
}
|
|
@@ -12,4 +12,6 @@ export default meta;
|
|
|
12
12
|
type Story = StoryObj<typeof meta>;
|
|
13
13
|
export declare const Default: Story;
|
|
14
14
|
export declare const CursorWithZsh: Story;
|
|
15
|
+
export declare const WarpSelected: Story;
|
|
16
|
+
export declare const OnlySystemTerminal: Story;
|
|
15
17
|
//# sourceMappingURL=environment-settings-section.stories.d.ts.map
|
|
@@ -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,kBAAkB,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAG5E,QAAA,MAAM,IAAI;;;;;;;CAOyC,CAAC;AAEpD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,
|
|
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,kBAAkB,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAG5E,QAAA,MAAM,IAAI;;;;;;;CAOyC,CAAC;AAEpD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAarB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAe1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAQhC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EnvironmentSettingsSection } from './environment-settings-section.js';
|
|
2
|
-
import { EditorType } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
import { EditorType, TerminalType } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
3
3
|
const meta = {
|
|
4
4
|
title: 'Features/Settings/EnvironmentSettingsSection',
|
|
5
5
|
component: EnvironmentSettingsSection,
|
|
@@ -14,7 +14,13 @@ export const Default = {
|
|
|
14
14
|
environment: {
|
|
15
15
|
defaultEditor: EditorType.VsCode,
|
|
16
16
|
shellPreference: 'bash',
|
|
17
|
+
terminalPreference: TerminalType.System,
|
|
17
18
|
},
|
|
19
|
+
availableTerminals: [
|
|
20
|
+
{ id: 'system', name: 'System Terminal', available: true },
|
|
21
|
+
{ id: 'warp', name: 'Warp', available: true },
|
|
22
|
+
{ id: 'iterm2', name: 'iTerm2', available: true },
|
|
23
|
+
],
|
|
18
24
|
},
|
|
19
25
|
};
|
|
20
26
|
export const CursorWithZsh = {
|
|
@@ -22,6 +28,33 @@ export const CursorWithZsh = {
|
|
|
22
28
|
environment: {
|
|
23
29
|
defaultEditor: EditorType.Cursor,
|
|
24
30
|
shellPreference: 'zsh',
|
|
31
|
+
terminalPreference: TerminalType.System,
|
|
32
|
+
},
|
|
33
|
+
availableTerminals: [{ id: 'system', name: 'System Terminal', available: true }],
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
export const WarpSelected = {
|
|
37
|
+
args: {
|
|
38
|
+
environment: {
|
|
39
|
+
defaultEditor: EditorType.VsCode,
|
|
40
|
+
shellPreference: 'zsh',
|
|
41
|
+
terminalPreference: TerminalType.Warp,
|
|
42
|
+
},
|
|
43
|
+
availableTerminals: [
|
|
44
|
+
{ id: 'system', name: 'System Terminal', available: true },
|
|
45
|
+
{ id: 'warp', name: 'Warp', available: true },
|
|
46
|
+
{ id: 'iterm2', name: 'iTerm2', available: true },
|
|
47
|
+
{ id: 'alacritty', name: 'Alacritty', available: true },
|
|
48
|
+
{ id: 'kitty', name: 'Kitty', available: true },
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
export const OnlySystemTerminal = {
|
|
53
|
+
args: {
|
|
54
|
+
environment: {
|
|
55
|
+
defaultEditor: EditorType.VsCode,
|
|
56
|
+
shellPreference: 'bash',
|
|
57
|
+
terminalPreference: TerminalType.System,
|
|
25
58
|
},
|
|
26
59
|
},
|
|
27
60
|
};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { Settings } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
import type { AvailableTerminal } from '../../../app/actions/get-available-terminals.js';
|
|
2
3
|
export interface SettingsPageClientProps {
|
|
3
4
|
settings: Settings;
|
|
4
5
|
shepHome: string;
|
|
5
6
|
dbFileSize: string;
|
|
7
|
+
availableTerminals?: AvailableTerminal[];
|
|
6
8
|
}
|
|
7
|
-
export declare function SettingsPageClient({ settings, shepHome, dbFileSize }: SettingsPageClientProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare function SettingsPageClient({ settings, shepHome, dbFileSize, availableTerminals, }: SettingsPageClientProps): import("react/jsx-runtime").JSX.Element;
|
|
8
10
|
//# sourceMappingURL=settings-page-client.d.ts.map
|
package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EACV,QAAQ,EAGT,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAgC/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AA6QD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,kBAAkB,GACnB,EAAE,uBAAuB,2CA2pCzB"}
|
|
@@ -11,7 +11,7 @@ import { Switch } from '../../ui/switch.js';
|
|
|
11
11
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
|
|
12
12
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/select.js';
|
|
13
13
|
import { updateSettingsAction } from '../../../app/actions/update-settings.js';
|
|
14
|
-
import { AgentAuthMethod, EditorType } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
14
|
+
import { AgentAuthMethod, EditorType, TerminalType, } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
15
15
|
import { getEditorTypeIcon } from '../../common/editor-type-icons.js';
|
|
16
16
|
import { AgentModelPicker } from '../../features/settings/AgentModelPicker/index.js';
|
|
17
17
|
import { TimeoutSlider } from '../../features/settings/timeout-slider.js';
|
|
@@ -26,6 +26,11 @@ const EDITOR_OPTIONS = [
|
|
|
26
26
|
{ value: EditorType.Zed, label: 'Zed' },
|
|
27
27
|
{ value: EditorType.Antigravity, label: 'Antigravity' },
|
|
28
28
|
];
|
|
29
|
+
const SHELL_OPTIONS = [
|
|
30
|
+
{ value: 'bash', label: 'Bash' },
|
|
31
|
+
{ value: 'zsh', label: 'Zsh' },
|
|
32
|
+
{ value: 'fish', label: 'Fish' },
|
|
33
|
+
];
|
|
29
34
|
const SECTIONS = [
|
|
30
35
|
{ id: 'agent', label: 'Agent', icon: Bot },
|
|
31
36
|
{ id: 'environment', label: 'Environment', icon: Terminal },
|
|
@@ -115,7 +120,7 @@ function SectionHint({ children, links, }) {
|
|
|
115
120
|
return (_jsxs("div", { className: "hidden pt-2 lg:block", children: [_jsx("p", { className: "text-muted-foreground/70 text-[11px] leading-relaxed", children: children }), links != null && links.length > 0 ? (_jsx("div", { className: "mt-2 flex flex-col gap-1", children: links.map((link) => (_jsxs("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "text-muted-foreground hover:text-foreground inline-flex items-center gap-1 text-[10px] transition-colors", children: [_jsx(ExternalLink, { className: "h-2.5 w-2.5" }), link.label] }, link.href))) })) : null] }));
|
|
116
121
|
}
|
|
117
122
|
/* ── Main component ── */
|
|
118
|
-
export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
123
|
+
export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTerminals, }) {
|
|
119
124
|
const { showSaving, showSaved, save } = useSaveIndicator();
|
|
120
125
|
const featureFlags = settings.featureFlags ?? { skills: false, envDeploy: false, debug: false };
|
|
121
126
|
// Agent state
|
|
@@ -125,7 +130,12 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
125
130
|
const [showToken, setShowToken] = useState(false);
|
|
126
131
|
// Environment state
|
|
127
132
|
const [editor, setEditor] = useState(settings.environment.defaultEditor);
|
|
128
|
-
const shell = settings.environment.shellPreference;
|
|
133
|
+
const [shell, setShell] = useState(settings.environment.shellPreference);
|
|
134
|
+
const [terminal, setTerminal] = useState(settings.environment.terminalPreference ?? TerminalType.System);
|
|
135
|
+
// Filter to only show installed terminals
|
|
136
|
+
const terminalOptions = availableTerminals
|
|
137
|
+
? availableTerminals.filter((t) => t.available)
|
|
138
|
+
: [{ id: TerminalType.System, name: 'System Terminal', available: true }];
|
|
129
139
|
// Workflow state
|
|
130
140
|
const [openPr, setOpenPr] = useState(settings.workflow.openPrOnImplementationComplete);
|
|
131
141
|
const [pushOnComplete, setPushOnComplete] = useState(settings.workflow.approvalGateDefaults.pushOnImplementationComplete);
|
|
@@ -139,6 +149,9 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
139
149
|
? String(Math.round(settings.workflow.ciWatchTimeoutMs / 1000))
|
|
140
150
|
: '');
|
|
141
151
|
const [ciLogMax, setCiLogMax] = useState(settings.workflow.ciLogMaxChars != null ? String(settings.workflow.ciLogMaxChars) : '');
|
|
152
|
+
const [ciPollInterval, setCiPollInterval] = useState(settings.workflow.ciWatchPollIntervalSeconds != null
|
|
153
|
+
? String(settings.workflow.ciWatchPollIntervalSeconds)
|
|
154
|
+
: '');
|
|
142
155
|
// Feature agent per-stage timeout states (stored in seconds for display, converted to ms on save)
|
|
143
156
|
// Defaults: feature agent stages = 1_800_000 ms (1800s), analyze-repo = 600_000 ms (600s)
|
|
144
157
|
const stageTimeoutsConfig = settings.workflow.stageTimeouts;
|
|
@@ -164,6 +177,9 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
164
177
|
? String(Math.round(settings.workflow.ciWatchTimeoutMs / 1000))
|
|
165
178
|
: '';
|
|
166
179
|
const originalCiLogMax = settings.workflow.ciLogMaxChars != null ? String(settings.workflow.ciLogMaxChars) : '';
|
|
180
|
+
const originalCiPollInterval = settings.workflow.ciWatchPollIntervalSeconds != null
|
|
181
|
+
? String(settings.workflow.ciWatchPollIntervalSeconds)
|
|
182
|
+
: '';
|
|
167
183
|
const originalAnalyzeTimeout = stageTimeoutsConfig?.analyzeMs != null
|
|
168
184
|
? String(Math.round(stageTimeoutsConfig.analyzeMs / 1000))
|
|
169
185
|
: '';
|
|
@@ -223,6 +239,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
223
239
|
ciMaxFixAttempts: parseOptionalInt(overrides.ciMaxFix ?? ciMaxFix),
|
|
224
240
|
ciWatchTimeoutMs: timeoutSeconds != null ? timeoutSeconds * 1000 : undefined,
|
|
225
241
|
ciLogMaxChars: parseOptionalInt(overrides.ciLogMax ?? ciLogMax),
|
|
242
|
+
ciWatchPollIntervalSeconds: parseOptionalInt(overrides.ciPollInterval ?? ciPollInterval),
|
|
226
243
|
stageTimeouts: {
|
|
227
244
|
analyzeMs: secondsToMs(overrides.analyzeTimeout ?? analyzeTimeout),
|
|
228
245
|
requirementsMs: secondsToMs(overrides.requirementsTimeout ?? requirementsTimeout),
|
|
@@ -299,20 +316,42 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
299
316
|
label: 'Configuration guide',
|
|
300
317
|
href: 'https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md',
|
|
301
318
|
},
|
|
302
|
-
], children: "Choose which AI coding agent powers your features. Each agent supports different models and capabilities. Authentication is resolved automatically via your active session." })] }), _jsxs("div", { id: "section-environment", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
})
|
|
319
|
+
], children: "Choose which AI coding agent powers your features. Each agent supports different models and capabilities. Authentication is resolved automatically via your active session." })] }), _jsxs("div", { id: "section-environment", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: Terminal, title: "Environment", description: "Editor, shell, and terminal preferences", testId: "environment-settings-section", children: [_jsx(SettingsRow, { label: "Default Editor", description: "Editor launched for file operations", htmlFor: "default-editor", children: _jsxs(Select, { value: editor, onValueChange: (v) => {
|
|
320
|
+
setEditor(v);
|
|
321
|
+
save({
|
|
322
|
+
environment: {
|
|
323
|
+
defaultEditor: v,
|
|
324
|
+
shellPreference: shell,
|
|
325
|
+
terminalPreference: terminal,
|
|
326
|
+
},
|
|
327
|
+
});
|
|
328
|
+
}, children: [_jsx(SelectTrigger, { id: "default-editor", "data-testid": "editor-select", className: "w-55 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: EDITOR_OPTIONS.map((opt) => {
|
|
329
|
+
const Icon = getEditorTypeIcon(opt.value);
|
|
330
|
+
return (_jsx(SelectItem, { value: opt.value, children: _jsxs("span", { className: "flex items-center gap-2 text-xs", children: [_jsx(Icon, { className: "h-4 w-4 shrink-0" }), opt.label] }) }, opt.value));
|
|
331
|
+
}) })] }) }), _jsx(SettingsRow, { label: "Shell", description: "Default shell for generated scripts", htmlFor: "shell-preference", children: _jsxs(Select, { value: shell, onValueChange: (v) => {
|
|
332
|
+
setShell(v);
|
|
333
|
+
save({
|
|
334
|
+
environment: {
|
|
335
|
+
defaultEditor: editor,
|
|
336
|
+
shellPreference: v,
|
|
337
|
+
terminalPreference: terminal,
|
|
338
|
+
},
|
|
339
|
+
});
|
|
340
|
+
}, children: [_jsx(SelectTrigger, { id: "shell-preference", "data-testid": "shell-select", className: "w-55 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: SHELL_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] }) }), _jsx(SettingsRow, { label: "Terminal", description: "Terminal emulator for shell sessions", htmlFor: "terminal-preference", children: _jsxs(Select, { value: terminal, onValueChange: (v) => {
|
|
341
|
+
setTerminal(v);
|
|
342
|
+
save({
|
|
343
|
+
environment: {
|
|
344
|
+
defaultEditor: editor,
|
|
345
|
+
shellPreference: shell,
|
|
346
|
+
terminalPreference: v,
|
|
347
|
+
},
|
|
348
|
+
});
|
|
349
|
+
}, children: [_jsx(SelectTrigger, { id: "terminal-preference", "data-testid": "terminal-select", className: "w-55 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: terminalOptions.map((opt) => (_jsx(SelectItem, { value: opt.id, children: opt.name }, opt.id))) })] }) })] }), _jsx(SectionHint, { links: [
|
|
311
350
|
{
|
|
312
351
|
label: 'Configuration guide',
|
|
313
352
|
href: 'https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md',
|
|
314
353
|
},
|
|
315
|
-
], children: "Your preferred editor is
|
|
354
|
+
], children: "Your preferred editor opens files for review. The shell setting controls generated scripts. The terminal emulator is launched when opening shell sessions from the web UI." })] }), _jsxs("div", { id: "section-workflow", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: GitBranch, title: "Workflow", description: "Automation behavior after implementation", testId: "workflow-settings-section", children: [_jsx(SubsectionLabel, { children: "Approve" }), _jsx(SwitchRow, { label: "Auto-approve PRD", description: "Skip manual review of requirements", id: "allow-prd", testId: "switch-allow-prd", checked: allowPrd, onChange: (v) => {
|
|
316
355
|
setAllowPrd(v);
|
|
317
356
|
save(buildWorkflowPayload({ allowPrd: v }));
|
|
318
357
|
} }), _jsx(SwitchRow, { label: "Auto-approve Plan", description: "Skip manual review of implementation plan", id: "allow-plan", testId: "switch-allow-plan", checked: allowPlan, onChange: (v) => {
|
|
@@ -363,7 +402,10 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize }) {
|
|
|
363
402
|
}, min: 30, step: 30, suffix: "sec" }) }), _jsx(SettingsRow, { label: "Max log size", description: "Truncate CI logs beyond this limit", htmlFor: "ci-log-max", children: _jsx(NumberStepper, { id: "ci-log-max", testId: "ci-log-max-input", placeholder: "50000", value: ciLogMax, onChange: setCiLogMax, onBlur: () => {
|
|
364
403
|
if (ciLogMax !== originalCiLogMax)
|
|
365
404
|
save(buildWorkflowPayload({ ciLogMax }));
|
|
366
|
-
}, min: 1000, step: 5000, suffix: "chars" }) })
|
|
405
|
+
}, min: 1000, step: 5000, suffix: "chars" }) }), _jsx(SettingsRow, { label: "Poll interval", description: "How often to check GitHub for CI status updates", htmlFor: "ci-poll-interval", children: _jsx(NumberStepper, { id: "ci-poll-interval", testId: "ci-poll-interval-input", placeholder: "30", value: ciPollInterval, onChange: setCiPollInterval, onBlur: () => {
|
|
406
|
+
if (ciPollInterval !== originalCiPollInterval)
|
|
407
|
+
save(buildWorkflowPayload({ ciPollInterval }));
|
|
408
|
+
}, min: 5, step: 5, suffix: "sec" }) })] }), _jsx(SectionHint, { links: [
|
|
367
409
|
{
|
|
368
410
|
label: 'CI/CD pipeline',
|
|
369
411
|
href: 'https://github.com/shep-ai/cli/blob/main/docs/development/cicd.md',
|
package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,4BAA4B,
|
|
1
|
+
{"version":3,"file":"workflow-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,4BAA4B,2CAqcjF"}
|