@0xmaxma/claude-gateway 1.7.10 → 1.8.0
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 +167 -41
- package/dist/agent/builtin-commands.js +2 -2
- package/dist/agent/builtin-commands.js.map +1 -1
- package/dist/agent/knowledge/config.d.ts.map +1 -1
- package/dist/agent/knowledge/config.js +2 -9
- package/dist/agent/knowledge/config.js.map +1 -1
- package/dist/agent/model-catalog.d.ts +62 -0
- package/dist/agent/model-catalog.d.ts.map +1 -0
- package/dist/agent/model-catalog.js +264 -0
- package/dist/agent/model-catalog.js.map +1 -0
- package/dist/agent/runner.d.ts +76 -0
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +189 -36
- package/dist/agent/runner.js.map +1 -1
- package/dist/api/cron-router.d.ts +12 -8
- package/dist/api/cron-router.d.ts.map +1 -1
- package/dist/api/cron-router.js +82 -16
- package/dist/api/cron-router.js.map +1 -1
- package/dist/api/gateway-router.d.ts +4 -0
- package/dist/api/gateway-router.d.ts.map +1 -1
- package/dist/api/gateway-router.js +14 -0
- package/dist/api/gateway-router.js.map +1 -1
- package/dist/api/manifest-sources.d.ts +15 -0
- package/dist/api/manifest-sources.d.ts.map +1 -0
- package/dist/api/manifest-sources.js +27 -0
- package/dist/api/manifest-sources.js.map +1 -0
- package/dist/api/meta-router.d.ts +13 -0
- package/dist/api/meta-router.d.ts.map +1 -0
- package/dist/api/meta-router.js +26 -0
- package/dist/api/meta-router.js.map +1 -0
- package/dist/api/packages.d.ts.map +1 -1
- package/dist/api/packages.js +18 -198
- package/dist/api/packages.js.map +1 -1
- package/dist/api/route-registry.d.ts +81 -0
- package/dist/api/route-registry.d.ts.map +1 -0
- package/dist/api/route-registry.js +44 -0
- package/dist/api/route-registry.js.map +1 -0
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/router.js +21 -3
- package/dist/api/router.js.map +1 -1
- package/dist/apps/installer.d.ts +73 -5
- package/dist/apps/installer.d.ts.map +1 -1
- package/dist/apps/installer.js +237 -22
- package/dist/apps/installer.js.map +1 -1
- package/dist/cli/args.d.ts +25 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +55 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/colors.d.ts +37 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +63 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/command-names.d.ts +98 -0
- package/dist/cli/command-names.d.ts.map +1 -0
- package/dist/cli/command-names.js +109 -0
- package/dist/cli/command-names.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +28 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +321 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/channels.d.ts +17 -0
- package/dist/cli/commands/channels.d.ts.map +1 -0
- package/dist/cli/commands/channels.js +101 -0
- package/dist/cli/commands/channels.js.map +1 -0
- package/dist/cli/commands/debug-bundle.d.ts +6 -0
- package/dist/cli/commands/debug-bundle.d.ts.map +1 -0
- package/dist/cli/commands/debug-bundle.js +220 -0
- package/dist/cli/commands/debug-bundle.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +104 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/gateway.d.ts +12 -0
- package/dist/cli/commands/gateway.d.ts.map +1 -0
- package/dist/cli/commands/gateway.js +145 -0
- package/dist/cli/commands/gateway.js.map +1 -0
- package/dist/cli/commands/service.d.ts +33 -0
- package/dist/cli/commands/service.d.ts.map +1 -0
- package/dist/cli/commands/service.js +513 -0
- package/dist/cli/commands/service.js.map +1 -0
- package/dist/cli/commands/update.d.ts +16 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +149 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands.generated.d.ts +4 -0
- package/dist/cli/commands.generated.d.ts.map +1 -0
- package/dist/cli/commands.generated.js +220 -0
- package/dist/cli/commands.generated.js.map +1 -0
- package/dist/cli/health.d.ts +31 -0
- package/dist/cli/health.d.ts.map +1 -0
- package/dist/cli/health.js +49 -0
- package/dist/cli/health.js.map +1 -0
- package/dist/cli/http-client.d.ts +140 -0
- package/dist/cli/http-client.d.ts.map +1 -0
- package/dist/cli/http-client.js +332 -0
- package/dist/cli/http-client.js.map +1 -0
- package/dist/cli/index.d.ts +27 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +372 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/manager.d.ts +64 -0
- package/dist/cli/manager.d.ts.map +1 -0
- package/dist/cli/manager.js +181 -0
- package/dist/cli/manager.js.map +1 -0
- package/dist/cli/output.d.ts +49 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +101 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/prompt.d.ts +29 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +154 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/redact.d.ts +3 -0
- package/dist/cli/redact.d.ts.map +1 -0
- package/dist/cli/redact.js +33 -0
- package/dist/cli/redact.js.map +1 -0
- package/dist/cli/types.d.ts +22 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +4 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config/bootstrap.d.ts +33 -0
- package/dist/config/bootstrap.d.ts.map +1 -0
- package/dist/config/bootstrap.js +117 -0
- package/dist/config/bootstrap.js.map +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +5 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/config/watcher.d.ts.map +1 -1
- package/dist/config/watcher.js +2 -35
- package/dist/config/watcher.js.map +1 -1
- package/dist/discord/receiver.d.ts +6 -1
- package/dist/discord/receiver.d.ts.map +1 -1
- package/dist/discord/receiver.js +9 -1
- package/dist/discord/receiver.js.map +1 -1
- package/dist/entry.d.ts +3 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +83 -0
- package/dist/entry.js.map +1 -0
- package/dist/index.js +160 -46
- package/dist/index.js.map +1 -1
- package/dist/load-dotenv.d.ts +2 -0
- package/dist/load-dotenv.d.ts.map +1 -0
- package/dist/load-dotenv.js +68 -0
- package/dist/load-dotenv.js.map +1 -0
- package/dist/packages/registry.d.ts +50 -0
- package/dist/packages/registry.d.ts.map +1 -0
- package/dist/packages/registry.js +209 -0
- package/dist/packages/registry.js.map +1 -0
- package/dist/shutdown-signals.d.ts +47 -0
- package/dist/shutdown-signals.d.ts.map +1 -0
- package/dist/shutdown-signals.js +62 -0
- package/dist/shutdown-signals.js.map +1 -0
- package/dist/telegram/receiver.d.ts +6 -1
- package/dist/telegram/receiver.d.ts.map +1 -1
- package/dist/telegram/receiver.js +9 -1
- package/dist/telegram/receiver.js.map +1 -1
- package/dist/utils/orphan-receivers.d.ts +90 -0
- package/dist/utils/orphan-receivers.d.ts.map +1 -0
- package/dist/utils/orphan-receivers.js +218 -0
- package/dist/utils/orphan-receivers.js.map +1 -0
- package/dist/utils/paths.d.ts +16 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +60 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/stop-child.d.ts +21 -0
- package/dist/utils/stop-child.d.ts.map +1 -0
- package/dist/utils/stop-child.js +64 -0
- package/dist/utils/stop-child.js.map +1 -0
- package/lib/pairing.ts +1 -1
- package/mcp/tools/agent/handlers.ts +1 -1
- package/mcp/tools/discord/receiver-server.ts +4 -0
- package/mcp/tools/telegram/receiver-server.ts +6 -4
- package/package.json +6 -4
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Live chat-model catalog (issue #409).
|
|
4
|
+
*
|
|
5
|
+
* The gateway's model list used to come only from `gateway.models` in
|
|
6
|
+
* config.json, written once at provisioning and never touched again — so a
|
|
7
|
+
* catalog that changed upstream could never reach the `/models` picker or
|
|
8
|
+
* `GET /api/v1/models`. This fetches the catalog from the same endpoint the
|
|
9
|
+
* session already talks to, and falls back to the static list.
|
|
10
|
+
*
|
|
11
|
+
* Provider-agnostic by construction: the base URL and token come from env /
|
|
12
|
+
* `~/.claude/settings.json`, never from a hardcoded vendor host. That mirrors
|
|
13
|
+
* the image tool's catalog fetch (`mcp/tools/image/module.ts`), which solved
|
|
14
|
+
* this same problem for image models. The URL-safety check below is a second
|
|
15
|
+
* implementation of that module's `baseUrlIsSecure` rather than a shared one:
|
|
16
|
+
* `tsconfig.json` pins `rootDir` to `src/`, so nothing here can import from
|
|
17
|
+
* `mcp/`. Keep the two in step.
|
|
18
|
+
*/
|
|
19
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
20
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.DEFAULT_CONTEXT_WINDOW = void 0;
|
|
24
|
+
exports.resetModelCatalogCache = resetModelCatalogCache;
|
|
25
|
+
exports.resetSettingsEnvCache = resetSettingsEnvCache;
|
|
26
|
+
exports.catalogBaseUrl = catalogBaseUrl;
|
|
27
|
+
exports.baseUrlIsSecure = baseUrlIsSecure;
|
|
28
|
+
exports.parseModelCatalog = parseModelCatalog;
|
|
29
|
+
exports.fetchModelCatalog = fetchModelCatalog;
|
|
30
|
+
const fs_1 = __importDefault(require("fs"));
|
|
31
|
+
const os_1 = __importDefault(require("os"));
|
|
32
|
+
const path_1 = __importDefault(require("path"));
|
|
33
|
+
/** A stale catalog beats a hung picker — the fetch sits in front of a UI action. */
|
|
34
|
+
const CATALOG_TIMEOUT_MS = 5000;
|
|
35
|
+
/**
|
|
36
|
+
* How long a successful fetch is reused. The picker calls this on every press
|
|
37
|
+
* and `GET /api/v1/models` on every request, so an uncached read would put a
|
|
38
|
+
* network round-trip on both. A minute is short enough that a model added
|
|
39
|
+
* upstream shows up while the user is still looking for it.
|
|
40
|
+
*/
|
|
41
|
+
const CATALOG_TTL_MS = 60000;
|
|
42
|
+
/**
|
|
43
|
+
* How long a catalog stays usable once fetches start failing.
|
|
44
|
+
*
|
|
45
|
+
* Falling straight back to the static list on a blip is worse than it sounds:
|
|
46
|
+
* the static list is the provisioning-time one, so a user running a model that
|
|
47
|
+
* exists only upstream would watch their own model disappear from its picker,
|
|
48
|
+
* and `contextWindowFor` would size their context against the 200k default. A
|
|
49
|
+
* catalog fetched minutes ago is much closer to the truth than that. The bound
|
|
50
|
+
* stops it becoming an unbounded pin on a list nobody can refresh.
|
|
51
|
+
*/
|
|
52
|
+
const CATALOG_STALE_MS = 60 * 60000;
|
|
53
|
+
/** Model kinds that are not selectable as a chat model. See parseModelCatalog. */
|
|
54
|
+
const NON_CHAT_KINDS = new Set(['image', 'video', 'audio', 'speech', 'embedding', 'embeddings', 'rerank', 'moderation']);
|
|
55
|
+
/** Fallback context window for a model no catalog — live or static — describes. */
|
|
56
|
+
exports.DEFAULT_CONTEXT_WINDOW = 200000;
|
|
57
|
+
let cache = null;
|
|
58
|
+
/** In-flight fetch, so N concurrent callers make one request, not N. */
|
|
59
|
+
let inFlight = null;
|
|
60
|
+
let warnedInsecureUrl = false;
|
|
61
|
+
/** Reset module state. Tests only — each case needs a clean cache. */
|
|
62
|
+
function resetModelCatalogCache() {
|
|
63
|
+
cache = null;
|
|
64
|
+
inFlight = null;
|
|
65
|
+
warnedInsecureUrl = false;
|
|
66
|
+
}
|
|
67
|
+
// ── configuration ───────────────────────────────────────────────────────────
|
|
68
|
+
// Parsed `env` block of the Claude Code CLI config. The CLI applies that block
|
|
69
|
+
// internally rather than to the OS environment, so a value set only there is
|
|
70
|
+
// invisible to `process.env` and has to be read from the file.
|
|
71
|
+
let settingsEnvCache;
|
|
72
|
+
function settingsEnv(key) {
|
|
73
|
+
if (settingsEnvCache === undefined) {
|
|
74
|
+
try {
|
|
75
|
+
const dir = process.env.CLAUDE_CONFIG_DIR || path_1.default.join(os_1.default.homedir(), '.claude');
|
|
76
|
+
settingsEnvCache = JSON.parse(fs_1.default.readFileSync(path_1.default.join(dir, 'settings.json'), 'utf8'))?.env ?? null;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
settingsEnvCache = null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const v = settingsEnvCache?.[key];
|
|
83
|
+
return typeof v === 'string' ? v : '';
|
|
84
|
+
}
|
|
85
|
+
/** Tests only — the settings file is read once per process otherwise. */
|
|
86
|
+
function resetSettingsEnvCache() {
|
|
87
|
+
settingsEnvCache = undefined;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Where to fetch the catalog from. `MODELS_BASE_URL` lets a deployment point
|
|
91
|
+
* the catalog at a different host than the messages endpoint; otherwise it is
|
|
92
|
+
* the same `ANTHROPIC_BASE_URL` the session process already uses. Empty means
|
|
93
|
+
* "not configured", which is the signal to stay on the static list.
|
|
94
|
+
*/
|
|
95
|
+
function catalogBaseUrl() {
|
|
96
|
+
const raw = process.env.MODELS_BASE_URL ||
|
|
97
|
+
process.env.ANTHROPIC_BASE_URL ||
|
|
98
|
+
settingsEnv('ANTHROPIC_BASE_URL');
|
|
99
|
+
return raw.replace(/\/+$/, '');
|
|
100
|
+
}
|
|
101
|
+
function catalogAuthToken() {
|
|
102
|
+
return (process.env.MODELS_API_KEY ||
|
|
103
|
+
process.env.ANTHROPIC_AUTH_TOKEN ||
|
|
104
|
+
settingsEnv('ANTHROPIC_AUTH_TOKEN') ||
|
|
105
|
+
settingsEnv('CLAUDE_CODE_OAUTH_TOKEN'));
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* https is required for a public catalog host — the bearer token rides every
|
|
109
|
+
* call. http is tolerated only for a local/internal hop, where cleartext never
|
|
110
|
+
* leaves the machine or network.
|
|
111
|
+
*/
|
|
112
|
+
function baseUrlIsSecure(raw) {
|
|
113
|
+
if (!raw)
|
|
114
|
+
return false;
|
|
115
|
+
let u;
|
|
116
|
+
try {
|
|
117
|
+
u = new URL(raw);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
if (u.protocol === 'https:')
|
|
123
|
+
return true;
|
|
124
|
+
if (u.protocol !== 'http:')
|
|
125
|
+
return false;
|
|
126
|
+
// WHATWG URL keeps the brackets on an IPv6 host, so `hostname` for
|
|
127
|
+
// http://[::1]:8080 is '[::1]', not '::1'. Comparing against the bare form
|
|
128
|
+
// never matched, and an IPv6-loopback proxy was rejected as insecure.
|
|
129
|
+
// mcp/tools/image/module.ts has the same bug in its copy of this check.
|
|
130
|
+
const h = u.hostname.toLowerCase().replace(/^\[|\]$/g, '');
|
|
131
|
+
return (h === 'localhost' ||
|
|
132
|
+
h === 'host.docker.internal' ||
|
|
133
|
+
h.endsWith('.internal') ||
|
|
134
|
+
h.endsWith('.local') ||
|
|
135
|
+
/^127\./.test(h) ||
|
|
136
|
+
h === '::1' ||
|
|
137
|
+
/^10\./.test(h) ||
|
|
138
|
+
/^192\.168\./.test(h) ||
|
|
139
|
+
/^172\.(1[6-9]|2[0-9]|3[01])\./.test(h));
|
|
140
|
+
}
|
|
141
|
+
// ── parsing ─────────────────────────────────────────────────────────────────
|
|
142
|
+
/**
|
|
143
|
+
* Turn a catalog response into `ModelConfig[]`, or null when it carries no
|
|
144
|
+
* usable model.
|
|
145
|
+
*
|
|
146
|
+
* Two response shapes are accepted because two are in the wild: Anthropic's
|
|
147
|
+
* `{ data: [{ id, display_name }] }` and the `{ models: [{ id, label }] }`
|
|
148
|
+
* shape this gateway's own endpoints emit. A proxy may front either.
|
|
149
|
+
*
|
|
150
|
+
* `alias`, `contextWindow` and `multiplier` are not part of any catalog
|
|
151
|
+
* response, so they are carried over from the static entry with the same id.
|
|
152
|
+
* That matters beyond cosmetics: `/session` reports context use as a
|
|
153
|
+
* percentage of `contextWindow`, and `/compact` sizes its window from it — a
|
|
154
|
+
* live model that lost those fields would silently report against 200k.
|
|
155
|
+
*/
|
|
156
|
+
function parseModelCatalog(body, fallback) {
|
|
157
|
+
if (typeof body !== 'object' || body === null)
|
|
158
|
+
return null;
|
|
159
|
+
const rows = body.data
|
|
160
|
+
?? body.models;
|
|
161
|
+
if (!Array.isArray(rows))
|
|
162
|
+
return null;
|
|
163
|
+
const known = new Map(fallback.map((m) => [m.id, m]));
|
|
164
|
+
const seen = new Set();
|
|
165
|
+
const models = [];
|
|
166
|
+
for (const row of rows) {
|
|
167
|
+
if (typeof row !== 'object' || row === null)
|
|
168
|
+
continue;
|
|
169
|
+
const r = row;
|
|
170
|
+
const id = typeof r.id === 'string' ? r.id.trim() : '';
|
|
171
|
+
if (!id || seen.has(id))
|
|
172
|
+
continue;
|
|
173
|
+
// A proxy that fronts image generation alongside chat may serve one
|
|
174
|
+
// catalog for both — the image tool asks for its half with
|
|
175
|
+
// `/v1/models?kind=image`. An image model in the chat picker is selectable
|
|
176
|
+
// and cannot chat, so drop anything that says what it is and does not say
|
|
177
|
+
// chat. A row with no kind/type is kept: most catalogs (Anthropic's
|
|
178
|
+
// included, where `type` is the constant "model") say nothing useful here,
|
|
179
|
+
// and dropping those would empty the list. No request-side `kind=chat` is
|
|
180
|
+
// sent because this repo has no way to know the proxy's chat kind value,
|
|
181
|
+
// and guessing one risks an empty catalog on every deployment.
|
|
182
|
+
const kind = [r.kind, r.type].find((v) => typeof v === 'string' && v.trim());
|
|
183
|
+
if (typeof kind === 'string' && NON_CHAT_KINDS.has(kind.toLowerCase()))
|
|
184
|
+
continue;
|
|
185
|
+
seen.add(id);
|
|
186
|
+
const staticEntry = known.get(id);
|
|
187
|
+
const label = [r.display_name, r.label, r.name].find((v) => typeof v === 'string' && v.trim())
|
|
188
|
+
?? staticEntry?.label ?? id;
|
|
189
|
+
const ctx = [r.context_window, r.contextWindow].find((v) => typeof v === 'number' && v > 0);
|
|
190
|
+
const multiplier = typeof r.multiplier === 'number' ? r.multiplier : staticEntry?.multiplier;
|
|
191
|
+
models.push({
|
|
192
|
+
id,
|
|
193
|
+
label: String(label),
|
|
194
|
+
// A live-only model has no curated alias. Falling back to the id keeps
|
|
195
|
+
// `/model <alias>` working for it rather than leaving the field empty.
|
|
196
|
+
alias: (typeof r.alias === 'string' && r.alias.trim()) || staticEntry?.alias || id,
|
|
197
|
+
contextWindow: ctx ?? staticEntry?.contextWindow ?? exports.DEFAULT_CONTEXT_WINDOW,
|
|
198
|
+
...(multiplier === undefined ? {} : { multiplier }),
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
// An empty catalog is treated as a failed fetch, not as "this deployment has
|
|
202
|
+
// no models": an empty picker is strictly worse than a stale one, and an
|
|
203
|
+
// upstream returning [] is far more likely to be broken than correct.
|
|
204
|
+
return models.length > 0 ? models : null;
|
|
205
|
+
}
|
|
206
|
+
// ── fetch ───────────────────────────────────────────────────────────────────
|
|
207
|
+
/**
|
|
208
|
+
* Fetch the live catalog, or return null to mean "use the static list".
|
|
209
|
+
*
|
|
210
|
+
* Never throws and never rejects: every caller is a picker or a list endpoint
|
|
211
|
+
* whose correct behaviour on any failure is to show the static list. A cached
|
|
212
|
+
* result is reused for {@link CATALOG_TTL_MS}; concurrent callers share one
|
|
213
|
+
* request.
|
|
214
|
+
*/
|
|
215
|
+
async function fetchModelCatalog(fallback, now = Date.now()) {
|
|
216
|
+
if (cache && now - cache.fetchedAt < CATALOG_TTL_MS)
|
|
217
|
+
return cache.models;
|
|
218
|
+
if (inFlight)
|
|
219
|
+
return inFlight;
|
|
220
|
+
// A catalog that is merely stale is still better than the static list, but
|
|
221
|
+
// only while a fetch is actually failing — a successful one below replaces it.
|
|
222
|
+
const stale = cache && now - cache.fetchedAt < CATALOG_STALE_MS ? cache.models : null;
|
|
223
|
+
const base = catalogBaseUrl();
|
|
224
|
+
if (!base)
|
|
225
|
+
return null; // standalone deployment — static list is the catalog
|
|
226
|
+
if (!baseUrlIsSecure(base)) {
|
|
227
|
+
if (!warnedInsecureUrl) {
|
|
228
|
+
warnedInsecureUrl = true;
|
|
229
|
+
console.warn('[model-catalog] base URL is http to a non-local host — refusing to send the auth token '
|
|
230
|
+
+ 'in cleartext. Using the static model list. Use https (or a local/internal host).');
|
|
231
|
+
}
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
inFlight = (async () => {
|
|
235
|
+
try {
|
|
236
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
237
|
+
const token = catalogAuthToken();
|
|
238
|
+
if (token)
|
|
239
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
240
|
+
const res = await fetch(`${base}/v1/models`, {
|
|
241
|
+
method: 'GET',
|
|
242
|
+
headers,
|
|
243
|
+
signal: AbortSignal.timeout(CATALOG_TIMEOUT_MS),
|
|
244
|
+
});
|
|
245
|
+
if (!res.ok)
|
|
246
|
+
return stale;
|
|
247
|
+
const parsed = parseModelCatalog(await res.json(), fallback);
|
|
248
|
+
// Only a usable catalog is cached, and the cache stamp uses the same
|
|
249
|
+
// clock the TTL check above read. Caching a failure would pin the
|
|
250
|
+
// fallback for a full TTL after one blip.
|
|
251
|
+
if (parsed)
|
|
252
|
+
cache = { models: parsed, fetchedAt: now };
|
|
253
|
+
return parsed ?? stale;
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
return stale; // unreachable, timed out, or unparseable
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
inFlight = null;
|
|
260
|
+
}
|
|
261
|
+
})();
|
|
262
|
+
return inFlight;
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=model-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../../src/agent/model-catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/runner.d.ts
CHANGED
|
@@ -208,6 +208,30 @@ export declare class AgentRunner extends EventEmitter {
|
|
|
208
208
|
* Dispatch a session management command to the appropriate handler.
|
|
209
209
|
*/
|
|
210
210
|
private handleSessionCommand;
|
|
211
|
+
/**
|
|
212
|
+
* /models — the model picker for channels without an inline keyboard.
|
|
213
|
+
*
|
|
214
|
+
* Telegram never reaches this: its receiver answers `/models` itself with a
|
|
215
|
+
* button keyboard and does not forward the message. Discord and LINE have no
|
|
216
|
+
* picker of their own, so they get the list as text plus the command that
|
|
217
|
+
* selects from it (issue #409).
|
|
218
|
+
*
|
|
219
|
+
* A channel listed in BUILTIN_COMMANDS but missing a branch here is worse
|
|
220
|
+
* than one not listed at all — the gate swallows the message and the user
|
|
221
|
+
* gets silence instead of the agent's reply. `/model` on Discord was in
|
|
222
|
+
* exactly that state before this.
|
|
223
|
+
*/
|
|
224
|
+
private handleCommandModels;
|
|
225
|
+
/**
|
|
226
|
+
* /model — show the current model, or switch to one from the catalog.
|
|
227
|
+
*
|
|
228
|
+
* An unrecognised argument is refused rather than persisted: unlike the API
|
|
229
|
+
* (where the caller is authenticated and the provider validates the id), a
|
|
230
|
+
* typo in a chat message would otherwise be written into config.json and
|
|
231
|
+
* break the agent's next spawn. Anything the catalog knows — including a
|
|
232
|
+
* model that exists only upstream and not in the static list — is accepted.
|
|
233
|
+
*/
|
|
234
|
+
private handleCommandModel;
|
|
211
235
|
/**
|
|
212
236
|
* /sessions — list all sessions for this chat.
|
|
213
237
|
*/
|
|
@@ -472,6 +496,58 @@ export declare class AgentRunner extends EventEmitter {
|
|
|
472
496
|
result: Record<string, unknown>;
|
|
473
497
|
responseText: string;
|
|
474
498
|
}>;
|
|
499
|
+
/**
|
|
500
|
+
* Whether an inbound channel message came from a 1:1 chat with the bot.
|
|
501
|
+
*
|
|
502
|
+
* Gates the one channel command that reaches past its own chat: `/model <x>`
|
|
503
|
+
* rewrites `config.json` for the whole agent and restarts every session in
|
|
504
|
+
* every chat. The channel access gates do not cover that. Discord's, in a
|
|
505
|
+
* guild, checks the guild, the channel, and a mention — never the user
|
|
506
|
+
* (`allowFrom` in mcp/tools/discord/access.ts is DM-only), so without this
|
|
507
|
+
* any member of an allowlisted channel could switch the model out from under
|
|
508
|
+
* everyone else and kill their in-flight turns. LINE forwards group and room
|
|
509
|
+
* messages the same way. Telegram's receiver answers `/model` itself behind
|
|
510
|
+
* a private-chat + allowlist check and does not forward it here.
|
|
511
|
+
*
|
|
512
|
+
* Fails closed: a channel that does not report a chat type cannot switch.
|
|
513
|
+
* Listing models (`/models`, bare `/model`) is unaffected — it reads nothing
|
|
514
|
+
* and changes nothing.
|
|
515
|
+
*/
|
|
516
|
+
private isDirectChat;
|
|
517
|
+
/**
|
|
518
|
+
* Restart every non-api session so a model change actually takes effect.
|
|
519
|
+
*
|
|
520
|
+
* `setModel` only rewrites config — a session process was spawned with the
|
|
521
|
+
* old model on its command line and keeps using it until it is restarted.
|
|
522
|
+
* Reporting "model set" without this is a false success: the next turn still
|
|
523
|
+
* runs on the previous model. Returns whether anything was restarted.
|
|
524
|
+
*/
|
|
525
|
+
private restartChannelSessions;
|
|
526
|
+
/**
|
|
527
|
+
* The model list this gateway offers: the live catalog when one is reachable,
|
|
528
|
+
* the configured/static list otherwise (issue #409). Cached upstream, so the
|
|
529
|
+
* six callers that only want one model's context window pay for at most one
|
|
530
|
+
* fetch a minute between them.
|
|
531
|
+
*/
|
|
532
|
+
private availableModels;
|
|
533
|
+
/**
|
|
534
|
+
* Context window for a model id. Resolving this through the live catalog is
|
|
535
|
+
* what keeps `/session`'s "context used" percentage and `/compact`'s window
|
|
536
|
+
* honest for a model that exists only upstream — before, any such model fell
|
|
537
|
+
* through to the 200k default no matter how large its real window.
|
|
538
|
+
*/
|
|
539
|
+
private contextWindowFor;
|
|
540
|
+
/**
|
|
541
|
+
* Models `/model <arg>` may switch to: what the catalog offers, plus the
|
|
542
|
+
* configured list.
|
|
543
|
+
*
|
|
544
|
+
* The union is only for *resolution*, never for the `/models` listing — the
|
|
545
|
+
* listing has to reflect what upstream actually offers, or a model removed
|
|
546
|
+
* upstream would linger in the picker forever, which is the bug this all
|
|
547
|
+
* started from. Without the union a user who switches to a live-only model
|
|
548
|
+
* is trapped: their previous configured model is no longer nameable.
|
|
549
|
+
*/
|
|
550
|
+
private selectableModels;
|
|
475
551
|
setModel(newModel: string): Promise<void>;
|
|
476
552
|
listApiSessions(chatId: string): Promise<import('../types').SessionIndex>;
|
|
477
553
|
createApiSession(chatId: string, prompt?: string, name?: string): Promise<import('../types').SessionMeta>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAMtC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAW,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAU7H,OAAO,EAA0C,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"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"}
|