@jsonstudio/rcc 0.90.814 → 0.90.876
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 +8 -0
- package/configsamples/provider-default/ali-coding-plan/config.v2.json +76 -0
- package/configsamples/provider-default/antigravity/config.v2.json +142 -0
- package/configsamples/provider-default/ark-coding-plan/config.v2.json +64 -0
- package/configsamples/provider-default/crs/config.v2.json +54 -0
- package/configsamples/provider-default/deepseek-web/config.v2.json +56 -0
- package/configsamples/provider-default/gemini/config.v2.json +43 -0
- package/configsamples/provider-default/gemini-cli/config.v2.json +45 -0
- package/configsamples/provider-default/gemini-native/config.v2.json +208 -0
- package/configsamples/provider-default/glm/config.v2.json +33 -0
- package/configsamples/provider-default/glm-anthropic/config.v2.json +29 -0
- package/configsamples/provider-default/kimi/config.v2.json +25 -0
- package/configsamples/provider-default/lmstudio/config.v2.json +79 -0
- package/configsamples/provider-default/lmstudio-proxy/config.v2.json +78 -0
- package/configsamples/provider-default/manifest.json +31 -0
- package/configsamples/provider-default/meituan/config.v2.json +20 -0
- package/configsamples/provider-default/mimo/config.v2.json +26 -0
- package/configsamples/provider-default/modelscope/config.v2.json +81 -0
- package/configsamples/provider-default/my-openai/config.v2.json +20 -0
- package/configsamples/provider-default/nvidia/config.v2.json +32 -0
- package/configsamples/provider-default/opencode-zen-free/config.v2.json +56 -0
- package/configsamples/provider-default/openrouter/config.v2.json +210 -0
- package/configsamples/provider-default/qwen/config.v2.json +38 -0
- package/configsamples/provider-default/qwenchat/config.v2.json +53 -0
- package/configsamples/provider-default/tab/config.v2.json +26 -0
- package/configsamples/provider-default/tabglm/config.v2.json +77 -0
- package/dist/build-info.js +2 -2
- package/dist/cli/commands/config.d.ts +5 -0
- package/dist/cli/commands/config.js +369 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/examples.js +3 -0
- package/dist/cli/commands/examples.js.map +1 -1
- package/dist/cli/commands/init.js +25 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/launcher-kernel.js +122 -46
- package/dist/cli/commands/launcher-kernel.js.map +1 -1
- package/dist/cli/commands/start.js +60 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/config/bundled-provider-pack.d.ts +20 -0
- package/dist/cli/config/bundled-provider-pack.js +146 -0
- package/dist/cli/config/bundled-provider-pack.js.map +1 -0
- package/dist/cli/register/status-config-commands.d.ts +2 -0
- package/dist/cli/register/status-config-commands.js.map +1 -1
- package/dist/cli.js +81 -28
- package/dist/cli.js.map +1 -1
- package/dist/debug/snapshot-store.js +2 -1
- package/dist/debug/snapshot-store.js.map +1 -1
- package/dist/index.js +23 -14
- package/dist/index.js.map +1 -1
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js +1 -1
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js.map +1 -1
- package/dist/manager/quota/provider-quota-center.js +1 -1
- package/dist/manager/quota/provider-quota-center.js.map +1 -1
- package/dist/manager/storage/file-store.js +10 -0
- package/dist/manager/storage/file-store.js.map +1 -1
- package/dist/modules/llmswitch/bridge/snapshot-recorder-runtime.js +18 -1
- package/dist/modules/llmswitch/bridge/snapshot-recorder-runtime.js.map +1 -1
- package/dist/modules/llmswitch/bridge/snapshot-recorder.js +132 -51
- package/dist/modules/llmswitch/bridge/snapshot-recorder.js.map +1 -1
- package/dist/provider-sdk/provider-runtime-inference.js +2 -2
- package/dist/provider-sdk/provider-runtime-inference.js.map +1 -1
- package/dist/providers/auth/deepseek-account-token-acquirer.js +32 -3
- package/dist/providers/auth/deepseek-account-token-acquirer.js.map +1 -1
- package/dist/providers/core/api/provider-types.d.ts +11 -0
- package/dist/providers/core/config/service-profiles.js +1 -1
- package/dist/providers/core/runtime/deepseek-http-provider.d.ts +2 -0
- package/dist/providers/core/runtime/deepseek-http-provider.js +31 -1
- package/dist/providers/core/runtime/deepseek-http-provider.js.map +1 -1
- package/dist/providers/core/runtime/qwenchat-http-provider-helpers.d.ts +3 -2
- package/dist/providers/core/runtime/qwenchat-http-provider-helpers.js +513 -96
- package/dist/providers/core/runtime/qwenchat-http-provider-helpers.js.map +1 -1
- package/dist/providers/core/runtime/standard-tool-text-harvest.d.ts +8 -0
- package/dist/providers/core/runtime/standard-tool-text-harvest.js +24 -0
- package/dist/providers/core/runtime/standard-tool-text-harvest.js.map +1 -0
- package/dist/providers/core/runtime/standard-tool-text-request-transform.d.ts +4 -1
- package/dist/providers/core/runtime/standard-tool-text-request-transform.js +129 -3
- package/dist/providers/core/runtime/standard-tool-text-request-transform.js.map +1 -1
- package/dist/providers/core/utils/snapshot-writer.js +5 -2
- package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
- package/dist/providers/profile/provider-profile-loader.js +52 -1
- package/dist/providers/profile/provider-profile-loader.js.map +1 -1
- package/dist/providers/profile/provider-profile.d.ts +3 -0
- package/dist/server/handlers/handler-response-utils.js +1 -0
- package/dist/server/handlers/handler-response-utils.js.map +1 -1
- package/dist/server/handlers/images-handler.d.ts +9 -0
- package/dist/server/handlers/images-handler.js +258 -0
- package/dist/server/handlers/images-handler.js.map +1 -0
- package/dist/server/handlers/types.d.ts +7 -0
- package/dist/server/runtime/http-server/antigravity-startup-tasks.d.ts +3 -0
- package/dist/server/runtime/http-server/antigravity-startup-tasks.js +16 -0
- package/dist/server/runtime/http-server/antigravity-startup-tasks.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.js +3 -18
- package/dist/server/runtime/http-server/daemon-admin/auth-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.d.ts +7 -0
- package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.js +17 -0
- package/dist/server/runtime/http-server/daemon-admin/providers-handler-utils.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +50 -17
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin-routes.js +32 -2
- package/dist/server/runtime/http-server/daemon-admin-routes.js.map +1 -1
- package/dist/server/runtime/http-server/executor/provider-response-converter.js +42 -13
- package/dist/server/runtime/http-server/executor/provider-response-converter.js.map +1 -1
- package/dist/server/runtime/http-server/executor/provider-response-utils.js +41 -3
- package/dist/server/runtime/http-server/executor/provider-response-utils.js.map +1 -1
- package/dist/server/runtime/http-server/executor/usage-aggregator.js +7 -7
- package/dist/server/runtime/http-server/executor/usage-aggregator.js.map +1 -1
- package/dist/server/runtime/http-server/executor/usage-logger.d.ts +9 -0
- package/dist/server/runtime/http-server/executor/usage-logger.js +35 -2
- package/dist/server/runtime/http-server/executor/usage-logger.js.map +1 -1
- package/dist/server/runtime/http-server/executor-metadata.js +12 -4
- package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
- package/dist/server/runtime/http-server/executor-pipeline.js +24 -15
- package/dist/server/runtime/http-server/executor-pipeline.js.map +1 -1
- package/dist/server/runtime/http-server/executor-provider.d.ts +6 -1
- package/dist/server/runtime/http-server/executor-provider.js +137 -5
- package/dist/server/runtime/http-server/executor-provider.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-bootstrap.js +6 -0
- package/dist/server/runtime/http-server/http-server-bootstrap.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-lifecycle.js +23 -15
- package/dist/server/runtime/http-server/http-server-lifecycle.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-runtime-providers.js +14 -4
- package/dist/server/runtime/http-server/http-server-runtime-providers.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-runtime-setup.js +83 -1
- package/dist/server/runtime/http-server/http-server-runtime-setup.js.map +1 -1
- package/dist/server/runtime/http-server/hub-shadow-compare.js +2 -41
- package/dist/server/runtime/http-server/hub-shadow-compare.js.map +1 -1
- package/dist/server/runtime/http-server/provider-routing-scope.d.ts +9 -0
- package/dist/server/runtime/http-server/provider-routing-scope.js +20 -0
- package/dist/server/runtime/http-server/provider-routing-scope.js.map +1 -0
- package/dist/server/runtime/http-server/provider-traffic-governor.d.ts +67 -0
- package/dist/server/runtime/http-server/provider-traffic-governor.js +467 -0
- package/dist/server/runtime/http-server/provider-traffic-governor.js.map +1 -0
- package/dist/server/runtime/http-server/request-executor.d.ts +8 -0
- package/dist/server/runtime/http-server/request-executor.js +446 -21
- package/dist/server/runtime/http-server/request-executor.js.map +1 -1
- package/dist/server/runtime/http-server/routes.js +13 -0
- package/dist/server/runtime/http-server/routes.js.map +1 -1
- package/dist/server/runtime/http-server/session-client-registry.js +30 -4
- package/dist/server/runtime/http-server/session-client-registry.js.map +1 -1
- package/dist/server/runtime/http-server/session-client-route-utils.d.ts +7 -0
- package/dist/server/runtime/http-server/session-client-route-utils.js +38 -0
- package/dist/server/runtime/http-server/session-client-route-utils.js.map +1 -1
- package/dist/server/runtime/http-server/session-client-routes.js +12 -2
- package/dist/server/runtime/http-server/session-client-routes.js.map +1 -1
- package/dist/server/utils/request-id-manager.js +42 -5
- package/dist/server/utils/request-id-manager.js.map +1 -1
- package/dist/server/utils/stage-logger.d.ts +1 -0
- package/dist/server/utils/stage-logger.js +27 -0
- package/dist/server/utils/stage-logger.js.map +1 -1
- package/dist/utils/errorsamples.js +3 -1
- package/dist/utils/errorsamples.js.map +1 -1
- package/dist/utils/sensitive-redaction.d.ts +1 -0
- package/dist/utils/sensitive-redaction.js +122 -0
- package/dist/utils/sensitive-redaction.js.map +1 -0
- package/dist/utils/snapshot-writer.js +162 -2
- package/dist/utils/snapshot-writer.js.map +1 -1
- package/docs/INSTALLATION_AND_QUICKSTART.md +14 -1
- package/docs/PORTS.md +12 -0
- package/docs/lmstudio-tool-calling.md +25 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/qwenchat-web-request.d.ts +3 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/compat/actions/qwenchat-web-request.js +62 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-qwenchat-web.json +47 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/node-support.js +5 -2
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/operation-table/operation-table-runner.js +68 -7
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/operation-table/semantic-mappers/anthropic-mapper-from-chat.js +138 -3
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-chat-process-request-utils.js +24 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-execute-chat-process-entry.js +7 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-execute-request-stage.js +7 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-heavy-input-fastpath.d.ts +24 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-heavy-input-fastpath.js +203 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline-route-and-outbound.js +17 -12
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-stage-timing.d.ts +11 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-stage-timing.js +82 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.js +47 -14
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/index.js +43 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/client-remap-protocol-switch.js +222 -19
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/policy/policy-engine.js +2 -2
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/process/chat-process-pending-tool-sync.js +24 -7
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/response/provider-response.js +90 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/snapshot-recorder.d.ts +1 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/snapshot-recorder.js +252 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge/utils.js +5 -3
- package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge.js +44 -4
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/anthropic-message-utils-openai-request.d.ts +3 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/anthropic-message-utils-openai-request.js +20 -23
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-governor.js +68 -30
- package/node_modules/@jsonstudio/llms/dist/conversion/snapshot-utils.js +194 -10
- package/node_modules/@jsonstudio/llms/dist/native/router_hotpath_napi.node +0 -0
- package/node_modules/@jsonstudio/llms/dist/quota/quota-state.js +2 -2
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine/routing-state/store.js +35 -2
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine.js +9 -9
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/sticky-session-store.js +104 -18
- package/node_modules/@jsonstudio/llms/dist/servertool/engine.js +79 -32
- package/node_modules/@jsonstudio/llms/dist/servertool/handlers/vision.js +49 -0
- package/node_modules/@jsonstudio/llms/dist/servertool/pending-session.js +48 -2
- package/node_modules/@jsonstudio/llms/dist/servertool/server-side-tools.js +14 -1
- package/node_modules/@jsonstudio/llms/dist/servertool/types.d.ts +1 -0
- package/node_modules/@jsonstudio/llms/package.json +1 -1
- package/node_modules/ajv/dist/compile/jtd/serialize.js +9 -2
- package/node_modules/ajv/dist/compile/jtd/serialize.js.map +1 -1
- package/node_modules/ajv/dist/core.d.ts +1 -0
- package/node_modules/ajv/dist/core.js.map +1 -1
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js +13 -4
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -1
- package/node_modules/ajv/lib/compile/jtd/serialize.ts +13 -2
- package/node_modules/ajv/lib/core.ts +1 -0
- package/node_modules/ajv/lib/vocabularies/validation/pattern.ts +15 -4
- package/node_modules/ajv/package.json +2 -1
- package/package.json +15 -10
- package/scripts/ci/repo-sanity.mjs +23 -2
- package/scripts/ci/secrets-check.mjs +48 -0
- package/scripts/ci/silent-failure-audit.mjs +192 -0
- package/scripts/mock-provider/run-regressions.mjs +1 -0
- package/scripts/monitor/memory-guard.mjs +207 -0
- package/scripts/pack-mode.mjs +32 -36
- package/scripts/publish-rcc.mjs +38 -60
- package/scripts/tests/apply-patch-loop.mjs +1 -0
- package/scripts/tests/blackbox-rcc-vs-routecodex-antigravity.mjs +2 -0
- package/scripts/tools-dev/responses-debug-client/src/index.ts +8 -3
- package/scripts/verify-e2e-toolcall.mjs +1 -0
- package/scripts/verify-install-e2e.mjs +2 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
const REDACTED = '[REDACTED]';
|
|
2
|
+
const MAX_DEPTH = 20;
|
|
3
|
+
const SENSITIVE_KEYS = new Set([
|
|
4
|
+
'authorization',
|
|
5
|
+
'proxyauthorization',
|
|
6
|
+
'xapikey',
|
|
7
|
+
'apikey',
|
|
8
|
+
'apikeyvalue',
|
|
9
|
+
'apikeyheader',
|
|
10
|
+
'api_key',
|
|
11
|
+
'api-key',
|
|
12
|
+
'access_token',
|
|
13
|
+
'accesstoken',
|
|
14
|
+
'refresh_token',
|
|
15
|
+
'refreshtoken',
|
|
16
|
+
'id_token',
|
|
17
|
+
'idtoken',
|
|
18
|
+
'sessiontoken',
|
|
19
|
+
'tokenvalue',
|
|
20
|
+
'bearertoken',
|
|
21
|
+
'password',
|
|
22
|
+
'passwd',
|
|
23
|
+
'passcode',
|
|
24
|
+
'secret',
|
|
25
|
+
'clientsecret',
|
|
26
|
+
'client_secret',
|
|
27
|
+
'cookie',
|
|
28
|
+
'setcookie'
|
|
29
|
+
]);
|
|
30
|
+
function normalizeKey(key) {
|
|
31
|
+
return String(key || '')
|
|
32
|
+
.trim()
|
|
33
|
+
.toLowerCase()
|
|
34
|
+
.replace(/[^a-z0-9_]/g, '');
|
|
35
|
+
}
|
|
36
|
+
function isSensitiveKey(key) {
|
|
37
|
+
const normalized = normalizeKey(key);
|
|
38
|
+
if (!normalized) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
if (SENSITIVE_KEYS.has(normalized)) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
return normalized.endsWith('token') && normalized !== 'tokenfile';
|
|
45
|
+
}
|
|
46
|
+
function isSafeSecretReference(value) {
|
|
47
|
+
const trimmed = String(value || '').trim();
|
|
48
|
+
if (!trimmed) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
if (trimmed.startsWith('authfile-')) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
if (/^\$\{[A-Z0-9_]+\}$/i.test(trimmed)) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
if (/^[A-Z][A-Z0-9_]+$/.test(trimmed)) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
function maskSecretValue(value) {
|
|
63
|
+
const trimmed = String(value || '').trim();
|
|
64
|
+
if (!trimmed) {
|
|
65
|
+
return REDACTED;
|
|
66
|
+
}
|
|
67
|
+
return `${REDACTED}:${trimmed.length}`;
|
|
68
|
+
}
|
|
69
|
+
function redactEmbeddedSecrets(text) {
|
|
70
|
+
let out = String(text || '');
|
|
71
|
+
out = out.replace(/(\bBearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi, '$1[REDACTED]');
|
|
72
|
+
out = out.replace(/\bsk-[A-Za-z0-9]{12,}\b/g, 'sk-[REDACTED]');
|
|
73
|
+
out = out.replace(/(\bapi[_-]?key\b\s*[:=]\s*)(["']?)[^"'\s,;]+(\2)/gi, '$1$2[REDACTED]$3');
|
|
74
|
+
out = out.replace(/(\bpassword\b\s*[:=]\s*)(["']?)[^"'\s,;]+(\2)/gi, '$1$2[REDACTED]$3');
|
|
75
|
+
out = out.replace(/(\bcookie\b\s*[:=]\s*)(["']?)[^"'\n]+(\2)/gi, '$1$2[REDACTED]$3');
|
|
76
|
+
return out;
|
|
77
|
+
}
|
|
78
|
+
function redactByKey(value) {
|
|
79
|
+
if (typeof value === 'string') {
|
|
80
|
+
if (isSafeSecretReference(value)) {
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
return maskSecretValue(value);
|
|
84
|
+
}
|
|
85
|
+
if (value == null) {
|
|
86
|
+
return REDACTED;
|
|
87
|
+
}
|
|
88
|
+
if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {
|
|
89
|
+
return REDACTED;
|
|
90
|
+
}
|
|
91
|
+
return REDACTED;
|
|
92
|
+
}
|
|
93
|
+
function redactInternal(value, state, depth, keyHint) {
|
|
94
|
+
if (depth > MAX_DEPTH) {
|
|
95
|
+
return '[TRUNCATED_DEPTH]';
|
|
96
|
+
}
|
|
97
|
+
if (keyHint && isSensitiveKey(keyHint)) {
|
|
98
|
+
return redactByKey(value);
|
|
99
|
+
}
|
|
100
|
+
if (typeof value === 'string') {
|
|
101
|
+
return redactEmbeddedSecrets(value);
|
|
102
|
+
}
|
|
103
|
+
if (!value || typeof value !== 'object') {
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
if (state.has(value)) {
|
|
107
|
+
return '[CIRCULAR]';
|
|
108
|
+
}
|
|
109
|
+
state.add(value);
|
|
110
|
+
if (Array.isArray(value)) {
|
|
111
|
+
return value.map((item) => redactInternal(item, state, depth + 1));
|
|
112
|
+
}
|
|
113
|
+
const out = {};
|
|
114
|
+
for (const [key, child] of Object.entries(value)) {
|
|
115
|
+
out[key] = redactInternal(child, state, depth + 1, key);
|
|
116
|
+
}
|
|
117
|
+
return out;
|
|
118
|
+
}
|
|
119
|
+
export function redactSensitiveData(input) {
|
|
120
|
+
return redactInternal(input, new WeakSet(), 0);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=sensitive-redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive-redaction.js","sourceRoot":"","sources":["../../src/utils/sensitive-redaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,133 @@ import path from 'path';
|
|
|
4
4
|
import { resolveRccSnapshotsDirFromEnv } from '../config/user-data-paths.js';
|
|
5
5
|
import { runtimeFlags } from '../runtime/runtime-flags.js';
|
|
6
6
|
let snapshotHookWriterPromise = null;
|
|
7
|
+
const DEFAULT_SERVER_SNAPSHOT_PAYLOAD_MAX_BYTES = 256 * 1024;
|
|
8
|
+
const DEFAULT_SERVER_SNAPSHOT_KEEP_RECENT_FILES = 10;
|
|
9
|
+
function resolveServerSnapshotPayloadMaxBytes() {
|
|
10
|
+
const raw = process.env.ROUTECODEX_SNAPSHOT_PAYLOAD_MAX_BYTES
|
|
11
|
+
?? process.env.RCC_SNAPSHOT_PAYLOAD_MAX_BYTES
|
|
12
|
+
?? '';
|
|
13
|
+
const parsed = Number.parseInt(String(raw).trim(), 10);
|
|
14
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
15
|
+
return parsed;
|
|
16
|
+
}
|
|
17
|
+
return DEFAULT_SERVER_SNAPSHOT_PAYLOAD_MAX_BYTES;
|
|
18
|
+
}
|
|
19
|
+
function resolveServerSnapshotKeepRecentFiles() {
|
|
20
|
+
const raw = process.env.ROUTECODEX_SNAPSHOT_KEEP_RECENT_FILES
|
|
21
|
+
?? process.env.RCC_SNAPSHOT_KEEP_RECENT_FILES
|
|
22
|
+
?? '';
|
|
23
|
+
const parsed = Number.parseInt(String(raw).trim(), 10);
|
|
24
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
25
|
+
return parsed;
|
|
26
|
+
}
|
|
27
|
+
return DEFAULT_SERVER_SNAPSHOT_KEEP_RECENT_FILES;
|
|
28
|
+
}
|
|
29
|
+
function estimateSnapshotPayloadBytes(value, options) {
|
|
30
|
+
const maxBytes = options?.maxBytes ?? Number.POSITIVE_INFINITY;
|
|
31
|
+
const depth = options?.depth ?? 0;
|
|
32
|
+
const seen = options?.seen ?? new Set();
|
|
33
|
+
if (value === null || value === undefined) {
|
|
34
|
+
return 4;
|
|
35
|
+
}
|
|
36
|
+
const valueType = typeof value;
|
|
37
|
+
if (valueType === 'string') {
|
|
38
|
+
return Math.min(maxBytes + 1, value.length * 2 + 2);
|
|
39
|
+
}
|
|
40
|
+
if (valueType === 'number') {
|
|
41
|
+
return 8;
|
|
42
|
+
}
|
|
43
|
+
if (valueType === 'boolean') {
|
|
44
|
+
return 4;
|
|
45
|
+
}
|
|
46
|
+
if (valueType === 'bigint') {
|
|
47
|
+
return String(value).length + 8;
|
|
48
|
+
}
|
|
49
|
+
if (valueType === 'symbol' || valueType === 'function') {
|
|
50
|
+
return 16;
|
|
51
|
+
}
|
|
52
|
+
if (seen.has(value)) {
|
|
53
|
+
return 8;
|
|
54
|
+
}
|
|
55
|
+
seen.add(value);
|
|
56
|
+
if (depth >= 8) {
|
|
57
|
+
return 64;
|
|
58
|
+
}
|
|
59
|
+
let bytes = 0;
|
|
60
|
+
if (Array.isArray(value)) {
|
|
61
|
+
bytes += 2;
|
|
62
|
+
for (const item of value) {
|
|
63
|
+
bytes += estimateSnapshotPayloadBytes(item, {
|
|
64
|
+
maxBytes: Math.max(0, maxBytes - bytes),
|
|
65
|
+
depth: depth + 1,
|
|
66
|
+
seen
|
|
67
|
+
});
|
|
68
|
+
if (bytes > maxBytes) {
|
|
69
|
+
return maxBytes + 1;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return bytes;
|
|
73
|
+
}
|
|
74
|
+
if (value && typeof value === 'object') {
|
|
75
|
+
bytes += 2;
|
|
76
|
+
for (const [key, child] of Object.entries(value)) {
|
|
77
|
+
bytes += key.length * 2 + 4;
|
|
78
|
+
bytes += estimateSnapshotPayloadBytes(child, {
|
|
79
|
+
maxBytes: Math.max(0, maxBytes - bytes),
|
|
80
|
+
depth: depth + 1,
|
|
81
|
+
seen
|
|
82
|
+
});
|
|
83
|
+
if (bytes > maxBytes) {
|
|
84
|
+
return maxBytes + 1;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return bytes;
|
|
88
|
+
}
|
|
89
|
+
return 16;
|
|
90
|
+
}
|
|
91
|
+
function summarizeSnapshotPayload(value) {
|
|
92
|
+
if (Array.isArray(value)) {
|
|
93
|
+
return {
|
|
94
|
+
type: 'array',
|
|
95
|
+
length: value.length,
|
|
96
|
+
sampleTypes: value.slice(0, 8).map((item) => typeof item)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (value && typeof value === 'object') {
|
|
100
|
+
const record = value;
|
|
101
|
+
const keys = Object.keys(record);
|
|
102
|
+
return {
|
|
103
|
+
type: 'object',
|
|
104
|
+
keyCount: keys.length,
|
|
105
|
+
keys: keys.slice(0, 24)
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
if (typeof value === 'string') {
|
|
109
|
+
return {
|
|
110
|
+
type: 'string',
|
|
111
|
+
length: value.length,
|
|
112
|
+
preview: value.length > 160 ? `${value.slice(0, 160)}…` : value
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
type: typeof value,
|
|
117
|
+
value: value ?? null
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function coerceServerSnapshotData(stage, data) {
|
|
121
|
+
const maxBytes = resolveServerSnapshotPayloadMaxBytes();
|
|
122
|
+
const estimatedBytes = estimateSnapshotPayloadBytes(data, { maxBytes: maxBytes + 1 });
|
|
123
|
+
if (estimatedBytes <= maxBytes) {
|
|
124
|
+
return data;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
__snapshot_truncated: true,
|
|
128
|
+
stage,
|
|
129
|
+
maxBytes,
|
|
130
|
+
estimatedBytes,
|
|
131
|
+
summary: summarizeSnapshotPayload(data)
|
|
132
|
+
};
|
|
133
|
+
}
|
|
7
134
|
function logServerSnapshotNonBlockingError(operation, error) {
|
|
8
135
|
const reason = error instanceof Error ? error.message : String(error);
|
|
9
136
|
console.warn(`[server-snapshot] ${operation} failed (non-blocking): ${reason}`);
|
|
@@ -69,6 +196,37 @@ async function writeUniqueFile(dir, baseName, contents) {
|
|
|
69
196
|
const fallback = `${stem}_${Date.now()}_${Math.random().toString(36).slice(2, 8)}${ext}`;
|
|
70
197
|
await fsp.writeFile(path.join(dir, fallback), contents, 'utf-8');
|
|
71
198
|
}
|
|
199
|
+
async function pruneSnapshotFilesKeepRecent(dir, maxFiles) {
|
|
200
|
+
if (!Number.isFinite(maxFiles) || maxFiles <= 0) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const entries = await fsp.readdir(dir, { withFileTypes: true });
|
|
204
|
+
const candidates = entries
|
|
205
|
+
.filter((entry) => entry.isFile() && entry.name.endsWith('.json') && entry.name !== '__runtime.json')
|
|
206
|
+
.map((entry) => entry.name);
|
|
207
|
+
if (candidates.length <= maxFiles) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const filesWithMtime = await Promise.all(candidates.map(async (name) => {
|
|
211
|
+
const fullPath = path.join(dir, name);
|
|
212
|
+
const stat = await fsp.stat(fullPath);
|
|
213
|
+
return {
|
|
214
|
+
name,
|
|
215
|
+
fullPath,
|
|
216
|
+
mtimeMs: Number.isFinite(stat.mtimeMs) ? stat.mtimeMs : 0
|
|
217
|
+
};
|
|
218
|
+
}));
|
|
219
|
+
filesWithMtime.sort((a, b) => b.mtimeMs - a.mtimeMs || a.name.localeCompare(b.name));
|
|
220
|
+
const stale = filesWithMtime.slice(maxFiles);
|
|
221
|
+
await Promise.all(stale.map(async (file) => {
|
|
222
|
+
try {
|
|
223
|
+
await fsp.unlink(file.fullPath);
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// best-effort prune, never block request path
|
|
227
|
+
}
|
|
228
|
+
}));
|
|
229
|
+
}
|
|
72
230
|
async function loadSnapshotHookWriter() {
|
|
73
231
|
if (!snapshotHookWriterPromise) {
|
|
74
232
|
snapshotHookWriterPromise = import('../modules/llmswitch/bridge.js')
|
|
@@ -87,6 +245,7 @@ export async function writeServerSnapshot(options) {
|
|
|
87
245
|
const endpoint = options.entryEndpoint || '/v1/chat/completions';
|
|
88
246
|
const groupRequestId = options.groupRequestId || options.requestId;
|
|
89
247
|
const providerKey = options.providerKey;
|
|
248
|
+
const data = coerceServerSnapshotData(String(options.phase), options.data);
|
|
90
249
|
// 1) 尝试通过 llmswitch-core hooks 写快照(供核心调试使用)
|
|
91
250
|
try {
|
|
92
251
|
const writeSnapshotViaHooks = await loadSnapshotHookWriter();
|
|
@@ -96,7 +255,7 @@ export async function writeServerSnapshot(options) {
|
|
|
96
255
|
requestId: options.requestId,
|
|
97
256
|
groupRequestId,
|
|
98
257
|
providerKey,
|
|
99
|
-
data
|
|
258
|
+
data,
|
|
100
259
|
verbosity: 'verbose'
|
|
101
260
|
});
|
|
102
261
|
}
|
|
@@ -122,9 +281,10 @@ export async function writeServerSnapshot(options) {
|
|
|
122
281
|
version: String(process.env.ROUTECODEX_VERSION || 'dev'),
|
|
123
282
|
buildTime: String(process.env.ROUTECODEX_BUILD_TIME || new Date().toISOString())
|
|
124
283
|
},
|
|
125
|
-
data
|
|
284
|
+
data
|
|
126
285
|
};
|
|
127
286
|
await writeUniqueFile(dir, file, JSON.stringify(payload, null, 2));
|
|
287
|
+
await pruneSnapshotFilesKeepRecent(dir, resolveServerSnapshotKeepRecentFiles());
|
|
128
288
|
}
|
|
129
289
|
catch (error) {
|
|
130
290
|
logServerSnapshotNonBlockingError(`writeLocalSnapshot:${options.phase}`, error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-writer.js","sourceRoot":"","sources":["../../src/utils/snapshot-writer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snapshot-writer.js","sourceRoot":"","sources":["../../src/utils/snapshot-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,12 @@ rcc init
|
|
|
26
26
|
|
|
27
27
|
初始化成功后,`rcc init` 会把内置文档复制到:`~/.rcc/docs`
|
|
28
28
|
|
|
29
|
+
如果你希望一次性解压内置的脱敏 provider 模板到 `~/.rcc/provider`(便于后续直接填 key / tokenFile):
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
rcc init default
|
|
33
|
+
```
|
|
34
|
+
|
|
29
35
|
非交互式(CI/脚本):
|
|
30
36
|
|
|
31
37
|
```bash
|
|
@@ -38,11 +44,12 @@ rcc init --providers openai,tab --default-provider tab
|
|
|
38
44
|
rcc init --list-providers
|
|
39
45
|
```
|
|
40
46
|
|
|
41
|
-
生成后你需要把 `apiKey` / `tokenFile` / `cookieFile`
|
|
47
|
+
生成后你需要把 `apiKey` / `tokenFile` / `cookieFile` 按需补齐(脱敏模板会用环境变量占位,例如 `${OPENROUTER_API_KEY}`)。
|
|
42
48
|
|
|
43
49
|
参考配置:
|
|
44
50
|
- `configsamples/config.reference.json`
|
|
45
51
|
- `configsamples/provider/*/config.v1.json`
|
|
52
|
+
- `configsamples/provider-default/*/config.v2.json`
|
|
46
53
|
|
|
47
54
|
## 3) 启动服务器
|
|
48
55
|
|
|
@@ -56,6 +63,12 @@ rcc start
|
|
|
56
63
|
rcc start --config ./config.json
|
|
57
64
|
```
|
|
58
65
|
|
|
66
|
+
离线单模型(例如 LM Studio)建议单独配置并独立端口运行:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
routecodex start --port 5520 --config "/Volumes/extension/.rcc/config.offline.json"
|
|
70
|
+
```
|
|
71
|
+
|
|
59
72
|
## 4) 验证服务可用
|
|
60
73
|
|
|
61
74
|
```bash
|
package/docs/PORTS.md
CHANGED
|
@@ -34,3 +34,15 @@
|
|
|
34
34
|
rcc status
|
|
35
35
|
curl http://127.0.0.1:5555/ready
|
|
36
36
|
```
|
|
37
|
+
|
|
38
|
+
## 离线单模型模式(常用)
|
|
39
|
+
|
|
40
|
+
当你需要把所有主路由收敛到本地模型(例如 LM Studio)时,建议使用单独配置文件(例如 `config.offline.json`)并在独立端口启动:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
routecodex start --port 5520 --config "/Volumes/extension/.rcc/config.offline.json"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
说明:
|
|
47
|
+
- `--port` 优先级高于配置文件端口。
|
|
48
|
+
- 若端口已被非托管进程占用,会直接失败(fail-fast),不会静默抢占。
|
|
@@ -4,6 +4,31 @@
|
|
|
4
4
|
|
|
5
5
|
LM Studio provides comprehensive tool calling functionality that enables Large Language Models (LLMs) to interact with external functions and APIs. All models in LM Studio support at least some degree of tool use, with two levels of support: **Native** and **Default**.
|
|
6
6
|
|
|
7
|
+
## RouteCodex 集成注意(2026-04-04 更新)
|
|
8
|
+
|
|
9
|
+
在 RouteCodex → LM Studio 的 `/v1/responses` 路径下,真实回放曾出现:
|
|
10
|
+
|
|
11
|
+
- `HTTP 400`
|
|
12
|
+
- `type: invalid_request_error`
|
|
13
|
+
- `param: tools.*.type`
|
|
14
|
+
- `code: invalid_string`
|
|
15
|
+
|
|
16
|
+
根因确认(2026-04-04 实测):
|
|
17
|
+
|
|
18
|
+
- LM Studio `/v1/responses` **不接受** chat-style 嵌套工具形状
|
|
19
|
+
`{"type":"function","function":{...}}`(会触发 `tools.0.type invalid_string`)。
|
|
20
|
+
- LM Studio `/v1/responses` 接受的是 Responses-style 扁平工具形状
|
|
21
|
+
`{"type":"function","name":"...","parameters":{...}}`。
|
|
22
|
+
- `tool_choice` 需使用字符串枚举(`"none" | "auto" | "required"`),不应传对象。
|
|
23
|
+
|
|
24
|
+
因此在 RouteCodex 侧必须保证:
|
|
25
|
+
|
|
26
|
+
1. `tools[]` 仅保留 **function tools**。
|
|
27
|
+
2. 请求工具统一归一为扁平形状:`{"type":"function","name","parameters",...}`。
|
|
28
|
+
3. 当 `tools` 被清空时,移除 `tool_choice`;当 `tool_choice` 为对象时,归一为 `"required"`。
|
|
29
|
+
|
|
30
|
+
> 结论:LM Studio 文档层面的“工具支持”不代表任意 OpenAI 兼容形状都可透传;RouteCodex 必须做请求侧 schema 约束与形状修复。
|
|
31
|
+
|
|
7
32
|
## Tool Support Levels
|
|
8
33
|
|
|
9
34
|
### Native Tool Use Support
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { buildNativeReqOutboundCompatAdapterContext } from '../../hub/pipeline/compat/native-adapter-context.js';
|
|
2
|
+
import { runReqOutboundStage3CompatWithNative } from '../../../router/virtual-router/engine-selection/native-hub-pipeline-req-outbound-semantics.js';
|
|
3
|
+
const PROFILE = 'chat:qwenchat-web';
|
|
4
|
+
const DEFAULT_PROVIDER_PROTOCOL = 'openai-chat';
|
|
5
|
+
const DEFAULT_ENTRY_ENDPOINT = '/v1/chat/completions';
|
|
6
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
7
|
+
const readBoolean = (value) => {
|
|
8
|
+
if (typeof value === 'boolean') {
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
if (typeof value === 'string') {
|
|
12
|
+
const normalized = value.trim().toLowerCase();
|
|
13
|
+
if (['true', '1', 'yes', 'on'].includes(normalized)) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
if (['false', '0', 'no', 'off'].includes(normalized)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
};
|
|
22
|
+
const readToolProtocol = (value) => {
|
|
23
|
+
if (typeof value !== 'string') {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
const normalized = value.trim().toLowerCase();
|
|
27
|
+
return normalized === 'native' || normalized === 'text' ? normalized : undefined;
|
|
28
|
+
};
|
|
29
|
+
function resolveToolTextNode(adapterContext) {
|
|
30
|
+
const nativeContext = buildNativeReqOutboundCompatAdapterContext(adapterContext);
|
|
31
|
+
const baseNode = isRecord(nativeContext.deepseek) ? nativeContext.deepseek : {};
|
|
32
|
+
const baseProtocol = readToolProtocol(baseNode.toolProtocol);
|
|
33
|
+
const baseFallback = readBoolean(baseNode.textToolFallback);
|
|
34
|
+
const protocol = baseProtocol ?? (baseFallback === undefined ? undefined : baseFallback ? 'text' : 'native');
|
|
35
|
+
return {
|
|
36
|
+
...baseNode,
|
|
37
|
+
strictToolRequired: readBoolean(baseNode.strictToolRequired) ?? true,
|
|
38
|
+
textToolFallback: protocol ? protocol === 'text' : baseFallback ?? true,
|
|
39
|
+
...(protocol ? { toolProtocol: protocol } : {})
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function buildCompatInput(payload, adapterContext) {
|
|
43
|
+
const nativeContext = buildNativeReqOutboundCompatAdapterContext(adapterContext);
|
|
44
|
+
const normalizedContext = {
|
|
45
|
+
...nativeContext,
|
|
46
|
+
compatibilityProfile: PROFILE,
|
|
47
|
+
providerProtocol: nativeContext.providerProtocol ?? adapterContext?.providerProtocol ?? DEFAULT_PROVIDER_PROTOCOL,
|
|
48
|
+
entryEndpoint: nativeContext.entryEndpoint ?? adapterContext?.entryEndpoint ?? DEFAULT_ENTRY_ENDPOINT,
|
|
49
|
+
deepseek: resolveToolTextNode(adapterContext)
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
payload,
|
|
53
|
+
adapterContext: normalizedContext,
|
|
54
|
+
explicitProfile: PROFILE
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export function applyQwenChatWebRequestTransform(payload, adapterContext) {
|
|
58
|
+
if (!payload || typeof payload !== 'object') {
|
|
59
|
+
return payload;
|
|
60
|
+
}
|
|
61
|
+
return runReqOutboundStage3CompatWithNative(buildCompatInput(payload, adapterContext)).payload;
|
|
62
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "chat:qwenchat-web",
|
|
3
|
+
"protocol": "openai-chat",
|
|
4
|
+
"request": {
|
|
5
|
+
"mappings": [
|
|
6
|
+
{ "action": "snapshot", "phase": "compat-pre" },
|
|
7
|
+
{
|
|
8
|
+
"action": "tool_text_request_guidance",
|
|
9
|
+
"config": {
|
|
10
|
+
"marker": "Tool-call output contract (STRICT)",
|
|
11
|
+
"includeToolNames": true,
|
|
12
|
+
"requireTools": true
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
{ "action": "deepseek_web_request" },
|
|
16
|
+
{ "action": "snapshot", "phase": "compat-post" }
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"response": {
|
|
20
|
+
"mappings": [
|
|
21
|
+
{ "action": "snapshot", "phase": "compat-pre" },
|
|
22
|
+
{
|
|
23
|
+
"action": "deepseek_web_response",
|
|
24
|
+
"config": {
|
|
25
|
+
"textNormalizer": {
|
|
26
|
+
"jsonToolRepair": {
|
|
27
|
+
"toolNameAliases": {
|
|
28
|
+
"shell_command": "exec_command",
|
|
29
|
+
"shell": "exec_command",
|
|
30
|
+
"bash": "exec_command",
|
|
31
|
+
"terminal": "exec_command"
|
|
32
|
+
},
|
|
33
|
+
"argumentAliases": {
|
|
34
|
+
"exec_command": {
|
|
35
|
+
"cmd": ["cmd", "command", "input.command", "script"],
|
|
36
|
+
"command": ["cmd", "command", "input.command", "script"],
|
|
37
|
+
"workdir": ["workdir", "cwd", "input.cwd"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{ "action": "snapshot", "phase": "compat-post" }
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -53,8 +53,11 @@ export async function runHubOutboundConversion(options) {
|
|
|
53
53
|
return payload;
|
|
54
54
|
}
|
|
55
55
|
function maybeCreateStageRecorder(adapterContext, defaultEndpoint) {
|
|
56
|
-
const flag = process.env.ROUTECODEX_HUB_SNAPSHOTS
|
|
57
|
-
|
|
56
|
+
const flag = String(process.env.ROUTECODEX_HUB_SNAPSHOTS ?? process.env.RCC_HUB_SNAPSHOTS ?? '')
|
|
57
|
+
.trim()
|
|
58
|
+
.toLowerCase();
|
|
59
|
+
const enabled = flag === '1' || flag === 'true' || flag === 'yes' || flag === 'on';
|
|
60
|
+
if (!enabled) {
|
|
58
61
|
return undefined;
|
|
59
62
|
}
|
|
60
63
|
const endpoint = defaultEndpoint || adapterContext.entryEndpoint || '/v1/chat/completions';
|