diff --git a/Home.md b/Home.md index 375b2b1..db0e5be 100644 --- a/Home.md +++ b/Home.md @@ -2,7 +2,7 @@ A native macOS companion app for the [Hermes AI agent](https://github.com/hermes-ai/hermes-agent). Full visibility into what Hermes is doing, when, and what it creates — across one local install or many remote ones. -**Latest release:** [v2.6.0](https://github.com/awizemann/scarf/releases/tag/v2.6.0) — catches up to **Hermes v2026.4.30 (v0.12.0)** with the autonomous **Curator** (Mac sidebar + iOS panel), **multimodal image input** in chat (Mac drag/drop + paste, iOS PhotosPicker), **5 new inference providers** (GMI Cloud, Azure AI Foundry, LM Studio first-class, MiniMax OAuth, Tencent TokenHub), **Microsoft Teams + Yuanbao** gateway platforms, a **read-only Kanban**, Skills v0.12 surface (URL install / reload / OFF pill / curator pin badge), cron `--workdir`, Settings deltas (cache TTL, redaction toggle, runtime metadata footer, Piper TTS, Vercel terminal), and ScarfGo read-only **Webhooks / Plugins / Profiles**. Every new surface is capability-gated — v0.11 hosts see the v2.5.2 surface unchanged. Plus a chat post-merge bug-fix round: typing lag ([#67](https://github.com/awizemann/scarf/issues/67)), font-size slider scaling ([#68](https://github.com/awizemann/scarf/issues/68)), placeholder ghosting ([#65](https://github.com/awizemann/scarf/issues/65)), per-session draft scoping ([#62](https://github.com/awizemann/scarf/issues/62)), sent-message blank after nav ([#63](https://github.com/awizemann/scarf/issues/63)), background completion notifications ([#64](https://github.com/awizemann/scarf/issues/64)), per-message TTS ([#66](https://github.com/awizemann/scarf/issues/66)), ACP control-message timeout 30s→60s ([#61](https://github.com/awizemann/scarf/issues/61)). See [v2.6.0 release notes](https://github.com/awizemann/scarf/blob/main/releases/v2.6.0/RELEASE_NOTES.md). +**Latest release:** [v2.7.0](https://github.com/awizemann/scarf/releases/tag/v2.7.0) — the largest perf-focused release since 2.6 (36 commits, no schema bump). **Skeleton-then-hydrate chat + Activity loaders** make slow-remote contexts usable: chats and Activity render in seconds instead of timing out at 30s, with paged background hydration filling tool calls in. **SSH cancellation propagation** through `SSHScriptRunner` + `RemoteSQLiteBackend` kills abandoned ssh subprocesses within 100ms (no more "third chat hangs / dashboard spins" after rapid switching). **In-flight coalescing** for `loadRecentSessions` drops the 2-3× contention seen during file-watcher streams. **New Project from Scratch wizard** scaffolds a Scarf-standard skeleton and hands off to a chat session that auto-activates the bundled `scarf-template-author` skill. **Cron + Keychain** mirrors resolved Keychain values into `~/.hermes/.env` under `$SCARF__` env vars so cron prompts can finally use secret-typed config fields. **Five new dashboard widgets** (`markdown_file`, `log_tail`, `cron_status`, `image`, `status_grid`) with project-wide auto-refresh, sparklines on `stat`, typed status badges. **OAuth keepalive cron** prevents weeks-of-inactivity expiry; **remote re-auth** unblocked; **mismatch banner** for `model.default` / `model.provider` disagreements after Credential Pools OAuth swap; **pinned-model failure hint** for old chats whose original model no longer exists. **ScarfMon** harness (off by default, signpost-only mode is free) drove the bulk of the diagnosis — full event vocabulary in [Performance-Monitoring](Performance-Monitoring). See [v2.7.0 release notes](https://github.com/awizemann/scarf/blob/main/releases/v2.7.0/RELEASE_NOTES.md). **Latest mobile:** [Join the public TestFlight](https://testflight.apple.com/join/qCrRpcTz). The link is live now but only accepts new beta testers once Apple's Beta Review approves the first build — see [ScarfGo](ScarfGo) for the full feature tour. **Targets Hermes:** v0.12.0 (v2026.4.30) — autonomous Curator, multimodal ACP image content blocks, 5 new providers, Microsoft Teams + Yuanbao gateways, Kanban CLI, Skills URL install / reload / disable, cron `--workdir`, `auxiliary.curator`, prompt-cache TTL, Piper TTS, Vercel terminal. v0.11.0 / v0.10.0 still work for everything that didn't change — Scarf detects the host's Hermes version and hides v0.12-only surfaces gracefully. **Available in:** English, Simplified Chinese (zh-Hans), German (de), French (fr), Spanish (es), Japanese (ja), Brazilian Portuguese (pt-BR). See [Localization](Localization). _ScarfGo is English-only in v1._ @@ -41,4 +41,4 @@ Scarf 2.0 is a multi-window app — one window per Hermes server, local or remot Open-source (MIT), 160+ stars, actively maintained. See [Roadmap](Roadmap) for what's coming. --- -_Last updated: 2026-05-01 — Scarf v2.6.0 (Hermes v0.12 catch-up: Curator, multimodal images, 5 new providers, Kanban, Skills v0.12 surface, ScarfGo Webhooks/Plugins/Profiles, post-merge chat bug fixes)_ +_Last updated: 2026-05-05 — Scarf v2.7.0 (skeleton-then-hydrate chat + Activity loaders, SSH cancellation propagation, in-flight coalescing, New Project from Scratch wizard, Keychain-backed cron secrets, 5 new dashboard widgets, OAuth keepalive cron, ScarfMon perf harness)_ diff --git a/Release-Notes-Index.md b/Release-Notes-Index.md index dbf1e14..deeaa06 100644 --- a/Release-Notes-Index.md +++ b/Release-Notes-Index.md @@ -4,6 +4,8 @@ Every Scarf release in chronological order. The notes themselves live in `releas | Version | Date | GitHub release | Notes file | |---|---|---|---| +| **v2.7.0** | 2026-05-05 | [v2.7.0](https://github.com/awizemann/scarf/releases/tag/v2.7.0) | [`releases/v2.7.0/RELEASE_NOTES.md`](https://github.com/awizemann/scarf/blob/main/releases/v2.7.0/RELEASE_NOTES.md) | +| **v2.6.5** | 2026-05-03 | [v2.6.5](https://github.com/awizemann/scarf/releases/tag/v2.6.5) | [`releases/v2.6.5/RELEASE_NOTES.md`](https://github.com/awizemann/scarf/blob/main/releases/v2.6.5/RELEASE_NOTES.md) | | **v2.6.0** | 2026-05-01 | [v2.6.0](https://github.com/awizemann/scarf/releases/tag/v2.6.0) | [`releases/v2.6.0/RELEASE_NOTES.md`](https://github.com/awizemann/scarf/blob/main/releases/v2.6.0/RELEASE_NOTES.md) | | **v2.5.2** | 2026-04-29 | [v2.5.2](https://github.com/awizemann/scarf/releases/tag/v2.5.2) | [`releases/v2.5.2/RELEASE_NOTES.md`](https://github.com/awizemann/scarf/blob/main/releases/v2.5.2/RELEASE_NOTES.md) | | **v2.5.1** | 2026-04-27 | [v2.5.1](https://github.com/awizemann/scarf/releases/tag/v2.5.1) | [`releases/v2.5.1/RELEASE_NOTES.md`](https://github.com/awizemann/scarf/blob/main/releases/v2.5.1/RELEASE_NOTES.md) | @@ -22,6 +24,8 @@ Every Scarf release in chronological order. The notes themselves live in `releas ## Highlights by major +**2.7** — The largest perf-focused release since 2.6 (36 commits, no schema bump, no Hermes capability bump). **Skeleton-then-hydrate chat + Activity loaders** make slow-remote contexts usable: a `fetchSkeletonMessages` / `fetchRecentToolCallSkeleton` pair selects only the columns needed to render placeholder rows (NULLs the heavy ones at SQL level), then paged background hydration fills tool calls in 5-id batches; tool-result CONTENT is opt-in via Settings → Display, with per-card lazy-fetch in the inspector pane. **L1 single-id whale recovery** when a 5-id batch trips the 30s timeout. **SSH cancellation propagation** through `SSHScriptRunner.run` + `RemoteSQLiteBackend.query` via `withTaskCancellationHandler` — kills abandoned ssh subprocesses within 100ms instead of pinning them to the 30s deadline (fixes "third chat hangs" / "dashboard spins" after rapid switching). **In-flight coalescing** for `loadRecentSessions` drops the 2-3× contention seen during file-watcher streams. **Loading-state UX hardening**: synchronous greying of the chat sidebar on click; phase-typed status ("Spawning hermes acp…" → "Authenticating…" → "Loading session…" → "Loading history…" → "Ready"). **Partial-result + mismatch + pinned-model banners** replace silent empty-states. **New Project from Scratch wizard** scaffolds a Scarf-standard skeleton + AGENTS.md marker block, registers it, and hands off to a chat session that auto-activates the bundled `scarf-template-author` skill. **Cron + Keychain** mirrors resolved Keychain values into `~/.hermes/.env` under marker-bounded `$SCARF__` env vars (cron prompts can finally use secret-typed config fields without the literal `keychain://` URI surfacing). **Five new dashboard widgets** (`markdown_file`, `log_tail`, `cron_status`, `image`, `status_grid`) with project-wide auto-refresh; **`stat` gains inline sparklines**; typed status enum with lenient decode; structured widget error card. **OAuth keepalive cron** prevents weeks-of-inactivity expiry; **remote OAuth re-auth** unblocked; **OAuth remove button**; `resolve_provider_client` errors classified into a clear hint. **ScarfMon** — perf instrumentation harness: 4096-entry in-memory ring buffer + os.Logger backend + signpost-only mode; new measure points across chat / transport / sqlite / sessionLoad / diskIO with payload bytes recorded. **In-app release notes** via inline `` HTML in the Sparkle appcast (rendered from `releases/v/RELEASE_NOTES.md` by `tools/render-release-notes.py`). + **2.6** — Catch up to **Hermes v2026.4.30 (v0.12.0)**, the largest single Hermes update Scarf has had to follow since v0.10's Tool Gateway. New surfaces — all capability-gated so v0.11 hosts see the v2.5.2 surface unchanged: **autonomous Curator** (Mac sidebar + iOS panel) — pin / unpin skills, run / pause / resume, three leaderboards, restore archived; **multimodal image input** in chat (drag/drop + paste on Mac, PhotosPicker on iOS, 1568px JPEG q=0.85 detached); **5 new inference providers** in the model picker (GMI Cloud, Azure AI Foundry, LM Studio first-class, MiniMax OAuth, Tencent TokenHub); **Microsoft Teams + Yuanbao** gateway platforms; **read-only Kanban** with 5s polling; **Skills v0.12 surface** (URL install, reload, OFF pill for disabled skills, curator pin badge); cron `--workdir` field; Settings deltas (cache TTL picker, redaction toggle, runtime metadata footer, Piper TTS, Vercel terminal); ScarfGo gains read-only **Webhooks / Plugins / Profiles** plus a pre-v0.12 Hermes-version banner. **`auxiliary.curator` aux task** replaces `flush_memories` on v0.12 hosts (preserved on v0.11). Plus a post-merge bug-fix round driven by GitHub issue triage: chat composer typing lag ([#67](https://github.com/awizemann/scarf/issues/67)), font-size slider now actually scales rich chat ([#68](https://github.com/awizemann/scarf/issues/68)), placeholder ghosting on first keystroke ([#65](https://github.com/awizemann/scarf/issues/65)), draft text bleeding between sessions ([#62](https://github.com/awizemann/scarf/issues/62)), sent message rendering blank after navigation ([#63](https://github.com/awizemann/scarf/issues/63)), background completion notifications ([#64](https://github.com/awizemann/scarf/issues/64)), per-message TTS playback ([#66](https://github.com/awizemann/scarf/issues/66)), ACP control-message timeout 30s→60s for gateway-contended hosts ([#61](https://github.com/awizemann/scarf/issues/61)). **2.5.2** — Patch release with one substantial new feature (**iOS chat resilience**) plus a stack of fixes. ScarfGo gains 5-attempt exponential reconnect via `session/resume`/`session/load`, a `NetworkReachabilityService` that suspends reconnect attempts while offline, scene-phase aware reconnect on foreground, and per-session draft persistence — phone-sleep, network handoffs, and SSH socket drops no longer cost the agent's work. Cross-platform cached-snapshot fallback (`ServerTransport.cachedSnapshotPath`) lets Dashboard / Sessions / Activity stay readable while the connection is down. Bounded message-history paging via `HermesDataService.fetchMessages(limit:before:)` + `loadEarlier()` replaces the prior unbounded fetch — long sessions stay smooth. Mac fixes: Settings → Model and Credential Pools no longer freeze for 1–2 minutes on remote contexts ([#59](https://github.com/awizemann/scarf/issues/59)) — `loadProvidersAsync()` / `loadModelsAsync(for:)` dispatch off MainActor. Diagnostics tri-state — missing `config.yaml` is informational on a fresh Hermes v0.11 install (Hermes lazy-creates it), reads "12/12 passing (2 optional skipped)" instead of "12/14". Credential Pools surfaces OAuth-authed providers (Nous, Spotify, Copilot, Qwen, Gemini) in a parallel section. New `ProjectHermesShadowDetector` warns when a project-local `.hermes/` shadows the server-level config. iOS fixes: [#56](https://github.com/awizemann/scarf/issues/56) Citadel snapshot path now uses `executeCommandStream` + Citadel-friendly `PATH=` prefix so missing-sqlite3 errors surface meaningfully; [#57](https://github.com/awizemann/scarf/issues/57) keyboard-dismiss chevron moved to the leading edge so it doesn't stack over the send button. New: chat-start model preflight (`ChatModelPreflightSheet`) catches missing model/provider before the ACP session opens; Nous Portal live model catalog (`NousModelCatalogService`); remote-aware admin sheets for profile import/export, backup restore, and template install destination — all mirroring the Add Project pattern from #54.