claude-session-dashboard 0.1.0 → 0.1.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/README.md +52 -0
- package/bin/cli.mjs +2 -2
- package/dist/server/assets/{claude-path-CkuljM34.js → claude-path-on7ZBAjl.js} +2 -2
- package/dist/server/assets/{session-detail.server-azkRfON2.js → session-detail.server-ClCRw8BG.js} +1 -1
- package/dist/server/assets/{sessions.server-B8zbmvSM.js → sessions.server-Cl8Ao_-2.js} +1 -1
- package/dist/server/assets/{stats.server-BZWxV-mC.js → stats.server-BBNHZZ4h.js} +1 -1
- package/dist/server/server.js +8 -8
- package/package.json +3 -2
package/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Claude Session Dashboard
|
|
2
|
+
|
|
3
|
+
A read-only, local observability dashboard for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) sessions. Scans your `~/.claude` directory to visualize session details, tool usage, agent dispatches, token consumption, and execution timelines.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx claude-session-dashboard
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or install globally:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g claude-session-dashboard
|
|
15
|
+
claude-dashboard
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Open [http://localhost:3000](http://localhost:3000) in your browser.
|
|
19
|
+
|
|
20
|
+
### CLI Options
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
-p, --port <number> Port to listen on (default: 3000)
|
|
24
|
+
--host <hostname> Host to bind to (default: localhost)
|
|
25
|
+
-o, --open Open browser after starting
|
|
26
|
+
-v, --version Show version number
|
|
27
|
+
-h, --help Show this help message
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Features
|
|
31
|
+
|
|
32
|
+
- **Sessions list** with search, status filters, project filters, and pagination
|
|
33
|
+
- **Session detail** with context window breakdown, tool usage stats, agent dispatch history
|
|
34
|
+
- **Cost estimation** per session and per agent based on Anthropic API pricing
|
|
35
|
+
- **Timeline chart** showing tool calls, agent runs, and skill invocations
|
|
36
|
+
- **Stats page** with aggregate metrics across all sessions
|
|
37
|
+
- **Live updates** for active sessions
|
|
38
|
+
- **Privacy mode** to anonymize paths and usernames for safe screenshot sharing
|
|
39
|
+
|
|
40
|
+
## How It Works
|
|
41
|
+
|
|
42
|
+
The dashboard runs a local server that reads `~/.claude/projects/` to discover session `.jsonl` files. It parses them to extract metadata, tool calls, agent dispatches, and token usage, then displays everything in a web UI. No data leaves your machine.
|
|
43
|
+
|
|
44
|
+
## Links
|
|
45
|
+
|
|
46
|
+
- [GitHub](https://github.com/dlupiak/claude-session-dashboard)
|
|
47
|
+
- [Issues](https://github.com/dlupiak/claude-session-dashboard/issues)
|
|
48
|
+
- [Docker](https://github.com/dlupiak/claude-session-dashboard/pkgs/container/claude-session-dashboard)
|
|
49
|
+
|
|
50
|
+
## License
|
|
51
|
+
|
|
52
|
+
MIT
|
package/bin/cli.mjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { createServer } from 'node:http';
|
|
4
4
|
import { readFile, access, stat } from 'node:fs/promises';
|
|
5
5
|
import { resolve, join, extname } from 'node:path';
|
|
6
|
-
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
7
7
|
import { exec } from 'node:child_process';
|
|
8
8
|
import { homedir } from 'node:os';
|
|
9
9
|
|
|
@@ -93,7 +93,7 @@ const MIME_TYPES = {
|
|
|
93
93
|
|
|
94
94
|
process.env.NODE_ENV = 'production';
|
|
95
95
|
|
|
96
|
-
const serverModule = await import(join(distDir, 'server', 'server.js'));
|
|
96
|
+
const serverModule = await import(pathToFileURL(join(distDir, 'server', 'server.js')).href);
|
|
97
97
|
const appServer = serverModule.default;
|
|
98
98
|
|
|
99
99
|
async function tryServeStatic(pathname) {
|
|
@@ -17,9 +17,9 @@ function extractSessionId(filename) {
|
|
|
17
17
|
return filename.replace(/\.jsonl$/, "");
|
|
18
18
|
}
|
|
19
19
|
export {
|
|
20
|
-
|
|
20
|
+
getProjectsDir as a,
|
|
21
21
|
extractSessionId as b,
|
|
22
22
|
decodeProjectDirName as d,
|
|
23
23
|
extractProjectName as e,
|
|
24
|
-
|
|
24
|
+
getStatsPath as g
|
|
25
25
|
};
|
package/dist/server/assets/{session-detail.server-azkRfON2.js → session-detail.server-ClCRw8BG.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { c as createServerRpc } from "./createServerRpc-Bd3B-Ah9.js";
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
|
-
import { e as extractProjectName,
|
|
4
|
+
import { e as extractProjectName, a as getProjectsDir, d as decodeProjectDirName } from "./claude-path-on7ZBAjl.js";
|
|
5
5
|
import { p as parseDetail } from "./session-parser-CAEXxF1D.js";
|
|
6
6
|
import { c as createServerFn } from "../server.js";
|
|
7
7
|
import "node:os";
|
|
@@ -2,7 +2,7 @@ import { c as createServerRpc } from "./createServerRpc-Bd3B-Ah9.js";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import * as path from "node:path";
|
|
5
|
-
import {
|
|
5
|
+
import { a as getProjectsDir, d as decodeProjectDirName, e as extractProjectName, b as extractSessionId } from "./claude-path-on7ZBAjl.js";
|
|
6
6
|
import { a as parseSummary } from "./session-parser-CAEXxF1D.js";
|
|
7
7
|
import { c as createServerFn } from "../server.js";
|
|
8
8
|
import "node:os";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as createServerRpc } from "./createServerRpc-Bd3B-Ah9.js";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
|
-
import {
|
|
3
|
+
import { g as getStatsPath } from "./claude-path-on7ZBAjl.js";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { c as createServerFn } from "../server.js";
|
|
6
6
|
import "node:path";
|
package/dist/server/server.js
CHANGED
|
@@ -577,12 +577,12 @@ function createMultiplexedStream(jsonStream, rawStreams) {
|
|
|
577
577
|
}
|
|
578
578
|
});
|
|
579
579
|
}
|
|
580
|
-
const manifest = { "
|
|
581
|
-
functionName: "getSessionDetail_createServerFn_handler",
|
|
582
|
-
importer: () => import("./assets/session-detail.server-azkRfON2.js")
|
|
583
|
-
}, "4b9a58c176f487b49800a372100037cdf33cf048f3592a449f115c7e3f5ea799": {
|
|
580
|
+
const manifest = { "4b9a58c176f487b49800a372100037cdf33cf048f3592a449f115c7e3f5ea799": {
|
|
584
581
|
functionName: "getStats_createServerFn_handler",
|
|
585
|
-
importer: () => import("./assets/stats.server-
|
|
582
|
+
importer: () => import("./assets/stats.server-BBNHZZ4h.js")
|
|
583
|
+
}, "ff8a3161afdfa175e9c519e4146a56ab5bce6e80745e99cfc2191ebbb7a859bb": {
|
|
584
|
+
functionName: "getSessionDetail_createServerFn_handler",
|
|
585
|
+
importer: () => import("./assets/session-detail.server-ClCRw8BG.js")
|
|
586
586
|
}, "810657681a273df5b4e58f0d8fcc6a5451598b489431b9bcaa98eea0ad815da8": {
|
|
587
587
|
functionName: "getSettings_createServerFn_handler",
|
|
588
588
|
importer: () => import("./assets/settings.server-6B2PvLgf.js")
|
|
@@ -591,13 +591,13 @@ const manifest = { "ff8a3161afdfa175e9c519e4146a56ab5bce6e80745e99cfc2191ebbb7a8
|
|
|
591
591
|
importer: () => import("./assets/settings.server-6B2PvLgf.js")
|
|
592
592
|
}, "bf8e4a7901f1843bdc9c46be1ad5ad59c615b8bbe611b73eb3ff28f20e43ee0d": {
|
|
593
593
|
functionName: "getSessionList_createServerFn_handler",
|
|
594
|
-
importer: () => import("./assets/sessions.server-
|
|
594
|
+
importer: () => import("./assets/sessions.server-Cl8Ao_-2.js")
|
|
595
595
|
}, "839d29fe93dfa2a6d506af7b48ca25197190a5ff4c796e970ddfdc6e8c98827f": {
|
|
596
596
|
functionName: "getActiveSessionList_createServerFn_handler",
|
|
597
|
-
importer: () => import("./assets/sessions.server-
|
|
597
|
+
importer: () => import("./assets/sessions.server-Cl8Ao_-2.js")
|
|
598
598
|
}, "a3f42f9012fd83586787da8f7cb90649da739dd947d867eb67572f68735ff495": {
|
|
599
599
|
functionName: "getPaginatedSessions_createServerFn_handler",
|
|
600
|
-
importer: () => import("./assets/sessions.server-
|
|
600
|
+
importer: () => import("./assets/sessions.server-Cl8Ao_-2.js")
|
|
601
601
|
} };
|
|
602
602
|
async function getServerFnById(id) {
|
|
603
603
|
const serverFnInfo = manifest[id];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-session-dashboard",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Local observability dashboard for Claude Code sessions",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"files": [
|
|
29
29
|
"bin/",
|
|
30
30
|
"dist/",
|
|
31
|
-
"LICENSE"
|
|
31
|
+
"LICENSE",
|
|
32
|
+
"README.md"
|
|
32
33
|
],
|
|
33
34
|
"scripts": {
|
|
34
35
|
"dev": "vite",
|