From ebe65b756590202e57c81382a1a85fb563d34ba9 Mon Sep 17 00:00:00 2001 From: Federico Jaramillo Martinez Date: Wed, 17 Jun 2026 01:11:12 +0200 Subject: [PATCH] chore(release): v1.202606.4 --- .changeset/attachment-sending-indicator.md | 5 ---- .changeset/dark-theme-message-distinction.md | 5 ---- .../fix-duplicate-started-session-badge.md | 5 ---- .changeset/fix-stuck-catching-up-badge.md | 5 ---- .changeset/prompt-composer-icon-actions.md | 5 ---- .changeset/prompt-image-attachments.md | 5 ---- .changeset/restart-via-systemd-run.md | 5 ---- .changeset/session-actions-archive-first.md | 5 ---- .changeset/session-reload-from-disk.md | 9 ------- .changeset/spawn-session-tool.md | 9 ------- .changeset/updates-panel-run-commands.md | 5 ---- CHANGELOG.md | 26 +++++++++++++++++++ package.json | 2 +- 13 files changed, 27 insertions(+), 64 deletions(-) delete mode 100644 .changeset/attachment-sending-indicator.md delete mode 100644 .changeset/dark-theme-message-distinction.md delete mode 100644 .changeset/fix-duplicate-started-session-badge.md delete mode 100644 .changeset/fix-stuck-catching-up-badge.md delete mode 100644 .changeset/prompt-composer-icon-actions.md delete mode 100644 .changeset/prompt-image-attachments.md delete mode 100644 .changeset/restart-via-systemd-run.md delete mode 100644 .changeset/session-actions-archive-first.md delete mode 100644 .changeset/session-reload-from-disk.md delete mode 100644 .changeset/spawn-session-tool.md delete mode 100644 .changeset/updates-panel-run-commands.md diff --git a/.changeset/attachment-sending-indicator.md b/.changeset/attachment-sending-indicator.md deleted file mode 100644 index 4bd56b7..0000000 --- a/.changeset/attachment-sending-indicator.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@jmfederico/pi-web": patch ---- - -Show a per-session sending indicator while messages with image attachments are uploading. Previously the composer cleared instantly while the upload, server-side image resizing, and first-session open happened in the background, so it looked like nothing was happening. The chat activity dock now shows "Sending your message…" for the originating session (including the folder-mode upload step), and that session shows the activity dot in the session list so progress is visible even after switching away. The indicator is scoped per session, so it no longer leaks onto other sessions or machines, and the upload itself continues in the background regardless of navigation. diff --git a/.changeset/dark-theme-message-distinction.md b/.changeset/dark-theme-message-distinction.md deleted file mode 100644 index 21295d1..0000000 --- a/.changeset/dark-theme-message-distinction.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@jmfederico/pi-web": patch ---- - -Improve user/assistant message distinction in the dark theme. Previously the user and assistant message backgrounds were nearly identical (contrast ratio ~1.06), making it hard to tell speakers apart. The dark theme's user-message background was lightened and decoupled from the generic hover color, and the user border brightened, so user turns stand out clearly. diff --git a/.changeset/fix-duplicate-started-session-badge.md b/.changeset/fix-duplicate-started-session-badge.md deleted file mode 100644 index 92bd7e5..0000000 --- a/.changeset/fix-duplicate-started-session-badge.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@jmfederico/pi-web": patch ---- - -Fix a duplicate session appearing in the list when starting a new session. The `session.created` broadcast (added with the spawn_session tool) could race ahead of the start request's HTTP response in the same tab, leaving two badges with the same id — one with archive/reload actions and one with delete. The optimistic insert now replaces any entry the broadcast added, so the locally cached session (with its delete action and draft support) always wins. diff --git a/.changeset/fix-stuck-catching-up-badge.md b/.changeset/fix-stuck-catching-up-badge.md deleted file mode 100644 index 126b60a..0000000 --- a/.changeset/fix-stuck-catching-up-badge.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@jmfederico/pi-web": patch ---- - -Fix the "Catching up…" badge sometimes staying visible after a session goes idle. The stream catch-up mode was tracked by two fields that could drift — a private guard and the public badge flag — and the socket reconnect path updated one without the other, so the terminating idle status no longer cleared the badge. Both facets now route through a single source of truth, and any idle status for the selected session reliably dismisses the badge. diff --git a/.changeset/prompt-composer-icon-actions.md b/.changeset/prompt-composer-icon-actions.md deleted file mode 100644 index 323c6c8..0000000 --- a/.changeset/prompt-composer-icon-actions.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@jmfederico/pi-web": patch ---- - -Declutter the chat composer bar with icon-based actions. The Send, Queue, Steer, and Stop buttons are now compact icons, the Attach button moved into the message box, and the thinking level is shown as a small gauge whose bars reflect the levels available for the current model. This leaves more room on narrow/mobile layouts while keeping the model selector readable. All controls retain accessible labels and tooltips. Thinking levels are now sourced from pi directly, so an unfamiliar level from a newer pi version is still selectable and displayed gracefully instead of causing an error. diff --git a/.changeset/prompt-image-attachments.md b/.changeset/prompt-image-attachments.md deleted file mode 100644 index d6adde7..0000000 --- a/.changeset/prompt-image-attachments.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@jmfederico/pi-web": minor ---- - -Add image attachments to the chat composer. You can now paste (Ctrl/Cmd+V), drag-and-drop, or use the new Attach button to add PNG, JPEG, GIF, and WebP images to a message, with thumbnail previews and multi-image support. Attachments are delivered to the session using pi's native image format (images are auto-resized to pi's inline limits for full compatibility), and image content now renders inline in the transcript. A per-message delivery toggle also lets you instead save attachments into the workspace `.pi-web/attachments` folder and reference them so the agent reads them with its own tools. The accepted HTTP upload size is now configurable via `PI_WEB_MAX_UPLOAD_BYTES` or the `maxUploadBytes` config value. diff --git a/.changeset/restart-via-systemd-run.md b/.changeset/restart-via-systemd-run.md deleted file mode 100644 index 310def2..0000000 --- a/.changeset/restart-via-systemd-run.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@jmfederico/pi-web": patch ---- - -Run the suggested Linux restart commands inside a detached transient systemd user service (`systemd-run --user`) instead of directly. The restart now completes even when the launching PI WEB terminal is killed by restarting the session daemon, and its output can be inspected with `journalctl --user -u pi-web-restart`. diff --git a/.changeset/session-actions-archive-first.md b/.changeset/session-actions-archive-first.md deleted file mode 100644 index d534ffb..0000000 --- a/.changeset/session-actions-archive-first.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@jmfederico/pi-web": patch ---- - -Move reload to the end of the session action menu. diff --git a/.changeset/session-reload-from-disk.md b/.changeset/session-reload-from-disk.md deleted file mode 100644 index e0e57ac..0000000 --- a/.changeset/session-reload-from-disk.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@jmfederico/pi-web": minor ---- - -Add a **Reload** action to the session three-dot menu that re-reads the session from disk. The session daemon keeps an in-memory `SessionManager` per session and never re-reads the session file, so when the same session is also driven by another process (for example the `pi` CLI), new on-disk entries were invisible to the web UI and the tail of the conversation appeared truncated. Reloading closes the active session, re-opens it from disk, discards the cached transcript, and re-fetches the history. - -Reload is also available from the command palette as **Reload Session**, so it can be triggered from the keyboard and assigned a custom shortcut. Reload refuses to run while the session has work in progress and on archived (read-only) sessions, and is gated behind a new `sessions.reload` runtime capability so it only appears for machines whose Pi-Web runtime supports it (both the menu item and the palette action are disabled otherwise). - -Note: this changes a session daemon code path, so `pi-web-sessiond.service` must be restarted manually for the server side of this change to take effect. diff --git a/.changeset/spawn-session-tool.md b/.changeset/spawn-session-tool.md deleted file mode 100644 index 5b8a4af..0000000 --- a/.changeset/spawn-session-tool.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@jmfederico/pi-web": patch ---- - -Let agents start new sessions with a `spawn_session` tool. An agent can dispatch a fresh, independent session with an initial prompt — useful for ralph-style loops (an agent kicks off the next iteration when done) and for chaining long plans across sessions. Spawned sessions are normal sessions a human can open and interact with, and they now appear in the session list the moment they are created (in the matching workspace) without a manual reload. - -To keep every spawned session visible and controllable, an agent may only spawn into a workspace — any worktree, including one it just created — of the same registered project as the spawning session. The capability is on by default and can be toggled under Settings → Session daemon (or via the `spawnSessions` config key / `PI_WEB_SPAWN_SESSIONS` environment variable); changes take effect after the session daemon restarts. - -Note: this adds a session daemon code path, so `pi-web-sessiond.service` must be restarted manually for the server side of this change to take effect. diff --git a/.changeset/updates-panel-run-commands.md b/.changeset/updates-panel-run-commands.md deleted file mode 100644 index 21ad939..0000000 --- a/.changeset/updates-panel-run-commands.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@jmfederico/pi-web": patch ---- - -Make the Updates panel actionable: every suggested command now has both a Copy and a Run button (Run executes it in a workspace terminal), a single recommended all-in-one command is shown at the top so users do not have to choose, and the remaining commands are grouped as clearly optional additional commands. diff --git a/CHANGELOG.md b/CHANGELOG.md index 17fa499..7a1e1b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # @jmfederico/pi-web +## 1.202606.4 + +### Patch Changes + +- 53b00c4: Show a per-session sending indicator while messages with image attachments are uploading. Previously the composer cleared instantly while the upload, server-side image resizing, and first-session open happened in the background, so it looked like nothing was happening. The chat activity dock now shows "Sending your message…" for the originating session (including the folder-mode upload step), and that session shows the activity dot in the session list so progress is visible even after switching away. The indicator is scoped per session, so it no longer leaks onto other sessions or machines, and the upload itself continues in the background regardless of navigation. +- cfb7493: Improve user/assistant message distinction in the dark theme. Previously the user and assistant message backgrounds were nearly identical (contrast ratio ~1.06), making it hard to tell speakers apart. The dark theme's user-message background was lightened and decoupled from the generic hover color, and the user border brightened, so user turns stand out clearly. +- dd23b3e: Fix a duplicate session appearing in the list when starting a new session. The `session.created` broadcast (added with the spawn_session tool) could race ahead of the start request's HTTP response in the same tab, leaving two badges with the same id — one with archive/reload actions and one with delete. The optimistic insert now replaces any entry the broadcast added, so the locally cached session (with its delete action and draft support) always wins. +- 3930505: Fix the "Catching up…" badge sometimes staying visible after a session goes idle. The stream catch-up mode was tracked by two fields that could drift — a private guard and the public badge flag — and the socket reconnect path updated one without the other, so the terminating idle status no longer cleared the badge. Both facets now route through a single source of truth, and any idle status for the selected session reliably dismisses the badge. +- 411e61a: Declutter the chat composer bar with icon-based actions. The Send, Queue, Steer, and Stop buttons are now compact icons, the Attach button moved into the message box, and the thinking level is shown as a small gauge whose bars reflect the levels available for the current model. This leaves more room on narrow/mobile layouts while keeping the model selector readable. All controls retain accessible labels and tooltips. Thinking levels are now sourced from pi directly, so an unfamiliar level from a newer pi version is still selectable and displayed gracefully instead of causing an error. +- d17050e: Add image attachments to the chat composer. You can now paste (Ctrl/Cmd+V), drag-and-drop, or use the new Attach button to add PNG, JPEG, GIF, and WebP images to a message, with thumbnail previews and multi-image support. Attachments are delivered to the session using pi's native image format (images are auto-resized to pi's inline limits for full compatibility), and image content now renders inline in the transcript. A per-message delivery toggle also lets you instead save attachments into the workspace `.pi-web/attachments` folder and reference them so the agent reads them with its own tools. The accepted HTTP upload size is now configurable via `PI_WEB_MAX_UPLOAD_BYTES` or the `maxUploadBytes` config value. +- 3c6b4a4: Run the suggested Linux restart commands inside a detached transient systemd user service (`systemd-run --user`) instead of directly. The restart now completes even when the launching PI WEB terminal is killed by restarting the session daemon, and its output can be inspected with `journalctl --user -u pi-web-restart`. +- 61f0b79: Move reload to the end of the session action menu. +- 82db15f: Add a **Reload** action to the session three-dot menu that re-reads the session from disk. The session daemon keeps an in-memory `SessionManager` per session and never re-reads the session file, so when the same session is also driven by another process (for example the `pi` CLI), new on-disk entries were invisible to the web UI and the tail of the conversation appeared truncated. Reloading closes the active session, re-opens it from disk, discards the cached transcript, and re-fetches the history. + + Reload is also available from the command palette as **Reload Session**, so it can be triggered from the keyboard and assigned a custom shortcut. Reload refuses to run while the session has work in progress and on archived (read-only) sessions, and is gated behind a new `sessions.reload` runtime capability so it only appears for machines whose Pi-Web runtime supports it (both the menu item and the palette action are disabled otherwise). + + Note: this changes a session daemon code path, so `pi-web-sessiond.service` must be restarted manually for the server side of this change to take effect. + +- 95c1512: Let agents start new sessions with a `spawn_session` tool. An agent can dispatch a fresh, independent session with an initial prompt — useful for ralph-style loops (an agent kicks off the next iteration when done) and for chaining long plans across sessions. Spawned sessions are normal sessions a human can open and interact with, and they now appear in the session list the moment they are created (in the matching workspace) without a manual reload. + + To keep every spawned session visible and controllable, an agent may only spawn into a workspace — any worktree, including one it just created — of the same registered project as the spawning session. The capability is on by default and can be toggled under Settings → Session daemon (or via the `spawnSessions` config key / `PI_WEB_SPAWN_SESSIONS` environment variable); changes take effect after the session daemon restarts. + + Note: this adds a session daemon code path, so `pi-web-sessiond.service` must be restarted manually for the server side of this change to take effect. + +- 3c6b4a4: Make the Updates panel actionable: every suggested command now has both a Copy and a Run button (Run executes it in a workspace terminal), a single recommended all-in-one command is shown at the top so users do not have to choose, and the remaining commands are grouped as clearly optional additional commands. + ## 1.202606.3 ### Patch Changes diff --git a/package.json b/package.json index 11fca51..eeee526 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@jmfederico/pi-web", - "version": "1.202606.3", + "version": "1.202606.4", "description": "Web UI for persistent Pi Coding Agent sessions in real workspaces.", "license": "MIT", "author": "Federico Jaramillo Martinez",