codetree-claude 1.5.0 → 1.5.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.
Files changed (123) hide show
  1. package/README.md +137 -121
  2. package/dist/cli.js +69 -83
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +126 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +22 -0
  7. package/dist/config.js.map +1 -1
  8. package/dist/diff.d.ts +37 -0
  9. package/dist/diff.d.ts.map +1 -0
  10. package/dist/diff.js +181 -0
  11. package/dist/diff.js.map +1 -0
  12. package/dist/doctor.d.ts +5 -0
  13. package/dist/doctor.d.ts.map +1 -0
  14. package/dist/doctor.js +139 -0
  15. package/dist/doctor.js.map +1 -0
  16. package/dist/hook/post-compact.js +1 -23
  17. package/dist/hook/post-compact.js.map +1 -1
  18. package/dist/hook/post-tool-use.js +11 -27
  19. package/dist/hook/post-tool-use.js.map +1 -1
  20. package/dist/hook/pre-compact.js +1 -22
  21. package/dist/hook/pre-compact.js.map +1 -1
  22. package/dist/hook/pre-tool-use.bundled.js +49 -77
  23. package/dist/hook/pre-tool-use.js +23 -90
  24. package/dist/hook/pre-tool-use.js.map +1 -1
  25. package/dist/hook/session-start.js +19 -23
  26. package/dist/hook/session-start.js.map +1 -1
  27. package/dist/index.d.ts +7 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +8 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/indexer/extractor-registry.d.ts.map +1 -1
  32. package/dist/indexer/extractor-registry.js +6 -0
  33. package/dist/indexer/extractor-registry.js.map +1 -1
  34. package/dist/indexer/extractors/csharp.d.ts +12 -0
  35. package/dist/indexer/extractors/csharp.d.ts.map +1 -0
  36. package/dist/indexer/extractors/csharp.js +165 -0
  37. package/dist/indexer/extractors/csharp.js.map +1 -0
  38. package/dist/indexer/extractors/go.js +44 -1
  39. package/dist/indexer/extractors/go.js.map +1 -1
  40. package/dist/indexer/extractors/java.d.ts.map +1 -1
  41. package/dist/indexer/extractors/java.js +41 -3
  42. package/dist/indexer/extractors/java.js.map +1 -1
  43. package/dist/indexer/extractors/javascript.d.ts.map +1 -1
  44. package/dist/indexer/extractors/javascript.js +67 -3
  45. package/dist/indexer/extractors/javascript.js.map +1 -1
  46. package/dist/indexer/extractors/python.d.ts.map +1 -1
  47. package/dist/indexer/extractors/python.js +31 -2
  48. package/dist/indexer/extractors/python.js.map +1 -1
  49. package/dist/indexer/extractors/ruby.d.ts +10 -0
  50. package/dist/indexer/extractors/ruby.d.ts.map +1 -0
  51. package/dist/indexer/extractors/ruby.js +145 -0
  52. package/dist/indexer/extractors/ruby.js.map +1 -0
  53. package/dist/indexer/extractors/rust.d.ts +10 -0
  54. package/dist/indexer/extractors/rust.d.ts.map +1 -0
  55. package/dist/indexer/extractors/rust.js +194 -0
  56. package/dist/indexer/extractors/rust.js.map +1 -0
  57. package/dist/indexer/indexer.d.ts +15 -0
  58. package/dist/indexer/indexer.d.ts.map +1 -1
  59. package/dist/indexer/indexer.js +168 -4
  60. package/dist/indexer/indexer.js.map +1 -1
  61. package/dist/server/ipc.d.ts +10 -4
  62. package/dist/server/ipc.d.ts.map +1 -1
  63. package/dist/server/ipc.js +190 -109
  64. package/dist/server/ipc.js.map +1 -1
  65. package/dist/server/mcp-server.js +36 -27
  66. package/dist/server/mcp-server.js.map +1 -1
  67. package/dist/server/tools/codetree-find-refs.d.ts.map +1 -1
  68. package/dist/server/tools/codetree-find-refs.js +23 -14
  69. package/dist/server/tools/codetree-find-refs.js.map +1 -1
  70. package/dist/server/tools/codetree-memory.d.ts +3 -6
  71. package/dist/server/tools/codetree-memory.d.ts.map +1 -1
  72. package/dist/server/tools/codetree-memory.js +9 -10
  73. package/dist/server/tools/codetree-memory.js.map +1 -1
  74. package/dist/server/tools/codetree-outline.d.ts +57 -0
  75. package/dist/server/tools/codetree-outline.d.ts.map +1 -0
  76. package/dist/server/tools/codetree-outline.js +76 -0
  77. package/dist/server/tools/codetree-outline.js.map +1 -0
  78. package/dist/server/tools/codetree-probe.d.ts +53 -0
  79. package/dist/server/tools/codetree-probe.d.ts.map +1 -0
  80. package/dist/server/tools/codetree-probe.js +81 -0
  81. package/dist/server/tools/codetree-probe.js.map +1 -0
  82. package/dist/server/tools/codetree-read.d.ts +52 -3
  83. package/dist/server/tools/codetree-read.d.ts.map +1 -1
  84. package/dist/server/tools/codetree-read.js +237 -55
  85. package/dist/server/tools/codetree-read.js.map +1 -1
  86. package/dist/server/tools/codetree-search.d.ts +13 -1
  87. package/dist/server/tools/codetree-search.d.ts.map +1 -1
  88. package/dist/server/tools/codetree-search.js +80 -52
  89. package/dist/server/tools/codetree-search.js.map +1 -1
  90. package/dist/server/tools/codetree-structure.d.ts +25 -1
  91. package/dist/server/tools/codetree-structure.d.ts.map +1 -1
  92. package/dist/server/tools/codetree-structure.js +92 -42
  93. package/dist/server/tools/codetree-structure.js.map +1 -1
  94. package/dist/server/tools/codetree-summary.d.ts +2 -0
  95. package/dist/server/tools/codetree-summary.d.ts.map +1 -1
  96. package/dist/server/tools/codetree-summary.js +5 -0
  97. package/dist/server/tools/codetree-summary.js.map +1 -1
  98. package/dist/setup/install.d.ts +45 -1
  99. package/dist/setup/install.d.ts.map +1 -1
  100. package/dist/setup/install.js +163 -58
  101. package/dist/setup/install.js.map +1 -1
  102. package/dist/setup/template-load.d.ts +9 -0
  103. package/dist/setup/template-load.d.ts.map +1 -0
  104. package/dist/setup/template-load.js +39 -0
  105. package/dist/setup/template-load.js.map +1 -0
  106. package/dist/storage/database.d.ts +49 -0
  107. package/dist/storage/database.d.ts.map +1 -1
  108. package/dist/storage/database.js +383 -43
  109. package/dist/storage/database.js.map +1 -1
  110. package/dist/storage/disk-manager.d.ts.map +1 -1
  111. package/dist/storage/disk-manager.js +1 -5
  112. package/dist/storage/disk-manager.js.map +1 -1
  113. package/dist/utils.d.ts +23 -0
  114. package/dist/utils.d.ts.map +1 -0
  115. package/dist/utils.js +102 -0
  116. package/dist/utils.js.map +1 -0
  117. package/package.json +46 -10
  118. package/templates/README.md +15 -0
  119. package/templates/agents-codetree.snippet.md +24 -0
  120. package/templates/claude-md-codetree.snippet.md +22 -0
  121. package/templates/claude-rules-codetree.md +23 -0
  122. package/templates/cursor-codetree.mdc +31 -0
  123. package/templates/gemini-codetree.snippet.md +6 -0
