@shipit-ai/cli 1.170.0 → 1.171.0-pr14.c0a7138
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/ClaudeCodeProxyConfig.yaml +20 -0
- package/apis/json-schema/CodexCliProxyConfig.yaml +8 -0
- package/apis/json-schema/GeminiCliProxyConfig.yaml +8 -0
- package/apis/json-schema/LiteLLMProxyConfig.yaml +10 -1
- package/apis/json-schema/LiteLLMProxyRoutingMode.yaml +8 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +61 -1
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +6 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +7 -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 +63 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-litellm-proxy-agent-config.d.ts +15 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-litellm-proxy-agent-config.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-litellm-proxy-agent-config.js +32 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-litellm-proxy-multi-agent.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-litellm-proxy-multi-agent.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-litellm-proxy-multi-agent.js +20 -0
- 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 +40 -5
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.js +15 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts +4 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +53 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.js +16 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.js +16 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +13 -0
- package/dist/src/presentation/web/components/features/plugins/plugins-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/plugins/plugins-page-client.js +11 -2
- 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 +3 -1
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-routing-section.d.ts +6 -0
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-routing-section.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-routing-section.js +137 -0
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-routing-section.stories.d.ts +23 -0
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-routing-section.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-routing-section.stories.js +138 -0
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.js +5 -8
- 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 +2 -1
- package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/skills/skills-page-client.js +6 -2
- package/dist/src/presentation/web/components/features/tools/tools-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/tools/tools-page-client.js +23 -4
- package/dist/translations/ar/web.json +23 -1
- package/dist/translations/de/web.json +23 -1
- package/dist/translations/en/web.json +23 -1
- package/dist/translations/es/web.json +23 -1
- package/dist/translations/fr/web.json +23 -1
- package/dist/translations/he/web.json +23 -1
- package/dist/translations/pt/web.json +23 -1
- package/dist/translations/ru/web.json +23 -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 +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/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.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/plugins/page/server-reference-manifest.json +15 -15
- package/web/.next/server/app/plugins/page.js.nft.json +1 -1
- package/web/.next/server/app/plugins/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +12 -12
- 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/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js +1 -1
- package/web/.next/server/chunks/11es_next_dist_esm_build_templates_app-route_067cwst.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js.map +1 -1
- 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]__0~v1~b9._.js → [root-of-the-server]__0dec29w._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0~v1~b9._.js.map → [root-of-the-server]__0dec29w._.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]__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/{_0.ra89t._.js → _02sfayk._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0.ra89t._.js.map → _02sfayk._.js.map} +1 -1
- 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/_083k45~._.js +1 -1
- package/web/.next/server/chunks/ssr/_083k45~._.js.map +1 -1
- 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/{_0_17.-n._.js → _0fym52g._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0_17.-n._.js.map → _0fym52g._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0kaec~c._.js +3 -0
- package/web/.next/server/chunks/ssr/_0kaec~c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_0kt18~b._.js → _0o.xc6x._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0o.xc6x._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_069ybyi._.js → _0o5jtpp._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_069ybyi._.js.map → _0o5jtpp._.js.map} +1 -1
- 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/_0t59q8r._.js +1 -1
- package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0tcccbb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0u3d8.n._.js +1 -1
- package/web/.next/server/chunks/ssr/_0u3d8.n._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js +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 +1 -1
- package/web/.next/server/chunks/ssr/_10joy2y._.js.map +1 -1
- 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/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js.map +1 -1
- 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/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +55 -55
- package/web/.next/static/chunks/{0xzs6jdtkmbic.js → 0.6cxpzg17sn6.js} +1 -1
- package/web/.next/static/chunks/{01zrwm.x3kpdo.js → 0.qnh4.ep7ao~.js} +1 -1
- package/web/.next/static/chunks/0.s8cxri-_s9l.js +1 -0
- package/web/.next/static/chunks/{0nkujbu62z1jl.js → 012cnd7koqv6d.js} +1 -1
- package/web/.next/static/chunks/{0lwuepa24tqxy.js → 04jionivp3_ez.js} +1 -1
- package/web/.next/static/chunks/{16jgc8hqxrp.u.js → 08.fojzqujth6.js} +1 -1
- package/web/.next/static/chunks/{0~4c6tnw7xnnl.js → 08vht-qo5~08s.js} +1 -1
- package/web/.next/static/chunks/{09lcrhxslt-u8.js → 09isotkx1pkzc.js} +1 -1
- package/web/.next/static/chunks/{024vi1xxw5ccj.js → 0a_ziudqwtxyy.js} +1 -1
- package/web/.next/static/chunks/{0vq.b40jzhi7r.js → 0d4iivq6b8jz7.js} +3 -3
- package/web/.next/static/chunks/0inayq2zzadja.js +1 -0
- package/web/.next/static/chunks/{0dprl~vdhvhk7.js → 0kq24x6qxo0yf.js} +1 -1
- package/web/.next/static/chunks/{0xo.hi4px83w2.js → 0nfd9bvcnbcgl.js} +1 -1
- package/web/.next/static/chunks/{0jt5jzg88skg5.js → 0p6wyufdajjl4.js} +1 -1
- package/web/.next/static/chunks/{0e.8n42~fpeqa.js → 0s_v4gsovl1-z.js} +1 -1
- package/web/.next/static/chunks/0ug478hm-8bog.js +5 -0
- package/web/.next/static/chunks/0xiij~eqq6_qk.js +1 -0
- package/web/.next/static/chunks/0~eah4x24wb1-.js +1 -0
- package/web/.next/static/chunks/{043zp6fpfaz07.js → 103~2jt99sx06.js} +3 -3
- package/web/.next/static/chunks/10rtagfoabp3b.js +1 -0
- package/web/.next/server/chunks/ssr/_0kt18~b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_12uy.45._.js +0 -3
- package/web/.next/server/chunks/ssr/_12uy.45._.js.map +0 -1
- package/web/.next/static/chunks/0aq9-lg.5r.nk.js +0 -5
- package/web/.next/static/chunks/0lz-oq74e_ciu.js +0 -1
- package/web/.next/static/chunks/0rb5cx51f5u8h.js +0 -1
- package/web/.next/static/chunks/0tdbctvrma.oi.js +0 -1
- package/web/.next/static/chunks/0wd.i4f822qoa.js +0 -1
- package/web/.next/static/chunks/13q1peb_t9vj8.js +0 -1
- /package/web/.next/static/{kDUolP-Zj2jCRleGJJGX0 → 3DHMcTcCWCDRMDGngyeVk}/_buildManifest.js +0 -0
- /package/web/.next/static/{kDUolP-Zj2jCRleGJJGX0 → 3DHMcTcCWCDRMDGngyeVk}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{kDUolP-Zj2jCRleGJJGX0 → 3DHMcTcCWCDRMDGngyeVk}/_ssgManifest.js +0 -0
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Uses constructor dependency injection for the spawn function
|
|
9
9
|
* to enable testability without mocking node:child_process directly.
|
|
10
10
|
*/
|
|
11
|
-
import type { AgentType, AgentFeature } from '../../../../../domain/generated/output.js';
|
|
11
|
+
import type { AgentType, AgentFeature, LiteLLMProxyConfig } from '../../../../../domain/generated/output.js';
|
|
12
12
|
import type { AgentExecutionOptions, AgentExecutionResult, AgentExecutionStreamEvent } from '../../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
13
13
|
import type { SpawnFunction } from '../types.js';
|
|
14
14
|
import { ExecutorBase } from './executor-base.js';
|
|
@@ -18,7 +18,10 @@ import { ExecutorBase } from './executor-base.js';
|
|
|
18
18
|
*/
|
|
19
19
|
export declare class ClaudeCodeExecutorService extends ExecutorBase {
|
|
20
20
|
readonly agentType: AgentType;
|
|
21
|
+
private proxyConfig?;
|
|
21
22
|
constructor(spawn: SpawnFunction);
|
|
23
|
+
updateProxyConfig(config?: LiteLLMProxyConfig): void;
|
|
24
|
+
protected buildSpawnEnv(): Record<string, string | undefined>;
|
|
22
25
|
execute(prompt: string, options?: AgentExecutionOptions): Promise<AgentExecutionResult>;
|
|
23
26
|
executeStream(prompt: string, options?: AgentExecutionOptions): AsyncIterable<AgentExecutionStreamEvent>;
|
|
24
27
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,
|
|
1
|
+
{"version":3,"file":"claude-code-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EAEZ,kBAAkB,EACnB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EAEpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWlD;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,YAAY;IACzD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAA8B;IAC3D,OAAO,CAAC,WAAW,CAAC,CAAqB;gBAE7B,KAAK,EAAE,aAAa;IAIhC,iBAAiB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI;cAIjC,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAkDhE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA4FtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IA6D3C;;;OAGG;IACH,OAAO,CAAC,cAAc;IA0CtB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAI/C,OAAO,CAAC,SAAS;IA4BjB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IA6BvB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,eAAe;CAkExB"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* Uses constructor dependency injection for the spawn function
|
|
9
9
|
* to enable testability without mocking node:child_process directly.
|
|
10
10
|
*/
|
|
11
|
+
import { LiteLLMProxyRoutingMode } from '../../../../../domain/generated/output.js';
|
|
11
12
|
import { ExecutorBase } from './executor-base.js';
|
|
12
13
|
/** Features supported by Claude Code CLI */
|
|
13
14
|
const SUPPORTED_FEATURES = new Set([
|
|
@@ -23,9 +24,61 @@ const SUPPORTED_FEATURES = new Set([
|
|
|
23
24
|
*/
|
|
24
25
|
export class ClaudeCodeExecutorService extends ExecutorBase {
|
|
25
26
|
agentType = 'claude-code';
|
|
27
|
+
proxyConfig;
|
|
26
28
|
constructor(spawn) {
|
|
27
29
|
super(spawn);
|
|
28
30
|
}
|
|
31
|
+
updateProxyConfig(config) {
|
|
32
|
+
this.proxyConfig = config;
|
|
33
|
+
}
|
|
34
|
+
buildSpawnEnv() {
|
|
35
|
+
const env = super.buildSpawnEnv();
|
|
36
|
+
const cc = this.proxyConfig?.claudeCode;
|
|
37
|
+
if (!cc || !this.proxyConfig?.baseUrl)
|
|
38
|
+
return env;
|
|
39
|
+
const mode = cc.routingMode ?? LiteLLMProxyRoutingMode.direct;
|
|
40
|
+
if (mode === LiteLLMProxyRoutingMode.direct)
|
|
41
|
+
return env;
|
|
42
|
+
// Guard against unrecognized routing modes (DB corruption, future enum additions)
|
|
43
|
+
if (mode !== LiteLLMProxyRoutingMode.proxy && mode !== LiteLLMProxyRoutingMode.passthrough) {
|
|
44
|
+
this.log(`WARNING: Unknown LiteLLM routing mode "${mode}", falling back to direct mode`);
|
|
45
|
+
return env;
|
|
46
|
+
}
|
|
47
|
+
// Both proxy and passthrough set BASE_URL
|
|
48
|
+
env.ANTHROPIC_BASE_URL = this.proxyConfig.baseUrl;
|
|
49
|
+
if (mode === LiteLLMProxyRoutingMode.proxy) {
|
|
50
|
+
if (this.proxyConfig.apiKey) {
|
|
51
|
+
env.ANTHROPIC_AUTH_TOKEN = this.proxyConfig.apiKey;
|
|
52
|
+
}
|
|
53
|
+
if (cc.customHeaders) {
|
|
54
|
+
env.ANTHROPIC_CUSTOM_HEADERS = cc.customHeaders;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// passthrough mode
|
|
59
|
+
const headers = [];
|
|
60
|
+
if (this.proxyConfig.apiKey) {
|
|
61
|
+
headers.push(`x-litellm-api-key: Bearer ${this.proxyConfig.apiKey}`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
this.log('WARNING: Passthrough mode active but no proxy API key configured — proxy may reject requests');
|
|
65
|
+
}
|
|
66
|
+
if (cc.customHeaders) {
|
|
67
|
+
headers.push(cc.customHeaders);
|
|
68
|
+
}
|
|
69
|
+
if (headers.length) {
|
|
70
|
+
env.ANTHROPIC_CUSTOM_HEADERS = headers.join('\n');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Model overrides (both proxy and passthrough)
|
|
74
|
+
if (cc.sonnetModel)
|
|
75
|
+
env.ANTHROPIC_DEFAULT_SONNET_MODEL = cc.sonnetModel;
|
|
76
|
+
if (cc.haikuModel)
|
|
77
|
+
env.ANTHROPIC_DEFAULT_HAIKU_MODEL = cc.haikuModel;
|
|
78
|
+
if (cc.opusModel)
|
|
79
|
+
env.ANTHROPIC_DEFAULT_OPUS_MODEL = cc.opusModel;
|
|
80
|
+
return env;
|
|
81
|
+
}
|
|
29
82
|
async execute(prompt, options) {
|
|
30
83
|
this.silent = options?.silent ?? false;
|
|
31
84
|
// Use stream-json so we get real-time events in the worker log
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Uses constructor dependency injection for the spawn function
|
|
8
8
|
* to enable testability without mocking node:child_process directly.
|
|
9
9
|
*/
|
|
10
|
-
import type { AgentType, AgentFeature, AgentConfig } from '../../../../../domain/generated/output.js';
|
|
10
|
+
import type { AgentType, AgentFeature, AgentConfig, LiteLLMProxyConfig } from '../../../../../domain/generated/output.js';
|
|
11
11
|
import type { AgentExecutionOptions, AgentExecutionResult, AgentExecutionStreamEvent } from '../../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
12
12
|
import type { SpawnFunction } from '../types.js';
|
|
13
13
|
import { ExecutorBase } from './executor-base.js';
|
|
@@ -18,7 +18,9 @@ import { ExecutorBase } from './executor-base.js';
|
|
|
18
18
|
export declare class CodexCliExecutorService extends ExecutorBase {
|
|
19
19
|
readonly agentType: AgentType;
|
|
20
20
|
private readonly authConfig?;
|
|
21
|
+
private proxyConfig?;
|
|
21
22
|
constructor(spawn: SpawnFunction, authConfig?: AgentConfig);
|
|
23
|
+
updateProxyConfig(config?: LiteLLMProxyConfig): void;
|
|
22
24
|
supportsFeature(feature: AgentFeature): boolean;
|
|
23
25
|
execute(prompt: string, options?: AgentExecutionOptions): Promise<AgentExecutionResult>;
|
|
24
26
|
executeStream(prompt: string, options?: AgentExecutionOptions): AsyncIterable<AgentExecutionStreamEvent>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-cli-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,WAAW,
|
|
1
|
+
{"version":3,"file":"codex-cli-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EAEX,kBAAkB,EACnB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EAEpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAsBlD;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;IACvD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAA4B;IAEzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAc;IAC1C,OAAO,CAAC,WAAW,CAAC,CAAqB;gBAE7B,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,WAAW;IAK1D,iBAAiB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAIpD,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAIzC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAuItF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IAoM3C;;;;OAIG;IACH,wDAAwD;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAyC;IAEnF,OAAO,CAAC,cAAc;IAkJtB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;cA+BE,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAoBtE;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAkBvB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;CAU/B"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import * as fs from 'node:fs';
|
|
11
11
|
import * as os from 'node:os';
|
|
12
12
|
import * as path from 'node:path';
|
|
13
|
+
import { LiteLLMProxyRoutingMode } from '../../../../../domain/generated/output.js';
|
|
13
14
|
import { ExecutorBase } from './executor-base.js';
|
|
14
15
|
/** Features supported by Codex CLI */
|
|
15
16
|
const SUPPORTED_FEATURES = new Set([
|
|
@@ -36,10 +37,14 @@ const FATAL_STDERR_PATTERNS = [
|
|
|
36
37
|
export class CodexCliExecutorService extends ExecutorBase {
|
|
37
38
|
agentType = 'codex-cli';
|
|
38
39
|
authConfig;
|
|
40
|
+
proxyConfig;
|
|
39
41
|
constructor(spawn, authConfig) {
|
|
40
42
|
super(spawn);
|
|
41
43
|
this.authConfig = authConfig;
|
|
42
44
|
}
|
|
45
|
+
updateProxyConfig(config) {
|
|
46
|
+
this.proxyConfig = config;
|
|
47
|
+
}
|
|
43
48
|
supportsFeature(feature) {
|
|
44
49
|
return SUPPORTED_FEATURES.has(feature);
|
|
45
50
|
}
|
|
@@ -491,8 +496,18 @@ export class CodexCliExecutorService extends ExecutorBase {
|
|
|
491
496
|
}
|
|
492
497
|
buildSpawnEnv() {
|
|
493
498
|
const env = super.buildSpawnEnv();
|
|
499
|
+
// Proxy mode: use OPENAI_BASE_URL + OPENAI_API_KEY (not CODEX_API_KEY)
|
|
500
|
+
const cx = this.proxyConfig?.codexCli;
|
|
501
|
+
if (cx?.routingMode === LiteLLMProxyRoutingMode.proxy && this.proxyConfig?.baseUrl) {
|
|
502
|
+
env.OPENAI_BASE_URL = this.proxyConfig.baseUrl;
|
|
503
|
+
if (this.proxyConfig.apiKey) {
|
|
504
|
+
env.OPENAI_API_KEY = this.proxyConfig.apiKey;
|
|
505
|
+
}
|
|
506
|
+
return env;
|
|
507
|
+
}
|
|
508
|
+
// Direct mode: existing authConfig token injection
|
|
494
509
|
if (this.authConfig?.authMethod === 'token' && this.authConfig.token) {
|
|
495
|
-
|
|
510
|
+
env.CODEX_API_KEY = this.authConfig.token;
|
|
496
511
|
}
|
|
497
512
|
return env;
|
|
498
513
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Uses constructor dependency injection for the spawn function
|
|
8
8
|
* to enable testability without mocking node:child_process directly.
|
|
9
9
|
*/
|
|
10
|
-
import type { AgentType, AgentFeature, AgentConfig } from '../../../../../domain/generated/output.js';
|
|
10
|
+
import type { AgentType, AgentFeature, AgentConfig, LiteLLMProxyConfig } from '../../../../../domain/generated/output.js';
|
|
11
11
|
import type { AgentExecutionOptions, AgentExecutionResult, AgentExecutionStreamEvent } from '../../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
12
12
|
import type { SpawnFunction } from '../types.js';
|
|
13
13
|
import { ExecutorBase } from './executor-base.js';
|
|
@@ -18,7 +18,9 @@ import { ExecutorBase } from './executor-base.js';
|
|
|
18
18
|
export declare class GeminiCliExecutorService extends ExecutorBase {
|
|
19
19
|
readonly agentType: AgentType;
|
|
20
20
|
private readonly authConfig?;
|
|
21
|
+
private proxyConfig?;
|
|
21
22
|
constructor(spawn: SpawnFunction, authConfig?: AgentConfig);
|
|
23
|
+
updateProxyConfig(config?: LiteLLMProxyConfig): void;
|
|
22
24
|
supportsFeature(feature: AgentFeature): boolean;
|
|
23
25
|
execute(prompt: string, options?: AgentExecutionOptions): Promise<AgentExecutionResult>;
|
|
24
26
|
executeStream(prompt: string, options?: AgentExecutionOptions): AsyncIterable<AgentExecutionStreamEvent>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-cli-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,WAAW,
|
|
1
|
+
{"version":3,"file":"gemini-cli-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EAEX,kBAAkB,EACnB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,YAAY;IACxD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAA6B;IAE1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAc;IAC1C,OAAO,CAAC,WAAW,CAAC,CAAqB;gBAE7B,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,WAAW;IAK1D,iBAAiB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAIpD,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAIzC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAsFtF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IAgF3C;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAmDxB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAI3C;IAEF;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,SAAS;cAyBE,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAmBvE"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* Uses constructor dependency injection for the spawn function
|
|
8
8
|
* to enable testability without mocking node:child_process directly.
|
|
9
9
|
*/
|
|
10
|
+
import { LiteLLMProxyRoutingMode } from '../../../../../domain/generated/output.js';
|
|
10
11
|
import { ExecutorBase } from './executor-base.js';
|
|
11
12
|
/** Features supported by Gemini CLI */
|
|
12
13
|
const SUPPORTED_FEATURES = new Set(['session-resume', 'streaming', 'tool-scoping']);
|
|
@@ -17,10 +18,14 @@ const SUPPORTED_FEATURES = new Set(['session-resume', 'streaming', 'tool-scoping
|
|
|
17
18
|
export class GeminiCliExecutorService extends ExecutorBase {
|
|
18
19
|
agentType = 'gemini-cli';
|
|
19
20
|
authConfig;
|
|
21
|
+
proxyConfig;
|
|
20
22
|
constructor(spawn, authConfig) {
|
|
21
23
|
super(spawn);
|
|
22
24
|
this.authConfig = authConfig;
|
|
23
25
|
}
|
|
26
|
+
updateProxyConfig(config) {
|
|
27
|
+
this.proxyConfig = config;
|
|
28
|
+
}
|
|
24
29
|
supportsFeature(feature) {
|
|
25
30
|
return SUPPORTED_FEATURES.has(feature);
|
|
26
31
|
}
|
|
@@ -279,8 +284,18 @@ export class GeminiCliExecutorService extends ExecutorBase {
|
|
|
279
284
|
}
|
|
280
285
|
buildSpawnEnv() {
|
|
281
286
|
const env = super.buildSpawnEnv();
|
|
287
|
+
// Proxy mode takes precedence — proxy key overrides authConfig token
|
|
288
|
+
const gc = this.proxyConfig?.geminiCli;
|
|
289
|
+
if (gc?.routingMode === LiteLLMProxyRoutingMode.proxy && this.proxyConfig?.baseUrl) {
|
|
290
|
+
env.GOOGLE_GEMINI_BASE_URL = this.proxyConfig.baseUrl;
|
|
291
|
+
if (this.proxyConfig.apiKey) {
|
|
292
|
+
env.GEMINI_API_KEY = this.proxyConfig.apiKey;
|
|
293
|
+
return env;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// Direct mode: existing authConfig token injection
|
|
282
297
|
if (this.authConfig?.authMethod === 'token' && this.authConfig.token) {
|
|
283
|
-
|
|
298
|
+
env.GEMINI_API_KEY = this.authConfig.token;
|
|
284
299
|
}
|
|
285
300
|
return env;
|
|
286
301
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;AAmB1B,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAW7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAyF1D;AAgCD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkT/D"}
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js
CHANGED
|
@@ -16,6 +16,9 @@ import { initializeContainer, container } from '../../../di/container.js';
|
|
|
16
16
|
import { createFeatureAgentGraph } from './feature-agent-graph.js';
|
|
17
17
|
import { createFastFeatureAgentGraph } from './fast-feature-agent-graph.js';
|
|
18
18
|
import { createCheckpointer } from '../common/checkpointer.js';
|
|
19
|
+
import { ClaudeCodeExecutorService } from '../../../services/agents/common/executors/claude-code-executor.service.js';
|
|
20
|
+
import { GeminiCliExecutorService } from '../../../services/agents/common/executors/gemini-cli-executor.service.js';
|
|
21
|
+
import { CodexCliExecutorService } from '../../../services/agents/common/executors/codex-cli-executor.service.js';
|
|
19
22
|
import { AgentRunStatus, SdlcLifecycle } from '../../../../domain/generated/output.js';
|
|
20
23
|
import { initializeSettings } from '../../../services/settings.service.js';
|
|
21
24
|
import { InitializeSettingsUseCase } from '../../../../application/use-cases/settings/initialize-settings.use-case.js';
|
|
@@ -183,6 +186,16 @@ export async function runWorker(args) {
|
|
|
183
186
|
log(`Creating executor from pinned agent type: ${args.agentType}`);
|
|
184
187
|
const factory = container.resolve('IAgentExecutorFactory');
|
|
185
188
|
executor = factory.createExecutor(args.agentType, settings.agent);
|
|
189
|
+
// Update proxy config for direct factory calls (provider does this automatically)
|
|
190
|
+
if (executor instanceof ClaudeCodeExecutorService) {
|
|
191
|
+
executor.updateProxyConfig(settings.litellmProxy);
|
|
192
|
+
}
|
|
193
|
+
else if (executor instanceof GeminiCliExecutorService) {
|
|
194
|
+
executor.updateProxyConfig(settings.litellmProxy);
|
|
195
|
+
}
|
|
196
|
+
else if (executor instanceof CodexCliExecutorService) {
|
|
197
|
+
executor.updateProxyConfig(settings.litellmProxy);
|
|
198
|
+
}
|
|
186
199
|
}
|
|
187
200
|
else {
|
|
188
201
|
log('Creating executor from configured agent settings...');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/plugins/plugins-page-client.tsx"],"names":[],"mappings":"AAqBA,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"plugins-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/plugins/plugins-page-client.tsx"],"names":[],"mappings":"AAqBA,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,sBAAsB,2CAiP1F"}
|
|
@@ -19,6 +19,7 @@ export function PluginsPageClient({ proxyConfigured, isClaudeCode }) {
|
|
|
19
19
|
const [, startTransition] = useTransition();
|
|
20
20
|
const [searchQuery, setSearchQuery] = useState('');
|
|
21
21
|
const [activeCategory, setActiveCategory] = useState(null);
|
|
22
|
+
const [statusFilter, setStatusFilter] = useState(null);
|
|
22
23
|
const [selectedPlugin, setSelectedPlugin] = useState(null);
|
|
23
24
|
const [plugins, setPlugins] = useState([]);
|
|
24
25
|
const [installedPlugins, setInstalledPlugins] = useState([]);
|
|
@@ -47,6 +48,13 @@ export function PluginsPageClient({ proxyConfigured, isClaudeCode }) {
|
|
|
47
48
|
return plugins.filter((p) => {
|
|
48
49
|
if (activeCategory && p.category !== activeCategory)
|
|
49
50
|
return false;
|
|
51
|
+
if (statusFilter) {
|
|
52
|
+
const isInstalled = !!installedPlugins.find((ip) => ip.id.startsWith(`${p.name}@`));
|
|
53
|
+
if (statusFilter === 'installed' && !isInstalled)
|
|
54
|
+
return false;
|
|
55
|
+
if (statusFilter === 'not-installed' && isInstalled)
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
50
58
|
if (query) {
|
|
51
59
|
const matchesName = p.name.toLowerCase().includes(query);
|
|
52
60
|
const matchesDescription = p.description.toLowerCase().includes(query);
|
|
@@ -55,7 +63,7 @@ export function PluginsPageClient({ proxyConfigured, isClaudeCode }) {
|
|
|
55
63
|
}
|
|
56
64
|
return true;
|
|
57
65
|
});
|
|
58
|
-
}, [plugins, searchQuery, activeCategory]);
|
|
66
|
+
}, [plugins, searchQuery, activeCategory, statusFilter, installedPlugins]);
|
|
59
67
|
const getInstalled = (pluginName) => installedPlugins.find((ip) => ip.id.startsWith(`${pluginName}@`));
|
|
60
68
|
const handleInstall = (pluginName) => {
|
|
61
69
|
startTransition(async () => {
|
|
@@ -108,8 +116,9 @@ export function PluginsPageClient({ proxyConfigured, isClaudeCode }) {
|
|
|
108
116
|
if (plugins.length === 0) {
|
|
109
117
|
return (_jsxs("div", { className: "flex flex-col gap-8 p-8", children: [_jsx(PageHeader, { eyebrow: "Developer Portal", title: t('plugins.title') }), _jsx(EmptyState, { icon: _jsx(Blocks, { className: "size-10" }), title: t('plugins.emptyState') })] }));
|
|
110
118
|
}
|
|
111
|
-
return (_jsxs("div", { className: "flex flex-col gap-8 p-8", children: [_jsx(PageHeader, { eyebrow: "Developer Portal", title: t('plugins.title') }), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2" }), _jsx(Input, { placeholder: t('plugins.searchPlaceholder'), value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "ps-9", "data-testid": "plugin-search" })] }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { variant: activeCategory === null ? 'default' : 'outline', size: "sm", onClick: () => setActiveCategory(null), children: t('plugins.allCategories') }), categories.map((cat) => (_jsx(Button, { variant: activeCategory === cat ? 'default' : 'outline', size: "sm", onClick: () => setActiveCategory(cat === activeCategory ? null : cat), children: cat }, cat)))] }), filteredPlugins.length > 0 ? (_jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredPlugins.map((plugin) => (_jsx(PluginCard, { plugin: plugin, installed: getInstalled(plugin.name), onSelect: setSelectedPlugin, onToggle: handleToggle }, plugin.name))) })) : (_jsx(EmptyState, { icon: _jsx(Search, { className: "size-10" }), title: t('plugins.emptyState'), action: _jsx(Button, { variant: "outline", onClick: () => {
|
|
119
|
+
return (_jsxs("div", { className: "flex flex-col gap-8 p-8", children: [_jsx(PageHeader, { eyebrow: "Developer Portal", title: t('plugins.title') }), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2" }), _jsx(Input, { placeholder: t('plugins.searchPlaceholder'), value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "ps-9", "data-testid": "plugin-search" })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-4", children: [_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { variant: activeCategory === null ? 'default' : 'outline', size: "sm", onClick: () => setActiveCategory(null), children: t('plugins.allCategories') }), categories.map((cat) => (_jsx(Button, { variant: activeCategory === cat ? 'default' : 'outline', size: "sm", onClick: () => setActiveCategory(cat === activeCategory ? null : cat), children: cat }, cat)))] }), _jsx("div", { className: "bg-border h-6 w-px" }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { variant: statusFilter === null ? 'default' : 'outline', size: "sm", onClick: () => setStatusFilter(null), children: "All Status" }), _jsx(Button, { variant: statusFilter === 'installed' ? 'default' : 'outline', size: "sm", onClick: () => setStatusFilter(statusFilter === 'installed' ? null : 'installed'), children: t('plugins.installed') }), _jsx(Button, { variant: statusFilter === 'not-installed' ? 'default' : 'outline', size: "sm", onClick: () => setStatusFilter(statusFilter === 'not-installed' ? null : 'not-installed'), children: t('plugins.notInstalled') })] })] }), filteredPlugins.length > 0 ? (_jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredPlugins.map((plugin) => (_jsx(PluginCard, { plugin: plugin, installed: getInstalled(plugin.name), onSelect: setSelectedPlugin, onToggle: handleToggle }, plugin.name))) })) : (_jsx(EmptyState, { icon: _jsx(Search, { className: "size-10" }), title: t('plugins.emptyState'), action: _jsx(Button, { variant: "outline", onClick: () => {
|
|
112
120
|
setSearchQuery('');
|
|
113
121
|
setActiveCategory(null);
|
|
122
|
+
setStatusFilter(null);
|
|
114
123
|
}, children: t('plugins.clearFilters') }) })), _jsx(PluginDetailDrawer, { plugin: selectedPlugin, installed: selectedPlugin ? getInstalled(selectedPlugin.name) : undefined, open: !!selectedPlugin, onClose: () => setSelectedPlugin(null), onInstall: handleInstall, onUninstall: handleUninstall })] }));
|
|
115
124
|
}
|
|
@@ -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":"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,
|
|
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,2CAkJzF"}
|
package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js
CHANGED
|
@@ -56,7 +56,9 @@ export function FeatureFlagsSettingsSection({ settings }) {
|
|
|
56
56
|
const newFlags = { ...flags, reactFileManager: v };
|
|
57
57
|
setFlags(newFlags);
|
|
58
58
|
save({ featureFlags: newFlags });
|
|
59
|
-
} }), _jsx(SwitchRow, { label: t('settings.featureFlags.plugins'), description:
|
|
59
|
+
} }), _jsx(SwitchRow, { label: t('settings.featureFlags.plugins'), description: settings.litellmProxy?.baseUrl
|
|
60
|
+
? t('settings.featureFlags.pluginsDescription')
|
|
61
|
+
: `${t('settings.featureFlags.pluginsDescription')} — ${t('plugins.noProxy')}`, tooltip: "Enables the Plugins page for browsing and managing Claude Code plugins from a LiteLLM marketplace. Requires a LiteLLM proxy URL to be configured.", id: "flag-plugins", testId: "switch-flag-plugins", checked: flags.plugins, disabled: !settings.litellmProxy?.baseUrl, onChange: (v) => {
|
|
60
62
|
const newFlags = { ...flags, plugins: v };
|
|
61
63
|
setFlags(newFlags);
|
|
62
64
|
save({ featureFlags: newFlags });
|
package/dist/src/presentation/web/components/features/settings/litellm-proxy-routing-section.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Settings } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
export interface LiteLLMProxyRoutingSectionProps {
|
|
3
|
+
settings: Settings;
|
|
4
|
+
}
|
|
5
|
+
export declare function LiteLLMProxyRoutingSection({ settings }: LiteLLMProxyRoutingSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=litellm-proxy-routing-section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"litellm-proxy-routing-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/litellm-proxy-routing-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAaxE,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAyCD,wBAAgB,0BAA0B,CAAC,EAAE,QAAQ,EAAE,EAAE,+BAA+B,2CAmQvF"}
|
package/dist/src/presentation/web/components/features/settings/litellm-proxy-routing-section.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useTransition } from 'react';
|
|
4
|
+
import { Route } from 'lucide-react';
|
|
5
|
+
import { toast } from 'sonner';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
|
+
import { updateSettingsAction } from '../../../app/actions/update-settings.js';
|
|
8
|
+
import { LiteLLMProxyRoutingMode } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
9
|
+
import { SettingsSection, SettingsRow } from './settings-section-utils.js';
|
|
10
|
+
import { Input } from '../../ui/input.js';
|
|
11
|
+
import { Textarea } from '../../ui/textarea.js';
|
|
12
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/select.js';
|
|
13
|
+
/** Agent types that support env-var-based proxy routing (Tier 1) */
|
|
14
|
+
const TIER1_AGENTS = new Set(['claude-code', 'gemini-cli', 'codex-cli']);
|
|
15
|
+
/** Agent types that need documentation-only panels (Tier 2) */
|
|
16
|
+
const TIER2_AGENTS = new Set(['cursor', 'copilot-cli']);
|
|
17
|
+
/** Get the per-agent proxy config key for building payloads */
|
|
18
|
+
function agentConfigKey(agentType) {
|
|
19
|
+
switch (agentType) {
|
|
20
|
+
case 'claude-code':
|
|
21
|
+
return 'claudeCode';
|
|
22
|
+
case 'gemini-cli':
|
|
23
|
+
return 'geminiCli';
|
|
24
|
+
case 'codex-cli':
|
|
25
|
+
return 'codexCli';
|
|
26
|
+
default:
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Get the current routing mode for the active agent */
|
|
31
|
+
function getRoutingMode(settings) {
|
|
32
|
+
const agentType = settings.agent.type;
|
|
33
|
+
switch (agentType) {
|
|
34
|
+
case 'claude-code':
|
|
35
|
+
return settings.litellmProxy?.claudeCode?.routingMode ?? LiteLLMProxyRoutingMode.direct;
|
|
36
|
+
case 'gemini-cli':
|
|
37
|
+
return settings.litellmProxy?.geminiCli?.routingMode ?? LiteLLMProxyRoutingMode.direct;
|
|
38
|
+
case 'codex-cli':
|
|
39
|
+
return settings.litellmProxy?.codexCli?.routingMode ?? LiteLLMProxyRoutingMode.direct;
|
|
40
|
+
default:
|
|
41
|
+
return LiteLLMProxyRoutingMode.direct;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** Whether this agent supports passthrough mode */
|
|
45
|
+
function supportsPassthrough(agentType) {
|
|
46
|
+
return agentType === 'claude-code';
|
|
47
|
+
}
|
|
48
|
+
export function LiteLLMProxyRoutingSection({ settings }) {
|
|
49
|
+
const { t } = useTranslation('web');
|
|
50
|
+
const [, startTransition] = useTransition();
|
|
51
|
+
const agentType = settings.agent.type;
|
|
52
|
+
const cc = settings.litellmProxy?.claudeCode;
|
|
53
|
+
const [routingMode, setRoutingMode] = useState(getRoutingMode(settings));
|
|
54
|
+
const [customHeaders, setCustomHeaders] = useState(cc?.customHeaders ?? '');
|
|
55
|
+
const [sonnetModel, setSonnetModel] = useState(cc?.sonnetModel ?? '');
|
|
56
|
+
const [haikuModel, setHaikuModel] = useState(cc?.haikuModel ?? '');
|
|
57
|
+
const [opusModel, setOpusModel] = useState(cc?.opusModel ?? '');
|
|
58
|
+
const originalCustomHeaders = cc?.customHeaders ?? '';
|
|
59
|
+
const originalSonnetModel = cc?.sonnetModel ?? '';
|
|
60
|
+
const originalHaikuModel = cc?.haikuModel ?? '';
|
|
61
|
+
const originalOpusModel = cc?.opusModel ?? '';
|
|
62
|
+
const showProxyFields = routingMode !== LiteLLMProxyRoutingMode.direct;
|
|
63
|
+
const isTier1 = TIER1_AGENTS.has(agentType);
|
|
64
|
+
const isTier2 = TIER2_AGENTS.has(agentType);
|
|
65
|
+
const proxyUrl = settings.litellmProxy?.baseUrl ?? '';
|
|
66
|
+
const proxyApiKey = settings.litellmProxy?.apiKey ?? '';
|
|
67
|
+
function save(payload) {
|
|
68
|
+
startTransition(async () => {
|
|
69
|
+
const result = await updateSettingsAction(payload);
|
|
70
|
+
if (!result.success) {
|
|
71
|
+
toast.error(result.error ?? t('settings.failedToSave'));
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function buildPayload(overrides) {
|
|
76
|
+
const key = agentConfigKey(agentType);
|
|
77
|
+
if (!key)
|
|
78
|
+
return {};
|
|
79
|
+
if (agentType === 'claude-code') {
|
|
80
|
+
return {
|
|
81
|
+
litellmProxy: {
|
|
82
|
+
claudeCode: {
|
|
83
|
+
routingMode: overrides?.routingMode ?? routingMode,
|
|
84
|
+
customHeaders: overrides?.customHeaders ?? customHeaders,
|
|
85
|
+
sonnetModel: overrides?.sonnetModel ?? sonnetModel,
|
|
86
|
+
haikuModel: overrides?.haikuModel ?? haikuModel,
|
|
87
|
+
opusModel: overrides?.opusModel ?? opusModel,
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// Gemini CLI and Codex CLI: only routingMode
|
|
93
|
+
return {
|
|
94
|
+
litellmProxy: {
|
|
95
|
+
[key]: {
|
|
96
|
+
routingMode: overrides?.routingMode ?? routingMode,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function handleModeChange(value) {
|
|
102
|
+
setRoutingMode(value);
|
|
103
|
+
save(buildPayload({ routingMode: value }));
|
|
104
|
+
}
|
|
105
|
+
// Unsupported agent type
|
|
106
|
+
if (!isTier1 && !isTier2) {
|
|
107
|
+
return (_jsx(SettingsSection, { icon: Route, title: t('settings.litellmProxy.routing.title'), description: t('settings.litellmProxy.routing.description'), testId: "litellm-proxy-routing-section", tooltip: t('settings.litellmProxy.routing.hint'), children: _jsx(SettingsRow, { label: "", description: t('settings.litellmProxy.routing.notSupported'), children: _jsx("span", {}) }) }));
|
|
108
|
+
}
|
|
109
|
+
// Tier 2: Documentation-only panels
|
|
110
|
+
if (isTier2) {
|
|
111
|
+
const isCursor = agentType === 'cursor';
|
|
112
|
+
const displayUrl = isCursor ? `${proxyUrl.replace(/\/+$/, '')}/cursor` : proxyUrl;
|
|
113
|
+
return (_jsx(SettingsSection, { icon: Route, title: t('settings.litellmProxy.routing.title'), description: t('settings.litellmProxy.routing.description'), testId: "litellm-proxy-routing-section", tooltip: t('settings.litellmProxy.routing.hint'), children: _jsx(SettingsRow, { label: isCursor
|
|
114
|
+
? t('settings.litellmProxy.routing.cursorInstructions')
|
|
115
|
+
: t('settings.litellmProxy.routing.copilotInstructions'), description: isCursor
|
|
116
|
+
? t('settings.litellmProxy.routing.cursorDescription')
|
|
117
|
+
: t('settings.litellmProxy.routing.copilotDescription'), children: _jsxs("div", { className: "w-64 space-y-2", children: [_jsx("code", { className: "bg-muted block rounded px-2 py-1 text-xs break-all", children: displayUrl }), isCursor && proxyApiKey ? (_jsx("code", { className: "bg-muted block rounded px-2 py-1 text-xs break-all", children: proxyApiKey })) : null] }) }) }));
|
|
118
|
+
}
|
|
119
|
+
// Tier 1: Env-var-based proxy routing (Claude Code, Gemini CLI, Codex CLI)
|
|
120
|
+
return (_jsxs(SettingsSection, { icon: Route, title: t('settings.litellmProxy.routing.title'), description: t('settings.litellmProxy.routing.description'), testId: "litellm-proxy-routing-section", tooltip: t('settings.litellmProxy.routing.hint'), children: [_jsx(SettingsRow, { label: t('settings.litellmProxy.routing.mode'), description: t('settings.litellmProxy.routing.modeDescription'), htmlFor: "litellm-routing-mode", children: _jsxs(Select, { value: routingMode, onValueChange: handleModeChange, children: [_jsx(SelectTrigger, { id: "litellm-routing-mode", "data-testid": "litellm-routing-mode-select", className: "w-48 text-xs", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: LiteLLMProxyRoutingMode.direct, children: t('settings.litellmProxy.routing.modeDirect') }), _jsx(SelectItem, { value: LiteLLMProxyRoutingMode.proxy, children: t('settings.litellmProxy.routing.modeProxy') }), supportsPassthrough(agentType) && (_jsx(SelectItem, { value: LiteLLMProxyRoutingMode.passthrough, children: t('settings.litellmProxy.routing.modePassthrough') }))] })] }) }), routingMode === LiteLLMProxyRoutingMode.passthrough && (_jsx(SettingsRow, { label: "", description: t('settings.litellmProxy.routing.passthroughHelp'), children: _jsx("span", {}) })), showProxyFields && agentType === 'claude-code' ? (_jsxs(_Fragment, { children: [_jsx(SettingsRow, { label: t('settings.litellmProxy.routing.customHeaders'), description: t('settings.litellmProxy.routing.customHeadersDescription'), htmlFor: "litellm-custom-headers", children: _jsx(Textarea, { id: "litellm-custom-headers", "data-testid": "litellm-custom-headers-input", placeholder: 'x-litellm-customer-id: my-user\nx-litellm-tags: project:acme', value: customHeaders, onChange: (e) => setCustomHeaders(e.target.value), onBlur: () => {
|
|
121
|
+
if (customHeaders !== originalCustomHeaders) {
|
|
122
|
+
save(buildPayload({ customHeaders }));
|
|
123
|
+
}
|
|
124
|
+
}, rows: 3, className: "w-64 text-xs" }) }), _jsx(SettingsRow, { label: t('settings.litellmProxy.routing.sonnetModel'), description: t('settings.litellmProxy.routing.modelOverrideDescription'), htmlFor: "litellm-sonnet-model", children: _jsx(Input, { id: "litellm-sonnet-model", "data-testid": "litellm-sonnet-model-input", type: "text", placeholder: "claude-sonnet-4-6", value: sonnetModel, onChange: (e) => setSonnetModel(e.target.value), onBlur: () => {
|
|
125
|
+
if (sonnetModel !== originalSonnetModel) {
|
|
126
|
+
save(buildPayload({ sonnetModel }));
|
|
127
|
+
}
|
|
128
|
+
}, className: "w-64 text-xs" }) }), _jsx(SettingsRow, { label: t('settings.litellmProxy.routing.haikuModel'), htmlFor: "litellm-haiku-model", children: _jsx(Input, { id: "litellm-haiku-model", "data-testid": "litellm-haiku-model-input", type: "text", placeholder: "claude-haiku-4-5", value: haikuModel, onChange: (e) => setHaikuModel(e.target.value), onBlur: () => {
|
|
129
|
+
if (haikuModel !== originalHaikuModel) {
|
|
130
|
+
save(buildPayload({ haikuModel }));
|
|
131
|
+
}
|
|
132
|
+
}, className: "w-64 text-xs" }) }), _jsx(SettingsRow, { label: t('settings.litellmProxy.routing.opusModel'), htmlFor: "litellm-opus-model", children: _jsx(Input, { id: "litellm-opus-model", "data-testid": "litellm-opus-model-input", type: "text", placeholder: "claude-opus-4-6", value: opusModel, onChange: (e) => setOpusModel(e.target.value), onBlur: () => {
|
|
133
|
+
if (opusModel !== originalOpusModel) {
|
|
134
|
+
save(buildPayload({ opusModel }));
|
|
135
|
+
}
|
|
136
|
+
}, className: "w-64 text-xs" }) })] })) : null] }));
|
|
137
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { LiteLLMProxyRoutingSection } from './litellm-proxy-routing-section.js';
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof LiteLLMProxyRoutingSection;
|
|
6
|
+
tags: string[];
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export default meta;
|
|
12
|
+
type Story = StoryObj<typeof meta>;
|
|
13
|
+
export declare const ClaudeCodeDirect: Story;
|
|
14
|
+
export declare const ClaudeCodeProxy: Story;
|
|
15
|
+
export declare const ClaudeCodePassthrough: Story;
|
|
16
|
+
export declare const GeminiCliDirect: Story;
|
|
17
|
+
export declare const GeminiCliProxy: Story;
|
|
18
|
+
export declare const CodexCliDirect: Story;
|
|
19
|
+
export declare const CodexCliProxy: Story;
|
|
20
|
+
export declare const CursorDocs: Story;
|
|
21
|
+
export declare const CopilotDocs: Story;
|
|
22
|
+
export declare const UnsupportedAgent: Story;
|
|
23
|
+
//# sourceMappingURL=litellm-proxy-routing-section.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"litellm-proxy-routing-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/litellm-proxy-routing-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAa7E,QAAA,MAAM,IAAI;;;;;;;CAOyC,CAAC;AAEpD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAInC,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAe7B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAWnC,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAW5B,CAAC;AAIF,eAAO,MAAM,cAAc,EAAE,KAW5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAW3B,CAAC;AAIF,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC;AAIF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAIF,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC"}
|