@arjunkhera/atlas 0.3.36 → 0.3.37

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atlas",
3
- "version": "0.3.36",
3
+ "version": "0.3.37",
4
4
  "description": "Atlas: the delivery lifecycle, its crews and the Atlas tools, for any repository.",
5
5
  "author": {
6
6
  "name": "Arjun Khera"
@@ -32,6 +32,10 @@
32
32
  {
33
33
  "kit_sha256": "c4a506ec261d2d2fd7884943c9d317fb7b522704f4f63669b5bd37d32326bde5",
34
34
  "first_package": "0.3.32"
35
+ },
36
+ {
37
+ "kit_sha256": "b5c36f685ba476e09a54e3207e2444b098cc6a26dded8dca65b01e751fe2cbe4",
38
+ "first_package": "0.3.34"
35
39
  }
36
40
  ]
37
41
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arjunkhera/atlas",
3
- "version": "0.3.36",
3
+ "version": "0.3.37",
4
4
  "description": "Atlas: the delivery lifecycle, its crews and the Atlas tools, as a Claude Code plugin for any repository.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
package/tests/model.mjs CHANGED
@@ -289,11 +289,14 @@ export async function runClaude({ prompt, args = [], key, cwd, meter, what, reda
289
289
  // A call with no cost in its answer counts its whole hold: the meter never guesses low. The hold is at
290
290
  // most a quarter of the cap, so one bad call does not end the night.
291
291
  meter.add(Number.isFinite(cost) ? cost : left, what, id);
292
- if (!envelope) throw new Error(`${what}: the model command gave no answer (exit ${out.exit}): ${(redactor ? redactor.text(out.stderr || out.stdout) : out.stderr || out.stdout).slice(0, 400)}`);
293
292
  const clean = (t) => (redactor ? redactor.text(t) : t);
293
+ // No answer at all: the command could not run (a missing binary, say). That is no product result
294
+ // either, so it reads blocked, and the log shows what the command printed.
295
+ if (!envelope) throw new Blocked(`${what}: the model command gave no answer (exit ${out.exit}): ${clean(String(out.stderr || out.stdout).trim()).slice(0, 400)}`);
294
296
  // An error answer with no cost never reached the model: a refused sign-in, no credit, a bad model
295
- // name. The scenario cannot pass or fail on it, so it reads blocked, with the reason.
296
- if (envelope.is_error && !Number.isFinite(cost)) throw new Blocked(`${what}: the model call failed before the model answered: ${clean(String(envelope.result ?? envelope.error ?? (out.stderr || out.stdout))).slice(0, 400)}`);
297
+ // name. Newer claude commands give a cost of 0 there. The scenario cannot pass or fail on it, so it
298
+ // reads blocked, with the reason.
299
+ if (envelope.is_error && !(cost > 0)) throw new Blocked(`${what}: the model call failed before the model answered: ${clean(String(envelope.result ?? envelope.error ?? (out.stderr || out.stdout))).slice(0, 400)}`);
297
300
  if (out.signal === 'SIGKILL') throw new Error(`${what}: the model call ran past ${Math.round(timeoutMs / 1000)} seconds and was stopped`);
298
301
  return { exit: out.exit, stdout: clean(out.stdout), stderr: clean(out.stderr), envelope, events, cost: Number.isFinite(cost) ? cost : null };
299
302
  } finally {