chat-logbook 0.9.0 → 0.11.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.
- package/README.md +35 -105
- package/api/dist/drizzle/0003_add_deleted_at.sql +2 -0
- package/api/dist/drizzle/archive/0007_drop_session_scan_state.sql +2 -0
- package/api/dist/drizzle/archive/meta/_journal.json +7 -0
- package/api/dist/drizzle/checkpoint/0000_sour_zeigeist.sql +11 -0
- package/api/dist/drizzle/checkpoint/meta/0000_snapshot.json +83 -0
- package/api/dist/drizzle/checkpoint/meta/_journal.json +13 -0
- package/api/dist/drizzle/meta/_journal.json +7 -0
- package/api/dist/index.js +410 -325
- package/package.json +4 -2
- package/web/dist/assets/index-DHnNZHtV.js +57 -0
- package/web/dist/assets/index-DSNHfjXl.css +2 -0
- package/web/dist/index.html +2 -2
- package/web/dist/assets/index-BCIIypHs.js +0 -57
- package/web/dist/assets/index-rSLP4i1P.css +0 -2
package/README.md
CHANGED
|
@@ -2,77 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
> _Where your AI conversations live._
|
|
4
4
|
|
|
5
|
-
A local-first library for the conversations you've had with your AI tools.
|
|
6
|
-
Read by chat-logbook, kept on your machine, browsable and searchable in one
|
|
7
|
-
place — even after your AI tool has deleted the original.
|
|
5
|
+
A local-first library for the conversations you've had with your AI tools. Read by chat-logbook, kept on your machine, browsable and searchable in one place — even after your AI tool has deleted the original.
|
|
8
6
|
|
|
9
|
-
> **Status.** A personal side project, moving at side-project pace —
|
|
10
|
-
> development and responses happen as time allows. Early release:
|
|
11
|
-
> browsing, rendering, soft-delete, and a local archive that survives
|
|
12
|
-
> vendor cleanup all work today. Search and tags are next. See
|
|
13
|
-
> [Roadmap](#roadmap).
|
|
7
|
+
> **Status.** A personal side project, moving at side-project pace — development and responses happen as time allows. Early release: browsing, rendering, soft-delete, and a local archive that survives vendor cleanup all work today. Search and tags are next. See [Roadmap](#roadmap).
|
|
14
8
|
|
|
15
9
|
## What chat-logbook is
|
|
16
10
|
|
|
17
|
-
You open it from the command line, and a browser window opens onto your
|
|
18
|
-
conversation history. You can browse it, find anything in it, tag what
|
|
19
|
-
matters, and pick up where you left off.
|
|
11
|
+
You open it from the command line, and a browser window opens onto your conversation history. You can browse it, find anything in it, tag what matters, and pick up where you left off.
|
|
20
12
|
|
|
21
|
-
It reads the files your AI tools already write to your machine — Claude Code
|
|
22
|
-
today, with more tools planned. From there it keeps its own copy in a
|
|
23
|
-
private archive on your machine, so the history is yours even when the
|
|
24
|
-
source tool quietly cleans up after itself (Claude Code defaults to deleting
|
|
25
|
-
conversations older than 30 days).
|
|
13
|
+
It reads the files your AI tools already write to your machine — Claude Code today, with more tools planned. From there it keeps its own copy in a private archive on your machine, so the history is yours even when the source tool quietly cleans up after itself (Claude Code defaults to deleting conversations older than 30 days).
|
|
26
14
|
|
|
27
15
|
Nothing leaves your machine. There is no account to create. The original
|
|
28
16
|
files your AI tools wrote are never modified.
|
|
29
17
|
|
|
30
|
-
We built this because the right place for your AI conversations to live
|
|
31
|
-
isn't inside the next vendor change.
|
|
18
|
+
We built this because the right place for your AI conversations to live isn't inside the next vendor change.
|
|
32
19
|
|
|
33
20
|
## What it gives you
|
|
34
21
|
|
|
35
|
-
- **Read-only access to source directories.** Original conversation files
|
|
36
|
-
are never modified. Today that means `~/.claude/`; the same rule applies
|
|
37
|
-
to every agent we add.
|
|
22
|
+
- **Read-only access to source directories.** Original conversation files are never modified. Today that means `~/.claude/`; the same rule applies to every agent we add.
|
|
38
23
|
- **Local-only.** No telemetry, no analytics, no third-party calls.
|
|
39
24
|
- **Zero configuration.** Install and run.
|
|
40
|
-
- **Drive everything from the keyboard.** A `/` or `⌘K` overlay finds any
|
|
41
|
-
|
|
42
|
-
action has a binding.
|
|
43
|
-
- **Your archive is yours.** It's a single SQLite file at
|
|
44
|
-
`~/.chat-logbook/archive.db`. Copy it to back up. Open it with any tool
|
|
45
|
-
that reads SQLite. If chat-logbook disappears tomorrow, the archive
|
|
46
|
-
doesn't.
|
|
25
|
+
- **Drive everything from the keyboard.** A `/` or `⌘K` overlay finds any past conversation in seconds. The mouse still works, but every primary action has a binding.
|
|
26
|
+
- **Your archive is yours.** It's a single SQLite file at `~/.chat-logbook/archive.db`. Copy it to back up. Open it with any tool that reads SQLite. If chat-logbook disappears tomorrow, the archive doesn't.
|
|
47
27
|
|
|
48
|
-
The full problem statement, user stories, and direction live in the
|
|
49
|
-
[PRD](docs/PRD.md).
|
|
28
|
+
The full problem statement, user stories, and direction live in the [PRD](docs/PRD.md).
|
|
50
29
|
|
|
51
30
|
## What works today
|
|
52
31
|
|
|
53
32
|
- **Three-column layout.** Resizable panels for filters, chat list,
|
|
54
33
|
and conversation content.
|
|
55
|
-
- **Rich conversation rendering.** Markdown, syntax-highlighted code
|
|
56
|
-
blocks, collapsible tool calls with one-line summaries, and collapsible
|
|
57
|
-
thinking blocks.
|
|
34
|
+
- **Rich conversation rendering.** Markdown, syntax-highlighted code blocks, collapsible tool calls with one-line summaries, and collapsible thinking blocks.
|
|
58
35
|
- **Virtual scrolling.** Long conversations scroll smoothly.
|
|
59
36
|
- **Solarized Dark theme.** Easy on the eyes, consistent with Claude
|
|
60
37
|
Code's terminal look.
|
|
61
38
|
- **Soft delete with Trash.** Hide chats you don't want to see; restore
|
|
62
39
|
them anytime.
|
|
63
|
-
- **
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
- **
|
|
67
|
-
|
|
68
|
-
chat stays visible even after the source JSONL is gone.
|
|
69
|
-
- **Live updates.** While Claude Code is actively writing to a chat,
|
|
70
|
-
new messages appear in chat-logbook within seconds — no restart
|
|
71
|
-
needed.
|
|
72
|
-
- **Chat metadata at a glance.** A ⓘ button on the conversation
|
|
73
|
-
header opens a popover showing when the chat started, when it was
|
|
74
|
-
last updated, the agent, the project working directory, and the
|
|
75
|
-
chat's IDs — with one-click copy.
|
|
40
|
+
- **Sortable lists.** Sort your chats by title, created time, or updated time, and the choice sticks between visits. Trash sorts independently — by deleted time by default.
|
|
41
|
+
- **Custom chat titles.** Rename any chat — click its title in the list or conversation header, or select it and press `F2` / `↵`. Clear the title to fall back to the first message.
|
|
42
|
+
- **Local archive.** Every conversation chat-logbook reads is copied into `~/.chat-logbook/archive.db`. The UI reads from the archive, so a chat stays visible even after the source JSONL is gone.
|
|
43
|
+
- **Live updates.** While Claude Code is actively writing to a chat, new messages appear in chat-logbook within seconds — no restart needed.
|
|
44
|
+
- **Chat metadata at a glance.** A ⓘ button on the conversation header opens a popover showing when the chat started, when it was last updated, the agent, the project working directory, and the chat's IDs — with one-click copy.
|
|
76
45
|
|
|
77
46
|
## Quick start
|
|
78
47
|
|
|
@@ -97,93 +66,60 @@ You should see:
|
|
|
97
66
|
chat-logbook is running at http://localhost:3100
|
|
98
67
|
```
|
|
99
68
|
|
|
100
|
-
A browser window opens automatically, showing a list of your Claude Code
|
|
101
|
-
chats on the left and conversation content on the right.
|
|
69
|
+
A browser window opens automatically, showing a list of your Claude Code chats on the left and conversation content on the right.
|
|
102
70
|
|
|
103
71
|
### Troubleshooting
|
|
104
72
|
|
|
105
73
|
**"No conversations found."**
|
|
106
|
-
You need to have Claude Code conversation history at `~/.claude/`.
|
|
107
|
-
chat-logbook reads from this directory automatically.
|
|
74
|
+
You need to have Claude Code conversation history at `~/.claude/`. chat-logbook reads from this directory automatically.
|
|
108
75
|
|
|
109
76
|
**"Port already in use."**
|
|
110
|
-
chat-logbook runs on port 3100 by default. Use `chat-log --port 8080`
|
|
111
|
-
(or `PORT=8080 chat-log`) to pick a different port.
|
|
77
|
+
chat-logbook runs on port 3100 by default. Use `chat-log --port 8080` (or `PORT=8080 chat-log`) to pick a different port.
|
|
112
78
|
|
|
113
79
|
**Updating to the latest version.**
|
|
114
|
-
Run `npm install -g chat-logbook@latest`. If you use npx, the `@latest`
|
|
115
|
-
tag ensures you always run the newest version.
|
|
80
|
+
Run `npm install -g chat-logbook@latest`. If you use npx, the `@latest` tag ensures you always run the newest version.
|
|
116
81
|
|
|
117
82
|
## FAQ
|
|
118
83
|
|
|
119
84
|
### Does chat-logbook work with Claude Code on the web?
|
|
120
85
|
|
|
121
|
-
No. chat-logbook reads from local `~/.claude/` files, which are only
|
|
122
|
-
created by the Claude Code CLI on your machine. Conversations run via
|
|
123
|
-
Claude Code on the web (cloud VMs) are not stored locally and aren't
|
|
124
|
-
visible to chat-logbook.
|
|
86
|
+
No. chat-logbook reads from local `~/.claude/` files, which are only created by the Claude Code CLI on your machine. Conversations run via Claude Code on the web (cloud VMs) are not stored locally and aren't visible to chat-logbook.
|
|
125
87
|
|
|
126
88
|
### Why can't I see my `/btw` conversations?
|
|
127
89
|
|
|
128
|
-
`/btw` is designed to be ephemeral — questions and answers appear in a
|
|
129
|
-
temporary overlay and are never written to conversation history files.
|
|
130
|
-
For a conversation to be preserved and visible in chat-logbook, send a
|
|
131
|
-
regular message instead.
|
|
90
|
+
`/btw` is designed to be ephemeral — questions and answers appear in a temporary overlay and are never written to conversation history files. For a conversation to be preserved and visible in chat-logbook, send a regular message instead.
|
|
132
91
|
|
|
133
92
|
### Will chat-logbook lose my history if Claude Code deletes its files?
|
|
134
93
|
|
|
135
|
-
Once chat-logbook has read a conversation into its archive, vendor
|
|
136
|
-
cleanup of the original file no longer removes it from chat-logbook.
|
|
137
|
-
The archive's contract: never delete in response to source deletion.
|
|
138
|
-
Only an explicit user action (Hard Delete / Purge) removes archived
|
|
139
|
-
conversations.
|
|
94
|
+
Once chat-logbook has read a conversation into its archive, vendor cleanup of the original file no longer removes it from chat-logbook. The archive's contract: never delete in response to source deletion. Only an explicit user action (Hard Delete / Purge) removes archived conversations.
|
|
140
95
|
|
|
141
96
|
### Where is my data stored?
|
|
142
97
|
|
|
143
98
|
Three places, all on your machine:
|
|
144
99
|
|
|
145
100
|
- `~/.claude/` (and equivalents for other tools) — read-only source.
|
|
146
|
-
- `~/.chat-logbook/archive.db` — chat-logbook's copy of the
|
|
147
|
-
|
|
148
|
-
- `~/.chat-logbook/data.db` — your tags, titles, annotations, and
|
|
149
|
-
soft-delete flags.
|
|
101
|
+
- `~/.chat-logbook/archive.db` — chat-logbook's copy of the conversations it has read.
|
|
102
|
+
- `~/.chat-logbook/metadata.db` — your tags, titles, annotations, and soft-delete flags.
|
|
150
103
|
|
|
151
|
-
Back up the two `~/.chat-logbook/` files together; they are the
|
|
152
|
-
complete chat-logbook state.
|
|
104
|
+
Back up the two `~/.chat-logbook/` files together; they are the complete chat-logbook state.
|
|
153
105
|
|
|
154
106
|
### Is this affiliated with Anthropic / OpenAI?
|
|
155
107
|
|
|
156
|
-
No. chat-logbook reads files those tools write on your machine. It
|
|
157
|
-
doesn't talk to their servers and isn't endorsed by them.
|
|
108
|
+
No. chat-logbook reads files those tools write on your machine. It doesn't talk to their servers and isn't endorsed by them.
|
|
158
109
|
|
|
159
110
|
## Roadmap
|
|
160
111
|
|
|
161
112
|
Two phases of work are in flight, in this order.
|
|
162
113
|
|
|
163
|
-
**Custom titles and tags.** Rename a chat to something you'll
|
|
164
|
-
recognize, attach tags with custom colors, and filter the list by tag or
|
|
165
|
-
by project. This is the path from "I have a lot of conversations" to
|
|
166
|
-
"I can find the one I need."
|
|
114
|
+
**Custom titles and tags.** Rename a chat to something you'll recognize, attach tags with custom colors, and filter the list by tag or by project. This is the path from "I have a lot of conversations" to "I can find the one I need."
|
|
167
115
|
|
|
168
|
-
**Spotlight search.** A keyboard-driven overlay (`⌘K` or `/`) that
|
|
169
|
-
searches across chats, messages, tags, and projects from one input.
|
|
170
|
-
A match lands you on the exact message with the term highlighted, and
|
|
171
|
-
you can jump between every match without leaving the overlay.
|
|
116
|
+
**Spotlight search.** A keyboard-driven overlay (`⌘K` or `/`) that searches across chats, messages, tags, and projects from one input. A match lands you on the exact message with the term highlighted, and you can jump between every match without leaving the overlay.
|
|
172
117
|
|
|
173
|
-
Beyond these three, several smaller things are on the list without firm
|
|
174
|
-
timing — live updates while an AI tool is writing, annotations and
|
|
175
|
-
highlights for marking what matters, editing your own past messages,
|
|
176
|
-
CLI commands for working with conversations from a terminal. Some will
|
|
177
|
-
ship; some are still being weighed.
|
|
118
|
+
Beyond these three, several smaller things are on the list without firm timing — live updates while an AI tool is writing, annotations and highlights for marking what matters, editing your own past messages, CLI commands for working with conversations from a terminal. Some will ship; some are still being weighed.
|
|
178
119
|
|
|
179
|
-
Explicit non-goals: semantic / vector search, cloud sync inside the OSS
|
|
180
|
-
core, modification of source directories like `~/.claude/`, and bulk
|
|
181
|
-
export to bespoke formats (the archive itself is the export). See the
|
|
182
|
-
[PRD](docs/PRD.md) for the full out-of-scope list.
|
|
120
|
+
Explicit non-goals: semantic / vector search, cloud sync inside the OSS core, modification of source directories like `~/.claude/`, and bulk export to bespoke formats (the archive itself is the export). See the [PRD](docs/PRD.md) for the full out-of-scope list.
|
|
183
121
|
|
|
184
|
-
This project is **not affiliated with Anthropic, OpenAI, or any other AI
|
|
185
|
-
provider.** It reads files those tools write on your machine; it does
|
|
186
|
-
not talk to their servers and is not endorsed by them.
|
|
122
|
+
This project is **not affiliated with Anthropic, OpenAI, or any other AI provider.** It reads files those tools write on your machine; it does not talk to their servers and is not endorsed by them.
|
|
187
123
|
|
|
188
124
|
## Changelog
|
|
189
125
|
|
|
@@ -191,20 +127,14 @@ See [CHANGELOG.md](CHANGELOG.md) for release notes.
|
|
|
191
127
|
|
|
192
128
|
## Contributing
|
|
193
129
|
|
|
194
|
-
Chat Logbook is in very early development. To keep focus on the current
|
|
195
|
-
goals, we're not taking contributions right now.
|
|
130
|
+
Chat Logbook is in very early development. To keep focus on the current goals, we're not taking contributions right now.
|
|
196
131
|
|
|
197
|
-
If there's something you really need — or you'd genuinely like to help —
|
|
198
|
-
reach out directly and we can talk through it.
|
|
132
|
+
If there's something you really need — or you'd genuinely like to help — reach out directly and we can talk through it.
|
|
199
133
|
|
|
200
134
|
## License
|
|
201
135
|
|
|
202
|
-
This project is licensed under the
|
|
203
|
-
[GNU Affero General Public License v3.0](LICENSE) (AGPL-3.0-only).
|
|
136
|
+
This project is licensed under the [GNU Affero General Public License v3.0](LICENSE) (AGPL-3.0-only).
|
|
204
137
|
|
|
205
|
-
You are free to use, modify, and distribute this software under the
|
|
206
|
-
terms of the AGPL-3.0. If you modify the program and make it available
|
|
207
|
-
over a network, you must release your modified source code under the
|
|
208
|
-
same license.
|
|
138
|
+
You are free to use, modify, and distribute this software under the terms of the AGPL-3.0. If you modify the program and make it available over a network, you must release your modified source code under the same license.
|
|
209
139
|
|
|
210
140
|
For commercial licensing inquiries, contact the author.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
CREATE TABLE `chat_scan_state` (
|
|
2
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
3
|
+
`agent` text NOT NULL,
|
|
4
|
+
`source_id` text NOT NULL,
|
|
5
|
+
`source_path` text NOT NULL,
|
|
6
|
+
`last_mtime_ms` integer NOT NULL,
|
|
7
|
+
`last_size_bytes` integer NOT NULL,
|
|
8
|
+
`last_scanned_at` integer NOT NULL
|
|
9
|
+
);
|
|
10
|
+
--> statement-breakpoint
|
|
11
|
+
CREATE UNIQUE INDEX `chat_scan_state_idx` ON `chat_scan_state` (`agent`,`source_id`);
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "6",
|
|
3
|
+
"dialect": "sqlite",
|
|
4
|
+
"id": "7000812a-0b76-46c3-a086-0b2a551fe473",
|
|
5
|
+
"prevId": "00000000-0000-0000-0000-000000000000",
|
|
6
|
+
"tables": {
|
|
7
|
+
"chat_scan_state": {
|
|
8
|
+
"name": "chat_scan_state",
|
|
9
|
+
"columns": {
|
|
10
|
+
"id": {
|
|
11
|
+
"name": "id",
|
|
12
|
+
"type": "integer",
|
|
13
|
+
"primaryKey": true,
|
|
14
|
+
"notNull": true,
|
|
15
|
+
"autoincrement": true
|
|
16
|
+
},
|
|
17
|
+
"agent": {
|
|
18
|
+
"name": "agent",
|
|
19
|
+
"type": "text",
|
|
20
|
+
"primaryKey": false,
|
|
21
|
+
"notNull": true,
|
|
22
|
+
"autoincrement": false
|
|
23
|
+
},
|
|
24
|
+
"source_id": {
|
|
25
|
+
"name": "source_id",
|
|
26
|
+
"type": "text",
|
|
27
|
+
"primaryKey": false,
|
|
28
|
+
"notNull": true,
|
|
29
|
+
"autoincrement": false
|
|
30
|
+
},
|
|
31
|
+
"source_path": {
|
|
32
|
+
"name": "source_path",
|
|
33
|
+
"type": "text",
|
|
34
|
+
"primaryKey": false,
|
|
35
|
+
"notNull": true,
|
|
36
|
+
"autoincrement": false
|
|
37
|
+
},
|
|
38
|
+
"last_mtime_ms": {
|
|
39
|
+
"name": "last_mtime_ms",
|
|
40
|
+
"type": "integer",
|
|
41
|
+
"primaryKey": false,
|
|
42
|
+
"notNull": true,
|
|
43
|
+
"autoincrement": false
|
|
44
|
+
},
|
|
45
|
+
"last_size_bytes": {
|
|
46
|
+
"name": "last_size_bytes",
|
|
47
|
+
"type": "integer",
|
|
48
|
+
"primaryKey": false,
|
|
49
|
+
"notNull": true,
|
|
50
|
+
"autoincrement": false
|
|
51
|
+
},
|
|
52
|
+
"last_scanned_at": {
|
|
53
|
+
"name": "last_scanned_at",
|
|
54
|
+
"type": "integer",
|
|
55
|
+
"primaryKey": false,
|
|
56
|
+
"notNull": true,
|
|
57
|
+
"autoincrement": false
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"indexes": {
|
|
61
|
+
"chat_scan_state_idx": {
|
|
62
|
+
"name": "chat_scan_state_idx",
|
|
63
|
+
"columns": ["agent", "source_id"],
|
|
64
|
+
"isUnique": true
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"foreignKeys": {},
|
|
68
|
+
"compositePrimaryKeys": {},
|
|
69
|
+
"uniqueConstraints": {},
|
|
70
|
+
"checkConstraints": {}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"views": {},
|
|
74
|
+
"enums": {},
|
|
75
|
+
"_meta": {
|
|
76
|
+
"schemas": {},
|
|
77
|
+
"tables": {},
|
|
78
|
+
"columns": {}
|
|
79
|
+
},
|
|
80
|
+
"internal": {
|
|
81
|
+
"indexes": {}
|
|
82
|
+
}
|
|
83
|
+
}
|