package/README.md CHANGED
@@ -1,49 +1,65 @@
1
- # CodeTree
1
+ # CodeTree (`codetree-claude`)
2
2
 
3
- **Reduce Claude Code token usage by 60-70%** by caching codebase reads in a persistent index.
3
+ **Persistent codebase index + MCP tools for AI coding assistants** — cut redundant **Read / Grep / Glob** token use by routing work through a **cached SQLite index** and **symbol-aware** APIs.
4
4
 
5
- > **v1.5** Now with real-time cache integrity, Windows `\r\n` support, git branch awareness, and full session tracking across all tools.
5
+ Works with **Anthropic Claude Code**, **Cursor**, **OpenAI Codex**, **Google Antigravity / Gemini-oriented flows**, and any **MCP-compatible** editor or CLI not only Claude. One **`codetree init`** wires the **same MCP server** into each tool’s config format your repo uses.
6
6
 
7
- ## The Problem
7
+ > **v1.5** — Real-time cache integrity, Windows `\r\n` support, git branch awareness, session tracking, and **multi-editor setup** (Claude + Cursor + Codex + Antigravity) from a single CLI.
8
8
 
9
- When your team uses Claude Code, **~70% of tokens** go to re-reading the same files across conversations — Glob, Grep, and Read calls that scan the same codebase over and over.
9
+ ## Supported AI coding tools (multi-IDE)
10
10
 
11
- ## The Solution
11
+ | Product | What CodeTree configures | How you save tokens |
12
+ |--------|---------------------------|---------------------|
13
+ | **Claude Code** (Anthropic) | Root `.mcp.json`, `.claude/settings.json` **hooks**, `CLAUDE.md`, `.claude/rules` | **Hooks** can redirect native Read/Grep/Glob/Edit/Write to `codetree_*` when safe |
14
+ | **Cursor** | `.cursor/mcp.json`, `.cursor/rules/codetree.mdc` | MCP tools + rules steer the agent toward CodeTree |
15
+ | **OpenAI Codex** | `.codex/config.toml` `[mcp_servers.codetree]`, `AGENTS.md` | MCP tools + agent instructions (merge-safe TOML) |
16
+ | **Google Antigravity** | `.antigravity/mcp.json`, **`AGENTS.md`**, **`GEMINI.md`** | MCP + portable docs (Gemini / Antigravity steering) |
17
+ | **VS Code** | Marketplace extension **“CodeTree — Cache for Claude Code”** | Helps activate / discover setup in the editor |
18
+ | **Any MCP host** | Same `node …/mcp-server.js` entry as above | Register **Model Context Protocol** server manually if your stack reads custom paths |
12
19
 
