Commit Graph
100 Commits
Author SHA1 Message Date
Federico Jaramillo Martinez cfb7493384 Improve dark theme user/assistant message distinction
Add per-role left accent stripes and color-coded header labels across
all themes. Lighten the dark theme user-message background, decouple it
from the generic hover color, and brighten the user border so user and
assistant turns are clearly distinguishable.
2026-06-13 21:26:08 +02:00
Federico Jaramillo Martinez a369b1e550 feat: give the sending indicator a distinct color in session lists
Add a dedicated "sending" activity indicator kind (warning color) so a
session uploading attachments is visually distinct from server activity.
Server activity propagates up to workspace/machine rows; client-side
sending does not, and the different color signals that to users.

Also extract sessionRowActivityKind as a pure, exported helper so the
"sending takes precedence, archived/cached-new never show" logic is unit
tested without rendering.
2026-06-13 21:20:46 +02:00
Federico Jaramillo Martinez 886393a31e fix: scope the attachment sending indicator per session
isSendingPrompt was a single global flag, so an in-flight upload showed
the "Sending…" dock on whatever session/machine the user switched to.

Replace it with sendingPrompts, a Record<sessionId, true> keyed like
sessionStatuses/sessionActivities. The controller sets/clears the entry
for the originating session (captured before the await), the chat dock
reads only the selected session's entry, and the session list now shows
the activity dot for a session that is uploading so progress is visible
after switching away. Machine switches clear the record like other
per-session state; deselecting a session no longer cancels its indicator.
2026-06-13 21:09:31 +02:00
Federico Jaramillo Martinez 970c0bf1d2 refactor: extract testable image attachment capture from the composer
The paste/drop/file capture logic (supported-type filtering, unnamed-file
extension fallback, per-file error collection) lived inside PromptEditor,
mixing browser side effects with branching that had no tests.

Move it into a pure promptAttachmentCapture module with the byte reader
injected, so the FileReader side effect stays at the component boundary
and the orchestration is unit-tested. Also removes a duplicated mime->ext
fallback in favour of the shared extensionForImageMimeType helper.
2026-06-13 20:45:16 +02:00
Federico Jaramillo Martinez ecede3ac7c refactor: drive attachment sending state through the chat activity dock
Replace the composer-local "Sending…" indicator with a single, consistent
state surfaced by the existing chat activity dock. The session controller
now owns the full attachment send lifecycle (including the folder-mode
upload + reference rewrite) and toggles an isSendingPrompt flag around it,
which the chat dock renders as "Sending your message…" until the real
server activity supersedes it.

This covers the pre-receipt dead zone (upload, server-side image resize,
first-session open) with one indicator instead of two, and keeps plain
text sends fire-and-forget.
2026-06-13 14:09:04 +02:00
Federico Jaramillo Martinez 53b00c47f9 fix: show sending indicator while uploading attachments
Messages with image attachments could take a moment to appear (large
base64 upload, server-side resize, first-session open) while the composer
cleared instantly, making it look like nothing happened.

Await the send for attachment messages and surface a "Sending…" button
label plus a "Sending your files…" / "Saving your files…" hint, disabling
the composer until the message lands. Plain text messages stay
fire-and-forget so the input frees up instantly.
2026-06-13 13:57:10 +02:00
Federico Jaramillo Martinez d17050e144 feat: add image attachments to the chat composer
Support pasting (Ctrl/Cmd+V), drag-and-drop, and an Attach button to add
PNG/JPEG/GIF/WebP images to a message, with thumbnail previews and
multi-image support.

Attachments are delivered to the session using pi's native ImageContent
format and are run through pi's own resizeImage so they match pi's inline
image limits exactly. Image content now renders inline in the transcript.

A per-message delivery toggle also lets users save attachments into the
workspace `.pi-web/paste` folder and reference them so the agent reads
them with its own tools.

