@jsonstudio/rcc 0.89.1205 → 0.89.1457
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/README.md +53 -1412
- package/configsamples/config.json +426 -0
- package/configsamples/config.reference.json +58 -0
- package/configsamples/provider/crs/config.v1.json +46 -0
- package/configsamples/provider/glm/config.v1.json +81 -0
- package/configsamples/provider/glm-anthropic/config.v1.json +45 -0
- package/configsamples/provider/iflow/config.v1.json +74 -0
- package/configsamples/provider/kimi/config.v1.json +41 -0
- package/configsamples/provider/lmstudio/config.v1.json +101 -0
- package/configsamples/provider/mimo/config.v1.json +35 -0
- package/configsamples/provider/modelscope/config.v1.json +96 -0
- package/configsamples/provider/qwen/config.v1.json +38 -0
- package/configsamples/provider/tab/config.v1.json +50 -0
- package/configsamples/provider/tabglm/config.v1.json +49 -0
- package/dist/build-info.js +2 -2
- package/dist/cli/commands/code.js +12 -6
- package/dist/cli/commands/code.js.map +1 -1
- package/dist/cli/commands/config.d.ts +2 -1
- package/dist/cli/commands/config.js +77 -103
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/examples.js +6 -6
- package/dist/cli/commands/examples.js.map +1 -1
- package/dist/cli/commands/init.d.ts +28 -0
- package/dist/cli/commands/init.js +94 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/port.js +10 -2
- package/dist/cli/commands/port.js.map +1 -1
- package/dist/cli/commands/restart.js +5 -2
- package/dist/cli/commands/restart.js.map +1 -1
- package/dist/cli/commands/start.js +25 -22
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.js +1 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/stop.js +1 -0
- package/dist/cli/commands/stop.js.map +1 -1
- package/dist/cli/config/bundled-docs.d.ts +20 -0
- package/dist/cli/config/bundled-docs.js +91 -0
- package/dist/cli/config/bundled-docs.js.map +1 -0
- package/dist/cli/config/init-config.d.ts +37 -0
- package/dist/cli/config/init-config.js +212 -0
- package/dist/cli/config/init-config.js.map +1 -0
- package/dist/cli/config/init-provider-catalog.d.ts +8 -0
- package/dist/cli/config/init-provider-catalog.js +187 -0
- package/dist/cli/config/init-provider-catalog.js.map +1 -0
- package/dist/cli/register/init-command.d.ts +3 -0
- package/dist/cli/register/init-command.js +5 -0
- package/dist/cli/register/init-command.js.map +1 -0
- package/dist/cli.js +28 -3
- package/dist/cli.js.map +1 -1
- package/dist/client/gemini/gemini-protocol-client.js +2 -1
- package/dist/client/gemini/gemini-protocol-client.js.map +1 -1
- package/dist/client/gemini-cli/gemini-cli-protocol-client.js +40 -16
- package/dist/client/gemini-cli/gemini-cli-protocol-client.js.map +1 -1
- package/dist/client/openai/chat-protocol-client.js +2 -1
- package/dist/client/openai/chat-protocol-client.js.map +1 -1
- package/dist/client/responses/responses-protocol-client.js +2 -1
- package/dist/client/responses/responses-protocol-client.js.map +1 -1
- package/dist/config/risk-control-config.d.ts +94 -0
- package/dist/config/risk-control-config.js +196 -0
- package/dist/config/risk-control-config.js.map +1 -0
- package/dist/constants/index.d.ts +6 -0
- package/dist/constants/index.js +13 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/docs/daemon-admin-ui.html +2113 -190
- package/dist/error-handling/quiet-error-handling-center.js +46 -8
- package/dist/error-handling/quiet-error-handling-center.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/manager/modules/health/index.d.ts +1 -1
- package/dist/manager/modules/quota/antigravity-quota-manager.d.ts +70 -0
- package/dist/manager/modules/quota/antigravity-quota-manager.js +442 -0
- package/dist/manager/modules/quota/antigravity-quota-manager.js.map +1 -0
- package/dist/manager/modules/quota/index.d.ts +3 -127
- package/dist/manager/modules/quota/index.js +2 -1093
- package/dist/manager/modules/quota/index.js.map +1 -1
- package/dist/manager/modules/quota/provider-key-normalization.d.ts +3 -0
- package/dist/manager/modules/quota/provider-key-normalization.js +155 -0
- package/dist/manager/modules/quota/provider-key-normalization.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.cooldown.d.ts +9 -0
- package/dist/manager/modules/quota/provider-quota-daemon.cooldown.js +115 -0
- package/dist/manager/modules/quota/provider-quota-daemon.cooldown.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.d.ts +77 -0
- package/dist/manager/modules/quota/provider-quota-daemon.events.d.ts +12 -0
- package/dist/manager/modules/quota/provider-quota-daemon.events.js +239 -0
- package/dist/manager/modules/quota/provider-quota-daemon.events.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.js +404 -0
- package/dist/manager/modules/quota/provider-quota-daemon.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.d.ts +11 -0
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js +192 -0
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.snapshot.d.ts +8 -0
- package/dist/manager/modules/quota/provider-quota-daemon.snapshot.js +96 -0
- package/dist/manager/modules/quota/provider-quota-daemon.snapshot.js.map +1 -0
- package/dist/manager/modules/quota/provider-quota-daemon.view.d.ts +19 -0
- package/dist/manager/modules/quota/provider-quota-daemon.view.js +37 -0
- package/dist/manager/modules/quota/provider-quota-daemon.view.js.map +1 -0
- package/dist/manager/modules/routing/index.d.ts +1 -0
- package/dist/manager/modules/routing/index.js +11 -25
- package/dist/manager/modules/routing/index.js.map +1 -1
- package/dist/manager/quota/provider-quota-center.d.ts +2 -0
- package/dist/manager/quota/provider-quota-center.js +80 -82
- package/dist/manager/quota/provider-quota-center.js.map +1 -1
- package/dist/modules/llmswitch/bridge.d.ts +16 -18
- package/dist/modules/llmswitch/bridge.js +293 -94
- package/dist/modules/llmswitch/bridge.js.map +1 -1
- package/dist/modules/llmswitch/core-loader.d.ts +4 -2
- package/dist/modules/llmswitch/core-loader.js +32 -20
- package/dist/modules/llmswitch/core-loader.js.map +1 -1
- package/dist/modules/pipeline/utils/colored-logger.js +3 -2
- package/dist/modules/pipeline/utils/colored-logger.js.map +1 -1
- package/dist/modules/pipeline/utils/debug-logger.js +1 -1
- package/dist/modules/pipeline/utils/debug-logger.js.map +1 -1
- package/dist/providers/auth/antigravity-userinfo-helper.d.ts +2 -1
- package/dist/providers/auth/antigravity-userinfo-helper.js +25 -4
- package/dist/providers/auth/antigravity-userinfo-helper.js.map +1 -1
- package/dist/providers/auth/iflow-cookie-auth.js +0 -2
- package/dist/providers/auth/iflow-cookie-auth.js.map +1 -1
- package/dist/providers/auth/oauth-lifecycle.js +2 -23
- package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
- package/dist/providers/auth/tokenfile-auth.d.ts +2 -0
- package/dist/providers/auth/tokenfile-auth.js +33 -1
- package/dist/providers/auth/tokenfile-auth.js.map +1 -1
- package/dist/providers/core/config/camoufox-launcher.d.ts +5 -0
- package/dist/providers/core/config/camoufox-launcher.js +40 -4
- package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
- package/dist/providers/core/config/service-profiles.js +7 -18
- package/dist/providers/core/config/service-profiles.js.map +1 -1
- package/dist/providers/core/runtime/antigravity-quota-client.js +6 -3
- package/dist/providers/core/runtime/antigravity-quota-client.js.map +1 -1
- package/dist/providers/core/runtime/base-provider.d.ts +2 -7
- package/dist/providers/core/runtime/base-provider.js +84 -165
- package/dist/providers/core/runtime/base-provider.js.map +1 -1
- package/dist/providers/core/runtime/gemini-cli-http-provider.d.ts +7 -0
- package/dist/providers/core/runtime/gemini-cli-http-provider.js +368 -97
- package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
- package/dist/providers/core/runtime/http-request-executor.d.ts +3 -0
- package/dist/providers/core/runtime/http-request-executor.js +110 -38
- package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
- package/dist/providers/core/runtime/http-transport-provider.d.ts +17 -0
- package/dist/providers/core/runtime/http-transport-provider.js +165 -16
- package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
- package/dist/providers/core/runtime/provider-error-classifier.js +10 -0
- package/dist/providers/core/runtime/provider-error-classifier.js.map +1 -1
- package/dist/providers/core/runtime/provider-factory.js +7 -5
- package/dist/providers/core/runtime/provider-factory.js.map +1 -1
- package/dist/providers/core/runtime/provider-runtime-metadata.d.ts +6 -0
- package/dist/providers/core/runtime/provider-runtime-metadata.js.map +1 -1
- package/dist/providers/core/runtime/rate-limit-manager.d.ts +1 -12
- package/dist/providers/core/runtime/rate-limit-manager.js +4 -77
- package/dist/providers/core/runtime/rate-limit-manager.js.map +1 -1
- package/dist/providers/core/runtime/responses-provider.d.ts +1 -7
- package/dist/providers/core/runtime/responses-provider.js +12 -93
- package/dist/providers/core/runtime/responses-provider.js.map +1 -1
- package/dist/providers/core/strategies/oauth-auth-code-flow.js +12 -8
- package/dist/providers/core/strategies/oauth-auth-code-flow.js.map +1 -1
- package/dist/providers/core/utils/http-client.js +36 -46
- package/dist/providers/core/utils/http-client.js.map +1 -1
- package/dist/providers/core/utils/provider-error-logger.d.ts +1 -1
- package/dist/providers/core/utils/provider-error-reporter.d.ts +3 -1
- package/dist/providers/core/utils/provider-error-reporter.js +3 -0
- package/dist/providers/core/utils/provider-error-reporter.js.map +1 -1
- package/dist/providers/core/utils/snapshot-writer.js +1 -4
- package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
- package/dist/providers/mock/mock-provider-runtime.js +57 -27
- package/dist/providers/mock/mock-provider-runtime.js.map +1 -1
- package/dist/scripts/camoufox/launch-auth.mjs +193 -58
- package/dist/server/handlers/handler-utils.js +8 -3
- package/dist/server/handlers/handler-utils.js.map +1 -1
- package/dist/server/handlers/responses-handler.js +1 -1
- package/dist/server/handlers/responses-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.d.ts +2 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.js +103 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.js.map +1 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-session.d.ts +5 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-session.js +77 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-session.js.map +1 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-store.d.ts +18 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-store.js +89 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-store.js.map +1 -0
- package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +1 -2
- package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +226 -24
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/quota-handler.js +47 -8
- package/dist/server/runtime/http-server/daemon-admin/quota-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/restart-handler.js +1 -1
- package/dist/server/runtime/http-server/daemon-admin/restart-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/stats-handler.js +1 -1
- package/dist/server/runtime/http-server/daemon-admin/stats-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/status-handler.js +68 -4
- package/dist/server/runtime/http-server/daemon-admin/status-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin-routes.d.ts +3 -4
- package/dist/server/runtime/http-server/daemon-admin-routes.js +9 -14
- package/dist/server/runtime/http-server/daemon-admin-routes.js.map +1 -1
- package/dist/server/runtime/http-server/executor-metadata.js +1 -1
- package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
- package/dist/server/runtime/http-server/executor-response.js +0 -16
- package/dist/server/runtime/http-server/executor-response.js.map +1 -1
- package/dist/server/runtime/http-server/hub-shadow-compare.js +110 -34
- package/dist/server/runtime/http-server/hub-shadow-compare.js.map +1 -1
- package/dist/server/runtime/http-server/index.d.ts +5 -3
- package/dist/server/runtime/http-server/index.js +281 -136
- package/dist/server/runtime/http-server/index.js.map +1 -1
- package/dist/server/runtime/http-server/middleware.js +19 -1
- package/dist/server/runtime/http-server/middleware.js.map +1 -1
- package/dist/server/runtime/http-server/request-executor.js +59 -24
- package/dist/server/runtime/http-server/request-executor.js.map +1 -1
- package/dist/server/runtime/http-server/routes.js +12 -3
- package/dist/server/runtime/http-server/routes.js.map +1 -1
- package/dist/server/runtime/http-server/session-dir.d.ts +2 -0
- package/dist/server/runtime/http-server/session-dir.js +59 -0
- package/dist/server/runtime/http-server/session-dir.js.map +1 -0
- package/dist/server/runtime/http-server/types.d.ts +0 -4
- package/dist/server/utils/utf8-chunk-buffer.js +6 -3
- package/dist/server/utils/utf8-chunk-buffer.js.map +1 -1
- package/dist/server/utils/warmup-storm-tracker.js +1 -1
- package/dist/server/utils/warmup-storm-tracker.js.map +1 -1
- package/dist/server-factory.d.ts +6 -28
- package/dist/server-factory.js +8 -93
- package/dist/server-factory.js.map +1 -1
- package/dist/token-daemon/index.js +2 -2
- package/dist/token-daemon/index.js.map +1 -1
- package/dist/token-daemon/provider-registry.js +0 -1
- package/dist/token-daemon/provider-registry.js.map +1 -1
- package/dist/token-daemon/server-utils.js +8 -9
- package/dist/token-daemon/server-utils.js.map +1 -1
- package/dist/token-daemon/token-utils.js +1 -1
- package/dist/token-daemon/token-utils.js.map +1 -1
- package/dist/tools/semantic-replay.js +2 -2
- package/dist/tools/semantic-replay.js.map +1 -1
- package/dist/tools/stats-request-events.d.ts +1 -1
- package/dist/tools/stats-usage.js +6 -3
- package/dist/tools/stats-usage.js.map +1 -1
- package/dist/utils/llms-engine-shadow.d.ts +19 -0
- package/dist/utils/llms-engine-shadow.js +209 -0
- package/dist/utils/llms-engine-shadow.js.map +1 -0
- package/dist/utils/runtime-versions.js +2 -1
- package/dist/utils/runtime-versions.js.map +1 -1
- package/dist/utils/strip-internal-keys.d.ts +12 -0
- package/dist/utils/strip-internal-keys.js +28 -0
- package/dist/utils/strip-internal-keys.js.map +1 -0
- package/docs/ARCHITECTURE.md +402 -0
- package/docs/CHAT_PROCESS_PROTOCOL_AND_PIPELINE.md +221 -0
- package/docs/CODEX_AND_CLAUDE_CODE.md +69 -0
- package/docs/CONFIG_ARCHITECTURE.md +517 -0
- package/docs/ERROR_HANDLING_AUDIT.md +0 -0
- package/docs/GCLI2API_PARITY_GAPS.md +98 -0
- package/docs/INSTALLATION_AND_QUICKSTART.md +74 -0
- package/docs/INSTRUCTION_MARKUP.md +89 -0
- package/docs/MODULE_ENHANCEMENT_SYSTEM.md +666 -0
- package/docs/PORTS.md +36 -0
- package/docs/PROVIDERS_BUILTIN.md +111 -0
- package/docs/PROVIDER_TYPES.md +55 -0
- package/docs/SERVERTOOL_CLOCK_DESIGN.md +233 -0
- package/docs/USAGE_HANDLING_ANALYSIS.md +335 -0
- package/docs/USER_CONFIG_PARSER_CHANGES.md +175 -0
- package/docs/V3_INBOUND_OUTBOUND_DESIGN.md +86 -0
- package/docs/VIRTUAL_ROUTER_PRIORITY_AND_HEALTH.md +125 -0
- package/docs/anthropic-request-golden-samples.md +50 -0
- package/docs/antigravity-gemini-format-cleanup.md +102 -0
- package/docs/antigravity-routing-contract.md +31 -0
- package/docs/ccr-alignment-enhancetool.md +105 -0
- package/docs/chat-glm-500-analysis.md +79 -0
- package/docs/chat-request-golden-samples.md +42 -0
- package/docs/chat-semantic-expansion-plan.md +84 -0
- package/docs/cli-command-inventory.md +76 -0
- package/docs/codex-samples-replay.md +50 -0
- package/docs/daemon-admin-api-design.md +350 -0
- package/docs/daemon-admin-module-structure.md +169 -0
- package/docs/daemon-admin-ui.html +3394 -0
- package/docs/debug-system-design.md +734 -0
- package/docs/debugging/gemini-sse-root-cause.md +52 -0
- package/docs/debugging/sse_encoding_failure_analysis.md +53 -0
- package/docs/dry-run/README.md +721 -0
- package/docs/error-handling-v2.md +92 -0
- package/docs/exec-command-guard-policy.example.v1.json +42 -0
- package/docs/fixes/gemini-protocol-mapping.md +57 -0
- package/docs/fixes/oauth-portal-timing-fix.md +202 -0
- package/docs/fixes/web-search-hop3-fix.md +265 -0
- package/docs/glm-api-reference.md +390 -0
- package/docs/glm-chat-completions.md +1779 -0
- package/docs/glm-history-inline-images.md +44 -0
- package/docs/golden-ci-library.md +66 -0
- package/docs/lmstudio-dry-run-summary.md +203 -0
- package/docs/lmstudio-tool-calling.md +214 -0
- package/docs/mapping-tables/anthropic-to-openai.json +290 -0
- package/docs/mapping-tables/iflow-to-openai.json +215 -0
- package/docs/mapping-tables/openai-passthrough.json +190 -0
- package/docs/mapping-tables/openai-to-iflow.json +227 -0
- package/docs/monitoring/Design.md +61 -0
- package/docs/multi-token-auth-guide.md +66 -0
- package/docs/oauth-authentication-guide.md +168 -0
- package/docs/oauth-iflow-implementation.md +153 -0
- package/docs/pipeline-routing-report.md +209 -0
- package/docs/plans/manager-daemon/PLAN.md +86 -0
- package/docs/plans/provider-config-v2-plan.md +176 -0
- package/docs/plans/provider-runtime-manager-plan.md +209 -0
- package/docs/plans/transparent-429-failover.md +89 -0
- package/docs/plans/unified-hub-framework-v1.md +245 -0
- package/docs/provider-config-v2-ui-design.md +181 -0
- package/docs/provider-quota-design.md +129 -0
- package/docs/providers/gemini-provider.md +62 -0
- package/docs/providers/lmstudio-v2-migration-report.md +102 -0
- package/docs/providers/provider-composite-design.md +142 -0
- package/docs/providers/provider-composite-testing.md +98 -0
- package/docs/providers/provider-type-only-migration.md +111 -0
- package/docs/rccx-wasm-migration.md +74 -0
- package/docs/refactoring/architecture-comparison-diagram.md +140 -0
- package/docs/refactoring/compatibility-v2-architecture-design.md +738 -0
- package/docs/refactoring/workflow-compatibility-refactoring-design.md +361 -0
- package/docs/reports/routing-classification-report.json +24 -0
- package/docs/reports/routing-classification-report.md +18 -0
- package/docs/reports/thinking-keywords-report.json +19 -0
- package/docs/responses/README.md +156 -0
- package/docs/responses-generic-provider.md +86 -0
- package/docs/responses-passthrough-provider-design.md +202 -0
- package/docs/routing-awrr-health-weighted-round-robin.md +179 -0
- package/docs/routing-instructions.md +393 -0
- package/docs/servertool-framework.md +65 -0
- package/docs/stop-message-auto.md +225 -0
- package/docs/streaming-flow.html +30 -0
- package/docs/streaming-flow.md +182 -0
- package/docs/token-daemon-preview.html +490 -0
- package/docs/token-refresh-daemon-plan.md +269 -0
- package/docs/transformation-tables/Gemini-FinishReason/345/256/214/346/225/264/350/275/254/346/215/242/350/241/250.json +233 -0
- package/docs/transformation-tables/README.md +225 -0
- package/docs/transformation-tables/claude-code-router-anthropic-to-gemini.json +283 -0
- package/docs/transformation-tables/claude-code-router-anthropic-to-openai.json +208 -0
- package/docs/transformation-tables/claude-code-router-openai-to-anthropic.json +261 -0
- package/docs/transformation-tables/claude-code-router-openai-to-gemini.json +208 -0
- package/docs/transformation-tables/claude-code-router-openai-to-lmstudio.json +182 -0
- package/docs/transformation-tables/claude-code-router-openai-to-ollama.json +250 -0
- package/docs/transformation-tables/claude-code-router-openai-to-textgenwebui.json +295 -0
- package/docs/transformation-tables/claude-code-router-provider-conversions.json +193 -0
- package/docs/transformation-tables//345/256/214/346/225/264/347/232/204/345/267/245/345/205/267/346/211/247/350/241/214/346/265/201/347/250/213/350/275/254/346/215/242/350/241/250.json +299 -0
- package/docs/transformation-tables//345/257/271/350/257/235/345/216/206/345/217/262/347/273/264/346/212/244/345/210/206/346/236/220.md +134 -0
- package/docs/transformation-tables//345/267/245/345/205/267/350/260/203/347/224/250/346/250/241/345/274/217/345/210/206/346/236/220.md +158 -0
- package/docs/transformation-tables//347/212/266/346/200/201/347/256/241/347/220/206/351/234/200/346/261/202/345/210/206/346/236/220.md +175 -0
- package/docs/transformation-tables//351/235/231/346/200/201/350/241/250vs/345/212/250/346/200/201/345/210/206/346/236/220.md +189 -0
- package/docs/transformation-tables//351/235/231/346/200/201/350/241/250/345/207/206/347/241/256/346/200/247/350/257/204/344/274/260.md +179 -0
- package/docs/transformation-tables//351/235/236/346/265/201/345/274/217/345/234/272/346/231/257/345/210/206/346/236/220.md +189 -0
- package/docs/v2-architecture/IMPLEMENTATION-ROADMAP.md +367 -0
- package/docs/v2-architecture/OPTIMIZED-DESIGN.md +827 -0
- package/docs/v2-architecture/PRERUN-CONNECTION-DESIGN.md +716 -0
- package/docs/v2-architecture/README.md +549 -0
- package/docs/verification/modelscope-verify.md +59 -0
- package/docs/verified-configs/README.md +60 -0
- package/docs/verified-configs/v0.45.0/README.md +244 -0
- package/docs/verified-configs/v0.45.0/lmstudio-5521-gpt-oss-20b-mlx.json +135 -0
- package/docs/verified-configs/v0.45.0/merged-config.5521.json +1205 -0
- package/docs/verified-configs/v0.45.0/merged-config.qwen-5522.json +1559 -0
- package/docs/verified-configs/v0.45.0/qwen-5522-qwen3-coder-plus-final.json +221 -0
- package/docs/verified-configs/v0.45.0/qwen-5522-qwen3-coder-plus-fixed.json +242 -0
- package/docs/verified-configs/v0.45.0/qwen-5522-qwen3-coder-plus.json +242 -0
- package/docs/web-search-service-design.md +322 -0
- package/package.json +26 -15
- package/scripts/build-core.mjs +3 -1
- package/scripts/camoufox/launch-auth.mjs +193 -58
- package/scripts/ci/repo-sanity.mjs +138 -0
- package/scripts/mock-provider/run-regressions.mjs +157 -1
- package/scripts/monitor-diff.mjs +126 -0
- package/scripts/pack-mode.mjs +19 -1
- package/scripts/pack-rcc.mjs +63 -0
- package/scripts/run-bg.sh +0 -14
- package/scripts/tests/ci-jest.mjs +119 -0
- package/scripts/tools-dev/responses-debug-client/README.md +23 -0
- package/scripts/tools-dev/responses-debug-client/payloads/poem.json +13 -0
- package/scripts/tools-dev/responses-debug-client/payloads/sample-no-tools.json +98 -0
- package/scripts/tools-dev/responses-debug-client/payloads/text.json +13 -0
- package/scripts/tools-dev/responses-debug-client/payloads/tool.json +27 -0
- package/scripts/tools-dev/responses-debug-client/run.mjs +65 -0
- package/scripts/tools-dev/responses-debug-client/src/index.ts +281 -0
- package/scripts/tools-dev/run-llmswitch-chat.mjs +53 -0
- package/scripts/tools-dev/server-tools-dev/run-web-fetch.mjs +65 -0
- package/scripts/unified-hub-shadow-compare.mjs +33 -13
- package/scripts/vendor-core.mjs +13 -3
- package/scripts/verify-e2e-toolcall.mjs +115 -26
- package/dist/modules/llmswitch/pipeline-registry.d.ts +0 -57
- package/dist/modules/llmswitch/pipeline-registry.js +0 -229
- package/dist/modules/llmswitch/pipeline-registry.js.map +0 -1
- package/dist/server/RouteCodexServer.d.ts +0 -13
- package/dist/server/RouteCodexServer.js +0 -25
- package/dist/server/RouteCodexServer.js.map +0 -1
- package/dist/v2/conversion/hub/snapshot-recorder.d.ts +0 -12
- package/dist/v2/conversion/hub/snapshot-recorder.js +0 -22
- package/dist/v2/conversion/hub/snapshot-recorder.js.map +0 -1
- package/scripts/test-fc-responses.mjs +0 -66
- package/scripts/test-guidance.mjs +0 -100
- package/scripts/test-iflow-web-search.mjs +0 -141
- package/scripts/test-iflow.mjs +0 -379
- package/scripts/test-tool-exec.mjs +0 -26
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# 重新分析:为什么claude-code-router需要状态管理?
|
|
2
|
+
|
|
3
|
+
## 核心误解澄清
|
|
4
|
+
|
|
5
|
+
您说得对!传统情况下,API调用确实是req/response的单次调用。但claude-code-router的特殊性在于:
|
|
6
|
+
|
|
7
|
+
## 状态管理的真实原因
|
|
8
|
+
|
|
9
|
+
### 1. **流式响应的内部状态** (主要原因)
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// 问题:单个HTTP请求内需要维护跨多个SSE事件的状态
|
|
13
|
+
let currentAgent: undefined | IAgent;
|
|
14
|
+
let currentToolIndex = -1;
|
|
15
|
+
let currentToolName = '';
|
|
16
|
+
let currentToolArgs = '';
|
|
17
|
+
let currentToolId = '';
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**为什么需要状态?**
|
|
21
|
+
- **工具调用是分片的**:一个工具调用被分成多个SSE事件
|
|
22
|
+
- `content_block_start` → 工具开始
|
|
23
|
+
- `content_block_delta` → 参数逐步传输
|
|
24
|
+
- `content_block_stop` → 工具结束
|
|
25
|
+
- **需要跨事件组合数据**:参数在多个delta事件中逐步传输
|
|
26
|
+
- **需要识别同一个工具调用**:通过index和ID关联
|
|
27
|
+
|
|
28
|
+
### 2. **工具调用的生命周期管理**
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
// 单个请求内的工具调用生命周期
|
|
32
|
+
事件1: content_block_start (工具开始)
|
|
33
|
+
→ 设置 currentToolName, currentToolId
|
|
34
|
+
事件2-N: content_block_delta (参数传输)
|
|
35
|
+
→ 累积 currentToolArgs
|
|
36
|
+
事件N+1: content_block_stop (工具结束)
|
|
37
|
+
→ 执行工具调用
|
|
38
|
+
→ 清理状态
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 3. **图像缓存的请求级状态**
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
// 图像缓存基于请求ID
|
|
45
|
+
imageCache.storeImage(`${req.id}_Image#${imgId}`, msg.source);
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**为什么需要状态?**
|
|
49
|
+
- **图像替换策略**:将图像内容替换为占位符
|
|
50
|
+
- **缓存键管理**:确保同一请求内的图像引用正确
|
|
51
|
+
- **工具调用时的图像检索**:analyzeImage工具需要访问缓存的图像
|
|
52
|
+
|
|
53
|
+
### 4. **递归调用的上下文传递**
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
// 工具调用后递归调用同一API
|
|
57
|
+
const response = await fetch(`http://127.0.0.1:${config.PORT}/v1/messages`, {
|
|
58
|
+
method: "POST",
|
|
59
|
+
body: JSON.stringify(req.body), // 修改后的请求体
|
|
60
|
+
})
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**为什么需要状态?**
|
|
64
|
+
- **消息历史管理**:需要将工具调用结果添加到消息历史
|
|
65
|
+
- **上下文维护**:确保递归调用时上下文连续性
|
|
66
|
+
|
|
67
|
+
## 重新评估:静态表 vs 动态处理
|
|
68
|
+
|
|
69
|
+
### 修正后的分析
|
|
70
|
+
|
|
71
|
+
#### 静态表能解决的(提升到60-70%):
|
|
72
|
+
|
|
73
|
+
1. **基础协议转换** ✅
|
|
74
|
+
- 模型映射
|
|
75
|
+
- 参数转换
|
|
76
|
+
- 消息结构转换
|
|
77
|
+
|
|
78
|
+
2. **工具定义转换** ✅
|
|
79
|
+
- 工具schema转换
|
|
80
|
+
- 参数格式转换
|
|
81
|
+
|
|
82
|
+
3. **错误码映射** ✅
|
|
83
|
+
- 标准错误响应转换
|
|
84
|
+
|
|
85
|
+
#### 静态表不能解决的(降低到30-40%):
|
|
86
|
+
|
|
87
|
+
1. **流式响应协调** (15%)
|
|
88
|
+
- 跨事件状态管理
|
|
89
|
+
- 工具调用生命周期
|
|
90
|
+
|
|
91
|
+
2. **图像处理逻辑** (10%)
|
|
92
|
+
- 动态缓存管理
|
|
93
|
+
- 图像ID生成
|
|
94
|
+
|
|
95
|
+
3. **递归调用处理** (5%)
|
|
96
|
+
- 消息历史更新
|
|
97
|
+
- 上下文维护
|
|
98
|
+
|
|
99
|
+
## 关键洞察
|
|
100
|
+
|
|
101
|
+
### 您是对的:单次HTTP请求
|
|
102
|
+
|
|
103
|
+
从网络层面看,确实是:
|
|
104
|
+
```
|
|
105
|
+
客户端 → HTTP请求 → Claude Code Router → LLM Provider
|
|
106
|
+
← HTTP响应 ←
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 但是:内部有复杂的状态机
|
|
110
|
+
|
|
111
|
+
在单个HTTP请求内部,Claude Code Router需要:
|
|
112
|
+
```
|
|
113
|
+
HTTP请求进入 → 解析流 → 维护状态 → 处理工具调用 → 递归调用 → 生成响应
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 优化建议
|
|
117
|
+
|
|
118
|
+
### 1. 分离关注点
|
|
119
|
+
```typescript
|
|
120
|
+
// 静态部分:可以用查表解决
|
|
121
|
+
class StaticTransformer {
|
|
122
|
+
transformModel(model: string): string
|
|
123
|
+
transformParameters(params: any): any
|
|
124
|
+
transformToolSchema(schema: any): any
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// 动态部分:需要状态管理
|
|
128
|
+
class StreamProcessor {
|
|
129
|
+
private state: StreamState
|
|
130
|
+
processStreamEvent(event: SSEEvent): ProcessedEvent
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 2. 状态机标准化
|
|
135
|
+
```typescript
|
|
136
|
+
interface StreamState {
|
|
137
|
+
currentTool?: {
|
|
138
|
+
id: string;
|
|
139
|
+
name: string;
|
|
140
|
+
args: string;
|
|
141
|
+
index: number;
|
|
142
|
+
};
|
|
143
|
+
imageCache: Map<string, any>;
|
|
144
|
+
messageHistory: any[];
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### 3. 可配置的状态转换规则
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"streamProcessing": {
|
|
152
|
+
"toolCallLifecycle": {
|
|
153
|
+
"startEvent": "content_block_start",
|
|
154
|
+
"deltaEvent": "content_block_delta",
|
|
155
|
+
"stopEvent": "content_block_stop",
|
|
156
|
+
"stateFields": {
|
|
157
|
+
"id": "data.content_block.id",
|
|
158
|
+
"name": "data.content_block.name",
|
|
159
|
+
"args": "data.delta.partial_json"
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## 结论
|
|
167
|
+
|
|
168
|
+
您的观察是准确的:**从网络层面看,确实是单次req/response调用**。
|
|
169
|
+
|
|
170
|
+
但状态管理的需求来自于:
|
|
171
|
+
1. **流式响应的内部处理**(主要)
|
|
172
|
+
2. **工具调用的生命周期管理**(次要)
|
|
173
|
+
3. **图像缓存和递归调用**(辅助)
|
|
174
|
+
|
|
175
|
+
**修正后的评估**:静态表能解决60-70%的问题,主要是基础协议转换;剩下的30-40%需要动态处理,主要是流式响应协调。
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# 静态表 vs 动态字段翻译分析报告
|
|
2
|
+
|
|
3
|
+
## 问题分析
|
|
4
|
+
|
|
5
|
+
基于对claude-code-router的深入分析,我需要回答:**静态表查表能否解决它动态字段翻译的行为?**
|
|
6
|
+
|
|
7
|
+
## 答案:部分能,但不能完全解决
|
|
8
|
+
|
|
9
|
+
### 静态表能解决的问题
|
|
10
|
+
|
|
11
|
+
#### 1. 基础协议转换
|
|
12
|
+
```json
|
|
13
|
+
// ✅ 静态表可以处理
|
|
14
|
+
{
|
|
15
|
+
"model": {
|
|
16
|
+
"claude-3-5-sonnet-20241022": "gpt-4o",
|
|
17
|
+
"claude-3-5-haiku-20241022": "gpt-4o-mini"
|
|
18
|
+
},
|
|
19
|
+
"max_tokens": {
|
|
20
|
+
"sourcePath": "max_tokens",
|
|
21
|
+
"targetPath": "max_tokens"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
#### 2. 固定字段映射
|
|
27
|
+
- 模型名称映射
|
|
28
|
+
- 基础参数转换(temperature, top_p等)
|
|
29
|
+
- 消息角色转换
|
|
30
|
+
- 固定的错误码映射
|
|
31
|
+
|
|
32
|
+
#### 3. 结构化数据转换
|
|
33
|
+
```json
|
|
34
|
+
// ✅ 静态表可以定义结构转换
|
|
35
|
+
{
|
|
36
|
+
"messageStructure": {
|
|
37
|
+
"anthropic": {"type": "text", "text": "content"},
|
|
38
|
+
"openai": {"role": "user", "content": "content"}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 静态表不能解决的问题
|
|
44
|
+
|
|
45
|
+
#### 1. 动态图像处理和缓存
|
|
46
|
+
```typescript
|
|
47
|
+
// ❌ 静态表无法处理动态行为
|
|
48
|
+
imageCache.storeImage(`${req.id}_Image#${imgId}`, msg.source);
|
|
49
|
+
```
|
|
50
|
+
- **问题**:图像ID基于请求ID动态生成
|
|
51
|
+
- **原因**:需要运行时状态管理
|
|
52
|
+
- **影响**:无法用静态映射表表示
|
|
53
|
+
|
|
54
|
+
#### 2. 实时流处理状态管理
|
|
55
|
+
```typescript
|
|
56
|
+
// ❌ 静态表无法处理流状态
|
|
57
|
+
let currentAgent: undefined | IAgent;
|
|
58
|
+
let currentToolIndex = -1;
|
|
59
|
+
let currentToolName = '';
|
|
60
|
+
let currentToolArgs = '';
|
|
61
|
+
```
|
|
62
|
+
- **问题**:需要维护跨多个流事件的内部状态
|
|
63
|
+
- **原因**:状态转换逻辑是动态的
|
|
64
|
+
- **影响**:工具调用需要跨多个SSE事件协调
|
|
65
|
+
|
|
66
|
+
#### 3. 条件性Agent激活
|
|
67
|
+
```typescript
|
|
68
|
+
// ❌ 静态表无法处理条件逻辑
|
|
69
|
+
if (agent.shouldHandle(req, config)) {
|
|
70
|
+
agent.reqHandler(req, config);
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
- **问题**:Agent激活条件是动态判断的
|
|
74
|
+
- **原因**:基于请求内容动态决定使用哪个Agent
|
|
75
|
+
- **影响**:无法预定义所有可能的转换路径
|
|
76
|
+
|
|
77
|
+
#### 4. 动态工具调用处理
|
|
78
|
+
```typescript
|
|
79
|
+
// ❌ 静态表无法处理动态工具响应
|
|
80
|
+
const toolResult = await currentAgent?.tools.get(currentToolName)?.handler(args, {
|
|
81
|
+
req,
|
|
82
|
+
config
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
- **问题**:工具调用是异步的,结果不确定
|
|
86
|
+
- **原因**:需要运行时执行外部函数
|
|
87
|
+
- **影响**:无法用静态映射预测结果
|
|
88
|
+
|
|
89
|
+
#### 5. 递归API调用
|
|
90
|
+
```typescript
|
|
91
|
+
// ❌ 静态表无法处理递归调用
|
|
92
|
+
const response = await fetch(`http://127.0.0.1:${config.PORT}/v1/messages`, {
|
|
93
|
+
method: "POST",
|
|
94
|
+
body: JSON.stringify(req.body),
|
|
95
|
+
})
|
|
96
|
+
```
|
|
97
|
+
- **问题**:工具触发后需要递归调用API
|
|
98
|
+
- **原因**:形成了动态的调用链
|
|
99
|
+
- **影响**:静态表无法表示这种循环逻辑
|
|
100
|
+
|
|
101
|
+
## 混合解决方案建议
|
|
102
|
+
|
|
103
|
+
### 1. 静态表 + 动态处理器
|
|
104
|
+
```typescript
|
|
105
|
+
class HybridTransformer {
|
|
106
|
+
private staticMappings: Map<string, any> = new Map();
|
|
107
|
+
private dynamicHandlers: Map<string, Function> = new Map();
|
|
108
|
+
|
|
109
|
+
async transform(request: any): Promise<any> {
|
|
110
|
+
// 1. 应用静态映射
|
|
111
|
+
let result = this.applyStaticMappings(request);
|
|
112
|
+
|
|
113
|
+
// 2. 应用动态处理
|
|
114
|
+
result = await this.applyDynamicHandlers(result);
|
|
115
|
+
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 2. 分层转换策略
|
|
122
|
+
```
|
|
123
|
+
请求 → 静态表转换 → 动态处理器 → 响应
|
|
124
|
+
基础字段 复杂逻辑
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 3. 可配置的动态规则
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"staticMappings": {
|
|
131
|
+
"model": {"claude-3-sonnet": "gpt-4"}
|
|
132
|
+
},
|
|
133
|
+
"dynamicRules": {
|
|
134
|
+
"imageProcessing": {
|
|
135
|
+
"type": "agent",
|
|
136
|
+
"agentName": "image",
|
|
137
|
+
"conditions": [
|
|
138
|
+
{"field": "messages[*].content[*].type", "operator": "equals", "value": "image"}
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## 具体场景分析
|
|
146
|
+
|
|
147
|
+
### 场景1:基础对话转换
|
|
148
|
+
- **静态表**:✅ 完全可以解决
|
|
149
|
+
- **复杂度**:低
|
|
150
|
+
- **原因**:字段映射固定
|
|
151
|
+
|
|
152
|
+
### 场景2:图像处理
|
|
153
|
+
- **静态表**:❌ 无法完全解决
|
|
154
|
+
- **复杂度**:高
|
|
155
|
+
- **原因**:需要动态缓存和状态管理
|
|
156
|
+
|
|
157
|
+
### 场景3:工具调用
|
|
158
|
+
- **静态表**:⚠️ 部分解决
|
|
159
|
+
- **复杂度**:中高
|
|
160
|
+
- **原因**:基础结构可以静态定义,但执行需要动态处理
|
|
161
|
+
|
|
162
|
+
### 场景4:流式响应
|
|
163
|
+
- **静态表**:❌ 无法解决
|
|
164
|
+
- **复杂度**:很高
|
|
165
|
+
- **原因**:需要实时状态管理和事件协调
|
|
166
|
+
|
|
167
|
+
## 结论
|
|
168
|
+
|
|
169
|
+
**静态表查表只能解决约30-40%的claude-code-router动态字段翻译行为**。
|
|
170
|
+
|
|
171
|
+
### 能解决的(30-40%):
|
|
172
|
+
- 基础协议转换
|
|
173
|
+
- 固定字段映射
|
|
174
|
+
- 模型名称转换
|
|
175
|
+
- 简单参数转换
|
|
176
|
+
|
|
177
|
+
### 不能解决的(60-70%):
|
|
178
|
+
- 动态状态管理(60%)
|
|
179
|
+
- 实时流处理(25%)
|
|
180
|
+
- 条件性逻辑(10%)
|
|
181
|
+
- 递归调用处理(5%)
|
|
182
|
+
|
|
183
|
+
### 建议:
|
|
184
|
+
1. **使用混合架构**:静态表处理基础转换,动态处理器处理复杂逻辑
|
|
185
|
+
2. **分层设计**:将转换分为静态层和动态层
|
|
186
|
+
3. **可配置规则**:将部分动态逻辑转换为可配置规则
|
|
187
|
+
4. **状态管理**:引入专门的状态管理机制处理流式响应
|
|
188
|
+
|
|
189
|
+
静态表是解决方案的重要组成部分,但不是完整的解决方案。claude-code-router的复杂性要求我们必须采用静态+动态的混合架构。
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# 静态表准确性重新评估
|
|
2
|
+
|
|
3
|
+
## 问题:我的静态表还准确吗?
|
|
4
|
+
|
|
5
|
+
**答案:部分准确,但有重大偏差**
|
|
6
|
+
|
|
7
|
+
## 准确的部分
|
|
8
|
+
|
|
9
|
+
### 1. **基础协议转换** ✅ 准确
|
|
10
|
+
```json
|
|
11
|
+
{
|
|
12
|
+
"model": {
|
|
13
|
+
"claude-3-5-sonnet-20241022": "gpt-4o",
|
|
14
|
+
"claude-3-5-haiku-20241022": "gpt-4o-mini"
|
|
15
|
+
},
|
|
16
|
+
"max_tokens": {
|
|
17
|
+
"sourcePath": "max_tokens",
|
|
18
|
+
"targetPath": "max_tokens"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
这些基础字段映射是准确的。
|
|
23
|
+
|
|
24
|
+
### 2. **消息结构转换** ✅ 准确
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"messages": {
|
|
28
|
+
"anthropic": {"type": "text", "text": "content"},
|
|
29
|
+
"openai": {"role": "user", "content": "content"}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
消息格式转换是准确的。
|
|
34
|
+
|
|
35
|
+
## 不准确的部分
|
|
36
|
+
|
|
37
|
+
### 1. **流式处理映射** ❌ 不准确
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"streamMappings": {
|
|
41
|
+
"contentBlockStart": {
|
|
42
|
+
"sourceEvent": "content_block_start",
|
|
43
|
+
"targetEvent": "tool_calls_start"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
**问题**:这是基于流式处理的假设,但实际上Claude Code Router的流处理是为了内部工具执行,不是协议转换。
|
|
49
|
+
|
|
50
|
+
### 2. **工具调用转换** ❌ 不准确
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"toolMappings": {
|
|
54
|
+
"toolDefinition": {
|
|
55
|
+
"sourceFormat": {
|
|
56
|
+
"name": "string",
|
|
57
|
+
"input_schema": "object"
|
|
58
|
+
},
|
|
59
|
+
"targetFormat": {
|
|
60
|
+
"function": {
|
|
61
|
+
"name": "string",
|
|
62
|
+
"parameters": "object"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
**问题**:Claude Code Router内部执行工具,不需要将工具定义转换给客户端。
|
|
70
|
+
|
|
71
|
+
### 3. **误解了架构目标** ❌ 重大偏差
|
|
72
|
+
我之前假设Claude Code Router是一个通用的协议转换器,但实际上它是:
|
|
73
|
+
- **工具执行代理**,不是协议转换器
|
|
74
|
+
- **内部工具调用**,不是客户端工具调用
|
|
75
|
+
- **透明工具执行**,不是工具定义转换
|
|
76
|
+
|
|
77
|
+
## 重新定义的静态表
|
|
78
|
+
|
|
79
|
+
### 真正需要的映射表
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"description": "Claude Code Router内部工具执行映射",
|
|
83
|
+
"requestProcessing": {
|
|
84
|
+
"imageDetection": {
|
|
85
|
+
"condition": "messages[*].content[*].type === 'image'",
|
|
86
|
+
"action": "routeToImageAgent"
|
|
87
|
+
},
|
|
88
|
+
"toolDetection": {
|
|
89
|
+
"condition": "requiresToolExecution",
|
|
90
|
+
"action": "executeInternalTool"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"toolExecution": {
|
|
94
|
+
"analyzeImage": {
|
|
95
|
+
"inputMapping": {
|
|
96
|
+
"imageId": "cachedImageIds",
|
|
97
|
+
"task": "textDescription"
|
|
98
|
+
},
|
|
99
|
+
"outputMapping": {
|
|
100
|
+
"result": "toolResultContent"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 修正后的评估
|
|
108
|
+
|
|
109
|
+
### 静态表能解决的(60-70%):
|
|
110
|
+
|
|
111
|
+
1. **基础请求转换** ✅
|
|
112
|
+
- 模型映射
|
|
113
|
+
- 参数转换
|
|
114
|
+
- 消息结构转换
|
|
115
|
+
|
|
116
|
+
2. **工具检测规则** ✅
|
|
117
|
+
- 图像内容检测
|
|
118
|
+
- 工具调用条件
|
|
119
|
+
|
|
120
|
+
3. **响应格式转换** ✅
|
|
121
|
+
- 基础响应结构
|
|
122
|
+
- 错误格式
|
|
123
|
+
|
|
124
|
+
### 需要动态处理的(30-40%):
|
|
125
|
+
|
|
126
|
+
1. **工具执行逻辑**(20%)
|
|
127
|
+
- 图像缓存管理
|
|
128
|
+
- 工具调用执行
|
|
129
|
+
- 结果处理
|
|
130
|
+
|
|
131
|
+
2. **请求路由**(10%)
|
|
132
|
+
- 动态模型选择
|
|
133
|
+
- Agent激活条件
|
|
134
|
+
|
|
135
|
+
## 更准确的静态表示
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"requestTransformation": {
|
|
140
|
+
"preprocessing": {
|
|
141
|
+
"imageHandling": {
|
|
142
|
+
"detect": "content.type === 'image'",
|
|
143
|
+
"action": "cacheAndReplaceWithPlaceholder"
|
|
144
|
+
},
|
|
145
|
+
"toolDetection": {
|
|
146
|
+
"detect": "requiresToolCall",
|
|
147
|
+
"action": "injectToolSystemPrompt"
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"routing": {
|
|
151
|
+
"imageModel": "config.Router.image",
|
|
152
|
+
"defaultModel": "config.Router.default"
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
"responseTransformation": {
|
|
156
|
+
"postprocessing": {
|
|
157
|
+
"toolResultInsertion": {
|
|
158
|
+
"condition": "hasToolResults",
|
|
159
|
+
"action": "insertIntoMessageHistory"
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## 结论
|
|
167
|
+
|
|
168
|
+
**静态表仍然有用,但需要重新定义**:
|
|
169
|
+
|
|
170
|
+
1. **准确的部分**:基础协议转换、参数映射
|
|
171
|
+
2. **不准确的部分**:流式处理、工具调用转换
|
|
172
|
+
3. **需要补充的部分**:工具执行规则、请求路由逻辑
|
|
173
|
+
|
|
174
|
+
静态表应该专注于:
|
|
175
|
+
- **预处理规则**(如图像检测、缓存)
|
|
176
|
+
- **路由规则**(如模型选择)
|
|
177
|
+
- **后处理规则**(如结果插入)
|
|
178
|
+
|
|
179
|
+
而不是我之前假设的通用协议转换。
|