@nxuss/lemma 1.39.0 → 1.41.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 (383) hide show
  1. package/README.md +45 -14
  2. package/bin/brain-ingest.js +41 -0
  3. package/bin/init.js +92 -92
  4. package/bin/postinstall.js +58 -4
  5. package/dashboard/dist/assets/index-Ca05LJvs.js +453 -0
  6. package/dashboard/dist/assets/{index-DNTQXLER.css → index-DdEVyDRj.css} +1 -1
  7. package/dashboard/dist/index.html +2 -2
  8. package/dist/cjs/cli/hostHooks.d.ts +14 -1
  9. package/dist/cjs/cli/hostHooks.d.ts.map +1 -1
  10. package/dist/cjs/cli/hostHooks.js +53 -6
  11. package/dist/cjs/cli/hostHooks.js.map +1 -1
  12. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  13. package/dist/cjs/cli/lemma-proxy.js +29 -10
  14. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  15. package/dist/cjs/contracts/evidence.d.ts +8 -1
  16. package/dist/cjs/contracts/evidence.d.ts.map +1 -1
  17. package/dist/cjs/mcp/cognitiveMap.d.ts.map +1 -1
  18. package/dist/cjs/mcp/cognitiveMap.js +6 -2
  19. package/dist/cjs/mcp/cognitiveMap.js.map +1 -1
  20. package/dist/cjs/mcp/index.js +21 -0
  21. package/dist/cjs/mcp/index.js.map +1 -1
  22. package/dist/cjs/mcp/prompts.d.ts +1 -1
  23. package/dist/cjs/mcp/prompts.d.ts.map +1 -1
  24. package/dist/cjs/mcp/prompts.js +6 -16
  25. package/dist/cjs/mcp/prompts.js.map +1 -1
  26. package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
  27. package/dist/cjs/mcp/tool-profiles.js +8 -4
  28. package/dist/cjs/mcp/tool-profiles.js.map +1 -1
  29. package/dist/cjs/mcp/tools/context-tools.d.ts.map +1 -1
  30. package/dist/cjs/mcp/tools/context-tools.js +21 -17
  31. package/dist/cjs/mcp/tools/context-tools.js.map +1 -1
  32. package/dist/cjs/mcp/tools/devtools.d.ts.map +1 -1
  33. package/dist/cjs/mcp/tools/devtools.js +11 -1
  34. package/dist/cjs/mcp/tools/devtools.js.map +1 -1
  35. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
  36. package/dist/cjs/mcp/tools/memory.js +82 -18
  37. package/dist/cjs/mcp/tools/memory.js.map +1 -1
  38. package/dist/cjs/mcp/tools/refactor.d.ts.map +1 -1
  39. package/dist/cjs/mcp/tools/refactor.js +129 -32
  40. package/dist/cjs/mcp/tools/refactor.js.map +1 -1
  41. package/dist/cjs/mcp/tools/workspace.d.ts.map +1 -1
  42. package/dist/cjs/mcp/tools/workspace.js +192 -49
  43. package/dist/cjs/mcp/tools/workspace.js.map +1 -1
  44. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  45. package/dist/cjs/mcp/tools.js +95 -34
  46. package/dist/cjs/mcp/tools.js.map +1 -1
  47. package/dist/cjs/mcp/utils.d.ts.map +1 -1
  48. package/dist/cjs/mcp/utils.js +6 -1
  49. package/dist/cjs/mcp/utils.js.map +1 -1
  50. package/dist/cjs/mcp/workspaceShared.d.ts.map +1 -1
  51. package/dist/cjs/mcp/workspaceShared.js +14 -9
  52. package/dist/cjs/mcp/workspaceShared.js.map +1 -1
  53. package/dist/cjs/proxy/KeyManager.d.ts +10 -0
  54. package/dist/cjs/proxy/KeyManager.d.ts.map +1 -1
  55. package/dist/cjs/proxy/KeyManager.js +45 -8
  56. package/dist/cjs/proxy/KeyManager.js.map +1 -1
  57. package/dist/cjs/proxy/ProjectStore.d.ts.map +1 -1
  58. package/dist/cjs/proxy/ProjectStore.js +9 -6
  59. package/dist/cjs/proxy/ProjectStore.js.map +1 -1
  60. package/dist/cjs/security/SemanticScrubber.d.ts.map +1 -1
  61. package/dist/cjs/security/SemanticScrubber.js +19 -1
  62. package/dist/cjs/security/SemanticScrubber.js.map +1 -1
  63. package/dist/cjs/subconscious/HostRecall.d.ts +7 -5
  64. package/dist/cjs/subconscious/HostRecall.d.ts.map +1 -1
  65. package/dist/cjs/subconscious/HostRecall.js +130 -18
  66. package/dist/cjs/subconscious/HostRecall.js.map +1 -1
  67. package/dist/cjs/subconscious/NarrowEvidence.d.ts +6 -0
  68. package/dist/cjs/subconscious/NarrowEvidence.d.ts.map +1 -1
  69. package/dist/cjs/subconscious/NarrowEvidence.js +32 -47
  70. package/dist/cjs/subconscious/NarrowEvidence.js.map +1 -1
  71. package/dist/cjs/subconscious/TheBrainV2.d.ts +17 -1
  72. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  73. package/dist/cjs/subconscious/TheBrainV2.js +101 -20
  74. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  75. package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts +3 -0
  76. package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts.map +1 -1
  77. package/dist/cjs/subconscious/freshness/LocalFsResolver.js +46 -13
  78. package/dist/cjs/subconscious/freshness/LocalFsResolver.js.map +1 -1
  79. package/dist/cjs/utils/AffectedTests.d.ts +1 -5
  80. package/dist/cjs/utils/AffectedTests.d.ts.map +1 -1
  81. package/dist/cjs/utils/AffectedTests.js +5 -37
  82. package/dist/cjs/utils/AffectedTests.js.map +1 -1
  83. package/dist/cjs/utils/AtomicFile.d.ts +14 -0
  84. package/dist/cjs/utils/AtomicFile.d.ts.map +1 -0
  85. package/dist/cjs/utils/AtomicFile.js +44 -0
  86. package/dist/cjs/utils/AtomicFile.js.map +1 -0
  87. package/dist/cjs/utils/AutoContextBundle.js +1 -1
  88. package/dist/cjs/utils/AutoContextBundle.js.map +1 -1
  89. package/dist/cjs/utils/BulkFileDigest.js +1 -1
  90. package/dist/cjs/utils/BulkFileDigest.js.map +1 -1
  91. package/dist/cjs/utils/CommandOutputDistiller.d.ts +10 -0
  92. package/dist/cjs/utils/CommandOutputDistiller.d.ts.map +1 -1
  93. package/dist/cjs/utils/CommandOutputDistiller.js +40 -2
  94. package/dist/cjs/utils/CommandOutputDistiller.js.map +1 -1
  95. package/dist/cjs/utils/ContextSqueezer.d.ts +49 -5
  96. package/dist/cjs/utils/ContextSqueezer.d.ts.map +1 -1
  97. package/dist/cjs/utils/ContextSqueezer.js +245 -24
  98. package/dist/cjs/utils/ContextSqueezer.js.map +1 -1
  99. package/dist/cjs/utils/FileLock.d.ts +2 -0
  100. package/dist/cjs/utils/FileLock.d.ts.map +1 -0
  101. package/dist/cjs/utils/FileLock.js +32 -0
  102. package/dist/cjs/utils/FileLock.js.map +1 -0
  103. package/dist/cjs/utils/FileOutline.d.ts +1 -1
  104. package/dist/cjs/utils/FileOutline.d.ts.map +1 -1
  105. package/dist/cjs/utils/FileOutline.js +5 -1
  106. package/dist/cjs/utils/FileOutline.js.map +1 -1
  107. package/dist/cjs/utils/FixCapture.d.ts.map +1 -1
  108. package/dist/cjs/utils/FixCapture.js +60 -3
  109. package/dist/cjs/utils/FixCapture.js.map +1 -1
  110. package/dist/cjs/utils/GitChanges.d.ts +11 -0
  111. package/dist/cjs/utils/GitChanges.d.ts.map +1 -0
  112. package/dist/cjs/utils/GitChanges.js +44 -0
  113. package/dist/cjs/utils/GitChanges.js.map +1 -0
  114. package/dist/cjs/utils/JsonKeys.d.ts +17 -0
  115. package/dist/cjs/utils/JsonKeys.d.ts.map +1 -0
  116. package/dist/cjs/utils/JsonKeys.js +75 -0
  117. package/dist/cjs/utils/JsonKeys.js.map +1 -0
  118. package/dist/cjs/utils/LineNumberMap.d.ts.map +1 -1
  119. package/dist/cjs/utils/LineNumberMap.js +27 -0
  120. package/dist/cjs/utils/LineNumberMap.js.map +1 -1
  121. package/dist/cjs/utils/LocalExclude.d.ts +3 -0
  122. package/dist/cjs/utils/LocalExclude.d.ts.map +1 -0
  123. package/dist/cjs/utils/LocalExclude.js +68 -0
  124. package/dist/cjs/utils/LocalExclude.js.map +1 -0
  125. package/dist/cjs/utils/OtherLanguageSymbols.d.ts.map +1 -1
  126. package/dist/cjs/utils/OtherLanguageSymbols.js +0 -7
  127. package/dist/cjs/utils/OtherLanguageSymbols.js.map +1 -1
  128. package/dist/cjs/utils/OutputDelta.d.ts +14 -2
  129. package/dist/cjs/utils/OutputDelta.d.ts.map +1 -1
  130. package/dist/cjs/utils/OutputDelta.js +22 -15
  131. package/dist/cjs/utils/OutputDelta.js.map +1 -1
  132. package/dist/cjs/utils/PatchMatcher.d.ts.map +1 -1
  133. package/dist/cjs/utils/PatchMatcher.js +26 -0
  134. package/dist/cjs/utils/PatchMatcher.js.map +1 -1
  135. package/dist/cjs/utils/ProLicense.d.ts +2 -0
  136. package/dist/cjs/utils/ProLicense.d.ts.map +1 -0
  137. package/dist/cjs/utils/ProLicense.js +31 -0
  138. package/dist/cjs/utils/ProLicense.js.map +1 -0
  139. package/dist/cjs/utils/RevivalThrottle.d.ts +9 -0
  140. package/dist/cjs/utils/RevivalThrottle.d.ts.map +1 -0
  141. package/dist/cjs/utils/RevivalThrottle.js +25 -0
  142. package/dist/cjs/utils/RevivalThrottle.js.map +1 -0
  143. package/dist/cjs/utils/RoiLedger.d.ts.map +1 -1
  144. package/dist/cjs/utils/RoiLedger.js +7 -3
  145. package/dist/cjs/utils/RoiLedger.js.map +1 -1
  146. package/dist/cjs/utils/SavingsLedger.d.ts +58 -18
  147. package/dist/cjs/utils/SavingsLedger.d.ts.map +1 -1
  148. package/dist/cjs/utils/SavingsLedger.js +333 -177
  149. package/dist/cjs/utils/SavingsLedger.js.map +1 -1
  150. package/dist/cjs/utils/SearchCache.d.ts +2 -2
  151. package/dist/cjs/utils/SearchCache.d.ts.map +1 -1
  152. package/dist/cjs/utils/SearchCache.js +8 -6
  153. package/dist/cjs/utils/SearchCache.js.map +1 -1
  154. package/dist/cjs/utils/SessionCapture.d.ts +65 -0
  155. package/dist/cjs/utils/SessionCapture.d.ts.map +1 -0
  156. package/dist/cjs/utils/SessionCapture.js +339 -0
  157. package/dist/cjs/utils/SessionCapture.js.map +1 -0
  158. package/dist/cjs/utils/SharedLedgerStore.d.ts.map +1 -1
  159. package/dist/cjs/utils/SharedLedgerStore.js +2 -1
  160. package/dist/cjs/utils/SharedLedgerStore.js.map +1 -1
  161. package/dist/cjs/utils/StaleDelta.d.ts +2 -0
  162. package/dist/cjs/utils/StaleDelta.d.ts.map +1 -0
  163. package/dist/cjs/utils/StaleDelta.js +60 -0
  164. package/dist/cjs/utils/StaleDelta.js.map +1 -0
  165. package/dist/cjs/utils/SurgicalASTInsert.d.ts.map +1 -1
  166. package/dist/cjs/utils/SurgicalASTInsert.js +2 -1
  167. package/dist/cjs/utils/SurgicalASTInsert.js.map +1 -1
  168. package/dist/cjs/utils/SymbolSurgicalContext.d.ts +2 -2
  169. package/dist/cjs/utils/SymbolSurgicalContext.d.ts.map +1 -1
  170. package/dist/cjs/utils/SymbolSurgicalContext.js +29 -62
  171. package/dist/cjs/utils/SymbolSurgicalContext.js.map +1 -1
  172. package/dist/cjs/utils/TokenBudgetedReader.d.ts.map +1 -1
  173. package/dist/cjs/utils/TokenBudgetedReader.js +56 -15
  174. package/dist/cjs/utils/TokenBudgetedReader.js.map +1 -1
  175. package/dist/cjs/utils/Utf8Guard.d.ts +23 -0
  176. package/dist/cjs/utils/Utf8Guard.d.ts.map +1 -0
  177. package/dist/cjs/utils/Utf8Guard.js +81 -0
  178. package/dist/cjs/utils/Utf8Guard.js.map +1 -0
  179. package/dist/cjs/utils/WorkspaceSearch.d.ts +8 -1
  180. package/dist/cjs/utils/WorkspaceSearch.d.ts.map +1 -1
  181. package/dist/cjs/utils/WorkspaceSearch.js +101 -13
  182. package/dist/cjs/utils/WorkspaceSearch.js.map +1 -1
  183. package/dist/cjs/utils/reportSavings.d.ts +3 -0
  184. package/dist/cjs/utils/reportSavings.d.ts.map +1 -1
  185. package/dist/cjs/utils/reportSavings.js +44 -5
  186. package/dist/cjs/utils/reportSavings.js.map +1 -1
  187. package/dist/cjs/utils/tsLoader.d.ts +5 -0
  188. package/dist/cjs/utils/tsLoader.d.ts.map +1 -0
  189. package/dist/cjs/utils/tsLoader.js +15 -0
  190. package/dist/cjs/utils/tsLoader.js.map +1 -0
  191. package/dist/esm/cli/hostHooks.d.ts +14 -1
  192. package/dist/esm/cli/hostHooks.d.ts.map +1 -1
  193. package/dist/esm/cli/hostHooks.js +52 -5
  194. package/dist/esm/cli/hostHooks.js.map +1 -1
  195. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  196. package/dist/esm/cli/lemma-proxy.js +30 -11
  197. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  198. package/dist/esm/contracts/evidence.d.ts +8 -1
  199. package/dist/esm/contracts/evidence.d.ts.map +1 -1
  200. package/dist/esm/mcp/cognitiveMap.d.ts.map +1 -1
  201. package/dist/esm/mcp/cognitiveMap.js +6 -2
  202. package/dist/esm/mcp/cognitiveMap.js.map +1 -1
  203. package/dist/esm/mcp/index.js +22 -1
  204. package/dist/esm/mcp/index.js.map +1 -1
  205. package/dist/esm/mcp/prompts.d.ts +1 -1
  206. package/dist/esm/mcp/prompts.d.ts.map +1 -1
  207. package/dist/esm/mcp/prompts.js +6 -16
  208. package/dist/esm/mcp/prompts.js.map +1 -1
  209. package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
  210. package/dist/esm/mcp/tool-profiles.js +8 -4
  211. package/dist/esm/mcp/tool-profiles.js.map +1 -1
  212. package/dist/esm/mcp/tools/context-tools.d.ts.map +1 -1
  213. package/dist/esm/mcp/tools/context-tools.js +21 -17
  214. package/dist/esm/mcp/tools/context-tools.js.map +1 -1
  215. package/dist/esm/mcp/tools/devtools.d.ts.map +1 -1
  216. package/dist/esm/mcp/tools/devtools.js +11 -1
  217. package/dist/esm/mcp/tools/devtools.js.map +1 -1
  218. package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
  219. package/dist/esm/mcp/tools/memory.js +83 -19
  220. package/dist/esm/mcp/tools/memory.js.map +1 -1
  221. package/dist/esm/mcp/tools/refactor.d.ts.map +1 -1
  222. package/dist/esm/mcp/tools/refactor.js +129 -32
  223. package/dist/esm/mcp/tools/refactor.js.map +1 -1
  224. package/dist/esm/mcp/tools/workspace.d.ts.map +1 -1
  225. package/dist/esm/mcp/tools/workspace.js +193 -50
  226. package/dist/esm/mcp/tools/workspace.js.map +1 -1
  227. package/dist/esm/mcp/tools.d.ts.map +1 -1
  228. package/dist/esm/mcp/tools.js +94 -33
  229. package/dist/esm/mcp/tools.js.map +1 -1
  230. package/dist/esm/mcp/utils.d.ts.map +1 -1
  231. package/dist/esm/mcp/utils.js +6 -1
  232. package/dist/esm/mcp/utils.js.map +1 -1
  233. package/dist/esm/mcp/workspaceShared.d.ts.map +1 -1
  234. package/dist/esm/mcp/workspaceShared.js +14 -9
  235. package/dist/esm/mcp/workspaceShared.js.map +1 -1
  236. package/dist/esm/proxy/KeyManager.d.ts +10 -0
  237. package/dist/esm/proxy/KeyManager.d.ts.map +1 -1
  238. package/dist/esm/proxy/KeyManager.js +43 -6
  239. package/dist/esm/proxy/KeyManager.js.map +1 -1
  240. package/dist/esm/proxy/ProjectStore.d.ts.map +1 -1
  241. package/dist/esm/proxy/ProjectStore.js +9 -6
  242. package/dist/esm/proxy/ProjectStore.js.map +1 -1
  243. package/dist/esm/security/SemanticScrubber.d.ts.map +1 -1
  244. package/dist/esm/security/SemanticScrubber.js +19 -1
  245. package/dist/esm/security/SemanticScrubber.js.map +1 -1
  246. package/dist/esm/subconscious/HostRecall.d.ts +7 -5
  247. package/dist/esm/subconscious/HostRecall.d.ts.map +1 -1
  248. package/dist/esm/subconscious/HostRecall.js +130 -19
  249. package/dist/esm/subconscious/HostRecall.js.map +1 -1
  250. package/dist/esm/subconscious/NarrowEvidence.d.ts +6 -0
  251. package/dist/esm/subconscious/NarrowEvidence.d.ts.map +1 -1
  252. package/dist/esm/subconscious/NarrowEvidence.js +24 -7
  253. package/dist/esm/subconscious/NarrowEvidence.js.map +1 -1
  254. package/dist/esm/subconscious/TheBrainV2.d.ts +17 -1
  255. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  256. package/dist/esm/subconscious/TheBrainV2.js +101 -20
  257. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  258. package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts +3 -0
  259. package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts.map +1 -1
  260. package/dist/esm/subconscious/freshness/LocalFsResolver.js +46 -13
  261. package/dist/esm/subconscious/freshness/LocalFsResolver.js.map +1 -1
  262. package/dist/esm/utils/AffectedTests.d.ts +1 -5
  263. package/dist/esm/utils/AffectedTests.d.ts.map +1 -1
  264. package/dist/esm/utils/AffectedTests.js +2 -35
  265. package/dist/esm/utils/AffectedTests.js.map +1 -1
  266. package/dist/esm/utils/AtomicFile.d.ts +14 -0
  267. package/dist/esm/utils/AtomicFile.d.ts.map +1 -0
  268. package/dist/esm/utils/AtomicFile.js +37 -0
  269. package/dist/esm/utils/AtomicFile.js.map +1 -0
  270. package/dist/esm/utils/AutoContextBundle.js +1 -1
  271. package/dist/esm/utils/AutoContextBundle.js.map +1 -1
  272. package/dist/esm/utils/BulkFileDigest.js +1 -1
  273. package/dist/esm/utils/BulkFileDigest.js.map +1 -1
  274. package/dist/esm/utils/CommandOutputDistiller.d.ts +10 -0
  275. package/dist/esm/utils/CommandOutputDistiller.d.ts.map +1 -1
  276. package/dist/esm/utils/CommandOutputDistiller.js +39 -2
  277. package/dist/esm/utils/CommandOutputDistiller.js.map +1 -1
  278. package/dist/esm/utils/ContextSqueezer.d.ts +49 -5
  279. package/dist/esm/utils/ContextSqueezer.d.ts.map +1 -1
  280. package/dist/esm/utils/ContextSqueezer.js +242 -24
  281. package/dist/esm/utils/ContextSqueezer.js.map +1 -1
  282. package/dist/esm/utils/FileLock.d.ts +2 -0
  283. package/dist/esm/utils/FileLock.d.ts.map +1 -0
  284. package/dist/esm/utils/FileLock.js +29 -0
  285. package/dist/esm/utils/FileLock.js.map +1 -0
  286. package/dist/esm/utils/FileOutline.d.ts +1 -1
  287. package/dist/esm/utils/FileOutline.d.ts.map +1 -1
  288. package/dist/esm/utils/FileOutline.js +5 -1
  289. package/dist/esm/utils/FileOutline.js.map +1 -1
  290. package/dist/esm/utils/FixCapture.d.ts.map +1 -1
  291. package/dist/esm/utils/FixCapture.js +59 -2
  292. package/dist/esm/utils/FixCapture.js.map +1 -1
  293. package/dist/esm/utils/GitChanges.d.ts +11 -0
  294. package/dist/esm/utils/GitChanges.d.ts.map +1 -0
  295. package/dist/esm/utils/GitChanges.js +41 -0
  296. package/dist/esm/utils/GitChanges.js.map +1 -0
  297. package/dist/esm/utils/JsonKeys.d.ts +17 -0
  298. package/dist/esm/utils/JsonKeys.d.ts.map +1 -0
  299. package/dist/esm/utils/JsonKeys.js +71 -0
  300. package/dist/esm/utils/JsonKeys.js.map +1 -0
  301. package/dist/esm/utils/LineNumberMap.d.ts.map +1 -1
  302. package/dist/esm/utils/LineNumberMap.js +27 -0
  303. package/dist/esm/utils/LineNumberMap.js.map +1 -1
  304. package/dist/esm/utils/LocalExclude.d.ts +3 -0
  305. package/dist/esm/utils/LocalExclude.d.ts.map +1 -0
  306. package/dist/esm/utils/LocalExclude.js +62 -0
  307. package/dist/esm/utils/LocalExclude.js.map +1 -0
  308. package/dist/esm/utils/OtherLanguageSymbols.d.ts.map +1 -1
  309. package/dist/esm/utils/OtherLanguageSymbols.js +0 -7
  310. package/dist/esm/utils/OtherLanguageSymbols.js.map +1 -1
  311. package/dist/esm/utils/OutputDelta.d.ts +14 -2
  312. package/dist/esm/utils/OutputDelta.d.ts.map +1 -1
  313. package/dist/esm/utils/OutputDelta.js +22 -15
  314. package/dist/esm/utils/OutputDelta.js.map +1 -1
  315. package/dist/esm/utils/PatchMatcher.d.ts.map +1 -1
  316. package/dist/esm/utils/PatchMatcher.js +26 -0
  317. package/dist/esm/utils/PatchMatcher.js.map +1 -1
  318. package/dist/esm/utils/ProLicense.d.ts +2 -0
  319. package/dist/esm/utils/ProLicense.d.ts.map +1 -0
  320. package/dist/esm/utils/ProLicense.js +25 -0
  321. package/dist/esm/utils/ProLicense.js.map +1 -0
  322. package/dist/esm/utils/RevivalThrottle.d.ts +9 -0
  323. package/dist/esm/utils/RevivalThrottle.d.ts.map +1 -0
  324. package/dist/esm/utils/RevivalThrottle.js +22 -0
  325. package/dist/esm/utils/RevivalThrottle.js.map +1 -0
  326. package/dist/esm/utils/RoiLedger.d.ts.map +1 -1
  327. package/dist/esm/utils/RoiLedger.js +7 -3
  328. package/dist/esm/utils/RoiLedger.js.map +1 -1
  329. package/dist/esm/utils/SavingsLedger.d.ts +58 -18
  330. package/dist/esm/utils/SavingsLedger.d.ts.map +1 -1
  331. package/dist/esm/utils/SavingsLedger.js +333 -177
  332. package/dist/esm/utils/SavingsLedger.js.map +1 -1
  333. package/dist/esm/utils/SearchCache.d.ts +2 -2
  334. package/dist/esm/utils/SearchCache.d.ts.map +1 -1
  335. package/dist/esm/utils/SearchCache.js +8 -6
  336. package/dist/esm/utils/SearchCache.js.map +1 -1
  337. package/dist/esm/utils/SessionCapture.d.ts +65 -0
  338. package/dist/esm/utils/SessionCapture.d.ts.map +1 -0
  339. package/dist/esm/utils/SessionCapture.js +328 -0
  340. package/dist/esm/utils/SessionCapture.js.map +1 -0
  341. package/dist/esm/utils/SharedLedgerStore.d.ts.map +1 -1
  342. package/dist/esm/utils/SharedLedgerStore.js +2 -1
  343. package/dist/esm/utils/SharedLedgerStore.js.map +1 -1
  344. package/dist/esm/utils/StaleDelta.d.ts +2 -0
  345. package/dist/esm/utils/StaleDelta.d.ts.map +1 -0
  346. package/dist/esm/utils/StaleDelta.js +54 -0
  347. package/dist/esm/utils/StaleDelta.js.map +1 -0
  348. package/dist/esm/utils/SurgicalASTInsert.d.ts.map +1 -1
  349. package/dist/esm/utils/SurgicalASTInsert.js +2 -1
  350. package/dist/esm/utils/SurgicalASTInsert.js.map +1 -1
  351. package/dist/esm/utils/SymbolSurgicalContext.d.ts +2 -2
  352. package/dist/esm/utils/SymbolSurgicalContext.d.ts.map +1 -1
  353. package/dist/esm/utils/SymbolSurgicalContext.js +1 -1
  354. package/dist/esm/utils/SymbolSurgicalContext.js.map +1 -1
  355. package/dist/esm/utils/TokenBudgetedReader.d.ts.map +1 -1
  356. package/dist/esm/utils/TokenBudgetedReader.js +56 -15
  357. package/dist/esm/utils/TokenBudgetedReader.js.map +1 -1
  358. package/dist/esm/utils/Utf8Guard.d.ts +23 -0
  359. package/dist/esm/utils/Utf8Guard.d.ts.map +1 -0
  360. package/dist/esm/utils/Utf8Guard.js +74 -0
  361. package/dist/esm/utils/Utf8Guard.js.map +1 -0
  362. package/dist/esm/utils/WorkspaceSearch.d.ts +8 -1
  363. package/dist/esm/utils/WorkspaceSearch.d.ts.map +1 -1
  364. package/dist/esm/utils/WorkspaceSearch.js +100 -13
  365. package/dist/esm/utils/WorkspaceSearch.js.map +1 -1
  366. package/dist/esm/utils/reportSavings.d.ts +3 -0
  367. package/dist/esm/utils/reportSavings.d.ts.map +1 -1
  368. package/dist/esm/utils/reportSavings.js +42 -5
  369. package/dist/esm/utils/reportSavings.js.map +1 -1
  370. package/dist/esm/utils/tsLoader.d.ts +5 -0
  371. package/dist/esm/utils/tsLoader.d.ts.map +1 -0
  372. package/dist/esm/utils/tsLoader.js +13 -0
  373. package/dist/esm/utils/tsLoader.js.map +1 -0
  374. package/package.json +5 -5
  375. package/dashboard/dist/assets/index-DzL_Zu3m.js +0 -452
  376. package/dist/cjs/examples/basic-usage.d.ts +0 -12
  377. package/dist/cjs/examples/basic-usage.d.ts.map +0 -1
  378. package/dist/cjs/examples/basic-usage.js +0 -128
  379. package/dist/cjs/examples/basic-usage.js.map +0 -1
  380. package/dist/esm/examples/basic-usage.d.ts +0 -12
  381. package/dist/esm/examples/basic-usage.d.ts.map +0 -1
  382. package/dist/esm/examples/basic-usage.js +0 -126
  383. package/dist/esm/examples/basic-usage.js.map +0 -1
