# Changelog

## [Unreleased]

## [2.0.11] - 2026-09-14

- Corrected agents-view UI goldens to match the terminal emulator's visible right edge across color modes.

## [2.0.10] - 2026-09-14

- Replaced vulnerable `extract-zip` handling with bounded, fail-closed extraction that rejects traversal paths, links, device entries, ambiguous Windows paths, and overwrites.
- Fixed release validation mistaking source-map handling code for an embedded inline source map.

## [2.0.9] - 2026-09-13

- Make the daemon-loss process simulation terminate the handshake-identified socket owner so reconnect coverage remains deterministic across launcher implementations.

## [2.0.8] - 2026-09-13

- Isolated Byte's repository-safety preparation from public extension hooks while preserving delegated and live-steering protection.

## [2.0.7] - 2026-09-13

- Restored distinct preparation policies for delegated, extension-triggered, and ordinary queued turns so public hooks receive the intended batch anchor while Byte's built-in repository gate still classifies every execution path.
- Made color-sensitive theme integration tests deterministic across terminal capabilities.
- Kept the fresh-install simulation in lockstep with generated third-party notice artifacts.

## [2.0.6] - 2026-09-13

- Fixed terminal layout goldens depending on the runner's advertised color depth.

## [2.0.5] - 2026-09-13

- Fixed the public npm artifact gate to validate both import and call edges returned by the bundled semantic worker.
- Fixed release-version changes invalidating otherwise unchanged terminal layout goldens.

## [2.0.4] - 2026-09-13

- Fixed release inventory generation for dependencies, such as Zod, that contain identity-less subpath package manifests.
- Updated the bundled repository engine to 1.2.2 so same-tick file and directory changes invalidate structural graphs consistently across filesystems.
- Corrected POSIX managed-path adversarial fixtures so they exercise the intended SQLite path checks behind a valid private state directory.

## [2.0.3] - 2026-09-13

- Added generated third-party licence inventories and reviewed legal texts to npm and standalone release artifacts.

## [2.0.2] - 2026-09-13

- Added Byte Repository Intelligence with immutable snapshots, evidence-backed claims, applicability rechecks, durable obligations, and monotonic change events.
- Added compiler-resolved TypeScript consumer boundaries over immutable snapshot materializations for impact, dependency, and blast-radius questions.
- Added cross-agent snapshot revalidation and a best-effort pre-tool gate that blocks an action when its immediate recheck observes a changed repository boundary.
- Added explicitly authorized probes with declared fixtures, interventions, independent oracle references, immutable provenance, and fail-closed sandbox execution.
- Changed model-authored repository answers to remain unresolved interpretations until independent evidence establishes their outcome.
- Fixed npm and R2 release artifacts retaining the semantic worker and sandbox runtime required by the shipped intelligence features.

## [2.0.1] - 2026-08-14

### Fixed

- A failed provider authentication crashed the client with "Cannot read properties of undefined (reading 'identityFingerprint')" while marking the credential stale. Stale-auth tokens were being stringified on their way from the session event to the model registry; they now keep their structure end to end, and a malformed token degrades to provider-level stale marking instead of an error. Anyone with an expired or invalid credential hit this on every retry.

### Notes

- The zeromq install-script warning printed by recent npm versions is documented in the README: it is safe to ignore on Windows, macOS, and Linux, where prebuilt binaries ship in the package.

## [2.0.0] - 2026-08-13

The terminal UI is rebuilt and the previous one is removed. The rewrite came out of a study of how people actually use a coding agent in a terminal: the work arrives in three lanes, not one; an interrupt is usually a correction rather than a cancellation; and once more than one agent is running, the question stops being "what is it doing" and becomes "which one needs me".

Nothing was dropped to get there. Every screen, keybinding, slash command, setting and extension hook from 1.x is present, and the public component names extensions import are unchanged.

Verification: docs/verification-2.0.md

