PiChamber v0.7.2
[0.7.2] - 2026-09-01
Attachments, worktree, extension, and startup reliability release.
- Attachments upload before the prompt leaves. Composer picker, drop, and paste now create card previews immediately and stream each file to
POST /api/pi/attachmentsasapplication/octet-streamwithx-pichamber-filename/x-pichamber-mimebefore prompt dispatch. The composer shows one strip inside the card that wraps on wide layouts and scrolls on narrow layouts; each card reads its ownpreparing/uploading(determinate progress when the runtime reports bytes) /ready/failed/expiredstate frominput-store.tswith Retry and Remove actions.SendandQueueare gated until every draft attachment isready(Uploading attachments…/Retry or remove failed attachmentson the send/queue buttons and as toasts), keyboard submission repeats the gate, and queueing detaches cards without deleting server uploads. Prompt dispatch keeps cards visible until Pi accepts the prompt; payload-too-large, network, and runtime-changed failures leave attachments available for another attempt instead of clearing them. Server validates filenames, enforces expiry/TTL and per-file limits inattachment-store.js, supportsDELETE /api/pi/attachments/:id, and the web client exposesuploadAttachment/deleteAttachmentplusruntime-upload.tsprogress reporting. Queued messages serialize ready attachments for persistence and restore (#70,runtime-upload,attachment-store,ChatInput,FileAttachment,input-store,session-ui-store). - Background worktree creation no longer steals focus. The submit that starts a draft worktree captures its draft snapshot, prompt, and model config and keeps the returned receipt through completion. Selecting another session while the worktree builds no longer redirects the prompt or steals session focus; materialization creates the worktree session with
select: falseand prompts its new directory in the background, leaving the current session and active directory untouched. Failure preserves the draft and never falls back to the source checkout (#71,useDraftWorktreeCreation,pi-session-store,session-ui-store,session-actions). - Extension state hydrates on open and reconnect.
sessions.openandsession.snapshotnow include live extension state (extensionStatuses,extensionWidgets,extensionDialogs,extensionPanels,extensionApps,extensionTitle) built byprojectExtensionSnapshotStateand seeded from the daemon's per-session maps. First attach after a cold start no longer misses one-time startup statuses before the browser stream connects, and a second tab reopens with the same live panels (#75,session-daemon,routes,event-reducer,bootstrap,reconnect). - Large settled history no longer rebuilds on every token. Settled assistant turns with long histories defer older blocks behind
Load older history/Load all history(deterministicTurnAssistantBlock+turnAssistantReveal), so live replies avoid rebuilding the whole transcript andMessageListvirtualization stays cheap (#73,MessageList,TurnItem,TurnAssistantBlock). - Interactive
startup enableandpichamber version. In an interactive terminal with no setup flags,pichamber startup enablenow walks through access (This machine only/Local network/Custom bind address), port (1–65535 validated), authentication (Use configured password/Enter a passwordwith confirmation /Generate a secure password/No passwordwhen local), and a final confirmation before installing the native service. Flag-driven, non-TTY,--quiet, and--jsonruns stay non-interactive. Re-running enable rewrites and restarts the systemd unit (daemon-reload+enable+restart) so new settings take effect instead of requiring a manual restart. Addspichamber version(and--version) that prints the installed package version and supports--json(bin/cli,cli-args,commands-startup,cli-startup,DOCUMENTATION.md). - Web updates use the correct Pi endpoint and a detached launcher. The client now posts to
POST /api/pi/update-install(was/api/pichamber/update-install) and the server validates the install is a trusted global package-manager copy before spawning a detached updater (pichamber update --quiet,detached+stdio: ignore). Container and systemd-hosted servers are refused with an actionable message instead of attempting an in-place replace (#74,UpdateDialog,routes,package-manager,launchUpdateCommand). - Directory focus no longer loops on Windows spellings. The chrome bridge compares normalized path identities (slash style, drive-letter case, trailing separator) before writing the daemon focus back into
useDirectoryStore, preventing an update loop betweenC:\\repoandC:/repo/(AppEffects,normalizePath).