clast-ai 0.1.2 → 0.2.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.
Files changed (290) hide show
  1. package/.claude-plugin/marketplace.json +14 -0
  2. package/.claude-plugin/plugin.json +11 -9
  3. package/README.md +447 -401
  4. package/bench/ab/onair-concept.json +22 -0
  5. package/bench/ab/onair-deadcode.json +7 -0
  6. package/bench/ab/onair-hard.json +32 -0
  7. package/bench/ab/onair-impact.json +17 -0
  8. package/bench/ab/onair-refactors.json +18 -0
  9. package/bench/ab/onair-survey.json +17 -0
  10. package/bench/ab/onair-tasks.json +20 -0
  11. package/bench/ab/onair.json +52 -0
  12. package/bench/ab/vscode-concept.json +22 -0
  13. package/bench/ab/vscode-hard.json +32 -0
  14. package/bench/ab/vscode-impact.json +17 -0
  15. package/bench/ab/vscode-refactors.json +18 -0
  16. package/bench/ab/vscode-tasks.json +20 -0
  17. package/bench/ab/vscode.json +52 -0
  18. package/bench/ab.mjs +213 -0
  19. package/bench/bench.mjs +98 -0
  20. package/bench/resolution.mjs +75 -0
  21. package/dist/cli.d.ts +2 -0
  22. package/dist/cli.js +257 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/config/defaults.d.ts +12 -2
  25. package/dist/config/defaults.js +38 -31
  26. package/dist/config/defaults.js.map +1 -1
  27. package/dist/config/index.d.ts +1 -1
  28. package/dist/config/index.js +26 -14
  29. package/dist/config/index.js.map +1 -1
  30. package/dist/db/index.d.ts +73 -13
  31. package/dist/db/index.js +481 -39
  32. package/dist/db/index.js.map +1 -1
  33. package/dist/engine.d.ts +15 -0
  34. package/dist/engine.js +28 -0
  35. package/dist/engine.js.map +1 -0
  36. package/dist/indexer/imports.d.ts +6 -0
  37. package/dist/indexer/imports.js +254 -0
  38. package/dist/indexer/imports.js.map +1 -0
  39. package/dist/indexer/index.d.ts +63 -0
  40. package/dist/indexer/index.js +360 -0
  41. package/dist/indexer/index.js.map +1 -0
  42. package/dist/indexer/process.d.ts +22 -0
  43. package/dist/indexer/process.js +42 -0
  44. package/dist/indexer/process.js.map +1 -0
  45. package/dist/indexer/scan.d.ts +43 -0
  46. package/dist/indexer/scan.js +223 -0
  47. package/dist/indexer/scan.js.map +1 -0
  48. package/dist/indexer/worker.d.ts +1 -0
  49. package/dist/indexer/worker.js +23 -0
  50. package/dist/indexer/worker.js.map +1 -0
  51. package/dist/llm/comment-generator.d.ts +17 -19
  52. package/dist/llm/comment-generator.js +46 -80
  53. package/dist/llm/comment-generator.js.map +1 -1
  54. package/dist/llm/index.d.ts +0 -1
  55. package/dist/llm/index.js.map +1 -1
  56. package/dist/llm/prompts.d.ts +0 -1
  57. package/dist/llm/prompts.js +16 -16
  58. package/dist/parser/extractor.d.ts +21 -16
  59. package/dist/parser/extractor.js +700 -228
  60. package/dist/parser/extractor.js.map +1 -1
  61. package/dist/parser/index.d.ts +17 -21
  62. package/dist/parser/index.js +115 -171
  63. package/dist/parser/index.js.map +1 -1
  64. package/dist/parser/langs/c.d.ts +3 -0
  65. package/dist/parser/langs/c.js +879 -0
  66. package/dist/parser/langs/c.js.map +1 -0
  67. package/dist/parser/langs/csharp.d.ts +2 -0
  68. package/dist/parser/langs/csharp.js +548 -0
  69. package/dist/parser/langs/csharp.js.map +1 -0
  70. package/dist/parser/langs/dart.d.ts +2 -0
  71. package/dist/parser/langs/dart.js +893 -0
  72. package/dist/parser/langs/dart.js.map +1 -0
  73. package/dist/parser/langs/go.d.ts +2 -0
  74. package/dist/parser/langs/go.js +455 -0
  75. package/dist/parser/langs/go.js.map +1 -0
  76. package/dist/parser/langs/java.d.ts +2 -0
  77. package/dist/parser/langs/java.js +390 -0
  78. package/dist/parser/langs/java.js.map +1 -0
  79. package/dist/parser/langs/php.d.ts +2 -0
  80. package/dist/parser/langs/php.js +486 -0
  81. package/dist/parser/langs/php.js.map +1 -0
  82. package/dist/parser/langs/python.d.ts +2 -0
  83. package/dist/parser/langs/python.js +216 -0
  84. package/dist/parser/langs/python.js.map +1 -0
  85. package/dist/parser/langs/ruby.d.ts +2 -0
  86. package/dist/parser/langs/ruby.js +602 -0
  87. package/dist/parser/langs/ruby.js.map +1 -0
  88. package/dist/parser/langs/rust.d.ts +2 -0
  89. package/dist/parser/langs/rust.js +931 -0
  90. package/dist/parser/langs/rust.js.map +1 -0
  91. package/dist/parser/langs/swift.d.ts +2 -0
  92. package/dist/parser/langs/swift.js +616 -0
  93. package/dist/parser/langs/swift.js.map +1 -0
  94. package/dist/parser/langs/typescript.d.ts +4 -0
  95. package/dist/parser/langs/typescript.js +535 -0
  96. package/dist/parser/langs/typescript.js.map +1 -0
  97. package/dist/parser/registry.d.ts +16 -0
  98. package/dist/parser/registry.js +87 -0
  99. package/dist/parser/registry.js.map +1 -0
  100. package/dist/parser/returns.d.ts +9 -0
  101. package/dist/parser/returns.js +152 -0
  102. package/dist/parser/returns.js.map +1 -0
  103. package/dist/parser/spec.d.ts +165 -0
  104. package/dist/parser/spec.js +188 -0
  105. package/dist/parser/spec.js.map +1 -0
  106. package/dist/query/arity.d.ts +27 -0
  107. package/dist/query/arity.js +187 -0
  108. package/dist/query/arity.js.map +1 -0
  109. package/dist/query/callgraph.d.ts +113 -0
  110. package/dist/query/callgraph.js +332 -0
  111. package/dist/query/callgraph.js.map +1 -0
  112. package/dist/query/format.d.ts +36 -0
  113. package/dist/query/format.js +136 -0
  114. package/dist/query/format.js.map +1 -0
  115. package/dist/query/hierarchy.d.ts +44 -0
  116. package/dist/query/hierarchy.js +441 -0
  117. package/dist/query/hierarchy.js.map +1 -0
  118. package/dist/query/resolve.d.ts +265 -0
  119. package/dist/query/resolve.js +1957 -0
  120. package/dist/query/resolve.js.map +1 -0
  121. package/dist/query/search.d.ts +35 -0
  122. package/dist/query/search.js +379 -0
  123. package/dist/query/search.js.map +1 -0
  124. package/dist/query/words.d.ts +30 -0
  125. package/dist/query/words.js +201 -0
  126. package/dist/query/words.js.map +1 -0
  127. package/dist/server/index.d.ts +1 -3
  128. package/dist/server/index.js +313 -73
  129. package/dist/server/index.js.map +1 -1
  130. package/dist/tools/context.d.ts +35 -0
  131. package/dist/tools/context.js +79 -0
  132. package/dist/tools/context.js.map +1 -0
  133. package/dist/tools/explore.d.ts +51 -0
  134. package/dist/tools/explore.js +779 -0
  135. package/dist/tools/explore.js.map +1 -0
  136. package/dist/tools/impact.d.ts +21 -0
  137. package/dist/tools/impact.js +743 -0
  138. package/dist/tools/impact.js.map +1 -0
  139. package/dist/tools/search.d.ts +59 -0
  140. package/dist/tools/search.js +843 -0
  141. package/dist/tools/search.js.map +1 -0
  142. package/dist/tools/stats.d.ts +26 -0
  143. package/dist/tools/stats.js +604 -0
  144. package/dist/tools/stats.js.map +1 -0
  145. package/dist/types.d.ts +95 -40
  146. package/dist/types.js +9 -1
  147. package/dist/types.js.map +1 -1
  148. package/dist/version.d.ts +2 -0
  149. package/dist/version.js +3 -0
  150. package/dist/version.js.map +1 -0
  151. package/dist/watcher/index.d.ts +18 -16
  152. package/dist/watcher/index.js +94 -77
  153. package/dist/watcher/index.js.map +1 -1
  154. package/package.json +21 -24
  155. package/plugin/server.mjs +50 -0
  156. package/skills/audit/SKILL.md +37 -0
  157. package/skills/deadcode/SKILL.md +33 -0
  158. package/skills/explore/SKILL.md +54 -0
  159. package/skills/impact/SKILL.md +24 -0
  160. package/skills/status/SKILL.md +11 -0
  161. package/src/cli.ts +256 -0
  162. package/src/config/defaults.ts +50 -32
  163. package/src/config/index.ts +23 -14
  164. package/src/db/index.ts +540 -43
  165. package/src/engine.ts +30 -0
  166. package/src/indexer/imports.ts +241 -0
  167. package/src/indexer/index.ts +369 -0
  168. package/src/indexer/process.ts +63 -0
  169. package/src/indexer/scan.ts +226 -0
  170. package/src/indexer/worker.ts +24 -0
  171. package/src/llm/comment-generator.ts +52 -103
  172. package/src/llm/index.ts +80 -80
  173. package/src/llm/prompts.ts +95 -95
  174. package/src/parser/extractor.ts +643 -256
  175. package/src/parser/index.ts +105 -205
  176. package/src/parser/langs/c.ts +860 -0
  177. package/src/parser/langs/csharp.ts +519 -0
  178. package/src/parser/langs/dart.ts +820 -0
  179. package/src/parser/langs/go.ts +437 -0
  180. package/src/parser/langs/java.ts +361 -0
  181. package/src/parser/langs/php.ts +450 -0
  182. package/src/parser/langs/python.ts +206 -0
  183. package/src/parser/langs/ruby.ts +554 -0
  184. package/src/parser/langs/rust.ts +904 -0
  185. package/src/parser/langs/swift.ts +590 -0
  186. package/src/parser/langs/typescript.ts +499 -0
  187. package/src/parser/registry.ts +88 -0
  188. package/src/parser/returns.ts +137 -0
  189. package/src/parser/spec.ts +309 -0
  190. package/src/query/arity.ts +173 -0
  191. package/src/query/callgraph.ts +473 -0
  192. package/src/query/format.ts +136 -0
  193. package/src/query/hierarchy.ts +447 -0
  194. package/src/query/resolve.ts +1972 -0
  195. package/src/query/search.ts +430 -0
  196. package/src/query/words.ts +183 -0
  197. package/src/server/index.ts +390 -79
  198. package/src/tools/context.ts +82 -0
  199. package/src/tools/explore.ts +860 -0
  200. package/src/tools/impact.ts +748 -0
  201. package/src/tools/search.ts +886 -0
  202. package/src/tools/stats.ts +633 -0
  203. package/src/types.ts +113 -45
  204. package/src/version.ts +2 -0
  205. package/src/watcher/index.ts +82 -88
  206. package/tsconfig.json +7 -4
  207. package/.mcp.json +0 -8
  208. package/commands/clast-status.md +0 -9
  209. package/dist/config/defaults.d.ts.map +0 -1
  210. package/dist/config/index.d.ts.map +0 -1
  211. package/dist/db/index.d.ts.map +0 -1
  212. package/dist/db/queries.d.ts +0 -44
  213. package/dist/db/queries.d.ts.map +0 -1
  214. package/dist/db/queries.js +0 -251
  215. package/dist/db/queries.js.map +0 -1
  216. package/dist/db/schema.d.ts +0 -3
  217. package/dist/db/schema.d.ts.map +0 -1
  218. package/dist/db/schema.js +0 -94
  219. package/dist/db/schema.js.map +0 -1
  220. package/dist/db/types.d.ts +0 -44
  221. package/dist/db/types.d.ts.map +0 -1
  222. package/dist/db/types.js +0 -2
  223. package/dist/db/types.js.map +0 -1
  224. package/dist/llm/comment-generator.d.ts.map +0 -1
  225. package/dist/llm/index.d.ts.map +0 -1
  226. package/dist/llm/prompts.d.ts.map +0 -1
  227. package/dist/parser/call-resolver.d.ts +0 -15
  228. package/dist/parser/call-resolver.d.ts.map +0 -1
  229. package/dist/parser/call-resolver.js +0 -16
  230. package/dist/parser/call-resolver.js.map +0 -1
  231. package/dist/parser/extractor.d.ts.map +0 -1
  232. package/dist/parser/index.d.ts.map +0 -1
  233. package/dist/parser/languages.d.ts +0 -11
  234. package/dist/parser/languages.d.ts.map +0 -1
  235. package/dist/parser/languages.js +0 -74
  236. package/dist/parser/languages.js.map +0 -1
  237. package/dist/server/index.d.ts.map +0 -1
  238. package/dist/server/register-tools.d.ts +0 -7
  239. package/dist/server/register-tools.d.ts.map +0 -1
  240. package/dist/server/register-tools.js +0 -17
  241. package/dist/server/register-tools.js.map +0 -1
  242. package/dist/server/tools/clast-call-graph.d.ts +0 -4
  243. package/dist/server/tools/clast-call-graph.d.ts.map +0 -1
  244. package/dist/server/tools/clast-call-graph.js +0 -70
  245. package/dist/server/tools/clast-call-graph.js.map +0 -1
  246. package/dist/server/tools/clast-comment.d.ts +0 -5
  247. package/dist/server/tools/clast-comment.d.ts.map +0 -1
  248. package/dist/server/tools/clast-comment.js +0 -64
  249. package/dist/server/tools/clast-comment.js.map +0 -1
  250. package/dist/server/tools/clast-file-summary.d.ts +0 -4
  251. package/dist/server/tools/clast-file-summary.d.ts.map +0 -1
  252. package/dist/server/tools/clast-file-summary.js +0 -42
  253. package/dist/server/tools/clast-file-summary.js.map +0 -1
  254. package/dist/server/tools/clast-get-context.d.ts +0 -4
  255. package/dist/server/tools/clast-get-context.d.ts.map +0 -1
  256. package/dist/server/tools/clast-get-context.js +0 -80
  257. package/dist/server/tools/clast-get-context.js.map +0 -1
  258. package/dist/server/tools/clast-reindex.d.ts +0 -5
  259. package/dist/server/tools/clast-reindex.d.ts.map +0 -1
  260. package/dist/server/tools/clast-reindex.js +0 -36
  261. package/dist/server/tools/clast-reindex.js.map +0 -1
  262. package/dist/server/tools/clast-search.d.ts +0 -4
  263. package/dist/server/tools/clast-search.d.ts.map +0 -1
  264. package/dist/server/tools/clast-search.js +0 -29
  265. package/dist/server/tools/clast-search.js.map +0 -1
  266. package/dist/server/tools/clast-status.d.ts +0 -5
  267. package/dist/server/tools/clast-status.d.ts.map +0 -1
  268. package/dist/server/tools/clast-status.js +0 -23
  269. package/dist/server/tools/clast-status.js.map +0 -1
  270. package/dist/types.d.ts.map +0 -1
  271. package/dist/watcher/gitignore.d.ts +0 -9
  272. package/dist/watcher/gitignore.d.ts.map +0 -1
  273. package/dist/watcher/gitignore.js +0 -38
  274. package/dist/watcher/gitignore.js.map +0 -1
  275. package/dist/watcher/index.d.ts.map +0 -1
  276. package/skills/clast-explore/SKILL.md +0 -41
  277. package/src/db/queries.ts +0 -332
  278. package/src/db/schema.ts +0 -106
  279. package/src/db/types.ts +0 -47
  280. package/src/parser/call-resolver.ts +0 -17
  281. package/src/parser/languages.ts +0 -86
  282. package/src/server/register-tools.ts +0 -30
  283. package/src/server/tools/clast-call-graph.ts +0 -82
  284. package/src/server/tools/clast-comment.ts +0 -76
  285. package/src/server/tools/clast-file-summary.ts +0 -59
  286. package/src/server/tools/clast-get-context.ts +0 -97
  287. package/src/server/tools/clast-reindex.ts +0 -52
  288. package/src/server/tools/clast-search.ts +0 -38
  289. package/src/server/tools/clast-status.ts +0 -37
  290. package/src/watcher/gitignore.ts +0 -42
