@nxuss/lemma 1.17.0 → 1.18.1

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 (459) hide show
  1. package/bin/init.js +97 -11
  2. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  3. package/dist/cjs/cli/lemma-proxy.js +19 -11
  4. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  5. package/dist/cjs/cloud/TenantCache.d.ts.map +1 -1
  6. package/dist/cjs/cloud/TenantCache.js +0 -4
  7. package/dist/cjs/cloud/TenantCache.js.map +1 -1
  8. package/dist/cjs/cloud/identity/ApiKey.d.ts +32 -0
  9. package/dist/cjs/cloud/identity/ApiKey.d.ts.map +1 -0
  10. package/dist/cjs/cloud/identity/ApiKey.js +59 -0
  11. package/dist/cjs/cloud/identity/ApiKey.js.map +1 -0
  12. package/dist/cjs/cloud/identity/PlanPolicy.d.ts +79 -0
  13. package/dist/cjs/cloud/identity/PlanPolicy.d.ts.map +1 -0
  14. package/dist/cjs/cloud/identity/PlanPolicy.js +135 -0
  15. package/dist/cjs/cloud/identity/PlanPolicy.js.map +1 -0
  16. package/dist/cjs/cloud/identity/RateLimiter.d.ts +49 -0
  17. package/dist/cjs/cloud/identity/RateLimiter.d.ts.map +1 -0
  18. package/dist/cjs/cloud/identity/RateLimiter.js +75 -0
  19. package/dist/cjs/cloud/identity/RateLimiter.js.map +1 -0
  20. package/dist/cjs/cloud/identity/TenantResolver.d.ts +19 -0
  21. package/dist/cjs/cloud/identity/TenantResolver.d.ts.map +1 -0
  22. package/dist/cjs/cloud/identity/TenantResolver.js +40 -0
  23. package/dist/cjs/cloud/identity/TenantResolver.js.map +1 -0
  24. package/dist/cjs/cloud/identity/authenticateV2.d.ts +48 -0
  25. package/dist/cjs/cloud/identity/authenticateV2.d.ts.map +1 -0
  26. package/dist/cjs/cloud/identity/authenticateV2.js +66 -0
  27. package/dist/cjs/cloud/identity/authenticateV2.js.map +1 -0
  28. package/dist/cjs/cloud/identity/identityStore.d.ts +56 -0
  29. package/dist/cjs/cloud/identity/identityStore.d.ts.map +1 -0
  30. package/dist/cjs/cloud/identity/identityStore.js +99 -0
  31. package/dist/cjs/cloud/identity/identityStore.js.map +1 -0
  32. package/dist/cjs/cloud/identity/index.d.ts +14 -0
  33. package/dist/cjs/cloud/identity/index.d.ts.map +1 -0
  34. package/dist/cjs/cloud/identity/index.js +30 -0
  35. package/dist/cjs/cloud/identity/index.js.map +1 -0
  36. package/dist/cjs/cloud/metering/TokenCounter.d.ts +26 -0
  37. package/dist/cjs/cloud/metering/TokenCounter.d.ts.map +1 -0
  38. package/dist/cjs/cloud/metering/TokenCounter.js +80 -0
  39. package/dist/cjs/cloud/metering/TokenCounter.js.map +1 -0
  40. package/dist/cjs/cloud/metering/UsageLedger.d.ts +68 -0
  41. package/dist/cjs/cloud/metering/UsageLedger.d.ts.map +1 -0
  42. package/dist/cjs/cloud/metering/UsageLedger.js +106 -0
  43. package/dist/cjs/cloud/metering/UsageLedger.js.map +1 -0
  44. package/dist/cjs/cloud/metering/index.d.ts +12 -0
  45. package/dist/cjs/cloud/metering/index.d.ts.map +1 -0
  46. package/dist/cjs/cloud/metering/index.js +28 -0
  47. package/dist/cjs/cloud/metering/index.js.map +1 -0
  48. package/dist/cjs/cloud/scrub/StatelessScrubber.d.ts +53 -0
  49. package/dist/cjs/cloud/scrub/StatelessScrubber.d.ts.map +1 -0
  50. package/dist/cjs/cloud/scrub/StatelessScrubber.js +203 -0
  51. package/dist/cjs/cloud/scrub/StatelessScrubber.js.map +1 -0
  52. package/dist/cjs/cloud/scrub/index.d.ts +5 -0
  53. package/dist/cjs/cloud/scrub/index.d.ts.map +1 -0
  54. package/dist/cjs/cloud/scrub/index.js +21 -0
  55. package/dist/cjs/cloud/scrub/index.js.map +1 -0
  56. package/dist/cjs/cloud/store/FileBrainStore.d.ts +26 -0
  57. package/dist/cjs/cloud/store/FileBrainStore.d.ts.map +1 -0
  58. package/dist/cjs/cloud/store/FileBrainStore.js +219 -0
  59. package/dist/cjs/cloud/store/FileBrainStore.js.map +1 -0
  60. package/dist/cjs/cloud/store/PostgresBrainStore.d.ts +50 -0
  61. package/dist/cjs/cloud/store/PostgresBrainStore.d.ts.map +1 -0
  62. package/dist/cjs/cloud/store/PostgresBrainStore.js +181 -0
  63. package/dist/cjs/cloud/store/PostgresBrainStore.js.map +1 -0
  64. package/dist/cjs/cloud/store/index.d.ts +6 -0
  65. package/dist/cjs/cloud/store/index.d.ts.map +1 -0
  66. package/dist/cjs/cloud/store/index.js +22 -0
  67. package/dist/cjs/cloud/store/index.js.map +1 -0
  68. package/dist/cjs/cloud/types.d.ts +0 -4
  69. package/dist/cjs/cloud/types.d.ts.map +1 -1
  70. package/dist/cjs/cloud/types.js +1 -3
  71. package/dist/cjs/cloud/types.js.map +1 -1
  72. package/dist/cjs/cloud/v2/app.d.ts +15 -0
  73. package/dist/cjs/cloud/v2/app.d.ts.map +1 -0
  74. package/dist/cjs/cloud/v2/app.js +63 -0
  75. package/dist/cjs/cloud/v2/app.js.map +1 -0
  76. package/dist/cjs/cloud/v2/routes/index.d.ts +24 -0
  77. package/dist/cjs/cloud/v2/routes/index.d.ts.map +1 -0
  78. package/dist/cjs/cloud/v2/routes/index.js +35 -0
  79. package/dist/cjs/cloud/v2/routes/index.js.map +1 -0
  80. package/dist/cjs/cloud/v2/routes/memories.d.ts +83 -0
  81. package/dist/cjs/cloud/v2/routes/memories.d.ts.map +1 -0
  82. package/dist/cjs/cloud/v2/routes/memories.js +249 -0
  83. package/dist/cjs/cloud/v2/routes/memories.js.map +1 -0
  84. package/dist/cjs/cloud/v2/routes/recall.d.ts +33 -0
  85. package/dist/cjs/cloud/v2/routes/recall.d.ts.map +1 -0
  86. package/dist/cjs/cloud/v2/routes/recall.js +51 -0
  87. package/dist/cjs/cloud/v2/routes/recall.js.map +1 -0
  88. package/dist/cjs/cloud/v2/routes/scrub.d.ts +13 -0
  89. package/dist/cjs/cloud/v2/routes/scrub.d.ts.map +1 -0
  90. package/dist/cjs/cloud/v2/routes/scrub.js +82 -0
  91. package/dist/cjs/cloud/v2/routes/scrub.js.map +1 -0
  92. package/dist/cjs/cloud/v2/routes/usage.d.ts +18 -0
  93. package/dist/cjs/cloud/v2/routes/usage.d.ts.map +1 -0
  94. package/dist/cjs/cloud/v2/routes/usage.js +18 -0
  95. package/dist/cjs/cloud/v2/routes/usage.js.map +1 -0
  96. package/dist/cjs/cloud/v2/routes/verify.d.ts +35 -0
  97. package/dist/cjs/cloud/v2/routes/verify.d.ts.map +1 -0
  98. package/dist/cjs/cloud/v2/routes/verify.js +43 -0
  99. package/dist/cjs/cloud/v2/routes/verify.js.map +1 -0
  100. package/dist/cjs/cloud/v2/server.d.ts +27 -0
  101. package/dist/cjs/cloud/v2/server.d.ts.map +1 -0
  102. package/dist/cjs/cloud/v2/server.js +47 -0
  103. package/dist/cjs/cloud/v2/server.js.map +1 -0
  104. package/dist/cjs/contracts/api-v2.types.d.ts +103 -0
  105. package/dist/cjs/contracts/api-v2.types.d.ts.map +1 -0
  106. package/dist/cjs/contracts/api-v2.types.js +3 -0
  107. package/dist/cjs/contracts/api-v2.types.js.map +1 -0
  108. package/dist/cjs/contracts/errors.d.ts +40 -0
  109. package/dist/cjs/contracts/errors.d.ts.map +1 -0
  110. package/dist/cjs/contracts/errors.js +50 -0
  111. package/dist/cjs/contracts/errors.js.map +1 -0
  112. package/dist/cjs/contracts/evidence.d.ts +49 -0
  113. package/dist/cjs/contracts/evidence.d.ts.map +1 -0
  114. package/dist/cjs/contracts/evidence.js +12 -0
  115. package/dist/cjs/contracts/evidence.js.map +1 -0
  116. package/dist/cjs/contracts/index.d.ts +10 -0
  117. package/dist/cjs/contracts/index.d.ts.map +1 -0
  118. package/dist/cjs/contracts/index.js +26 -0
  119. package/dist/cjs/contracts/index.js.map +1 -0
  120. package/dist/cjs/contracts/store.d.ts +30 -0
  121. package/dist/cjs/contracts/store.d.ts.map +1 -0
  122. package/dist/cjs/contracts/store.js +3 -0
  123. package/dist/cjs/contracts/store.js.map +1 -0
  124. package/dist/cjs/mcp/cognitiveMap.d.ts +27 -0
  125. package/dist/cjs/mcp/cognitiveMap.d.ts.map +1 -0
  126. package/dist/cjs/mcp/cognitiveMap.js +47 -0
  127. package/dist/cjs/mcp/cognitiveMap.js.map +1 -0
  128. package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
  129. package/dist/cjs/mcp/tool-profiles.js +46 -1
  130. package/dist/cjs/mcp/tool-profiles.js.map +1 -1
  131. package/dist/cjs/mcp/toolTypes.d.ts +39 -0
  132. package/dist/cjs/mcp/toolTypes.d.ts.map +1 -0
  133. package/dist/cjs/mcp/toolTypes.js +8 -0
  134. package/dist/cjs/mcp/toolTypes.js.map +1 -0
  135. package/dist/cjs/mcp/tools/analysis.d.ts +11 -0
  136. package/dist/cjs/mcp/tools/analysis.d.ts.map +1 -0
  137. package/dist/cjs/mcp/tools/analysis.js +933 -0
  138. package/dist/cjs/mcp/tools/analysis.js.map +1 -0
  139. package/dist/cjs/mcp/tools/codenav.d.ts +9 -0
  140. package/dist/cjs/mcp/tools/codenav.d.ts.map +1 -0
  141. package/dist/cjs/mcp/tools/codenav.js +524 -0
  142. package/dist/cjs/mcp/tools/codenav.js.map +1 -0
  143. package/dist/cjs/mcp/tools/context-tools.d.ts +20 -0
  144. package/dist/cjs/mcp/tools/context-tools.d.ts.map +1 -0
  145. package/dist/cjs/mcp/tools/context-tools.js +534 -0
  146. package/dist/cjs/mcp/tools/context-tools.js.map +1 -0
  147. package/dist/cjs/mcp/tools/depgraph.d.ts +8 -0
  148. package/dist/cjs/mcp/tools/depgraph.d.ts.map +1 -0
  149. package/dist/cjs/mcp/tools/depgraph.js +321 -0
  150. package/dist/cjs/mcp/tools/depgraph.js.map +1 -0
  151. package/dist/cjs/mcp/tools/dev-utils.d.ts +11 -0
  152. package/dist/cjs/mcp/tools/dev-utils.d.ts.map +1 -0
  153. package/dist/cjs/mcp/tools/dev-utils.js +519 -0
  154. package/dist/cjs/mcp/tools/dev-utils.js.map +1 -0
  155. package/dist/cjs/mcp/tools/devtools.d.ts +9 -0
  156. package/dist/cjs/mcp/tools/devtools.d.ts.map +1 -0
  157. package/dist/cjs/mcp/tools/devtools.js +445 -0
  158. package/dist/cjs/mcp/tools/devtools.js.map +1 -0
  159. package/dist/cjs/mcp/tools/memory.d.ts +10 -0
  160. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -0
  161. package/dist/cjs/mcp/tools/memory.js +539 -0
  162. package/dist/cjs/mcp/tools/memory.js.map +1 -0
  163. package/dist/cjs/mcp/tools/misc.d.ts +10 -0
  164. package/dist/cjs/mcp/tools/misc.d.ts.map +1 -0
  165. package/dist/cjs/mcp/tools/misc.js +423 -0
  166. package/dist/cjs/mcp/tools/misc.js.map +1 -0
  167. package/dist/cjs/mcp/tools/refactor.d.ts +8 -0
  168. package/dist/cjs/mcp/tools/refactor.d.ts.map +1 -0
  169. package/dist/cjs/mcp/tools/refactor.js +335 -0
  170. package/dist/cjs/mcp/tools/refactor.js.map +1 -0
  171. package/dist/cjs/mcp/tools/review.d.ts +10 -0
  172. package/dist/cjs/mcp/tools/review.d.ts.map +1 -0
  173. package/dist/cjs/mcp/tools/review.js +283 -0
  174. package/dist/cjs/mcp/tools/review.js.map +1 -0
  175. package/dist/cjs/mcp/tools/squeeze-cache.d.ts +14 -0
  176. package/dist/cjs/mcp/tools/squeeze-cache.d.ts.map +1 -0
  177. package/dist/cjs/mcp/tools/squeeze-cache.js +416 -0
  178. package/dist/cjs/mcp/tools/squeeze-cache.js.map +1 -0
  179. package/dist/cjs/mcp/tools/text-ops.d.ts +14 -0
  180. package/dist/cjs/mcp/tools/text-ops.d.ts.map +1 -0
  181. package/dist/cjs/mcp/tools/text-ops.js +155 -0
  182. package/dist/cjs/mcp/tools/text-ops.js.map +1 -0
  183. package/dist/cjs/mcp/tools/workspace.d.ts +10 -0
  184. package/dist/cjs/mcp/tools/workspace.d.ts.map +1 -0
  185. package/dist/cjs/mcp/tools/workspace.js +663 -0
  186. package/dist/cjs/mcp/tools/workspace.js.map +1 -0
  187. package/dist/cjs/mcp/tools.d.ts +2 -0
  188. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  189. package/dist/cjs/mcp/tools.js +605 -6348
  190. package/dist/cjs/mcp/tools.js.map +1 -1
  191. package/dist/cjs/mcp/utils.d.ts +33 -0
  192. package/dist/cjs/mcp/utils.d.ts.map +1 -1
  193. package/dist/cjs/mcp/utils.js +96 -0
  194. package/dist/cjs/mcp/utils.js.map +1 -1
  195. package/dist/cjs/mcp/workspaceShared.d.ts +19 -0
  196. package/dist/cjs/mcp/workspaceShared.d.ts.map +1 -0
  197. package/dist/cjs/mcp/workspaceShared.js +101 -0
  198. package/dist/cjs/mcp/workspaceShared.js.map +1 -0
  199. package/dist/cjs/subconscious/TheBrainV2.d.ts +43 -7
  200. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  201. package/dist/cjs/subconscious/TheBrainV2.js +86 -57
  202. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  203. package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts +16 -0
  204. package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts.map +1 -0
  205. package/dist/cjs/subconscious/freshness/LocalFsResolver.js +74 -0
  206. package/dist/cjs/subconscious/freshness/LocalFsResolver.js.map +1 -0
  207. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.d.ts +23 -0
  208. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.d.ts.map +1 -0
  209. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.js +24 -0
  210. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.js.map +1 -0
  211. package/dist/cjs/subconscious/freshness/index.d.ts +10 -0
  212. package/dist/cjs/subconscious/freshness/index.d.ts.map +1 -0
  213. package/dist/cjs/subconscious/freshness/index.js +26 -0
  214. package/dist/cjs/subconscious/freshness/index.js.map +1 -0
  215. package/dist/cjs/utils/ProjectIdentity.d.ts +12 -0
  216. package/dist/cjs/utils/ProjectIdentity.d.ts.map +1 -0
  217. package/dist/cjs/utils/ProjectIdentity.js +44 -0
  218. package/dist/cjs/utils/ProjectIdentity.js.map +1 -0
  219. package/dist/cjs/utils/PromptPatternCache.d.ts.map +1 -1
  220. package/dist/cjs/utils/PromptPatternCache.js +12 -2
  221. package/dist/cjs/utils/PromptPatternCache.js.map +1 -1
  222. package/dist/cjs/utils/RepeatGuard.d.ts.map +1 -1
  223. package/dist/cjs/utils/RepeatGuard.js +10 -2
  224. package/dist/cjs/utils/RepeatGuard.js.map +1 -1
  225. package/dist/cjs/utils/StateHashCache.d.ts +5 -0
  226. package/dist/cjs/utils/StateHashCache.d.ts.map +1 -1
  227. package/dist/cjs/utils/StateHashCache.js +40 -16
  228. package/dist/cjs/utils/StateHashCache.js.map +1 -1
  229. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  230. package/dist/esm/cli/lemma-proxy.js +19 -11
  231. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  232. package/dist/esm/cloud/TenantCache.d.ts.map +1 -1
  233. package/dist/esm/cloud/TenantCache.js +0 -4
  234. package/dist/esm/cloud/TenantCache.js.map +1 -1
  235. package/dist/esm/cloud/identity/ApiKey.d.ts +32 -0
  236. package/dist/esm/cloud/identity/ApiKey.d.ts.map +1 -0
  237. package/dist/esm/cloud/identity/ApiKey.js +49 -0
  238. package/dist/esm/cloud/identity/ApiKey.js.map +1 -0
  239. package/dist/esm/cloud/identity/PlanPolicy.d.ts +79 -0
  240. package/dist/esm/cloud/identity/PlanPolicy.d.ts.map +1 -0
  241. package/dist/esm/cloud/identity/PlanPolicy.js +129 -0
  242. package/dist/esm/cloud/identity/PlanPolicy.js.map +1 -0
  243. package/dist/esm/cloud/identity/RateLimiter.d.ts +49 -0
  244. package/dist/esm/cloud/identity/RateLimiter.d.ts.map +1 -0
  245. package/dist/esm/cloud/identity/RateLimiter.js +69 -0
  246. package/dist/esm/cloud/identity/RateLimiter.js.map +1 -0
  247. package/dist/esm/cloud/identity/TenantResolver.d.ts +19 -0
  248. package/dist/esm/cloud/identity/TenantResolver.d.ts.map +1 -0
  249. package/dist/esm/cloud/identity/TenantResolver.js +36 -0
  250. package/dist/esm/cloud/identity/TenantResolver.js.map +1 -0
  251. package/dist/esm/cloud/identity/authenticateV2.d.ts +48 -0
  252. package/dist/esm/cloud/identity/authenticateV2.d.ts.map +1 -0
  253. package/dist/esm/cloud/identity/authenticateV2.js +62 -0
  254. package/dist/esm/cloud/identity/authenticateV2.js.map +1 -0
  255. package/dist/esm/cloud/identity/identityStore.d.ts +56 -0
  256. package/dist/esm/cloud/identity/identityStore.d.ts.map +1 -0
  257. package/dist/esm/cloud/identity/identityStore.js +94 -0
  258. package/dist/esm/cloud/identity/identityStore.js.map +1 -0
  259. package/dist/esm/cloud/identity/index.d.ts +14 -0
  260. package/dist/esm/cloud/identity/index.d.ts.map +1 -0
  261. package/dist/esm/cloud/identity/index.js +14 -0
  262. package/dist/esm/cloud/identity/index.js.map +1 -0
  263. package/dist/esm/cloud/metering/TokenCounter.d.ts +26 -0
  264. package/dist/esm/cloud/metering/TokenCounter.d.ts.map +1 -0
  265. package/dist/esm/cloud/metering/TokenCounter.js +76 -0
  266. package/dist/esm/cloud/metering/TokenCounter.js.map +1 -0
  267. package/dist/esm/cloud/metering/UsageLedger.d.ts +68 -0
  268. package/dist/esm/cloud/metering/UsageLedger.d.ts.map +1 -0
  269. package/dist/esm/cloud/metering/UsageLedger.js +98 -0
  270. package/dist/esm/cloud/metering/UsageLedger.js.map +1 -0
  271. package/dist/esm/cloud/metering/index.d.ts +12 -0
  272. package/dist/esm/cloud/metering/index.d.ts.map +1 -0
  273. package/dist/esm/cloud/metering/index.js +12 -0
  274. package/dist/esm/cloud/metering/index.js.map +1 -0
  275. package/dist/esm/cloud/scrub/StatelessScrubber.d.ts +53 -0
  276. package/dist/esm/cloud/scrub/StatelessScrubber.d.ts.map +1 -0
  277. package/dist/esm/cloud/scrub/StatelessScrubber.js +199 -0
  278. package/dist/esm/cloud/scrub/StatelessScrubber.js.map +1 -0
  279. package/dist/esm/cloud/scrub/index.d.ts +5 -0
  280. package/dist/esm/cloud/scrub/index.d.ts.map +1 -0
  281. package/dist/esm/cloud/scrub/index.js +5 -0
  282. package/dist/esm/cloud/scrub/index.js.map +1 -0
  283. package/dist/esm/cloud/store/FileBrainStore.d.ts +26 -0
  284. package/dist/esm/cloud/store/FileBrainStore.d.ts.map +1 -0
  285. package/dist/esm/cloud/store/FileBrainStore.js +212 -0
  286. package/dist/esm/cloud/store/FileBrainStore.js.map +1 -0
  287. package/dist/esm/cloud/store/PostgresBrainStore.d.ts +50 -0
  288. package/dist/esm/cloud/store/PostgresBrainStore.d.ts.map +1 -0
  289. package/dist/esm/cloud/store/PostgresBrainStore.js +176 -0
  290. package/dist/esm/cloud/store/PostgresBrainStore.js.map +1 -0
  291. package/dist/esm/cloud/store/index.d.ts +6 -0
  292. package/dist/esm/cloud/store/index.d.ts.map +1 -0
  293. package/dist/esm/cloud/store/index.js +6 -0
  294. package/dist/esm/cloud/store/index.js.map +1 -0
  295. package/dist/esm/cloud/types.d.ts +0 -4
  296. package/dist/esm/cloud/types.d.ts.map +1 -1
  297. package/dist/esm/cloud/types.js +0 -2
  298. package/dist/esm/cloud/types.js.map +1 -1
  299. package/dist/esm/cloud/v2/app.d.ts +15 -0
  300. package/dist/esm/cloud/v2/app.d.ts.map +1 -0
  301. package/dist/esm/cloud/v2/app.js +57 -0
  302. package/dist/esm/cloud/v2/app.js.map +1 -0
  303. package/dist/esm/cloud/v2/routes/index.d.ts +24 -0
  304. package/dist/esm/cloud/v2/routes/index.d.ts.map +1 -0
  305. package/dist/esm/cloud/v2/routes/index.js +32 -0
  306. package/dist/esm/cloud/v2/routes/index.js.map +1 -0
  307. package/dist/esm/cloud/v2/routes/memories.d.ts +83 -0
  308. package/dist/esm/cloud/v2/routes/memories.d.ts.map +1 -0
  309. package/dist/esm/cloud/v2/routes/memories.js +238 -0
  310. package/dist/esm/cloud/v2/routes/memories.js.map +1 -0
  311. package/dist/esm/cloud/v2/routes/recall.d.ts +33 -0
  312. package/dist/esm/cloud/v2/routes/recall.d.ts.map +1 -0
  313. package/dist/esm/cloud/v2/routes/recall.js +47 -0
  314. package/dist/esm/cloud/v2/routes/recall.js.map +1 -0
  315. package/dist/esm/cloud/v2/routes/scrub.d.ts +13 -0
  316. package/dist/esm/cloud/v2/routes/scrub.d.ts.map +1 -0
  317. package/dist/esm/cloud/v2/routes/scrub.js +79 -0
  318. package/dist/esm/cloud/v2/routes/scrub.js.map +1 -0
  319. package/dist/esm/cloud/v2/routes/usage.d.ts +18 -0
  320. package/dist/esm/cloud/v2/routes/usage.d.ts.map +1 -0
  321. package/dist/esm/cloud/v2/routes/usage.js +15 -0
  322. package/dist/esm/cloud/v2/routes/usage.js.map +1 -0
  323. package/dist/esm/cloud/v2/routes/verify.d.ts +35 -0
  324. package/dist/esm/cloud/v2/routes/verify.d.ts.map +1 -0
  325. package/dist/esm/cloud/v2/routes/verify.js +39 -0
  326. package/dist/esm/cloud/v2/routes/verify.js.map +1 -0
  327. package/dist/esm/cloud/v2/server.d.ts +27 -0
  328. package/dist/esm/cloud/v2/server.d.ts.map +1 -0
  329. package/dist/esm/cloud/v2/server.js +44 -0
  330. package/dist/esm/cloud/v2/server.js.map +1 -0
  331. package/dist/esm/contracts/api-v2.types.d.ts +103 -0
  332. package/dist/esm/contracts/api-v2.types.d.ts.map +1 -0
  333. package/dist/esm/contracts/api-v2.types.js +2 -0
  334. package/dist/esm/contracts/api-v2.types.js.map +1 -0
  335. package/dist/esm/contracts/errors.d.ts +40 -0
  336. package/dist/esm/contracts/errors.d.ts.map +1 -0
  337. package/dist/esm/contracts/errors.js +45 -0
  338. package/dist/esm/contracts/errors.js.map +1 -0
  339. package/dist/esm/contracts/evidence.d.ts +49 -0
  340. package/dist/esm/contracts/evidence.d.ts.map +1 -0
  341. package/dist/esm/contracts/evidence.js +11 -0
  342. package/dist/esm/contracts/evidence.js.map +1 -0
  343. package/dist/esm/contracts/index.d.ts +10 -0
  344. package/dist/esm/contracts/index.d.ts.map +1 -0
  345. package/dist/esm/contracts/index.js +10 -0
  346. package/dist/esm/contracts/index.js.map +1 -0
  347. package/dist/esm/contracts/store.d.ts +30 -0
  348. package/dist/esm/contracts/store.d.ts.map +1 -0
  349. package/dist/esm/contracts/store.js +2 -0
  350. package/dist/esm/contracts/store.js.map +1 -0
  351. package/dist/esm/mcp/cognitiveMap.d.ts +27 -0
  352. package/dist/esm/mcp/cognitiveMap.d.ts.map +1 -0
  353. package/dist/esm/mcp/cognitiveMap.js +40 -0
  354. package/dist/esm/mcp/cognitiveMap.js.map +1 -0
  355. package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
  356. package/dist/esm/mcp/tool-profiles.js +46 -1
  357. package/dist/esm/mcp/tool-profiles.js.map +1 -1
  358. package/dist/esm/mcp/toolTypes.d.ts +39 -0
  359. package/dist/esm/mcp/toolTypes.d.ts.map +1 -0
  360. package/dist/esm/mcp/toolTypes.js +7 -0
  361. package/dist/esm/mcp/toolTypes.js.map +1 -0
  362. package/dist/esm/mcp/tools/analysis.d.ts +11 -0
  363. package/dist/esm/mcp/tools/analysis.d.ts.map +1 -0
  364. package/dist/esm/mcp/tools/analysis.js +894 -0
  365. package/dist/esm/mcp/tools/analysis.js.map +1 -0
  366. package/dist/esm/mcp/tools/codenav.d.ts +9 -0
  367. package/dist/esm/mcp/tools/codenav.d.ts.map +1 -0
  368. package/dist/esm/mcp/tools/codenav.js +485 -0
  369. package/dist/esm/mcp/tools/codenav.js.map +1 -0
  370. package/dist/esm/mcp/tools/context-tools.d.ts +20 -0
  371. package/dist/esm/mcp/tools/context-tools.d.ts.map +1 -0
  372. package/dist/esm/mcp/tools/context-tools.js +494 -0
  373. package/dist/esm/mcp/tools/context-tools.js.map +1 -0
  374. package/dist/esm/mcp/tools/depgraph.d.ts +8 -0
  375. package/dist/esm/mcp/tools/depgraph.d.ts.map +1 -0
  376. package/dist/esm/mcp/tools/depgraph.js +315 -0
  377. package/dist/esm/mcp/tools/depgraph.js.map +1 -0
  378. package/dist/esm/mcp/tools/dev-utils.d.ts +11 -0
  379. package/dist/esm/mcp/tools/dev-utils.d.ts.map +1 -0
  380. package/dist/esm/mcp/tools/dev-utils.js +516 -0
  381. package/dist/esm/mcp/tools/dev-utils.js.map +1 -0
  382. package/dist/esm/mcp/tools/devtools.d.ts +9 -0
  383. package/dist/esm/mcp/tools/devtools.d.ts.map +1 -0
  384. package/dist/esm/mcp/tools/devtools.js +406 -0
  385. package/dist/esm/mcp/tools/devtools.js.map +1 -0
  386. package/dist/esm/mcp/tools/memory.d.ts +10 -0
  387. package/dist/esm/mcp/tools/memory.d.ts.map +1 -0
  388. package/dist/esm/mcp/tools/memory.js +533 -0
  389. package/dist/esm/mcp/tools/memory.js.map +1 -0
  390. package/dist/esm/mcp/tools/misc.d.ts +10 -0
  391. package/dist/esm/mcp/tools/misc.d.ts.map +1 -0
  392. package/dist/esm/mcp/tools/misc.js +417 -0
  393. package/dist/esm/mcp/tools/misc.js.map +1 -0
  394. package/dist/esm/mcp/tools/refactor.d.ts +8 -0
  395. package/dist/esm/mcp/tools/refactor.d.ts.map +1 -0
  396. package/dist/esm/mcp/tools/refactor.js +296 -0
  397. package/dist/esm/mcp/tools/refactor.js.map +1 -0
  398. package/dist/esm/mcp/tools/review.d.ts +10 -0
  399. package/dist/esm/mcp/tools/review.d.ts.map +1 -0
  400. package/dist/esm/mcp/tools/review.js +277 -0
  401. package/dist/esm/mcp/tools/review.js.map +1 -0
  402. package/dist/esm/mcp/tools/squeeze-cache.d.ts +14 -0
  403. package/dist/esm/mcp/tools/squeeze-cache.d.ts.map +1 -0
  404. package/dist/esm/mcp/tools/squeeze-cache.js +380 -0
  405. package/dist/esm/mcp/tools/squeeze-cache.js.map +1 -0
  406. package/dist/esm/mcp/tools/text-ops.d.ts +14 -0
  407. package/dist/esm/mcp/tools/text-ops.d.ts.map +1 -0
  408. package/dist/esm/mcp/tools/text-ops.js +152 -0
  409. package/dist/esm/mcp/tools/text-ops.js.map +1 -0
  410. package/dist/esm/mcp/tools/workspace.d.ts +10 -0
  411. package/dist/esm/mcp/tools/workspace.d.ts.map +1 -0
  412. package/dist/esm/mcp/tools/workspace.js +657 -0
  413. package/dist/esm/mcp/tools/workspace.js.map +1 -0
  414. package/dist/esm/mcp/tools.d.ts +2 -0
  415. package/dist/esm/mcp/tools.d.ts.map +1 -1
  416. package/dist/esm/mcp/tools.js +608 -6352
  417. package/dist/esm/mcp/tools.js.map +1 -1
  418. package/dist/esm/mcp/utils.d.ts +33 -0
  419. package/dist/esm/mcp/utils.d.ts.map +1 -1
  420. package/dist/esm/mcp/utils.js +92 -0
  421. package/dist/esm/mcp/utils.js.map +1 -1
  422. package/dist/esm/mcp/workspaceShared.d.ts +19 -0
  423. package/dist/esm/mcp/workspaceShared.d.ts.map +1 -0
  424. package/dist/esm/mcp/workspaceShared.js +93 -0
  425. package/dist/esm/mcp/workspaceShared.js.map +1 -0
  426. package/dist/esm/subconscious/TheBrainV2.d.ts +43 -7
  427. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  428. package/dist/esm/subconscious/TheBrainV2.js +86 -57
  429. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  430. package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts +16 -0
  431. package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts.map +1 -0
  432. package/dist/esm/subconscious/freshness/LocalFsResolver.js +67 -0
  433. package/dist/esm/subconscious/freshness/LocalFsResolver.js.map +1 -0
  434. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.d.ts +23 -0
  435. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.d.ts.map +1 -0
  436. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.js +20 -0
  437. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.js.map +1 -0
  438. package/dist/esm/subconscious/freshness/index.d.ts +10 -0
  439. package/dist/esm/subconscious/freshness/index.d.ts.map +1 -0
  440. package/dist/esm/subconscious/freshness/index.js +10 -0
  441. package/dist/esm/subconscious/freshness/index.js.map +1 -0
  442. package/dist/esm/utils/ProjectIdentity.d.ts +12 -0
  443. package/dist/esm/utils/ProjectIdentity.d.ts.map +1 -0
  444. package/dist/esm/utils/ProjectIdentity.js +37 -0
  445. package/dist/esm/utils/ProjectIdentity.js.map +1 -0
  446. package/dist/esm/utils/PromptPatternCache.d.ts.map +1 -1
  447. package/dist/esm/utils/PromptPatternCache.js +12 -2
  448. package/dist/esm/utils/PromptPatternCache.js.map +1 -1
  449. package/dist/esm/utils/RepeatGuard.d.ts.map +1 -1
  450. package/dist/esm/utils/RepeatGuard.js +10 -2
  451. package/dist/esm/utils/RepeatGuard.js.map +1 -1
  452. package/dist/esm/utils/StateHashCache.d.ts +5 -0
  453. package/dist/esm/utils/StateHashCache.d.ts.map +1 -1
  454. package/dist/esm/utils/StateHashCache.js +40 -16
  455. package/dist/esm/utils/StateHashCache.js.map +1 -1
  456. package/package.json +1 -1
  457. package/sdks/crewai/README.md +25 -0
  458. package/sdks/crewai/dist/index.d.ts +0 -130
  459. package/sdks/crewai/dist/index.js +0 -308
