@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
@@ -1,7 +1,7 @@
1
1
  export declare function computeWorkspaceFingerprint(workspaceRoot: string): string;
2
- export declare function getCachedSearch(workspaceRoot: string, query: string, extensions: string[] | undefined, maxResults: number, scope?: string): {
2
+ export declare function getCachedSearch(workspaceRoot: string, query: string, extensions: string[] | undefined, maxResults: number, scope?: string, regex?: boolean): {
3
3
  text: string | null;
4
4
  fingerprint: string;
5
5
  };
6
- export declare function setCachedSearch(query: string, extensions: string[] | undefined, maxResults: number, fingerprint: string, text: string, scope?: string): void;
6
+ export declare function setCachedSearch(query: string, extensions: string[] | undefined, maxResults: number, fingerprint: string, text: string, scope?: string, regex?: boolean): void;
7
7
  //# sourceMappingURL=SearchCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchCache.d.ts","sourceRoot":"","sources":["../../../src/utils/SearchCache.ts"],"names":[],"mappings":"AAeA,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAiCzE;AAMD,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,EAClB,KAAK,SAAK,GACT;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAI9C;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,SAAK,GACT,IAAI,CAON"}
1
+ {"version":3,"file":"SearchCache.d.ts","sourceRoot":"","sources":["../../../src/utils/SearchCache.ts"],"names":[],"mappings":"AAeA,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAiCzE;AAQD,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,EAClB,KAAK,SAAK,EACV,KAAK,UAAQ,GACZ;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAI9C;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,SAAK,EACV,KAAK,UAAQ,GACZ,IAAI,CAON"}
@@ -47,21 +47,23 @@ export function computeWorkspaceFingerprint(workspaceRoot) {
47
47
  walk(workspaceRoot, "");
48
48
  return crypto.createHash("sha256").update(parts.join("|")).digest("hex");
49
49
  }
50
- function cacheKey(query, extensions, maxResults, fingerprint, scope) {
51
- return `${query.toLowerCase()}::${(extensions ?? []).join(",")}::${maxResults}::${scope}::${fingerprint}`;
50
+ function cacheKey(query, extensions, maxResults, fingerprint, scope, regex = false) {
51
+ // A regex is not lowercased: `\\S+` and `\\s+` are different searches, and "foo|bar" must not
52
+ // share an entry with the literal text "foo|bar".
53
+ return `${regex ? `re:${query}` : query.toLowerCase()}::${(extensions ?? []).join(",")}::${maxResults}::${scope}::${fingerprint}`;
52
54
  }
53
- export function getCachedSearch(workspaceRoot, query, extensions, maxResults, scope = "") {
55
+ export function getCachedSearch(workspaceRoot, query, extensions, maxResults, scope = "", regex = false) {
54
56
  const fingerprint = computeWorkspaceFingerprint(workspaceRoot);
55
- const hit = cache.get(cacheKey(query, extensions, maxResults, fingerprint, scope));
57
+ const hit = cache.get(cacheKey(query, extensions, maxResults, fingerprint, scope, regex));
56
58
  return { text: hit ?? null, fingerprint };
57
59
  }
58
- export function setCachedSearch(query, extensions, maxResults, fingerprint, text, scope = "") {
60
+ export function setCachedSearch(query, extensions, maxResults, fingerprint, text, scope = "", regex = false) {
59
61
  const MAX_CACHE_ENTRIES = 200;
60
62
  if (cache.size >= MAX_CACHE_ENTRIES) {
61
63
  const oldestKey = cache.keys().next().value;
62
64
  if (oldestKey)
63
65
  cache.delete(oldestKey);
64
66
  }
65
- cache.set(cacheKey(query, extensions, maxResults, fingerprint, scope), text);
67
+ cache.set(cacheKey(query, extensions, maxResults, fingerprint, scope, regex), text);
66
68
  }
67
69
  //# sourceMappingURL=SearchCache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchCache.js","sourceRoot":"","sources":["../../../src/utils/SearchCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SearchCache.js","sourceRoot":"","sources":["../../../src/utils/SearchCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;AAC/E,MAAM,uBAAuB,GAAG,KAAK,CAAC,CAAC,mCAAmC;AAE1E,mFAAmF;AACnF,yFAAyF;AACzF,iFAAiF;AACjF,kFAAkF;AAClF,wDAAwD;AACxD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;AAExC,gFAAgF;AAChF,MAAM,UAAU,2BAA2B,CAAC,aAAqB;IAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,SAAS,IAAI,CAAC,GAAW,EAAE,GAAW;QACpC,IAAI,KAAK,IAAI,uBAAuB;YAAE,OAAO;QAC7C,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,IAAI,uBAAuB;gBAAE,OAAO;YAC7C,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YAChD,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACd,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChD,KAAK,EAAE,CAAC;YACV,CAAC;YAAC,MAAM,CAAC;gBACP,8EAA8E;YAChF,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,UAAgC,EAAE,UAAkB,EAAE,WAAmB,EAAE,KAAa,EAAE,KAAK,GAAG,KAAK;IACtI,8FAA8F;IAC9F,kDAAkD;IAClD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,UAAU,KAAK,KAAK,KAAK,WAAW,EAAE,CAAC;AACpI,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,aAAqB,EACrB,KAAa,EACb,UAAgC,EAChC,UAAkB,EAClB,KAAK,GAAG,EAAE,EACV,KAAK,GAAG,KAAK;IAEb,MAAM,WAAW,GAAG,2BAA2B,CAAC,aAAa,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1F,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,WAAW,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,UAAgC,EAChC,UAAkB,EAClB,WAAmB,EACnB,IAAY,EACZ,KAAK,GAAG,EAAE,EACV,KAAK,GAAG,KAAK;IAEb,MAAM,iBAAiB,GAAG,GAAG,CAAC;IAC9B,IAAI,KAAK,CAAC,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC5C,IAAI,SAAS;YAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AACtF,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * SessionCapture — a session that learned something and stored nothing still leaves a memory.
3
+ *
4
+ * Measured: agents called store_memory in 5 of 9 sessions, and FixCapture only sees a red → green
5
+ * run, so an investigation that ends in an explanation (which commit changed the behaviour, why a
6
+ * module works the way it does) vanished with the session. At SessionEnd the host hands over the
7
+ * transcript; when the session did real work, wrote no memory of its own and ended on a substantial
8
+ * answer, that answer is stored — marked 'auto-session' so it is recalled by search and per file but
9
+ * never headlines the session briefing next to the memories someone wrote on purpose.
10
+ *
11
+ * It stores the agent's own closing text, never a summary Lemma wrote, and tracks the files the
12
+ * session edited (or, for read-only work, the ones it read most), so it goes stale with the code.
13
+ *
14
+ * A session that EDITED code leaves a hand-off instead (see buildHandoff): the task as it was
15
+ * given, what changed, the last test run and the closing text. bench/memory-continuity: the
16
+ * agents that were told to leave notes mostly did not, and a closing "part 1 is done" never
17
+ * carried the plan for parts 2 and 3. Everything in it comes from the transcript and git, so it
18
+ * costs no model tokens and never asserts more than the session showed.
19
+ */
20
+ import { TheBrainV2 } from '../subconscious/TheBrainV2.js';
21
+ export declare const HANDOFF_MARK = "(automatic hand-off";
22
+ export interface SessionDigest {
23
+ prompt: string;
24
+ /** The person's most recent request, when it differs from the first (a session that ran for days). */
25
+ lastPrompt?: string;
26
+ answer: string;
27
+ toolCalls: number;
28
+ edited: string[];
29
+ read: string[];
30
+ storedOwnMemory: boolean;
31
+ /** Timestamp of the first transcript event: where "commits made during this session" starts. */
32
+ startedAt?: string;
33
+ /** The last test/build/lint run the agent made and how it ended; unset when the output didn't say. */
34
+ lastVerdict?: {
35
+ command: string;
36
+ passed: boolean;
37
+ headline: string;
38
+ };
39
+ }
40
+ /** Reads the transcript (JSONL, one event per line) into the few facts capture needs. */
41
+ export declare function digestTranscript(transcriptPath: string): SessionDigest | null;
42
+ /**
43
+ * Where a session that edited code left off, from the transcript and git alone. The task is the
44
+ * person's first prompt, uncut up to a limit, because that is where a multi-part plan lives; "what
45
+ * is left" is deliberately NOT inferred (Lemma can't know it), so the next agent reads the task
46
+ * against what changed. Exported for tests.
47
+ */
48
+ export declare function buildHandoff(root: string, digest: SessionDigest, carriedPlan?: string): string;
49
+ /** True for a hand-off body Lemma built and nobody has rewritten. */
50
+ export declare function isMachineHandoff(body: string): boolean;
51
+ /**
52
+ * What update_memory does to a machine-built hand-off: the agent's text is added as its own
53
+ * section instead of replacing the body. A rewrite (the CLAUDE.md trigger says "update_memory if
54
+ * one exists") threw the task away, and with it the exact signatures the next session needs,
55
+ * while an agent's own summary tends to keep the names and drop the parameter lists. Idempotent:
56
+ * a second update replaces the previous note, never stacks.
57
+ */
58
+ export declare function withAgentNote(body: string, note: string): string;
59
+ export interface SessionCaptureResult {
60
+ id?: string;
61
+ skipped?: 'no-transcript' | 'already-captured' | 'agent-stored' | 'small-session' | 'no-answer' | 'not-stored' | 'not-pro';
62
+ }
63
+ /** Entry point for a host SessionEnd hook (Claude Code shape: `session_id`, `transcript_path`, `cwd`). */
64
+ export declare function captureSession(payload: unknown, cwd?: string, brain?: TheBrainV2): SessionCaptureResult;
65
+ //# sourceMappingURL=SessionCapture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionCapture.d.ts","sourceRoot":"","sources":["../../../src/utils/SessionCapture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAA0C,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAuBhG,eAAO,MAAM,YAAY,wBAAwB,CAAC;AASlD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,sGAAsG;IACtG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sGAAsG;IACtG,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAkCD,yFAAyF;AACzF,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA2D7E;AA+BD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CA0B9F;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhE;AAsBD,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,eAAe,GAAG,kBAAkB,GAAG,cAAc,GAAG,eAAe,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;CAC5H;AAED,0GAA0G;AAC1G,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,oBAAoB,CA0DvG"}
@@ -0,0 +1,328 @@
1
+ /**
2
+ * SessionCapture — a session that learned something and stored nothing still leaves a memory.
3
+ *
4
+ * Measured: agents called store_memory in 5 of 9 sessions, and FixCapture only sees a red → green
5
+ * run, so an investigation that ends in an explanation (which commit changed the behaviour, why a
6
+ * module works the way it does) vanished with the session. At SessionEnd the host hands over the
7
+ * transcript; when the session did real work, wrote no memory of its own and ended on a substantial
8
+ * answer, that answer is stored — marked 'auto-session' so it is recalled by search and per file but
9
+ * never headlines the session briefing next to the memories someone wrote on purpose.
10
+ *
11
+ * It stores the agent's own closing text, never a summary Lemma wrote, and tracks the files the
12
+ * session edited (or, for read-only work, the ones it read most), so it goes stale with the code.
13
+ *
14
+ * A session that EDITED code leaves a hand-off instead (see buildHandoff): the task as it was
15
+ * given, what changed, the last test run and the closing text. bench/memory-continuity: the
16
+ * agents that were told to leave notes mostly did not, and a closing "part 1 is done" never
17
+ * carried the plan for parts 2 and 3. Everything in it comes from the transcript and git, so it
18
+ * costs no model tokens and never asserts more than the session showed.
19
+ */
20
+ import fs from 'fs';
21
+ import path from 'path';
22
+ import { deriveProjectId, entrySource, getBrain } from '../subconscious/TheBrainV2.js';
23
+ import { repoRoot } from '../subconscious/TeamBrain.js';
24
+ import { execFileSync } from 'child_process';
25
+ import { writeFileAtomic } from './AtomicFile.js';
26
+ import { extractFailure, inferVerdict, isVerdictCommand } from './FixCapture.js';
27
+ import { isProUser } from './ProLicense.js';
28
+ const STATE_FILE = path.join('.lemma', 'session', 'session-capture.json');
29
+ const MAX_TRANSCRIPT_BYTES = 8 * 1024 * 1024;
30
+ /** Past the limit the file is read by its two ends: the first prompt lives at the head, the recent work at the tail. */
31
+ const HEAD_BYTES = 256 * 1024;
32
+ const TAIL_BYTES = 4 * 1024 * 1024;
33
+ const MIN_TOOL_CALLS = 4;
34
+ const MIN_ANSWER_CHARS = 300;
35
+ const MAX_ANSWER_CHARS = 1800;
36
+ const MAX_QUERY_CHARS = 200;
37
+ const MAX_FILES = 6;
38
+ // A multi-part plan is long and its LAST part is the one a cut loses: bench/memory-continuity's spec is 1.8k chars.
39
+ const MAX_TASK_CHARS = 4000;
40
+ const MAX_LATEST_CHARS = 500;
41
+ /** A prompt shorter than this that edits the previous hand-off's files is a continuation ("continue where we left off"), not a new task. */
42
+ const CONTINUATION_MAX_CHARS = 300;
43
+ const HANDOFF_MAX_AGE_MS = 3 * 24 * 60 * 60 * 1000;
44
+ export const HANDOFF_MARK = '(automatic hand-off';
45
+ const AGENT_NOTE_MARK = "AGENT'S NOTE";
46
+ const MAX_AGENT_NOTE_CHARS = 1500;
47
+ const MAX_HANDOFF_FILES = 10;
48
+ const MAX_SAID_CHARS = 700;
49
+ const REMEMBERED_SESSIONS = 50;
50
+ /** Tools that mean the agent already wrote (or deliberately declined to write) its own memory. */
51
+ const OWN_MEMORY_TOOL = /^mcp__lemma__(store|update|forget)_memory$/;
52
+ function textOf(content) {
53
+ if (typeof content === 'string')
54
+ return content;
55
+ if (!Array.isArray(content))
56
+ return '';
57
+ return content
58
+ .filter((b) => b && b.type === 'text' && typeof b.text === 'string')
59
+ .map((b) => b.text)
60
+ .join('\n');
61
+ }
62
+ /**
63
+ * The head and the tail of a transcript too big to parse whole, each cut to whole lines. The
64
+ * sessions that outgrow the limit are the long ones, which are exactly the ones that end half
65
+ * done; dropping them would leave no hand-off where it matters most. Counts such as `toolCalls`
66
+ * then describe the tail only.
67
+ */
68
+ function readEnds(file, size) {
69
+ const fd = fs.openSync(file, 'r');
70
+ try {
71
+ const head = Buffer.alloc(HEAD_BYTES);
72
+ fs.readSync(fd, head, 0, HEAD_BYTES, 0);
73
+ const tail = Buffer.alloc(TAIL_BYTES);
74
+ fs.readSync(fd, tail, 0, TAIL_BYTES, size - TAIL_BYTES);
75
+ const h = head.toString('utf8');
76
+ const t = tail.toString('utf8');
77
+ // Drop the partial line at each cut; an unparseable line would be skipped anyway, but a cut
78
+ // one could still parse as a different, shorter JSON value.
79
+ return `${h.slice(0, h.lastIndexOf('\n'))}\n${t.slice(t.indexOf('\n') + 1)}`;
80
+ }
81
+ finally {
82
+ fs.closeSync(fd);
83
+ }
84
+ }
85
+ /** Reads the transcript (JSONL, one event per line) into the few facts capture needs. */
86
+ export function digestTranscript(transcriptPath) {
87
+ let raw;
88
+ try {
89
+ const stat = fs.statSync(transcriptPath);
90
+ raw = stat.size > MAX_TRANSCRIPT_BYTES ? readEnds(transcriptPath, stat.size) : fs.readFileSync(transcriptPath, 'utf8');
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ const digest = { prompt: '', answer: '', toolCalls: 0, edited: [], read: [], storedOwnMemory: false };
96
+ const readCount = new Map();
97
+ const verdictCommands = new Map(); // tool_use id -> command, for verdict-shaped Bash runs
98
+ for (const line of raw.split('\n')) {
99
+ if (!line)
100
+ continue;
101
+ let ev;
102
+ try {
103
+ ev = JSON.parse(line);
104
+ }
105
+ catch {
106
+ continue;
107
+ }
108
+ if (ev.isSidechain)
109
+ continue;
110
+ if (!digest.startedAt && typeof ev.timestamp === 'string')
111
+ digest.startedAt = ev.timestamp;
112
+ const msg = ev.message;
113
+ if (!msg)
114
+ continue;
115
+ if (ev.type === 'user' && Array.isArray(msg.content)) {
116
+ for (const block of msg.content) {
117
+ const command = block?.type === 'tool_result' ? verdictCommands.get(block.tool_use_id) : undefined;
118
+ if (!command)
119
+ continue;
120
+ const output = textOf(block.content);
121
+ const passed = inferVerdict(output);
122
+ if (passed === null)
123
+ continue;
124
+ digest.lastVerdict = { command, passed, headline: passed ? '' : extractFailure(output).headline };
125
+ }
126
+ }
127
+ if (ev.type === 'user') {
128
+ // A tool_result arrives as a user message too; only text the person wrote counts as the prompt.
129
+ const t = typeof msg.content === 'string' ? msg.content : textOf(msg.content);
130
+ // The host's own "This session is being continued…" summary arrives as a user message too.
131
+ if (t.trim() && !t.startsWith('<') && !t.startsWith('This session is being continued')) {
132
+ if (!digest.prompt)
133
+ digest.prompt = t.trim();
134
+ else
135
+ digest.lastPrompt = t.trim();
136
+ }
137
+ }
138
+ if (ev.type !== 'assistant' || !Array.isArray(msg.content))
139
+ continue;
140
+ const text = textOf(msg.content);
141
+ if (text.trim())
142
+ digest.answer = text.trim();
143
+ for (const block of msg.content) {
144
+ if (block?.type !== 'tool_use')
145
+ continue;
146
+ digest.toolCalls++;
147
+ const name = String(block.name || '');
148
+ const file = block.input?.file_path;
149
+ if (OWN_MEMORY_TOOL.test(name))
150
+ digest.storedOwnMemory = true;
151
+ if (name === 'Bash' && typeof block.id === 'string' && typeof block.input?.command === 'string' && isVerdictCommand(block.input.command)) {
152
+ verdictCommands.set(block.id, block.input.command);
153
+ }
154
+ if (typeof file === 'string' && /^(Edit|Write|MultiEdit|NotebookEdit)$/.test(name)) {
155
+ if (!digest.edited.includes(file))
156
+ digest.edited.push(file);
157
+ }
158
+ else if (typeof file === 'string' && name === 'Read') {
159
+ readCount.set(file, (readCount.get(file) ?? 0) + 1);
160
+ }
161
+ }
162
+ }
163
+ digest.read = [...readCount.entries()].sort((a, b) => b[1] - a[1]).map(([f]) => f);
164
+ return digest;
165
+ }
166
+ function seen(root) {
167
+ try {
168
+ const parsed = JSON.parse(fs.readFileSync(path.join(root, STATE_FILE), 'utf8'));
169
+ return Array.isArray(parsed) ? parsed.filter((s) => typeof s === 'string') : [];
170
+ }
171
+ catch {
172
+ return [];
173
+ }
174
+ }
175
+ function remember(root, sessionId) {
176
+ try {
177
+ const file = path.join(root, STATE_FILE);
178
+ fs.mkdirSync(path.dirname(file), { recursive: true });
179
+ writeFileAtomic(file, JSON.stringify([...seen(root), sessionId].slice(-REMEMBERED_SESSIONS)));
180
+ }
181
+ catch {
182
+ // losing the marker only risks one duplicate, which the Brain's own near-duplicate check absorbs
183
+ }
184
+ }
185
+ function git(root, args) {
186
+ try {
187
+ return execFileSync('git', ['-C', root, ...args], { encoding: 'utf8', timeout: 4000, stdio: ['ignore', 'pipe', 'ignore'] }).trimEnd();
188
+ }
189
+ catch {
190
+ return '';
191
+ }
192
+ }
193
+ const clip = (text, max) => (text.length > max ? `${text.slice(0, max)}…` : text);
194
+ /**
195
+ * Where a session that edited code left off, from the transcript and git alone. The task is the
196
+ * person's first prompt, uncut up to a limit, because that is where a multi-part plan lives; "what
197
+ * is left" is deliberately NOT inferred (Lemma can't know it), so the next agent reads the task
198
+ * against what changed. Exported for tests.
199
+ */
200
+ export function buildHandoff(root, digest, carriedPlan) {
201
+ const rel = (f) => path.relative(root, f) || f;
202
+ const edited = digest.edited.map(rel);
203
+ // A continuation's own prompt ("continue where we left off") says nothing: the plan is the one
204
+ // the previous hand-off held, carried forward as it was first given.
205
+ const taskBlock = carriedPlan
206
+ ? ['PLAN (carried from the previous hand-off, as first given):', clip(carriedPlan, MAX_TASK_CHARS), '', "THIS SESSION'S REQUEST:", clip(digest.prompt, MAX_LATEST_CHARS)]
207
+ : ['TASK (as given):', clip(digest.prompt, MAX_TASK_CHARS)];
208
+ const lines = [
209
+ `${HANDOFF_MARK} built from the transcript and git when the session ended; not verified, and it does not say what is left: compare the task below with what changed)`,
210
+ '',
211
+ ...taskBlock,
212
+ ...(digest.lastPrompt && digest.lastPrompt !== digest.prompt ? ['', 'LATEST REQUEST:', clip(digest.lastPrompt, MAX_LATEST_CHARS)] : []),
213
+ '',
214
+ `FILES EDITED (${edited.length}): ${edited.slice(0, MAX_HANDOFF_FILES).join(', ')}${edited.length > MAX_HANDOFF_FILES ? ', …' : ''}`,
215
+ ];
216
+ const branch = git(root, ['rev-parse', '--abbrev-ref', 'HEAD']);
217
+ const commits = digest.startedAt ? git(root, ['log', `--since=${digest.startedAt}`, '-5', '--format=%h %s']) : '';
218
+ const dirty = git(root, ['status', '--porcelain']).split('\n').filter((l) => l && !/\s\.lemma(\/|$)/.test(l));
219
+ lines.push(`GIT${branch ? ` (${branch})` : ''}: ${commits ? `commits this session: ${commits.split('\n').join('; ')}` : 'no commits this session'}; ${dirty.length} uncommitted file(s)${dirty.length ? `: ${dirty.slice(0, MAX_HANDOFF_FILES).map((l) => l.slice(3)).join(', ')}` : ''}`);
220
+ const v = digest.lastVerdict;
221
+ if (v)
222
+ lines.push(`LAST TEST/BUILD RUN: \`${clip(v.command, 100)}\` ${v.passed ? 'passed' : `FAILED${v.headline ? ` — ${clip(v.headline, 160)}` : ''}`}`);
223
+ if (digest.answer)
224
+ lines.push('', 'LAST SAID BY THE AGENT:', clip(digest.answer, MAX_SAID_CHARS));
225
+ return lines.join('\n');
226
+ }
227
+ /** True for a hand-off body Lemma built and nobody has rewritten. */
228
+ export function isMachineHandoff(body) {
229
+ return body.startsWith(HANDOFF_MARK);
230
+ }
231
+ /**
232
+ * What update_memory does to a machine-built hand-off: the agent's text is added as its own
233
+ * section instead of replacing the body. A rewrite (the CLAUDE.md trigger says "update_memory if
234
+ * one exists") threw the task away, and with it the exact signatures the next session needs,
235
+ * while an agent's own summary tends to keep the names and drop the parameter lists. Idempotent:
236
+ * a second update replaces the previous note, never stacks.
237
+ */
238
+ export function withAgentNote(body, note) {
239
+ const at = body.indexOf(`\n\n${AGENT_NOTE_MARK}`);
240
+ const kept = at === -1 ? body : body.slice(0, at);
241
+ return `${kept}\n\n${AGENT_NOTE_MARK} (added with update_memory; the sections above are the hand-off as Lemma captured it):\n${clip(note.trim(), MAX_AGENT_NOTE_CHARS)}`;
242
+ }
243
+ /** The plan section of a machine-built hand-off body, for carrying it into the next one. */
244
+ function planOf(response) {
245
+ const m = response.match(/^(?:TASK \(as given\)|PLAN \(carried[^\n]*\)):\n([\s\S]*?)\n\n(?:THIS SESSION'S REQUEST:|LATEST REQUEST:|FILES EDITED)/m);
246
+ return m ? m[1] : null;
247
+ }
248
+ /**
249
+ * The project's live hand-off: newest, recent, not superseded. Only one is meant to be live, so
250
+ * the next capture replaces it (continuation) or supersedes it (new task) instead of piling up.
251
+ */
252
+ function liveHandoff(b, projectId) {
253
+ for (const item of b.list({ projectId, limit: 200 }).items) {
254
+ const e = b.getEntry(item.id);
255
+ if (!e || entrySource(e) !== 'auto-handoff' || e.supersededBy)
256
+ continue;
257
+ if (Date.now() - (Date.parse(e.refreshedAt || e.timestamp) || 0) > HANDOFF_MAX_AGE_MS)
258
+ return null; // newest first
259
+ return { id: e.id, response: e.response, filePaths: e.filePaths ?? [] };
260
+ }
261
+ return null;
262
+ }
263
+ /** Entry point for a host SessionEnd hook (Claude Code shape: `session_id`, `transcript_path`, `cwd`). */
264
+ export function captureSession(payload, cwd, brain) {
265
+ const p = payload && typeof payload === 'object' ? payload : {};
266
+ // Continuity is what Pro sells (bench/memory-continuity): the free tier keeps what the agent writes itself.
267
+ if (!isProUser())
268
+ return { skipped: 'not-pro' };
269
+ if (typeof p.transcript_path !== 'string')
270
+ return { skipped: 'no-transcript' };
271
+ const root = repoRoot(cwd || p.cwd || process.cwd());
272
+ const sessionId = typeof p.session_id === 'string' ? p.session_id : '';
273
+ if (sessionId && seen(root).includes(sessionId))
274
+ return { skipped: 'already-captured' };
275
+ const digest = digestTranscript(p.transcript_path);
276
+ if (!digest)
277
+ return { skipped: 'no-transcript' };
278
+ const handoff = digest.edited.length > 0;
279
+ // The closing answer is skipped when the agent wrote its own memory, but the hand-off is not:
280
+ // bench/memory-continuity, agents' own notes named `totalsWithPoints` and dropped its parameter
281
+ // list, so the next session invented the signature and failed the tests; the hand-off keeps the
282
+ // task verbatim. Both live side by side: the note is the agent's reading, this is the source.
283
+ if (digest.storedOwnMemory && !handoff)
284
+ return { skipped: 'agent-stored' };
285
+ if (digest.toolCalls < MIN_TOOL_CALLS)
286
+ return { skipped: 'small-session' };
287
+ if (!digest.prompt)
288
+ return { skipped: 'no-answer' };
289
+ // A hand-off needs no long answer: the closing text of a half-done session is often one line.
290
+ if (!handoff && digest.answer.length < MIN_ANSWER_CHARS)
291
+ return { skipped: 'no-answer' };
292
+ const inRoot = (f) => {
293
+ const abs = path.resolve(root, f);
294
+ return abs.startsWith(root + path.sep) && fs.existsSync(abs) ? abs : null;
295
+ };
296
+ const tracked = (digest.edited.length > 0 ? digest.edited : digest.read)
297
+ .map(inRoot)
298
+ .filter((f) => !!f)
299
+ .slice(0, MAX_FILES);
300
+ const b = brain ?? getBrain();
301
+ const projectId = deriveProjectId(root);
302
+ const previous = handoff ? liveHandoff(b, projectId) : null;
303
+ // Only a hand-off Lemma wrote and nobody rewrote has a plan we can lift out and trust.
304
+ const previousPlan = previous && isMachineHandoff(previous.response) ? planOf(previous.response) : null;
305
+ const continuation = !!previousPlan &&
306
+ digest.prompt.length < CONTINUATION_MAX_CHARS &&
307
+ tracked.some((f) => previous.filePaths.includes(f));
308
+ const query = `${handoff ? 'handoff' : 'session'}: ${(continuation ? previousPlan : digest.prompt).replace(/\s+/g, ' ').slice(0, MAX_QUERY_CHARS)}`;
309
+ const response = handoff ? buildHandoff(root, digest, continuation ? previousPlan : undefined) : [
310
+ '(captured automatically at the end of a session that stored nothing; the closing answer of the agent, not verified)',
311
+ '',
312
+ digest.answer.length > MAX_ANSWER_CHARS ? `${digest.answer.slice(0, MAX_ANSWER_CHARS)}…` : digest.answer,
313
+ ].join('\n');
314
+ if (continuation) {
315
+ // Same hand-off, brought up to date: one live per project, and no near-duplicate refusal.
316
+ const done = b.update(previous.id, { query, response, filePaths: [...new Set([...tracked, ...previous.filePaths])].slice(0, MAX_FILES) });
317
+ if (sessionId)
318
+ remember(root, sessionId);
319
+ return done.ok ? { id: previous.id } : { skipped: 'not-stored' };
320
+ }
321
+ const res = b.store(query, response, 'session_capture_auto', 0.92, tracked.length ? tracked : undefined, projectId, 'confirmed', undefined, undefined, undefined, undefined, { source: handoff ? 'auto-handoff' : 'auto-session' });
322
+ if (sessionId)
323
+ remember(root, sessionId);
324
+ if (res.stored && res.id && (previous && isMachineHandoff(previous.response)))
325
+ b.update(previous.id, { supersededBy: res.id }); // a new task replaces the old hand-off in the briefing
326
+ return res.stored && res.id ? { id: res.id } : { skipped: 'not-stored' };
327
+ }
328
+ //# sourceMappingURL=SessionCapture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionCapture.js","sourceRoot":"","sources":["../../../src/utils/SessionCapture.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SharedLedgerStore.d.ts","sourceRoot":"","sources":["../../../src/utils/SharedLedgerStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAa1E;AAgDD,2FAA2F;AAC3F,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,eAAe,GAAG,YAAY,EACzC,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAWf;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,eAAe,GAAG,YAAY,EACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,IAAI,CAcN"}
1
+ {"version":3,"file":"SharedLedgerStore.d.ts","sourceRoot":"","sources":["../../../src/utils/SharedLedgerStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAUH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAa1E;AAgDD,2FAA2F;AAC3F,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,eAAe,GAAG,YAAY,EACzC,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAWf;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,eAAe,GAAG,YAAY,EACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,IAAI,CAcN"}
@@ -21,6 +21,7 @@
21
21
  import fs from "fs";
22
22
  import path from "path";
23
23
  import crypto from "crypto";
24
+ import { writeFileAtomic } from "./AtomicFile.js";
24
25
  const HOME = process.env.HOME || process.env.USERPROFILE || "~";
25
26
  const TTL_MS = 30 * 60 * 1000;
26
27
  export function isSharedLedgerEnabled(cwd = process.cwd()) {
@@ -77,7 +78,7 @@ function saveStore(cwd, namespace, data) {
77
78
  return;
78
79
  if (!fs.existsSync(dir))
79
80
  fs.mkdirSync(dir, { recursive: true });
80
- fs.writeFileSync(file, JSON.stringify(data), "utf8");
81
+ writeFileAtomic(file, JSON.stringify(data));
81
82
  }
82
83
  catch {
83
84
  // Fail-open: the caller falls back to in-process-only behavior.
@@ -1 +1 @@
1
- {"version":3,"file":"SharedLedgerStore.js","sourceRoot":"","sources":["../../../src/utils/SharedLedgerStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SharedLedgerStore.js","sourceRoot":"","sources":["../../../src/utils/SharedLedgerStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function staleDelta(cwd: string, commit: string | undefined, files: string[]): string;
2
+ //# sourceMappingURL=StaleDelta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaleDelta.d.ts","sourceRoot":"","sources":["../../../src/utils/StaleDelta.ts"],"names":[],"mappings":"AAsBA,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CA6B3F"}
@@ -0,0 +1,54 @@
1
+ import { execFileSync } from "child_process";
2
+ import path from "path";
3
+ /**
4
+ * What changed in the files a STALE memory tracks since the commit it was stored (or last
5
+ * re-anchored) at. Read-only git, bounded, never throws: it is an explanation attached to a
6
+ * verdict, so a missing git or a rewritten history must cost the note, not the verdict.
7
+ */
8
+ const MAX_FILES = 3;
9
+ const MAX_DIFF_LINES_PER_FILE = 24;
10
+ const MAX_CHARS = 2400;
11
+ const MAX_COMMITS = 3;
12
+ function git(cwd, args) {
13
+ try {
14
+ return execFileSync("git", args, { cwd, encoding: "utf8", timeout: 4000, stdio: ["ignore", "pipe", "ignore"] }).trimEnd();
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ }
20
+ export function staleDelta(cwd, commit, files) {
21
+ if (!commit || files.length === 0)
22
+ return "";
23
+ if (git(cwd, ["cat-file", "-e", `${commit}^{commit}`]) === null) {
24
+ return "Change since storing: that commit is no longer in this repo (history rewritten), so there is no diff to show. Re-check the code directly.";
25
+ }
26
+ const shown = files.slice(0, MAX_FILES);
27
+ const blocks = [];
28
+ for (const file of shown) {
29
+ const label = path.isAbsolute(file) ? path.relative(cwd, file) || file : file;
30
+ const log = git(cwd, ["log", "--oneline", `-n${MAX_COMMITS}`, `${commit}..HEAD`, "--", file]);
31
+ // Working tree against the stored commit, so an uncommitted edit shows too.
32
+ const diff = git(cwd, ["diff", "-U1", "--no-color", commit, "--", file]);
33
+ const lines = [`• ${label}`];
34
+ if (log)
35
+ lines.push(...log.split("\n").map((l) => ` commit ${l}`));
36
+ if (diff) {
37
+ const body = diff.split("\n").filter((l) => /^[+-]/.test(l) && !/^(\+\+\+|---)/.test(l));
38
+ lines.push(...body.slice(0, MAX_DIFF_LINES_PER_FILE).map((l) => ` ${l}`));
39
+ if (body.length > MAX_DIFF_LINES_PER_FILE)
40
+ lines.push(` … ${body.length - MAX_DIFF_LINES_PER_FILE} more changed line(s)`);
41
+ }
42
+ else if (!log) {
43
+ lines.push(" (no textual diff against the stored commit: the memory was anchored to uncommitted state, or only comments/format moved)");
44
+ }
45
+ blocks.push(lines.join("\n"));
46
+ }
47
+ if (files.length > shown.length)
48
+ blocks.push(`• … and ${files.length - shown.length} more changed file(s)`);
49
+ let text = `Change since storing (commit ${commit.slice(0, 7)}):\n${blocks.join("\n")}`;
50
+ if (text.length > MAX_CHARS)
51
+ text = `${text.slice(0, MAX_CHARS)}\n … (truncated)`;
52
+ return `${text}\nIf the memory still holds: refresh_memory. If its text is now wrong: update_memory. If it no longer applies: forget_memory.`;
53
+ }
54
+ //# sourceMappingURL=StaleDelta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaleDelta.js","sourceRoot":"","sources":["../../../src/utils/StaleDelta.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SurgicalASTInsert.d.ts","sourceRoot":"","sources":["../../../src/utils/SurgicalASTInsert.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IACtD,YAAY,EAAE,MAAM,CAAC;CACtB;AAsCD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAqI1F"}
1
+ {"version":3,"file":"SurgicalASTInsert.d.ts","sourceRoot":"","sources":["../../../src/utils/SurgicalASTInsert.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IACtD,YAAY,EAAE,MAAM,CAAC;CACtB;AAsCD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAqI1F"}