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.
- ai_ctrl_plane-0.3.1/.gitignore +47 -0
- ai_ctrl_plane-0.3.1/CHANGELOG.md +104 -0
- ai_ctrl_plane-0.3.1/LICENSE +21 -0
- ai_ctrl_plane-0.3.1/PKG-INFO +312 -0
- ai_ctrl_plane-0.3.1/README.md +279 -0
- ai_ctrl_plane-0.3.1/pyproject.toml +99 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/__init__.py +6 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/__main__.py +121 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/_version.py +34 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/app.py +656 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/claude_parser.py +741 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/config_readers/__init__.py +16 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/config_readers/_common.py +217 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/config_readers/claude_config.py +273 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/config_readers/copilot_config.py +78 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/config_readers/vscode_config.py +123 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/parser.py +342 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/agents.html +217 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/base.html +428 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/index.html +453 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/session.html +980 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/sessions.html +302 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/skill_detail.html +197 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/skills.html +231 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/tool_detail.html +588 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/templates/tools.html +164 -0
- ai_ctrl_plane-0.3.1/src/ai_ctrl_plane/vscode_parser.py +715 -0
- ai_ctrl_plane-0.3.1/tests/__init__.py +0 -0
- ai_ctrl_plane-0.3.1/tests/test_app.py +443 -0
- ai_ctrl_plane-0.3.1/tests/test_claude_parser.py +621 -0
- ai_ctrl_plane-0.3.1/tests/test_config_readers.py +377 -0
- ai_ctrl_plane-0.3.1/tests/test_parser.py +220 -0
- ai_ctrl_plane-0.3.1/tests/test_tools_routes.py +307 -0
- 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 (`▶`, `✓`, 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)
|