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,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 to locate the symbol.\n- **Before querying**, try `vemora query` first \u2014 open a file only if context is insufficient.\n- **Before deep-diving a file or symbol**, use `vemora focus` \u2014 aggregates impl, deps, callers, tests, and knowledge in one call.\n- **Before modifying a file**, check blast radius: `vemora deps <file> --root . --reverse-depth 2`.\n- **Before renaming a symbol**, check callers: `vemora usages <SymbolName> --root .` (add `--callers-only` for methods).\n- **After changes**, run the build/test command before declaring done.\n- **Scope discipline**: only change what was asked. No refactoring, comments, or improvements beyond the request.\n- **Save non-obvious findings** with `vemora remember` \u2014 decisions, gotchas, patterns. Skip what's obvious from reading the code.\n\n## Session setup\n\n```bash\nvemora brief --root . # start of session: project overview + critical knowledge\nvemora index --root . --watch # background terminal: live re-index on file save\nvemora index --root . --no-embed # or: re-index manually after significant changes\n```\n\n## Quick reference\n\n| Need | Command |\n|---|---|\n| Session start | `brief --root .` |\n| File or symbol deep-dive | `focus <target> --root .` |\n| Concept / how-does-X question | `context --root . --query \"<question>\"` |\n| Fix / refactor / add code | `context --root . --query \"<task>\" --keyword` |\n| Scope to recent changes | `context --root . --query \"...\" --since HEAD~5` |\n| Complex multi-step task | `plan \"<task>\" --root . --confirm --synthesize` |\n| LLM audit (security/bugs/perf) | `audit --root . --type security,bugs` |\n| Zero-LLM static scan | `triage --root . --type bugs,security` |\n| Find unused code | `dead-code --root .` |\n| Output too long | add `--budget 2000` to any command |\n| No embeddings / fast search | add `--keyword` to `query` or `context` |\n| Who imports a file | `deps <file> --root .` |\n| Blast radius of a change | `deps <file> --root . --reverse-depth 3` |\n| Who uses a symbol | `usages <SymbolName> --root .` |\n| Who calls a method | `usages <Method> --root . --callers-only` |\n| Save a finding | `remember \"text\" --root .` |\n";
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,+uEAuChC,CAAC;AAIF,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAiEf;AA+RD,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,CA0DR;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWxE"}