exovault-mcp-server 1.0.0

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 (305) hide show
  1. package/dist/auth.d.ts +41 -0
  2. package/dist/auth.d.ts.map +1 -0
  3. package/dist/auth.js +236 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/auto-session.d.ts +39 -0
  6. package/dist/auto-session.d.ts.map +1 -0
  7. package/dist/auto-session.js +128 -0
  8. package/dist/auto-session.js.map +1 -0
  9. package/dist/buffer-persistence.d.ts +35 -0
  10. package/dist/buffer-persistence.d.ts.map +1 -0
  11. package/dist/buffer-persistence.js +110 -0
  12. package/dist/buffer-persistence.js.map +1 -0
  13. package/dist/coerce-params.d.ts +36 -0
  14. package/dist/coerce-params.d.ts.map +1 -0
  15. package/dist/coerce-params.js +120 -0
  16. package/dist/coerce-params.js.map +1 -0
  17. package/dist/crypto.d.ts +39 -0
  18. package/dist/crypto.d.ts.map +1 -0
  19. package/dist/crypto.js +119 -0
  20. package/dist/crypto.js.map +1 -0
  21. package/dist/db.d.ts +350 -0
  22. package/dist/db.d.ts.map +1 -0
  23. package/dist/db.js +866 -0
  24. package/dist/db.js.map +1 -0
  25. package/dist/embedding-config.d.ts +11 -0
  26. package/dist/embedding-config.d.ts.map +1 -0
  27. package/dist/embedding-config.js +24 -0
  28. package/dist/embedding-config.js.map +1 -0
  29. package/dist/entity-extraction.d.ts +22 -0
  30. package/dist/entity-extraction.d.ts.map +1 -0
  31. package/dist/entity-extraction.js +140 -0
  32. package/dist/entity-extraction.js.map +1 -0
  33. package/dist/episodic-headline.d.ts +6 -0
  34. package/dist/episodic-headline.d.ts.map +1 -0
  35. package/dist/episodic-headline.js +62 -0
  36. package/dist/episodic-headline.js.map +1 -0
  37. package/dist/error-sanitizer.d.ts +20 -0
  38. package/dist/error-sanitizer.d.ts.map +1 -0
  39. package/dist/error-sanitizer.js +54 -0
  40. package/dist/error-sanitizer.js.map +1 -0
  41. package/dist/extraction-budget.d.ts +39 -0
  42. package/dist/extraction-budget.d.ts.map +1 -0
  43. package/dist/extraction-budget.js +122 -0
  44. package/dist/extraction-budget.js.map +1 -0
  45. package/dist/extraction-llm.d.ts +22 -0
  46. package/dist/extraction-llm.d.ts.map +1 -0
  47. package/dist/extraction-llm.js +32 -0
  48. package/dist/extraction-llm.js.map +1 -0
  49. package/dist/extraction-prompt.d.ts +40 -0
  50. package/dist/extraction-prompt.d.ts.map +1 -0
  51. package/dist/extraction-prompt.js +176 -0
  52. package/dist/extraction-prompt.js.map +1 -0
  53. package/dist/gateway-client.d.ts +303 -0
  54. package/dist/gateway-client.d.ts.map +1 -0
  55. package/dist/gateway-client.js +285 -0
  56. package/dist/gateway-client.js.map +1 -0
  57. package/dist/gateway-init.d.ts +32 -0
  58. package/dist/gateway-init.d.ts.map +1 -0
  59. package/dist/gateway-init.js +71 -0
  60. package/dist/gateway-init.js.map +1 -0
  61. package/dist/index.d.ts +2 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +1242 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/infer-task-status.d.ts +7 -0
  66. package/dist/infer-task-status.d.ts.map +1 -0
  67. package/dist/infer-task-status.js +23 -0
  68. package/dist/infer-task-status.js.map +1 -0
  69. package/dist/normalize-agent-id.d.ts +21 -0
  70. package/dist/normalize-agent-id.d.ts.map +1 -0
  71. package/dist/normalize-agent-id.js +54 -0
  72. package/dist/normalize-agent-id.js.map +1 -0
  73. package/dist/openai.d.ts +14 -0
  74. package/dist/openai.d.ts.map +1 -0
  75. package/dist/openai.js +43 -0
  76. package/dist/openai.js.map +1 -0
  77. package/dist/rlm/actions.d.ts +31 -0
  78. package/dist/rlm/actions.d.ts.map +1 -0
  79. package/dist/rlm/actions.js +241 -0
  80. package/dist/rlm/actions.js.map +1 -0
  81. package/dist/rlm/benchmark.d.ts +2 -0
  82. package/dist/rlm/benchmark.d.ts.map +1 -0
  83. package/dist/rlm/benchmark.js +215 -0
  84. package/dist/rlm/benchmark.js.map +1 -0
  85. package/dist/rlm/execute.d.ts +13 -0
  86. package/dist/rlm/execute.d.ts.map +1 -0
  87. package/dist/rlm/execute.js +366 -0
  88. package/dist/rlm/execute.js.map +1 -0
  89. package/dist/rlm/index.d.ts +6 -0
  90. package/dist/rlm/index.d.ts.map +1 -0
  91. package/dist/rlm/index.js +147 -0
  92. package/dist/rlm/index.js.map +1 -0
  93. package/dist/rlm/profiles.d.ts +9 -0
  94. package/dist/rlm/profiles.d.ts.map +1 -0
  95. package/dist/rlm/profiles.js +46 -0
  96. package/dist/rlm/profiles.js.map +1 -0
  97. package/dist/rlm/types.d.ts +98 -0
  98. package/dist/rlm/types.d.ts.map +1 -0
  99. package/dist/rlm/types.js +6 -0
  100. package/dist/rlm/types.js.map +1 -0
  101. package/dist/rlm/verify.d.ts +13 -0
  102. package/dist/rlm/verify.d.ts.map +1 -0
  103. package/dist/rlm/verify.js +58 -0
  104. package/dist/rlm/verify.js.map +1 -0
  105. package/dist/rlm/writeback.d.ts +7 -0
  106. package/dist/rlm/writeback.d.ts.map +1 -0
  107. package/dist/rlm/writeback.js +77 -0
  108. package/dist/rlm/writeback.js.map +1 -0
  109. package/dist/scripts/backfill-memory-embeddings.d.ts +2 -0
  110. package/dist/scripts/backfill-memory-embeddings.d.ts.map +1 -0
  111. package/dist/scripts/backfill-memory-embeddings.js +153 -0
  112. package/dist/scripts/backfill-memory-embeddings.js.map +1 -0
  113. package/dist/session-buffer.d.ts +104 -0
  114. package/dist/session-buffer.d.ts.map +1 -0
  115. package/dist/session-buffer.js +466 -0
  116. package/dist/session-buffer.js.map +1 -0
  117. package/dist/session-dedup.d.ts +30 -0
  118. package/dist/session-dedup.d.ts.map +1 -0
  119. package/dist/session-dedup.js +67 -0
  120. package/dist/session-dedup.js.map +1 -0
  121. package/dist/session-flush.d.ts +81 -0
  122. package/dist/session-flush.d.ts.map +1 -0
  123. package/dist/session-flush.js +169 -0
  124. package/dist/session-flush.js.map +1 -0
  125. package/dist/session-lifecycle.d.ts +72 -0
  126. package/dist/session-lifecycle.d.ts.map +1 -0
  127. package/dist/session-lifecycle.js +247 -0
  128. package/dist/session-lifecycle.js.map +1 -0
  129. package/dist/setup.d.ts +2 -0
  130. package/dist/setup.d.ts.map +1 -0
  131. package/dist/setup.js +260 -0
  132. package/dist/setup.js.map +1 -0
  133. package/dist/stopwords.d.ts +2 -0
  134. package/dist/stopwords.d.ts.map +1 -0
  135. package/dist/stopwords.js +20 -0
  136. package/dist/stopwords.js.map +1 -0
  137. package/dist/strip-html.d.ts +5 -0
  138. package/dist/strip-html.d.ts.map +1 -0
  139. package/dist/strip-html.js +35 -0
  140. package/dist/strip-html.js.map +1 -0
  141. package/dist/task-completion-flush.d.ts +36 -0
  142. package/dist/task-completion-flush.d.ts.map +1 -0
  143. package/dist/task-completion-flush.js +97 -0
  144. package/dist/task-completion-flush.js.map +1 -0
  145. package/dist/task-lifecycle-types.d.ts +13 -0
  146. package/dist/task-lifecycle-types.d.ts.map +1 -0
  147. package/dist/task-lifecycle-types.js +12 -0
  148. package/dist/task-lifecycle-types.js.map +1 -0
  149. package/dist/task-lifecycle.d.ts +78 -0
  150. package/dist/task-lifecycle.d.ts.map +1 -0
  151. package/dist/task-lifecycle.js +256 -0
  152. package/dist/task-lifecycle.js.map +1 -0
  153. package/dist/tools/agent-messages.d.ts +26 -0
  154. package/dist/tools/agent-messages.d.ts.map +1 -0
  155. package/dist/tools/agent-messages.js +123 -0
  156. package/dist/tools/agent-messages.js.map +1 -0
  157. package/dist/tools/agent-tasks.d.ts +24 -0
  158. package/dist/tools/agent-tasks.d.ts.map +1 -0
  159. package/dist/tools/agent-tasks.js +162 -0
  160. package/dist/tools/agent-tasks.js.map +1 -0
  161. package/dist/tools/archive-memory.d.ts +2 -0
  162. package/dist/tools/archive-memory.d.ts.map +1 -0
  163. package/dist/tools/archive-memory.js +19 -0
  164. package/dist/tools/archive-memory.js.map +1 -0
  165. package/dist/tools/blind-index.d.ts +29 -0
  166. package/dist/tools/blind-index.d.ts.map +1 -0
  167. package/dist/tools/blind-index.js +53 -0
  168. package/dist/tools/blind-index.js.map +1 -0
  169. package/dist/tools/cleanup-memories.d.ts +44 -0
  170. package/dist/tools/cleanup-memories.d.ts.map +1 -0
  171. package/dist/tools/cleanup-memories.js +126 -0
  172. package/dist/tools/cleanup-memories.js.map +1 -0
  173. package/dist/tools/context-checkpoint.d.ts +28 -0
  174. package/dist/tools/context-checkpoint.d.ts.map +1 -0
  175. package/dist/tools/context-checkpoint.js +140 -0
  176. package/dist/tools/context-checkpoint.js.map +1 -0
  177. package/dist/tools/context-profiles.d.ts +67 -0
  178. package/dist/tools/context-profiles.d.ts.map +1 -0
  179. package/dist/tools/context-profiles.js +30 -0
  180. package/dist/tools/context-profiles.js.map +1 -0
  181. package/dist/tools/create-note.d.ts +2 -0
  182. package/dist/tools/create-note.d.ts.map +1 -0
  183. package/dist/tools/create-note.js +60 -0
  184. package/dist/tools/create-note.js.map +1 -0
  185. package/dist/tools/create-vault.d.ts +5 -0
  186. package/dist/tools/create-vault.d.ts.map +1 -0
  187. package/dist/tools/create-vault.js +121 -0
  188. package/dist/tools/create-vault.js.map +1 -0
  189. package/dist/tools/decrypt-helpers.d.ts +31 -0
  190. package/dist/tools/decrypt-helpers.d.ts.map +1 -0
  191. package/dist/tools/decrypt-helpers.js +33 -0
  192. package/dist/tools/decrypt-helpers.js.map +1 -0
  193. package/dist/tools/delete-note.d.ts +2 -0
  194. package/dist/tools/delete-note.d.ts.map +1 -0
  195. package/dist/tools/delete-note.js +21 -0
  196. package/dist/tools/delete-note.js.map +1 -0
  197. package/dist/tools/explore-graph.d.ts +11 -0
  198. package/dist/tools/explore-graph.d.ts.map +1 -0
  199. package/dist/tools/explore-graph.js +169 -0
  200. package/dist/tools/explore-graph.js.map +1 -0
  201. package/dist/tools/get-related-memories.d.ts +2 -0
  202. package/dist/tools/get-related-memories.d.ts.map +1 -0
  203. package/dist/tools/get-related-memories.js +59 -0
  204. package/dist/tools/get-related-memories.js.map +1 -0
  205. package/dist/tools/knowledge-links.d.ts +17 -0
  206. package/dist/tools/knowledge-links.d.ts.map +1 -0
  207. package/dist/tools/knowledge-links.js +102 -0
  208. package/dist/tools/knowledge-links.js.map +1 -0
  209. package/dist/tools/list-active-agents.d.ts +5 -0
  210. package/dist/tools/list-active-agents.d.ts.map +1 -0
  211. package/dist/tools/list-active-agents.js +15 -0
  212. package/dist/tools/list-active-agents.js.map +1 -0
  213. package/dist/tools/list-notes.d.ts +2 -0
  214. package/dist/tools/list-notes.d.ts.map +1 -0
  215. package/dist/tools/list-notes.js +19 -0
  216. package/dist/tools/list-notes.js.map +1 -0
  217. package/dist/tools/list-vaults.d.ts +2 -0
  218. package/dist/tools/list-vaults.d.ts.map +1 -0
  219. package/dist/tools/list-vaults.js +19 -0
  220. package/dist/tools/list-vaults.js.map +1 -0
  221. package/dist/tools/mmr.d.ts +18 -0
  222. package/dist/tools/mmr.d.ts.map +1 -0
  223. package/dist/tools/mmr.js +67 -0
  224. package/dist/tools/mmr.js.map +1 -0
  225. package/dist/tools/read-memories.d.ts +2 -0
  226. package/dist/tools/read-memories.d.ts.map +1 -0
  227. package/dist/tools/read-memories.js +46 -0
  228. package/dist/tools/read-memories.js.map +1 -0
  229. package/dist/tools/read-note.d.ts +2 -0
  230. package/dist/tools/read-note.d.ts.map +1 -0
  231. package/dist/tools/read-note.js +35 -0
  232. package/dist/tools/read-note.js.map +1 -0
  233. package/dist/tools/read-notes.d.ts +6 -0
  234. package/dist/tools/read-notes.d.ts.map +1 -0
  235. package/dist/tools/read-notes.js +45 -0
  236. package/dist/tools/read-notes.js.map +1 -0
  237. package/dist/tools/resolve-vault-id.d.ts +6 -0
  238. package/dist/tools/resolve-vault-id.d.ts.map +1 -0
  239. package/dist/tools/resolve-vault-id.js +7 -0
  240. package/dist/tools/resolve-vault-id.js.map +1 -0
  241. package/dist/tools/rrf.d.ts +28 -0
  242. package/dist/tools/rrf.d.ts.map +1 -0
  243. package/dist/tools/rrf.js +19 -0
  244. package/dist/tools/rrf.js.map +1 -0
  245. package/dist/tools/search-and-read.d.ts +11 -0
  246. package/dist/tools/search-and-read.d.ts.map +1 -0
  247. package/dist/tools/search-and-read.js +208 -0
  248. package/dist/tools/search-and-read.js.map +1 -0
  249. package/dist/tools/search-memories.d.ts +13 -0
  250. package/dist/tools/search-memories.d.ts.map +1 -0
  251. package/dist/tools/search-memories.js +272 -0
  252. package/dist/tools/search-memories.js.map +1 -0
  253. package/dist/tools/search-notes.d.ts +2 -0
  254. package/dist/tools/search-notes.d.ts.map +1 -0
  255. package/dist/tools/search-notes.js +94 -0
  256. package/dist/tools/search-notes.js.map +1 -0
  257. package/dist/tools/semantic-search.d.ts +7 -0
  258. package/dist/tools/semantic-search.d.ts.map +1 -0
  259. package/dist/tools/semantic-search.js +85 -0
  260. package/dist/tools/semantic-search.js.map +1 -0
  261. package/dist/tools/session-start.d.ts +24 -0
  262. package/dist/tools/session-start.d.ts.map +1 -0
  263. package/dist/tools/session-start.js +256 -0
  264. package/dist/tools/session-start.js.map +1 -0
  265. package/dist/tools/stale-tasks.d.ts +22 -0
  266. package/dist/tools/stale-tasks.d.ts.map +1 -0
  267. package/dist/tools/stale-tasks.js +39 -0
  268. package/dist/tools/stale-tasks.js.map +1 -0
  269. package/dist/tools/temporal-decay.d.ts +21 -0
  270. package/dist/tools/temporal-decay.d.ts.map +1 -0
  271. package/dist/tools/temporal-decay.js +32 -0
  272. package/dist/tools/temporal-decay.js.map +1 -0
  273. package/dist/tools/update-memory.d.ts +19 -0
  274. package/dist/tools/update-memory.d.ts.map +1 -0
  275. package/dist/tools/update-memory.js +230 -0
  276. package/dist/tools/update-memory.js.map +1 -0
  277. package/dist/tools/update-note.d.ts +2 -0
  278. package/dist/tools/update-note.d.ts.map +1 -0
  279. package/dist/tools/update-note.js +79 -0
  280. package/dist/tools/update-note.js.map +1 -0
  281. package/dist/tools/vault-instruction-template.d.ts +17 -0
  282. package/dist/tools/vault-instruction-template.d.ts.map +1 -0
  283. package/dist/tools/vault-instruction-template.js +77 -0
  284. package/dist/tools/vault-instruction-template.js.map +1 -0
  285. package/dist/tools/wiki-link-sync.d.ts +34 -0
  286. package/dist/tools/wiki-link-sync.d.ts.map +1 -0
  287. package/dist/tools/wiki-link-sync.js +132 -0
  288. package/dist/tools/wiki-link-sync.js.map +1 -0
  289. package/dist/tools/wrap-tool-handler.d.ts +8 -0
  290. package/dist/tools/wrap-tool-handler.d.ts.map +1 -0
  291. package/dist/tools/wrap-tool-handler.js +32 -0
  292. package/dist/tools/wrap-tool-handler.js.map +1 -0
  293. package/dist/tools/write-memory.d.ts +34 -0
  294. package/dist/tools/write-memory.d.ts.map +1 -0
  295. package/dist/tools/write-memory.js +359 -0
  296. package/dist/tools/write-memory.js.map +1 -0
  297. package/dist/usage.d.ts +11 -0
  298. package/dist/usage.d.ts.map +1 -0
  299. package/dist/usage.js +38 -0
  300. package/dist/usage.js.map +1 -0
  301. package/dist/wiki-link-parser.d.ts +27 -0
  302. package/dist/wiki-link-parser.d.ts.map +1 -0
  303. package/dist/wiki-link-parser.js +93 -0
  304. package/dist/wiki-link-parser.js.map +1 -0
  305. package/package.json +38 -0
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { McpContext } from "./auth.js";
2
+ export interface EmbeddingConfig {
3
+ apiKey: string;
4
+ baseUrl: string;
5
+ model: string;
6
+ }
7
+ /**
8
+ * Resolve embedding API configuration from env vars or MCP context.
9
+ * Priority: env vars > ctx.openaiApiKey > null.
10
+ */
11
+ export declare function resolveEmbeddingConfig(ctx: McpContext): EmbeddingConfig | null;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-config.d.ts","sourceRoot":"","sources":["../src/embedding-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAI5C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,UAAU,GAAG,eAAe,GAAG,IAAI,CAsB9E"}
@@ -0,0 +1,24 @@
1
+ const OPENAI_EMBEDDING_MODEL = "text-embedding-3-small";
2
+ /**
3
+ * Resolve embedding API configuration from env vars or MCP context.
4
+ * Priority: env vars > ctx.openaiApiKey > null.
5
+ */
6
+ export function resolveEmbeddingConfig(ctx) {
7
+ const envApiKey = process.env.EMBEDDING_API_KEY ??
8
+ process.env.OPENAI_API_KEY;
9
+ if (envApiKey) {
10
+ return {
11
+ apiKey: envApiKey,
12
+ baseUrl: process.env.EMBEDDING_BASE_URL ?? "https://api.openai.com/v1",
13
+ model: process.env.EMBEDDING_MODEL ?? OPENAI_EMBEDDING_MODEL,
14
+ };
15
+ }
16
+ if (ctx.openaiApiKey) {
17
+ return {
18
+ apiKey: ctx.openaiApiKey,
19
+ baseUrl: "https://api.openai.com/v1",
20
+ model: OPENAI_EMBEDDING_MODEL,
21
+ };
22
+ }
23
+ return null;
24
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-config.js","sourceRoot":"","sources":["../src/embedding-config.ts"],"names":[],"mappings":"AAEA,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAQxD;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAe;IACpD,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAE7B,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,2BAA2B;YACtE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,sBAAsB;SAC7D,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACrB,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,YAAY;YACxB,OAAO,EAAE,2BAA2B;YACpC,KAAK,EAAE,sBAAsB;SAC9B,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { McpContext } from "./auth.js";
2
+ export interface EntityExtractionConfig {
3
+ apiKey: string;
4
+ baseUrl: string;
5
+ model: string;
6
+ }
7
+ /**
8
+ * Resolve entity extraction config from env vars, server LLM config, or OpenAI key.
9
+ * Priority: env vars > ctx.llmConfig > ctx.openaiApiKey > null.
10
+ * Returns `null` if explicitly disabled or no API key is available.
11
+ */
12
+ export declare function resolveEntityExtractionConfig(ctx: McpContext): EntityExtractionConfig | null;
13
+ /**
14
+ * Parse the LLM response into a string array of entities.
15
+ * Handles markdown fences, invalid JSON, noise filtering, and caps at MAX_ENTITIES.
16
+ */
17
+ export declare function parseEntityResponse(raw: string): string[] | null;
18
+ /**
19
+ * Extract entities from memory content using a cheap LLM call.
20
+ * Returns `null` on any error, timeout, or missing config (fail-open).
21
+ */
22
+ export declare function extractEntities(ctx: McpContext, content: string, summary?: string): Promise<string[] | null>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-extraction.d.ts","sourceRoot":"","sources":["../src/entity-extraction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAQ5C,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,UAAU,GACd,sBAAsB,GAAG,IAAI,CAkC/B;AAoCD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAsBhE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CA0C1B"}
@@ -0,0 +1,140 @@
1
+ const DEFAULT_MODEL = "gpt-4o-mini";
2
+ const DEFAULT_BASE_URL = "https://api.openai.com/v1";
3
+ const MAX_INPUT_CHARS = 4000;
4
+ const TIMEOUT_MS = 10_000;
5
+ const MAX_ENTITIES = 20;
6
+ /**
7
+ * Resolve entity extraction config from env vars, server LLM config, or OpenAI key.
8
+ * Priority: env vars > ctx.llmConfig > ctx.openaiApiKey > null.
9
+ * Returns `null` if explicitly disabled or no API key is available.
10
+ */
11
+ export function resolveEntityExtractionConfig(ctx) {
12
+ if (process.env.ENTITY_EXTRACTION_ENABLED === "false") {
13
+ return null;
14
+ }
15
+ // Env vars override everything
16
+ const envKey = process.env.ENTITY_EXTRACTION_API_KEY ?? process.env.OPENAI_API_KEY;
17
+ if (envKey) {
18
+ return {
19
+ apiKey: envKey,
20
+ baseUrl: process.env.ENTITY_EXTRACTION_BASE_URL ?? DEFAULT_BASE_URL,
21
+ model: process.env.ENTITY_EXTRACTION_MODEL ?? DEFAULT_MODEL,
22
+ };
23
+ }
24
+ // Server-side LLM config (llmApiKey/llmBaseUrl/llmModelId from config.json)
25
+ if (ctx.llmConfig) {
26
+ return {
27
+ apiKey: ctx.llmConfig.apiKey,
28
+ baseUrl: ctx.llmConfig.baseUrl,
29
+ model: ctx.llmConfig.modelId,
30
+ };
31
+ }
32
+ // Fallback to openaiApiKey with defaults
33
+ if (ctx.openaiApiKey) {
34
+ return {
35
+ apiKey: ctx.openaiApiKey,
36
+ baseUrl: DEFAULT_BASE_URL,
37
+ model: DEFAULT_MODEL,
38
+ };
39
+ }
40
+ return null;
41
+ }
42
+ const SYSTEM_PROMPT = `You are a precise entity extractor for a knowledge management system. Given text, extract ONLY meaningful, reusable entities that would be useful for cross-linking related memories.
43
+
44
+ Extract these types:
45
+ - People (names, not pronouns): "John Smith", "Alice"
46
+ - Projects/Products: "ExoVault", "React", "Kubernetes"
47
+ - Technologies/Tools: "TypeScript", "PostgreSQL", "Vercel"
48
+ - Organizations: "Anthropic", "OpenAI"
49
+ - Domain concepts (specific, not generic): "RLS", "E2E encryption", "semantic search"
50
+
51
+ Do NOT extract:
52
+ - Generic words: "memory", "update", "test", "data", "system", "config"
53
+ - Ordinals or labels: "Step 1", "Test 2", "Phase 3", "Sprint 1"
54
+ - Actions or verbs: "building", "fixing", "deploying"
55
+ - Session-specific noise: "checkpoint", "smoke test", "dry run"
56
+ - Vague concepts: "stuff", "things", "issue", "problem"
57
+
58
+ Return ONLY a JSON array of strings. Example: ["TypeScript","React","John","Acme Corp"]. If no meaningful entities are found, return [].`;
59
+ // Noise patterns that should never be entities
60
+ const NOISE_PATTERNS = [
61
+ /^(step|phase|sprint|test|checkpoint|session|rule|item)\s*\d*$/i,
62
+ /^(the|a|an|this|that|it|they|we|you|i)$/i,
63
+ /^(true|false|null|undefined|none|n\/a)$/i,
64
+ /^\d+$/, // Pure numbers
65
+ ];
66
+ const MIN_ENTITY_LENGTH = 2;
67
+ const MAX_ENTITY_LENGTH = 100;
68
+ function isNoiseEntity(entity) {
69
+ if (entity.length < MIN_ENTITY_LENGTH || entity.length > MAX_ENTITY_LENGTH)
70
+ return true;
71
+ return NOISE_PATTERNS.some((p) => p.test(entity));
72
+ }
73
+ /**
74
+ * Parse the LLM response into a string array of entities.
75
+ * Handles markdown fences, invalid JSON, noise filtering, and caps at MAX_ENTITIES.
76
+ */
77
+ export function parseEntityResponse(raw) {
78
+ let cleaned = raw.trim();
79
+ // Strip markdown code fences
80
+ if (cleaned.startsWith("```")) {
81
+ cleaned = cleaned.replace(/^```(?:json)?\s*/, "").replace(/\s*```$/, "");
82
+ }
83
+ try {
84
+ const parsed = JSON.parse(cleaned);
85
+ if (!Array.isArray(parsed))
86
+ return null;
87
+ const entities = parsed
88
+ .filter((item) => typeof item === "string" && item.trim().length > 0)
89
+ .map((s) => s.trim())
90
+ .filter((s) => !isNoiseEntity(s))
91
+ .slice(0, MAX_ENTITIES);
92
+ return entities.length > 0 ? entities : null;
93
+ }
94
+ catch {
95
+ return null;
96
+ }
97
+ }
98
+ /**
99
+ * Extract entities from memory content using a cheap LLM call.
100
+ * Returns `null` on any error, timeout, or missing config (fail-open).
101
+ */
102
+ export async function extractEntities(ctx, content, summary) {
103
+ const config = resolveEntityExtractionConfig(ctx);
104
+ if (!config)
105
+ return null;
106
+ const input = summary?.trim()
107
+ ? `Summary: ${summary.trim()}\n\n${content.trim()}`
108
+ : content.trim();
109
+ const truncated = input.slice(0, MAX_INPUT_CHARS);
110
+ const baseUrl = config.baseUrl.replace(/\/$/, "");
111
+ try {
112
+ const response = await fetch(`${baseUrl}/chat/completions`, {
113
+ method: "POST",
114
+ headers: {
115
+ "Content-Type": "application/json",
116
+ Authorization: `Bearer ${config.apiKey}`,
117
+ },
118
+ body: JSON.stringify({
119
+ model: config.model,
120
+ temperature: 0,
121
+ messages: [
122
+ { role: "system", content: SYSTEM_PROMPT },
123
+ { role: "user", content: truncated },
124
+ ],
125
+ }),
126
+ signal: AbortSignal.timeout(TIMEOUT_MS),
127
+ });
128
+ if (!response.ok)
129
+ return null;
130
+ const json = (await response.json());
131
+ const text = json.choices?.[0]?.message?.content;
132
+ if (!text)
133
+ return null;
134
+ return parseEntityResponse(text);
135
+ }
136
+ catch {
137
+ // Fail open — network errors, timeouts, parse failures all return null
138
+ return null;
139
+ }
140
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-extraction.js","sourceRoot":"","sources":["../src/entity-extraction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Extracts a short headline (max 200 chars) from episodic memory content.
3
+ * Strips the "Session: Xm, agent=Y." metadata prefix and returns the
4
+ * first 1-2 substantive sentences. Pure function, no LLM calls.
5
+ */
6
+ export declare function generateEpisodicHeadline(content: string): string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"episodic-headline.d.ts","sourceRoot":"","sources":["../src/episodic-headline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkChE"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Extracts a short headline (max 200 chars) from episodic memory content.
3
+ * Strips the "Session: Xm, agent=Y." metadata prefix and returns the
4
+ * first 1-2 substantive sentences. Pure function, no LLM calls.
5
+ */
6
+ const MAX_HEADLINE_CHARS = 200;
7
+ // Matches "Session: <duration>, agent=<name>." prefix (with optional newlines after)
8
+ const SESSION_PREFIX_RE = /^Session:\s*\S+,\s*agent=\S+\.\s*/;
9
+ export function generateEpisodicHeadline(content) {
10
+ if (!content)
11
+ return "";
12
+ // Strip the metadata prefix
13
+ const body = content.replace(SESSION_PREFIX_RE, "").trim();
14
+ // If stripping left nothing, return original content
15
+ if (!body)
16
+ return content;
17
+ // For rule-based format ("Explored: ...\nOutcomes: ..."), join lines
18
+ // For LLM narrative, take first 1-2 sentences
19
+ const sentences = splitIntoSentences(body);
20
+ // Take enough sentences to fill ~200 chars
21
+ let headline = "";
22
+ for (const sentence of sentences) {
23
+ if (!sentence.trim())
24
+ continue;
25
+ const candidate = headline ? `${headline} ${sentence}` : sentence;
26
+ if (candidate.length > MAX_HEADLINE_CHARS) {
27
+ // If we have nothing yet, take this sentence (will be clipped)
28
+ if (!headline)
29
+ headline = sentence;
30
+ break;
31
+ }
32
+ headline = candidate;
33
+ }
34
+ if (!headline)
35
+ return content;
36
+ // Clip if still too long
37
+ if (headline.length > MAX_HEADLINE_CHARS) {
38
+ return headline.slice(0, MAX_HEADLINE_CHARS) + "...";
39
+ }
40
+ return headline;
41
+ }
42
+ /**
43
+ * Split text into sentences, handling:
44
+ * - Period-terminated sentences
45
+ * - Newline-separated lines (rule-based format)
46
+ * - Numbered list items
47
+ */
48
+ function splitIntoSentences(text) {
49
+ // First split by double newlines (paragraph boundaries)
50
+ const paragraphs = text.split(/\n\n+/);
51
+ const sentences = [];
52
+ for (const para of paragraphs) {
53
+ // Split by newlines (for rule-based "Explored:\nOutcomes:" format)
54
+ const lines = para.split(/\n/);
55
+ for (const line of lines) {
56
+ const trimmed = line.trim();
57
+ if (trimmed)
58
+ sentences.push(trimmed);
59
+ }
60
+ }
61
+ return sentences;
62
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"episodic-headline.js","sourceRoot":"","sources":["../src/episodic-headline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,qFAAqF;AACrF,MAAM,iBAAiB,GAAG,mCAAmC,CAAC;AAE9D,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,4BAA4B;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAE3D,qDAAqD;IACrD,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC;IAE1B,qEAAqE;IACrE,8CAA8C;IAC9C,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE3C,2CAA2C;IAC3C,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAAE,SAAS;QAC/B,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClE,IAAI,SAAS,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;YAC1C,+DAA+D;YAC/D,IAAI,CAAC,QAAQ;gBAAE,QAAQ,GAAG,QAAQ,CAAC;YACnC,MAAM;QACR,CAAC;QACD,QAAQ,GAAG,SAAS,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC;IAE9B,yBAAyB;IACzB,IAAI,QAAQ,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACzC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC;IACvD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,wDAAwD;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEvC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,mEAAmE;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO;gBAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Error sanitization utilities.
3
+ *
4
+ * These functions strip internal details (table names, column names,
5
+ * constraint names, API response bodies) from error messages before
6
+ * they reach clients or MCP tool output.
7
+ *
8
+ * Pattern: log the raw error to stderr for debugging, return a
9
+ * generic message to the caller.
10
+ */
11
+ /**
12
+ * Sanitize a Supabase/PostgreSQL error into a safe, generic message.
13
+ * The operation name (e.g. "fetch vaults") is preserved for context.
14
+ */
15
+ export declare function sanitizeDbError(operation: string, rawMessage: string): string;
16
+ /**
17
+ * Sanitize an external API error (OpenAI, embedding providers) into
18
+ * a safe message. Never includes the response body.
19
+ */
20
+ export declare function sanitizeApiError(status: number, rawBody: string): string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-sanitizer.d.ts","sourceRoot":"","sources":["../src/error-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAiB7E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAoBxE"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Error sanitization utilities.
3
+ *
4
+ * These functions strip internal details (table names, column names,
5
+ * constraint names, API response bodies) from error messages before
6
+ * they reach clients or MCP tool output.
7
+ *
8
+ * Pattern: log the raw error to stderr for debugging, return a
9
+ * generic message to the caller.
10
+ */
11
+ /**
12
+ * Sanitize a Supabase/PostgreSQL error into a safe, generic message.
13
+ * The operation name (e.g. "fetch vaults") is preserved for context.
14
+ */
15
+ export function sanitizeDbError(operation, rawMessage) {
16
+ // Log full details to stderr for debugging
17
+ process.stderr.write(`[db] ${operation} failed: ${rawMessage}\n`);
18
+ // Detect common patterns and map to user-friendly messages
19
+ if (/duplicate key/i.test(rawMessage)) {
20
+ return `Failed to ${operation}: record already exists.`;
21
+ }
22
+ if (/row-level security/i.test(rawMessage) || /permission denied/i.test(rawMessage)) {
23
+ return `Failed to ${operation}: access denied.`;
24
+ }
25
+ if (/multiple \(or no\) rows returned/i.test(rawMessage) || /PGRST116/i.test(rawMessage)) {
26
+ return `Failed to ${operation}: record not found.`;
27
+ }
28
+ // Default: generic message, never include raw details
29
+ return `Failed to ${operation}. Please try again.`;
30
+ }
31
+ /**
32
+ * Sanitize an external API error (OpenAI, embedding providers) into
33
+ * a safe message. Never includes the response body.
34
+ */
35
+ export function sanitizeApiError(status, rawBody) {
36
+ // Log full details to stderr for debugging
37
+ process.stderr.write(`[api] External API error ${status}: ${rawBody}\n`);
38
+ switch (status) {
39
+ case 401:
40
+ return "External API authentication failed.";
41
+ case 403:
42
+ return "External API access denied.";
43
+ case 429:
44
+ return "External API rate limit exceeded. Please retry later.";
45
+ case 413:
46
+ return "Request too large for external API.";
47
+ case 500:
48
+ case 502:
49
+ case 503:
50
+ return "External API service temporarily unavailable.";
51
+ default:
52
+ return "External API request failed.";
53
+ }
54
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-sanitizer.js","sourceRoot":"","sources":["../src/error-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,UAAkB;IACnE,2CAA2C;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,SAAS,YAAY,UAAU,IAAI,CAAC,CAAC;IAElE,2DAA2D;IAC3D,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACtC,OAAO,aAAa,SAAS,0BAA0B,CAAC;IAC1D,CAAC;IACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACpF,OAAO,aAAa,SAAS,kBAAkB,CAAC;IAClD,CAAC;IACD,IAAI,mCAAmC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACzF,OAAO,aAAa,SAAS,qBAAqB,CAAC;IACrD,CAAC;IAED,sDAAsD;IACtD,OAAO,aAAa,SAAS,qBAAqB,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,OAAe;IAC9D,2CAA2C;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC;IAEzE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,qCAAqC,CAAC;QAC/C,KAAK,GAAG;YACN,OAAO,6BAA6B,CAAC;QACvC,KAAK,GAAG;YACN,OAAO,uDAAuD,CAAC;QACjE,KAAK,GAAG;YACN,OAAO,qCAAqC,CAAC;QAC/C,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,+CAA+C,CAAC;QACzD;YACE,OAAO,8BAA8B,CAAC;IAC1C,CAAC;AACH,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Extraction budget — daily limits and circuit breaker for LLM extraction.
3
+ *
4
+ * Pure budget functions (easy to test) + file I/O for persistence.
5
+ * Budget resets daily. Circuit breaker pauses extraction after repeated
6
+ * empty results or errors.
7
+ *
8
+ * Budget file: ~/.exovault-mcp/extraction-budget.json
9
+ */
10
+ export interface ExtractionBudget {
11
+ date: string;
12
+ extractionCount: number;
13
+ inputTokensUsed: number;
14
+ outputTokensUsed: number;
15
+ consecutiveEmptyResults: number;
16
+ consecutiveErrors: number;
17
+ pausedUntil: string | null;
18
+ }
19
+ export declare const DAILY_MAX_EXTRACTIONS = 100;
20
+ export declare const DAILY_MAX_INPUT_TOKENS = 150000;
21
+ export declare const DAILY_MAX_OUTPUT_TOKENS = 30000;
22
+ export declare const CIRCUIT_EMPTY_MAX = 3;
23
+ export declare const CIRCUIT_ERROR_MAX = 2;
24
+ export declare const CIRCUIT_EMPTY_PAUSE_MS: number;
25
+ export declare const CIRCUIT_ERROR_PAUSE_MS: number;
26
+ export declare function createEmptyBudget(): ExtractionBudget;
27
+ export declare function isBudgetExhausted(budget: ExtractionBudget): {
28
+ exhausted: boolean;
29
+ reason?: string;
30
+ };
31
+ export declare function isCircuitBroken(budget: ExtractionBudget): {
32
+ broken: boolean;
33
+ reason?: string;
34
+ };
35
+ export declare function recordSuccess(budget: ExtractionBudget, inputTokens: number, outputTokens: number, memoryCount: number): ExtractionBudget;
36
+ export declare function recordEmpty(budget: ExtractionBudget): ExtractionBudget;
37
+ export declare function recordError(budget: ExtractionBudget): ExtractionBudget;
38
+ export declare function readBudget(): Promise<ExtractionBudget>;
39
+ export declare function writeBudget(budget: ExtractionBudget): Promise<void>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction-budget.d.ts","sourceRoot":"","sources":["../src/extraction-budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAID,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,sBAAsB,SAAU,CAAC;AAC9C,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AACrD,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AAWrD,wBAAgB,iBAAiB,IAAI,gBAAgB,CAUpD;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,GACvB;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAWzC;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,GACvB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAoBtC;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAEpB,WAAW,EAAE,MAAM,GAClB,gBAAgB,CAUlB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAUtE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAUtE;AAID,wBAAsB,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAc5D;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzE"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Extraction budget — daily limits and circuit breaker for LLM extraction.
3
+ *
4
+ * Pure budget functions (easy to test) + file I/O for persistence.
5
+ * Budget resets daily. Circuit breaker pauses extraction after repeated
6
+ * empty results or errors.
7
+ *
8
+ * Budget file: ~/.exovault-mcp/extraction-budget.json
9
+ */
10
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
11
+ import { join } from "node:path";
12
+ import { homedir } from "node:os";
13
+ // ─── Constants ────────────────────────────────────────────────────────
14
+ export const DAILY_MAX_EXTRACTIONS = 100;
15
+ export const DAILY_MAX_INPUT_TOKENS = 150_000;
16
+ export const DAILY_MAX_OUTPUT_TOKENS = 30_000;
17
+ export const CIRCUIT_EMPTY_MAX = 3;
18
+ export const CIRCUIT_ERROR_MAX = 2;
19
+ export const CIRCUIT_EMPTY_PAUSE_MS = 60 * 60 * 1000; // 60 min
20
+ export const CIRCUIT_ERROR_PAUSE_MS = 30 * 60 * 1000; // 30 min
21
+ const CONFIG_DIR = join(homedir(), ".exovault-mcp");
22
+ const BUDGET_FILE = join(CONFIG_DIR, "extraction-budget.json");
23
+ // ─── Pure functions ───────────────────────────────────────────────────
24
+ function todayString() {
25
+ return new Date().toISOString().slice(0, 10);
26
+ }
27
+ export function createEmptyBudget() {
28
+ return {
29
+ date: todayString(),
30
+ extractionCount: 0,
31
+ inputTokensUsed: 0,
32
+ outputTokensUsed: 0,
33
+ consecutiveEmptyResults: 0,
34
+ consecutiveErrors: 0,
35
+ pausedUntil: null,
36
+ };
37
+ }
38
+ export function isBudgetExhausted(budget) {
39
+ if (budget.extractionCount >= DAILY_MAX_EXTRACTIONS) {
40
+ return { exhausted: true, reason: `Daily extraction limit reached (${DAILY_MAX_EXTRACTIONS})` };
41
+ }
42
+ if (budget.inputTokensUsed >= DAILY_MAX_INPUT_TOKENS) {
43
+ return { exhausted: true, reason: `Daily input token limit reached (${DAILY_MAX_INPUT_TOKENS})` };
44
+ }
45
+ if (budget.outputTokensUsed >= DAILY_MAX_OUTPUT_TOKENS) {
46
+ return { exhausted: true, reason: `Daily output token limit reached (${DAILY_MAX_OUTPUT_TOKENS})` };
47
+ }
48
+ return { exhausted: false };
49
+ }
50
+ export function isCircuitBroken(budget) {
51
+ // Check pause timer
52
+ if (budget.pausedUntil) {
53
+ const pauseEnd = new Date(budget.pausedUntil).getTime();
54
+ if (pauseEnd > Date.now()) {
55
+ return { broken: true, reason: `Circuit paused until ${budget.pausedUntil}` };
56
+ }
57
+ }
58
+ // Check consecutive empties
59
+ if (budget.consecutiveEmptyResults >= CIRCUIT_EMPTY_MAX) {
60
+ return { broken: true, reason: `${budget.consecutiveEmptyResults} consecutive empty results` };
61
+ }
62
+ // Check consecutive errors
63
+ if (budget.consecutiveErrors >= CIRCUIT_ERROR_MAX) {
64
+ return { broken: true, reason: `${budget.consecutiveErrors} consecutive errors` };
65
+ }
66
+ return { broken: false };
67
+ }
68
+ export function recordSuccess(budget, inputTokens, outputTokens,
69
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
70
+ memoryCount) {
71
+ return {
72
+ ...budget,
73
+ extractionCount: budget.extractionCount + 1,
74
+ inputTokensUsed: budget.inputTokensUsed + inputTokens,
75
+ outputTokensUsed: budget.outputTokensUsed + outputTokens,
76
+ consecutiveEmptyResults: 0,
77
+ consecutiveErrors: 0,
78
+ pausedUntil: null,
79
+ };
80
+ }
81
+ export function recordEmpty(budget) {
82
+ const newEmptyCount = budget.consecutiveEmptyResults + 1;
83
+ return {
84
+ ...budget,
85
+ extractionCount: budget.extractionCount + 1,
86
+ consecutiveEmptyResults: newEmptyCount,
87
+ pausedUntil: newEmptyCount >= CIRCUIT_EMPTY_MAX
88
+ ? new Date(Date.now() + CIRCUIT_EMPTY_PAUSE_MS).toISOString()
89
+ : budget.pausedUntil,
90
+ };
91
+ }
92
+ export function recordError(budget) {
93
+ const newErrorCount = budget.consecutiveErrors + 1;
94
+ return {
95
+ ...budget,
96
+ // Do NOT increment extractionCount — error means no extraction happened
97
+ consecutiveErrors: newErrorCount,
98
+ pausedUntil: newErrorCount >= CIRCUIT_ERROR_MAX
99
+ ? new Date(Date.now() + CIRCUIT_ERROR_PAUSE_MS).toISOString()
100
+ : budget.pausedUntil,
101
+ };
102
+ }
103
+ // ─── File I/O ─────────────────────────────────────────────────────────
104
+ export async function readBudget() {
105
+ try {
106
+ const raw = await readFile(BUDGET_FILE, "utf-8");
107
+ const parsed = JSON.parse(raw);
108
+ // Reset if date changed (new day)
109
+ if (parsed.date !== todayString()) {
110
+ return createEmptyBudget();
111
+ }
112
+ return parsed;
113
+ }
114
+ catch {
115
+ // File missing, corrupt, or unreadable
116
+ return createEmptyBudget();
117
+ }
118
+ }
119
+ export async function writeBudget(budget) {
120
+ await mkdir(CONFIG_DIR, { recursive: true, mode: 0o700 });
121
+ await writeFile(BUDGET_FILE, JSON.stringify(budget, null, 2), { encoding: "utf-8", mode: 0o600 });
122
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraction-budget.js","sourceRoot":"","sources":["../src/extraction-budget.ts"],"names":[],"mappings":"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"}