13
- CodeTree indexes your codebase into a persistent SQLite database and intercepts Claude Code's file operations. When a file hasn't changed since the last read, Claude uses the cached version. Every read is validated against disk you'll never get stale content, even after git branch switches, VS Code edits, or external file changes.
20
+ **Important:** **Token-saving hooks** (PreToolUse interception) are a **Claude Code** feature. **Cursor, Codex, and Antigravity** use **MCP + project rules/docs** the model is steered to call `codetree_read`, `codetree_search`, etc., instead of only native tools. The **indexer, cache, and MCP tool surface** are shared for everyone.
14
21
 
15
- ### How it works
22
+ **Search keywords (ecosystem):** MCP server, Model Context Protocol, AI coding agent, AI pair programmer, codebase RAG alternative, repo indexer, Claude Code cache, Cursor MCP, OpenAI Codex MCP, Google Antigravity MCP, Gemini coding, VS Code extension, developer productivity, LLM tools, context window optimization.
23
+
24
+ ## The problem
25
+
26
+ Teams using **AI coding assistants** spend a large share of **context / tokens** on **re-reading** the same files — repeated Glob, Grep, and Read calls across chats and tasks.
27
+
28
+ ## The solution
29
+
30
+ CodeTree **indexes** the repo into a **local SQLite** database and exposes **MCP tools** (`codetree_read`, `codetree_search`, `codetree_structure`, …). **Claude Code** can additionally **intercept** native tool calls via **hooks** and redirect when the index can answer. **Other IDEs** rely on **MCP + rules** so agents prefer CodeTree. Reads stay **mtime-validated** so content is not silently stale after edits, branch switches, or merges.
31
+
32
+ ### How it works (Claude Code with hooks)
16
33
 
17
34
  ```
18
- Developer asks Claude to work on a feature
35
+ Developer asks the assistant to work on a feature
19
36
 
20
- ├── Claude calls Read("src/api/auth.ts")
21
- │ └── Hook interceptsfile cached? YES → redirect to codetree_read
22
- │ └── Returns cached content + symbols metadata
37
+ ├── Read("src/api/auth.ts")
38
+ │ └── Hook (Claude Code) → cached? YES → codetree_read
39
+ │ └── Cached content + symbol metadata
23
40
 
24
- ├── Claude calls Grep("handleAuth")
25
- │ └── Hook intercepts symbol indexed? YES → redirect to codetree_search
26
- │ └── Returns indexed symbol locations instantly
41
+ ├── Grep("handleAuth")
42
+ │ └── Hook → indexed? YES → codetree_search
27
43
 
28
- └── Claude calls Glob("src/**/*.ts")
29
- └── Hook intercepts → tree indexed? YES → redirect to codetree_structure
30
- └── Returns file tree from index
44
+ └── Glob("src/**/*.ts")
45
+ └── Hook → tree indexed? YES → codetree_structure
31
46
  ```
32
47
 
48
+ For **Cursor / Codex / Antigravity**, the same tools are available over **MCP**; steering is via **rules** and **`AGENTS.md` / `GEMINI.md`** instead of hooks.
49
+
33
50
  ## Install
34
51
 
35
- ### Option 1: npm package (any project)
52
+ ### Option 1: npm package (global — any project)
36
53
 
37
54
  ```bash
38
55
  npm install -g codetree-claude
39
56
 
40
- # In your project root:
41
57
  codetree init
42
58
  ```
43
59
 
44
- ### Option 2: VS Code Extension
60
+ ### Option 2: VS Code extension
45
61
 
46
- Install "CodeTree — Cache for Claude Code" from the VS Code marketplace. It auto-activates when you open a project.
62
+ Install **“CodeTree — Cache for Claude Code”** from the VS Code Marketplace. It helps you use CodeTree when the project is open in VS Code.
47
63
 
48
64
  ### Option 3: Per-project dev dependency
49
65
 
@@ -52,29 +68,60 @@ npm install --save-dev codetree-claude
52
68
  npx codetree init
53
69
  ```
54
70
 
55
- ## What gets created
71
+ ## What `codetree init` creates (multi-tool)
72
+
73
+ `codetree init` configures **Claude Code** (hooks + root `.mcp.json`) and, in the same run, adds **Cursor**, **Antigravity**, **OpenAI Codex**, and portable agent docs — **without changing** the established Claude behavior.
56
74
 
57
75
  ```
58
76
  your-project/
59
- .codetreerc.json # Config (ignore patterns, cache size, etc.)
60
- .claude/settings.json # PreToolUse hook registration
61
- .mcp.json # MCP server registration
62
- .codetree/ # Index database (gitignored)
77
+ .codetreerc.json # Config (ignore patterns, cache size, )
78
+ .claude/settings.json # Hooks (Claude Code): PreToolUse, PostToolUse, SessionStart, compaction, …
79
+ .mcp.json # MCP Claude Code convention
80
+ .cursor/mcp.json # MCP Cursor IDE
81
+ .cursor/rules/codetree.mdc # Cursor: prefer CodeTree MCP tools
82
+ .antigravity/mcp.json # MCP — Google Antigravity (project-level)
83
+ .codex/config.toml # MCP — OpenAI Codex (trusted projects; merged safely)
84
+ CLAUDE.md # Claude Code instructions
85
+ AGENTS.md # Portable (Cursor, Codex, Antigravity, …)
86
+ GEMINI.md # Short pointer for Antigravity / Gemini
87
+ .codetree/ # Index database (gitignored)
63
88
  index.db
