Skip to content

v0.10.0

Choose a tag to compare

@guanyilun guanyilun released this 18 Apr 16:43
· 781 commits to main since this release

Highlights

Architecture

  • Pure kernel refactor. Core is now a frontend-agnostic kernel — EventBus, ContextManager, HandlerRegistry, Compositor only. Agent backend, LLM client, TUI rendering, and all other features are extensions.
  • Shell-history-shaped conversation memory with advisable handlers; agents can install custom compaction strategies via conversation:compact.
  • Eager nucleation. Every turn is compressed to a one-line summary and appended to ~/.agent-sh/history, flowing across restarts like zsh history.
  • Custom agent backends. Extensions register alternative backends via agent:register-backend; -e now accepts relative paths.
  • Deferred LLM config. agent-backend resolves provider config at core:extensions-loaded, so runtime-registered providers work.

Features

  • Peer-to-peer messaging. peer_send / peer_inbox tools in the peer-mesh extension; received messages schedule a synthetic user turn.
  • Compositor introspection. DefaultCompositor emits compositor:write { stream, text } so extensions can mirror output without intercepting stdout.
  • Deferred-lookup tool mode. Tools load on demand with their full schema instead of being enumerated up front.
  • AGENTS.md cross-session memory. ~/.agent-sh/AGENTS.md loads into the system prompt.
  • banner:collect pipe. Extensions contribute labeled sections to the startup banner.
  • Round-scoped read-only tool cache (avoids redundant read_file/grep hits inside a single tool loop).
  • disabledExtensions setting for opting out of user extensions at startup.
  • registerInstruction API for extensions to add system-prompt guidance.
  • Two-tier compaction. Slim recent turns by dropping read-only results and truncating large outputs.
  • /model and /backend selections persist as defaults.
  • ctrl-a/e/k/u are line-aware in multiline input.

Fixes

  • Retry loop no longer exhausts on unrelated errors. isContextOverflow was matching bare "token"/"context" substrings; now matches specific provider codes (context_length_exceeded) and unambiguous phrases. Bails when compaction is a no-op so the real error surfaces.
  • Glob vs grep disambiguation. Tool descriptions tightened; grep emits a redirect hint when a filename-shaped pattern yields zero matches. Grep no longer swallows ripgrep errors for glob-shaped patterns.
  • ash-acp-bridge emits core:extensions-loaded before activateBackend() so deferred LLM init works over ACP.
  • Executor no longer SIGKILLs after a clean exit.
  • UI: CJK rendering, prompt leaks, Ctrl-C freeze, cursor positioning for wrapped/multiline input, autocomplete cursor tracking.
  • edit_file $& corruption bug in recall search.
  • Normalize tool-call arguments JSON to "{}" when empty/invalid (strict providers reject "" on replay).
  • Input history / nuclear history are now separate — InputHandler no longer clobbers agent memory.
  • Read-only tool results filtered from history file writes; startup history filter bumped to 100 entries.
  • shortenPath guarded against undefined; required tool args validated.
  • Spinner stays alive during diff rendering.
  • ui:info silenced on auto-compaction.
  • PTY exec collapses newlines to prevent garbled shell output.
  • Tool display path shortening uses shell cwd.
  • highlight.js warnings for unsupported langs suppressed.

Performance

  • History, skills, and conversation state optimizations.
  • System prompt cached across tool-loop iterations.
  • Myers O(ND) diff replaces O(m×n) LCS.
  • edit_file permission diffs skip file reads.
  • Per-turn prompt cost reduced; API-grounded token counts for compaction.

Refactors & Cleanup

  • terminal-buffer extracted from built-in extensions to examples/extensions/terminal-buffer.ts; xterm is no longer a core dependency.
  • user-shell moved out of built-ins (it's a user preference).
  • display tool removed; claude-code-bridge user_shell tool replaced with diff display for Edit/Write.
  • Myers diff replaced with the diff npm package.
  • Skills inlined in prompt, _extensionName hack removed.
  • System prompt points at docs/ instead of raw source; ash-shaped framing dropped from core.
  • DECSC/DECRC used for cursor save/restore where appropriate.
  • tui:render-diff handler powers permission diff rendering.
  • Default diff display shows all; expand-diff feature removed.
  • Default to stay in agent mode after dispatch.
  • instanceId shortened from 16 → 6 hex.
  • subagents inherit nuclear memory entries.

Docs

  • README demo gif.
  • Audited docs for stale references; added compositor:write to tui-composition guide.
  • Pre-merge audit fixes; removed stale display/user_shell refs.

Contributors

Thanks to @firslov for a substantial batch of fixes and features (custom agent backends + relative -e paths, SIGKILL executor fix, history/skills/conversation-state perf, UI polish for CJK / prompt leaks / Ctrl-C, round-scoped tool cache).

@guanyilun, @firslov

Full Changelog

v0.9.0...v0.10.0