ctxloom-pro 1.0.18 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -70,19 +70,39 @@ Set `CTXLOOM_LICENSE_KEY` in your CI secrets. The key is validated on every run
70
70
 
71
71
  ### Manual MCP Configuration
72
72
 
73
+ This is what `ctxloom setup` writes for you. Match it by hand if you prefer:
74
+
73
75
  ```jsonc
74
- // ~/.claude/claude_desktop_config.json (or equivalent)
76
+ // Claude Code: ~/.claude.json
77
+ // Cursor: ~/.cursor/mcp.json
78
+ // Codex CLI: ~/.codex/mcp.json
79
+ // Kimi: ~/.kimi/mcp.json
80
+ // Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json
75
81
  {
76
82
  "mcpServers": {
77
83
  "ctxloom": {
78
- "command": "npx",
79
- "args": ["-y", "ctxloom"]
84
+ "command": "ctxloom",
85
+ "args": []
80
86
  }
81
87
  }
82
88
  }
83
89
  ```
84
90
 
85
- > If installed globally: `"command": "ctxloom"` with `"args": []`.
91
+ The MCP server inherits cwd from the host. Claude Code, Cursor, Codex, and Kimi all spawn it with the open project as cwd, so the right project is indexed automatically — no `CTXLOOM_ROOT` needed.
92
+
93
+ For hosts without a project concept (Claude Desktop, CI), set the root explicitly:
94
+
95
+ ```jsonc
96
+ {
97
+ "mcpServers": {
98
+ "ctxloom": {
99
+ "command": "ctxloom",
100
+ "args": [],
101
+ "env": { "CTXLOOM_ROOT": "/path/to/project" }
102
+ }
103
+ }
104
+ }
105
+ ```
86
106
  >
