From c76a2c61bbd99a075cd2a9f7aa836a3dceb5c30b Mon Sep 17 00:00:00 2001 From: Yaowei Zheng Date: Mon, 3 Aug 2026 15:40:31 +0800 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20record=20the=20#136=E2=80=93?= =?UTF-8?q?#140=20fix=20batch=20(#159)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Claude Fable 5 --- ...8-02-file-tool-missing-path-diagnostics.md | 9 ++++++++ ...08-02-web-app-steering-and-session-list.md | 21 +++++++++++++++++++ changelog/unreleased/README.md | 4 ++++ 3 files changed, 34 insertions(+) create mode 100644 changelog/unreleased/2026-08-02-file-tool-missing-path-diagnostics.md create mode 100644 changelog/unreleased/2026-08-02-web-app-steering-and-session-list.md diff --git a/changelog/unreleased/2026-08-02-file-tool-missing-path-diagnostics.md b/changelog/unreleased/2026-08-02-file-tool-missing-path-diagnostics.md new file mode 100644 index 0000000..71a1b88 --- /dev/null +++ b/changelog/unreleased/2026-08-02-file-tool-missing-path-diagnostics.md @@ -0,0 +1,9 @@ +# File tools diagnose missing paths instead of implying absolute paths are rejected + +`read_file` / `edit_file` accepted absolute paths all along, but their "File not found" message mentioned only workspace-relative resolution — so a genuinely missing file (typically a dropped `agent_state/` segment) read as "absolute paths are unsupported", and the model retried path forms instead of questioning the path (#138). + +## Details + +- Both tools now state that absolute paths are supported and append a diagnostic: the deepest existing ancestor directory, the first missing segment, and the ancestor's entries ranked by name similarity to the missing one (capped at 8, directories marked with a trailing slash) — for the reported case the hint names `agent_state/` directly. +- ENOTDIR (a path segment that is a file, not a directory) gets the same diagnosis instead of a raw errno message. +- The agent-creation Skill now spells out that `AGENTS.md` lives under `agent_state/`, not at the agent directory root — the likely source of the dropped segment (skill version 7). diff --git a/changelog/unreleased/2026-08-02-web-app-steering-and-session-list.md b/changelog/unreleased/2026-08-02-web-app-steering-and-session-list.md new file mode 100644 index 0000000..173ddd7 --- /dev/null +++ b/changelog/unreleased/2026-08-02-web-app-steering-and-session-list.md @@ -0,0 +1,21 @@ +# Steering survives reloads and carries files; session list scales + +Steering messages no longer vanish on refresh or come back as duplicate-prone drafts, file attachments steer like images do, tool-card subtitles stop jittering while arguments stream, and the sidebar stays fast and scannable with many agents, workspaces, and CLI sessions. + +## Steering across reloads, with visible content (#136, #140) + +- The server now mirrors each running session's undelivered steering queue (text plus image/file counts) and broadcasts it on every `task_state` event and the SSE subscribe snapshot. The composer's "steering queued" hint shows each queued message's content and survives reloads; entries retire as their `[user_steering]` message reaches the stream, and the mirror drops when the run exits. +- A successful steer discards the localStorage draft, like a normal send — previously the sent text was resurrected as a draft on reload, and re-sending it duplicated the steering message. Draft discard also clears the text ref so a later skill/chip flush cannot bring already-sent text back. +- File attachments now ride steering exactly like images: written to the session scratchpad under the task-attachment rules and delivered as `[attached file: ]` lines on the steering text. A file-only draft steers instead of silently falling into the follow-up queue with the other channel's hint; a 409 cleans the written files up. +- New e2e spec: steer during a slow tool run → reload → hint with content, empty composer, exactly-once delivery. + +## Tool-card subtitles render once, fully formed (#137) + +The collapsed tool row's subtitle (the model-written call description, or the shortened file path) no longer re-renders on every streamed fragment — a growing description re-solved the header's flex line ~8×/s and `shortenPath` on a still-growing path rewrote non-monotonically. A field now renders only once its closing quote has arrived (the gate lifts when argument streaming settles, so aborted calls still show what they have), and a complete description wins over the file path when a user-edited schema enables one on a file tool — the rule the CLI already applied. + +## Session list: DB-served by default, CLI sessions opt-in, groups page (#139) + +- The sessions index gains DB-only `client` ('web' / 'cli'; NULL = legacy row, treated as web) and `has_trace` columns; existing `web.db` files are upgraded in place by an idempotent ALTER guard on open. +- The default list serves web sessions straight from the DB (SQL-ordered under a new index) with no Trace-directory scanning in steady state; `cli=1` opts into Trace discovery + adoption, and adopted CLI rows stay excluded from the default list while remaining individually reachable (deep links). +- New per-user "Show CLI sessions" switch (default off) in the sidebar user menu, persisted in `ui_prefs`; toggling refetches the list under the new filter. +- Both sidebar grouping modes page the groups themselves: 10 groups initially, "More groups (N)" reveals 10 more — a pure render cap, reset per Project and on a mode switch. diff --git a/changelog/unreleased/README.md b/changelog/unreleased/README.md index a2e8048..aac49a8 100644 --- a/changelog/unreleased/README.md +++ b/changelog/unreleased/README.md @@ -2,6 +2,10 @@ Changes since v0.1.5. The version number is assigned at release, when this folder is renamed. +- [2026-08-02] Web App: steering messages survive reloads with their content visible and can carry file attachments, tool-card subtitles render once fully formed instead of jittering, and the session list is DB-served by default with an opt-in CLI-session toggle and paged sidebar groups. ([details](2026-08-02-web-app-steering-and-session-list.md)) + +- [2026-08-02] File tools: `read_file` / `edit_file` diagnose a missing path — deepest existing ancestor, first missing segment, nearest-named entries — instead of a bare "File not found" that read as absolute paths being rejected; the agent-creation Skill spells out `agent_state/AGENTS.md`. ([details](2026-08-02-file-tool-missing-path-diagnostics.md)) + - [2026-08-02] Web App: the manual "Check for updates" row reports every outcome — busy spinner while checking, success toasts for both up-to-date and update-found (naming the release, with the row itself becoming the update entry), and the existing failure/disabled notices — via a unit-tested outcome classifier. ([details](2026-08-02-update-check-feedback.md)) - [2026-07-31] Tooling: each Release now attaches exactly one artifact per target — a flat installer bundle sealing the native installer, the program payload and its checksum — serving online and offline installation from the same file, with mandatory checksums at both layers, no more raw archives or `*-offline` wrappers, and hermetic installer tests in CI; in-place upgrades survive filesystems that pin in-use directories (the `penguin update` overlayfs `Device or resource busy` failure), the Windows payload drops its policy-blocked `penguin.ps1` launcher, and the installer broadcasts the user-Path change so new terminal windows find `penguin`. ([details](2026-07-31-unified-installer-artifact.md))