@jsonstudio/rcc 0.90.1 → 0.90.91
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 +1 -1
- package/dist/build-info.js +2 -2
- package/dist/cli/commands/claude.js +3 -8
- package/dist/cli/commands/claude.js.map +1 -1
- package/dist/cli/commands/codex.js +5 -3
- package/dist/cli/commands/codex.js.map +1 -1
- package/dist/cli/commands/launcher/index.d.ts +1 -1
- package/dist/cli/commands/launcher/types.d.ts +1 -1
- package/dist/cli/commands/launcher/utils.d.ts +4 -1
- package/dist/cli/commands/launcher/utils.js +22 -8
- package/dist/cli/commands/launcher/utils.js.map +1 -1
- package/dist/cli/commands/launcher-kernel.d.ts +1 -1
- package/dist/cli/commands/launcher-kernel.js +237 -203
- package/dist/cli/commands/launcher-kernel.js.map +1 -1
- package/dist/cli/commands/{clock-admin.d.ts → session-admin.d.ts} +2 -2
- package/dist/cli/commands/{clock-admin.js → session-admin.js} +17 -17
- package/dist/cli/commands/session-admin.js.map +1 -0
- package/dist/cli/commands/{tmux-inject.d.ts → session-inject.d.ts} +2 -2
- package/dist/cli/commands/{tmux-inject.js → session-inject.js} +12 -12
- package/dist/cli/commands/session-inject.js.map +1 -0
- package/dist/cli/commands/start-utils.d.ts +1 -0
- package/dist/cli/commands/start-utils.js +3 -0
- package/dist/cli/commands/start-utils.js.map +1 -1
- package/dist/cli/commands/start.js +14 -7
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/register/session-admin-command.d.ts +3 -0
- package/dist/cli/register/session-admin-command.js +5 -0
- package/dist/cli/register/session-admin-command.js.map +1 -0
- package/dist/cli/register/session-inject-command.d.ts +3 -0
- package/dist/cli/register/session-inject-command.js +5 -0
- package/dist/cli/register/session-inject-command.js.map +1 -0
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/config/provider-v2-loader.js +18 -3
- package/dist/config/provider-v2-loader.js.map +1 -1
- package/dist/config/routecodex-config-loader.js +136 -26
- package/dist/config/routecodex-config-loader.js.map +1 -1
- package/dist/config/unified-config-paths.js +22 -0
- package/dist/config/unified-config-paths.js.map +1 -1
- package/dist/config/virtual-router-builder.js +1 -6
- package/dist/config/virtual-router-builder.js.map +1 -1
- package/dist/docs/daemon-admin-ui.html +6 -6
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/manager/modules/quota/provider-key-normalization.js +1 -10
- package/dist/manager/modules/quota/provider-key-normalization.js.map +1 -1
- package/dist/manager/modules/quota/provider-quota-daemon.events.js +40 -49
- package/dist/manager/modules/quota/provider-quota-daemon.events.js.map +1 -1
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js +2 -16
- package/dist/manager/modules/quota/provider-quota-daemon.model-backoff.js.map +1 -1
- package/dist/manager/modules/token/index.d.ts +1 -0
- package/dist/manager/modules/token/index.js +6 -1
- package/dist/manager/modules/token/index.js.map +1 -1
- package/dist/manager/types.d.ts +1 -0
- package/dist/modules/llmswitch/bridge/state-integrations.js +1 -1
- package/dist/modules/llmswitch/bridge/state-integrations.js.map +1 -1
- package/dist/providers/auth/oauth-repair-cooldown.js +7 -2
- package/dist/providers/auth/oauth-repair-cooldown.js.map +1 -1
- package/dist/providers/core/config/camoufox-actions.js +11 -2
- package/dist/providers/core/config/camoufox-actions.js.map +1 -1
- package/dist/providers/core/config/camoufox-launcher.js +60 -24
- package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
- package/dist/providers/core/config/service-profiles.js +2 -2
- package/dist/providers/core/config/service-profiles.js.map +1 -1
- package/dist/providers/core/runtime/base-provider-runtime-helpers.js +15 -2
- package/dist/providers/core/runtime/base-provider-runtime-helpers.js.map +1 -1
- package/dist/providers/core/strategies/oauth-device-flow.js +26 -3
- package/dist/providers/core/strategies/oauth-device-flow.js.map +1 -1
- package/dist/providers/core/utils/provider-error-reporter.js +51 -0
- package/dist/providers/core/utils/provider-error-reporter.js.map +1 -1
- package/dist/server/handlers/handler-response-utils.js +3 -6
- package/dist/server/handlers/handler-response-utils.js.map +1 -1
- package/dist/server/handlers/handler-utils.js +14 -8
- package/dist/server/handlers/handler-utils.js.map +1 -1
- package/dist/server/handlers/responses-handler.js +5 -3
- package/dist/server/handlers/responses-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.d.ts +1 -1
- package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.js +5 -5
- package/dist/server/runtime/http-server/daemon-admin/providers-handler-routing-utils.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/routing-policy.d.ts +1 -1
- package/dist/server/runtime/http-server/daemon-admin/routing-policy.js +4 -4
- package/dist/server/runtime/http-server/daemon-admin/routing-policy.js.map +1 -1
- package/dist/server/runtime/http-server/executor/client-injection-flow.js +20 -10
- 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 +54 -17
- package/dist/server/runtime/http-server/executor/provider-response-converter.js.map +1 -1
- package/dist/server/runtime/http-server/executor/provider-runtime-resolver.js +8 -6
- package/dist/server/runtime/http-server/executor/provider-runtime-resolver.js.map +1 -1
- package/dist/server/runtime/http-server/executor/request-retry-helpers.d.ts +1 -1
- package/dist/server/runtime/http-server/executor/request-retry-helpers.js +8 -8
- package/dist/server/runtime/http-server/executor/request-retry-helpers.js.map +1 -1
- package/dist/server/runtime/http-server/executor/retry-engine.d.ts +2 -2
- package/dist/server/runtime/http-server/executor/retry-engine.js +2 -2
- package/dist/server/runtime/http-server/executor/retry-engine.js.map +1 -1
- package/dist/server/runtime/http-server/executor/usage-aggregator.js +5 -2
- package/dist/server/runtime/http-server/executor/usage-aggregator.js.map +1 -1
- package/dist/server/runtime/http-server/executor-metadata.js +57 -77
- package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
- package/dist/server/runtime/http-server/executor-provider.d.ts +1 -0
- package/dist/server/runtime/http-server/executor-provider.js +5 -1
- package/dist/server/runtime/http-server/executor-provider.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-lifecycle.js +2 -1
- package/dist/server/runtime/http-server/http-server-lifecycle.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-runtime-setup.js +1 -1
- package/dist/server/runtime/http-server/http-server-runtime-setup.js.map +1 -1
- package/dist/server/runtime/http-server/http-server-session-daemon.d.ts +6 -0
- package/dist/server/runtime/http-server/{http-server-clock-daemon.js → http-server-session-daemon.js} +80 -73
- package/dist/server/runtime/http-server/http-server-session-daemon.js.map +1 -0
- package/dist/server/runtime/http-server/index.d.ts +11 -11
- package/dist/server/runtime/http-server/index.js +21 -21
- package/dist/server/runtime/http-server/index.js.map +1 -1
- package/dist/server/runtime/http-server/managed-process-probe.js +1 -1
- package/dist/server/runtime/http-server/managed-process-probe.js.map +1 -1
- package/dist/server/runtime/http-server/middleware.js +19 -11
- package/dist/server/runtime/http-server/middleware.js.map +1 -1
- package/dist/server/runtime/http-server/request-executor.js +13 -4
- package/dist/server/runtime/http-server/request-executor.js.map +1 -1
- package/dist/server/runtime/http-server/routes.js +3 -3
- package/dist/server/runtime/http-server/routes.js.map +1 -1
- package/dist/server/runtime/http-server/{clock-client-reaper.d.ts → session-client-reaper.d.ts} +6 -6
- package/dist/server/runtime/http-server/{clock-client-reaper.js → session-client-reaper.js} +23 -23
- package/dist/server/runtime/http-server/session-client-reaper.js.map +1 -0
- package/dist/server/runtime/http-server/{clock-client-registry-utils.d.ts → session-client-registry-utils.d.ts} +10 -10
- package/dist/server/runtime/http-server/{clock-client-registry-utils.js → session-client-registry-utils.js} +3 -3
- package/dist/server/runtime/http-server/session-client-registry-utils.js.map +1 -0
- package/dist/server/runtime/http-server/{clock-client-registry.d.ts → session-client-registry.d.ts} +12 -12
- package/dist/server/runtime/http-server/{clock-client-registry.js → session-client-registry.js} +9 -9
- package/dist/server/runtime/http-server/session-client-registry.js.map +1 -0
- package/dist/server/runtime/http-server/{clock-client-route-utils.d.ts → session-client-route-utils.d.ts} +1 -1
- package/dist/server/runtime/http-server/{clock-client-route-utils.js → session-client-route-utils.js} +4 -4
- package/dist/server/runtime/http-server/session-client-route-utils.js.map +1 -0
- package/dist/server/runtime/http-server/session-client-routes.d.ts +2 -0
- package/dist/server/runtime/http-server/{clock-client-routes.js → session-client-routes.js} +65 -47
- package/dist/server/runtime/http-server/session-client-routes.js.map +1 -0
- package/dist/server/runtime/http-server/session-daemon-inject-config.d.ts +1 -0
- package/dist/server/runtime/http-server/{clock-daemon-inject-config.js → session-daemon-inject-config.js} +2 -2
- package/dist/server/runtime/http-server/session-daemon-inject-config.js.map +1 -0
- package/dist/server/runtime/http-server/{clock-daemon-log-throttle.d.ts → session-daemon-log-throttle.d.ts} +7 -7
- package/dist/server/runtime/http-server/{clock-daemon-log-throttle.js → session-daemon-log-throttle.js} +5 -5
- package/dist/server/runtime/http-server/session-daemon-log-throttle.js.map +1 -0
- package/dist/server/runtime/http-server/{clock-scope-resolution.d.ts → session-scope-resolution.d.ts} +2 -2
- package/dist/server/runtime/http-server/{clock-scope-resolution.js → session-scope-resolution.js} +14 -18
- package/dist/server/runtime/http-server/session-scope-resolution.js.map +1 -0
- package/dist/server/runtime/http-server/stopmessage-scope-rebind.d.ts +8 -0
- package/dist/server/runtime/http-server/stopmessage-scope-rebind.js +29 -0
- package/dist/server/runtime/http-server/stopmessage-scope-rebind.js.map +1 -1
- package/dist/server/runtime/http-server/tmux-session-probe.js +1 -1
- package/dist/server/runtime/http-server/tmux-session-probe.js.map +1 -1
- package/dist/token-daemon/token-daemon.d.ts +2 -0
- package/dist/token-daemon/token-daemon.js +18 -10
- package/dist/token-daemon/token-daemon.js.map +1 -1
- package/dist/utils/log-helpers.js +46 -0
- package/dist/utils/log-helpers.js.map +1 -1
- package/dist/utils/session-client-token.d.ts +4 -0
- package/dist/utils/{clock-client-token.js → session-client-token.js} +19 -24
- package/dist/utils/session-client-token.js.map +1 -0
- package/dist/utils/session-scope-trace.d.ts +11 -0
- package/dist/utils/{clock-scope-trace.js → session-scope-trace.js} +9 -9
- package/dist/utils/session-scope-trace.js.map +1 -0
- package/docs/CLOCK.md +0 -1
- package/docs/PORTS.md +2 -2
- package/docs/ROUTING_POLICY_SCHEMA.md +1 -1
- package/docs/antigravity-routing-contract.md +2 -2
- package/docs/daemon-admin-ui.html +6 -6
- package/docs/{clock-client-daemon-design.md → session-client-daemon-design.md} +34 -34
- package/package.json +3 -3
- package/scripts/compare-responses-sse.mjs +267 -0
- package/scripts/replay-codex-sample.mjs +52 -6
- package/scripts/virtual-router-dryrun.mjs +7 -1
- package/dist/cli/commands/clock-admin.js.map +0 -1
- package/dist/cli/commands/tmux-inject.js.map +0 -1
- package/dist/cli/register/clock-admin-command.d.ts +0 -3
- package/dist/cli/register/clock-admin-command.js +0 -5
- package/dist/cli/register/clock-admin-command.js.map +0 -1
- package/dist/cli/register/tmux-inject-command.d.ts +0 -3
- package/dist/cli/register/tmux-inject-command.js +0 -5
- package/dist/cli/register/tmux-inject-command.js.map +0 -1
- package/dist/server/runtime/http-server/clock-client-reaper.js.map +0 -1
- package/dist/server/runtime/http-server/clock-client-registry-utils.js.map +0 -1
- package/dist/server/runtime/http-server/clock-client-registry.js.map +0 -1
- package/dist/server/runtime/http-server/clock-client-route-utils.js.map +0 -1
- package/dist/server/runtime/http-server/clock-client-routes.d.ts +0 -2
- package/dist/server/runtime/http-server/clock-client-routes.js.map +0 -1
- package/dist/server/runtime/http-server/clock-daemon-inject-config.d.ts +0 -1
- package/dist/server/runtime/http-server/clock-daemon-inject-config.js.map +0 -1
- package/dist/server/runtime/http-server/clock-daemon-log-throttle.js.map +0 -1
- package/dist/server/runtime/http-server/clock-scope-resolution.js.map +0 -1
- package/dist/server/runtime/http-server/http-server-clock-daemon.d.ts +0 -6
- package/dist/server/runtime/http-server/http-server-clock-daemon.js.map +0 -1
- package/dist/utils/clock-client-token.d.ts +0 -4
- package/dist/utils/clock-client-token.js.map +0 -1
- package/dist/utils/clock-scope-trace.d.ts +0 -11
- package/dist/utils/clock-scope-trace.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-helpers.js","sourceRoot":"","sources":["../../src/utils/log-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,iBAAiB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"log-helpers.js","sourceRoot":"","sources":["../../src/utils/log-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function encodeSessionClientApiKey(baseApiKey: string, daemonId: string, sessionScopeId?: string): string;
|
|
2
|
+
export declare function extractSessionClientDaemonIdFromApiKey(value: unknown): string | undefined;
|
|
3
|
+
export declare function extractSessionClientScopeIdFromApiKey(value: unknown): string | undefined;
|
|
4
|
+
export declare function matchesExpectedClientApiKey(providedApiKey: string, expectedApiKey: string): boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
1
|
+
const SESSION_DAEMON_KEY_DELIMITER = '::rcc-sessiond:';
|
|
2
|
+
const SESSION_SCOPE_KEY_DELIMITER = '::rcc-session:';
|
|
3
3
|
function normalizeToken(value) {
|
|
4
4
|
if (typeof value !== 'string') {
|
|
5
5
|
return '';
|
|
@@ -32,49 +32,49 @@ function extractSuffixValue(apiKey, marker) {
|
|
|
32
32
|
return undefined;
|
|
33
33
|
}
|
|
34
34
|
const start = markerIndex + marker.length;
|
|
35
|
-
const nextDaemon = apiKey.indexOf(
|
|
36
|
-
const
|
|
37
|
-
const candidates = [nextDaemon,
|
|
35
|
+
const nextDaemon = apiKey.indexOf(SESSION_DAEMON_KEY_DELIMITER, start);
|
|
36
|
+
const nextScope = apiKey.indexOf(SESSION_SCOPE_KEY_DELIMITER, start);
|
|
37
|
+
const candidates = [nextDaemon, nextScope].filter((entry) => entry >= 0);
|
|
38
38
|
const end = candidates.length > 0 ? Math.min(...candidates) : apiKey.length;
|
|
39
39
|
const value = apiKey.slice(start, end);
|
|
40
40
|
return value || undefined;
|
|
41
41
|
}
|
|
42
|
-
export function
|
|
42
|
+
export function encodeSessionClientApiKey(baseApiKey, daemonId, sessionScopeId) {
|
|
43
43
|
const base = normalizeToken(baseApiKey) || 'rcc-proxy-key';
|
|
44
44
|
const normalizedDaemonId = normalizeDaemonId(daemonId);
|
|
45
|
-
const
|
|
45
|
+
const normalizedScopeId = normalizeTmuxSessionId(sessionScopeId);
|
|
46
46
|
let encoded = base;
|
|
47
47
|
if (normalizedDaemonId) {
|
|
48
|
-
encoded = `${encoded}${
|
|
48
|
+
encoded = `${encoded}${SESSION_DAEMON_KEY_DELIMITER}${normalizedDaemonId}`;
|
|
49
49
|
}
|
|
50
|
-
if (
|
|
51
|
-
encoded = `${encoded}${
|
|
50
|
+
if (normalizedScopeId) {
|
|
51
|
+
encoded = `${encoded}${SESSION_SCOPE_KEY_DELIMITER}${normalizedScopeId}`;
|
|
52
52
|
}
|
|
53
53
|
return encoded;
|
|
54
54
|
}
|
|
55
|
-
export function
|
|
55
|
+
export function extractSessionClientDaemonIdFromApiKey(value) {
|
|
56
56
|
const apiKey = normalizeToken(value);
|
|
57
57
|
if (!apiKey) {
|
|
58
58
|
return undefined;
|
|
59
59
|
}
|
|
60
|
-
const suffix = extractSuffixValue(apiKey,
|
|
60
|
+
const suffix = extractSuffixValue(apiKey, SESSION_DAEMON_KEY_DELIMITER);
|
|
61
61
|
if (!suffix) {
|
|
62
62
|
return undefined;
|
|
63
63
|
}
|
|
64
64
|
const daemonId = normalizeDaemonId(suffix);
|
|
65
65
|
return daemonId || undefined;
|
|
66
66
|
}
|
|
67
|
-
export function
|
|
67
|
+
export function extractSessionClientScopeIdFromApiKey(value) {
|
|
68
68
|
const apiKey = normalizeToken(value);
|
|
69
69
|
if (!apiKey) {
|
|
70
70
|
return undefined;
|
|
71
71
|
}
|
|
72
|
-
const suffix = extractSuffixValue(apiKey,
|
|
72
|
+
const suffix = extractSuffixValue(apiKey, SESSION_SCOPE_KEY_DELIMITER);
|
|
73
73
|
if (!suffix) {
|
|
74
74
|
return undefined;
|
|
75
75
|
}
|
|
76
|
-
const
|
|
77
|
-
return
|
|
76
|
+
const scopeId = normalizeTmuxSessionId(suffix);
|
|
77
|
+
return scopeId || undefined;
|
|
78
78
|
}
|
|
79
79
|
export function matchesExpectedClientApiKey(providedApiKey, expectedApiKey) {
|
|
80
80
|
const provided = normalizeToken(providedApiKey);
|
|
@@ -85,14 +85,9 @@ export function matchesExpectedClientApiKey(providedApiKey, expectedApiKey) {
|
|
|
85
85
|
if (provided === expected) {
|
|
86
86
|
return true;
|
|
87
87
|
}
|
|
88
|
-
if (
|
|
89
|
-
return false;
|
|
90
|
-
}
|
|
91
|
-
const daemonId = extractClockClientDaemonIdFromApiKey(provided);
|
|
92
|
-
if (daemonId) {
|
|
88
|
+
if (provided.startsWith(expected)) {
|
|
93
89
|
return true;
|
|
94
90
|
}
|
|
95
|
-
|
|
96
|
-
return Boolean(tmuxSessionId);
|
|
91
|
+
return false;
|
|
97
92
|
}
|
|
98
|
-
//# sourceMappingURL=
|
|
93
|
+
//# sourceMappingURL=session-client-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-client-token.js","sourceRoot":"","sources":["../../src/utils/session-client-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type SessionScopeTraceMode = 'off' | 'auto' | 'on' | 'verbose';
|
|
2
|
+
export declare function resolveSessionScopeTraceMode(): SessionScopeTraceMode;
|
|
3
|
+
export declare function isSessionScopeTraceEnabled(): boolean;
|
|
4
|
+
export declare function isSessionScopeTraceVerbose(): boolean;
|
|
5
|
+
export declare function shouldTraceSessionScopeByContext(args: {
|
|
6
|
+
endpointOrPath: string;
|
|
7
|
+
userAgent?: string;
|
|
8
|
+
originator?: string;
|
|
9
|
+
hasTurnMetadata?: boolean;
|
|
10
|
+
}): boolean;
|
|
11
|
+
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
function readTraceModeRaw() {
|
|
2
|
-
return String(process.env.
|
|
2
|
+
return String(process.env.ROUTECODEX_SESSION_SCOPE_TRACE ?? process.env.RCC_SESSION_SCOPE_TRACE ?? '')
|
|
3
3
|
.trim()
|
|
4
4
|
.toLowerCase();
|
|
5
5
|
}
|
|
6
|
-
export function
|
|
6
|
+
export function resolveSessionScopeTraceMode() {
|
|
7
7
|
const raw = readTraceModeRaw();
|
|
8
8
|
if (!raw || raw === 'auto' || raw === 'default') {
|
|
9
9
|
return 'auto';
|
|
@@ -19,15 +19,15 @@ export function resolveClockScopeTraceMode() {
|
|
|
19
19
|
}
|
|
20
20
|
return 'auto';
|
|
21
21
|
}
|
|
22
|
-
export function
|
|
23
|
-
const mode =
|
|
22
|
+
export function isSessionScopeTraceEnabled() {
|
|
23
|
+
const mode = resolveSessionScopeTraceMode();
|
|
24
24
|
return mode === 'on' || mode === 'verbose';
|
|
25
25
|
}
|
|
26
|
-
export function
|
|
27
|
-
return
|
|
26
|
+
export function isSessionScopeTraceVerbose() {
|
|
27
|
+
return resolveSessionScopeTraceMode() === 'verbose';
|
|
28
28
|
}
|
|
29
|
-
export function
|
|
30
|
-
const mode =
|
|
29
|
+
export function shouldTraceSessionScopeByContext(args) {
|
|
30
|
+
const mode = resolveSessionScopeTraceMode();
|
|
31
31
|
if (mode === 'off') {
|
|
32
32
|
return false;
|
|
33
33
|
}
|
|
@@ -38,4 +38,4 @@ export function shouldTraceClockScopeByContext(args) {
|
|
|
38
38
|
// auto mode defaults to silent to avoid noisy request-path logging in normal runs.
|
|
39
39
|
return false;
|
|
40
40
|
}
|
|
41
|
-
//# sourceMappingURL=
|
|
41
|
+
//# sourceMappingURL=session-scope-trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-scope-trace.js","sourceRoot":"","sources":["../../src/utils/session-scope-trace.ts"],"names":[],"mappings":"AAEA,SAAS,gBAAgB;IACvB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC;SACnG,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QAC3E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,MAAM,IAAI,GAAG,4BAA4B,EAAE,CAAC;IAC5C,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO,4BAA4B,EAAE,KAAK,SAAS,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,IAKhD;IACC,MAAM,IAAI,GAAG,4BAA4B,EAAE,CAAC;IAC5C,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,IAAI,CAAC;IACV,mFAAmF;IACnF,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/docs/CLOCK.md
CHANGED
package/docs/PORTS.md
CHANGED
|
@@ -19,13 +19,14 @@
|
|
|
19
19
|
|
|
20
20
|
- **严格按配置文件端口启动**(`httpserver.port`)
|
|
21
21
|
- 若端口缺失/非法:`rcc start` 直接失败
|
|
22
|
+
- 也可用 `rcc start --port <port>` 覆盖
|
|
22
23
|
|
|
23
24
|
### `routecodex`(dev worktree)
|
|
24
25
|
|
|
25
26
|
- 默认端口固定为 `5555`
|
|
26
27
|
- 可用环境变量覆盖:
|
|
27
28
|
- `ROUTECODEX_PORT` 或 `RCC_PORT`
|
|
28
|
-
- 也可用 `routecodex start --port <port>`
|
|
29
|
+
- 也可用 `routecodex start --port <port>` 覆盖
|
|
29
30
|
|
|
30
31
|
## 常用排查
|
|
31
32
|
|
|
@@ -33,4 +34,3 @@
|
|
|
33
34
|
rcc status
|
|
34
35
|
curl http://127.0.0.1:5555/ready
|
|
35
36
|
```
|
|
36
|
-
|
|
@@ -20,7 +20,7 @@ for the "standard" execution path; any alternative behavior is considered legacy
|
|
|
20
20
|
cascade into cross-account verification (403 verify) events. Retrying within the same request should be conservative.
|
|
21
21
|
|
|
22
22
|
3) **Alias rotation happens across requests, not within a single request**
|
|
23
|
-
Multi-alias load balancing remains `sticky-queue` for Antigravity, but it is applied **across requests** (via cooldown/health),
|
|
23
|
+
Multi-alias load balancing remains `sticky-queue` for Antigravity, but it is applied **across requests** (via per-providerKey cooldown/health),
|
|
24
24
|
not by hammering all aliases inside one request's retry loop.
|
|
25
25
|
|
|
26
26
|
## Where this is implemented
|
|
@@ -32,6 +32,6 @@ for the "standard" execution path; any alternative behavior is considered legacy
|
|
|
32
32
|
- `sharedmodule/llmswitch-core/src/router/virtual-router/engine-selection/alias-selection.ts`
|
|
33
33
|
- `sharedmodule/llmswitch-core/src/router/virtual-router/engine-selection/tier-selection.ts`
|
|
34
34
|
- `sharedmodule/llmswitch-core/src/router/virtual-router/engine-selection/tier-selection-select.ts`
|
|
35
|
-
- **Capacity-style 429 cooldown (
|
|
35
|
+
- **Capacity-style 429 cooldown (per-providerKey, no alias fan-out)**:
|
|
36
36
|
- `src/manager/modules/quota/provider-quota-daemon.model-backoff.ts`
|
|
37
37
|
- `src/manager/modules/quota/provider-quota-daemon.events.ts`
|
|
@@ -945,8 +945,8 @@
|
|
|
945
945
|
</div>
|
|
946
946
|
|
|
947
947
|
<div class="card" style="box-shadow: none;">
|
|
948
|
-
<p class="section-title">
|
|
949
|
-
<p class="section-sub">
|
|
948
|
+
<p class="section-title">Session daemon bindings</p>
|
|
949
|
+
<p class="section-sub">session daemon registry and heartbeat state used by clock injection.</p>
|
|
950
950
|
<div class="table-wrap">
|
|
951
951
|
<table class="table">
|
|
952
952
|
<thead>
|
|
@@ -2309,7 +2309,7 @@
|
|
|
2309
2309
|
const overviewEl = $("clockOverviewText");
|
|
2310
2310
|
if (!overviewEl) return;
|
|
2311
2311
|
try {
|
|
2312
|
-
const res = await fetch("/daemon/
|
|
2312
|
+
const res = await fetch("/daemon/session/tasks");
|
|
2313
2313
|
if (!res || !res.ok) throw new Error(res ? String(res.status) : "request_failed");
|
|
2314
2314
|
const data = await res.json().catch(() => ({}));
|
|
2315
2315
|
const sessions = data && Array.isArray(data.sessions) ? data.sessions : [];
|
|
@@ -2722,7 +2722,7 @@
|
|
|
2722
2722
|
|
|
2723
2723
|
if (daemonBody) {
|
|
2724
2724
|
if (!records.length) {
|
|
2725
|
-
daemonBody.appendChild(createInfoRow(7, "No
|
|
2725
|
+
daemonBody.appendChild(createInfoRow(7, "No session daemon bindings."));
|
|
2726
2726
|
} else {
|
|
2727
2727
|
for (const rec of records) {
|
|
2728
2728
|
const tr = document.createElement("tr");
|
|
@@ -2762,8 +2762,8 @@
|
|
|
2762
2762
|
try {
|
|
2763
2763
|
const filter = textOf($("clockSessionFilterInput") && $("clockSessionFilterInput").value).trim();
|
|
2764
2764
|
const path = filter
|
|
2765
|
-
? "/daemon/
|
|
2766
|
-
: "/daemon/
|
|
2765
|
+
? "/daemon/session/tasks?sessionId=" + encodeURIComponent(filter)
|
|
2766
|
+
: "/daemon/session/tasks";
|
|
2767
2767
|
const data = await apiFetch(path);
|
|
2768
2768
|
UI.clockSnapshot = data && typeof data === "object" ? data : {};
|
|
2769
2769
|
UI.clockSnapshotUpdatedAt = Date.now();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Session Client Daemon + Private Clock Marker Design (routecodex-119)
|
|
2
2
|
|
|
3
3
|
## 1. Background
|
|
4
4
|
|
|
@@ -49,13 +49,13 @@ We need a controlled path where:
|
|
|
49
49
|
5. **Daemon auth model**
|
|
50
50
|
- Localhost-only access guard for daemon control endpoints.
|
|
51
51
|
|
|
52
|
-
6. **
|
|
52
|
+
6. **Session inject session binding**
|
|
53
53
|
- Daemon routing key is `tmuxSessionId` (tmux session domain), not conversation `sessionId`.
|
|
54
54
|
- Conversation `sessionId` is bound separately to a tmux session in server registry (mapping domain separation).
|
|
55
|
-
- Launcher appends daemon identity suffix to proxied api key (`::rcc-
|
|
56
|
-
- HTTP auth middleware extracts daemon suffix and attaches `x-routecodex-
|
|
55
|
+
- Launcher appends daemon identity suffix to proxied api key (`::rcc-sessiond:<daemonId>`).
|
|
56
|
+
- HTTP auth middleware extracts daemon suffix and attaches `x-routecodex-session-daemon-id` request hint.
|
|
57
57
|
- Executor metadata binds `conversationSessionId -> daemonId/tmuxSessionId` deterministically before due injection tick.
|
|
58
|
-
- `/daemon/
|
|
58
|
+
- `/daemon/session-client/inject` remains strict and never falls back to unrelated alive daemons.
|
|
59
59
|
|
|
60
60
|
## 4. Architecture
|
|
61
61
|
|
|
@@ -64,7 +64,7 @@ We need a controlled path where:
|
|
|
64
64
|
- **Launcher (`rcc codex/claude`)**
|
|
65
65
|
- Detects tmux capability.
|
|
66
66
|
- Starts/attaches client daemon if available.
|
|
67
|
-
- **
|
|
67
|
+
- **Session Client Daemon**
|
|
68
68
|
- Maintains registration + heartbeat with server.
|
|
69
69
|
- Executes `tmux send-keys` for injection + Enter.
|
|
70
70
|
- Self-terminates when parent/client exits.
|
|
@@ -116,19 +116,19 @@ please remind me
|
|
|
116
116
|
|
|
117
117
|
## 6. Server Daemon Control Endpoints (localhost only)
|
|
118
118
|
|
|
119
|
-
- `POST /daemon/
|
|
120
|
-
- `POST /daemon/
|
|
121
|
-
- `POST /daemon/
|
|
122
|
-
- `POST /daemon/
|
|
119
|
+
- `POST /daemon/session-client/register`
|
|
120
|
+
- `POST /daemon/session-client/heartbeat`
|
|
121
|
+
- `POST /daemon/session-client/inject`
|
|
122
|
+
- `POST /daemon/session-client/unregister`
|
|
123
123
|
|
|
124
124
|
Payload fields include session/client type/tmux target/request id/injection text as needed.
|
|
125
125
|
|
|
126
126
|
### 6.1 External injection CLI
|
|
127
127
|
|
|
128
|
-
- Command: `routecodex
|
|
128
|
+
- Command: `routecodex session-inject` / `rcc session-inject`
|
|
129
129
|
- Common usage:
|
|
130
|
-
- `rcc
|
|
131
|
-
- `rcc
|
|
130
|
+
- `rcc session-inject --port 5520 --list`
|
|
131
|
+
- `rcc session-inject --port 5520 --text "hello" --tmux-session-id <tmuxSessionId>`
|
|
132
132
|
- Target resolution rules:
|
|
133
133
|
- Prefer explicit `--tmux-session-id` (or legacy `--session-id` alias);
|
|
134
134
|
- else resolve via `--daemon-id`;
|
|
@@ -169,7 +169,7 @@ To ensure due tasks are actually delivered to the client input surface (not only
|
|
|
169
169
|
- Source of truth: `clock/*.json` under server-scoped `ROUTECODEX_SESSION_DIR`.
|
|
170
170
|
- Runtime config parsing: delegated to llmswitch-core `resolveClockConfig` bridge API.
|
|
171
171
|
- Due reservation: delegated to llmswitch-core `reserveDueTasksForRequest` bridge API.
|
|
172
|
-
- Delivery path: host `
|
|
172
|
+
- Delivery path: host `SessionClientRegistry.inject({ sessionId, ... })`, where `sessionId` can be conversation ID and is resolved to mapped `tmuxSessionId`.
|
|
173
173
|
- Commit rule: call `commitClockReservation` only after successful daemon injection.
|
|
174
174
|
|
|
175
175
|
### 10.1 Lifecycle
|
|
@@ -195,10 +195,10 @@ Fix:
|
|
|
195
195
|
- `sharedmodule/llmswitch-core`: `npm run build` ✅
|
|
196
196
|
- RouteCodex targeted suite (via `npm run jest:run -- --runTestsByPath ...`) ✅
|
|
197
197
|
- `tests/servertool/servertool-clock.spec.ts` (includes new provider pin regression)
|
|
198
|
-
- `tests/server/http-server/
|
|
198
|
+
- `tests/server/http-server/session-client-routes.spec.ts`
|
|
199
199
|
- `tests/server/http-server/hub-policy-injection.spec.ts`
|
|
200
200
|
- `tests/server/http-server/quota-view-injection.spec.ts`
|
|
201
|
-
- `tests/cli/
|
|
201
|
+
- `tests/cli/session-inject-command.spec.ts`
|
|
202
202
|
- `tests/cli/codex-command.spec.ts`
|
|
203
203
|
- `tests/cli/claude-command.spec.ts`
|
|
204
204
|
- `npm run build:dev` ✅
|
|
@@ -212,11 +212,11 @@ Using a temporary server on port `5630` + mock callback daemon:
|
|
|
212
212
|
2. Schedule one due task for `conv_clock_live` in task-store.
|
|
213
213
|
3. Observe callback payload auto-arrival from server loop:
|
|
214
214
|
|
|
215
|
-
- `source: "
|
|
215
|
+
- `source: "session.daemon.inject"`
|
|
216
216
|
- `tmuxSessionId: "rcc_test_tmux"`
|
|
217
217
|
- text includes `[Clock Reminder]` and scheduled task details.
|
|
218
218
|
|
|
219
|
-
4. `/daemon/
|
|
219
|
+
4. `/daemon/session-client/list` shows `lastInjectAtMs` updated.
|
|
220
220
|
|
|
221
221
|
## 13. Submit-key reliability hardening (routecodex-128)
|
|
222
222
|
|
|
@@ -234,13 +234,13 @@ Fix applied in launcher daemon path:
|
|
|
234
234
|
|
|
235
235
|
Validation:
|
|
236
236
|
|
|
237
|
-
- `npm run jest:run -- --runInBand --runTestsByPath tests/cli/codex-command.spec.ts tests/cli/claude-command.spec.ts tests/cli/
|
|
238
|
-
- `npm run jest:run -- --runInBand --runTestsByPath tests/server/http-server/
|
|
237
|
+
- `npm run jest:run -- --runInBand --runTestsByPath tests/cli/codex-command.spec.ts tests/cli/claude-command.spec.ts tests/cli/session-inject-command.spec.ts` ✅
|
|
238
|
+
- `npm run jest:run -- --runInBand --runTestsByPath tests/server/http-server/session-client-routes.spec.ts tests/server/http-server/executor-metadata.spec.ts tests/server/http-server/httpserver-apikey-env-resolution.spec.ts tests/utils/session-client-token.spec.ts` ✅
|
|
239
239
|
- `npx tsc --noEmit` ✅
|
|
240
240
|
|
|
241
241
|
## 14. Precise trigger mode (routecodex-129)
|
|
242
242
|
|
|
243
|
-
|
|
243
|
+
Session daemon delivery now runs in exact due-time mode by default:
|
|
244
244
|
|
|
245
245
|
- host daemon inject loop rewrites effective clock config to `dueWindowMs=0` before reservation;
|
|
246
246
|
- this prevents early-fire behavior from legacy wide due windows in request-driven paths;
|
|
@@ -305,21 +305,21 @@ Cleanup behavior:
|
|
|
305
305
|
|
|
306
306
|
Added management endpoints:
|
|
307
307
|
|
|
308
|
-
- `GET /daemon/
|
|
309
|
-
- `POST /daemon/
|
|
310
|
-
- `PATCH /daemon/
|
|
311
|
-
- `DELETE /daemon/
|
|
312
|
-
- `POST /daemon/
|
|
308
|
+
- `GET /daemon/session/tasks` (list)
|
|
309
|
+
- `POST /daemon/session/tasks` (create)
|
|
310
|
+
- `PATCH /daemon/session/tasks` (update)
|
|
311
|
+
- `DELETE /daemon/session/tasks` (delete one / clear session)
|
|
312
|
+
- `POST /daemon/session/cleanup` (`mode=dead_tmux|unbind`)
|
|
313
313
|
|
|
314
314
|
CLI management command:
|
|
315
315
|
|
|
316
|
-
- `rcc
|
|
317
|
-
- `rcc
|
|
318
|
-
- `rcc
|
|
319
|
-
- `rcc
|
|
320
|
-
- `rcc
|
|
321
|
-
- `rcc
|
|
322
|
-
- `rcc
|
|
316
|
+
- `rcc session-admin --list`
|
|
317
|
+
- `rcc session-admin --create --session-id <sid> --due-at <iso> --task <text> --recurrence interval --every-minutes 5 --max-runs 10`
|
|
318
|
+
- `rcc session-admin --update --session-id <sid> --task-id <tid> --due-at <iso> --task "..."`
|
|
319
|
+
- `rcc session-admin --delete --session-id <sid> --task-id <tid>`
|
|
320
|
+
- `rcc session-admin --clear --session-id <sid>`
|
|
321
|
+
- `rcc session-admin --cleanup-dead-tmux`
|
|
322
|
+
- `rcc session-admin --unbind-session <conversationSessionId> [--clear-tasks]`
|
|
323
323
|
|
|
324
324
|
WebUI management entry:
|
|
325
325
|
|
|
@@ -332,7 +332,7 @@ Clock tool now supports `action=update` (with `taskId` + `items[0]`) so models c
|
|
|
332
332
|
|
|
333
333
|
### 15.6 Trigger precision and reminder guidance
|
|
334
334
|
|
|
335
|
-
|
|
335
|
+
Session daemon inject loop uses exact due matching (`dueWindowMs=0`) to avoid early delivery.
|
|
336
336
|
Reminder payload includes guidance text:
|
|
337
337
|
|
|
338
338
|
- `MANDATORY: if waiting is needed, use the clock tool to schedule wake-up (clock.schedule) now; do not only promise to wait.`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsonstudio/rcc",
|
|
3
|
-
"version": "0.90.
|
|
3
|
+
"version": "0.90.091",
|
|
4
4
|
"description": "Multi-provider OpenAI proxy server with anthropic/responses/chat support (release)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"verify:repo-sanity": "node scripts/ci/repo-sanity.mjs",
|
|
51
51
|
"verify:file-line-limit": "node scripts/ci/check-file-line-limit.mjs",
|
|
52
52
|
"vr:dryrun": "node scripts/virtual-router-dryrun.mjs",
|
|
53
|
-
"test:routing-instructions": "npm run jest:run -- --runTestsByPath tests/token-daemon/token-daemon.auto-refresh-noninteractive.spec.ts tests/token-daemon/token-daemon.refresh-ahead.spec.ts tests/commands/oauth-command.qwen-auto.spec.ts tests/token-daemon/interactive-refresh.spec.ts tests/server/runtime/request-executor.single-attempt.spec.ts tests/server/runtime/executor-provider.retryable.spec.ts tests/server/runtime/http-server/executor/usage-aggregator.spec.ts tests/providers/auth/tokenfile-auth.iflow.spec.ts tests/providers/auth/antigravity-user-agent.unit.test.ts tests/providers/auth/antigravity-fingerprint.unit.test.ts tests/providers/auth/antigravity-warmup.unit.test.ts tests/providers/core/runtime/gemini-cli-http-provider.unit.test.ts tests/providers/core/runtime/deepseek-http-provider.unit.test.ts tests/providers/core/runtime/antigravity-quota-client.unit.test.ts tests/manager/quota/provider-quota-center.spec.ts tests/manager/quota/provider-quota-store.spec.ts tests/manager/quota/quota-manager-refresh.spec.ts tests/manager/quota/provider-quota-daemon-module.spec.ts tests/manager/quota/provider-key-normalization.spec.ts tests/server/http-server/daemon-admin.e2e.spec.ts tests/server/http-server/
|
|
53
|
+
"test:routing-instructions": "npm run jest:run -- --runTestsByPath tests/token-daemon/token-daemon.auto-refresh-noninteractive.spec.ts tests/token-daemon/token-daemon.refresh-ahead.spec.ts tests/commands/oauth-command.qwen-auto.spec.ts tests/token-daemon/interactive-refresh.spec.ts tests/server/runtime/request-executor.single-attempt.spec.ts tests/server/runtime/executor-provider.retryable.spec.ts tests/server/runtime/http-server/executor/usage-aggregator.spec.ts tests/providers/auth/tokenfile-auth.iflow.spec.ts tests/providers/auth/antigravity-user-agent.unit.test.ts tests/providers/auth/antigravity-fingerprint.unit.test.ts tests/providers/auth/antigravity-warmup.unit.test.ts tests/providers/core/runtime/gemini-cli-http-provider.unit.test.ts tests/providers/core/runtime/deepseek-http-provider.unit.test.ts tests/providers/core/runtime/antigravity-quota-client.unit.test.ts tests/manager/quota/provider-quota-center.spec.ts tests/manager/quota/provider-quota-store.spec.ts tests/manager/quota/quota-manager-refresh.spec.ts tests/manager/quota/provider-quota-daemon-module.spec.ts tests/manager/quota/provider-key-normalization.spec.ts tests/server/http-server/daemon-admin.e2e.spec.ts tests/server/http-server/session-client-routes.spec.ts tests/server/http-server/quota-view-injection.spec.ts tests/server/http-server/quota-refresh-triggers.e2e.spec.ts tests/server/http-server/hub-policy-injection.spec.ts tests/server/http-server/session-header-injection.spec.ts tests/server/http-server/session-dir.spec.ts tests/server/handlers/sse-timeout.spec.ts tests/utils/is-direct-execution.test.ts tests/utils/windows-netstat.test.ts tests/servertool/virtual-router-context-fallback.spec.ts tests/servertool/virtual-router-longcontext-fallback.spec.ts tests/servertool/virtual-router-series-cooldown.spec.ts tests/servertool/recursive-detection-guard.spec.ts tests/servertool/routing-instructions.spec.ts tests/servertool/stop-message-sample-replay.spec.ts tests/servertool/stop-message-auto.spec.ts tests/servertool/stopmessage-session-scope.spec.ts tests/servertool/stopmessage-anthropic-stop-sequence.spec.ts tests/servertool/stopmessage-compaction-false-positive.spec.ts tests/servertool/servertool-progress-logging.spec.ts tests/servertool/servertool-clock.spec.ts tests/servertool/antigravity-thought-signature-bootstrap.spec.ts tests/compat/tabglm-claude-code-profile.spec.ts tests/compat/antigravity-thought-signature.spec.ts tests/sharedmodule/mcp-tool-descriptions.spec.ts tests/sharedmodule/virtual-router-hit-log.spec.ts tests/sharedmodule/virtual-router-routing-model-validation.spec.ts tests/unified-hub/hub-v1-single-path-imports.spec.ts",
|
|
54
54
|
"test:cli": "npm run jest:run -- --runTestsByPath tests/cli/camoufox-command.spec.ts tests/cli/clean-command.spec.ts tests/cli/code-command.spec.ts tests/cli/config-command.spec.ts tests/cli/env-command.spec.ts tests/cli/env-output.spec.ts tests/cli/examples-command.spec.ts tests/cli/port-command.spec.ts tests/cli/port-utils.spec.ts tests/cli/restart-command.spec.ts tests/cli/smoke.spec.ts tests/cli/start-command.spec.ts tests/cli/status-command.spec.ts tests/cli/stop-command.spec.ts",
|
|
55
55
|
"test:watch": "npm run jest:run -- --watch",
|
|
56
56
|
"test:coverage": "npm run jest:run -- --coverage",
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
},
|
|
158
158
|
"dependencies": {
|
|
159
159
|
"@anthropic-ai/sdk": "^0.65.0",
|
|
160
|
-
"@jsonstudio/llms": "
|
|
160
|
+
"@jsonstudio/llms": "0.6.3214",
|
|
161
161
|
"@lmstudio/sdk": "^1.5.0",
|
|
162
162
|
"@radix-ui/react-switch": "^1.2.6",
|
|
163
163
|
"@types/socket.io": "^3.0.1",
|