@nxuss/lemma 1.38.0 → 1.39.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 (271) hide show
  1. package/README.md +3 -4
  2. package/bin/brain-ingest.js +68 -31
  3. package/bin/init.js +25 -28
  4. package/dashboard/dist/assets/index-DNTQXLER.css +1 -0
  5. package/dashboard/dist/assets/index-DzL_Zu3m.js +452 -0
  6. package/dashboard/dist/index.html +2 -2
  7. package/dist/cjs/cli/gitHooks.d.ts +9 -2
  8. package/dist/cjs/cli/gitHooks.d.ts.map +1 -1
  9. package/dist/cjs/cli/gitHooks.js +31 -4
  10. package/dist/cjs/cli/gitHooks.js.map +1 -1
  11. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  12. package/dist/cjs/cli/lemma-proxy.js +21 -1
  13. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  14. package/dist/cjs/infra/analyzers/index.d.ts +0 -2
  15. package/dist/cjs/infra/analyzers/index.d.ts.map +1 -1
  16. package/dist/cjs/infra/analyzers/index.js +1 -6
  17. package/dist/cjs/infra/analyzers/index.js.map +1 -1
  18. package/dist/cjs/infra/cli.d.ts +4 -0
  19. package/dist/cjs/infra/cli.d.ts.map +1 -1
  20. package/dist/cjs/infra/cli.js +6 -199
  21. package/dist/cjs/infra/cli.js.map +1 -1
  22. package/dist/cjs/infra/index.d.ts +1 -3
  23. package/dist/cjs/infra/index.d.ts.map +1 -1
  24. package/dist/cjs/infra/index.js +1 -16
  25. package/dist/cjs/infra/index.js.map +1 -1
  26. package/dist/cjs/infra/mcp-tools.d.ts.map +1 -1
  27. package/dist/cjs/infra/mcp-tools.js +8 -453
  28. package/dist/cjs/infra/mcp-tools.js.map +1 -1
  29. package/dist/cjs/infra/types.d.ts +0 -101
  30. package/dist/cjs/infra/types.d.ts.map +1 -1
  31. package/dist/cjs/infra/types.js +2 -1
  32. package/dist/cjs/infra/types.js.map +1 -1
  33. package/dist/cjs/mcp/prompts.d.ts +1 -1
  34. package/dist/cjs/mcp/prompts.d.ts.map +1 -1
  35. package/dist/cjs/mcp/prompts.js +8 -23
  36. package/dist/cjs/mcp/prompts.js.map +1 -1
  37. package/dist/cjs/mcp/tool-profiles.d.ts +8 -3
  38. package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
  39. package/dist/cjs/mcp/tool-profiles.js +25 -54
  40. package/dist/cjs/mcp/tool-profiles.js.map +1 -1
  41. package/dist/cjs/mcp/tools/memory.d.ts +8 -0
  42. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
  43. package/dist/cjs/mcp/tools/memory.js +154 -125
  44. package/dist/cjs/mcp/tools/memory.js.map +1 -1
  45. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  46. package/dist/cjs/mcp/tools.js +11 -6
  47. package/dist/cjs/mcp/tools.js.map +1 -1
  48. package/dist/cjs/mcp/workspaceShared.d.ts.map +1 -1
  49. package/dist/cjs/mcp/workspaceShared.js +8 -4
  50. package/dist/cjs/mcp/workspaceShared.js.map +1 -1
  51. package/dist/cjs/proxy/ProjectRegistry.d.ts +20 -0
  52. package/dist/cjs/proxy/ProjectRegistry.d.ts.map +1 -1
  53. package/dist/cjs/proxy/ProjectRegistry.js +46 -4
  54. package/dist/cjs/proxy/ProjectRegistry.js.map +1 -1
  55. package/dist/cjs/subconscious/HostRecall.d.ts +26 -2
  56. package/dist/cjs/subconscious/HostRecall.d.ts.map +1 -1
  57. package/dist/cjs/subconscious/HostRecall.js +101 -36
  58. package/dist/cjs/subconscious/HostRecall.js.map +1 -1
  59. package/dist/cjs/subconscious/NarrowEvidence.d.ts +47 -0
  60. package/dist/cjs/subconscious/NarrowEvidence.d.ts.map +1 -0
  61. package/dist/cjs/subconscious/NarrowEvidence.js +252 -0
  62. package/dist/cjs/subconscious/NarrowEvidence.js.map +1 -0
  63. package/dist/cjs/subconscious/TheBrainV2.d.ts +37 -0
  64. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  65. package/dist/cjs/subconscious/TheBrainV2.js +147 -15
  66. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  67. package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts.map +1 -1
  68. package/dist/cjs/subconscious/freshness/LocalFsResolver.js +17 -0
  69. package/dist/cjs/subconscious/freshness/LocalFsResolver.js.map +1 -1
  70. package/dist/cjs/subconscious/recallDigest.d.ts +8 -0
  71. package/dist/cjs/subconscious/recallDigest.d.ts.map +1 -1
  72. package/dist/cjs/subconscious/recallDigest.js +13 -1
  73. package/dist/cjs/subconscious/recallDigest.js.map +1 -1
  74. package/dist/cjs/utils/OtherLanguageSymbols.d.ts +31 -0
  75. package/dist/cjs/utils/OtherLanguageSymbols.d.ts.map +1 -0
  76. package/dist/cjs/utils/OtherLanguageSymbols.js +283 -0
  77. package/dist/cjs/utils/OtherLanguageSymbols.js.map +1 -0
  78. package/dist/cjs/utils/SavingsLedger.d.ts +27 -0
  79. package/dist/cjs/utils/SavingsLedger.d.ts.map +1 -1
  80. package/dist/cjs/utils/SavingsLedger.js +51 -0
  81. package/dist/cjs/utils/SavingsLedger.js.map +1 -1
  82. package/dist/cjs/utils/StoreDraft.d.ts +12 -0
  83. package/dist/cjs/utils/StoreDraft.d.ts.map +1 -1
  84. package/dist/cjs/utils/StoreDraft.js +53 -1
  85. package/dist/cjs/utils/StoreDraft.js.map +1 -1
  86. package/dist/cjs/utils/SymbolSurgicalContext.d.ts +2 -0
  87. package/dist/cjs/utils/SymbolSurgicalContext.d.ts.map +1 -1
  88. package/dist/cjs/utils/SymbolSurgicalContext.js +1 -0
  89. package/dist/cjs/utils/SymbolSurgicalContext.js.map +1 -1
  90. package/dist/cjs/utils/reportSavings.d.ts +17 -4
  91. package/dist/cjs/utils/reportSavings.d.ts.map +1 -1
  92. package/dist/cjs/utils/reportSavings.js +67 -22
  93. package/dist/cjs/utils/reportSavings.js.map +1 -1
  94. package/dist/esm/cli/gitHooks.d.ts +9 -2
  95. package/dist/esm/cli/gitHooks.d.ts.map +1 -1
  96. package/dist/esm/cli/gitHooks.js +31 -4
  97. package/dist/esm/cli/gitHooks.js.map +1 -1
  98. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  99. package/dist/esm/cli/lemma-proxy.js +21 -1
  100. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  101. package/dist/esm/infra/analyzers/index.d.ts +0 -2
  102. package/dist/esm/infra/analyzers/index.d.ts.map +1 -1
  103. package/dist/esm/infra/analyzers/index.js +0 -2
  104. package/dist/esm/infra/analyzers/index.js.map +1 -1
  105. package/dist/esm/infra/cli.d.ts +4 -0
  106. package/dist/esm/infra/cli.d.ts.map +1 -1
  107. package/dist/esm/infra/cli.js +6 -199
  108. package/dist/esm/infra/cli.js.map +1 -1
  109. package/dist/esm/infra/index.d.ts +1 -3
  110. package/dist/esm/infra/index.d.ts.map +1 -1
  111. package/dist/esm/infra/index.js +1 -3
  112. package/dist/esm/infra/index.js.map +1 -1
  113. package/dist/esm/infra/mcp-tools.d.ts.map +1 -1
  114. package/dist/esm/infra/mcp-tools.js +9 -454
  115. package/dist/esm/infra/mcp-tools.js.map +1 -1
  116. package/dist/esm/infra/types.d.ts +0 -101
  117. package/dist/esm/infra/types.d.ts.map +1 -1
  118. package/dist/esm/infra/types.js +2 -1
  119. package/dist/esm/infra/types.js.map +1 -1
  120. package/dist/esm/mcp/prompts.d.ts +1 -1
  121. package/dist/esm/mcp/prompts.d.ts.map +1 -1
  122. package/dist/esm/mcp/prompts.js +8 -23
  123. package/dist/esm/mcp/prompts.js.map +1 -1
  124. package/dist/esm/mcp/tool-profiles.d.ts +8 -3
  125. package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
  126. package/dist/esm/mcp/tool-profiles.js +25 -54
  127. package/dist/esm/mcp/tool-profiles.js.map +1 -1
  128. package/dist/esm/mcp/tools/memory.d.ts +8 -0
  129. package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
  130. package/dist/esm/mcp/tools/memory.js +156 -128
  131. package/dist/esm/mcp/tools/memory.js.map +1 -1
  132. package/dist/esm/mcp/tools.d.ts.map +1 -1
  133. package/dist/esm/mcp/tools.js +12 -7
  134. package/dist/esm/mcp/tools.js.map +1 -1
  135. package/dist/esm/mcp/workspaceShared.d.ts.map +1 -1
  136. package/dist/esm/mcp/workspaceShared.js +9 -5
  137. package/dist/esm/mcp/workspaceShared.js.map +1 -1
  138. package/dist/esm/proxy/ProjectRegistry.d.ts +20 -0
  139. package/dist/esm/proxy/ProjectRegistry.d.ts.map +1 -1
  140. package/dist/esm/proxy/ProjectRegistry.js +45 -3
  141. package/dist/esm/proxy/ProjectRegistry.js.map +1 -1
  142. package/dist/esm/subconscious/HostRecall.d.ts +26 -2
  143. package/dist/esm/subconscious/HostRecall.d.ts.map +1 -1
  144. package/dist/esm/subconscious/HostRecall.js +99 -37
  145. package/dist/esm/subconscious/HostRecall.js.map +1 -1
  146. package/dist/esm/subconscious/NarrowEvidence.d.ts +47 -0
  147. package/dist/esm/subconscious/NarrowEvidence.d.ts.map +1 -0
  148. package/dist/esm/subconscious/NarrowEvidence.js +211 -0
  149. package/dist/esm/subconscious/NarrowEvidence.js.map +1 -0
  150. package/dist/esm/subconscious/TheBrainV2.d.ts +37 -0
  151. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  152. package/dist/esm/subconscious/TheBrainV2.js +146 -14
  153. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  154. package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts.map +1 -1
  155. package/dist/esm/subconscious/freshness/LocalFsResolver.js +17 -0
  156. package/dist/esm/subconscious/freshness/LocalFsResolver.js.map +1 -1
  157. package/dist/esm/subconscious/recallDigest.d.ts +8 -0
  158. package/dist/esm/subconscious/recallDigest.d.ts.map +1 -1
  159. package/dist/esm/subconscious/recallDigest.js +12 -1
  160. package/dist/esm/subconscious/recallDigest.js.map +1 -1
  161. package/dist/esm/utils/OtherLanguageSymbols.d.ts +31 -0
  162. package/dist/esm/utils/OtherLanguageSymbols.d.ts.map +1 -0
  163. package/dist/esm/utils/OtherLanguageSymbols.js +275 -0
  164. package/dist/esm/utils/OtherLanguageSymbols.js.map +1 -0
  165. package/dist/esm/utils/SavingsLedger.d.ts +27 -0
  166. package/dist/esm/utils/SavingsLedger.d.ts.map +1 -1
  167. package/dist/esm/utils/SavingsLedger.js +51 -0
  168. package/dist/esm/utils/SavingsLedger.js.map +1 -1
  169. package/dist/esm/utils/StoreDraft.d.ts +12 -0
  170. package/dist/esm/utils/StoreDraft.d.ts.map +1 -1
  171. package/dist/esm/utils/StoreDraft.js +52 -1
  172. package/dist/esm/utils/StoreDraft.js.map +1 -1
  173. package/dist/esm/utils/SymbolSurgicalContext.d.ts +2 -0
  174. package/dist/esm/utils/SymbolSurgicalContext.d.ts.map +1 -1
  175. package/dist/esm/utils/SymbolSurgicalContext.js +1 -1
  176. package/dist/esm/utils/SymbolSurgicalContext.js.map +1 -1
  177. package/dist/esm/utils/reportSavings.d.ts +17 -4
  178. package/dist/esm/utils/reportSavings.d.ts.map +1 -1
  179. package/dist/esm/utils/reportSavings.js +65 -22
  180. package/dist/esm/utils/reportSavings.js.map +1 -1
  181. package/package.json +2 -1
  182. package/dashboard/dist/assets/index-CLXWgzTm.css +0 -1
  183. package/dashboard/dist/assets/index-CoMIMxyC.js +0 -451
  184. package/dist/cjs/infra/analyzers/DriftDetector.d.ts +0 -4
  185. package/dist/cjs/infra/analyzers/DriftDetector.d.ts.map +0 -1
  186. package/dist/cjs/infra/analyzers/DriftDetector.js +0 -88
  187. package/dist/cjs/infra/analyzers/DriftDetector.js.map +0 -1
  188. package/dist/cjs/infra/analyzers/InfraAnalyzer.d.ts +0 -3
  189. package/dist/cjs/infra/analyzers/InfraAnalyzer.d.ts.map +0 -1
  190. package/dist/cjs/infra/analyzers/InfraAnalyzer.js +0 -73
  191. package/dist/cjs/infra/analyzers/InfraAnalyzer.js.map +0 -1
  192. package/dist/cjs/infra/config.d.ts +0 -17
  193. package/dist/cjs/infra/config.d.ts.map +0 -1
  194. package/dist/cjs/infra/config.js +0 -111
  195. package/dist/cjs/infra/config.js.map +0 -1
  196. package/dist/cjs/infra/errorCause.d.ts +0 -36
  197. package/dist/cjs/infra/errorCause.d.ts.map +0 -1
  198. package/dist/cjs/infra/errorCause.js +0 -143
  199. package/dist/cjs/infra/errorCause.js.map +0 -1
  200. package/dist/cjs/infra/providers/InfraProvider.d.ts +0 -9
  201. package/dist/cjs/infra/providers/InfraProvider.d.ts.map +0 -1
  202. package/dist/cjs/infra/providers/InfraProvider.js +0 -3
  203. package/dist/cjs/infra/providers/InfraProvider.js.map +0 -1
  204. package/dist/cjs/infra/providers/JenkinsProvider.d.ts +0 -16
  205. package/dist/cjs/infra/providers/JenkinsProvider.d.ts.map +0 -1
  206. package/dist/cjs/infra/providers/JenkinsProvider.js +0 -193
  207. package/dist/cjs/infra/providers/JenkinsProvider.js.map +0 -1
  208. package/dist/cjs/infra/providers/OKDProvider.d.ts +0 -24
  209. package/dist/cjs/infra/providers/OKDProvider.d.ts.map +0 -1
  210. package/dist/cjs/infra/providers/OKDProvider.js +0 -296
  211. package/dist/cjs/infra/providers/OKDProvider.js.map +0 -1
  212. package/dist/cjs/infra/providers/TerraformProvider.d.ts +0 -17
  213. package/dist/cjs/infra/providers/TerraformProvider.d.ts.map +0 -1
  214. package/dist/cjs/infra/providers/TerraformProvider.js +0 -111
  215. package/dist/cjs/infra/providers/TerraformProvider.js.map +0 -1
  216. package/dist/cjs/infra/providers/index.d.ts +0 -9
  217. package/dist/cjs/infra/providers/index.d.ts.map +0 -1
  218. package/dist/cjs/infra/providers/index.js +0 -34
  219. package/dist/cjs/infra/providers/index.js.map +0 -1
  220. package/dist/cjs/infra/templates/jenkins/index.d.ts +0 -15
  221. package/dist/cjs/infra/templates/jenkins/index.d.ts.map +0 -1
  222. package/dist/cjs/infra/templates/jenkins/index.js +0 -128
  223. package/dist/cjs/infra/templates/jenkins/index.js.map +0 -1
  224. package/dist/cjs/infra/templates/okd/index.d.ts +0 -31
  225. package/dist/cjs/infra/templates/okd/index.d.ts.map +0 -1
  226. package/dist/cjs/infra/templates/okd/index.js +0 -149
  227. package/dist/cjs/infra/templates/okd/index.js.map +0 -1
  228. package/dist/esm/infra/analyzers/DriftDetector.d.ts +0 -4
  229. package/dist/esm/infra/analyzers/DriftDetector.d.ts.map +0 -1
  230. package/dist/esm/infra/analyzers/DriftDetector.js +0 -84
  231. package/dist/esm/infra/analyzers/DriftDetector.js.map +0 -1
  232. package/dist/esm/infra/analyzers/InfraAnalyzer.d.ts +0 -3
  233. package/dist/esm/infra/analyzers/InfraAnalyzer.d.ts.map +0 -1
  234. package/dist/esm/infra/analyzers/InfraAnalyzer.js +0 -70
  235. package/dist/esm/infra/analyzers/InfraAnalyzer.js.map +0 -1
  236. package/dist/esm/infra/config.d.ts +0 -17
  237. package/dist/esm/infra/config.d.ts.map +0 -1
  238. package/dist/esm/infra/config.js +0 -101
  239. package/dist/esm/infra/config.js.map +0 -1
  240. package/dist/esm/infra/errorCause.d.ts +0 -36
  241. package/dist/esm/infra/errorCause.d.ts.map +0 -1
  242. package/dist/esm/infra/errorCause.js +0 -138
  243. package/dist/esm/infra/errorCause.js.map +0 -1
  244. package/dist/esm/infra/providers/InfraProvider.d.ts +0 -9
  245. package/dist/esm/infra/providers/InfraProvider.d.ts.map +0 -1
  246. package/dist/esm/infra/providers/InfraProvider.js +0 -2
  247. package/dist/esm/infra/providers/InfraProvider.js.map +0 -1
  248. package/dist/esm/infra/providers/JenkinsProvider.d.ts +0 -16
  249. package/dist/esm/infra/providers/JenkinsProvider.d.ts.map +0 -1
  250. package/dist/esm/infra/providers/JenkinsProvider.js +0 -186
  251. package/dist/esm/infra/providers/JenkinsProvider.js.map +0 -1
  252. package/dist/esm/infra/providers/OKDProvider.d.ts +0 -24
  253. package/dist/esm/infra/providers/OKDProvider.d.ts.map +0 -1
  254. package/dist/esm/infra/providers/OKDProvider.js +0 -292
  255. package/dist/esm/infra/providers/OKDProvider.js.map +0 -1
  256. package/dist/esm/infra/providers/TerraformProvider.d.ts +0 -17
  257. package/dist/esm/infra/providers/TerraformProvider.d.ts.map +0 -1
  258. package/dist/esm/infra/providers/TerraformProvider.js +0 -107
  259. package/dist/esm/infra/providers/TerraformProvider.js.map +0 -1
  260. package/dist/esm/infra/providers/index.d.ts +0 -9
  261. package/dist/esm/infra/providers/index.d.ts.map +0 -1
  262. package/dist/esm/infra/providers/index.js +0 -27
  263. package/dist/esm/infra/providers/index.js.map +0 -1
  264. package/dist/esm/infra/templates/jenkins/index.d.ts +0 -15
  265. package/dist/esm/infra/templates/jenkins/index.d.ts.map +0 -1
  266. package/dist/esm/infra/templates/jenkins/index.js +0 -124
  267. package/dist/esm/infra/templates/jenkins/index.js.map +0 -1
  268. package/dist/esm/infra/templates/okd/index.d.ts +0 -31
  269. package/dist/esm/infra/templates/okd/index.d.ts.map +0 -1
  270. package/dist/esm/infra/templates/okd/index.js +0 -142
  271. package/dist/esm/infra/templates/okd/index.js.map +0 -1
