@agentskit/harness 0.9.0 → 0.11.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 CHANGED
@@ -1,5 +1,47 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.11.0] - 2026-09-13
4
+
5
+ - **Read-only loop observability**: added `ak-harness loop observe` plus the public `runObservability` and
6
+ `assessObservability` APIs. The report combines doctor/debrief/event-log data with Orca terminal/worktree
7
+ inspection and exposes queue, delivery, machine, provider, memory, cache, review, fix-round, lead-time, and
8
+ observed-token metrics.
9
+ - **Deterministic anomaly detection**: flags connected terminals without output, active claims without
10
+ `delivery.json`, finalized dirty worktrees, ready queues with idle slots but no recent dispatch, and stalled
11
+ in-flight workers/reviews. `--precheck` returns scheduler-friendly exit codes without mutating state.
12
+ - **Operator documentation and coverage**: added ADR-0031, module-boundary documentation, and focused regression
13
+ tests for the observability rules.
14
+
15
+ ## [0.10.0] - 2026-09-12
16
+
17
+ Closes the gaps found comparing this harness against LangChain's "custom agent harness" article. The structural
18
+ difference stands: this harness orchestrates opaque external CLI agents, so a model/tool-loop middleware isn't
19
+ possible here — every item below targets the orchestration layer this loop actually controls (see ADR-0030).
20
+
21
+ - **Local event bus + orchestration lifecycle hooks**: `plugins.modules` (local `.mjs` files, empty by default)
22
+ loaded once per `tick`/`deliver`, each getting `src/loop/event-bus.ts`'s bus to subscribe to loop events live
23
+ and to `beforeDispatch`/`afterDispatch`/`beforeReview`/`afterReview`/`beforeMerge`/`afterMerge`/`onPause`/
24
+ `onEscalate` — a `before*` hook can return `{ block: true, reason }` to stop the action. `loop doctor` gained a
25
+ `plugins.modules` check.
26
+ - **PII/secret scanning**: `security.pii.enabled` (default false) scans issue text before it enters the
27
+ orchestrator prompt and the worker brief for PII-shaped patterns (email, common API-key prefixes, phone,
28
+ card-number-shaped digits); `security.pii.action` is `redact` (default when enabled), `warn`, or `block`.
29
+ - **Cost/time circuit breakers** for an in-flight dispatch, since the loop cannot count a worker CLI's own
30
+ model/tool calls: `delivery.maxDispatchMinutes` (hard wall-clock ceiling) and `resilience.maxUsageDeltaPercent`
31
+ (stops a dispatch whose provider's remaining Orca usage dropped past the threshold since it was sent out).
32
+ `dispatch.json` now records `initialRemainingPercent`. Either trip stops the issue like a stuck worker.
33
+ - **Human-approval merge gate**: `delivery.merge.requireHumanApproval` (default false) holds a clean, green-checks
34
+ PR until a human approves it on GitHub (`reviewDecision: 'APPROVED'`, already fetched with every PR snapshot).
35
+ - **MCP allowlist doctor check**: `loop doctor` validates the default-deny `mcp.allowTools` bridge wiring when
36
+ `mcp.enabled` — MCP stays adapter-only and read-only per ADR-0028, so this checks the allow/deny plumbing, not a
37
+ live connection to an MCP server.
38
+ - **Dynamic outcome progress**: the brief documents an optional `progress.json` convention
39
+ (`{"o1": "done", "o2": "in-progress"}`) a worker can write at its worktree root; `loop debrief` shows
40
+ `N/M outcome(s) done` per in-flight issue when present (`src/loop/progress.ts`, best-effort, never required).
41
+ - **Secret-shaped filename guardrail**: `delivery.secretFilePatterns` (default covers `.env`, `*.pem`, `*.key`,
42
+ `id_rsa`, `credentials.json`, …) extends the existing `selfEditPaths` hold — a PR touching a matching filename is
43
+ held, never reviewed or merged, in both the normal dispatch path and GitHub label intake.
44
+
3
45
  ## [0.9.0] - 2026-09-12
4
46
 
5
47
  - **Failure-classification fix**: `classifyProviderFailure` now recognises real Claude/Codex/Grok usage-limit phrasing ("You've hit your session limit", "usage limit reached", "credit balance is too low", "spend limit reached", "temporarily limiting requests", "Overloaded") as `quota` instead of falling through to `other`, and `extractResetsAt` parses a relative (`resets in 3h`) or clock-time (`resets 10:40pm`) reset out of the message. A code-review exit is classified the same way, marking the reviewer's provider (not the review-CLI transport id) cooling down instead of retrying every tick. Root cause of a 2026-09-11/12 pilot bug: 19 unclassified `contract.failed` retries across 4 issues and 12 incomplete reviews over 7h with no cooldown ever recorded.
package/README.md CHANGED
@@ -605,7 +605,7 @@ Releases are published by `.github/workflows/release-harness.yml` after a merge
605
605
  or require an `NPM_TOKEN`. Configure the npm trusted publisher once for
606
606
  `AgentsKit-io/harness`, workflow `release-harness.yml`, and package
607
607
  `@agentskit/harness`; version changes remain the release trigger.
608
- The 0.4.0 candidate checklist and explicit blockers live in
608
+ The current release candidate checklist and explicit blockers live in
609
609
  [`release/manifest.json`](release/manifest.json) and
610
610
  [`release/notes.md`](release/notes.md).
611
611