vemora 0.1.0-alpha.8

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 (242) hide show
  1. package/README.md +716 -0
  2. package/dist/cli.d.ts +16 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +589 -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 +136 -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 +408 -0
  13. package/dist/commands/audit.js.map +1 -0
  14. package/dist/commands/brief.d.ts +14 -0
  15. package/dist/commands/brief.d.ts.map +1 -0
  16. package/dist/commands/brief.js +73 -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 +161 -0
  21. package/dist/commands/chat.js.map +1 -0
  22. package/dist/commands/context.d.ts +61 -0
  23. package/dist/commands/context.d.ts.map +1 -0
  24. package/dist/commands/context.js +778 -0
  25. package/dist/commands/context.js.map +1 -0
  26. package/dist/commands/deps.d.ts +20 -0
  27. package/dist/commands/deps.d.ts.map +1 -0
  28. package/dist/commands/deps.js +138 -0
  29. package/dist/commands/deps.js.map +1 -0
  30. package/dist/commands/focus.d.ts +6 -0
  31. package/dist/commands/focus.d.ts.map +1 -0
  32. package/dist/commands/focus.js +302 -0
  33. package/dist/commands/focus.js.map +1 -0
  34. package/dist/commands/index.d.ts +10 -0
  35. package/dist/commands/index.d.ts.map +1 -0
  36. package/dist/commands/index.js +366 -0
  37. package/dist/commands/index.js.map +1 -0
  38. package/dist/commands/init-agent.d.ts +23 -0
  39. package/dist/commands/init-agent.d.ts.map +1 -0
  40. package/dist/commands/init-agent.js +447 -0
  41. package/dist/commands/init-agent.js.map +1 -0
  42. package/dist/commands/init.d.ts +2 -0
  43. package/dist/commands/init.d.ts.map +1 -0
  44. package/dist/commands/init.js +122 -0
  45. package/dist/commands/init.js.map +1 -0
  46. package/dist/commands/knowledge.d.ts +8 -0
  47. package/dist/commands/knowledge.d.ts.map +1 -0
  48. package/dist/commands/knowledge.js +98 -0
  49. package/dist/commands/knowledge.js.map +1 -0
  50. package/dist/commands/plan.d.ts +16 -0
  51. package/dist/commands/plan.d.ts.map +1 -0
  52. package/dist/commands/plan.js +535 -0
  53. package/dist/commands/plan.js.map +1 -0
  54. package/dist/commands/query.d.ts +39 -0
  55. package/dist/commands/query.d.ts.map +1 -0
  56. package/dist/commands/query.js +389 -0
  57. package/dist/commands/query.js.map +1 -0
  58. package/dist/commands/remember.d.ts +11 -0
  59. package/dist/commands/remember.d.ts.map +1 -0
  60. package/dist/commands/remember.js +174 -0
  61. package/dist/commands/remember.js.map +1 -0
  62. package/dist/commands/report.d.ts +10 -0
  63. package/dist/commands/report.d.ts.map +1 -0
  64. package/dist/commands/report.js +180 -0
  65. package/dist/commands/report.js.map +1 -0
  66. package/dist/commands/status.d.ts +2 -0
  67. package/dist/commands/status.d.ts.map +1 -0
  68. package/dist/commands/status.js +127 -0
  69. package/dist/commands/status.js.map +1 -0
  70. package/dist/commands/summarize.d.ts +14 -0
  71. package/dist/commands/summarize.d.ts.map +1 -0
  72. package/dist/commands/summarize.js +205 -0
  73. package/dist/commands/summarize.js.map +1 -0
  74. package/dist/commands/triage.d.ts +33 -0
  75. package/dist/commands/triage.d.ts.map +1 -0
  76. package/dist/commands/triage.js +419 -0
  77. package/dist/commands/triage.js.map +1 -0
  78. package/dist/commands/usages.d.ts +14 -0
  79. package/dist/commands/usages.d.ts.map +1 -0
  80. package/dist/commands/usages.js +236 -0
  81. package/dist/commands/usages.js.map +1 -0
  82. package/dist/core/config.d.ts +35 -0
  83. package/dist/core/config.d.ts.map +1 -0
  84. package/dist/core/config.js +140 -0
  85. package/dist/core/config.js.map +1 -0
  86. package/dist/core/types.d.ts +251 -0
  87. package/dist/core/types.d.ts.map +1 -0
  88. package/dist/core/types.js +4 -0
  89. package/dist/core/types.js.map +1 -0
  90. package/dist/embeddings/factory.d.ts +9 -0
  91. package/dist/embeddings/factory.d.ts.map +1 -0
  92. package/dist/embeddings/factory.js +26 -0
  93. package/dist/embeddings/factory.js.map +1 -0
  94. package/dist/embeddings/noop.d.ts +17 -0
  95. package/dist/embeddings/noop.d.ts.map +1 -0
  96. package/dist/embeddings/noop.js +22 -0
  97. package/dist/embeddings/noop.js.map +1 -0
  98. package/dist/embeddings/ollama.d.ts +16 -0
  99. package/dist/embeddings/ollama.d.ts.map +1 -0
  100. package/dist/embeddings/ollama.js +41 -0
  101. package/dist/embeddings/ollama.js.map +1 -0
  102. package/dist/embeddings/openai.d.ts +10 -0
  103. package/dist/embeddings/openai.d.ts.map +1 -0
  104. package/dist/embeddings/openai.js +67 -0
  105. package/dist/embeddings/openai.js.map +1 -0
  106. package/dist/embeddings/provider.d.ts +19 -0
  107. package/dist/embeddings/provider.d.ts.map +1 -0
  108. package/dist/embeddings/provider.js +3 -0
  109. package/dist/embeddings/provider.js.map +1 -0
  110. package/dist/indexer/callgraph.d.ts +16 -0
  111. package/dist/indexer/callgraph.d.ts.map +1 -0
  112. package/dist/indexer/callgraph.js +154 -0
  113. package/dist/indexer/callgraph.js.map +1 -0
  114. package/dist/indexer/chunkBySlidingWindow.d.ts +6 -0
  115. package/dist/indexer/chunkBySlidingWindow.d.ts.map +1 -0
  116. package/dist/indexer/chunkBySlidingWindow.js +30 -0
  117. package/dist/indexer/chunkBySlidingWindow.js.map +1 -0
  118. package/dist/indexer/chunkBySymbols.d.ts +7 -0
  119. package/dist/indexer/chunkBySymbols.d.ts.map +1 -0
  120. package/dist/indexer/chunkBySymbols.js +57 -0
  121. package/dist/indexer/chunkBySymbols.js.map +1 -0
  122. package/dist/indexer/chunker.d.ts +15 -0
  123. package/dist/indexer/chunker.d.ts.map +1 -0
  124. package/dist/indexer/chunker.js +26 -0
  125. package/dist/indexer/chunker.js.map +1 -0
  126. package/dist/indexer/classHeader.d.ts +7 -0
  127. package/dist/indexer/classHeader.d.ts.map +1 -0
  128. package/dist/indexer/classHeader.js +37 -0
  129. package/dist/indexer/classHeader.js.map +1 -0
  130. package/dist/indexer/deps.d.ts +66 -0
  131. package/dist/indexer/deps.d.ts.map +1 -0
  132. package/dist/indexer/deps.js +409 -0
  133. package/dist/indexer/deps.js.map +1 -0
  134. package/dist/indexer/hasher.d.ts +17 -0
  135. package/dist/indexer/hasher.d.ts.map +1 -0
  136. package/dist/indexer/hasher.js +38 -0
  137. package/dist/indexer/hasher.js.map +1 -0
  138. package/dist/indexer/parser.d.ts +18 -0
  139. package/dist/indexer/parser.d.ts.map +1 -0
  140. package/dist/indexer/parser.js +355 -0
  141. package/dist/indexer/parser.js.map +1 -0
  142. package/dist/indexer/scanner.d.ts +18 -0
  143. package/dist/indexer/scanner.d.ts.map +1 -0
  144. package/dist/indexer/scanner.js +37 -0
  145. package/dist/indexer/scanner.js.map +1 -0
  146. package/dist/indexer/strategy.d.ts +11 -0
  147. package/dist/indexer/strategy.d.ts.map +1 -0
  148. package/dist/indexer/strategy.js +15 -0
  149. package/dist/indexer/strategy.js.map +1 -0
  150. package/dist/indexer/tests.d.ts +15 -0
  151. package/dist/indexer/tests.d.ts.map +1 -0
  152. package/dist/indexer/tests.js +68 -0
  153. package/dist/indexer/tests.js.map +1 -0
  154. package/dist/indexer/todos.d.ts +9 -0
  155. package/dist/indexer/todos.d.ts.map +1 -0
  156. package/dist/indexer/todos.js +29 -0
  157. package/dist/indexer/todos.js.map +1 -0
  158. package/dist/llm/anthropic.d.ts +8 -0
  159. package/dist/llm/anthropic.d.ts.map +1 -0
  160. package/dist/llm/anthropic.js +76 -0
  161. package/dist/llm/anthropic.js.map +1 -0
  162. package/dist/llm/factory.d.ts +7 -0
  163. package/dist/llm/factory.d.ts.map +1 -0
  164. package/dist/llm/factory.js +39 -0
  165. package/dist/llm/factory.js.map +1 -0
  166. package/dist/llm/ollama.d.ts +8 -0
  167. package/dist/llm/ollama.d.ts.map +1 -0
  168. package/dist/llm/ollama.js +83 -0
  169. package/dist/llm/ollama.js.map +1 -0
  170. package/dist/llm/openai.d.ts +8 -0
  171. package/dist/llm/openai.d.ts.map +1 -0
  172. package/dist/llm/openai.js +68 -0
  173. package/dist/llm/openai.js.map +1 -0
  174. package/dist/llm/provider.d.ts +29 -0
  175. package/dist/llm/provider.d.ts.map +1 -0
  176. package/dist/llm/provider.js +3 -0
  177. package/dist/llm/provider.js.map +1 -0
  178. package/dist/search/bm25.d.ts +3 -0
  179. package/dist/search/bm25.d.ts.map +1 -0
  180. package/dist/search/bm25.js +102 -0
  181. package/dist/search/bm25.js.map +1 -0
  182. package/dist/search/formatter.d.ts +43 -0
  183. package/dist/search/formatter.d.ts.map +1 -0
  184. package/dist/search/formatter.js +208 -0
  185. package/dist/search/formatter.js.map +1 -0
  186. package/dist/search/hybrid.d.ts +10 -0
  187. package/dist/search/hybrid.d.ts.map +1 -0
  188. package/dist/search/hybrid.js +53 -0
  189. package/dist/search/hybrid.js.map +1 -0
  190. package/dist/search/merge.d.ts +33 -0
  191. package/dist/search/merge.d.ts.map +1 -0
  192. package/dist/search/merge.js +158 -0
  193. package/dist/search/merge.js.map +1 -0
  194. package/dist/search/mmr.d.ts +23 -0
  195. package/dist/search/mmr.d.ts.map +1 -0
  196. package/dist/search/mmr.js +95 -0
  197. package/dist/search/mmr.js.map +1 -0
  198. package/dist/search/rerank.d.ts +15 -0
  199. package/dist/search/rerank.d.ts.map +1 -0
  200. package/dist/search/rerank.js +76 -0
  201. package/dist/search/rerank.js.map +1 -0
  202. package/dist/search/signature.d.ts +42 -0
  203. package/dist/search/signature.d.ts.map +1 -0
  204. package/dist/search/signature.js +112 -0
  205. package/dist/search/signature.js.map +1 -0
  206. package/dist/search/vector.d.ts +41 -0
  207. package/dist/search/vector.d.ts.map +1 -0
  208. package/dist/search/vector.js +185 -0
  209. package/dist/search/vector.js.map +1 -0
  210. package/dist/storage/cache.d.ts +30 -0
  211. package/dist/storage/cache.d.ts.map +1 -0
  212. package/dist/storage/cache.js +160 -0
  213. package/dist/storage/cache.js.map +1 -0
  214. package/dist/storage/knowledge.d.ts +17 -0
  215. package/dist/storage/knowledge.d.ts.map +1 -0
  216. package/dist/storage/knowledge.js +58 -0
  217. package/dist/storage/knowledge.js.map +1 -0
  218. package/dist/storage/repository.d.ts +27 -0
  219. package/dist/storage/repository.d.ts.map +1 -0
  220. package/dist/storage/repository.js +95 -0
  221. package/dist/storage/repository.js.map +1 -0
  222. package/dist/storage/session.d.ts +38 -0
  223. package/dist/storage/session.d.ts.map +1 -0
  224. package/dist/storage/session.js +100 -0
  225. package/dist/storage/session.js.map +1 -0
  226. package/dist/storage/summaries.d.ts +19 -0
  227. package/dist/storage/summaries.d.ts.map +1 -0
  228. package/dist/storage/summaries.js +66 -0
  229. package/dist/storage/summaries.js.map +1 -0
  230. package/dist/storage/usage.d.ts +35 -0
  231. package/dist/storage/usage.d.ts.map +1 -0
  232. package/dist/storage/usage.js +55 -0
  233. package/dist/storage/usage.js.map +1 -0
  234. package/dist/utils/git.d.ts +15 -0
  235. package/dist/utils/git.d.ts.map +1 -0
  236. package/dist/utils/git.js +38 -0
  237. package/dist/utils/git.js.map +1 -0
  238. package/dist/utils/tokenizer.d.ts +24 -0
  239. package/dist/utils/tokenizer.d.ts.map +1 -0
  240. package/dist/utils/tokenizer.js +52 -0
  241. package/dist/utils/tokenizer.js.map +1 -0
  242. package/package.json +71 -0
