sessiongraph 1.0.1 → 1.0.2

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
@@ -84,7 +84,7 @@ 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. |
87
+ | Claude Code | SDK conversation-chain parsing with read-only local transcript discovery | CLI and VS Code extension sessions, including IDE-prefixed prompts omitted by the SDK listing. Reads the discovered file directly, including Windows paths and moved workspaces; 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
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
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. |
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. |
@@ -98,6 +98,8 @@ Onboarding closes automatically after a successful import and library refresh. I
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
+ 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.
102
+
101
103
  ### Additional source locations
102
104
 
103
105
  - Gemini respects `GEMINI_CLI_HOME` as a replacement home directory. `SESSIONGRAPH_GEMINI_HOME` selects a `.gemini`-style directory containing `tmp/`.
@@ -142,13 +144,17 @@ Desktop update checks and downloads contact GitHub without session content; npm
142
144
  - Full-viewport, antialiased Three.js map with floating, draggable, dismissible cards. **H** hides/restores cards; **F** fits the view.
143
145
  - 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
146
  - 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.
147
+ - 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.
148
+ - 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
149
  - 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
150
  - **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
151
  - 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
152
  - 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.
153
+ - **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.
154
+ - 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.
155
+ - **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.
156
+ - **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.
157
+ - 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
158
  - 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
159
  - **Open session** lets you choose one of eight CLI destinations and a working directory. See cross-harness continuation below.
154
160
  - Unknown model/cost/token fields stay unknown. Session selection is encoded in a local permalink.
@@ -159,7 +165,7 @@ Open **Settings** using the gear button. Changes apply live and persist on this
159
165
 
160
166
  - **Interface:** 2D/3D, system/on/off motion, list density, archived-session visibility, panel transparency, and reset panel positions.
161
167
  - **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.
168
+ - **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
169
  - **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
170
 
165
171
  **Restore defaults** resets these preferences; they are saved in the local library, with an appearance cache in browser/WebView local storage.
@@ -187,7 +193,7 @@ Press **/** or **⌘/Ctrl+K**. MiniSearch runs in a worker with fuzzy, accent-in
187
193
  - 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
194
  - **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
195
  - 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.
196
+ - 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
197
 
192
198
  ## Architecture / adding sources
193
199
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sessiongraph",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
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.2",
29
+ "sessiongraph-app-darwin-x64": "1.0.2",
30
+ "sessiongraph-app-linux-arm64": "1.0.2",
31
+ "sessiongraph-app-linux-x64": "1.0.2",
32
+ "sessiongraph-app-win32-x64": "1.0.2"
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": "c6210c490717ba6f3e7783e2e31857c0291ffb63"
74
78
  }