@fodx/codelens 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +212 -0
- package/adapters/pi/codelens.extension.ts +280 -0
- package/adapters/pi/extension.json +10 -0
- package/build/src/cli.js +265 -0
- package/build/src/cli.js.map +1 -0
- package/build/src/context/schema.sql +23 -0
- package/build/src/context/store.js +91 -0
- package/build/src/context/store.js.map +1 -0
- package/build/src/db/db.js +65 -0
- package/build/src/db/db.js.map +1 -0
- package/build/src/db/migrations.js +88 -0
- package/build/src/db/migrations.js.map +1 -0
- package/build/src/db/schema.js +11 -0
- package/build/src/db/schema.js.map +1 -0
- package/build/src/db/schema.sql +111 -0
- package/build/src/git/scope.js +68 -0
- package/build/src/git/scope.js.map +1 -0
- package/build/src/graph/edges.js +76 -0
- package/build/src/graph/edges.js.map +1 -0
- package/build/src/graph/grammars.js +57 -0
- package/build/src/graph/grammars.js.map +1 -0
- package/build/src/graph/query.js +52 -0
- package/build/src/graph/query.js.map +1 -0
- package/build/src/graph/resolve.js +68 -0
- package/build/src/graph/resolve.js.map +1 -0
- package/build/src/graph/symbols.js +84 -0
- package/build/src/graph/symbols.js.map +1 -0
- package/build/src/graph/tests.js +73 -0
- package/build/src/graph/tests.js.map +1 -0
- package/build/src/index/autoprune.js +29 -0
- package/build/src/index/autoprune.js.map +1 -0
- package/build/src/index/deny.js +40 -0
- package/build/src/index/deny.js.map +1 -0
- package/build/src/index/freshness.js +60 -0
- package/build/src/index/freshness.js.map +1 -0
- package/build/src/index/fts.js +125 -0
- package/build/src/index/fts.js.map +1 -0
- package/build/src/index/identity.js +21 -0
- package/build/src/index/identity.js.map +1 -0
- package/build/src/index/indexer.js +32 -0
- package/build/src/index/indexer.js.map +1 -0
- package/build/src/index/manager.js +48 -0
- package/build/src/index/manager.js.map +1 -0
- package/build/src/index/queue.js +47 -0
- package/build/src/index/queue.js.map +1 -0
- package/build/src/index/recovery.js +51 -0
- package/build/src/index/recovery.js.map +1 -0
- package/build/src/index/reindex.js +70 -0
- package/build/src/index/reindex.js.map +1 -0
- package/build/src/index/scanner.js +147 -0
- package/build/src/index/scanner.js.map +1 -0
- package/build/src/index/ttl.js +87 -0
- package/build/src/index/ttl.js.map +1 -0
- package/build/src/index/watcher.js +74 -0
- package/build/src/index/watcher.js.map +1 -0
- package/build/src/installer/agents.js +440 -0
- package/build/src/installer/agents.js.map +1 -0
- package/build/src/obs/doctor.js +53 -0
- package/build/src/obs/doctor.js.map +1 -0
- package/build/src/obs/stats.js +28 -0
- package/build/src/obs/stats.js.map +1 -0
- package/build/src/obs/usage.js +136 -0
- package/build/src/obs/usage.js.map +1 -0
- package/build/src/search/rank.js +70 -0
- package/build/src/search/rank.js.map +1 -0
- package/build/src/search/snippet.js +66 -0
- package/build/src/search/snippet.js.map +1 -0
- package/build/src/server.js +126 -0
- package/build/src/server.js.map +1 -0
- package/build/src/tools/current.js +32 -0
- package/build/src/tools/current.js.map +1 -0
- package/build/src/tools/expand.js +54 -0
- package/build/src/tools/expand.js.map +1 -0
- package/build/src/tools/prune.js +46 -0
- package/build/src/tools/prune.js.map +1 -0
- package/build/src/tools/refresh.js +14 -0
- package/build/src/tools/refresh.js.map +1 -0
- package/build/src/tools/registry.js +176 -0
- package/build/src/tools/registry.js.map +1 -0
- package/build/src/tools/related.js +28 -0
- package/build/src/tools/related.js.map +1 -0
- package/build/src/tools/save.js +15 -0
- package/build/src/tools/save.js.map +1 -0
- package/build/src/tools/search.js +124 -0
- package/build/src/tools/search.js.map +1 -0
- package/build/src/upgrade.js +74 -0
- package/build/src/upgrade.js.map +1 -0
- package/build/src/util/hash.js +15 -0
- package/build/src/util/hash.js.map +1 -0
- package/build/src/util/paths.js +67 -0
- package/build/src/util/paths.js.map +1 -0
- package/build/src/version.js +27 -0
- package/build/src/version.js.map +1 -0
- package/docs/agent-guide.md +47 -0
- package/docs/codelens-preview.png +0 -0
- package/docs/routing.md +59 -0
- package/docs/tools.md +53 -0
- package/package.json +103 -0
|
Binary file
|
package/docs/routing.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Agent Routing Instructions — CodeLens
|
|
2
|
+
|
|
3
|
+
> Inject this block into your agent's system prompt / rules so it routes code
|
|
4
|
+
> discovery through the codelens tools instead of raw grep/find/read.
|
|
5
|
+
|
|
6
|
+
## When to use codelens tools
|
|
7
|
+
|
|
8
|
+
**For codebase discovery, do NOT start with `grep`/`find`/`read`.** Use the
|
|
9
|
+
codelens tools first:
|
|
10
|
+
|
|
11
|
+
1. Call `cl_current` to confirm the index is ready for the current branch.
|
|
12
|
+
- If `status` is `missing`, call `cl_refresh` to build the index.
|
|
13
|
+
2. Use `cl_search` to find relevant files/symbols by intent (2–4 specific terms).
|
|
14
|
+
3. Use `cl_related` to expand graph neighbors (tests, callers, imports).
|
|
15
|
+
4. Use `cl_expand` to read the exact current file content for a chosen target
|
|
16
|
+
(it reads from disk — never stale).
|
|
17
|
+
5. Save working context with `cl_save` and reload it with `cl_load` across
|
|
18
|
+
compaction / long sessions.
|
|
19
|
+
|
|
20
|
+
## When raw reads are still allowed
|
|
21
|
+
|
|
22
|
+
- Before **editing** a file: read the exact target file with your normal read
|
|
23
|
+
tool (or `cl_expand`) so you have the current bytes.
|
|
24
|
+
- When **verifying** exact code, logs, or user-supplied paths.
|
|
25
|
+
- When `cl_search` explicitly cannot answer (e.g. the index is empty and the
|
|
26
|
+
repo is not a git repo).
|
|
27
|
+
- When the user explicitly asks for raw command output.
|
|
28
|
+
|
|
29
|
+
Do **not** ban raw reads outright — they are correct for editing and
|
|
30
|
+
verification. The routing is about **discovery**: prefer indexed context over
|
|
31
|
+
bulk file dumps to keep your context window lean.
|
|
32
|
+
|
|
33
|
+
## Branch safety
|
|
34
|
+
|
|
35
|
+
Results are scoped to the **current branch/worktree index only** by default.
|
|
36
|
+
After `git checkout`, results will not leak from the old branch. If you switch
|
|
37
|
+
branches mid-task, call `cl_current` again; the tool activates/creates the new
|
|
38
|
+
branch's index automatically.
|
|
39
|
+
|
|
40
|
+
## Freshness
|
|
41
|
+
|
|
42
|
+
`cl_search` auto-refreshes changed files before returning (budget-bounded). If
|
|
43
|
+
the response carries `freshness: "partial"` and `pendingFiles > 0`, some very
|
|
44
|
+
recent edits may not yet be reflected — call `cl_refresh` or re-query.
|
|
45
|
+
|
|
46
|
+
## Tool quick reference
|
|
47
|
+
|
|
48
|
+
| Tool | Purpose |
|
|
49
|
+
|------|---------|
|
|
50
|
+
| `cl_current` | repo/branch/index status + freshness |
|
|
51
|
+
| `cl_refresh` | build/update the current branch index |
|
|
52
|
+
| `cl_search` | hybrid ranked search → compact handles |
|
|
53
|
+
| `cl_related` | graph neighbors (imports/tests/callers) |
|
|
54
|
+
| `cl_expand` | exact current file content by path/range |
|
|
55
|
+
| `cl_save` / `cl_load` | persist + reload working context |
|
|
56
|
+
| `cl_stats` | index counts |
|
|
57
|
+
| `cl_doctor` | runtime/DB/integrity health check |
|
|
58
|
+
| `cl_prune` | manual TTL sweep |
|
|
59
|
+
| `cl_drop` | delete a branch/index explicitly |
|
package/docs/tools.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Tool Reference — CodeLens
|
|
2
|
+
|
|
3
|
+
All tools are exposed via MCP. Inputs are validated with zod; outputs are
|
|
4
|
+
JSON-serialized text content.
|
|
5
|
+
|
|
6
|
+
## cl_current
|
|
7
|
+
- **Input**: none
|
|
8
|
+
- **Returns**: `{ repo, branch, headSha, indexId, status, dirtyFiles, lastIndexedAt, inGitRepo }`
|
|
9
|
+
- **Use**: first call to check index readiness.
|
|
10
|
+
|
|
11
|
+
## cl_refresh
|
|
12
|
+
- **Input**: none
|
|
13
|
+
- **Returns**: `{ indexId, branch, indexedFiles, totalChunks, skipped, status }`
|
|
14
|
+
- **Use**: build/update the current branch index.
|
|
15
|
+
|
|
16
|
+
## cl_search
|
|
17
|
+
- **Input**: `{ query: string, limit?: number=5, cursor?: string }`
|
|
18
|
+
- **Returns**: `{ indexId, results:[{handle,path,startLine,endLine,score,snippet,why}], nextCursor, freshness, pendingFiles }`
|
|
19
|
+
- **Use**: intent-level code discovery.
|
|
20
|
+
|
|
21
|
+
## cl_related
|
|
22
|
+
- **Input**: `{ path: string, types?: string[], depth?: number=2, direction?: "out"|"in"|"both" }`
|
|
23
|
+
- **Returns**: `{ indexId, results:[{handle,path,edgeType,hops,confidence}] }`
|
|
24
|
+
- **Edge types**: `imports|imported_by|tests|calls|references|defines|exports|belongs_to`
|
|
25
|
+
|
|
26
|
+
## cl_expand
|
|
27
|
+
- **Input**: `{ path?: string, handle?: string, startLine?: number, endLine?: number, budget?: number=4000 }`
|
|
28
|
+
- **Returns**: `{ path, startLine, endLine, content, truncated, chars }`
|
|
29
|
+
- **Use**: read exact current file content (disk-backed, never stale). Rejects path traversal.
|
|
30
|
+
|
|
31
|
+
## cl_save
|
|
32
|
+
- **Input**: `{ name: string, items: [{handle?,path?,symbol_id?,chunk_id?}], notes?: string, pinned?: boolean }`
|
|
33
|
+
- **Returns**: `{ id, name, pinned, itemCount }`
|
|
34
|
+
|
|
35
|
+
## cl_load
|
|
36
|
+
- **Input**: `{ name: string }`
|
|
37
|
+
- **Returns**: `{ context, items }`
|
|
38
|
+
|
|
39
|
+
## cl_stats
|
|
40
|
+
- **Input**: none
|
|
41
|
+
- **Returns**: `{ active, indexId, branch, counts, backlog, lastIndexedAt, totalIndexes }`
|
|
42
|
+
|
|
43
|
+
## cl_doctor
|
|
44
|
+
- **Input**: none
|
|
45
|
+
- **Returns**: `{ nodeVersion, betterSqlite3, gitPresent, schemaVersion, integrityOk, walMode, inGitRepo, codeVersion }`
|
|
46
|
+
|
|
47
|
+
## cl_prune
|
|
48
|
+
- **Input**: none
|
|
49
|
+
- **Returns**: `{ deletedIndexes, skipped, bytesFreed }`
|
|
50
|
+
|
|
51
|
+
## cl_drop
|
|
52
|
+
- **Input**: `{ indexId?: string, branch?: string }`
|
|
53
|
+
- **Returns**: `{ deleted, indexId, reason? }` (refuses active/pinned)
|
package/package.json
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fodx/codelens",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Local, branch-aware code search & relation graph. SQLite FTS5 + tree-sitter symbols + source-graph edges, exposed as an MCP server and CLI. No chat LLM required.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"homepage": "https://github.com/ex-git/codeLens#readme",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/ex-git/codeLens.git"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/ex-git/codeLens/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"pi-package",
|
|
17
|
+
"mcp",
|
|
18
|
+
"mcp-server",
|
|
19
|
+
"modelcontextprotocol",
|
|
20
|
+
"code-search",
|
|
21
|
+
"code-graph",
|
|
22
|
+
"code-index",
|
|
23
|
+
"tree-sitter",
|
|
24
|
+
"claude-code",
|
|
25
|
+
"cursor",
|
|
26
|
+
"gemini-cli",
|
|
27
|
+
"opencode",
|
|
28
|
+
"codex"
|
|
29
|
+
],
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=22.5.0"
|
|
32
|
+
},
|
|
33
|
+
"main": "build/src/server.js",
|
|
34
|
+
"bin": {
|
|
35
|
+
"codelens": "build/src/server.js"
|
|
36
|
+
},
|
|
37
|
+
"files": [
|
|
38
|
+
"build/src",
|
|
39
|
+
"adapters/pi",
|
|
40
|
+
"README.md",
|
|
41
|
+
"docs/agent-guide.md",
|
|
42
|
+
"docs/routing.md",
|
|
43
|
+
"docs/tools.md",
|
|
44
|
+
"docs/codelens-preview.png"
|
|
45
|
+
],
|
|
46
|
+
"pi": {
|
|
47
|
+
"extensions": [
|
|
48
|
+
"adapters/pi/codelens.extension.ts"
|
|
49
|
+
],
|
|
50
|
+
"image": "https://raw.githubusercontent.com/ex-git/codeLens/main/docs/codelens-preview.png"
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"typecheck": "tsc --noEmit",
|
|
54
|
+
"lint": "eslint . --ext .ts",
|
|
55
|
+
"test": "vitest run",
|
|
56
|
+
"build": "tsc && node scripts/build.mjs",
|
|
57
|
+
"prepublishOnly": "npm run build",
|
|
58
|
+
"mcp:smoke": "node build/src/server.js --smoke",
|
|
59
|
+
"start": "node build/src/server.js",
|
|
60
|
+
"benchmark": "npx tsx bench/run.ts"
|
|
61
|
+
},
|
|
62
|
+
"dependencies": {
|
|
63
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
64
|
+
"better-sqlite3": "^12.6.2",
|
|
65
|
+
"ignore": "^7.0.5",
|
|
66
|
+
"tree-sitter": "^0.25.0",
|
|
67
|
+
"tree-sitter-c": "^0.24.1",
|
|
68
|
+
"tree-sitter-cpp": "^0.23.4",
|
|
69
|
+
"tree-sitter-go": "^0.25.0",
|
|
70
|
+
"tree-sitter-java": "^0.23.5",
|
|
71
|
+
"tree-sitter-javascript": "^0.25.0",
|
|
72
|
+
"tree-sitter-php": "^0.24.2",
|
|
73
|
+
"tree-sitter-python": "^0.25.0",
|
|
74
|
+
"tree-sitter-ruby": "^0.23.1",
|
|
75
|
+
"tree-sitter-rust": "^0.24.0",
|
|
76
|
+
"tree-sitter-typescript": "^0.23.2",
|
|
77
|
+
"zod": "^3.25.0"
|
|
78
|
+
},
|
|
79
|
+
"publishConfig": {
|
|
80
|
+
"access": "public",
|
|
81
|
+
"provenance": true
|
|
82
|
+
},
|
|
83
|
+
"peerDependencies": {
|
|
84
|
+
"@earendil-works/pi-coding-agent": "*"
|
|
85
|
+
},
|
|
86
|
+
"peerDependenciesMeta": {
|
|
87
|
+
"@earendil-works/pi-coding-agent": {
|
|
88
|
+
"optional": true
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"devDependencies": {
|
|
92
|
+
"@eslint/js": "^9.0.0",
|
|
93
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
94
|
+
"@types/node": "^22.19.11",
|
|
95
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
96
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
97
|
+
"eslint": "^9.0.0",
|
|
98
|
+
"tsx": "^4.22.4",
|
|
99
|
+
"typescript": "^5.7.0",
|
|
100
|
+
"typescript-eslint": "^8.0.0",
|
|
101
|
+
"vitest": "^4.0.18"
|
|
102
|
+
}
|
|
103
|
+
}
|