@jsonstudio/rcc 0.90.252 → 0.90.352
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 +16 -16
- package/config/providers/ali-coding-plan.json +73 -0
- package/dist/build-info.js +2 -2
- package/dist/cli/commands/camoufox.js +2 -2
- package/dist/cli/commands/camoufox.js.map +1 -1
- package/dist/cli/commands/clean.js +4 -3
- package/dist/cli/commands/clean.js.map +1 -1
- package/dist/cli/commands/config.js +2 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/env.js +2 -1
- package/dist/cli/commands/env.js.map +1 -1
- package/dist/cli/commands/init/basic.js +2 -1
- package/dist/cli/commands/init/basic.js.map +1 -1
- package/dist/cli/commands/init.js +4 -3
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/launcher-kernel.js +34 -8
- package/dist/cli/commands/launcher-kernel.js.map +1 -1
- package/dist/cli/commands/port.js +1 -1
- package/dist/cli/commands/port.js.map +1 -1
- package/dist/cli/commands/restart.js +3 -2
- package/dist/cli/commands/restart.js.map +1 -1
- package/dist/cli/commands/session-admin.js +46 -8
- package/dist/cli/commands/session-admin.js.map +1 -1
- package/dist/cli/commands/session-inject.js +43 -4
- package/dist/cli/commands/session-inject.js.map +1 -1
- package/dist/cli/commands/start.js +4 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/stop.js +3 -2
- package/dist/cli/commands/stop.js.map +1 -1
- package/dist/cli/config/bundled-docs.js +2 -6
- package/dist/cli/config/bundled-docs.js.map +1 -1
- package/dist/cli/config/init-config.d.ts +1 -0
- package/dist/cli/config/init-config.js +6 -3
- package/dist/cli/config/init-config.js.map +1 -1
- package/dist/cli/config/init-provider-catalog.js +4 -4
- package/dist/cli/config/init-provider-catalog.js.map +1 -1
- package/dist/cli/config/precommand-default-script.js +3 -9
- package/dist/cli/config/precommand-default-script.js.map +1 -1
- package/dist/cli/guardian/paths.js +2 -3
- package/dist/cli/guardian/paths.js.map +1 -1
- package/dist/cli.js +10 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/camoufox-fp.js +2 -3
- package/dist/commands/camoufox-fp.js.map +1 -1
- package/dist/commands/migrate-user-config.d.ts +6 -0
- package/dist/commands/migrate-user-config.js +53 -0
- package/dist/commands/migrate-user-config.js.map +1 -0
- package/dist/commands/provider-update.js +9 -9
- package/dist/commands/provider-update.js.map +1 -1
- package/dist/commands/quota-daemon.js +3 -3
- package/dist/commands/quota-daemon.js.map +1 -1
- package/dist/commands/quota-status.js +2 -2
- package/dist/commands/quota-status.js.map +1 -1
- package/dist/commands/token-daemon.js +2 -2
- package/dist/commands/token-daemon.js.map +1 -1
- package/dist/commands/validate.js +2 -3
- package/dist/commands/validate.js.map +1 -1
- package/dist/config/auth-file-resolver.js +2 -2
- package/dist/config/auth-file-resolver.js.map +1 -1
- package/dist/config/provider-v2-loader.js +9 -6
- package/dist/config/provider-v2-loader.js.map +1 -1
- package/dist/config/routecodex-config-loader.js +2 -2
- package/dist/config/routecodex-config-loader.js.map +1 -1
- package/dist/config/unified-config-paths.js +33 -11
- package/dist/config/unified-config-paths.js.map +1 -1
- package/dist/config/user-config-migration.d.ts +42 -0
- package/dist/config/user-config-migration.js +188 -0
- package/dist/config/user-config-migration.js.map +1 -0
- package/dist/config/user-data-paths.d.ts +59 -0
- package/dist/config/user-data-paths.js +174 -0
- package/dist/config/user-data-paths.js.map +1 -0
- package/dist/config/virtual-router-builder.d.ts +1 -1
- package/dist/config/virtual-router-builder.js +1 -1
- package/dist/daemon-admin-ui/assets/index-Bnx13Byl.js +15 -0
- package/dist/daemon-admin-ui/index.html +1 -1
- package/dist/docs/daemon-admin-ui.html +9 -9
- package/dist/index.js +66 -13
- package/dist/index.js.map +1 -1
- package/dist/manager/modules/health/index.js +2 -2
- package/dist/manager/modules/health/index.js.map +1 -1
- package/dist/manager/modules/quota/antigravity-quota-persistence.d.ts +2 -1
- package/dist/manager/modules/quota/antigravity-quota-persistence.js +11 -22
- package/dist/manager/modules/quota/antigravity-quota-persistence.js.map +1 -1
- package/dist/manager/quota/provider-quota-center.js +33 -25
- package/dist/manager/quota/provider-quota-center.js.map +1 -1
- package/dist/manager/quota/provider-quota-store.js +11 -4
- package/dist/manager/quota/provider-quota-store.js.map +1 -1
- package/dist/modules/config/pipeline-config-path.js +3 -3
- package/dist/modules/config/pipeline-config-path.js.map +1 -1
- package/dist/modules/llmswitch/bridge/index.d.ts +1 -1
- package/dist/modules/llmswitch/bridge/index.js +1 -1
- package/dist/modules/llmswitch/bridge/index.js.map +1 -1
- package/dist/modules/llmswitch/bridge/native-exports.d.ts +1 -0
- package/dist/modules/llmswitch/bridge/native-exports.js +27 -0
- package/dist/modules/llmswitch/bridge/native-exports.js.map +1 -1
- package/dist/modules/llmswitch/bridge/snapshot-recorder.js +95 -24
- package/dist/modules/llmswitch/bridge/snapshot-recorder.js.map +1 -1
- package/dist/modules/llmswitch/bridge/state-integrations.d.ts +18 -0
- package/dist/modules/llmswitch/bridge/state-integrations.js +28 -0
- package/dist/modules/llmswitch/bridge/state-integrations.js.map +1 -1
- package/dist/modules/llmswitch/bridge.d.ts +2 -2
- package/dist/modules/llmswitch/bridge.js +2 -2
- package/dist/modules/llmswitch/bridge.js.map +1 -1
- package/dist/modules/pipeline/utils/colored-logger.d.ts +1 -0
- package/dist/modules/pipeline/utils/colored-logger.js +13 -9
- package/dist/modules/pipeline/utils/colored-logger.js.map +1 -1
- package/dist/providers/auth/antigravity-fingerprint.js +2 -3
- package/dist/providers/auth/antigravity-fingerprint.js.map +1 -1
- package/dist/providers/auth/antigravity-reauth-state.js +2 -3
- package/dist/providers/auth/antigravity-reauth-state.js.map +1 -1
- package/dist/providers/auth/antigravity-user-agent.js +2 -2
- package/dist/providers/auth/antigravity-user-agent.js.map +1 -1
- package/dist/providers/auth/antigravity-warmup.js +2 -3
- package/dist/providers/auth/antigravity-warmup.js.map +1 -1
- package/dist/providers/auth/deepseek-account-auth.js +4 -3
- package/dist/providers/auth/deepseek-account-auth.js.map +1 -1
- package/dist/providers/auth/deepseek-account-token-acquirer.js +3 -2
- package/dist/providers/auth/deepseek-account-token-acquirer.js.map +1 -1
- package/dist/providers/auth/oauth-auth.js +2 -3
- package/dist/providers/auth/oauth-auth.js.map +1 -1
- package/dist/providers/auth/oauth-lifecycle/path-resolver.js +6 -7
- package/dist/providers/auth/oauth-lifecycle/path-resolver.js.map +1 -1
- package/dist/providers/auth/oauth-lifecycle.js +4 -4
- package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
- package/dist/providers/auth/oauth-repair-cooldown.js +2 -3
- package/dist/providers/auth/oauth-repair-cooldown.js.map +1 -1
- package/dist/providers/auth/token-scanner/index.js +2 -3
- package/dist/providers/auth/token-scanner/index.js.map +1 -1
- package/dist/providers/auth/token-storage/token-file-resolver.js +8 -7
- package/dist/providers/auth/token-storage/token-file-resolver.js.map +1 -1
- package/dist/providers/auth/tokenfile-auth.js +5 -6
- package/dist/providers/auth/tokenfile-auth.js.map +1 -1
- package/dist/providers/core/config/camoufox-launcher.js +3 -4
- package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
- package/dist/providers/core/config/provider-oauth-configs.js +2 -2
- package/dist/providers/core/config/provider-oauth-configs.js.map +1 -1
- package/dist/providers/core/hooks/hooks-integration.js +1 -1
- package/dist/providers/core/hooks/hooks-integration.js.map +1 -1
- package/dist/providers/core/runtime/deepseek-http-provider.js +2 -1
- package/dist/providers/core/runtime/deepseek-http-provider.js.map +1 -1
- package/dist/providers/core/utils/snapshot-writer.js +2 -1
- package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
- package/dist/providers/profile/families/anthropic-profile.js +32 -0
- package/dist/providers/profile/families/anthropic-profile.js.map +1 -1
- package/dist/server/handlers/config-admin-handler.d.ts +1 -1
- package/dist/server/handlers/config-admin-handler.js +6 -6
- package/dist/server/handlers/config-admin-handler.js.map +1 -1
- package/dist/server/handlers/handler-response-utils.js +9 -4
- package/dist/server/handlers/handler-response-utils.js.map +1 -1
- package/dist/server/runtime/http-server/clock-runtime-hooks.d.ts +2 -0
- package/dist/server/runtime/http-server/clock-runtime-hooks.js +91 -0
- package/dist/server/runtime/http-server/clock-runtime-hooks.js.map +1 -0
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.js +51 -13
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/auth-store.d.ts +1 -9
- package/dist/server/runtime/http-server/daemon-admin/auth-store.js +2 -18
- package/dist/server/runtime/http-server/daemon-admin/auth-store.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/control-handler.js +3 -3
- package/dist/server/runtime/http-server/daemon-admin/control-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +2 -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-routing-utils.js +5 -4
- package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +3 -3
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin-routes.d.ts +2 -0
- package/dist/server/runtime/http-server/daemon-admin-routes.js +11 -8
- package/dist/server/runtime/http-server/daemon-admin-routes.js.map +1 -1
- package/dist/server/runtime/http-server/executor/client-injection-flow.js +9 -1
- package/dist/server/runtime/http-server/executor/client-injection-flow.js.map +1 -1
- package/dist/server/runtime/http-server/executor/provider-response-converter.js +119 -26
- package/dist/server/runtime/http-server/executor/provider-response-converter.js.map +1 -1
- package/dist/server/runtime/http-server/executor/request-retry-helpers.d.ts +1 -0
- package/dist/server/runtime/http-server/executor/request-retry-helpers.js +26 -0
- package/dist/server/runtime/http-server/executor/request-retry-helpers.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-bootstrap.js +2 -3
- package/dist/server/runtime/http-server/http-server-bootstrap.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-lifecycle.js +2 -0
- package/dist/server/runtime/http-server/http-server-lifecycle.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-runtime-setup.js +2 -0
- package/dist/server/runtime/http-server/http-server-runtime-setup.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-session-daemon.js +9 -299
- package/dist/server/runtime/http-server/http-server-session-daemon.js.map +1 -1
- package/dist/server/runtime/http-server/middleware.d.ts +7 -0
- package/dist/server/runtime/http-server/middleware.js +1 -1
- package/dist/server/runtime/http-server/middleware.js.map +1 -1
- package/dist/server/runtime/http-server/request-executor.js +36 -51
- package/dist/server/runtime/http-server/request-executor.js.map +1 -1
- package/dist/server/runtime/http-server/routes.js +10 -3
- package/dist/server/runtime/http-server/routes.js.map +1 -1
- package/dist/server/runtime/http-server/servertool-admin-state.d.ts +1 -0
- package/dist/server/runtime/http-server/servertool-admin-state.js +7 -2
- package/dist/server/runtime/http-server/servertool-admin-state.js.map +1 -1
- package/dist/server/runtime/http-server/session-client-route-utils.d.ts +1 -0
- package/dist/server/runtime/http-server/session-client-route-utils.js +49 -4
- package/dist/server/runtime/http-server/session-client-route-utils.js.map +1 -1
- package/dist/server/runtime/http-server/session-client-routes.d.ts +5 -1
- package/dist/server/runtime/http-server/session-client-routes.js +60 -30
- package/dist/server/runtime/http-server/session-client-routes.js.map +1 -1
- package/dist/server/runtime/http-server/session-dir.js +6 -12
- package/dist/server/runtime/http-server/session-dir.js.map +1 -1
- package/dist/server/runtime/http-server/stats-manager.js +4 -3
- package/dist/server/runtime/http-server/stats-manager.js.map +1 -1
- package/dist/server/utils/non-blocking-error-logger.js +2 -1
- package/dist/server/utils/non-blocking-error-logger.js.map +1 -1
- package/dist/server/utils/request-log-color.js +10 -3
- package/dist/server/utils/request-log-color.js.map +1 -1
- package/dist/server/utils/stage-logger.js +71 -9
- package/dist/server/utils/stage-logger.js.map +1 -1
- package/dist/token-daemon/history-store.js +2 -1
- package/dist/token-daemon/history-store.js.map +1 -1
- package/dist/token-daemon/leader-lock.js +2 -2
- package/dist/token-daemon/leader-lock.js.map +1 -1
- package/dist/token-daemon/quota-auth-issue.js +2 -4
- package/dist/token-daemon/quota-auth-issue.js.map +1 -1
- package/dist/token-daemon/server-utils.js +3 -4
- package/dist/token-daemon/server-utils.js.map +1 -1
- package/dist/token-daemon/token-daemon.js +6 -6
- package/dist/token-daemon/token-daemon.js.map +1 -1
- package/dist/token-daemon/token-utils.js +2 -1
- package/dist/token-daemon/token-utils.js.map +1 -1
- package/dist/token-portal/fingerprint-summary.js +2 -3
- package/dist/token-portal/fingerprint-summary.js.map +1 -1
- package/dist/token-portal/local-token-portal.js +1 -1
- package/dist/token-portal/local-token-portal.js.map +1 -1
- package/dist/utils/daemon-stop-intent.js +2 -2
- package/dist/utils/daemon-stop-intent.js.map +1 -1
- package/dist/utils/errorsamples.js +3 -1
- package/dist/utils/errorsamples.js.map +1 -1
- package/dist/utils/llms-engine-shadow.js +2 -2
- package/dist/utils/llms-engine-shadow.js.map +1 -1
- package/dist/utils/managed-server-pids.js +2 -2
- package/dist/utils/managed-server-pids.js.map +1 -1
- package/dist/utils/process-lifecycle-logger.js +2 -1
- package/dist/utils/process-lifecycle-logger.js.map +1 -1
- package/dist/utils/runtime-exit-forensics.js +2 -2
- package/dist/utils/runtime-exit-forensics.js.map +1 -1
- package/dist/utils/session-log-color.js +31 -5
- package/dist/utils/session-log-color.js.map +1 -1
- package/dist/utils/snapshot-writer.js +2 -1
- package/dist/utils/snapshot-writer.js.map +1 -1
- package/docs/CODEX_AND_CLAUDE_CODE.md +1 -1
- package/docs/CONFIG_ARCHITECTURE.md +7 -7
- package/docs/DAEMON_CONTROL_PLANE.md +2 -2
- package/docs/INSTALLATION_AND_QUICKSTART.md +2 -2
- package/docs/INSTRUCTION_MARKUP.md +2 -2
- package/docs/OAUTH.md +6 -6
- package/docs/PORTS.md +1 -1
- package/docs/PROVIDERS_BUILTIN.md +2 -2
- package/docs/QUOTA_MANAGER_V3.md +2 -2
- package/docs/ROUTING_POLICY_SCHEMA.md +1 -1
- package/docs/SERVERTOOL_CLOCK_DESIGN.md +1 -1
- package/docs/SERVERTOOL_PRE_COMMAND_HOOKS.md +4 -4
- package/docs/anthropic-request-golden-samples.md +4 -4
- package/docs/chat-glm-500-analysis.md +2 -2
- package/docs/chat-request-golden-samples.md +4 -4
- package/docs/codex-samples-replay.md +3 -3
- package/docs/daemon-admin-api-design.md +2 -2
- package/docs/daemon-admin-ui.html +9 -9
- package/docs/design/servertool-stopmessage-lifecycle.md +5 -0
- package/docs/golden-ci-library.md +8 -8
- package/docs/monitoring/Design.md +2 -2
- package/docs/multi-token-auth-guide.md +6 -6
- package/docs/oauth-authentication-guide.md +1 -1
- package/docs/oauth-iflow-implementation.md +2 -2
- package/docs/pipeline-routing-report.md +1 -1
- package/docs/plans/manager-daemon/PLAN.md +1 -1
- package/docs/plans/provider-config-v2-plan.md +8 -8
- package/docs/plans/provider-runtime-manager-plan.md +4 -4
- package/docs/provider-analysis.md +5 -5
- package/docs/provider-quota-design.md +2 -2
- package/docs/providers/antigravity-fingerprint-ua-warmup.md +5 -5
- package/docs/providers/antigravity-gemini-provider-compat.md +3 -3
- package/docs/providers/deepseek-web-provider-design.md +1 -1
- package/docs/providers/gemini-provider.md +1 -1
- package/docs/providers/provider-composite-testing.md +2 -2
- package/docs/providers/tabglm-claude-code-compat.md +1 -1
- package/docs/replay-evidence-iflow-400.txt +3 -3
- package/docs/reports/routing-classification-report.json +6 -6
- package/docs/reports/routing-classification-report.md +6 -6
- package/docs/reports/thinking-keywords-report.json +6 -6
- package/docs/responses/README.md +5 -5
- package/docs/responses-generic-provider.md +1 -1
- package/docs/responses-passthrough-provider-design.md +7 -7
- package/docs/routing-instructions.md +1 -1
- package/docs/token-daemon-preview.html +3 -3
- package/docs/token-refresh-daemon-plan.md +7 -7
- package/docs/verification/modelscope-verify.md +2 -2
- package/docs/verified-configs/README.md +2 -2
- package/docs/verified-configs/v0.45.0/README.md +5 -5
- package/docs/verified-configs/v0.45.0/merged-config.5521.json +3 -3
- package/docs/verified-configs/v0.45.0/merged-config.qwen-5522.json +3 -3
- package/package.json +3 -2
- package/scripts/anthropic-four-config-e2e.mjs +5 -5
- package/scripts/anthropic-toolcall.mjs +1 -1
- package/scripts/batch-toolcall-report.mjs +1 -1
- package/scripts/build-core.mjs +2 -7
- package/scripts/claude-e2e-listdir-all.sh +1 -1
- package/scripts/claude-e2e-listdir-per-config.sh +4 -4
- package/scripts/clean-safe.mjs +1 -1
- package/scripts/cleanup-beads-oversized-notes.mjs +182 -0
- package/scripts/config-core-compare.ts +1 -1
- package/scripts/ensure-llmswitch-mode.mjs +7 -1
- package/scripts/glm1210-curl-test.sh +1 -1
- package/scripts/install-release.sh +1 -1
- package/scripts/mock-provider/capture-from-configs.mjs +1 -1
- package/scripts/outbound-network-toolcall.mjs +2 -2
- package/scripts/outbound-regression-codex-samples.mjs +1 -1
- package/scripts/pack-mode.mjs +14 -1
- package/scripts/pack-rcc.mjs +9 -4
- package/scripts/provider-v2-smoke.mjs +3 -3
- package/scripts/publish-rcc.mjs +8 -3
- package/scripts/replay-recorded-toolcall.mjs +1 -2
- package/scripts/responses-fai-capture.mjs +1 -1
- package/scripts/responses-sse-capture.mjs +1 -1
- package/scripts/responses-sse-proxy.mjs +1 -1
- package/scripts/responses-sse-replay-golden.mjs +252 -111
- package/scripts/run-bg.sh +1 -1
- package/scripts/run-fg-gtimeout.sh +1 -1
- package/scripts/tests/antigravity-codex-sample-pipeline-compare.mjs +1 -1
- package/scripts/tests/antigravity-gemini-dryrun-compare.mjs +1 -1
- package/scripts/tests/responses-provider-dry-run.mjs +1 -1
- package/scripts/tests/virtual-router-health.mjs +1 -1
- package/scripts/update-models.mjs +2 -2
- package/scripts/v2-simple-monitor.mjs +1 -1
- package/scripts/vendor-core.mjs +12 -7
- package/scripts/verify-e2e-gemini-followup-sample.mjs +1 -1
- package/scripts/verify-e2e-toolcall.mjs +2 -2
- package/scripts/verify-health.mjs +2 -2
- package/scripts/verify-sse-loop.mjs +1 -1
- package/scripts/virtual-router-dryrun.mjs +2 -2
- package/scripts/virtual-router-shadow-v2-real.mjs +3 -3
- package/dist/daemon-admin-ui/assets/index-C8vP_c5E.js +0 -15
- package/docs/rccx-wasm-migration.md +0 -74
- package/scripts/compare-codex-rccx.mjs +0 -326
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-writer.js","sourceRoot":"","sources":["../../src/utils/snapshot-writer.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAoB3D,IAAI,yBAAyB,GAA8C,IAAI,CAAC;AAEhF,MAAM,UAAU,kBAAkB;IAChC,8CAA8C;IAC9C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,UAA4B,CAAC;QACjD,IAAI,OAAO,WAAW,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACzD,OAAO,WAAW,CAAC,mBAAmB,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,OAAO,YAAY,CAAC,gBAAgB,CAAC;AACvC,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1G,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,
|
|
1
|
+
{"version":3,"file":"snapshot-writer.js","sourceRoot":"","sources":["../../src/utils/snapshot-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ model_provider = "tcm"
|
|
|
28
28
|
model = "gpt-5.2"
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
如果你在 `~/.
|
|
31
|
+
如果你在 `~/.rcc/config.json` 中设置了服务端访问密钥(`httpserver.apikey`),则需要在环境变量里提供同样的值:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
export ROUTECODEX_APIKEY="your-server-apikey"
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
### 1.1 配置层次结构
|
|
6
6
|
```
|
|
7
|
-
用户配置层 (~/.
|
|
7
|
+
用户配置层 (~/.rcc/config.json)
|
|
8
8
|
↓
|
|
9
9
|
系统模块默认 (./config/modules.json)
|
|
10
10
|
↓
|
|
@@ -26,7 +26,7 @@ VirtualRouterArtifacts (virtualRouter + targetRuntime)
|
|
|
26
26
|
|
|
27
27
|
## 2. 配置文件结构
|
|
28
28
|
|
|
29
|
-
### 2.1 用户配置文件 (~/.
|
|
29
|
+
### 2.1 用户配置文件 (~/.rcc/config.json)
|
|
30
30
|
|
|
31
31
|
```json
|
|
32
32
|
{
|
|
@@ -191,7 +191,7 @@ interface RouteTarget {
|
|
|
191
191
|
#### 3.1.2 AuthFile解析
|
|
192
192
|
```typescript
|
|
193
193
|
// AuthFile格式: "authfile-{filename}"
|
|
194
|
-
// 密钥文件位置: ~/.
|
|
194
|
+
// 密钥文件位置: ~/.rcc/auth/{filename}
|
|
195
195
|
interface AuthFileResolver {
|
|
196
196
|
resolveAuthKey(keyId: string): string;
|
|
197
197
|
}
|
|
@@ -327,7 +327,7 @@ class ConfigManagerModule {
|
|
|
327
327
|
|
|
328
328
|
#### 5.1.1 密钥文件位置
|
|
329
329
|
```
|
|
330
|
-
~/.
|
|
330
|
+
~/.rcc/auth/
|
|
331
331
|
├── openai-main
|
|
332
332
|
├── openai-backup
|
|
333
333
|
└── anthropic-main
|
|
@@ -335,10 +335,10 @@ class ConfigManagerModule {
|
|
|
335
335
|
|
|
336
336
|
#### 5.1.2 密钥文件格式
|
|
337
337
|
```bash
|
|
338
|
-
# ~/.
|
|
338
|
+
# ~/.rcc/auth/openai-main
|
|
339
339
|
sk-your-actual-openai-key-here
|
|
340
340
|
|
|
341
|
-
# ~/.
|
|
341
|
+
# ~/.rcc/auth/anthropic-main
|
|
342
342
|
sk-ant-your-actual-anthropic-key-here
|
|
343
343
|
```
|
|
344
344
|
|
|
@@ -346,7 +346,7 @@ sk-ant-your-actual-anthropic-key-here
|
|
|
346
346
|
|
|
347
347
|
#### 5.2.1 文件权限
|
|
348
348
|
```bash
|
|
349
|
-
chmod 600 ~/.
|
|
349
|
+
chmod 600 ~/.rcc/auth/*
|
|
350
350
|
```
|
|
351
351
|
|
|
352
352
|
#### 5.2.2 密钥缓存
|
|
@@ -14,7 +14,7 @@ Returns:
|
|
|
14
14
|
- quota snapshot (provider states + antigravity raw snapshot)
|
|
15
15
|
- `virtualRouterConfig` (current runtime config snapshot)
|
|
16
16
|
- `policy` + `policyHash` (best-effort read of routing policy from `configPath` on disk; `policy` is a stable, serializable subset of the user config)
|
|
17
|
-
- `antigravityAliasLeases` (best-effort read of `~/.
|
|
17
|
+
- `antigravityAliasLeases` (best-effort read of `~/.rcc/state/antigravity-alias-leases.json` when present; used for session lease/binding observability)
|
|
18
18
|
- `llmsStats` (llmswitch-core stats center snapshot; includes routing hits)
|
|
19
19
|
|
|
20
20
|
### `POST /daemon/control/mutate`
|
|
@@ -31,5 +31,5 @@ Supported actions:
|
|
|
31
31
|
- `runtime.restart` (reload config from disk for current server)
|
|
32
32
|
|
|
33
33
|
## Discovery
|
|
34
|
-
- Uses `~/.
|
|
34
|
+
- Uses `~/.rcc/sessions/*_<port>` + env ports (`ROUTECODEX_PORT/RCC_PORT`) + dev default `5555`.
|
|
35
35
|
- Probes `/health` and filters `server=routecodex`.
|
|
@@ -16,7 +16,7 @@ npm uninstall -g @jsonstudio/rcc
|
|
|
16
16
|
|
|
17
17
|
## 2) 初始化配置(自动生成)
|
|
18
18
|
|
|
19
|
-
默认会写入:`~/.
|
|
19
|
+
默认会写入:`~/.rcc/config.json`
|
|
20
20
|
|
|
21
21
|
交互式(推荐):
|
|
22
22
|
|
|
@@ -24,7 +24,7 @@ npm uninstall -g @jsonstudio/rcc
|
|
|
24
24
|
rcc init
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
初始化成功后,`rcc init` 会把内置文档复制到:`~/.
|
|
27
|
+
初始化成功后,`rcc init` 会把内置文档复制到:`~/.rcc/docs`
|
|
28
28
|
|
|
29
29
|
非交互式(CI/脚本):
|
|
30
30
|
|
|
@@ -38,13 +38,13 @@ RouteCodex 支持在用户消息中写入“指令标记”,用于影响 Virtu
|
|
|
38
38
|
|
|
39
39
|
### stopMessage 文件引用(file://)
|
|
40
40
|
|
|
41
|
-
支持从 `~/.
|
|
41
|
+
支持从 `~/.rcc` 下读取相对路径文件内容作为 stopMessage:
|
|
42
42
|
|
|
43
43
|
```text
|
|
44
44
|
<**stopMessage:<file://stopMessage/message1.md>**>
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
含义:读取 `~/.
|
|
47
|
+
含义:读取 `~/.rcc/stopMessage/message1.md` 的内容,并把文件内容作为 stopMessage 文本(会按 mtime/size 做缓存)。
|
|
48
48
|
|
|
49
49
|
## 3) clock(定时任务)
|
|
50
50
|
|
package/docs/OAUTH.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
### Token 存放位置
|
|
10
10
|
|
|
11
|
-
默认目录:`~/.
|
|
11
|
+
默认目录:`~/.rcc/auth/`
|
|
12
12
|
|
|
13
13
|
常见命名:
|
|
14
14
|
- `qwen-oauth-<seq>-<alias>.json`
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
1) **显式路径**(通用,最稳):
|
|
22
22
|
|
|
23
23
|
```jsonc
|
|
24
|
-
"auth": { "type": "qwen-oauth", "tokenFile": "~/.
|
|
24
|
+
"auth": { "type": "qwen-oauth", "tokenFile": "~/.rcc/auth/qwen-oauth-1-default.json" }
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
2) **alias(仅文件名,不含路径)**:
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
|
|
33
33
|
当前推荐 Qwen 用 alias:`default`。
|
|
34
34
|
|
|
35
|
-
- 如果存在 `~/.
|
|
36
|
-
- 否则会回退到 `~/.
|
|
35
|
+
- 如果存在 `~/.rcc/auth/qwen-oauth-1-default.json`,会优先使用它(固定文件名,避免“我刚 reauth 但 server 读的是另一个 seq”的坑)
|
|
36
|
+
- 否则会回退到 `~/.rcc/auth/qwen-oauth-*-default.json` 中 seq 最新的那份
|
|
37
37
|
|
|
38
38
|
## 2) 认证(授权登录)
|
|
39
39
|
|
|
@@ -78,7 +78,7 @@ CLI `oauth <selector>` 若发现 quota-manager 已将该 alias 标记为 `verify
|
|
|
78
78
|
- 若你希望不提示直接打开:设置 `ROUTECODEX_OAUTH_AUTO_OPEN_VERIFY=1`(或 `RCC_OAUTH_AUTO_OPEN_VERIFY=1`),或在命令上加 `--headful`
|
|
79
79
|
- 若你只想打印 URL:回答 `n`
|
|
80
80
|
|
|
81
|
-
> 注:quota-manager 状态文件默认读取 `${ROUTECODEX_HOME:-$HOME}/.
|
|
81
|
+
> 注:quota-manager 状态文件默认读取 `${ROUTECODEX_HOME:-$HOME}/.rcc/quota/quota-manager.json`(便于测试/沙盒环境重定向)。
|
|
82
82
|
|
|
83
83
|
Portal 健康检查(`/health`)默认会等待 **300s**(网络慢时避免过早 timeout),可用环境变量调整:
|
|
84
84
|
|
|
@@ -157,7 +157,7 @@ ${bin} oauth validate all
|
|
|
157
157
|
|
|
158
158
|
2) **`auth.type` 与 `tokenFile` 是否对得上**
|
|
159
159
|
- Qwen:`"type": "qwen-oauth"` + `tokenFile: "default"`(或写全路径)
|
|
160
|
-
- 认证生成的文件是否真的在 `~/.
|
|
160
|
+
- 认证生成的文件是否真的在 `~/.rcc/auth/` 下
|
|
161
161
|
|
|
162
162
|
3) **token 文件内容是否具备可用字段**
|
|
163
163
|
- 至少需要 `access_token`(部分 provider 还会有 `api_key`)
|
package/docs/PORTS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 内置 Provider 配置说明(virtualrouter.providers)
|
|
2
2
|
|
|
3
|
-
> 本文只描述“用户配置层”的 provider 写法(`~/.
|
|
3
|
+
> 本文只描述“用户配置层”的 provider 写法(`~/.rcc/config.json`)。运行时会被 llmswitch-core 规范化为 Provider V2 Profile 并交给 Provider V2 传输层执行。
|
|
4
4
|
|
|
5
5
|
## 通用字段
|
|
6
6
|
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
### 3) Cookie(cookieFile)
|
|
38
38
|
|
|
39
39
|
```jsonc
|
|
40
|
-
"auth": { "type": "iflow-cookie", "cookieFile": "~/.
|
|
40
|
+
"auth": { "type": "iflow-cookie", "cookieFile": "~/.rcc/auth/iflow-work.cookie" }
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
## 各内置 Provider 的参考样本
|
package/docs/QUOTA_MANAGER_V3.md
CHANGED
|
@@ -50,8 +50,8 @@ You can set the default daily reset time used for **HTTP 402 without upstream `r
|
|
|
50
50
|
- Default: `"12:00"` (local)
|
|
51
51
|
|
|
52
52
|
## Persistence
|
|
53
|
-
- Core `QuotaManager` persists via host `QuotaStore` at `~/.
|
|
54
|
-
- Legacy fallback migration reads `~/.
|
|
53
|
+
- Core `QuotaManager` persists via host `QuotaStore` at `~/.rcc/quota/quota-manager.json`.
|
|
54
|
+
- Legacy fallback migration reads `~/.rcc/quota/provider-quota.json` when the new snapshot is missing.
|
|
55
55
|
- If both snapshots are missing, or quota-store save fails, host treats quota persistence as degraded:
|
|
56
56
|
- it does **not** write back into user config;
|
|
57
57
|
- it proactively clears Antigravity session alias pins (unbind safety) and logs a warning so routing can rebind on next success.
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
- `<**precommand:clear**>`:清除当前 precommand 状态
|
|
17
17
|
- `<**precommand**>` / `<**precommand:on**>`:加载默认脚本(默认 `default.sh`,可用 `ROUTECODEX_PRECOMMAND_DEFAULT_SCRIPT` 覆盖)
|
|
18
18
|
|
|
19
|
-
脚本必须位于 `~/.
|
|
19
|
+
脚本必须位于 `~/.rcc/precommand` 下(支持 `ROUTECODEX_USER_DIR` 覆盖根目录)。
|
|
20
20
|
|
|
21
21
|
运行时会把 hook event JSON 通过 stdin 和环境变量 `ROUTECODEX_PRE_COMMAND_HOOK_EVENT` 传给脚本:
|
|
22
22
|
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
|
|
26
26
|
## Config file (fallback)
|
|
27
27
|
|
|
28
|
-
当未激活 runtime precommand 时,回退读取:`~/.
|
|
28
|
+
当未激活 runtime precommand 时,回退读取:`~/.rcc/hooks/pre-command-hooks.json`
|
|
29
29
|
|
|
30
30
|
可覆盖:
|
|
31
31
|
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"id": "audit-pre-command",
|
|
51
51
|
"tool": ["exec_command", "shell"],
|
|
52
52
|
"priority": 20,
|
|
53
|
-
"shell": "cat >> ~/.
|
|
53
|
+
"shell": "cat >> ~/.rcc/logs/pre-command-audit.jsonl"
|
|
54
54
|
}
|
|
55
55
|
]
|
|
56
56
|
}
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
可直接用 `jq` 向 hooks 文件追加注册项:
|
|
62
62
|
|
|
63
63
|
```bash
|
|
64
|
-
HOOK_FILE="${ROUTECODEX_PRE_COMMAND_HOOKS_FILE:-$HOME/.
|
|
64
|
+
HOOK_FILE="${ROUTECODEX_PRE_COMMAND_HOOKS_FILE:-$HOME/.rcc/hooks/pre-command-hooks.json}"
|
|
65
65
|
mkdir -p "$(dirname "$HOOK_FILE")"
|
|
66
66
|
[ -f "$HOOK_FILE" ] || printf '{"enabled":true,"hooks":[]}' > "$HOOK_FILE"
|
|
67
67
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
### Anthropic Golden Request Samples
|
|
2
2
|
|
|
3
|
-
我们把真实 `/v1/messages` 请求快照统一保存在 `~/.
|
|
3
|
+
我们把真实 `/v1/messages` 请求快照统一保存在 `~/.rcc/golden_samples/anthropic_requests/`,每个目录
|
|
4
4
|
包含:
|
|
5
5
|
|
|
6
6
|
```
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
> **提示**:仓库内 `samples/chat-blackbox/anthropic/request-basic.json` 为上述样本的版本化拷贝,可在代码评审时直接 diff。
|
|
13
13
|
> 建议先用真实 provider 生成阶段快照,并把 `body` + `stageFile` 写入
|
|
14
|
-
> `~/.
|
|
14
|
+
> `~/.rcc/golden_samples/new/anthropic-messages/<providerId>/`。随后执行
|
|
15
15
|
> `node scripts/tools/capture-provider-goldens.mjs --update-golden`,脚本会读取这些快照并同步
|
|
16
16
|
> `provider_golden_samples/`,检测到字段差异时会提示是否覆盖。
|
|
17
17
|
|
|
@@ -31,14 +31,14 @@
|
|
|
31
31
|
curl -s http://127.0.0.1:5555/v1/messages \
|
|
32
32
|
-H 'Content-Type: application/json' \
|
|
33
33
|
-H 'Authorization: Bearer test' \
|
|
34
|
-
--data @~/.
|
|
34
|
+
--data @~/.rcc/golden_samples/anthropic_requests/glm46-toolcall-20251209T223550158-010/request_payload.json
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
3. 如果需要切换 provider,只需修改 JSON 中的 `model` 字段或配合用户配置热更(无需 CLI 抓样本)。
|
|
38
38
|
|
|
39
39
|
#### 验证快照
|
|
40
40
|
|
|
41
|
-
- 设置 `ROUTECODEX_HUB_SNAPSHOTS=1` 后回放,`~/.
|
|
41
|
+
- 设置 `ROUTECODEX_HUB_SNAPSHOTS=1` 后回放,`~/.rcc/codex-samples/anthropic-messages/` 将刷新对应的
|
|
42
42
|
`req_*` 与 `resp_*` 阶段文件,可直接 diff。
|
|
43
43
|
- `anthropic/glm46-toolcall-…` 目录内已有响应黄金样本,可与请求目录交叉比对,确认入站/出站一致性。
|
|
44
44
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 背景
|
|
4
4
|
- 现象:Chat 通路上游 GLM 返回 500(Operation failed)。
|
|
5
|
-
- 最新失败样本目录:`~/.
|
|
5
|
+
- 最新失败样本目录:`~/.rcc/codex-samples/openai-chat`
|
|
6
6
|
- 例:`req_1761955101841_2d71u9w6x_provider-request.json`
|
|
7
7
|
|
|
8
8
|
## 症状与证据
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
```
|
|
51
51
|
2. 使用失败样本 `*_raw-request.json` 复现
|
|
52
52
|
```bash
|
|
53
|
-
jq -r '.body' ~/.
|
|
53
|
+
jq -r '.body' ~/.rcc/codex-samples/openai-chat/<失败样本>_raw-request.json > /tmp/rc_req_body.json
|
|
54
54
|
curl -s -o /tmp/rc_resp.json -w "%{http_code}" \
|
|
55
55
|
-H 'Content-Type: application/json' \
|
|
56
56
|
--data @/tmp/rc_req_body.json \
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
### OpenAI Chat Golden Request Samples
|
|
2
2
|
|
|
3
|
-
存放位置:`~/.
|
|
3
|
+
存放位置:`~/.rcc/golden_samples/openai_requests/<slug>/`
|
|
4
4
|
|
|
5
5
|
> **提示**:
|
|
6
6
|
> - 自 0.87.21 起,chat 入口的 provider 专属样本统一存放在
|
|
7
|
-
> `~/.
|
|
7
|
+
> `~/.rcc/golden_samples/new/<entryType>/<providerId>/`(例如 `new/openai-chat/glm`)。
|
|
8
8
|
> 目录内包含 `request.sample.json`(直接从阶段快照复制的 `body`)以及 `meta.json`
|
|
9
9
|
> (指向原始 `*_stage2_format_build.json` 路径)。`scripts/tools/capture-provider-goldens.mjs`
|
|
10
10
|
> 会优先读取这些“真实快照”,无需再回放 `samples/chat-blackbox/**/request-basic.json`。
|
|
@@ -29,14 +29,14 @@
|
|
|
29
29
|
curl -s http://127.0.0.1:5555/v1/chat/completions \
|
|
30
30
|
-H 'Content-Type: application/json' \
|
|
31
31
|
-H 'Authorization: Bearer test' \
|
|
32
|
-
--data @~/.
|
|
32
|
+
--data @~/.rcc/golden_samples/openai_requests/chat-toolcall-20251209T225016004-002/request_payload.json
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
该样本会沿 V2 骨架走 chat 入口 → hub → glm provider,可直接用来对比 legacy/chat-provider 行为。
|
|
36
36
|
|
|
37
37
|
#### 如何扩展
|
|
38
38
|
|
|
39
|
-
1. 在 `~/.
|
|
39
|
+
1. 在 `~/.rcc/golden_samples/openai-chat/req_*_req_inbound_stage1_format_parse.json` 中找到需要的请求负载。
|
|
40
40
|
2. 将 `body.payload` 拷贝为新的 `request_payload.json`;注明 slug、描述后写入 `meta.json`。
|
|
41
41
|
3. 更新本文件表格,描述该样本的用途、对应阶段文件。若需要刷新所有 provider 的黄金请求,可运行
|
|
42
42
|
`node scripts/tools/capture-provider-goldens.mjs --update-golden`,脚本将自动覆盖 `provider_golden_samples/` 下对应入口的请求副本。
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# Codex Samples 回放
|
|
2
2
|
|
|
3
|
-
`scripts/replay-codex-sample.mjs` 允许我们将 `~/.
|
|
3
|
+
`scripts/replay-codex-sample.mjs` 允许我们将 `~/.rcc/codex-samples/**/*_client-request.json` 等样本重新发送到本地 RouteCodex,确保工具调用、SSE chunk 和最终 JSON 都被完整记录。
|
|
4
4
|
|
|
5
5
|
## 使用步骤
|
|
6
6
|
|
|
7
7
|
1. 启动 RouteCodex 主包(默认 `http://127.0.0.1:5555`)。
|
|
8
8
|
2. 准备好想要回放的样本文件,例如:
|
|
9
|
-
`~/.
|
|
9
|
+
`~/.rcc/codex-samples/openai-responses/req_req-v2-1764415000213-z1sxtbhuo_client-request.json`
|
|
10
10
|
3. 执行:
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
13
|
npm run replay:codex-sample -- \
|
|
14
|
-
--sample ~/.
|
|
14
|
+
--sample ~/.rcc/codex-samples/openai-responses/req_req-v2-1764415000213-z1sxtbhuo_client-request.json \
|
|
15
15
|
--label first-run
|
|
16
16
|
```
|
|
17
17
|
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"kind": "oauth",
|
|
66
66
|
"providerFamily": "gemini",
|
|
67
67
|
"alias": "iflow-186",
|
|
68
|
-
"tokenFile": "~/.
|
|
68
|
+
"tokenFile": "~/.rcc/auth/iflow-oauth-1-186.json",
|
|
69
69
|
"projectId": "my-project",
|
|
70
70
|
"expiresAt": 1736500000000,
|
|
71
71
|
"expiresInSec": 3600,
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"kind": "oauth",
|
|
91
91
|
"providerFamily": "gemini",
|
|
92
92
|
"alias": "iflow-186",
|
|
93
|
-
"tokenFile": "~/.
|
|
93
|
+
"tokenFile": "~/.rcc/auth/iflow-oauth-1-186.json",
|
|
94
94
|
"projectId": "my-project",
|
|
95
95
|
"expiresAt": 1736500000000,
|
|
96
96
|
"expiresInSec": 3600,
|
|
@@ -720,8 +720,8 @@
|
|
|
720
720
|
<div class="title">
|
|
721
721
|
<h1>RouteCodex Daemon Admin</h1>
|
|
722
722
|
<p>
|
|
723
|
-
Writes to <span class="mono">~/.
|
|
724
|
-
first visit will ask you to set one (stored at <span class="mono">~/.
|
|
723
|
+
Writes to <span class="mono">~/.rcc/config.json</span>. This UI requires an admin password:
|
|
724
|
+
first visit will ask you to set one (stored at <span class="mono">~/.rcc/login</span>), then you login with it.
|
|
725
725
|
</p>
|
|
726
726
|
</div>
|
|
727
727
|
<div class="statusline">
|
|
@@ -1039,7 +1039,7 @@
|
|
|
1039
1039
|
<input
|
|
1040
1040
|
id="apikeyValueInput"
|
|
1041
1041
|
type="password"
|
|
1042
|
-
placeholder="will be written to ~/.
|
|
1042
|
+
placeholder="will be written to ~/.rcc/auth/*.key"
|
|
1043
1043
|
style="flex: 1; min-width: 260px;"
|
|
1044
1044
|
/>
|
|
1045
1045
|
</div>
|
|
@@ -1074,7 +1074,7 @@
|
|
|
1074
1074
|
<input
|
|
1075
1075
|
id="cookieFileInput"
|
|
1076
1076
|
type="text"
|
|
1077
|
-
placeholder="~/.
|
|
1077
|
+
placeholder="~/.rcc/auth/iflow-work.cookie"
|
|
1078
1078
|
style="flex: 1; min-width: 280px;"
|
|
1079
1079
|
/>
|
|
1080
1080
|
</div>
|
|
@@ -1171,7 +1171,7 @@
|
|
|
1171
1171
|
<div class="card" style="box-shadow:none;">
|
|
1172
1172
|
<p class="section-title">Stats (historical)</p>
|
|
1173
1173
|
<p class="section-sub">
|
|
1174
|
-
Aggregated from <span class="mono">~/.
|
|
1174
|
+
Aggregated from <span class="mono">~/.rcc/logs/provider-stats.jsonl</span> (best-effort).
|
|
1175
1175
|
</p>
|
|
1176
1176
|
<div class="notice mono" id="statsHistoricalTotalsBox" style="white-space: pre-wrap;"></div>
|
|
1177
1177
|
<div class="table-wrap" style="margin-top: 10px;">
|
|
@@ -1233,7 +1233,7 @@
|
|
|
1233
1233
|
<p class="section-title">Token usage (session + historical)</p>
|
|
1234
1234
|
<p class="section-sub">
|
|
1235
1235
|
Session stats reset on server restart. Historical totals are aggregated from
|
|
1236
|
-
<span class="mono">~/.
|
|
1236
|
+
<span class="mono">~/.rcc/logs/provider-stats.jsonl</span> (best-effort).
|
|
1237
1237
|
</p>
|
|
1238
1238
|
<div class="row" style="margin-bottom: 10px;">
|
|
1239
1239
|
<button id="refreshTokensBtn" class="primary">Refresh</button>
|
|
@@ -1263,7 +1263,7 @@
|
|
|
1263
1263
|
<div class="card" style="box-shadow:none;">
|
|
1264
1264
|
<p class="section-title">Auth Inventory</p>
|
|
1265
1265
|
<p class="section-sub">
|
|
1266
|
-
Token files + API key authfiles in <span class="mono">~/.
|
|
1266
|
+
Token files + API key authfiles in <span class="mono">~/.rcc/auth</span>.
|
|
1267
1267
|
</p>
|
|
1268
1268
|
<div class="row" style="margin-bottom: 10px;">
|
|
1269
1269
|
<button id="refreshCredentialsBtn" class="primary">Refresh</button>
|
|
@@ -2292,7 +2292,7 @@
|
|
|
2292
2292
|
type: "iflow",
|
|
2293
2293
|
baseURL: "https://apis.iflow.cn/v1",
|
|
2294
2294
|
compatibilityProfile: "chat:iflow",
|
|
2295
|
-
auth: { type: "iflow-cookie", cookieFile: "~/.
|
|
2295
|
+
auth: { type: "iflow-cookie", cookieFile: "~/.rcc/auth/iflow-work.cookie" },
|
|
2296
2296
|
models: {}
|
|
2297
2297
|
};
|
|
2298
2298
|
}
|
|
@@ -3216,7 +3216,7 @@
|
|
|
3216
3216
|
if (authMode === "cookie") {
|
|
3217
3217
|
base.auth = {
|
|
3218
3218
|
type: "iflow-cookie",
|
|
3219
|
-
cookieFile: ($("cookieFileInput").value || "").trim() || "~/.
|
|
3219
|
+
cookieFile: ($("cookieFileInput").value || "").trim() || "~/.rcc/auth/iflow.cookie"
|
|
3220
3220
|
};
|
|
3221
3221
|
}
|
|
3222
3222
|
if (authMode === "oauth") {
|
|
@@ -45,6 +45,11 @@ Design goals:
|
|
|
45
45
|
- Normal servertools (e.g. search/vision) may use `reenterPipeline`.
|
|
46
46
|
- `stopMessage/clock/continue_execution` must use client injection dispatcher only.
|
|
47
47
|
|
|
48
|
+
2. Continue-execution stripping:
|
|
49
|
+
- `continue_execution` 的 tool_call 对客户端必须透明;响应侧在 chat process 的
|
|
50
|
+
`resp_process_stage2_finalize` 统一剥离该 tool_call,并将对应 choice 的
|
|
51
|
+
`finish_reason` 从 `tool_calls` 修正为 `stop`。
|
|
52
|
+
|
|
48
53
|
2. No fallback:
|
|
49
54
|
- No old session-based fallback compare.
|
|
50
55
|
- No daemon-only fallback for stopMessage matching.
|
|
@@ -28,10 +28,10 @@ roundtrip/工具校验,而不需要访问真实 provider。
|
|
|
28
28
|
命令会按照下面的顺序执行:
|
|
29
29
|
|
|
30
30
|
1. `node scripts/tools/capture-provider-goldens.mjs --custom-only --update-golden`
|
|
31
|
-
- 优先读取 `~/.
|
|
31
|
+
- 优先读取 `~/.rcc/golden_samples/new/<entry>/<provider>/`;
|
|
32
32
|
- 若用户目录缺失,则自动回退到 `samples/ci-goldens/...`;
|
|
33
33
|
- 最后才会使用 `samples/chat-blackbox/**/request-basic.json` 做最小回放。
|
|
34
|
-
- 结果写入 `~/.
|
|
34
|
+
- 结果写入 `~/.rcc/golden_samples/provider_golden_samples/**`,供 Provider
|
|
35
35
|
单测与 mock 回放使用。
|
|
36
36
|
2. `node scripts/mock-provider/run-regressions.mjs`
|
|
37
37
|
- 使用仓库内 `samples/mock-provider/_registry` 的样本,通过 mock provider
|
|
@@ -39,28 +39,28 @@ roundtrip/工具校验,而不需要访问真实 provider。
|
|
|
39
39
|
- 默认启用 `ROUTECODEX_MOCK_ENTRY_FILTER=all`,确保 chat/responses/anthropic
|
|
40
40
|
都被验证。
|
|
41
41
|
|
|
42
|
-
如果检测到 `~/.
|
|
42
|
+
如果检测到 `~/.rcc/codex-samples`,脚本会提示可以运行
|
|
43
43
|
`node scripts/mock-provider/capture-from-configs.mjs` 将真实请求转成 mock 回放样本。
|
|
44
|
-
该命令会根据本地 `~/.
|
|
45
|
-
`~/.
|
|
44
|
+
该命令会根据本地 `~/.rcc/provider/**/config*.json` 与
|
|
45
|
+
`~/.rcc/golden_samples/new/**` 生成新的 `samples/mock-provider/...`
|
|
46
46
|
目录,并刷新 `_registry/index.json`。随后再次执行 `npm run test:golden` 即可把
|
|
47
47
|
“真实” provider 行为也纳入回归。
|
|
48
48
|
|
|
49
49
|
### 如何补充新的 provider 样本
|
|
50
50
|
|
|
51
51
|
1. 在本地 `routecodex` 服务上真实跑通一次请求,确认
|
|
52
|
-
`~/.
|
|
52
|
+
`~/.rcc/golden_samples/new/<entry>/<provider>/request.sample.json` 已生成。
|
|
53
53
|
2. 运行 `npm run sync:ci-goldens`(或直接执行
|
|
54
54
|
`node scripts/tools/sync-ci-goldens.mjs --entry <entry> --provider <id>`)把刚产生的
|
|
55
55
|
样本复制到 `samples/ci-goldens/<entry>/<provider>/`,脚本会自动生成/刷新 `meta.json`
|
|
56
56
|
并用 `source: "ci-goldens"` 标识。
|
|
57
57
|
3. 运行 `npm run test:golden`,确认新的样本能够被
|
|
58
58
|
`capture-provider-goldens.mjs` 消费并写入
|
|
59
|
-
`~/.
|
|
59
|
+
`~/.rcc/golden_samples/provider_golden_samples/<provider>/<entry>/`。
|
|
60
60
|
4. 如需把同一份请求加入 mock provider 回放,可执行
|
|
61
61
|
`node scripts/mock-provider/capture-from-configs.mjs --filter <providerId>`,
|
|
62
62
|
该命令会复用刚才的 `request.sample` 生成 `samples/mock-provider/...` 记录。
|
|
63
63
|
|
|
64
64
|
> 注意:CI goldens 只存储对齐 chat 入口输入字段的最终 JSON,不包含任何密钥或本地路径。
|
|
65
65
|
> 如需测试特定机密字段,请在本地运行 `capture-provider-goldens` 并利用私有
|
|
66
|
-
> `~/.
|
|
66
|
+
> `~/.rcc/golden_samples/new/**`,不要把敏感样本提交到仓库。
|
|
@@ -19,7 +19,7 @@ This document describes a passive monitoring and replay system for RouteCodex.
|
|
|
19
19
|
- ReplayExecutor (future): replay `response.json` or `stream-events.jsonl`
|
|
20
20
|
|
|
21
21
|
## Storage Layout
|
|
22
|
-
Root: `~/.
|
|
22
|
+
Root: `~/.rcc/monitor/sessions/<YYYYMMDD>/<protocol>/<reqId>/`
|
|
23
23
|
|
|
24
24
|
- `meta.json` — meta + routing snapshot + redaction flags
|
|
25
25
|
- `request.json` — original input (protocol‑native)
|
|
@@ -45,7 +45,7 @@ Root: `~/.routecodex/monitor/sessions/<YYYYMMDD>/<protocol>/<reqId>/`
|
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
47
|
npm run build
|
|
48
|
-
node scripts/virtualrouter-dry-run-matrix.mjs --config ~/.
|
|
48
|
+
node scripts/virtualrouter-dry-run-matrix.mjs --config ~/.rcc/config/verified_0.46.32/multi-provider.json
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
## Integration Plan (Phased)
|
|
@@ -16,28 +16,28 @@ The `alias` part is optional and ignored by the system - it's just for your refe
|
|
|
16
16
|
|
|
17
17
|
## Automatic Discovery
|
|
18
18
|
|
|
19
|
-
The system automatically scans `~/.
|
|
19
|
+
The system automatically scans `~/.rcc/auth/` for token files matching the pattern and creates multiple provider instances. No manual configuration needed.
|
|
20
20
|
|
|
21
21
|
## Authentication Commands
|
|
22
22
|
|
|
23
23
|
### Authenticate specific token:
|
|
24
24
|
```bash
|
|
25
25
|
# Token 1
|
|
26
|
-
IFLOW_TOKEN_FILE="$HOME/.
|
|
26
|
+
IFLOW_TOKEN_FILE="$HOME/.rcc/auth/iflow-oauth-1-primary.json" node scripts/auth-iflow-token-direct.mjs
|
|
27
27
|
|
|
28
28
|
# Token 2
|
|
29
|
-
IFLOW_TOKEN_FILE="$HOME/.
|
|
29
|
+
IFLOW_TOKEN_FILE="$HOME/.rcc/auth/iflow-oauth-2-backup.json" node scripts/auth-iflow-token-direct.mjs
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
### Manual authentication (if device flow fails):
|
|
33
33
|
```bash
|
|
34
|
-
IFLOW_TOKEN_FILE="$HOME/.
|
|
34
|
+
IFLOW_TOKEN_FILE="$HOME/.rcc/auth/iflow-oauth-1-primary.json" node scripts/auth-iflow-manual.mjs
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
### Delete and re-authenticate:
|
|
38
38
|
```bash
|
|
39
|
-
rm ~/.
|
|
40
|
-
IFLOW_TOKEN_FILE="$HOME/.
|
|
39
|
+
rm ~/.rcc/auth/iflow-oauth-1-primary.json
|
|
40
|
+
IFLOW_TOKEN_FILE="$HOME/.rcc/auth/iflow-oauth-1-primary.json" node scripts/auth-iflow-token-direct.mjs
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
## How It Works
|
|
@@ -118,7 +118,7 @@ const provider = new ChatHttpProvider(iflowConfig, dependencies);
|
|
|
118
118
|
await provider.initialize(); // → 打开浏览器 → 授权 → 获取 API Key
|
|
119
119
|
|
|
120
120
|
// 3. 后续使用直接读取本地 token 文件
|
|
121
|
-
// ~/.
|
|
121
|
+
// ~/.rcc/auth/iflow-oauth.json 包含:
|
|
122
122
|
// {
|
|
123
123
|
// "access_token": "...",
|
|
124
124
|
// "refresh_token": "...",
|
|
@@ -102,7 +102,7 @@ const provider = new ChatHttpProvider(iflowConfig, dependencies);
|
|
|
102
102
|
await provider.initialize(); // → 打开浏览器 → 授权 → 获取 API Key
|
|
103
103
|
|
|
104
104
|
// 3. 后续使用直接读取本地 token 文件
|
|
105
|
-
// ~/.
|
|
105
|
+
// ~/.rcc/auth/iflow-oauth.json 包含:
|
|
106
106
|
// {
|
|
107
107
|
// "access_token": "...",
|
|
108
108
|
// "refresh_token": "...",
|
|
@@ -140,7 +140,7 @@ const response = await provider.processIncoming({
|
|
|
140
140
|
|
|
141
141
|
```bash
|
|
142
142
|
# 测试 OAuth 流程
|
|
143
|
-
node -e "const { TokenFileAuthProvider } = require('./dist/providers/auth/tokenfile-auth.js'); const provider = new TokenFileAuthProvider({type: 'oauth', tokenFile: '~/.
|
|
143
|
+
node -e "const { TokenFileAuthProvider } = require('./dist/providers/auth/tokenfile-auth.js'); const provider = new TokenFileAuthProvider({type: 'oauth', tokenFile: '~/.rcc/auth/iflow-oauth.json'}); provider.initialize().then(() => console.log('✅ iFlow OAuth working:', provider.getStatus()));"
|
|
144
144
|
|
|
145
145
|
# 测试 API Key 提取
|
|
146
146
|
node -e "const { fetchIFlowUserInfo } = require('./dist/providers/auth/iflow-userinfo-helper.js'); fetchIFlowUserInfo('test_token').catch(e => console.log('✅ Error handling working:', e.message));"
|