ai-ctrl-plane 0.3.1__tar.gz

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 (34) hide show
  1. ai_ctrl_plane-0.3.1/.gitignore +47 -0
  2. ai_ctrl_plane-0.3.1/CHANGELOG.md +104 -0
  3. ai_ctrl_plane-0.3.1/LICENSE +21 -0
  4. ai_ctrl_plane-0.3.1/PKG-INFO +312 -0
  5. ai_ctrl_plane-0.3.1/README.md +279 -0
  6. ai_ctrl_plane-0.3.1/pyproject.toml +99 -0
  7. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/__init__.py +6 -0
  8. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/__main__.py +121 -0
  9. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/_version.py +34 -0
  10. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/app.py +656 -0
  11. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/claude_parser.py +741 -0
  12. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/config_readers/__init__.py +16 -0
  13. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/config_readers/_common.py +217 -0
  14. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/config_readers/claude_config.py +273 -0
  15. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/config_readers/copilot_config.py +78 -0
  16. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/config_readers/vscode_config.py +123 -0
  17. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/parser.py +342 -0
  18. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/agents.html +217 -0
  19. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/base.html +428 -0
  20. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/index.html +453 -0
  21. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/session.html +980 -0
  22. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/sessions.html +302 -0
  23. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/skill_detail.html +197 -0
  24. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/skills.html +231 -0
  25. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/tool_detail.html +588 -0
  26. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/tools.html +164 -0
  27. ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/vscode_parser.py +715 -0
  28. ai_ctrl_plane-0.3.1/tests/__init__.py +0 -0
  29. ai_ctrl_plane-0.3.1/tests/test_app.py +443 -0
  30. ai_ctrl_plane-0.3.1/tests/test_claude_parser.py +621 -0
  31. ai_ctrl_plane-0.3.1/tests/test_config_readers.py +377 -0
  32. ai_ctrl_plane-0.3.1/tests/test_parser.py +220 -0
  33. ai_ctrl_plane-0.3.1/tests/test_tools_routes.py +307 -0
  34. ai_ctrl_plane-0.3.1/tests/test_vscode_parser.py +747 -0
