@codemieai/code 0.15.3 → 0.15.5
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/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +9 -0
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +34 -9
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/plugins/claude/claude.models.d.ts +58 -0
- package/dist/agents/plugins/claude/claude.models.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.models.js +196 -10
- package/dist/agents/plugins/claude/claude.models.js.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.js +147 -45
- package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
- package/dist/agents/plugins/claude/plugin/statusline.bundle.mjs +729 -0
- package/dist/agents/plugins/claude/statusline-installer.d.ts +1 -1
- package/dist/agents/plugins/claude/statusline-installer.d.ts.map +1 -1
- package/dist/agents/plugins/claude/statusline-installer.js +41 -3
- package/dist/agents/plugins/claude/statusline-installer.js.map +1 -1
- package/dist/agents/plugins/codex/codex-models.d.ts.map +1 -1
- package/dist/agents/plugins/codex/codex-models.js +109 -8
- package/dist/agents/plugins/codex/codex-models.js.map +1 -1
- package/dist/agents/plugins/codex/codex.correlation.d.ts +39 -0
- package/dist/agents/plugins/codex/codex.correlation.d.ts.map +1 -0
- package/dist/agents/plugins/codex/codex.correlation.js +150 -0
- package/dist/agents/plugins/codex/codex.correlation.js.map +1 -0
- package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codex/codex.plugin.js +8 -40
- package/dist/agents/plugins/codex/codex.plugin.js.map +1 -1
- package/dist/agents/plugins/kimi/kimi.env-model.d.ts +27 -0
- package/dist/agents/plugins/kimi/kimi.env-model.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/kimi.env-model.js +52 -0
- package/dist/agents/plugins/kimi/kimi.env-model.js.map +1 -0
- package/dist/agents/plugins/kimi/kimi.session.d.ts +6 -0
- package/dist/agents/plugins/kimi/kimi.session.d.ts.map +1 -1
- package/dist/agents/plugins/kimi/kimi.session.js +24 -2
- package/dist/agents/plugins/kimi/kimi.session.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js +1 -1
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
- package/dist/cli/commands/analytics/cost/cost-enricher.d.ts +19 -2
- package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/cost-enricher.js +171 -14
- package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
- package/dist/cli/commands/analytics/cost/local-models.d.ts +15 -0
- package/dist/cli/commands/analytics/cost/local-models.d.ts.map +1 -0
- package/dist/cli/commands/analytics/cost/local-models.js +21 -0
- package/dist/cli/commands/analytics/cost/local-models.js.map +1 -0
- package/dist/cli/commands/analytics/cost/types.d.ts +60 -0
- package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/types.js.map +1 -1
- package/dist/cli/commands/analytics/cost/usage-readers.d.ts +25 -2
- package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/usage-readers.js +61 -3
- package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
- package/dist/cli/commands/analytics/formatter.d.ts +11 -0
- package/dist/cli/commands/analytics/formatter.d.ts.map +1 -1
- package/dist/cli/commands/analytics/formatter.js +28 -0
- package/dist/cli/commands/analytics/formatter.js.map +1 -1
- package/dist/cli/commands/analytics/index.d.ts.map +1 -1
- package/dist/cli/commands/analytics/index.js +113 -72
- package/dist/cli/commands/analytics/index.js.map +1 -1
- package/dist/cli/commands/analytics/otel-loader.d.ts.map +1 -1
- package/dist/cli/commands/analytics/otel-loader.js +60 -14
- package/dist/cli/commands/analytics/otel-loader.js.map +1 -1
- package/dist/cli/commands/analytics/otel-pricing.d.ts +38 -0
- package/dist/cli/commands/analytics/otel-pricing.d.ts.map +1 -0
- package/dist/cli/commands/analytics/otel-pricing.js +33 -0
- package/dist/cli/commands/analytics/otel-pricing.js.map +1 -0
- package/dist/cli/commands/analytics/report/client/app.js +279 -18
- package/dist/cli/commands/analytics/report/output-target.d.ts +22 -0
- package/dist/cli/commands/analytics/report/output-target.d.ts.map +1 -0
- package/dist/cli/commands/analytics/report/output-target.js +56 -0
- package/dist/cli/commands/analytics/report/output-target.js.map +1 -0
- package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
- package/dist/cli/commands/analytics/report/payload-builder.js +6 -0
- package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
- package/dist/cli/commands/analytics/report/report-generator.d.ts +1 -1
- package/dist/cli/commands/analytics/report/report-generator.js +1 -1
- package/dist/cli/commands/analytics/report/session-report.d.ts +1 -3
- package/dist/cli/commands/analytics/report/session-report.d.ts.map +1 -1
- package/dist/cli/commands/analytics/report/session-report.js +1 -3
- package/dist/cli/commands/analytics/report/session-report.js.map +1 -1
- package/dist/cli/commands/analytics/report/template.html +6 -6
- package/dist/cli/commands/analytics/report/types.d.ts +17 -1
- package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
- package/dist/cli/commands/analytics/sources/sessions-source.d.ts.map +1 -1
- package/dist/cli/commands/analytics/sources/sessions-source.js +9 -11
- package/dist/cli/commands/analytics/sources/sessions-source.js.map +1 -1
- package/dist/cli/commands/analytics/sources/types.d.ts +0 -2
- package/dist/cli/commands/analytics/sources/types.d.ts.map +1 -1
- package/dist/cli/commands/analytics/types.d.ts +13 -7
- package/dist/cli/commands/analytics/types.d.ts.map +1 -1
- package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.d.ts +9 -0
- package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.d.ts.map +1 -0
- package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.js +42 -0
- package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.js.map +1 -0
- package/dist/cli/commands/doctor/checks/index.d.ts +1 -0
- package/dist/cli/commands/doctor/checks/index.d.ts.map +1 -1
- package/dist/cli/commands/doctor/checks/index.js +1 -0
- package/dist/cli/commands/doctor/checks/index.js.map +1 -1
- package/dist/cli/commands/doctor/index.d.ts.map +1 -1
- package/dist/cli/commands/doctor/index.js +2 -1
- package/dist/cli/commands/doctor/index.js.map +1 -1
- package/dist/cli/commands/models.d.ts.map +1 -1
- package/dist/cli/commands/models.js +16 -3
- package/dist/cli/commands/models.js.map +1 -1
- package/dist/cli/commands/proxy/connect-orchestrator.js +1 -1
- package/dist/cli/commands/proxy/connect-orchestrator.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts +16 -4
- package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/tenant-catalog.js +42 -14
- package/dist/cli/commands/proxy/connectors/tenant-catalog.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode-models.d.ts +18 -0
- package/dist/cli/commands/proxy/connectors/vscode-models.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode-models.js +58 -0
- package/dist/cli/commands/proxy/connectors/vscode-models.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode.d.ts +2 -2
- package/dist/cli/commands/proxy/connectors/vscode.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode.js +27 -38
- package/dist/cli/commands/proxy/connectors/vscode.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +4 -3
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/frameworks/plugins/codegraph.plugin.js +2 -2
- package/dist/frameworks/plugins/codegraph.plugin.js.map +1 -1
- package/dist/providers/core/codemie-auth-helpers.d.ts.map +1 -1
- package/dist/providers/core/codemie-auth-helpers.js +6 -1
- package/dist/providers/core/codemie-auth-helpers.js.map +1 -1
- package/dist/providers/core/default-agent-hooks.d.ts.map +1 -1
- package/dist/providers/core/default-agent-hooks.js +9 -0
- package/dist/providers/core/default-agent-hooks.js.map +1 -1
- package/dist/providers/plugins/bedrock/bedrock.template.d.ts.map +1 -1
- package/dist/providers/plugins/bedrock/bedrock.template.js +5 -31
- package/dist/providers/plugins/bedrock/bedrock.template.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts +44 -0
- package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js +106 -0
- package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +3 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js +5 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts +67 -0
- package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js +203 -0
- package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js.map +1 -0
- package/dist/providers/plugins/sso/sso.http-client.d.ts +95 -0
- package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.http-client.js +79 -0
- package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
- package/dist/providers/plugins/sso/sso.models.d.ts +7 -0
- package/dist/providers/plugins/sso/sso.models.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.models.js +22 -14
- package/dist/providers/plugins/sso/sso.models.js.map +1 -1
- package/dist/utils/bedrock-pricing.mjs +111 -0
- package/dist/utils/cli-bin.d.ts.map +1 -1
- package/dist/utils/cli-bin.js +3 -4
- package/dist/utils/cli-bin.js.map +1 -1
- package/dist/utils/cli-updater.d.ts +1 -0
- package/dist/utils/cli-updater.d.ts.map +1 -1
- package/dist/utils/cli-updater.js +37 -9
- package/dist/utils/cli-updater.js.map +1 -1
- package/dist/utils/credential-crypto.d.ts +51 -0
- package/dist/utils/credential-crypto.d.ts.map +1 -0
- package/dist/utils/credential-crypto.js +96 -0
- package/dist/utils/credential-crypto.js.map +1 -0
- package/dist/utils/model-normalizer.d.ts +6 -0
- package/dist/utils/model-normalizer.d.ts.map +1 -1
- package/dist/utils/model-normalizer.js +37 -19
- package/dist/utils/model-normalizer.js.map +1 -1
- package/dist/utils/npm-prefix.d.ts +48 -0
- package/dist/utils/npm-prefix.d.ts.map +1 -0
- package/dist/utils/npm-prefix.js +142 -0
- package/dist/utils/npm-prefix.js.map +1 -0
- package/dist/utils/paths.d.ts +7 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +10 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/platform.d.ts +10 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +14 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/price-resolution.d.ts +42 -0
- package/dist/utils/price-resolution.d.ts.map +1 -0
- package/dist/utils/price-resolution.js +112 -0
- package/dist/utils/price-resolution.js.map +1 -0
- package/dist/utils/pricing.d.ts +65 -6
- package/dist/utils/pricing.d.ts.map +1 -1
- package/dist/utils/pricing.js +91 -117
- package/dist/utils/pricing.js.map +1 -1
- package/dist/utils/pricing.json +201 -20
- package/dist/utils/processes.d.ts.map +1 -1
- package/dist/utils/processes.js +6 -3
- package/dist/utils/processes.js.map +1 -1
- package/dist/utils/routing-headers.mjs +104 -0
- package/dist/utils/security.d.ts +0 -32
- package/dist/utils/security.d.ts.map +1 -1
- package/dist/utils/security.js +20 -102
- package/dist/utils/security.js.map +1 -1
- package/package.json +4 -2
- package/scripts/bundle-statusline.mjs +37 -0
- package/scripts/copy-plugins.js +19 -2
- package/src/utils/tips.json +9 -9
- package/dist/agents/plugins/claude/plugin/__tests__/statusline.test.ts +0 -323
- package/dist/agents/plugins/claude/plugin/statusline.mjs +0 -282
- package/dist/cli/commands/analytics/exporter.d.ts +0 -20
- package/dist/cli/commands/analytics/exporter.d.ts.map +0 -1
- package/dist/cli/commands/analytics/exporter.js +0 -91
- package/dist/cli/commands/analytics/exporter.js.map +0 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Routing Header Injector Plugin
|
|
3
|
+
* Priority: 55 (after logging at 50, before session-sync at 100)
|
|
4
|
+
*
|
|
5
|
+
* The upstream router (CodeMie Switchyard or the LiteLLM router) reports which model
|
|
6
|
+
* tier it picked, and why, in HTTP *response headers*. Headers are forwarded downstream
|
|
7
|
+
* but agents do not persist them, so the decision is lost the moment the turn ends.
|
|
8
|
+
*
|
|
9
|
+
* This plugin copies those headers onto the response *body*, where the agent stores them
|
|
10
|
+
* verbatim in its own transcript alongside `usage`. The analytics pipeline
|
|
11
|
+
* (cost/usage-readers.ts) then reads routing metadata per turn with no join and no
|
|
12
|
+
* sidecar file.
|
|
13
|
+
*
|
|
14
|
+
* Two response paths:
|
|
15
|
+
* JSON (non-streaming) — buffer the body, merge fields at the top level (which is the
|
|
16
|
+
* message object for the Messages API), return a new response.
|
|
17
|
+
* SSE (streaming) — stash headers in `context.metadata` during onUpstreamResponse,
|
|
18
|
+
* then merge them into the first `message_start` event's nested
|
|
19
|
+
* `message` object as it streams past.
|
|
20
|
+
*
|
|
21
|
+
* Header → body key mapping (matches what the analytics reader / statusline domain layer
|
|
22
|
+
* expects — see routing-headers.mjs): the body key is the lowercased header name,
|
|
23
|
+
* hyphens intact (`x-litellm-router-tier`, `x-codemie-routing-tier`). Neither family is
|
|
24
|
+
* transformed — a header name is a valid JS property via bracket access either way, and
|
|
25
|
+
* keeping it verbatim means there is exactly one place (the header name itself) a new field
|
|
26
|
+
* needs to be named.
|
|
27
|
+
*
|
|
28
|
+
* Only one family is ever present: a deployment routes through Switchyard or the LiteLLM
|
|
29
|
+
* router, not both. Capturing by prefix means a new field in either family is recorded
|
|
30
|
+
* without a code change here.
|
|
31
|
+
*/
|
|
32
|
+
import { logger } from '../../../../../utils/logger.js';
|
|
33
|
+
const LITELLM_PREFIX = 'x-litellm-';
|
|
34
|
+
// x-codemie-routed-model is a real Switchyard response header (confirmed against live traffic —
|
|
35
|
+
// it always matches the response body's own `model`, i.e. the actually-dispatched model) that
|
|
36
|
+
// does NOT share a prefix with x-codemie-routing-*/x-codemie-requested-*, so it needs its own
|
|
37
|
+
// entry or it silently never reaches the body (see routing-headers.mjs's `routedModel`).
|
|
38
|
+
const CODEMIE_ROUTING_PREFIXES = ['x-codemie-routing-', 'x-codemie-requested-', 'x-codemie-routed-'];
|
|
39
|
+
const METADATA_HEADERS_KEY = '_routingInjectionHeaders';
|
|
40
|
+
const METADATA_INJECTED_KEY = '_routingInjected';
|
|
41
|
+
/**
|
|
42
|
+
* Extract routing-relevant upstream response headers into a flat body-key → value map.
|
|
43
|
+
* Returns an empty object when the response carries no routing metadata, which is the
|
|
44
|
+
* common case for non-routed deployments and for requests that name a literal model ID.
|
|
45
|
+
*/
|
|
46
|
+
export function extractRoutingHeaders(headers) {
|
|
47
|
+
const out = {};
|
|
48
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
49
|
+
if (value == null)
|
|
50
|
+
continue;
|
|
51
|
+
const raw = Array.isArray(value) ? value[0] : value;
|
|
52
|
+
if (raw == null)
|
|
53
|
+
continue;
|
|
54
|
+
const lower = key.toLowerCase();
|
|
55
|
+
if (lower.startsWith(LITELLM_PREFIX) || CODEMIE_ROUTING_PREFIXES.some((p) => lower.startsWith(p))) {
|
|
56
|
+
out[lower] = raw;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Merge fields into the top-level JSON object of a body buffer. Returns the buffer
|
|
63
|
+
* unchanged when there is nothing to inject, the payload is not a JSON object, or
|
|
64
|
+
* parsing fails — a routing annotation must never corrupt a response.
|
|
65
|
+
*/
|
|
66
|
+
export function injectIntoJsonBody(body, injections) {
|
|
67
|
+
if (Object.keys(injections).length === 0)
|
|
68
|
+
return body;
|
|
69
|
+
try {
|
|
70
|
+
const parsed = JSON.parse(body.toString('utf-8'));
|
|
71
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
72
|
+
return body;
|
|
73
|
+
}
|
|
74
|
+
return Buffer.from(JSON.stringify({ ...parsed, ...injections }), 'utf-8');
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return body;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const NEWLINE = Buffer.from('\n', 'utf-8');
|
|
81
|
+
/** Splits a buffer on the `\n` byte without decoding it, so lines that are untouched below keep their exact original bytes. */
|
|
82
|
+
function splitBufferLines(chunk) {
|
|
83
|
+
const lines = [];
|
|
84
|
+
let start = 0;
|
|
85
|
+
for (let i = 0; i < chunk.length; i++) {
|
|
86
|
+
if (chunk[i] === 0x0a) {
|
|
87
|
+
lines.push(chunk.subarray(start, i));
|
|
88
|
+
start = i + 1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
lines.push(chunk.subarray(start));
|
|
92
|
+
return lines;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Merge fields into the `message` object of a `message_start` SSE event.
|
|
96
|
+
*
|
|
97
|
+
* Rewrites only whole `data:` lines that parse as a `message_start` event; every other
|
|
98
|
+
* line — including partial trailing lines at a chunk boundary — is passed through as the
|
|
99
|
+
* original bytes, never decoded to UTF-8 and re-encoded. A chunk boundary can cut a later,
|
|
100
|
+
* unrelated line mid multi-byte character; round-tripping the whole chunk through
|
|
101
|
+
* `toString('utf-8')` would replace those truncated bytes with U+FFFD and then bake that
|
|
102
|
+
* corruption in permanently once any line in the chunk was modified. Returns the original
|
|
103
|
+
* buffer when no event was modified.
|
|
104
|
+
*/
|
|
105
|
+
export function injectIntoSseChunk(chunk, injections) {
|
|
106
|
+
if (Object.keys(injections).length === 0)
|
|
107
|
+
return chunk;
|
|
108
|
+
const lines = splitBufferLines(chunk);
|
|
109
|
+
let modified = false;
|
|
110
|
+
const outLines = [];
|
|
111
|
+
for (const lineBuf of lines) {
|
|
112
|
+
const line = lineBuf.toString('utf-8');
|
|
113
|
+
if (!line.startsWith('data: ')) {
|
|
114
|
+
outLines.push(lineBuf);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
let parsed;
|
|
118
|
+
try {
|
|
119
|
+
parsed = JSON.parse(line.slice(6));
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Not JSON (e.g. `[DONE]`) or a line split across chunks — pass through untouched.
|
|
123
|
+
outLines.push(lineBuf);
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const event = parsed;
|
|
127
|
+
if (typeof parsed === 'object' &&
|
|
128
|
+
parsed !== null &&
|
|
129
|
+
!Array.isArray(parsed) &&
|
|
130
|
+
event.type === 'message_start' &&
|
|
131
|
+
typeof event.message === 'object' &&
|
|
132
|
+
event.message !== null) {
|
|
133
|
+
const message = { ...event.message, ...injections };
|
|
134
|
+
outLines.push(Buffer.from('data: ' + JSON.stringify({ ...event, message }), 'utf-8'));
|
|
135
|
+
modified = true;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
outLines.push(lineBuf);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (!modified)
|
|
142
|
+
return chunk;
|
|
143
|
+
const parts = [];
|
|
144
|
+
outLines.forEach((lineBuf, i) => {
|
|
145
|
+
if (i > 0)
|
|
146
|
+
parts.push(NEWLINE);
|
|
147
|
+
parts.push(lineBuf);
|
|
148
|
+
});
|
|
149
|
+
return Buffer.concat(parts);
|
|
150
|
+
}
|
|
151
|
+
export class RoutingHeaderInjectorPlugin {
|
|
152
|
+
id = '@codemie/proxy-routing-header-injector';
|
|
153
|
+
name = 'Routing Header Injector';
|
|
154
|
+
version = '1.0.0';
|
|
155
|
+
priority = 55; // After logging (50), before session-sync (100)
|
|
156
|
+
async createInterceptor(_context) {
|
|
157
|
+
return new RoutingHeaderInjectorInterceptor();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
class RoutingHeaderInjectorInterceptor {
|
|
161
|
+
name = 'routing-header-injector';
|
|
162
|
+
async onUpstreamResponse(context, response, tools) {
|
|
163
|
+
const injections = extractRoutingHeaders(response.headers);
|
|
164
|
+
if (Object.keys(injections).length === 0) {
|
|
165
|
+
return response;
|
|
166
|
+
}
|
|
167
|
+
const contentType = String(response.headers['content-type'] ?? '').toLowerCase();
|
|
168
|
+
if (contentType.includes('text/event-stream')) {
|
|
169
|
+
// Streaming: defer to onResponseChunk so the stream is never buffered.
|
|
170
|
+
context.metadata[METADATA_HEADERS_KEY] = injections;
|
|
171
|
+
logger.debug(`[${this.name}] Captured ${Object.keys(injections).length} routing header(s) for SSE injection`);
|
|
172
|
+
return response;
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
const body = await tools.readBody(response);
|
|
176
|
+
const modified = injectIntoJsonBody(body, injections);
|
|
177
|
+
if (modified !== body) {
|
|
178
|
+
logger.debug(`[${this.name}] Injected ${Object.keys(injections).length} routing header(s) into JSON response`);
|
|
179
|
+
}
|
|
180
|
+
return tools.fromBuffer(response, modified);
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
logger.debug(`[${this.name}] JSON injection failed, forwarding original response:`, error);
|
|
184
|
+
return response;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async onResponseChunk(context, chunk) {
|
|
188
|
+
if (context.metadata[METADATA_INJECTED_KEY]) {
|
|
189
|
+
return chunk;
|
|
190
|
+
}
|
|
191
|
+
const injections = context.metadata[METADATA_HEADERS_KEY];
|
|
192
|
+
if (!injections || Object.keys(injections).length === 0) {
|
|
193
|
+
return chunk;
|
|
194
|
+
}
|
|
195
|
+
const modified = injectIntoSseChunk(chunk, injections);
|
|
196
|
+
if (modified !== chunk) {
|
|
197
|
+
context.metadata[METADATA_INJECTED_KEY] = true;
|
|
198
|
+
logger.debug(`[${this.name}] Injected routing headers into SSE message_start`);
|
|
199
|
+
}
|
|
200
|
+
return modified;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=routing-header-injector.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-header-injector.plugin.js","sourceRoot":"","sources":["../../../../../../src/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,53 @@ export declare const CODEMIE_ENDPOINTS: {
|
|
|
18
18
|
readonly METRICS: "/v1/metrics";
|
|
19
19
|
readonly AUTH_LOGIN: "/v1/auth/login";
|
|
20
20
|
};
|
|
21
|
+
/**
|
|
22
|
+
* One tier's target model within a router's `tiers` map — mirrors the backend's `RouterTier`
|
|
23
|
+
* (src/codemie/configs/llm_config.py).
|
|
24
|
+
*/
|
|
25
|
+
export interface RouterTier {
|
|
26
|
+
model: string;
|
|
27
|
+
label?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The platform's fixed 4-tier shape every router option carries (backend's `RouterTiers`),
|
|
31
|
+
* regardless of how many distinct models actually back it — a 2-model router maps onto all
|
|
32
|
+
* 4 keys, so several tiers commonly share the same target model.
|
|
33
|
+
*/
|
|
34
|
+
export interface RouterTiers {
|
|
35
|
+
simple: RouterTier;
|
|
36
|
+
medium: RouterTier;
|
|
37
|
+
complex: RouterTier;
|
|
38
|
+
reasoning: RouterTier;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Render a router's tier map as e.g. `"simple/medium: GPT-5.6 Luna · complex/reasoning:
|
|
42
|
+
* GPT-5.6 Terra"` — tiers pointing at the same model are grouped under one label instead of
|
|
43
|
+
* repeating it, and each group shows the target's own catalog label (falling back to its id
|
|
44
|
+
* when the backend didn't send one) rather than the router's own name, which says nothing
|
|
45
|
+
* about what it actually resolves to per tier.
|
|
46
|
+
*/
|
|
47
|
+
export declare function describeRouterTiers(tiers: RouterTiers): string;
|
|
48
|
+
/** `RoutingMode` on the backend (llm_config.py): the router's dispatch strategy. */
|
|
49
|
+
export type RouterStrategy = 'signal' | 'classifier';
|
|
50
|
+
/**
|
|
51
|
+
* Every id (deployment_name, base_name) a catalog entry's own label can be looked up by.
|
|
52
|
+
* Used to resolve a bare id referenced elsewhere in the catalog — a router's
|
|
53
|
+
* `classifier_model`, say — back to the human label CodeMie configured for it, the same way
|
|
54
|
+
* `modelIdentifiers`-style lookups already resolve a routed-to id for the statusline.
|
|
55
|
+
*/
|
|
56
|
+
export declare function buildModelLabelIndex(models: LlmModel[]): Map<string, string>;
|
|
57
|
+
/**
|
|
58
|
+
* Full router description for a model/agent picker, e.g. `"LiteLLM (classifier -> Claude
|
|
59
|
+
* Haiku 4.5): simple/medium: GPT-5.6 Luna · complex/reasoning: GPT-5.6 Terra"`, or
|
|
60
|
+
* `"Switchyard (signal): ..."` when the router has no classifier model. `labelIndex` (see
|
|
61
|
+
* {@link buildModelLabelIndex}, built from the FULL catalog — a classifier model may belong
|
|
62
|
+
* to a family a caller otherwise filters out, e.g. a Claude classifier gating a GPT router)
|
|
63
|
+
* resolves `classifier_model` to its own label instead of showing a bare id. `''` when the
|
|
64
|
+
* entry isn't a router or the backend hasn't populated a tier map for it yet — there is
|
|
65
|
+
* nothing more specific to add beyond the id/label already shown elsewhere.
|
|
66
|
+
*/
|
|
67
|
+
export declare function describeRouter(model: LlmModel, labelIndex: Map<string, string>): string;
|
|
21
68
|
/**
|
|
22
69
|
* Full model descriptor returned by GET /v1/llm_models?include_all=true
|
|
23
70
|
*/
|
|
@@ -46,6 +93,54 @@ export interface LlmModel {
|
|
|
46
93
|
top_p?: boolean;
|
|
47
94
|
};
|
|
48
95
|
forbidden_for_web?: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Present (and `true`) on a Switchyard-generated virtual router entry (`LlmRouterOption` in
|
|
98
|
+
* the backend's `Union[LLMModel, LlmRouterOption]` response) — a `base_name` that itself
|
|
99
|
+
* dispatches to a capable/efficient pair rather than naming a concrete deployment.
|
|
100
|
+
*/
|
|
101
|
+
is_router?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Present on a Switchyard virtual router (`LlmRouterOption.router_type` on the backend):
|
|
104
|
+
* `"switchyard"` or `"litellm_auto"` — a client display badge only, never a behavioral
|
|
105
|
+
* branch on the backend.
|
|
106
|
+
*/
|
|
107
|
+
router_type?: string;
|
|
108
|
+
/** `"signal"` or `"classifier"` — the router's dispatch strategy. */
|
|
109
|
+
strategy?: RouterStrategy;
|
|
110
|
+
/**
|
|
111
|
+
* The classifier model this router's classifier-mode strategy scores requests with (bare
|
|
112
|
+
* id — resolve via {@link buildModelLabelIndex} for display). Absent for a signal-mode router.
|
|
113
|
+
*/
|
|
114
|
+
classifier_model?: string;
|
|
115
|
+
/**
|
|
116
|
+
* Present on a Switchyard virtual router (`LlmRouterOption.tiers` on the backend): the
|
|
117
|
+
* model+label it resolves to for each of the platform's 4 fixed tiers. See {@link RouterTiers}.
|
|
118
|
+
*/
|
|
119
|
+
tiers?: RouterTiers;
|
|
120
|
+
/**
|
|
121
|
+
* Present on a regular `LLMModel` entry that is declared as a LiteLLM auto-router
|
|
122
|
+
* (`LiteLLMRouterConfig` on the backend) — LiteLLM exposes no reliable API signal for this,
|
|
123
|
+
* so the backend declares it explicitly. `is_router` is nested here rather than top-level
|
|
124
|
+
* because this object exists purely to carry it (see the backend's own comment on
|
|
125
|
+
* `LiteLLMRouterConfig`), unlike the Switchyard case above where it lives on the model itself.
|
|
126
|
+
*/
|
|
127
|
+
litellm_router?: {
|
|
128
|
+
is_router?: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* The concrete deployment id this auto-router currently resolves to by default (e.g.
|
|
131
|
+
* `claude-sonnet-5`, `gpt-5.6-terra-2026-07-09`). The router's own alias name is
|
|
132
|
+
* family-agnostic by convention (`claude-smart-router` and `gpt-smart-router` are both
|
|
133
|
+
* named like routers, not like their target), so this is the one reliable signal for
|
|
134
|
+
* which backend family a consumer restricted to one family (e.g. codemie-codex, which
|
|
135
|
+
* can only drive GPT/Codex over the Responses API) should judge it by.
|
|
136
|
+
*/
|
|
137
|
+
counterfactual_model?: string;
|
|
138
|
+
/** Same 4-tier shape as the top-level `tiers` field above, for a declared LiteLLM auto-router. */
|
|
139
|
+
tiers?: RouterTiers;
|
|
140
|
+
/** Same semantics as the top-level `strategy`/`classifier_model` fields above. */
|
|
141
|
+
strategy?: RouterStrategy;
|
|
142
|
+
classifier_model?: string;
|
|
143
|
+
};
|
|
49
144
|
}
|
|
50
145
|
/**
|
|
51
146
|
* Fetch full model objects from /v1/llm_models?include_all=true (supports both cookies and JWT)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sso.http-client.d.ts","sourceRoot":"","sources":["../../../../src/providers/plugins/sso/sso.http-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAgB,kBAAkB,EAA+B,MAAM,qBAAqB,CAAC;AAEzG,OAAO,EACL,oBAAoB,EAErB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAChC,YAAY,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;CAOpB,CAAC;AAGX;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,2BAA2B,CAAC,EAAE,MAAM,CAAC;QACrC,+BAA+B,CAAC,EAAE,MAAM,CAAC;KAC1C,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,iBAAiB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"sso.http-client.d.ts","sourceRoot":"","sources":["../../../../src/providers/plugins/sso/sso.http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,85 @@ export const CODEMIE_ENDPOINTS = {
|
|
|
17
17
|
METRICS: '/v1/metrics',
|
|
18
18
|
AUTH_LOGIN: '/v1/auth/login'
|
|
19
19
|
};
|
|
20
|
+
const TIER_ORDER = ['simple', 'medium', 'complex', 'reasoning'];
|
|
21
|
+
/**
|
|
22
|
+
* Render a router's tier map as e.g. `"simple/medium: GPT-5.6 Luna · complex/reasoning:
|
|
23
|
+
* GPT-5.6 Terra"` — tiers pointing at the same model are grouped under one label instead of
|
|
24
|
+
* repeating it, and each group shows the target's own catalog label (falling back to its id
|
|
25
|
+
* when the backend didn't send one) rather than the router's own name, which says nothing
|
|
26
|
+
* about what it actually resolves to per tier.
|
|
27
|
+
*/
|
|
28
|
+
export function describeRouterTiers(tiers) {
|
|
29
|
+
const firstTierByModel = new Map();
|
|
30
|
+
for (const tierName of TIER_ORDER) {
|
|
31
|
+
const model = tiers[tierName]?.model;
|
|
32
|
+
if (model && !firstTierByModel.has(model))
|
|
33
|
+
firstTierByModel.set(model, tierName);
|
|
34
|
+
}
|
|
35
|
+
const parts = [];
|
|
36
|
+
for (const tierName of TIER_ORDER) {
|
|
37
|
+
const tier = tiers[tierName];
|
|
38
|
+
if (!tier)
|
|
39
|
+
continue;
|
|
40
|
+
if (firstTierByModel.get(tier.model) !== tierName)
|
|
41
|
+
continue; // grouped under an earlier tier
|
|
42
|
+
const groupedTierNames = TIER_ORDER.filter((name) => tiers[name]?.model === tier.model);
|
|
43
|
+
parts.push(`${groupedTierNames.join('/')}: ${tier.label || tier.model}`);
|
|
44
|
+
}
|
|
45
|
+
return parts.join(' · ');
|
|
46
|
+
}
|
|
47
|
+
const ROUTER_TYPE_LABELS = {
|
|
48
|
+
litellm_auto: 'LiteLLM',
|
|
49
|
+
switchyard: 'Switchyard',
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Every id (deployment_name, base_name) a catalog entry's own label can be looked up by.
|
|
53
|
+
* Used to resolve a bare id referenced elsewhere in the catalog — a router's
|
|
54
|
+
* `classifier_model`, say — back to the human label CodeMie configured for it, the same way
|
|
55
|
+
* `modelIdentifiers`-style lookups already resolve a routed-to id for the statusline.
|
|
56
|
+
*/
|
|
57
|
+
export function buildModelLabelIndex(models) {
|
|
58
|
+
const labels = new Map();
|
|
59
|
+
for (const model of models) {
|
|
60
|
+
if (!model.label)
|
|
61
|
+
continue;
|
|
62
|
+
for (const id of [model.deployment_name, model.base_name]) {
|
|
63
|
+
if (id && !labels.has(id))
|
|
64
|
+
labels.set(id, model.label);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return labels;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Full router description for a model/agent picker, e.g. `"LiteLLM (classifier -> Claude
|
|
71
|
+
* Haiku 4.5): simple/medium: GPT-5.6 Luna · complex/reasoning: GPT-5.6 Terra"`, or
|
|
72
|
+
* `"Switchyard (signal): ..."` when the router has no classifier model. `labelIndex` (see
|
|
73
|
+
* {@link buildModelLabelIndex}, built from the FULL catalog — a classifier model may belong
|
|
74
|
+
* to a family a caller otherwise filters out, e.g. a Claude classifier gating a GPT router)
|
|
75
|
+
* resolves `classifier_model` to its own label instead of showing a bare id. `''` when the
|
|
76
|
+
* entry isn't a router or the backend hasn't populated a tier map for it yet — there is
|
|
77
|
+
* nothing more specific to add beyond the id/label already shown elsewhere.
|
|
78
|
+
*/
|
|
79
|
+
export function describeRouter(model, labelIndex) {
|
|
80
|
+
const tiers = model.tiers ?? model.litellm_router?.tiers;
|
|
81
|
+
if (!tiers)
|
|
82
|
+
return '';
|
|
83
|
+
const typeLabel = model.router_type
|
|
84
|
+
? (ROUTER_TYPE_LABELS[model.router_type] ?? model.router_type)
|
|
85
|
+
: model.litellm_router
|
|
86
|
+
? 'LiteLLM'
|
|
87
|
+
: model.is_router
|
|
88
|
+
? 'Switchyard'
|
|
89
|
+
: undefined;
|
|
90
|
+
const strategy = model.strategy ?? model.litellm_router?.strategy;
|
|
91
|
+
const classifierModel = model.classifier_model ?? model.litellm_router?.classifier_model;
|
|
92
|
+
const classifierLabel = classifierModel ? (labelIndex.get(classifierModel) ?? classifierModel) : undefined;
|
|
93
|
+
const strategyNote = strategy
|
|
94
|
+
? ` (${classifierLabel ? `${strategy} -> ${classifierLabel}` : strategy})`
|
|
95
|
+
: '';
|
|
96
|
+
const prefix = typeLabel ? `${typeLabel}${strategyNote}: ` : '';
|
|
97
|
+
return `${prefix}${describeRouterTiers(tiers)}`;
|
|
98
|
+
}
|
|
20
99
|
export async function fetchCodeMieLlmModels(apiUrl, auth) {
|
|
21
100
|
/* eslint-enable no-redeclare */
|
|
22
101
|
const headers = buildAuthHeaders(auth);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sso.http-client.js","sourceRoot":"","sources":["../../../../src/providers/plugins/sso/sso.http-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAGhC;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,iCAAiC;IACzC,aAAa,EAAE,mBAAmB;IAClC,IAAI,EAAE,UAAU;IAChB,kBAAkB,EAAE,wBAAwB;IAC5C,OAAO,EAAE,aAAa;IACtB,UAAU,EAAE,gBAAgB;CACpB,CAAC;
|
|
1
|
+
{"version":3,"file":"sso.http-client.js","sourceRoot":"","sources":["../../../../src/providers/plugins/sso/sso.http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,13 @@ export declare class SSOModelProxy extends BaseModelProxy {
|
|
|
52
52
|
fetchIntegrations(codeMieUrl: string, projectName?: string): Promise<CodeMieIntegration[]>;
|
|
53
53
|
/**
|
|
54
54
|
* Fetch models from CodeMie API
|
|
55
|
+
*
|
|
56
|
+
* Uses fetchCodeMieLlmModels (the full descriptor, not the ID-only fetchCodeMieModels) so
|
|
57
|
+
* router entries surface their `is_router`/`litellm_router.is_router` flag as
|
|
58
|
+
* `metadata.isRouter` — the same signal claude.models.ts's `isRouterCatalogEntry` uses to gate
|
|
59
|
+
* the statusline's routing widget. Without this, `codemie models list` silently dropped every
|
|
60
|
+
* router alias a user could actually route through (Switchyard virtual routers and LiteLLM
|
|
61
|
+
* auto-router declarations alike), since fetchCodeMieModels never carried that flag through.
|
|
55
62
|
*/
|
|
56
63
|
private fetchModelsFromAPI;
|
|
57
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sso.models.d.ts","sourceRoot":"","sources":["../../../../src/providers/plugins/sso/sso.models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAOnE;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAC/C,OAAO,CAAC,GAAG,CAAa;gBAEZ,OAAO,CAAC,EAAE,MAAM;IAM5B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAInC;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B;;;;;;OAMG;IACG,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAcxC;;;;OAIG;IACG,WAAW,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA0BrE;;;;;;OAMG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA+ChG
|
|
1
|
+
{"version":3,"file":"sso.models.d.ts","sourceRoot":"","sources":["../../../../src/providers/plugins/sso/sso.models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAOnE;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAC/C,OAAO,CAAC,GAAG,CAAa;gBAEZ,OAAO,CAAC,EAAE,MAAM;IAM5B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAInC;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B;;;;;;OAMG;IACG,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAcxC;;;;OAIG;IACG,WAAW,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA0BrE;;;;;;OAMG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA+ChG;;;;;;;;;OASG;YACW,kBAAkB;CAyBjC"}
|
|
@@ -8,7 +8,7 @@ import { BaseModelProxy } from '../../core/base/BaseModelProxy.js';
|
|
|
8
8
|
import { ProviderRegistry } from '../../core/registry.js';
|
|
9
9
|
import { SSOTemplate } from './sso.template.js';
|
|
10
10
|
import { CodeMieSSO } from './sso.auth.js';
|
|
11
|
-
import {
|
|
11
|
+
import { fetchCodeMieLlmModels, fetchCodeMieIntegrations, CODEMIE_ENDPOINTS } from './sso.http-client.js';
|
|
12
12
|
import { logger } from '../../../utils/logger.js';
|
|
13
13
|
/**
|
|
14
14
|
* SSO Model Proxy
|
|
@@ -132,24 +132,32 @@ export class SSOModelProxy extends BaseModelProxy {
|
|
|
132
132
|
}
|
|
133
133
|
/**
|
|
134
134
|
* Fetch models from CodeMie API
|
|
135
|
+
*
|
|
136
|
+
* Uses fetchCodeMieLlmModels (the full descriptor, not the ID-only fetchCodeMieModels) so
|
|
137
|
+
* router entries surface their `is_router`/`litellm_router.is_router` flag as
|
|
138
|
+
* `metadata.isRouter` — the same signal claude.models.ts's `isRouterCatalogEntry` uses to gate
|
|
139
|
+
* the statusline's routing widget. Without this, `codemie models list` silently dropped every
|
|
140
|
+
* router alias a user could actually route through (Switchyard virtual routers and LiteLLM
|
|
141
|
+
* auto-router declarations alike), since fetchCodeMieModels never carried that flag through.
|
|
135
142
|
*/
|
|
136
143
|
async fetchModelsFromAPI(apiUrl, cookies) {
|
|
137
144
|
try {
|
|
138
|
-
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const models = modelIds.map(id => {
|
|
145
|
+
const llmModels = await fetchCodeMieLlmModels(apiUrl, cookies);
|
|
146
|
+
const models = [];
|
|
147
|
+
for (const model of llmModels) {
|
|
148
|
+
const id = model.deployment_name || model.base_name || model.label;
|
|
149
|
+
if (!id)
|
|
150
|
+
continue;
|
|
151
|
+
const isRouter = model.is_router === true || model.litellm_router?.is_router === true;
|
|
146
152
|
const isRecommended = SSOTemplate.recommendedModels.includes(id);
|
|
147
|
-
|
|
153
|
+
models.push({
|
|
148
154
|
id,
|
|
149
|
-
name:
|
|
150
|
-
popular: isRecommended // Adds ⭐ to recommended models
|
|
151
|
-
|
|
152
|
-
|
|
155
|
+
name: model.label || id,
|
|
156
|
+
popular: isRecommended, // Adds ⭐ to recommended models
|
|
157
|
+
...(isRouter && { metadata: { isRouter: true } }),
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
models.sort((a, b) => a.id.localeCompare(b.id));
|
|
153
161
|
return models;
|
|
154
162
|
}
|
|
155
163
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sso.models.js","sourceRoot":"","sources":["../../../../src/providers/plugins/sso/sso.models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sso.models.js","sourceRoot":"","sources":["../../../../src/providers/plugins/sso/sso.models.ts"],"names":[],"mappings":"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"}
|