@@ -0,0 +1,16 @@
1
+ import type { EvidenceResolver } from '../../contracts/evidence.js';
2
+ export declare class LocalFsResolver implements EvidenceResolver {
3
+ readonly lane = "A";
4
+ private rootDir;
5
+ private hashCache;
6
+ constructor(rootDir?: string);
7
+ /** Resolve a client/relative path the same way the pre-refactor Brain did: against the root. */
8
+ private resolvePath;
9
+ hashFile(pathStr: string): string | null;
10
+ hashSymbol(pathStr: string, symbolName: string): {
11
+ raw: string;
12
+ normalized: string;
13
+ } | null;
14
+ }
15
+ export default LocalFsResolver;
16
+ //# sourceMappingURL=LocalFsResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalFsResolver.d.ts","sourceRoot":"","sources":["../../../../src/subconscious/freshness/LocalFsResolver.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,QAAQ,CAAC,IAAI,OAAO;IACpB,OAAO,CAAC,OAAO,CAAS;IAMxB,OAAO,CAAC,SAAS,CAAqC;gBAE1C,OAAO,GAAE,MAAsB;IAI3C,gGAAgG;IAChG,OAAO,CAAC,WAAW;IAInB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBxC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAY5F;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Lemma API v2 — LocalFsResolver (Lane A)
3
+ *
4
+ * Reads the actual local filesystem the way the current MCP brain does (byte for
5
+ * byte): whole files are sha256'd over their utf8 content ('MISSING' when
6
+ * unreadable), and symbols are hashed through currentSymbolHashPair's raw +
7
+ * normalized (comment/whitespace-stripped) pair. This is the local MCP path — it
8
+ * never returns `null`, so the verifier's fail-closed branch is never tripped and
9
+ * local behaviour is unchanged from the pre-refactor code.
10
+ *
11
+ * This is the single hashing implementation shared by every local freshness
12
+ * consumer (TheBrainV2's symbol/claim tracking AND StateHashCache) — there is no
13
+ * second sha256-over-file implementation anywhere else. Keep it that way: a second
14
+ * one is how the two engines drift out of sync again.
15
+ */
16
+ import fs from 'fs';
17
+ import path from 'path';
18
+ import crypto from 'crypto';
19
+ import { getSymbolSurgicalContext, normalizeForFreshness } from '../../utils/SymbolSurgicalContext.js';
20
+ export class LocalFsResolver {
21
+ constructor(rootDir = process.cwd()) {
22
+ this.lane = 'A';
23
+ // Memoized by (mtimeMs, size) so an unchanged file isn't re-read+re-hashed on every
24
+ // lookup. This is a performance shortcut, not a weaker guarantee: any real content
25
+ // change updates mtime (every editor/git/fs op does), so a cache hit still requires
26
+ // the file to be byte-identical to what was last hashed — same fail-closed semantics,
27
+ // just skipping the read when the OS already told us nothing moved.
28
+ this.hashCache = new Map();
29
+ this.rootDir = rootDir;
30
+ }
31
+ /** Resolve a client/relative path the same way the pre-refactor Brain did: against the root. */
32
+ resolvePath(p) {
33
+ return path.isAbsolute(p) ? p : path.resolve(this.rootDir, p);
34
+ }
35
+ hashFile(pathStr) {
36
+ const abs = this.resolvePath(pathStr);
37
+ try {
38
+ const stat = fs.statSync(abs);
39
+ const cached = this.hashCache.get(abs);
40
+ if (cached && cached.mtimeMs === stat.mtimeMs && cached.size === stat.size) {
41
+ return cached.hash;
42
+ }
43
+ const hash = crypto.createHash('sha256').update(fs.readFileSync(abs, 'utf8')).digest('hex');
44
+ this.hashCache.set(abs, { mtimeMs: stat.mtimeMs, size: stat.size, hash });
45
+ return hash;
46
+ }
47
+ catch {
48
+ this.hashCache.delete(abs);
49
+ return 'MISSING';
50
+ }
51
+ }
52
+ hashSymbol(pathStr, symbolName) {
53
+ const abs = this.resolvePath(pathStr);
54
+ try {
55
+ const ctx = getSymbolSurgicalContext(path.dirname(abs), path.basename(abs), symbolName);
56
+ return {
57
+ raw: crypto.createHash('sha256').update(ctx.implementation).digest('hex'),
58
+ normalized: crypto.createHash('sha256').update(normalizeForFreshness(ctx.implementation)).digest('hex'),
59
+ };
60
+ }
61
+ catch {
62
+ return { raw: 'MISSING', normalized: 'MISSING' };
63
+ }
64
+ }
65
+ }
66
+ export default LocalFsResolver;
67
+ //# sourceMappingURL=LocalFsResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalFsResolver.js","sourceRoot":"","sources":["../../../../src/subconscious/freshness/LocalFsResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAKpG,MAAM,OAAO,eAAe;IAU1B,YAAY,UAAkB,OAAO,CAAC,GAAG,EAAE;QATlC,SAAI,GAAG,GAAG,CAAC;QAEpB,oFAAoF;QACpF,mFAAmF;QACnF,oFAAoF;QACpF,sFAAsF;QACtF,oEAAoE;QAC5D,cAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;QAGpD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,gGAAgG;IACxF,WAAW,CAAC,CAAS;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,QAAQ,CAAC,OAAe;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3E,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5F,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,UAAU,CAAC,OAAe,EAAE,UAAkB;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;YACxF,OAAO;gBACL,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACzE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aACxG,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Lemma API v2 — SuppliedEvidenceResolver (Lane A)
3
+ *
4
+ * Resolves evidence from a client-supplied `currentEvidence` mapping (the cloud
5
+ * path — the server has no client filesystem). **Fail-closed**: a tracked path
6
+ * the client omitted resolves to `null`, which the verifier maps to `unverified`,
7
+ * never `fresh`. Keys are matched exactly as the client supplied them — a stored
8
+ * hash (from `store(..., {evidence})`) and the current evidence share the same
9
+ * path convention, so no root/resolution happens here.
10
+ */
11
+ import type { Evidence, EvidenceResolver } from '../../contracts/evidence.js';
12
+ export declare class SuppliedEvidenceResolver implements EvidenceResolver {
13
+ readonly lane = "A";
14
+ private currentEvidence;
15
+ constructor(currentEvidence?: Evidence);
16
+ hashFile(path: string): string | null;
17
+ hashSymbol(path: string, symbolName: string): {
18
+ raw: string;
19
+ normalized: string;
20
+ } | null;
21
+ }
22
+ export default SuppliedEvidenceResolver;
23
+ //# sourceMappingURL=SuppliedEvidenceResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SuppliedEvidenceResolver.d.ts","sourceRoot":"","sources":["../../../../src/subconscious/freshness/SuppliedEvidenceResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE3E,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,QAAQ,CAAC,IAAI,OAAO;IACpB,OAAO,CAAC,eAAe,CAAW;gBAEtB,eAAe,GAAE,QAA4D;IAIzF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKrC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAOzF;AAED,eAAe,wBAAwB,CAAC"}
@@ -0,0 +1,20 @@
1
+ export class SuppliedEvidenceResolver {
2
+ constructor(currentEvidence = { files: {}, symbols: {}, symbolsNormalized: {} }) {
3
+ this.lane = 'A';
4
+ this.currentEvidence = currentEvidence;
5
+ }
6
+ hashFile(path) {
7
+ const h = this.currentEvidence.files?.[path];
8
+ return h === undefined ? null : h;
9
+ }
10
+ hashSymbol(path, symbolName) {
11
+ const key = `${path}::${symbolName}`;
12
+ const raw = this.currentEvidence.symbols?.[key];
13
+ if (raw === undefined)
14
+ return null;
15
+ const normalized = this.currentEvidence.symbolsNormalized?.[key];
16
+ return { raw, normalized: normalized ?? 'MISSING' };
17
+ }
18
+ }
19
+ export default SuppliedEvidenceResolver;
20
+ //# sourceMappingURL=SuppliedEvidenceResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SuppliedEvidenceResolver.js","sourceRoot":"","sources":["../../../../src/subconscious/freshness/SuppliedEvidenceResolver.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,wBAAwB;IAInC,YAAY,kBAA4B,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE;QAHhF,SAAI,GAAG,GAAG,CAAC;QAIlB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,UAAkB;QACzC,MAAM,GAAG,GAAG,GAAG,IAAI,KAAK,UAAU,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,IAAI,SAAS,EAAE,CAAC;IACtD,CAAC;CACF;AAED,eAAe,wBAAwB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Lemma API v2 — freshness resolvers (Lane A stub)
3
+ *
4
+ * Origin of the interface contract: src/contracts/evidence.ts (Lane 0).
5
+ * Real implementation lands in Lane A. Until then, constructing or invoking a
6
+ * resolver here is a non-starter, by design.
7
+ */
8
+ export * from './LocalFsResolver.js';
9
+ export * from './SuppliedEvidenceResolver.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/subconscious/freshness/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Lemma API v2 — freshness resolvers (Lane A stub)
3
+ *
4
+ * Origin of the interface contract: src/contracts/evidence.ts (Lane 0).
5
+ * Real implementation lands in Lane A. Until then, constructing or invoking a
6
+ * resolver here is a non-starter, by design.
7
+ */
8
+ export * from './LocalFsResolver.js';
9
+ export * from './SuppliedEvidenceResolver.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/subconscious/freshness/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /** package.json's `name` field, or the directory basename if there's no usable package.json. */
2
+ export declare function detectProjectName(cwd?: string): string;
3
+ /**
4
+ * True when a caller's declared project doesn't match the project a shared daemon was
5
+ * started for. The proxy daemon is one process per machine (one global
6
+ * ~/.lemma-cache/proxy.port) — every MCP client on the box resolves to whichever daemon
7
+ * happens to be listening, not necessarily the one for its own project. An empty/absent
8
+ * expectedProject is treated as "unknown caller, not a mismatch" — the pre-fix,
9
+ * backward-compatible behavior for any client that doesn't send it yet.
10
+ */
11
+ export declare function isProjectMismatch(expectedProject: string | null | undefined, actualProjectName: string): boolean;
12
+ //# sourceMappingURL=ProjectIdentity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectIdentity.d.ts","sourceRoot":"","sources":["../../../src/utils/ProjectIdentity.ts"],"names":[],"mappings":"AAaA,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CASrE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAEhH"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * ProjectIdentity — the one place that decides "what project is this directory".
3
+ *
4
+ * Used on both sides of the proxy daemon boundary: the MCP client (src/mcp/tools.ts)
5
+ * derives its own project's expected name from its cwd, and the daemon (src/cli/lemma-proxy.ts)
6
+ * derives its own the same way at startup. Keeping this in a single side-effect-free module
7
+ * (no express, no commander, no CLI argv parsing) means both sides can never drift into two
8
+ * different definitions of "project name" again, and it can be imported from a test without
9
+ * triggering lemma-proxy.ts's `program.parse(process.argv)` on import.
10
+ */
11
+ import fs from 'fs';
12
+ import path from 'path';
13
+ /** package.json's `name` field, or the directory basename if there's no usable package.json. */
14
+ export function detectProjectName(cwd = process.cwd()) {
15
+ try {
16
+ const pkgPath = path.join(cwd, 'package.json');
17
+ if (fs.existsSync(pkgPath)) {
18
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
19
+ if (pkg.name)
20
+ return pkg.name;
21
+ }
22
+ }
23
+ catch { }
24
+ return path.basename(cwd);
25
+ }
26
+ /**
27
+ * True when a caller's declared project doesn't match the project a shared daemon was
28
+ * started for. The proxy daemon is one process per machine (one global
29
+ * ~/.lemma-cache/proxy.port) — every MCP client on the box resolves to whichever daemon
30
+ * happens to be listening, not necessarily the one for its own project. An empty/absent
31
+ * expectedProject is treated as "unknown caller, not a mismatch" — the pre-fix,
32
+ * backward-compatible behavior for any client that doesn't send it yet.
33
+ */
34
+ export function isProjectMismatch(expectedProject, actualProjectName) {
35
+ return !!expectedProject && expectedProject !== actualProjectName;
36
+ }
37
+ //# sourceMappingURL=ProjectIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectIdentity.js","sourceRoot":"","sources":["../../../src/utils/ProjectIdentity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,gGAAgG;AAChG,MAAM,UAAU,iBAAiB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC3D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACzD,IAAI,GAAG,CAAC,IAAI;gBAAE,OAAO,GAAG,CAAC,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,eAA0C,EAAE,iBAAyB;IACrG,OAAO,CAAC,CAAC,eAAe,IAAI,eAAe,KAAK,iBAAiB,CAAC;AACpE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PromptPatternCache.d.ts","sourceRoot":"","sources":["../../../src/utils/PromptPatternCache.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AA8CD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,aAAa,GAAG,IAAI,CAqB7G;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,aAAa,CAgCf;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,aAAa,EAAE,CAAA;CAAE,CAQ5G"}
1
+ {"version":3,"file":"PromptPatternCache.d.ts","sourceRoot":"","sources":["../../../src/utils/PromptPatternCache.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAyDD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,aAAa,GAAG,IAAI,CAqB7G;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,aAAa,CAgCf;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,aAAa,EAAE,CAAA;CAAE,CAQ5G"}
@@ -7,8 +7,18 @@ function getCachePath(projectRoot) {
7
7
  function loadCache(projectRoot) {
8
8
  try {
9
9
  const p = getCachePath(projectRoot);
10
- if (fs.existsSync(p))
11
- return JSON.parse(fs.readFileSync(p, 'utf8'));
10
+ if (fs.existsSync(p)) {
11
+ const parsed = JSON.parse(fs.readFileSync(p, 'utf8'));
12
+ // Callers do cache.patterns.find()/.push() unconditionally — a non-array `patterns`
13
+ // on disk (same class of corruption found live in .lemma/state-hash-cache.json: an
14
+ // object keyed by index instead of an array) must not crash every call downstream.
15
+ const patterns = Array.isArray(parsed?.patterns)
16
+ ? parsed.patterns
17
+ : parsed?.patterns && typeof parsed.patterns === 'object'
18
+ ? Object.values(parsed.patterns)
19
+ : [];
20
+ return { patterns, lastUpdated: typeof parsed?.lastUpdated === 'number' ? parsed.lastUpdated : Date.now() };
21
+ }
12
22
  }
13
23
  catch { }
14
24
  return { patterns: [], lastUpdated: Date.now() };
@@ -1 +1 @@
1
- {"version":3,"file":"PromptPatternCache.js","sourceRoot":"","sources":["../../../src/utils/PromptPatternCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PromptPatternCache.js","sourceRoot":"","sources":["../../../src/utils/PromptPatternCache.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RepeatGuard.d.ts","sourceRoot":"","sources":["../../../src/utils/RepeatGuard.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAoDD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAMtE;AAED,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAa,GACvB,iBAAiB,CAiCnB"}
1
+ {"version":3,"file":"RepeatGuard.d.ts","sourceRoot":"","sources":["../../../src/utils/RepeatGuard.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AA2DD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAMtE;AAED,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAa,GACvB,iBAAiB,CAiCnB"}
@@ -8,8 +8,16 @@ function getHistoryPath(projectRoot) {
8
8
  function loadHistory(projectRoot) {
9
9
  try {
10
10
  const p = getHistoryPath(projectRoot);
11
- if (fs.existsSync(p))
12
- return JSON.parse(fs.readFileSync(p, 'utf8'));
11
+ if (fs.existsSync(p)) {
12
+ const parsed = JSON.parse(fs.readFileSync(p, 'utf8'));
13
+ // Callers push()/slice() this unconditionally — a non-array on disk (same class of
14
+ // corruption found live in .lemma/state-hash-cache.json: an object keyed by index
15
+ // instead of an array) must not crash every call downstream.
16
+ if (Array.isArray(parsed))
17
+ return parsed;
18
+ if (parsed && typeof parsed === 'object')
19
+ return Object.values(parsed);
20
+ }
13
21
  }
14
22
  catch { }
15
23
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"RepeatGuard.js","sourceRoot":"","sources":["../../../src/utils/RepeatGuard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RepeatGuard.js","sourceRoot":"","sources":["../../../src/utils/RepeatGuard.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,11 @@
5
5
  * Unlike a fuzzy/vector cache, a hit here is only returned if every referenced
6
6
  * file's current sha256 matches the hash recorded when the answer was stored.
7
7
  * If any referenced file changed, it's a guaranteed MISS — no stale answers.
8
+ *
9
+ * Hashing is delegated to LocalFsResolver — the same primitive TheBrainV2 uses
10
+ * for symbol/claim freshness — so there is exactly one "how do we hash a file"
11
+ * implementation in the whole system, not two that can silently drift apart.
12
+ * This module only owns the query-keyed lookup/store shape on top of it.
8
13
  */
9
14
  export interface StateHashEntry {
10
15
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"StateHashCache.d.ts","sourceRoot":"","sources":["../../../src/utils/StateHashCache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AA+CD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EAAE,GAClB,qBAAqB,CAwBvB;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAClB,cAAc,CAmBhB"}
1
+ {"version":3,"file":"StateHashCache.d.ts","sourceRoot":"","sources":["../../../src/utils/StateHashCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAmED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EAAE,GAClB,qBAAqB,CAwBvB;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,GAClB,cAAc,CAmBhB"}
@@ -5,10 +5,16 @@
5
5
  * Unlike a fuzzy/vector cache, a hit here is only returned if every referenced
6
6
  * file's current sha256 matches the hash recorded when the answer was stored.
7
7
  * If any referenced file changed, it's a guaranteed MISS — no stale answers.
8
+ *
9
+ * Hashing is delegated to LocalFsResolver — the same primitive TheBrainV2 uses
10
+ * for symbol/claim freshness — so there is exactly one "how do we hash a file"
11
+ * implementation in the whole system, not two that can silently drift apart.
12
+ * This module only owns the query-keyed lookup/store shape on top of it.
8
13
  */
9
14
  import fs from 'fs';
10
15
  import path from 'path';
11
16
  import crypto from 'crypto';
17
+ import { LocalFsResolver } from '../subconscious/freshness/LocalFsResolver.js';
12
18
  const CACHE_FILE = '.lemma/state-hash-cache.json';
13
19
  function getCachePath(projectRoot) {
14
20
  return path.join(projectRoot, CACHE_FILE);
@@ -16,12 +22,29 @@ function getCachePath(projectRoot) {
16
22
  function loadCache(projectRoot) {
17
23
  try {
18
24
  const p = getCachePath(projectRoot);
19
- if (fs.existsSync(p))
20
- return JSON.parse(fs.readFileSync(p, 'utf8'));
25
+ if (fs.existsSync(p)) {
26
+ const parsed = JSON.parse(fs.readFileSync(p, 'utf8'));
27
+ return { entries: normalizeEntries(parsed?.entries) };
28
+ }
21
29
  }
22
30
  catch { }
23
31
  return { entries: [] };
24
32
  }
33
+ /**
34
+ * Found live, in this repo's own .lemma/state-hash-cache.json: a real on-disk file whose
35
+ * `entries` was an object keyed by index ({"0": {...}}) instead of an array — an older/
36
+ * different writer's format, or hand-editing, silently produced this. lookupStateHash and
37
+ * storeStateHash both call array methods (.find/.filter/.push) on `entries` unconditionally,
38
+ * so that shape crashed every call against this project until this normalized it. Recovers
39
+ * an object-keyed shape via Object.values instead of discarding real cached answers.
40
+ */
41
+ function normalizeEntries(entries) {
42
+ if (Array.isArray(entries))
43
+ return entries;
44
+ if (entries && typeof entries === 'object')
45
+ return Object.values(entries);
46
+ return [];
47
+ }
25
48
  function saveCache(projectRoot, data) {
26
49
  try {
27
50
  const dir = path.join(projectRoot, '.lemma');
@@ -31,24 +54,25 @@ function saveCache(projectRoot, data) {
31
54
  }
32
55
  catch { }
33
56
  }
34
- function sha256(content) {
35
- return crypto.createHash('sha256').update(content).digest('hex');
57
+ // One resolver per project root, reused across lookups so LocalFsResolver's
58
+ // mtime/size hash memoization actually pays off within a session instead of
59
+ // being thrown away on every call.
60
+ const resolverCache = new Map();
61
+ function getResolver(projectRoot) {
62
+ let resolver = resolverCache.get(projectRoot);
63
+ if (!resolver) {
64
+ resolver = new LocalFsResolver(projectRoot);
65
+ resolverCache.set(projectRoot, resolver);
66
+ }
67
+ return resolver;
36
68
  }
37
69
  function hashFiles(projectRoot, filePaths) {
70
+ const resolver = getResolver(projectRoot);
38
71
  const hashes = {};
39
72
  for (const rel of filePaths) {
40
- try {
41
- const resolved = path.resolve(projectRoot, rel);
42
- if (fs.existsSync(resolved)) {
43
- hashes[rel] = sha256(fs.readFileSync(resolved, 'utf8'));
44
- }
45
- else {
46
- hashes[rel] = 'MISSING';
47
- }
48
- }
49
- catch {
50
- hashes[rel] = 'ERROR';
51
- }
73
+ // LocalFsResolver never returns null for a real path (that's the cloud-only
74
+ // fail-closed signal) — 'MISSING' is its own sentinel for an unreadable file.
75
+ hashes[rel] = resolver.hashFile(rel) ?? 'MISSING';
52
76
  }
53
77
  return hashes;
54
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StateHashCache.js","sourceRoot":"","sources":["../../../src/utils/StateHashCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StateHashCache.js","sourceRoot":"","sources":["../../../src/utils/StateHashCache.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxuss/lemma",
3
- "version": "1.17.0",
3
+ "version": "1.18.1",
4
4
  "description": "Intelligent AI Gateway for IDEs & Agents — Semantic cache, Privacy Firewall, Infrastructure Command Center, and Autonomous Cost-Optimization.",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -173,6 +173,31 @@ const review = await reviewer.execute({
173
173
  });
174
174
  ```
175
175
 
176
+ ## Verifiable Memory for CrewAI (memory that doesn't rot)
177
+
178
+ Separate from `LemmaCrewAgent` above (the WebSocket orchestration router) —
179
+ this is a CrewAI-style tool backed by Lemma's `/v2` Verifiable Memory API:
180
+
181
+ ```typescript
182
+ import { LemmaMemoryTool } from '@lemma/crewai';
183
+
184
+ const memoryTool = new LemmaMemoryTool({ apiKey: process.env.LEMMA_API_KEY! });
185
+
186
+ // wire memoryTool into your crew's tools the way you wire any other tool —
187
+ // agents call memoryTool.func({ action: 'recall', query, filePaths })
188
+
189
+ const result = await memoryTool.func({ action: 'recall', query: 'how does auth work?', filePaths: ['src/auth/login.ts'] });
190
+ if (result.state === 'stale') {
191
+ // re-verify before trusting it — result.staleFiles names what changed
192
+ }
193
+ ```
194
+
195
+ `func()` never collapses the result to a string: a `'recall'` call returns
196
+ `{ state, staleFiles, results }`. See
197
+ [`examples/memory-tool-demo.ts`](./examples/memory-tool-demo.ts) for a full
198
+ runnable example (stores a memory, edits the file it depends on, shows the
199
+ tool call receive `'stale'`).
200
+
176
201
  ## License
177
202
 
178
203
  MIT