sessiongraph 0.1.9 → 1.0.1

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/PRIVACY.md CHANGED
@@ -17,7 +17,7 @@
17
17
  | --- | --- | --- |
18
18
  | Browse, search, and visualize saved history | Authenticated backend on `127.0.0.1` | None |
19
19
  | Import OpenCode history | OpenCode's authenticated loopback API; OpenCode must be running locally | None |
20
- | Import Claude Code, Codex, or Cursor history | Local history reads | None |
20
+ | Import Claude Code, Codex, Cursor, Gemini CLI, Qwen Code, Pi, GitHub Copilot CLI, Cline, Roo Code, Kilo Code, or Continue history | Local history reads within the [documented source coverage](docs/guide.md#source-coverage) | None |
21
21
  | Check for or download desktop updates | GitHub Releases and its download infrastructure | None |
22
22
  | Install or update through npm | npm registry and its download infrastructure | None |
23
23
  | Open an external link | Your browser opens the destination you choose | The destination's normal browser/privacy behavior applies |
package/README.md CHANGED
@@ -7,11 +7,14 @@
7
7
  <a href="docs/releases.md">Releases</a>
8
8
  </p>
9
9
 
10
- [![SessionGraph in action: playback, search, messages, and settings using synthetic sessions](docs/sessiongraph-demo.gif)](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-demo.mp4)
10
+ [![SessionGraph in action: zoom, playback, messages, search, and twelve sources using synthetic sessions](docs/sessiongraph-demo.gif)](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-demo.mp4)
11
11
 
12
- Explore **OpenCode, Claude Code, Codex, and Cursor** in one local-first app.
13
- Search conversations, explore clickable messages and tool calls, inspect changed files, and continue in another harness.
14
- Hover to preview messages, click to focus, and tune the glowing map, trails, and click sounds in Settings.
12
+ [Watch the 60 FPS demo →](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-demo.mp4)
13
+
14
+ Explore **12 coding agents** in one local-first app: OpenCode, Claude Code, Codex, Cursor, Gemini CLI, Qwen Code, Pi, GitHub Copilot CLI, Cline, Roo Code, Kilo Code, and Continue.
15
+ Search conversations, explore user and assistant messages, inspect changed files, and continue in another harness.
16
+ Hover to preview messages, click to focus, and click empty space to deselect. Tune the glowing map, trails, and click sounds in Settings.
17
+ During playback, session orbs travel through time, leaving trails behind them. Message dots match their session's color.
15
18
  Importing, searching, and visualization stay on your computer.
16
19
 
17
20
  ### Your history stays local
@@ -36,7 +39,7 @@ Download the latest desktop app — no Node.js required:
36
39
 
37
40
  Desktop updates appear as a small **Update** pill. Download and verify, then click **Restart** when you're ready.
38
41
 
39
- The npm launcher requires **Node.js 24+** (registry publishing is being finalized; use the downloads above for now):
42
+ The npm launcher requires **Node.js 24+**:
40
43
 
41
44
  ```sh
42
45
  npx sessiongraph
@@ -55,12 +58,23 @@ npx sessiongraph --browser
55
58
  | <img src="public/sources/claude.svg" width="14" alt=""/> **Claude Code** | Local projects, worktrees, and subagents via SDK | Native resume / saved-context handoff |
56
59
  | <img src="public/sources/openai.svg" width="14" alt=""/> **Codex** | Active and archived local rollouts | Native resume / saved-context handoff |
57
60
  | <img src="public/sources/cursor.svg" width="14" alt=""/> **Cursor** | IDE transcripts, CLI and ACP stores | CLI resume where supported / saved-context handoff |
61
+ | <img src="public/sources/gemini.svg" width="14" alt=""/> **Gemini CLI** | Local JSON and append-only JSONL chats | Native resume / saved-context handoff |
62
+ | <img src="public/sources/qwen.svg" width="14" alt=""/> **Qwen Code** | Local project chat records | Native resume / saved-context handoff |
63
+ | <img src="public/sources/pi.svg" width="14" alt=""/> **Pi** | Local JSONL session trees | Native resume / saved-context handoff |
64
+ | <img src="public/sources/copilot.svg" width="14" alt=""/> **GitHub Copilot CLI** | Local persisted session events | Native resume / saved-context handoff |
65
+ | <img src="public/sources/cline.svg" width="14" alt=""/> **Cline** | Extension tasks and CLI/SDK message snapshots | Saved-context handoff to a supported CLI |
66
+ | <img src="public/sources/roo.svg" width="14" alt=""/> **Roo Code** | Local extension task histories | Saved-context handoff to a supported CLI |
67
+ | <img src="public/sources/kilo.svg" width="14" alt=""/> **Kilo Code** | Legacy extension task JSON; current CLI/migrated databases excluded | Saved-context handoff to a supported CLI |
68
+ | <img src="public/sources/continue.svg" width="14" alt=""/> **Continue** | Local IDE and CLI session JSON | Saved-context handoff to a supported CLI |
58
69
 
59
70
  Import is read-only. Saved sessions remain available when a harness is offline. [Coverage and limitations →](docs/guide.md#source-coverage)
60
71
 
61
72
  Choose harnesses in **Settings → Sources** or **Manage sources** next to the source filter. **Auto-import is on by default**: SessionGraph checks for new and changed sessions on startup, when you return, and every minute while visible. Turn it off in **Settings → Sources → Auto-import sessions**. **Refresh sessions** also works manually.
62
73
 
63
74
  Your time range, source/project/directory filters, archived and child-session toggles, and appearance preferences are saved with the local library and restored after restarting.
75
+ The default range is **All time**, with archived sessions hidden. Enable them in **Settings → Interface → Show archived sessions**.
76
+
77
+ Manual and automatic refresh preserve your map position, zoom, and selection. New history keeps existing layout positions stable; use **Fit view (F)** to reframe the whole map.
64
78
 
65
79
  ### Develop
66
80
 
@@ -1 +1 @@
1
- import{i as a,R as i,C as o}from"./index-0ZTrNFWY.js";class l extends i{constructor(e){super(e.rid),this.available=!0,this.currentVersion=e.currentVersion,this.version=e.version,this.date=e.date,this.body=e.body,this.rawJson=e.rawJson}async download(e,n){const d=new o;e&&(d.onmessage=e);const r=await a("plugin:updater|download",{onEvent:d,rid:this.rid,...n,headers:t(n?.headers)});await this.downloadedBytes?.close().catch(()=>{}),this.downloadedBytes=new i(r)}async install(e){if(!this.downloadedBytes)throw new Error("Update.install called before Update.download");await a("plugin:updater|install",{updateRid:this.rid,bytesRid:this.downloadedBytes.rid,...e}),this.downloadedBytes=void 0}async downloadAndInstall(e,n){const d=new o;e&&(d.onmessage=e),await a("plugin:updater|download_and_install",{onEvent:d,rid:this.rid,...n,headers:t(n?.headers)})}async close(){await this.downloadedBytes?.close(),await super.close()}}async function w(s){const e=await a("plugin:updater|check",{...s,headers:t(s?.headers)});return e?new l(e):null}function t(s){return s?Array.from(new Headers(s).entries()):void 0}export{l as Update,w as check};
1
+ import{f as a,R as i,C as o}from"./index-C9rv5Uuu.js";class l extends i{constructor(e){super(e.rid),this.available=!0,this.currentVersion=e.currentVersion,this.version=e.version,this.date=e.date,this.body=e.body,this.rawJson=e.rawJson}async download(e,n){const d=new o;e&&(d.onmessage=e);const r=await a("plugin:updater|download",{onEvent:d,rid:this.rid,...n,headers:t(n?.headers)});await this.downloadedBytes?.close().catch(()=>{}),this.downloadedBytes=new i(r)}async install(e){if(!this.downloadedBytes)throw new Error("Update.install called before Update.download");await a("plugin:updater|install",{updateRid:this.rid,bytesRid:this.downloadedBytes.rid,...e}),this.downloadedBytes=void 0}async downloadAndInstall(e,n){const d=new o;e&&(d.onmessage=e),await a("plugin:updater|download_and_install",{onEvent:d,rid:this.rid,...n,headers:t(n?.headers)})}async close(){await this.downloadedBytes?.close(),await super.close()}}async function w(s){const e=await a("plugin:updater|check",{...s,headers:t(s?.headers)});return e?new l(e):null}function t(s){return s?Array.from(new Headers(s).entries()):void 0}export{l as Update,w as check};