@agentskit/harness 0.11.0 → 0.13.0
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 +57 -0
- package/capabilities/public-surface.json +86 -84
- package/dist/cli.js +140 -43
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +32 -4
- package/dist/index.js +147 -60
- package/dist/index.js.map +1 -1
- package/docs/MODULE-BOUNDARIES.md +4 -3
- package/package.json +5 -1
- package/release/manifest.json +3 -3
- package/release/notes.md +25 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,62 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.13.0] - 2026-09-14
|
|
4
|
+
|
|
5
|
+
A full-codebase test-coverage sweep (every module in `src/kernel/`, `src/execution/`, `src/adapters/`, and most of
|
|
6
|
+
`src/loop/` brought to 90%+ statements/branches) that surfaced eight real bugs along the way, each fixed in its own
|
|
7
|
+
focused PR rather than folded silently into a test change.
|
|
8
|
+
|
|
9
|
+
- **Per-issue state files are now written atomically**: `dispatch.json`, `delivery.json`, and `contract.json` were
|
|
10
|
+
each written with a plain `writeFileSync` straight to the final path. `tick` and `deliver` run as separate
|
|
11
|
+
scheduled processes against the same state directory, and `readDeliveryState` already treats malformed JSON as
|
|
12
|
+
"no state yet" rather than erroring — so a crash mid-write or a read racing a write could silently reset
|
|
13
|
+
`fixRounds`/`nudges`/`finalOutcome` instead of surfacing the corruption. Consolidated the three duplicated unsafe
|
|
14
|
+
writes into one shared `src/loop/fs-atomic.ts` (temp file + atomic rename).
|
|
15
|
+
- **`events.ndjson` rotation is now serialized**: `appendLoopEvent`'s size-based rotation (`statSync` →
|
|
16
|
+
`renameSync` → `appendFileSync`) had no lock, so two scheduled processes rotating the same file near-
|
|
17
|
+
simultaneously could overwrite one process's archive or drop events. Only the rotation decision is now gated
|
|
18
|
+
behind a lock file; a busy lock skips rotation for that call rather than racing it, and a lock older than 5s is
|
|
19
|
+
treated as an abandoned crash artifact and cleared.
|
|
20
|
+
- **PII scanner recognizes current-format secrets**: added `sk-proj-...` (current OpenAI project keys), fine-
|
|
21
|
+
grained GitHub PATs, Google API keys, Stripe live keys, PEM private-key blocks, and the AWS secret-access-key
|
|
22
|
+
half (previously only the `AKIA` access-key id was matched).
|
|
23
|
+
- **`Ctrl-C` now actually stops `loop watch`**: its SIGINT handler only set `process.exitCode` without calling
|
|
24
|
+
`process.exit()`, so the long-running poll loop (and its `gh`/`orca` shell-outs) kept running in the background
|
|
25
|
+
after a cancelled watch.
|
|
26
|
+
- **Raw throws reclassified as `HarnessError`**: `retro.ts`'s `--since` parsing and `doc-bridge.ts`'s index
|
|
27
|
+
freshness/readability checks threw plain `Error`, so these bad-input/bad-state failures fell through the CLI's
|
|
28
|
+
generic exit-1 catch-all instead of the classified exit-code path every other validation failure uses.
|
|
29
|
+
- **Fixed two `execution/agent.ts` session-recorder bugs**: a dead `executing` Set that could never affect
|
|
30
|
+
control flow (removed), and a structurally-invalid-but-non-throwing runtime result that was being swallowed into
|
|
31
|
+
a generic, retryable `RUNTIME_ERROR` instead of surfacing as its own distinct failure.
|
|
32
|
+
- **`findExecutable` now checks the execute bit**: a non-executable regular file sitting on `PATH` with a matching
|
|
33
|
+
name was reported as a runnable binary, only to fail with `EACCES` at actual spawn time.
|
|
34
|
+
- **`loop debrief --issue X` no longer returns an empty report** for a normal, not-yet-dispatched issue: the
|
|
35
|
+
"always include an explicitly requested issue" fast path was shadowed by an unconditional second skip check
|
|
36
|
+
right after it.
|
|
37
|
+
|
|
38
|
+
Everything else in this release is test-only: no other production behavior changed.
|
|
39
|
+
|
|
40
|
+
## [0.12.0] - 2026-09-13
|
|
41
|
+
|
|
42
|
+
Closes gaps found reusing Orca instead of reinventing it. Orchestration mutations (`run-create`, `task-create`,
|
|
43
|
+
`worker-start`, `send`) were verified to require a live Orca terminal pane and cannot be called from the loop's
|
|
44
|
+
headless `tick`/`deliver` — every angle was tried (worker-side sends, coordinator-of-own-Run) and all failed
|
|
45
|
+
structurally, not from a config gap. What *is* reachable headlessly turned into real fixes below.
|
|
46
|
+
|
|
47
|
+
- **Escalations now carry the worker's own diagnosis**: `loop deliver`'s stuck/blocked escalations capture the
|
|
48
|
+
dispatched worker's terminal output (`terminal read --screen`, best-effort) and fold it into the Linear comment.
|
|
49
|
+
Two real incidents showed the worker had already explained the blocker in plain language (an explicit "BLOCKED:
|
|
50
|
+
..." reply, a sandboxed git error) that the idle/no-PR heuristic was discarding.
|
|
51
|
+
- **Slot assessment uses Orca's real memory diagnostic**: the harness's own `vm_stat`-based free-RAM estimate and
|
|
52
|
+
static `machine.agentRssMb` guess were measured to run roughly 2x more conservative than `orca diagnostics
|
|
53
|
+
memory`'s macOS memory-pressure reading, at the same instant. `assessSlots` now prefers `host.availableMemory`
|
|
54
|
+
and the average of real per-session RSS when Orca's diagnostic is available, falling back to the previous
|
|
55
|
+
behavior otherwise.
|
|
56
|
+
- **`ak-harness-loop` Orca Skill**: an installable `SKILL.md` (`skills/ak-harness-loop/`) documenting the
|
|
57
|
+
read-only vs. mutating `loop` commands and the operational constraints this release's investigation surfaced,
|
|
58
|
+
so a future agent session doesn't have to rediscover them.
|
|
59
|
+
|
|
3
60
|
## [0.11.0] - 2026-09-13
|
|
4
61
|
|
|
5
62
|
- **Read-only loop observability**: added `ak-harness loop observe` plus the public `runObservability` and
|