Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 23 Sep 17:42
dc54955

Changelog

✨ Features

  • 1e201bd: feat(cli): litellm endpoint integration and management (#70) (@ngoyal16)
  • c512b5b: feat(core): dynamic runtime model switching (/model ) (#69) (@ngoyal16)
  • d1edb3b: feat(core): general-purpose agent access modes (#42) (@ngoyal16)
  • 6fa3a31: feat(lhctl): add voice dictation, spoken responses, and workspace directory commands (@ngoyal16)
  • 1bc7940: feat(lhctl): improve copy, multiline paste, and console history retention in TUI (@ngoyal16)
  • 267d928: feat(lhctl): transition TUI to AGY-style inline terminal with native scrollback (@ngoyal16)
  • 85f91bf: feat: add universal desktop automation, browser enhancements, and redesigned tui (@ngoyal16)
  • 57a3e6d: feat: add version command and flags to lhctl (@ngoyal16)
  • 9025522: feat: integrate code-reviewer-ai-agent as agents/code-reviewer submodule (@ngoyal16)

🐛 Bug Fixes

  • 678d22c: fix(conversation): eliminate lock inversion deadlock in Flush and step writer (#51) (@ngoyal16)
  • 53f03e0: fix(engine): clone tool registry per engine to prevent subagent step emitter race condition (@ngoyal16)
  • fafe6df: fix(engine): deduplicate turn token usage across tool executions (#46) (@ngoyal16)
  • 04644fc: fix(engine): pass isolated subagent environment variables without mutating global state (#53) (@ngoyal16)
  • c44888f: fix(engine): thread-safe lazy initialization for desktop driver (#52) (@ngoyal16)
  • 6ef3d73: fix(lhctl): remove extra blank lines between consecutive tool calls and items (@ngoyal16)
  • bc688a2: fix(llm): sort streaming tool call indices to preserve execution order (#48) (@ngoyal16)
  • 7671520: fix(server): isolate turn cancellation to current turn context (#43) (@ngoyal16)
  • d3abf81: fix(server): prevent cleanup hang on client disconnect during questions and permissions (#44) (@ngoyal16)
  • a246f46: fix(tools): apply multi-chunk edits bottom-to-top with line delta adjustments (#45) (@ngoyal16)
  • 2c888bf: fix(tools): fix file descriptor leaks and stream ripgrep output (#37) (@ngoyal16)
  • 033d4ab: fix(tools): handle context cancellation during task wait and default cwd to workspace (#47) (@ngoyal16)
  • 8cdf5d1: fix(tools): parse Windows paths with drive letters in ripgrep search (#49) (@ngoyal16)
  • 74b4aec: fix(tools): protect read_url_content against SSRF, private IPs, and cloud metadata (#54) (@ngoyal16)
  • 44acbee: fix(tools): recover persistent terminal on command timeout or cancellation (#50) (@ngoyal16)
  • 8a40156: fix(tools): use NUL byte detection and extension matching for view_file (#55) (@ngoyal16)
  • faee345: fix: route /btw side questions through LiteLLM config instead of direct Gemini/OpenAI keys (@ngoyal16)

⚡ Performance Improvements

  • 1bc58f3: perf(codegraph): batch sqlite transactions and mtime incremental cache (#56) (@ngoyal16)
  • 3c6760f: perf(codegraph): eliminate full BM25 FTS re-indexing on every query and linear call hierarchy scans (#33) (@ngoyal16)
  • edd3cea: perf(codegraph): parallel AST parsing with bounded worker pool (#61) (@ngoyal16)
  • ac172aa: perf(codegraph): zero-allocation camelCase tokenizer and direct term weighting in FTS index (#62) (@ngoyal16)
  • a21c7ef: perf(conversation): asynchronous buffered transcript logging (#58) (@ngoyal16)
  • ef451bd: perf(diff): replace O(M*N) 2D dynamic programming in UnifiedDiff with linear Myers and patience diff (#32) (@ngoyal16)
  • d5f0963: perf(engine): implement concurrent parallel execution for read-only tools (#35) (@ngoyal16)
  • c455ab8: perf(engine): zero-allocation line counting and slicing in context reduction (#67) (@ngoyal16)
  • 1ab41ec: perf(engine): zero-allocation tool call argument token estimation (#68) (@ngoyal16)
  • 5a7770d: perf(server): outbound websocket write pump and buffer pooling (#59) (@ngoyal16)
  • 7730afc: perf(session): asynchronously persist step content via write-behind worker (#40) (@ngoyal16)
  • b9ea1ff: perf(streaming): batch and debounce streaming chunk updates (#39) (@ngoyal16)
  • 2ddf4ef: perf(subagent): support model tiering resolution and compress subagent handoff prompt injection (#41) (@ngoyal16)
  • 3e90432: perf(task_manager): replace busy-wait marker polling with event-driven notifications (#38) (@ngoyal16)
  • d9e3ff2: perf(tools): concurrent and non-allocating directory child counting (#63) (@ngoyal16)
  • 287120e: perf(tools): early-exit streaming and fd integration in find_file (#65) (@ngoyal16)
  • 4ac68a2: perf(tools): eliminate recursive walk in list_dir, optimize view_file streaming and replace_file_content byte scanning (#36) (@ngoyal16)
  • 8e27cb1: perf(tools): zero-allocation ASCII fold scanning and reflection-free line parsing (#66) (@ngoyal16)
  • a265d4d: perf(tools): zero-allocation byte scanning and early walk termination (#60) (@ngoyal16)
  • a2950c6: perf(util): hunk-scoped unified diff with context collapsing (#57) (@ngoyal16)
  • c736e01: perf(workspace): cache canonical roots to eliminate redundant EvalSymlinks syscalls (#64) (@ngoyal16)

♻️ Refactoring

  • b8a226d: refactor(codegraph): migrate monolithic codegraph JSON snapshot to embedded indexed SQLite database (#34) (@ngoyal16)
  • 93263de: refactor(workspace): remove dynamic workspace removal and enforce additive workspace lifecycle (@ngoyal16)
  • d34f593: refactor: move desktop GUI to standalone localharness-gui directory (@ngoyal16)
  • 789e0c4: refactor: remove redundant adk-code-review example (@ngoyal16)

📚 Documentation

🔧 Tooling & CI

  • dc54955: chore(main): release 0.4.0 (#30) (@github-actions[bot])

Other Changes

  • 7c9dabc: fix(cli,tui,engine): fix startup log spam, version banner, prompt caching, tui resumption, and inspect content (#71) (@ngoyal16)