tracelight 0.1.0

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 (42) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +102 -0
  3. package/dist/apiTypes.d.ts +139 -0
  4. package/dist/apiTypes.d.ts.map +1 -0
  5. package/dist/apiTypes.js +11 -0
  6. package/dist/apiTypes.js.map +1 -0
  7. package/dist/cli.d.ts +13 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +73 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/model.d.ts +133 -0
  12. package/dist/model.d.ts.map +1 -0
  13. package/dist/model.js +20 -0
  14. package/dist/model.js.map +1 -0
  15. package/dist/parser/index.d.ts +27 -0
  16. package/dist/parser/index.d.ts.map +1 -0
  17. package/dist/parser/index.js +434 -0
  18. package/dist/parser/index.js.map +1 -0
  19. package/dist/parser/rawTypes.d.ts +149 -0
  20. package/dist/parser/rawTypes.d.ts.map +1 -0
  21. package/dist/parser/rawTypes.js +11 -0
  22. package/dist/parser/rawTypes.js.map +1 -0
  23. package/dist/pricing.d.ts +35 -0
  24. package/dist/pricing.d.ts.map +1 -0
  25. package/dist/pricing.js +73 -0
  26. package/dist/pricing.js.map +1 -0
  27. package/dist/projectLoader.d.ts +31 -0
  28. package/dist/projectLoader.d.ts.map +1 -0
  29. package/dist/projectLoader.js +335 -0
  30. package/dist/projectLoader.js.map +1 -0
  31. package/dist/scripts/summarize.d.ts +7 -0
  32. package/dist/scripts/summarize.d.ts.map +1 -0
  33. package/dist/scripts/summarize.js +153 -0
  34. package/dist/scripts/summarize.js.map +1 -0
  35. package/dist/server/index.d.ts +18 -0
  36. package/dist/server/index.d.ts.map +1 -0
  37. package/dist/server/index.js +100 -0
  38. package/dist/server/index.js.map +1 -0
  39. package/package.json +70 -0
  40. package/ui/dist/assets/index-Bnr6kWU4.js +62 -0
  41. package/ui/dist/assets/index-HoOM9YCS.css +1 -0
  42. package/ui/dist/index.html +13 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA2BH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;IAClE,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,CAAC,CA6ED"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Fastify HTTP server for tracelight.