@@ -918,6 +918,31 @@ function hashSymbolsForFreshness(refs) {
918
918
  }
919
919
  return hashes;
920
920
  }
921
+ /**
922
+ * Splits symbol refs into the ones the resolver can actually locate and the ones it cannot
923
+ * (a typo, a rename, a file that is not code). An unlocatable symbol hashes MISSING when it is
924
+ * stored and MISSING again when it is verified, so MISSING === MISSING and the memory could
925
+ * never go stale — the worst way for freshness to fail, because the reply still says
926
+ * "tracking N symbols". Callers track the whole file for those instead and say so.
927
+ */
928
+ function partitionSymbolRefs(refs) {
929
+ const resolved = [];
930
+ const unresolved = [];
931
+ for (const ref of refs) {
932
+ const hash = defaultLocalResolver.hashSymbol(path.resolve(ref.filePath), ref.symbolName);
933
+ (hash && hash.raw !== 'MISSING' ? resolved : unresolved).push(ref);
934
+ }
935
+ return { resolved, unresolved };
936
+ }
937
+ /** `files` minus those that contain one of the tracked `symbols`; `dropped` lists what was removed. */
938
+ function dropFilesCoveredBySymbols(files, symbols) {
939
+ const covered = new Set(symbols.map((r) => path.resolve(r.filePath)));
940
+ const kept = [];
941
+ const dropped = [];
942
+ for (const f of files ?? [])
943
+ (covered.has(path.resolve(f)) ? dropped : kept).push(f);
944
+ return { files: kept, dropped };
945
+ }
921
946
  /**
922
947
  * Fase D companion to hashSymbolsForFreshness: same symbols, hashed after
923
948
  * normalizeForFreshness strips comments/whitespace. Always computed alongside the raw hash
@@ -1120,7 +1145,7 @@ export function checkEntryFreshness(entry, resolver, resolveNode, depth = 0, vis
1120
1145
  unverifiedFiles.push(relLabel(abs)); // fail-closed: cannot verify ⇒ not fresh
1121
1146
  continue;
1122
1147
  }
1123
- if (currentHash !== storedHash)
1148
+ if (currentHash !== storedHash && resolver.hashFileLegacy?.(abs) !== storedHash)
1124
1149
  staleFiles.push(relLabel(abs));
1125
1150
  }
1126
1151
  }
@@ -1135,7 +1160,7 @@ export function checkEntryFreshness(entry, resolver, resolveNode, depth = 0, vis
1135
1160
  unverifiedFiles.push(label); // fail-closed: cannot verify ⇒ not fresh
1136
1161
  continue;
1137
1162
  }
1138
- if (currentPair.raw === storedHash)
1163
+ if (currentPair.raw === storedHash || currentPair.rawLegacy === storedHash)
1139
1164
  continue;
1140
1165
  if (semanticDiff) {
1141
1166
  const storedNormalized = entry.symbolNormalizedHashes?.[key];
@@ -1258,7 +1283,7 @@ export function checkClaimFreshness(claim, resolver, semanticDiff = false) {
1258
1283
  unverifiedFiles.push(relLabel(abs));
1259
1284
  continue;
1260
1285
  }
1261
- if (currentHash !== storedHash)
1286
+ if (currentHash !== storedHash && resolver.hashFileLegacy?.(abs) !== storedHash)
1262
1287
  staleFiles.push(relLabel(abs));
1263
1288
  }
1264
1289
  }
@@ -1273,7 +1298,7 @@ export function checkClaimFreshness(claim, resolver, semanticDiff = false) {
1273
1298
  unverifiedFiles.push(label);
1274
1299
  continue;
1275
1300
  }
1276
- if (currentPair.raw === storedHash)
1301
+ if (currentPair.raw === storedHash || currentPair.rawLegacy === storedHash)
1277
1302
  continue;
1278
1303
  if (semanticDiff) {
1279
1304
  const storedNormalized = claim.symbolNormalizedHashes?.[key];
@@ -1310,6 +1335,13 @@ export class TheBrainV2 {
1310
1335
  this.diskStamp = null;
1311
1336
  /** id -> ISO deletion time, for ids that must not come back through a merge. */
