cli-jaw 2.17.41 → 2.17.42

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 (167) hide show
  1. package/README.md +3 -3
  2. package/dist/bin/commands/browser.js +52 -5
  3. package/dist/bin/commands/browser.js.map +1 -1
  4. package/dist/src/agent/args.js +69 -19
  5. package/dist/src/agent/args.js.map +1 -1
  6. package/dist/src/agent/codex-app-events.js +31 -1
  7. package/dist/src/agent/codex-app-events.js.map +1 -1
  8. package/dist/src/agent/cursor-model-inventory.js +140 -0
  9. package/dist/src/agent/cursor-model-inventory.js.map +1 -0
  10. package/dist/src/agent/grok-models.js +80 -0
  11. package/dist/src/agent/grok-models.js.map +1 -0
  12. package/dist/src/browser/actions.js +383 -20
  13. package/dist/src/browser/actions.js.map +1 -1
  14. package/dist/src/browser/grounding-candidate.js +272 -0
  15. package/dist/src/browser/grounding-candidate.js.map +1 -0
  16. package/dist/src/browser/grounding-eval.js +247 -0
  17. package/dist/src/browser/grounding-eval.js.map +1 -0
  18. package/dist/src/browser/image-size.js +63 -0
  19. package/dist/src/browser/image-size.js.map +1 -0
  20. package/dist/src/browser/index.js +1 -0
  21. package/dist/src/browser/index.js.map +1 -1
  22. package/dist/src/browser/occlusion.js +148 -0
  23. package/dist/src/browser/occlusion.js.map +1 -0
  24. package/dist/src/browser/verify-candidate.js +162 -0
  25. package/dist/src/browser/verify-candidate.js.map +1 -0
  26. package/dist/src/browser/vision-input.js +74 -0
  27. package/dist/src/browser/vision-input.js.map +1 -0
  28. package/dist/src/browser/vision-provider.js +75 -0
  29. package/dist/src/browser/vision-provider.js.map +1 -0
  30. package/dist/src/browser/vision.js +360 -47
  31. package/dist/src/browser/vision.js.map +1 -1
  32. package/dist/src/browser/web-ai/candidate-reconcile.js +14 -5
  33. package/dist/src/browser/web-ai/candidate-reconcile.js.map +1 -1
  34. package/dist/src/cli/claude-model-discovery.js +175 -0
  35. package/dist/src/cli/claude-model-discovery.js.map +1 -0
  36. package/dist/src/cli/claude-models.js +46 -0
  37. package/dist/src/cli/claude-models.js.map +1 -1
  38. package/dist/src/cli/registry-live.js +104 -1
  39. package/dist/src/cli/registry-live.js.map +1 -1
  40. package/dist/src/cli/registry.js +28 -5
  41. package/dist/src/cli/registry.js.map +1 -1
  42. package/dist/src/code-mode/host.js +6 -0
  43. package/dist/src/code-mode/host.js.map +1 -1
  44. package/dist/src/code-mode/manager.js +37 -8
  45. package/dist/src/code-mode/manager.js.map +1 -1
  46. package/dist/src/code-mode/providers/catalog.js +53 -1
  47. package/dist/src/code-mode/providers/catalog.js.map +1 -1
  48. package/dist/src/code-mode/providers/codex-app.js +6 -0
  49. package/dist/src/code-mode/providers/codex-app.js.map +1 -1
  50. package/dist/src/code-mode/providers/live-models.js +85 -0
  51. package/dist/src/code-mode/providers/live-models.js.map +1 -0
  52. package/dist/src/code-mode/providers/provider-live-models.js +120 -0
  53. package/dist/src/code-mode/providers/provider-live-models.js.map +1 -0
  54. package/dist/src/code-mode/session.js +37 -0
  55. package/dist/src/code-mode/session.js.map +1 -1
  56. package/dist/src/prompt/templates/a1-system.md +24 -14
  57. package/dist/src/prompt/templates/control-system.md +6 -11
  58. package/dist/src/prompt/templates/employee.md +5 -5
  59. package/dist/src/routes/browser.js +17 -5
  60. package/dist/src/routes/browser.js.map +1 -1
  61. package/package.json +1 -1
  62. package/public/css/activity.css +20 -1
  63. package/public/css/layout.css +7 -3
  64. package/public/dist/.vite/manifest.json +104 -105
  65. package/public/dist/assets/Agent-CQ4EBgY8.js +1 -0
  66. package/public/dist/assets/CodeCanvas-DWsx6sv5.js +2 -0
  67. package/public/dist/assets/DashboardMeta-Dh-tasbY.js +1 -0
  68. package/public/dist/assets/Display-NrqY_IaN.js +1 -0
  69. package/public/dist/assets/{Permissions-BzbnqenZ.js → Permissions-Bh947tUG.js} +1 -1
  70. package/public/dist/assets/Permissions-DzNJCt8K.js +1 -0
  71. package/public/dist/assets/app-BCBnxiGr.css +1 -0
  72. package/public/dist/assets/{app-x5Kray4W.js → app-Q0prKOFx.js} +4 -4
  73. package/public/dist/assets/{bgtask-badge-W9djRQVu.js → bgtask-badge-DAcWaUfS.js} +1 -1
  74. package/public/dist/assets/bgtask-badge-DHA2OQm8.js +1 -0
  75. package/public/dist/assets/{employees--_dmDw_a.js → employees-CWS3Juca.js} +1 -1
  76. package/public/dist/assets/{iframe-renderer-D4BmLtAq.js → iframe-renderer-DCDKBMb7.js} +2 -2
  77. package/public/dist/assets/iframe-renderer-RpvBly2x.js +1 -0
  78. package/public/dist/assets/manager-Nk7-RYPs.css +1 -0
  79. package/public/dist/assets/manager-XkR-DRaQ.js +5 -0
  80. package/public/dist/assets/manager-shortcuts-jsiX-zV6.js +1 -0
  81. package/public/dist/assets/memory-4YH8sz0L.js +1 -0
  82. package/public/dist/assets/{memory-DENQWzM8.js → memory-DhNdKZLO.js} +1 -1
  83. package/public/dist/assets/{message-history-BsrLcGJj.js → message-history-DbRTl1P0.js} +1 -1
  84. package/public/dist/assets/message-history-lVcLpAw8.js +1 -0
  85. package/public/dist/assets/{render-CF6Q1oIh.js → render-DP8SJtdZ.js} +1 -1
  86. package/public/dist/assets/settings--EGy3_B9.js +1 -0
  87. package/public/dist/assets/settings-85n9NjvX.js +1 -0
  88. package/public/dist/assets/{settings-B-C_jdZR.js → settings-C9_D-pn0.js} +32 -32
  89. package/public/dist/assets/settings-core-8wBl1mg-.js +1 -0
  90. package/public/dist/assets/{settings-core-BzAJLsKN.js → settings-core-BcVD2FgV.js} +1 -1
  91. package/public/dist/assets/{settings-embedding-dEMyByVi.js → settings-embedding-BSpq785l.js} +1 -1
  92. package/public/dist/assets/{settings-embedding-BSA42oKM.css → settings-embedding-LIMq5ebM.css} +1 -1
  93. package/public/dist/assets/{sidebar-fFEOpvJl.js → sidebar-BVhLb5Ft.js} +3 -3
  94. package/public/dist/assets/skills-6GFkHTlQ.js +1 -0
  95. package/public/dist/assets/{skills-Da_b06ci.js → skills-X7qxmHka.js} +1 -1
  96. package/public/dist/assets/{slash-commands-BbPUHHF4.js → slash-commands-BnDH4IU_.js} +1 -1
  97. package/public/dist/assets/slash-commands-qu8fPAZ3.js +1 -0
  98. package/public/dist/assets/{trace-drawer-B-QmzUfP.js → trace-drawer-DasaS1z4.js} +1 -1
  99. package/public/dist/assets/{ui-CkRUrIfp.js → ui-BtiBTXng.js} +1 -1
  100. package/public/dist/assets/ui-BucJ1zMA.js +1 -0
  101. package/public/dist/index.html +2 -2
  102. package/public/dist/manager/index.html +3 -3
  103. package/public/dist/settings/index.html +2 -2
  104. package/public/js/features/settings.ts +16 -0
  105. package/public/manager/src/App.tsx +10 -12
  106. package/public/manager/src/AppChrome.tsx +2 -3
  107. package/public/manager/src/InstancePreview.tsx +47 -0
  108. package/public/manager/src/SidebarRailRouter.tsx +34 -30
  109. package/public/manager/src/code/CodeComposer.tsx +31 -6
  110. package/public/manager/src/code/CodeSessionList.tsx +25 -7
  111. package/public/manager/src/code/CodeToastHost.tsx +49 -0
  112. package/public/manager/src/code/CodeTranscript.tsx +136 -26
  113. package/public/manager/src/code/CodeWorkbench.tsx +16 -2
  114. package/public/manager/src/code/ComposerFooter.tsx +130 -46
  115. package/public/manager/src/code/ContextUsageMeter.tsx +72 -0
  116. package/public/manager/src/code/ProviderGlyph.tsx +58 -0
  117. package/public/manager/src/code/code-composer.css +159 -175
  118. package/public/manager/src/code/code-controller-runtime.ts +3 -1
  119. package/public/manager/src/code/code-session-state.ts +7 -1
  120. package/public/manager/src/code/code-toasts.ts +73 -0
  121. package/public/manager/src/code/code-workbench.css +42 -1
  122. package/public/manager/src/code/code.css +130 -15
  123. package/public/manager/src/code/context-usage.ts +74 -0
  124. package/public/manager/src/code/pending-user-item.ts +46 -0
  125. package/public/manager/src/code/session-order.ts +70 -0
  126. package/public/manager/src/code/tool-summary.ts +101 -0
  127. package/public/manager/src/code/use-dictation.ts +130 -0
  128. package/public/manager/src/components/CommandCenter.tsx +4 -8
  129. package/public/manager/src/components/InstanceDetailPanel.tsx +0 -18
  130. package/public/manager/src/components/Workbench.tsx +6 -10
  131. package/public/manager/src/components/WorkbenchHeader.tsx +0 -11
  132. package/public/manager/src/dashboard-settings/dashboard-settings-ui.ts +3 -1
  133. package/public/manager/src/hooks/useDashboardView.ts +38 -38
  134. package/public/manager/src/manager-components.css +0 -8
  135. package/public/manager/src/manager-shortcut-runner.ts +0 -1
  136. package/public/manager/src/manager-shortcuts.ts +0 -2
  137. package/public/manager/src/settings/pages/Agent.tsx +5 -2
  138. package/public/manager/src/settings/pages/DashboardMeta.tsx +20 -1
  139. package/public/manager/src/settings/pages/Permissions.tsx +23 -4
  140. package/public/manager/src/settings/pages/components/agent/PermissionQuickSection.tsx +6 -2
  141. package/public/manager/src/settings/pages/components/agent/agent-save.ts +24 -1
  142. package/public/manager/src/settings/settings-icons.ts +3 -1
  143. package/public/manager/src/settings/settings-registry.ts +3 -3
  144. package/public/manager/src/settings-controls.css +0 -1
  145. package/public/manager/src/settings-standalone.tsx +8 -8
  146. package/public/manager/src/types.ts +0 -1
  147. package/scripts/check-private-boundary.mjs +101 -0
  148. package/scripts/grounding-eval.mjs +223 -0
  149. package/public/dist/assets/Agent-B8ZEWJ6B.js +0 -1
  150. package/public/dist/assets/CodeCanvas-Bj3lTSu6.js +0 -2
  151. package/public/dist/assets/DashboardMeta-CmZavI4H.js +0 -1
  152. package/public/dist/assets/Display-DFkjKcMk.js +0 -1
  153. package/public/dist/assets/Permissions-CJftCO6p.js +0 -1
  154. package/public/dist/assets/app-DVbrIl8f.css +0 -1
  155. package/public/dist/assets/bgtask-badge-CuAc8bAl.js +0 -1
  156. package/public/dist/assets/iframe-renderer-By2WO5bd.js +0 -1
  157. package/public/dist/assets/manager-CxLXWCGi.css +0 -1
  158. package/public/dist/assets/manager-DA3dF3eN.js +0 -5
  159. package/public/dist/assets/manager-shortcuts-CzGkE0ZG.js +0 -1
  160. package/public/dist/assets/memory-thjr2apY.js +0 -1
  161. package/public/dist/assets/message-history-CfU7_P5t.js +0 -1
  162. package/public/dist/assets/settings-DXA5L4DR.js +0 -1
  163. package/public/dist/assets/settings-Dy_IaNVH.js +0 -1
  164. package/public/dist/assets/settings-core-D7sAQqhC.js +0 -1
  165. package/public/dist/assets/skills-BcIievZp.js +0 -1
  166. package/public/dist/assets/slash-commands-B-5Shayl.js +0 -1
  167. package/public/dist/assets/ui-CJLdMfRx.js +0 -1
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Live Claude model catalog, read from the installed Claude Code bundle.
3
+ *
4
+ * Claude Code exposes no `--list-models` command and `claude models` does not
5
+ * exist, so the only observation available is the bundle itself. It carries the
6
+ * provider mapping table for every model it accepts (`first_party:"claude-..."`),
7
+ * the short-alias table it resolves `opus`/`sonnet`/`haiku`/`fable` through, and
8
+ * a literal `<id>[1m]` for each model whose 1M context window it enables.
9
+ *
10
+ * Reading a 190MB binary sounds expensive; measured against Claude Code 2.1.263 a
11
+ * streaming scan finishes in ~105ms, which fits the background-refresh pattern the
12
+ * Codex catalog already uses. This is a file read, so it does not violate the
13
+ * "catalogs must never execute a CLI" rule in code-mode/providers/catalog.ts.
14
+ */
15
+ import { createReadStream } from 'node:fs';
16
+ import { stat } from 'node:fs/promises';
17
+ /**
18
+ * Generations old enough that the bundle keeps them only for compatibility. They
19
+ * are real ids the CLI would accept, but offering `claude-3-5-sonnet-20241022` in
20
+ * a picker is noise, so discovery keeps the modern families and lets the static
21
+ * seed decide anything older.
22
+ */
23
+ const LEGACY_ID_PATTERN = /^claude-(?:3-|opus-4-(?:0|1|20|5)|sonnet-4-(?:0|20|5)|haiku-(?:3|4-5-2))/;
24
+ /**
25
+ * `mythos` ids appear in the bundle's provider table but are not offered as coding
26
+ * models by the CLI, so they are excluded rather than surfaced as selectable.
27
+ */
28
+ const EXCLUDED_FAMILY_PATTERN = /^claude-mythos-/;
29
+ const FIRST_PARTY = /first_party:"(claude-[a-z0-9.-]+)"/g;
30
+ const ALIAS_TABLE = /\{fable:"([^"]+)",opus:"([^"]+)",sonnet:"([^"]+)",haiku:"([^"]+)"\}/;
31
+ const ONE_MILLION = /"(claude-[a-z0-9.-]+)\[1m\]"/g;
32
+ /** Longest pattern we must not split across chunk boundaries. */
33
+ const OVERLAP_BYTES = 512;
34
+ function isOfferable(id) {
35
+ return !LEGACY_ID_PATTERN.test(id) && !EXCLUDED_FAMILY_PATTERN.test(id);
36
+ }
37
+ /**
38
+ * Accumulate catalog evidence across a chunk sequence.
39
+ *
40
+ * Exported for tests: the parse is a pure fold over strings, so a fixture can
41
+ * exercise it without a 190MB binary. Callers must feed overlapping chunks (see
42
+ * `readClaudeBundleCatalog`) or a pattern spanning a boundary is missed.
43
+ */
44
+ export function createClaudeCatalogScanner() {
45
+ const firstParty = new Set();
46
+ const oneMillion = new Set();
47
+ let aliases = null;
48
+ return {
49
+ push(chunk) {
50
+ FIRST_PARTY.lastIndex = 0;
51
+ for (let m = FIRST_PARTY.exec(chunk); m; m = FIRST_PARTY.exec(chunk)) {
52
+ if (m[1])
53
+ firstParty.add(m[1]);
54
+ }
55
+ ONE_MILLION.lastIndex = 0;
56
+ for (let m = ONE_MILLION.exec(chunk); m; m = ONE_MILLION.exec(chunk)) {
57
+ if (m[1])
58
+ oneMillion.add(m[1]);
59
+ }
60
+ if (!aliases) {
61
+ const table = ALIAS_TABLE.exec(chunk);
62
+ if (table) {
63
+ aliases = {
64
+ fable: table[1], opus: table[2],
65
+ sonnet: table[3], haiku: table[4],
66
+ };
67
+ }
68
+ }
69
+ },
70
+ result() {
71
+ const offerable = [...firstParty].filter(isOfferable).sort();
72
+ return {
73
+ firstParty: offerable,
74
+ aliases: aliases ?? {},
75
+ // A 1M literal for a model we do not offer is not useful, and it would
76
+ // otherwise let a filtered legacy id back in through the variant list.
77
+ oneMillion: [...oneMillion].filter(isOfferable).sort(),
78
+ };
79
+ },
80
+ };
81
+ }
82
+ /** @internal exported for unit tests */
83
+ export function parseClaudeBundleCatalog(chunks) {
84
+ const scanner = createClaudeCatalogScanner();
85
+ for (const chunk of chunks)
86
+ scanner.push(chunk);
87
+ return scanner.result();
88
+ }
89
+ /**
90
+ * Expand a catalog into the model list cli-jaw offers.
91
+ *
92
+ * `[1m]` variants are derived from observation rather than listed by hand: the
93
+ * bundle carries the literal only for models whose 1M window it enables, which is
94
+ * why Haiku has no variant. Aliases come first because Claude Code resolves them
95
+ * to the current snapshot, then pinned ids for callers who want a stable cache
96
+ * prefix across CLI updates.
97
+ */
98
+ export function claudeCatalogToChoices(catalog) {
99
+ const oneMillion = new Set(catalog.oneMillion);
100
+ const out = [];
101
+ const seen = new Set();
102
+ const push = (value) => {
103
+ if (!value || seen.has(value))
104
+ return;
105
+ seen.add(value);
106
+ out.push(value);
107
+ };
108
+ for (const alias of ['opus', 'sonnet', 'haiku', 'fable']) {
109
+ if (catalog.aliases[alias])
110
+ push(alias);
111
+ }
112
+ for (const id of catalog.firstParty) {
113
+ push(id);
114
+ if (oneMillion.has(id))
115
+ push(`${id}[1m]`);
116
+ }
117
+ return out;
118
+ }
119
+ /**
120
+ * Stream the bundle and extract its catalog. Returns null on any read failure so
121
+ * the caller keeps whatever it already had.
122
+ */
123
+ export async function readClaudeBundleCatalog(binaryPath) {
124
+ if (!binaryPath)
125
+ return null;
126
+ try {
127
+ const scanner = createClaudeCatalogScanner();
128
+ const stream = createReadStream(binaryPath, { highWaterMark: 1 << 20 });
129
+ let tail = '';
130
+ for await (const chunk of stream) {
131
+ // latin1 keeps one byte per char, so a regex offset cannot desynchronize
132
+ // from the file the way a multi-byte decode would.
133
+ const text = tail + chunk.toString('latin1');
134
+ scanner.push(text);
135
+ tail = text.slice(-OVERLAP_BYTES);
136
+ }
137
+ const catalog = scanner.result();
138
+ // An empty scan means the bundle shape changed. Reporting null lets the
139
+ // static seed stand instead of emptying the picker.
140
+ return catalog.firstParty.length > 0 ? catalog : null;
141
+ }
142
+ catch {
143
+ return null;
144
+ }
145
+ }
146
+ let cached = null;
147
+ /**
148
+ * Cached read keyed on the bundle's size and mtime. Claude Code replaces the whole
149
+ * file on update, so that pair changes exactly when the catalog can change, and a
150
+ * steady-state install pays the scan once.
151
+ */
152
+ export async function resolveClaudeBundleCatalog(binaryPath) {
153
+ if (!binaryPath)
154
+ return null;
155
+ let key;
156
+ try {
157
+ const info = await stat(binaryPath);
158
+ key = `${binaryPath}:${info.size}:${info.mtimeMs}`;
159
+ }
160
+ catch {
161
+ return null;
162
+ }
163
+ if (cached && cached.key === key)
164
+ return cached.catalog;
165
+ const catalog = await readClaudeBundleCatalog(binaryPath);
166
+ if (!catalog)
167
+ return null;
168
+ cached = { key, catalog };
169
+ return catalog;
170
+ }
171
+ /** @internal exported for unit tests */
172
+ export function resetClaudeBundleCatalogCacheForTest() {
173
+ cached = null;
174
+ }
175
+ //# sourceMappingURL=claude-model-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-model-discovery.js","sourceRoot":"","sources":["../../../src/cli/claude-model-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAWxC;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,0EAA0E,CAAC;AAErG;;;GAGG;AACH,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAElD,MAAM,WAAW,GAAG,qCAAqC,CAAC;AAC1D,MAAM,WAAW,GAAG,qEAAqE,CAAC;AAC1F,MAAM,WAAW,GAAG,+BAA+B,CAAC;AAEpD,iEAAiE;AACjE,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,SAAS,WAAW,CAAC,EAAU;IAC3B,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B;IACtC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,IAAI,OAAO,GAAkC,IAAI,CAAC;IAElD,OAAO;QACH,IAAI,CAAC,KAAa;YACd,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;YACD,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,KAAK,EAAE,CAAC;oBACR,OAAO,GAAG;wBACN,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE;wBACjC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE;qBACtC,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC;QACD,MAAM;YACF,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7D,OAAO;gBACH,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,OAAO,IAAI,EAAE;gBACtB,uEAAuE;gBACvE,uEAAuE;gBACvE,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;aACzD,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,wBAAwB,CAAC,MAAyB;IAC9D,MAAM,OAAO,GAAG,0BAA0B,EAAE,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAA4B;IAC/D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE;QAC3B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QACtC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QACvD,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,CAAC;QACT,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,UAAkB;IAC5D,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,0BAA0B,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC/B,yEAAyE;YACzE,mDAAmD;YACnD,MAAM,IAAI,GAAG,IAAI,GAAI,KAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACjC,wEAAwE;QACxE,oDAAoD;QACpD,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAOD,IAAI,MAAM,GAAyB,IAAI,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,UAAkB;IAC/D,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,GAAG,GAAG,GAAG,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,oCAAoC;IAChD,MAAM,GAAG,IAAI,CAAC;AAClB,CAAC"}
@@ -87,4 +87,50 @@ export function getClaudeModelKind(model) {
87
87
  return 'legacy';
88
88
  return 'explicit';
89
89
  }
90
+ // ─── Effort ladder ────────────────────────────────────────────────
91
+ /**
92
+ * The efforts Claude Code's `--effort` flag accepts, verbatim from its help text:
93
+ * "Effort level for the current session (low, medium, high, xhigh, max)".
94
+ */
95
+ export const CLAUDE_WIRE_EFFORTS = ['low', 'medium', 'high', 'xhigh', 'max'];
96
+ /**
97
+ * `ultracode` is offered as a sixth rung even though the flag does not accept it.
98
+ * The bundle resolves the tier from `settings.ultracode === true` and reports
99
+ * `xhigh`, so cli-jaw presents one choice and splits it at the wire (see
100
+ * `normalizeClaudeEffort` and `claudeSettingsArgs` in `src/agent/args.ts`).
101
+ *
102
+ * Claude Code refuses ultracode unless the model supports xhigh, dynamic workflows
103
+ * are enabled, and the organization permits xhigh. Only the model condition is
104
+ * knowable here, so that is the one this list encodes; the other two surface as a
105
+ * runtime message from Claude Code itself.
106
+ */
107
+ export const CLAUDE_EFFORT_CHOICES = [...CLAUDE_WIRE_EFFORTS, 'ultracode'];
108
+ /**
109
+ * Families that predate extended reasoning. Claude Code reports "ultracode runs at
110
+ * xhigh effort, which <model> doesn't support" for these, so offering the rung
111
+ * would advertise a control that always fails.
112
+ *
113
+ * Matching is anchored on the family segment rather than the whole id so it covers
114
+ * both the full id and the short alias: `haiku` and `claude-haiku-4-5` are the same
115
+ * model, and only one of them carries the `claude-` prefix.
116
+ */
117
+ const NO_XHIGH_PATTERN = /^(?:claude-)?(?:3-|haiku)/;
118
+ export function claudeModelSupportsXhigh(model) {
119
+ const value = (model || '').trim();
120
+ if (!value)
121
+ return false;
122
+ // The remaining short aliases (opus/sonnet/fable) resolve to current flagships,
123
+ // which all reach xhigh.
124
+ return !NO_XHIGH_PATTERN.test(value);
125
+ }
126
+ /** Per-model effort sets, narrowed so ultracode never appears where it cannot run. */
127
+ export function buildClaudeEffortsByModel(models) {
128
+ const out = {};
129
+ for (const model of models) {
130
+ out[model] = claudeModelSupportsXhigh(model)
131
+ ? [...CLAUDE_EFFORT_CHOICES]
132
+ : [...CLAUDE_WIRE_EFFORTS];
133
+ }
134
+ return out;
135
+ }
90
136
  //# sourceMappingURL=claude-models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-models.js","sourceRoot":"","sources":["../../../src/cli/claude-models.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,OAAO;CACC,CAAC;AAIX,yEAAyE;AACzE,0EAA0E;AAC1E,0EAA0E;AAC1E,4EAA4E;AAC5E,gEAAgE;AAChE,kCAAkC;AAElC,6CAA6C;AAE7C,8EAA8E;AAC9E,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;AAC7E,yDAAyD;AAEzD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,oEAAoE;IACpE,oEAAoE;IACpE,kEAAkE;IAClE,sEAAsE;IACtE,yDAAyD;IACzD,kBAAkB;IAClB,gBAAgB;IAChB,oBAAoB;IACpB,iBAAiB;IACjB,qBAAqB;IACrB,eAAe;IACf,mBAAmB;IACnB,iBAAiB;IACjB,qBAAqB;IACrB,iBAAiB;IACjB,qBAAqB;IACrB,iBAAiB;IACjB,qBAAqB;IACrB,mBAAmB;IACnB,uBAAuB;IACvB,kBAAkB;CACV,CAAC;AAEX,yEAAyE;AACzE,sEAAsE;AACtE,oEAAoE;AACpE,sEAAsE;AACtE,oDAAoD;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAA2B;IAC7D,iBAAiB,EAAE,iBAAiB;IACpC,iBAAiB,EAAE,iBAAiB;IACpC,iBAAiB,EAAE,iBAAiB;IACpC,mBAAmB,EAAE,mBAAmB;IACxC,mBAAmB,EAAE,mBAAmB;IACxC,kBAAkB,EAAE,kBAAkB;CACvC,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,UAAU,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAQ,uBAA6C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,uBAAuB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,uEAAuE;IACvE,sEAAsE;IACtE,4CAA4C;IAC5C,OAAO,CAAC,GAAG,uBAAuB,EAAE,GAAG,sBAAsB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,UAAU,CAAC;IAC9B,IAAI,sBAAsB,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IACtD,IAAI,wBAAwB,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrD,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"claude-models.js","sourceRoot":"","sources":["../../../src/cli/claude-models.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,OAAO;CACC,CAAC;AAIX,yEAAyE;AACzE,0EAA0E;AAC1E,0EAA0E;AAC1E,4EAA4E;AAC5E,gEAAgE;AAChE,kCAAkC;AAElC,6CAA6C;AAE7C,8EAA8E;AAC9E,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;AAC7E,yDAAyD;AAEzD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,oEAAoE;IACpE,oEAAoE;IACpE,kEAAkE;IAClE,sEAAsE;IACtE,yDAAyD;IACzD,kBAAkB;IAClB,gBAAgB;IAChB,oBAAoB;IACpB,iBAAiB;IACjB,qBAAqB;IACrB,eAAe;IACf,mBAAmB;IACnB,iBAAiB;IACjB,qBAAqB;IACrB,iBAAiB;IACjB,qBAAqB;IACrB,iBAAiB;IACjB,qBAAqB;IACrB,mBAAmB;IACnB,uBAAuB;IACvB,kBAAkB;CACV,CAAC;AAEX,yEAAyE;AACzE,sEAAsE;AACtE,oEAAoE;AACpE,sEAAsE;AACtE,oDAAoD;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAA2B;IAC7D,iBAAiB,EAAE,iBAAiB;IACpC,iBAAiB,EAAE,iBAAiB;IACpC,iBAAiB,EAAE,iBAAiB;IACpC,mBAAmB,EAAE,mBAAmB;IACxC,mBAAmB,EAAE,mBAAmB;IACxC,kBAAkB,EAAE,kBAAkB;CACvC,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,UAAU,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAQ,uBAA6C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,uBAAuB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,uEAAuE;IACvE,sEAAsE;IACtE,4CAA4C;IAC5C,OAAO,CAAC,GAAG,uBAAuB,EAAE,GAAG,sBAAsB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,UAAU,CAAC;IAC9B,IAAI,sBAAsB,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IACtD,IAAI,wBAAwB,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,qEAAqE;AAErE;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAU,CAAC;AAEtF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAG,mBAAmB,EAAE,WAAW,CAAU,CAAC;AAEpF;;;;;;;;GAQG;AACH,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAErD,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,gFAAgF;IAChF,yBAAyB;IACzB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,yBAAyB,CAAC,MAAyB;IACjE,MAAM,GAAG,GAA6B,EAAE,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,GAAG,wBAAwB,CAAC,KAAK,CAAC;YAC1C,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC;YAC5B,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,8 +1,13 @@
1
1
  import { fetchKiroModelInventory } from '../agent/kiro-models.js';
2
+ import { fetchCursorModelInventory } from '../agent/cursor-model-inventory.js';
3
+ import { fetchGrokModelInventory } from '../agent/grok-models.js';
2
4
  import { CLI_REGISTRY } from './registry.js';
5
+ import { claudeCatalogToChoices, resolveClaudeBundleCatalog } from './claude-model-discovery.js';
6
+ import { buildClaudeEffortsByModel } from './claude-models.js';
3
7
  import { resolveOpenCodexCodexModelsDetailed } from './opencodex-models.js';
4
8
  import { diagnoseOpenCodexExecution, resolveOpenCodexRuntime } from './opencodex-runtime.js';
5
9
  import { readCodexRootOpenAiBaseUrl } from '../core/codex-config.js';
10
+ import { detectCli } from '../core/cli-detection.js';
6
11
  /** Union of every per-model effort set, first-seen order preserved. */
7
12
  function unionEfforts(effortsByModel) {
8
13
  const seen = new Set();
@@ -19,9 +24,12 @@ function unionEfforts(effortsByModel) {
19
24
  }
20
25
  export async function buildLiveCliRegistry() {
21
26
  const registry = structuredClone(CLI_REGISTRY);
22
- const [kiroInventory, openCodexRuntime] = await Promise.all([
27
+ const [kiroInventory, openCodexRuntime, claudeCatalog, cursorInventory, grokInventory] = await Promise.all([
23
28
  fetchKiroModelInventory(),
24
29
  resolveOpenCodexRuntime(),
30
+ resolveClaudeCatalogForRegistry(),
31
+ fetchCursorModelInventory(),
32
+ fetchGrokModelInventory(),
25
33
  ]);
26
34
  const codexResult = await resolveOpenCodexCodexModelsDetailed(openCodexRuntime);
27
35
  const executionCoupling = diagnoseOpenCodexExecution(readCodexRootOpenAiBaseUrl(), openCodexRuntime);
@@ -94,6 +102,101 @@ export async function buildLiveCliRegistry() {
94
102
  modelDetails: kiroInventory.entries,
95
103
  };
96
104
  }
105
+ if (cursorInventory?.baseModels.length) {
106
+ // The picker gets the derived base models, not the ~220 wire ids: effort is
107
+ // a separate control, and listing every suffixed id would ask the user to
108
+ // pick the same model a dozen times.
109
+ //
110
+ // `resolveCursorModelVariant` still resolves wire ids from its static set.
111
+ // It runs synchronously on the spawn path, so feeding it a discovered list
112
+ // would make spawning depend on a CLI probe.
113
+ registry['cursor'] = {
114
+ ...registry['cursor'],
115
+ models: cursorInventory.baseModels,
116
+ modelSource: cursorInventory.source,
117
+ effortsByModel: cursorInventory.effortsByModel,
118
+ modelIds: cursorInventory.modelIds,
119
+ };
120
+ }
121
+ if (grokInventory?.models.length) {
122
+ // `defaultModel` stays static even though the CLI names one, for the same
123
+ // buildDefaultPerCli() seeding reason as everywhere else; the observed
124
+ // default is reported separately for diagnostics.
125
+ registry['grok'] = {
126
+ ...registry['grok'],
127
+ models: grokInventory.models,
128
+ modelSource: grokInventory.source,
129
+ ...(grokInventory.defaultModel ? { observedDefaultModel: grokInventory.defaultModel } : {}),
130
+ };
131
+ }
132
+ if (claudeCatalog) {
133
+ // `defaultModel` stays static for the same reason it does for Codex:
134
+ // buildDefaultPerCli() seeds user settings from it, so a bundle update must
135
+ // not silently repoint a user's default. The one exception is a default the
136
+ // live catalog no longer offers, which would be unselectable.
137
+ //
138
+ // Efforts are narrowed per model because `ultracode` needs xhigh support;
139
+ // the flat `efforts` union stays for legacy consumers.
140
+ const claudeEffortsByModel = buildClaudeEffortsByModel(claudeCatalog.models);
141
+ const claudePatch = {
142
+ models: claudeCatalog.models,
143
+ modelSource: 'claude-bundle',
144
+ modelAliases: claudeCatalog.aliases,
145
+ effortsByModel: claudeEffortsByModel,
146
+ };
147
+ for (const cli of ['claude', 'claude-e']) {
148
+ const entry = registry[cli];
149
+ if (!entry)
150
+ continue;
151
+ const staticDefault = entry['defaultModel'];
152
+ registry[cli] = {
153
+ ...entry,
154
+ ...claudePatch,
155
+ ...(typeof staticDefault === 'string' && !claudeCatalog.models.includes(staticDefault)
156
+ ? { defaultModel: claudeCatalog.models[0] }
157
+ : {}),
158
+ };
159
+ }
160
+ const aiE = registry['ai-e'];
161
+ if (aiE) {
162
+ const modelsByProvider = {
163
+ ...(aiE['modelsByProvider'] || {}),
164
+ claude: claudeCatalog.models,
165
+ };
166
+ const providers = Array.isArray(aiE['providers'])
167
+ ? aiE['providers']
168
+ : Object.keys(modelsByProvider);
169
+ // Provider-scoped, never flat: `ai-e` shares model ids across providers
170
+ // and a flat map would offer Kiro an ultracode it cannot run.
171
+ const existingEffortsByModelByProvider = aiE['effortsByModelByProvider'] || {};
172
+ registry['ai-e'] = {
173
+ ...aiE,
174
+ modelsByProvider,
175
+ effortsByModelByProvider: {
176
+ ...existingEffortsByModelByProvider,
177
+ claude: claudeEffortsByModel,
178
+ },
179
+ models: providers.flatMap(provider => modelsByProvider[provider] || []),
180
+ };
181
+ }
182
+ }
97
183
  return registry;
98
184
  }
185
+ /**
186
+ * Read the installed Claude Code bundle's catalog, if one is installed.
187
+ *
188
+ * A missing binary, an unreadable file or an unrecognized bundle shape all answer
189
+ * null, which leaves the static seed in `claude-models.ts` in place. Discovery
190
+ * never empties the picker.
191
+ */
192
+ async function resolveClaudeCatalogForRegistry() {
193
+ const detection = detectCli('claude');
194
+ if (!detection.available || !detection.path)
195
+ return null;
196
+ const catalog = await resolveClaudeBundleCatalog(detection.path);
197
+ if (!catalog)
198
+ return null;
199
+ const models = claudeCatalogToChoices(catalog);
200
+ return models.length > 0 ? { models, aliases: catalog.aliases } : null;
201
+ }
99
202
  //# sourceMappingURL=registry-live.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry-live.js","sourceRoot":"","sources":["../../../src/cli/registry-live.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry-live.js","sourceRoot":"","sources":["../../../src/cli/registry-live.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // ─── CLI Registry (single source of truth) ──────────
2
- import { getDefaultClaudeChoices, getDefaultClaudeModel } from './claude-models.js';
2
+ import { CLAUDE_EFFORT_CHOICES, getDefaultClaudeChoices, getDefaultClaudeModel } from './claude-models.js';
3
3
  import { CURSOR_EFFORT_CHOICES, CURSOR_REGISTRY_MODELS } from '../agent/cursor-runtime.js';
4
4
  import { isSwitchableNativeCli } from '../agent/runtime/selection.js';
5
5
  export const CODEX_MODEL_CHOICES = ['gpt-5.5', 'gpt-5.4', 'gpt-5.4-mini', 'gpt-5.3-codex-spark', 'gpt-5.6-sol', 'gpt-5.6-terra', 'gpt-5.6-luna'];
@@ -8,7 +8,23 @@ export const CODEX_MODEL_CHOICES = ['gpt-5.5', 'gpt-5.4', 'gpt-5.4-mini', 'gpt-5
8
8
  * running, registry-live.ts replaces this with the live per-model sets, which
9
9
  * can include `max` and `ultra`.
10
10
  */
11
- export const CODEX_EFFORT_CHOICES = ['low', 'medium', 'high', 'xhigh'];
11
+ /**
12
+ * Static effort fallback for Codex when opencodex is not running. When ocx IS
13
+ * running, registry-live.ts replaces this with the live per-model sets, which
14
+ * narrow it per model — `gpt-5.6-sol` reaches `ultra` while `gpt-5.6-luna` stops
15
+ * at `max`.
16
+ *
17
+ * The fallback is deliberately the union rather than a per-model table. Its job is
18
+ * to keep the picker from emptying, not to be an accurate catalog, and a hand-kept
19
+ * table here would recreate exactly the manual sync debt live discovery removed.
20
+ * The rung that is wrong for a given model is also unreachable in practice: this
21
+ * list is only used when opencodex is absent, and Codex runs through that proxy.
22
+ *
23
+ * `minimal` is left out. It appears in the live union because some routed models
24
+ * advertise it, but none of the GPT ids in `CODEX_MODEL_CHOICES` were observed to
25
+ * take it, so offering it here would be a rung with nothing behind it.
26
+ */
27
+ export const CODEX_EFFORT_CHOICES = ['low', 'medium', 'high', 'xhigh', 'max', 'ultra'];
12
28
  export const CLI_REGISTRY = {
13
29
  agy: {
14
30
  label: 'Antigravity',
@@ -104,7 +120,11 @@ export const CLI_REGISTRY = {
104
120
  },
105
121
  effortsByProvider: {
106
122
  claude: ['low', 'medium', 'high', 'xhigh', 'max'],
107
- codex: ['low', 'medium', 'high', 'xhigh'],
123
+ // Kept in step with CODEX_EFFORT_CHOICES by hand because this map is
124
+ // provider-scoped: ai-e forwards --effort directly (args.ts), so a
125
+ // narrower list here would hide max/ultra from the codex provider even
126
+ // when the top-level codex runtime offers them.
127
+ codex: [...CODEX_EFFORT_CHOICES],
108
128
  grok: [],
109
129
  copilot: ['low', 'medium', 'high'],
110
130
  kiro: ['low', 'medium', 'high', 'xhigh'],
@@ -115,7 +135,10 @@ export const CLI_REGISTRY = {
115
135
  binary: 'claude',
116
136
  defaultModel: getDefaultClaudeModel(),
117
137
  defaultEffort: 'medium',
118
- efforts: ['low', 'medium', 'high', 'xhigh', 'max'],
138
+ // `ultracode` is a Claude Code session setting, not a wire effort; it is
139
+ // normalized to xhigh plus a settings flag in src/agent/args.ts. Live
140
+ // registry narrows it per model, since it needs xhigh support.
141
+ efforts: [...CLAUDE_EFFORT_CHOICES],
119
142
  models: getDefaultClaudeChoices(),
120
143
  },
121
144
  'claude-e': {
@@ -124,7 +147,7 @@ export const CLI_REGISTRY = {
124
147
  experimental: true,
125
148
  defaultModel: getDefaultClaudeModel(),
126
149
  defaultEffort: 'medium',
127
- efforts: ['low', 'medium', 'high', 'xhigh', 'max'],
150
+ efforts: [...CLAUDE_EFFORT_CHOICES],
128
151
  models: getDefaultClaudeChoices(),
129
152
  },
130
153
  codex: {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cli/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cli/registry.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { join } from 'node:path';
4
4
  import { publish } from '../core/event-bus.js';
5
5
  import { CodeSessionManager } from './manager.js';
6
6
  import { createCodeProviders } from './providers/catalog.js';
7
+ import { primeProviderLiveModels } from './providers/provider-live-models.js';
7
8
  import { CodeStore } from './store.js';
8
9
  /** No database, recovery or native runtime is opened until the service is used. */
9
10
  export function createCodeHost(options) {
@@ -36,6 +37,11 @@ export function createCodeHost(options) {
36
37
  service.recover();
37
38
  database = candidate;
38
39
  manager = service;
40
+ // Fill the Cursor and Grok snapshots once, here rather than on a
41
+ // catalog read: they are the two providers whose discovery spawns a
42
+ // CLI, and a catalog read must never do that. Failure is silent by
43
+ // design — the static registry list stands.
44
+ void primeProviderLiveModels().catch(() => { });
39
45
  return service;
40
46
  }
41
47
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"host.js","sourceRoot":"","sources":["../../../src/code-mode/host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../../src/code-mode/host.ts"],"names":[],"mappings":"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"}
@@ -62,20 +62,44 @@ export class CodeSessionManager {
62
62
  throw new CodeStoreError('unsupported_provider', 'Code provider is unsupported', 400);
63
63
  return provider.describe();
64
64
  }
65
- validate(input, fixed) {
65
+ /**
66
+ * `fixed` carries an existing session's stored capabilities. `accepted`
67
+ * names the values that session already runs with: a Codex catalog is live
68
+ * now, so its model list can shift under a running session, and rejecting a
69
+ * value that was legal at creation would break prompt, attach and patch for
70
+ * a reason the user can neither see nor act on. A value the caller is
71
+ * newly choosing is always checked against what the runtime serves today.
72
+ */
73
+ validate(input, fixed, accepted) {
66
74
  const catalog = this.catalog(input.provider);
67
75
  if (!catalog.available)
68
76
  throw new CodeServiceError('provider_unavailable', 'Code provider is unavailable');
69
- if (!catalog.models.includes(input.model))
77
+ const keptModel = accepted !== undefined && accepted.model === input.model;
78
+ if (!keptModel && !catalog.models.includes(input.model)) {
70
79
  throw new CodeStoreError('unsupported_model', 'Code model is unsupported', 400);
80
+ }
81
+ const keptEffort = keptModel && accepted !== undefined && accepted.effort === input.effort;
71
82
  for (const capabilities of fixed ? [fixed, catalog.capabilities] : [catalog.capabilities]) {
72
83
  if (!capabilities.permissionModes.includes(input.permissionMode)) {
73
84
  throw new CodeStoreError('unsupported_policy', 'Code permission mode is unsupported', 400);
74
85
  }
75
- if (input.effort !== null && !capabilities.efforts.includes(input.effort)) {
86
+ // A kept effort skips the live union for the same reason a kept model
87
+ // skips the live model list: the catalog moves under a running session.
88
+ // The session's own stored capabilities still apply, since those are
89
+ // the contract the native runtime was opened with.
90
+ const live = capabilities === catalog.capabilities;
91
+ if (input.effort !== null && !(keptEffort && live) && !capabilities.efforts.includes(input.effort)) {
76
92
  throw new CodeStoreError('unsupported_effort', 'Code effort is unsupported', 400);
77
93
  }
78
94
  }
95
+ // The union above is the widest legal set. When the runtime publishes a
96
+ // per-model set, narrow to it: routed models often accept no effort at
97
+ // all while a sibling model reaches `ultra`, and the chosen value is
98
+ // forwarded to the native wire.
99
+ const perModel = keptEffort ? undefined : catalog.effortsByModel?.[input.model];
100
+ if (input.effort !== null && perModel && !perModel.includes(input.effort)) {
101
+ throw new CodeStoreError('unsupported_effort', 'Code effort is unsupported', 400);
102
+ }
79
103
  return catalog;
80
104
  }
81
105
  create(input) {
@@ -89,7 +113,10 @@ export class CodeSessionManager {
89
113
  this.ready();
90
114
  return this.storage(() => this.options.store.list(options)).map(row => {
91
115
  try {
92
- return { ...row, pendingPermissionCount: this.sessions.get(row.sessionId)?.pendingPermissions().length ?? 0 };
116
+ const service = this.sessions.get(row.sessionId);
117
+ const usage = service?.contextUsage() ?? null;
118
+ return { ...row, pendingPermissionCount: service?.pendingPermissions().length ?? 0,
119
+ ...(usage ? { contextUsage: usage } : {}) };
93
120
  }
94
121
  catch {
95
122
  return row;
@@ -104,7 +131,9 @@ export class CodeSessionManager {
104
131
  const pendingPermissions = session?.pendingPermissions() ?? [];
105
132
  const snapshot = this.storage(() => this.options.store.snapshot(id));
106
133
  const current = pendingPermissions.filter(permission => permission.turnId === snapshot.session.turnId && permission.epoch === snapshot.session.epoch);
107
- return { ...snapshot, session: { ...snapshot.session, pendingPermissionCount: current.length }, pendingPermissions: current };
134
+ const usage = session?.contextUsage() ?? null;
135
+ return { ...snapshot, session: { ...snapshot.session, pendingPermissionCount: current.length,
136
+ ...(usage ? { contextUsage: usage } : {}) }, pendingPermissions: current };
108
137
  }
109
138
  history(id, beforeSequence, limit) {
110
139
  this.ready();
@@ -189,7 +218,7 @@ export class CodeSessionManager {
189
218
  const duplicate = this.storage(() => this.options.store.admitTurn({ ...input, sessionId: id }));
190
219
  return { receipt: duplicate.receipt, duplicate: true };
191
220
  }
192
- this.validate(record, record.capabilities);
221
+ this.validate(record, record.capabilities, record);
193
222
  const session = this.reserve(record);
194
223
  try {
195
224
  const result = this.storage(() => this.options.store.admitTurn({ ...input, sessionId: id,
@@ -224,7 +253,7 @@ export class CodeSessionManager {
224
253
  async attach(id) {
225
254
  this.ready();
226
255
  const record = this.record(id);
227
- this.validate(record, record.capabilities);
256
+ this.validate(record, record.capabilities, record);
228
257
  const session = this.reserve(record);
229
258
  try {
230
259
  const result = this.storage(() => this.options.store.beginAttach(id, record.revision));
@@ -249,7 +278,7 @@ export class CodeSessionManager {
249
278
  || (input.effort !== undefined && input.effort !== record.effort)
250
279
  || (input.permissionMode !== undefined && input.permissionMode !== record.permissionMode);
251
280
  if (policy) {
252
- this.validate({ ...record, ...input }, record.capabilities);
281
+ this.validate({ ...record, ...input }, record.capabilities, record);
253
282
  if (policyChanged && record.nativeStarted && (!record.nativeCursor || !record.capabilities.resume)) {
254
283
  throw new CodeStoreError('resume_unavailable', 'Code policy change requires resumable native history', 409);
255
284
  }