@@ -13,13 +13,25 @@ export interface RegisteredProject {
13
13
  export type ProjectStatus = 'active' | 'idle' | 'offline';
14
14
  export interface ProjectSnapshot extends RegisteredProject {
15
15
  status: ProjectStatus;
16
+ /** Distinct memories a recall note (hook, briefing or read-tool note) put in front of an agent. */
17
+ offeredCount: number;
18
+ /** Of those, how many the agent then opened with get_memory. */
19
+ usedCount: number;
16
20
  }
17
21
  /** MCP servers heartbeat every 30s; three missed beats and the project counts as disconnected. */
18
22
  export declare const OFFLINE_AFTER_MS = 90000;
19
23
  /** Same threshold /api/mcp-status uses for "active". */
20
24
  export declare const ACTIVE_WITHIN_MS = 60000;
25
+ /**
26
+ * A get_memory counts as using an offered memory only this soon after the offer — a stand-in
27
+ * for "the same working session", since the hook knows the host's session id and the MCP
28
+ * server doesn't.
29
+ */
30
+ export declare const RECALL_USE_WINDOW_MS: number;
21
31
  export declare class ProjectRegistry {
22
32
  private projects;
33
+ private recall;
34
+ private tally;
23
35
  register(projectPath: string, name: string, stack: string): RegisteredProject;
24
36
  /**
25
37
  * Keep-alive from an MCP server. Re-registers a project the daemon forgot (it restarted),
@@ -29,6 +41,14 @@ export declare class ProjectRegistry {
29
41
  heartbeat(projectPath: string, name: string, stack: string): RegisteredProject;
30
42
  /** A tool call from this project. Registers it if the handshake never reached this daemon. */
31
43
  recordToolCall(projectPath: string): RegisteredProject;
44
+ /** A recall note offered these memories in this project. Doesn't touch connection status. */
45
+ recordOffered(projectPath: string, ids: string[], now?: number): void;
46
+ /**
47
+ * get_memory read `id` in this project. True when a note had offered it within
48
+ * RECALL_USE_WINDOW_MS — the agent acted on recall it didn't have to search for. A read of a
49
+ * memory nobody offered (an id from search_memory, or carried over) is not counted here.
50
+ */
51
+ recordRecallUse(projectPath: string, id: string, now?: number): boolean;
32
52
  get(projectPath: string): RegisteredProject | undefined;
33
53
  touch(projectPath: string): void;
34
54
  getActive(): RegisteredProject | null;
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectRegistry.d.ts","sourceRoot":"","sources":["../../../src/proxy/ProjectRegistry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,UAAU,EAAE,MAAM,CAAC;IACnB,gGAAgG;IAChG,QAAQ,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,kGAAkG;AAClG,eAAO,MAAM,gBAAgB,QAAS,CAAC;AACvC,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAEvC,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAwC;IAExD,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAsB7E;;;;OAIG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAQ9E,8FAA8F;IAC9F,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB;IAYtD,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIvD,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKhC,SAAS,IAAI,iBAAiB,GAAG,IAAI;IAYrC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAQ1D,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,SAAK,GAAG,OAAO;IAIxD,MAAM,IAAI,iBAAiB,EAAE;IAI7B,kFAAkF;IAClF,QAAQ,CAAC,GAAG,SAAa,GAAG,eAAe,EAAE;CAU9C"}
1
+ {"version":3,"file":"ProjectRegistry.d.ts","sourceRoot":"","sources":["../../../src/proxy/ProjectRegistry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,UAAU,EAAE,MAAM,CAAC;IACnB,gGAAgG;IAChG,QAAQ,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,MAAM,EAAE,aAAa,CAAC;IACtB,mGAAmG;IACnG,YAAY,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,kGAAkG;AAClG,eAAO,MAAM,gBAAgB,QAAS,CAAC;AACvC,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,QAAS,CAAC;AACvC;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAAqB,CAAC;AAWvD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,MAAM,CAAkC;IAEhD,OAAO,CAAC,KAAK;IASb,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAsB7E;;;;OAIG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAQ9E,8FAA8F;IAC9F,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB;IAUtD,6FAA6F;IAC7F,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,SAAa,GAAG,IAAI;IAUzE;;;;OAIG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO;IAQ3E,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIvD,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKhC,SAAS,IAAI,iBAAiB,GAAG,IAAI;IAYrC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAQ1D,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,SAAK,GAAG,OAAO;IAIxD,MAAM,IAAI,iBAAiB,EAAE;IAI7B,kFAAkF;IAClF,QAAQ,CAAC,GAAG,SAAa,GAAG,eAAe,EAAE;CAW9C"}
@@ -1,13 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProjectRegistry = exports.ACTIVE_WITHIN_MS = exports.OFFLINE_AFTER_MS = void 0;
3
+ exports.ProjectRegistry = exports.RECALL_USE_WINDOW_MS = exports.ACTIVE_WITHIN_MS = exports.OFFLINE_AFTER_MS = void 0;
4
4
  /** MCP servers heartbeat every 30s; three missed beats and the project counts as disconnected. */
5
5
  exports.OFFLINE_AFTER_MS = 90000;
6
6
  /** Same threshold /api/mcp-status uses for "active". */
7
7
  exports.ACTIVE_WITHIN_MS = 60000;
8
+ /**
9
+ * A get_memory counts as using an offered memory only this soon after the offer — a stand-in
10
+ * for "the same working session", since the hook knows the host's session id and the MCP
11
+ * server doesn't.
12
+ */
13
+ exports.RECALL_USE_WINDOW_MS = 6 * 60 * 60 * 1000;
14
+ const MAX_OFFERED_PER_PROJECT = 2000;
15
+ const folderName = (projectPath) => projectPath.split(/[\\/]/).filter(Boolean).pop() || projectPath;
8
16
  class ProjectRegistry {
9
17
  constructor() {
10
18
  this.projects = new Map();
19
+ this.recall = new Map();
20
+ }
21
+ tally(projectPath) {
22
+ let t = this.recall.get(projectPath);
23
+ if (!t) {
24
+ t = { offered: new Map(), used: new Set() };
25
+ this.recall.set(projectPath, t);
26
+ }
27
+ return t;
11
28
  }
12
29
  register(projectPath, name, stack) {
13
30
  const now = Date.now();
@@ -47,8 +64,7 @@ class ProjectRegistry {
47
64
  }
48
65
  /** A tool call from this project. Registers it if the handshake never reached this daemon. */
49
66
  recordToolCall(projectPath) {
50
- const project = this.projects.get(projectPath) ??
51
- this.register(projectPath, projectPath.split(/[\\/]/).filter(Boolean).pop() || projectPath, '');
67
+ const project = this.projects.get(projectPath) ?? this.register(projectPath, folderName(projectPath), '');
52
68
  const now = Date.now();
53
69
  project.lastActive = now;
54
70
  project.lastSeen = now;
@@ -56,6 +72,31 @@ class ProjectRegistry {
56
72
  project.toolCallCount++;
57
73
  return project;
58
74
  }
75
+ /** A recall note offered these memories in this project. Doesn't touch connection status. */
76
+ recordOffered(projectPath, ids, now = Date.now()) {
77
+ if (!this.projects.has(projectPath))
78
+ this.register(projectPath, folderName(projectPath), '');
79
+ const { offered } = this.tally(projectPath);
80
+ for (const id of ids) {
81
+ offered.delete(id); // re-insert so the oldest offers are the ones evicted
82
+ offered.set(id, now);
83
+ }
84
+ while (offered.size > MAX_OFFERED_PER_PROJECT)
85
+ offered.delete(offered.keys().next().value);
86
+ }
87
+ /**
88
+ * get_memory read `id` in this project. True when a note had offered it within
89
+ * RECALL_USE_WINDOW_MS — the agent acted on recall it didn't have to search for. A read of a
90
+ * memory nobody offered (an id from search_memory, or carried over) is not counted here.
91
+ */
92
+ recordRecallUse(projectPath, id, now = Date.now()) {
93
+ const t = this.recall.get(projectPath);
94
+ const at = t?.offered.get(id);
95
+ if (!t || at === undefined || now - at > exports.RECALL_USE_WINDOW_MS)
96
+ return false;
97
+ t.used.add(id);
98
+ return true;
99
+ }
59
100
  get(projectPath) {
60
101
  return this.projects.get(projectPath);
61
102
  }
@@ -98,7 +139,8 @@ class ProjectRegistry {
98
139
  status = 'offline';
99
140
  else if (p.lastToolCall !== null && now - p.lastToolCall < exports.ACTIVE_WITHIN_MS)
100
141
  status = 'active';
101
- return { ...p, status };
142
+ const t = this.recall.get(p.path);
143
+ return { ...p, status, offeredCount: t?.offered.size ?? 0, usedCount: t?.used.size ?? 0 };
102
144
  })
103
145
  .sort((a, b) => b.lastActive - a.lastActive);
104
146
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectRegistry.js","sourceRoot":"","sources":["../../../src/proxy/ProjectRegistry.ts"],"names":[],"mappings":";;;AAmBA,kGAAkG;AACrF,QAAA,gBAAgB,GAAG,KAAM,CAAC;AACvC,wDAAwD;AAC3C,QAAA,gBAAgB,GAAG,KAAM,CAAC;AAEvC,MAAa,eAAe;IAA5B;QACU,aAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAkG1D,CAAC;IAhGC,QAAQ,CAAC,WAAmB,EAAE,IAAY,EAAE,KAAa;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC;YAC1B,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;YACxB,IAAI,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,KAAK;gBAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;YAC9D,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,OAAO,GAAsB;YACjC,IAAI;YACJ,IAAI,EAAE,WAAW;YACjB,KAAK;YACL,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,GAAG;YACb,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,CAAC;SACjB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,WAAmB,EAAE,IAAY,EAAE,KAAa;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9D,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,8FAA8F;IAC9F,cAAc,CAAC,WAAmB;QAChC,MAAM,OAAO,GACX,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,WAAW,EAAE,EAAE,CAAC,CAAC;QAClG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;QACzB,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;QACvB,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC;QAC3B,OAAO,CAAC,aAAa,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,WAAmB;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,WAAmB;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC;YAAE,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;IAED,SAAS;QACP,IAAI,MAAM,GAA6B,IAAI,CAAC;QAC5C,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC;gBAC1B,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC;gBACtB,MAAM,GAAG,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kBAAkB,CAAC,IAAY;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,OAA0B,EAAE,KAAK,GAAG,EAAE;QAC5C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,UAAU,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAClE,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,kFAAkF;IAClF,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACvB,OAAO,IAAI,CAAC,MAAM,EAAE;aACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,IAAI,MAAM,GAAkB,MAAM,CAAC;YACnC,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,wBAAgB;gBAAE,MAAM,GAAG,SAAS,CAAC;iBACvD,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,YAAY,GAAG,wBAAgB;gBAAE,MAAM,GAAG,QAAQ,CAAC;YAC/F,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;CACF;AAnGD,0CAmGC"}
1
+ {"version":3,"file":"ProjectRegistry.js","sourceRoot":"","sources":["../../../src/proxy/ProjectRegistry.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,14 @@
27
27
  * only when a search actually returns it to a caller.
28
28
  */
29
29
  import { TheBrainV2 } from './TheBrainV2';
30
+ import type { RecallTrigger } from '../utils/reportSavings';
31
+ /** A note plus what it put in front of the agent — reported to the dashboard as recall. */
32
+ export interface RecallNote {
33
+ text: string;
34
+ /** Ids the note named. Empty for notes that carry no memory (stale build, status question). */
35
+ offered: string[];
36
+ trigger: RecallTrigger;
37
+ }
30
38
  /**
31
39
  * BM25 similarity is normalized against the corpus, so the top result of any query scores
32
40
  * high — and every fix memory shares the "fix:" token. It only nominates candidates; this
@@ -41,9 +49,21 @@ export declare function headlineOverlap(a: string, b: string): number;
41
49
  * Never throws: a recall hint must never be the reason a tool call reports an error.
42
50
  */
43
51
  export declare function recallForHookPayload(payload: unknown, cwd?: string, brain?: TheBrainV2): string;
52
+ /** recallForHookPayload with what the note offered, for reporting. Null when there's no note. */
53
+ export declare function hookRecall(payload: unknown, cwd?: string, brain?: TheBrainV2): RecallNote | null;
44
54
  export declare function isStatusQuestion(prompt: string): boolean;
45
- /** Share of the memory headline's terms that also appear in the prompt. */
46
- export declare function headlineCoverage(headline: string, prompt: string): number;
55
+ /**
56
+ * How much of what the prompt is about appears in a memory's headline: the IDF-weighted share
57
+ * of the prompt's words (or their stem / bilingual synonym) found among the headline's terms.
58
+ *
59
+ * This replaced "share of the headline found in the prompt", which needed a short prompt to
60
+ * restate half of a long, specific headline: measured on Lemma's own Brain it offered the right
61
+ * memory for 1 of 30 real questions; weighted toward the prompt's rare words it offers several
62
+ * times more and never a wrong one (thresholds above). Prompts with under PROMPT_MIN_UNITS
63
+ * informative words are skipped, which is where the false offers were. This note arrives unasked on every prompt, so it keeps
64
+ * a floor — search_memory, which the agent calls on purpose, does not.
65
+ */
66
+ export declare function promptCoverage(headline: string, prompt: string, idf: (term: string) => number): number;
47
67
  /**
48
68
  * The note (empty string for none) for a host UserPromptSubmit payload. This is the one
49
69
  * moment recall can happen before the agent answers from its own notes: a status question
@@ -63,6 +83,8 @@ export interface PromptRecallOptions {
63
83
  mcpProcessDir?: string;
64
84
  }
65
85
  export declare function recallForPrompt(payload: unknown, cwd?: string, brain?: TheBrainV2, options?: PromptRecallOptions): string;
86
+ /** recallForPrompt with the memories it offered, for reporting. Null when there's nothing to say. */
87
+ export declare function promptRecall(payload: unknown, cwd?: string, brain?: TheBrainV2, options?: PromptRecallOptions): RecallNote | null;
66
88
  /** Tools the playbook names, in one ToolSearch line for hosts that defer MCP schemas. */
67
89
  export declare const PLAYBOOK_TOOLS: string[];
68
90
  /**
@@ -72,4 +94,6 @@ export declare const PLAYBOOK_TOOLS: string[];
72
94
  */
73
95
  export declare const LEMMA_PLAYBOOK: string;
74
96
  export declare function sessionBriefing(payload: unknown, cwd?: string, brain?: TheBrainV2): string;
97
+ /** sessionBriefing with the memories it named, for reporting. */
98
+ export declare function sessionRecall(payload: unknown, cwd?: string, brain?: TheBrainV2): RecallNote | null;
75
99
  //# sourceMappingURL=HostRecall.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HostRecall.d.ts","sourceRoot":"","sources":["../../../src/subconscious/HostRecall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EAA0C,UAAU,EAAE,MAAM,cAAc,CAAC;AASlF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAgEzC,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAO5D;AAwBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CAgC/F;AAWD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAExD;AAQD,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAOzE;AAQD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,mBAAmB;IAClC,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAqD7H;AASD,yFAAyF;AACzF,eAAO,MAAM,cAAc,UAQ1B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAQf,CAAC;AAIb,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CA8B1F"}
1
+ {"version":3,"file":"HostRecall.d.ts","sourceRoot":"","sources":["../../../src/subconscious/HostRecall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EAA0C,UAAU,EAAY,MAAM,cAAc,CAAC;AAO5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,2FAA2F;AAC3F,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,+FAA+F;IAC/F,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;CACxB;AAKD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAoEzC,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAO5D;AA0BD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CAE/F;AAED,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAgChG;AAWD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAExD;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAYtG;AAQD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,mBAAmB;IAClC,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAE7H;AAED,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,UAAU,GAAG,IAAI,CA6DrI;AASD,yFAAyF;AACzF,eAAO,MAAM,cAAc,UAQ1B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAQf,CAAC;AAIb,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CAE1F;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAiCnG"}
@@ -34,10 +34,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
34
34
  exports.LEMMA_PLAYBOOK = exports.PLAYBOOK_TOOLS = exports.FIX_MATCH_MIN_OVERLAP = void 0;
35
35
  exports.headlineOverlap = headlineOverlap;
36
36
  exports.recallForHookPayload = recallForHookPayload;
37
+ exports.hookRecall = hookRecall;
37
38
  exports.isStatusQuestion = isStatusQuestion;
38
- exports.headlineCoverage = headlineCoverage;
39
+ exports.promptCoverage = promptCoverage;
39
40
  exports.recallForPrompt = recallForPrompt;
41
+ exports.promptRecall = promptRecall;
40
42
  exports.sessionBriefing = sessionBriefing;
43
+ exports.sessionRecall = sessionRecall;
41
44
  const fs_1 = __importDefault(require("fs"));
42
45
  const path_1 = __importDefault(require("path"));
43
46
  const TheBrainV2_1 = require("./TheBrainV2");
@@ -88,9 +91,12 @@ function fileNote(brain, toolName, filePath) {
88
91
  return null;
89
92
  const name = path_1.default.basename(filePath);
90
93
  if (READ_TOOLS.has(toolName)) {
91
- const ids = result.hits.map((h) => h.id).sort();
92
- const text = (0, recallDigest_1.formatFileDigest)(name, (0, recallDigest_1.digestFileHits)(brain, result.hits));
93
- return { key: `read::${path_1.default.resolve(filePath)}::${ids.join(',')}`, text };
94
+ const hits = (0, recallDigest_1.recallableHits)(brain, result.hits);
95
+ if (hits.length === 0)
96
+ return null;
97
+ const ids = hits.map((h) => h.id).sort();
98
+ const digest = (0, recallDigest_1.digestFileHits)(brain, hits);
99
+ return { key: `read::${path_1.default.resolve(filePath)}::${ids.join(',')}`, text: (0, recallDigest_1.formatFileDigest)(name, digest), offered: digest.ids, trigger: 'read' };
94
100
  }
95
101
  // Native edits: only the escalated case. "N memories will go stale" on every edit is noise.
96
102
  if (result.failedHits.length === 0)
@@ -99,6 +105,8 @@ function fileNote(brain, toolName, filePath) {
99
105
  return {
100
106
  key: `edit::${path_1.default.resolve(filePath)}::${failedIds.join(',')}`,
101
107
  text: `⚠️ Lemma Brain: ${failedIds.join(', ')} document an approach to ${name} that was tried and FAILED. get_memory them before continuing down this path.`,
108
+ offered: failedIds,
109
+ trigger: 'edit',
102
110
  };
103
111
  }
104
112
  function headlineTerms(text) {
@@ -143,6 +151,8 @@ function failureNote(brain, root, output) {
143
151
  return {
144
152
  key: `fix::${match.id}`,
145
153
  text: `🧠 Lemma Brain has a recorded fix for a failure like this one (id ${match.id}): "${match.query.slice(0, 120)}". get_memory ${match.id} for the files and diff that fixed it.`,
154
+ offered: [match.id],
155
+ trigger: 'failure',
146
156
  };
147
157
  }
148
158
  /**
@@ -150,9 +160,13 @@ function failureNote(brain, root, output) {
150
160
  * Never throws: a recall hint must never be the reason a tool call reports an error.
151
161
  */
152
162
  function recallForHookPayload(payload, cwd, brain) {
163
+ return hookRecall(payload, cwd, brain)?.text ?? '';
164
+ }
165
+ /** recallForHookPayload with what the note offered, for reporting. Null when there's no note. */
166
+ function hookRecall(payload, cwd, brain) {
153
167
  try {
154
168
  if (!payload || typeof payload !== 'object')
155
- return '';
169
+ return null;
156
170
  const p = payload;
157
171
  const toolName = typeof p.tool_name === 'string' ? p.tool_name : '';
158
172
  const root = (0, TeamBrain_1.repoRoot)(cwd || p.cwd || process.cwd());
@@ -161,31 +175,31 @@ function recallForHookPayload(payload, cwd, brain) {
161
175
  if (READ_TOOLS.has(toolName) || EDIT_TOOLS.has(toolName)) {
162
176
  const raw = p.tool_input?.file_path ?? p.tool_input?.notebook_path;
163
177
  if (typeof raw !== 'string' || !raw)
164
- return '';
178
+ return null;
165
179
  const filePath = path_1.default.isAbsolute(raw) ? raw : path_1.default.join(root, raw);
166
180
  note = fileNote(b, toolName, filePath);
167
181
  }
168
182
  else if (toolName === 'Bash') {
169
183
  const command = p.tool_input?.command;
170
184
  if (typeof command !== 'string' || !(0, FixCapture_1.isVerdictCommand)(command))
171
- return '';
185
+ return null;
172
186
  const verdict = (0, FixCapture_1.hookVerdict)(p);
173
187
  if (!verdict || verdict.passed)
174
- return '';
188
+ return null;
175
189
  note = failureNote(b, root, verdict.output);
176
190
  }
177
191
  if (!note)
178
- return '';
192
+ return null;
179
193
  const sessionId = typeof p.session_id === 'string' ? p.session_id : '';
180
194
  const state = readState(root, sessionId);
181
195
  if (state.noted.includes(note.key))
182
- return '';
196
+ return null;
183
197
  state.noted.push(note.key);
184
198
  writeState(root, state);
185
- return note.text;
199
+ return { text: note.text, offered: note.offered, trigger: note.trigger };
186
200
  }
187
201
  catch {
188
- return '';
202
+ return null;
189
203
  }
190
204
  }
191
205
  /**
@@ -200,20 +214,52 @@ function isStatusQuestion(prompt) {
200
214
  }
201
215
  /** At most this many memories are named in one prompt note. */
202
216
  const MAX_PROMPT_HITS = 3;
203
- /** A prompt is long and a memory headline short, so overlap is measured against the headline. */
217
+ /**
218
+ * Share of the prompt's information (IDF-weighted) a memory headline must carry: the best-ranked
219
+ * memory needs PROMPT_TOP_COVERAGE, the next ones PROMPT_MIN_COVERAGE. Measured on Lemma's own
220
+ * Brain: 13 of 35 real questions get the right memory and none a wrong one, while 1 of 40
221
+ * unrelated work prompts gets an offer. The lexical rank is right far more often than any
222
+ * single memory's coverage says, so the top result gets the lower bar.
223
+ */
224
+ const PROMPT_TOP_COVERAGE = 0.4;
204
225
  const PROMPT_MIN_COVERAGE = 0.5;
205
- const PROMPT_MIN_HEADLINE_TERMS = 3;
206
- /** Share of the memory headline's terms that also appear in the prompt. */
207
- function headlineCoverage(headline, prompt) {
208
- const h = headlineTerms(headline);
209
- if (h.size < PROMPT_MIN_HEADLINE_TERMS)
226
+ /** Prompts with fewer informative words ("run the tests", "commit and push") carry no topic. */
227
+ const PROMPT_MIN_UNITS = 3;
228
+ /** Each word of `text` with its index expansions (stem, synonym tag); stop words drop out. */
229
+ function wordUnits(text) {
230
+ const words = new Set(text
231
+ .normalize('NFD')
232
+ .replace(/[\u0300-\u036f]/g, '')
233
+ .toLowerCase()
234
+ .split(/[^a-z0-9]+/)
235
+ .filter(Boolean));
236
+ return [...words].map((w) => (0, TheBrainV2_1.tokenize)(w)).filter((u) => u.length > 0);
237
+ }
238
+ /**
239
+ * How much of what the prompt is about appears in a memory's headline: the IDF-weighted share
240
+ * of the prompt's words (or their stem / bilingual synonym) found among the headline's terms.
241
+ *
242
+ * This replaced "share of the headline found in the prompt", which needed a short prompt to
243
+ * restate half of a long, specific headline: measured on Lemma's own Brain it offered the right
244
+ * memory for 1 of 30 real questions; weighted toward the prompt's rare words it offers several
245
+ * times more and never a wrong one (thresholds above). Prompts with under PROMPT_MIN_UNITS
246
+ * informative words are skipped, which is where the false offers were. This note arrives unasked on every prompt, so it keeps
247
+ * a floor — search_memory, which the agent calls on purpose, does not.
248
+ */
249
+ function promptCoverage(headline, prompt, idf) {
250
+ const units = wordUnits(prompt);
251
+ if (units.length < PROMPT_MIN_UNITS)
210
252
  return 0;
211
- const p = headlineTerms(prompt);
212
- let shared = 0;
213
- for (const t of h)
214
- if (p.has(t))
215
- shared++;
216
- return shared / h.size;
253
+ const head = new Set((0, TheBrainV2_1.tokenize)(headline));
254
+ let total = 0;
255
+ let covered = 0;
256
+ for (const unit of units) {
257
+ const weight = Math.max(...unit.map(idf));
258
+ total += weight;
259
+ if (unit.some((t) => head.has(t)))
260
+ covered += weight;
261
+ }
262
+ return total > 0 ? covered / total : 0;
217
263
  }
218
264
  function promptKey(prompt) {
219
265
  let h = 0;
@@ -222,27 +268,37 @@ function promptKey(prompt) {
222
268
  return `prompt::${h}`;
223
269
  }
224
270
  function recallForPrompt(payload, cwd, brain, options = {}) {
271
+ return promptRecall(payload, cwd, brain, options)?.text ?? '';
272
+ }
273
+ /** recallForPrompt with the memories it offered, for reporting. Null when there's nothing to say. */
274
+ function promptRecall(payload, cwd, brain, options = {}) {
225
275
  try {
226
276
  if (!payload || typeof payload !== 'object')
227
- return '';
277
+ return null;
228
278
  const p = payload;
229
279
  const prompt = typeof p.prompt === 'string' ? p.prompt.trim() : '';
230
280
  // Slash commands and one-word replies carry no topic worth a lookup.
231
281
  if (prompt.length < 12 || prompt.startsWith('/'))
232
- return '';
282
+ return null;
233
283
  const root = (0, TeamBrain_1.repoRoot)(cwd || p.cwd || process.cwd());
234
284
  const b = brain ?? (0, TheBrainV2_1.getBrain)();
235
285
  const lines = [];
236
286
  const hits = b
237
287
  .search(prompt.slice(0, 600), 8, 0, { countStats: false, projectId: (0, TheBrainV2_1.deriveProjectId)(root), strictProject: true })
238
- .filter((r) => headlineCoverage(r.query, prompt) >= PROMPT_MIN_COVERAGE)
288
+ .filter((r, rank) => promptCoverage(r.query, prompt, (t) => b.termIdf(t)) >= (rank === 0 ? PROMPT_TOP_COVERAGE : PROMPT_MIN_COVERAGE))
289
+ .filter((r) => {
290
+ const entry = b.getEntry(r.id);
291
+ return !entry || (0, TheBrainV2_1.entrySource)(entry) !== 'auto-git';
292
+ })
239
293
  .slice(0, MAX_PROMPT_HITS);
240
294
  if (hits.length > 0) {
295
+ // With the headline: an id alone gives the agent nothing to judge relevance by.
241
296
  const described = hits.map((r) => {
242
297
  const verdict = !r.fresh ? 'STALE' : r.untracked ? 'untracked' : 'fresh';
243
- return `${r.id} (${(0, ageLabel_1.ageLabel)(r.timestamp)}, ${verdict}${r.outcome === 'failed' ? ', FAILED approach' : ''})`;
298
+ const head = r.query.replace(/\s+/g, ' ').trim();
299
+ return ` • ${r.id} (${verdict}, ${(0, ageLabel_1.ageLabel)(r.timestamp)}${r.outcome === 'failed' ? ', FAILED approach' : ''}): ${head.length > 110 ? `${head.slice(0, 109)}…` : head}`;
244
300
  });
245
- lines.push(`🧠 Lemma Brain has ${plural(hits.length, 'a memory', 'memories')} that may bear on this: ${described.join('; ')}. get_memory / verify_memory before relying on ${plural(hits.length, 'it', 'them')}.`);
301
+ lines.push(`🧠 Lemma Brain has ${plural(hits.length, 'a memory', 'memories')} that may bear on this:`, ...described, `get_memory the one that applies before relying on it; a STALE one must be re-checked against the current code.`);
246
302
  }
247
303
  if (isStatusQuestion(prompt)) {
248
304
  lines.push('🧠 This is a status question: recalled memories and notes go stale as MRs merge and issues close. Verify live state (git fetch/log, gh/glab) before saying what is pending.');
@@ -252,9 +308,11 @@ function recallForPrompt(payload, cwd, brain, options = {}) {
252
308
  const out = [];
253
309
  // Topical lines are deduped per prompt; the other two have their own one-shot rules.
254
310
  const key = promptKey(prompt);
311
+ let offered = [];
255
312
  if (lines.length > 0 && !state.noted.includes(key)) {
256
313
  out.push(...lines);
257
314
  state.noted.push(key);
315
+ offered = hits.map((r) => r.id);
258
316
  }
259
317
  // A build newer than the running MCP process is spoken once per host session: it is true
260
318
  // until the user reconnects, and the tool-result suffix never reaches someone who does not
@@ -270,12 +328,12 @@ function recallForPrompt(payload, cwd, brain, options = {}) {
270
328
  if (draft)
271
329
  out.push(draft);
272
330
  if (out.length === 0)
273
- return '';
331
+ return null;
274
332
  writeState(root, state);
275
- return out.join('\n');
333
+ return { text: out.join('\n'), offered, trigger: 'prompt' };
276
334
  }
277
335
  catch {
278
- return '';
336
+ return null;
279
337
  }
280
338
  }
281
339
  // ── SessionStart: the briefing that used to depend on the agent calling for it ──────────
@@ -303,19 +361,24 @@ exports.LEMMA_PLAYBOOK = [
303
361
  'Lemma playbook — follow these triggers:',
304
362
  ' - Before investigating a bug, error or "why does X": search_memory with the error text or question.',
305
363
  ' - A 🧠 note names memories: get_memory the top one before re-deriving what it says.',
306
- ' - A fix is verified (tests pass, build succeeds, user confirms): store_memory with filePaths.',
364
+ ' - A fix is verified (tests pass, build succeeds, user confirms): store_memory with filePaths — the root cause, trap or failed approach, not a summary of what changed (git log has that).',
307
365
  ' - A memory turned out outdated or wrong: update_memory / forget_memory — never store a near-duplicate.',
308
366
  ' - Reading code you have not located yet, or that may hold secrets: search_workspace / read_workspace_file (they scrub keys).',
309
367
  `If Lemma's tools are deferred, load them in ONE ToolSearch: select:${exports.PLAYBOOK_TOOLS.map((t) => `mcp__lemma__${t}`).join(',')}`,
310
368
  ].join('\n');
311
369
  const BRIEFING_MEMORIES = 3;
312
370
  function sessionBriefing(payload, cwd, brain) {
371
+ return sessionRecall(payload, cwd, brain)?.text ?? '';
372
+ }
373
+ /** sessionBriefing with the memories it named, for reporting. */
374
+ function sessionRecall(payload, cwd, brain) {
313
375
  try {
314
376
  const p = payload && typeof payload === 'object' ? payload : {};
315
377
  const root = (0, TeamBrain_1.repoRoot)(cwd || p.cwd || process.cwd());
316
378
  const b = brain ?? (0, TheBrainV2_1.getBrain)();
317
379
  const projectId = (0, TheBrainV2_1.deriveProjectId)(root);
318
380
  const lines = [];
381
+ let offered = [];
319
382
  const { total, items } = b.list({ projectId, limit: 50 });
320
383
  if (total === 0) {
321
384
  lines.push(`🧠 Lemma is active in ${path_1.default.basename(root)}. The Brain has no memories for this project yet — store_memory once a fix is verified so the next session starts ahead.`);
@@ -331,14 +394,16 @@ function sessionBriefing(payload, cwd, brain) {
331
394
  lines.push(`🧠 Lemma is active in ${path_1.default.basename(root)}: the Brain holds ${total} ${plural(total, 'memory', 'memories')} for this project.`);
332
395
  if (deliberate.length > 0) {
333
396
  lines.push('Most recent decisions and fixes:');
334
- lines.push(...(0, recallDigest_1.digestFileHits)(b, deliberate, BRIEFING_MEMORIES).lines);
397
+ const digest = (0, recallDigest_1.digestFileHits)(b, deliberate, BRIEFING_MEMORIES);
398
+ lines.push(...digest.lines);
399
+ offered = digest.ids;
335
400
  }
336
401
  }
337
402
  lines.push(exports.LEMMA_PLAYBOOK);
338
- return lines.join('\n');
403
+ return { text: lines.join('\n'), offered, trigger: 'session' };
339
404
  }
340
405
  catch {
341
- return '';
406
+ return null;
342
407
  }
343
408
  }
344
409
  //# sourceMappingURL=HostRecall.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HostRecall.js","sourceRoot":"","sources":["../../../src/subconscious/HostRecall.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;;;;AAoFH,0CAOC;AA4BD,oDAgCC;AAWD,4CAEC;AASD,4CAOC;AA2BD,0CAqDC;AAqCD,0CA8BC;AArUD,4CAAoB;AACpB,gDAAwB;AACxB,6CAAkF;AAClF,2CAAuC;AACvC,oDAAoF;AACpF,gDAA6C;AAC7C,oDAAwD;AACxD,kDAAwD;AACxD,iDAAkE;AAElE,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;AACtE;;;;;GAKG;AACU,QAAA,qBAAqB,GAAG,GAAG,CAAC;AACzC,uFAAuF;AACvF,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;AAO3E,SAAS,SAAS,CAAC,IAAY,EAAE,SAAiB;IAChD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAU,CAAC;QACpF,uFAAuF;QACvF,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC,CAAC,sCAAsC,CAAC,CAAC;IAClD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,KAAY;IAC5C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACzC,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc;YAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC;QAC1F,YAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC,CAAC,uEAAuE,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,MAAM,CAAC,CAAS,EAAE,GAAW,EAAE,IAAY;IAClD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAiB,EAAE,QAAgB,EAAE,QAAgB;IACrE,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,IAAI,GAAG,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAErC,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,IAAA,+BAAgB,EAAC,IAAI,EAAE,IAAA,6BAAc,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,OAAO,EAAE,GAAG,EAAE,SAAS,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;IAC5E,CAAC;IAED,4FAA4F;IAC5F,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,OAAO;QACL,GAAG,EAAE,SAAS,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC9D,IAAI,EAAE,mBAAmB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,IAAI,+EAA+E;KAC7J,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,GAAG,CACZ,IAAI;SACD,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,WAAW,EAAE;SACb,KAAK,CAAC,aAAa,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACnD,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,SAAgB,eAAe,CAAC,CAAS,EAAE,CAAS;IAClD,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,MAAM,EAAE,CAAC;IAC5C,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB,EAAE,IAAY,EAAE,MAAc;IAClE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,2BAAc,EAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;QACrD,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,IAAA,4BAAe,EAAC,IAAI,CAAC;QAChC,mFAAmF;QACnF,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,6BAAqB;YAAE,OAAO,KAAK,CAAC;QAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,KAAK,IAAI,IAAA,wBAAW,EAAC,KAAK,CAAC,KAAK,UAAU,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO;QACL,GAAG,EAAE,QAAQ,KAAK,CAAC,EAAE,EAAE;QACvB,IAAI,EAAE,qEAAqE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,iBAAiB,KAAK,CAAC,EAAE,wCAAwC;KACrL,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,OAAgB,EAAE,GAAY,EAAE,KAAkB;IACrF,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACvD,MAAM,CAAC,GAAG,OAA8B,CAAC;QACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,GAAG,IAAA,oBAAQ,EAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,KAAK,IAAI,IAAA,qBAAQ,GAAE,CAAC;QAE9B,IAAI,IAAI,GAAyC,IAAI,CAAC;QACtD,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,IAAI,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC;YACnE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,cAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACnE,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC;YACtC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAA,6BAAgB,EAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,CAAC;YACzE,MAAM,OAAO,GAAG,IAAA,wBAAW,EAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;YAC1C,IAAI,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAC9C,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,eAAe,GACnB,2LAA2L,CAAC;AAE9L,SAAgB,gBAAgB,CAAC,MAAc;IAC7C,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,+DAA+D;AAC/D,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,iGAAiG;AACjG,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAEpC,2EAA2E;AAC3E,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,MAAc;IAC/D,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC,IAAI,GAAG,yBAAyB;QAAE,OAAO,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,MAAM,EAAE,CAAC;IAC1C,OAAO,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,MAAc;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChF,OAAO,WAAW,CAAC,EAAE,CAAC;AACxB,CAAC;AAqBD,SAAgB,eAAe,CAAC,OAAgB,EAAE,GAAY,EAAE,KAAkB,EAAE,UAA+B,EAAE;IACnH,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACvD,MAAM,CAAC,GAAG,OAA8B,CAAC;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,qEAAqE;QACrE,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAA,oBAAQ,EAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,KAAK,IAAI,IAAA,qBAAQ,GAAE,CAAC;QAE9B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,CAAC;aACX,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,IAAA,4BAAe,EAAC,IAAI,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aAChH,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,mBAAmB,CAAC;aACvE,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;gBACzE,OAAO,GAAG,CAAC,CAAC,EAAE,KAAK,IAAA,mBAAQ,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;YAC9G,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,2BAA2B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,kDAAkD,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACrN,CAAC;QACD,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,6KAA6K,CAAC,CAAC;QAC5L,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,MAAM,GAAG,GAAa,EAAE,CAAC;QAEzB,qFAAqF;QACrF,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;YACnB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,yFAAyF;QACzF,2FAA2F;QAC3F,cAAc;QACd,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAA,gCAAmB,EAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrG,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnC,CAAC;QACD,0FAA0F;QAC1F,0CAA0C;QAC1C,MAAM,KAAK,GAAG,IAAA,8BAAiB,EAAC,IAAI,CAAC,CAAC;QACtC,IAAI,KAAK;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxB,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,2FAA2F;AAC3F,EAAE;AACF,sFAAsF;AACtF,4FAA4F;AAC5F,gGAAgG;AAChG,4FAA4F;AAE5F,yFAAyF;AAC5E,QAAA,cAAc,GAAG;IAC5B,eAAe;IACf,YAAY;IACZ,eAAe;IACf,cAAc;IACd,eAAe;IACf,qBAAqB;IACrB,kBAAkB;CACnB,CAAC;AAEF;;;;GAIG;AACU,QAAA,cAAc,GAAG;IAC5B,yCAAyC;IACzC,uGAAuG;IACvG,uFAAuF;IACvF,iGAAiG;IACjG,0GAA0G;IAC1G,gIAAgI;IAChI,sEAAsE,sBAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;CAChI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,SAAgB,eAAe,CAAC,OAAgB,EAAE,GAAY,EAAE,KAAkB;IAChF,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAE,OAA+B,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,MAAM,IAAI,GAAG,IAAA,oBAAQ,EAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,KAAK,IAAI,IAAA,qBAAQ,GAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAA,4BAAe,EAAC,IAAI,CAAC,CAAC;QAExC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,yBAAyB,cAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,0HAA0H,CAAC,CAAC;QACrL,CAAC;aAAM,CAAC;YACN,8FAA8F;YAC9F,MAAM,UAAU,GAAG,KAAK;iBACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBACZ,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/B,OAAO,CAAC,CAAC,KAAK,IAAI,IAAA,wBAAW,EAAC,KAAK,CAAC,KAAK,UAAU,CAAC;YACtD,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,yBAAyB,cAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC;YAC9I,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAA,6BAAc,EAAC,CAAC,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,sBAAc,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"HostRecall.js","sourceRoot":"","sources":["../../../src/subconscious/HostRecall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * NarrowEvidence — track the code a memory talks about, not the whole file it lives in.
3
+ *
4
+ * A memory anchored to a whole file goes stale on any edit anywhere in that file. On Lemma's
5
+ * own Brain that was 29 of 38 memories, most of them pointing at hub files (lemma-proxy.ts,
6
+ * init.js, tools.ts) that change daily — so STALE stopped meaning anything and an agent could
7
+ * no longer tell a memory whose subject changed from one whose file merely got longer. The
8
+ * Brain already tracks symbols precisely; callers almost never pass them. A memory usually
9
+ * names what it is about (`stripComments`, `safeResolvePath`, `TheBrainV2.search`), so those
10
+ * names are read out of its text and tracked instead of the file.
11
+ *
12
+ * Two uses:
13
+ * - narrowEvidence: at store/update time, swap a code file for the symbols the text names.
14
+ * - narrowStaleEntry: for a memory already stale on a whole file, prove from git that the
15
+ * named symbols are unchanged since it was stored, and only then re-point it at them.
16
+ */
17
+ import type { BrainEntry, SymbolRef } from './TheBrainV2';
18
+ /**
19
+ * Names in prose that look like code: camelCase, PascalCase with a second capital,
20
+ * snake_case, `Class.member`, or anything in backticks. A plain word ("search", "store") is
21
+ * left out even when a method has that name — prose uses it in its ordinary sense.
22
+ */
23
+ export declare function codeIdentifiers(text: string): string[];
24
+ export interface NarrowResult {
25
+ filePaths: string[];
26
+ symbols: SymbolRef[];
27
+ /** Files swapped for symbols, as "file → a, b". Empty when nothing was narrowed. */
28
+ narrowed: string[];
29
+ }
30
+ /**
31
+ * Swap each code file for the symbols `text` names in it. A file the text names nothing in
32
+ * (or that isn't code, or can't be read) stays tracked whole — narrowing only ever replaces
33
+ * a file with something the memory explicitly points at.
34
+ */
35
+ export declare function narrowEvidence(filePaths: string[], text: string, root?: string): NarrowResult;
36
+ /**
37
+ * For a memory stale on whole files: the narrower evidence it can be re-pointed at, or null.
38
+ *
39
+ * Only returned when it is provable that what the memory talks about did not change. For each
40
+ * tracked file that changed, the content the memory was anchored to is recovered from the
41
+ * commit it was stored on — and accepted only if it hashes to exactly the stored hash (an
42
+ * uncommitted edit at store time would make the commit the wrong baseline). Every symbol the
43
+ * memory names in that file must then be textually identical then and now. A file that is
44
+ * unchanged stays tracked whole; anything unprovable leaves the memory stale.
45
+ */
46
+ export declare function narrowStaleEntry(entry: Pick<BrainEntry, 'query' | 'response' | 'fileHashes' | 'symbolHashes' | 'claims' | 'gitCommit'>, root: string): NarrowResult | null;
47
+ //# sourceMappingURL=NarrowEvidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NarrowEvidence.d.ts","sourceRoot":"","sources":["../../../src/subconscious/NarrowEvidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQ1D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUtD;AAqDD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,oFAAoF;IACpF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAsB,GAAG,YAAY,CAqB5G;AAkCD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAC,EACtG,IAAI,EAAE,MAAM,GACX,YAAY,GAAG,IAAI,CAqCrB"}