amalgm 0.1.146 → 0.1.147

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "amalgm",
3
- "version": "0.1.146",
3
+ "version": "0.1.147",
4
4
  "description": "Amalgm local computer runtime: login, MCP, chat, events, previews, and tunnels.",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var harnesses_exports = {};
22
22
  __export(harnesses_exports, {
23
23
  AUTH_METHODS: () => AUTH_METHODS,
24
+ BASE_AGENT_HARNESS_IDS: () => BASE_AGENT_HARNESS_IDS,
24
25
  DISABLED_HARNESS_IDS: () => DISABLED_HARNESS_IDS,
25
26
  HARNESSES: () => HARNESSES,
26
27
  HARNESS_IDS: () => HARNESS_IDS,
@@ -125,18 +126,39 @@ var INTERNAL_TO_GATEWAY_MODEL_IDS = {
125
126
  [CLAUDE_OPUS_4_8_1M_MODEL_ID]: "anthropic/claude-opus-4.8"
126
127
  };
127
128
  var CURSOR_MODEL_ALIASES = {
129
+ "cursor-composer-2": "cursor/composer-2.5",
130
+ "cursor-composer-2-fast": "cursor/composer-2.5-fast",
131
+ "cursor-composer-2.5": "cursor/composer-2.5",
132
+ "cursor-composer-2.5-fast": "cursor/composer-2.5-fast",
133
+ "cursor/composer-2": "cursor/composer-2.5",
134
+ "cursor/composer-2-fast": "cursor/composer-2.5-fast",
135
+ "cursor-fable-5-thinking": "anthropic/claude-fable-5-thinking-high",
136
+ "cursor-fable-5": "anthropic/claude-fable-5-high",
137
+ "cursor-opus-4.8-thinking": "anthropic/claude-opus-4.8-thinking-high",
138
+ "cursor-opus-4.8": "anthropic/claude-opus-4.8-high",
139
+ "cursor-opus-4.7-thinking": "anthropic/claude-opus-4.7-thinking-xhigh",
140
+ "cursor-opus-4.7": "anthropic/claude-opus-4.7-xhigh",
128
141
  "cursor-opus-4.6-thinking": "anthropic/claude-opus-4.6-high-thinking",
129
142
  "cursor-opus-4.6": "anthropic/claude-opus-4.6-high",
130
143
  "cursor-opus-4.5-thinking": "anthropic/claude-opus-4.5-high-thinking",
131
144
  "cursor-opus-4.5": "anthropic/claude-opus-4.5-high",
145
+ "cursor-sonnet-5-thinking": "anthropic/claude-sonnet-5-thinking-high",
146
+ "cursor-sonnet-5": "anthropic/claude-sonnet-5-high",
147
+ "cursor-sonnet-4.6-thinking": "anthropic/claude-sonnet-4.6-medium-thinking",
148
+ "cursor-sonnet-4.6": "anthropic/claude-sonnet-4.6-medium",
132
149
  "cursor-sonnet-4.5-thinking": "anthropic/claude-sonnet-4.5-thinking",
133
150
  "cursor-sonnet-4.5": "anthropic/claude-sonnet-4.5",
151
+ "cursor-sonnet-4-thinking": "anthropic/claude-sonnet-4-thinking",
152
+ "cursor-sonnet-4": "anthropic/claude-sonnet-4",
134
153
  "cursor-gemini-3-pro": "google/gemini-3-pro",
135
- "cursor-grok": "xai/grok",
154
+ "cursor-grok": "xai/grok-4.5-xhigh",
136
155
  "cursor-gpt-5.4": "openai/gpt-5.4-medium",
156
+ "cursor-anthropic/claude-fable-5": "anthropic/claude-fable-5-high",
157
+ "cursor-anthropic/claude-opus-4.8": "anthropic/claude-opus-4.8-high",
137
158
  "cursor-anthropic/claude-opus-4.7": "anthropic/claude-opus-4.7-xhigh",
138
159
  "cursor-anthropic/claude-opus-4.6": "anthropic/claude-opus-4.6-high",
139
160
  "cursor-anthropic/claude-opus-4.5": "anthropic/claude-opus-4.5-high",
161
+ "cursor-anthropic/claude-sonnet-5": "anthropic/claude-sonnet-5-high",
140
162
  "cursor-anthropic/claude-sonnet-4.6": "anthropic/claude-sonnet-4.6-medium",
141
163
  "cursor-anthropic/claude-sonnet-4.5": "anthropic/claude-sonnet-4.5",
142
164
  "cursor-anthropic/claude-sonnet-4": "anthropic/claude-sonnet-4",
@@ -149,8 +171,36 @@ var CURSOR_MODEL_ALIASES = {
149
171
  "cursor-google/gemini-3.1-pro-preview": "google/gemini-3.1-pro",
150
172
  "cursor-google/gemini-3.1-pro": "google/gemini-3.1-pro",
151
173
  "cursor-google/gemini-3-flash": "google/gemini-3-flash",
174
+ "cursor-xai/grok-4.5": "xai/grok-4.5-xhigh",
152
175
  "cursor-xai/grok-4.20": "xai/grok-4.20",
153
- "cursor-moonshotai/kimi-k2.5": "moonshotai/kimi-k2.5"
176
+ "cursor-moonshotai/kimi-k2.7-code": "moonshotai/kimi-k2.7-code",
177
+ "cursor-moonshotai/kimi-k2.5": "moonshotai/kimi-k2.5",
178
+ "cursor-zai/glm-5.2": "zai/glm-5.2-high",
179
+ "anthropic/claude-fable-5-thinking": "anthropic/claude-fable-5-thinking-high",
180
+ "anthropic/claude-fable-5": "anthropic/claude-fable-5-high",
181
+ "anthropic/claude-opus-4.8-thinking": "anthropic/claude-opus-4.8-thinking-high",
182
+ "anthropic/claude-opus-4.8": "anthropic/claude-opus-4.8-high",
183
+ "anthropic/claude-opus-4.7-thinking": "anthropic/claude-opus-4.7-thinking-xhigh",
184
+ "anthropic/claude-opus-4.7": "anthropic/claude-opus-4.7-xhigh",
185
+ "anthropic/claude-opus-4.6-thinking": "anthropic/claude-opus-4.6-high-thinking",
186
+ "anthropic/claude-opus-4.6": "anthropic/claude-opus-4.6-high",
187
+ "anthropic/claude-opus-4.5-thinking": "anthropic/claude-opus-4.5-high-thinking",
188
+ "anthropic/claude-opus-4.5": "anthropic/claude-opus-4.5-high",
189
+ "anthropic/claude-sonnet-5-thinking": "anthropic/claude-sonnet-5-thinking-high",
190
+ "anthropic/claude-sonnet-5": "anthropic/claude-sonnet-5-high",
191
+ "anthropic/claude-sonnet-4.6-thinking": "anthropic/claude-sonnet-4.6-medium-thinking",
192
+ "anthropic/claude-sonnet-4.6": "anthropic/claude-sonnet-4.6-medium",
193
+ "openai/gpt-5.5": "openai/gpt-5.5-medium",
194
+ "openai/gpt-5.4": "openai/gpt-5.4-medium",
195
+ "openai/gpt-5.4-mini": "openai/gpt-5.4-mini-medium",
196
+ "openai/gpt-5.4-nano": "openai/gpt-5.4-nano-medium",
197
+ "google/gemini-3.1-pro-preview": "google/gemini-3.1-pro",
198
+ "xai/grok-4.5": "xai/grok-4.5-xhigh",
199
+ "zai/glm-5.2": "zai/glm-5.2-high"
200
+ };
201
+ var CURSOR_CLI_ALIASES = {
202
+ "composer-2": "composer-2.5",
203
+ "composer-2-fast": "composer-2.5-fast"
154
204
  };
155
205
  var CODEX_THINKING_SUFFIX_RE = /:thinking-(low|medium|high|xhigh)$/i;
156
206
  var CODEX_LEGACY_THINKING_SUFFIX_RE = /-thinking-(low|medium|high|xhigh)$/i;
@@ -235,11 +285,12 @@ function normalizeCodexModelSelection(value) {
235
285
  }
236
286
  function cursorCliModelToCanonicalModelId(value) {
237
287
  const cleaned = cleanModelId(value);
238
- const cliModel = cleaned.startsWith("cursor-") ? cleaned.slice("cursor-".length) : cleaned;
288
+ const rawCliModel = cleaned.startsWith("cursor-") ? cleaned.slice("cursor-".length) : cleaned;
289
+ const cliModel = CURSOR_CLI_ALIASES[rawCliModel] ?? rawCliModel;
239
290
  const prefixed = `cursor-${cliModel}`;
240
291
  if (CURSOR_MODEL_ALIASES[prefixed]) return CURSOR_MODEL_ALIASES[prefixed];
241
- if (cliModel.startsWith("cursor/")) return cliModel;
242
- if (["auto", "composer-2-fast", "composer-2", "composer-1.5", "composer-1"].includes(cliModel)) {
292
+ if (cliModel.startsWith("cursor/")) return CURSOR_MODEL_ALIASES[cliModel] ?? cliModel;
293
+ if (["auto", "composer-2.5", "composer-2.5-fast", "composer-1.5", "composer-1"].includes(cliModel)) {
243
294
  return `cursor/${cliModel}`;
244
295
  }
245
296
  if (/^(gpt-|gpt\d|o-|o\d)/i.test(cliModel)) {
@@ -248,15 +299,21 @@ function cursorCliModelToCanonicalModelId(value) {
248
299
  if (cliModel.startsWith("gemini-")) {
249
300
  return `google/${cliModel}`;
250
301
  }
251
- if (cliModel === "kimi-k2.5") {
252
- return "moonshotai/kimi-k2.5";
302
+ if (cliModel.startsWith("kimi-")) {
303
+ return `moonshotai/${cliModel}`;
253
304
  }
254
305
  if (cliModel === "grok") {
255
306
  return "xai/grok";
256
307
  }
308
+ if (cliModel.startsWith("grok-4.5")) {
309
+ return `xai/${cliModel}`;
310
+ }
257
311
  if (cliModel.startsWith("grok-4-20")) {
258
312
  return `xai/${cliModel.replace(/^grok-4-20/, "grok-4.20")}`;
259
313
  }
314
+ if (cliModel.startsWith("glm-")) {
315
+ return `zai/${cliModel}`;
316
+ }
260
317
  const opus47Match = cliModel.match(/^claude-opus-4-7(?:-(.+))?$/);
261
318
  if (opus47Match) {
262
319
  return `anthropic/claude-opus-4.7${opus47Match[1] ? `-${opus47Match[1]}` : ""}`;
@@ -282,16 +339,46 @@ function normalizeCursorModelId(value) {
282
339
  }
283
340
  function cursorCanonicalModelIdToCliModel(value) {
284
341
  const canonical = normalizeCursorModelId(value);
285
- if (canonical.startsWith("cursor/")) return canonical.slice("cursor/".length);
286
- if (canonical.startsWith("cursor-")) return canonical.slice("cursor-".length);
342
+ if (CURSOR_MODEL_ALIASES[canonical]) return cursorCanonicalModelIdToCliModel(CURSOR_MODEL_ALIASES[canonical]);
343
+ if (canonical.startsWith("cursor/")) {
344
+ return CURSOR_CLI_ALIASES[canonical.slice("cursor/".length)] ?? canonical.slice("cursor/".length);
345
+ }
346
+ if (canonical.startsWith("cursor-")) {
347
+ return CURSOR_CLI_ALIASES[canonical.slice("cursor-".length)] ?? canonical.slice("cursor-".length);
348
+ }
287
349
  if (canonical.startsWith("openai/")) return canonical.slice("openai/".length);
288
350
  if (canonical.startsWith("google/")) return canonical.slice("google/".length);
289
351
  if (canonical.startsWith("moonshotai/")) return canonical.slice("moonshotai/".length);
352
+ if (canonical.startsWith("zai/")) return canonical.slice("zai/".length);
290
353
  if (canonical.startsWith("xai/")) {
291
354
  return canonical.slice("xai/".length).replace(/^grok-4\.20/, "grok-4-20");
292
355
  }
293
356
  if (canonical.startsWith("anthropic/")) {
294
- return canonical.slice("anthropic/".length).replace(/-(\d+)\.(\d+)(?=$|-)/, "-$1-$2");
357
+ const model = canonical.slice("anthropic/".length);
358
+ const versioned = model.match(/^claude-(opus|sonnet)-(4(?:\.\d+)?)(?:-(.+))?$/);
359
+ if (versioned) {
360
+ const [, family, version, rawSuffix] = versioned;
361
+ const suffix = rawSuffix || "";
362
+ if (family === "sonnet" && version === "4.6") {
363
+ if (!suffix) return "claude-4.6-sonnet-medium";
364
+ if (suffix === "thinking") return "claude-4.6-sonnet-medium-thinking";
365
+ return `claude-4.6-sonnet-${suffix}`;
366
+ }
367
+ if (family === "sonnet" && (version === "4.5" || version === "4")) {
368
+ return `claude-${version}-sonnet${suffix ? `-${suffix}` : ""}`;
369
+ }
370
+ if (family === "opus" && version === "4.6") {
371
+ if (!suffix) return "claude-4.6-opus-high";
372
+ if (suffix === "thinking") return "claude-4.6-opus-high-thinking";
373
+ return `claude-4.6-opus-${suffix}`;
374
+ }
375
+ if (family === "opus" && version === "4.5") {
376
+ if (!suffix) return "claude-4.5-opus-high";
377
+ if (suffix === "thinking") return "claude-4.5-opus-high-thinking";
378
+ return `claude-4.5-opus-${suffix}`;
379
+ }
380
+ }
381
+ return model.replace(/-(\d+)\.(\d+)(?=$|-)/, "-$1-$2");
295
382
  }
296
383
  return canonical;
297
384
  }
@@ -315,9 +402,12 @@ function cursorGatewayModelId(modelId) {
315
402
  }
316
403
  if (canonical.startsWith("anthropic/")) {
317
404
  const model = canonical.slice("anthropic/".length);
405
+ if (model.startsWith("claude-fable-5")) return "anthropic/claude-fable-5";
406
+ if (model.startsWith("claude-opus-4.8")) return "anthropic/claude-opus-4.8";
318
407
  if (model.startsWith("claude-opus-4.7")) return "anthropic/claude-opus-4.7";
319
408
  if (model.startsWith("claude-opus-4.6")) return "anthropic/claude-opus-4.6";
320
409
  if (model.startsWith("claude-opus-4.5")) return "anthropic/claude-opus-4.5";
410
+ if (model.startsWith("claude-sonnet-5")) return "anthropic/claude-sonnet-5";
321
411
  if (model.startsWith("claude-sonnet-4.6")) return "anthropic/claude-sonnet-4.6";
322
412
  if (model.startsWith("claude-sonnet-4.5")) return "anthropic/claude-sonnet-4.5";
323
413
  if (model.startsWith("claude-sonnet-4")) return "anthropic/claude-sonnet-4";
@@ -325,6 +415,9 @@ function cursorGatewayModelId(modelId) {
325
415
  }
326
416
  if (canonical === "google/gemini-3.1-pro") return "google/gemini-3.1-pro";
327
417
  if (canonical === "google/gemini-3-pro") return "google/gemini-3-pro";
418
+ if (canonical.startsWith("moonshotai/kimi-k2.7")) return "moonshotai/kimi-k2.7-code";
419
+ if (canonical.startsWith("zai/glm-5.2")) return "zai/glm-5.2";
420
+ if (canonical.startsWith("xai/grok-4.5")) return "xai/grok-4.5";
328
421
  if (canonical.startsWith("xai/grok-4.20")) return "xai/grok-4.20";
329
422
  return canonical;
330
423
  }
@@ -571,36 +664,54 @@ var AMP_MODELS = [
571
664
  var CURSOR_MODEL_ROWS = [
572
665
  ["auto", "Auto", "cursor"],
573
666
  ["composer-2.5", "Composer 2.5", "cursor"],
574
- ["claude-fable-5", "Fable 5 Thinking", "anthropic"],
575
- ["claude-opus-4-8", "Opus 4.8 Thinking", "anthropic"],
576
- ["claude-opus-4-7", "Opus 4.7 Thinking", "anthropic"],
577
- ["claude-opus-4-6", "Opus 4.6 Thinking", "anthropic"],
578
- ["claude-opus-4-5", "Opus 4.5 Thinking", "anthropic"],
579
- ["claude-sonnet-5", "Sonnet 5 Thinking", "anthropic"],
580
- ["claude-sonnet-4-6", "Sonnet 4.6 Thinking", "anthropic"],
581
- ["claude-sonnet-4-5", "Sonnet 4.5 Thinking", "anthropic"],
667
+ ["composer-2.5-fast", "Composer 2.5 Fast", "cursor"],
668
+ ["claude-fable-5-high", "Fable 5", "anthropic"],
669
+ ["claude-fable-5-thinking-high", "Fable 5 Thinking", "anthropic"],
670
+ ["claude-fable-5-thinking-xhigh", "Fable 5 Extra High Thinking", "anthropic"],
671
+ ["claude-opus-4-8-high", "Opus 4.8", "anthropic"],
672
+ ["claude-opus-4-8-high-fast", "Opus 4.8 Fast", "anthropic"],
673
+ ["claude-opus-4-8-thinking-high", "Opus 4.8 Thinking", "anthropic"],
674
+ ["claude-opus-4-8-thinking-high-fast", "Opus 4.8 Thinking Fast", "anthropic"],
675
+ ["claude-opus-4-7-xhigh", "Opus 4.7", "anthropic"],
676
+ ["claude-opus-4-7-thinking-xhigh", "Opus 4.7 Thinking", "anthropic"],
677
+ ["claude-4.6-opus-high", "Opus 4.6", "anthropic"],
678
+ ["claude-4.6-opus-high-thinking", "Opus 4.6 Thinking", "anthropic"],
679
+ ["claude-4.5-opus-high", "Opus 4.5", "anthropic"],
680
+ ["claude-4.5-opus-high-thinking", "Opus 4.5 Thinking", "anthropic"],
681
+ ["claude-sonnet-5-medium", "Sonnet 5 Medium", "anthropic"],
682
+ ["claude-sonnet-5-high", "Sonnet 5", "anthropic"],
683
+ ["claude-sonnet-5-thinking-high", "Sonnet 5 Thinking", "anthropic"],
684
+ ["claude-4.6-sonnet-medium", "Sonnet 4.6", "anthropic"],
685
+ ["claude-4.6-sonnet-medium-thinking", "Sonnet 4.6 Thinking", "anthropic"],
686
+ ["claude-4.5-sonnet", "Sonnet 4.5", "anthropic"],
687
+ ["claude-4.5-sonnet-thinking", "Sonnet 4.5 Thinking", "anthropic"],
582
688
  ["claude-sonnet-4", "Sonnet 4", "anthropic"],
583
- ["claude-haiku-4-5", "Haiku 4.5 Thinking", "anthropic"],
584
- ["gpt-5.5", "GPT-5.5", "openai"],
585
- ["gpt-5.4", "GPT-5.4", "openai"],
586
- ["gpt-5.4-mini", "GPT-5.4 Mini", "openai"],
587
- ["gpt-5.4-nano", "GPT-5.4 Nano", "openai"],
689
+ ["claude-4-sonnet-thinking", "Sonnet 4 Thinking", "anthropic"],
690
+ ["gpt-5.5-medium", "GPT-5.5", "openai"],
691
+ ["gpt-5.5-high", "GPT-5.5 High", "openai"],
692
+ ["gpt-5.5-extra-high", "GPT-5.5 Extra High", "openai"],
693
+ ["gpt-5.4-medium", "GPT-5.4", "openai"],
694
+ ["gpt-5.4-high", "GPT-5.4 High", "openai"],
695
+ ["gpt-5.4-mini-medium", "GPT-5.4 Mini", "openai"],
696
+ ["gpt-5.4-nano-medium", "GPT-5.4 Nano", "openai"],
588
697
  ["gpt-5.3-codex", "Codex 5.3", "openai"],
698
+ ["gpt-5.3-codex-high", "Codex 5.3 High", "openai"],
589
699
  ["gpt-5.2-codex", "Codex 5.2", "openai"],
590
700
  ["gpt-5.2", "GPT-5.2", "openai"],
591
- ["gpt-5.1-codex-max", "Codex 5.1 Max", "openai"],
701
+ ["gpt-5.2-high", "GPT-5.2 High", "openai"],
702
+ ["gpt-5.1-codex-max-medium", "Codex 5.1 Max", "openai"],
592
703
  ["gpt-5.1-codex-mini", "Codex 5.1 Mini", "openai"],
593
704
  ["gpt-5.1", "GPT-5.1", "openai"],
594
705
  ["gpt-5-mini", "GPT-5 Mini", "openai"],
595
706
  ["gemini-3.5-flash", "Gemini 3.5 Flash", "google"],
596
707
  ["gemini-3.1-pro", "Gemini 3.1 Pro", "google"],
597
708
  ["gemini-3-flash", "Gemini 3 Flash", "google"],
598
- ["gemini-2.5-flash", "Gemini 2.5 Flash", "google"],
599
- ["grok-4.3", "Grok 4.3", "xai"],
600
- ["grok-build-0.1", "Grok Build 0.1", "xai"],
709
+ ["grok-4.5-xhigh", "Grok 4.5", "xai"],
710
+ ["grok-4.5-fast-xhigh", "Grok 4.5 Fast", "xai"],
711
+ ["grok-4.5-high", "Grok 4.5 Medium", "xai"],
601
712
  ["kimi-k2.7-code", "Kimi K2.7 Code", "moonshotai"],
602
- ["kimi-k2.5", "Kimi K2.5", "moonshotai"],
603
- ["glm-5.2", "GLM-5.2", "zai"]
713
+ ["glm-5.2-high", "GLM 5.2", "zai"],
714
+ ["glm-5.2-max", "GLM 5.2 Max", "zai"]
604
715
  ];
605
716
  function cursorModelDescription(providerGroup) {
606
717
  switch (providerGroup) {
@@ -755,6 +866,13 @@ var VISIBLE_HARNESS_IDS = [
755
866
  "cursor",
756
867
  "pi"
757
868
  ];
869
+ var BASE_AGENT_HARNESS_IDS = [
870
+ "claude_code",
871
+ "codex",
872
+ "cursor",
873
+ "opencode",
874
+ "pi"
875
+ ];
758
876
  var DISABLED_HARNESS_IDS = /* @__PURE__ */ new Set([]);
759
877
  var dynamicModelCache = /* @__PURE__ */ new Map();
760
878
  function registerDynamicModels(models) {
@@ -894,6 +1012,7 @@ function getLoginCommandForHarness(harnessId) {
894
1012
  // Annotate the CommonJS export names for ESM import in node:
895
1013
  0 && (module.exports = {
896
1014
  AUTH_METHODS,
1015
+ BASE_AGENT_HARNESS_IDS,
897
1016
  DISABLED_HARNESS_IDS,
898
1017
  HARNESSES,
899
1018
  HARNESS_IDS,