cartethyia 2.7.5 → 2.7.7
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/.env.example +8 -3
- package/README.md +26 -2
- package/dist/dashboard/assets/BannedPage-B05aF8Dg.js +1 -0
- package/dist/dashboard/assets/BannedPage-B05aF8Dg.js.gz +0 -0
- package/dist/dashboard/assets/CliToolDetailPage-CLUhmjUy.js +3 -0
- package/dist/dashboard/assets/CliToolDetailPage-CLUhmjUy.js.gz +0 -0
- package/dist/dashboard/assets/CliToolsPage-CQmrqqrk.js +1 -0
- package/dist/dashboard/assets/CliToolsPage-CQmrqqrk.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-CHG_1Wr3.js +1 -0
- package/dist/dashboard/assets/CombosPage-CHG_1Wr3.js.gz +0 -0
- package/dist/dashboard/assets/{ConsoleLogPage-D5rol2j2.js → ConsoleLogPage-DPgbklad.js} +1 -1
- package/dist/dashboard/assets/ConsoleLogPage-DPgbklad.js.gz +0 -0
- package/dist/dashboard/assets/{CustomizationPage-BKj_r0rp.js → CustomizationPage-pnfAqr_-.js} +1 -1
- package/dist/dashboard/assets/CustomizationPage-pnfAqr_-.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-DGJuU2A6.js +1 -0
- package/dist/dashboard/assets/HealthEventsModal-DGJuU2A6.js.gz +0 -0
- package/dist/dashboard/assets/{InjectSystemPromptPanel-B5nZvmf0.js → InjectSystemPromptPanel-C-e2AMz6.js} +245 -2
- package/dist/dashboard/assets/InjectSystemPromptPanel-C-e2AMz6.js.gz +0 -0
- package/dist/dashboard/assets/LoginPage-J8wPbmfT.js +1 -0
- package/dist/dashboard/assets/LoginPage-J8wPbmfT.js.gz +0 -0
- package/dist/dashboard/assets/{ModelPicker-DnQPSIA8.js → ModelPicker-C6WlpU5E.js} +1 -1
- package/dist/dashboard/assets/ModelPicker-C6WlpU5E.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-BSQnF2Lp.js +1 -0
- package/dist/dashboard/assets/OverviewPage-BSQnF2Lp.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-DK_e0FJz.js +7 -0
- package/dist/dashboard/assets/ProviderDetailPage-DK_e0FJz.js.gz +0 -0
- package/dist/dashboard/assets/ProviderIcon-jjqXJDA3.js +1 -0
- package/dist/dashboard/assets/ProviderIcon-jjqXJDA3.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-D_a3r6Gc.js +1 -0
- package/dist/dashboard/assets/ProvidersPage-D_a3r6Gc.js.gz +0 -0
- package/dist/dashboard/assets/{ProxyPage-5SnUSy3j.js → ProxyPage-BBTRBAQ3.js} +1 -1
- package/dist/dashboard/assets/ProxyPage-BBTRBAQ3.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-B2WqMSG1.js +1 -0
- package/dist/dashboard/assets/QuotaPage-B2WqMSG1.js.gz +0 -0
- package/dist/dashboard/assets/{SettingsPage-BJtRZ4qD.js → SettingsPage-D7xp5Ij_.js} +1 -1
- package/dist/dashboard/assets/SettingsPage-D7xp5Ij_.js.gz +0 -0
- package/dist/dashboard/assets/SetupPage-LND6_Ss7.js +1 -0
- package/dist/dashboard/assets/SetupPage-LND6_Ss7.js.gz +0 -0
- package/dist/dashboard/assets/{StudioPage-BfAb5-o_.js → StudioPage-BzNnm6Bi.js} +4 -4
- package/dist/dashboard/assets/StudioPage-BzNnm6Bi.js.gz +0 -0
- package/dist/dashboard/assets/ToolIcon-CfeLA-Z_.js +1 -0
- package/dist/dashboard/assets/ToolIcon-CfeLA-Z_.js.gz +0 -0
- package/dist/dashboard/assets/{UsagePage-BNzeZ2Vk.js → UsagePage-C1TbL24N.js} +13 -13
- package/dist/dashboard/assets/UsagePage-C1TbL24N.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-KvX83mRe.js +1 -0
- package/dist/dashboard/assets/api-keys-KvX83mRe.js.gz +0 -0
- package/dist/dashboard/assets/app-DRnQLhsc.js +9 -0
- package/dist/dashboard/assets/app-DRnQLhsc.js.gz +0 -0
- package/dist/dashboard/assets/app-mweRcsKp.css +2 -0
- package/dist/dashboard/assets/app-mweRcsKp.css.gz +0 -0
- package/dist/dashboard/assets/{assert-C0K-c4eo.js → assert-CidQVoNo.js} +1 -1
- package/dist/dashboard/assets/assert-CidQVoNo.js.gz +0 -0
- package/dist/dashboard/assets/{badge-DfbhQU4k.js → badge-BaX2GTrn.js} +1 -1
- package/dist/dashboard/assets/badge-BaX2GTrn.js.gz +0 -0
- package/dist/dashboard/assets/{banner-BllT4LcF.js → banner-DFH4Bkte.js} +1 -1
- package/dist/dashboard/assets/banner-DFH4Bkte.js.gz +0 -0
- package/dist/dashboard/assets/{card-CtkX66Wd.js → card-CxDw0lK6.js} +1 -1
- package/dist/dashboard/assets/card-CxDw0lK6.js.gz +0 -0
- package/dist/dashboard/assets/circle-question-mark-Cz4un8sH.js +1 -0
- package/dist/dashboard/assets/circle-question-mark-Cz4un8sH.js.gz +0 -0
- package/dist/dashboard/assets/{cli-tools-CQXVMn4P.js → cli-tools-Bwv5-zGZ.js} +1 -1
- package/dist/dashboard/assets/cli-tools-Bwv5-zGZ.js.gz +0 -0
- package/dist/dashboard/assets/{clipboard-button-BQqBQd2n.js → clipboard-button-DfS1ntiq.js} +1 -1
- package/dist/dashboard/assets/clipboard-button-DfS1ntiq.js.gz +0 -0
- package/dist/dashboard/assets/dialog-BK-NRr5u.js +1 -0
- package/dist/dashboard/assets/dialog-BK-NRr5u.js.gz +0 -0
- package/dist/dashboard/assets/{drawer-BrTEZ8zu.js → drawer-QqPul6sC.js} +1 -1
- package/dist/dashboard/assets/drawer-QqPul6sC.js.gz +0 -0
- package/dist/dashboard/assets/entry-BMlYJVFj.js +1 -0
- package/dist/dashboard/assets/entry-BMlYJVFj.js.gz +0 -0
- package/dist/dashboard/assets/entry-Dmx7gBiN.js +1 -0
- package/dist/dashboard/assets/entry-Dmx7gBiN.js.gz +0 -0
- package/dist/dashboard/assets/entry-vqGb8yVz.js +4 -0
- package/dist/dashboard/assets/entry-vqGb8yVz.js.gz +0 -0
- package/dist/dashboard/assets/formatters-DP-5E01-.js +1 -0
- package/dist/dashboard/assets/formatters-DP-5E01-.js.gz +0 -0
- package/dist/dashboard/assets/house-h9AZlJuT.js +1 -0
- package/dist/dashboard/assets/house-h9AZlJuT.js.gz +0 -0
- package/dist/dashboard/assets/{index-FQlj0HUT.js → index-D36vCZht.js} +2 -2
- package/dist/dashboard/assets/index-D36vCZht.js.gz +0 -0
- package/dist/dashboard/assets/{inline-C4gU5iOL.js → inline-CHJQwxLa.js} +1 -1
- package/dist/dashboard/assets/inline-CHJQwxLa.js.gz +0 -0
- package/dist/dashboard/assets/{input-BHHX_Tmm.js → input-BlmlizVV.js} +1 -1
- package/dist/dashboard/assets/input-BlmlizVV.js.gz +0 -0
- package/dist/dashboard/assets/{layout-CajrYUnD.js → layout-Bz93I-yE.js} +1 -1
- package/dist/dashboard/assets/layout-Bz93I-yE.js.gz +0 -0
- package/dist/dashboard/assets/{list-row-Bx2I7XUe.js → list-row-Ml16KCfu.js} +1 -1
- package/dist/dashboard/assets/list-row-Ml16KCfu.js.gz +0 -0
- package/dist/dashboard/assets/{live-DNNqRbj2.js → live-7_QpnYGu.js} +1 -1
- package/dist/dashboard/assets/live-7_QpnYGu.js.gz +0 -0
- package/dist/dashboard/assets/{mutation-Rr0TIvcj.js → mutation-GU7XdEjz.js} +1 -1
- package/dist/dashboard/assets/mutation-GU7XdEjz.js.gz +0 -0
- package/dist/dashboard/assets/{network-C5UBACrJ.js → network-CuMDaTzT.js} +1 -1
- package/dist/dashboard/assets/network-CuMDaTzT.js.gz +0 -0
- package/dist/dashboard/assets/numbers-CoqpaDMx.js +2 -0
- package/dist/dashboard/assets/numbers-CoqpaDMx.js.gz +0 -0
- package/dist/dashboard/assets/{pagination-Xsi9Qx04.js → pagination-B5aOoweZ.js} +1 -1
- package/dist/dashboard/assets/pagination-B5aOoweZ.js.gz +0 -0
- package/dist/dashboard/assets/providers/zai.webp +0 -0
- package/dist/dashboard/assets/providers/zcode.webp +0 -0
- package/dist/dashboard/assets/{query-keys-BloKtaXJ.js → query-keys-YSoQOUh6.js} +1 -1
- package/dist/dashboard/assets/{query-keys-BloKtaXJ.js.gz → query-keys-YSoQOUh6.js.gz} +0 -0
- package/dist/dashboard/assets/quota-DJ1QlAOq.js +1 -0
- package/dist/dashboard/assets/quota-DJ1QlAOq.js.gz +0 -0
- package/dist/dashboard/assets/{routing-in0f_IfK.js → routing-fnCsxgNO.js} +1 -1
- package/dist/dashboard/assets/routing-fnCsxgNO.js.gz +0 -0
- package/dist/dashboard/assets/{select-BLULNqTp.js → select-C9Ssle9b.js} +2 -2
- package/dist/dashboard/assets/select-C9Ssle9b.js.gz +0 -0
- package/dist/dashboard/assets/{settings-CcGczj6I.js → settings-BxslsErn.js} +1 -1
- package/dist/dashboard/assets/settings-BxslsErn.js.gz +0 -0
- package/dist/dashboard/assets/{stack-D2lIR0tg.js → stack-j7cXjgYX.js} +1 -1
- package/dist/dashboard/assets/stack-j7cXjgYX.js.gz +0 -0
- package/dist/dashboard/assets/{state-DTARjfiW.js → state-DHmEnLa2.js} +1 -1
- package/dist/dashboard/assets/state-DHmEnLa2.js.gz +0 -0
- package/dist/dashboard/assets/{switch-c0oPSnqW.js → switch-DmZcyTIC.js} +1 -1
- package/dist/dashboard/assets/switch-DmZcyTIC.js.gz +0 -0
- package/dist/dashboard/assets/{useMutation-m8WGNPrz.js → useMutation-CbCP4w1o.js} +1 -1
- package/dist/dashboard/assets/useMutation-CbCP4w1o.js.gz +0 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/dashboard/index.html.gz +0 -0
- package/dist/dashboard/precompressed-assets.json +57 -57
- package/migrations/full-postgres/0042_add_telemetry_degenerate_stop.sql +14 -0
- package/migrations/full-postgres/0043_add_provider_custom_user_agent.sql +14 -0
- package/migrations/lite-sqlite3/0042_add_telemetry_degenerate_stop.sql +12 -0
- package/migrations/lite-sqlite3/0043_add_provider_custom_user_agent.sql +10 -0
- package/package.json +3 -1
- package/src/boot/dependencies.ts +10 -2
- package/src/config/providers.ts +13 -7
- package/src/config/security.ts +1 -1
- package/src/config/spec.ts +31 -17
- package/src/config/usage.ts +27 -0
- package/src/console/api-keys/routes.ts +19 -23
- package/src/console/cli-tools/cartethyia-websearch-plugin.ts +186 -0
- package/src/console/cli-tools/contracts.ts +39 -295
- package/src/console/cli-tools/fs-ops.ts +29 -0
- package/src/console/cli-tools/injectors/claude.ts +3 -3
- package/src/console/cli-tools/injectors/codex.ts +6 -6
- package/src/console/cli-tools/injectors/driver.ts +8 -105
- package/src/console/cli-tools/injectors/kilo.ts +146 -21
- package/src/console/cli-tools/injectors/opencode.ts +68 -17
- package/src/console/cli-tools/routes.ts +6 -0
- package/src/console/cli-tools/service.ts +7 -6
- package/src/console/observability/contracts.ts +6 -0
- package/src/console/observability/store.ts +3 -0
- package/src/console/providers/catalog/contracts.ts +4 -0
- package/src/console/providers/catalog/routes.ts +1 -0
- package/src/console/providers/detail/routes.ts +8 -0
- package/src/console/providers/detail/store.ts +4 -0
- package/src/console/quota/account-quota-tenant.ts +74 -0
- package/src/console/share/share-stats.ts +7 -9
- package/src/observability/event-log.ts +7 -0
- package/src/observability/event-query.ts +2 -0
- package/src/observability/telemetry-buffer.ts +9 -1
- package/src/persistence/boot.ts +13 -4
- package/src/persistence/schema.ts +15 -1
- package/src/persistence/stores/api-key-store.ts +19 -1
- package/src/protocol/canonical-model.ts +7 -0
- package/src/protocol/dsml.ts +5 -76
- package/src/protocol/request/gemini.ts +20 -1
- package/src/protocol/tool-identity.ts +15 -1
- package/src/providers/adapters/compatible-adapter.ts +29 -1
- package/src/providers/default-registry.ts +20 -4
- package/src/providers/discovery/discovery-types.ts +18 -0
- package/src/providers/discovery/probe-phases.ts +45 -0
- package/src/providers/discovery/probing-service.ts +41 -6
- package/src/providers/integrations/antigravity/antigravity-protocol.ts +108 -16
- package/src/providers/integrations/antigravity/antigravity-quota.ts +18 -6
- package/src/providers/integrations/antigravity/antigravity.ts +44 -11
- package/src/providers/integrations/codex/codex.ts +28 -1
- package/src/providers/integrations/cursor/cursor.ts +2 -3
- package/src/providers/integrations/github/github-discovery.ts +15 -2
- package/src/providers/integrations/github/github-oauth.ts +178 -9
- package/src/providers/integrations/github/github.ts +95 -14
- package/src/providers/integrations/kiro/kiro.ts +1 -2
- package/src/providers/integrations/qoder/chat-proto.ts +328 -0
- package/src/providers/integrations/qoder/claim-qoder-credits.ts +258 -0
- package/src/providers/integrations/qoder/qoder-adapter.ts +275 -0
- package/src/providers/integrations/qoder/qoder-auth.ts +201 -0
- package/src/providers/integrations/qoder/qoder-body.ts +78 -0
- package/src/providers/integrations/qoder/qoder-catalog.ts +14 -4
- package/src/providers/integrations/qoder/qoder-chat.ts +514 -0
- package/src/providers/integrations/qoder/qoder-cosy.ts +162 -0
- package/src/providers/integrations/qoder/qoder-grpc.ts +667 -0
- package/src/providers/integrations/qoder/qoder-ide.ts +584 -0
- package/src/providers/integrations/qoder/qoder-oauth.ts +4 -4
- package/src/providers/integrations/qoder/qoder-quota.ts +1 -1
- package/src/providers/integrations/qoder/qoder-realm.ts +40 -4
- package/src/providers/integrations/qoder/qoder-types.ts +51 -0
- package/src/providers/integrations/qoder/qoder-umid.ts +123 -8
- package/src/providers/integrations/qoder/qoder.ts +147 -1830
- package/src/providers/integrations/trae/trae.ts +2 -2
- package/src/providers/operations/account-error-classification.ts +67 -17
- package/src/providers/operations/byok-wire-profile.ts +19 -15
- package/src/providers/provider-contracts.ts +7 -0
- package/src/providers/provider-usage.ts +24 -55
- package/src/security/abuse.ts +5 -5
- package/src/security/admission/service.ts +11 -4
- package/src/security/api-key-auth.ts +5 -3
- package/src/transport/dispatch/attempt-finalize.ts +69 -21
- package/src/transport/dispatch/attempt-loop.ts +22 -0
- package/src/transport/dispatch/upstream.ts +4 -2
- package/src/transport/failure-policy.ts +15 -1
- package/src/transport/guards/error-lifecycle.ts +4 -0
- package/src/transport/request/state.ts +6 -0
- package/src/transport/routing/route-catalog.ts +8 -0
- package/src/transport/routing/route-model.ts +4 -0
- package/src/transport/routing/router.ts +8 -110
- package/src/transport/surface/reasoning-summary.ts +9 -14
- package/src/transport/vision-handoff.ts +83 -28
- package/dist/dashboard/assets/BannedPage-Cj15GsMp.js +0 -1
- package/dist/dashboard/assets/BannedPage-Cj15GsMp.js.gz +0 -0
- package/dist/dashboard/assets/ClaimGiftsButton-D83pBJ6J.js +0 -1
- package/dist/dashboard/assets/ClaimGiftsButton-D83pBJ6J.js.gz +0 -0
- package/dist/dashboard/assets/CliToolDetailPage-DZKmVuJN.js +0 -1
- package/dist/dashboard/assets/CliToolDetailPage-DZKmVuJN.js.gz +0 -0
- package/dist/dashboard/assets/CliToolsPage-BIccZmeL.js +0 -1
- package/dist/dashboard/assets/CliToolsPage-BIccZmeL.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-DEEKkYD-.js +0 -1
- package/dist/dashboard/assets/CombosPage-DEEKkYD-.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-D5rol2j2.js.gz +0 -0
- package/dist/dashboard/assets/CustomizationPage-BKj_r0rp.js.gz +0 -0
- package/dist/dashboard/assets/InjectSystemPromptPanel-B5nZvmf0.js.gz +0 -0
- package/dist/dashboard/assets/LoginPage-DkXb6dx-.js +0 -1
- package/dist/dashboard/assets/LoginPage-DkXb6dx-.js.gz +0 -0
- package/dist/dashboard/assets/ModelPicker-DnQPSIA8.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-Ci2wQKUz.js +0 -1
- package/dist/dashboard/assets/OverviewPage-Ci2wQKUz.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-odlgYrOg.js +0 -5
- package/dist/dashboard/assets/ProviderDetailPage-odlgYrOg.js.gz +0 -0
- package/dist/dashboard/assets/ProviderIcon-EfeloBn4.js +0 -1
- package/dist/dashboard/assets/ProviderIcon-EfeloBn4.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-CqFBQEB8.js +0 -1
- package/dist/dashboard/assets/ProvidersPage-CqFBQEB8.js.gz +0 -0
- package/dist/dashboard/assets/ProxyPage-5SnUSy3j.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-CmnMDzhP.js +0 -1
- package/dist/dashboard/assets/QuotaPage-CmnMDzhP.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-BJtRZ4qD.js.gz +0 -0
- package/dist/dashboard/assets/SetupPage-WTa0sktC.js +0 -1
- package/dist/dashboard/assets/SetupPage-WTa0sktC.js.gz +0 -0
- package/dist/dashboard/assets/StudioPage-BfAb5-o_.js.gz +0 -0
- package/dist/dashboard/assets/ToolIcon-K1ckcDKg.js +0 -1
- package/dist/dashboard/assets/ToolIcon-K1ckcDKg.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-BNzeZ2Vk.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-l29JROPv.js +0 -1
- package/dist/dashboard/assets/api-keys-l29JROPv.js.gz +0 -0
- package/dist/dashboard/assets/app--PJWq8_C.css +0 -2
- package/dist/dashboard/assets/app--PJWq8_C.css.gz +0 -0
- package/dist/dashboard/assets/app-Bgd3zANQ.js +0 -9
- package/dist/dashboard/assets/app-Bgd3zANQ.js.gz +0 -0
- package/dist/dashboard/assets/assert-C0K-c4eo.js.gz +0 -0
- package/dist/dashboard/assets/badge-DfbhQU4k.js.gz +0 -0
- package/dist/dashboard/assets/banner-BllT4LcF.js.gz +0 -0
- package/dist/dashboard/assets/card-CtkX66Wd.js.gz +0 -0
- package/dist/dashboard/assets/cli-tools-CQXVMn4P.js.gz +0 -0
- package/dist/dashboard/assets/clipboard-button-BQqBQd2n.js.gz +0 -0
- package/dist/dashboard/assets/dialog-BEK7KP0H.js +0 -1
- package/dist/dashboard/assets/dialog-BEK7KP0H.js.gz +0 -0
- package/dist/dashboard/assets/drawer-BrTEZ8zu.js.gz +0 -0
- package/dist/dashboard/assets/entry-CHWxbS56.js +0 -1
- package/dist/dashboard/assets/entry-CHWxbS56.js.gz +0 -0
- package/dist/dashboard/assets/entry-EBHJ3DrE.js +0 -1
- package/dist/dashboard/assets/entry-EBHJ3DrE.js.gz +0 -0
- package/dist/dashboard/assets/entry-LCS85hiq.js +0 -4
- package/dist/dashboard/assets/entry-LCS85hiq.js.gz +0 -0
- package/dist/dashboard/assets/formatters-BAACA727.js +0 -1
- package/dist/dashboard/assets/formatters-BAACA727.js.gz +0 -0
- package/dist/dashboard/assets/github-badge-YSCE4UC2.js +0 -1
- package/dist/dashboard/assets/github-badge-YSCE4UC2.js.gz +0 -0
- package/dist/dashboard/assets/index-FQlj0HUT.js.gz +0 -0
- package/dist/dashboard/assets/inline-C4gU5iOL.js.gz +0 -0
- package/dist/dashboard/assets/input-BHHX_Tmm.js.gz +0 -0
- package/dist/dashboard/assets/layout-CajrYUnD.js.gz +0 -0
- package/dist/dashboard/assets/list-row-Bx2I7XUe.js.gz +0 -0
- package/dist/dashboard/assets/live-DNNqRbj2.js.gz +0 -0
- package/dist/dashboard/assets/mutation-Rr0TIvcj.js.gz +0 -0
- package/dist/dashboard/assets/network-C5UBACrJ.js.gz +0 -0
- package/dist/dashboard/assets/numbers-CUWAZK4J.js +0 -2
- package/dist/dashboard/assets/numbers-CUWAZK4J.js.gz +0 -0
- package/dist/dashboard/assets/pagination-Xsi9Qx04.js.gz +0 -0
- package/dist/dashboard/assets/providers/zai-coding-plan.svg +0 -6
- package/dist/dashboard/assets/providers/zai-coding-plan.svg.gz +0 -0
- package/dist/dashboard/assets/quota-DvQbD_sr.js +0 -1
- package/dist/dashboard/assets/quota-DvQbD_sr.js.gz +0 -0
- package/dist/dashboard/assets/routing-in0f_IfK.js.gz +0 -0
- package/dist/dashboard/assets/select-BLULNqTp.js.gz +0 -0
- package/dist/dashboard/assets/settings-CcGczj6I.js.gz +0 -0
- package/dist/dashboard/assets/stack-D2lIR0tg.js.gz +0 -0
- package/dist/dashboard/assets/state-DTARjfiW.js.gz +0 -0
- package/dist/dashboard/assets/switch-c0oPSnqW.js.gz +0 -0
- package/dist/dashboard/assets/useMutation-m8WGNPrz.js.gz +0 -0
- package/src/console/cli-tools/injectors/cline.ts +0 -110
- package/src/console/cli-tools/injectors/copilot.ts +0 -108
- package/src/console/cli-tools/injectors/cowork.ts +0 -64
- package/src/console/cli-tools/injectors/deepseek-tui.ts +0 -85
- package/src/console/cli-tools/injectors/droid.ts +0 -96
- package/src/console/cli-tools/injectors/grok-build.ts +0 -70
- package/src/console/cli-tools/injectors/hermes.ts +0 -101
- package/src/console/cli-tools/injectors/jcode.ts +0 -115
- package/src/console/cli-tools/injectors/openclaw.ts +0 -161
- package/src/providers/integrations/qoder/qoder-text-tools.ts +0 -277
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Recovery for Qoder's INTL text-mode tool-call echo.
|
|
3
|
-
*
|
|
4
|
-
* Qoder's own wire is structured `tool_calls` deltas, but the DeepSeek model
|
|
5
|
-
* sometimes *also* writes a tool call as prose with the marker:
|
|
6
|
-
*
|
|
7
|
-
* assistant 请求调用工具
|
|
8
|
-
* {"name":"write","arguments":"…"},{"name":"write","arguments":"…"}
|
|
9
|
-
*
|
|
10
|
-
* Left alone the JSON reaches the caller as visible content while nothing runs.
|
|
11
|
-
* This module owns the single tolerant parser for that echo family (JSON
|
|
12
|
-
* array/object, bare comma-separated list, unescaped inner quotes). It does
|
|
13
|
-
* NOT parse DSML/XML markup — that family is gone; only the marker+JSON echo
|
|
14
|
-
* the model actually emits is recovered here.
|
|
15
|
-
*/
|
|
16
|
-
import { randomUUID } from "node:crypto";
|
|
17
|
-
|
|
18
|
-
/** One recovered call, in the shape the canonical events want. */
|
|
19
|
-
export interface QoderEchoCall {
|
|
20
|
-
readonly id: string;
|
|
21
|
-
readonly name: string;
|
|
22
|
-
readonly arguments: string;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/** Any spelling of the INTL tool-call leak marker. */
|
|
26
|
-
export const LEAK_MARKER_ANY_RE = /[\[<(]*\s*assistant\s*请求调用工具\s*[\]>)]?/;
|
|
27
|
-
|
|
28
|
-
/** Canonical marker literals used to seed prefix matching. */
|
|
29
|
-
export const LEAK_MARKER_LITERALS: readonly string[] = [
|
|
30
|
-
"[assistant 请求调用工具]",
|
|
31
|
-
"<assistant 请求调用工具>",
|
|
32
|
-
"assistant 请求调用工具",
|
|
33
|
-
];
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Escapes literal control characters that occur inside JSON string values.
|
|
37
|
-
* DeepSeek often writes multi-line argument content as real newlines instead
|
|
38
|
-
* of `\n` escapes; only characters inside strings are escaped.
|
|
39
|
-
*/
|
|
40
|
-
function escapeControlInsideStrings(text: string): string {
|
|
41
|
-
let out = "";
|
|
42
|
-
let inString = false;
|
|
43
|
-
for (let i = 0; i < text.length; i += 1) {
|
|
44
|
-
const ch = text[i] ?? "";
|
|
45
|
-
if (inString) {
|
|
46
|
-
if (ch === "\\") {
|
|
47
|
-
out += ch;
|
|
48
|
-
i += 1;
|
|
49
|
-
if (i < text.length) out += text[i];
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
if (ch === '"') {
|
|
53
|
-
inString = false;
|
|
54
|
-
out += ch;
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
if (ch === "\n") {
|
|
58
|
-
out += "\\n";
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
if (ch === "\r") {
|
|
62
|
-
out += "\\r";
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
if (ch === "\t") {
|
|
66
|
-
out += "\\t";
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
if (ch.charCodeAt(0) < 0x20) {
|
|
70
|
-
out += "\\u" + ch.charCodeAt(0).toString(16).padStart(4, "0");
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
out += ch;
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
if (ch === '"') inString = true;
|
|
77
|
-
out += ch;
|
|
78
|
-
}
|
|
79
|
-
return out;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/** Escapes bare quotes that belong inside a JSON string value. */
|
|
83
|
-
function repairJsonQuotes(text: string): string {
|
|
84
|
-
const ph = "\u0000";
|
|
85
|
-
return text.replace(/\\"/g, ph).replace(/"/g, '\\"').replaceAll(ph, '\\"');
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Rebuilds the leaked echo when strict parsing fails: inner quotes unescaped
|
|
90
|
-
* (`[{"name":"read","arguments":"{"path":"a"}"},…]`) or a bare comma-separated
|
|
91
|
-
* object list. Scans top-level objects without relying on JSON validity.
|
|
92
|
-
* Returns null when the text is not that shape at all.
|
|
93
|
-
*/
|
|
94
|
-
function salvageEchoArray(rest: string): unknown {
|
|
95
|
-
const src = rest.trim();
|
|
96
|
-
if (src.length === 0) return null;
|
|
97
|
-
const calls: Array<{ name: string; arguments: string }> = [];
|
|
98
|
-
let i = 0;
|
|
99
|
-
const bracketed = src[0] === "[";
|
|
100
|
-
if (bracketed) i = 1;
|
|
101
|
-
const skipWs = (): void => {
|
|
102
|
-
while (
|
|
103
|
-
i < src.length &&
|
|
104
|
-
(src[i] === " " || src[i] === "\t" || src[i] === "\n" || src[i] === "\r")
|
|
105
|
-
) {
|
|
106
|
-
i += 1;
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
const NAME_RE = /"name"\s*:\s*"([^"]{1,200})"/y;
|
|
110
|
-
const ARG_KEY_RE = /"arguments"\s*:\s*"/y;
|
|
111
|
-
|
|
112
|
-
for (;;) {
|
|
113
|
-
skipWs();
|
|
114
|
-
if (i >= src.length) break;
|
|
115
|
-
if (bracketed && src[i] === "]") break;
|
|
116
|
-
if (src[i] !== "{") return null;
|
|
117
|
-
i += 1;
|
|
118
|
-
skipWs();
|
|
119
|
-
NAME_RE.lastIndex = i;
|
|
120
|
-
const nameMatch = NAME_RE.exec(src);
|
|
121
|
-
if (!nameMatch) return null;
|
|
122
|
-
const name = nameMatch[1] ?? "";
|
|
123
|
-
i = NAME_RE.lastIndex;
|
|
124
|
-
skipWs();
|
|
125
|
-
if (i < src.length && src[i] === ",") {
|
|
126
|
-
i += 1;
|
|
127
|
-
skipWs();
|
|
128
|
-
}
|
|
129
|
-
ARG_KEY_RE.lastIndex = i;
|
|
130
|
-
if (!ARG_KEY_RE.exec(src)) return null;
|
|
131
|
-
const argStart = ARG_KEY_RE.lastIndex;
|
|
132
|
-
let rawEnd = -1;
|
|
133
|
-
for (let j = argStart; j + 1 < src.length; j += 1) {
|
|
134
|
-
if (src[j] === "}" && src[j + 1] === '"') {
|
|
135
|
-
rawEnd = j;
|
|
136
|
-
break;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
if (rawEnd < 0) return null;
|
|
140
|
-
const raw = src.slice(argStart, rawEnd + 1);
|
|
141
|
-
const parsedArgs = [
|
|
142
|
-
raw,
|
|
143
|
-
escapeControlInsideStrings(raw),
|
|
144
|
-
repairJsonQuotes(raw),
|
|
145
|
-
escapeControlInsideStrings(repairJsonQuotes(raw)),
|
|
146
|
-
].find((candidate) => {
|
|
147
|
-
try {
|
|
148
|
-
JSON.parse(candidate);
|
|
149
|
-
return true;
|
|
150
|
-
} catch {
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
if (parsedArgs === undefined) return null;
|
|
155
|
-
calls.push({ name, arguments: parsedArgs });
|
|
156
|
-
i = rawEnd + 2;
|
|
157
|
-
skipWs();
|
|
158
|
-
if (i >= src.length || src[i] !== "}") return null;
|
|
159
|
-
i += 1;
|
|
160
|
-
skipWs();
|
|
161
|
-
if (i < src.length && src[i] === ",") {
|
|
162
|
-
i += 1;
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
if (i < src.length && bracketed && src[i] === "]") continue;
|
|
166
|
-
if (i < src.length) return null;
|
|
167
|
-
}
|
|
168
|
-
return calls.length > 0 ? calls : null;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* True when the text is clearly an attempted tool-protocol echo rather than
|
|
173
|
-
* ordinary prose: a leak marker followed by the start of a JSON array/object,
|
|
174
|
-
* or of a tool-style tag (`<tool_call>`, `<execute …/>`, angle-wrapped
|
|
175
|
-
* `<{…}>`). Used by the fail-closed decision: an echo that cannot be recovered
|
|
176
|
-
* fails the turn instead of surfacing protocol text as visible content.
|
|
177
|
-
*/
|
|
178
|
-
export function isQoderEchoAttempt(text: string): boolean {
|
|
179
|
-
const fence = text.match(/^```[a-z]*\s*\n?/i);
|
|
180
|
-
const src = fence && fence[0] ? text.slice(fence[0].length) : text;
|
|
181
|
-
const marker = LEAK_MARKER_ANY_RE.exec(src);
|
|
182
|
-
if (!marker) return false;
|
|
183
|
-
const rest = src.slice(marker.index + marker[0].length).trim();
|
|
184
|
-
return (
|
|
185
|
-
rest.startsWith("[") ||
|
|
186
|
-
rest.startsWith("{") ||
|
|
187
|
-
/^<[a-zA-Z0-9_.:-]+\b/.test(rest) ||
|
|
188
|
-
(rest.startsWith("<[") || rest.startsWith("<{"))
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Recovers tool calls the model echoed back as text. Only a well-formed echo
|
|
194
|
-
* whose every entry names a tool and carries parseable arguments is accepted;
|
|
195
|
-
* anything else returns no calls and the original text.
|
|
196
|
-
*/
|
|
197
|
-
export function parseQoderTextToolCalls(
|
|
198
|
-
text: string,
|
|
199
|
-
allowedNames?: ReadonlySet<string>,
|
|
200
|
-
): { calls: QoderEchoCall[]; clean: string } {
|
|
201
|
-
if (text.length === 0) {
|
|
202
|
-
return { calls: [], clean: text };
|
|
203
|
-
}
|
|
204
|
-
const fence = text.match(/^```[a-z]*\s*\n?/i);
|
|
205
|
-
const src = fence && fence[0] ? text.slice(fence[0].length) : text;
|
|
206
|
-
const marker = LEAK_MARKER_ANY_RE.exec(src);
|
|
207
|
-
if (!marker) {
|
|
208
|
-
return { calls: [], clean: text };
|
|
209
|
-
}
|
|
210
|
-
const head = src.slice(0, marker.index).trim();
|
|
211
|
-
let rest = src.slice(marker.index + marker[0].length).trim();
|
|
212
|
-
rest = rest.replace(/\s*```\s*$/, "").trim();
|
|
213
|
-
|
|
214
|
-
let parsed: unknown;
|
|
215
|
-
try {
|
|
216
|
-
parsed = JSON.parse(rest);
|
|
217
|
-
} catch {
|
|
218
|
-
try {
|
|
219
|
-
parsed = JSON.parse(escapeControlInsideStrings(rest));
|
|
220
|
-
} catch {
|
|
221
|
-
// A bare comma-separated object list (`{...},{...}`) is not valid JSON
|
|
222
|
-
// on its own, but is exactly the echo the model emits. Wrap it in an
|
|
223
|
-
// array before falling back to salvage.
|
|
224
|
-
let wrapped: unknown;
|
|
225
|
-
try {
|
|
226
|
-
wrapped = JSON.parse(`[${rest}]`);
|
|
227
|
-
} catch {
|
|
228
|
-
wrapped = undefined;
|
|
229
|
-
}
|
|
230
|
-
const salvaged = salvageEchoArray(rest);
|
|
231
|
-
if (salvaged === null && wrapped === undefined) {
|
|
232
|
-
return { calls: [], clean: text };
|
|
233
|
-
}
|
|
234
|
-
parsed = salvaged ?? wrapped;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
if (Array.isArray(parsed) && parsed.length === 0) return { calls: [], clean: text };
|
|
238
|
-
|
|
239
|
-
const items: unknown[] = Array.isArray(parsed) ? parsed : [parsed];
|
|
240
|
-
const calls: QoderEchoCall[] = [];
|
|
241
|
-
for (const item of items) {
|
|
242
|
-
if (typeof item !== "object" || item === null) return { calls: [], clean: text };
|
|
243
|
-
const rec = item as Record<string, unknown>;
|
|
244
|
-
const name = typeof rec["name"] === "string" ? rec["name"].trim() : "";
|
|
245
|
-
if (name.length === 0) return { calls: [], clean: text };
|
|
246
|
-
if (allowedNames && !allowedNames.has(name)) return { calls: [], clean: text };
|
|
247
|
-
const rawArgs = rec["arguments"];
|
|
248
|
-
let args: string;
|
|
249
|
-
if (typeof rawArgs === "object" && rawArgs !== null) args = JSON.stringify(rawArgs);
|
|
250
|
-
else if (typeof rawArgs === "string") args = rawArgs;
|
|
251
|
-
else return { calls: [], clean: text };
|
|
252
|
-
const argsText = args.trim();
|
|
253
|
-
if (argsText.length > 0) {
|
|
254
|
-
let accepted = argsText;
|
|
255
|
-
let ok = false;
|
|
256
|
-
try {
|
|
257
|
-
JSON.parse(accepted);
|
|
258
|
-
ok = true;
|
|
259
|
-
} catch {
|
|
260
|
-
// fall through to normalization
|
|
261
|
-
}
|
|
262
|
-
if (!ok) {
|
|
263
|
-
accepted = escapeControlInsideStrings(argsText);
|
|
264
|
-
try {
|
|
265
|
-
JSON.parse(accepted);
|
|
266
|
-
ok = true;
|
|
267
|
-
} catch {
|
|
268
|
-
// still invalid
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
if (!ok) return { calls: [], clean: text };
|
|
272
|
-
args = accepted;
|
|
273
|
-
}
|
|
274
|
-
calls.push({ id: `call_${randomUUID().replace(/-/g, "").slice(0, 16)}`, name, arguments: args });
|
|
275
|
-
}
|
|
276
|
-
return { calls, clean: head };
|
|
277
|
-
}
|