clawmoney 0.15.34 → 0.15.36

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.
@@ -30,9 +30,24 @@ const RECOMMENDED_MODELS = {
30
30
  // Claude Code /model menu: Default(Sonnet 4.6) / Sonnet(1M) / Opus(1M) / Haiku
31
31
  // → 3 unique model IDs (Sonnet 1M = same model + context-1m beta)
32
32
  claude: ["claude-sonnet-4-6", "claude-opus-4-6", "claude-haiku-4-5"],
33
- // Codex CLI /model menu: gpt-5.4 (current frontier) / gpt-5.4-mini /
34
- // gpt-5.3-codex (Codex-optimized) / gpt-5.2 (long-running pro)
35
- codex: ["gpt-5.4", "gpt-5.4-mini", "gpt-5.3-codex", "gpt-5.2"],
33
+ // Codex CLI /model menu (verified April 2026, v0.12x):
34
+ // gpt-5.3-codex (default) latest frontier agentic coding
35
+ // gpt-5.4 (current) — latest frontier agentic coding
36
+ // gpt-5.2-codex — prior frontier agentic coding
37
+ // gpt-5.1-codex-max — Codex-optimized flagship (deep+fast)
38
+ // gpt-5.2 — latest frontier general model
39
+ // gpt-5.1-codex-mini — cheap/fast/smaller Codex
40
+ // gpt-5.4-mini is NOT in Codex CLI's menu — ChatGPT's Plus API offers
41
+ // it but Codex CLI doesn't expose it, so serving it as a Codex-family
42
+ // provider would never see traffic. Dropped from the recommended list.
43
+ codex: [
44
+ "gpt-5.3-codex",
45
+ "gpt-5.4",
46
+ "gpt-5.2-codex",
47
+ "gpt-5.1-codex-max",
48
+ "gpt-5.2",
49
+ "gpt-5.1-codex-mini",
50
+ ],
36
51
  // Gemini CLI exposes a long list; mainstream picks are the production-
37
52
  // stable 2.5 line (pro + flash) and the latest 3.x preview (pro + flash).
38
53
  // Image / thinking variants and lite/customtools are intentionally
@@ -348,18 +363,25 @@ export async function relaySetupCommand() {
348
363
  }
349
364
  // ── Step 7: prune — implement "pick-what-you-run" semantics ──
350
365
  //
351
- // setup is meant to be declarative: the cli_types the user just picked
352
- // are the complete set of what the daemon should serve. Earlier test
353
- // runs that registered different subscriptions (antigravity, gemini,
354
- // etc.) would otherwise linger in the DB and get preflighted every
355
- // daemon start, confusing the user who just picked claude+codex.
366
+ // setup is declarative: the (cli_type, model) pairs the user just
367
+ // picked are the complete set of what the daemon should serve.
368
+ // Earlier test runs that registered different subscriptions
369
+ // (antigravity, gemini, etc.) OR stale model versions
370
+ // (claude-sonnet-4-5 before the recommended list moved to 4-6)
371
+ // would otherwise linger in the DB and get preflighted every
372
+ // daemon start.
356
373
  //
357
- // We only prune AFTER registration succeeds, so a failed batch doesn't
358
- // wipe the user's existing state. And we only send the selected
359
- // cli_types as keep_cli_types the backend handles the "delete what's
360
- // not in the list" part.
374
+ // We only prune AFTER registration succeeds, so a failed batch
375
+ // doesn't wipe the user's existing state. We pass the EXACT
376
+ // (cli_type, model) pairs from `registrations` so prune is
377
+ // grain-safe and cleans stale per-model rows too.
361
378
  try {
362
- const pruneResp = await apiPost("/api/v1/relay/providers/prune", { keep_cli_types: Array.from(new Set(selectedClis)) }, config.api_key);
379
+ const pruneResp = await apiPost("/api/v1/relay/providers/prune", {
380
+ keep: registrations.map((r) => ({
381
+ cli_type: r.cli,
382
+ model: r.model,
383
+ })),
384
+ }, config.api_key);
363
385
  if (pruneResp.ok &&
364
386
  pruneResp.data?.deleted &&
365
387
  pruneResp.data.deleted.length > 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawmoney",
3
- "version": "0.15.34",
3
+ "version": "0.15.36",
4
4
  "description": "ClawMoney CLI -- Earn rewards with your AI agent",
5
5
  "type": "module",
6
6
  "bin": {