64
89
  ipc.port
65
90
  stats.json
66
91
  ```
67
92
 
68
- ## CLI Commands
93
+ Commit `.codetreerc.json`, `.mcp.json`, `.cursor/`, `.antigravity/`, `.codex/`, `AGENTS.md`, and `GEMINI.md` as your team prefers; keep `.codetree/` gitignored.
94
+
95
+ ### Where rules & config live per tool
96
+
97
+ | Tool | MCP config | Instructions / rules |
98
+ |------|------------|----------------------|
99
+ | **Claude Code** | Root `.mcp.json` | Hooks in `.claude/settings.json` + `CLAUDE.md` + `.claude/rules/codetree.md` |
100
+ | **Cursor** | `.cursor/mcp.json` | `.cursor/rules/codetree.mdc` (alwaysApply) |
101
+ | **OpenAI Codex** | `.codex/config.toml` | `AGENTS.md` (and Codex trust settings) |
102
+ | **Google Antigravity** | `.antigravity/mcp.json` | **`AGENTS.md`** (full table) + **`GEMINI.md`** (short Gemini pointer). Antigravity loads these; there is no extra Antigravity-only rules file in this package. |
103
+
104
+ ### Bundled templates (npm package)
105
+
106
+ Instruction text ships under **`templates/`** in the published package (see `templates/README.md`). `codetree init` copies from those files into your repo. Customize locally; re-run `codetree init` to refresh from the bundled templates.
107
+
108
+ ## CLI commands
69
109
 
70
110
  ```bash
71
- codetree init # Set up CodeTree in current project
111
+ codetree init # Set up CodeTree + Claude + Cursor + Antigravity + Codex configs
72
112
  codetree status # Check if running + index health
73
- codetree stats # View cache hit rate + token savings
113
+ codetree stats # Cache hit rate + estimated token savings (see output for assumptions)
74
114
  codetree reindex # Force full re-index
115
+ codetree doctor # Verify MCP paths, hook scripts, IPC (after Node/npm changes)
75
116
  codetree help # Show help
76
117
  ```
77
118
 
119
+ ### Dev dependency vs global, and AI tools
120
+
121
+ - With **`npm install --save-dev codetree-claude`**, `.mcp.json` points at `node_modules/codetree-claude/dist/...`. The **MCP server runs** as usual; some assistants **skip `node_modules`** in search context — that is expected.
122
+ - The **indexer** skips **`node_modules`** for speed. To hack on **CodeTree source**, open a **git clone** of this repo as the project root.
123
+ - After **`nvm use`**, switching Node, or changing **npm prefix**, run **`codetree doctor`** and **`codetree init`** again if paths are wrong.
124
+
78
125
  ## Configuration
79
126
 
80
127
  Edit `.codetreerc.json` in your project root:
@@ -94,119 +141,88 @@ Edit `.codetreerc.json` in your project root:
94
141
  }
95
142
  ```
96
143
 
97
- ## Built for Real-World Reliability
144
+ ## Built for real-world reliability
98
145
 
99
- CodeTree isn't just a cache — it's designed for the messy reality of daily development.
146
+ ### Never stale
147
+ - **External edits** — mtime validation; fresh content after VS Code saves, merges, etc.
148
+ - **Git branch aware** — branch switches invalidate relevant cache.
149
+ - **Any process** that changes files on disk is reflected on next read.
100
150
 
101
- ### Never Stale
102
- - **External edits detected** Edit a file in VS Code, save, immediately ask Claude about it. CodeTree validates disk mtime every 5 seconds per file and serves fresh content automatically.
103
- - **Git branch aware** — Switch branches with `git checkout` and CodeTree instantly invalidates its cache. No stale content from the old branch, no manual cache clearing.
104
- - **Works with any tool** — git merge, rebase, stash, sed, vim — any process that modifies files on disk is detected on the next read.
151
+ ### Cross-platform
152
+ - **Windows `\r\n`**`codetree_edit` normalizes for matching; preserves style on write.
153
+ - **Paths** — forward slashes in MCP JSON strings for portability.
105
154
 
106
- ### Cross-Platform
107
- - **Windows `\r\n` handled** — `codetree_edit` normalizes line endings for matching and preserves the original style on write. No more "old_string not found" on Windows projects.
108
- - **Path normalization** — Forward slashes everywhere internally, regardless of OS.
155
+ ### Safe at scale
156
+ - **Large files** — truncation with offset/limit guidance.
157
+ - **Large repos** — structure view can collapse top-level for 500+ files.
158
+ - **Hooks (Claude)** — redirect only when CodeTree can serve; otherwise native tools run.
159
+ - **Graceful degradation** — non-critical failures wrapped so core reads do not break.
109
160
 
