onadit 0.1.0-beta.45 → 1.0.1

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 (134) hide show
  1. package/README.dev.md +1 -1
  2. package/README.md +6 -5
  3. package/dist/src/capture/triage-provider-factory.d.ts +12 -1
  4. package/dist/src/capture/triage-provider-factory.d.ts.map +1 -1
  5. package/dist/src/capture/triage-provider-factory.js +27 -1
  6. package/dist/src/capture/triage-provider-factory.js.map +1 -1
  7. package/dist/src/capture/worker-choice.d.ts +32 -0
  8. package/dist/src/capture/worker-choice.d.ts.map +1 -0
  9. package/dist/src/capture/worker-choice.js +76 -0
  10. package/dist/src/capture/worker-choice.js.map +1 -0
  11. package/dist/src/cli/commands/backfill.d.ts.map +1 -1
  12. package/dist/src/cli/commands/backfill.js +2 -2
  13. package/dist/src/cli/commands/backfill.js.map +1 -1
  14. package/dist/src/cli/commands/brief.js +2 -2
  15. package/dist/src/cli/commands/brief.js.map +1 -1
  16. package/dist/src/cli/commands/bulk-ingest.js +2 -2
  17. package/dist/src/cli/commands/bulk-ingest.js.map +1 -1
  18. package/dist/src/cli/commands/capture-recover.d.ts.map +1 -1
  19. package/dist/src/cli/commands/capture-recover.js +7 -3
  20. package/dist/src/cli/commands/capture-recover.js.map +1 -1
  21. package/dist/src/cli/commands/capture.d.ts.map +1 -1
  22. package/dist/src/cli/commands/capture.js +9 -4
  23. package/dist/src/cli/commands/capture.js.map +1 -1
  24. package/dist/src/cli/commands/compact.js +2 -2
  25. package/dist/src/cli/commands/compact.js.map +1 -1
  26. package/dist/src/cli/commands/doctor.d.ts.map +1 -1
  27. package/dist/src/cli/commands/doctor.js +7 -0
  28. package/dist/src/cli/commands/doctor.js.map +1 -1
  29. package/dist/src/cli/commands/import.d.ts.map +1 -1
  30. package/dist/src/cli/commands/import.js +2 -2
  31. package/dist/src/cli/commands/import.js.map +1 -1
  32. package/dist/src/cli/commands/ingest.js +2 -2
  33. package/dist/src/cli/commands/ingest.js.map +1 -1
  34. package/dist/src/cli/commands/onboard.d.ts +49 -0
  35. package/dist/src/cli/commands/onboard.d.ts.map +1 -1
  36. package/dist/src/cli/commands/onboard.js +185 -21
  37. package/dist/src/cli/commands/onboard.js.map +1 -1
  38. package/dist/src/cli/commands/rebuild.d.ts.map +1 -1
  39. package/dist/src/cli/commands/rebuild.js +2 -2
  40. package/dist/src/cli/commands/rebuild.js.map +1 -1
  41. package/dist/src/cli/commands/reconcile.js +2 -2
  42. package/dist/src/cli/commands/reconcile.js.map +1 -1
  43. package/dist/src/cli/commands/reindex.js +2 -2
  44. package/dist/src/cli/commands/reindex.js.map +1 -1
  45. package/dist/src/cli/commands/review.d.ts.map +1 -1
  46. package/dist/src/cli/commands/review.js +2 -2
  47. package/dist/src/cli/commands/review.js.map +1 -1
  48. package/dist/src/cli/commands/save.js +2 -2
  49. package/dist/src/cli/commands/save.js.map +1 -1
  50. package/dist/src/cli/commands/search.js +2 -2
  51. package/dist/src/cli/commands/search.js.map +1 -1
  52. package/dist/src/cli/commands/stats.js +2 -2
  53. package/dist/src/cli/commands/stats.js.map +1 -1
  54. package/dist/src/cli/commands/status.d.ts.map +1 -1
  55. package/dist/src/cli/commands/status.js +32 -4
  56. package/dist/src/cli/commands/status.js.map +1 -1
  57. package/dist/src/cli/commands/triage.d.ts.map +1 -1
  58. package/dist/src/cli/commands/triage.js +2 -2
  59. package/dist/src/cli/commands/triage.js.map +1 -1
  60. package/dist/src/cli/commands/update.d.ts +1 -1
  61. package/dist/src/cli/commands/update.d.ts.map +1 -1
  62. package/dist/src/cli/commands/update.js +23 -20
  63. package/dist/src/cli/commands/update.js.map +1 -1
  64. package/dist/src/cli/http-client.d.ts +6 -0
  65. package/dist/src/cli/http-client.d.ts.map +1 -1
  66. package/dist/src/cli/http-client.js +6 -0
  67. package/dist/src/cli/http-client.js.map +1 -1
  68. package/dist/src/cli/status/friend-header.d.ts.map +1 -1
  69. package/dist/src/cli/status/friend-header.js +32 -1
  70. package/dist/src/cli/status/friend-header.js.map +1 -1
  71. package/dist/src/config/schema.d.ts +30 -0
  72. package/dist/src/config/schema.d.ts.map +1 -1
  73. package/dist/src/config/schema.js +13 -0
  74. package/dist/src/config/schema.js.map +1 -1
  75. package/dist/src/diagnostics/codex-preflight.d.ts +10 -0
  76. package/dist/src/diagnostics/codex-preflight.d.ts.map +1 -1
  77. package/dist/src/diagnostics/codex-preflight.js +30 -1
  78. package/dist/src/diagnostics/codex-preflight.js.map +1 -1
  79. package/dist/src/diagnostics/doctor.d.ts +1 -1
  80. package/dist/src/diagnostics/doctor.d.ts.map +1 -1
  81. package/dist/src/diagnostics/doctor.js +10 -7
  82. package/dist/src/diagnostics/doctor.js.map +1 -1
  83. package/dist/src/diagnostics/repair-prompt.js +9 -2
  84. package/dist/src/diagnostics/repair-prompt.js.map +1 -1
  85. package/dist/src/jobs/worker-entry.d.ts.map +1 -1
  86. package/dist/src/jobs/worker-entry.js +1 -0
  87. package/dist/src/jobs/worker-entry.js.map +1 -1
  88. package/dist/src/main.js +5 -2
  89. package/dist/src/main.js.map +1 -1
  90. package/dist/src/mcp/server.d.ts.map +1 -1
  91. package/dist/src/mcp/server.js +2 -2
  92. package/dist/src/mcp/server.js.map +1 -1
  93. package/dist/src/observability/version-check.d.ts +7 -3
  94. package/dist/src/observability/version-check.d.ts.map +1 -1
  95. package/dist/src/observability/version-check.js +5 -5
  96. package/dist/src/observability/version-check.js.map +1 -1
  97. package/dist/src/onboarding/capture-switch.d.ts +15 -2
  98. package/dist/src/onboarding/capture-switch.d.ts.map +1 -1
  99. package/dist/src/onboarding/capture-switch.js +28 -5
  100. package/dist/src/onboarding/capture-switch.js.map +1 -1
  101. package/dist/src/onboarding/setup-session.d.ts.map +1 -1
  102. package/dist/src/onboarding/setup-session.js +2 -0
  103. package/dist/src/onboarding/setup-session.js.map +1 -1
  104. package/dist/src/onboarding/setup-state.d.ts +8 -1
  105. package/dist/src/onboarding/setup-state.d.ts.map +1 -1
  106. package/dist/src/onboarding/setup-state.js +6 -0
  107. package/dist/src/onboarding/setup-state.js.map +1 -1
  108. package/dist/src/providers/claude-cli-runner.d.ts +17 -5
  109. package/dist/src/providers/claude-cli-runner.d.ts.map +1 -1
  110. package/dist/src/providers/claude-cli-runner.js +35 -6
  111. package/dist/src/providers/claude-cli-runner.js.map +1 -1
  112. package/dist/src/providers/codex-cli-model.d.ts +85 -19
  113. package/dist/src/providers/codex-cli-model.d.ts.map +1 -1
  114. package/dist/src/providers/codex-cli-model.js +243 -51
  115. package/dist/src/providers/codex-cli-model.js.map +1 -1
  116. package/dist/src/providers/codex-cli-runner.d.ts +18 -1
  117. package/dist/src/providers/codex-cli-runner.d.ts.map +1 -1
  118. package/dist/src/providers/codex-cli-runner.js +206 -22
  119. package/dist/src/providers/codex-cli-runner.js.map +1 -1
  120. package/dist/src/retrieval/context-pack.d.ts.map +1 -1
  121. package/dist/src/retrieval/context-pack.js +16 -6
  122. package/dist/src/retrieval/context-pack.js.map +1 -1
  123. package/dist/src/server/app.d.ts.map +1 -1
  124. package/dist/src/server/app.js +3 -1
  125. package/dist/src/server/app.js.map +1 -1
  126. package/dist/src/server/routes/friend-status.d.ts +15 -1
  127. package/dist/src/server/routes/friend-status.d.ts.map +1 -1
  128. package/dist/src/server/routes/friend-status.js +12 -3
  129. package/dist/src/server/routes/friend-status.js.map +1 -1
  130. package/dist/src/server/routes/setup.d.ts +11 -4
  131. package/dist/src/server/routes/setup.d.ts.map +1 -1
  132. package/dist/src/server/routes/setup.js +30 -8
  133. package/dist/src/server/routes/setup.js.map +1 -1
  134. package/package.json +1 -1
