sessiongraph 0.0.0-stage → 0.1.9

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.
Files changed (37) hide show
  1. package/LICENSE +21 -0
  2. package/PRIVACY.md +51 -0
  3. package/README.md +76 -2
  4. package/bin/sessiongraph.mjs +43 -0
  5. package/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  6. package/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  7. package/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  8. package/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  9. package/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  10. package/dist/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  11. package/dist/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  12. package/dist/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  13. package/dist/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  14. package/dist/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  15. package/dist/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  16. package/dist/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  17. package/dist/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  18. package/dist/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  19. package/dist/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  20. package/dist/assets/index-0ZTrNFWY.js +165 -0
  21. package/dist/assets/index-7IkZaZQy.css +1 -0
  22. package/dist/assets/index-BVJmULd-.js +1 -0
  23. package/dist/assets/scene-BmLcylTN.js +49 -0
  24. package/dist/assets/three-B4kj4iLH.js +4394 -0
  25. package/dist/assets/worker-YMPBjASm.js +2 -0
  26. package/dist/favicon.svg +1 -0
  27. package/dist/index.html +19 -0
  28. package/dist/sources/NOTICE.txt +4 -0
  29. package/dist/sources/claude.svg +1 -0
  30. package/dist/sources/cursor.svg +1 -0
  31. package/dist/sources/generic.svg +1 -0
  32. package/dist/sources/openai.svg +1 -0
  33. package/dist/sources/opencode.svg +1 -0
  34. package/dist-server/server.mjs +32258 -0
  35. package/docs/guide.md +203 -0
  36. package/docs/releases.md +34 -0
  37. package/package.json +72 -4
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Alex Vilchis
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/PRIVACY.md ADDED
@@ -0,0 +1,51 @@
1
+ # Privacy and local data
2
+
3
+ **Your session content stays on your computer while you import, search, and explore it in SessionGraph.** No SessionGraph account is required. SessionGraph has no cloud sync and sends no analytics or crash reports.
4
+
5
+ ## What happens locally
6
+
7
+ - Imports read only the sources you select. Source histories are not modified, and importing does not start an agent, resume a conversation, or invoke a model.
8
+ - Auto-import is enabled by default after source selection. It checks on startup, when returning to the app, and every minute while visible. Disable it in **Settings → Sources → Auto-import sessions**; this choice is saved in the local library and survives desktop restarts. Disabling it stops future automatic checks; an import already running can finish.
9
+ - Parsing, indexing, search, and visualization run on your computer. Search does not use a remote embeddings or model service.
10
+ - Imported conversations, metadata, timeline events, file-change evidence, and search checkpoints are saved in SessionGraph's local SQLite library.
11
+ - View filters, time ranges, and appearance preferences are saved in the local SQLite library. Appearance preferences are also cached in browser/WebView local storage. Fonts and application assets are bundled.
12
+ - Saved history remains available when a source is offline. Deselecting a source stops future imports; it does not delete previously imported history. Clearing the search index preserves imported history.
13
+
14
+ ## Network access
15
+
16
+ | Action | Connection | Session content sent externally by SessionGraph |
17
+ | --- | --- | --- |
18
+ | Browse, search, and visualize saved history | Authenticated backend on `127.0.0.1` | None |
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 |
21
+ | Check for or download desktop updates | GitHub Releases and its download infrastructure | None |
22
+ | Install or update through npm | npm registry and its download infrastructure | None |
23
+ | Open an external link | Your browser opens the destination you choose | The destination's normal browser/privacy behavior applies |
24
+ | Continue a session in another harness | An explicit launch opens the selected harness | The harness may send saved context to its model provider under its own settings |
25
+
26
+ The desktop app checks for updates automatically. GitHub and npm receive ordinary request metadata, such as your public IP address, when contacted. Update requests do not include your conversations, search terms, file paths, or session identifiers. SessionGraph therefore does not promise zero internet connections.
27
+
28
+ Preparing a cross-harness continuation may write a local Markdown handoff containing saved conversation context. Preparing or copying the command does not start an agent. Running it allows the destination harness to read that context; that harness's privacy policy and configuration apply.
29
+
30
+ ## Where data is stored
31
+
32
+ New installations use:
33
+
34
+ - **macOS:** `~/Library/Application Support/SessionGraph/sessiongraph.sqlite`
35
+ - **Windows:** `%LOCALAPPDATA%/SessionGraph/sessiongraph.sqlite`
36
+ - **Linux:** `$XDG_DATA_HOME/sessiongraph/sessiongraph.sqlite`, defaulting to `~/.local/share/sessiongraph/sessiongraph.sqlite`
37
+
38
+ `SESSIONGRAPH_DATA_DIR` overrides the location. Existing Session Atlas or Atlas libraries can be reused in place; see [storage resolution](docs/guide.md#local-storage-and-privacy). SQLite may also create `-wal` and `-shm` companion files. Saved-context Markdown files live in the library directory's `handoffs/` folder.
39
+
40
+ **SessionGraph does not encrypt its database, search text, or handoff files.** Local filesystem permissions protect access where supported. Your OS account, disk encryption, device security, and backup/sync configuration affect confidentiality. SessionGraph does not control backups or the original harnesses' storage and cloud services.
41
+
42
+ Application bundles and npm packages contain application assets, not your imported library. The repository's demo images and video use synthetic sessions.
43
+
44
+ ## How to verify the behavior
45
+
46
+ - Inspect the [source adapters](server/adapters/), [local API](server/standalone.ts), [search worker](src/search/worker.ts), and [desktop updater](src/updater.ts).
47
+ - After importing a library, disconnect from the internet and browse/search it. OpenCode imports additionally require its local service, but browsing saved history does not.
48
+ - Use an OS-level network monitor or firewall to inspect both the native app and its bundled Node backend. Browser developer tools alone do not show native updater traffic. Distinguish update checks from actions that explicitly open another application.
49
+ - Compare downloaded artifacts with the release's `SHA256SUMS`. The desktop updater verifies version-bound signatures before installation. These establish artifact integrity and authenticity; they are not a privacy audit.
50
+
51
+ These statements describe SessionGraph's implemented behavior. They are not a claim of an independent security audit or protection against other software with access to your device.
package/README.md CHANGED
@@ -1,3 +1,77 @@
1
- # Temporary Holding Version
1
+ <h1 align="center">SessionGraph</h1>
2
+ <p align="center">Explore &amp; visualize all your LLM sessions</p>
3
+ <p align="center">
4
+ <a href="https://github.com/arvindell/sessiongraph/releases/latest">Download</a> ·
5
+ <a href="docs/guide.md">Documentation</a> ·
6
+ <a href="PRIVACY.md">Privacy</a> ·
7
+ <a href="docs/releases.md">Releases</a>
8
+ </p>
2
9
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
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)
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.
15
+ Importing, searching, and visualization stay on your computer.
16
+
17
+ ### Your history stays local
18
+
19
+ **No account. No cloud sync. No telemetry.** SessionGraph reads your selected local sources and keeps imported conversations and the search index on your computer. Importing and exploring history never starts an AI agent or sends your conversations to a model provider.
20
+
21
+ Desktop update checks and downloads contact GitHub without session content; npm installation contacts the npm registry. Explicitly continuing a session opens your chosen harness, which follows its own network and privacy settings. Saved history is not encrypted by SessionGraph; device access and backups affect its confidentiality.
22
+
23
+ [Read the privacy details, storage locations, and verification steps →](PRIVACY.md)
24
+
25
+ ### Install
26
+
27
+ Download the latest desktop app — no Node.js required:
28
+
29
+ | Platform | Direct downloads |
30
+ | --- | --- |
31
+ | macOS · Apple Silicon | [DMG](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-darwin-arm64.dmg) |
32
+ | macOS · Intel | [DMG](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-darwin-x64.dmg) |
33
+ | Windows · x64 | [EXE](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-win32-x64.exe) · [MSI](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-win32-x64.msi) |
34
+ | Linux · x64 | [AppImage](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-linux-x64.AppImage) · [DEB](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-linux-x64.deb) · [RPM](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-linux-x64.rpm) |
35
+ | Linux · ARM64 | [AppImage](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-linux-arm64.AppImage) · [DEB](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-linux-arm64.deb) · [RPM](https://github.com/arvindell/sessiongraph/releases/latest/download/sessiongraph-linux-arm64.rpm) |
36
+
37
+ Desktop updates appear as a small **Update** pill. Download and verify, then click **Restart** when you're ready.
38
+
39
+ The npm launcher requires **Node.js 24+** (registry publishing is being finalized; use the downloads above for now):
40
+
41
+ ```sh
42
+ npx sessiongraph
43
+ npx sessiongraph --browser
44
+ ```
45
+
46
+ - **`sessiongraph`** opens the native desktop app for your OS, with its own local backend and bundled runtime.
47
+ - **`sessiongraph --browser`** starts an authenticated localhost server and opens the same explorer in your default browser. Keep the terminal running; **Ctrl+C** stops it.
48
+ - Both use the same saved local library. Import once, explore in either mode.
49
+
50
+ ### Harness support
51
+
52
+ | Harness | Import from | Continue sessions |
53
+ | --- | --- | --- |
54
+ | <img src="public/sources/opencode.svg" width="14" alt=""/> **OpenCode** | Authenticated local API; run OpenCode when importing | Native resume / saved-context handoff |
55
+ | <img src="public/sources/claude.svg" width="14" alt=""/> **Claude Code** | Local projects, worktrees, and subagents via SDK | Native resume / saved-context handoff |
56
+ | <img src="public/sources/openai.svg" width="14" alt=""/> **Codex** | Active and archived local rollouts | Native resume / saved-context handoff |
57
+ | <img src="public/sources/cursor.svg" width="14" alt=""/> **Cursor** | IDE transcripts, CLI and ACP stores | CLI resume where supported / saved-context handoff |
58
+
59
+ Import is read-only. Saved sessions remain available when a harness is offline. [Coverage and limitations →](docs/guide.md#source-coverage)
60
+
61
+ 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
+
63
+ 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.
64
+
65
+ ### Develop
66
+
67
+ ```sh
68
+ pnpm install
69
+ portless sessiongraph pnpm dev
70
+ ```
71
+
72
+ `pnpm desktop:dev` runs the native app. `pnpm test` runs the tests.
73
+ See the [guide](docs/guide.md) for source coverage, shortcuts, storage, and building locally.
74
+
75
+ ### License
76
+
77
+ [MIT](LICENSE) © 2026 Alex Vilchis.
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ import { readFileSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { spawn } from 'node:child_process';
7
+ import { createInterface } from 'node:readline';
8
+
9
+ const require = createRequire(import.meta.url);
10
+ const root = dirname(dirname(fileURLToPath(import.meta.url)));
11
+ const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8'));
12
+ const args = new Set(process.argv.slice(2));
13
+ if (args.has('--version')) { console.log(`SessionGraph ${pkg.version}`); process.exit(0); }
14
+ if (args.has('--help')) {
15
+ console.log(`SessionGraph — Explore & visualize all your LLM sessions\n\n npx ${pkg.name} Open the desktop app\n npx ${pkg.name} --browser Open the local browser app\n\nChoose session sources on first launch. All imports and indexing stay local.`); process.exit(0);
16
+ }
17
+ if (Number(process.versions.node.split('.')[0]) < 24) { console.error('SessionGraph requires Node.js 24 or later for its launcher.'); process.exit(1); }
18
+ function open(target) {
19
+ const [file, params] = process.platform === 'darwin' ? ['open', [target]] : process.platform === 'win32' ? ['rundll32.exe', ['url.dll,FileProtocolHandler', target]] : ['xdg-open', [target]];
20
+ const child = spawn(file, params, { stdio: 'ignore', detached: true });
21
+ child.on('error', () => console.error('Could not open the application. Check your desktop environment.')); child.unref();
22
+ }
23
+ if (!args.has('--browser')) {
24
+ const name = `${pkg.name}-app-${process.platform}-${process.arch}`;
25
+ try {
26
+ const manifest = require.resolve(`${name}/package.json`);
27
+ const app = join(dirname(manifest), 'payload', process.platform === 'darwin' ? 'SessionGraph.app' : process.platform === 'win32' ? 'SessionGraph.exe' : 'SessionGraph.AppImage');
28
+ if (process.platform === 'darwin') open(app);
29
+ else { const child = spawn(app, [], { detached: true, stdio: 'ignore', env: { ...process.env, ...(process.platform === 'linux' ? { APPIMAGE_EXTRACT_AND_RUN: '1' } : {}) } }); child.on('error', (e) => console.error(`SessionGraph could not open: ${e.message}`)); child.unref(); }
30
+ } catch {
31
+ console.error(`Desktop package ${name} is not installed.\nUse npx ${pkg.name} --browser, or install the matching desktop package.\nFor a source checkout: pnpm desktop:dev`); process.exitCode = 1;
32
+ }
33
+ } else {
34
+ const child = spawn(process.execPath, [join(root, 'dist-server', 'server.mjs'), '--assets', join(root, 'dist'), '--parent-pid', String(process.pid)], { stdio: ['ignore', 'pipe', 'inherit'] });
35
+ child.on('error', (e) => { console.error(e.message); process.exitCode = 1; });
36
+ const lines = createInterface({ input: child.stdout });
37
+ lines.once('line', (line) => {
38
+ try { const { url } = JSON.parse(line); open(url); console.log('SessionGraph is open in your browser. Press Ctrl+C to close the local server.'); }
39
+ catch { console.error('SessionGraph local server did not start.'); child.kill(); }
40
+ });
41
+ child.on('exit', (code) => { process.exitCode = code || 0; });
42
+ for (const signal of ['SIGINT', 'SIGTERM']) process.on(signal, () => { child.kill(); });
43
+ }