@nxuss/lemma 1.17.0 → 1.18.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 (466) 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/tool-profiles.d.ts.map +1 -1
  125. package/dist/cjs/mcp/tool-profiles.js +46 -1
  126. package/dist/cjs/mcp/tool-profiles.js.map +1 -1
  127. package/dist/cjs/mcp/tools.d.ts +2 -0
  128. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  129. package/dist/cjs/mcp/tools.js +40 -21
  130. package/dist/cjs/mcp/tools.js.map +1 -1
  131. package/dist/cjs/subconscious/TheBrainV2.d.ts +43 -7
  132. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  133. package/dist/cjs/subconscious/TheBrainV2.js +86 -57
  134. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  135. package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts +16 -0
  136. package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts.map +1 -0
  137. package/dist/cjs/subconscious/freshness/LocalFsResolver.js +74 -0
  138. package/dist/cjs/subconscious/freshness/LocalFsResolver.js.map +1 -0
  139. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.d.ts +23 -0
  140. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.d.ts.map +1 -0
  141. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.js +24 -0
  142. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.js.map +1 -0
  143. package/dist/cjs/subconscious/freshness/index.d.ts +10 -0
  144. package/dist/cjs/subconscious/freshness/index.d.ts.map +1 -0
  145. package/dist/cjs/subconscious/freshness/index.js +26 -0
  146. package/dist/cjs/subconscious/freshness/index.js.map +1 -0
  147. package/dist/cjs/utils/ProjectIdentity.d.ts +12 -0
  148. package/dist/cjs/utils/ProjectIdentity.d.ts.map +1 -0
  149. package/dist/cjs/utils/ProjectIdentity.js +44 -0
  150. package/dist/cjs/utils/ProjectIdentity.js.map +1 -0
  151. package/dist/cjs/utils/PromptPatternCache.d.ts.map +1 -1
  152. package/dist/cjs/utils/PromptPatternCache.js +12 -2
  153. package/dist/cjs/utils/PromptPatternCache.js.map +1 -1
  154. package/dist/cjs/utils/RepeatGuard.d.ts.map +1 -1
  155. package/dist/cjs/utils/RepeatGuard.js +10 -2
  156. package/dist/cjs/utils/RepeatGuard.js.map +1 -1
  157. package/dist/cjs/utils/StateHashCache.d.ts +5 -0
  158. package/dist/cjs/utils/StateHashCache.d.ts.map +1 -1
  159. package/dist/cjs/utils/StateHashCache.js +40 -16
  160. package/dist/cjs/utils/StateHashCache.js.map +1 -1
  161. package/dist/esm/api/dashboardRoutes.d.ts +3 -3
  162. package/dist/esm/api/dashboardRoutes.js +1 -1
  163. package/dist/esm/api/server.d.ts +4 -4
  164. package/dist/esm/api/server.js +3 -3
  165. package/dist/esm/autopilot/AutopilotWatcher.js +3 -3
  166. package/dist/esm/autopilot/Notifier.d.ts +1 -1
  167. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  168. package/dist/esm/cli/lemma-proxy.js +33 -25
  169. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  170. package/dist/esm/cli/stack.d.ts +4 -4
  171. package/dist/esm/cli/stack.js +5 -5
  172. package/dist/esm/cloud/KeyManager.d.ts +1 -1
  173. package/dist/esm/cloud/KeyManager.js +1 -1
  174. package/dist/esm/cloud/TenantCache.d.ts +1 -1
  175. package/dist/esm/cloud/TenantCache.d.ts.map +1 -1
  176. package/dist/esm/cloud/TenantCache.js +0 -4
  177. package/dist/esm/cloud/TenantCache.js.map +1 -1
  178. package/dist/esm/cloud/identity/ApiKey.d.ts +32 -0
  179. package/dist/esm/cloud/identity/ApiKey.d.ts.map +1 -0
  180. package/dist/esm/cloud/identity/ApiKey.js +49 -0
  181. package/dist/esm/cloud/identity/ApiKey.js.map +1 -0
  182. package/dist/esm/cloud/identity/PlanPolicy.d.ts +79 -0
  183. package/dist/esm/cloud/identity/PlanPolicy.d.ts.map +1 -0
  184. package/dist/esm/cloud/identity/PlanPolicy.js +129 -0
  185. package/dist/esm/cloud/identity/PlanPolicy.js.map +1 -0
  186. package/dist/esm/cloud/identity/RateLimiter.d.ts +49 -0
  187. package/dist/esm/cloud/identity/RateLimiter.d.ts.map +1 -0
  188. package/dist/esm/cloud/identity/RateLimiter.js +69 -0
  189. package/dist/esm/cloud/identity/RateLimiter.js.map +1 -0
  190. package/dist/esm/cloud/identity/TenantResolver.d.ts +19 -0
  191. package/dist/esm/cloud/identity/TenantResolver.d.ts.map +1 -0
  192. package/dist/esm/cloud/identity/TenantResolver.js +36 -0
  193. package/dist/esm/cloud/identity/TenantResolver.js.map +1 -0
  194. package/dist/esm/cloud/identity/authenticateV2.d.ts +48 -0
  195. package/dist/esm/cloud/identity/authenticateV2.d.ts.map +1 -0
  196. package/dist/esm/cloud/identity/authenticateV2.js +62 -0
  197. package/dist/esm/cloud/identity/authenticateV2.js.map +1 -0
  198. package/dist/esm/cloud/identity/identityStore.d.ts +56 -0
  199. package/dist/esm/cloud/identity/identityStore.d.ts.map +1 -0
  200. package/dist/esm/cloud/identity/identityStore.js +94 -0
  201. package/dist/esm/cloud/identity/identityStore.js.map +1 -0
  202. package/dist/esm/cloud/identity/index.d.ts +14 -0
  203. package/dist/esm/cloud/identity/index.d.ts.map +1 -0
  204. package/dist/esm/cloud/identity/index.js +14 -0
  205. package/dist/esm/cloud/identity/index.js.map +1 -0
  206. package/dist/esm/cloud/index.d.ts +3 -3
  207. package/dist/esm/cloud/index.js +3 -3
  208. package/dist/esm/cloud/metering/TokenCounter.d.ts +26 -0
  209. package/dist/esm/cloud/metering/TokenCounter.d.ts.map +1 -0
  210. package/dist/esm/cloud/metering/TokenCounter.js +76 -0
  211. package/dist/esm/cloud/metering/TokenCounter.js.map +1 -0
  212. package/dist/esm/cloud/metering/UsageLedger.d.ts +68 -0
  213. package/dist/esm/cloud/metering/UsageLedger.d.ts.map +1 -0
  214. package/dist/esm/cloud/metering/UsageLedger.js +98 -0
  215. package/dist/esm/cloud/metering/UsageLedger.js.map +1 -0
  216. package/dist/esm/cloud/metering/index.d.ts +12 -0
  217. package/dist/esm/cloud/metering/index.d.ts.map +1 -0
  218. package/dist/esm/cloud/metering/index.js +12 -0
  219. package/dist/esm/cloud/metering/index.js.map +1 -0
  220. package/dist/esm/cloud/scrub/StatelessScrubber.d.ts +53 -0
  221. package/dist/esm/cloud/scrub/StatelessScrubber.d.ts.map +1 -0
  222. package/dist/esm/cloud/scrub/StatelessScrubber.js +199 -0
  223. package/dist/esm/cloud/scrub/StatelessScrubber.js.map +1 -0
  224. package/dist/esm/cloud/scrub/index.d.ts +5 -0
  225. package/dist/esm/cloud/scrub/index.d.ts.map +1 -0
  226. package/dist/esm/cloud/scrub/index.js +5 -0
  227. package/dist/esm/cloud/scrub/index.js.map +1 -0
  228. package/dist/esm/cloud/server.d.ts +3 -3
  229. package/dist/esm/cloud/server.js +5 -5
  230. package/dist/esm/cloud/store/FileBrainStore.d.ts +26 -0
  231. package/dist/esm/cloud/store/FileBrainStore.d.ts.map +1 -0
  232. package/dist/esm/cloud/store/FileBrainStore.js +212 -0
  233. package/dist/esm/cloud/store/FileBrainStore.js.map +1 -0
  234. package/dist/esm/cloud/store/PostgresBrainStore.d.ts +50 -0
  235. package/dist/esm/cloud/store/PostgresBrainStore.d.ts.map +1 -0
  236. package/dist/esm/cloud/store/PostgresBrainStore.js +176 -0
  237. package/dist/esm/cloud/store/PostgresBrainStore.js.map +1 -0
  238. package/dist/esm/cloud/store/index.d.ts +6 -0
  239. package/dist/esm/cloud/store/index.d.ts.map +1 -0
  240. package/dist/esm/cloud/store/index.js +6 -0
  241. package/dist/esm/cloud/store/index.js.map +1 -0
  242. package/dist/esm/cloud/types.d.ts +0 -4
  243. package/dist/esm/cloud/types.d.ts.map +1 -1
  244. package/dist/esm/cloud/types.js +0 -2
  245. package/dist/esm/cloud/types.js.map +1 -1
  246. package/dist/esm/cloud/v2/app.d.ts +15 -0
  247. package/dist/esm/cloud/v2/app.d.ts.map +1 -0
  248. package/dist/esm/cloud/v2/app.js +57 -0
  249. package/dist/esm/cloud/v2/app.js.map +1 -0
  250. package/dist/esm/cloud/v2/routes/index.d.ts +24 -0
  251. package/dist/esm/cloud/v2/routes/index.d.ts.map +1 -0
  252. package/dist/esm/cloud/v2/routes/index.js +32 -0
  253. package/dist/esm/cloud/v2/routes/index.js.map +1 -0
  254. package/dist/esm/cloud/v2/routes/memories.d.ts +83 -0
  255. package/dist/esm/cloud/v2/routes/memories.d.ts.map +1 -0
  256. package/dist/esm/cloud/v2/routes/memories.js +238 -0
  257. package/dist/esm/cloud/v2/routes/memories.js.map +1 -0
  258. package/dist/esm/cloud/v2/routes/recall.d.ts +33 -0
  259. package/dist/esm/cloud/v2/routes/recall.d.ts.map +1 -0
  260. package/dist/esm/cloud/v2/routes/recall.js +47 -0
  261. package/dist/esm/cloud/v2/routes/recall.js.map +1 -0
  262. package/dist/esm/cloud/v2/routes/scrub.d.ts +13 -0
  263. package/dist/esm/cloud/v2/routes/scrub.d.ts.map +1 -0
  264. package/dist/esm/cloud/v2/routes/scrub.js +79 -0
  265. package/dist/esm/cloud/v2/routes/scrub.js.map +1 -0
  266. package/dist/esm/cloud/v2/routes/usage.d.ts +18 -0
  267. package/dist/esm/cloud/v2/routes/usage.d.ts.map +1 -0
  268. package/dist/esm/cloud/v2/routes/usage.js +15 -0
  269. package/dist/esm/cloud/v2/routes/usage.js.map +1 -0
  270. package/dist/esm/cloud/v2/routes/verify.d.ts +35 -0
  271. package/dist/esm/cloud/v2/routes/verify.d.ts.map +1 -0
  272. package/dist/esm/cloud/v2/routes/verify.js +39 -0
  273. package/dist/esm/cloud/v2/routes/verify.js.map +1 -0
  274. package/dist/esm/cloud/v2/server.d.ts +27 -0
  275. package/dist/esm/cloud/v2/server.d.ts.map +1 -0
  276. package/dist/esm/cloud/v2/server.js +44 -0
  277. package/dist/esm/cloud/v2/server.js.map +1 -0
  278. package/dist/esm/config/index.d.ts +1 -1
  279. package/dist/esm/config/index.js +1 -1
  280. package/dist/esm/consensus/index.d.ts +2 -2
  281. package/dist/esm/consensus/index.js +2 -2
  282. package/dist/esm/contracts/api-v2.types.d.ts +103 -0
  283. package/dist/esm/contracts/api-v2.types.d.ts.map +1 -0
  284. package/dist/esm/contracts/api-v2.types.js +2 -0
  285. package/dist/esm/contracts/api-v2.types.js.map +1 -0
  286. package/dist/esm/contracts/errors.d.ts +40 -0
  287. package/dist/esm/contracts/errors.d.ts.map +1 -0
  288. package/dist/esm/contracts/errors.js +45 -0
  289. package/dist/esm/contracts/errors.js.map +1 -0
  290. package/dist/esm/contracts/evidence.d.ts +49 -0
  291. package/dist/esm/contracts/evidence.d.ts.map +1 -0
  292. package/dist/esm/contracts/evidence.js +11 -0
  293. package/dist/esm/contracts/evidence.js.map +1 -0
  294. package/dist/esm/contracts/index.d.ts +10 -0
  295. package/dist/esm/contracts/index.d.ts.map +1 -0
  296. package/dist/esm/contracts/index.js +10 -0
  297. package/dist/esm/contracts/index.js.map +1 -0
  298. package/dist/esm/contracts/store.d.ts +30 -0
  299. package/dist/esm/contracts/store.d.ts.map +1 -0
  300. package/dist/esm/contracts/store.js +2 -0
  301. package/dist/esm/contracts/store.js.map +1 -0
  302. package/dist/esm/core/AgentRegistry.d.ts +1 -1
  303. package/dist/esm/core/AgentRegistry.js +1 -1
  304. package/dist/esm/core/DashboardBroadcaster.d.ts +3 -3
  305. package/dist/esm/core/DashboardBroadcaster.js +2 -2
  306. package/dist/esm/core/DashboardWebSocketServer.d.ts +1 -1
  307. package/dist/esm/core/DashboardWebSocketServer.js +1 -1
  308. package/dist/esm/core/GhostAlchemist.js +1 -1
  309. package/dist/esm/core/GhostListener.js +2 -2
  310. package/dist/esm/core/OrchestrationEngine.d.ts +3 -3
  311. package/dist/esm/core/OrchestrationEngine.js +2 -2
  312. package/dist/esm/core/SubconsciousEngine.d.ts +1 -1
  313. package/dist/esm/core/SubconsciousEngine.js +2 -2
  314. package/dist/esm/core/WebSocketServer.d.ts +2 -2
  315. package/dist/esm/core/WebSocketServer.js +1 -1
  316. package/dist/esm/core/index.d.ts +6 -6
  317. package/dist/esm/core/index.js +6 -6
  318. package/dist/esm/core/router.d.ts +3 -3
  319. package/dist/esm/core/router.js +1 -1
  320. package/dist/esm/db/database.js +1 -1
  321. package/dist/esm/embed.d.ts +2 -2
  322. package/dist/esm/embed.js +2 -2
  323. package/dist/esm/examples/basic-usage.js +1 -1
  324. package/dist/esm/index.d.ts +14 -14
  325. package/dist/esm/index.js +14 -14
  326. package/dist/esm/infra/analyzers/DriftDetector.d.ts +1 -1
  327. package/dist/esm/infra/analyzers/InfraAnalyzer.d.ts +1 -1
  328. package/dist/esm/infra/analyzers/MonolithAnalyzer.d.ts +1 -1
  329. package/dist/esm/infra/analyzers/index.d.ts +3 -3
  330. package/dist/esm/infra/analyzers/index.js +3 -3
  331. package/dist/esm/infra/cli.js +2 -2
  332. package/dist/esm/infra/config.d.ts +1 -1
  333. package/dist/esm/infra/index.d.ts +5 -5
  334. package/dist/esm/infra/index.js +5 -5
  335. package/dist/esm/infra/mcp-tools.js +5 -5
  336. package/dist/esm/infra/providers/InfraProvider.d.ts +1 -1
  337. package/dist/esm/infra/providers/JenkinsProvider.d.ts +2 -2
  338. package/dist/esm/infra/providers/OKDProvider.d.ts +2 -2
  339. package/dist/esm/infra/providers/TerraformProvider.d.ts +2 -2
  340. package/dist/esm/infra/providers/index.d.ts +5 -5
  341. package/dist/esm/infra/providers/index.js +3 -3
  342. package/dist/esm/mcp/index.js +5 -5
  343. package/dist/esm/mcp/prompts.js +1 -1
  344. package/dist/esm/mcp/resources.js +2 -2
  345. package/dist/esm/mcp/tasks.js +1 -1
  346. package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
  347. package/dist/esm/mcp/tool-profiles.js +47 -2
  348. package/dist/esm/mcp/tool-profiles.js.map +1 -1
  349. package/dist/esm/mcp/tools.d.ts +2 -0
  350. package/dist/esm/mcp/tools.d.ts.map +1 -1
  351. package/dist/esm/mcp/tools.js +87 -69
  352. package/dist/esm/mcp/tools.js.map +1 -1
  353. package/dist/esm/observability/IdeContextSync.d.ts +1 -1
  354. package/dist/esm/observability/IdeContextSync.js +5 -5
  355. package/dist/esm/pr-review/PRReviewEngine.d.ts +1 -1
  356. package/dist/esm/pr-review/PRReviewEngine.js +4 -4
  357. package/dist/esm/pr-review/ReviewStore.d.ts +1 -1
  358. package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.d.ts +2 -2
  359. package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.js +1 -1
  360. package/dist/esm/pr-review/adapters/GitHubAdapter.d.ts +2 -2
  361. package/dist/esm/pr-review/adapters/GitHubAdapter.js +1 -1
  362. package/dist/esm/pr-review/adapters/GitLabAdapter.d.ts +2 -2
  363. package/dist/esm/pr-review/adapters/GitLabAdapter.js +1 -1
  364. package/dist/esm/pr-review/adapters/GitPlatformAdapter.d.ts +1 -1
  365. package/dist/esm/pr-review/adapters/index.d.ts +4 -4
  366. package/dist/esm/pr-review/adapters/index.js +3 -3
  367. package/dist/esm/pr-review/analyzers/QualityGrader.d.ts +1 -1
  368. package/dist/esm/pr-review/analyzers/RegressionDetector.d.ts +1 -1
  369. package/dist/esm/pr-review/analyzers/SecurityScanner.d.ts +1 -1
  370. package/dist/esm/pr-review/analyzers/StaticAnalyzer.d.ts +1 -1
  371. package/dist/esm/pr-review/analyzers/index.d.ts +8 -8
  372. package/dist/esm/pr-review/analyzers/index.js +4 -4
  373. package/dist/esm/pr-review/bridge/BrainBridge.d.ts +1 -1
  374. package/dist/esm/pr-review/bridge/BrainBridge.js +1 -1
  375. package/dist/esm/pr-review/bridge/index.d.ts +1 -1
  376. package/dist/esm/pr-review/bridge/index.js +1 -1
  377. package/dist/esm/pr-review/index.d.ts +4 -4
  378. package/dist/esm/pr-review/index.js +2 -2
  379. package/dist/esm/pr-review/reviewRunner.d.ts +2 -2
  380. package/dist/esm/pr-review/reviewRunner.js +6 -6
  381. package/dist/esm/pr-review/webhook/WebhookServer.js +1 -1
  382. package/dist/esm/pr-review/webhook/index.d.ts +1 -1
  383. package/dist/esm/pr-review/webhook/index.js +1 -1
  384. package/dist/esm/protocol/flows.d.ts +1 -1
  385. package/dist/esm/protocol/flows.js +1 -1
  386. package/dist/esm/protocol/index.d.ts +4 -4
  387. package/dist/esm/protocol/index.js +4 -4
  388. package/dist/esm/protocol/utils.d.ts +1 -1
  389. package/dist/esm/protocol/utils.js +2 -2
  390. package/dist/esm/protocol/validators.d.ts +1 -1
  391. package/dist/esm/protocol/validators.js +1 -1
  392. package/dist/esm/proxy/ContextInjector.d.ts +1 -1
  393. package/dist/esm/proxy/Gatekeeper.d.ts +1 -1
  394. package/dist/esm/security/SecurityMiddleware.d.ts +1 -1
  395. package/dist/esm/security/SecurityMiddleware.js +3 -3
  396. package/dist/esm/security/index.d.ts +4 -4
  397. package/dist/esm/security/index.js +4 -4
  398. package/dist/esm/speculative/SpeculativeCache.d.ts +2 -2
  399. package/dist/esm/speculative/SpeculativeEngine.d.ts +2 -2
  400. package/dist/esm/speculative/SpeculativeEngine.js +3 -3
  401. package/dist/esm/speculative/WorkerPool.d.ts +1 -1
  402. package/dist/esm/speculative/index.d.ts +4 -4
  403. package/dist/esm/speculative/index.js +4 -4
  404. package/dist/esm/subconscious/GitIngest.d.ts +1 -1
  405. package/dist/esm/subconscious/GitIngest.js +1 -1
  406. package/dist/esm/subconscious/SemanticCache.d.ts +2 -2
  407. package/dist/esm/subconscious/SemanticCache.js +2 -2
  408. package/dist/esm/subconscious/SubconsciousEngine.d.ts +1 -1
  409. package/dist/esm/subconscious/SubconsciousEngine.js +3 -3
  410. package/dist/esm/subconscious/TheBrainV2.d.ts +43 -7
  411. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  412. package/dist/esm/subconscious/TheBrainV2.js +87 -58
  413. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  414. package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts +16 -0
  415. package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts.map +1 -0
  416. package/dist/esm/subconscious/freshness/LocalFsResolver.js +67 -0
  417. package/dist/esm/subconscious/freshness/LocalFsResolver.js.map +1 -0
  418. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.d.ts +23 -0
  419. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.d.ts.map +1 -0
  420. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.js +20 -0
  421. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.js.map +1 -0
  422. package/dist/esm/subconscious/freshness/index.d.ts +10 -0
  423. package/dist/esm/subconscious/freshness/index.d.ts.map +1 -0
  424. package/dist/esm/subconscious/freshness/index.js +10 -0
  425. package/dist/esm/subconscious/freshness/index.js.map +1 -0
  426. package/dist/esm/subconscious/index.d.ts +4 -4
  427. package/dist/esm/subconscious/index.js +4 -4
  428. package/dist/esm/utils/AffectedTests.js +1 -1
  429. package/dist/esm/utils/AutoContextBundle.d.ts +1 -1
  430. package/dist/esm/utils/AutoContextBundle.js +4 -4
  431. package/dist/esm/utils/BulkFileDigest.js +2 -2
  432. package/dist/esm/utils/ClipboardWatcher.js +2 -2
  433. package/dist/esm/utils/ContextCollapser.js +1 -1
  434. package/dist/esm/utils/ConversationCheckpoint.js +1 -1
  435. package/dist/esm/utils/ExecutiveReport.js +1 -1
  436. package/dist/esm/utils/OutputLedger.js +2 -2
  437. package/dist/esm/utils/ProjectIdentity.d.ts +12 -0
  438. package/dist/esm/utils/ProjectIdentity.d.ts.map +1 -0
  439. package/dist/esm/utils/ProjectIdentity.js +37 -0
  440. package/dist/esm/utils/ProjectIdentity.js.map +1 -0
  441. package/dist/esm/utils/PromptPatternCache.d.ts.map +1 -1
  442. package/dist/esm/utils/PromptPatternCache.js +12 -2
  443. package/dist/esm/utils/PromptPatternCache.js.map +1 -1
  444. package/dist/esm/utils/ReadWorkspaceCache.js +1 -1
  445. package/dist/esm/utils/RepeatGuard.d.ts.map +1 -1
  446. package/dist/esm/utils/RepeatGuard.js +10 -2
  447. package/dist/esm/utils/RepeatGuard.js.map +1 -1
  448. package/dist/esm/utils/SpeculativeWarmer.d.ts +1 -1
  449. package/dist/esm/utils/SpeculativeWarmer.js +2 -2
  450. package/dist/esm/utils/StateHashCache.d.ts +5 -0
  451. package/dist/esm/utils/StateHashCache.d.ts.map +1 -1
  452. package/dist/esm/utils/StateHashCache.js +40 -16
  453. package/dist/esm/utils/StateHashCache.js.map +1 -1
  454. package/dist/esm/utils/StructuralSearch.d.ts +1 -1
  455. package/dist/esm/utils/SurgicalASTInsert.js +1 -1
  456. package/dist/esm/utils/SymbolSurgicalContext.js +1 -1
  457. package/dist/esm/utils/TestAutofixInterceptor.js +1 -1
  458. package/dist/esm/utils/WorkspaceSearch.js +0 -0
  459. package/dist/esm/utils/logger.js +1 -1
  460. package/dist/esm/utils/reportSavings.js +1 -1
  461. package/package.json +1 -1
  462. package/sdks/crewai/README.md +25 -0
  463. package/dist/cjs/package.json +0 -3
  464. package/dist/esm/package.json +0 -3
  465. package/sdks/crewai/dist/index.d.ts +0 -130
  466. package/sdks/crewai/dist/index.js +0 -308