@@ -2,35 +2,21 @@ import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  /**
5
- * Codex model resolution for the isolated-CODEX_HOME preflight/exec path.
6
- *
7
- * Onadit launches `codex exec` with an isolated CODEX_HOME that copies only
8
- * `auth.json` (never the user's `config.toml`), so it does NOT inherit the
9
- * user's `model = "..."`. Codex then falls back to its own built-in default,
10
- * which changes between releases — 0.125.0 moved it to `gpt-5.3-codex`, a
11
- * model ChatGPT-auth plans reject, silently breaking every preflight. The
12
- * fix: Onadit pins an explicit `--model` on every run and NEVER inherits codex's
13
- * implicit default. Resolution order:
14
- * 1. Onadit config (`codex_cli.model`) — operator override, authoritative.
15
- * 2. Top-level `model` in the source `~/.codex/config.toml` — the user's
16
- * own proven choice, which the isolated home would otherwise drop.
17
- * 3. A previously probe-verified model persisted under the data dir.
18
- * 4. A live probe across known-good candidates; the first that actually
19
- * runs is persisted (verified, not guessed). If none work, we throw a
20
- * clear, actionable error instead of looping on codex's bad default.
5
+ * How long a refused model stays skipped. A refusal is usually permanent (a
6
+ * retired model), but a plan change can bring a model back, so it is retried
7
+ * after a week rather than banned forever.
21
8
  */
