Skip to content

Releases: Aeptus/chau7

v0.3.1

Choose a tag to compare

@schiste schiste released this 09 Jun 20:52
Immutable release. Only release title and notes can be modified.

Highlights — stability & performance

This release is a focused stability/perf pass driven by real incidents in long multi-tab sessions:

  • Native process-tree enumeration. The live AI-tool detector no longer forks /bin/ps on a 1.5 s timer (it had become the app's top CPU consumer); it now enumerates the process table in-process via libproc + sysctl. Eliminates the recurring CPU spin.
  • Memory pressure actually reclaims memory. A new coordinator flushes idle (non-selected) tabs' scrollback to disk under OS memory pressure, instead of letting ~20 tabs hoard 1–2 GB of scrollback in RAM (the source of multi-second input stalls).
  • Restore no longer drops tabs after an unclean quit. A fresh, scrollback-stripped index is kept in UserDefaults every autosave, so a force-quit/crash can't fall back to stale data and lose recently-created tabs or their Codex/Claude sessions.
  • Clipboard-history crash fixed (NSPasteboard was read off the main thread → EXC_BAD_ACCESS).
  • Snappier live tab-name detection under load, idle background-drain backoff, and de-noised proxy/breadcrumb logging.

Installer: Chau7-0.3.1-AppleSilicon.pkg — Developer ID-signed, Apple Silicon. Double-click to install to /Applications.

⚠️ Notarization pending. This build is Developer ID-signed but not yet Apple-notarized; on first launch macOS Gatekeeper may require Control-click → Open. A stapled, notarized installer will replace this asset once the notary credential is set up.


Changed

  • Process-Tree Scan Goes Native (No Subprocess): The live AI-tool process-tree snapshot used to shell out to ps on a 1.5s timer — and a second ps scan added with argv-based detection had doubled the spawn rate, making the scanner the app's top CPU consumer in a live sample. The snapshot now enumerates the process table in-process via libproc (proc_listallpids + proc_pidinfo) and reads argv via KERN_PROCARGS2 only for interpreter processes (node/python/ruby/npx), eliminating the recurring ps fork/exec entirely. A single ps -axo pid,ppid,args scan remains as a fallback if native enumeration ever fails, and a shared buildSnapshot keeps both paths producing identical results.
  • Terminal Poll Skips Trace Bookkeeping in Release: RustTerminalFFI.pollEvents runs on the background-drain hot path (up to 60×/s per terminal) and unconditionally did per-poll counter/clock bookkeeping for trace logging even when trace was disabled. That work is now gated behind Log.isTraceEnabled (a cached static let), so a release build does no per-poll logging work.
  • Background Terminal Drain Backs Off When Idle: The single 1 Hz timer that drains PTY output for background (deselected/hidden) tabs polled every registered view every second regardless of activity. Dormant views are now polled progressively less often (down to once per ~8 s) via a pure, tested backoff policy that resets to every-tick the instant output resumes, cutting steady background CPU. (The fully event-driven readiness-fd drain — idle tabs at zero CPU — needs Rust/FFI changes and is tracked as a follow-up; the active tab already uses the efficient blocking drain.)
  • Memory Pressure Now Reclaims Memory Instead of Only Logging: OS memory-pressure signals were previously just logged — no cache shrank in response. A new MemoryPressureCoordinator fans the signal out to registered MemoryReclaimable caches: .warning sheds cheap, regenerable memory while .critical releases aggressively, and the bytes reclaimed are recorded on the memory-pressure breadcrumb so the response is observable. Per-tab terminal transcript rings (up to ~10 MB each, fully regenerable backfill data) are the first registrant — trimmed by half on warning, released entirely on critical. The dead, never-started MemoryPressureMonitor was removed.

Fixed

  • Restore No Longer Drops Tabs After an Unclean Quit: A regression from the file-bundle restore work made the UserDefaults restore copy write only at termination, so after a force-quit or crash the fallback could be a stale index that dropped recently-created tabs — even whole additional windows — when the file bundle didn't cover them (this is what lost a non-git tab and its Codex session on relaunch; it was never git-related). UserDefaults now stores a lightweight, scrollback-stripped index written on every autosave: tab/session IDs, directory, split layout, AI resume metadata, and panes are preserved (so a fallback restore reconstructs every tab with its codex resume), while only the heavy regenerable scrollback/preview payloads are dropped — those live in the bundle sidecars. This restores the pre-bundle freshness without re-introducing the multi-MB plist writes.
  • Memory Pressure Now Flushes Idle Tabs' Scrollback: Non-selected tabs were always held in the .warm render phase and never reached .hidden, so ScrollbackMemoryManager never flushed their scrollback to disk — making non-selected tabs the bulk of a multi-GB footprint in many-tab sessions (the cause of multi-second input stalls observed at 1.2–2.0 GB with ~20 tabs open). Under sustained OS memory pressure, non-selected tabs are now demoted to .hidden (scrollback flushed to disk and the ring shrunk, reloaded on re-selection), via a new isUnderMemoryPressure lifecycle input plus a render-lifecycle re-evaluation on each pressure event. The selected tab is never demoted, the PTY keeps draining regardless of phase, and tabs return to .warm once pressure clears. This is what lets MemoryPressureCoordinator actually reclaim hundreds of MB instead of a few.
  • Live AI-Tool Tab Name Updates Faster Under Load: The process-tree snapshot that resolves a tab's live AI tool (e.g. detecting a just-launched claude and renaming the tab) ran on a .utility QoS queue, so under heavy load (verbose logging, many active agents, continuous rendering) the poll and its result were deprioritized and the tab name could lag well past the 1.5 s poll interval. The snapshot queue is now .userInitiated; off-tick refreshNow() captures are coalesced so a burst of shell events across many tabs can't back up the serial queue; and command-start schedules a short settle-burst of captures (200 ms / 600 ms) so a just-exec'd child is detected within a few hundred ms instead of waiting for the next poll tick.
  • Clipboard History Poller No Longer Crashes on NSPasteboard Off-Main Access: The clipboard-history poll timer ran on a background utility queue and read NSPasteboard.general (changeCount and string(forType:)) directly from that thread. NSPasteboard is not thread-safe; the off-main reads raced AppKit's pasteboard type cache and intermittently crashed in objc_msgSend (EXC_BAD_ACCESS / SIGSEGV in -[NSPasteboard _updateTypeCacheIfNeeded]). The poll now marshals to the main thread before touching the pasteboard; the changeCount guard keeps the main-thread cost negligible.
  • Tab Restore Stops Writing Multi-MB Blobs to UserDefaults on Autosave: Session autosave (every 30s) re-serialized the entire preferences plist on the main thread by writing ~7 MB of tab/scrollback state into UserDefaults — the source of the recurring large-restore-payload breadcrumb (~176×/day). The file-based, integrity-checked restore bundle is now the primary store and is read first on launch for both the primary window and additional windows; UserDefaults is written only at termination as a one-version downgrade-safety mirror, with on-disk JSON backups kept as the final fallback. The bundle read is all-or-nothing (a corrupt sidecar falls through to the UserDefaults/backup chain), so restore safety is preserved.
  • Proxy High-Water Breadcrumb No Longer Floods: The proxy_request_high_water incident breadcrumb fired on nearly every AI turn — request bodies grow a few KB per turn as conversation context accumulates, so a strictly-greater high-water gate tripped constantly (~90 warning entries/day). It now requires a material step over the prior mark and is recorded at info severity: it is diagnostic context correlated against memory-pressure incidents, not a warning condition.

v0.3.0

Choose a tag to compare

@schiste schiste released this 05 Jun 06:38
Immutable release. Only release title and notes can be modified.

Highlights

  • Fixed a critical out-of-memory crash. The telemetry repair sweep was reading entire multi-GB Codex/Claude rollout files into memory, driving Chau7 to a 30+ GB footprint and triggering system-wide OOM kills (jetsam / WindowServer death) and forced reboots. Reads are now byte-bounded and the repair is idempotent.
  • Full Disk Access guardrails. Chau7 now detects when it loses macOS Full Disk Access (which silently breaks codex/claude/shells with "Operation not permitted" in protected folders) and shows a one-click-fixable alert, plus a build-time signing-drift check.
  • Grapheme-cluster-aware terminal rendering — ZWJ emoji, flags, VS16 presentation, wide glyphs and NFD sequences now render correctly end-to-end.
  • Per-tab transcript capture + TUI scrollback overlay, and a generic TUI scroll policy for alternate-screen apps.
  • Integrity-checked split restore bundle for tab autosave (SHA-256/byte-count-verified sidecars).
  • Smarter AI tool detection (process-tree + argv inspection; stricter ChatGPT matching) and autosaved side-panel notes.

Installer: Chau7-AppleSilicon.pkg — Developer ID-signed, Apple Silicon. Double-click to install to /Applications.

⚠️ Notarization pending. This build is Developer ID-signed but not yet Apple-notarized; on first launch macOS Gatekeeper may require Control-click → Open. A stapled, notarized installer will replace this asset shortly.


Added

  • Terminal Runtime Facts: The Rust terminal now exposes alternate-screen state through the Swift FFI and debug-state snapshot. Higher layers can distinguish full-screen TUI surfaces from normal shell scrollback without hardcoding provider names, and the alternate-screen regression test now asserts the state transition around ?1049h / ?1049l.
  • Generic TUI Scroll Policy: Chau7Core now owns a pure TerminalScrollPolicy that chooses between normal scrollback, forwarding scroll to mouse-aware TUIs, and transcript history for alternate-screen surfaces with no terminal scrollback. Focused tests cover shell scrollback, mouse-reporting TUIs, alternate-screen transcript fallback, and visible transcript overlay scrolling.
  • Per-Tab Terminal Transcript Capture: Terminal sessions now retain a bounded PTY transcript ring and mark command boundaries so output detected after an AI tool launches can be backfilled into the AI PTY log. The transcript ring is lock-protected, byte-bounded, and covered by tests for trimming, command-boundary backfill, and boundary behavior after trims.
  • TUI Transcript Scrollback Overlay: Alternate-screen TUIs that do not expose normal terminal scrollback now get a generic transcript overlay when the user scrolls up, while mouse-reporting TUIs still receive scroll events directly. Terminal diagnostics and MCP tab_output(source: "pty_log") can now fall back to the in-memory transcript when no durable AI PTY log exists yet.
  • Registry-Driven Quality Firewall: Git hooks now enter through thin Husky shims and delegate to pnpm quality:*, where a central Node runner executes gates declared in scripts/quality/registry.mjs. The new system adds staged-file secret/dependency/Python/JS guardrails, affected-surface pre-push scoping, conservative full-suite triggers, live dependency audits, registry-backed quality runner tests, content-hash caching, per-gate rerun commands, failure logs, dirty-worktree handling, release-only GitHub Actions policy validation, and focused runner/registry tests.
  • Grapheme-Cluster-Aware Terminal Model: The Rust→Swift FFI snapshot now ships UTF-8 grapheme cluster bytes alongside the cell array, so ZWJ emoji (👨🏽‍💻), regional-indicator flags (🇫🇷), VS16 emoji presentation (❤️ ✈️), and NFD-decomposed sequences (e + ́é) all survive end-to-end instead of being truncated to their first codepoint. Cell layout (width, continuation) is now explicit from Rust's WIDE_CHAR / WIDE_CHAR_SPACER flags — the Metal renderer no longer probes glyph advance to decide cell span, and wide glyphs tile correctly across two cells. NFC normalization runs in the snapshot loop via the unicode-normalization crate, so decomposed and precomposed forms share one atlas slot. The Metal glyph atlas is re-keyed by cluster bytes (Data) instead of codepoint; multi-codepoint clusters share a single atlas slot. The fragment shader gains a colorGlyphFlag (bit 12) branch that samples color-bitmap atlas slots (sbix / COLR / CBDT) directly as RGBA, with the per-glyph detection helper (isColorGlyph) left as a focused follow-up. Remote-snapshot wire format bumped CHG1 v1 → CHG2 v2 to carry the cluster buffer; iOS playback updated to match.
  • Split Restore Bundle Sidecar: Tab autosave now dual-writes an integrity-checked restore bundle under Application Support. Critical tab, pane, split-layout, and AI resume identity fields stay in a compact manifest, while heavier scrollback, command blocks, and preview data move to SHA-256/byte-count-verified sidecar context files.
  • Full Disk Access Guardrails: Chau7 now detects when it loses macOS Full Disk Access — which silently breaks every spawned CLI (codex, claude, shells) with "Operation not permitted" in protected folders like ~/Downloads while the app itself looks fine — and surfaces a one-click-fixable alert deep-linking to the Full Disk Access settings pane, both proactively (a probe at launch and on app activation) and reactively (attributing a child-process EPERM in a protected folder to FDA via a two-factor classifier). A build-time check-signing.sh warns when a rebuild or re-sign would orphan the app's TCC grants, and Productivity → Permissions shows a Full Disk Access status row.

Changed

  • Event Emitters Depend on a Publishing Boundary: App-level and shell event emitters now depend on a narrow AIEventPublishing protocol instead of concrete AppModel state. Construction sites use the explicit eventPublisher: label, keeping detection/emission components focused on event production while AppModel remains the owner of routing, notification ingestion, observability, and recent-event storage.
  • Event Source Adapter Policy Centralized: Generic AI, terminal-session, fallback-history, shell, app, API proxy, and unknown-source notification events now share one mapped-source adaptation path with source-specific policy isolated in a small registry strategy. Raw-type preservation, routing identity requirements, fallback reliability, and unsupported-event reasons stay covered by focused registry tests, reducing drift between event sources without changing the public AIEvent model.
  • CTO Read Optimization Pipeline Centralized: File-backed reads and stdin-backed reads now share the same chau7-optim read filtering, truncation, non-empty-output preservation, and line-number formatting pipeline. This reduces drift between cat/file reads and stdin reads while keeping the previously added non-empty read guard in one tested place.
  • Restoration Autosave Reuses Idle Snapshots: Autosave now routes pane scrollback persistence through the bounded tail export and keeps a versioned restoration cache while the terminal is idle. Real PTY output, injected buffer changes, and scrollback clears invalidate the cache, so restoration stays current without repeating idle full-buffer work.
  • Bounded Styled Scrollback Export: The Rust terminal now exposes a bounded ANSI-styled tail export for restoration paths, so callers can request the recent terminal tail without constructing a multi-megabyte full-buffer string first.
  • Notification Banners Show Project Context: Native and AppleScript fallback notifications now keep the title focused on the tool/state while adding a subtitle with repo, tab, or directory context when available, e.g. Claude: Finished with Repo: Chau7 · Tab: Mockup.
  • Deferred Restore Scheduling Is Selection-Aware: Background identity hydration now backs off briefly after user tab switches and chooses the nearest pending tab to the selected tab instead of blindly draining FIFO. Restore telemetry records stage timings, payload bytes, and RSS deltas per tab so startup and fast-switch pressure can be diagnosed from logs.
  • AI Detection Simplified: Removed the .restored-phase output-match lock, shouldAllowRestoredProviderOverride, and the allowRestoredProviderOverride parameter on AIDetectionState.handleOutputMatch. These existed to prevent output patterns from flipping persisted tab identity, but they also blocked legitimate provider switches when persistence drifted. Identity is now owned by the live process-tree signal; output patterns are gated by an explicit authoritativeAppName hint only. Public API of AIDetectionState is narrower — callers on the old parameter must drop it.

Fixed

  • Telemetry Repair No Longer Exhausts Memory: The deferred telemetry repair sweep read entire agent rollout JSONL files into memory (as Data and String); a single multi-GB Codex session drove the app to a 30+ GB footprint and triggered system out-of-memory kills (jetsam / WindowServer watchdog death). Transcript reads are now byte-bounded (oversized files parse only a trailing tail), the repair is idempotent — a new transcript_repair_attempted_at column stops it re-reading the same runs every sweep when metrics can't be derived — and JSON-parse churn is drained between runs.
  • Side-Panel Notes Autosave Immediately: Opening a default text side panel now creates/loads the tab-scoped .chau7/sessions/<tab-id>/note.md immediately instead of leaving the editor untitled until the first manual save. Dirty note content is also flushed before the side panel is closed, so quick type-and-close workflows do not lose the note before the debounce fires.
  • CTO Read Optimization No Longer Returns Empty Output for Non-Empty Reads: chau7-optim read now preserves the original command output whenever filtering would collapse a non-empty fi...
Read more

v0.2.1 — Spanish Locale & i18n

Choose a tag to compare

@schiste schiste released this 10 Apr 08:12
Immutable release. Only release title and notes can be modified.

What's Changed

Added

  • Spanish Language Support: Full Spanish (es) locale with 2,612 translated keys and 41 .stringsdict plural entries. Informal "tú" form, standard Spanish computing vocabulary. Accessible from Settings > General > Language.

Changed

  • Repository Model Unification: RepositoryModel now exists for every known repo, including those in protected directories where live git probing is blocked. The model carries an accessLevel (.live or .cached) so consumers get a single, always-present object instead of switching between live models and thin fallback identities. Eliminates the .cachedIdentity resolution path, simplifies display fallback chains in tab chrome, and fixes the circular dependency where branch data could only be recorded with live access that was itself blocked.

Fixed

  • Protected Repo Branch Display: Protected-folder repos that were showing "unknown" branch labels now reliably display the last-known branch. The root cause was that branch data was only recorded during live git probing, which is exactly the path blocked for protected directories. Branch recording now flows through all paths: tab restore, recent-repo updates, and live→cached transitions.
  • Pricing Table Accuracy: Fixed wrong prices for Claude Opus 4.6 ($15→$5/$75→$25), Haiku 4.5 ($0.80→$1/$4→$5), and Gemini 2.0 Flash (free→$0.10/$0.40 paid tier). Added ~20 missing models (GPT-5.x, GPT-4.1, o3/o4-mini, Gemini 2.5). Unknown models now log a warning with the model name instead of failing silently. Gemini fallback uses Flash pricing instead of free tier.
  • Dashboard Polling Waste: Dashboard now polls adaptively — 2s when agents are active, 5s when idle, 10s with no agents — instead of a fixed 2s interval that wasted CPU even with zero agents running.
  • Cost Lock Safety: Replaced bare costLock.lock()/unlock() pairs with defer pattern to prevent lock leaks on unexpected errors.
  • Commit Success Stale: The "Committed successfully" banner now auto-dismisses after 3 seconds instead of persisting indefinitely.
  • IPC Data Loss: Proxy IPC socket now retries once on a broken connection before giving up, preventing silent data loss after app restarts.
  • Event Buffer Performance: Replaced O(n) insert(at: 0) in ProxyIPCServer's event buffer with O(1) append + reverse-on-read.
  • DB Query Performance: Added compound index (timestamp, cost_usd) for dailyTrend() queries. Added ANALYZE after migrations to update SQLite's query planner. Added automatic pruning of API call records older than 180 days.
  • Proxy Health Monitoring: Dashboard now calls the proxy's existing (but unused) /health endpoint every 5th poll cycle and shows a warning triangle in the header when unhealthy.
  • Dashboard Sheet Sizing: Start Agent and Review Commits sheets now use adaptive widths (min/ideal/max) instead of hardcoded pixel values that broke on small displays.
  • Timeline Pagination: Dashboard timeline now shows a "Show more..." button when more than 50 events exist, instead of silently truncating.
  • Bug Report Success Feedback: The in-app issue reporter now formats the relay-returned issue number correctly in its success banner and falls back to a generic success message if no number is returned.
  • Inherited Repo Group Stickiness: Tabs created from a grouped tab now drop inherited repo-group membership once they move to a different repository, instead of staying stuck to the original group.
  • Directory-Based Inherited Repo Groups: newTab(at:) now installs the same repo-group observer as standard new tabs, so grouped tabs opened directly into another directory also detach correctly when they resolve to a different repository.
  • Protected Repo Identity Collapse: Tabs in protected folders now preserve known repo root and last-known branch even when live git probing is blocked, so passive UI stays repo-aware instead of falling back to “not a repo.”
  • Passive Protected Repo Chrome: The selected-tab branch badge, tab git indicator, hover-card branch row, and repo path label now read cached repo identity when live git probing is blocked, so protected repos stay visible in passive tab chrome instead of disappearing after restore or focus changes.
  • Protected Repo Branch Persistence: Recent-repo updates and settings import no longer downgrade known repo identities to root-only entries, so a protected repo's last-known branch survives recents reordering and settings import instead of regressing to unknown.
  • On-Demand Protected Git Access: User-triggered git surfaces such as the repository pane, diff viewer, and diff-viewer launch fallback now request protected-folder access only when live git work is actually needed, instead of prompting during passive observation or silently failing.
  • Protected Folder Prompt Cooldown: User-initiated live-git actions now remember a canceled or failed protected-folder grant per root and return a cooldown state instead of immediately reopening the same Downloads/Desktop/Documents permission panel in a loop.
  • Repo Dashboard Dismissal Consistency: Clicking any tab in the overlay toolbar now dismisses the repo dashboard overlay, including clicks on the already-selected tab. The active repo badge is highlighted while its dashboard is open so the overlay state matches the rest of the tab bar.
  • Pre-Commit Review Hook Timeout: Scripts/pre-commit-review now applies explicit Unix-socket timeouts for start_review, wait_review, and get_review_result calls so a stalled scripting server fails fast instead of hanging the whole git commit hook indefinitely.
  • Delegated Review Prompt Recovery: Interactive delegated review sessions now retain their pending initial prompt until the backend is genuinely ready, and runtime_turn_wait re-attempts delivery instead of leaving sessions stranded forever in starting after the first readiness polling window expires.
  • Delegated Review Tab Cleanup: The scripting review API now exposes stop_review, and the pre-commit hook always attempts best-effort teardown of its delegated review session so timed-out or malformed review runs do not leave orphaned Codex review tabs behind.
  • MCP Runtime Startup Robustness: runtime_session_create now keeps pending initial prompts tied to real terminal readiness changes instead of a fixed retry loop, so slow interactive launches no longer give up while the session is still legitimately starting.
  • MCP Lifecycle Hot-Path Pressure: Runtime-driven tab teardown now queues close work off the immediate stop path, and create/stop/close flows emit focused stall diagnostics so MCP-induced beachballs are easier to trace.
  • Release Workflow Secret Gate: The GitHub release workflow no longer references secrets.* from a job-level if, so release runs parse cleanly and the Homebrew tap update step now skips gracefully when HOMEBREW_TAP_TOKEN is absent.
  • Release Tag Push Guard: The local pre-push hook now rejects plain version tags like 0.1.1 when the release workflow is configured to trigger only on v*, preventing non-triggering release tags from being pushed.
  • Codex Resume Save Churn: Repeated save-time Codex fallback scans now cache unresolved results per terminal session signature and reuse claimed explicit Codex sessions across history growth, which stops autosave from redoing the same replacement search and spamming identical unresolved resume-metadata logs when nothing materially changed.
  • Startup Stall Diagnostics: Startup and restore now keep a scoped low-latency App Nap lease during relaunch recovery, coalesce duplicate Metal triple-buffer rebuild churn, and emit explicit main-thread stall telemetry when restore or rendering work blocks long enough to explain a beachball.
  • Startup Restore Churn Reduction: Restore now coalesces protected-folder validation logs per root, debounces transient home-directory snippet-context refreshes, delays resume-prefill fallback until a pane view is actually ready, and emits one startup summary with protected-root, snippet, and resume-prefill counts. This keeps relaunch behavior reactive without dropping repo-aware grouping or snippets.
  • Blocked Dangerous Command Feedback: Direct terminal input now shows the same explicit blocked-command alert as other dangerous-command paths when Protect Chau7 denies a self-harming command, instead of failing to compile due to a missing guard method.
  • Dashboard Accessibility: Agent cards now have combined accessibility labels (backend, state, tokens). Batch action buttons have accessibility hints. Health indicator uses localized strings.
  • Custom Pricing Documentation: ~/.chau7/pricing.json format is now documented with a JSON example in code comments. Malformed files now log a warning instead of being silently ignored.
  • Telemetry Active-Run Queries: run_list and run_get no longer duplicate active runs that were already inserted into SQLite at runStarted. MCP telemetry responses now consistently annotate run_state (active or completed) and content_state (missing, partial, final) so orchestrators can distinguish live partial data from finalized runs.
  • Active Codex Transcript Visibility: run_transcript now surfaces live Codex prompts from ~/.codex/history.jsonl before runEnded, with PTY-log fallback for active sessions that do not yet have persisted turns. Active Codex runs no longer appear as empty shells while the session is still in progress.
  • Session Rollup Clarity: session_list now includes active_run_count, completed_run_count, latest_run_id, and latest_run_state, making resumed session IDs with multiple historical runs easier to interpret.
  • Forced Shell Termination Diagnostics: SIGTERM/SIGKILL escalation logs now capture close-to-signal timing, PTY log state, and a process-tree snapshot with command lines so stuck shell shutdowns are actionable ins...
Read more

0.1.1

Choose a tag to compare

@schiste schiste released this 08 Apr 15:48

0.1.1 focuses on delegated AI review, runtime hardening, and overlay/polish improvements.

Highlights

  • Added delegated task orchestration for AI sessions, including runtime lineage, lifecycle controls, dashboard review workflows, and pre-commit review plumbing.
  • Added staged-diff pre-commit review integration with explicit scripting transport diagnostics, fast socket timeouts, and a default reviewer model of gpt-5.3-codex.
  • Hardened local runtime infrastructure with stale socket self-healing, launch readiness gating for interactive backends, approval-timeout cleanup, and better shell termination diagnostics.
  • Improved repo overlay behavior so the repo dashboard highlights like a selected tab and closes when any tab, including the current tab, is clicked.
  • Tightened protected-path access behavior to require explicit grant before automatic access.
  • Added full Spanish localization support and multiple telemetry, dashboard, proxy, and documentation improvements.

Validation

  • Full local pre-push CI passed before publishing this tag, including swift build, swift test, Rust checks, and Go checks.

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 03 Apr 20:13