@@ -0,0 +1,47 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.egg-info/
6
+ *.egg
7
+ dist/
8
+ build/
9
+ .eggs/
10
+ *.whl
11
+
12
+ # Virtual environments
13
+ .venv/
14
+ venv/
15
+ env/
16
+
17
+ # IDE
18
+ .idea/
19
+ .vscode/
20
+ *.swp
21
+ *.swo
22
+ *~
23
+
24
+ # OS
25
+ .DS_Store
26
+ Thumbs.db
27
+
28
+ # Testing / coverage
29
+ .pytest_cache/
30
+ htmlcov/
31
+ .coverage
32
+ coverage.xml
33
+
34
+ # Build artifacts
35
+ *.so
36
+ src/ai_ctrl_plane/_version.py
37
+
38
+ # Environment / secrets
39
+ .env
40
+ .env.*
41
+
42
+ # Sample session log data (UUID-named directories)
43
+ 4e71aaa0-f131-41fd-aeee-8bcaa5efb315/
44
+ 8b3c9d7d-60f7-4e4c-a442-eb2ee7ee68e2/
45
+
46
+ # Old test app
47
+ old_static_app/
@@ -0,0 +1,104 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/), and
6
+ this project adheres to [Semantic Versioning](https://semver.org/).
7
+
8
+ ## [0.3.0] - 2026-03-15
9
+
10
+ ### Added
11
+ - **"AI Control Plane" rebrand** — new name, dashboard homepage with aggregated
12
+ metrics (MCP servers, plugins, agents, commands, hooks, feature flags, sessions),
13
+ tool cards, session breakdown bars, and recent sessions.
14
+ - **Shared base template** — extracted common CSS, navbar, theme toggle, and footer
15
+ into `base.html`; all pages now extend it via Jinja2 template inheritance.
16
+ - **Dedicated sessions page** (`/sessions`) — full session list with search and
17
+ source filter buttons, separate from the dashboard.
18
+ - **Tool configuration pages** — `/tools` overview and `/tools/<tool>` detail
19
+ pages for Claude Code, GitHub Copilot, and VS Code Chat with vertical sidebar
20
+ navigation and collapsible sections.
21
+ - **Slash commands** — reads and displays Claude Code plugin slash commands
22
+ (from `commands/*.md` files) with name, plugin, and description.
23
+ - **Feature flags** — now reads GrowthBook cached feature flags in addition to
24
+ top-level boolean flags from `~/.claude.json`.
25
+ - **Brand SVG icons** — official Claude, GitHub Copilot, and VS Code icons
26
+ used throughout the UI via Jinja2 macros.
27
+ - **Subagent expandable info** — sub-agent start events show the agent prompt
28
+ on expand; sub-agent complete events show the result.
29
+ - **Skills page** (`/skills`) — deduplicated list of all installed skills
30
+ across tools, with source badges and clickable filter pills. Skills with
31
+ the same name installed in multiple tools are merged into a single card.
32
+ - **Skill detail page** (`/skills/<name>`) — full rendered SKILL.md content
33
+ with metadata sidebar (author, version, license, tools used, homepage).
34
+ - **Skills data** — reads SKILL.md files (YAML frontmatter + markdown body)
35
+ for all three tools: Claude Code (standalone + plugin-bundled), GitHub
36
+ Copilot, and VS Code Chat.
37
+ - **Agents page** (`/agents`) — aggregated view of agents across all tools
38
+ with clickable source filter pills (Claude / VS Code).
39
+ - **SVG favicon** — inline data URI favicon matching the new logo.
40
+ - **New logo** — slider/mixing console design with three source-colored bars.
41
+ - **GrowthBook flags** — separated from user feature flags in the Claude Code
42
+ tool detail page, collapsed by default with explanation of what GrowthBook is.
43
+ - **Improved text wrapping** — `overflow-wrap: break-word` applied consistently
44
+ across tool details, session info, and key-value grids.
45
+
46
+ ### Changed
47
+ - Dashboard homepage now shows tool configs and cross-tool metrics instead of
48
+ just a session list.
49
+ - All templates refactored to extend `base.html`, removing ~200 lines of
50
+ duplicated CSS.
51
+ - Tool detail tabs changed from horizontal to vertical sidebar navigation.
52
+ - Policy & Limits section uses single-column layout for readability.
53
+ - Feature Flags section uses compact multi-column grid.
54
+ - Unicode HTML entities (`&#9654;`, `&#10003;`, etc.) replaced with SVG icons
55
+ throughout session timelines and tool detail pages.
56
+
57
+ ### Fixed
58
+ - Sub-agent count always showing 0 — `compute_stats()` now counts Agent and
59
+ dispatch_agent tool calls.
60
+ - Sub-agent timeline events now properly emit `subagent_start`/`subagent_complete`
61
+ instead of generic tool events.
62
+ - VS Code `globalStorage` path resolution — skills and agents now correctly
63
+ found under the User directory.
64
+ - Claude skills now include plugin-bundled skills (from `plugins/marketplaces/`),
65
+ not just standalone `~/.claude/skills/`.
66
+ - Agents page navbar highlight — now correctly highlights "Agents" instead of
67
+ "Tools".
68
+
69
+ ## [0.2.0] - 2026-03-13
70
+
71
+ ### Added
72
+ - **Claude timeline extras** — hook/progress events, file history snapshots,
73
+ last-prompt markers, permission mode and sidechain indicators on messages.
74
+ - **VS Code timeline extras** — agent mode badges (Edit/Chat/Agent),
75
+ follow-up suggestion chips, progress task markers, past-tense tool
76
+ summaries, time-spent-waiting display.
77
+ - **Stats sidebar enhancements** — service tier, cache read/creation token
78
+ breakdown, prompt token details (stacked bar), cost estimates with
79
+ multiplier support.
80
+ - **Pending-edits warning** on VS Code session cards in the index.
81
+
82
+ ### Fixed
83
+
84
+ - Double-slash typo in backup API endpoint path.
85
+ - Tool name parser for Copilot sessions.
86
+
87
+ ## [0.1.0] - 2026-03-12
88
+
89
+ ### Added
90
+
91
+ - Initial release.
92
+ - Session index page listing all discovered Copilot agent sessions.
93
+ - Session detail view with timeline conversation, statistics sidebar, and
94
+ rewind snapshots panel.
95
+ - Event type filtering (User, Assistant, Tools, Sub-Agents, Errors).
96
+ - Expandable tool call arguments and results.
97
+ - Expandable assistant reasoning blocks.
98
+ - Markdown rendering for assistant messages.
99
+ - JSON API endpoints (`/api/sessions`, `/api/session/<id>/events`,
100
+ `//api/session/<id>/backup/<hash>`).
101
+ - CLI entry point (`copilot-log-viewer`) with `--port`, `--host`, and
102
+ `--debug` options.
103
+ - Security hardening: UUID validation, backup-hash validation, path-traversal
104
+ protection, Content-Security-Policy, and secure default headers.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Luis Teles
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.
@@ -0,0 +1,312 @@
1
+ Metadata-Version: 2.4
2
+ Name: ai-ctrl-plane
3
+ Version: 0.3.1
4
+ Summary: AI Control Plane — a local web UI for browsing AI agent session logs and tool configurations (GitHub Copilot, Claude Code, VS Code Chat).
5
+ Project-URL: Homepage, https://github.com/l-teles/ai-control-plane
6
+ Project-URL: Repository, https://github.com/l-teles/ai-control-plane
7
+ Project-URL: Issues, https://github.com/l-teles/ai-control-plane/issues
8
+ Author: Luís Teles
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: agent,claude,copilot,github,logs,viewer,vscode,vscode-chat
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Web Environment
14
+ Classifier: Framework :: Flask
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Software Development :: Debuggers
21
+ Classifier: Topic :: Software Development :: Quality Assurance
22
+ Requires-Python: >=3.13
23
+ Requires-Dist: flask>=3.0
24
+ Requires-Dist: markdown>=3.5
25
+ Requires-Dist: markupsafe>=2.1
26
+ Requires-Dist: nh3>=0.2.14
27
+ Requires-Dist: pyyaml>=6.0
28
+ Provides-Extra: dev
29
+ Requires-Dist: pytest-cov>=5.0; extra == 'dev'
30
+ Requires-Dist: pytest>=8.0; extra == 'dev'
31
+ Requires-Dist: ruff>=0.4; extra == 'dev'
32
+ Description-Content-Type: text/markdown
33
+
34
+ <p align="center">
35
+ <img src="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/logo.svg" alt="AI Control Plane logo" width="80">
36
+ </p>
37
+
38
+ <h1 align="center">AI Control Plane</h1>
39
+
40
+ <p align="center">
41
+ A local web UI for browsing <strong>GitHub Copilot</strong>, <strong>Claude Code</strong>, and <strong>VS Code Chat</strong> agent session logs and tool configurations — all in one place.
42
+ </p>
43
+
44
+ <p align="center">
45
+ <img src="https://img.shields.io/badge/python-3.13%2B-blue" alt="Python 3.13+">
46
+ <img src="https://img.shields.io/badge/license-MIT-green" alt="License: MIT">
47
+ </p>
48
+
49
+ AI coding agents produce rich session logs and configuration files. This tool turns
50
+ those raw files into a readable, interactive dashboard so you can review sessions
51
+ (prompts, reasoning, tool calls, sub-agents, errors) and inspect tool configurations
52
+ (MCP servers, plugins, agents, skills, slash commands, hooks, feature flags) — all in one place.
53
+
54
+ <table>
55
+ <tr>
56
+ <td align="center"><strong>Dashboard</strong></td>
57
+ <td align="center"><strong>Session Timeline</strong></td>
58
+ </tr>
59
+ <tr>
60
+ <td>
61
+ <a href="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_home.png">
62
+ <picture>
63
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_home.png">
64
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_light_home.png">
65
+ <img src="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_home.png" alt="Dashboard homepage" width="400">
66
+ </picture>
67
+ </a>
68
+ </td>
69
+ <td>
70
+ <a href="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_session.png">
71
+ <picture>
72
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_session.png">
73
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_light_session.png">
74
+ <img src="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_session.png" alt="Session timeline view" width="400">
75
+ </picture>
76
+ </a>
77
+ </td>
78
+ </tr>
79
+ <tr>
80
+ <td align="center"><strong>Tool Configuration</strong></td>
81
+ <td align="center"><strong>Agents</strong></td>
82
+ </tr>
83
+ <tr>
84
+ <td>
85
+ <a href="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_tools.png">
86
+ <picture>
87
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_tools.png">
88
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_light_tools.png">
89
+ <img src="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_tools.png" alt="Tool configuration page" width="400">
90
+ </picture>
91
+ </a>
92
+ </td>
93
+ <td>
94
+ <a href="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_agents.png">
95
+ <picture>
96
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_agents.png">
97
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_light_agents.png">
98
+ <img src="https://raw.githubusercontent.com/l-teles/ai-control-plane/main/assets/screenshot_dark_agents.png" alt="Agents page" width="400">
99
+ </picture>
100
+ </a>
101
+ </td>
102
+ </tr>
103
+ </table>
104
+
105
+
106
+ ---
107
+
108
+ ## Features
109
+
110
+ ### Dashboard & Navigation
111
+ - **Metrics dashboard** — aggregated counts for MCP servers, plugins, agents,
112
+ slash commands, hooks, feature flags, and sessions across all tools.
113
+ - **Tool cards** — at-a-glance status for Claude Code, GitHub Copilot, and
114
+ VS Code Chat with key stats per tool.
115
+ - **Shared navbar** — sticky navigation with brand SVG icons, breadcrumbs,
116
+ and dark/light theme toggle.
117
+
118
+ ### Session Browser
119
+ - **Multi-source support** — browse sessions from GitHub Copilot, Claude Code, and
120
+ VS Code Chat side by side, with color-coded source badges.
121
+ - **Search & filters** — full-text search across session names, branches, directories,
122
+ and models; filter by source on the sessions page, by event type in timelines.
123
+ - **Interactive timeline** — color-coded conversation view with:
124
+ - User messages (with file attachments)
125
+ - Assistant responses (rendered Markdown, expandable reasoning/thinking)
126
+ - Tool calls & results (expandable arguments / output)
127
+ - Sub-agent launches & completions (expandable prompt / result)
128
+ - System notifications, hooks, file snapshots, model changes
129
+ - Errors and warnings
130
+ - **Statistics sidebar** — message counts, token usage (input/output/cache),
131
+ tool breakdown with visual bars, MCP tool usage, rewind snapshots.
132
+
133
+ ### Tool Configuration Inspector
134
+ - **Claude Code** — MCP servers, plugins (official + external), agents, skills
135
+ (standalone + plugin-bundled), slash commands, hooks, feature flags (including
136
+ GrowthBook server-side flags with toggle), settings, policy limits.
137
+ - **GitHub Copilot** — MCP servers, configuration, recent commands, skills.
138
+ - **VS Code Chat** — MCP servers, agents, skills, AI settings, language models.
139
+ - **Vertical tool navigation** — switch between tools from the sidebar.
140
+
141
+ ### Agents
142
+ - **Aggregated agents page** — view all agents across Claude Code and VS Code
143
+ in one place.
144
+ - **Clickable source filters** — filter agents by tool (Claude / VS Code) with
145
+ pill-style toggle buttons.
146
+
147
+ ### Skills
148
+ - **Skills browser** (`/skills`) — deduplicated list of all installed skills
149
+ across Claude Code, GitHub Copilot, and VS Code Chat, with source badges
150
+ showing which tools each skill is installed in.
151
+ - **Skill detail page** (`/skills/<name>`) — full rendered SKILL.md content
152
+ with metadata sidebar (author, version, license, tools, homepage).
153
+
154
+ ### General
155
+ - **Dark / Light mode** — toggle with one click; persisted in `localStorage`.
156
+ - **JSON API** — programmatic access at `/api/sessions`, `/api/session/<id>/events`,
157
+ `/api/tools`, and `/api/tools/<tool>`.
158
+ - **Security** — UUID & backup-hash validation, path-traversal protection,
159
+ Content-Security-Policy headers, localhost-only by default.
160
+
161
+ ## Quick start
162
+
163
+ ### Install from source
164
+
165
+ ```bash
166
+ git clone https://github.com/l-teles/ai-control-plane.git
167
+ cd ai-control-plane
168
+ pip install .
169
+ ```
170
+
171
+ ### Install from PyPI
172
+
173
+ ```bash
174
+ pip install ai-ctrl-plane
175
+ ```
176
+
177
+ ### Run
178
+
179
+ ```bash
180
+ # Auto-detect default directories for all sources
181
+ ai-ctrl-plane
182
+
183
+ # Specify directories explicitly
184
+ ai-ctrl-plane --copilot-dir ~/.copilot/session-state/ --claude-dir ~/.claude/projects/ --vscode-dir "~/Library/Application Support/Code/User/"
185
+
186
+ # Or use the module directly
187
+ python -m ai_ctrl_plane
188
+ ```
189
+
190
+ Then open **http://127.0.0.1:5000** in your browser.
191
+
192
+ ### Default directories
193
+
194
+ | Source | macOS / Linux default | Windows default | Override flag | Env variable |
195
+ |----------------|-------------------------------------------------------|------------------------------------------|------------------|--------------------|
196
+ | GitHub Copilot | `~/.copilot/session-state/` | `%LOCALAPPDATA%\github-copilot\session-state` | `--copilot-dir` | `COPILOT_LOG_DIR` |
197
+ | Claude Code | `~/.claude/projects/` | `%LOCALAPPDATA%\claude\projects` | `--claude-dir` | `CLAUDE_LOG_DIR` |
198
+ | VS Code Chat | `~/Library/Application Support/Code/User/` (macOS) / `~/.config/Code/User/` (Linux) | `%APPDATA%\Code\User` | `--vscode-dir` | `VSCODE_LOG_DIR` |
199
+
200
+ ### Options
201
+
202
+ ```
203
+ usage: ai-ctrl-plane [-h] [--copilot-dir DIR] [--claude-dir DIR]
204
+ [--vscode-dir DIR] [-p PORT] [--host HOST]
205
+ [--debug] [-V] [log_dir]
206
+
207
+ positional arguments:
208
+ log_dir Directory containing Copilot session log folders
209
+ (default: ~/.copilot/session-state/)
210
+
211
+ options:
212
+ --copilot-dir DIR Directory containing Copilot session log folders
213
+ (overrides positional arg)
214
+ --claude-dir DIR Directory containing Claude Code session logs
215
+ (default: ~/.claude/projects/)
216
+ --vscode-dir DIR Directory containing VS Code Chat session logs
217
+ (default: platform-dependent)
218
+ -p, --port PORT Port to listen on (default: 5000)
219
+ --host HOST Host to bind to (default: 127.0.0.1)
220
+ --debug Run in Flask debug mode (local development only)
221
+ -V, --version Show version and exit
222
+ ```
223
+
224
+ ## Expected directory layouts
225
+
226
+ ### GitHub Copilot (`~/.copilot/session-state/`)
227
+
228
+ ```
229
+ session-state/
230
+ ├── 4e71aaa0-f131-41fd-aeee-8bcaa5efb315/
231
+ │ ├── workspace.yaml # Session metadata
232
+ │ ├── events.jsonl # Conversation event stream
233
+ │ ├── checkpoints/
234
+ │ │ └── index.md
235
+ │ └── rewind-snapshots/
236
+ │ ├── index.json # Snapshot manifest
237
+ │ └── backups/ # File content snapshots
238
+ │ ├── ff627b50b0554488-1773312027139
239
+ │ └── ...
240
+ ├── 8b3c9d7d-60f7-4e4c-a442-eb2ee7ee68e2/
241
+ │ └── ...
242
+ └── ...
243
+ ```
244
+
245
+ ### Claude Code (`~/.claude/projects/`)
246
+
247
+ ```
248
+ projects/
249
+ ├── -Users-you-project-alpha/
250
+ │ ├── a1b2c3d4-e5f6-7890-abcd-ef1234567890.jsonl
251
+ │ ├── d4c3b2a1-f6e5-0987-dcba-0987654321fe.jsonl
252
+ │ └── ...
253
+ ├── -Users-you-project-beta/
254
+ │ └── ...
255
+ └── ...
256
+ ```
257
+
258
+ Each `.jsonl` file is a single session containing user/assistant/system events
259
+ with tool calls, thinking blocks, and usage metadata.
260
+
261
+ ### VS Code Chat (`~/Library/Application Support/Code/User/`)
262
+
263
+ ```
264
+ User/
265
+ ├── workspaceStorage/
266
+ │ ├── abc123hash/
267
+ │ │ ├── workspace.json # Maps to project folder
268
+ │ │ └── chatSessions/
269
+ │ │ ├── 88ca1adb-bf72-4478-9982-6886cb99785e.json
270
+ │ │ └── ...
271
+ │ └── ...
272
+ └── globalStorage/
273
+ └── emptyWindowChatSessions/
274
+ ├── 3a9ae123-2cbe-4c1d-b5af-3d4cd1f0ad2e.jsonl
275
+ └── ...
276
+ ```
277
+
278
+ Each `.json` file is a single chat session with user messages, assistant responses,
279
+ tool call rounds, and timing metadata.
280
+
281
+ ## Development
282
+
283
+ ```bash
284
+ # Install with dev dependencies
285
+ pip install -e ".[dev]"
286
+
287
+ # Lint
288
+ ruff check src/ tests/
289
+
290
+ # Test
291
+ pytest
292
+ ```
293
+
294
+ ## Security
295
+
296
+ - **Localhost only** — binds to `127.0.0.1` by default; never expose to the public
297
+ internet without authentication.
298
+ - **Input validation** — session IDs must be valid UUIDs; backup hashes are validated
299
+ against a strict pattern.
300
+ - **Path-traversal protection** — resolved file paths are verified via
301
+ `Path.relative_to()` to stay within the configured log directory.
302
+ - **HTML sanitization** — Markdown output is sanitized to strip dangerous tags
303
+ (`<script>`, `<iframe>`, etc.) and event handler attributes.
304
+ - **Security headers** — `X-Content-Type-Options`, `X-Frame-Options`,
305
+ `Referrer-Policy`, and `Content-Security-Policy` are set on every response.
306
+ - **No debug in production** — debug mode is off by default and must be explicitly
307
+ enabled via `--debug`.
308
+ - **Dependency monitoring** — Dependabot is configured for automated security updates.
309
+
310
+ ## License
311
+
312
+ [MIT](LICENSE)