22
- /**
23
- * Evidence-based known-good fallbacks. Codex 0.125.0's implicit default
24
- * (`gpt-5.3-codex`) is rejected by ChatGPT-auth plans; `gpt-5.5` is verified
25
- * working. This list is a last-resort safety net only — operators on a plan
26
- * where these are unavailable should set `codex_cli.model` rather than extend
27
- * it, which is exactly what the thrown error tells them to do.
28
- */
29
- export const CODEX_MODEL_FALLBACK_CANDIDATES = ["gpt-5.5"];
30
- const PERSISTED_MODEL_FILE = path.join(".internal", "codex-model");
9
+ export const REFUSAL_TTL_MS = 7 * 24 * 60 * 60 * 1000;
10
+ /** Probe at most this many catalog models per resolution — each is a real call. */
11
+ const MAX_CATALOG_PROBES = 4;
12
+ // One verified model per level, so changing the level re-picks. The earlier
13
+ // single `.internal/codex-model` file (no level) is only the last resort.
14
+ const persistedModelFile = (level) => path.join(".internal", `codex-model-${level}`);
15
+ const LEGACY_MODEL_FILE = path.join(".internal", "codex-model");
16
+ const MODEL_HISTORY_FILE = path.join(".internal", "codex-model-history.json");
31
17
  /**
32
18
  * Thrown when no model could be resolved from config/source/persisted state
33
- * and every fallback candidate failed to run. Carries the tried candidates so
19
+ * and every catalog candidate was refused. Carries the tried candidates so
34
20
  * the preflight classifier can render an honest, actionable message.
35
21
  */
