Releases: RyderAsKing/PiChamber
Release list
PiChamber v0.8.2
[0.8.2] - 2026-09-04
Prompt-template safety, shortcuts, background worktree tasks, and reliability fixes.
- Prompt template edits no longer kill sessions. Creating, updating, or deleting a prompt template no longer calls
runtimeRegistry.disposeAll()and no longer fails withSESSION_BUSYwhile a runtime is streaming. Idle runtimes pick up the change through Pisession.reload()in place (session file, ID, and transcript untouched); busy runtimes defer untilagent_settled/compaction completion. Global changes fan out to all runtimes, project changes stay scoped to that directory, and committed files return immediately while activation is deferred (session-daemon,extension-bridge,prompt-operations,docs/research/prompt-template-runtime-reload.md). - Terminal and dictation WebSockets survive restarts (#92).
oc_url_tokenminted at/auth/url-tokenis now anEncryptJWT(dir/A256GCM) sealed with a key derived from the persisted JWT secret instead of an in-memory map, so a server restart no longer invalidates a token the browser may still use for/api/terminal/wsor/api/stt/ws. Global sign-out still rotates the secret and invalidates outstanding tokens (ui-auth). - Shortcuts pruned, folder cycling added. Removes dead bindings (
go-to-line,terminal-expanded,toggle-files, prompt-navigator toggle, right-sidebar git/files tabs, services-tab cycle) and their Header/FilesView/keyboard/Electron-menu handlers, renamestoggle_right_sidebartoopen_right_sidebar, and addscycle_session_folder/cycle_draft_folderbacked by a newfolderCyclemodule with unit tests.HelpDialogwidens to Settings-window size with a two-column grid (shortcuts,folderCycle,useKeyboardShortcuts,HelpDialog,KeyboardShortcutsSettings,main.mjs). - Model picker ignores key repeat (#82). Holding
mod+shift+mno longer re-triggers the model selector on auto-repeat keydowns (shouldHandleModelSelectorShortcut). - Worktree creation moves to background tasks (#85). New-session worktree sends are non-blocking: a
Worktree queuedtoast fires and a fresh draft opens while the captured prompt materializes onsetup-ready. Replaces the global banner withBackgroundTasksMenu(hidden when empty, no count badge, leftmost of the header right-side buttons) plusWorktreeCreationToasts; draft helpers anduseWorktreeCreationStore/session-ui-storeupdated with regression tests. - Retention cleanup threads the owning directory (#84).
PiSessionStore.archive/removeaccept an optional directory and resolve explicit arg →catalog.byId→ focused sessions,PiService.deleteSessionforwardsscope.directoryas?directory=, anduseSessionAutoCleanuppasses the resolved directory through. Fixes foreign-sessionINVALID_SESSIONrejections when cleanup candidates live outside the focused folder, with client/store/candidate plus server owning/wrong-directory regression tests. - Activity and response reveal gates separated (#90).
TurnAssistantBlocknow gates only final-response messages (filtering activity-railactivityPartIds, tool-only records, and progress text projected to the rail) instead of raw message count, andTurnActivityRailhides theLoad earlier activitycontrol while collapsed. Large settled turns still defer behindLoad earlier response/Load full responseat the 32-message boundary (TurnAssistantBlock,TurnItem,TurnActivityRail). - Tool and thinking presentation polish (#86). Expandable tool rows hug context text instead of stretching
surface-subtleacross the row with duration pinned far-right like static read rows, static skill/read rows normalize toitems-centerrhythm, and thinking headers share a 20px line box (items-center,h-5,leading-none, preview at markdown size) so mono glyphs no longer drop (ToolPart,StaticToolRow,ReasoningPart). - Copy working directory in the header session menu (#87). Adds a copy-CWD action to the header session menu (
Header). - Dialog copy fixes (#88, #89). Drops stray literal backslashes from quoted names in the Archive session, folder delete, desktop host-switcher toast, git-identity delete, and dev-server error copy (plain quotes matching
HeaderRetentionDialog), and makes close-worktree warnings legible in dark and light themes (ConfirmDialogs,SidebarSpacesBar). - Relay test reliability (#83). Scripted relay client test finishes async setup before dialing so the loopback socket cannot emit its one-shot
openbefore the listener attaches (host-client.test.js).
PiChamber v0.8.1
[0.8.1] - 2026-09-04
Turn activity timeline, authoritative live status, and attachment upload fix release.
- Unified turn activity timeline. Assistant turns now project reasoning, progress text, and tools through one chronological disclosure rail (
TurnActivityRail,TurnWorkingHeader,turnActivityModel,turnActivityDisclosure,useTurnToolsState) with a one-line working header (live status while running,Worked for <duration>when settled) and batched tool reveal that preserves per-message expansion caches. Assistant message body, reasoning, and text parts align with the rail without rebuilding settled siblings during streams. - Live activity status is authoritative.
useAssistantStatusderives working/thinking/tool phrases from live channels (streaming assistant message, Pi snapshot, session activity timing) instead of persisted history, with normalized tool-name mapping (dotted/suffixed names plus expanded edit/search/fetch/task phrases) and authoritative start time. Temporary fallbacks clear when live state arrives; fetch failure never masquerades as idle. - Running-tool shimmer scoped to live verbs (#81). Reintroduces
oc-shimmer-verbwith CSS-owned transparent fill reusingAgentThinkingLoadergradient stops/keyframes, a reduced-motion static dim fallback, and settled rows on static dim — without restarting sweeps on streaming remounts or touching footer gating (MinDurationShineText,index.css). - Refined tool presentation. Compact static rows (
StaticToolRow) for navigation tools plus refined expandableToolPartheaders, task summaries, and shared row typography; docs updated (parts/DOCUMENTATION.md). - macOS/Windows build fix. Renames case-colliding
ChatSurfaceContext.tsxtochatSurfaceProvider.tsxand updates imports so case-insensitive checkouts build. - Attachment uploads unblocked on desktop/mobile. CORS preflight now allows
x-pichamber-mimeforPOST /api/pi/attachments, fixing image uploads frompichamber-ui://app,capacitor://localhost, and loopback HMR (cors.js).
PiChamber v0.8.0
[0.8.0] - 2026-09-03
Snippets, prompt templates, command catalog, streaming polish, and architecture consolidation release.
- Snippets and prompt templates are now first-class. Server adds a PiChamber snippets store backend with CRUD plus native commands catalog routes; Pi client and protocol are directory-scoped with snippets and commands. UI adds an ID-based snippets store with directory-scoped UI, a prompt-templates store/page with variable helpers, insert-only draft starters pinned to prompt templates (including one-time built-in text starters on the new-session welcome screen), and separate Snippets vs Prompt-templates settings surfaces with search. Skill mentions render as
/skill:namelinks. - Composer slash and skills align with Pi resolution. Adds a shared command catalog with executable invocation identity, clears runtime-scoped catalogs on endpoint reset, and integrates the catalog into the composer. Removes PiChamber-owned slash commands, refines command source filters, and keeps extension-command sessions on the composer-first empty surface. Session titles gain a shared helper with awaiting-first-prompt titles, and awaiting-first-prompt label plus extension toast delivery are fixed.
- Chat streaming polish (#79, #80). Fluid streaming arrivals with live tool/thinking shimmer and stable footers, stabilized streaming footers and tool states, pixel-grid Dots loader with shimmer status and footer arrival fade, and a copy button next to the composer branch name. Also removes the composer drag ring while keeping drop overlay edges distinct and widens chat columns (60rem base, 76rem wide).
- Faster, more reliable new-session sends. New-session sends show instant pending feedback, preserve feedback through dispatch, hide empty assistant echo until first renderable content, and speed up dispatch. Attachment drafts survive session switches with files kept consistent through send and render; relay connects fail fast with diagnostics instead of hanging on stall and handle already-connected host state.
- Mobile and desktop UI polish. Mobile new-session action moves to a floating button at the sidebar bottom, stale mobile header on session switch is fixed, composer changes trigger and header alignment are corrected, working loader type matches the stream with tool-sized timer, desktop header title/metadata collapse to a single line, performance overlay is draggable, model picker drops sorting/footer, and worktree close gains a safe confirmation flow.
- Reduced surface. Removes legacy desktop SSH instance manager, AI commit generation, deprecated context workflows, obsolete project notes surface, and dead presentation wrappers; docs align with the reduced feature surface. Attachment filename CORS header is allowed for browser uploads.
- Architecture consolidation preserving behavior. Stacked on
pichamber/reduce-size-p1, this is a behavior-preserving consolidation that merges duplicated mobile/desktop Files and Git implementations, decomposes large config, UI, Git, session, persistence, chat, message, tool, and composer modules into focused owners (including shared Files/Git mobile chrome), cleans up the runtime Git contract, and removes shallow/dead wrappers; review fixes restore private relay client URL parameters (v,role,serverId, optionalgrant) and retryable handshake timeouts with regression tests.
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).
PiChamber v0.7.1
[0.7.1] - 2026-09-01
Composer, project, and desktop-auth polish after 0.7.0.
- Thinking changes wait until send. Composer thinking-level picks stay local until the next send, so mid-turn or idle picker changes no longer rewrite the active session (
apply-composer-thinking). - Skills trust without a popup. Opening a project no longer shows a trust dialog for skills; PiChamber projects are trusted automatically.
- Worktree create stays in the background. Creating a worktree shows global progress instead of blocking the composer, so you can keep chatting while checkout finishes (#66).
- Desktop reload keeps the last host unlocked. Reloading an Electron window reapplies the stored client token for the hydrated last runtime before the password gate runs (
restoreDesktopRelayRuntime, #65). - Projects settings match other pages. The Projects settings page follows the Providers/Skills layout, and the Settings nav no longer repeats the PiChamber heading (#63, #69).
- UI polish. Left sidebar border removed, tablet composer padding and header burger aligned with desktop, and the OpenAI logo shows for the
openai-codexprovider (#64).
PiChamber v0.7.0
[0.7.0] - 2026-09-01
Streaming reliability and faster session startup.
- Live turns survive reload. Reopening a chat that is still running restores the working/tooling state from
getSession(isStreaming/lifecycle: 'busy'plus in-flight tools) instead of showing a settled transcript until the next token. - Event stream stays attached. Transport switches reconnect from the last accepted sequence without treating a disconnect as an empty session. Missed replay windows force-hydrate from an authoritative snapshot.
- Remembered desktop host auth. Reloading an existing Electron window reapplies the selected remote host URL and stored client token so a remembered password is not prompted again (
startup-url-selection,main.mjs). - Warm sidebar catalog. Stable session-list metadata is cached per runtime and restored as idle rows before directory lists return. Failed folder refreshes keep cached rows; authoritative empty lists persist an empty tombstone. Busy/retry and hydrated transcripts are never restored from cache (
pi-session-catalog-cache). - Faster crowded folder lists.
sessions.listreads up to eight JSONL session files at a time in a directory. One unreadable or header-malformed file still fails that folder only.
PiChamber v0.6.0
[0.6.0] - 2026-08-25
Worktree-aware sidebar and no-folder session fixes.
- Worktree-specific busy indicator. When a project has linked worktrees, the sidebar now shows the busy spinner on the exact worktree that is running. Collapsed projects aggregate activity on the project row; expanded projects show the spinner only on the primary checkout or the linked worktree that is actually busy. Single-project and no-worktree behavior is unchanged (
SessionSidebar→activeDirectoriesByProject,SidebarSpacesBarper-worktreeAgentThinkingLoader). - Sessions without a folder stay global. Sessions created with “Don’t work in a folder” at literal
~no longer leak into every registered project’s ownership bucket or focused catalog slice, so switching folders cannot retain or select an unrelated home session.isKnownActiveSessionDirectoryand directory-ownership logic now scope correctly to authoritative known directories and global session home, with header location hiding the stale active project for home sessions (#59). - Electron update manifest verification handles multiple artifacts.
verify-update-manifest.mjsnow finds the expected artifact by matching its URL among multiplefilesentries instead of requiring exactly one, fixing checksum validation for macOSlatest-mac.ymlwhich lists both DMG and ZIP. - Sidebar labeling. “All sessions” is now labeled “All Folders” across the sidebar and docs; global/home sessions carry the neutral “No folder” shade and correct empty states when no folder is selected.
PiChamber v0.5.2
[0.5.2] - 2026-08-25
Folder-scoped session reliability release.
- Folder switching shows the correct sessions. Home sessions no longer enter every registered project's ownership bucket or focused catalog slice, so changing folders cannot retain or select an unrelated home session.
- Explicit no-folder sessions. The new-session picker always offers "Don't work in a folder" at literal
~, whether the runtime home is registered as a folder or not. The selection remains stable instead of snapping back to the active project. - All folders keeps global sessions accessible. Sessions created at
~appear only in All folders, carry a "No folder" secondary label, and use a neutral theme-aware background. Project views remain strictly folder-owned. - Release integrity. Desktop release jobs independently verify macOS, Windows, and Linux updater-manifest checksums against their generated artifacts. The npm job publishes the exact attached tarball and verifies its SHA-512 integrity, SHA-1 shasum, and downloaded registry bytes.
PiChamber v0.5.1
[0.5.1] - 2026-08-25
Focused composer and reload reliability release.
- Repository-free sessions. The new-session folder picker now offers "Don't work in a repository", creates the session in the connected runtime's home directory, and shows those home sessions in every project folder. Literal
~and expanded-home catalog entries merge without duplicate rows. - Reload restores context. Reloading the web or desktop renderer preserves the selected runtime and its last active session instead of reverting to Local server. Runtime endpoint persistence remains credential-free, and Capacitor mobile keeps its existing validated restore flow.
- Safe worktree names. Small-model utility inference now runs in an isolated Pi text-transformation session without coding-agent instructions, repository context, skills, extensions, templates, or tools. Worktree naming accepts only a complete lowercase ASCII hyphenated slug within 48 characters; conversational or malformed replies fall back to the deterministic task-derived name.
PiChamber v0.5.0
[0.5.0] - 2026-08-24
Pi extension release: existing extensions now run inside PiChamber's session daemon, their commands and standard UI prompts work across clients, and extensions can add native cards, panels, forms, and sandboxed app views to the workspace.
- Pi extensions run in PiChamber. The session daemon loads global and trusted project extensions through Pi's standard discovery flow. Registered tools, commands, lifecycle hooks, prompt modifications, and session state work without a PiChamber-specific dependency; child-process extensions resolve the real
pi-coding-agentbinary inside the detached daemon (session-daemon,extension-bridge). - Extension dialogs and live UI. Standard
ctx.uiselect, confirm, input, editor, notification, status, and widget calls render in web, desktop, hosted mobile, and Capacitor clients. PiChamber's versioned extension protocol adds validated markdown, key-value, list, table, progress, badge, and code cards; reconnect-safe live panels; structured forms; command actions; and script-only sandboxed app views (extension-protocol,extension-ui,ExtensionDialogOverlay,ExtensionStatusWidgets,ExtensionMessageCard,ExtensionPanelDock,ExtensionAppSurfaces). - Extension commands in the composer. Registered slash commands appear in autocomplete and dispatch to their extension with arguments. Settings can pin commands as composer buttons and bind global shortcuts without shadowing built-in shortcuts (
CommandAutocomplete,ComposerCommandTriggers,CommandTriggersSettings). - Extension state stays in sync. Model and thinking-level changes made by commands such as
/balanceor/juicernow update the composer instead of being overwritten by stale local selection. Dialog responses are validated, ANSI and truecolor dialog content is normalized on mobile, notifications appear as toasts and transcript cards, and extension listings expose opaque IDs rather than host paths (model-selection-sync,ansi,extension-bridge). - Faster worktree switching. Changing sessions or worktrees no longer recreates the project list. Filtered worktree views remove redundant group headers and indentation, while draft target controls and pending-change details are more compact (
useProjectsStore,SidebarProjectsList,SidebarSpacesBar,DraftTargetSelectors,PendingChangesBar). - Mobile composer polish. Speech recording no longer shows a timer that crowds the mobile composer, and long model and thinking-level labels use tighter limits (
ComposerVoiceInput,ModelControls,ThinkingLevelControl). - Pi-native cleanup. The remaining internal OpenCode compatibility clients, status/config helpers, route aliases, and fallback contracts have been removed. PiChamber now uses the Pi-native session, settings, Git, and runtime paths directly.
- Release integrity. npm publishing now publishes the exact tarball attached to the GitHub Release, then verifies its SHA-512 integrity and SHA-1 shasum against npm metadata and the registry download before attaching it (
release.yml).