Repository navigation
v0.4.0 — Session import / export
Highlights
Session import / export — package a complete session (chat,
session memory, findings, summaries, sandbox work/, analysis
DuckDB, every objstore object the session owns) into a single
.shellagent ZIP bundle and re-import on the same or a
different machine. Privacy flag preserved across the
round-trip; object IDs are always regenerated on import
with bounded reference rewriting in chat.json and
summaries.json.
What's new
- Sidebar Export icon (⬇) on each session row, alongside Rename / Delete. Disabled while busy with explanatory tooltip.
- Sidebar Import Chat button (⬆) below
+ New Private Chatin the bottom-nav. Opens a native file picker filtered to*.shellagentand auto-switches to the imported session. /exportand/importslash commands for keyboard-first use;/helplists them.- Audit log entries for export and import (no chat content; obey the v0.3.0 log-level filter).
- Title-collision suffixing — duplicates get
(imported),(imported 2), … - Active-session export integrated with the Idle/Busy state machine: drains post-tasks, flushes per-session stores, closes the analysis Engine for a consistent DuckDB binary copy, then re-creates the Engine via
switchAnalysis.
Why regenerate object IDs
The objstore is global; bundles re-imported on the source machine while the original session still exists would otherwise hit deterministic ID collisions. Always-regenerate makes that path trivially safe and lets the same bundle be imported multiple times. Rewriting is bounded to two files / three loci (Record.ObjectIDs[], Record.Content, SummaryEntry.Summary); session_memory.json and findings.json are intentionally not swept — their write paths cannot embed object refs (audit in design doc §5.3).
Documentation
- New design note: docs/en/session-import-export.md / docs/ja/session-import-export.ja.md (full parity, ~550 lines each)
- Full changelog: CHANGELOG.md
Install
cd app
make build
# Output: dist/shell-agent-v2.appOr download shell-agent-v2-darwin-arm64.zip from this release.