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,127 @@
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.runStatus = runStatus;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const config_1 = require("../core/config");
10
+ const deps_1 = require("../indexer/deps");
11
+ const cache_1 = require("../storage/cache");
12
+ const knowledge_1 = require("../storage/knowledge");
13
+ const repository_1 = require("../storage/repository");
14
+ const summaries_1 = require("../storage/summaries");
15
+ async function runStatus(rootDir) {
16
+ const config = (0, config_1.loadConfig)(rootDir);
17
+ const repo = new repository_1.RepositoryStorage(rootDir);
18
+ const meta = repo.loadMetadata();
19
+ const cacheStorage = new cache_1.EmbeddingCacheStorage(config.projectId);
20
+ const cache = cacheStorage.load();
21
+ const row = (label, value) => console.log(` ${chalk_1.default.gray(label.padEnd(16))} ${value}`);
22
+ console.log(chalk_1.default.bold("vemora status"));
23
+ console.log();
24
+ row("Project:", config.projectName);
25
+ row("Project ID:", config.projectId);
26
+ row("Provider:", `${config.embedding.provider} / ${config.embedding.model}`);
27
+ if (meta) {
28
+ console.log();
29
+ console.log(chalk_1.default.bold("Index (versioned in git):"));
30
+ row("Last indexed:", meta.lastIndexed ?? chalk_1.default.gray("never"));
31
+ row("Files:", String(meta.indexedFiles));
32
+ row("Chunks:", String(meta.totalChunks));
33
+ row("Symbols:", String(meta.totalSymbols));
34
+ row("Dep edges:", String(meta.totalDepEdges ?? 0));
35
+ row("Call edges:", String(meta.totalCallEdges ?? 0));
36
+ }
37
+ // Summaries
38
+ const summaryStorage = new summaries_1.SummaryStorage(rootDir);
39
+ if (summaryStorage.hasFileSummaries()) {
40
+ const fileSummaries = summaryStorage.loadFileSummaries();
41
+ const summaryCount = Object.keys(fileSummaries).length;
42
+ const hasOverview = summaryStorage.hasProjectSummary();
43
+ console.log();
44
+ console.log(chalk_1.default.bold("Summaries (versioned in git):"));
45
+ row("File summaries:", String(summaryCount));
46
+ row("Project overview:", hasOverview
47
+ ? chalk_1.default.green("yes")
48
+ : chalk_1.default.gray("no (run vemora summarize)"));
49
+ }
50
+ // Knowledge store
51
+ const knowledgeStorage = new knowledge_1.KnowledgeStorage(rootDir);
52
+ if (knowledgeStorage.hasKnowledge()) {
53
+ const entries = knowledgeStorage.load();
54
+ console.log();
55
+ console.log(chalk_1.default.bold("Knowledge store (versioned in git):"));
56
+ row("Entries:", String(entries.length));
57
+ // Staleness detection: warn if relatedFiles were modified after entry was created
58
+ const fileIndex = repo.loadFiles();
59
+ const stale = entries.filter((e) => {
60
+ if (!e.relatedFiles?.length)
61
+ return false;
62
+ return e.relatedFiles.some((f) => {
63
+ const fileEntry = fileIndex[f];
64
+ if (!fileEntry)
65
+ return false;
66
+ // If we have a hash snapshot, use it — immune to touch/timestamp skew
67
+ if (e.relatedFileHashes?.[f]) {
68
+ return fileEntry.hash !== e.relatedFileHashes[f];
69
+ }
70
+ // Fallback for older entries without hash snapshots
71
+ if (fileEntry.hash && e.createdAt) {
72
+ return new Date(fileEntry.lastModified) > new Date(e.createdAt);
73
+ }
74
+ return false;
75
+ });
76
+ });
77
+ if (stale.length > 0) {
78
+ console.log();
79
+ for (const e of stale) {
80
+ console.log(` ${chalk_1.default.yellow("⚠")} Knowledge entry ${chalk_1.default.gray(`[${e.id.slice(0, 8)}]`)} ${chalk_1.default.bold(`"${e.title}"`)} — related files changed after entry was created`);
81
+ console.log(chalk_1.default.gray(` Created: ${e.createdAt.slice(0, 10)} · Run \`vemora knowledge list\` to review`));
82
+ }
83
+ }
84
+ }
85
+ // TODO / FIXME annotations
86
+ const todos = repo.loadTodos();
87
+ if (todos.length > 0) {
88
+ const byType = todos.reduce((acc, t) => {
89
+ acc[t.type] = (acc[t.type] ?? 0) + 1;
90
+ return acc;
91
+ }, {});
92
+ console.log();
93
+ console.log(chalk_1.default.bold("Code annotations (versioned in git):"));
94
+ row("Total:", String(todos.length));
95
+ for (const [type, count] of Object.entries(byType).sort()) {
96
+ row(` ${type}:`, String(count));
97
+ }
98
+ }
99
+ // Circular dependency detection
100
+ const deps = repo.loadDeps();
101
+ const cycles = (0, deps_1.detectCycles)(deps);
102
+ if (cycles.length > 0) {
103
+ console.log();
104
+ console.log(chalk_1.default.bold("Circular dependencies:"));
105
+ for (const cycle of cycles) {
106
+ const display = cycle
107
+ .map((f) => chalk_1.default.cyan(path_1.default.basename(f)))
108
+ .join(chalk_1.default.gray(" → "));
109
+ console.log(` ${chalk_1.default.yellow("⚠")} ${display}`);
110
+ }
111
+ }
112
+ console.log();
113
+ console.log(chalk_1.default.bold("Embedding cache (local only):"));
114
+ const cachedCount = cache?.chunkIds
115
+ ? cache.chunkIds.length
116
+ : Object.keys(cache?.embeddings ?? {}).length;
117
+ if (!cache || cachedCount === 0) {
118
+ console.log(` ${chalk_1.default.gray("No cache found.")} Run ${chalk_1.default.cyan("vemora index")} to generate embeddings.`);
119
+ }
120
+ else {
121
+ row("Cached vectors:", String(cachedCount));
122
+ row("Model:", cache.embeddingModel);
123
+ row("Updated:", cache.lastUpdated);
124
+ row("Location:", cacheStorage.getCacheDir());
125
+ }
126
+ }
127
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface SummarizeOptions {
2
+ /** Re-generate all summaries, ignoring content hashes */
3
+ force?: boolean;
4
+ /** Override the model from config (e.g. gpt-4o, gpt-4o-mini) */
5
+ model?: string;
6
+ /** Only generate file-level summaries, skip project overview */
7
+ filesOnly?: boolean;
8
+ /** Only (re)generate the project overview from existing file summaries */
9
+ projectOnly?: boolean;
10
+ /** Print the existing project overview without regenerating anything */
11
+ show?: boolean;
12
+ }
13
+ export declare function runSummarize(rootDir: string, options?: SummarizeOptions): Promise<void>;
14
+ //# sourceMappingURL=summarize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../src/commands/summarize.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA6BD,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAyLf"}
@@ -0,0 +1,170 @@
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.runSummarize = runSummarize;
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("../llm/factory");
13
+ const repository_1 = require("../storage/repository");
14
+ const summaries_1 = require("../storage/summaries");
15
+ // ─── Prompts ──────────────────────────────────────────────────────────────────
16
+ function fileSummaryPrompt(file, symbols, content) {
17
+ const symbolList = symbols.length > 0 ? symbols.join(", ") : "none";
18
+ return (`Summarize this source file in 1-2 sentences for a code memory index.\n` +
19
+ `Cover: what it does, key exports (${symbolList}), its role in the codebase.\n` +
20
+ `Output only the summary sentence(s). No headers, no lists, no preamble.\n\n` +
21
+ `File: ${file}\n\`\`\`\n${content}\n\`\`\``);
22
+ }
23
+ function projectOverviewPrompt(projectName, summaries) {
24
+ return (`Write a technical overview of the "${projectName}" codebase for an AI assistant's memory index.\n` +
25
+ `Cover: purpose, main architectural layers, key data flows, entry points for development tasks.\n` +
26
+ `Be dense and precise. 200-300 words. No preamble, no headers, plain prose only.\n\n` +
27
+ `File summaries:\n${summaries}`);
28
+ }
29
+ // ─── Main command ─────────────────────────────────────────────────────────────
30
+ async function runSummarize(rootDir, options = {}) {
31
+ if (options.show) {
32
+ const summaryStorage = new summaries_1.SummaryStorage(rootDir);
33
+ const projectSummary = summaryStorage.loadProjectSummary();
34
+ if (!projectSummary) {
35
+ console.log(chalk_1.default.yellow("No project overview found. Run `vemora summarize` first."));
36
+ process.exit(1);
37
+ }
38
+ console.log(projectSummary.overview);
39
+ console.log();
40
+ console.log(chalk_1.default.gray(`Generated: ${projectSummary.generatedAt}`));
41
+ return;
42
+ }
43
+ const config = (0, config_1.loadConfig)(rootDir);
44
+ const repo = new repository_1.RepositoryStorage(rootDir);
45
+ const summaryStorage = new summaries_1.SummaryStorage(rootDir);
46
+ // ── Resolve LLM provider ────────────────────────────────────────────────────
47
+ const summarizationConfig = {
48
+ ...(config.summarization ?? { provider: "ollama", model: "gemma4:e2b", baseUrl: "http://localhost:11434" }),
49
+ ...(options.model ? { model: options.model } : {}),
50
+ };
51
+ const model = summarizationConfig.model;
52
+ const llm = (0, factory_1.createLLMProvider)(summarizationConfig);
53
+ // ── File summaries ──────────────────────────────────────────────────────────
54
+ let anyFileSummaryChanged = false;
55
+ if (!options.projectOnly) {
56
+ const files = repo.loadFiles();
57
+ const prevSummaries = summaryStorage.loadFileSummaries();
58
+ const allEntries = Object.entries(files);
59
+ const toSummarize = options.force
60
+ ? allEntries
61
+ : allEntries.filter(([relPath, entry]) => {
62
+ const prev = prevSummaries[relPath];
63
+ return !prev || prev.contentHash !== entry.hash;
64
+ });
65
+ const skipped = allEntries.length - toSummarize.length;
66
+ console.log(chalk_1.default.bold(`Summarizing ${chalk_1.default.cyan(config.projectName)}`));
67
+ console.log(chalk_1.default.gray(` model: ${model}`));
68
+ console.log();
69
+ console.log(chalk_1.default.bold("File summaries") +
70
+ chalk_1.default.gray(` ${toSummarize.length} to generate` +
71
+ (skipped > 0 ? `, ${skipped} unchanged (skipped)` : "")));
72
+ console.log();
73
+ if (toSummarize.length === 0) {
74
+ console.log(chalk_1.default.green("✓ All file summaries are up to date."));
75
+ }
76
+ else {
77
+ const updated = { ...prevSummaries };
78
+ let failed = 0;
79
+ for (let i = 0; i < toSummarize.length; i++) {
80
+ const [relPath, entry] = toSummarize[i];
81
+ const label = `[${i + 1}/${toSummarize.length}] ${relPath}`;
82
+ const spinner = (0, ora_1.default)(chalk_1.default.gray(label)).start();
83
+ try {
84
+ // Read file content, truncate to ~4000 chars to stay within prompt limits
85
+ const absolutePath = path_1.default.join(rootDir, relPath);
86
+ let content = "";
87
+ if (fs_1.default.existsSync(absolutePath)) {
88
+ const raw = fs_1.default.readFileSync(absolutePath, "utf-8");
89
+ content =
90
+ raw.length > 4000
91
+ ? raw.slice(0, 4000) + "\n... (truncated)"
92
+ : raw;
93
+ }
94
+ const fileSymbols = entry.symbols ?? [];
95
+ const response = await llm.chat([{ role: "user", content: fileSummaryPrompt(relPath, fileSymbols, content) }], { model, maxTokens: 1024, temperature: 0 });
96
+ const summary = response.content.trim();
97
+ updated[relPath] = {
98
+ summary,
99
+ contentHash: entry.hash,
100
+ generatedAt: new Date().toISOString(),
101
+ };
102
+ // Save after every file so progress is never lost on interruption
103
+ summaryStorage.saveFileSummaries(updated);
104
+ spinner.succeed(chalk_1.default.gray(relPath));
105
+ anyFileSummaryChanged = true;
106
+ }
107
+ catch (err) {
108
+ spinner.fail(chalk_1.default.red(`${relPath}: ${err.message}`));
109
+ failed++;
110
+ }
111
+ }
112
+ console.log();
113
+ console.log(chalk_1.default.green(`✓ ${toSummarize.length - failed} file summaries saved`) +
114
+ (failed > 0 ? chalk_1.default.red(` (${failed} failed)`) : "") +
115
+ chalk_1.default.gray(" → .vemora/summaries/file-summaries.json"));
116
+ }
117
+ if (options.filesOnly)
118
+ return;
119
+ console.log();
120
+ }
121
+ // ── Project overview ────────────────────────────────────────────────────────
122
+ if (!anyFileSummaryChanged &&
123
+ !options.force &&
124
+ !options.projectOnly &&
125
+ summaryStorage.hasProjectSummary()) {
126
+ console.log(chalk_1.default.green("✓ Project overview is up to date."));
127
+ return;
128
+ }
129
+ const currentSummaries = summaryStorage.loadFileSummaries();
130
+ const summaryEntries = Object.entries(currentSummaries);
131
+ if (summaryEntries.length === 0) {
132
+ console.log(chalk_1.default.yellow("No file summaries found. Run `vemora summarize` (without --project-only) first."));
133
+ return;
134
+ }
135
+ const overviewSpinner = (0, ora_1.default)("Generating project overview...").start();
136
+ // Build the file summaries block, sorted and truncated to fit context
137
+ const MAX_SUMMARY_CHARS = 12000;
138
+ let summaryBlock = summaryEntries
139
+ .sort(([a], [b]) => a.localeCompare(b))
140
+ .map(([file, { summary }]) => `${file}:\n ${summary}`)
141
+ .join("\n\n");
142
+ if (summaryBlock.length > MAX_SUMMARY_CHARS) {
143
+ summaryBlock =
144
+ summaryBlock.slice(0, MAX_SUMMARY_CHARS) + "\n... (truncated)";
145
+ }
146
+ try {
147
+ const response = await llm.chat([{ role: "user", content: projectOverviewPrompt(config.projectName, summaryBlock) }], { model, maxTokens: 2048, temperature: 0.1 });
148
+ const overview = response.content.trim();
149
+ const projectSummary = {
150
+ overview,
151
+ generatedAt: new Date().toISOString(),
152
+ };
153
+ summaryStorage.saveProjectSummary(projectSummary);
154
+ overviewSpinner.succeed("Project overview saved" +
155
+ chalk_1.default.gray(" → .vemora/summaries/project-summary.json"));
156
+ // Print a short preview
157
+ console.log();
158
+ const previewLines = overview.split("\n").slice(0, 5);
159
+ for (const line of previewLines) {
160
+ console.log(" " + chalk_1.default.gray(line));
161
+ }
162
+ if (overview.split("\n").length > 5) {
163
+ console.log(chalk_1.default.gray(" … (use `vemora summarize --show` to read in full)"));
164
+ }
165
+ }
166
+ catch (err) {
167
+ overviewSpinner.fail(`Project overview failed: ${err.message}`);
168
+ }
169
+ }
170
+ //# sourceMappingURL=summarize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../src/commands/summarize.ts"],"names":[],"mappings":";;;;;AAkDA,oCA4LC;AA9OD,kDAA0B;AAC1B,4CAAoB;AACpB,8CAAsB;AACtB,gDAAwB;AACxB,2CAA4C;AAE5C,4CAAmD;AACnD,sDAA0D;AAC1D,oDAAsD;AAetD,iFAAiF;AAEjF,SAAS,iBAAiB,CACxB,IAAY,EACZ,OAAiB,EACjB,OAAe;IAEf,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,OAAO,CACL,wEAAwE;QACxE,qCAAqC,UAAU,gCAAgC;QAC/E,6EAA6E;QAC7E,SAAS,IAAI,aAAa,OAAO,UAAU,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAmB,EAAE,SAAiB;IACnE,OAAO,CACL,sCAAsC,WAAW,kDAAkD;QACnG,kGAAkG;QAClG,qFAAqF;QACrF,oBAAoB,SAAS,EAAE,CAChC,CAAC;AACJ,CAAC;AAED,iFAAiF;AAE1E,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,UAA4B,EAAE;IAE9B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,cAAc,GAAG,IAAI,0BAAc,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,cAAc,GAAG,cAAc,CAAC,kBAAkB,EAAE,CAAC;QAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,8BAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,IAAI,0BAAc,CAAC,OAAO,CAAC,CAAC;IAEnD,+EAA+E;IAC/E,MAAM,mBAAmB,GAAG;QAC1B,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,QAAQ,EAAE,QAAiB,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;QACpH,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnD,CAAC;IACF,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC;IACxC,MAAM,GAAG,GAAG,IAAA,2BAAiB,EAAC,mBAAmB,CAAC,CAAC;IAEnD,+EAA+E;IAE/E,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAElC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;QAEzD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK;YAC/B,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE;gBACrC,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;gBACpC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,IAAI,CAAC;YAClD,CAAC,CAAC,CAAC;QAEP,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QAEvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAC1B,eAAK,CAAC,IAAI,CACR,KAAK,WAAW,CAAC,MAAM,cAAc;gBACnC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC,CAC1D,CACJ,CAAC;QACF,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAqB,EAAE,GAAG,aAAa,EAAE,CAAC;YACvD,IAAI,MAAM,GAAG,CAAC,CAAC;YAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC5D,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBAE/C,IAAI,CAAC;oBACH,0EAA0E;oBAC1E,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBACjD,IAAI,OAAO,GAAG,EAAE,CAAC;oBACjB,IAAI,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;wBAChC,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;wBACnD,OAAO;4BACL,GAAG,CAAC,MAAM,GAAG,IAAI;gCACf,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,mBAAmB;gCAC1C,CAAC,CAAC,GAAG,CAAC;oBACZ,CAAC;oBAED,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;oBAExC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAC7B,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,EAC7E,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAC3C,CAAC;oBAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBAExC,OAAO,CAAC,OAAO,CAAC,GAAG;wBACjB,OAAO;wBACP,WAAW,EAAE,KAAK,CAAC,IAAI;wBACvB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBACtC,CAAC;oBAEF,kEAAkE;oBAClE,cAAc,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;oBAC1C,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;oBACrC,qBAAqB,GAAG,IAAI,CAAC;gBAC/B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,OAAO,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACjE,MAAM,EAAE,CAAC;gBACX,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,MAAM,GAAG,MAAM,uBAAuB,CAAC;gBAClE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,eAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAC3D,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO;QAC9B,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,+EAA+E;IAE/E,IACE,CAAC,qBAAqB;QACtB,CAAC,OAAO,CAAC,KAAK;QACd,CAAC,OAAO,CAAC,WAAW;QACpB,cAAc,CAAC,iBAAiB,EAAE,EAClC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;IAC5D,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAExD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CACV,iFAAiF,CAClF,CACF,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,eAAe,GAAG,IAAA,aAAG,EAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtE,sEAAsE;IACtE,MAAM,iBAAiB,GAAG,KAAK,CAAC;IAChC,IAAI,YAAY,GAAG,cAAc;SAC9B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,QAAQ,OAAO,EAAE,CAAC;SACtD,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,IAAI,YAAY,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAC5C,YAAY;YACV,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,mBAAmB,CAAC;IACnE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAC7B,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC,EACpF,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAC7C,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEzC,MAAM,cAAc,GAAmB;YACrC,QAAQ;YACR,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QAEF,cAAc,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAClD,eAAe,CAAC,OAAO,CACrB,wBAAwB;YACtB,eAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAC5D,CAAC;QAEF,wBAAwB;QACxB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAe,CAAC,IAAI,CAAC,4BAA6B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
@@ -0,0 +1,33 @@
1
+ export type TriageType = "bugs" | "security" | "performance";
2
+ export interface TriageOptions {
3
+ /** Audit types to run (default: all three) */
4
+ types?: TriageType[];
5
+ /** Max findings to return, sorted by score (default: 30) */
6
+ topK?: number;
7
+ /** Skip findings with score below this threshold (default: 1) */
8
+ minScore?: number;
9
+ /** Output format */
10
+ output?: "terminal" | "json" | "markdown";
11
+ /** Restrict analysis to files matching this substring */
12
+ file?: string;
13
+ }
14
+ export interface TriageMatch {
15
+ heuristic: string;
16
+ category: string;
17
+ severity: "high" | "medium" | "low";
18
+ reason: string;
19
+ /** Absolute 1-based line number within the file */
20
+ line: number;
21
+ /** Trimmed line content (up to 120 chars) */
22
+ snippet: string;
23
+ }
24
+ export interface TriageFinding {
25
+ file: string;
26
+ startLine: number;
27
+ endLine: number;
28
+ symbol?: string;
29
+ score: number;
30
+ matches: TriageMatch[];
31
+ }
32
+ export declare function runTriage(rootDir: string, options?: TriageOptions): Promise<void>;
33
+ //# sourceMappingURL=triage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../src/commands/triage.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;IAC1C,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAmaD,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAmDf"}