@@ -17,8 +17,8 @@
17
17
  * costs the user a correct answer.
18
18
  */
19
19
  import crypto from "crypto";
20
- import { shouldEmitDelta } from "./OutputDelta.js";
21
- import { getSharedEntry, setSharedEntry } from "./SharedLedgerStore.js";
20
+ import { shouldEmitDelta } from "./OutputDelta";
21
+ import { getSharedEntry, setSharedEntry } from "./SharedLedgerStore";
22
22
  const entries = new Map();
23
23
  /** Mirrors the read cache's bound: this exists to save tokens, not to grow forever. */
24
24
  const MAX_LEDGER_CHARS = 2000000;
@@ -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,5 +1,5 @@
1
1
  import crypto from "crypto";
2
- import { getSharedEntry, setSharedEntry } from "./SharedLedgerStore.js";
2
+ import { getSharedEntry, setSharedEntry } from "./SharedLedgerStore";
3
3
  // Session-scoped (lives for the MCP server process lifetime, which is normally the
4
4
  // whole conversation). Tracks the content hash we last actually sent back to the
5
5
  // model for a given (filePath, view) pair, so a second identical read doesn't
@@ -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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"}
@@ -9,7 +9,7 @@
9
9
  * every failure is swallowed — a warming run that throws or runs slow must never be visible
