@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';
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,74 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LocalFsResolver = void 0;
7
+ /**
8
+ * Lemma API v2 — LocalFsResolver (Lane A)
9
+ *
10
+ * Reads the actual local filesystem the way the current MCP brain does (byte for
11
+ * byte): whole files are sha256'd over their utf8 content ('MISSING' when
12
+ * unreadable), and symbols are hashed through currentSymbolHashPair's raw +
13
+ * normalized (comment/whitespace-stripped) pair. This is the local MCP path — it
14
+ * never returns `null`, so the verifier's fail-closed branch is never tripped and
15
+ * local behaviour is unchanged from the pre-refactor code.
16
+ *
17
+ * This is the single hashing implementation shared by every local freshness
18
+ * consumer (TheBrainV2's symbol/claim tracking AND StateHashCache) — there is no
19
+ * second sha256-over-file implementation anywhere else. Keep it that way: a second
20
+ * one is how the two engines drift out of sync again.
21
+ */
22
+ const fs_1 = __importDefault(require("fs"));
23
+ const path_1 = __importDefault(require("path"));
24
+ const crypto_1 = __importDefault(require("crypto"));
25
+ const SymbolSurgicalContext_1 = require("../../utils/SymbolSurgicalContext");
26
+ class LocalFsResolver {
27
+ constructor(rootDir = process.cwd()) {
28
+ this.lane = 'A';
29
+ // Memoized by (mtimeMs, size) so an unchanged file isn't re-read+re-hashed on every
30
+ // lookup. This is a performance shortcut, not a weaker guarantee: any real content
31
+ // change updates mtime (every editor/git/fs op does), so a cache hit still requires
32
+ // the file to be byte-identical to what was last hashed — same fail-closed semantics,
33
+ // just skipping the read when the OS already told us nothing moved.
34
+ this.hashCache = new Map();
35
+ this.rootDir = rootDir;
36
+ }
37
+ /** Resolve a client/relative path the same way the pre-refactor Brain did: against the root. */
38
+ resolvePath(p) {
39
+ return path_1.default.isAbsolute(p) ? p : path_1.default.resolve(this.rootDir, p);
40
+ }
41
+ hashFile(pathStr) {
42
+ const abs = this.resolvePath(pathStr);
43
+ try {
44
+ const stat = fs_1.default.statSync(abs);
45
+ const cached = this.hashCache.get(abs);
46
+ if (cached && cached.mtimeMs === stat.mtimeMs && cached.size === stat.size) {
47
+ return cached.hash;
48
+ }
49
+ const hash = crypto_1.default.createHash('sha256').update(fs_1.default.readFileSync(abs, 'utf8')).digest('hex');
50
+ this.hashCache.set(abs, { mtimeMs: stat.mtimeMs, size: stat.size, hash });
51
+ return hash;
52
+ }
53
+ catch {
54
+ this.hashCache.delete(abs);
55
+ return 'MISSING';
56
+ }
57
+ }
58
+ hashSymbol(pathStr, symbolName) {
59
+ const abs = this.resolvePath(pathStr);
60
+ try {
61
+ const ctx = (0, SymbolSurgicalContext_1.getSymbolSurgicalContext)(path_1.default.dirname(abs), path_1.default.basename(abs), symbolName);
62
+ return {
63
+ raw: crypto_1.default.createHash('sha256').update(ctx.implementation).digest('hex'),
64
+ normalized: crypto_1.default.createHash('sha256').update((0, SymbolSurgicalContext_1.normalizeForFreshness)(ctx.implementation)).digest('hex'),
65
+ };
66
+ }
67
+ catch {
68
+ return { raw: 'MISSING', normalized: 'MISSING' };
69
+ }
70
+ }
71
+ }
72
+ exports.LocalFsResolver = LocalFsResolver;
73
+ exports.default = LocalFsResolver;
74
+ //# 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,4CAAoB;AACpB,gDAAwB;AACxB,oDAA4B;AAC5B,6EAAoG;AAKpG,MAAa,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,cAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAI,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,YAAE,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,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAE,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,IAAA,gDAAwB,EAAC,cAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,cAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;YACxF,OAAO;gBACL,GAAG,EAAE,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACzE,UAAU,EAAE,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAA,6CAAqB,EAAC,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;AAhDD,0CAgDC;AAED,kBAAe,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';
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,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SuppliedEvidenceResolver = void 0;
4
+ class SuppliedEvidenceResolver {
5
+ constructor(currentEvidence = { files: {}, symbols: {}, symbolsNormalized: {} }) {
6
+ this.lane = 'A';
7
+ this.currentEvidence = currentEvidence;
8
+ }
9
+ hashFile(path) {
10
+ const h = this.currentEvidence.files?.[path];
11
+ return h === undefined ? null : h;
12
+ }
13
+ hashSymbol(path, symbolName) {
14
+ const key = `${path}::${symbolName}`;
15
+ const raw = this.currentEvidence.symbols?.[key];
16
+ if (raw === undefined)
17
+ return null;
18
+ const normalized = this.currentEvidence.symbolsNormalized?.[key];
19
+ return { raw, normalized: normalized ?? 'MISSING' };
20
+ }
21
+ }
22
+ exports.SuppliedEvidenceResolver = SuppliedEvidenceResolver;
23
+ exports.default = SuppliedEvidenceResolver;
24
+ //# sourceMappingURL=SuppliedEvidenceResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SuppliedEvidenceResolver.js","sourceRoot":"","sources":["../../../../src/subconscious/freshness/SuppliedEvidenceResolver.ts"],"names":[],"mappings":";;;AAYA,MAAa,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;AApBD,4DAoBC;AAED,kBAAe,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';
9
+ export * from './SuppliedEvidenceResolver';
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,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * Lemma API v2 — freshness resolvers (Lane A stub)
19
+ *
20
+ * Origin of the interface contract: src/contracts/evidence.ts (Lane 0).
21
+ * Real implementation lands in Lane A. Until then, constructing or invoking a
22
+ * resolver here is a non-starter, by design.
23
+ */
24
+ __exportStar(require("./LocalFsResolver"), exports);
25
+ __exportStar(require("./SuppliedEvidenceResolver"), exports);
26
+ //# 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,oDAAkC;AAClC,6DAA2C"}
@@ -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,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectProjectName = detectProjectName;
7
+ exports.isProjectMismatch = isProjectMismatch;
8
+ /**
9
+ * ProjectIdentity — the one place that decides "what project is this directory".
10
+ *
11
+ * Used on both sides of the proxy daemon boundary: the MCP client (src/mcp/tools.ts)
12
+ * derives its own project's expected name from its cwd, and the daemon (src/cli/lemma-proxy.ts)
13
+ * derives its own the same way at startup. Keeping this in a single side-effect-free module
14
+ * (no express, no commander, no CLI argv parsing) means both sides can never drift into two
15
+ * different definitions of "project name" again, and it can be imported from a test without
16
+ * triggering lemma-proxy.ts's `program.parse(process.argv)` on import.
17
+ */
18
+ const fs_1 = __importDefault(require("fs"));
19
+ const path_1 = __importDefault(require("path"));
20
+ /** package.json's `name` field, or the directory basename if there's no usable package.json. */
21
+ function detectProjectName(cwd = process.cwd()) {
22
+ try {
23
+ const pkgPath = path_1.default.join(cwd, 'package.json');
24
+ if (fs_1.default.existsSync(pkgPath)) {
25
+ const pkg = JSON.parse(fs_1.default.readFileSync(pkgPath, 'utf8'));
26
+ if (pkg.name)
27
+ return pkg.name;
28
+ }
29
+ }
30
+ catch { }
31
+ return path_1.default.basename(cwd);
32
+ }
33
+ /**
34
+ * True when a caller's declared project doesn't match the project a shared daemon was
35
+ * started for. The proxy daemon is one process per machine (one global
36
+ * ~/.lemma-cache/proxy.port) — every MCP client on the box resolves to whichever daemon
37
+ * happens to be listening, not necessarily the one for its own project. An empty/absent
38
+ * expectedProject is treated as "unknown caller, not a mismatch" — the pre-fix,
39
+ * backward-compatible behavior for any client that doesn't send it yet.
40
+ */
41
+ function isProjectMismatch(expectedProject, actualProjectName) {
42
+ return !!expectedProject && expectedProject !== actualProjectName;
43
+ }
44
+ //# sourceMappingURL=ProjectIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectIdentity.js","sourceRoot":"","sources":["../../../src/utils/ProjectIdentity.ts"],"names":[],"mappings":";;;;;AAcA,8CASC;AAUD,8CAEC;AAnCD;;;;;;;;;GASG;AACH,4CAAoB;AACpB,gDAAwB;AAExB,gGAAgG;AAChG,SAAgB,iBAAiB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC3D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC/C,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,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,cAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,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"}
@@ -15,8 +15,18 @@ function getCachePath(projectRoot) {
15
15
  function loadCache(projectRoot) {
16
16
  try {
17
17
  const p = getCachePath(projectRoot);
18
- if (fs_1.default.existsSync(p))
19
- return JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
18
+ if (fs_1.default.existsSync(p)) {
19
+ const parsed = JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
20
+ // Callers do cache.patterns.find()/.push() unconditionally — a non-array `patterns`
21
+ // on disk (same class of corruption found live in .lemma/state-hash-cache.json: an
22
+ // object keyed by index instead of an array) must not crash every call downstream.
23
+ const patterns = Array.isArray(parsed?.patterns)
24
+ ? parsed.patterns
25
+ : parsed?.patterns && typeof parsed.patterns === 'object'
26
+ ? Object.values(parsed.patterns)
27
+ : [];
28
+ return { patterns, lastUpdated: typeof parsed?.lastUpdated === 'number' ? parsed.lastUpdated : Date.now() };
29
+ }
20
30
  }
21
31
  catch { }
22
32
  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"}
@@ -15,8 +15,16 @@ function getHistoryPath(projectRoot) {
15
15
  function loadHistory(projectRoot) {
16
16
  try {
17
17
  const p = getHistoryPath(projectRoot);
18
- if (fs_1.default.existsSync(p))
19
- return JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
18
+ if (fs_1.default.existsSync(p)) {
19
+ const parsed = JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
20
+ // Callers push()/slice() this unconditionally — a non-array on disk (same class of
21
+ // corruption found live in .lemma/state-hash-cache.json: an object keyed by index
22
+ // instead of an array) must not crash every call downstream.
23
+ if (Array.isArray(parsed))
24
+ return parsed;
25
+ if (parsed && typeof parsed === 'object')
26
+ return Object.values(parsed);
27
+ }
20
28
  }
21
29
  catch { }
22
30
  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"}
@@ -6,6 +6,11 @@
6
6
  * Unlike a fuzzy/vector cache, a hit here is only returned if every referenced
7
7
  * file's current sha256 matches the hash recorded when the answer was stored.
8
8
  * If any referenced file changed, it's a guaranteed MISS — no stale answers.
9
+ *
10
+ * Hashing is delegated to LocalFsResolver — the same primitive TheBrainV2 uses
11
+ * for symbol/claim freshness — so there is exactly one "how do we hash a file"
12
+ * implementation in the whole system, not two that can silently drift apart.
13
+ * This module only owns the query-keyed lookup/store shape on top of it.
9
14
  */
10
15
  var __importDefault = (this && this.__importDefault) || function (mod) {
11
16
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -16,6 +21,7 @@ exports.storeStateHash = storeStateHash;
16
21
  const fs_1 = __importDefault(require("fs"));
17
22
  const path_1 = __importDefault(require("path"));
18
23
  const crypto_1 = __importDefault(require("crypto"));
24
+ const LocalFsResolver_1 = require("../subconscious/freshness/LocalFsResolver");
19
25
  const CACHE_FILE = '.lemma/state-hash-cache.json';
20
26
  function getCachePath(projectRoot) {
21
27
  return path_1.default.join(projectRoot, CACHE_FILE);
@@ -23,12 +29,29 @@ function getCachePath(projectRoot) {
23
29
  function loadCache(projectRoot) {
24
30
  try {
25
31
  const p = getCachePath(projectRoot);
26
- if (fs_1.default.existsSync(p))
27
- return JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
32
+ if (fs_1.default.existsSync(p)) {
33
+ const parsed = JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
34
+ return { entries: normalizeEntries(parsed?.entries) };
35
+ }
28
36
  }
29
37
  catch { }
30
38
  return { entries: [] };
31
39
  }
40
+ /**
41
+ * Found live, in this repo's own .lemma/state-hash-cache.json: a real on-disk file whose
42
+ * `entries` was an object keyed by index ({"0": {...}}) instead of an array — an older/
43
+ * different writer's format, or hand-editing, silently produced this. lookupStateHash and
44
+ * storeStateHash both call array methods (.find/.filter/.push) on `entries` unconditionally,
45
+ * so that shape crashed every call against this project until this normalized it. Recovers
46
+ * an object-keyed shape via Object.values instead of discarding real cached answers.
47
+ */
48
+ function normalizeEntries(entries) {
49
+ if (Array.isArray(entries))
50
+ return entries;
51
+ if (entries && typeof entries === 'object')
52
+ return Object.values(entries);
53
+ return [];
54
+ }
32
55
  function saveCache(projectRoot, data) {
33
56
  try {
34
57
  const dir = path_1.default.join(projectRoot, '.lemma');
@@ -38,24 +61,25 @@ function saveCache(projectRoot, data) {
38
61
  }
39
62
  catch { }
40
63
  }
41
- function sha256(content) {
42
- return crypto_1.default.createHash('sha256').update(content).digest('hex');
64
+ // One resolver per project root, reused across lookups so LocalFsResolver's
65
+ // mtime/size hash memoization actually pays off within a session instead of
66
+ // being thrown away on every call.
67
+ const resolverCache = new Map();
68
+ function getResolver(projectRoot) {
69
+ let resolver = resolverCache.get(projectRoot);
70
+ if (!resolver) {
71
+ resolver = new LocalFsResolver_1.LocalFsResolver(projectRoot);
72
+ resolverCache.set(projectRoot, resolver);
73
+ }
74
+ return resolver;
43
75
  }
44
76
  function hashFiles(projectRoot, filePaths) {
77
+ const resolver = getResolver(projectRoot);
45
78
  const hashes = {};
46
79
  for (const rel of filePaths) {
47
- try {
48
- const resolved = path_1.default.resolve(projectRoot, rel);
49
- if (fs_1.default.existsSync(resolved)) {
50
- hashes[rel] = sha256(fs_1.default.readFileSync(resolved, 'utf8'));
51
- }
52
- else {
53
- hashes[rel] = 'MISSING';
54
- }
55
- }
56
- catch {
57
- hashes[rel] = 'ERROR';
58
- }
80
+ // LocalFsResolver never returns null for a real path (that's the cloud-only
81
+ // fail-closed signal) — 'MISSING' is its own sentinel for an unreadable file.
82
+ hashes[rel] = resolver.hashFile(rel) ?? 'MISSING';
59
83
  }
60
84
  return hashes;
61
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StateHashCache.js","sourceRoot":"","sources":["../../../src/utils/StateHashCache.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;AAqEH,0CA4BC;AAGD,wCAwBC;AA1HD,4CAAoB;AACpB,gDAAwB;AACxB,oDAA4B;AAE5B,MAAM,UAAU,GAAG,8BAA8B,CAAC;AAelD,SAAS,YAAY,CAAC,WAAmB;IACvC,OAAO,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS,CAAC,WAAmB;IACpC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,YAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,WAAmB,EAAE,IAAwB;IAC9D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,YAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,YAAE,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED,SAAS,MAAM,CAAC,OAAe;IAC7B,OAAO,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,SAAS,CAAC,WAAmB,EAAE,SAAmB;IACzD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAChD,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAQD,yFAAyF;AACzF,SAAgB,eAAe,CAC7B,WAAmB,EACnB,KAAa,EACb,SAAmB;IAEnB,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEnD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,CAAC;IACzF,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IAE/E,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,+BAA+B,IAAI,EAAE,EAAE,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,6EAA6E;IAC7E,iFAAiF;IACjF,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,+CAA+C,CAAC,EAAE,EAAE,CAAC;QACxF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;IAChB,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,6EAA6E;AAC7E,SAAgB,cAAc,CAC5B,WAAmB,EACnB,KAAa,EACb,MAAc,EACd,SAAmB;IAEnB,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,KAAK,GAAmB;QAC5B,EAAE,EAAE,gBAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzC,KAAK;QACL,MAAM;QACN,UAAU;QACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE,CAAC;KACR,CAAC;IACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACvG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,mDAAmD;IACnD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"StateHashCache.js","sourceRoot":"","sources":["../../../src/utils/StateHashCache.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lemma-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/lemma-proxy.ts"],"names":[],"mappings":";AA4cA,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA4DvF;AA+mED,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8KhL"}
1
+ {"version":3,"file":"lemma-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/lemma-proxy.ts"],"names":[],"mappings":";AA0cA,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA4DvF;AA4nED,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8KhL"}
@@ -43,6 +43,7 @@ import { AgentMultiplexer } from '../proxy/AgentMultiplexer.js';
43
43
  import { SseRelay } from '../proxy/SseRelay.js';
44
44
  import { KeyManager } from '../proxy/KeyManager.js';
45
45
  import { Gatekeeper } from '../proxy/Gatekeeper.js';
46
+ import { detectProjectName, isProjectMismatch } from '../utils/ProjectIdentity.js';
46
47
  import { ProjectRegistry } from '../proxy/ProjectRegistry.js';
47
48
  import { shouldInject, buildMinimalContext, buildDeepContext, sniffProjectFromMessages } from '../proxy/ContextInjector.js';
48
49
  import { savingsLedger } from '../utils/SavingsLedger.js';
@@ -93,18 +94,13 @@ function writeJson(filePath, data) {
93
94
  function getCollectionName(projectName) {
94
95
  return `lemma-cache-${projectName}`;
95
96
  }
97
+ // detectProject/isProjectMismatch live in ../utils/ProjectIdentity — a side-effect-free
98
+ // module shared with src/mcp/tools.ts, so the client and this daemon can never define
99
+ // "project name" two different ways again, and so a test can import the comparison logic
100
+ // without pulling in this whole CLI (which parses process.argv on import — see bottom of
101
+ // this file).
96
102
  function detectProject() {
97
- const cwd = process.cwd();
98
- const pkgPath = path.join(cwd, 'package.json');
99
- if (fs.existsSync(pkgPath)) {
100
- try {
101
- const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
102
- if (pkg.name)
103
- return pkg.name;
104
- }
105
- catch { }
106
- }
107
- return path.basename(cwd);
103
+ return detectProjectName(process.cwd());
108
104
  }
109
105
  function ensureProjectDir(projectName) {
110
106
  const hash = crypto.createHash('sha1').update(projectName).digest('hex').slice(0, 12);
@@ -1344,6 +1340,18 @@ class LemmaServer {
1344
1340
  // Dynamic Zero-Shot Onboarding mental model builder
1345
1341
  this.app.get('/api/project/onboarding', async (req, res) => {
1346
1342
  try {
1343
+ // This daemon is one shared process per machine — its project identity was fixed
1344
+ // at `lemma start` time to whatever cwd it was launched from, not to whichever
1345
+ // project's MCP client happens to be asking. A caller from a DIFFERENT project
1346
+ // still resolves the same global proxy.port and would otherwise get served this
1347
+ // daemon's stack/files/architecture memories as if they were its own. When the
1348
+ // caller tells us what project it expects (see detectExpectedProjectName in
1349
+ // src/mcp/tools.ts) and it doesn't match, decline rather than answer wrong —
1350
+ // the caller falls back to its own local (correctly-scoped) generator.
1351
+ const expectedProject = typeof req.query.expectedProject === 'string' ? req.query.expectedProject : null;
1352
+ if (isProjectMismatch(expectedProject, this.projectName)) {
1353
+ return res.json({ success: false, mismatch: true, servingProject: this.projectName });
1354
+ }
1347
1355
  const cwd = process.cwd();
1348
1356
  // 1. Parse package.json
1349
1357
  let pkg = {};