36
22
  export class CodexModelUnavailableError extends Error {
@@ -44,11 +30,18 @@ export class CodexModelUnavailableError extends Error {
44
30
  }
45
31
  let configuredModel;
46
32
  let configuredDataDir;
33
+ let configuredLevel = "balanced";
47
34
  let resolvedModelPromise = null;
35
+ let resolvedModel = null;
36
+ // Set when a refusal invalidates the memoized model; written as the switch
37
+ // record once the next resolution lands on a different model.
38
+ let pendingSwitch = null;
39
+ // Refusals seen by this process — the source of truth when no data dir is set.
40
+ const memoryRefusals = new Map();
48
41
  /**
49
42
  * Wire the Onadit config's model override + data dir into the resolver. Called
50
43
  * once at daemon/CLI bootstrap. Safe to omit: without it, resolution still
51
- * works via the source `config.toml` → persisted → probe chain.
44
+ * works via the source `config.toml` → persisted → catalog chain.
52
45
  */
53
46
  export function configureCodexModel(opts) {
54
47
  if (typeof opts.model === "string" && opts.model.trim().length > 0) {
@@ -57,57 +50,181 @@ export function configureCodexModel(opts) {
57
50
  if (typeof opts.dataDir === "string" && opts.dataDir.trim().length > 0) {
58
51
  configuredDataDir = opts.dataDir.trim();
59
52
  }
53
+ if (opts.level === "fast" || opts.level === "balanced") {
54
+ configuredLevel = opts.level;
55
+ }
60
56
  // Re-resolve after (re)configuration so a newly-supplied override wins.
61
57
  resolvedModelPromise = null;
58
+ resolvedModel = null;
62
59
  }
63
60
  export function resetCodexModelCacheForTests() {
64
61
  configuredModel = undefined;
65
62
  configuredDataDir = undefined;
63
+ configuredLevel = "balanced";
66
64
  resolvedModelPromise = null;
65
+ resolvedModel = null;
66
+ pendingSwitch = null;
67
+ memoryRefusals.clear();
67
68
  }
68
69
  /**
69
70
  * Resolve the model to pin on `codex exec`. Memoized for the process so the
70
- * source-config read / probe happens at most once. `probe` is injected by the
71
- * runner (rather than imported) to avoid a module cycle; it returns true when
72
- * a candidate model actually runs.
71
+ * source-config read / catalog probe happens at most once per model. `probe`
72
+ * and `listModels` are injected by the runner (rather than imported) to avoid
73
+ * a module cycle. `probe` resolves true when the model runs and false when
74
+ * Codex refuses it; any other failure (auth, network) throws and aborts the
75
+ * resolution, so it surfaces as itself instead of "no working model".
73
76
  */
74
- export async function resolveCodexModel(probe) {
77
+ export async function resolveCodexModel(probe, listModels = async () => []) {
75
78
  if (resolvedModelPromise) {
76
79
  return resolvedModelPromise;
77
80
  }
78
81
  const pending = (async () => {
79
- if (configuredModel) {
80
- return configuredModel;
82
+ const now = Date.now();
83
+ const usable = (model) => model !== undefined && !isRefused(model, now) ? model : undefined;
84
+ const level = configuredLevel;
85
+ const direct = usable(configuredModel) ??
86
+ usable(readPersistedModel(configuredDataDir, level));
87
+ if (direct) {
88
+ return direct;
81
89
  }
82
- const sourceModel = readSourceConfigModel();
83
- if (sourceModel) {
84
- return sourceModel;
90
+ let catalog = [];
91
+ try {
92
+ catalog = await listModels();
85
93
  }
86
- const persisted = readPersistedModel(configuredDataDir);
87
- if (persisted) {
88
- return persisted;
94
+ catch {
95
+ // A Codex without `debug models`, or no network: nothing to pick from.
96
+ // The thrown error below then tells the user to set codex_cli.model.
89
97
  }
90
- // Nothing configured/known — actively verify a candidate before committing.
98
+ const candidates = orderCodexModelCandidates(catalog, (model) => isRefused(model, now), level).slice(0, MAX_CATALOG_PROBES);
91
99
  const tried = [];
92
- for (const candidate of CODEX_MODEL_FALLBACK_CANDIDATES) {
100
+ for (const candidate of candidates) {
93
101
  tried.push(candidate);
94
102
  if (await probe(candidate)) {
95
- persistModel(configuredDataDir, candidate);
103
+ persistModel(configuredDataDir, level, candidate);
96
104
  return candidate;
97
105
  }
106
+ recordRefusal(candidate, new Date());
107
+ }
108
+ // Nothing from the list ran (or there is no list): the user's own Codex
109
+ // model, used as before without a probe — a refusal later marks it.
110
+ const fromSource = usable(readSourceConfigModel());
111
+ if (fromSource && !tried.includes(fromSource)) {
112
+ return fromSource;
113
+ }
114
+ const legacy = usable(readLegacyPersistedModel(configuredDataDir));
115
+ if (legacy && !tried.includes(legacy)) {
116
+ tried.push(legacy);
117
+ if (await probe(legacy)) {
118
+ persistModel(configuredDataDir, level, legacy);
119
+ return legacy;
120
+ }
121
+ recordRefusal(legacy, new Date());
98
122
  }
99
123
  throw new CodexModelUnavailableError(tried);
100
124
  })();
101
125
  resolvedModelPromise = pending;
102
- // On failure, clear the cache so a later call (e.g. after the user sets a
103
- // model or auth recovers) can retry instead of returning the stale rejection.
104
- pending.catch(() => {
126
+ pending.then((model) => {
127
+ if (resolvedModelPromise !== pending)
128
+ return;
129
+ resolvedModel = model;
130
+ if (pendingSwitch && pendingSwitch.from !== model) {
131
+ recordSwitch({
132
+ from: pendingSwitch.from,
133
+ to: model,
134
+ at: new Date().toISOString(),
135
+ from_config: configuredModel !== undefined && isRefused(configuredModel, Date.now()),
136
+ });
137
+ }
138
+ pendingSwitch = null;
139
+ }, () => {
140
+ // On failure, clear the cache so a later call (e.g. after the user sets a
141
+ // model or auth recovers) can retry instead of returning the stale rejection.
105
142
  if (resolvedModelPromise === pending) {
106
143
  resolvedModelPromise = null;
107
144
  }
108
145
  });
109
146
  return pending;
110
147
  }
148
+ /**
149
+ * The model Codex runs under now, as far as this process knows, for status:
150
+ * the one resolved this run, else the configured or remembered one Codex has
151
+ * not refused. Null before the first pick.
152
+ */
153
+ export function currentCodexModel() {
154
+ if (resolvedModel)
155
+ return resolvedModel;
156
+ const now = Date.now();
157
+ if (configuredModel && !isRefused(configuredModel, now))
158
+ return configuredModel;
159
+ const persisted = readPersistedModel(configuredDataDir, configuredLevel);
160
+ return persisted && !isRefused(persisted, now) ? persisted : null;
161
+ }
162
+ /**
163
+ * Codex refused `model`. Record it (so every resolution skips it) and, when it
164
+ * is the model this process resolved, drop the memo so the next
165
+ * `resolveCodexModel` picks another one. Concurrent callers refused on the same
166
+ * model share that single re-resolution instead of each starting their own.
167
+ */
168
+ export function markCodexModelRefused(model, now = new Date()) {
169
+ if (!isRefused(model, now.getTime())) {
170
+ recordRefusal(model, now);
171
+ }
172
+ if (resolvedModel === model) {
173
+ pendingSwitch ??= { from: model };
174
+ resolvedModelPromise = null;
175
+ resolvedModel = null;
176
+ }
177
+ }
178
+ /**
179
+ * Rough tier from Codex's own description of a model ("Frontier intelligence
180
+ * for the most demanding work", "Latest workhorse model…", "Fast and
181
+ * affordable model…"). Wording can change; a misread only changes which model
182
+ * gets probed first, never whether capture works.
183
+ */
184
+ export function classifyCodexModelTier(description) {
185
+ const text = (description ?? "").toLowerCase();
186
+ if (/frontier|most demanding|most capable/.test(text))
187
+ return "frontier";
188
+ if (/\bfast\b|affordable|efficient|\bmini\b|lightweight/.test(text))
189
+ return "fast";
190
+ return "balanced";
191
+ }
192
+ // The level's own tier first, then the other of balanced/fast; frontier last
193
+ // — slowest, and it uses the most of the user's plan on every hourly run.
194
+ const TIER_RANK = {
195
+ balanced: { balanced: 0, fast: 1, frontier: 2 },
196
+ fast: { fast: 0, balanced: 1, frontier: 2 },
197
+ };
198
+ /**
199
+ * Catalog models worth probing, best first: models shown in Codex's picker
200
+ * (`visibility: "list"`), minus refused ones, ordered by tier and then by
201
+ * Codex's own priority (lower = more recommended).
202
+ */
203
+ export function orderCodexModelCandidates(catalog, isModelRefused = () => false, level = "balanced") {
204
+ return catalog
205
+ .filter((model) => model.visibility === undefined || model.visibility === "list")
206
+ .filter((model) => !isModelRefused(model.slug))
207
+ .map((model, index) => ({
208
+ slug: model.slug,
209
+ tier: TIER_RANK[level][classifyCodexModelTier(model.description)],
210
+ priority: typeof model.priority === "number" ? model.priority : Number.POSITIVE_INFINITY,
211
+ index,
212
+ }))
213
+ .sort((a, b) => a.tier - b.tier || a.priority - b.priority || a.index - b.index)
214
+ .map((model) => model.slug);
215
+ }
216
+ /**
217
+ * The last automatic switch, if it happened within `maxAgeMs` — for status.
218
+ * Reads the data dir directly so the daemon's status route sees switches made
219
+ * by any process (daemon, `onadit capture`, scripted captures).
220
+ */
221
+ export function readCodexModelSwitch(dataDir, nowMs = Date.now(), maxAgeMs = REFUSAL_TTL_MS) {
222
+ const last = readHistory(dataDir).last_switch;
223
+ if (!last)
224
+ return null;
225
+ const at = Date.parse(last.at);
226
+ return Number.isFinite(at) && nowMs - at < maxAgeMs ? last : null;
227
+ }
111
228
  /** The source CODEX_HOME the user actually authenticated, mirroring the runner. */
112
229
  function resolveSourceCodexHome() {
113
230
  if (typeof process.env["CODEX_HOME"] === "string") {
@@ -158,14 +275,14 @@ export function parseTopLevelTomlModel(text) {
158
275
  }
159
276
  return undefined;
160
277
  }
161
- function persistedModelPath(dataDir) {
278
+ function persistedModelPath(dataDir, level) {
162
279
  if (!dataDir) {
163
280
  return undefined;
164
281
  }
165
- return path.join(dataDir, PERSISTED_MODEL_FILE);
282
+ return path.join(dataDir, persistedModelFile(level));
166
283
  }
167
- function readPersistedModel(dataDir) {
168
- const file = persistedModelPath(dataDir);
284
+ function readPersistedModel(dataDir, level) {
285
+ const file = persistedModelPath(dataDir, level);
169
286
  if (!file) {
170
287
  return undefined;
171
288
  }
@@ -177,8 +294,21 @@ function readPersistedModel(dataDir) {
177
294
  return undefined;
178
295
  }
179
296
  }
180
- function persistModel(dataDir, model) {
181
- const file = persistedModelPath(dataDir);
297
+ /** The single pick 1.0.0 saved, before picks were kept per level. */
298
+ function readLegacyPersistedModel(dataDir) {
299
+ if (!dataDir) {
300
+ return undefined;
301
+ }
302
+ try {
303
+ const value = fs.readFileSync(path.join(dataDir, LEGACY_MODEL_FILE), "utf-8").trim();
304
+ return value.length > 0 ? value : undefined;
305
+ }
306
+ catch {
307
+ return undefined;
308
+ }
309
+ }
310
+ function persistModel(dataDir, level, model) {
311
+ const file = persistedModelPath(dataDir, level);
182
312
  if (!file) {
183
313
  return;
184
314
  }
@@ -191,4 +321,66 @@ function persistModel(dataDir, model) {
191
321
  // probe re-runs next cold start. Never fail a capture over it.
192
322
  }
193
323
  }
324
+ function isRefused(model, nowMs) {
325
+ const at = memoryRefusals.get(model) ?? readHistory(configuredDataDir).refused[model];
326
+ if (!at)
327
+ return false;
328
+ const refusedAt = Date.parse(at);
329
+ return Number.isFinite(refusedAt) && nowMs - refusedAt < REFUSAL_TTL_MS;
330
+ }
331
+ function recordRefusal(model, now) {
332
+ memoryRefusals.set(model, now.toISOString());
333
+ if (!configuredDataDir)
334
+ return;
335
+ const history = readHistory(configuredDataDir);
336
+ history.refused[model] = now.toISOString();
337
+ // Drop refusals past their TTL so the file stays a handful of entries.
338
+ for (const [name, at] of Object.entries(history.refused)) {
339
+ const refusedAt = Date.parse(at);
340
+ if (!Number.isFinite(refusedAt) || now.getTime() - refusedAt >= REFUSAL_TTL_MS) {
341
+ delete history.refused[name];
342
+ }
343
+ }
344
+ writeHistory(configuredDataDir, history);
345
+ }
346
+ function recordSwitch(modelSwitch) {
347
+ if (!configuredDataDir)
348
+ return;
349
+ const history = readHistory(configuredDataDir);
350
+ history.last_switch = modelSwitch;
351
+ writeHistory(configuredDataDir, history);
352
+ }
353
+ function readHistory(dataDir) {
354
+ if (!dataDir)
355
+ return { refused: {} };
356
+ try {
357
+ const parsed = JSON.parse(fs.readFileSync(path.join(dataDir, MODEL_HISTORY_FILE), "utf-8"));
358
+ const refused = parsed.refused && typeof parsed.refused === "object" ? parsed.refused : {};
359
+ const last = parsed.last_switch;
360
+ const lastValid = last &&
361
+ typeof last.from === "string" &&
362
+ typeof last.to === "string" &&
363
+ typeof last.at === "string";
364
+ return lastValid
365
+ ? { refused, last_switch: { ...last, from_config: last.from_config === true } }
366
+ : { refused };
367
+ }
368
+ catch {
369
+ return { refused: {} };
370
+ }
371
+ }
372
+ function writeHistory(dataDir, history) {
373
+ const file = path.join(dataDir, MODEL_HISTORY_FILE);
374
+ try {
375
+ fs.mkdirSync(path.dirname(file), { recursive: true });
376
+ // Temp + rename: the daemon and `onadit capture` can write at the same time.
377
+ const tmp = `${file}.${process.pid}.tmp`;
378
+ fs.writeFileSync(tmp, `${JSON.stringify(history, null, 2)}\n`, "utf-8");
379
+ fs.renameSync(tmp, file);
380
+ }
381
+ catch {
382
+ // Best-effort, like the persisted model: the in-memory refusal still holds
383
+ // for this process, and a lost record only costs one refused call later.
384
+ }
385
+ }
194
386
  //# sourceMappingURL=codex-cli-model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-cli-model.js","sourceRoot":"","sources":["../../../src/providers/codex-cli-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-cli-model.js","sourceRoot":"","sources":["../../../src/providers/codex-cli-model.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,16 @@ export declare class CodexCliTimeoutError extends Error {
38
38
  readonly signal: NodeJS.Signals | null;
39
39
  constructor(timeoutMs: number, signal: NodeJS.Signals | null, detail?: string);
40
40
  }
41
+ /**
42
+ * Thrown when Codex exits refusing the pinned model — retired, or not on the
43
+ * account's plan ("The 'gpt-5.5' model is not supported when using Codex with
44
+ * a ChatGPT account."). Found in the FULL output before it is shortened, and
45
+ * named first in the message, so the recorded error always says it.
46
+ */
47
+ export declare class CodexModelRejectedError extends Error {
48
+ readonly model: string;
49
+ constructor(model: string, reason: string, exitCode: number);
50
+ }
41
51
  export declare function runCodexCliJson<T>(options: CodexCliRunOptions): Promise<CodexCliRunResult<T>>;
42
52
  /**
43
53
  * Cheap, synchronous "is the Codex CLI installed?" probe — resolves the
@@ -48,6 +58,13 @@ export declare function runCodexCliJson<T>(options: CodexCliRunOptions): Promise
48
58
  * still passes here and fails later at extraction time.
49
59
  */
50
60
  export declare function isCodexCliAvailable(): boolean;
61
+ /**
62
+ * Is Codex signed in, as Onadit runs it? `codex login status` reads the
63
+ * sign-in file Onadit copies into its own Codex folder: no model call,
64
+ * nothing sent. Null when unknown: no `codex`, or an answer we cannot read.
65
+ * Used to suggest a capture worker, never to gate one.
66
+ */
67
+ export declare function codexSignedIn(): Promise<boolean | null>;
51
68
  export declare function resetCodexCliRunnerCacheForTests(): void;
52
69
  /**
53
70
  * Summarise codex output for diagnosis. The old first-500-chars slice captured
@@ -56,5 +73,5 @@ export declare function resetCodexCliRunnerCacheForTests(): void;
56
73
  * salient `ERROR` lines plus the tail. Short outputs are returned whole.
57
74
  */
58
75
  export declare function summarizeCodexOutput(stderr: string, stdout: string): string;
59
- export declare function resolveCodexExecutableForTests(name: string, pathEnv?: string | undefined, fallbackDirs?: readonly string[]): string | undefined;
76
+ export declare function resolveCodexExecutableForTests(name: string, pathEnv?: string | undefined, fallbackDirs?: readonly string[], keepsCodexHome?: (wrapper: string) => boolean): string | undefined;
60
77
  //# sourceMappingURL=codex-cli-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-cli-runner.d.ts","sourceRoot":"","sources":["../../../src/providers/codex-cli-runner.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;CACf;AA2CD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS,GACxD,IAAI,CAGN;AA2DD;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC3B,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,MAAM,SAAK;CAS1E;AAMD,wBAAsB,eAAe,CAAC,CAAC,EACrC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAgG/B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,wBAAgB,gCAAgC,IAAI,IAAI,CAOvD;AAgLD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAe3E;AAsGD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAM,GAAG,SAA+B,EACjD,YAAY,GAAE,SAAS,MAAM,EAAmC,GAC/D,MAAM,GAAG,SAAS,CAepB"}
1
+ {"version":3,"file":"codex-cli-runner.d.ts","sourceRoot":"","sources":["../../../src/providers/codex-cli-runner.ts"],"names":[],"mappings":"AAkCA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;CACf;AAsED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS,GACxD,IAAI,CAGN;AA2DD;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC3B,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,MAAM,SAAK;CAS1E;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBACX,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAK5D;AASD,wBAAsB,eAAe,CAAC,CAAC,EACrC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CA4C/B;AAwFD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAa7D;AAED,wBAAgB,gCAAgC,IAAI,IAAI,CAQvD;AAiMD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAe3E;AA4GD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAM,GAAG,SAA+B,EACjD,YAAY,GAAE,SAAS,MAAM,EAAmC,EAChE,cAAc,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAA+B,GACnE,MAAM,GAAG,SAAS,CA8BpB"}