10
10
  * to whoever is waiting on the actual tool call.
11
11
  */
12
- import { AstSymbol } from "./AstSymbolCache.js";
12
+ import { AstSymbol } from "./AstSymbolCache";
13
13
  /**
14
14
  * `extractSymbolsWithTsCompiler` lives in `mcp/tools.ts`, which already imports this module —
15
15
  * importing it back here would be circular. The dispatcher registers it once at startup instead.
@@ -11,8 +11,8 @@
11
11
  */
12
12
  import fs from "fs";
13
13
  import path from "path";
14
- import { buildDepGraphMap, bfsDepGraph } from "./DepGraph.js";
15
- import { getOrExtractSymbols, hasFreshEntry } from "./AstSymbolCache.js";
14
+ import { buildDepGraphMap, bfsDepGraph } from "./DepGraph";
15
+ import { getOrExtractSymbols, hasFreshEntry } from "./AstSymbolCache";
16
16
  /** How many neighbor files a single warm pass will touch — bounded so this stays cheap. */
17
17
  const MAX_NEIGHBORS = 8;
18
18
  const MAX_DEPTH = 1;
@@ -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';
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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"}
@@ -1,4 +1,4 @@
1
- import type { SearchMatch } from "./WorkspaceSearch.js";
1
+ import type { SearchMatch } from "./WorkspaceSearch";
2
2
  export interface DeclaredSymbol {
3
3
  kind: "function" | "class" | "method" | "interface" | "type" | "enum" | "arrow";
4
4
  name: string;
@@ -9,7 +9,7 @@
9
9
  */
10
10
  import fs from 'fs';
11
11
  import * as ts from 'typescript';
12
- import { safeResolvePath } from '../mcp/utils.js';
12
+ import { safeResolvePath } from '../mcp/utils';
13
13
  /**
14
14
  * Finds a class or interface node by name.
15
15
  */
@@ -10,7 +10,7 @@
10
10
  import fs from 'fs';
11
11
  import path from 'path';
12
12
  import * as ts from 'typescript';
13
- import { safeResolvePath } from '../mcp/utils.js';
13
+ import { safeResolvePath } from '../mcp/utils';
14
14
  /**
15
15
  * Traverses AST to find the node defining the specified symbol name.
16
16
  */
@@ -1,5 +1,5 @@
1
1
  import { execSync } from 'child_process';
2
- import { getBrain, deriveProjectId } from '../subconscious/TheBrainV2.js';
2
+ import { getBrain, deriveProjectId } from '../subconscious/TheBrainV2';
3
3
  function extractFailures(output) {
4
4
  const failures = [];
5
5
  // Jest/Vitest failure pattern
Binary file
@@ -1,6 +1,6 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import { config } from '../config/index.js';
3
+ import { config } from '../config';
4
4
  /**
5
5
  * Log levels
6
6
  */
@@ -8,7 +8,7 @@ import fs from 'fs';
8
8
  import path from 'path';
9
9
  import os from 'os';
10
10
  import http from 'http';
11
- import { recordRoiSaved, recordRoiSpent } from './RoiLedger.js';
11
+ import { recordRoiSaved, recordRoiSpent } from './RoiLedger';
12
12
  function getProxyPort() {
13
13
  try {
14
14
  const portFile = path.join(os.homedir(), '.lemma-cache/proxy.port');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxuss/lemma",
3
- "version": "1.17.0",
3
+ "version": "1.18.0",
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
@@ -1,3 +0,0 @@
1
- {
2
- "type": "commonjs"
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "type": "module"
3
- }
@@ -1,130 +0,0 @@
1
- /**
2
- * Lemma Crew Configuration
3
- */
4
- export interface LemmaCrewConfig {
5
- /** WebSocket URL of the Lemma router */
6
- routerUrl: string;
7
- /** Agent ID */
8
- agentId: string;
9
- /** Agent role (CrewAI concept) */
10
- role: string;
11
- /** Agent goal */
12
- goal: string;
13
- /** Agent backstory */
14
- backstory?: string;
15
- /** Capabilities this agent provides */
16
- capabilities?: string[];
17
- /** Enable verbose logging */
18
- verbose?: boolean;
19
- /** Allow task delegation */
20
- allowDelegation?: boolean;
21
- }
22
- /**
23
- * Task execution request
24
- */
25
- export interface TaskRequest {
26
- description: string;
27
- expectedOutput?: string;
28
- context?: any;
29
- allowDelegation?: boolean;
30
- }
31
- /**
32
- * Task execution result
33
- */
34
- export interface TaskResult {
35
- success: boolean;
36
- output?: string;
37
- error?: string;
38
- executionTime: number;
39
- cached?: boolean;
40
- similarity?: number;
41
- }
42
- /**
43
- * CrewAI Agent integrated with Lemma Router
44
- */
45
- export declare class LemmaCrewAgent {
46
- private ws;
47
- private config;
48
- private connected;
49
- private pendingTasks;
50
- constructor(config: LemmaCrewConfig);
51
- /**
52
- * Connect to Lemma router
53
- */
54
- connect(): Promise<void>;
55
- /**
56
- * Disconnect from router
57
- */
58
- disconnect(): void;
59
- /**
60
- * Execute a task
61
- */
62
- execute(task: TaskRequest): Promise<TaskResult>;
63
- /**
64
- * Handle incoming message from router
65
- */
66
- private handleMessage;
67
- /**
68
- * Handle task assignment from router
69
- */
70
- private handleTaskAssign;
71
- /**
72
- * Handle task response from router
73
- */
74
- private handleTaskResponse;
75
- /**
76
- * Perform task (override in subclasses)
77
- */
78
- protected performTask(description: string, parameters: any): Promise<string>;
79
- /**
80
- * Send message to router
81
- */
82
- private send;
83
- /**
84
- * Log message if verbose
85
- */
86
- private log;
87
- /**
88
- * Get agent info
89
- */
90
- getInfo(): {
91
- agentId: string;
92
- role: string;
93
- goal: string;
94
- backstory: string;
95
- capabilities: string[];
96
- };
97
- }
98
- /**
99
- * Lemma Crew - Multi-agent orchestration
100
- */
101
- export interface LemmaCrewOptions {
102
- routerUrl: string;
103
- agents: Omit<LemmaCrewConfig, 'routerUrl'>[];
104
- verbose?: boolean;
105
- }
106
- export declare class LemmaCrew {
107
- private agents;
108
- private config;
109
- constructor(config: LemmaCrewOptions);
110
- /**
111
- * Connect all agents
112
- */
113
- connect(): Promise<void>;
114
- /**
115
- * Disconnect all agents
116
- */
117
- disconnect(): void;
118
- /**
119
- * Execute a multi-agent workflow
120
- */
121
- kickoff(options: {
122
- task: string;
123
- process?: 'sequential' | 'hierarchical';
124
- }): Promise<any>;
125
- /**
126
- * Get all agents
127
- */
128
- getAgents(): LemmaCrewAgent[];
129
- }
130
- export default LemmaCrewAgent;