@@ -0,0 +1,366 @@
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.runIndex = runIndex;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const config_1 = require("../core/config");
12
+ const factory_1 = require("../embeddings/factory");
13
+ const callgraph_1 = require("../indexer/callgraph");
14
+ const chunker_1 = require("../indexer/chunker");
15
+ const deps_1 = require("../indexer/deps");
16
+ const hasher_1 = require("../indexer/hasher");
17
+ const parser_1 = require("../indexer/parser");
18
+ const scanner_1 = require("../indexer/scanner");
19
+ const todos_1 = require("../indexer/todos");
20
+ const cache_1 = require("../storage/cache");
21
+ const repository_1 = require("../storage/repository");
22
+ async function runIndex(rootDir, options = {}) {
23
+ const config = (0, config_1.loadConfig)(rootDir);
24
+ const repo = new repository_1.RepositoryStorage(rootDir);
25
+ const cacheStorage = new cache_1.EmbeddingCacheStorage(config.projectId);
26
+ console.log(chalk_1.default.bold(`Indexing ${chalk_1.default.cyan(config.projectName)}...`));
27
+ console.log();
28
+ // ── Step 0: Initial full or incremental index ───────────────────────────────
29
+ const { newFiles, newChunks, newSymbols, newDeps, newCallGraph, newTodos, stats, changedPaths, deletedPaths, } = await performIndexIteration(rootDir, config, repo, options);
30
+ if (changedPaths.length > 0 || deletedPaths.length > 0) {
31
+ // Save everything from the initial run
32
+ repo.saveFiles(newFiles);
33
+ repo.saveChunks(newChunks);
34
+ repo.saveSymbols(newSymbols);
35
+ repo.saveDeps(newDeps);
36
+ repo.saveCallGraph(newCallGraph);
37
+ repo.saveTodos(newTodos);
38
+ if (!options.noEmbed && config.embedding.provider !== "none") {
39
+ const cache = await generateEmbeddings(newChunks, cacheStorage.load(), config, cacheStorage);
40
+ await rebuildHNSWIndex(newChunks, cache, cacheStorage);
41
+ }
42
+ updateMetadata(repo, config, newFiles, newSymbols, stats, newCallGraph);
43
+ console.log(chalk_1.default.bold.green("\nInitial indexing complete!"));
44
+ }
45
+ else {
46
+ console.log(chalk_1.default.green("Index is already up to date."));
47
+ }
48
+ // ── Step 1: Start watcher if requested ──────────────────────────────────────
49
+ if (options.watch) {
50
+ await startWatcher(rootDir, config, repo, cacheStorage, options);
51
+ }
52
+ }
53
+ /**
54
+ * Performs a single pass of indexing (scan, hash, parse, deps).
55
+ * Returns the new state and which paths were affected.
56
+ */
57
+ async function performIndexIteration(rootDir, config, repo, options, specificPaths) {
58
+ // Load previous state
59
+ const prevFiles = options.force ? {} : repo.loadFiles();
60
+ const prevChunks = options.force ? [] : repo.loadChunks();
61
+ const prevSymbols = options.force ? {} : repo.loadSymbols();
62
+ const prevDeps = options.force ? {} : repo.loadDeps();
63
+ const prevCallGraph = options.force ? {} : repo.loadCallGraph();
64
+ let changedPaths = [];
65
+ let deletedPaths = [];
66
+ let unchangedPaths = [];
67
+ const allScannedPaths = new Set();
68
+ if (specificPaths) {
69
+ // If called from watcher, we already know what changed
70
+ changedPaths = specificPaths.changed ?? [];
71
+ deletedPaths = specificPaths.deleted ?? [];
72
+ // Carry forward everything else from prevFiles
73
+ const affected = new Set([...changedPaths, ...deletedPaths]);
74
+ unchangedPaths = Object.keys(prevFiles).filter((p) => !affected.has(p));
75
+ for (const p of [...changedPaths, ...unchangedPaths])
76
+ allScannedPaths.add(p);
77
+ }
78
+ else {
79
+ // Standard run: scan everything
80
+ const scanSpinner = (0, ora_1.default)("Scanning repository files...").start();
81
+ const scanned = await (0, scanner_1.scanRepository)(config);
82
+ scanSpinner.succeed(`Found ${chalk_1.default.bold(scanned.length)} files to consider`);
83
+ const hashSpinner = (0, ora_1.default)("Computing file hashes...").start();
84
+ for (const file of scanned) {
85
+ allScannedPaths.add(file.relativePath);
86
+ try {
87
+ const hash = (0, hasher_1.hashFile)(file.absolutePath);
88
+ const prev = prevFiles[file.relativePath];
89
+ if (prev && prev.hash === hash && !options.force) {
90
+ unchangedPaths.push(file.relativePath);
91
+ }
92
+ else {
93
+ changedPaths.push(file.relativePath);
94
+ }
95
+ }
96
+ catch {
97
+ /* skip */
98
+ }
99
+ }
100
+ deletedPaths = Object.keys(prevFiles).filter((p) => !allScannedPaths.has(p));
101
+ hashSpinner.succeed([
102
+ chalk_1.default.green(`${unchangedPaths.length} unchanged`),
103
+ chalk_1.default.yellow(`${changedPaths.length} changed/new`),
104
+ deletedPaths.length > 0
105
+ ? chalk_1.default.red(`${deletedPaths.length} deleted`)
106
+ : null,
107
+ ]
108
+ .filter(Boolean)
109
+ .join(", "));
110
+ }
111
+ const newFiles = {};
112
+ // Carry forward unchanged
113
+ for (const p of unchangedPaths) {
114
+ if (prevFiles[p])
115
+ newFiles[p] = prevFiles[p];
116
+ }
117
+ const allFilePaths = allScannedPaths;
118
+ const reprocessPaths = new Set([...changedPaths, ...deletedPaths]);
119
+ const newSymbols = Object.fromEntries(Object.entries(prevSymbols).filter(([, sym]) => !reprocessPaths.has(sym.file)));
120
+ const newChunks = prevChunks.filter((c) => !reprocessPaths.has(c.file));
121
+ // Carry forward todos from unchanged files
122
+ const prevTodos = options.force ? [] : repo.loadTodos();
123
+ const newTodos = prevTodos.filter((t) => !reprocessPaths.has(t.file));
124
+ // Call Graph partials
125
+ const partialCallGraphs = [];
126
+ // Carry forward partial call graphs for unchanged files
127
+ // (This is a simplified approach: we filter the old global graph)
128
+ const unchangedCallGraph = {};
129
+ for (const [callerId, data] of Object.entries(prevCallGraph)) {
130
+ const file = callerId.split(":")[0];
131
+ if (reprocessPaths.has(file))
132
+ continue;
133
+ unchangedCallGraph[callerId] = data;
134
+ }
135
+ partialCallGraphs.push(unchangedCallGraph);
136
+ const changedContents = new Map();
137
+ if (changedPaths.length > 0) {
138
+ const parseSpinner = (0, ora_1.default)(`Parsing ${changedPaths.length} files...`).start();
139
+ let _parseErrors = 0;
140
+ const BATCH_SIZE = 4;
141
+ for (let i = 0; i < changedPaths.length; i += BATCH_SIZE) {
142
+ const batch = changedPaths.slice(i, i + BATCH_SIZE);
143
+ await Promise.all(batch.map(async (relativePath) => {
144
+ const absolutePath = path_1.default.join(rootDir, relativePath);
145
+ try {
146
+ if (!fs_1.default.existsSync(absolutePath))
147
+ return;
148
+ const content = fs_1.default.readFileSync(absolutePath, "utf-8");
149
+ const hash = (0, hasher_1.hashBuffer)(content); // avoids re-reading the file
150
+ const stats = fs_1.default.statSync(absolutePath);
151
+ const symbols = (0, parser_1.parseSymbols)(relativePath, content);
152
+ const chunks = (0, chunker_1.chunkFile)(relativePath, content, symbols, config);
153
+ const fileSymbols = (0, parser_1.buildSymbolIndex)(relativePath, symbols);
154
+ newFiles[relativePath] = {
155
+ hash,
156
+ size: stats.size,
157
+ lastModified: stats.mtime.toISOString(),
158
+ chunks: chunks.map((c) => c.id),
159
+ symbols: symbols.map((s) => s.name),
160
+ };
161
+ Object.assign(newSymbols, fileSymbols);
162
+ newChunks.push(...chunks);
163
+ changedContents.set(relativePath, content);
164
+ newTodos.push(...(0, todos_1.extractTodos)(relativePath, content));
165
+ // Extract calls for Call Graph
166
+ const fileCalls = (0, callgraph_1.extractFileCalls)(relativePath, content, {
167
+ symbols: newSymbols,
168
+ deps: prevDeps,
169
+ allFiles: allFilePaths,
170
+ });
171
+ partialCallGraphs.push(fileCalls);
172
+ }
173
+ catch (_err) {
174
+ _parseErrors++;
175
+ }
176
+ }));
177
+ }
178
+ parseSpinner.succeed(`Parsed ${changedPaths.length} files`);
179
+ }
180
+ const aliases = (0, deps_1.loadTsPathAliases)(rootDir);
181
+ const newDeps = (0, deps_1.updateDependencyGraph)(prevDeps, changedContents, new Set(deletedPaths), allFilePaths, aliases);
182
+ const stats = (0, deps_1.graphStats)(newDeps);
183
+ // Build final Call Graph
184
+ const newCallGraph = (0, callgraph_1.buildGlobalCallGraph)(partialCallGraphs);
185
+ return {
186
+ newFiles,
187
+ newChunks,
188
+ newSymbols,
189
+ newDeps,
190
+ newCallGraph,
191
+ newTodos,
192
+ stats,
193
+ changedPaths,
194
+ deletedPaths,
195
+ };
196
+ }
197
+ function updateMetadata(repo, config, files, symbols, stats, callGraph) {
198
+ let totalCallEdges = 0;
199
+ if (callGraph) {
200
+ totalCallEdges = Object.values(callGraph).reduce((acc, data) => acc + data.calls.length, 0);
201
+ }
202
+ const meta = {
203
+ projectId: config.projectId,
204
+ projectName: config.projectName,
205
+ lastIndexed: new Date().toISOString(),
206
+ indexedFiles: Object.keys(files).length,
207
+ totalChunks: Object.values(files).reduce((acc, f) => acc + f.chunks.length, 0),
208
+ totalSymbols: Object.keys(symbols).length,
209
+ totalDepEdges: stats.totalEdges,
210
+ totalCallEdges,
211
+ embeddingProvider: config.embedding.provider,
212
+ embeddingModel: config.embedding.model,
213
+ };
214
+ repo.saveMetadata(meta);
215
+ return meta;
216
+ }
217
+ async function startWatcher(rootDir, config, repo, cacheStorage, options) {
218
+ const chokidar = require("chokidar");
219
+ // micromatch is a transitive dependency of fast-glob — always available
220
+ const micromatch = require("micromatch");
221
+ // Use a function so that chokidar filters against relative paths the same way
222
+ // the scanner does, preventing dist/ and .vemora/ writes from feedback-looping.
223
+ const isIgnored = (absPath) => {
224
+ const rel = path_1.default.relative(rootDir, absPath);
225
+ if (!rel || rel.startsWith(".."))
226
+ return false;
227
+ return micromatch.isMatch(rel, config.exclude, { dot: true });
228
+ };
229
+ const watcher = chokidar.watch(rootDir, {
230
+ ignored: isIgnored,
231
+ persistent: true,
232
+ ignoreInitial: true,
233
+ });
234
+ console.log(chalk_1.default.blue("\nWatching for changes... (Ctrl+C to stop)"));
235
+ const pendingChanges = new Set();
236
+ const pendingDeletions = new Set();
237
+ let debounceTimer = null;
238
+ const triggerIndex = async () => {
239
+ const changed = Array.from(pendingChanges);
240
+ const deleted = Array.from(pendingDeletions);
241
+ pendingChanges.clear();
242
+ pendingDeletions.clear();
243
+ process.stdout.write(chalk_1.default.yellow(`\nChange detected, re-indexing ${changed.length + deleted.length} files... `));
244
+ try {
245
+ const { newFiles, newChunks, newSymbols, newDeps, newCallGraph, newTodos, stats } = await performIndexIteration(rootDir, config, repo, options, {
246
+ changed,
247
+ deleted,
248
+ });
249
+ repo.saveFiles(newFiles);
250
+ repo.saveChunks(newChunks);
251
+ repo.saveSymbols(newSymbols);
252
+ repo.saveDeps(newDeps);
253
+ repo.saveCallGraph(newCallGraph);
254
+ repo.saveTodos(newTodos);
255
+ if (!options.noEmbed && config.embedding.provider !== "none") {
256
+ const cache = cacheStorage.load();
257
+ const updatedCache = await generateEmbeddings(newChunks, cache, config, cacheStorage);
258
+ await rebuildHNSWIndex(newChunks, updatedCache, cacheStorage);
259
+ }
260
+ updateMetadata(repo, config, newFiles, newSymbols, stats, newCallGraph);
261
+ process.stdout.write(chalk_1.default.green("Done.\n"));
262
+ }
263
+ catch (err) {
264
+ process.stdout.write(chalk_1.default.red(`Failed: ${err.message}\n`));
265
+ }
266
+ };
267
+ const handleChange = (filePath, isDeleted = false) => {
268
+ const rel = path_1.default.relative(rootDir, filePath);
269
+ if (!rel || rel.startsWith(".."))
270
+ return;
271
+ // Apply the same include/exclude rules as the scanner to avoid processing
272
+ // files like compiled dist/ output or editor temp files.
273
+ const included = micromatch.isMatch(rel, config.include, { dot: false });
274
+ const excluded = micromatch.isMatch(rel, config.exclude, { dot: true });
275
+ if (!included || excluded)
276
+ return;
277
+ if (isDeleted) {
278
+ pendingDeletions.add(rel);
279
+ pendingChanges.delete(rel);
280
+ }
281
+ else {
282
+ pendingChanges.add(rel);
283
+ pendingDeletions.delete(rel);
284
+ }
285
+ if (debounceTimer)
286
+ clearTimeout(debounceTimer);
287
+ debounceTimer = setTimeout(triggerIndex, 500);
288
+ };
289
+ watcher
290
+ .on("add", (p) => handleChange(p))
291
+ .on("change", (p) => handleChange(p))
292
+ .on("unlink", (p) => handleChange(p, true));
293
+ // biome-ignore lint/suspicious/noEmptyBlockStatements: intentionally empty — keeps the process alive
294
+ return new Promise(() => { }); // Keep alive
295
+ }
296
+ // ─── Embedding Generation ─────────────────────────────────────────────────────
297
+ async function generateEmbeddings(chunks, prevCache, config, cacheStorage) {
298
+ const cachedIds = new Set([
299
+ ...Object.keys(prevCache?.embeddings ?? {}),
300
+ ...(prevCache?.chunkIds ?? []),
301
+ ]);
302
+ const toEmbed = chunks.filter((c) => !cachedIds.has(c.id));
303
+ if (toEmbed.length === 0) {
304
+ console.log(chalk_1.default.green("✓") + " All embeddings already cached");
305
+ return prevCache;
306
+ }
307
+ const spinner = (0, ora_1.default)(`Generating embeddings for ${chalk_1.default.bold(toEmbed.length)} new chunks via ${config.embedding.provider}...`).start();
308
+ try {
309
+ const provider = (0, factory_1.createEmbeddingProvider)(config.embedding);
310
+ // Prefix each chunk with its location so the embedding captures context
311
+ const texts = toEmbed.map((c) => `file: ${c.file}\nsymbol: ${c.symbol ?? "(none)"}\n\n${c.content}`);
312
+ const embeddings = await provider.embed(texts);
313
+ const newEmbeddings = {};
314
+ for (let i = 0; i < toEmbed.length; i++) {
315
+ if (embeddings[i]?.length > 0) {
316
+ newEmbeddings[toEmbed[i].id] = embeddings[i];
317
+ }
318
+ }
319
+ // Build or update the cache
320
+ const baseCache = prevCache ?? {
321
+ projectId: config.projectId,
322
+ embeddingModel: config.embedding.model,
323
+ dimensions: config.embedding.dimensions,
324
+ lastUpdated: new Date().toISOString(),
325
+ embeddings: {},
326
+ };
327
+ // Prune stale entries, then add new ones
328
+ const validIds = new Set(chunks.map((c) => c.id));
329
+ const pruned = cacheStorage.prune(validIds, baseCache);
330
+ const updated = cacheStorage.update(newEmbeddings, pruned);
331
+ spinner.succeed(`Generated ${chalk_1.default.bold(Object.keys(newEmbeddings).length)} embeddings` +
332
+ ` (cached locally at ~/.vemora-cache/)`);
333
+ return updated;
334
+ }
335
+ catch (err) {
336
+ spinner.fail(`Embedding generation failed: ${err.message}`);
337
+ console.log(chalk_1.default.gray(" Keyword search is still available. Fix the provider config and re-run."));
338
+ return prevCache;
339
+ }
340
+ }
341
+ async function rebuildHNSWIndex(chunks, cache, cacheStorage) {
342
+ if (!cache || !cache.vectors || !cache.chunkIds)
343
+ return;
344
+ const spinner = (0, ora_1.default)("Building HNSW search index...").start();
345
+ try {
346
+ const { HNSW } = require("hnsw");
347
+ // Create new index
348
+ // Using default parameters: M=16, efConstruction=200
349
+ const dimensions = cache.dimensions;
350
+ const index = new HNSW(16, 200, dimensions, "cosine");
351
+ const data = cache.chunkIds.map((id, i) => {
352
+ const offset = i * dimensions;
353
+ const vector = cache.vectors.subarray(offset, offset + dimensions);
354
+ return { id: i, vector: Array.from(vector) };
355
+ });
356
+ await index.buildIndex(data);
357
+ // Save to cache
358
+ cache.hnswIndex = index.toJSON();
359
+ cacheStorage.save(cache);
360
+ spinner.succeed(`HNSW index built with ${chalk_1.default.bold(cache.chunkIds.length)} vectors`);
361
+ }
362
+ catch (err) {
363
+ spinner.fail(`HNSW index build failed: ${err.message}`);
364
+ }
365
+ }
366
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export type AgentTarget = "claude" | "copilot" | "cursor" | "windsurf" | "gemini";
2
+ export interface InitAgentOptions {
3
+ agents?: AgentTarget[];
4
+ force?: boolean;
5
+ /** Write Claude Code hooks to .claude/settings.json (Claude target only). */
6
+ hooks?: boolean;
7
+ }
8
+ export declare const MARKER_START = "<!-- vemora:generated:start -->";
9
+ export declare const MARKER_END = "<!-- vemora:generated:end -->";
10
+ export declare const DEFAULT_INSTRUCTIONS = "## Working with this codebase\n\n- **Before reading any file**, check the Key Exports table below to locate the relevant symbol.\n- **Before querying**, try `vemora query` first \u2014 open a file only if the returned context is insufficient.\n- **Before deep-diving a file or symbol**, use `vemora focus` \u2014 it aggregates implementation, deps, callers, tests, and knowledge in one call.\n- **Before modifying a file**, check its blast radius: `vemora deps <file> --root . --reverse-depth 2`.\n- **Before renaming a symbol or changing its API**, check who uses it: `vemora usages <SymbolName> --root .`.\n- **After making changes**, always run the build/test command to verify correctness before declaring done.\n- **Scope discipline**: only make changes directly requested. Do not refactor surrounding code, add comments, or improve things that were not explicitly asked.\n- **Save non-obvious findings** with `vemora remember` when you discover a gotcha, an architectural decision, or a pattern worth preserving for future sessions. Do not save things already obvious from reading the code.\n\n## Session setup\n\nAt the **start of each session**, load the project primer:\n\n```bash\nvemora brief --root .\n```\n\nFor a live index, also run this in a background terminal:\n\n```bash\nvemora index --root . --watch\n```\n\nWithout it, re-index manually after significant changes:\n\n```bash\nvemora index --root . --no-embed\n```\n\n## Session memory\n\nDuring the session, **proactively save** anything non-obvious that future sessions would benefit from knowing:\n\n```bash\nvemora remember \"text\" --root . # category is auto-classified by the LLM\n```\n\n**Save:** why a design decision was made, a non-obvious constraint, a bug and its root cause, an approved pattern.\n**Do not save:** things obvious from reading the code, file structure, recent changes (use `git log`), or anything already in the index.\n\n## Quick reference\n\nUse this decision tree to choose the right command:\n\n| Situation | Command |\n|---|---|\n| Session start \u2014 re-establish context | `brief --root .` |\n| User asks about a function, class, or file | `focus <file-or-symbol> --root .` |\n| User asks a concept/how-does-X-work question | `context --root . --query \"<question>\"` |\n| User asks to fix / refactor / add code | `context --root . --query \"<task>\" --keyword`, then check for `*.test.ts` before editing |\n| Complex multi-step task | `plan \"<task>\" --root . --confirm --synthesize` |\n| Security / performance / bug audit | `audit --root . --type security,bugs` |\n| Quick static scan \u2014 no API key needed | `triage --root . --type bugs,security` |\n| Output is too long for your context window | add `--budget 2000` (or lower) to any command |\n| No embeddings available / fast keyword search | add `--keyword` to any `query` or `context` call |\n| Need to understand who imports a file | `deps <file> --root .` |\n| Need to see the full blast radius of a change | `deps <file> --root . --reverse-depth 3` |\n| Need to find who calls a specific symbol | `usages <SymbolName> --root .` |";
11
+ export declare function runInitAgent(rootDir: string, options?: InitAgentOptions): Promise<void>;
12
+ export declare function buildGeneratedBlock(_projectName: string, projectOverview: string | null, npmScripts: Record<string, string>, entryPoints: string[], fileSummaries: Record<string, {
13
+ summary: string;
14
+ }>, exportedSymbols: Array<[string, {
15
+ type: string;
16
+ file: string;
17
+ }]>): string;
18
+ /**
19
+ * Reads npm scripts from package.json in rootDir.
20
+ * Returns an empty object if no package.json or no scripts field.
21
+ */
22
+ export declare function detectNpmScripts(rootDir: string): Record<string, string>;
23
+ //# sourceMappingURL=init-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-agent.d.ts","sourceRoot":"","sources":["../../src/commands/init-agent.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAElF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAID,eAAO,MAAM,YAAY,oCAAoC,CAAC;AAC9D,eAAO,MAAM,UAAU,kCAAkC,CAAC;AAI1D,eAAO,MAAM,oBAAoB,siGA2D+C,CAAC;AAIjF,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA6Df;AAkSD,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GAAG,IAAI,EAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAClD,eAAe,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,GAC/D,MAAM,CA0GR;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWxE"}