swarm-orchestrator 16.0.0 → 16.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,55 @@
3
3
  The agent. The verifier it consumes, `swarm-verify`, has its own changelog in
4
4
  [moonrunnerkc/swarm-verify](https://github.com/moonrunnerkc/swarm-verify/blob/main/CHANGELOG.md).
5
5
 
6
+ ## 16.0.1 - 2026-11-03
7
+
8
+ A patch release: three agent-loop defects and the swarm-verify 2.0.1 pin, from the follow-ups
9
+ of the 16.0.0 acceptance run. No new option, command or format.
10
+
11
+ ### Fixed
12
+
13
+ - **A rerun of a passing test command counted as progress.** The no-progress rule compared a
14
+ command's output byte for byte, and vitest prints its start time and duration on every run, so
15
+ one model ran the same passing test file 36 times until the step budget. The comparison now
16
+ takes out colour codes, clock times, timestamps, durations and temporary paths; the model still
17
+ reads the output as printed.
18
+ - **The same requirements block, sent again without the completion marker, kept the run going.**
19
+ A model wrote "The task is complete" in prose 29 times running and never sent the marker. A
20
+ block that leaves the requirement record unchanged, right after another block, now stops the
21
+ loop as no progress, and finalization judges the tree.
22
+ - **A relative path after `cd` was read from the workspace root.** `cd src/pkg && grep x
23
+ ../../tests` was refused as outside the workspace, and `cd .git && cat config` was checked as a
24
+ root file named `config` and allowed, though it reads `.git/config`, which the credential
25
+ denylist refuses. Each path is now read from the directory the command would open it in,
26
+ following `cd`, `pushd` and `chdir`; a `cd` the reader cannot name makes the command unreadable.
27
+ - **swarm-verify 2.0.1**, pinned exactly. A refused dependency preparation is recorded as refused
28
+ and its replay meets the same refusal, where 2.0.0 recorded no preparation and the replay
29
+ diverged. A test file moved and edited (one more `.parent` to reach its fixtures) is judged by
30
+ its base version at the new path, where 2.0.0 read it as deleted and ran both copies. A judged
31
+ process ended by a signal no longer reads as tampering, and a worker thread its runner
32
+ terminated is named as unchecked rather than failing the held-out check; a relative `SWARM_HOME` keeps its sealed checks; the mutation pass no longer mutates
33
+ inside multi-line strings and comments. See swarm-verify's changelog.
34
+
35
+ ### Corrected
36
+
37
+ - 16.0.0's known limit said the best cross-module refactor attempt (tracemantle) "broke the
38
+ module it moved". It did not: `history_io.py` was a working re-export, and the seven failures
39
+ are the tests that read fixtures, in a test file moved without the path to them. swarm-verify
40
+ 2.0.0 also refused the correct move, which edits that path; that was the verifier defect fixed
41
+ in 2.0.1.
42
+ - Rerun once against 2.0.1 with the same local model (gemma4-31b-greedy-128k, isolated, session
43
+ 20261103T175257-900062), the task is still incomplete: the model moved both modules with working
44
+ shims and moved the three test files byte for byte, so the same seven fixture tests fail. 2.0.1
45
+ read the three moves and attributed the seven failures to them; the replay agrees. The
46
+ limitation stands, as a limit of the models tried: no local model has completed the task.
47
+
48
+ ### Added
49
+
50
+ - docs/acceptance/2026-10-31/: the two isolated fix runs from real bug-fix commits, with the fix
51
+ commit's test sealed as a held-out check (`f-fix-isolated/`; neither completed, so the fix
52
+ category stays host-verified only), the comparison of t6 and h2 done by hand with the local
53
+ runs (`comparison/`), and the t6 rerun against 2.0.1 (`t6-tracemantle/closing-attempt-3/`).
54
+
6
55
  ## 16.0.0 - 2026-11-01
7
56
 
