scenri 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.9.2](https://github.com/tonygorb/Scenri/compare/v0.9.1...v0.9.2) (2026-09-07)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **codex:** name the model the installed cli is too old for ([91868da](https://github.com/tonygorb/Scenri/commit/91868daf6ec2d8f3d2c6e636923683d7650aafbf))
9
+ * **codex:** name the model the installed cli is too old for ([66b6b81](https://github.com/tonygorb/Scenri/commit/66b6b819303c4ed99fc40e6137bf00725b4d9673))
10
+
3
11
  ## [0.9.1](https://github.com/tonygorb/Scenri/compare/v0.9.0...v0.9.1) (2026-09-07)
4
12
 
5
13
 
package/dist/serve.js CHANGED
@@ -740,6 +740,10 @@ function codexFailureDetail(stderr, stdout) {
740
740
  const marked = body.startsWith("ERROR:") ? body : errorAt >= 0 ? body.slice(errorAt + 1) : "";
741
741
  return tailOf(marked) || tailOf(body) || tailOf(stdout.trim()) || tailOf(stderr.trim());
742
742
  }
743
+ var MODEL_NEEDS_NEWER_CODEX = /The '([^']+)' model requires a newer version of Codex/;
744
+ function tooOldForModel(version, model) {
745
+ return `Codex CLI ${version ?? "on this computer"} is too old for the model it is set to, ${model}.`;
746
+ }
743
747
  function killTree(child, platform, spawnImpl) {
744
748
  if (platform === "win32" && child.pid) {
745
749
  try {
@@ -783,6 +787,8 @@ function createRunner(opts = {}) {
783
787
  resolved ??= await resolveCodex(platform, spawnImpl);
784
788
  return resolved;
785
789
  }
790
+ let knownVersion = null;
791
+ let tooOldFor = null;
786
792
  const winArg = (a) => `"${a.replace(/[\r\n]+/g, " ").replace(/"/g, "'").replace(/%/g, " percent ")}"`;
787
793
  const spawnCodex = (exe, args, stdinOpen) => {
788
794
  const stdio = [stdinOpen ? "pipe" : "ignore", "pipe", "pipe"];
@@ -890,6 +896,17 @@ function createRunner(opts = {}) {
890
896
  );
891
897
  return;
892
898
  }
899
+ const newer = MODEL_NEEDS_NEWER_CODEX.exec(stderr);
900
+ if (newer) {
901
+ const model = newer[1];
902
+ tooOldFor = { version: knownVersion, model };
903
+ invalidateProbe();
904
+ finish(
905
+ `exit-${code ?? "unknown"}`,
906
+ () => reject(new Error(`${tooOldForModel(knownVersion, model)} Update Codex CLI, then run this again.`))
907
+ );
908
+ return;
909
+ }
893
910
  const snippet2 = codexFailureDetail(stderr, stdout);
894
911
  finish(
895
912
  `exit-${code ?? "unknown"}`,
@@ -971,6 +988,7 @@ function createRunner(opts = {}) {
971
988
  return verdict({ ok: false, reason: NOT_INSTALLED_REASON, code: "not-installed" }, exe, null);
972
989
  }
973
990
  const version = parseCodexVersion(ver.stdout);
991
+ knownVersion = version;
974
992
  if (version && !versionAtLeast(version, MIN_CODEX_VERSION)) {
975
993
  return verdict(
976
994
  {
@@ -982,6 +1000,16 @@ function createRunner(opts = {}) {
982
1000
  version
983
1001
  );
984
1002
  }
1003
+ if (tooOldFor) {
1004
+ if (version === tooOldFor.version) {
1005
+ return verdict(
1006
+ { ok: false, reason: tooOldForModel(version, tooOldFor.model), code: "update-needed" },
1007
+ exe,
1008
+ version
1009
+ );
1010
+ }
1011
+ tooOldFor = null;
1012
+ }
985
1013
  const login = await probeSpawn(exe, ["login", "status"]);
986
1014
  if (login.outcome === "ok") {
987
1015
  return verdict({ ok: true }, exe, version);
@@ -1495,7 +1523,7 @@ function createCodexEngine(opts) {
1495
1523
  }
1496
1524
  };
1497
1525
  function isFatalSetupError(err) {
1498
- return /failed to spawn|ENOENT|not logged in|login required|401|unauthorized/i.test(
1526
+ return /failed to spawn|ENOENT|not logged in|login required|401|unauthorized|is too old/i.test(
1499
1527
  String(err?.message ?? err)
1500
1528
  );
1501
1529
  }
@@ -7789,6 +7817,16 @@ function registerImageRoutes(app, deps) {
7789
7817
 
7790
7818
  // src/release/notes.data.ts
7791
7819
  var RELEASES = [
7820
+ {
7821
+ version: "0.9.2",
7822
+ date: "2026-09-07",
7823
+ sections: [
7824
+ {
7825
+ heading: "Fixes",
7826
+ body: "If the Codex app has switched to a model your Codex CLI is too old for, a shot now stops with a plain sentence naming the version and the model, and the setup dialog opens on the update step rather than a green check. Update the CLI once and generation resumes."
7827
+ }
7828
+ ]
7829
+ },
7792
7830
  {
7793
7831
  version: "0.9.1",
7794
7832
  date: "2026-09-07",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scenri",
3
- "version": "0.9.1",
3
+ "version": "0.9.2",
4
4
  "author": "Tony Gorb <hello@scenri.co>",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",