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,267 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.runRemember = runRemember;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const crypto_1 = __importDefault(require("crypto"));
42
+ const readline_1 = __importDefault(require("readline"));
43
+ const config_1 = require("../core/config");
44
+ const factory_1 = require("../llm/factory");
45
+ const knowledge_1 = require("../storage/knowledge");
46
+ const repository_1 = require("../storage/repository");
47
+ const VALID_CATEGORIES = ["decision", "pattern", "gotcha", "glossary"];
48
+ /**
49
+ * Uses the configured LLM to check whether `newBody` directly contradicts any
50
+ * of the candidate entries. Returns the contradicting entry or null.
51
+ * Only fires when candidates exist — no overhead on the common case.
52
+ */
53
+ async function detectContradiction(newBody, candidates, config) {
54
+ const llmConfig = config.summarization ?? config.planner;
55
+ if (!llmConfig)
56
+ return null;
57
+ try {
58
+ const provider = (0, factory_1.createLLMProvider)(llmConfig);
59
+ const candidateList = candidates
60
+ .map((c, i) => `[${i + 1}] (${c.id.slice(0, 8)}) ${c.title}: ${c.body.slice(0, 200)}`)
61
+ .join("\n");
62
+ const resp = await provider.chat([
63
+ {
64
+ role: "system",
65
+ content: "You are a fact-checker for a software project knowledge base. " +
66
+ "Given a new note and a list of existing notes, determine if the new note " +
67
+ "DIRECTLY CONTRADICTS any existing note (i.e. they cannot both be true at the same time). " +
68
+ "An update or refinement to a fact is NOT a contradiction. " +
69
+ "Reply with ONLY the number of the contradicting entry (e.g. '2'), or '0' if there is no contradiction.",
70
+ },
71
+ {
72
+ role: "user",
73
+ content: `New note: ${newBody}\n\nExisting notes:\n${candidateList}`,
74
+ },
75
+ ], { maxTokens: 8, temperature: 0 });
76
+ const idx = parseInt(resp.content.trim(), 10);
77
+ if (isNaN(idx) || idx <= 0 || idx > candidates.length)
78
+ return null;
79
+ return candidates[idx - 1] ?? null;
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ /**
86
+ * Prompts the user interactively for how to handle a detected contradiction.
87
+ * Returns "supersede" | "keep" | "abort".
88
+ * Falls back to "keep" when not running in a TTY (CI / pipe).
89
+ */
90
+ async function promptContradictionChoice(newBody, conflict) {
91
+ if (!process.stdin.isTTY)
92
+ return "keep";
93
+ console.warn();
94
+ console.warn(chalk_1.default.yellow(`⚠ Possible contradiction with existing entry [${conflict.id.slice(0, 8)}] "${conflict.title}"`));
95
+ console.warn(chalk_1.default.gray(` Existing: ${conflict.body.slice(0, 120)}${conflict.body.length > 120 ? "…" : ""}`));
96
+ console.warn(chalk_1.default.gray(` New: ${newBody.slice(0, 120)}${newBody.length > 120 ? "…" : ""}`));
97
+ console.warn();
98
+ console.warn(" Options:");
99
+ console.warn(` ${chalk_1.default.cyan("[s]")} invalidate existing + save new (recommended)`);
100
+ console.warn(` ${chalk_1.default.cyan("[k]")} keep both entries`);
101
+ console.warn(` ${chalk_1.default.cyan("[a]")} abort`);
102
+ console.warn();
103
+ return new Promise((resolve) => {
104
+ const rl = readline_1.default.createInterface({ input: process.stdin, output: process.stdout });
105
+ rl.question("Choice [s/k/a]: ", (answer) => {
106
+ rl.close();
107
+ const ch = answer.trim().toLowerCase();
108
+ if (ch === "s")
109
+ return resolve("supersede");
110
+ if (ch === "a")
111
+ return resolve("abort");
112
+ resolve("keep");
113
+ });
114
+ });
115
+ }
116
+ /**
117
+ * Calls the configured LLM to classify a knowledge entry body into one of the
118
+ * four categories. Falls back to "pattern" if the LLM is unavailable or returns
119
+ * an unexpected value.
120
+ */
121
+ async function classifyCategory(body, config) {
122
+ const llmConfig = config.summarization ?? config.planner;
123
+ if (!llmConfig)
124
+ return "pattern";
125
+ try {
126
+ const provider = (0, factory_1.createLLMProvider)(llmConfig);
127
+ const resp = await provider.chat([
128
+ {
129
+ role: "system",
130
+ content: "You are a classifier. Given a short knowledge note about a software project, " +
131
+ "reply with exactly one word — the best category for the note:\n" +
132
+ "- decision (an architectural or design choice and its rationale)\n" +
133
+ "- pattern (an approved implementation pattern or convention)\n" +
134
+ "- gotcha (a surprising behaviour, constraint, or known trap)\n" +
135
+ "- glossary (a definition or explanation of a term used in the project)\n" +
136
+ "Reply with only the single category word, nothing else.",
137
+ },
138
+ { role: "user", content: body.slice(0, 500) },
139
+ ]);
140
+ const word = resp.content.trim().toLowerCase();
141
+ return VALID_CATEGORIES.includes(word) ? word : "pattern";
142
+ }
143
+ catch {
144
+ return "pattern";
145
+ }
146
+ }
147
+ async function runRemember(rootDir, body, options = {}) {
148
+ const config = (0, config_1.loadConfig)(rootDir);
149
+ if (body.trim().length < 20) {
150
+ console.error(chalk_1.default.red("Error: knowledge entry must be at least 20 characters."));
151
+ process.exit(1);
152
+ }
153
+ const storage = new knowledge_1.KnowledgeStorage(rootDir);
154
+ const repo = new repository_1.RepositoryStorage(rootDir);
155
+ const fileIndex = repo.loadFiles();
156
+ const entries = storage.load();
157
+ const validEntries = (0, knowledge_1.filterValidAt)(entries);
158
+ // Token overlap pre-filter — collect candidates for contradiction check (>0.4)
159
+ // and warn on near-duplicates (>0.6)
160
+ const bodyTokens = new Set(body
161
+ .toLowerCase()
162
+ .split(/[\s\W]+/)
163
+ .filter((t) => t.length >= 3));
164
+ const candidates = [];
165
+ for (const e of validEntries) {
166
+ const eTokens = `${e.title} ${e.body}`
167
+ .toLowerCase()
168
+ .split(/[\s\W]+/)
169
+ .filter((t) => t.length >= 3);
170
+ const overlap = eTokens.filter((t) => bodyTokens.has(t)).length / Math.max(bodyTokens.size, 1);
171
+ if (overlap > 0.6) {
172
+ console.warn(chalk_1.default.yellow(`⚠ Similar entry already exists: [${e.id.slice(0, 8)}] "${e.title}"`));
173
+ console.warn(chalk_1.default.gray(" Use --supersedes <id> to replace it, or proceed to add a new entry."));
174
+ }
175
+ else if (overlap > 0.4) {
176
+ candidates.push(e);
177
+ }
178
+ }
179
+ // Contradiction detection via LLM (only when candidates exist)
180
+ let supersedingId;
181
+ if (candidates.length > 0) {
182
+ const spinner = (await Promise.resolve().then(() => __importStar(require("ora")))).default("Checking for contradictions…").start();
183
+ const conflict = await detectContradiction(body, candidates, config);
184
+ spinner.stop();
185
+ if (conflict) {
186
+ const choice = await promptContradictionChoice(body, conflict);
187
+ if (choice === "abort") {
188
+ console.log(chalk_1.default.gray("Aborted — no entry saved."));
189
+ return;
190
+ }
191
+ if (choice === "supersede") {
192
+ storage.invalidate(conflict.id);
193
+ supersedingId = conflict.id;
194
+ console.log(chalk_1.default.gray(` Invalidated [${conflict.id.slice(0, 8)}] "${conflict.title}"`));
195
+ }
196
+ }
197
+ }
198
+ // Derive title from body if not provided (first sentence, max 80 chars)
199
+ const title = options.title ??
200
+ body
201
+ .split(/[.!?\n]/)[0]
202
+ .trim()
203
+ .slice(0, 80);
204
+ // Auto-classify category via LLM when not explicitly provided
205
+ let category;
206
+ if (options.category) {
207
+ category = options.category;
208
+ }
209
+ else {
210
+ const spinner = (await Promise.resolve().then(() => __importStar(require("ora")))).default("Classifying…").start();
211
+ try {
212
+ category = await classifyCategory(body, config);
213
+ spinner.stop();
214
+ }
215
+ catch {
216
+ spinner.stop();
217
+ category = "pattern";
218
+ }
219
+ }
220
+ const entry = {
221
+ id: crypto_1.default.randomUUID(),
222
+ category,
223
+ title,
224
+ body: body.trim(),
225
+ relatedFiles: options.files
226
+ ? options.files
227
+ .split(",")
228
+ .map((f) => f.trim())
229
+ .filter(Boolean)
230
+ : undefined,
231
+ relatedFileHashes: options.files
232
+ ? Object.fromEntries(options.files
233
+ .split(",")
234
+ .map((f) => f.trim())
235
+ .filter(Boolean)
236
+ .flatMap((f) => {
237
+ const entry = fileIndex[f];
238
+ return entry?.hash ? [[f, entry.hash]] : [];
239
+ }))
240
+ : undefined,
241
+ relatedSymbols: options.symbols
242
+ ? options.symbols
243
+ .split(",")
244
+ .map((s) => s.trim())
245
+ .filter(Boolean)
246
+ : undefined,
247
+ createdAt: new Date().toISOString(),
248
+ createdBy: options.createdBy ?? "human",
249
+ confidence: options.confidence ?? "medium",
250
+ supersedes: options.supersedes ?? supersedingId,
251
+ };
252
+ storage.add(entry);
253
+ console.log(chalk_1.default.green("✔ Knowledge entry saved."));
254
+ console.log(` ${chalk_1.default.gray("ID:")} ${entry.id}`);
255
+ console.log(` ${chalk_1.default.gray("Category:")} ${entry.category}`);
256
+ console.log(` ${chalk_1.default.gray("Title:")} ${entry.title}`);
257
+ if (entry.relatedFiles?.length) {
258
+ console.log(` ${chalk_1.default.gray("Files:")} ${entry.relatedFiles.join(", ")}`);
259
+ }
260
+ if (entry.relatedSymbols?.length) {
261
+ console.log(` ${chalk_1.default.gray("Symbols:")} ${entry.relatedSymbols.join(", ")}`);
262
+ }
263
+ if (entry.supersedes) {
264
+ console.log(` ${chalk_1.default.gray("Supersedes:")} ${entry.supersedes}`);
265
+ }
266
+ }
267
+ //# sourceMappingURL=remember.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remember.js","sourceRoot":"","sources":["../../src/commands/remember.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ReportOptions {
2
+ /** Limit report to events from the last N days (default: all) */
3
+ days?: number;
4
+ /** Show per-query breakdown instead of aggregate summary */
5
+ verbose?: boolean;
6
+ /** Clear all usage data */
7
+ clear?: boolean;
8
+ }
9
+ export declare function runReport(rootDir: string, options?: ReportOptions): Promise<void>;
10
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAyCD,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAuOf"}
@@ -0,0 +1,243 @@
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.runReport = runReport;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const config_1 = require("../core/config");
9
+ const usage_1 = require("../storage/usage");
10
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
11
+ function pct(n, total) {
12
+ return total === 0 ? " 0%" : `${Math.round((n / total) * 100).toString().padStart(3)}%`;
13
+ }
14
+ function fmt(n) {
15
+ return n.toLocaleString();
16
+ }
17
+ function bar(value, max, width = 20) {
18
+ const filled = max === 0 ? 0 : Math.round((value / max) * width);
19
+ return "█".repeat(filled) + "░".repeat(width - filled);
20
+ }
21
+ /** Top-N word tokens from query texts, excluding stopwords. */
22
+ function topTerms(events, n = 8) {
23
+ const STOP = new Set([
24
+ "a", "an", "the", "in", "on", "at", "to", "for", "of", "and", "or",
25
+ "how", "what", "why", "when", "where", "is", "are", "was", "does",
26
+ "do", "with", "from", "that", "this", "it", "be", "has", "have",
27
+ ]);
28
+ const freq = new Map();
29
+ for (const e of events) {
30
+ if (!e.query)
31
+ continue;
32
+ const terms = e.query
33
+ .toLowerCase()
34
+ .split(/[\s\W]+/)
35
+ .filter((t) => t.length >= 3 && !STOP.has(t));
36
+ for (const t of terms)
37
+ freq.set(t, (freq.get(t) ?? 0) + 1);
38
+ }
39
+ return Array.from(freq.entries())
40
+ .sort((a, b) => b[1] - a[1])
41
+ .slice(0, n)
42
+ .map(([term, count]) => ({ term, count }));
43
+ }
44
+ // ─── Main ─────────────────────────────────────────────────────────────────────
45
+ async function runReport(rootDir, options = {}) {
46
+ const config = (0, config_1.loadConfig)(rootDir);
47
+ const storage = new usage_1.UsageStorage(config.projectId);
48
+ if (options.clear) {
49
+ storage.clear();
50
+ console.log(chalk_1.default.green("✓") + " Usage log cleared.");
51
+ return;
52
+ }
53
+ let events = storage.load();
54
+ if (events.length === 0) {
55
+ console.log(chalk_1.default.yellow("No usage data yet.") +
56
+ " Run some queries with `vemora query` or `vemora context`.");
57
+ return;
58
+ }
59
+ // ── Date filter ───────────────────────────────────────────────────────────
60
+ if (options.days && options.days > 0) {
61
+ const cutoff = Date.now() - options.days * 24 * 60 * 60 * 1000;
62
+ events = events.filter((e) => new Date(e.ts).getTime() >= cutoff);
63
+ if (events.length === 0) {
64
+ console.log(chalk_1.default.yellow(`No usage data in the last ${options.days} days.`));
65
+ return;
66
+ }
67
+ }
68
+ const total = events.length;
69
+ const firstTs = events[0].ts.slice(0, 10);
70
+ const lastTs = events[events.length - 1].ts.slice(0, 10);
71
+ // ── Aggregates ────────────────────────────────────────────────────────────
72
+ const byCommand = { query: 0, context: 0, ask: 0 };
73
+ const bySearch = {};
74
+ let totalTokensReturned = 0;
75
+ let totalSavedDedup = 0;
76
+ let totalSavedSession = 0;
77
+ let totalSavedBudget = 0;
78
+ let queriesWithDedup = 0;
79
+ let queriesWithSession = 0;
80
+ let queriesWithBudget = 0;
81
+ let totalResults = 0;
82
+ for (const e of events) {
83
+ byCommand[e.command] = (byCommand[e.command] ?? 0) + 1;
84
+ bySearch[e.searchType] = (bySearch[e.searchType] ?? 0) + 1;
85
+ totalTokensReturned += e.tokensReturned;
86
+ totalSavedDedup += e.tokensSavedDedup;
87
+ totalSavedSession += e.tokensSavedSession;
88
+ totalSavedBudget += e.tokensSavedBudget;
89
+ if (e.tokensSavedDedup > 0)
90
+ queriesWithDedup++;
91
+ if (e.tokensSavedSession > 0)
92
+ queriesWithSession++;
93
+ if (e.tokensSavedBudget > 0)
94
+ queriesWithBudget++;
95
+ totalResults += e.resultsReturned;
96
+ }
97
+ const totalSaved = totalSavedDedup + totalSavedSession + totalSavedBudget;
98
+ const totalWouldHaveSent = totalTokensReturned + totalSaved;
99
+ const savingsPct = totalWouldHaveSent === 0 ? 0 : Math.round((totalSaved / totalWouldHaveSent) * 100);
100
+ const avgTokens = Math.round(totalTokensReturned / total);
101
+ const avgResults = (totalResults / total).toFixed(1);
102
+ // ── Header ────────────────────────────────────────────────────────────────
103
+ console.log();
104
+ console.log(chalk_1.default.bold("vemora usage report"));
105
+ if (options.days) {
106
+ console.log(chalk_1.default.gray(` Last ${options.days} days · ${total} queries`));
107
+ }
108
+ else {
109
+ console.log(chalk_1.default.gray(` ${firstTs} → ${lastTs} · ${total} queries`));
110
+ }
111
+ console.log();
112
+ // ── Commands ──────────────────────────────────────────────────────────────
113
+ console.log(chalk_1.default.bold("Commands"));
114
+ const maxCmd = Math.max(...Object.values(byCommand));
115
+ for (const [cmd, count] of Object.entries(byCommand)) {
116
+ if (count === 0)
117
+ continue;
118
+ console.log(` ${chalk_1.default.cyan(cmd.padEnd(9))} ${bar(count, maxCmd, 16)} ${fmt(count).padStart(5)} ${pct(count, total)}`);
119
+ }
120
+ console.log();
121
+ // ── Search method ─────────────────────────────────────────────────────────
122
+ console.log(chalk_1.default.bold("Search method"));
123
+ const maxSearch = Math.max(...Object.values(bySearch));
124
+ for (const [type, count] of Object.entries(bySearch).sort((a, b) => b[1] - a[1])) {
125
+ console.log(` ${chalk_1.default.cyan(type.padEnd(9))} ${bar(count, maxSearch, 16)} ${fmt(count).padStart(5)} ${pct(count, total)}`);
126
+ }
127
+ console.log();
128
+ // ── Results & tokens ──────────────────────────────────────────────────────
129
+ console.log(chalk_1.default.bold("Results & tokens"));
130
+ console.log(` Avg results returned ${chalk_1.default.white(avgResults)} chunks per query`);
131
+ console.log(` Avg tokens returned ${chalk_1.default.white(fmt(avgTokens))} tokens per query`);
132
+ console.log(` Total tokens served ${chalk_1.default.white(fmt(totalTokensReturned))}`);
133
+ console.log();
134
+ // ── Token savings ─────────────────────────────────────────────────────────
135
+ console.log(chalk_1.default.bold("Token savings estimate"));
136
+ if (totalSaved === 0) {
137
+ console.log(chalk_1.default.gray(" No savings recorded yet (dedup, session filter, and budget all inactive)."));
138
+ }
139
+ else {
140
+ const row = (label, saved, queries) => {
141
+ const avg = queries === 0 ? 0 : Math.round(saved / queries);
142
+ console.log(` ${label.padEnd(22)} ${chalk_1.default.green(fmt(saved).padStart(8))} tokens` +
143
+ (queries > 0
144
+ ? chalk_1.default.gray(` (${queries} queries, ~${fmt(avg)}/query)`)
145
+ : ""));
146
+ };
147
+ row("Semantic dedup", totalSavedDedup, queriesWithDedup);
148
+ row("Session filter", totalSavedSession, queriesWithSession);
149
+ row("Budget cap", totalSavedBudget, queriesWithBudget);
150
+ console.log(" " + "─".repeat(50));
151
+ console.log(` ${"Total saved".padEnd(22)} ${chalk_1.default.bold.green(fmt(totalSaved).padStart(8))} tokens ` +
152
+ chalk_1.default.gray(`(${savingsPct}% of what would have been sent)`));
153
+ }
154
+ console.log();
155
+ // ── Top query terms ───────────────────────────────────────────────────────
156
+ const terms = topTerms(events);
157
+ if (terms.length > 0) {
158
+ console.log(chalk_1.default.bold("Most frequent query terms"));
159
+ const maxTermCount = terms[0].count;
160
+ for (const { term, count } of terms) {
161
+ console.log(` ${chalk_1.default.cyan(term.padEnd(20))} ${bar(count, maxTermCount, 16)} ${count}×`);
162
+ }
163
+ console.log();
164
+ }
165
+ // ── Latency ───────────────────────────────────────────────────────────────
166
+ const timed = events.filter((e) => e.durationMs != null);
167
+ if (timed.length > 0) {
168
+ const durations = timed.map((e) => e.durationMs).sort((a, b) => a - b);
169
+ const avgMs = Math.round(durations.reduce((s, v) => s + v, 0) / durations.length);
170
+ const p95Ms = durations[Math.floor(durations.length * 0.95)];
171
+ console.log(chalk_1.default.bold("Query latency"));
172
+ console.log(` Avg ${chalk_1.default.white(`${avgMs} ms`)}`);
173
+ console.log(` p95 ${chalk_1.default.white(`${p95Ms} ms`)}`);
174
+ console.log();
175
+ }
176
+ // ── Hot files ─────────────────────────────────────────────────────────────
177
+ const fileFreq = new Map();
178
+ for (const e of events) {
179
+ for (const f of e.topFiles ?? []) {
180
+ fileFreq.set(f, (fileFreq.get(f) ?? 0) + 1);
181
+ }
182
+ }
183
+ if (fileFreq.size > 0) {
184
+ const hotFiles = Array.from(fileFreq.entries())
185
+ .sort((a, b) => b[1] - a[1])
186
+ .slice(0, 8);
187
+ const maxFileCount = hotFiles[0][1];
188
+ console.log(chalk_1.default.bold("Most retrieved files"));
189
+ for (const [file, count] of hotFiles) {
190
+ console.log(` ${chalk_1.default.cyan(file.padEnd(40))} ${bar(count, maxFileCount, 12)} ${count}×`);
191
+ }
192
+ console.log();
193
+ }
194
+ // ── Low-signal queries ────────────────────────────────────────────────────
195
+ const zeroResults = events.filter((e) => e.resultsReturned === 0 && e.query);
196
+ const lowResults = events.filter((e) => e.resultsReturned > 0 && e.resultsReturned < 3 && e.query);
197
+ if (zeroResults.length > 0) {
198
+ console.log(chalk_1.default.bold(`Queries with no results`) + chalk_1.default.red(` (${zeroResults.length})`));
199
+ for (const e of zeroResults.slice(-8).reverse()) {
200
+ console.log(` ${chalk_1.default.gray(e.ts.slice(0, 10))} ${chalk_1.default.red("✗")} ${chalk_1.default.white(e.query)}`);
201
+ }
202
+ console.log();
203
+ }
204
+ if (lowResults.length > 0) {
205
+ console.log(chalk_1.default.bold(`Queries with few results`) + chalk_1.default.yellow(` (${lowResults.length})`));
206
+ for (const e of lowResults.slice(-8).reverse()) {
207
+ console.log(` ${chalk_1.default.gray(e.ts.slice(0, 10))} ${chalk_1.default.yellow(`${e.resultsReturned} chunk${e.resultsReturned === 1 ? "" : "s"}`)} ${chalk_1.default.white(e.query)}`);
208
+ }
209
+ console.log();
210
+ }
211
+ // ── Repeated queries ──────────────────────────────────────────────────────
212
+ const queryFreq = new Map();
213
+ for (const e of events) {
214
+ if (e.query)
215
+ queryFreq.set(e.query, (queryFreq.get(e.query) ?? 0) + 1);
216
+ }
217
+ const repeated = Array.from(queryFreq.entries())
218
+ .filter(([, n]) => n > 1)
219
+ .sort((a, b) => b[1] - a[1])
220
+ .slice(0, 6);
221
+ if (repeated.length > 0) {
222
+ console.log(chalk_1.default.bold("Repeated queries") + chalk_1.default.gray(" (possible index gaps)"));
223
+ for (const [query, count] of repeated) {
224
+ console.log(` ${chalk_1.default.yellow(`${count}×`).padEnd(6)} ${chalk_1.default.white(query)}`);
225
+ }
226
+ console.log();
227
+ }
228
+ // ── Verbose: per-query log ─────────────────────────────────────────────────
229
+ if (options.verbose) {
230
+ console.log(chalk_1.default.bold("Recent queries (last 20)"));
231
+ console.log();
232
+ const recent = events.slice(-20).reverse();
233
+ for (const e of recent) {
234
+ const saved = e.tokensSavedDedup + e.tokensSavedSession + e.tokensSavedBudget;
235
+ const savedStr = saved > 0 ? chalk_1.default.green(` −${fmt(saved)}tok`) : "";
236
+ console.log(` ${chalk_1.default.gray(e.ts.slice(0, 16))} ${chalk_1.default.cyan(e.command.padEnd(8))} ` +
237
+ `${chalk_1.default.white(fmt(e.tokensReturned).padStart(5))}tok${savedStr} ` +
238
+ chalk_1.default.gray(e.query ?? "(no query)"));
239
+ }
240
+ console.log();
241
+ }
242
+ }
243
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runStatus(rootDir: string): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AASA,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkI9D"}