sessiongraph 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/guide.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Explore & visualize all your LLM sessions**
4
4
 
5
- A local-first galaxy of your LLM sessions. Import **OpenCode, Claude Code, Codex, Cursor, Gemini CLI, Qwen Code, Pi, GitHub Copilot CLI, Cline, Roo Code, Kilo Code, and Continue**, explore relationships and changed files, search conversations, and fly through their timeline. Source-specific coverage is listed below.
5
+ A local-first galaxy of your LLM sessions. Import local agent histories, explore relationships and changed files, search conversations, and fly through their timeline. Core source coverage is listed below; the [extended format matrix](import-coverage.md) covers additional harnesses, metadata-only sources, and detection-only integrations.
6
6
 
7
7
  ## Open SessionGraph
8
8
 
@@ -84,20 +84,24 @@ Onboarding closes automatically after a successful import and library refresh. I
84
84
  | Source | Read-only interface | Relationships and limitations |
85
85
  | --- | --- | --- |
86
86
  | OpenCode | Official authenticated local service discovery and V2 GET API | Explicit forks and child IDs; authoritative snapshot paths where available. OpenCode must be running for an import, but not to browse saved data. Remote endpoints are rejected. |
87
- | Claude Code | SDK `listSessions`, `getSessionMessages`, `getSubagentMessages`; local transcript metadata | All local projects, worktrees, and subagent transcripts. SDK-visible conversation chain can omit pre-compaction text. No inferred fork ancestry. File evidence requires a successful matching edit-tool result. |
88
- | Codex | Bounded streaming reads of active and archived local JSONL rollouts | Explicit recorded fork/parent fields; completed file-change events. Mirrored event text is not imported twice. Store-only/cloud-only history and ordinary ChatGPT desktop/web chats are not imported. No agent process is started. |
89
- | Cursor | IDE JSONL transcripts in `~/.cursor/projects/*/agent-transcripts/`, CLI `~/.cursor/chats/` and ACP `~/.cursor/acp-sessions/` stores | Explicit subagent directories; one representation per native ID, preferring the committed store conversation. No inferred forks or successful edits. Legacy Composer databases, older `.txt` transcripts, cloud-only and SDK-only history are excluded. |
87
+ | Claude Code | SDK conversation-chain parsing with read-only local transcript discovery; legacy `~/.claude/transcripts/` envelopes | CLI and VS Code extension sessions, including IDE-prefixed prompts omitted by the SDK listing. Project transcripts take precedence over overlapping legacy exports. Preserves recorded message times and explicit subagent metadata. SDK-visible history can omit pre-compaction text. No inferred fork ancestry. File evidence requires a successful matching edit-tool result. |
88
+ | Codex | Bounded streaming reads of active/archived JSONL, zstd/gzip archives, and suffixed rollout copies | Native session IDs deduplicate copies; active uncompressed rollouts take precedence. Explicit recorded fork/parent fields; completed file-change events. Mirrored event text is not imported twice. Store-only/cloud-only history and ordinary ChatGPT desktop/web chats are not imported. |
89
+ | Cursor | IDE JSONL transcripts, CLI/ACP stores, and legacy Composer `state.vscdb` databases in application `User/globalStorage` and `User/workspaceStorage` | Inline conversations, conversation maps, and separate bubble records preserve native creation dates. Modern representations take precedence while retaining Composer's original start date. Missing bubble times stay unknown. Older `.txt` transcripts, cloud-only and SDK-only history are excluded. |
90
90
  | Gemini CLI | `~/.gemini/tmp/*/chats/` JSON/JSONL; sandbox cache equivalent | Reconstructs append-only patches and rewinds. Explicit subagent directories form parent links. Workspace identity comes from `.project_root`; unknown directories stay unknown. |
91
91
  | Qwen Code | `~/.qwen/projects/*/chats/*.jsonl` | Recorded forks and parent sessions remain distinct. Tool results retain call IDs and recorded execution status. Daemon-only histories are excluded. |
92
92
  | Pi | `~/.pi/agent/sessions/**/*.jsonl` | Imports all recorded branches, reasoning, tools, and compaction entries. Entry parent IDs describe the in-file tree; parent-session file paths are not guessed into fork/child relationships. |
