@ashlr/hub 3.7.0 → 3.9.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.
Files changed (155) hide show
  1. package/CHANGELOG.md +257 -0
  2. package/dist/build-identity.json +2 -2
  3. package/dist/cli/resource-profile.js +95 -21
  4. package/dist/cli/resource-profile.js.map +1 -1
  5. package/dist/core/policy/local-only.d.ts +142 -2
  6. package/dist/core/policy/local-only.js +204 -15
  7. package/dist/core/policy/local-only.js.map +1 -1
  8. package/dist/core/resources/native-profile.d.ts +56 -0
  9. package/dist/core/resources/native-profile.js +368 -6
  10. package/dist/core/resources/native-profile.js.map +1 -1
  11. package/dist/core/run/budget.d.ts +22 -8
  12. package/dist/core/run/budget.js +80 -12
  13. package/dist/core/run/budget.js.map +1 -1
  14. package/dist/core/run/model-catalog.js +8 -1
  15. package/dist/core/run/model-catalog.js.map +1 -1
  16. package/dist/core/run/sandboxed-engine.js +3 -3
  17. package/dist/core/run/sandboxed-engine.js.map +1 -1
  18. package/dist/core/universe/builtins/preparation/manifest.json +1 -1
  19. package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +69 -10
  20. package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +68 -9
  21. package/dist/core/verse/adapters/claude.d.ts +49 -2
  22. package/dist/core/verse/adapters/claude.js +317 -56
  23. package/dist/core/verse/adapters/claude.js.map +1 -1
  24. package/dist/core/verse/adapters/codex.d.ts +81 -5
  25. package/dist/core/verse/adapters/codex.js +409 -47
  26. package/dist/core/verse/adapters/codex.js.map +1 -1
  27. package/dist/core/verse/adapters/grok.d.ts +13 -1
  28. package/dist/core/verse/adapters/grok.js +28 -2
  29. package/dist/core/verse/adapters/grok.js.map +1 -1
  30. package/dist/core/verse/adapters/index.d.ts +32 -0
  31. package/dist/core/verse/adapters/index.js +2 -0
  32. package/dist/core/verse/adapters/index.js.map +1 -1
  33. package/dist/core/verse/codex-rollout.d.ts +284 -0
  34. package/dist/core/verse/codex-rollout.js +786 -0
  35. package/dist/core/verse/codex-rollout.js.map +1 -0
  36. package/dist/core/verse/context-fit.d.ts +63 -0
  37. package/dist/core/verse/context-fit.js +355 -0
  38. package/dist/core/verse/context-fit.js.map +1 -0
  39. package/dist/core/verse/context-math.d.ts +215 -0
  40. package/dist/core/verse/context-math.js +365 -0
  41. package/dist/core/verse/context-math.js.map +1 -0
  42. package/dist/core/verse/local-models.d.ts +137 -1
  43. package/dist/core/verse/local-models.js +209 -5
  44. package/dist/core/verse/local-models.js.map +1 -1
  45. package/dist/core/verse/model-windows.d.ts +217 -0
  46. package/dist/core/verse/model-windows.js +616 -0
  47. package/dist/core/verse/model-windows.js.map +1 -0
  48. package/dist/core/verse/preferences.d.ts +123 -0
  49. package/dist/core/verse/preferences.js +403 -0
  50. package/dist/core/verse/preferences.js.map +1 -0
  51. package/dist/core/verse/project-memory.d.ts +112 -0
  52. package/dist/core/verse/project-memory.js +295 -0
  53. package/dist/core/verse/project-memory.js.map +1 -0
  54. package/dist/core/verse/seats.d.ts +106 -4
  55. package/dist/core/verse/seats.js +291 -89
  56. package/dist/core/verse/seats.js.map +1 -1
  57. package/dist/core/verse/session-engine.d.ts +117 -2
  58. package/dist/core/verse/session-engine.js +763 -65
  59. package/dist/core/verse/session-engine.js.map +1 -1
  60. package/dist/core/verse/session-handoff.d.ts +94 -0
  61. package/dist/core/verse/session-handoff.js +551 -0
  62. package/dist/core/verse/session-handoff.js.map +1 -0
  63. package/dist/core/verse/session-search.d.ts +63 -0
  64. package/dist/core/verse/session-search.js +213 -0
  65. package/dist/core/verse/session-search.js.map +1 -0
  66. package/dist/core/verse/session-store.d.ts +16 -2
  67. package/dist/core/verse/session-store.js +80 -6
  68. package/dist/core/verse/session-store.js.map +1 -1
  69. package/dist/core/verse/types.d.ts +333 -1
  70. package/dist/core/verse/types.js +54 -2
  71. package/dist/core/verse/types.js.map +1 -1
  72. package/dist/core/verse/verse-api.d.ts +40 -5
  73. package/dist/core/verse/verse-api.js +724 -25
  74. package/dist/core/verse/verse-api.js.map +1 -1
  75. package/dist/core/web/api.d.ts +14 -4
  76. package/dist/core/web/api.js +26 -11
  77. package/dist/core/web/api.js.map +1 -1
  78. package/dist/core/web/public/next/assets/{App-vtaHB9mp.js → App-XURmiAAp.js} +5 -5
  79. package/dist/core/web/public/next/assets/{App-vtaHB9mp.js.map → App-XURmiAAp.js.map} +1 -1
  80. package/dist/core/web/public/next/assets/{ApprovalsSection-B-bFJ0I9.js → ApprovalsSection-BriUzoZc.js} +2 -2
  81. package/dist/core/web/public/next/assets/{ApprovalsSection-B-bFJ0I9.js.map → ApprovalsSection-BriUzoZc.js.map} +1 -1
  82. package/dist/core/web/public/next/assets/AutonomySection-C4GBsQVc.js +2 -0
  83. package/dist/core/web/public/next/assets/{AutonomySection-DoqmsCjw.js.map → AutonomySection-C4GBsQVc.js.map} +1 -1
  84. package/dist/core/web/public/next/assets/ChatSection-BpOBOUvg.css +1 -0
  85. package/dist/core/web/public/next/assets/ChatSection-hlgPBRco.js +84 -0
  86. package/dist/core/web/public/next/assets/ChatSection-hlgPBRco.js.map +1 -0
  87. package/dist/core/web/public/next/assets/ConfirmDialog-BdQYI-Ng.js +2 -0
  88. package/dist/core/web/public/next/assets/ConfirmDialog-BdQYI-Ng.js.map +1 -0
  89. package/dist/core/web/public/next/assets/{Dialog-CPM9JxBc.js → Dialog-BxdIfmFH.js} +2 -2
  90. package/dist/core/web/public/next/assets/{Dialog-CPM9JxBc.js.map → Dialog-BxdIfmFH.js.map} +1 -1
  91. package/dist/core/web/public/next/assets/{DiffViewer-B84qVef9.js → DiffViewer-DmeRWuc4.js} +2 -2
  92. package/dist/core/web/public/next/assets/{DiffViewer-B84qVef9.js.map → DiffViewer-DmeRWuc4.js.map} +1 -1
  93. package/dist/core/web/public/next/assets/{McpSection-CEUpV_5X.js → McpSection-q34T7Tho.js} +2 -2
  94. package/dist/core/web/public/next/assets/{McpSection-CEUpV_5X.js.map → McpSection-q34T7Tho.js.map} +1 -1
  95. package/dist/core/web/public/next/assets/{MutationTokenDialog-DA8t97XT.js → MutationTokenDialog-CFAkwOEt.js} +2 -2
  96. package/dist/core/web/public/next/assets/{MutationTokenDialog-DA8t97XT.js.map → MutationTokenDialog-CFAkwOEt.js.map} +1 -1
  97. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-Bq7Vyud0.js → ResourcePoolConsoleApp-DHc8GFOY.js} +4 -4
  98. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-Bq7Vyud0.js.map → ResourcePoolConsoleApp-DHc8GFOY.js.map} +1 -1
  99. package/dist/core/web/public/next/assets/{RouteErrorBoundary-Badio_uO.js → RouteErrorBoundary-ZL9F4qUn.js} +2 -2
  100. package/dist/core/web/public/next/assets/{RouteErrorBoundary-Badio_uO.js.map → RouteErrorBoundary-ZL9F4qUn.js.map} +1 -1
  101. package/dist/core/web/public/next/assets/{Meter-CLcr-4wS.css → Segmented-8cf0Fypn.css} +1 -1
  102. package/dist/core/web/public/next/assets/{Meter--h3MmZS-.js → Segmented-DbRjVye3.js} +2 -2
  103. package/dist/core/web/public/next/assets/Segmented-DbRjVye3.js.map +1 -0
  104. package/dist/core/web/public/next/assets/SettingsSection-nJGGGYqv.js +2 -0
  105. package/dist/core/web/public/next/assets/{SettingsSection-BwrpQlpP.js.map → SettingsSection-nJGGGYqv.js.map} +1 -1
  106. package/dist/core/web/public/next/assets/UniverseConsoleApp-6GJydgo4.js +2 -0
  107. package/dist/core/web/public/next/assets/{UniverseConsoleApp-_FSohAdN.js.map → UniverseConsoleApp-6GJydgo4.js.map} +1 -1
  108. package/dist/core/web/public/next/assets/{UniverseView-DqcXbed4.js → UniverseView-DLDtNYL8.js} +2 -2
  109. package/dist/core/web/public/next/assets/{UniverseView-DqcXbed4.js.map → UniverseView-DLDtNYL8.js.map} +1 -1
  110. package/dist/core/web/public/next/assets/UsageSection-Cf9d9iFH.js +2 -0
  111. package/dist/core/web/public/next/assets/UsageSection-Cf9d9iFH.js.map +1 -0
  112. package/dist/core/web/public/next/assets/VerseConsoleApp-DsdKQoTH.css +1 -0
  113. package/dist/core/web/public/next/assets/VerseConsoleApp-y0uOHixd.js +3 -0
  114. package/dist/core/web/public/next/assets/VerseConsoleApp-y0uOHixd.js.map +1 -0
  115. package/dist/core/web/public/next/assets/{charts-CTZJ-JrH.js → charts-CVooqJWN.js} +2 -2
  116. package/dist/core/web/public/next/assets/{charts-CTZJ-JrH.js.map → charts-CVooqJWN.js.map} +1 -1
  117. package/dist/core/web/public/next/assets/context-model-Bqv8DVuH.js +2 -0
  118. package/dist/core/web/public/next/assets/context-model-Bqv8DVuH.js.map +1 -0
  119. package/dist/core/web/public/next/assets/global-eaY9GyX3.js +2 -0
  120. package/dist/core/web/public/next/assets/global-eaY9GyX3.js.map +1 -0
  121. package/dist/core/web/public/next/assets/{icons-D9vlf85u.js → icons-vex8rclC.js} +2 -2
  122. package/dist/core/web/public/next/assets/{icons-D9vlf85u.js.map → icons-vex8rclC.js.map} +1 -1
  123. package/dist/core/web/public/next/assets/{index-CZamKRUg.js → index-D2Eik-zt.js} +3 -3
  124. package/dist/core/web/public/next/assets/{index-CZamKRUg.js.map → index-D2Eik-zt.js.map} +1 -1
  125. package/dist/core/web/public/next/assets/{queries-B8eBnFox.js → queries-bAYU0VNy.js} +2 -2
  126. package/dist/core/web/public/next/assets/{queries-B8eBnFox.js.map → queries-bAYU0VNy.js.map} +1 -1
  127. package/dist/core/web/public/next/assets/use-guarded-action-C7QrP7Yp.js +2 -0
  128. package/dist/core/web/public/next/assets/{use-guarded-action-bzrVVAYq.js.map → use-guarded-action-C7QrP7Yp.js.map} +1 -1
  129. package/dist/core/web/public/next/assets/verse-model-TfDk9cky.js +2 -0
  130. package/dist/core/web/public/next/assets/verse-model-TfDk9cky.js.map +1 -0
  131. package/dist/core/web/public/next/assets/{workspace-model-v0a1gl-C.js → workspace-model-CHol5RVp.js} +2 -2
  132. package/dist/core/web/public/next/assets/{workspace-model-v0a1gl-C.js.map → workspace-model-CHol5RVp.js.map} +1 -1
  133. package/dist/core/web/public/next/index.html +1 -1
  134. package/dist/release-dependency-inventory.json +1 -1
  135. package/docs/README.md +1 -0
  136. package/package.json +1 -1
  137. package/dist/core/web/public/next/assets/AutonomySection-DoqmsCjw.js +0 -2
  138. package/dist/core/web/public/next/assets/ChatSection-BfnLe5dT.css +0 -1
  139. package/dist/core/web/public/next/assets/ChatSection-vNPIJffd.js +0 -80
  140. package/dist/core/web/public/next/assets/ChatSection-vNPIJffd.js.map +0 -1
  141. package/dist/core/web/public/next/assets/ConfirmDialog-Dd2APQhB.js +0 -2
  142. package/dist/core/web/public/next/assets/ConfirmDialog-Dd2APQhB.js.map +0 -1
  143. package/dist/core/web/public/next/assets/Meter--h3MmZS-.js.map +0 -1
  144. package/dist/core/web/public/next/assets/SettingsSection-BwrpQlpP.js +0 -2
  145. package/dist/core/web/public/next/assets/UniverseConsoleApp-_FSohAdN.js +0 -2
  146. package/dist/core/web/public/next/assets/UsageSection-Bq6Daaby.js +0 -2
  147. package/dist/core/web/public/next/assets/UsageSection-Bq6Daaby.js.map +0 -1
  148. package/dist/core/web/public/next/assets/VerseConsoleApp-CMkCizvL.css +0 -1
  149. package/dist/core/web/public/next/assets/VerseConsoleApp-CsIQv9id.js +0 -3
  150. package/dist/core/web/public/next/assets/VerseConsoleApp-CsIQv9id.js.map +0 -1
  151. package/dist/core/web/public/next/assets/global-D6bTxIRn.js +0 -2
  152. package/dist/core/web/public/next/assets/global-D6bTxIRn.js.map +0 -1
  153. package/dist/core/web/public/next/assets/use-guarded-action-bzrVVAYq.js +0 -2
  154. package/dist/core/web/public/next/assets/verse-model-CvtK6vP6.js +0 -2
  155. package/dist/core/web/public/next/assets/verse-model-CvtK6vP6.js.map +0 -1