3
+ *
4
+ * Serves:
5
+ * - GET /api/projects — list of all projects with session summaries
6
+ * - GET /api/sessions/:id — full session detail by sessionId
7
+ * - Static files from the Vite build output (ui/dist/)
8
+ *
9
+ * The server imports only from model.ts and apiTypes.ts — never from parser/.
10
+ */
11
+ import Fastify from "fastify";
12
+ import fastifyStatic from "@fastify/static";
13
+ import { join } from "path";
14
+ import { existsSync } from "fs";
15
+ import { fileURLToPath } from "url";
16
+ import { loadAllProjects, loadSession, toSessionDetail } from "../projectLoader.js";
17
+ // Resolve the path to the built UI — works whether running from src or dist
18
+ const __dirname = fileURLToPath(new URL(".", import.meta.url));
19
+ // When compiled, this file is at dist/server/index.js; ui/dist is at ../../ui/dist
20
+ // When running via tsx src/server/index.ts: ui/dist is at ../ui/dist
21
+ const UI_DIST_CANDIDATES = [
22
+ join(__dirname, "../../ui/dist"),
23
+ join(__dirname, "../ui/dist"),
24
+ join(process.cwd(), "ui/dist"),
25
+ ];
26
+ function findUiDist() {
27
+ for (const candidate of UI_DIST_CANDIDATES) {
28
+ if (existsSync(candidate))
29
+ return candidate;
30
+ }
31
+ return null;
32
+ }
33
+ export async function createServer(options) {
34
+ const fastify = Fastify({ logger: false });
35
+ // ---------------------------------------------------------------------------
36
+ // API routes
37
+ // ---------------------------------------------------------------------------
38
+ fastify.get("/api/projects", async (_request, reply) => {
39
+ const projects = loadAllProjects();
40
+ reply.type("application/json");
41
+ return projects;
42
+ });
43
+ fastify.get("/api/sessions/:id", async (request, reply) => {
44
+ const sessionId = request.params.id;
45
+ // Find the session across all projects
46
+ const projects = loadAllProjects();
47
+ for (const project of projects) {
48
+ for (const sessionItem of project.sessions) {
49
+ if (sessionItem.sessionId === sessionId) {
50
+ // Re-parse the full session for detail
51
+ const summary = loadSession(sessionItem.filePath);
52
+ if (summary === null) {
53
+ reply.code(500).send({ error: "Failed to load session" });
54
+ return;
55
+ }
56
+ const detail = toSessionDetail(summary, sessionItem.filePath);
57
+ return detail;
58
+ }
59
+ }
60
+ }
61
+ reply.code(404).send({ error: "Session not found", sessionId });
62
+ });
63
+ // ---------------------------------------------------------------------------
64
+ // Static UI serving
65
+ // ---------------------------------------------------------------------------
66
+ const uiDist = findUiDist();
67
+ if (uiDist) {
68
+ await fastify.register(fastifyStatic, {
69
+ root: uiDist,
70
+ prefix: "/",
71
+ // Serve index.html for all unmatched routes (SPA fallback)
72
+ index: "index.html",
73
+ });
74
+ // SPA fallback: any non-API route serves index.html
75
+ fastify.setNotFoundHandler((_request, reply) => {
76
+ reply.sendFile("index.html");
77
+ });
78
+ }
79
+ else {
80
+ // No UI build: return a helpful message from root
81
+ fastify.get("/", async (_request, reply) => {
82
+ reply.type("text/html");
83
+ return `<!DOCTYPE html><html><body>
84
+ <h2>tracelight API server</h2>
85
+ <p>UI not built yet. Run <code>npm run build:ui</code> first.</p>
86
+ <p>API endpoints: <a href="/api/projects">/api/projects</a></p>
87
+ </body></html>`;
88
+ });
89
+ }
90
+ return {
91
+ start: async () => {
92
+ await fastify.listen({ port: options.port, host: "127.0.0.1" });
93
+ return `http://127.0.0.1:${options.port}`;
94
+ },
95
+ stop: async () => {
96
+ await fastify.close();
97
+ },
98
+ };
99
+ }
100
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "tracelight",
3
+ "version": "0.1.0",
4
+ "description": "Local-first web viewer for Claude Code session transcripts — run npx tracelight in any directory",
5
+ "keywords": [
6
+ "claude",
7
+ "claude-code",
8
+ "transcript",
9
+ "viewer",
10
+ "agent",
11
+ "observability",
12
+ "cli"
13
+ ],
14
+ "author": "Aneesh Venuturumilli",
15
+ "license": "MIT",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/aneeshv12/tracelight.git"
19
+ },
20
+ "homepage": "https://github.com/aneeshv12/tracelight#readme",
21
+ "bugs": {
22
+ "url": "https://github.com/aneeshv12/tracelight/issues"
23
+ },
24
+ "engines": {
25
+ "node": ">=18"
26
+ },
27
+ "type": "module",
28
+ "files": [
29
+ "dist",
30
+ "ui/dist",
31
+ "!dist/**/__tests__"
32
+ ],
33
+ "scripts": {
34
+ "typecheck": "tsc --noEmit && tsc --noEmit -p ui/tsconfig.json",
35
+ "test": "vitest run",
36
+ "build": "tsc --outDir dist && npm run build:ui",
37
+ "build:server": "tsc --outDir dist",
38
+ "build:ui": "vite build",
39
+ "dev:ui": "vite",
40
+ "start": "node dist/cli.js",
41
+ "summarize": "tsx src/scripts/summarize.ts",
42
+ "prepublishOnly": "npm run build"
43
+ },
44
+ "bin": {
45
+ "tracelight": "./dist/cli.js"
46
+ },
47
+ "devDependencies": {
48
+ "@types/diff": "^7.0.2",
49
+ "@types/node": "^20.0.0",
50
+ "@types/react": "^19.2.17",
51
+ "@types/react-dom": "^19.2.3",
52
+ "@vitejs/plugin-react": "^4.7.0",
53
+ "autoprefixer": "^10.5.0",
54
+ "postcss": "^8.5.15",
55
+ "tailwindcss": "^3.4.19",
56
+ "ts-node": "^10.9.2",
57
+ "tsx": "^4.22.4",
58
+ "typescript": "^5.5.0",
59
+ "vite": "^5.4.21",
60
+ "vitest": "^2.0.0"
61
+ },
62
+ "dependencies": {
63
+ "@fastify/static": "^9.1.3",
64
+ "diff": "^9.0.0",
65
+ "fastify": "^5.8.5",
66
+ "open": "^11.0.0",
67
+ "react": "^19.2.7",
68
+ "react-dom": "^19.2.7"
69
+ }
70
+ }