1312
1337
  this.tombstones = new Map();
1338
+ /**
1339
+ * Ids a restore brought back that the on-disk meta.json still lists as deleted. save() absorbs
1340
+ * the peers' tombstones first, which re-added the one restore had just removed and dropped the
1341
+ * entry again: "Restored memory…" was followed by the memory vanishing at the next save. Skipped
1342
+ * by the absorb until a save has written meta.json without them.
1343
+ */
1344
+ this.revived = new Set();
1313
1345
  /**
1314
1346
  * Last integrity incident on the corpus files (corrupt main file, undecryptable
1315
1347
  * envelope, skipped sync). Set by load()/save()/syncIfChanged(), never cleared
@@ -1564,6 +1596,7 @@ export class TheBrainV2 {
1564
1596
  }));
1565
1597
  this.diskStamp = stampOf(ENTRIES_FILE);
1566
1598
  this.dirty = false;
1599
+ this.revived.clear(); // meta.json no longer lists them
1567
1600
  }
1568
1601
  catch { /* fail silently */ }
1569
1602
  finally {
@@ -1582,6 +1615,8 @@ export class TheBrainV2 {
1582
1615
  */
1583
1616
  absorbPeerTombstones() {
1584
1617
  for (const [id, at] of readTombstonesFile()) {
1618
+ if (this.revived.has(id))
1619
+ continue;
1585
1620
  if (!this.tombstones.has(id))
1586
1621
  this.tombstones.set(id, at);
1587
1622
  const entry = this.entries.get(id);
@@ -1660,6 +1695,24 @@ export class TheBrainV2 {
1660
1695
  };
1661
1696
  }
1662
1697
  }
1698
+ let unresolvedSymbols;
1699
+ let narrowedFiles;
1700
+ if (symbolRefs && symbolRefs.length > 0 && !options.evidence?.symbols) {
1701
+ const split = partitionSymbolRefs(symbolRefs);
1702
+ if (split.unresolved.length > 0) {
1703
+ unresolvedSymbols = split.unresolved;
1704
+ symbolRefs = split.resolved;
1705
+ filePaths = [...new Set([...(filePaths ?? []), ...split.unresolved.map((r) => r.filePath)])];
1706
+ }
1707
+ // A file whose symbols are tracked is not also tracked whole: the symbol is the narrower
1708
+ // claim, and the whole file would stale the memory on every unrelated edit to it (callers
1709
+ // routinely pass both: the file the symbol lives in, and the symbol).
1710
+ const narrowed = dropFilesCoveredBySymbols(filePaths, split.resolved);
1711
+ if (narrowed.dropped.length > 0) {
1712
+ filePaths = narrowed.files;
1713
+ narrowedFiles = narrowed.dropped;
1714
+ }
1715
+ }
1663
1716
  // Conflict check: another entry about the exact same symbol, with the opposite
1664
1717
  // outcome, is worth flagging before this one is even written — two memories about one
1665
1718
  // function disagreeing on whether an approach works is a trap for whoever searches next.
@@ -1741,7 +1794,7 @@ export class TheBrainV2 {
1741
1794
  this.recalcAvgDocLength();
1742
1795
  this.evictIfOverCapacity();
1743
1796
  this.scheduleSave();
1744
- return { stored: true, reason: 'Stored successfully', id, conflicts, textConflicts, redactions };
1797
+ return { stored: true, reason: 'Stored successfully', id, conflicts, textConflicts, redactions, ...(unresolvedSymbols ? { unresolvedSymbols } : {}), ...(narrowedFiles ? { narrowedFiles } : {}) };
1745
1798
  }
1746
1799
  /**
1747
1800
  * Evict the lowest-value entries once the Brain is over capacity. Value = hits (proven
@@ -2466,8 +2519,10 @@ export class TheBrainV2 {
2466
2519
  this.bloom.add(entry.query.trim().toLowerCase().substring(0, 200));
2467
2520
  }
2468
2521
  // A restored id was deliberately brought back — its old tombstone must not suppress it.
2469
- for (const id of this.entries.keys())
2470
- this.tombstones.delete(id);
2522
+ for (const id of this.entries.keys()) {
2523
+ if (this.tombstones.delete(id))
2524
+ this.revived.add(id);
2525
+ }
2471
2526
  this.scheduleSave();
2472
2527
  return { ok: true, restored: entries.size, message: `Restored ${entries.size} memories from snapshot "${name}". The pre-restore state was snapshotted, so this is undoable too.` };
2473
2528
  }
@@ -2550,6 +2605,7 @@ export class TheBrainV2 {
2550
2605
  }
2551
2606
  this.bloom.add(revived.query.trim().toLowerCase().substring(0, 200));
2552
2607
  this.tombstones.delete(id);
2608
+ this.revived.add(id);
2553
2609
  this.recalcAvgDocLength();
2554
2610
  this.scheduleSave();
2555
2611
  return { ok: true, message: `Restored memory "${id}" from the trash (${revived.hits || 0} prior reuse(s) kept). Its freshness will be re-judged on the next search.` };
@@ -2644,12 +2700,16 @@ export class TheBrainV2 {
2644
2700
  if (hasNewTracking) {
2645
2701
  // Re-point: the new tracking replaces the old wholesale rather than merging, because
2646
2702
  // a moved symbol's old path must stop counting against the entry forever.
2647
- entry.fileHashes = opts.filePaths?.length ? hashFilesForFreshness(opts.filePaths) : undefined;
2648
- entry.symbolHashes = opts.symbols?.length ? hashSymbolsForFreshness(opts.symbols) : undefined;
2649
- entry.symbolNormalizedHashes = opts.symbols?.length ? hashSymbolsNormalizedForFreshness(opts.symbols) : undefined;
2650
- for (const p of opts.filePaths || [])
2703
+ // A symbol the resolver cannot locate would be "fresh" forever (MISSING === MISSING), so
2704
+ // its file is tracked whole instead, and the label says file, not symbol.
2705
+ const split = partitionSymbolRefs(opts.symbols ?? []);
2706
+ const files = dropFilesCoveredBySymbols([...new Set([...(opts.filePaths ?? []), ...split.unresolved.map((r) => r.filePath)])], split.resolved).files;
2707
+ entry.fileHashes = files.length ? hashFilesForFreshness(files) : undefined;
2708
+ entry.symbolHashes = split.resolved.length ? hashSymbolsForFreshness(split.resolved) : undefined;
2709
+ entry.symbolNormalizedHashes = split.resolved.length ? hashSymbolsNormalizedForFreshness(split.resolved) : undefined;
2710
+ for (const p of files)
2651
2711
  retracked.push(rel(path.resolve(p)));
2652
- for (const s of opts.symbols || [])
2712
+ for (const s of split.resolved)
2653
2713
  retracked.push(`${rel(path.resolve(s.filePath))}::${s.symbolName}`);
2654
2714
  }
2655
2715
  else {
@@ -2667,10 +2727,19 @@ export class TheBrainV2 {
2667
2727
  const sep = key.lastIndexOf('::');
2668
2728
  return { filePath: key.substring(0, sep), symbolName: key.substring(sep + 2) };
2669
2729
  });
2670
- entry.symbolHashes = hashSymbolsForFreshness(refs);
2671
- entry.symbolNormalizedHashes = hashSymbolsNormalizedForFreshness(refs);
2730
+ // A symbol that no longer resolves keeps the hash it was stored with: re-hashing it would
2731
+ // write MISSING, which is what it will read as forever, and bless a deleted symbol.
2732
+ const gone = new Set(partitionSymbolRefs(refs).unresolved.map((r) => `${path.resolve(r.filePath)}::${r.symbolName}`));
2733
+ const rehashed = hashSymbolsForFreshness(refs);
2734
+ const rehashedNorm = hashSymbolsNormalizedForFreshness(refs);
2735
+ for (const key of gone) {
2736
+ rehashed[key] = entry.symbolHashes[key] ?? rehashed[key];
2737
+ rehashedNorm[key] = entry.symbolNormalizedHashes?.[key] ?? rehashedNorm[key];
2738
+ }
2739
+ entry.symbolHashes = rehashed;
2740
+ entry.symbolNormalizedHashes = rehashedNorm;
2672
2741
  for (const r of refs)
2673
- retracked.push(`${rel(r.filePath)}::${r.symbolName}`);
2742
+ retracked.push(`${rel(r.filePath)}::${r.symbolName}${gone.has(`${path.resolve(r.filePath)}::${r.symbolName}`) ? ' (no longer found — stays stale)' : ''}`);
2674
2743
  }
2675
2744
  if (entry.claims) {
2676
2745
  for (const claim of entry.claims) {
@@ -3352,6 +3421,11 @@ export class TheBrainV2 {
3352
3421
  */
3353
3422
  getStats(options = {}) {
3354
3423
  this.syncIfChanged();
3424
+ // With projectId, every per-memory figure covers that project's memories only. Corpus-wide
3425
+ // ones (term index, bloom filter, file size, snapshots, tombstones) stay what they are, and
3426
+ // `unscopedEntries` still counts the memories that predate scoping, which belong to no project.
3427
+ const scopeId = options.projectId;
3428
+ let inScope = 0;
3355
3429
  const base = {
3356
3430
  totalEntries: this.entries.size,
3357
3431
  totalTerms: this.invertedIndex.size,
@@ -3377,14 +3451,17 @@ export class TheBrainV2 {
3377
3451
  const reuseBySource = {};
3378
3452
  const projects = new Set();
3379
3453
  for (const entry of this.entries.values()) {
3380
- if (!entry.hits)
3381
- neverHit++;
3382
- if (entry.demerits)
3383
- downvoted++;
3384
3454
  if (entry.projectId === undefined)
3385
3455
  unscoped++;
3386
3456
  else
3387
3457
  projects.add(entry.projectId);
3458
+ if (scopeId !== undefined && entry.projectId !== scopeId)
3459
+ continue;
3460
+ inScope++;
3461
+ if (!entry.hits)
3462
+ neverHit++;
3463
+ if (entry.demerits)
3464
+ downvoted++;
3388
3465
  if (trackedArtifactCount(entry) === 0)
3389
3466
  untracked++;
3390
3467
  else if (entry.filePaths !== undefined || entry.symbols !== undefined ||
@@ -3425,7 +3502,11 @@ export class TheBrainV2 {
3425
3502
  base.downvoted = downvoted;
3426
3503
  base.bySource = bySource;
3427
3504
  base.reuseBySource = reuseBySource;
3428
- base.projects = projects.size;
3505
+ if (scopeId !== undefined) {
3506
+ base.totalEntries = inScope;
3507
+ base.scopedTo = scopeId;
3508
+ }
3509
+ base.projects = scopeId !== undefined ? (projects.has(scopeId) ? 1 : 0) : projects.size;
3429
3510
  base.unscopedEntries = unscoped;
3430
3511
  base.untrackedEntries = untracked;
3431
3512
  base.withClearPaths = withClearPaths;