@@ -0,0 +1,616 @@
1
+ /**
2
+ * core/verse/model-windows.ts — the per-model context budgets every seat is
3
+ * built from (Verse 3.9, owner U4). docs/VERSE-CONTEXT.md §1 is the prose
4
+ * authority; every number below was read from a CLI or a seat's own catalog on
5
+ * 2026-09-23, never recalled.
6
+ *
7
+ * WHY THIS MODULE EXISTS. Until 3.9 every model option carried one number, and
8
+ * for six of the eight Claude models it was wrong: they all inherited the
9
+ * CLI's 200k "unknown model" fallback while the CLI itself ran them at 1M.
10
+ * Codex showed its RAW 272k window while the CLI measures against 95% of it,
11
+ * and Grok showed 256k against a 500k window. So the meter under- or
12
+ * over-read on every native engine. This module is the single place a seat's
13
+ * model list — windows, compaction points, expansive budgets and the binary
14
+ * each model needs — is assembled, and it does the arithmetic ONLY through
15
+ * `context-math.ts`, so "compacts at 367k" can never mean two numbers.
16
+ *
17
+ * SOURCES, in the order a seat prefers them:
18
+ *
19
+ * Claude — the CLI's EMBEDDED catalog (`windowSource: 'cli-catalog'`). There
20
+ * is no per-seat file to read: the served catalog cache carries no windows
21
+ * (`max_input_tokens` absent on every row), so the binary is the authority.
22
+ * The table below is transcribed from the 2.1.257 and 2.1.280 binaries.
23
+ * Codex — the seat's OWN `native-state/models_cache.json`
24
+ * (`provider-catalog`). Catalogs differ per ACCOUNT (codex-b lacks the
25
+ * daybreak slug the global cache has) and per BINARY, so the unpinned
26
+ * `~/.codex` cache is never consulted. No catalog yet → a documented list.
27
+ * Grok — the seat's OWN `native-state/models_cache.json`, whose `.models`
28
+ * is a dict of `{info, api_key, env_key, api_base_url}`. ONLY `.info` is
29
+ * ever read: `api_key` is a credential slot and must not be touched, copied
30
+ * or returned, even though it is null today.
31
+ *
32
+ * Runtime readings (claude/grok `result.modelUsage`, codex rollouts) override
33
+ * all of this per turn — see the session engine. These are the STARTING
34
+ * budgets and the picker's promises, not the last word.
35
+ *
36
+ * Nothing here throws, spends, or reaches the network. File reads are
37
+ * size-capped, symlink-refusing and cached by path + mtime + size.
38
+ */
39
+ import { closeSync, constants as fsConstants, fstatSync, openSync, readdirSync, readSync, statSync } from 'node:fs';
40
+ import { homedir } from 'node:os';
41
+ import { basename, dirname, join } from 'node:path';
42
+ import { CLAUDE_STANDARD_AUTOCOMPACT_WINDOW, canonicalModelId, claudeAutoCompactAt, codexAutoCompactAt, codexEffectiveWindow, grokAutoCompactAt, } from './context-math.js';
43
+ import { VERSE_DEFAULT_CONTEXT_WINDOWS, } from './types.js';
44
+ // ---------------------------------------------------------------------------
45
+ // Claude — transcribed from the CLI's embedded catalog
46
+ // ---------------------------------------------------------------------------
47
+ /**
48
+ * Every Claude model a seat offers, in picker order (first runnable = default).
49
+ *
50
+ * Transcribed from the embedded catalog of Claude Code 2.1.257 and 2.1.280
51
+ * (`context.window`, `context.native_1m`, `max_output_tokens.default`):
52
+ *
53
+ * - `native1m` is the catalog's own `native_1m` flag: the CLI runs these at
54
+ * 1M with no `[1m]` suffix on a first-party seat. Never append `[1m]` to a
55
+ * 200k model — the CLI would then CLAIM 1M for a model that has 200k.
56
+ * - `maxOutputTokens` is the catalog DEFAULT, not the upper bound: it is the
57
+ * number Claude Code reserves from (capped at 20k) when it computes the
58
+ * compaction point, which is all Verse uses it for.
59
+ * - `minCliVersion` is set only where a binary genuinely lacks the id.
60
+ * `claude-opus-5-5` is absent from 2.1.257 (0 occurrences) and present in
61
+ * 2.1.280, and the served catalog cache says `min_claude_code_version:
62
+ * "2.1.280"`. An older binary does not reject it — its id normaliser falls
63
+ * back to `includes('claude-opus-5')` and silently runs Opus 5 — which is
64
+ * why a too-old seat lists it as UNAVAILABLE instead of offering it.
65
+ *
66
+ * The dotted `claude-opus-5.5` Verse once shipped is an ALIAS (context-math
67
+ * `VERSE_MODEL_ID_ALIASES`): on every binary it resolves to Opus 5. It is
68
+ * never offered; old records keep it and adapters send the canonical id.
69
+ *
70
+ * `claude-mythos-5` / `-5-1` are in the catalog too but are deliberately not
71
+ * offered: whether a subscription seat may use them is unverified, and a
72
+ * picker entry is a promise.
73
+ */
74
+ export const VERSE_CLAUDE_MODEL_SPECS = [
75
+ { id: 'claude-fable-5-1', label: 'Claude Fable 5.1', contextWindow: 1_000_000, maxOutputTokens: 64_000, minCliVersion: null, native1m: true },
76
+ { id: 'claude-opus-5-5', label: 'Claude Opus 5.5', contextWindow: 1_000_000, maxOutputTokens: 128_000, minCliVersion: '2.1.280', native1m: true },
77
+ { id: 'claude-fable-5', label: 'Claude Fable 5', contextWindow: 1_000_000, maxOutputTokens: 64_000, minCliVersion: null, native1m: true },
78
+ { id: 'claude-opus-5', label: 'Claude Opus 5', contextWindow: 1_000_000, maxOutputTokens: 64_000, minCliVersion: null, native1m: true },
79
+ { id: 'claude-opus-4-8', label: 'Claude Opus 4.8', contextWindow: 1_000_000, maxOutputTokens: 64_000, minCliVersion: null, native1m: true },
80
+ // 200k and NOT native_1m: no expansive mode, no --autocompact flag.
81
+ { id: 'claude-opus-4-5', label: 'Claude Opus 4.5', contextWindow: 200_000, maxOutputTokens: 32_000, minCliVersion: null, native1m: false },
82
+ { id: 'claude-sonnet-5', label: 'Claude Sonnet 5', contextWindow: 1_000_000, maxOutputTokens: 64_000, minCliVersion: null, native1m: true },
83
+ { id: 'claude-haiku-4-5-20251001', label: 'Claude Haiku 4.5', contextWindow: 200_000, maxOutputTokens: 32_000, minCliVersion: null, native1m: false },
84
+ ];
85
+ /**
86
+ * The spec for a model id, after alias canonicalisation — so an old session
87
+ * stored as `claude-opus-5.5` finds Opus 5.5's budget. A trailing `[1m]`
88
+ * (which the CLI strips from native-1M ids anyway) is tolerated. Null for an
89
+ * id this table does not know: the caller falls back to the seat, then to
90
+ * `VERSE_DEFAULT_CONTEXT_WINDOWS.claude` — never to a guess.
91
+ */
92
+ export function claudeSpecFor(modelId) {
93
+ if (typeof modelId !== 'string' || modelId.length === 0)
94
+ return null;
95
+ const canonical = canonicalModelId(modelId.trim());
96
+ const bare = canonical.replace(/\[1m\]$/i, '');
97
+ return VERSE_CLAUDE_MODEL_SPECS.find((spec) => spec.id === canonical || spec.id === bare) ?? null;
98
+ }
99
+ /** "Claude Opus 5.5" → "Opus 5.5" — how the CLI and the seat notes name a model. */
100
+ function shortClaudeLabel(label) {
101
+ return label.replace(/^Claude\s+/, '');
102
+ }
103
+ /**
104
+ * One Claude spec as a model option on a seat pinned to `cliVersion`.
105
+ *
106
+ * Standard budget: 1M-native models run at `--autocompact 400000` (compaction
107
+ * at 367k); 200k models compact natively (167k). Expansive exists only for
108
+ * 1M-native models: the CLI's `auto` window, compacting at 967k — the
109
+ * `pre_tokens` observed on real compactions.
110
+ */
111
+ function claudeOption(spec, cliVersion) {
112
+ const window = spec.contextWindow;
113
+ const expansive = spec.native1m
114
+ ? { contextWindow: window, autoCompactAt: claudeAutoCompactAt(window, spec.maxOutputTokens, null) }
115
+ : null;
116
+ const standardCap = spec.native1m && window > CLAUDE_STANDARD_AUTOCOMPACT_WINDOW
117
+ ? CLAUDE_STANDARD_AUTOCOMPACT_WINDOW
118
+ : null;
119
+ const tooOld = spec.minCliVersion !== null
120
+ && cliVersion !== null
121
+ && compareCliVersions(cliVersion, spec.minCliVersion) < 0;
122
+ return {
123
+ id: spec.id,
124
+ label: spec.label,
125
+ contextWindow: window,
126
+ autoCompactAt: claudeAutoCompactAt(window, spec.maxOutputTokens, standardCap),
127
+ ...(expansive ? { expansive } : {}),
128
+ maxOutputTokens: spec.maxOutputTokens,
129
+ windowSource: 'cli-catalog',
130
+ minCliVersion: spec.minCliVersion,
131
+ unavailableReason: tooOld
132
+ ? `needs Claude Code ${spec.minCliVersion}; this seat runs ${cliVersion}`
133
+ : null,
134
+ };
135
+ }
136
+ /**
137
+ * The Claude model list for a seat pinned to `cliVersion`.
138
+ *
139
+ * `cliVersion === null` means UNKNOWN, and unknown is not "too old": no model
140
+ * is marked unavailable on a guess (the seat carries a note instead). Order is
141
+ * the table's; callers put runnable models first.
142
+ */
143
+ export function claudeModelOptions(cliVersion) {
144
+ return VERSE_CLAUDE_MODEL_SPECS.map((spec) => claudeOption(spec, cliVersion));
145
+ }
146
+ /** Specs a binary of `cliVersion` is too old for (empty when the version is unknown). */
147
+ export function claudeModelsNeedingNewerCli(cliVersion) {
148
+ if (cliVersion === null)
149
+ return [];
150
+ return VERSE_CLAUDE_MODEL_SPECS.filter((spec) => spec.minCliVersion !== null && compareCliVersions(cliVersion, spec.minCliVersion) < 0);
151
+ }
152
+ /** Labels for a note: "Opus 5.5", "Opus 5.5 and Fable 6", "A, B and C". */
153
+ export function joinClaudeLabels(specs) {
154
+ const labels = specs.map((s) => shortClaudeLabel(s.label));
155
+ if (labels.length <= 1)
156
+ return labels[0] ?? '';
157
+ return `${labels.slice(0, -1).join(', ')} and ${labels[labels.length - 1]}`;
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // CLI versions
161
+ // ---------------------------------------------------------------------------
162
+ const VERSION_RE = /(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.]+))?/;
163
+ /**
164
+ * Compare two CLI versions: negative when `a` is older, 0 when equal, positive
165
+ * when newer. Numeric per segment (2.1.280 > 2.1.257 > 2.1.99), and a
166
+ * pre-release sorts before its release (0.155.0-alpha.9 < 0.155.0). Strings
167
+ * with no `x.y.z` in them compare equal to each other and older than any real
168
+ * version — an unparseable version is never allowed to unlock a model.
169
+ */
170
+ export function compareCliVersions(a, b) {
171
+ const pa = VERSION_RE.exec(a);
172
+ const pb = VERSION_RE.exec(b);
173
+ if (!pa || !pb)
174
+ return (pa ? 1 : 0) - (pb ? 1 : 0);
175
+ for (let i = 1; i <= 3; i += 1) {
176
+ const d = Number(pa[i]) - Number(pb[i]);
177
+ if (d !== 0)
178
+ return d < 0 ? -1 : 1;
179
+ }
180
+ const preA = pa[4] ?? null;
181
+ const preB = pb[4] ?? null;
182
+ if (preA === preB)
183
+ return 0;
184
+ if (preA === null)
185
+ return 1;
186
+ if (preB === null)
187
+ return -1;
188
+ return preA.localeCompare(preB, 'en', { numeric: true }) < 0 ? -1 : 1;
189
+ }
190
+ const MAX_PACKAGE_JSON_BYTES = 64 * 1024;
191
+ /**
192
+ * The version of the CLI a native profile is pinned to, from the executable
193
+ * path its launcher execs. Never runs the binary (that would be a process
194
+ * spawn on the discovery path, and some CLIs phone home on `--version`).
195
+ *
196
+ * - Claude Code installs each version as a file NAMED by it:
197
+ * `~/.local/share/claude/versions/2.1.257` → `2.1.257`.
198
+ * - Grok's downloads embed it: `grok-0.2.118-macos-aarch64` → `0.2.118`.
199
+ * - The npm codex wrapper is `…/@openai/codex/bin/codex.js`; its version is
200
+ * the package's own `package.json`, read with a size cap.
201
+ *
202
+ * Anything else (e.g. the codex binary inside ChatGPT.app) is null: unknown,
203
+ * which is reported as unknown rather than guessed from a neighbour.
204
+ */
205
+ export function cliVersionFromExecutable(executablePath) {
206
+ if (typeof executablePath !== 'string' || executablePath.length === 0)
207
+ return null;
208
+ const name = basename(executablePath);
209
+ // Only the X.Y.Z core from a file name: `grok-0.2.118-macos-aarch64` has a
210
+ // platform suffix that is not a pre-release tag.
211
+ const fromName = /(?:^|[^0-9.])(\d+\.\d+\.\d+)(?=$|[^0-9.])/.exec(`-${name}`);
212
+ if (fromName)
213
+ return fromName[1];
214
+ if (name === 'codex.js' || name === 'codex') {
215
+ const pkg = readCappedJson(join(dirname(dirname(executablePath)), 'package.json'), MAX_PACKAGE_JSON_BYTES);
216
+ if (isRecord(pkg) && typeof pkg['version'] === 'string' && VERSION_RE.test(pkg['version'])
217
+ && (pkg['name'] === undefined || pkg['name'] === '@openai/codex')) {
218
+ return pkg['version'].slice(0, 64);
219
+ }
220
+ }
221
+ return null;
222
+ }
223
+ /** Where Claude Code's installer keeps one file per installed version. */
224
+ export function defaultClaudeVersionsRoot(home = homedir()) {
225
+ return join(home, '.local', 'share', 'claude', 'versions');
226
+ }
227
+ /**
228
+ * The newest Claude Code version installed on this machine, or null. Only
229
+ * regular files named exactly `x.y.z` count — the installer's lock and
230
+ * partial-download files are skipped.
231
+ */
232
+ export function newestInstalledClaudeVersion(root = defaultClaudeVersionsRoot()) {
233
+ let entries;
234
+ try {
235
+ entries = readdirSync(root);
236
+ }
237
+ catch {
238
+ return null;
239
+ }
240
+ let best = null;
241
+ for (const name of entries.slice(0, 256)) {
242
+ if (!/^\d+\.\d+\.\d+$/.test(name))
243
+ continue;
244
+ try {
245
+ if (!statSync(join(root, name)).isFile())
246
+ continue;
247
+ }
248
+ catch {
249
+ continue;
250
+ }
251
+ if (best === null || compareCliVersions(name, best) > 0)
252
+ best = name;
253
+ }
254
+ return best;
255
+ }
256
+ // ---------------------------------------------------------------------------
257
+ // Bounded, cached file reads
258
+ // ---------------------------------------------------------------------------
259
+ /** Every catalog read is capped here — codex's is ~350 KB today. */
260
+ export const VERSE_CATALOG_MAX_BYTES = 512 * 1024;
261
+ const MAX_CACHE_ENTRIES = 64;
262
+ const fileCache = new Map();
263
+ /** Test seam: forget every cached catalog read. */
264
+ export function resetModelWindowCaches() {
265
+ fileCache.clear();
266
+ }
267
+ function isRecord(value) {
268
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
269
+ }
270
+ /**
271
+ * Read and parse a JSON file WITHOUT following a symlink at its final
272
+ * component, refusing anything that is not a regular file or is over
273
+ * `maxBytes`, and parsing it through `parse` exactly once per (path, mtime,
274
+ * size). The cached value is the PARSED result, so a 350 KB catalog is not
275
+ * re-parsed on every seat poll. Returns null on any failure.
276
+ */
277
+ function readCachedFile(path, maxBytes, kind, parse) {
278
+ let fd = null;
279
+ try {
280
+ const noFollow = typeof fsConstants.O_NOFOLLOW === 'number' ? fsConstants.O_NOFOLLOW : 0;
281
+ fd = openSync(path, fsConstants.O_RDONLY | noFollow);
282
+ const st = fstatSync(fd);
283
+ if (!st.isFile() || st.size <= 0 || st.size > maxBytes)
284
+ return null;
285
+ const key = `${kind}\u0000${path}`;
286
+ const cached = fileCache.get(key);
287
+ if (cached && cached.mtimeMs === st.mtimeMs && cached.size === st.size)
288
+ return cached.value;
289
+ const buf = Buffer.alloc(st.size);
290
+ let read = 0;
291
+ while (read < st.size) {
292
+ const n = readSync(fd, buf, read, st.size - read, read);
293
+ if (n <= 0)
294
+ break;
295
+ read += n;
296
+ }
297
+ let raw;
298
+ try {
299
+ raw = JSON.parse(buf.subarray(0, read).toString('utf8'));
300
+ }
301
+ catch {
302
+ raw = undefined;
303
+ }
304
+ const value = raw === undefined ? null : parse(raw);
305
+ if (fileCache.size >= MAX_CACHE_ENTRIES)
306
+ fileCache.clear();
307
+ fileCache.set(key, { mtimeMs: st.mtimeMs, size: st.size, value });
308
+ return value;
309
+ }
310
+ catch {
311
+ return null;
312
+ }
313
+ finally {
314
+ if (fd !== null) {
315
+ try {
316
+ closeSync(fd);
317
+ }
318
+ catch { /* already closed */ }
319
+ }
320
+ }
321
+ }
322
+ function readCappedJson(path, maxBytes) {
323
+ return readCachedFile(path, maxBytes, 'json', (raw) => raw);
324
+ }
325
+ function positiveInt(value) {
326
+ return typeof value === 'number' && Number.isFinite(value) && value > 0 ? Math.floor(value) : null;
327
+ }
328
+ function percentOrNull(value) {
329
+ const n = positiveInt(value);
330
+ return n !== null && n <= 100 ? n : null;
331
+ }
332
+ /**
333
+ * A model id that is safe to put on an argv as `--model <id>`: what every
334
+ * provider id looks like, and nothing that could read as a flag or carry
335
+ * whitespace. A catalog row with anything else is skipped, not sanitised.
336
+ */
337
+ const MODEL_ID_RE = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/;
338
+ function labelOrNull(value) {
339
+ if (typeof value !== 'string')
340
+ return null;
341
+ const trimmed = value.replace(/\s+/g, ' ').trim();
342
+ return trimmed.length > 0 && trimmed.length <= 80 ? trimmed : null;
343
+ }
344
+ function parseCodexCatalog(raw) {
345
+ if (!isRecord(raw) || !Array.isArray(raw['models']))
346
+ return null;
347
+ const out = [];
348
+ const seen = new Set();
349
+ for (const row of raw['models'].slice(0, 256)) {
350
+ if (!isRecord(row))
351
+ continue;
352
+ const slug = row['slug'];
353
+ if (typeof slug !== 'string' || !MODEL_ID_RE.test(slug) || seen.has(slug))
354
+ continue;
355
+ const contextWindow = positiveInt(row['context_window']);
356
+ if (contextWindow === null)
357
+ continue;
358
+ seen.add(slug);
359
+ out.push({
360
+ slug,
361
+ displayName: labelOrNull(row['display_name']),
362
+ visibility: typeof row['visibility'] === 'string' ? row['visibility'] : null,
363
+ contextWindow,
364
+ maxContextWindow: positiveInt(row['max_context_window']),
365
+ effectiveContextWindowPercent: percentOrNull(row['effective_context_window_percent']),
366
+ autoCompactTokenLimit: positiveInt(row['auto_compact_token_limit']),
367
+ priority: typeof row['priority'] === 'number' && Number.isFinite(row['priority']) ? row['priority'] : null,
368
+ });
369
+ }
370
+ return out.length > 0 ? out : null;
371
+ }
372
+ /**
373
+ * The seat's own codex catalog, or null when it has none yet (a seat that has
374
+ * never run a turn has not fetched one) or it is unreadable. `nativeStatePath`
375
+ * is the seat profile's `CODEX_HOME` — NEVER the unpinned `~/.codex`, whose
376
+ * catalog belongs to a different account and binary.
377
+ */
378
+ export function readCodexCatalog(nativeStatePath) {
379
+ if (typeof nativeStatePath !== 'string' || nativeStatePath.length === 0)
380
+ return null;
381
+ return readCachedFile(join(nativeStatePath, 'models_cache.json'), VERSE_CATALOG_MAX_BYTES, 'codex', parseCodexCatalog);
382
+ }
383
+ /**
384
+ * The documented list a codex seat offers before its first turn fetches a
385
+ * catalog: the slugs every current codex catalog carries, with the windows
386
+ * those catalogs report (272k raw, 872k max, 95% effective; gpt-5.5 has no
387
+ * larger window). Hidden slugs (`gpt-reserve`, `codex-auto-review`) are not
388
+ * here — they are not offered even when a catalog lists them.
389
+ */
390
+ const CODEX_DOCUMENTED_MODELS = [
391
+ ['gpt-6-astra', 'GPT-6 Astra', 872_000],
392
+ ['gpt-6-sol', 'GPT-6 Sol', 872_000],
393
+ ['gpt-6-luna', 'GPT-6 Luna', 872_000],
394
+ ['gpt-5.6-sol', 'GPT-5.6 Sol', 872_000],
395
+ ['gpt-5.6-terra', 'GPT-5.6 Terra', 872_000],
396
+ ['gpt-5.6-luna', 'GPT-5.6 Luna', 872_000],
397
+ ['gpt-5.5', 'GPT-5.5', 272_000],
398
+ ].map(([slug, displayName, max]) => ({
399
+ slug: slug,
400
+ displayName: displayName,
401
+ visibility: 'list',
402
+ contextWindow: 272_000,
403
+ maxContextWindow: max,
404
+ effectiveContextWindowPercent: 95,
405
+ autoCompactTokenLimit: null,
406
+ priority: null,
407
+ }));
408
+ function codexOption(entry, source) {
409
+ const pct = entry.effectiveContextWindowPercent;
410
+ const max = entry.maxContextWindow;
411
+ // Expansive only where the catalog offers a genuinely larger window. The
412
+ // adapter must pass BOTH `-c model_context_window=<providerWindow>` and
413
+ // `-c model_auto_compact_token_limit=<autoCompactAt>`: raising only the
414
+ // window breaks codex's auto-compaction (openai/codex#16068).
415
+ const expansive = max !== null && max > entry.contextWindow
416
+ ? { contextWindow: codexEffectiveWindow(max, pct), autoCompactAt: codexAutoCompactAt(max), providerWindow: max }
417
+ : null;
418
+ return {
419
+ id: entry.slug,
420
+ label: entry.displayName ?? entry.slug,
421
+ // The EFFECTIVE window: what codex's own rollouts report as
422
+ // `model_context_window` (258_400 for every 272k model).
423
+ contextWindow: codexEffectiveWindow(entry.contextWindow, pct),
424
+ autoCompactAt: entry.autoCompactTokenLimit ?? codexAutoCompactAt(entry.contextWindow),
425
+ ...(expansive ? { expansive } : {}),
426
+ windowSource: source,
427
+ minCliVersion: null,
428
+ unavailableReason: null,
429
+ };
430
+ }
431
+ /** Catalog order is the provider's priority; ties and unranked rows keep file order. */
432
+ function byPriority(entries) {
433
+ return entries
434
+ .map((entry, index) => ({ entry, index }))
435
+ .sort((a, b) => {
436
+ const pa = a.entry.priority ?? Number.POSITIVE_INFINITY;
437
+ const pb = b.entry.priority ?? Number.POSITIVE_INFINITY;
438
+ return pa === pb ? a.index - b.index : pa - pb;
439
+ })
440
+ .map(({ entry }) => entry);
441
+ }
442
+ /**
443
+ * A codex seat's model list: every VISIBLE slug in its own catalog, in the
444
+ * provider's priority order, or the documented list (`windowSource:
445
+ * 'documented'`) when the seat has not fetched a catalog yet.
446
+ */
447
+ export function codexModelOptions(catalog) {
448
+ const visible = (catalog ?? []).filter((entry) => entry.visibility !== 'hide');
449
+ if (visible.length === 0)
450
+ return CODEX_DOCUMENTED_MODELS.map((entry) => codexOption(entry, 'documented'));
451
+ return byPriority(visible).map((entry) => codexOption(entry, 'provider-catalog'));
452
+ }
453
+ function parseGrokCatalog(raw) {
454
+ if (!isRecord(raw) || !isRecord(raw['models']))
455
+ return null;
456
+ const out = [];
457
+ const seen = new Set();
458
+ for (const [key, entry] of Object.entries(raw['models']).slice(0, 256)) {
459
+ if (!isRecord(entry))
460
+ continue;
461
+ // `.info` ONLY. The sibling `api_key` / `env_key` slots are credential
462
+ // material and are never read, copied or compared — not even for null.
463
+ const info = entry['info'];
464
+ if (!isRecord(info))
465
+ continue;
466
+ const idRaw = typeof info['id'] === 'string' ? info['id'] : key;
467
+ if (!MODEL_ID_RE.test(idRaw) || seen.has(idRaw))
468
+ continue;
469
+ seen.add(idRaw);
470
+ out.push({
471
+ id: idRaw,
472
+ name: labelOrNull(info['name']),
473
+ contextWindow: positiveInt(info['context_window']),
474
+ autoCompactThresholdPercent: percentOrNull(info['auto_compact_threshold_percent']),
475
+ maxCompletionTokens: positiveInt(info['max_completion_tokens']),
476
+ hidden: info['hidden'] === true,
477
+ supportedInApi: info['supported_in_api'] !== false,
478
+ });
479
+ }
480
+ return out.length > 0 ? out : null;
481
+ }
482
+ /**
483
+ * The seat's own grok catalog (`<GROK_HOME>/models_cache.json`), or null. The
484
+ * unpinned `~/.grok` cache is stale on this machine (fetched weeks earlier,
485
+ * two models) and is never consulted.
486
+ */
487
+ export function readGrokCatalog(nativeStatePath) {
488
+ if (typeof nativeStatePath !== 'string' || nativeStatePath.length === 0)
489
+ return null;
490
+ return readCachedFile(join(nativeStatePath, 'models_cache.json'), VERSE_CATALOG_MAX_BYTES, 'grok', parseGrokCatalog);
491
+ }
492
+ /** Grok 0.2.118's catalog, for a seat that has none yet. Names are the catalog's. */
493
+ const GROK_DOCUMENTED_MODELS = [
494
+ ['grok-4.7', 'Grok 4.7'],
495
+ ['grok-4.7-build-fast', 'Grok 4.7 Fast'],
496
+ ['grok-4.6', 'Grok 4.6'],
497
+ ['grok-4.5', 'Grok 4.5'],
498
+ ].map(([id, name]) => ({
499
+ id: id,
500
+ name: name,
501
+ contextWindow: 500_000,
502
+ autoCompactThresholdPercent: 80,
503
+ maxCompletionTokens: null,
504
+ hidden: false,
505
+ supportedInApi: true,
506
+ }));
507
+ function grokOption(entry, source) {
508
+ const window = entry.contextWindow ?? VERSE_DEFAULT_CONTEXT_WINDOWS['grok'] ?? 500_000;
509
+ return {
510
+ id: entry.id,
511
+ label: entry.name ?? entry.id,
512
+ contextWindow: window,
513
+ autoCompactAt: grokAutoCompactAt(window, entry.autoCompactThresholdPercent),
514
+ ...(entry.maxCompletionTokens !== null ? { maxOutputTokens: entry.maxCompletionTokens } : {}),
515
+ // A row without a window got the named default, and says so.
516
+ windowSource: entry.contextWindow === null ? 'fallback' : source,
517
+ minCliVersion: null,
518
+ unavailableReason: null,
519
+ };
520
+ }
521
+ /**
522
+ * A grok seat's model list: every entry that is not hidden and not flagged
523
+ * unsupported, in the catalog's own order (JSON object order is preserved and
524
+ * is the CLI's), or the documented list when the seat has no catalog. Grok has
525
+ * no expansive mode: its CLI cannot be told a larger budget per invocation.
526
+ */
527
+ export function grokModelOptions(catalog) {
528
+ const offered = (catalog ?? []).filter((entry) => !entry.hidden && entry.supportedInApi);
529
+ if (offered.length === 0)
530
+ return GROK_DOCUMENTED_MODELS.map((entry) => grokOption(entry, 'documented'));
531
+ return offered.map((entry) => grokOption(entry, 'provider-catalog'));
532
+ }
533
+ // ---------------------------------------------------------------------------
534
+ // Local
535
+ // ---------------------------------------------------------------------------
536
+ /**
537
+ * A local (Ollama / llama-server) model option. Local turns run the Claude
538
+ * Code binary with `CLAUDE_CODE_MAX_CONTEXT_TOKENS=<window>`, so they compact
539
+ * by the Claude formula over the window Verse resolved; max output is unknown
540
+ * for a non-Claude id, which the formula treats as the 20k reserve cap. No
541
+ * expansive mode: the window IS the runtime's allocation.
542
+ */
543
+ export function localModelOption(tag, label, window, source) {
544
+ // Below ~33k the formula reaches zero: the 20k reply reserve plus the 13k
545
+ // buffer swallow the whole window, so there is no meaningful point at which
546
+ // the CLI "will compact". Null (unknown) says that; a 0 would draw a tick at
547
+ // the left edge of the meter and claim every turn is past compaction.
548
+ const compactAt = claudeAutoCompactAt(window, null, null);
549
+ return {
550
+ id: tag,
551
+ label,
552
+ contextWindow: window,
553
+ autoCompactAt: compactAt > 0 ? compactAt : null,
554
+ windowSource: source,
555
+ };
556
+ }
557
+ // ---------------------------------------------------------------------------
558
+ // Launch snapshots written before 3.9
559
+ // ---------------------------------------------------------------------------
560
+ /** Whether an option was built by the V3.9 catalog (it states its budgets), rather than read from an older launch snapshot. */
561
+ function hasCatalogBudgets(option) {
562
+ return option.autoCompactAt !== undefined || option.expansive !== undefined || option.windowSource !== undefined;
563
+ }
564
+ /** The documented V3.9 option for a model id on an engine, or null when this module has none. */
565
+ function documentedOption(engine, model) {
566
+ const wanted = canonicalModelId(model);
567
+ switch (engine) {
568
+ case 'claude': {
569
+ const spec = claudeSpecFor(model);
570
+ return spec ? claudeOption(spec, null) : null;
571
+ }
572
+ case 'codex':
573
+ return codexModelOptions(null).find((m) => canonicalModelId(m.id) === wanted) ?? null;
574
+ case 'grok':
575
+ return grokModelOptions(null).find((m) => canonicalModelId(m.id) === wanted) ?? null;
576
+ default:
577
+ // Local windows are the runtime's allocation at discovery time, not a
578
+ // property of the tag; there is nothing documented to fall back to (the
579
+ // engine refreshes them from live discovery instead — `refreshLocalWindow`).
580
+ return null;
581
+ }
582
+ }
583
+ /**
584
+ * The option whose budgets govern a session, given the option its PINNED
585
+ * launch snapshot lists (`snapshot`, null when the snapshot no longer lists
586
+ * the model).
587
+ *
588
+ * Normally the snapshot's own option. The exception is a snapshot written
589
+ * before 3.9: its options carry one flat window and no budgets (claude: the
590
+ * CLI's 200k fallback for every model; codex: the RAW 272k window, which the
591
+ * CLI measures against 95% of; grok: the 500k default), so it can state
592
+ * neither a compaction point nor an expansive budget. For those, the model's
593
+ * DOCUMENTED option from this module supplies the budgets — the same builders
594
+ * the live seat lists are made from, so the web UI (which reads the live seat)
595
+ * and the engine and adapters (which read the snapshot) can never disagree
596
+ * about whether a mode exists or what it costs. The snapshot keeps its identity
597
+ * (id, label); only budgets are borrowed.
598
+ *
599
+ * ONE helper, used by the engine (`effectiveModelOption`) and by every adapter
600
+ * that turns a budget into CLI flags (claude `--autocompact`, codex
601
+ * `-c model_context_window`), because two copies of this rule would drift and
602
+ * the flag the CLI is given must be the budget the meter shows.
603
+ *
604
+ * A model this module does not know keeps its snapshot option (and, lacking an
605
+ * expansive budget, gets no expansive mode — absent, never faked). Local is
606
+ * never substituted.
607
+ */
608
+ export function legacyModelOptionFallback(engine, model, snapshot) {
609
+ if (snapshot && hasCatalogBudgets(snapshot))
610
+ return snapshot;
611
+ const known = documentedOption(engine, snapshot?.id ?? model);
612
+ if (!known)
613
+ return snapshot;
614
+ return { ...known, id: snapshot?.id ?? model, label: snapshot?.label ?? known.label, unavailableReason: null };
615
+ }
616
+ //# sourceMappingURL=model-windows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-windows.js","sourceRoot":"","sources":["../../../src/core/verse/model-windows.ts"],"names":[],"mappings":"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"}