87
107
  > Pricing: **Pro** €9.90/mo or €99/yr (1 machine) · **Team** €19.90/mo or €199/yr (3 machines) · [ctxloom.com/pricing](https://ctxloom.com/pricing)
88
108
 
@@ -355,7 +375,7 @@ The tool reads `.ctxloom/rules.yml` and the live dependency graph on every call
355
375
 
356
376
  ---
357
377
 
358
- ## Tools — 32 total
378
+ ## Tools — 33 total
359
379
 
360
380
  ### Search & Context
361
381
 
@@ -388,6 +408,7 @@ The tool reads `.ctxloom/rules.yml` and the live dependency graph on every call
388
408
  | `ctx_get_call_graph` | Bidirectional call graph traversal with configurable depth |
389
409
  | `ctx_get_definition` | Symbol definition lookup via AST index |
390
410
  | `ctx_execution_flow` | DFS call graph traversal from entry point with cycle detection |
411
+ | `ctx_get_affected_flows` | Which flows are affected by changed files? Traces back to root callers, then forward — auto-detects from `git diff HEAD~1` |
391
412
  | `ctx_refactor_preview` | Read-only symbol rename diff preview — see every change before applying |
392
413
  | `ctx_apply_refactor` | Write symbol renames to disk atomically (supports dry_run) |
393
414
 
@@ -487,10 +508,10 @@ ctxloom --help Show help
487
508
  | Ruby | ✅ Relative paths | ✅ | ✅ |
488
509
  | Kotlin | ✅ Package imports | ✅ | ✅ |
489
510
  | Swift | ✅ Module imports | ✅ | ✅ |
490
- | PHP | ✅ PSR-4 + require_once | ✅ | |
491
- | Dart | ✅ Relative imports | ✅ | |
492
- | Vue SFC | ✅ Script block | ✅ | |
493
- | Jupyter Notebook | ✅ Python cell imports | ✅ | |
511
+ | PHP | ✅ PSR-4 + require_once | ✅ | |
512
+ | Dart | ✅ Relative imports | ✅ | |
513
+ | Vue SFC | ✅ Script block | ✅ | |
514
+ | Jupyter Notebook | ✅ Python cell imports | ✅ | |
494
515
 
495
516
  ---
496
517
 
@@ -501,7 +522,7 @@ ctxloom --help Show help
501
522
  │ MCP Interface │
502
523
  │ (Stdio transport) │
503
524
  ├──────────────────────────────────────────────────────────┤
504
- 32 Tools (ToolRegistry) │
525
+ 33 Tools (ToolRegistry) │
505
526
  │ Search · Graph Intelligence · Navigation · Review │
506
527
  ├──────────────────────────────────────────────────────────┤
507
528
  │ Context Engine │
@@ -543,18 +564,18 @@ See [`benchmarks/README.md`](benchmarks/README.md) for methodology and how to re
543
564
 
544
565
  ## Token reduction benchmarks
545
566
 
546
- Measured on real open-source repos with realistic review scenarios (skeletonization applies to JS/TS files; Python and Rust show graph indexing metrics only):
567
+ Full-source skeletonization on real open-source frameworks every TS/JS file (skipping tests, `.d.ts`, build output, minified vendor bundles).
547
568
 
548
- | Repository | Language | Files | Raw tokens | Skeleton tokens | Reduction |
549
- |---|---|---|---|---|---|
550
- | expressjs/express | JavaScript | 141 | ~4,646 | ~390 | **92%** |
551
- | sindresorhus/got | TypeScript | 71 | ~10,807 | ~742 | **93%** |
552
- | pallets/flask | Python | 83 | n/a | n/a | n/a |
553
- | SergioBenitez/Rocket | Rust | 495 | ~1,281 | ~90 | **93%** |
554
- | fastify/fastify | JavaScript | 258 | ~2,136 | ~202 | **91%** |
555
- | **Average (JS/TS/RS)** | | | | | **92%** |
569
+ | Repository | Files | Raw tokens | Skeleton tokens | Reduction |
570
+ |---|---:|---:|---:|---:|
571
+ | vercel/next.js | 2,742 | ~12.2M | ~584k | **95%** |
572
+ | honojs/hono | 200 | ~185k | ~30k | **84%** |
573
+ | vitejs/vite | 1,032 | ~459k | ~105k | **77%** |
574
+ | withastro/astro | 875 | ~805k | ~191k | **76%** |
575
+ | nestjs/nest | 1,305 | ~409k | ~177k | **57%** |
576
+ | **Weighted average · 6,154 files** | | **~14.1M** | **~1.1M** | **92%** |
556
577
 
557
- Token counts use the standard 4 chars/token approximation. Results saved in [`benchmarks/public-repos-results.json`](benchmarks/public-repos-results.json). Run `npm run bench:repos` to reproduce.
578
+ Token counts use the standard 4 chars/token approximation. Per-repo range (57–95%) reflects file-shape sensitivity: codebases with lots of tiny re-export shims compress less than ones with meatier source. Results saved in [`benchmarks/large-repos-results.json`](benchmarks/large-repos-results.json). Run `npm run bench:repos` to reproduce.
558
579
 
559
580
  ---
560
581
 
@@ -11571,9 +11571,9 @@ async function startDashboard(options) {
11571
11571
  }
11572
11572
  }));
11573
11573
  const clientDist = path37.join(__dirname2, "../dashboard/client");
11574
- app.use(express.static(clientDist));
11574
+ app.use(express.static(clientDist, { dotfiles: "allow" }));
11575
11575
  app.get(/.*/, (_req, res) => {
11576
- res.sendFile(path37.join(clientDist, "index.html"));
11576
+ res.sendFile(path37.join(clientDist, "index.html"), { dotfiles: "allow" });
11577
11577
  });
11578
11578
  app.listen(port, () => {
11579
11579
  const url = `http://localhost:${port}`;
package/dist/index.js CHANGED
@@ -512,7 +512,7 @@ try {
512
512
  } catch {
513
513
  }
514
514
  var args = process.argv.slice(2);
515
- var ctxloomVersion = "1.0.18".length > 0 ? "1.0.18" : "dev";
515
+ var ctxloomVersion = "1.0.19".length > 0 ? "1.0.19" : "dev";
516
516
  if (args.includes("--version") || args.includes("-v")) {
517
517
  process.stdout.write(`ctxloom ${ctxloomVersion}
518
518
  `);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ctxloom-pro",
3
- "version": "1.0.18",
3
+ "version": "1.0.19",
4
4
  "description": "ctxloom — The Universal Code Context Engine. A local-first MCP server providing intelligent code context via hybrid Vector + AST + Graph search with Skeletonization (92% token reduction).",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",