### Added
- Three delivery lanes for input — queue, steer, and force — instead of one send path. Queued messages are visible while a turn runs and editable as a block.
- Interrupt that keeps the queue. Stopping a turn no longer discards what you lined up behind it; reclaiming the draft and stopping the turn are separate actions.
- An agents view built around attention rather than listing: sections for running, waiting and finished, heartbeat badges, a subagent tray, search with fuzzy matching and `re:` patterns, and a reply composer that steers a live session or resumes a saved one.
- The Ledger transcript: a turn is a record with its own fold state, countable truncation, and tool rows that open themselves when they fail.
- A pulse badge carrying proof of life and remaining budget as time-to-exhaustion, with width shedding on narrow terminals.
- ASCII mode. `ZYTE_UI_ASCII=1` degrades every glyph the product draws itself — the field separators, the status marks, the loader's spinner, the wordmark on both the chat header and the onboarding splash, the session tree's connector art, the `/context` meter, and the cursors, chevrons and arrow hints in every dialog. Nine screens are asserted to contain no byte above 0x7f rather than having a picture of them pinned; `docs/verification-2.0.md` tabulates which, and names the two published component surfaces deliberately left alone.

### Changed
- Themes: the seven built-in themes and custom JSON themes with hot reload work as before, including the `dark` and `light` names existing installs are configured with.
- `keybindings.json` continues to work unchanged; every action is resolved through it, including in dialogs, which previously drew hardcoded hints.
- `--version` and `--help` answer on stdout. They went to stderr, because every non-interactive mode redirects console output there — which meant capturing either one in a shell script produced nothing.

### Fixed
- The published CLI reparsed its entire bundle on every launch: the npm manifest never declared `"type": "module"`, so Node failed a CommonJS parse first and warned `MODULE_TYPELESS_PACKAGE_JSON` on stderr.
- A replaced session kept the previous session's command catalog, so commands the new session offered were missing and commands it did not were listed.
- Refreshing heartbeats could wipe the file totals already collected for the session.
- The footer overflowed at narrow widths instead of shedding fields.

### Removed
- The 1.x interactive and agents-view implementations. Extension imports are unaffected: every public component name still resolves, and the relocated dialog components keep their names while their option shapes follow the new selector — check `ThemeSelectorComponent`, `ThinkingSelectorComponent`, `ShowImagesSelectorComponent`, `SettingsSelectorComponent`, `ConfigurationMenuComponent`, `ModelSelectorComponent`, `TreeSelectorComponent`, `UserMessageSelectorComponent`, `LoginDialogComponent` and `OAuthSelectorComponent` if you construct them directly.
- The `ZYTE_UI` environment variable, which selected between the two UIs while both existed. `ZYTE_UI_ASCII` is unrelated and stays.

## [1.2.1] - 2026-08-12

### Added
- Zero-touch first run: uv now installs itself automatically on every platform — a pinned, checksummed release download with no shell, no curl, and no prompts. `ZYTE_AGENT_INSTALL_UV=0` opts out.
- Two-stage Python setup: the kernel is ready as soon as ipykernel and the runtime land; the convenience packages (pandas, numpy, and friends) install in the background and never block a session.
- First-run repo retrieval: sessions started before the Python runtime existed now pick up retrieval mid-session the moment setup finishes, instead of needing a restart.
- Setup progress is visible: a one-time "Preparing the Python runtime" notice appears when provisioning starts, and "Python runtime ready" when it completes.
- `zyte-agent -r` with no id opens the session browser, and `/resume` (alias `/sessions`) opens it from inside a chat.

### Changed
- The first frame no longer waits on the network: fd/ripgrep provisioning and the syntax highlighter load in the background after the UI is up.
- Warm starts skip the Python import probes (~1s faster) by trusting the bootstrap marker; a kernel that fails to start invalidates the marker and rebuilds automatically.
- Venv creation reuses a suitable system Python (3.10–3.14) when one exists instead of always downloading a managed CPython.
- Skill packages install in one batched uv invocation on first run instead of twelve.

## [1.2.0] - 2026-08-12

### Added
- Zyte three-lane retrieval: fact cards, the answer ledger, and skeleton packs, cutting tokens and cost on repository Q&A with identical accuracy.
- Published to npm as `zyte-agent` with the retrieval engine bundled and verified.

### Fixed
- Launching `za` no longer flashes console windows on Windows.

## [1.0.0] - 2026-08-09

### Added
- Initial Zyte Agent release.