110
- ### Safe at Scale
111
- - **Large files** Reads over 100KB are auto-truncated with guidance to use offset/limit. No blown context windows.
112
- - **Large repos** — Project structure auto-collapses to top-level directories for repos with 500+ files.
113
- - **Smart redirects** — The hook only blocks native Read/Edit/Write/Grep/Glob when CodeTree can actually serve the request. If the file isn't cached, native tools proceed normally.
114
- - **Graceful degradation** — Session logging, cache validation, and all non-critical operations are wrapped in try/catch. A failure in telemetry never breaks your read or edit.
161
+ ### Full session memory (Claude Code path)
162
+ Session logging and compaction-related behavior are strongest where **hooks** run; MCP-only clients still get the full **tool set** on the server.
115
163
 
116
- ### Full Session Memory
117
- Every CodeTree tool logs its activity — not just native Read/Grep/Glob. Hot files, search patterns, and modification history are complete across both native and CodeTree tools, giving you accurate session context and compaction restores.
164
+ ## MCP tools (all MCP hosts)
118
165
 
119
- ## MCP Tools
166
+ These tools are registered for **Claude Code, Cursor, Codex, Antigravity**, and any compatible MCP client:
120
167
 
121
- CodeTree exposes 8 tools that Claude Code uses instead of native Read/Grep/Glob:
168
+ | Tool | Replaces / complements | What it does |
169
+ |------|------------------------|--------------|
170
+ | `codetree_read` | Read | Cached read + symbols; mtime-validated. |
171
+ | `codetree_edit` | Edit | Edit without prior Read; `\r\n`-safe on Windows. |
172
+ | `codetree_write` | Write | Write without prior Read; creates parent dirs. |
173
+ | `codetree_search` | Grep | Symbol index + optional content search. |
174
+ | `codetree_structure` | Glob | Project tree; auto-collapse on huge repos. |
175
+ | `codetree_find_refs` | — | Cross-file references. |
176
+ | `codetree_summary` | — | Project overview for session start. |
177
+ | `codetree_memory` | — | Save / recall insights across sessions. |
122
178
 
123
- | Tool | Replaces | What it does |
124
- |------|----------|-------------|
125
- | `codetree_read` | Read | Cached file read with symbol metadata. Mtime-validated, never stale. |
126
- | `codetree_edit` | Edit | File edit without prior Read. Handles `\r\n` line endings on Windows. |
127
- | `codetree_write` | Write | File write without prior Read. Auto-creates parent directories. |
128
- | `codetree_search` | Grep | Symbol index search + optional content search with fast pre-filtering. |
129
- | `codetree_structure` | Glob | Project tree browser. Auto-collapses large repos to top-level directories. |
130
- | `codetree_find_refs` | — | Cross-file reference finder with fast file-skip for common symbols. |
131
- | `codetree_summary` | — | Full project overview for session start. |
132
- | `codetree_memory` | — | Persistent session memory — save and recall insights across conversations. |
179
+ ## Supported languages (symbols)
133
180
 
134
- ## Supported Languages
181
+ Symbol extraction: JavaScript, TypeScript (JSX/TSX), Python, Java/Kotlin/C#, Go.
135
182
 
136
- Symbol extraction works for:
137
- - JavaScript / TypeScript (JSX, TSX)
138
- - Python
139
- - Java / Kotlin / C#
140
- - Go
183
+ Indexing and text caching: Prisma, GraphQL, Protobuf, SQL, YAML, TOML, JSON, Markdown, HTML, CSS/SCSS, shell, Docker, Terraform, `.env`, and more.
141
184
 
142
- Content caching and indexing works for all text files, including:
143
- - Prisma, GraphQL, Protobuf
144
- - SQL, YAML, TOML, JSON
145
- - Markdown, HTML, CSS/SCSS
146
- - Shell scripts, Dockerfiles, Terraform
147
- - `.env` and config files
148
-
149
- ## Architecture
185
+ ## Architecture (conceptual)
150
186
 
151
187
  ```
152
- ┌───────────────────────────────────────────────────┐
153
- │ Claude Code
154
- ┌─────────────────────────────────────────────┐
155
- │ │ Hooks (5 lifecycle events) │ │
156
- │ │ ├── PreToolUse: redirect Read/Grep/Glob/ │ │
157
- │ │ Edit/Write → CodeTree if cached │
158
- ├── PostToolUse: log session activity
159
- │ ├── SessionStart: inject prior knowledge │
160
- │ │ ├── PreCompact: save context snapshot │ │
161
- │ └── PostCompact: restore context from cache │
162
- └──────────────┬──────────────────────────────┘
163
-
164
- ┌──────────────▼──────────────────────────────┐
165
- │ MCP Server (8 tools) │
166
- │ │ ├── codetree_read (mtime-validated) │ │
167
- │ │ ├── codetree_edit (\r\n-safe) │ │
168
- │ │ ├── codetree_write │ │
169
- │ │ ├── codetree_search (pre-filtered) │ │
170
- │ │ ├── codetree_structure (auto-collapse) │ │
171
- │ │ ├── codetree_find_refs │ │
172
- │ │ ├── codetree_summary │ │
173
- │ │ └── codetree_memory (cross-session) │ │
174
- │ └──────────────┬──────────────────────────────┘ │
175
- │ │ │
176
- │ ┌──────────────▼──────────────────────────────┐ │
177
- │ │ Indexer + Cache Layer │ │
178
- │ │ ├── SQLite database (persistent index) │ │
179
- │ │ ├── LRU cache (hot files, mtime-checked) │ │
180
- │ │ ├── Symbol extraction (JS/TS/Py/Java/Go) │ │
181
- │ │ ├── File watcher (chokidar, live updates) │ │
182
- │ │ ├── Git HEAD watcher (branch switch detect) │ │
183
- │ │ ├── Session memory (reads/edits/insights) │ │
184
- │ │ └── Disk manager (space monitoring) │ │
185
- │ └─────────────────────────────────────────────┘ │
186
- └───────────────────────────────────────────────────┘
188
+ ┌─────────────────────────────────────────────────────────────┐
189
+ AI client (Claude Code / Cursor / Codex / Antigravity / …)
190
+ ┌───────────────────────────────────────────────────────┐
191
+ │ │ Claude Code: hooks (optional redirects) │ │
192
+ │ │ Others: MCP + rules / AGENTS.md / GEMINI.md │ │
193
+ └───────────────────────────┬───────────────────────────┘
194
+
195
+ ┌───────────────────────────▼───────────────────────────┐
196
+ │ │ MCP server codetree_read, codetree_search, … │ │
197
+ └───────────────────────────┬───────────────────────────┘
198
+
199
+ ┌───────────────────────────▼───────────────────────────┐
200
+ │ Indexer + cache (SQLite, LRU, watcher, git HEAD, …) │
201
+ └─────────────────────────────────────────────────────────┘
202
+ └─────────────────────────────────────────────────────────────┘
187
203
  ```