8
57
  Swarm Orchestrator is the coding product again, and `swarm-verify` 2.0.0 is the verifier it
package/README.md CHANGED
@@ -45,6 +45,15 @@ npm install -g swarm-orchestrator
45
45
  swarm run "<task>"
46
46
  ```
47
47
 
48
+ A run prints the directory of its evidence and the attestation of its final verification. The
49
+ verifier is its own package; installed beside Swarm, it reruns that verification from the record
50
+ and says whether it agrees:
51
+
52
+ ```sh
53
+ npm install -g swarm-verify
54
+ swarm-verify replay <directory holding the printed attestation> --workspace <repo>
55
+ ```
56
+
48
57
  With no model named, Swarm asks Ollama what is installed, leaves out cloud entries, embedding
49
58
  models and anything that would not fit in memory at the context (weights plus KV cache), probes
50
59
  the strongest candidates until one follows its shell protocol, and prints the one it chose and
@@ -1,6 +1,7 @@
1
1
  import { mkdir, stat, writeFile } from "node:fs/promises";
2
2
  import { isAbsolute, join, relative, resolve } from "node:path";
3
3
  import { readShellCommand } from "../tools/shell-command.js";
4
+ import { comparableOutput } from "./comparable-output.js";
4
5
  import { evidenceRef, excerptBytes } from "./exchange.js";
5
6
  import { outputCap, truncate } from "./prompt.js";
6
7
  /** Files one command can name in a digest line; the rest are left out. */
@@ -38,10 +39,15 @@ export async function runCommandStep(input) {
38
39
  await writeFile(path, outcome.output);
39
40
  saved = relative(input.outputs.root, path);
40
41
  }
41
- const same = input.command === input.previous.command && outcome.output === input.previous.output;
42
+ // A runner that prints its clock never prints the same bytes twice, so the result is compared
43
+ // without clocks, durations and temporary paths.
44
+ const comparable = comparableOutput(outcome.output);
45
+ const same = input.command === input.previous.command && comparable === input.previous.comparable;
42
46
  const repeats = same ? input.previous.repeats + 1 : 1;
43
47
  // At temperature 0 a repeated command and its unchanged output can repeat forever.
44
- const again = same ? "This is the command you ran last turn, and its output is unchanged.\n" : "";
48
+ const again = same
49
+ ? "This is the command you ran last turn, and its result is unchanged (times and durations aside).\n"
50
+ : "";
45
51
  const exitCode = outcome.decision === "allowed" ? outcome.exitCode : null;
46
52
  const status = outcome.decision === "allowed" ? `exit code: ${exitCode}` : outcome.decision;
47
53
  const where = saved !== null && bytes > outputCap ? `\n[full output: ${saved}]` : "";
@@ -60,6 +66,7 @@ export async function runCommandStep(input) {
60
66
  why: ok || lastLine.length === 0 ? null : lastLine,
61
67
  },
62
68
  repeats,
69
+ comparable,
63
70
  output: outcome.output,
64
71
  };
65
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command-step.js","sourceRoot":"","sources":["../../src/agent/command-step.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-step.js","sourceRoot":"","sources":["../../src/agent/command-step.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { stripVTControlCharacters } from "node:util";
2
+ /**
3
+ * What of a command's output the no-progress rule compares: the text without the parts that
4
+ * change on every run of the same command against the same tree. Test runners print the clock
5
+ * and how long each stage took (vitest's `Start at` and `Duration`, pytest's `in 0.12s`, jest's
6
+ * `Time:`), and many tools name a fresh temporary directory. Colour codes go too, since whether a
7
+ * tool colours its output can depend on the terminal it finds. The model is shown the output as
8
+ * printed; only the comparison reads this.
9
+ */
10
+ // 2026-11-02T21:04:05.123Z, 2026-11-02 21:04:05+00:00
11
+ const isoTimestamp = /\b\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(?::\d{2}(?:[.,]\d+)?)?(?:Z|[+-]\d{2}:?\d{2})?\b/g;
12
+ // 14:06:34, 14:06:34.512
13
+ const clockTime = /\b\d{1,2}:\d{2}:\d{2}(?:[.,]\d+)?\b/g;
14
+ // 0m0.123s, as `time` prints it
15
+ const minutesSeconds = /\b\d+m\d+(?:\.\d+)?s\b/g;
16
+ // 134ms, 0.12s, 1.5 sec, 3 seconds, 12µs, 2 min
17
+ const duration = /\b\d+(?:\.\d+)?\s?(?:ms|µs|us|ns|s|secs?|seconds?|mins?|minutes?)(?![\p{L}\p{N}_])/gu;
18
+ // /tmp/x, /private/tmp/x, /var/folders/ab/cd/T/x, /private/var/folders/...
19
+ const temporaryPath = /(?:\/private)?(?:\/tmp|\/var\/folders)\/[^\s'"`:)\]]*/g;
20
+ export function comparableOutput(output) {
21
+ return stripVTControlCharacters(output)
22
+ .replace(temporaryPath, "<temporary path>")
23
+ .replace(isoTimestamp, "<time>")
24
+ .replace(clockTime, "<time>")
25
+ .replace(minutesSeconds, "<duration>")
26
+ .replace(duration, "<duration>");
27
+ }
28
+ //# sourceMappingURL=comparable-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparable-output.js","sourceRoot":"","sources":["../../src/agent/comparable-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAErD;;;;;;;GAOG;AAEH,sDAAsD;AACtD,MAAM,YAAY,GAChB,qFAAqF,CAAC;AACxF,yBAAyB;AACzB,MAAM,SAAS,GAAG,sCAAsC,CAAC;AACzD,gCAAgC;AAChC,MAAM,cAAc,GAAG,yBAAyB,CAAC;AACjD,gDAAgD;AAChD,MAAM,QAAQ,GACZ,sFAAsF,CAAC;AACzF,2EAA2E;AAC3E,MAAM,aAAa,GAAG,wDAAwD,CAAC;AAE/E,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,wBAAwB,CAAC,MAAM,CAAC;SACpC,OAAO,CAAC,aAAa,EAAE,kBAAkB,CAAC;SAC1C,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC;SAC/B,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;SAC5B,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC;SACrC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACrC,CAAC"}
@@ -41,8 +41,10 @@ export async function runLoop(options) {
41
41
  let turnStarted = null;
42
42
  let longestTurnMs = 0;
43
43
  let verification = null;
44
- let previous = { command: "", output: "", repeats: 0 };
44
+ let previous = { command: "", comparable: "", repeats: 0 };
45
45
  let malformed = 0;
46
+ // Whether the last turn was a requirements block without the completion marker.
47
+ let proposedLast = false;
46
48
  const result = (stop, reason = null) => ({
47
49
  stop,
48
50
  reason,
@@ -140,6 +142,8 @@ export async function runLoop(options) {
140
142
  },
141
143
  });
142
144
  const parsed = read.parsed;
145
+ const afterProposal = proposedLast;
146
+ proposedLast = false;
143
147
  malformed = parsed.kind === "malformed" ? malformed + 1 : 0;
144
148
  if (parsed.kind === "malformed") {
145
149
  if (malformed >= unusableAfter) {
@@ -164,9 +168,9 @@ export async function runLoop(options) {
164
168
  outputs: options.outputs,
165
169
  previous,
166
170
  });
167
- previous = { command: parsed.command, output: ran.output, repeats: ran.repeats };
171
+ previous = { command: parsed.command, comparable: ran.comparable, repeats: ran.repeats };
168
172
  if (ran.repeats >= repeatLimit) {
169
- return result("no-progress", `the same command printed the same output ${ran.repeats} turns running`);
173
+ return result("no-progress", `the same command printed the same result ${ran.repeats} turns running`);
170
174
  }
171
175
  // A command repeated while findings are open is the run circling: point back at them.
172
176
  const open = openFindings(findings);
@@ -194,6 +198,11 @@ export async function runLoop(options) {
194
198
  options.log(`requirements ${proposed.ids}`);
195
199
  proposal = `a requirements block, recorded as ${proposed.ids} [evidence ${proposed.evidence}]`;
196
200
  if (!parsed.complete) {
201
+ // The same record twice running with no marker: the model is not going to send it.
202
+ if (afterProposal && proposed.unchanged) {
203
+ return result("no-progress", "the same requirements block arrived twice running without the completion marker, and the record did not change");
204
+ }
205
+ proposedLast = true;
197
206
  conversation.add(noteExchange({
198
207
  step: steps,
199
208
  reply: read.text,
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAc,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,sEAAsE;AACtE,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,4FAA4F;AAC5F,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,2FAA2F;AAC3F,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,YAAY,GAAG,CAAC,QAAuB,EAAE,EAAE,CAC/C,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAErE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAoB;IAChD,MAAM,YAAY,GAAG,kBAAkB,CAAC;QACtC,MAAM,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3F,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,QAAQ;KACrC,CAAC,CAAC;IACH,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5B,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,gEAAgE;IAChE,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAU,OAAO,CAAC;IAC3B,4EAA4E;IAC5E,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,YAAY,GAAwB,IAAI,CAAC;IAC7C,IAAI,QAAQ,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC3D,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,gFAAgF;IAChF,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,MAAM,GAAG,CAAC,IAAgB,EAAE,MAAM,GAAkB,IAAI,EAAc,EAAE,CAAC,CAAC;QAC9E,IAAI;QACJ,MAAM;QACN,MAAM;QACN,YAAY;QACZ,KAAK;QACL,KAAK;QACL,aAAa;KACd,CAAC,CAAC;IAEH,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,KAAK,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAChC,0FAA0F;QAC1F,uFAAuF;QACvF,IAAI,WAAW,KAAK,IAAI;YAAE,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,CAAC;QAC5F,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAClB,OAAO,MAAM,CAAC,aAAa,EAAE,kDAAkD,CAAC,CAAC;QACnF,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;YAChC,OAAO,MAAM,CACX,aAAa,EACb,0BAA0B,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,+BAA+B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,2DAA2D,CAClL,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;QACjC,oDAAoD;QACpD,MAAM,MAAM,GAAG,OAAO;YACpB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;gBAC5D,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,GAAG,IAAI,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,QAAQ,GAAG,GAAG,CAAC;QACf,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACzE,uFAAuF;QACvF,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC;YACpC,MAAM;YACN,KAAK;YACL,WAAW;YACX,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC1C,YAAY,EAAE,OAAO;SACtB,CAAC,CAAC;QACH,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CACT,4BAA4B,QAAQ,CAAC,MAAM,OAAO,OAAO,CAAC,aAAa,oBAAoB,QAAQ,CAAC,KAAK,SAAS,CACnH,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACtD,oFAAoF;QACpF,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;QAChD,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE,CAAC;YAC5D,OAAO,MAAM,CACX,cAAc,EACd,6BAA6B,MAAM,sBAAsB,OAAO,CAAC,SAAS,GAAG,KAAK,SAAS,CAC5F,CAAC;QACJ,CAAC;QAED,IAAI,KAAY,CAAC;QACjB,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC;gBAAE,MAAM,KAAK,CAAC;YAChD,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;YAC7D,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5B,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,SAAS;gBAChB,UAAU,EAAE,CAAC,aAAa,CAAC;gBAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE;aACnD,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;QACX,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,MAAM,GAAG,CAAC;YAAE,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;QACvF,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5B,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;YAC1B,UAAU,EAAE,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE;gBACP,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;gBACxE,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,MAAM;gBACxC,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;gBACjE,SAAS,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI;gBACpE,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,aAAa,GAAG,YAAY,CAAC;QACnC,YAAY,GAAG,KAAK,CAAC;QACrB,SAAS,GAAG,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;gBAC/B,OAAO,MAAM,CACX,kBAAkB,EAClB,GAAG,SAAS,6CAA6C,MAAM,CAAC,MAAM,EAAE,CACzE,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,OAAO,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACvF,YAAY,CAAC,GAAG,CACd,YAAY,CAAC;gBACX,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,IAAI,CAAC,IAAI;gBAChB,KAAK,EAAE,uCAAuC;gBAC9C,MAAM,EAAE,4BAA4B,MAAM,CAAC,MAAM,GAAG,GAAG,8FAA8F;gBACrJ,IAAI,EAAE,8BAA8B,MAAM,CAAC,MAAM,EAAE;aACpD,CAAC,CACH,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC;gBAC/B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ;aACT,CAAC,CAAC;YACH,QAAQ,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;YACzF,IAAI,GAAG,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC;gBAC/B,OAAO,MAAM,CACX,aAAa,EACb,4CAA4C,GAAG,CAAC,OAAO,gBAAgB,CACxE,CAAC;YACJ,CAAC;YACD,sFAAsF;YACtF,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,IAAI,GACR,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBACjC,CAAC,CAAC;oBACE,GAAG,CAAC,IAAI;oBACR,yCAAyC;oBACzC,GAAG,IAAI;oBACP,sGAAsG;iBACvG,CAAC,IAAI,CAAC,IAAI,CAAC;gBACd,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YACf,YAAY,CAAC,GAAG,CACd,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CACxF,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC;gBACzC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM;gBACN,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;aAC3B,CAAC,CAAC;YACH,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,QAAQ,GAAG,qCAAqC,QAAQ,CAAC,GAAG,cAAc,QAAQ,CAAC,QAAQ,GAAG,CAAC;YAC/F,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,mFAAmF;gBACnF,IAAI,aAAa,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACxC,OAAO,MAAM,CACX,aAAa,EACb,gHAAgH,CACjH,CAAC;gBACJ,CAAC;gBACD,YAAY,GAAG,IAAI,CAAC;gBACpB,YAAY,CAAC,GAAG,CACd,YAAY,CAAC;oBACX,IAAI,EAAE,KAAK;oBACX,KAAK,EAAE,IAAI,CAAC,IAAI;oBAChB,KAAK,EAAE,IAAI,QAAQ,0CAA0C;oBAC7D,MAAM,EAAE,QAAQ,CAAC,IAAI;oBACrB,IAAI,EAAE,QAAQ;iBACf,CAAC,CACH,CAAC;gBACF,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,mBAAmB,CAAC;YAC/D,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM;YACN,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QACH,YAAY,GAAG,MAAM,CAAC;QACtB,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;YAAE,aAAa,IAAI,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU;YAAE,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QACtF,4FAA4F;QAC5F,gCAAgC;QAChC,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YACvB,OAAO,MAAM,CACX,aAAa,EACb,+EAA+E,CAChF,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,SAAS,CAAC,CAAC,CAAC,EAAE,mDAAmD,MAAM,CAAC,KAAK,cAAc,QAAQ,GAAG,CAAC;QAC1J,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAC9B,YAAY,CAAC,GAAG,CACd,YAAY,CAAC;YACX,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,KAAK,EAAE,IAAI,MAAM,GAAG;YACpB,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,MAAM;SACb,CAAC,CACH,CAAC;QACJ,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,CACJ;gBACE,0IAA0I;gBAC1I,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAChC,qHAAqH;aACtH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YACF,SAAS;QACX,CAAC;QACD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,CACJ,sGAAsG,CACvG,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -4,13 +4,14 @@ import { applyProposal, recordSha256 } from "./requirement-record.js";
4
4
  /** Applies a proposed requirements block to the record and keeps the result as evidence. */
5
5
  export async function runRequirementsStep(input) {
6
6
  const record = applyProposal(input.task, input.record, input.json);
7
+ const sha256 = recordSha256(record);
7
8
  const recorded = await input.evidence.record({
8
9
  type: "requirements",
9
10
  actor: input.actor,
10
11
  provenance: ["model"],
11
12
  // Through JSON, so the ledger stores the record as plain data.
12
13
  payload: JSON.parse(JSON.stringify({
13
- recordSha256: recordSha256(record),
14
+ recordSha256: sha256,
14
15
  requirements: record.requirements,
15
16
  notes: record.notes,
16
17
  })),
@@ -21,6 +22,12 @@ export async function runRequirementsStep(input) {
21
22
  ...record.notes,
22
23
  `When the task is done, reply with ${completionMarker} on a line of its own, outside any block.`,
23
24
  ].join("\n");
24
- return { record, ids, note, evidence: evidenceRef(recorded.record.payloadDigest) };
25
+ return {
26
+ record,
27
+ ids,
28
+ note,
29
+ evidence: evidenceRef(recorded.record.payloadDigest),
30
+ unchanged: sha256 === recordSha256(input.record),
31
+ };
25
32
  }
26
33
  //# sourceMappingURL=requirements-step.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"requirements-step.js","sourceRoot":"","sources":["../../src/agent/requirements-step.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAA0B,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAY9F,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAMzC;IACC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3C,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU,EAAE,CAAC,OAAO,CAAC;QACrB,+DAA+D;QAC/D,OAAO,EAAE,IAAI,CAAC,KAAK,CACjB,IAAI,CAAC,SAAS,CAAC;YACb,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC;YAClC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CACH;KACF,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG;QACX,YAAY,GAAG,GAAG;QAClB,GAAG,MAAM,CAAC,KAAK;QACf,qCAAqC,gBAAgB,2CAA2C;KACjG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;AACrF,CAAC"}
1
+ {"version":3,"file":"requirements-step.js","sourceRoot":"","sources":["../../src/agent/requirements-step.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAA0B,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAc9F,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAMzC;IACC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3C,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU,EAAE,CAAC,OAAO,CAAC;QACrB,+DAA+D;QAC/D,OAAO,EAAE,IAAI,CAAC,KAAK,CACjB,IAAI,CAAC,SAAS,CAAC;YACb,YAAY,EAAE,MAAM;YACpB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CACH;KACF,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG;QACX,YAAY,GAAG,GAAG;QAClB,GAAG,MAAM,CAAC,KAAK;QACf,qCAAqC,gBAAgB,2CAA2C;KACjG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO;QACL,MAAM;QACN,GAAG;QACH,IAAI;QACJ,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC;QACpD,SAAS,EAAE,MAAM,KAAK,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;KACjD,CAAC;AACJ,CAAC"}
package/dist/source.json CHANGED
@@ -1 +1 @@
1
- {"describe":"v16.0.0"}
1
+ {"describe":"v16.0.1"}
@@ -1,10 +1,13 @@
1
+ import { statSync } from "node:fs";
2
+ import { resolve } from "node:path";
1
3
  import { runProcessGroup } from "swarm-verify/execution";
2
4
  import { refusedAction } from "./refused-actions.js";
3
- import { readShellCommand, readShellPipeline } from "./shell-command.js";
5
+ import { readShellPipeline } from "./shell-command.js";
6
+ import { pathsWhereTheyRun } from "./working-directories.js";
4
7
  const maxOutputBytes = 4 * 1024 * 1024;
5
8
  const onlyComments = (command) => command.split("\n").every((line) => line.trim() === "" || line.trim().startsWith("#"));
6
9
  const nothingToRun = "the command holds only comments, so there is nothing to run. Reply with a command that acts.";
7
- const unreadable = "this command cannot be read without running a shell (a substitution such as $(...), an expansion, a subshell, a brace group, or a program handed to a shell), so the paths it opens cannot be checked. Run the inner command on its own and write its result into the next command literally.";
10
+ const unreadable = "this command cannot be read without running a shell (a substitution such as $(...), an expansion, a subshell, a brace group, a program handed to a shell, or a cd to somewhere other than one named directory), so the paths it opens cannot be checked. Run the inner command on its own and write its result into the next command literally.";
8
11
  /**
9
12
  * The single way a command the model wrote runs. The request is on the ledger before anything
10
13
  * happens, every path a shell word could open goes through the guard, an off-allowlist program
@@ -40,18 +43,19 @@ export function createChokepoint(options) {
40
43
  const refused = pipeline === null ? null : refusedAction(pipeline);
41
44
  if (refused !== null)
42
45
  return settle("denied", `denied: ${refused}`, null);
43
- const read = readShellCommand(command);
46
+ const root = options.guard.workspaceRoot;
47
+ const paths = pathsWhereTheyRun(command, (path) => isDirectory(resolve(root, path)));
44
48
  // A string the reader cannot read names paths nothing here checked. A person may still run
45
49
  // it; auto approval has nobody to judge it, so it is refused rather than run unchecked.
46
- if (read === null && options.approval === "auto") {
50
+ if (paths === null && options.approval === "auto") {
47
51
  return settle("denied", `denied: ${onlyComments(command) ? nothingToRun : unreadable}`, null);
48
52
  }
49
- for (const path of read?.operands ?? []) {
53
+ for (const path of paths ?? []) {
50
54
  const verdict = options.guard.checkPath(path);
51
55
  if (!verdict.allowed)
52
56
  return settle("denied", `denied: ${verdict.reason}`, null);
53
57
  }
54
- if (!options.guard.isCommandAllowed(command)) {
58
+ if (paths === null || !options.guard.isCommandAllowed(command)) {
55
59
  const programs = options.guard.disallowedExecutables(command) ?? [];
56
60
  const answer = await decide(options, allowance, { command, programs, explanation: "" });
57
61
  await options.evidence.record({
@@ -81,6 +85,14 @@ export function createChokepoint(options) {
81
85
  },
82
86
  };
83
87
  }
88
+ function isDirectory(path) {
89
+ try {
90
+ return statSync(path).isDirectory();
91
+ }
92
+ catch {
93
+ return false;
94
+ }
95
+ }
84
96
  async function decide(options, allowance, request) {
85
97
  if (options.approval === "auto")
86
98
  return { outcome: "pre-approved", decidedBy: "approval-mode" };
@@ -1 +1 @@
1
- {"version":3,"file":"chokepoint.js","sourceRoot":"","sources":["../../src/tools/chokepoint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chokepoint.js","sourceRoot":"","sources":["../../src/tools/chokepoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { isAbsolute, join } from "node:path";
2
+ import { pathsACommandCouldOpen } from "./command-operands.js";
3
+ import { readShellStages } from "./shell-command.js";
4
+ /**
5
+ * The paths a command could open, each written from the directory it would be opened in. A `cd`
6
+ * moves the shell, so after `cd src && cat ../package.json` the file is the workspace's own
7
+ * `package.json`, and after `cd .git && cat config` it is `.git/config`. Read from the workspace
8
+ * root instead, the first was refused as outside the workspace and the second allowed as a file
9
+ * called `config`.
10
+ *
11
+ * Where the shell could be in more than one directory, a path is returned from each, so the guard
12
+ * rules on every file it could be. A stage runs in the directory a `cd` moved to only when `&&`
13
+ * alone joins it to that `cd`; after `;` or `||` the `cd` may not have run or may have failed.
14
+ * The one `cd` that cannot fail is the first command, naming a directory that exists now. A `cd`
15
+ * inside a pipe runs in a subshell and moves nothing. Directories are relative to the root, or
16
+ * absolute where the `cd` named an absolute path; the guard rules on each `cd` target as well.
17
+ *
18
+ * Null where the string cannot be read, or a `cd` goes somewhere this cannot name (`cd -`,
19
+ * `popd`, more than one operand).
20
+ */
21
+ export function pathsWhereTheyRun(command, isDirectory) {
22
+ const stages = readShellStages(command);
23
+ if (stages === null)
24
+ return null;
25
+ const pipelines = [];
26
+ for (const stage of stages) {
27
+ if (stage.after === "|")
28
+ pipelines.at(-1)?.push(stage);
29
+ else
30
+ pipelines.push([stage]);
31
+ }
32
+ const paths = new Set();
33
+ // Every directory the shell may be in now, and, while only `&&` follows a cd, where it is
34
+ // if the commands so far succeeded.
35
+ let shell = ["."];
36
+ let chain = null;
37
+ for (const [index, pipeline] of pipelines.entries()) {
38
+ const after = pipeline[0]?.after ?? null;
39
+ const here = after === "&&" && chain !== null ? chain : shell;
40
+ if (after !== "&&")
41
+ chain = null;
42
+ for (const stage of pipeline) {
43
+ const opened = pathsACommandCouldOpen(stage);
44
+ if (opened === null)
45
+ return null;
46
+ for (const path of opened)
47
+ for (const directory of here)
48
+ paths.add(from(directory, path));
49
+ }
50
+ const [only] = pipeline;
51
+ if (pipeline.length !== 1 || only === undefined || !movesTheShell(only.executable))
52
+ continue;
53
+ const target = destination(only);
54
+ if (target === null)
55
+ return null;
56
+ const moved = [...new Set(here.map((directory) => from(directory, target)))];
57
+ const certain = index === 0 && moved.every((directory) => isDirectory(directory));
58
+ shell = certain ? moved : [...new Set([...shell, ...moved])];
59
+ chain = moved;
60
+ }
61
+ return [...paths];
62
+ }
63
+ const movesTheShell = (executable) => ["cd", "pushd", "popd", "chdir"].includes(executable);
64
+ /** Where a `cd` or `pushd` goes, or null where it is not one directory this can name. */
65
+ function destination(stage) {
66
+ if (stage.executable === "popd")
67
+ return null;
68
+ const operands = [];
69
+ let options = true;
70
+ for (const word of stage.arguments) {
71
+ if (options && word === "--")
72
+ options = false;
73
+ else if (options && /^-[LPe@]+$/.test(word))
74
+ continue;
75
+ else if (options && word.startsWith("-"))
76
+ return null;
77
+ else
78
+ operands.push(word);
79
+ }
80
+ // `cd` alone goes home.
81
+ if (operands.length === 0)
82
+ return "~";
83
+ return operands.length === 1 ? (operands[0] ?? null) : null;
84
+ }
85
+ function from(directory, path) {
86
+ if (isAbsolute(path) || path === "~" || path.startsWith("~/") || directory === ".")
87
+ return path;
88
+ return join(directory, path);
89
+ }
90
+ //# sourceMappingURL=working-directories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working-directories.js","sourceRoot":"","sources":["../../src/tools/working-directories.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swarm-orchestrator",
3
- "version": "16.0.0",
3
+ "version": "16.0.1",
4
4
  "description": "A local coding agent: give it an engineering task and it makes the change, checks each requirement with swarm-verify, repairs supported failures, and returns the patch with evidence of what is complete and what remains uncertain.",
5
5
  "keywords": [
6
6
  "coding-agent",
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "smol-toml": "^1.8.0",
58
- "swarm-verify": "2.0.0",
58
+ "swarm-verify": "2.0.1",
59
59
  "zod": "^4.4.3"
60
60
  },
61
61
  "license": "ISC",