@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
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { LiteLLMProxyRoutingSection } from './litellm-proxy-routing-section.js';
|
|
2
|
+
import { createDefaultSettings } from '../../../../../../packages/core/src/domain/factories/settings-defaults.factory.js';
|
|
3
|
+
import { LiteLLMProxyRoutingMode } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
4
|
+
const baseSettings = {
|
|
5
|
+
...createDefaultSettings(),
|
|
6
|
+
litellmProxy: {
|
|
7
|
+
baseUrl: 'http://localhost:4000',
|
|
8
|
+
apiKey: 'sk-litellm-proxy-key-1234',
|
|
9
|
+
marketplaceEnabled: true,
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
const meta = {
|
|
13
|
+
title: 'Features/Settings/LiteLLMProxyRoutingSection',
|
|
14
|
+
component: LiteLLMProxyRoutingSection,
|
|
15
|
+
tags: ['autodocs'],
|
|
16
|
+
parameters: {
|
|
17
|
+
layout: 'padded',
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export default meta;
|
|
21
|
+
// --- Claude Code (Tier 1, full features) ---
|
|
22
|
+
export const ClaudeCodeDirect = {
|
|
23
|
+
args: {
|
|
24
|
+
settings: {
|
|
25
|
+
...baseSettings,
|
|
26
|
+
agent: { ...baseSettings.agent, type: 'claude-code' },
|
|
27
|
+
litellmProxy: {
|
|
28
|
+
...baseSettings.litellmProxy,
|
|
29
|
+
claudeCode: { routingMode: LiteLLMProxyRoutingMode.direct },
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
export const ClaudeCodeProxy = {
|
|
35
|
+
args: {
|
|
36
|
+
settings: {
|
|
37
|
+
...baseSettings,
|
|
38
|
+
agent: { ...baseSettings.agent, type: 'claude-code' },
|
|
39
|
+
litellmProxy: {
|
|
40
|
+
...baseSettings.litellmProxy,
|
|
41
|
+
claudeCode: {
|
|
42
|
+
routingMode: LiteLLMProxyRoutingMode.proxy,
|
|
43
|
+
customHeaders: 'x-litellm-customer-id: user-123',
|
|
44
|
+
sonnetModel: 'claude-sonnet-4-6',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
export const ClaudeCodePassthrough = {
|
|
51
|
+
args: {
|
|
52
|
+
settings: {
|
|
53
|
+
...baseSettings,
|
|
54
|
+
agent: { ...baseSettings.agent, type: 'claude-code' },
|
|
55
|
+
litellmProxy: {
|
|
56
|
+
...baseSettings.litellmProxy,
|
|
57
|
+
claudeCode: { routingMode: LiteLLMProxyRoutingMode.passthrough },
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
// --- Gemini CLI (Tier 1, direct/proxy only) ---
|
|
63
|
+
export const GeminiCliDirect = {
|
|
64
|
+
args: {
|
|
65
|
+
settings: {
|
|
66
|
+
...baseSettings,
|
|
67
|
+
agent: { ...baseSettings.agent, type: 'gemini-cli' },
|
|
68
|
+
litellmProxy: {
|
|
69
|
+
...baseSettings.litellmProxy,
|
|
70
|
+
geminiCli: { routingMode: LiteLLMProxyRoutingMode.direct },
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
export const GeminiCliProxy = {
|
|
76
|
+
args: {
|
|
77
|
+
settings: {
|
|
78
|
+
...baseSettings,
|
|
79
|
+
agent: { ...baseSettings.agent, type: 'gemini-cli' },
|
|
80
|
+
litellmProxy: {
|
|
81
|
+
...baseSettings.litellmProxy,
|
|
82
|
+
geminiCli: { routingMode: LiteLLMProxyRoutingMode.proxy },
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
// --- Codex CLI (Tier 1, direct/proxy only) ---
|
|
88
|
+
export const CodexCliDirect = {
|
|
89
|
+
args: {
|
|
90
|
+
settings: {
|
|
91
|
+
...baseSettings,
|
|
92
|
+
agent: { ...baseSettings.agent, type: 'codex-cli' },
|
|
93
|
+
litellmProxy: {
|
|
94
|
+
...baseSettings.litellmProxy,
|
|
95
|
+
codexCli: { routingMode: LiteLLMProxyRoutingMode.direct },
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
export const CodexCliProxy = {
|
|
101
|
+
args: {
|
|
102
|
+
settings: {
|
|
103
|
+
...baseSettings,
|
|
104
|
+
agent: { ...baseSettings.agent, type: 'codex-cli' },
|
|
105
|
+
litellmProxy: {
|
|
106
|
+
...baseSettings.litellmProxy,
|
|
107
|
+
codexCli: { routingMode: LiteLLMProxyRoutingMode.proxy },
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
// --- Cursor (Tier 2, documentation panel) ---
|
|
113
|
+
export const CursorDocs = {
|
|
114
|
+
args: {
|
|
115
|
+
settings: {
|
|
116
|
+
...baseSettings,
|
|
117
|
+
agent: { ...baseSettings.agent, type: 'cursor' },
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
// --- Copilot CLI (Tier 2, documentation panel) ---
|
|
122
|
+
export const CopilotDocs = {
|
|
123
|
+
args: {
|
|
124
|
+
settings: {
|
|
125
|
+
...baseSettings,
|
|
126
|
+
agent: { ...baseSettings.agent, type: 'copilot-cli' },
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
// --- Unsupported agent ---
|
|
131
|
+
export const UnsupportedAgent = {
|
|
132
|
+
args: {
|
|
133
|
+
settings: {
|
|
134
|
+
...baseSettings,
|
|
135
|
+
agent: { ...baseSettings.agent, type: 'rovo-dev' },
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"litellm-proxy-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/litellm-proxy-settings-section.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAKxE,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,2BAA2B,CAAC,EAAE,QAAQ,EAAE,EAAE,gCAAgC,
|
|
1
|
+
{"version":3,"file":"litellm-proxy-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/litellm-proxy-settings-section.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAKxE,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,2BAA2B,CAAC,EAAE,QAAQ,EAAE,EAAE,gCAAgC,2CA+HzF"}
|
package/dist/src/presentation/web/components/features/settings/litellm-proxy-settings-section.js
CHANGED
|
@@ -6,7 +6,7 @@ import { toast } from 'sonner';
|
|
|
6
6
|
import { useTranslation } from 'react-i18next';
|
|
7
7
|
import { updateSettingsAction } from '../../../app/actions/update-settings.js';
|
|
8
8
|
import { addMarketplaceAction } from '../../../app/actions/add-marketplace.js';
|
|
9
|
-
import { SettingsSection, SettingsRow
|
|
9
|
+
import { SettingsSection, SettingsRow } from './settings-section-utils.js';
|
|
10
10
|
import { Input } from '../../ui/input.js';
|
|
11
11
|
import { Button } from '../../ui/button.js';
|
|
12
12
|
export function LiteLLMProxySettingsSection({ settings }) {
|
|
@@ -14,7 +14,6 @@ export function LiteLLMProxySettingsSection({ settings }) {
|
|
|
14
14
|
const [, startTransition] = useTransition();
|
|
15
15
|
const [baseUrl, setBaseUrl] = useState(settings.litellmProxy?.baseUrl ?? '');
|
|
16
16
|
const [apiKey, setApiKey] = useState(settings.litellmProxy?.apiKey ?? '');
|
|
17
|
-
const [marketplaceEnabled, setMarketplaceEnabled] = useState(settings.litellmProxy?.marketplaceEnabled ?? false);
|
|
18
17
|
const [testStatus, setTestStatus] = useState('idle');
|
|
19
18
|
const [isTesting, setIsTesting] = useState(false);
|
|
20
19
|
const originalBaseUrl = settings.litellmProxy?.baseUrl ?? '';
|
|
@@ -28,11 +27,12 @@ export function LiteLLMProxySettingsSection({ settings }) {
|
|
|
28
27
|
});
|
|
29
28
|
}
|
|
30
29
|
function buildPayload(overrides) {
|
|
30
|
+
const url = overrides?.baseUrl ?? baseUrl;
|
|
31
31
|
return {
|
|
32
32
|
litellmProxy: {
|
|
33
|
-
baseUrl:
|
|
33
|
+
baseUrl: url,
|
|
34
34
|
apiKey: overrides?.apiKey ?? apiKey,
|
|
35
|
-
marketplaceEnabled:
|
|
35
|
+
marketplaceEnabled: !!url,
|
|
36
36
|
},
|
|
37
37
|
};
|
|
38
38
|
}
|
|
@@ -69,8 +69,5 @@ export function LiteLLMProxySettingsSection({ settings }) {
|
|
|
69
69
|
}, className: "w-64 text-xs" }) }), _jsx(SettingsRow, { label: t('settings.litellmProxy.apiKey'), description: t('settings.litellmProxy.apiKeyDescription'), tooltip: "A virtual API key for authenticating with the LiteLLM proxy. Stored locally alongside other agent credentials.", htmlFor: "litellm-api-key", children: _jsx(Input, { id: "litellm-api-key", "data-testid": "litellm-api-key-input", type: "password", placeholder: "sk-...", value: apiKey, onChange: (e) => setApiKey(e.target.value), onBlur: () => {
|
|
70
70
|
if (apiKey !== originalApiKey)
|
|
71
71
|
save(buildPayload({ apiKey }));
|
|
72
|
-
}, className: "w-64 text-xs" }) }), _jsx(
|
|
73
|
-
setMarketplaceEnabled(v);
|
|
74
|
-
save(buildPayload({ marketplaceEnabled: v }));
|
|
75
|
-
} }), _jsx(SettingsRow, { label: t('settings.litellmProxy.testConnection'), tooltip: "Attempt to connect to the proxy and fetch the marketplace catalog to verify the configuration is correct.", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", "data-testid": "litellm-test-connection-btn", disabled: !baseUrl || isTesting, onClick: handleTestConnection, className: "cursor-pointer text-xs", children: isTesting ? t('settings.saving') : t('settings.litellmProxy.testConnection') }), testStatus === 'success' && (_jsx(CheckCircle2, { className: "h-4 w-4 text-emerald-500", "data-testid": "litellm-test-success" })), testStatus === 'failed' && (_jsx(XCircle, { className: "text-destructive h-4 w-4", "data-testid": "litellm-test-failed" }))] }) })] }));
|
|
72
|
+
}, className: "w-64 text-xs" }) }), _jsx(SettingsRow, { label: t('settings.litellmProxy.testConnection'), tooltip: "Attempt to connect to the proxy and fetch the marketplace catalog to verify the configuration is correct.", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", "data-testid": "litellm-test-connection-btn", disabled: !baseUrl || isTesting, onClick: handleTestConnection, className: "cursor-pointer text-xs", children: isTesting ? t('settings.saving') : t('settings.litellmProxy.testConnection') }), testStatus === 'success' && (_jsx(CheckCircle2, { className: "h-4 w-4 text-emerald-500", "data-testid": "litellm-test-success" })), testStatus === 'failed' && (_jsx(XCircle, { className: "text-destructive h-4 w-4", "data-testid": "litellm-test-failed" }))] }) })] }));
|
|
76
73
|
}
|
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":"AA+BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAkBzE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,EAAE,uBAAuB,2CA+JzB"}
|
|
@@ -15,6 +15,7 @@ import { InteractiveAgentSettingsSection } from './interactive-agent-settings-se
|
|
|
15
15
|
import { FabLayoutSettingsSection } from './fab-layout-settings-section.js';
|
|
16
16
|
import { DatabaseSettingsSection } from './database-settings-section.js';
|
|
17
17
|
import { LiteLLMProxySettingsSection } from './litellm-proxy-settings-section.js';
|
|
18
|
+
import { LiteLLMProxyRoutingSection } from './litellm-proxy-routing-section.js';
|
|
18
19
|
const SECTIONS = [
|
|
19
20
|
{ id: 'agent', labelKey: 'settings.sections.agent', icon: Bot },
|
|
20
21
|
{ id: 'environment', labelKey: 'settings.sections.environment', icon: Terminal },
|
|
@@ -58,5 +59,5 @@ export function SettingsPageClient({ settings, shipitAiHome, dbFileSize, availab
|
|
|
58
59
|
return (_jsxs("button", { type: "button", onClick: () => setActiveTab(tab.id), className: cn('flex cursor-pointer items-center gap-1 rounded-md px-2 py-1.5 text-[11px] font-bold transition-all', isActive
|
|
59
60
|
? 'bg-muted text-primary shadow-sm ring-1 ring-slate-200/70 dark:ring-slate-700/50'
|
|
60
61
|
: 'text-muted-foreground hover:text-foreground hover:bg-accent/50'), children: [_jsx(TabIcon, { className: "h-3 w-3" }), _jsx("span", { className: "hidden sm:inline", children: t(tab.labelKey) })] }, tab.id));
|
|
61
|
-
}) })] }), _jsxs("div", { className: "flex flex-col gap-3", children: [(activeTab === 'all' || activeTab === 'agent') && (_jsx("div", { id: "section-agent", className: "scroll-mt-18 rounded-lg", children: _jsx(AgentSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'environment') && (_jsx("div", { id: "section-environment", className: "scroll-mt-18 rounded-lg", children: _jsx(EnvironmentSettingsSection, { settings: settings, availableEditors: availableEditors, availableShells: availableShells, availableTerminals: availableTerminals }) })), (activeTab === 'all' || activeTab === 'workflow') && (_jsx("div", { id: "section-workflow", className: "scroll-mt-18 rounded-lg", children: _jsx(WorkflowSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'ci') && (_jsx("div", { id: "section-ci", className: "scroll-mt-18 rounded-lg", children: _jsx(CiSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'stage-timeouts') && (_jsx("div", { id: "section-stage-timeouts", className: "scroll-mt-18 rounded-lg", children: _jsx(StageTimeoutsSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'notifications') && (_jsx("div", { id: "section-notifications", className: "scroll-mt-18 rounded-lg", children: _jsx(NotificationSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'feature-flags') && (_jsx("div", { id: "section-feature-flags", className: "scroll-mt-18 rounded-lg", children: _jsx(FeatureFlagsSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'interactive-agent') && (_jsx("div", { id: "section-interactive-agent", className: "scroll-mt-18 rounded-lg", children: _jsx(InteractiveAgentSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'fab-layout') && (_jsx("div", { id: "section-fab-layout", className: "scroll-mt-18 rounded-lg", children: _jsx(FabLayoutSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'database') && (_jsx("div", { id: "section-database", className: "scroll-mt-18 rounded-lg", children: _jsx(DatabaseSettingsSection, { shipitAiHome: shipitAiHome, dbFileSize: dbFileSize }) })), (activeTab === 'all' || activeTab === 'litellm-proxy') && (
|
|
62
|
+
}) })] }), _jsxs("div", { className: "flex flex-col gap-3", children: [(activeTab === 'all' || activeTab === 'agent') && (_jsx("div", { id: "section-agent", className: "scroll-mt-18 rounded-lg", children: _jsx(AgentSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'environment') && (_jsx("div", { id: "section-environment", className: "scroll-mt-18 rounded-lg", children: _jsx(EnvironmentSettingsSection, { settings: settings, availableEditors: availableEditors, availableShells: availableShells, availableTerminals: availableTerminals }) })), (activeTab === 'all' || activeTab === 'workflow') && (_jsx("div", { id: "section-workflow", className: "scroll-mt-18 rounded-lg", children: _jsx(WorkflowSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'ci') && (_jsx("div", { id: "section-ci", className: "scroll-mt-18 rounded-lg", children: _jsx(CiSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'stage-timeouts') && (_jsx("div", { id: "section-stage-timeouts", className: "scroll-mt-18 rounded-lg", children: _jsx(StageTimeoutsSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'notifications') && (_jsx("div", { id: "section-notifications", className: "scroll-mt-18 rounded-lg", children: _jsx(NotificationSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'feature-flags') && (_jsx("div", { id: "section-feature-flags", className: "scroll-mt-18 rounded-lg", children: _jsx(FeatureFlagsSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'interactive-agent') && (_jsx("div", { id: "section-interactive-agent", className: "scroll-mt-18 rounded-lg", children: _jsx(InteractiveAgentSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'fab-layout') && (_jsx("div", { id: "section-fab-layout", className: "scroll-mt-18 rounded-lg", children: _jsx(FabLayoutSettingsSection, { settings: settings }) })), (activeTab === 'all' || activeTab === 'database') && (_jsx("div", { id: "section-database", className: "scroll-mt-18 rounded-lg", children: _jsx(DatabaseSettingsSection, { shipitAiHome: shipitAiHome, dbFileSize: dbFileSize }) })), (activeTab === 'all' || activeTab === 'litellm-proxy') && (_jsxs("div", { id: "section-litellm-proxy", className: "scroll-mt-18 rounded-lg", children: [_jsx(LiteLLMProxySettingsSection, { settings: settings }), settings.litellmProxy?.baseUrl ? (_jsx(LiteLLMProxyRoutingSection, { settings: settings })) : null] }))] })] }));
|
|
62
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/skills-page-client.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAiB,SAAS,
|
|
1
|
+
{"version":3,"file":"skills-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/skills/skills-page-client.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAiB,SAAS,EAAe,MAAM,cAAc,CAAC;AAE1E,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAeD,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,qBAAqB,2CAqHjE"}
|
|
@@ -24,6 +24,7 @@ function computeCategoryCounts(skills) {
|
|
|
24
24
|
export function SkillsPageClient({ skills }) {
|
|
25
25
|
const [searchQuery, setSearchQuery] = useState('');
|
|
26
26
|
const [activeCategory, setActiveCategory] = useState(null);
|
|
27
|
+
const [sourceFilter, setSourceFilter] = useState(null);
|
|
27
28
|
const [selectedSkill, setSelectedSkill] = useState(null);
|
|
28
29
|
const categoryCounts = useMemo(() => computeCategoryCounts(skills), [skills]);
|
|
29
30
|
const filteredSkills = useMemo(() => {
|
|
@@ -31,6 +32,8 @@ export function SkillsPageClient({ skills }) {
|
|
|
31
32
|
return skills.filter((skill) => {
|
|
32
33
|
if (activeCategory && skill.category !== activeCategory)
|
|
33
34
|
return false;
|
|
35
|
+
if (sourceFilter && skill.source !== sourceFilter)
|
|
36
|
+
return false;
|
|
34
37
|
if (query) {
|
|
35
38
|
const matchesName = skill.name.toLowerCase().includes(query);
|
|
36
39
|
const matchesDescription = skill.description.toLowerCase().includes(query);
|
|
@@ -39,14 +42,15 @@ export function SkillsPageClient({ skills }) {
|
|
|
39
42
|
}
|
|
40
43
|
return true;
|
|
41
44
|
});
|
|
42
|
-
}, [skills, searchQuery, activeCategory]);
|
|
45
|
+
}, [skills, searchQuery, activeCategory, sourceFilter]);
|
|
43
46
|
const clearFilters = () => {
|
|
44
47
|
setSearchQuery('');
|
|
45
48
|
setActiveCategory(null);
|
|
49
|
+
setSourceFilter(null);
|
|
46
50
|
};
|
|
47
51
|
// No skills installed at all
|
|
48
52
|
if (skills.length === 0) {
|
|
49
53
|
return (_jsxs("div", { className: "flex flex-col gap-8 p-8", children: [_jsx(PageHeader, { eyebrow: "Developer Portal", title: "Skills", description: "Claude Code skills installed in this project" }), _jsx(EmptyState, { icon: _jsx(Puzzle, { className: "size-10" }), title: "No skills found", description: "No Claude Code skills are installed. Add skills to .claude/skills/ to get started." })] }));
|
|
50
54
|
}
|
|
51
|
-
return (_jsxs("div", { className: "flex flex-col gap-8 p-8", children: [_jsx(PageHeader, { eyebrow: "Developer Portal", title: "Skills", description: "Claude Code skills installed in this project" }), _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: "Search skills...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "ps-9" })] }), _jsx(CategoryFilter, { activeCategory: activeCategory, onCategoryChange: setActiveCategory, counts: categoryCounts }), filteredSkills.length > 0 ? (_jsx(SkillList, { skills: filteredSkills, onSkillSelect: setSelectedSkill })) : (_jsx(EmptyState, { icon: _jsx(Search, { className: "size-10" }), title: "No matching skills", description: "No skills match your current search and filter criteria.", action: _jsx(Button, { variant: "outline", onClick: clearFilters, children: "Clear filters" }) })), _jsx(SkillDetailDrawer, { skill: selectedSkill, onClose: () => setSelectedSkill(null) })] }));
|
|
55
|
+
return (_jsxs("div", { className: "flex flex-col gap-8 p-8", children: [_jsx(PageHeader, { eyebrow: "Developer Portal", title: "Skills", description: "Claude Code skills installed in this project" }), _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: "Search skills...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "ps-9" })] }), _jsx(CategoryFilter, { activeCategory: activeCategory, onCategoryChange: setActiveCategory, counts: categoryCounts }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { variant: sourceFilter === null ? 'default' : 'outline', size: "sm", onClick: () => setSourceFilter(null), children: "All Sources" }), _jsx(Button, { variant: sourceFilter === 'project' ? 'default' : 'outline', size: "sm", onClick: () => setSourceFilter('project'), children: "Project" }), _jsx(Button, { variant: sourceFilter === 'global' ? 'default' : 'outline', size: "sm", onClick: () => setSourceFilter('global'), children: "Global" })] }), filteredSkills.length > 0 ? (_jsx(SkillList, { skills: filteredSkills, onSkillSelect: setSelectedSkill })) : (_jsx(EmptyState, { icon: _jsx(Search, { className: "size-10" }), title: "No matching skills", description: "No skills match your current search and filter criteria.", action: _jsx(Button, { variant: "outline", onClick: clearFilters, children: "Clear filters" }) })), _jsx(SkillDetailDrawer, { skill: selectedSkill, onClose: () => setSelectedSkill(null) })] }));
|
|
52
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tools-page-client.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tools-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tools-page-client.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAEhG,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CAqLvF"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useCallback } from 'react';
|
|
4
|
-
import { Wrench } from 'lucide-react';
|
|
3
|
+
import { useState, useCallback, useMemo } from 'react';
|
|
4
|
+
import { Wrench, Search } from 'lucide-react';
|
|
5
5
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../ui/tabs.js';
|
|
6
|
+
import { Input } from '../../ui/input.js';
|
|
7
|
+
import { Button } from '../../ui/button.js';
|
|
6
8
|
import { cn } from '../../../lib/utils.js';
|
|
7
9
|
import { ToolCard } from './tool-card.js';
|
|
8
10
|
const TAB_FILTER = {
|
|
@@ -15,6 +17,8 @@ const TAB_FILTER = {
|
|
|
15
17
|
export function ToolsPageClient({ tools: initialTools, className }) {
|
|
16
18
|
const [tools, setTools] = useState(initialTools);
|
|
17
19
|
const [activeTab, setActiveTab] = useState('all');
|
|
20
|
+
const [searchQuery, setSearchQuery] = useState('');
|
|
21
|
+
const [statusFilter, setStatusFilter] = useState(null);
|
|
18
22
|
const refreshTools = useCallback(async () => {
|
|
19
23
|
try {
|
|
20
24
|
const res = await fetch('/api/tools');
|
|
@@ -27,9 +31,24 @@ export function ToolsPageClient({ tools: initialTools, className }) {
|
|
|
27
31
|
// Silently ignore refresh errors; user can re-navigate to refresh
|
|
28
32
|
}
|
|
29
33
|
}, []);
|
|
30
|
-
const filtered =
|
|
34
|
+
const filtered = useMemo(() => {
|
|
35
|
+
const query = searchQuery.toLowerCase();
|
|
36
|
+
return tools.filter((tool) => {
|
|
37
|
+
if (!TAB_FILTER[activeTab](tool))
|
|
38
|
+
return false;
|
|
39
|
+
if (statusFilter && tool.status.status !== statusFilter)
|
|
40
|
+
return false;
|
|
41
|
+
if (query) {
|
|
42
|
+
const matchesName = tool.name.toLowerCase().includes(query);
|
|
43
|
+
const matchesSummary = tool.summary.toLowerCase().includes(query);
|
|
44
|
+
if (!matchesName && !matchesSummary)
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
});
|
|
49
|
+
}, [tools, activeTab, searchQuery, statusFilter]);
|
|
31
50
|
const installedCount = tools.filter((t) => t.status.status === 'available').length;
|
|
32
|
-
return (_jsxs("div", { "data-testid": "tools-page-client", className: cn('space-y-8', className), children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx("div", { className: "flex items-center gap-2", children: _jsx("span", { className: "text-[10px] font-bold tracking-[0.2em] text-slate-400 uppercase", children: "Developer Portal" }) }), _jsxs("div", { className: "flex items-baseline gap-3", children: [_jsx("h1", { className: "text-foreground text-3xl font-black tracking-tight", children: "Tools" }), _jsxs("span", { className: "text-muted-foreground text-sm font-medium", children: [installedCount, " of ", tools.length, " installed"] })] })] }), _jsxs(Tabs, { value: activeTab, onValueChange: (value) => setActiveTab(value), "data-testid": "tools-page-tabs", children: [_jsxs(TabsList, { "data-editorial": "true", className: "bg-card editorial-shadow h-10 p-1", children: [_jsx(TabsTrigger, { value: "all", "data-testid": "tools-tab-all", className: "cursor-pointer px-4 text-xs font-bold", children: "All" }), _jsx(TabsTrigger, { value: "ide", "data-testid": "tools-tab-ide", className: "cursor-pointer px-4 text-xs font-bold", children: "IDEs" }), _jsx(TabsTrigger, { value: "cli-agent", "data-testid": "tools-tab-cli-agent", className: "cursor-pointer px-4 text-xs font-bold", children: "CLI Agents" }), _jsx(TabsTrigger, { value: "vcs", "data-testid": "tools-tab-vcs", className: "cursor-pointer px-4 text-xs font-bold", children: "Version Control" }), _jsx(TabsTrigger, { value: "terminal", "data-testid": "tools-tab-terminal", className: "cursor-pointer px-4 text-xs font-bold", children: "Terminals" })] }), _jsx(TabsContent, { value: activeTab, className: "mt-6", children: filtered.length === 0 ? (_jsxs("div", { "data-testid": "tools-page-empty", className: "text-muted-foreground flex flex-col items-center justify-center py-16 text-center", children: [_jsx(Wrench, { className: "mb-3 h-8 w-8 opacity-20" }), _jsx("p", { className: "text-sm", children: "No tools in this category." })] })) : (_jsx("div", { "data-testid": "tools-page-grid",
|
|
51
|
+
return (_jsxs("div", { "data-testid": "tools-page-client", className: cn('space-y-8', className), children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx("div", { className: "flex items-center gap-2", children: _jsx("span", { className: "text-[10px] font-bold tracking-[0.2em] text-slate-400 uppercase", children: "Developer Portal" }) }), _jsxs("div", { className: "flex items-baseline gap-3", children: [_jsx("h1", { className: "text-foreground text-3xl font-black tracking-tight", children: "Tools" }), _jsxs("span", { className: "text-muted-foreground text-sm font-medium", children: [installedCount, " of ", tools.length, " installed"] })] })] }), _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: "Search tools...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "ps-9", "data-testid": "tool-search" })] }), _jsxs(Tabs, { value: activeTab, onValueChange: (value) => setActiveTab(value), "data-testid": "tools-page-tabs", children: [_jsxs(TabsList, { "data-editorial": "true", className: "bg-card editorial-shadow h-10 p-1", children: [_jsx(TabsTrigger, { value: "all", "data-testid": "tools-tab-all", className: "cursor-pointer px-4 text-xs font-bold", children: "All" }), _jsx(TabsTrigger, { value: "ide", "data-testid": "tools-tab-ide", className: "cursor-pointer px-4 text-xs font-bold", children: "IDEs" }), _jsx(TabsTrigger, { value: "cli-agent", "data-testid": "tools-tab-cli-agent", className: "cursor-pointer px-4 text-xs font-bold", children: "CLI Agents" }), _jsx(TabsTrigger, { value: "vcs", "data-testid": "tools-tab-vcs", className: "cursor-pointer px-4 text-xs font-bold", children: "Version Control" }), _jsx(TabsTrigger, { value: "terminal", "data-testid": "tools-tab-terminal", className: "cursor-pointer px-4 text-xs font-bold", children: "Terminals" })] }), _jsxs("div", { className: "mt-4 flex flex-wrap gap-2", "data-testid": "tools-status-filter", children: [_jsx(Button, { variant: statusFilter === null ? 'default' : 'outline', size: "sm", onClick: () => setStatusFilter(null), children: "All" }), _jsx(Button, { variant: statusFilter === 'available' ? 'default' : 'outline', size: "sm", onClick: () => setStatusFilter('available'), children: "Installed" }), _jsx(Button, { variant: statusFilter === 'missing' ? 'default' : 'outline', size: "sm", onClick: () => setStatusFilter('missing'), children: "Not Installed" })] }), _jsx(TabsContent, { value: activeTab, className: "mt-6", children: filtered.length === 0 ? (_jsxs("div", { "data-testid": "tools-page-empty", className: "text-muted-foreground flex flex-col items-center justify-center py-16 text-center", children: [_jsx(Wrench, { className: "mb-3 h-8 w-8 opacity-20" }), _jsx("p", { className: "text-sm", children: "No tools in this category." })] })) : (_jsx("div", { "data-testid": "tools-page-grid",
|
|
33
52
|
// Editorial density: 3 columns max so cards stay wide enough to
|
|
34
53
|
// give the Stitch "magazine" feel. Previously xl:grid-cols-4 which
|
|
35
54
|
// squeezed cards and reduced background-vs-card contrast.
|
|
@@ -226,7 +226,29 @@
|
|
|
226
226
|
"hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
|
|
227
227
|
"testConnection": "Test Connection",
|
|
228
228
|
"testSuccess": "Connection successful",
|
|
229
|
-
"testFailed": "Connection failed"
|
|
229
|
+
"testFailed": "Connection failed",
|
|
230
|
+
"routing": {
|
|
231
|
+
"title": "Proxy Routing (Claude Code)",
|
|
232
|
+
"description": "Configure how Claude Code routes API traffic through LiteLLM",
|
|
233
|
+
"hint": "Control whether Claude Code uses the LiteLLM proxy for API requests. Supports full proxy routing, passthrough for Max/BYOK subscriptions, and model overrides.",
|
|
234
|
+
"mode": "Routing Mode",
|
|
235
|
+
"modeDescription": "How Claude Code routes API traffic",
|
|
236
|
+
"modeDirect": "Direct (own subscription)",
|
|
237
|
+
"modeProxy": "Proxy (full routing)",
|
|
238
|
+
"modePassthrough": "Passthrough (Max/BYOK)",
|
|
239
|
+
"passthroughHelp": "Passthrough mode requires the LiteLLM proxy to have forward_client_headers_to_llm_api or forward_llm_provider_auth_headers enabled.",
|
|
240
|
+
"customHeaders": "Custom Headers",
|
|
241
|
+
"customHeadersDescription": "Newline-separated headers for cost attribution (e.g., x-litellm-customer-id: user-123)",
|
|
242
|
+
"sonnetModel": "Sonnet Model Override",
|
|
243
|
+
"haikuModel": "Haiku Model Override",
|
|
244
|
+
"opusModel": "Opus Model Override",
|
|
245
|
+
"modelOverrideDescription": "Override the default model routed through LiteLLM",
|
|
246
|
+
"notSupported": "Proxy routing is not supported for this agent type.",
|
|
247
|
+
"cursorInstructions": "Cursor Setup Instructions",
|
|
248
|
+
"cursorDescription": "Add these values to Cursor Settings > Models > Override OpenAI Base URL and API Key. Only Ask and Plan modes support custom API keys — Agent mode does not.",
|
|
249
|
+
"copilotInstructions": "GitHub Copilot Setup Instructions",
|
|
250
|
+
"copilotDescription": "Add this to your VS Code settings.json under github.copilot.advanced: { \"debug.overrideProxyUrl\": \"<url>\", \"debug.testOverrideProxyUrl\": \"<url>\" }. These are undocumented debug settings."
|
|
251
|
+
}
|
|
230
252
|
},
|
|
231
253
|
"interactiveAgent": {
|
|
232
254
|
"title": "الوكيل التفاعلي",
|
|
@@ -212,7 +212,29 @@
|
|
|
212
212
|
"hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
|
|
213
213
|
"testConnection": "Test Connection",
|
|
214
214
|
"testSuccess": "Connection successful",
|
|
215
|
-
"testFailed": "Connection failed"
|
|
215
|
+
"testFailed": "Connection failed",
|
|
216
|
+
"routing": {
|
|
217
|
+
"title": "Proxy Routing (Claude Code)",
|
|
218
|
+
"description": "Configure how Claude Code routes API traffic through LiteLLM",
|
|
219
|
+
"hint": "Control whether Claude Code uses the LiteLLM proxy for API requests. Supports full proxy routing, passthrough for Max/BYOK subscriptions, and model overrides.",
|
|
220
|
+
"mode": "Routing Mode",
|
|
221
|
+
"modeDescription": "How Claude Code routes API traffic",
|
|
222
|
+
"modeDirect": "Direct (own subscription)",
|
|
223
|
+
"modeProxy": "Proxy (full routing)",
|
|
224
|
+
"modePassthrough": "Passthrough (Max/BYOK)",
|
|
225
|
+
"passthroughHelp": "Passthrough mode requires the LiteLLM proxy to have forward_client_headers_to_llm_api or forward_llm_provider_auth_headers enabled.",
|
|
226
|
+
"customHeaders": "Custom Headers",
|
|
227
|
+
"customHeadersDescription": "Newline-separated headers for cost attribution (e.g., x-litellm-customer-id: user-123)",
|
|
228
|
+
"sonnetModel": "Sonnet Model Override",
|
|
229
|
+
"haikuModel": "Haiku Model Override",
|
|
230
|
+
"opusModel": "Opus Model Override",
|
|
231
|
+
"modelOverrideDescription": "Override the default model routed through LiteLLM",
|
|
232
|
+
"notSupported": "Proxy routing is not supported for this agent type.",
|
|
233
|
+
"cursorInstructions": "Cursor Setup Instructions",
|
|
234
|
+
"cursorDescription": "Add these values to Cursor Settings > Models > Override OpenAI Base URL and API Key. Only Ask and Plan modes support custom API keys — Agent mode does not.",
|
|
235
|
+
"copilotInstructions": "GitHub Copilot Setup Instructions",
|
|
236
|
+
"copilotDescription": "Add this to your VS Code settings.json under github.copilot.advanced: { \"debug.overrideProxyUrl\": \"<url>\", \"debug.testOverrideProxyUrl\": \"<url>\" }. These are undocumented debug settings."
|
|
237
|
+
}
|
|
216
238
|
},
|
|
217
239
|
"interactiveAgent": {
|
|
218
240
|
"title": "Interaktiver Agent",
|
|
@@ -226,7 +226,29 @@
|
|
|
226
226
|
"hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
|
|
227
227
|
"testConnection": "Test Connection",
|
|
228
228
|
"testSuccess": "Connection successful",
|
|
229
|
-
"testFailed": "Connection failed"
|
|
229
|
+
"testFailed": "Connection failed",
|
|
230
|
+
"routing": {
|
|
231
|
+
"title": "Proxy Routing (Claude Code)",
|
|
232
|
+
"description": "Configure how Claude Code routes API traffic through LiteLLM",
|
|
233
|
+
"hint": "Control whether Claude Code uses the LiteLLM proxy for API requests. Supports full proxy routing, passthrough for Max/BYOK subscriptions, and model overrides.",
|
|
234
|
+
"mode": "Routing Mode",
|
|
235
|
+
"modeDescription": "How Claude Code routes API traffic",
|
|
236
|
+
"modeDirect": "Direct (own subscription)",
|
|
237
|
+
"modeProxy": "Proxy (full routing)",
|
|
238
|
+
"modePassthrough": "Passthrough (Max/BYOK)",
|
|
239
|
+
"passthroughHelp": "Passthrough mode requires the LiteLLM proxy to have forward_client_headers_to_llm_api or forward_llm_provider_auth_headers enabled.",
|
|
240
|
+
"customHeaders": "Custom Headers",
|
|
241
|
+
"customHeadersDescription": "Newline-separated headers for cost attribution (e.g., x-litellm-customer-id: user-123)",
|
|
242
|
+
"sonnetModel": "Sonnet Model Override",
|
|
243
|
+
"haikuModel": "Haiku Model Override",
|
|
244
|
+
"opusModel": "Opus Model Override",
|
|
245
|
+
"modelOverrideDescription": "Override the default model routed through LiteLLM",
|
|
246
|
+
"notSupported": "Proxy routing is not supported for this agent type.",
|
|
247
|
+
"cursorInstructions": "Cursor Setup Instructions",
|
|
248
|
+
"cursorDescription": "Add these values to Cursor Settings > Models > Override OpenAI Base URL and API Key. Only Ask and Plan modes support custom API keys — Agent mode does not.",
|
|
249
|
+
"copilotInstructions": "GitHub Copilot Setup Instructions",
|
|
250
|
+
"copilotDescription": "Add this to your VS Code settings.json under github.copilot.advanced: { \"debug.overrideProxyUrl\": \"<url>\", \"debug.testOverrideProxyUrl\": \"<url>\" }. These are undocumented debug settings."
|
|
251
|
+
}
|
|
230
252
|
},
|
|
231
253
|
"interactiveAgent": {
|
|
232
254
|
"title": "Interactive Agent",
|
|
@@ -226,7 +226,29 @@
|
|
|
226
226
|
"hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
|
|
227
227
|
"testConnection": "Test Connection",
|
|
228
228
|
"testSuccess": "Connection successful",
|
|
229
|
-
"testFailed": "Connection failed"
|
|
229
|
+
"testFailed": "Connection failed",
|
|
230
|
+
"routing": {
|
|
231
|
+
"title": "Proxy Routing (Claude Code)",
|
|
232
|
+
"description": "Configure how Claude Code routes API traffic through LiteLLM",
|
|
233
|
+
"hint": "Control whether Claude Code uses the LiteLLM proxy for API requests. Supports full proxy routing, passthrough for Max/BYOK subscriptions, and model overrides.",
|
|
234
|
+
"mode": "Routing Mode",
|
|
235
|
+
"modeDescription": "How Claude Code routes API traffic",
|
|
236
|
+
"modeDirect": "Direct (own subscription)",
|
|
237
|
+
"modeProxy": "Proxy (full routing)",
|
|
238
|
+
"modePassthrough": "Passthrough (Max/BYOK)",
|
|
239
|
+
"passthroughHelp": "Passthrough mode requires the LiteLLM proxy to have forward_client_headers_to_llm_api or forward_llm_provider_auth_headers enabled.",
|
|
240
|
+
"customHeaders": "Custom Headers",
|
|
241
|
+
"customHeadersDescription": "Newline-separated headers for cost attribution (e.g., x-litellm-customer-id: user-123)",
|
|
242
|
+
"sonnetModel": "Sonnet Model Override",
|
|
243
|
+
"haikuModel": "Haiku Model Override",
|
|
244
|
+
"opusModel": "Opus Model Override",
|
|
245
|
+
"modelOverrideDescription": "Override the default model routed through LiteLLM",
|
|
246
|
+
"notSupported": "Proxy routing is not supported for this agent type.",
|
|
247
|
+
"cursorInstructions": "Cursor Setup Instructions",
|
|
248
|
+
"cursorDescription": "Add these values to Cursor Settings > Models > Override OpenAI Base URL and API Key. Only Ask and Plan modes support custom API keys — Agent mode does not.",
|
|
249
|
+
"copilotInstructions": "GitHub Copilot Setup Instructions",
|
|
250
|
+
"copilotDescription": "Add this to your VS Code settings.json under github.copilot.advanced: { \"debug.overrideProxyUrl\": \"<url>\", \"debug.testOverrideProxyUrl\": \"<url>\" }. These are undocumented debug settings."
|
|
251
|
+
}
|
|
230
252
|
},
|
|
231
253
|
"interactiveAgent": {
|
|
232
254
|
"title": "Agente interactivo",
|
|
@@ -226,7 +226,29 @@
|
|
|
226
226
|
"hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
|
|
227
227
|
"testConnection": "Test Connection",
|
|
228
228
|
"testSuccess": "Connection successful",
|
|
229
|
-
"testFailed": "Connection failed"
|
|
229
|
+
"testFailed": "Connection failed",
|
|
230
|
+
"routing": {
|
|
231
|
+
"title": "Proxy Routing (Claude Code)",
|
|
232
|
+
"description": "Configure how Claude Code routes API traffic through LiteLLM",
|
|
233
|
+
"hint": "Control whether Claude Code uses the LiteLLM proxy for API requests. Supports full proxy routing, passthrough for Max/BYOK subscriptions, and model overrides.",
|
|
234
|
+
"mode": "Routing Mode",
|
|
235
|
+
"modeDescription": "How Claude Code routes API traffic",
|
|
236
|
+
"modeDirect": "Direct (own subscription)",
|
|
237
|
+
"modeProxy": "Proxy (full routing)",
|
|
238
|
+
"modePassthrough": "Passthrough (Max/BYOK)",
|
|
239
|
+
"passthroughHelp": "Passthrough mode requires the LiteLLM proxy to have forward_client_headers_to_llm_api or forward_llm_provider_auth_headers enabled.",
|
|
240
|
+
"customHeaders": "Custom Headers",
|
|
241
|
+
"customHeadersDescription": "Newline-separated headers for cost attribution (e.g., x-litellm-customer-id: user-123)",
|
|
242
|
+
"sonnetModel": "Sonnet Model Override",
|
|
243
|
+
"haikuModel": "Haiku Model Override",
|
|
244
|
+
"opusModel": "Opus Model Override",
|
|
245
|
+
"modelOverrideDescription": "Override the default model routed through LiteLLM",
|
|
246
|
+
"notSupported": "Proxy routing is not supported for this agent type.",
|
|
247
|
+
"cursorInstructions": "Cursor Setup Instructions",
|
|
248
|
+
"cursorDescription": "Add these values to Cursor Settings > Models > Override OpenAI Base URL and API Key. Only Ask and Plan modes support custom API keys — Agent mode does not.",
|
|
249
|
+
"copilotInstructions": "GitHub Copilot Setup Instructions",
|
|
250
|
+
"copilotDescription": "Add this to your VS Code settings.json under github.copilot.advanced: { \"debug.overrideProxyUrl\": \"<url>\", \"debug.testOverrideProxyUrl\": \"<url>\" }. These are undocumented debug settings."
|
|
251
|
+
}
|
|
230
252
|
},
|
|
231
253
|
"interactiveAgent": {
|
|
232
254
|
"title": "Agent interactif",
|
|
@@ -226,7 +226,29 @@
|
|
|
226
226
|
"hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
|
|
227
227
|
"testConnection": "Test Connection",
|
|
228
228
|
"testSuccess": "Connection successful",
|
|
229
|
-
"testFailed": "Connection failed"
|
|
229
|
+
"testFailed": "Connection failed",
|
|
230
|
+
"routing": {
|
|
231
|
+
"title": "Proxy Routing (Claude Code)",
|
|
232
|
+
"description": "Configure how Claude Code routes API traffic through LiteLLM",
|
|
233
|
+
"hint": "Control whether Claude Code uses the LiteLLM proxy for API requests. Supports full proxy routing, passthrough for Max/BYOK subscriptions, and model overrides.",
|
|
234
|
+
"mode": "Routing Mode",
|
|
235
|
+
"modeDescription": "How Claude Code routes API traffic",
|
|
236
|
+
"modeDirect": "Direct (own subscription)",
|
|
237
|
+
"modeProxy": "Proxy (full routing)",
|
|
238
|
+
"modePassthrough": "Passthrough (Max/BYOK)",
|
|
239
|
+
"passthroughHelp": "Passthrough mode requires the LiteLLM proxy to have forward_client_headers_to_llm_api or forward_llm_provider_auth_headers enabled.",
|
|
240
|
+
"customHeaders": "Custom Headers",
|
|
241
|
+
"customHeadersDescription": "Newline-separated headers for cost attribution (e.g., x-litellm-customer-id: user-123)",
|
|
242
|
+
"sonnetModel": "Sonnet Model Override",
|
|
243
|
+
"haikuModel": "Haiku Model Override",
|
|
244
|
+
"opusModel": "Opus Model Override",
|
|
245
|
+
"modelOverrideDescription": "Override the default model routed through LiteLLM",
|
|
246
|
+
"notSupported": "Proxy routing is not supported for this agent type.",
|
|
247
|
+
"cursorInstructions": "Cursor Setup Instructions",
|
|
248
|
+
"cursorDescription": "Add these values to Cursor Settings > Models > Override OpenAI Base URL and API Key. Only Ask and Plan modes support custom API keys — Agent mode does not.",
|
|
249
|
+
"copilotInstructions": "GitHub Copilot Setup Instructions",
|
|
250
|
+
"copilotDescription": "Add this to your VS Code settings.json under github.copilot.advanced: { \"debug.overrideProxyUrl\": \"<url>\", \"debug.testOverrideProxyUrl\": \"<url>\" }. These are undocumented debug settings."
|
|
251
|
+
}
|
|
230
252
|
},
|
|
231
253
|
"interactiveAgent": {
|
|
232
254
|
"title": "סוכן אינטראקטיבי",
|
|
@@ -226,7 +226,29 @@
|
|
|
226
226
|
"hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
|
|
227
227
|
"testConnection": "Test Connection",
|
|
228
228
|
"testSuccess": "Connection successful",
|
|
229
|
-
"testFailed": "Connection failed"
|
|
229
|
+
"testFailed": "Connection failed",
|
|
230
|
+
"routing": {
|
|
231
|
+
"title": "Proxy Routing (Claude Code)",
|
|
232
|
+
"description": "Configure how Claude Code routes API traffic through LiteLLM",
|
|
233
|
+
"hint": "Control whether Claude Code uses the LiteLLM proxy for API requests. Supports full proxy routing, passthrough for Max/BYOK subscriptions, and model overrides.",
|
|
234
|
+
"mode": "Routing Mode",
|
|
235
|
+
"modeDescription": "How Claude Code routes API traffic",
|
|
236
|
+
"modeDirect": "Direct (own subscription)",
|
|
237
|
+
"modeProxy": "Proxy (full routing)",
|
|
238
|
+
"modePassthrough": "Passthrough (Max/BYOK)",
|
|
239
|
+
"passthroughHelp": "Passthrough mode requires the LiteLLM proxy to have forward_client_headers_to_llm_api or forward_llm_provider_auth_headers enabled.",
|
|
240
|
+
"customHeaders": "Custom Headers",
|
|
241
|
+
"customHeadersDescription": "Newline-separated headers for cost attribution (e.g., x-litellm-customer-id: user-123)",
|
|
242
|
+
"sonnetModel": "Sonnet Model Override",
|
|
243
|
+
"haikuModel": "Haiku Model Override",
|
|
244
|
+
"opusModel": "Opus Model Override",
|
|
245
|
+
"modelOverrideDescription": "Override the default model routed through LiteLLM",
|
|
246
|
+
"notSupported": "Proxy routing is not supported for this agent type.",
|
|
247
|
+
"cursorInstructions": "Cursor Setup Instructions",
|
|
248
|
+
"cursorDescription": "Add these values to Cursor Settings > Models > Override OpenAI Base URL and API Key. Only Ask and Plan modes support custom API keys — Agent mode does not.",
|
|
249
|
+
"copilotInstructions": "GitHub Copilot Setup Instructions",
|
|
250
|
+
"copilotDescription": "Add this to your VS Code settings.json under github.copilot.advanced: { \"debug.overrideProxyUrl\": \"<url>\", \"debug.testOverrideProxyUrl\": \"<url>\" }. These are undocumented debug settings."
|
|
251
|
+
}
|
|
230
252
|
},
|
|
231
253
|
"interactiveAgent": {
|
|
232
254
|
"title": "Agente Interativo",
|
|
@@ -226,7 +226,29 @@
|
|
|
226
226
|
"hint": "Connect to a LiteLLM proxy to browse and install Claude Code plugins from your organization's curated marketplace.",
|
|
227
227
|
"testConnection": "Test Connection",
|
|
228
228
|
"testSuccess": "Connection successful",
|
|
229
|
-
"testFailed": "Connection failed"
|
|
229
|
+
"testFailed": "Connection failed",
|
|
230
|
+
"routing": {
|
|
231
|
+
"title": "Proxy Routing (Claude Code)",
|
|
232
|
+
"description": "Configure how Claude Code routes API traffic through LiteLLM",
|
|
233
|
+
"hint": "Control whether Claude Code uses the LiteLLM proxy for API requests. Supports full proxy routing, passthrough for Max/BYOK subscriptions, and model overrides.",
|
|
234
|
+
"mode": "Routing Mode",
|
|
235
|
+
"modeDescription": "How Claude Code routes API traffic",
|
|
236
|
+
"modeDirect": "Direct (own subscription)",
|
|
237
|
+
"modeProxy": "Proxy (full routing)",
|
|
238
|
+
"modePassthrough": "Passthrough (Max/BYOK)",
|
|
239
|
+
"passthroughHelp": "Passthrough mode requires the LiteLLM proxy to have forward_client_headers_to_llm_api or forward_llm_provider_auth_headers enabled.",
|
|
240
|
+
"customHeaders": "Custom Headers",
|
|
241
|
+
"customHeadersDescription": "Newline-separated headers for cost attribution (e.g., x-litellm-customer-id: user-123)",
|
|
242
|
+
"sonnetModel": "Sonnet Model Override",
|
|
243
|
+
"haikuModel": "Haiku Model Override",
|
|
244
|
+
"opusModel": "Opus Model Override",
|
|
245
|
+
"modelOverrideDescription": "Override the default model routed through LiteLLM",
|
|
246
|
+
"notSupported": "Proxy routing is not supported for this agent type.",
|
|
247
|
+
"cursorInstructions": "Cursor Setup Instructions",
|
|
248
|
+
"cursorDescription": "Add these values to Cursor Settings > Models > Override OpenAI Base URL and API Key. Only Ask and Plan modes support custom API keys — Agent mode does not.",
|
|
249
|
+
"copilotInstructions": "GitHub Copilot Setup Instructions",
|
|
250
|
+
"copilotDescription": "Add this to your VS Code settings.json under github.copilot.advanced: { \"debug.overrideProxyUrl\": \"<url>\", \"debug.testOverrideProxyUrl\": \"<url>\" }. These are undocumented debug settings."
|
|
251
|
+
}
|
|
230
252
|
},
|
|
231
253
|
"interactiveAgent": {
|
|
232
254
|
"title": "Интерактивный агент",
|