188
204
 
189
- ## Org-wide Rollout
205
+ ## Org-wide rollout
190
206
 
191
- 1. Add `codetree-claude` as a dev dependency in your repos
192
- 2. Commit `.codetreerc.json` and `.mcp.json` to version control
193
- 3. Add `.codetree/` to `.gitignore` (done automatically by `codetree init`)
194
- 4. Each developer runs `npx codetree init` once (or use the VS Code extension)
207
+ 1. Add `codetree-claude` as a dev dependency (or document global install).
208
+ 2. Commit `.codetreerc.json`, `.mcp.json`, `.cursor/`, `.antigravity/`, `.codex/`, `AGENTS.md`, `GEMINI.md` as policy allows.
209
+ 3. Add `.codetree/` to `.gitignore` (init does this).
210
+ 4. Each developer runs `npx codetree init` once (or uses the VS Code extension).
195
211
 
196
- The index database is local to each machine it rebuilds automatically on first run.
212
+ The index is **local per machine** and rebuilds on demand.
197
213
 
198
- ## Token Savings Estimate
214
+ ## Token savings (illustrative)
199
215
 
200
- For a typical session on a 10K-file TypeScript project:
216
+ Typical session on a large TypeScript repo — **your** numbers may differ; run **`codetree stats`** for real metrics.
201
217
 
202
218
  | Without CodeTree | With CodeTree |
203
- |-----------------|---------------|
204
- | ~50 Read calls per task | ~10 Read calls (rest cached) |
205
- | ~20 Grep calls per task | ~5 Grep calls (rest from index) |
206
- | ~15 Glob calls per task | ~3 Glob calls (rest from tree) |
207
- | **~800K tokens/task** | **~250K tokens/task** |
219
+ |------------------|---------------|
220
+ | Many Read / Grep / Glob calls | Fewer, more cache/index hits |
221
+ | Higher token use on repetition | Lower repetition via index + MCP |
222
+
223
+ ## npm discovery
208
224
 
209
- Run `codetree stats` to see actual savings for your project.
225
+ This package is published as **`codetree-claude`**. **Keywords** in `package.json` (e.g. `mcp`, `claude-code`, `cursor`, `codex`, `antigravity`, `gemini`, `codebase-index`) help **npmjs.com** search. They are not read from `.npmrc` — `.npmrc` is for **registry and install** settings.
210
226
 
211
227
  ## License
212
228
 
package/dist/cli.js CHANGED
@@ -1,8 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { resolve, join, dirname } from "node:path";
3
- import { existsSync, readFileSync, readdirSync } from "node:fs";
3
+ import { existsSync, readFileSync } from "node:fs";
4
4
  import { fileURLToPath } from "node:url";
5
- import { installHook, installMcpServer, createDefaultConfig, updateGitignore, installClaudeMd, installClaudeRules } from "./setup/install.js";
5
+ import { installHook, installMcpServer, createDefaultConfig, updateGitignore, installClaudeMd, installClaudeRules, installCursorMcp, installCursorRules, installAntigravityMcp, installCodexMcp, installAgentsMd, installGeminiMd, } from "./setup/install.js";
6
+ import { runDoctor } from "./doctor.js";
7
+ import { findGitRepos, findPackageRoot, formatNumber } from "./utils.js";
6
8
  const __filename = fileURLToPath(import.meta.url);
7
9
  const __dirname = dirname(__filename);
8
10
  const args = process.argv.slice(2);
@@ -21,48 +23,15 @@ async function main() {
21
23
  case "reindex":
22
24
  await handleReindex();
23
25
  break;
26
+ case "doctor":
27
+ await runDoctor();
28
+ break;
24
29
  case "help":
25
30
  default:
26
31
  printHelp();
27
32
  break;
28
33
  }
29
34
  }
