claude-run 0.1.0 → 0.2.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/README.md CHANGED
@@ -1,31 +1,52 @@
1
+ <div align="center">
2
+
1
3
  # Claude Run
2
4
 
3
- A beautiful web UI for browsing Claude Code conversation history.
5
+ Browse your Claude Code conversation history in a beautiful web UI
4
6
 
5
- ## Quick Start
7
+ [![npm version](https://img.shields.io/npm/v/claude-run.svg)](https://www.npmjs.com/package/claude-run)
8
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
6
9
 
7
- ```bash
8
- npx claude-run
9
- ```
10
+ <img src=".github/claude-run.gif" alt="Claude Run Demo" width="800" />
10
11
 
11
- The browser will open automatically at http://localhost:12001.
12
+ </div>
12
13
 
13
- ## Installation
14
+ <br />
15
+
16
+ Run the project simply by executing
14
17
 
15
18
  ```bash
16
- npm install -g claude-run
19
+ npx claude-run
17
20
  ```
18
21
 
22
+ The browser will open automatically at http://localhost:12001.
23
+
19
24
  ## Features
20
25
 
21
26
  - **Real-time streaming** - Watch conversations update live as Claude responds
22
27
  - **Search** - Find sessions by prompt text or project name
23
28
  - **Filter by project** - Focus on specific projects
29
+ - **Resume sessions** - Copy the resume command to continue any conversation in your terminal
30
+ - **Collapsible sidebar** - Maximize your viewing area
24
31
  - **Dark mode** - Easy on the eyes
25
32
  - **Clean UI** - Familiar chat interface with collapsible tool calls
26
33
 
27
34
  ## Usage
28
35
 
36
+ Install globally via npm:
37
+
38
+ ```bash
39
+ npm install -g claude-run
40
+ ```
41
+
42
+ Then run it from any directory:
43
+
44
+ ```bash
45
+ claude-run
46
+ ```
47
+
48
+ The browser will open automatically at http://localhost:12001, showing all your Claude Code conversations.
49
+
29
50
  ```bash
30
51
  claude-run [options]
31
52
 
@@ -41,10 +62,12 @@ Options:
41
62
 
42
63
  Claude Code stores conversation history in `~/.claude/`. This tool reads that data and presents it in a web interface with:
43
64
 
44
- 1. **Session list** - All your conversations, sorted by recency
45
- 2. **Project filter** - Focus on a specific project
46
- 3. **Conversation view** - Full message history with tool calls
47
- 4. **Real-time updates** - SSE streaming for live conversations
65
+ - **Session list** - All your conversations, sorted by recency
66
+ - **Project filter** - Focus on a specific project
67
+ - **Conversation view** - Full message history with tool calls
68
+ - **Session header** - Shows conversation title, project name, and timestamp
69
+ - **Resume command** - Copies the command to resume the conversation
70
+ - **Real-time updates** - SSE streaming for live conversations
48
71
 
49
72
  ## Requirements
50
73
 
package/dist/index.js CHANGED
@@ -350,10 +350,17 @@ function offSessionChange(callback) {
350
350
  // api/server.ts
351
351
  import { join as join3, dirname } from "path";
352
352
  import { fileURLToPath } from "url";
353
- import { readFileSync } from "fs";
353
+ import { readFileSync, existsSync } from "fs";
354
354
  import open2 from "open";
355
355
  var __filename = fileURLToPath(import.meta.url);
356
356
  var __dirname = dirname(__filename);
357
+ function getWebDistPath() {
358
+ const prodPath = join3(__dirname, "web");
359
+ if (existsSync(prodPath)) {
360
+ return prodPath;
361
+ }
362
+ return join3(__dirname, "..", "dist", "web");
363
+ }
357
364
  function createServer(options) {
358
365
  const { port, claudeDir: claudeDir3, dev = false, open: shouldOpen = true } = options;
359
366
  initStorage(claudeDir3);
@@ -489,7 +496,7 @@ function createServer(options) {
489
496
  }
490
497
  });
491
498
  });
492
- const webDistPath = join3(__dirname, "web");
499
+ const webDistPath = getWebDistPath();
493
500
  app.use("/*", serveStatic({ root: webDistPath }));
494
501
  app.get("/*", async (c) => {
495
502
  const indexPath = join3(webDistPath, "index.html");