93
93
  | GitHub Copilot CLI | `~/.copilot/session-state/**/events.jsonl` | Final persisted messages replace streaming mirrors. Explicit spawning-parent IDs form child links. Only committed `fileEdits` records establish changed files, including recorded partial-success edits. Cloud-only sessions are excluded. |
94
94
  | Cline | Extension `tasks/*/api_conversation_history.json`; `~/.cline/data/sessions/*/*.messages.json` | Matching task metadata or `session.json` supplies workspace and lineage. Database-only metadata remains unknown. Extension snapshots can omit UI-only and pre-compaction messages. |
95
95
  | Roo Code | Extension `tasks/*/api_conversation_history.json` and `history_item.json` | Recorded task parents; partial API-conversation snapshots. XML tool requests alone do not establish successful edits. |
96
- | Kilo Code | Legacy extension task JSON | Legacy extension histories only. Current Kilo CLI and migrated database histories are excluded. Same snapshot limitations as Roo Code. |
96
+ | Kilo Code | Extension task JSON | Same snapshot limitations as Roo Code. Choose the separate **Kilo CLI** source for `~/.local/share/kilo/kilo.db`. |
97
97
  | Continue | `~/.continue/sessions/*.json` and session index | IDE/CLI conversation snapshots and recorded tool messages. No inferred relationships or edit evidence. Missing message times stay unknown; attachments and transient tool UI state are omitted. |
98
98
 
99
99
  Source roots respect `CLAUDE_CONFIG_DIR` and `CODEX_HOME`. `SESSIONGRAPH_SERVICE_FILE` selects a local OpenCode service registration. Adapters never read authentication files or execute source configuration, hooks, or agents. Source formats can evolve: unsupported history is disclosed rather than fabricated.
100
100
 
101
+ See [extended source coverage](import-coverage.md) for all additional harness locations, per-source overrides, the pinned Tokscale comparison, and explicit usage-only limitations. New sources are not selected automatically.
102
+
103
+ Claude Code's local VS Code extension uses the same transcript directory as its CLI: `~/.claude/projects` (`%USERPROFILE%\.claude\projects` on Windows), or `projects` under `CLAUDE_CONFIG_DIR`. A separate CLI installation is not required for import. History in WSL, SSH hosts, or dev containers must be accessible in the environment running SessionGraph.
104
+
101
105
  ### Additional source locations
102
106
 
103
107
  - Gemini respects `GEMINI_CLI_HOME` as a replacement home directory. `SESSIONGRAPH_GEMINI_HOME` selects a `.gemini`-style directory containing `tmp/`.
@@ -115,7 +119,7 @@ These file adapters read stable snapshots bounded to 32 MB combined, 50,000 reco
115
119
  - IDE exports are marked partial because tool results and pre-compaction context may be absent. Recorded message IDs are preserved; otherwise stable byte offsets or ordered blob occurrences retain repeated identical turns. Images and unsupported content are disclosed as omitted. A broken primary store never downgrades saved history to a shorter transcript export.
116
120
  - Only recorded message timestamps and Cursor's leading timezone-qualified timestamp envelope place message dots. Missing timestamps remain unknown. When session creation is unavailable, placement uses the first recorded message or the file timestamp, with a coverage note.
117
121
  - Working directories come from recorded metadata or an unambiguous forward match against Cursor's workspace folder metadata. Encoded project names are never reverse-decoded into guessed paths. Choose a folder in the launcher when the original directory is unknown.