30
- // ─── Find all git repos ──────────────────────────────────────
31
- function findGitRepos(startDir, maxDepth = 3) {
32
- const repos = [];
33
- const visited = new Set();
34
- function walk(dir, depth) {
35
- if (depth > maxDepth)
36
- return;
37
- const resolved = resolve(dir);
38
- if (visited.has(resolved))
39
- return;
40
- visited.add(resolved);
41
- // Is this a git repo?
42
- if (existsSync(join(resolved, ".git"))) {
43
- repos.push(resolved);
44
- return; // Don't recurse into git repos
45
- }
46
- // Scan subdirectories
47
- let entries;
48
- try {
49
- entries = readdirSync(resolved, { withFileTypes: true });
50
- }
51
- catch {
52
- return;
53
- }
54
- const skip = new Set(["node_modules", ".git", "dist", "build", ".next", "__pycache__", ".codetree", ".cache"]);
55
- for (const entry of entries) {
56
- if (!entry.isDirectory())
57
- continue;
58
- if (skip.has(entry.name) || entry.name.startsWith("."))
59
- continue;
60
- walk(join(resolved, entry.name), depth + 1);
61
- }
62
- }
63
- walk(startDir, 0);
64
- return repos;
65
- }
66
35
  // ─── Init ────────────────────────────────────────────────────
