Skip to content

v0.19.1

Choose a tag to compare

@sblattj sblattj released this 10 Oct 22:03
· 66 commits to main since this release

Fixes #137 — kiro: context tokens use an assumed 200k window and the last percent, so start size reads wrong
Fixes #126 — Release: npm stuck at 0.16.1 (0.17.0 to 0.19.0 never published), so the homebrew job fails and bun add -g installs a stale ach
Fixes #135 — Exit reason picks a routine INFO log line instead of the real stderr error
Fixes #133 — kiro (headless v3): nonzero exit hides the CLI's stderr reason, e.g. monthly usage limit
Fixes #131 — Kiro tap leaks HTTPS_PROXY into the agent's shell tools; other HTTPS clients get 502
Fixes #128 — Piped stdout is truncated at 64 KiB (binary) / 128 KiB (bun from source) since 0.17: ach dash --json --all | jq gets invalid JSON
Fixes #127 — kiro ACP transport: --kiro-engine v3 dies in initialize; kiro-cli acp rejects --agent/--model/--effort/--trust-all-tools with v3

Fixed

  • kiro: the context window is now derived instead of assumed (#137). A v3 run's context_usage breakdown gives the window from its largest category (tokens / percent), snapped to a known size, so Opus 5.5 and auto runs read a 1M window (windowSource: 'derived') instead of the assumed 200k, which read context about 5x low. Summing the breakdown's token counts is wrong after the first update, because kiro zeroes some category tokens while keeping their percent. usage.context also gains startPercentage/startTokens (the first reading, the session's start size) and an optional breakdown; percentage/tokens stay the end reading, and the run summary prints both. Window precedence: session store, then derived, then assumed.
  • npm stuck at 0.16.1 (#126): the release workflow now publishes the tagged version to npm (npm job, provenance, idempotent, fails loudly without the NPM_TOKEN secret), and the homebrew job waits on it. A backfill of an older tag (gh workflow run release-binaries.yml -f tag=vX.Y.Z) publishes under the backfill dist-tag, so latest never moves backwards. See docs/PACKAGING.md.
  • The nonzero-exit reason no longer picks routine log lines (#135). A headless kiro-cli run that exited 1 read kiro-cli exited with code 1: [INFO] [KRS] <-- GenerateAssistantResponseCommand done totalEvents=9, because the fallback took the last stderr line. pickStderrReason (src/adapters/shared.ts) now never picks INFO/DEBUG/TRACE-tagged lines ([INFO], DEBUG, level=trace). It prefers the last line that looks like a failure (error, failed, not offered, denied, exceeded, unauthorized, forbidden), then the last WARN line, then the last other non-empty line. When only routine lines remain, the message stays bare. The stderr tail grew from 5 to 20 lines (still 4 KB per line), so trailing INFO lines no longer push the real error out.
  • A CLI child that exits nonzero now reports why (#133). The exit error used to say only kiro-cli exited with code 1, so a kiro-cli headless run that stopped on The monthly usage limit has been reached looked like a crash. The shared run loop (src/adapters/shared.ts) keeps the last few stderr lines and appends the most relevant one, ANSI codes stripped: the last line matching error, else the last non-empty line, as in kiro-cli exited with code 1: Error: Internal error (code -32603): ... The monthly usage limit has been reached. The message prefix is unchanged, so existing matchers still work. When an adapter's own stderr hook already raised a specific error (cursor), the exit message stays bare, so the reason is not reported twice. Exit 0 is unchanged.
  • kiro: the MITM credit tap no longer breaks HTTPS from the agent's shell tools (#131). kiro-cli hands the tap env (HTTPS_PROXY, SSL_CERT_FILE, NODE_EXTRA_CA_CERTS) to every command the agent runs, and mitmdump intercepted every host. A host whose certificate chain mitmdump could not verify (for example behind a TLS-inspecting network proxy) came back as HTTP 502, so another vendor's CLI run from the agent's shell failed on every call. mitmdump now gets --allow-hosts for the metered hosts only (codewhisperer.*.amazonaws.com, runtime.*.kiro.dev, extendable with ACH_KIRO_TAP_HOSTS), and other hosts are tunneled raw to their origin. SSL_CERT_FILE now points at the system roots plus the tap CA instead of the bare tap CA, so OpenSSL clients can still verify tunneled hosts. See docs/KIRO.md.
  • Piped stdout is no longer truncated under Bun (#128). ach dash --json --all | wc -c stopped at 64 KiB in the compiled binaries and 128 KiB from source, because the CLI called process.exit before the pipe drained: under Bun the empty write("", cb) guard fires its callback while earlier output is still queued. The CLI now records stdout/stderr backpressure (a write() that returns false) and waits for drain before every forced exit (src/cli/stdio-flush.ts), including watch, serve and the live dash shutdown paths.
  • kiro: --kiro-transport acp --kiro-engine v3 no longer dies in initialize (#127). kiro-cli rejects --agent, --model, --effort, --trust-all-tools and --trust-tools with --agent-engine v3 on acp, so for v3 only --agent-engine v3 is passed. After session/new (or session/load) the agent (a mode), model and effort are set with session/set_config_option, because v3 does not implement session/set_model. Each value is checked against the options v3 sends back, since v3 accepts unknown values without an error. An agent the session does not offer fails before any prompt, and the error suggests --kiro-transport headless. A fresh workspace can load its model catalog after session/new, so the handshake waits up to 15 s for it. kiro.tools is applied by answering session/request_permission (all allows, a list allows the listed tool ids or ACP kinds, none or unset denies). The run evidence records engine, effortAck, currentEffort and toolTrust. Verified live on kiro-cli 2.29.0.