@@ -1,70 +0,0 @@
1
- import { z } from 'zod';
2
- export function registerCallGraphTool(server, db) {
3
- server.tool('clast_call_graph', 'Get the call graph for a function or method: what it calls (callees) and what calls it (callers). Use this BEFORE refactoring to understand impact — shows the full dependency chain with file paths and line numbers. Supports depth 1-5.', {
4
- name: z.string().describe('Function or method name to trace'),
5
- depth: z.number().int().min(1).max(5).default(2).describe('How many levels deep to traverse'),
6
- direction: z.enum(['callers', 'callees', 'both']).default('both').describe('Direction to traverse'),
7
- }, async ({ name, depth, direction }) => {
8
- const node = db.queries.getNodeByName(name);
9
- if (node.length === 0) {
10
- return {
11
- content: [{
12
- type: 'text',
13
- text: JSON.stringify({ error: `No symbol found with name "${name}"` }),
14
- }],
15
- };
16
- }
17
- const result = {
18
- symbol: {
19
- name: node[0].name,
20
- type: node[0].type,
21
- filePath: node[0].file_path,
22
- startLine: node[0].start_line,
23
- endLine: node[0].end_line,
24
- signature: node[0].signature,
25
- },
26
- };
27
- if (direction === 'callers' || direction === 'both') {
28
- const callers = db.queries.getCallersOf(name, depth);
29
- result.callers = callers.map(n => ({
30
- name: n.name,
31
- type: n.type,
32
- filePath: n.file_path,
33
- startLine: n.start_line,
34
- signature: n.signature,
35
- }));
36
- }
37
- if (direction === 'callees' || direction === 'both') {
38
- const callees = db.queries.getCalleesOf(name, depth);
39
- result.callees = callees.map(n => ({
40
- name: n.name,
41
- type: n.type,
42
- filePath: n.file_path,
43
- startLine: n.start_line,
44
- signature: n.signature,
45
- }));
46
- }
47
- // Also include direct call edge details for the primary node
48
- if (node[0]) {
49
- const edges = db.queries.getCallEdgesForNode(node[0].id);
50
- result.directCalls = {
51
- outgoing: edges.outgoing.map(e => ({
52
- calleeName: e.callee_name,
53
- line: e.line,
54
- resolved: e.callee_id !== null,
55
- })),
56
- incoming: edges.incoming.map(e => ({
57
- callerId: e.caller_id,
58
- line: e.line,
59
- })),
60
- };
61
- }
62
- return {
63
- content: [{
64
- type: 'text',
65
- text: JSON.stringify(result, null, 2),
66
- }],
67
- };
68
- });
69
- }
70
- //# sourceMappingURL=clast-call-graph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-call-graph.js","sourceRoot":"","sources":["../../../src/server/tools/clast-call-graph.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { ClastDatabase } from '../../db/index.js';
3
- import type { CommentGenerator } from '../../llm/comment-generator.js';
4
- export declare function registerCommentTool(server: McpServer, db: ClastDatabase, commentGen: CommentGenerator): void;
5
- //# sourceMappingURL=clast-comment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-comment.d.ts","sourceRoot":"","sources":["../../../src/server/tools/clast-comment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,aAAa,EACjB,UAAU,EAAE,gBAAgB,GAC3B,IAAI,CAkEN"}
@@ -1,64 +0,0 @@
1
- import { z } from 'zod';
2
- export function registerCommentTool(server, db, commentGen) {
3
- server.tool('clast_comment', 'Get or generate documentation comments for a symbol. By default returns existing comments. Set generate=true to create a new comment via LLM if none exists.', {
4
- name: z.string().describe('Symbol name to get/generate comment for'),
5
- generate: z.boolean().default(false).describe('If true and no comment exists, generate one via LLM'),
6
- }, async ({ name, generate }) => {
7
- const nodes = db.queries.getNodeByName(name);
8
- if (nodes.length === 0) {
9
- return {
10
- content: [{
11
- type: 'text',
12
- text: JSON.stringify({ error: `No symbol found with name "${name}"` }),
13
- }],
14
- };
15
- }
16
- const results = [];
17
- for (const node of nodes) {
18
- const comments = db.queries.getCommentsForNode(node.id);
19
- const original = comments.find(c => c.source === 'original');
20
- const generated = comments.find(c => c.source === 'generated');
21
- const entry = {
22
- name: node.name,
23
- type: node.type,
24
- filePath: node.file_path,
25
- startLine: node.start_line,
26
- };
27
- if (original) {
28
- entry.comment = original.text;
29
- entry.source = 'original';
30
- }
31
- else if (generated) {
32
- entry.comment = generated.text;
33
- entry.source = 'generated';
34
- }
35
- else if (generate) {
36
- if (!commentGen.isAvailable) {
37
- entry.error = 'LLM not configured. Set llm.model in clast.config.json.';
38
- }
39
- else {
40
- const result = await commentGen.generateForNode(node.id);
41
- if (result) {
42
- entry.comment = result;
43
- entry.source = 'generated';
44
- }
45
- else {
46
- entry.error = 'Failed to generate comment';
47
- }
48
- }
49
- }
50
- else {
51
- entry.comment = null;
52
- entry.source = null;
53
- }
54
- results.push(entry);
55
- }
56
- return {
57
- content: [{
58
- type: 'text',
59
- text: JSON.stringify(results, null, 2),
60
- }],
61
- };
62
- });
63
- }
64
- //# sourceMappingURL=clast-comment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-comment.js","sourceRoot":"","sources":["../../../src/server/tools/clast-comment.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { ClastDatabase } from '../../db/index.js';
3
- export declare function registerFileSummaryTool(server: McpServer, db: ClastDatabase): void;
4
- //# sourceMappingURL=clast-file-summary.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-file-summary.d.ts","sourceRoot":"","sources":["../../../src/server/tools/clast-file-summary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,GAAG,IAAI,CAsDlF"}
@@ -1,42 +0,0 @@
1
- import { z } from 'zod';
2
- export function registerFileSummaryTool(server, db) {
3
- server.tool('clast_file_summary', 'Get a structured summary of all symbols in a file, grouped by type (imports, classes, functions, exports, etc.). PREFER THIS over reading an entire file when you need to understand its structure — returns all symbols with line numbers without the noise of implementation details.', {
4
- filePath: z.string().describe('Relative file path (forward slashes, e.g. "src/parser/index.ts")'),
5
- }, async ({ filePath }) => {
6
- // Normalize path
7
- const normalized = filePath.replace(/\\/g, '/');
8
- const nodes = db.queries.getNodesByFile(normalized);
9
- if (nodes.length === 0) {
10
- return {
11
- content: [{
12
- type: 'text',
13
- text: JSON.stringify({ error: `No indexed data for file "${normalized}". Try clast_reindex first.` }),
14
- }],
15
- };
16
- }
17
- // Group by type
18
- const grouped = {};
19
- for (const node of nodes) {
20
- const group = grouped[node.type] ??= [];
21
- group.push({
22
- name: node.name,
23
- signature: node.signature,
24
- startLine: node.start_line,
25
- endLine: node.end_line,
26
- });
27
- }
28
- const summary = {
29
- filePath: normalized,
30
- language: nodes[0]?.language,
31
- totalSymbols: nodes.length,
32
- symbols: grouped,
33
- };
34
- return {
35
- content: [{
36
- type: 'text',
37
- text: JSON.stringify(summary, null, 2),
38
- }],
39
- };
40
- });
41
- }
42
- //# sourceMappingURL=clast-file-summary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-file-summary.js","sourceRoot":"","sources":["../../../src/server/tools/clast-file-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,EAAiB;IAC1E,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,yRAAyR,EACzR;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;KAClG,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,iBAAiB;QACjB,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAEpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,6BAA6B,UAAU,6BAA6B,EAAE,CAAC;qBACtG,CAAC;aACH,CAAC;QACJ,CAAC;QAED,gBAAgB;QAChB,MAAM,OAAO,GAKP,EAAE,CAAC;QAET,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,OAAO,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ;YAC5B,YAAY,EAAE,KAAK,CAAC,MAAM;YAC1B,OAAO,EAAE,OAAO;SACjB,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvC,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { ClastDatabase } from '../../db/index.js';
3
- export declare function registerGetContextTool(server: McpServer, db: ClastDatabase): void;
4
- //# sourceMappingURL=clast-get-context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-get-context.d.ts","sourceRoot":"","sources":["../../../src/server/tools/clast-get-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,GAAG,IAAI,CA4FjF"}
@@ -1,80 +0,0 @@
1
- import { z } from 'zod';
2
- export function registerGetContextTool(server, db) {
3
- server.tool('clast_get_context', 'Get full context for a symbol: definition, comments/documentation, callers, callees, and parent class. PREFER THIS over reading entire files when you need to understand a specific function or class before editing. Returns everything needed to make informed code changes.', {
4
- name: z.string().describe('Symbol name to look up'),
5
- includeBody: z.boolean().default(false).describe('Include the full function/class body text'),
6
- }, async ({ name, includeBody }) => {
7
- const ctx = db.queries.getNodeWithContext(name);
8
- if (ctx.nodes.length === 0) {
9
- return {
10
- content: [{
11
- type: 'text',
12
- text: JSON.stringify({ error: `No symbol found with name "${name}"` }),
13
- }],
14
- };
15
- }
16
- const result = ctx.nodes.map(node => {
17
- const nodeComments = ctx.comments.filter(c => c.node_id === node.id);
18
- const entry = {
19
- name: node.name,
20
- type: node.type,
21
- filePath: node.file_path,
22
- location: `${node.file_path}:${node.start_line}-${node.end_line}`,
23
- signature: node.signature,
24
- language: node.language,
25
- };
26
- if (includeBody) {
27
- entry.body = node.body_text;
28
- }
29
- // Comments: prioritize original, also show generated
30
- const originalComment = nodeComments.find(c => c.source === 'original');
31
- const generatedComment = nodeComments.find(c => c.source === 'generated');
32
- if (originalComment) {
33
- entry.comment = originalComment.text;
34
- entry.commentSource = 'original';
35
- }
36
- if (generatedComment) {
37
- entry.generatedDescription = generatedComment.text;
38
- }
39
- // Parent (for methods inside classes)
40
- if (node.parent_id) {
41
- const parent = db.queries.getNodeById(node.parent_id);
42
- if (parent) {
43
- entry.parentClass = {
44
- name: parent.name,
45
- type: parent.type,
46
- filePath: parent.file_path,
47
- startLine: parent.start_line,
48
- };
49
- }
50
- }
51
- return entry;
52
- });
53
- // Callers and callees (deduplicated across all matching nodes)
54
- const callers = ctx.callers.map(n => ({
55
- name: n.name,
56
- type: n.type,
57
- filePath: n.file_path,
58
- startLine: n.start_line,
59
- signature: n.signature,
60
- }));
61
- const callees = ctx.callees.map(n => ({
62
- name: n.name,
63
- type: n.type,
64
- filePath: n.file_path,
65
- startLine: n.start_line,
66
- signature: n.signature,
67
- }));
68
- return {
69
- content: [{
70
- type: 'text',
71
- text: JSON.stringify({
72
- definitions: result,
73
- callers,
74
- callees,
75
- }, null, 2),
76
- }],
77
- };
78
- });
79
- }
80
- //# sourceMappingURL=clast-get-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-get-context.js","sourceRoot":"","sources":["../../../src/server/tools/clast-get-context.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { ClastDatabase } from '../../db/index.js';
3
- import type { ParserManager } from '../../parser/index.js';
4
- export declare function registerReindexTool(server: McpServer, db: ClastDatabase, parser: ParserManager, projectRoot: string): void;
5
- //# sourceMappingURL=clast-reindex.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-reindex.d.ts","sourceRoot":"","sources":["../../../src/server/tools/clast-reindex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,aAAa,EACjB,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,GAClB,IAAI,CAwCN"}
@@ -1,36 +0,0 @@
1
- import { z } from 'zod';
2
- import { join } from 'node:path';
3
- export function registerReindexTool(server, db, parser, projectRoot) {
4
- server.tool('clast_reindex', 'Force re-index a specific file or the entire repository. Use when the index seems stale or after large changes.', {
5
- filePath: z.string().optional().describe('Specific file to reindex (relative path). Omit to reindex the entire repo.'),
6
- }, async ({ filePath }) => {
7
- if (filePath) {
8
- const absPath = join(projectRoot, filePath);
9
- const parsed = await parser.incrementalUpdate(absPath, projectRoot, db);
10
- return {
11
- content: [{
12
- type: 'text',
13
- text: JSON.stringify({
14
- file: filePath,
15
- reindexed: parsed,
16
- message: parsed ? 'File reindexed successfully' : 'File unchanged or unsupported',
17
- }),
18
- }],
19
- };
20
- }
21
- const result = await parser.fullIndex(projectRoot, db);
22
- return {
23
- content: [{
24
- type: 'text',
25
- text: JSON.stringify({
26
- filesProcessed: result.filesProcessed,
27
- nodesFound: result.nodesFound,
28
- edgesResolved: result.edgesResolved,
29
- durationMs: result.durationMs,
30
- message: `Full reindex completed in ${result.durationMs}ms`,
31
- }),
32
- }],
33
- };
34
- });
35
- }
36
- //# sourceMappingURL=clast-reindex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-reindex.js","sourceRoot":"","sources":["../../../src/server/tools/clast-reindex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,EAAiB,EACjB,MAAqB,EACrB,WAAmB;IAEnB,MAAM,CAAC,IAAI,CACT,eAAe,EACf,iHAAiH,EACjH;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;KACvH,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;YAExE,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,IAAI,EAAE,QAAQ;4BACd,SAAS,EAAE,MAAM;4BACjB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,+BAA+B;yBAClF,CAAC;qBACH,CAAC;aACH,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAEvD,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,cAAc,EAAE,MAAM,CAAC,cAAc;wBACrC,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;wBACnC,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,OAAO,EAAE,6BAA6B,MAAM,CAAC,UAAU,IAAI;qBAC5D,CAAC;iBACH,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { ClastDatabase } from '../../db/index.js';
3
- export declare function registerSearchTool(server: McpServer, db: ClastDatabase): void;
4
- //# sourceMappingURL=clast-search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-search.d.ts","sourceRoot":"","sources":["../../../src/server/tools/clast-search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,GAAG,IAAI,CAiC7E"}
@@ -1,29 +0,0 @@
1
- import { z } from 'zod';
2
- export function registerSearchTool(server, db) {
3
- server.tool('clast_search', 'Search the pre-built AST index for functions, classes, methods, and other symbols by name pattern. PREFER THIS over grep/file search when looking for symbol definitions — it is faster and returns structured results with exact file paths, line numbers, and signatures.', {
4
- query: z.string().describe('Search pattern (matches against symbol names, supports partial matches)'),
5
- type: z.enum([
6
- 'function', 'method', 'class', 'interface', 'enum',
7
- 'import', 'export', 'variable', 'type_alias', 'struct', 'trait', 'module',
8
- ]).optional().describe('Filter by symbol type'),
9
- limit: z.number().int().min(1).max(100).default(20).describe('Maximum results to return'),
10
- }, async ({ query, type, limit }) => {
11
- const results = db.queries.searchNodes(query, type, limit);
12
- const formatted = results.map(n => ({
13
- name: n.name,
14
- type: n.type,
15
- filePath: n.file_path,
16
- startLine: n.start_line,
17
- endLine: n.end_line,
18
- signature: n.signature,
19
- language: n.language,
20
- }));
21
- return {
22
- content: [{
23
- type: 'text',
24
- text: JSON.stringify(formatted, null, 2),
25
- }],
26
- };
27
- });
28
- }
29
- //# sourceMappingURL=clast-search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-search.js","sourceRoot":"","sources":["../../../src/server/tools/clast-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,EAAiB;IACrE,MAAM,CAAC,IAAI,CACT,cAAc,EACd,6QAA6Q,EAC7Q;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;QACrG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;YACX,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM;YAClD,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;SAC1E,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC/C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KAC1F,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAE3D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,SAAS;YACrB,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,OAAO,EAAE,CAAC,CAAC,QAAQ;YACnB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;iBACzC,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { ClastDatabase } from '../../db/index.js';
3
- import type { FileWatcher } from '../../watcher/index.js';
4
- export declare function registerStatusTool(server: McpServer, db: ClastDatabase, watcher: FileWatcher): void;
5
- //# sourceMappingURL=clast-status.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-status.d.ts","sourceRoot":"","sources":["../../../src/server/tools/clast-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,aAAa,EACjB,OAAO,EAAE,WAAW,GACnB,IAAI,CA4BN"}
@@ -1,23 +0,0 @@
1
- export function registerStatusTool(server, db, watcher) {
2
- server.tool('clast_status', 'Show the current indexing status: files indexed, total symbols, total call edges, watcher state, and pending updates.', {}, async () => {
3
- const status = db.queries.getStatus();
4
- const result = {
5
- filesIndexed: status.files_indexed,
6
- totalNodes: status.total_nodes,
7
- totalEdges: status.total_edges,
8
- totalComments: status.total_comments,
9
- lastIndexed: status.last_indexed
10
- ? new Date(status.last_indexed).toISOString()
11
- : null,
12
- watcherActive: watcher.isActive,
13
- pendingFiles: watcher.pendingCount,
14
- };
15
- return {
16
- content: [{
17
- type: 'text',
18
- text: JSON.stringify(result, null, 2),
19
- }],
20
- };
21
- });
22
- }
23
- //# sourceMappingURL=clast-status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clast-status.js","sourceRoot":"","sources":["../../../src/server/tools/clast-status.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,EAAiB,EACjB,OAAoB;IAEpB,MAAM,CAAC,IAAI,CACT,cAAc,EACd,uHAAuH,EACvH,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAEtC,MAAM,MAAM,GAAG;YACb,YAAY,EAAE,MAAM,CAAC,aAAa;YAClC,UAAU,EAAE,MAAM,CAAC,WAAW;YAC9B,UAAU,EAAE,MAAM,CAAC,WAAW;YAC9B,aAAa,EAAE,MAAM,CAAC,cAAc;YACpC,WAAW,EAAE,MAAM,CAAC,YAAY;gBAC9B,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;gBAC7C,CAAC,CAAC,IAAI;YACR,aAAa,EAAE,OAAO,CAAC,QAAQ;YAC/B,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACtC,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB,UAAU,GACV,QAAQ,GACR,OAAO,GACP,WAAW,GACX,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Parse .gitignore files into glob patterns suitable for chokidar's `ignored` option.
3
- */
4
- export declare function loadGitignorePatterns(projectRoot: string): string[];
5
- /**
6
- * Build the full ignored patterns list combining .gitignore and config.
7
- */
8
- export declare function buildIgnorePatterns(projectRoot: string, configIgnored: string[]): string[];
9
- //# sourceMappingURL=gitignore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../src/watcher/gitignore.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,GACtB,MAAM,EAAE,CAKV"}
@@ -1,38 +0,0 @@
1
- import { readFileSync, existsSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- /**
4
- * Parse .gitignore files into glob patterns suitable for chokidar's `ignored` option.
5
- */
6
- export function loadGitignorePatterns(projectRoot) {
7
- const patterns = [];
8
- const gitignorePath = join(projectRoot, '.gitignore');
9
- if (!existsSync(gitignorePath))
10
- return patterns;
11
- try {
12
- const content = readFileSync(gitignorePath, 'utf-8');
13
- for (const line of content.split('\n')) {
14
- const trimmed = line.trim();
15
- // Skip comments and empty lines
16
- if (!trimmed || trimmed.startsWith('#'))
17
- continue;
18
- // Negation patterns are not supported by chokidar's simple ignored
19
- if (trimmed.startsWith('!'))
20
- continue;
21
- patterns.push(trimmed);
22
- }
23
- }
24
- catch {
25
- // Silently ignore read errors
26
- }
27
- return patterns;
28
- }
29
- /**
30
- * Build the full ignored patterns list combining .gitignore and config.
31
- */
32
- export function buildIgnorePatterns(projectRoot, configIgnored) {
33
- const gitignorePatterns = loadGitignorePatterns(projectRoot);
34
- // Deduplicate
35
- const all = new Set([...configIgnored, ...gitignorePatterns]);
36
- return Array.from(all);
37
- }
38
- //# sourceMappingURL=gitignore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/watcher/gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEtD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,gCAAgC;YAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClD,mEAAmE;YACnE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAEtC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,aAAuB;IAEvB,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAC7D,cAAc;IACd,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/watcher/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,EAAE,CAAgB;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,cAAc,CAAoD;IAC1E,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAc;gBAGjC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,aAAa,EACjB,MAAM,EAAE,aAAa;IAUvB,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,KAAK,IAAI,IAAI;IA4Bb,IAAI,IAAI,IAAI;IAYZ,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,gBAAgB;YAmBV,WAAW;CAY1B"}
@@ -1,41 +0,0 @@
1
- ---
2
- name: clast-explore
3
- description: >
4
- Use when exploring or understanding code structure: finding functions, tracing call graphs,
5
- understanding symbol context before editing, or generating documentation. Triggers when Claude
6
- needs to navigate a codebase, find definitions, understand relationships between functions,
7
- or prepare context for code modifications.
8
- version: 0.1.0
9
- ---
10
-
11
- # Clast Code Intelligence
12
-
13
- This project has Clast AST indexing active. Before reading entire files or using grep to find
14
- code, prefer using Clast tools for faster, more structured results:
15
-
16
- ## Available Tools
17
-
18
- 1. **clast_search** — Find functions, classes, methods by name pattern.
19
- Use this BEFORE grep when looking for a symbol definition.
20
-
21
- 2. **clast_get_context** — Get full context for a symbol: definition, comments, who calls it,
22
- what it calls. Use this BEFORE reading a file to understand a specific function or class.
23
-
24
- 3. **clast_call_graph** — Trace the call chain: what calls a function (callers) and what it
25
- calls (callees). Use this before refactoring to understand impact.
26
-
27
- 4. **clast_file_summary** — Get all symbols in a file grouped by type. Use this instead of
28
- reading a whole file when you just need to understand its structure.
29
-
30
- 5. **clast_status** — Check if the index is up to date.
31
-
32
- 6. **clast_reindex** — Force re-index if data seems stale.
33
-
34
- 7. **clast_comment** — Get or generate documentation for a function/class.
35
-
36
- ## Workflow Tips
37
-
38
- - When asked to edit a function: use `clast_get_context` first to understand it, then edit.
39
- - When asked to refactor: use `clast_call_graph` to understand the blast radius.
40
- - When exploring unfamiliar code: use `clast_file_summary` on key files.
41
- - When adding features: use `clast_search` to find related existing code.