67
36
  async function handleInit() {
68
37
  const cwd = resolve(process.cwd());
@@ -83,45 +52,76 @@ async function handleInit() {
83
52
  console.log(` - ${repo}`);
84
53
  }
85
54
  console.log();
86
- const packageRoot = findPackageRoot();
55
+ const packageRoot = findPackageRootFromDir();
87
56
  const hookScript = join(packageRoot, "dist", "hook", "pre-tool-use.js");
88
57
  const serverScript = join(packageRoot, "dist", "server", "mcp-server.js");
89
58
  let totalSetup = 0;
90
59
  for (const repo of repos) {
91
60
  const repoName = dirname(repo) === repo ? repo : repo.split(/[/\\]/).pop();
92
61
  console.log(` ── Setting up: ${repoName} ──`);
93
- // 1. Config
94
- const configResult = createDefaultConfig(repo);
95
- console.log(` [1/5] Config: ${existsSync(join(repo, ".codetreerc.json")) ? "exists" : "created"}`);
96
- // 2. Gitignore
97
- updateGitignore(repo);
98
- console.log(` [2/5] .gitignore: updated`);
99
- // 3. Hooks
100
- const hookResult = installHook(repo, hookScript);
101
- console.log(` [3/5] Hooks: ${hookResult.message}`);
102
- // 4. MCP server
103
- const mcpResult = installMcpServer(repo, serverScript);
104
- console.log(` [4/5] MCP: ${mcpResult.message}`);
105
- // 5. CLAUDE.md — instructs Claude to use CodeTree MCP tools
106
- installClaudeMd(repo);
107
- console.log(` [5/6] CLAUDE.md: updated`);
108
- // 6. .claude/rules/ — mandatory rules Claude MUST follow
109
- installClaudeRules(repo);
110
- console.log(` [6/6] Rules: .claude/rules/codetree.md`);
111
- totalSetup++;
62
+ try {
63
+ // 1. Config
64
+ createDefaultConfig(repo);
65
+ console.log(` [1/12] Config: ${existsSync(join(repo, ".codetreerc.json")) ? "exists" : "created"}`);
66
+ // 2. Gitignore
67
+ updateGitignore(repo);
68
+ console.log(` [2/12] .gitignore: updated`);
69
+ // 3. Hooks
70
+ const hookResult = installHook(repo, hookScript);
71
+ console.log(` [3/12] Hooks: ${hookResult.message}`);
72
+ // 4. MCP server (Claude Code — root .mcp.json)
73
+ const mcpResult = installMcpServer(repo, serverScript);
74
+ console.log(` [4/12] MCP: ${mcpResult.message}`);
75
+ // 5. CLAUDE.md — instructs Claude to use CodeTree MCP tools
76
+ installClaudeMd(repo);
77
+ console.log(` [5/12] CLAUDE.md: updated`);
78
+ // 6. .claude/rules/ — mandatory rules Claude MUST follow
79
+ installClaudeRules(repo);
80
+ console.log(` [6/12] Rules: .claude/rules/codetree.md`);
81
+ // 7–12. Cursor, Antigravity, Codex, AGENTS.md, GEMINI.md (do not change Claude paths above)
82
+ const cursorMcp = installCursorMcp(repo, serverScript);
83
+ console.log(` [7/12] ${cursorMcp.message}`);
84
+ installCursorRules(repo);
85
+ console.log(` [8/12] Cursor rules: .cursor/rules/codetree.mdc`);
86
+ const agMcp = installAntigravityMcp(repo, serverScript);
87
+ console.log(` [9/12] ${agMcp.message}`);
88
+ const codexMcp = installCodexMcp(repo, serverScript);
89
+ console.log(` [10/12] ${codexMcp.message}`);
90
+ installAgentsMd(repo);
91
+ console.log(` [11/12] AGENTS.md: CodeTree block`);
92
+ installGeminiMd(repo);
93
+ console.log(` [12/12] GEMINI.md: CodeTree pointer`);
94
+ totalSetup++;
95
+ }
96
+ catch (err) {
97
+ const msg = err instanceof Error ? err.message : String(err);
98
+ console.error(` ✗ Failed for ${repoName}: ${msg}`);
99
+ }
112
100
  console.log();
113
101
  }
114
102
  // Also install at workspace root (cwd) if it's different from repos
115
103
  if (!repos.includes(cwd)) {
116
- installClaudeMd(cwd);
117
- installClaudeRules(cwd);
118
- console.log(` Workspace root: CLAUDE.md + rules added`);
104
+ try {
105
+ installClaudeMd(cwd);
106
+ installClaudeRules(cwd);
107
+ installCursorMcp(cwd, serverScript);
108
+ installCursorRules(cwd);
109
+ installAntigravityMcp(cwd, serverScript);
110
+ installCodexMcp(cwd, serverScript);
111
+ installAgentsMd(cwd);
112
+ installGeminiMd(cwd);
113
+ console.log(` Workspace root: CLAUDE.md, rules, Cursor, Antigravity, Codex, AGENTS.md, GEMINI.md`);
114
+ }
115
+ catch (err) {
116
+ const msg = err instanceof Error ? err.message : String(err);
117
+ console.error(` ✗ Workspace root setup failed: ${msg}`);
118
+ }
119
119
  console.log();
120
120
  }
121
121
  console.log(` ✓ ${totalSetup} project${totalSetup > 1 ? "s" : ""} configured.`);
122
122
  console.log();
123
123
  console.log(` What happens now:`);
124
- console.log(` 1. Reload VS Code (Ctrl+Shift+P → Developer: Reload Window)`);
124
+ console.log(` 1. Reload the editor (VS Code / Cursor: Cmd/Ctrl+Shift+P → Developer: Reload Window)`);
125
125
  console.log(` 2. Claude Code will auto-start the MCP server per project`);
126
126
  console.log(` 3. Hooks intercept Read/Grep/Glob and serve from cache`);
127
127
  console.log(` 4. Check the CodeTree sidebar for live stats`);
@@ -132,6 +132,9 @@ async function handleInit() {
132
132
  console.log(` codetree reindex — Force re-index all projects`);
133
133
  console.log();
134
134
  }
135
+ function findPackageRootFromDir() {
136
+ return findPackageRoot(__dirname);
137
+ }
135
138
  // ─── Status (aggregated) ─────────────────────────────────────
136
139
  async function handleStatus() {
137
140
  const cwd = resolve(process.cwd());
@@ -223,7 +226,8 @@ async function handleStats() {
223
226
  }
224
227
  }
225
228
  const totalHitRate = totalQueries > 0 ? ((totalHits / totalQueries) * 100).toFixed(1) : "0.0";
226
- const costSaved = ((totalTokensSaved / 1_000_000) * 3).toFixed(2);
229
+ // Blended avg: Opus $15/M input, Sonnet $3/M input, weighted ~$10/M
230
+ const costSaved = ((totalTokensSaved / 1_000_000) * 10).toFixed(2);
227
231
  console.log(`\n ── Totals ──`);
228
232
  console.log(` Active repos: ${activeRepos}`);
229
233
  console.log(` Total files: ${formatNumber(totalFiles)}`);
@@ -232,7 +236,7 @@ async function handleStats() {
232
236
  console.log(` Cache misses: ${formatNumber(totalMisses)}`);
233
237
  console.log(` Hit rate: ${totalHitRate}%`);
234
238
  console.log(` Tokens saved: ~${formatNumber(totalTokensSaved)}`);
235
- console.log(` Cost saved: ~$${costSaved} (at $3/MTok)`);
239
+ console.log(` Cost saved (est.): ~${costSaved} USD (blended avg ~$10/M input tokens: Opus $15, Sonnet $3)`);
236
240
  console.log();
237
241
  }
238
242
  async function handleReindex() {
@@ -270,31 +274,13 @@ function printHelp() {
270
274
  codetree status Check all projects
271
275
  codetree stats Aggregated cache hit rates and token savings
272
276
  codetree reindex Force re-index all projects
277
+ codetree doctor Verify MCP paths, hooks, and IPC (after Node/npm changes)
273
278
  codetree help Show this help
274
279
 
275
280
  Run 'codetree init' from your workspace root — it auto-discovers
276
281
  all git repos underneath and sets up each one.
277
282
  `);
278
283
  }
279
- function findPackageRoot() {
280
- let dir = resolve(__dirname);
281
- for (let i = 0; i < 10; i++) {
282
- if (existsSync(join(dir, "package.json")))
283
- return dir;
284
- const parent = resolve(dir, "..");
285
- if (parent === dir)
286
- break;
287
- dir = parent;
288
- }
289
- return resolve(__dirname, "..");
290
- }
291
- function formatNumber(n) {
292
- if (n < 1_000)
293
- return String(n);
294
- if (n < 1_000_000)
295
- return `${(n / 1_000).toFixed(1)}K`;
296
- return `${(n / 1_000_000).toFixed(1)}M`;
297
- }
298
284
  main().catch((err) => {
299
285
  console.error(`Error: ${err.message}`);
300
286
  process.exit(1);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}