The accepted HTTP upload size is configurable via PI_WEB_MAX_UPLOAD_BYTES
or the maxUploadBytes config value (default 64 MB).

Closes #13
2026-06-13 13:49:39 +02:00
Federico Jaramillo Martinez 847510e240 docs: drop hardcoded sessiond restart command from AGENTS.md 2026-06-13 13:48:28 +02:00
Federico Jaramillo Martinez 3c6b4a4869 feat: detached systemd restart + runnable Updates panel commands
Run Linux restart commands inside a detached transient systemd user
service (systemd-run --user) so the restart survives the launching
terminal being killed and its logs can be inspected via journalctl.

Make the Updates panel actionable: every command has Copy and Run,
a single recommended all-in-one command is shown at the top, and the
rest are grouped as optional additional commands.
2026-06-13 12:58:09 +02:00
Federico Jaramillo Martinez 1000d4ddd6 chore(release): v1.202606.3 2026-06-13 12:07:38 +02:00
Federico Jaramillo Martinez 3d68c78c83 test: make working-directory tests pass on Windows
Drive-qualify resolved paths in fixtures and assert against normalized cwds
so route tests match the values normalizeRequestCwd produces. Skip the
POSIX-shell TerminalService suite on native Windows, where the terminal
feature is unsupported.
2026-06-13 11:48:06 +02:00
Federico Jaramillo Martinez ef03439b5c ci: run verify/build on Linux and Windows, allow manual dispatch
Add a fail-fast: false OS matrix (ubuntu-latest, windows-latest) and a
workflow_dispatch trigger so CI can be run on demand.
2026-06-13 11:41:17 +02:00
Federico Jaramillo Martinez c0d12222a2 fix: list and open sessions across project directories
Sessions outside the server's launch directory were invisible and returned
404 on open, leaving the model picker empty. List without the SDK's
process-cwd filter and normalize working directories at the API boundary and
when reading stored session data, tolerating separator/normalization
differences (including Windows backslash vs forward slash). Requires Pi
coding agent SDK 0.78.0 or newer.
2026-06-13 11:40:47 +02:00
Federico Jaramillo Martinez 38cf334c40 fix: restart web/UI services before sessiond in restart commands
Running the suggested restart command from a PI WEB terminal kills the
command when sessiond restarts, so services listed after sessiond were
never restarted. Restart web/UI first in both the updates plugin's
suggested command and `pi-web restart` (systemd and launchd).
2026-06-12 20:49:08 +02:00
Federico Jaramillo Martinez 8de25d4a01 chore(release): v1.202606.2 2026-06-11 13:45:24 +02:00
Federico Jaramillo Martinez d66eccc5c0 fix: handle spaced file suggestions 2026-06-11 12:09:27 +02:00
Federico Jaramillo Martinez 9dd59c0f64 fix: show model response errors in chat 2026-06-11 11:51:51 +02:00
Federico Jaramillo Martinez 577594a622 fix: prevent sidebar action menus from being cropped
Use viewport-constrained positioning for sidebar action menus and keep the auth warning test isolated from local models.json config so pre-commit verification is deterministic.
2026-06-11 01:31:56 +02:00
Federico Jaramillo Martinez 5855c443ca Merge remote-tracking branch 'origin/main' 2026-06-10 23:27:23 +02:00
Federico Jaramillo Martinez 680ed88b0b test: cover session websocket cwd proxying 2026-06-10 23:15:59 +02:00
Federico Jaramillo Martinez ef22247d76 fix: preserve remote route during transient reconnects 2026-06-10 23:04:25 +02:00
Federico Jaramillo Martinez b99143f757 fix: preserve legacy session route lookups 2026-06-10 22:42:55 +02:00
Federico Jaramillo Martinez 71510444c4 Merge remote-tracking branch 'origin/main' into investigate/issue-12-session-dir
# Conflicts:
#	src/client/src/api.ts
#	src/client/src/api/clients.ts
#	src/client/src/api/federatedRouteContract.test.ts
#	src/server/sessions/piSessionService.ts
#	src/server/sessions/sessionRoutes.ts
2026-06-10 20:43:10 +02:00
Federico Jaramillo Martinez 4bc390a33a fix: keep machine restore snappy 2026-06-09 17:06:18 +02:00
Federico Jaramillo Martinez 65b4c76513 fix: preserve selected chat text on copy 2026-06-09 15:41:48 +02:00
Federico Jaramillo Martinez c57f24dfa5 feat: support machine-specific plugins 2026-06-09 15:10:32 +02:00
Federico Jaramillo Martinez 0118e6ebe9 fix: keep archived parent sessions visible 2026-06-09 13:40:48 +02:00
Federico Jaramillo Martinez 313dbea34e chore: clarify archived delete capability hint 2026-06-09 12:29:56 +02:00
Federico Jaramillo Martinez fc20b95fed feat: gate session cleanup by runtime capabilities 2026-06-09 11:40:17 +02:00
Federico Jaramillo Martinez a3b5b722c9 feat: add safe session bulk cleanup actions 2026-06-08 17:20:00 +02:00
Federico Jaramillo Martinez b2a79750a3 fix: align machine badge status 2026-06-08 15:44:52 +02:00
Federico Jaramillo Martinez b6166842fe feat: add resizable side panels 2026-06-08 15:41:52 +02:00
Federico Jaramillo Martinez 351ed03bf8 feat: add editable keyboard shortcuts 2026-06-08 14:57:24 +02:00
Federico Jaramillo Martinez f3e19d1463 feat: add keyboard navigation ladder 2026-06-08 13:33:39 +02:00
Federico Jaramillo Martinez f501f9d757 fix: stabilize navigation activity indicators 2026-06-08 13:33:39 +02:00
Federico Jaramillo Martinez 25d8188970 fix(docs): keep mobile header controls visible 2026-06-07 12:52:21 +02:00
Federico Jaramillo Martinez a73bcebbd6 feat: simplify desktop navigation 2026-06-06 00:12:38 +02:00
Federico Jaramillo Martinez 73218be516 chore(release): v1.202606.1 2026-06-05 15:41:53 +02:00
Federico Jaramillo Martinez f2d211da9c fix(plugins): harden remote plugin asset proxy 2026-06-05 14:32:41 +02:00
Federico Jaramillo Martinez 0d9d124237 fix(plugins): preserve deprecated panel terminal alias 2026-06-05 14:26:35 +02:00
Federico Jaramillo Martinez 3330a5a7fa fix: load gateway plugins before remote plugins 2026-06-05 10:12:52 +02:00
Federico Jaramillo Martinez 4bc00102eb feat(plugins): add workspace file helpers to labels 2026-06-05 10:11:07 +02:00
Federico Jaramillo Martinez 0e64b812dd fix: prefer gateway plugins over remote duplicates 2026-06-05 09:53:33 +02:00
Federico Jaramillo Martinez b9be7de206 feat: load machine-scoped remote plugins 2026-06-05 09:29:48 +02:00
Federico Jaramillo Martinez 9c3dafc4d4 fix: close workspace terminals before deletion 2026-06-04 21:31:39 +02:00
Federico Jaramillo Martinez 30fb9602d6 fix: persist navigation memory per browser tab 2026-06-04 15:57:29 +02:00
Federico Jaramillo Martinez f1c8f1f014 refactor(plugin-api): clean up workspace panel context 2026-06-04 15:38:18 +02:00
Federico Jaramillo Martinez bd8d1f1f08 feat: keep workspace tab icons visible 2026-06-04 13:50:29 +02:00
Federico Jaramillo Martinez e3533ebf1f feat: add public plugin workspace capabilities 2026-06-04 13:00:25 +02:00
Federico Jaramillo Martinez 93b50e61af feat: add machine setup dialog 2026-06-04 12:12:25 +02:00
Federico Jaramillo Martinez 193c9d0f8f feat: show machine activity indicators 2026-06-04 11:54:21 +02:00
Federico Jaramillo Martinez ed647a359a fix: restore fallback machine navigation after deletion 2026-06-04 11:12:03 +02:00
Federico Jaramillo Martinez b3bb7329bf feat: remember machine navigation 2026-06-04 11:00:58 +02:00
Federico Jaramillo Martinez f083dcc227 Merge pull request #10 from jmfederico/review/pr-5-machine-federation-fixes
Add machine federation and management
2026-06-04 10:35:22 +02:00
Federico Jaramillo Martinez 4eb95fec7f Merge remote-tracking branch 'origin/main' into review/pr-5-machine-federation-fixes
# Conflicts:
#	src/client/src/api.ts
#	src/client/src/api/clients.ts
#	src/client/src/api/parsers.ts
#	src/client/src/components/PiWebApp.ts
#	src/server/app.ts
#	src/shared/apiTypes.ts
2026-06-04 10:31:23 +02:00
Federico Jaramillo Martinez ccd4a766d9 feat: improve machine navigation controls 2026-06-04 10:22:02 +02:00
Federico Jaramillo Martinez 10d9298662 fix: keep PWA refresh menu above workspace header 2026-06-03 22:56:21 +02:00
Federico Jaramillo Martinez be02c3516f fix(plugins): rename updates plugin id 2026-06-03 22:53:37 +02:00
Federico Jaramillo Martinez 76302a4e5f feat: add bundled plugin tab icons 2026-06-03 22:38:55 +02:00
Federico Jaramillo Martinez fda6fb0eca fix: keep mobile tab badges inline 2026-06-03 21:21:22 +02:00
Federico Jaramillo Martinez 401dab69ad feat: support plugin mobile tab icons 2026-06-03 21:13:35 +02:00
Federico Jaramillo Martinez 4548e5c6a0 feat: add compact mobile tab icons 2026-06-03 20:57:38 +02:00
Federico Jaramillo Martinez a58c2113f4 feat: add shortcut config foundation 2026-06-03 20:41:16 +02:00
Federico Jaramillo Martinez 4495a26ffd feat: add settings config UI 2026-06-03 20:20:54 +02:00
Federico Jaramillo Martinez e0ae5ef9b2 fix: keep PWA refresh menu above mobile tabs 2026-06-02 17:51:35 +02:00
Federico Jaramillo Martinez 753b8bbc8a Merge remote-tracking branch 'origin/main' into review/pr-5-machine-federation-fixes
# Conflicts:
#	src/client/src/api/clients.ts
#	src/client/src/components/PiWebApp.ts
#	src/client/src/components/PromptEditor.ts
#	src/server/app.ts
#	src/server/terminalProxyRoutes.ts
#	src/server/workspaces/fileSuggestions.ts
2026-06-02 17:42:16 +02:00
Federico Jaramillo Martinez 6c094af917 fix: contain chat overlay stacking 2026-06-01 18:09:49 +02:00
Federico Jaramillo Martinez 1a5c60da49 Merge pull request #8 from FerOliveira-dev/fix/prompt-editor-z-index
fix: increase prompt-editor z-index to 30 to prevent activity-dock overlap
2026-06-01 18:08:57 +02:00
Federico Jaramillo Martinez 9c80eb0a92 fix: improve PI WEB updates panel commands 2026-06-01 17:46:23 +02:00
Federico Jaramillo Martinez 1ae28d8f59 refactor(client): extract app shell chrome 2026-05-28 21:51:52 +02:00
Federico Jaramillo Martinez bad3a185ff feat: add delete new session action 2026-05-28 21:48:04 +02:00
Federico Jaramillo Martinez 50906617a0 feat: add pi-web version reporting 2026-05-28 21:33:14 +02:00
Federico Jaramillo Martinez 5e2afc1ffa fix: harden machine federation boundaries 2026-05-28 20:49:25 +02:00
Federico Jaramillo Martinez 4043ce7eca chore(release): v1.202605.14 2026-05-28 20:41:52 +02:00
Federico Jaramillo Martinez 1c1740aeab fix: keep navigation headings visible 2026-05-28 15:06:55 +02:00
Federico Jaramillo Martinez 3bd4773c87 fix: show raw chat history range 2026-05-28 14:19:44 +02:00
Federico Jaramillo Martinez 2abd1d9e19 fix: queue prompts during compaction 2026-05-28 14:15:52 +02:00
Federico Jaramillo Martinez 5737b228b8 feat: add left panel collapse control 2026-05-28 11:18:04 +02:00
Federico Jaramillo Martinez c0b358bf3d fix: keep collapsed workspace panel handle visible 2026-05-28 11:06:45 +02:00
Federico Jaramillo Martinez d46b15f9b2 Merge remote-tracking branch 'origin/main' into maintainer/pr-6-workspace-panel-edge
# Conflicts:
#	src/client/src/components/shared.ts
2026-05-28 10:58:07 +02:00
Federico Jaramillo Martinez 559c6f6d1f fix: move workspace panel collapse control to edge 2026-05-28 10:47:16 +02:00
Federico Jaramillo Martinez c73ac5bb9a fix: keep PWA chrome visible after resume 2026-05-28 08:19:04 +02:00
Federico Jaramillo Martinez 958596aaa5 fix(cli): summarize service status output 2026-05-25 16:44:40 +02:00
Federico Jaramillo Martinez 824728174b feat: add native user service installs 2026-05-25 16:28:09 +02:00
Federico Jaramillo Martinez 57a6a4a69f fix: make doctor platform-aware 2026-05-25 14:56:21 +02:00
Federico Jaramillo Martinez 679008d132 fix: clear stale workspace activity indicators 2026-05-24 08:15:47 +02:00
Federico Jaramillo Martinez 56fa641a8d fix: restore chat prompt spellcheck 2026-05-23 23:41:17 +02:00
Federico Jaramillo Martinez 37c3aa79d8 chore(release): v1.202605.12 2026-05-23 23:09:32 +02:00
Federico Jaramillo Martinez a33c51d164 fix: limit refresh controls to PWA mode 2026-05-23 23:03:00 +02:00
Federico Jaramillo Martinez c2200da0b2 fix: surface refresh control on tablet PWA 2026-05-23 22:56:34 +02:00
Federico Jaramillo Martinez 4517fa06d2 fix: polish mobile refresh overlay 2026-05-23 22:34:04 +02:00
Federico Jaramillo Martinez f4aeb0675f feat: make mobile breadcrumbs clickable 2026-05-23 22:26:42 +02:00
Federico Jaramillo Martinez df20563abb feat: add mobile refresh control 2026-05-23 21:18:22 +02:00
Federico Jaramillo Martinez 1546143038 feat: add PWA install icon and uppercase branding 2026-05-23 20:50:45 +02:00
Federico Jaramillo Martinez 428f7bb8c2 feat: archive session descendants 2026-05-23 00:05:03 +02:00
Federico Jaramillo Martinez 23e82e1292 fix: improve workspace empty states 2026-05-22 14:32:39 +02:00
Federico Jaramillo Martinez 6a8f2f2979 fix: prevent new session shortcut from editing draft 2026-05-21 22:58:10 +02:00
Federico Jaramillo Martinez 9e3d272731 feat: prefill forked session prompt draft 2026-05-21 22:56:03 +02:00
Federico Jaramillo Martinez 2f5293a8c9 fix: make workspace panels scrollable 2026-05-21 20:52:30 +02:00
Federico Jaramillo Martinez 1a91094a5b Move docs deployment to Cloudflare 2026-05-21 09:17:58 +02:00