118
- - Store reads copy the database and its WAL into a temporary private directory, verify that the source stayed stable, and open only the copy with read-only SQLite. Temporary copies are removed after reading. Limits: 20,000 histories, 256 MB per database/WAL, 2 MB per blob, and 64 MB / 50,000 nodes / 16 million text characters per store conversation. Changing or unsupported stores preserve previously saved history.
122
+ - Store reads copy the database and its WAL into a temporary private directory, verify that the source stayed stable, and open only the copy with read-only SQLite. CLI/ACP limits: 20,000 histories, 256 MB per database/WAL, 2 MB per blob, and 64 MB / 50,000 nodes / 16 million text characters per conversation. Legacy Composer permits an 8 GB database/WAL, 32 MB Composer record, 8 MB bubble, and 64 MB / 50,000 bubbles per conversation. At most two legacy/database snapshots are cached; copies are removed on eviction or process exit. Changing or unsupported stores preserve previously saved history.
119
123
  - Override discovery with `SESSIONGRAPH_CURSOR_HOME` (the `.cursor` directory) and `SESSIONGRAPH_CURSOR_USER_DATA_DIR` (Cursor's application data directory, containing `User/workspaceStorage`). These are SessionGraph settings. Custom-root histories use saved-context continuation.
120
124
 
121
125
  ## Local storage and privacy
@@ -142,13 +146,17 @@ Desktop update checks and downloads contact GitHub without session content; npm
142
146
  - Full-viewport, antialiased Three.js map with floating, draggable, dismissible cards. **H** hides/restores cards; **F** fits the view.
143
147
  - Source badges distinguish harnesses in the list, inspector, tooltips, and search. Filter by source, project, directory/worktree, date, or children. The default window is **All time**; archived sessions are hidden unless enabled in **Settings → Interface → Show archived sessions**. Previously saved choices remain honored.
144
148
  - Selecting a session dims surrounding nodes, halos, and trails. Click or tap empty map space to clear selection and restore the full map brightness without moving the camera. Drags and right-clicks keep the selection; **Settings → Graphics → Focus dimming** controls the dimming effect.
145
- - Time runs left to right. Each session orb appears at creation, travels with the playback frontier, and leaves its trail behind. It rests at the latest saved message timestamp. Missing message timestamps leave the orb at creation; metadata update times are not substituted. Directory colors group sessions; only distinct fork and child edges represent ancestry. Date filters use session creation; the list and histogram follow session endpoints.
146
- - Click a session to center its orb and recent message trail together in the map area between your panels. Message dots match the session color; small, dim icons distinguish user and assistant messages. Icons are collision-culled and bounded to 64; all plotted dots remain interactive. The latest message uses the session sphere instead of an overlapping dot and remains readable in the explorer. Markers load lazily, capped at the latest 2,000 timed conversation messages within the lifetime, plus a selected older message. Counts disclose untimed and out-of-lifetime messages.
149
+ - Time runs left to right. Each session orb appears at creation and travels with the playback frontier, leaving a tapered shooting-star trail and a subtle spiral particle wake. The trail ends at the latest saved message timestamp; the sphere sits just beyond it so message dots stay visible. Missing message timestamps leave the endpoint at creation; metadata update times are not substituted. Full directory paths share one colored stream across harnesses; unknown directories fall back to harness-scoped project IDs. Distinct directories and worktrees stay separate. Curved fork and child links retain recorded ancestry and attachment times. Date filters use session creation; the list and histogram follow session endpoints.
150
+ - Click a session for a close-up of its orb; click a message dot for a tighter close-up of that message. Focus preserves your current viewing side and angle; zoom and pinch remain unrestricted. All saved timed conversation markers load on selection, including the final message. File history scans automatically in cancellable batches. Bright white message dots follow the same subtle spiral as the comet trail, retaining their recorded X/time positions; small icons distinguish user and assistant messages. Icons are collision-culled and bounded to 64; all plotted dots remain interactive. Untimed and out-of-lifetime messages remain available in the message explorer, which loads message bodies on demand.
147
151
  - Hover a marker to preview its message. Click to focus that marker and open message details below the session card, keeping the map interactive. **Previous / Next** and **← / → / ↑ / ↓** step through user and assistant messages and focus their recorded positions. Untimed messages remain readable without inventing a map location. Escape closes message details first; arrow keys on session cards or the map navigate sessions when message details are closed. Form controls and panel-drag handles retain their own arrow-key behavior.
148
152
  - **Browse messages** opens 60-message pages of the conversation. Details include message text, recorded time, and source provenance. Tool calls, reasoning, and other detailed events are excluded from the dots and message browser. Underlying imported history and file evidence remain saved. Source order is preserved even without timestamps. Nearby markers can overlap; step through them with the navigation controls.
149
153
  - Older libraries migrate to schema v4 using their existing saved messages. Reconstructed events are labeled partial; **Refresh sessions** enriches them with structured source events. The explorer asks you to reload if an import changes its snapshot while browsing.
150
154
  - Click a session for changed-file satellites and source evidence. File details load in 120-message batches; the map displays at most 80 files. Evidence describes historical edits, not today's Git diff.
151
- - **Play** follows newly appearing clusters with a half-turn around the graph and a closing pullback (30 seconds at 1×). Dragging, zooming, scrubbing, fitting, or opening a dialog pauses playback. 2D pans without orbiting; reduced motion keeps the camera still.
155
+ - **Play** follows newly appearing clusters with close camera framing, a half-turn around the graph, and a closing pullback (15 seconds at 1×). It then makes a full 360° overview orbit over 5 seconds, slowing gently over the final 1.75 seconds and returning to the exact view where the timeline finished. A 1-second final hold precedes UI restoration: 21 seconds total at 1×. The graph sits above the date and counters; shared animations use the same framing and ending. Orbs appear with a brief, soft sparkle; their trails fade in afterward. Glowing gold forks curve, while lavender subagent links stay straight; both draw from parent to child at the child's recorded start. Rewinding resets their entrances. Recorded token usage has a moderate, logarithmic effect on orb size, capped so large sessions stay readable. Dragging, zooming, scrubbing, fitting, or opening a dialog pauses playback. 2D pans without orbiting; reduced motion keeps the camera still and reveals without animation.
156
+ - Playback hides the other panels and controls, leaving a borderless timeline, a compact approximate date, large **Sessions** and **Burnt tokens** counters, and a prominent **Share SessionGraph** button. The date shows month and year for histories spanning at least 90 days, and includes the day for shorter ranges; shared animations use the same date. Session counts include every filtered session as its orb appears, regardless of token coverage. Pausing or pressing **Esc** restores the panels immediately. Recorded token totals from OpenCode and Continue accumulate when each session reaches its latest saved message; cache is included where reported. Token counts skip missing/unsupported usage and include totals without message timestamps only at the end. Missing usage displays **—**; no usage is estimated between messages.
157
+ - **Share SessionGraph** offers **GIF** and **MP4 video**, rendered locally at 960×600 and 30 fps: 15 seconds of playback, a 5-second overview orbit, and a 1-second ending hold (630 frames; GIF timing alternates 30/40 ms). MP4 uses H.264 with fixed frame timestamps and requires WebCodecs encoding support; GIF remains available on other browsers. Each directory stream gets a unique random two-word alias such as **Project Cosmic Wombat**, shared by both formats while the dialog is open. A separate export model excludes original names, paths, session titles, native IDs, messages, and file details. Previews and saved animations contain the map, aliases, timeline, date, session count, and known burnt-token totals. Switching formats cancels unfinished rendering; completed formats stay ready until the dialog closes. Cancel releases rendering resources.
158
+ - **Save GIF / Save MP4** opens a file picker in the desktop app and supporting browsers; other browsers start a download with visible feedback. **Share…** opens system file sharing when supported, or a tray with save, caption-copy, and X options. **Share in X** opens a draft; attach the saved animation there. Rendering stays local, and sharing happens only through your chosen destination.
159
+ - Exports use gentler, tighter glow. GIF adds precise color mapping with subtle shadow dithering to reduce banded halos in its limited palette; MP4 preserves smoother gradients and more colors.
152
160
  - The timeline's calendar offers a styled range picker with presets, month/year navigation, typed ISO dates, and keyboard navigation. Date boundaries are inclusive in your local timezone. Select menus share keyboard/typeahead behavior and styling across filters, settings, search, and the launcher.
153
161
  - **Open session** lets you choose one of eight CLI destinations and a working directory. See cross-harness continuation below.
154
162
  - Unknown model/cost/token fields stay unknown. Session selection is encoded in a local permalink.
@@ -159,7 +167,7 @@ Open **Settings** using the gear button. Changes apply live and persist on this
159
167
 
160
168
  - **Interface:** 2D/3D, system/on/off motion, list density, archived-session visibility, panel transparency, and reset panel positions.
161
169
  - **Sound:** procedural interaction tones, volume, chime preview, and mute. Only control interactions produce sound; there is no ambient audio. The speaker button mutes feedback quickly; no audio is downloaded.
162
- - **Graphics:** performance/balanced/high rendering, glow, node size, stars, labels, and focus dimming.
170
+ - **Graphics:** performance/balanced/high rendering, glow, node size, stars, labels, and focus dimming. Balanced and high retain antialiasing and bloom with bounded high-DPI buffers; the soft bloom pyramid uses a lower resolution to reduce GPU work.
163
171
  - **Trails & playback:** all/selected/hidden lifetime trails, brightness, decorative flow and speed, relationship links, message dots, and 0.25×–3× playback. Flow respects reduced motion and never changes message timestamps or saved trail endpoints.
164
172
 
165
173
  **Restore defaults** resets these preferences; they are saved in the local library, with an appearance cache in browser/WebView local storage.
@@ -187,7 +195,7 @@ Press **/** or **⌘/Ctrl+K**. MiniSearch runs in a worker with fuzzy, accent-in
187
195
  - Search documents and pagination checkpoints are saved incrementally in **SQLite**, shared by the browser and desktop builds. Reloading restores them locally and resumes unfinished indexing. Previous IndexedDB caches are retired after SQLite is reachable.
188
196
  - **Conversations** pauses/resumes indexing. **Filters → Clear saved index** clears only search checkpoints, preserving imported sessions; enabling Conversations rebuilds from SQLite without rereading the source apps.
189
197
  - Indexing is bounded: 24 million characters overall, at most 48,000 per session, up to eight 60-message pages. Preview pages cap text at 64,000 characters and individual strings at 8,000. Coverage indicators disclose sampling and partial histories. The imported SQLite messages can contain more history than the searchable sample.
190
- - Imports are capped at 50,000 normalized messages, 16 million text/payload characters, or 2,000 pages per session. Structured event payloads are additionally bounded to 128,000 characters per message, and the timeline table to 200,000 items / 32 MB per session. Claude SDK reads are limited to 128 MB transcript files; Codex streams bounded lines. Limits are disclosed in history coverage.
198
+ - Imports are capped at 50,000 normalized messages, 16 million text/payload characters, or 2,000 pages per session. Structured event payloads are additionally bounded to 128,000 characters per message, and the timeline table to 200,000 items / 32 MB per session. Claude reads are limited to 128 MB / 200,000 source records per transcript; Codex streams bounded lines. Incomplete imports are labeled **Partial history**.
191
199
 
192
200
  ## Architecture / adding sources
193
201
 
@@ -0,0 +1,74 @@
1
+ # Extended import coverage
2
+
3
+ The comparison uses [Tokscale at `8d9b509`](https://github.com/junhoyeo/tokscale/tree/8d9b509c4d719f3385e3c2464b770dc5257cb354), especially its scanner and session parsers. Tokscale is a format reference, not a runtime dependency. Its usage inventory includes providers, account aggregates, and opaque metadata; those are not equivalent to conversation history.
4
+
5
+ The source picker includes the independent harnesses from that inventory. **Metadata only** imports a native session without conversation messages. **Detection only** explains why an available usage source cannot be imported and creates no sessions. Other sources import the recognized conversation/event formats below; this is not a guarantee of every historical version or complete pre-compaction context. The existing core sources are documented in the [guide](guide.md#source-coverage).
6
+
7
+ ## Local conversation formats
8
+
9
+ Paths below use `~` for the user's home. XDG data/config locations respect their environment overrides. Application-data paths use Application Support on macOS, APPDATA on Windows, and XDG config on Linux unless noted.
10
+
11
+ | Source ID / display name | Default local input | Coverage |
12
+ | --- | --- | --- |
13
+ | `prime-agent` / Prime Agent | `~/.prime/agent/{sessions,session-artifacts}/` | Pi-format session/message entries; explicit native IDs; child artifact history without guessed ancestry. |
14
+ | `omp` / Oh My Pi | `~/.omp/agent/sessions/` | Pi-format entries, reasoning, tools, compaction and branch events. |
15
+ | `senpi` / Senpi / OmO Native | `~/.senpi/agent/sessions/`, `~/.omo/agent/sessions/` | Pi-format entries. Project-local task children need an explicit history directory override. |
16
+ | `kimchi` / Kimchi | `~/.config/kimchi/harness/sessions/` | Pi-format entries. |
17
+ | `gajae` / Gajae-Code | `~/.gjc/agent/sessions/`, XDG `gjc/sessions/` | Pi-format entries. |
18
+ | `openclaw` / OpenClaw | `~/.openclaw/agents/*/{sessions/,agent/openclaw-agent.sqlite}`; `.clawdbot`, `.moltbot`, `.moldbot` equivalents | SQLite transcript events take precedence over overlapping JSONL/zstd exports. Rollover and event-parent links do not imply ancestry. Non-message SQLite events are currently omitted. |
19
+ | `hermes` / Hermes Agent | `~/.hermes/state.db`, `profiles/*/state.db` | Native messages and retained summaries. Only `source=subagent` establishes a child link; `_branched_from` establishes a fork. Compression/reset parents are not ancestry. |
20
+ | `amp` / Amp | XDG `amp/threads/`, Tokscale `amp-cache/threads/` | Local/exported thread messages. No sync is invoked. Usage-ledger times are not assigned to prompts. |
21
+ | `droid` / Factory Droid | `~/.factory/sessions/` | Saved conversation envelopes; excludes usage apportionment. |
22
+ | `codebuff`, `freebuff` / Codebuff, Freebuff | XDG config `manicode`, `manicode-dev`, `manicode-staging` chat messages | A positive `base2-free` root-agent marker assigns Freebuff; shared storage is not imported into both sources. No text-based token estimates. |
23
+ | `kimi` / Kimi CLI / Code | `~/.kimi/sessions/`, `~/.kimi-code/sessions/` | `context.jsonl` and optional wire-log session date. Untimed context stays untimed; pre-compaction and wire-only content may be absent. Desktop Kimi Work discovery is not implemented. |
24
+ | `grok` / Grok Build | `~/.grok/sessions/**/updates.jsonl` | ACP text chunks and basic events. Adjacent chunks are grouped; complete turn/tool reconstruction is unavailable. |
25
+ | `jcode` / Jcode | `~/.jcode/sessions/session_*.json` with `.journal.jsonl` | Snapshots plus append-message journals, deduplicated by message ID. |
26
+ | `cherry-studio` / Cherry Studio | Application `CherryStudio/{Data/Agents/.claude,.claude}/projects/` | Agent/Claude-mode transcripts only. Built-in chat `ai_usage_record` ledgers lack conversation text. |
27
+ | `command-code` / Command Code | `~/.commandcode/projects/` | Claude-style conversation envelopes. |
28
+ | `zcode` / ZCode | `~/.zcode/projects/` | Legacy transcript envelopes; v2 usage database is not a conversation import. |
29
+ | `codebuddy` / CodeBuddy | `~/.codebuddy/projects/` | Transcript envelopes; extension log variants are not yet decoded. |
30
+ | `workbuddy` / WorkBuddy | `~/.workbuddy-ai/projects/`, `~/.workbuddy/projects/` | Transcript envelopes; SQLite fallback is not yet decoded. |
31
+ | `proma` / Proma | `~/.proma/{agent-sessions,sdk-config/sessions,sdk-config/projects}/` and `.proma-dev` equivalents | Native Pi and legacy Claude envelopes. Matching native session IDs deduplicate copies. UI-journal/native-index reconciliation is not implemented. |
32
+ | `deepseek-harness` / DeepSeek Harness | `~/.dsh/sessions/**/session[.vN].jsonl[.zstd]` | Final saved message records. Streaming attempts and billing-only records are not turns. |
33
+ | `aside` / Aside | `~/.aside/u/*/sessions/*/messages.jsonl` | Conversation envelopes, identity scoped by account and native session. |
34
+ | `vibe` / Mistral Vibe | `~/.vibe/logs/session/*/{meta.json,messages.jsonl}` and legacy JSON | Saved context and metadata; no spreading cumulative token totals over turns. |
35
+ | `goose` / Goose | XDG/application `goose/sessions/sessions.db`, legacy `Block/goose` equivalents | Saved conversation rows. Unsupported content variants remain partial. |
36
+ | `zed` / Zed Agent | XDG `zed/threads/threads.db`; macOS Application `Zed/threads/threads.db`; Windows LOCALAPPDATA equivalent | JSON/zstd native thread blobs and externally tagged messages. Message times are unavailable. Imported threads are excluded; external ACP stores are separate. |
37
+ | `devin` / Devin CLI | XDG `devin/cli/sessions.db` | Native message nodes including retained in-session branches; node-parent edges are not session ancestry. |
38
+ | `devin-desktop` / Devin Desktop | Application `Devin/User/acp-events/` | Saved ACP notifications. Titles never merge desktop and CLI sessions. |
39
+ | `crush` / Crush | XDG `crush/projects.json` → registered project `crush.db` | Saved message parts and recorded session cost; unreliable token totals stay unknown. No recursive project scan. |
40
+ | `octofriend` / Octofriend | `~/.local/share/octofriend/sqlite.db` | Native trees, nodes and `octo-llm-ir/v1` messages. Nested subagent trajectories and unfamiliar IR variants are partial. |
41
+ | `kilo-cli` / Kilo CLI | XDG `kilo/kilo.db` | Native session/message/part tables, separate from extension Kilo Code. |
42
+ | `mimo-code`, `mimo-desktop` / MiMo Code, Xiaomi MiMo AI | XDG `mimocode/mimocode.db` | Native session/message/part tables. `session.version` starting `desktop-` selects desktop; shared records count once. |
43
+ | `unsloth` / Unsloth Studio | `~/.unsloth/studio/studio.db` | Chat threads and content, including explicit thread forks. Content-free API usage and training metrics are excluded. |
44
+ | `kiro` / Kiro | `~/.kiro/sessions/`; application/XDG `kiro-cli/data.sqlite3` | CLI header/JSONL, IDE `sess_*/session.json` plus messages, and `conversations_v2` tagged turns. Legacy IDE execution/chat snapshots are not yet decoded. |
45
+ | `mux` / Mux | `~/.mux/sessions/*/{chat-archive.jsonl,chat.jsonl}` | Durable archive followed by active chat, deduplicated by message ID. In-flight partials and workspace ancestry are unavailable. |
46
+ | `minimax-code` / MiniMax Code | Tokscale `headless/mcode/*.jsonl` | Previously captured messages with one explicit session identity. Capture-only usage without message content is not imported. No harness command is executed. |
47
+
48
+ ## Partial event and metadata formats
49
+
50
+ | Source | Input | Coverage |
51
+ | --- | --- | --- |
52
+ | `muse` / Muse Code | XDG `muse/sessions/**/session.jsonl` | Recorded runtime events and recognized message envelopes; microsecond clocks normalized. Unknown bodies remain partial. |
53
+ | `junie` / Junie | `~/.junie/sessions/*/events.jsonl` | Basic agent events; state snapshots and unknown bodies omitted. Events are not counted as user prompts. |
54
+ | `augment` / Augment Code | `~/.augment/sessions/*.json` | Exchange completion records and available response text; typed response nodes and absent prompts are not reconstructed. |
55
+ | `opencodereview` / OpenCodeReview | `~/.opencodereview/sessions/**/*.jsonl` | Saved review response events; usage-only payloads do not establish prompts. |
56
+ | `fx` / Fx | `~/.fx/sessions/*/{usage-v2.json,session.json}` | **Metadata only.** Native session identity/date/workspace; usage snapshots contain no conversation. |
57
+ | `antigravity` / Antigravity | Tokscale `antigravity-cache/sessions/*.jsonl` | **Metadata only.** Native session identity; earliest recorded usage date places it. No sync or local RPC. |
58
+ | `antigravity-cli`, `antigravity-extension` | `~/.gemini/{antigravity-cli,antigravity}/conversations/*.db` | **Metadata only.** Bounded protobuf trajectory creation/workspace metadata. Conversation protobufs remain opaque; unknown timestamps are not guessed. |
59
+
60
+ **Detection only:** `reasonix` (`~/.reasonix/stats/`), `trae` (Tokscale `trae-cache/sessions/`), `warp` (Tokscale `warp-cache/`), `lm-studio` (`~/.lmstudio/server-logs/`), and `hindsight` (`~/.hindsight/usage/`). These compared inputs contain request/account usage rather than supported native conversation histories. Reasonix's separate transcripts are not yet supported. Detection produces an explanation and no synthetic sessions.
61
+
62
+ **Provider attribution:** Sakana Fugu rollouts remain Codex sessions. Synthetic remains the provider of its originating harness; Octofriend has its own source. They do not create duplicate source identities.
63
+
64
+ ## Overrides, bounds, and retention
65
+
66
+ Every additional source accepts `SESSIONGRAPH_<SOURCE_ID_UPPERCASE_WITH_UNDERSCORES>_HISTORY_DIR`. For example, `SESSIONGRAPH_HERMES_HISTORY_DIR` points to a directory containing `state.db`; `SESSIONGRAPH_MUX_HISTORY_DIR` contains session directories with `chat.jsonl`. Directory layout matchers still apply. Core-source overrides remain documented in the guide.
67
+
68
+ Defaults also honor the implemented native home variables: `HERMES_HOME`, `OPENCLAW_STATE_DIR`, `FACTORY_HOME`, `KIMI_HOME`, `KIMI_CODE_HOME`, `GROK_HOME`, `JCODE_HOME`, `DSH_HOME`, `VIBE_HOME`, `MUX_ROOT`, `UNSLOTH_STUDIO_HOME`, `GOOSE_PATH_ROOT`, `CRUSH_GLOBAL_DATA`, `CODEBUFF_DATA_DIR`, `FREEBUFF_DATA_DIR`, Pi-family home/session overrides, `GEMINI_CLI_HOME`, `TOKSCALE_CONFIG_DIR`, and `TOKSCALE_HEADLESS_DIR`. Nothing reads or executes source configuration or credentials.
69
+
70
+ File imports are bounded to 32 MB combined expanded data and 50,000 messages. SQLite imports query private DB/WAL copies (8 GB maximum per database or WAL), with 32 MB fields and 64 MB aggregate query output. Nested queries and expanded blobs share a 64 MB / 50,000-record session budget. Oversized or unsupported sessions retain previously saved history. Database revisions include WAL changes; source changes during copying/reading abort the read. At most two private copies are retained and cleaned on eviction/exit. Failed authoritative database representations block fallback to stale exports.
71
+
72
+ Missing message timestamps remain unknown. Native dates place database sessions; undated database histories are skipped with a warning. File histories can fall back to file dates and disclose this. Unsupported message blocks, binary attachments, missing tools, and absent snapshots remain partial. Token counts are never estimated from text; usage aggregates are not converted into conversations. No new harness is enabled automatically, and continuing a session remains an explicit user action through supported launch destinations.
73
+
74
+ Fixture tests cover each parser family, registry/display-name consistency, duplicate representations, compressed archives, legacy Cursor bubbles, immutable DB/WAL reads, source changes, partial events, metadata-only sources, and saved-history retention. Native writers inspected in addition to Tokscale include Hermes, Goose, Zed, Octofriend, Mux, and Unsloth.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sessiongraph",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -25,11 +25,11 @@
25
25
  "README.md"
26
26
  ],
27
27
  "optionalDependencies": {
28
- "sessiongraph-app-darwin-arm64": "1.0.1",
29
- "sessiongraph-app-darwin-x64": "1.0.1",
30
- "sessiongraph-app-linux-arm64": "1.0.1",
31
- "sessiongraph-app-linux-x64": "1.0.1",
32
- "sessiongraph-app-win32-x64": "1.0.1"
28
+ "sessiongraph-app-darwin-arm64": "1.0.3",
29
+ "sessiongraph-app-darwin-x64": "1.0.3",
30
+ "sessiongraph-app-linux-arm64": "1.0.3",
31
+ "sessiongraph-app-linux-x64": "1.0.3",
32
+ "sessiongraph-app-win32-x64": "1.0.3"
33
33
  },
34
34
  "type": "module",
35
35
  "engines": {
@@ -54,6 +54,8 @@
54
54
  "@opencode/client": "^2.2.1",
55
55
  "@tauri-apps/api": "^2.12.4",
56
56
  "@tauri-apps/cli": "^2.12.4",
57
+ "@tauri-apps/plugin-dialog": "^2.8.4",
58
+ "@tauri-apps/plugin-fs": "^2.7.1",
57
59
  "@tauri-apps/plugin-process": "^2.4.0",
58
60
  "@tauri-apps/plugin-updater": "^2.14.1",
59
61
  "@types/node": "^24.0.0",
@@ -62,7 +64,9 @@
62
64
  "@zag-js/select": "^1.47.0",
63
65
  "@zag-js/vanilla": "^1.47.0",
64
66
  "esbuild": "^0.28.2",
67
+ "gifenc": "1.0.3",
65
68
  "lucide": "^0.468.0",
69
+ "mediabunny": "^1.65.0",
66
70
  "minisearch": "^7.2.0",
67
71
  "three": "^0.180.0",
68
72
  "tsx": "^4.23.15",
@@ -70,5 +74,5 @@
70
74
  "vite": "^7.2.0"
71
75
  },
72
76
  "packageManager": "pnpm@11.10.0",
73
- "sessionGraphCommit": "bce4ddd536316e63c4e7ed5bb8e87281e1712cd0"
77
+ "sessionGraphCommit": "0bca44399a6460135ea5b86d158b01779fe2d0bb"
74
78
  }