vemora 0.1.0-alpha.15

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 (254) hide show
  1. package/README.md +851 -0
  2. package/dist/cli.d.ts +16 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +682 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/ask.d.ts +14 -0
  7. package/dist/commands/ask.d.ts.map +1 -0
  8. package/dist/commands/ask.js +137 -0
  9. package/dist/commands/ask.js.map +1 -0
  10. package/dist/commands/audit.d.ts +17 -0
  11. package/dist/commands/audit.d.ts.map +1 -0
  12. package/dist/commands/audit.js +398 -0
  13. package/dist/commands/audit.js.map +1 -0
  14. package/dist/commands/brief.d.ts +16 -0
  15. package/dist/commands/brief.d.ts.map +1 -0
  16. package/dist/commands/brief.js +84 -0
  17. package/dist/commands/brief.js.map +1 -0
  18. package/dist/commands/chat.d.ts +7 -0
  19. package/dist/commands/chat.d.ts.map +1 -0
  20. package/dist/commands/chat.js +155 -0
  21. package/dist/commands/chat.js.map +1 -0
  22. package/dist/commands/context.d.ts +63 -0
  23. package/dist/commands/context.d.ts.map +1 -0
  24. package/dist/commands/context.js +794 -0
  25. package/dist/commands/context.js.map +1 -0
  26. package/dist/commands/dead-code.d.ts +15 -0
  27. package/dist/commands/dead-code.d.ts.map +1 -0
  28. package/dist/commands/dead-code.js +206 -0
  29. package/dist/commands/dead-code.js.map +1 -0
  30. package/dist/commands/deps.d.ts +20 -0
  31. package/dist/commands/deps.d.ts.map +1 -0
  32. package/dist/commands/deps.js +138 -0
  33. package/dist/commands/deps.js.map +1 -0
  34. package/dist/commands/focus.d.ts +8 -0
  35. package/dist/commands/focus.d.ts.map +1 -0
  36. package/dist/commands/focus.js +310 -0
  37. package/dist/commands/focus.js.map +1 -0
  38. package/dist/commands/index.d.ts +10 -0
  39. package/dist/commands/index.d.ts.map +1 -0
  40. package/dist/commands/index.js +366 -0
  41. package/dist/commands/index.js.map +1 -0
  42. package/dist/commands/init-agent.d.ts +23 -0
  43. package/dist/commands/init-agent.d.ts.map +1 -0
  44. package/dist/commands/init-agent.js +384 -0
  45. package/dist/commands/init-agent.js.map +1 -0
  46. package/dist/commands/init.d.ts +2 -0
  47. package/dist/commands/init.d.ts.map +1 -0
  48. package/dist/commands/init.js +122 -0
  49. package/dist/commands/init.js.map +1 -0
  50. package/dist/commands/knowledge.d.ts +14 -0
  51. package/dist/commands/knowledge.d.ts.map +1 -0
  52. package/dist/commands/knowledge.js +115 -0
  53. package/dist/commands/knowledge.js.map +1 -0
  54. package/dist/commands/plan.d.ts +24 -0
  55. package/dist/commands/plan.d.ts.map +1 -0
  56. package/dist/commands/plan.js +867 -0
  57. package/dist/commands/plan.js.map +1 -0
  58. package/dist/commands/query.d.ts +39 -0
  59. package/dist/commands/query.d.ts.map +1 -0
  60. package/dist/commands/query.js +392 -0
  61. package/dist/commands/query.js.map +1 -0
  62. package/dist/commands/remember.d.ts +11 -0
  63. package/dist/commands/remember.d.ts.map +1 -0
  64. package/dist/commands/remember.js +267 -0
  65. package/dist/commands/remember.js.map +1 -0
  66. package/dist/commands/report.d.ts +10 -0
  67. package/dist/commands/report.d.ts.map +1 -0
  68. package/dist/commands/report.js +243 -0
  69. package/dist/commands/report.js.map +1 -0
  70. package/dist/commands/status.d.ts +2 -0
  71. package/dist/commands/status.d.ts.map +1 -0
  72. package/dist/commands/status.js +127 -0
  73. package/dist/commands/status.js.map +1 -0
  74. package/dist/commands/summarize.d.ts +14 -0
  75. package/dist/commands/summarize.d.ts.map +1 -0
  76. package/dist/commands/summarize.js +170 -0
  77. package/dist/commands/summarize.js.map +1 -0
  78. package/dist/commands/triage.d.ts +33 -0
  79. package/dist/commands/triage.d.ts.map +1 -0
  80. package/dist/commands/triage.js +419 -0
  81. package/dist/commands/triage.js.map +1 -0
  82. package/dist/commands/usages.d.ts +14 -0
  83. package/dist/commands/usages.d.ts.map +1 -0
  84. package/dist/commands/usages.js +236 -0
  85. package/dist/commands/usages.js.map +1 -0
  86. package/dist/core/config.d.ts +35 -0
  87. package/dist/core/config.d.ts.map +1 -0
  88. package/dist/core/config.js +159 -0
  89. package/dist/core/config.js.map +1 -0
  90. package/dist/core/types.d.ts +287 -0
  91. package/dist/core/types.d.ts.map +1 -0
  92. package/dist/core/types.js +4 -0
  93. package/dist/core/types.js.map +1 -0
  94. package/dist/embeddings/factory.d.ts +9 -0
  95. package/dist/embeddings/factory.d.ts.map +1 -0
  96. package/dist/embeddings/factory.js +26 -0
  97. package/dist/embeddings/factory.js.map +1 -0
  98. package/dist/embeddings/noop.d.ts +17 -0
  99. package/dist/embeddings/noop.d.ts.map +1 -0
  100. package/dist/embeddings/noop.js +22 -0
  101. package/dist/embeddings/noop.js.map +1 -0
  102. package/dist/embeddings/ollama.d.ts +11 -0
  103. package/dist/embeddings/ollama.d.ts.map +1 -0
  104. package/dist/embeddings/ollama.js +49 -0
  105. package/dist/embeddings/ollama.js.map +1 -0
  106. package/dist/embeddings/openai.d.ts +10 -0
  107. package/dist/embeddings/openai.d.ts.map +1 -0
  108. package/dist/embeddings/openai.js +67 -0
  109. package/dist/embeddings/openai.js.map +1 -0
  110. package/dist/embeddings/provider.d.ts +19 -0
  111. package/dist/embeddings/provider.d.ts.map +1 -0
  112. package/dist/embeddings/provider.js +3 -0
  113. package/dist/embeddings/provider.js.map +1 -0
  114. package/dist/indexer/callgraph.d.ts +16 -0
  115. package/dist/indexer/callgraph.d.ts.map +1 -0
  116. package/dist/indexer/callgraph.js +154 -0
  117. package/dist/indexer/callgraph.js.map +1 -0
  118. package/dist/indexer/chunkBySlidingWindow.d.ts +6 -0
  119. package/dist/indexer/chunkBySlidingWindow.d.ts.map +1 -0
  120. package/dist/indexer/chunkBySlidingWindow.js +30 -0
  121. package/dist/indexer/chunkBySlidingWindow.js.map +1 -0
  122. package/dist/indexer/chunkBySymbols.d.ts +7 -0
  123. package/dist/indexer/chunkBySymbols.d.ts.map +1 -0
  124. package/dist/indexer/chunkBySymbols.js +57 -0
  125. package/dist/indexer/chunkBySymbols.js.map +1 -0
  126. package/dist/indexer/chunker.d.ts +15 -0
  127. package/dist/indexer/chunker.d.ts.map +1 -0
  128. package/dist/indexer/chunker.js +26 -0
  129. package/dist/indexer/chunker.js.map +1 -0
  130. package/dist/indexer/classHeader.d.ts +7 -0
  131. package/dist/indexer/classHeader.d.ts.map +1 -0
  132. package/dist/indexer/classHeader.js +37 -0
  133. package/dist/indexer/classHeader.js.map +1 -0
  134. package/dist/indexer/deps.d.ts +66 -0
  135. package/dist/indexer/deps.d.ts.map +1 -0
  136. package/dist/indexer/deps.js +412 -0
  137. package/dist/indexer/deps.js.map +1 -0
  138. package/dist/indexer/hasher.d.ts +17 -0
  139. package/dist/indexer/hasher.d.ts.map +1 -0
  140. package/dist/indexer/hasher.js +38 -0
  141. package/dist/indexer/hasher.js.map +1 -0
  142. package/dist/indexer/parser.d.ts +18 -0
  143. package/dist/indexer/parser.d.ts.map +1 -0
  144. package/dist/indexer/parser.js +355 -0
  145. package/dist/indexer/parser.js.map +1 -0
  146. package/dist/indexer/scanner.d.ts +18 -0
  147. package/dist/indexer/scanner.d.ts.map +1 -0
  148. package/dist/indexer/scanner.js +37 -0
  149. package/dist/indexer/scanner.js.map +1 -0
  150. package/dist/indexer/strategy.d.ts +11 -0
  151. package/dist/indexer/strategy.d.ts.map +1 -0
  152. package/dist/indexer/strategy.js +15 -0
  153. package/dist/indexer/strategy.js.map +1 -0
  154. package/dist/indexer/tests.d.ts +15 -0
  155. package/dist/indexer/tests.d.ts.map +1 -0
  156. package/dist/indexer/tests.js +68 -0
  157. package/dist/indexer/tests.js.map +1 -0
  158. package/dist/indexer/todos.d.ts +9 -0
  159. package/dist/indexer/todos.d.ts.map +1 -0
  160. package/dist/indexer/todos.js +29 -0
  161. package/dist/indexer/todos.js.map +1 -0
  162. package/dist/llm/anthropic.d.ts +8 -0
  163. package/dist/llm/anthropic.d.ts.map +1 -0
  164. package/dist/llm/anthropic.js +76 -0
  165. package/dist/llm/anthropic.js.map +1 -0
  166. package/dist/llm/claude-code.d.ts +37 -0
  167. package/dist/llm/claude-code.d.ts.map +1 -0
  168. package/dist/llm/claude-code.js +97 -0
  169. package/dist/llm/claude-code.js.map +1 -0
  170. package/dist/llm/factory.d.ts +7 -0
  171. package/dist/llm/factory.d.ts.map +1 -0
  172. package/dist/llm/factory.js +47 -0
  173. package/dist/llm/factory.js.map +1 -0
  174. package/dist/llm/ollama.d.ts +8 -0
  175. package/dist/llm/ollama.d.ts.map +1 -0
  176. package/dist/llm/ollama.js +83 -0
  177. package/dist/llm/ollama.js.map +1 -0
  178. package/dist/llm/openai.d.ts +8 -0
  179. package/dist/llm/openai.d.ts.map +1 -0
  180. package/dist/llm/openai.js +68 -0
  181. package/dist/llm/openai.js.map +1 -0
  182. package/dist/llm/provider.d.ts +35 -0
  183. package/dist/llm/provider.d.ts.map +1 -0
  184. package/dist/llm/provider.js +3 -0
  185. package/dist/llm/provider.js.map +1 -0
  186. package/dist/search/bm25.d.ts +3 -0
  187. package/dist/search/bm25.d.ts.map +1 -0
  188. package/dist/search/bm25.js +104 -0
  189. package/dist/search/bm25.js.map +1 -0
  190. package/dist/search/formatter.d.ts +43 -0
  191. package/dist/search/formatter.d.ts.map +1 -0
  192. package/dist/search/formatter.js +208 -0
  193. package/dist/search/formatter.js.map +1 -0
  194. package/dist/search/hybrid.d.ts +10 -0
  195. package/dist/search/hybrid.d.ts.map +1 -0
  196. package/dist/search/hybrid.js +53 -0
  197. package/dist/search/hybrid.js.map +1 -0
  198. package/dist/search/merge.d.ts +33 -0
  199. package/dist/search/merge.d.ts.map +1 -0
  200. package/dist/search/merge.js +158 -0
  201. package/dist/search/merge.js.map +1 -0
  202. package/dist/search/mmr.d.ts +23 -0
  203. package/dist/search/mmr.d.ts.map +1 -0
  204. package/dist/search/mmr.js +95 -0
  205. package/dist/search/mmr.js.map +1 -0
  206. package/dist/search/rerank.d.ts +12 -0
  207. package/dist/search/rerank.d.ts.map +1 -0
  208. package/dist/search/rerank.js +113 -0
  209. package/dist/search/rerank.js.map +1 -0
  210. package/dist/search/signature.d.ts +42 -0
  211. package/dist/search/signature.d.ts.map +1 -0
  212. package/dist/search/signature.js +112 -0
  213. package/dist/search/signature.js.map +1 -0
  214. package/dist/search/vector.d.ts +41 -0
  215. package/dist/search/vector.d.ts.map +1 -0
  216. package/dist/search/vector.js +185 -0
  217. package/dist/search/vector.js.map +1 -0
  218. package/dist/storage/cache.d.ts +30 -0
  219. package/dist/storage/cache.d.ts.map +1 -0
  220. package/dist/storage/cache.js +160 -0
  221. package/dist/storage/cache.js.map +1 -0
  222. package/dist/storage/knowledge.d.ts +23 -0
  223. package/dist/storage/knowledge.d.ts.map +1 -0
  224. package/dist/storage/knowledge.js +81 -0
  225. package/dist/storage/knowledge.js.map +1 -0
  226. package/dist/storage/planSession.d.ts +39 -0
  227. package/dist/storage/planSession.d.ts.map +1 -0
  228. package/dist/storage/planSession.js +78 -0
  229. package/dist/storage/planSession.js.map +1 -0
  230. package/dist/storage/repository.d.ts +27 -0
  231. package/dist/storage/repository.d.ts.map +1 -0
  232. package/dist/storage/repository.js +95 -0
  233. package/dist/storage/repository.js.map +1 -0
  234. package/dist/storage/session.d.ts +38 -0
  235. package/dist/storage/session.d.ts.map +1 -0
  236. package/dist/storage/session.js +100 -0
  237. package/dist/storage/session.js.map +1 -0
  238. package/dist/storage/summaries.d.ts +19 -0
  239. package/dist/storage/summaries.d.ts.map +1 -0
  240. package/dist/storage/summaries.js +66 -0
  241. package/dist/storage/summaries.js.map +1 -0
  242. package/dist/storage/usage.d.ts +39 -0
  243. package/dist/storage/usage.d.ts.map +1 -0
  244. package/dist/storage/usage.js +55 -0
  245. package/dist/storage/usage.js.map +1 -0
  246. package/dist/utils/git.d.ts +20 -0
  247. package/dist/utils/git.d.ts.map +1 -0
  248. package/dist/utils/git.js +49 -0
  249. package/dist/utils/git.js.map +1 -0
  250. package/dist/utils/tokenizer.d.ts +32 -0
  251. package/dist/utils/tokenizer.d.ts.map +1 -0
  252. package/dist/utils/tokenizer.js +66 -0
  253. package/dist/utils/tokenizer.js.map +1 -0
  254. package/package.json +71 -0
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runUsages = runUsages;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const config_1 = require("../core/config");
9
+ const repository_1 = require("../storage/repository");
10
+ /**
11
+ * vemora usages <SymbolName>
12
+ *
13
+ * Finds all files that use a named symbol, following re-export chains.
14
+ * Uses both the dependency graph (reliable) and the call graph (line-level detail).
15
+ */
16
+ async function runUsages(rootDir, symbolName, options = {}) {
17
+ const config = (0, config_1.loadConfig)(rootDir);
18
+ const repo = new repository_1.RepositoryStorage(rootDir);
19
+ const symbols = repo.loadSymbols();
20
+ const depGraph = repo.loadDeps();
21
+ const callGraph = repo.loadCallGraph();
22
+ // ── 1. Resolve symbol ────────────────────────────────────────────────────────
23
+ let resolvedName = symbolName;
24
+ if (!symbols[resolvedName]) {
25
+ const lower = symbolName.toLowerCase();
26
+ const candidates = Object.keys(symbols).filter((s) => s.toLowerCase() === lower);
27
+ if (candidates.length === 0) {
28
+ console.log(chalk_1.default.yellow(`Symbol "${symbolName}" not found in index.`));
29
+ console.log(chalk_1.default.gray("Run `vemora index --root .` to update the index."));
30
+ return;
31
+ }
32
+ if (candidates.length === 1) {
33
+ resolvedName = candidates[0];
34
+ }
35
+ else {
36
+ console.log(chalk_1.default.yellow(`Ambiguous symbol name. Did you mean one of these?`));
37
+ for (const c of candidates) {
38
+ console.log(` ${chalk_1.default.cyan(c)} ${chalk_1.default.gray(`(${symbols[c].file})`)}`);
39
+ }
40
+ return;
41
+ }
42
+ }
43
+ const entry = symbols[resolvedName];
44
+ const defFile = entry.file;
45
+ const maxDepth = options.depth ?? 10;
46
+ console.log();
47
+ console.log(chalk_1.default.bold(`Usages of ${chalk_1.default.cyan(resolvedName)}`));
48
+ console.log(` Defined in ${chalk_1.default.blue(defFile)}:${entry.startLine} ${chalk_1.default.gray(`(${entry.type})`)}`);
49
+ console.log();
50
+ // ── Methods: call graph only ─────────────────────────────────────────────────
51
+ //
52
+ // Methods are not individually imported — the dep graph tracks the containing
53
+ // class import, not individual method calls. Use the call graph exclusively.
54
+ // The call graph stores methods as "file:methodName" (without class prefix).
55
+ if (entry.type === "method") {
56
+ const methodName = resolvedName.includes(".")
57
+ ? resolvedName.split(".").pop()
58
+ : resolvedName;
59
+ const cgKey = `${defFile}:${methodName}`;
60
+ const cgEntry = callGraph[cgKey];
61
+ const calledBy = cgEntry?.calledBy ?? [];
62
+ if (calledBy.length === 0) {
63
+ console.log(chalk_1.default.gray("No call graph data for this method."));
64
+ console.log(chalk_1.default.gray(` Methods are not tracked via imports — only the call graph can find callers.`));
65
+ if (entry.parent) {
66
+ console.log(chalk_1.default.gray(` Tip: try \`vemora usages ${entry.parent}\` to find all files that import the class.`));
67
+ }
68
+ console.log(chalk_1.default.gray(" Re-index with tree-sitter enabled to populate call graph data."));
69
+ }
70
+ else {
71
+ // Group calledBy entries by file
72
+ const byFile = new Map();
73
+ for (const callerScope of calledBy) {
74
+ const colonIdx = callerScope.lastIndexOf(":");
75
+ if (colonIdx === -1)
76
+ continue;
77
+ const callerFile = callerScope.substring(0, colonIdx);
78
+ const callerFn = callerScope.substring(colonIdx + 1);
79
+ const list = byFile.get(callerFile) ?? [];
80
+ if (!list.includes(callerFn))
81
+ list.push(callerFn);
82
+ byFile.set(callerFile, list);
83
+ }
84
+ console.log(chalk_1.default.bold(`Found in ${byFile.size} file${byFile.size !== 1 ? "s" : ""} (via call graph):`));
85
+ console.log();
86
+ for (const [file, fns] of byFile) {
87
+ const callInfo = chalk_1.default.gray(` (called in: ${fns.join(", ")})`);
88
+ console.log(` ${chalk_1.default.gray("→")} ${chalk_1.default.blue(file)}${callInfo}`);
89
+ }
90
+ console.log();
91
+ console.log(chalk_1.default.yellow("⚠ Call graph coverage may be incomplete (arrow functions, injected dependencies)."));
92
+ }
93
+ console.log(chalk_1.default.gray(`Project: ${config.projectName} (${config.projectId})`));
94
+ return;
95
+ }
96
+ // ── 2. BFS over dep graph to find all importers (following re-exports) ───────
97
+ const visited = new Set(); // importer files already enqueued
98
+ const queue = [];
99
+ const allImporters = [];
100
+ // Whether the symbol is a default export — also match the "default" sentinel
101
+ const isDefaultExport = entry.isDefault === true;
102
+ // Seed: direct importers of the definition file
103
+ for (const [importerFile, fileDeps] of Object.entries(depGraph)) {
104
+ for (const imp of fileDeps.imports) {
105
+ if (imp.file === defFile &&
106
+ (imp.symbols.includes(resolvedName) ||
107
+ (isDefaultExport && imp.symbols.includes("default")))) {
108
+ if (!visited.has(importerFile)) {
109
+ visited.add(importerFile);
110
+ const node = { file: importerFile, from: defFile, depth: 1 };
111
+ queue.push(node);
112
+ allImporters.push(node);
113
+ }
114
+ }
115
+ }
116
+ }
117
+ // BFS: follow re-export chains
118
+ while (queue.length > 0) {
119
+ const current = queue.shift();
120
+ if (current.depth >= maxDepth)
121
+ continue;
122
+ for (const [importerFile, fileDeps] of Object.entries(depGraph)) {
123
+ for (const imp of fileDeps.imports) {
124
+ if (imp.file === current.file &&
125
+ (imp.symbols.includes(resolvedName) ||
126
+ (isDefaultExport && imp.symbols.includes("default")))) {
127
+ if (!visited.has(importerFile)) {
128
+ visited.add(importerFile);
129
+ const node = {
130
+ file: importerFile,
131
+ from: current.file,
132
+ depth: current.depth + 1,
133
+ };
134
+ queue.push(node);
135
+ allImporters.push(node);
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
141
+ // ── 3. Identify re-exporters ─────────────────────────────────────────────────
142
+ //
143
+ // A file is a re-exporter if other files import the symbol FROM it
144
+ // (and it is not the definition file itself).
145
+ const reExporterFiles = new Set(allImporters.filter((n) => n.from !== defFile).map((n) => n.from));
146
+ // ── 4. Build call-site map from the call graph ───────────────────────────────
147
+ //
148
+ // Keys in the call graph: "<file>:<symbolName>"
149
+ // We look up the definition file AND all re-exporters, because the call graph
150
+ // resolves calls to wherever the symbol was imported FROM.
151
+ const aliasKeys = new Set([`${defFile}:${resolvedName}`]);
152
+ for (const reExp of reExporterFiles) {
153
+ aliasKeys.add(`${reExp}:${resolvedName}`);
154
+ }
155
+ // callerFile -> list of calling scope names (function / method)
156
+ const callSitesByFile = new Map();
157
+ for (const aliasKey of aliasKeys) {
158
+ const cgEntry = callGraph[aliasKey];
159
+ if (!cgEntry?.calledBy?.length)
160
+ continue;
161
+ for (const callerScope of cgEntry.calledBy) {
162
+ // callerScope = "relative/path/to/file.ts:functionName"
163
+ const colonIdx = callerScope.lastIndexOf(":");
164
+ if (colonIdx === -1)
165
+ continue;
166
+ const callerFile = callerScope.substring(0, colonIdx);
167
+ const callerFn = callerScope.substring(colonIdx + 1);
168
+ const list = callSitesByFile.get(callerFile) ?? [];
169
+ if (!list.includes(callerFn))
170
+ list.push(callerFn);
171
+ callSitesByFile.set(callerFile, list);
172
+ }
173
+ }
174
+ // ── 5. Filter if --callers-only ──────────────────────────────────────────────
175
+ const importersToShow = options.callersOnly
176
+ ? allImporters.filter((n) => callSitesByFile.has(n.file))
177
+ : allImporters;
178
+ if (importersToShow.length === 0) {
179
+ if (options.callersOnly) {
180
+ console.log(chalk_1.default.gray("No call graph data found. Try without --callers-only, or re-index with tree-sitter."));
181
+ }
182
+ else {
183
+ console.log(chalk_1.default.gray("No files import this symbol."));
184
+ }
185
+ return;
186
+ }
187
+ // ── 6. Print results ─────────────────────────────────────────────────────────
188
+ const total = importersToShow.length;
189
+ console.log(chalk_1.default.bold(`Found ${total} file${total !== 1 ? "s" : ""} that use this symbol:`));
190
+ console.log();
191
+ const directImporters = importersToShow.filter((n) => n.from === defFile);
192
+ const transitiveImporters = importersToShow.filter((n) => n.from !== defFile);
193
+ if (directImporters.length > 0) {
194
+ console.log(chalk_1.default.bold(`Direct imports (from ${chalk_1.default.blue(defFile)}):`));
195
+ for (const node of directImporters) {
196
+ printImporterLine(node.file, reExporterFiles, callSitesByFile);
197
+ }
198
+ console.log();
199
+ }
200
+ if (transitiveImporters.length > 0) {
201
+ // Group by re-exporter
202
+ const byReExporter = new Map();
203
+ for (const node of transitiveImporters) {
204
+ const list = byReExporter.get(node.from) ?? [];
205
+ list.push(node);
206
+ byReExporter.set(node.from, list);
207
+ }
208
+ console.log(chalk_1.default.bold("Via re-exports:"));
209
+ for (const [reExp, nodes] of byReExporter) {
210
+ console.log(` ${chalk_1.default.yellow("↗")} ${chalk_1.default.blue(reExp)}`);
211
+ for (const node of nodes) {
212
+ printImporterLine(node.file, reExporterFiles, callSitesByFile, " ");
213
+ }
214
+ }
215
+ console.log();
216
+ }
217
+ // ── 7. Footer ────────────────────────────────────────────────────────────────
218
+ const withCallSites = callSitesByFile.size;
219
+ if (withCallSites > 0) {
220
+ console.log(chalk_1.default.gray(`Call graph: ${withCallSites} of ${total} file${total !== 1 ? "s" : ""} have call-site detail.`));
221
+ }
222
+ else {
223
+ console.log(chalk_1.default.gray("No call graph data. Re-index with tree-sitter for call-site details."));
224
+ }
225
+ console.log(chalk_1.default.gray(`Project: ${config.projectName} (${config.projectId})`));
226
+ }
227
+ function printImporterLine(file, reExporterFiles, callSitesByFile, indent = " ") {
228
+ const isReExp = reExporterFiles.has(file);
229
+ const badge = isReExp ? chalk_1.default.yellow(" [re-exports]") : "";
230
+ const sites = callSitesByFile.get(file);
231
+ const callInfo = sites?.length
232
+ ? chalk_1.default.gray(` (called in: ${sites.join(", ")})`)
233
+ : "";
234
+ console.log(`${indent}${chalk_1.default.gray("→")} ${chalk_1.default.blue(file)}${badge}${callInfo}`);
235
+ }
236
+ //# sourceMappingURL=usages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usages.js","sourceRoot":"","sources":["../../src/commands/usages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { AiMemoryConfig } from "./types";
2
+ export declare const AI_MEMORY_DIR = ".vemora";
3
+ export declare const AI_MEMORY_CACHE_DIR = ".vemora-cache";
4
+ export declare const CONFIG_FILE = "config.json";
5
+ export declare const METADATA_FILE = "metadata.json";
6
+ export declare const INDEX_DIR = "index";
7
+ export declare const FILES_JSON = "files.json";
8
+ export declare const CHUNKS_JSON = "chunks.json";
9
+ export declare const SYMBOLS_JSON = "symbols.json";
10
+ export declare const DEPS_JSON = "deps.json";
11
+ export declare const CALLGRAPH_JSON = "callgraph.json";
12
+ export declare const TODOS_JSON = "todos.json";
13
+ export declare const SUMMARIES_DIR = "summaries";
14
+ export declare const FILE_SUMMARIES_JSON = "file-summaries.json";
15
+ export declare const PROJECT_SUMMARY_JSON = "project-summary.json";
16
+ export declare const KNOWLEDGE_DIR = "knowledge";
17
+ export declare const KNOWLEDGE_JSON = "entries.json";
18
+ export declare function getMemoryDir(rootDir: string): string;
19
+ export declare function getIndexDir(rootDir: string): string;
20
+ export declare function getSummariesDir(rootDir: string): string;
21
+ /**
22
+ * Returns the local (per-developer) cache directory.
23
+ * Lives in the user's home directory — never in the repo.
24
+ */
25
+ export declare function getLocalCacheDir(projectId: string): string;
26
+ /**
27
+ * Derives a stable project ID from the root directory path.
28
+ * This is deterministic so developers on the same machine always get the same ID,
29
+ * but differs across machines (cache is local anyway).
30
+ */
31
+ export declare function generateProjectId(rootDir: string): string;
32
+ export declare function getDefaultConfig(rootDir: string, projectName: string): AiMemoryConfig;
33
+ export declare function loadConfig(rootDir: string): AiMemoryConfig;
34
+ export declare function saveConfig(config: AiMemoryConfig): void;
35
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAC7C,eAAO,MAAM,SAAS,UAAU,CAAC;AACjC,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAC3C,eAAO,MAAM,SAAS,cAAc,CAAC;AACrC,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,eAAO,MAAM,aAAa,cAAc,CAAC;AACzC,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAC3D,eAAO,MAAM,aAAa,cAAc,CAAC;AACzC,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAI7C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAID,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,cAAc,CAuEhB;AAID,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAoB1D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAKvD"}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.KNOWLEDGE_JSON = exports.KNOWLEDGE_DIR = exports.PROJECT_SUMMARY_JSON = exports.FILE_SUMMARIES_JSON = exports.SUMMARIES_DIR = exports.TODOS_JSON = exports.CALLGRAPH_JSON = exports.DEPS_JSON = exports.SYMBOLS_JSON = exports.CHUNKS_JSON = exports.FILES_JSON = exports.INDEX_DIR = exports.METADATA_FILE = exports.CONFIG_FILE = exports.AI_MEMORY_CACHE_DIR = exports.AI_MEMORY_DIR = void 0;
7
+ exports.getMemoryDir = getMemoryDir;
8
+ exports.getIndexDir = getIndexDir;
9
+ exports.getSummariesDir = getSummariesDir;
10
+ exports.getLocalCacheDir = getLocalCacheDir;
11
+ exports.generateProjectId = generateProjectId;
12
+ exports.getDefaultConfig = getDefaultConfig;
13
+ exports.loadConfig = loadConfig;
14
+ exports.saveConfig = saveConfig;
15
+ const crypto_1 = __importDefault(require("crypto"));
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const os_1 = __importDefault(require("os"));
18
+ const path_1 = __importDefault(require("path"));
19
+ // ─── Path Constants ────────────────────────────────────────────────────────────
20
+ exports.AI_MEMORY_DIR = ".vemora";
21
+ exports.AI_MEMORY_CACHE_DIR = ".vemora-cache";
22
+ exports.CONFIG_FILE = "config.json";
23
+ exports.METADATA_FILE = "metadata.json";
24
+ exports.INDEX_DIR = "index";
25
+ exports.FILES_JSON = "files.json";
26
+ exports.CHUNKS_JSON = "chunks.json";
27
+ exports.SYMBOLS_JSON = "symbols.json";
28
+ exports.DEPS_JSON = "deps.json";
29
+ exports.CALLGRAPH_JSON = "callgraph.json";
30
+ exports.TODOS_JSON = "todos.json";
31
+ exports.SUMMARIES_DIR = "summaries";
32
+ exports.FILE_SUMMARIES_JSON = "file-summaries.json";
33
+ exports.PROJECT_SUMMARY_JSON = "project-summary.json";
34
+ exports.KNOWLEDGE_DIR = "knowledge";
35
+ exports.KNOWLEDGE_JSON = "entries.json";
36
+ // ─── Path Helpers ─────────────────────────────────────────────────────────────
37
+ function getMemoryDir(rootDir) {
38
+ return path_1.default.join(rootDir, exports.AI_MEMORY_DIR);
39
+ }
40
+ function getIndexDir(rootDir) {
41
+ return path_1.default.join(rootDir, exports.AI_MEMORY_DIR, exports.INDEX_DIR);
42
+ }
43
+ function getSummariesDir(rootDir) {
44
+ return path_1.default.join(rootDir, exports.AI_MEMORY_DIR, exports.SUMMARIES_DIR);
45
+ }
46
+ /**
47
+ * Returns the local (per-developer) cache directory.
48
+ * Lives in the user's home directory — never in the repo.
49
+ */
50
+ function getLocalCacheDir(projectId) {
51
+ return path_1.default.join(os_1.default.homedir(), ".vemora-cache", projectId);
52
+ }
53
+ /**
54
+ * Derives a stable project ID from the root directory path.
55
+ * This is deterministic so developers on the same machine always get the same ID,
56
+ * but differs across machines (cache is local anyway).
57
+ */
58
+ function generateProjectId(rootDir) {
59
+ return crypto_1.default.createHash("sha256").update(rootDir).digest("hex").slice(0, 16);
60
+ }
61
+ // ─── Config Defaults ──────────────────────────────────────────────────────────
62
+ function getDefaultConfig(rootDir, projectName) {
63
+ return {
64
+ projectId: generateProjectId(rootDir),
65
+ projectName,
66
+ version: "1.0.0",
67
+ rootDir,
68
+ include: [
69
+ "**/*.ts",
70
+ "**/*.tsx",
71
+ "**/*.js",
72
+ "**/*.jsx",
73
+ "**/*.py",
74
+ "**/*.rs",
75
+ "**/*.go",
76
+ "**/*.java",
77
+ "**/*.c",
78
+ "**/*.cpp",
79
+ "**/*.h",
80
+ "**/*.css",
81
+ "**/*.scss",
82
+ "**/*.json",
83
+ "**/*.yaml",
84
+ "**/*.yml",
85
+ "**/*.md",
86
+ ],
87
+ exclude: [
88
+ "**/node_modules/**",
89
+ "**/.git/**",
90
+ "**/dist/**",
91
+ "**/build/**",
92
+ "**/out/**",
93
+ "**/.next/**",
94
+ "**/.nuxt/**",
95
+ "**/coverage/**",
96
+ "**/*.min.js",
97
+ "**/*.bundle.js",
98
+ // Lock files — auto-generated, no value for summarization
99
+ "**/pnpm-lock.yaml",
100
+ "**/package-lock.json",
101
+ "**/yarn.lock",
102
+ "**/bun.lockb",
103
+ // Other generated/binary files
104
+ "**/*.lock",
105
+ "**/*.log",
106
+ // Agent instruction files — not codebase documentation
107
+ "**/CLAUDE.md",
108
+ "**/GEMINI.md",
109
+ "**/.cursor/**",
110
+ "**/.windsurfrules",
111
+ "**/.github/copilot-instructions.md",
112
+ // Boilerplate markdown
113
+ "**/CHANGELOG.md",
114
+ "**/CHANGELOG*.md",
115
+ "**/LICENSE*",
116
+ exports.AI_MEMORY_DIR + "/**",
117
+ exports.AI_MEMORY_CACHE_DIR + "/**",
118
+ ],
119
+ maxChunkLines: 80,
120
+ maxChunkChars: 3000,
121
+ embedding: {
122
+ provider: "ollama",
123
+ model: "nomic-embed-text",
124
+ dimensions: 768,
125
+ },
126
+ summarization: {
127
+ provider: "ollama",
128
+ model: "gemma4:e2b",
129
+ baseUrl: "http://localhost:11434",
130
+ },
131
+ cacheDir: "~/.vemora-cache/<projectId>",
132
+ };
133
+ }
134
+ // ─── Config I/O ───────────────────────────────────────────────────────────────
135
+ function loadConfig(rootDir) {
136
+ const configPath = path_1.default.join(rootDir, exports.AI_MEMORY_DIR, exports.CONFIG_FILE);
137
+ if (!fs_1.default.existsSync(configPath)) {
138
+ throw new Error(`No ${exports.AI_MEMORY_DIR}/config.json found in ${rootDir}.\nRun 'vemora init' first.`);
139
+ }
140
+ const raw = fs_1.default.readFileSync(configPath, "utf-8");
141
+ let config;
142
+ try {
143
+ config = JSON.parse(raw);
144
+ }
145
+ catch {
146
+ throw new Error(`${exports.AI_MEMORY_DIR}/config.json is not valid JSON.\nFix the file manually or run 'vemora init --force' to reset it.`);
147
+ }
148
+ // rootDir is injected at load time (not stored in config) so it always reflects
149
+ // the actual filesystem location, even if the project was moved.
150
+ config.rootDir = rootDir;
151
+ return config;
152
+ }
153
+ function saveConfig(config) {
154
+ const configPath = path_1.default.join(config.rootDir, exports.AI_MEMORY_DIR, exports.CONFIG_FILE);
155
+ // Don't persist rootDir — it's injected at load time
156
+ const { rootDir: _omit, ...toSave } = config;
157
+ fs_1.default.writeFileSync(configPath, JSON.stringify(toSave, null, 2), "utf-8");
158
+ }
159
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}