@project-ava-supernova/core 0.2.71

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 (1497) hide show
  1. package/dist/agent/agent.d.ts +623 -0
  2. package/dist/agent/agent.d.ts.map +1 -0
  3. package/dist/agent/agent.js +3558 -0
  4. package/dist/agent/agent.js.map +1 -0
  5. package/dist/agent/claims-auditor.d.ts +54 -0
  6. package/dist/agent/claims-auditor.d.ts.map +1 -0
  7. package/dist/agent/claims-auditor.js +125 -0
  8. package/dist/agent/claims-auditor.js.map +1 -0
  9. package/dist/agent/context-continuity.d.ts +125 -0
  10. package/dist/agent/context-continuity.d.ts.map +1 -0
  11. package/dist/agent/context-continuity.js +231 -0
  12. package/dist/agent/context-continuity.js.map +1 -0
  13. package/dist/agent/conversation.d.ts +26 -0
  14. package/dist/agent/conversation.d.ts.map +1 -0
  15. package/dist/agent/conversation.js +86 -0
  16. package/dist/agent/conversation.js.map +1 -0
  17. package/dist/agent/design-reinjection.d.ts +93 -0
  18. package/dist/agent/design-reinjection.d.ts.map +1 -0
  19. package/dist/agent/design-reinjection.js +235 -0
  20. package/dist/agent/design-reinjection.js.map +1 -0
  21. package/dist/agent/error-loop-detector.d.ts +59 -0
  22. package/dist/agent/error-loop-detector.d.ts.map +1 -0
  23. package/dist/agent/error-loop-detector.js +124 -0
  24. package/dist/agent/error-loop-detector.js.map +1 -0
  25. package/dist/agent/fresh-eyes.d.ts +52 -0
  26. package/dist/agent/fresh-eyes.d.ts.map +1 -0
  27. package/dist/agent/fresh-eyes.js +118 -0
  28. package/dist/agent/fresh-eyes.js.map +1 -0
  29. package/dist/agent/intent-classifier.d.ts +51 -0
  30. package/dist/agent/intent-classifier.d.ts.map +1 -0
  31. package/dist/agent/intent-classifier.js +125 -0
  32. package/dist/agent/intent-classifier.js.map +1 -0
  33. package/dist/agent/post-edit-verify.d.ts +79 -0
  34. package/dist/agent/post-edit-verify.d.ts.map +1 -0
  35. package/dist/agent/post-edit-verify.js +143 -0
  36. package/dist/agent/post-edit-verify.js.map +1 -0
  37. package/dist/agent/recover-written-calls.d.ts +90 -0
  38. package/dist/agent/recover-written-calls.d.ts.map +1 -0
  39. package/dist/agent/recover-written-calls.js +257 -0
  40. package/dist/agent/recover-written-calls.js.map +1 -0
  41. package/dist/agent/social-craft.d.ts +76 -0
  42. package/dist/agent/social-craft.d.ts.map +1 -0
  43. package/dist/agent/social-craft.js +210 -0
  44. package/dist/agent/social-craft.js.map +1 -0
  45. package/dist/agent/stop-command.d.ts +23 -0
  46. package/dist/agent/stop-command.d.ts.map +1 -0
  47. package/dist/agent/stop-command.js +59 -0
  48. package/dist/agent/stop-command.js.map +1 -0
  49. package/dist/agent/system-prompt.d.ts +125 -0
  50. package/dist/agent/system-prompt.d.ts.map +1 -0
  51. package/dist/agent/system-prompt.js +1334 -0
  52. package/dist/agent/system-prompt.js.map +1 -0
  53. package/dist/agent/task-classifier.d.ts +50 -0
  54. package/dist/agent/task-classifier.d.ts.map +1 -0
  55. package/dist/agent/task-classifier.js +187 -0
  56. package/dist/agent/task-classifier.js.map +1 -0
  57. package/dist/agent/text-tool-parser.d.ts +34 -0
  58. package/dist/agent/text-tool-parser.d.ts.map +1 -0
  59. package/dist/agent/text-tool-parser.js +96 -0
  60. package/dist/agent/text-tool-parser.js.map +1 -0
  61. package/dist/agent/vision-bridge.d.ts +29 -0
  62. package/dist/agent/vision-bridge.d.ts.map +1 -0
  63. package/dist/agent/vision-bridge.js +143 -0
  64. package/dist/agent/vision-bridge.js.map +1 -0
  65. package/dist/audit/cost.d.ts +18 -0
  66. package/dist/audit/cost.d.ts.map +1 -0
  67. package/dist/audit/cost.js +170 -0
  68. package/dist/audit/cost.js.map +1 -0
  69. package/dist/audit/export.d.ts +30 -0
  70. package/dist/audit/export.d.ts.map +1 -0
  71. package/dist/audit/export.js +155 -0
  72. package/dist/audit/export.js.map +1 -0
  73. package/dist/audit/index.d.ts +11 -0
  74. package/dist/audit/index.d.ts.map +1 -0
  75. package/dist/audit/index.js +9 -0
  76. package/dist/audit/index.js.map +1 -0
  77. package/dist/audit/integrity.d.ts +7 -0
  78. package/dist/audit/integrity.d.ts.map +1 -0
  79. package/dist/audit/integrity.js +78 -0
  80. package/dist/audit/integrity.js.map +1 -0
  81. package/dist/audit/logger.d.ts +18 -0
  82. package/dist/audit/logger.d.ts.map +1 -0
  83. package/dist/audit/logger.js +113 -0
  84. package/dist/audit/logger.js.map +1 -0
  85. package/dist/audit/patterns.d.ts +34 -0
  86. package/dist/audit/patterns.d.ts.map +1 -0
  87. package/dist/audit/patterns.js +104 -0
  88. package/dist/audit/patterns.js.map +1 -0
  89. package/dist/audit/security.d.ts +8 -0
  90. package/dist/audit/security.d.ts.map +1 -0
  91. package/dist/audit/security.js +56 -0
  92. package/dist/audit/security.js.map +1 -0
  93. package/dist/audit/summary.d.ts +22 -0
  94. package/dist/audit/summary.d.ts.map +1 -0
  95. package/dist/audit/summary.js +51 -0
  96. package/dist/audit/summary.js.map +1 -0
  97. package/dist/audit/types.d.ts +104 -0
  98. package/dist/audit/types.d.ts.map +1 -0
  99. package/dist/audit/types.js +11 -0
  100. package/dist/audit/types.js.map +1 -0
  101. package/dist/auto/aurora-router.d.ts +71 -0
  102. package/dist/auto/aurora-router.d.ts.map +1 -0
  103. package/dist/auto/aurora-router.js +138 -0
  104. package/dist/auto/aurora-router.js.map +1 -0
  105. package/dist/auto/auto-coordinator.d.ts +232 -0
  106. package/dist/auto/auto-coordinator.d.ts.map +1 -0
  107. package/dist/auto/auto-coordinator.js +1260 -0
  108. package/dist/auto/auto-coordinator.js.map +1 -0
  109. package/dist/auto/brief-generator.d.ts +10 -0
  110. package/dist/auto/brief-generator.d.ts.map +1 -0
  111. package/dist/auto/brief-generator.js +67 -0
  112. package/dist/auto/brief-generator.js.map +1 -0
  113. package/dist/auto/changes-summary.d.ts +19 -0
  114. package/dist/auto/changes-summary.d.ts.map +1 -0
  115. package/dist/auto/changes-summary.js +45 -0
  116. package/dist/auto/changes-summary.js.map +1 -0
  117. package/dist/auto/context-tracker.d.ts +27 -0
  118. package/dist/auto/context-tracker.d.ts.map +1 -0
  119. package/dist/auto/context-tracker.js +56 -0
  120. package/dist/auto/context-tracker.js.map +1 -0
  121. package/dist/auto/coordinator-model.d.ts +31 -0
  122. package/dist/auto/coordinator-model.d.ts.map +1 -0
  123. package/dist/auto/coordinator-model.js +68 -0
  124. package/dist/auto/coordinator-model.js.map +1 -0
  125. package/dist/auto/index.d.ts +12 -0
  126. package/dist/auto/index.d.ts.map +1 -0
  127. package/dist/auto/index.js +11 -0
  128. package/dist/auto/index.js.map +1 -0
  129. package/dist/auto/intent-gate.d.ts +85 -0
  130. package/dist/auto/intent-gate.d.ts.map +1 -0
  131. package/dist/auto/intent-gate.js +247 -0
  132. package/dist/auto/intent-gate.js.map +1 -0
  133. package/dist/auto/longxiang-router.d.ts +123 -0
  134. package/dist/auto/longxiang-router.d.ts.map +1 -0
  135. package/dist/auto/longxiang-router.js +184 -0
  136. package/dist/auto/longxiang-router.js.map +1 -0
  137. package/dist/auto/model-router.d.ts +42 -0
  138. package/dist/auto/model-router.d.ts.map +1 -0
  139. package/dist/auto/model-router.js +208 -0
  140. package/dist/auto/model-router.js.map +1 -0
  141. package/dist/auto/routing-modes.d.ts +33 -0
  142. package/dist/auto/routing-modes.d.ts.map +1 -0
  143. package/dist/auto/routing-modes.js +34 -0
  144. package/dist/auto/routing-modes.js.map +1 -0
  145. package/dist/auto/supernova-router.d.ts +50 -0
  146. package/dist/auto/supernova-router.d.ts.map +1 -0
  147. package/dist/auto/supernova-router.js +116 -0
  148. package/dist/auto/supernova-router.js.map +1 -0
  149. package/dist/auto/task-classifier.d.ts +10 -0
  150. package/dist/auto/task-classifier.d.ts.map +1 -0
  151. package/dist/auto/task-classifier.js +116 -0
  152. package/dist/auto/task-classifier.js.map +1 -0
  153. package/dist/auto/task-executor.d.ts +86 -0
  154. package/dist/auto/task-executor.d.ts.map +1 -0
  155. package/dist/auto/task-executor.js +271 -0
  156. package/dist/auto/task-executor.js.map +1 -0
  157. package/dist/auto/types.d.ts +57 -0
  158. package/dist/auto/types.d.ts.map +1 -0
  159. package/dist/auto/types.js +2 -0
  160. package/dist/auto/types.js.map +1 -0
  161. package/dist/awareness/tick-engine.d.ts +73 -0
  162. package/dist/awareness/tick-engine.d.ts.map +1 -0
  163. package/dist/awareness/tick-engine.js +156 -0
  164. package/dist/awareness/tick-engine.js.map +1 -0
  165. package/dist/billing/credits.d.ts +213 -0
  166. package/dist/billing/credits.d.ts.map +1 -0
  167. package/dist/billing/credits.js +535 -0
  168. package/dist/billing/credits.js.map +1 -0
  169. package/dist/billing/meter.d.ts +43 -0
  170. package/dist/billing/meter.d.ts.map +1 -0
  171. package/dist/billing/meter.js +67 -0
  172. package/dist/billing/meter.js.map +1 -0
  173. package/dist/billing/plans.d.ts +34 -0
  174. package/dist/billing/plans.d.ts.map +1 -0
  175. package/dist/billing/plans.js +108 -0
  176. package/dist/billing/plans.js.map +1 -0
  177. package/dist/briefing/briefing-engine.d.ts +51 -0
  178. package/dist/briefing/briefing-engine.d.ts.map +1 -0
  179. package/dist/briefing/briefing-engine.js +289 -0
  180. package/dist/briefing/briefing-engine.js.map +1 -0
  181. package/dist/briefing/index.d.ts +3 -0
  182. package/dist/briefing/index.d.ts.map +1 -0
  183. package/dist/briefing/index.js +2 -0
  184. package/dist/briefing/index.js.map +1 -0
  185. package/dist/briefing/types.d.ts +49 -0
  186. package/dist/briefing/types.d.ts.map +1 -0
  187. package/dist/briefing/types.js +8 -0
  188. package/dist/briefing/types.js.map +1 -0
  189. package/dist/checkpoint/checkpoint-manager.d.ts +33 -0
  190. package/dist/checkpoint/checkpoint-manager.d.ts.map +1 -0
  191. package/dist/checkpoint/checkpoint-manager.js +144 -0
  192. package/dist/checkpoint/checkpoint-manager.js.map +1 -0
  193. package/dist/config/config.d.ts +10 -0
  194. package/dist/config/config.d.ts.map +1 -0
  195. package/dist/config/config.js +169 -0
  196. package/dist/config/config.js.map +1 -0
  197. package/dist/config/personality.d.ts +32 -0
  198. package/dist/config/personality.d.ts.map +1 -0
  199. package/dist/config/personality.js +96 -0
  200. package/dist/config/personality.js.map +1 -0
  201. package/dist/config/project-config.d.ts +17 -0
  202. package/dist/config/project-config.d.ts.map +1 -0
  203. package/dist/config/project-config.js +38 -0
  204. package/dist/config/project-config.js.map +1 -0
  205. package/dist/config/project.d.ts +155 -0
  206. package/dist/config/project.d.ts.map +1 -0
  207. package/dist/config/project.js +746 -0
  208. package/dist/config/project.js.map +1 -0
  209. package/dist/config/schema.d.ts +61 -0
  210. package/dist/config/schema.d.ts.map +1 -0
  211. package/dist/config/schema.js +11 -0
  212. package/dist/config/schema.js.map +1 -0
  213. package/dist/core/constants.d.ts +13 -0
  214. package/dist/core/constants.d.ts.map +1 -0
  215. package/dist/core/constants.js +15 -0
  216. package/dist/core/constants.js.map +1 -0
  217. package/dist/core/dates.d.ts +35 -0
  218. package/dist/core/dates.d.ts.map +1 -0
  219. package/dist/core/dates.js +45 -0
  220. package/dist/core/dates.js.map +1 -0
  221. package/dist/core/errors.d.ts +27 -0
  222. package/dist/core/errors.d.ts.map +1 -0
  223. package/dist/core/errors.js +172 -0
  224. package/dist/core/errors.js.map +1 -0
  225. package/dist/core/file-lock.d.ts +22 -0
  226. package/dist/core/file-lock.d.ts.map +1 -0
  227. package/dist/core/file-lock.js +120 -0
  228. package/dist/core/file-lock.js.map +1 -0
  229. package/dist/core/logger.d.ts +9 -0
  230. package/dist/core/logger.d.ts.map +1 -0
  231. package/dist/core/logger.js +32 -0
  232. package/dist/core/logger.js.map +1 -0
  233. package/dist/core/types.d.ts +157 -0
  234. package/dist/core/types.d.ts.map +1 -0
  235. package/dist/core/types.js +13 -0
  236. package/dist/core/types.js.map +1 -0
  237. package/dist/creative/index.d.ts +50 -0
  238. package/dist/creative/index.d.ts.map +1 -0
  239. package/dist/creative/index.js +178 -0
  240. package/dist/creative/index.js.map +1 -0
  241. package/dist/dataset/capture.d.ts +15 -0
  242. package/dist/dataset/capture.d.ts.map +1 -0
  243. package/dist/dataset/capture.js +203 -0
  244. package/dist/dataset/capture.js.map +1 -0
  245. package/dist/dataset/config.d.ts +33 -0
  246. package/dist/dataset/config.d.ts.map +1 -0
  247. package/dist/dataset/config.js +60 -0
  248. package/dist/dataset/config.js.map +1 -0
  249. package/dist/dataset/consumer.d.ts +33 -0
  250. package/dist/dataset/consumer.d.ts.map +1 -0
  251. package/dist/dataset/consumer.js +97 -0
  252. package/dist/dataset/consumer.js.map +1 -0
  253. package/dist/dataset/emitter.d.ts +153 -0
  254. package/dist/dataset/emitter.d.ts.map +1 -0
  255. package/dist/dataset/emitter.js +157 -0
  256. package/dist/dataset/emitter.js.map +1 -0
  257. package/dist/dataset/events.d.ts +360 -0
  258. package/dist/dataset/events.d.ts.map +1 -0
  259. package/dist/dataset/events.js +30 -0
  260. package/dist/dataset/events.js.map +1 -0
  261. package/dist/dataset/generation-emit.d.ts +72 -0
  262. package/dist/dataset/generation-emit.d.ts.map +1 -0
  263. package/dist/dataset/generation-emit.js +94 -0
  264. package/dist/dataset/generation-emit.js.map +1 -0
  265. package/dist/dataset/redactor.d.ts +22 -0
  266. package/dist/dataset/redactor.d.ts.map +1 -0
  267. package/dist/dataset/redactor.js +68 -0
  268. package/dist/dataset/redactor.js.map +1 -0
  269. package/dist/dataset/routing.d.ts +17 -0
  270. package/dist/dataset/routing.d.ts.map +1 -0
  271. package/dist/dataset/routing.js +77 -0
  272. package/dist/dataset/routing.js.map +1 -0
  273. package/dist/dataset/summarizers.d.ts +47 -0
  274. package/dist/dataset/summarizers.d.ts.map +1 -0
  275. package/dist/dataset/summarizers.js +98 -0
  276. package/dist/dataset/summarizers.js.map +1 -0
  277. package/dist/dataset/verification.d.ts +29 -0
  278. package/dist/dataset/verification.d.ts.map +1 -0
  279. package/dist/dataset/verification.js +70 -0
  280. package/dist/dataset/verification.js.map +1 -0
  281. package/dist/desktop/budget.d.ts +66 -0
  282. package/dist/desktop/budget.d.ts.map +1 -0
  283. package/dist/desktop/budget.js +159 -0
  284. package/dist/desktop/budget.js.map +1 -0
  285. package/dist/desktop/capability.d.ts +28 -0
  286. package/dist/desktop/capability.d.ts.map +1 -0
  287. package/dist/desktop/capability.js +39 -0
  288. package/dist/desktop/capability.js.map +1 -0
  289. package/dist/desktop/conductor.d.ts +104 -0
  290. package/dist/desktop/conductor.d.ts.map +1 -0
  291. package/dist/desktop/conductor.js +876 -0
  292. package/dist/desktop/conductor.js.map +1 -0
  293. package/dist/desktop/fork-points.d.ts +56 -0
  294. package/dist/desktop/fork-points.d.ts.map +1 -0
  295. package/dist/desktop/fork-points.js +138 -0
  296. package/dist/desktop/fork-points.js.map +1 -0
  297. package/dist/desktop/index.d.ts +22 -0
  298. package/dist/desktop/index.d.ts.map +1 -0
  299. package/dist/desktop/index.js +21 -0
  300. package/dist/desktop/index.js.map +1 -0
  301. package/dist/desktop/perception.d.ts +24 -0
  302. package/dist/desktop/perception.d.ts.map +1 -0
  303. package/dist/desktop/perception.js +106 -0
  304. package/dist/desktop/perception.js.map +1 -0
  305. package/dist/desktop/personas.d.ts +30 -0
  306. package/dist/desktop/personas.d.ts.map +1 -0
  307. package/dist/desktop/personas.js +206 -0
  308. package/dist/desktop/personas.js.map +1 -0
  309. package/dist/desktop/safety.d.ts +86 -0
  310. package/dist/desktop/safety.d.ts.map +1 -0
  311. package/dist/desktop/safety.js +272 -0
  312. package/dist/desktop/safety.js.map +1 -0
  313. package/dist/desktop/screen-key.d.ts +54 -0
  314. package/dist/desktop/screen-key.d.ts.map +1 -0
  315. package/dist/desktop/screen-key.js +187 -0
  316. package/dist/desktop/screen-key.js.map +1 -0
  317. package/dist/desktop/types.d.ts +141 -0
  318. package/dist/desktop/types.d.ts.map +1 -0
  319. package/dist/desktop/types.js +8 -0
  320. package/dist/desktop/types.js.map +1 -0
  321. package/dist/docs/adapter.d.ts +71 -0
  322. package/dist/docs/adapter.d.ts.map +1 -0
  323. package/dist/docs/adapter.js +75 -0
  324. package/dist/docs/adapter.js.map +1 -0
  325. package/dist/docs/content/concepts.d.ts +3 -0
  326. package/dist/docs/content/concepts.d.ts.map +1 -0
  327. package/dist/docs/content/concepts.js +304 -0
  328. package/dist/docs/content/concepts.js.map +1 -0
  329. package/dist/docs/content/features.d.ts +3 -0
  330. package/dist/docs/content/features.d.ts.map +1 -0
  331. package/dist/docs/content/features.js +275 -0
  332. package/dist/docs/content/features.js.map +1 -0
  333. package/dist/docs/content/index.d.ts +3 -0
  334. package/dist/docs/content/index.d.ts.map +1 -0
  335. package/dist/docs/content/index.js +15 -0
  336. package/dist/docs/content/index.js.map +1 -0
  337. package/dist/docs/content/reference.d.ts +3 -0
  338. package/dist/docs/content/reference.d.ts.map +1 -0
  339. package/dist/docs/content/reference.js +220 -0
  340. package/dist/docs/content/reference.js.map +1 -0
  341. package/dist/docs/content/start.d.ts +3 -0
  342. package/dist/docs/content/start.d.ts.map +1 -0
  343. package/dist/docs/content/start.js +203 -0
  344. package/dist/docs/content/start.js.map +1 -0
  345. package/dist/docs/content/troubleshooting.d.ts +3 -0
  346. package/dist/docs/content/troubleshooting.d.ts.map +1 -0
  347. package/dist/docs/content/troubleshooting.js +98 -0
  348. package/dist/docs/content/troubleshooting.js.map +1 -0
  349. package/dist/docs/corpus.d.ts +7 -0
  350. package/dist/docs/corpus.d.ts.map +1 -0
  351. package/dist/docs/corpus.js +18 -0
  352. package/dist/docs/corpus.js.map +1 -0
  353. package/dist/docs/data/capabilities.d.ts +24 -0
  354. package/dist/docs/data/capabilities.d.ts.map +1 -0
  355. package/dist/docs/data/capabilities.js +63 -0
  356. package/dist/docs/data/capabilities.js.map +1 -0
  357. package/dist/docs/data/modes.d.ts +11 -0
  358. package/dist/docs/data/modes.d.ts.map +1 -0
  359. package/dist/docs/data/modes.js +60 -0
  360. package/dist/docs/data/modes.js.map +1 -0
  361. package/dist/docs/data/permissions.d.ts +12 -0
  362. package/dist/docs/data/permissions.d.ts.map +1 -0
  363. package/dist/docs/data/permissions.js +62 -0
  364. package/dist/docs/data/permissions.js.map +1 -0
  365. package/dist/docs/data/personas.d.ts +13 -0
  366. package/dist/docs/data/personas.d.ts.map +1 -0
  367. package/dist/docs/data/personas.js +42 -0
  368. package/dist/docs/data/personas.js.map +1 -0
  369. package/dist/docs/data/providers.d.ts +21 -0
  370. package/dist/docs/data/providers.d.ts.map +1 -0
  371. package/dist/docs/data/providers.js +210 -0
  372. package/dist/docs/data/providers.js.map +1 -0
  373. package/dist/docs/data/shortcuts.d.ts +9 -0
  374. package/dist/docs/data/shortcuts.d.ts.map +1 -0
  375. package/dist/docs/data/shortcuts.js +18 -0
  376. package/dist/docs/data/shortcuts.js.map +1 -0
  377. package/dist/docs/data/tasks.d.ts +17 -0
  378. package/dist/docs/data/tasks.d.ts.map +1 -0
  379. package/dist/docs/data/tasks.js +64 -0
  380. package/dist/docs/data/tasks.js.map +1 -0
  381. package/dist/docs/data/tools.d.ts +12 -0
  382. package/dist/docs/data/tools.d.ts.map +1 -0
  383. package/dist/docs/data/tools.js +100 -0
  384. package/dist/docs/data/tools.js.map +1 -0
  385. package/dist/docs/filter.d.ts +35 -0
  386. package/dist/docs/filter.d.ts.map +1 -0
  387. package/dist/docs/filter.js +68 -0
  388. package/dist/docs/filter.js.map +1 -0
  389. package/dist/docs/i18n/translations.d.ts +2 -0
  390. package/dist/docs/i18n/translations.d.ts.map +1 -0
  391. package/dist/docs/i18n/translations.js +4 -0
  392. package/dist/docs/i18n/translations.js.map +1 -0
  393. package/dist/docs/i18n.d.ts +15 -0
  394. package/dist/docs/i18n.d.ts.map +1 -0
  395. package/dist/docs/i18n.js +88 -0
  396. package/dist/docs/i18n.js.map +1 -0
  397. package/dist/docs/index.d.ts +16 -0
  398. package/dist/docs/index.d.ts.map +1 -0
  399. package/dist/docs/index.js +15 -0
  400. package/dist/docs/index.js.map +1 -0
  401. package/dist/docs/product-knowledge.d.ts +45 -0
  402. package/dist/docs/product-knowledge.d.ts.map +1 -0
  403. package/dist/docs/product-knowledge.js +147 -0
  404. package/dist/docs/product-knowledge.js.map +1 -0
  405. package/dist/docs/types.d.ts +138 -0
  406. package/dist/docs/types.d.ts.map +1 -0
  407. package/dist/docs/types.js +14 -0
  408. package/dist/docs/types.js.map +1 -0
  409. package/dist/events/event-detector.d.ts +39 -0
  410. package/dist/events/event-detector.d.ts.map +1 -0
  411. package/dist/events/event-detector.js +223 -0
  412. package/dist/events/event-detector.js.map +1 -0
  413. package/dist/events/index.d.ts +3 -0
  414. package/dist/events/index.d.ts.map +1 -0
  415. package/dist/events/index.js +2 -0
  416. package/dist/events/index.js.map +1 -0
  417. package/dist/events/types.d.ts +35 -0
  418. package/dist/events/types.d.ts.map +1 -0
  419. package/dist/events/types.js +8 -0
  420. package/dist/events/types.js.map +1 -0
  421. package/dist/exercises/index.d.ts +249 -0
  422. package/dist/exercises/index.d.ts.map +1 -0
  423. package/dist/exercises/index.js +181 -0
  424. package/dist/exercises/index.js.map +1 -0
  425. package/dist/health/aisles.d.ts +33 -0
  426. package/dist/health/aisles.d.ts.map +1 -0
  427. package/dist/health/aisles.js +417 -0
  428. package/dist/health/aisles.js.map +1 -0
  429. package/dist/health/cooking.d.ts +13 -0
  430. package/dist/health/cooking.d.ts.map +1 -0
  431. package/dist/health/cooking.js +19 -0
  432. package/dist/health/cooking.js.map +1 -0
  433. package/dist/health/duplicate.d.ts +47 -0
  434. package/dist/health/duplicate.d.ts.map +1 -0
  435. package/dist/health/duplicate.js +136 -0
  436. package/dist/health/duplicate.js.map +1 -0
  437. package/dist/health/index.d.ts +7 -0
  438. package/dist/health/index.d.ts.map +1 -0
  439. package/dist/health/index.js +10 -0
  440. package/dist/health/index.js.map +1 -0
  441. package/dist/health/node-store.d.ts +30 -0
  442. package/dist/health/node-store.d.ts.map +1 -0
  443. package/dist/health/node-store.js +250 -0
  444. package/dist/health/node-store.js.map +1 -0
  445. package/dist/health/prep.d.ts +86 -0
  446. package/dist/health/prep.d.ts.map +1 -0
  447. package/dist/health/prep.js +152 -0
  448. package/dist/health/prep.js.map +1 -0
  449. package/dist/health/profile-fields.d.ts +46 -0
  450. package/dist/health/profile-fields.d.ts.map +1 -0
  451. package/dist/health/profile-fields.js +194 -0
  452. package/dist/health/profile-fields.js.map +1 -0
  453. package/dist/health/session-store.d.ts +30 -0
  454. package/dist/health/session-store.d.ts.map +1 -0
  455. package/dist/health/session-store.js +20 -0
  456. package/dist/health/session-store.js.map +1 -0
  457. package/dist/health/session-summary.d.ts +10 -0
  458. package/dist/health/session-summary.d.ts.map +1 -0
  459. package/dist/health/session-summary.js +106 -0
  460. package/dist/health/session-summary.js.map +1 -0
  461. package/dist/health/session-types.d.ts +74 -0
  462. package/dist/health/session-types.d.ts.map +1 -0
  463. package/dist/health/session-types.js +53 -0
  464. package/dist/health/session-types.js.map +1 -0
  465. package/dist/health/shopping-list.d.ts +226 -0
  466. package/dist/health/shopping-list.d.ts.map +1 -0
  467. package/dist/health/shopping-list.js +432 -0
  468. package/dist/health/shopping-list.js.map +1 -0
  469. package/dist/health/starters.d.ts +155 -0
  470. package/dist/health/starters.d.ts.map +1 -0
  471. package/dist/health/starters.js +270 -0
  472. package/dist/health/starters.js.map +1 -0
  473. package/dist/health/store.d.ts +59 -0
  474. package/dist/health/store.d.ts.map +1 -0
  475. package/dist/health/store.js +17 -0
  476. package/dist/health/store.js.map +1 -0
  477. package/dist/health/types.d.ts +213 -0
  478. package/dist/health/types.d.ts.map +1 -0
  479. package/dist/health/types.js +11 -0
  480. package/dist/health/types.js.map +1 -0
  481. package/dist/history/conversation-title.d.ts +67 -0
  482. package/dist/history/conversation-title.d.ts.map +1 -0
  483. package/dist/history/conversation-title.js +184 -0
  484. package/dist/history/conversation-title.js.map +1 -0
  485. package/dist/history/history-manager.d.ts +50 -0
  486. package/dist/history/history-manager.d.ts.map +1 -0
  487. package/dist/history/history-manager.js +168 -0
  488. package/dist/history/history-manager.js.map +1 -0
  489. package/dist/history/storage.d.ts +41 -0
  490. package/dist/history/storage.d.ts.map +1 -0
  491. package/dist/history/storage.js +133 -0
  492. package/dist/history/storage.js.map +1 -0
  493. package/dist/i18n/index.d.ts +41 -0
  494. package/dist/i18n/index.d.ts.map +1 -0
  495. package/dist/i18n/index.js +188 -0
  496. package/dist/i18n/index.js.map +1 -0
  497. package/dist/i18n/keep-english.d.ts +12 -0
  498. package/dist/i18n/keep-english.d.ts.map +1 -0
  499. package/dist/i18n/keep-english.js +351 -0
  500. package/dist/i18n/keep-english.js.map +1 -0
  501. package/dist/i18n/locales/ar.d.ts +4 -0
  502. package/dist/i18n/locales/ar.d.ts.map +1 -0
  503. package/dist/i18n/locales/ar.js +4143 -0
  504. package/dist/i18n/locales/ar.js.map +1 -0
  505. package/dist/i18n/locales/de.d.ts +4 -0
  506. package/dist/i18n/locales/de.d.ts.map +1 -0
  507. package/dist/i18n/locales/de.js +4133 -0
  508. package/dist/i18n/locales/de.js.map +1 -0
  509. package/dist/i18n/locales/en.d.ts +4068 -0
  510. package/dist/i18n/locales/en.d.ts.map +1 -0
  511. package/dist/i18n/locales/en.js +4347 -0
  512. package/dist/i18n/locales/en.js.map +1 -0
  513. package/dist/i18n/locales/es.d.ts +4 -0
  514. package/dist/i18n/locales/es.d.ts.map +1 -0
  515. package/dist/i18n/locales/es.js +4128 -0
  516. package/dist/i18n/locales/es.js.map +1 -0
  517. package/dist/i18n/locales/fr.d.ts +4 -0
  518. package/dist/i18n/locales/fr.d.ts.map +1 -0
  519. package/dist/i18n/locales/fr.js +4140 -0
  520. package/dist/i18n/locales/fr.js.map +1 -0
  521. package/dist/i18n/locales/hi.d.ts +4 -0
  522. package/dist/i18n/locales/hi.d.ts.map +1 -0
  523. package/dist/i18n/locales/hi.js +4143 -0
  524. package/dist/i18n/locales/hi.js.map +1 -0
  525. package/dist/i18n/locales/id.d.ts +4 -0
  526. package/dist/i18n/locales/id.d.ts.map +1 -0
  527. package/dist/i18n/locales/id.js +4142 -0
  528. package/dist/i18n/locales/id.js.map +1 -0
  529. package/dist/i18n/locales/it.d.ts +4 -0
  530. package/dist/i18n/locales/it.d.ts.map +1 -0
  531. package/dist/i18n/locales/it.js +4143 -0
  532. package/dist/i18n/locales/it.js.map +1 -0
  533. package/dist/i18n/locales/ja.d.ts +4 -0
  534. package/dist/i18n/locales/ja.d.ts.map +1 -0
  535. package/dist/i18n/locales/ja.js +4144 -0
  536. package/dist/i18n/locales/ja.js.map +1 -0
  537. package/dist/i18n/locales/ko.d.ts +4 -0
  538. package/dist/i18n/locales/ko.d.ts.map +1 -0
  539. package/dist/i18n/locales/ko.js +4143 -0
  540. package/dist/i18n/locales/ko.js.map +1 -0
  541. package/dist/i18n/locales/nl.d.ts +4 -0
  542. package/dist/i18n/locales/nl.d.ts.map +1 -0
  543. package/dist/i18n/locales/nl.js +4143 -0
  544. package/dist/i18n/locales/nl.js.map +1 -0
  545. package/dist/i18n/locales/pl.d.ts +4 -0
  546. package/dist/i18n/locales/pl.d.ts.map +1 -0
  547. package/dist/i18n/locales/pl.js +4133 -0
  548. package/dist/i18n/locales/pl.js.map +1 -0
  549. package/dist/i18n/locales/pt.d.ts +4 -0
  550. package/dist/i18n/locales/pt.d.ts.map +1 -0
  551. package/dist/i18n/locales/pt.js +4141 -0
  552. package/dist/i18n/locales/pt.js.map +1 -0
  553. package/dist/i18n/locales/ru.d.ts +4 -0
  554. package/dist/i18n/locales/ru.d.ts.map +1 -0
  555. package/dist/i18n/locales/ru.js +4143 -0
  556. package/dist/i18n/locales/ru.js.map +1 -0
  557. package/dist/i18n/locales/th.d.ts +4 -0
  558. package/dist/i18n/locales/th.d.ts.map +1 -0
  559. package/dist/i18n/locales/th.js +4143 -0
  560. package/dist/i18n/locales/th.js.map +1 -0
  561. package/dist/i18n/locales/tr.d.ts +4 -0
  562. package/dist/i18n/locales/tr.d.ts.map +1 -0
  563. package/dist/i18n/locales/tr.js +4143 -0
  564. package/dist/i18n/locales/tr.js.map +1 -0
  565. package/dist/i18n/locales/uk.d.ts +4 -0
  566. package/dist/i18n/locales/uk.d.ts.map +1 -0
  567. package/dist/i18n/locales/uk.js +4133 -0
  568. package/dist/i18n/locales/uk.js.map +1 -0
  569. package/dist/i18n/locales/vi.d.ts +4 -0
  570. package/dist/i18n/locales/vi.d.ts.map +1 -0
  571. package/dist/i18n/locales/vi.js +4143 -0
  572. package/dist/i18n/locales/vi.js.map +1 -0
  573. package/dist/i18n/locales/zh-CN.d.ts +4 -0
  574. package/dist/i18n/locales/zh-CN.d.ts.map +1 -0
  575. package/dist/i18n/locales/zh-CN.js +4133 -0
  576. package/dist/i18n/locales/zh-CN.js.map +1 -0
  577. package/dist/i18n/locales/zh-TW.d.ts +4 -0
  578. package/dist/i18n/locales/zh-TW.d.ts.map +1 -0
  579. package/dist/i18n/locales/zh-TW.js +4143 -0
  580. package/dist/i18n/locales/zh-TW.js.map +1 -0
  581. package/dist/i18n/types.d.ts +5 -0
  582. package/dist/i18n/types.d.ts.map +1 -0
  583. package/dist/i18n/types.js +46 -0
  584. package/dist/i18n/types.js.map +1 -0
  585. package/dist/index.d.ts +142 -0
  586. package/dist/index.d.ts.map +1 -0
  587. package/dist/index.js +159 -0
  588. package/dist/index.js.map +1 -0
  589. package/dist/indexer/project-indexer.d.ts +66 -0
  590. package/dist/indexer/project-indexer.d.ts.map +1 -0
  591. package/dist/indexer/project-indexer.js +574 -0
  592. package/dist/indexer/project-indexer.js.map +1 -0
  593. package/dist/indexer/symbol-indexer.d.ts +56 -0
  594. package/dist/indexer/symbol-indexer.d.ts.map +1 -0
  595. package/dist/indexer/symbol-indexer.js +579 -0
  596. package/dist/indexer/symbol-indexer.js.map +1 -0
  597. package/dist/journal/journal-manager.d.ts +143 -0
  598. package/dist/journal/journal-manager.d.ts.map +1 -0
  599. package/dist/journal/journal-manager.js +472 -0
  600. package/dist/journal/journal-manager.js.map +1 -0
  601. package/dist/journal/platform-sync.d.ts +17 -0
  602. package/dist/journal/platform-sync.d.ts.map +1 -0
  603. package/dist/journal/platform-sync.js +21 -0
  604. package/dist/journal/platform-sync.js.map +1 -0
  605. package/dist/journal/types.d.ts +78 -0
  606. package/dist/journal/types.d.ts.map +1 -0
  607. package/dist/journal/types.js +74 -0
  608. package/dist/journal/types.js.map +1 -0
  609. package/dist/knowledge/index.d.ts +2 -0
  610. package/dist/knowledge/index.d.ts.map +1 -0
  611. package/dist/knowledge/index.js +2 -0
  612. package/dist/knowledge/index.js.map +1 -0
  613. package/dist/learning/index.d.ts +6 -0
  614. package/dist/learning/index.d.ts.map +1 -0
  615. package/dist/learning/index.js +9 -0
  616. package/dist/learning/index.js.map +1 -0
  617. package/dist/learning/learner-context.d.ts +11 -0
  618. package/dist/learning/learner-context.d.ts.map +1 -0
  619. package/dist/learning/learner-context.js +57 -0
  620. package/dist/learning/learner-context.js.map +1 -0
  621. package/dist/learning/library-fork.d.ts +33 -0
  622. package/dist/learning/library-fork.d.ts.map +1 -0
  623. package/dist/learning/library-fork.js +92 -0
  624. package/dist/learning/library-fork.js.map +1 -0
  625. package/dist/learning/progression-export.d.ts +4 -0
  626. package/dist/learning/progression-export.d.ts.map +1 -0
  627. package/dist/learning/progression-export.js +21 -0
  628. package/dist/learning/progression-export.js.map +1 -0
  629. package/dist/learning/progression-markdown.d.ts +14 -0
  630. package/dist/learning/progression-markdown.d.ts.map +1 -0
  631. package/dist/learning/progression-markdown.js +73 -0
  632. package/dist/learning/progression-markdown.js.map +1 -0
  633. package/dist/learning/progression.d.ts +65 -0
  634. package/dist/learning/progression.d.ts.map +1 -0
  635. package/dist/learning/progression.js +186 -0
  636. package/dist/learning/progression.js.map +1 -0
  637. package/dist/memory/ambient-capture.d.ts +26 -0
  638. package/dist/memory/ambient-capture.d.ts.map +1 -0
  639. package/dist/memory/ambient-capture.js +174 -0
  640. package/dist/memory/ambient-capture.js.map +1 -0
  641. package/dist/memory/auto-extract.d.ts +54 -0
  642. package/dist/memory/auto-extract.d.ts.map +1 -0
  643. package/dist/memory/auto-extract.js +499 -0
  644. package/dist/memory/auto-extract.js.map +1 -0
  645. package/dist/memory/config.d.ts +47 -0
  646. package/dist/memory/config.d.ts.map +1 -0
  647. package/dist/memory/config.js +52 -0
  648. package/dist/memory/config.js.map +1 -0
  649. package/dist/memory/consolidation.d.ts +60 -0
  650. package/dist/memory/consolidation.d.ts.map +1 -0
  651. package/dist/memory/consolidation.js +311 -0
  652. package/dist/memory/consolidation.js.map +1 -0
  653. package/dist/memory/embedding-service.d.ts +50 -0
  654. package/dist/memory/embedding-service.d.ts.map +1 -0
  655. package/dist/memory/embedding-service.js +86 -0
  656. package/dist/memory/embedding-service.js.map +1 -0
  657. package/dist/memory/embedding-store.d.ts +31 -0
  658. package/dist/memory/embedding-store.d.ts.map +1 -0
  659. package/dist/memory/embedding-store.js +109 -0
  660. package/dist/memory/embedding-store.js.map +1 -0
  661. package/dist/memory/graph-engine.d.ts +145 -0
  662. package/dist/memory/graph-engine.d.ts.map +1 -0
  663. package/dist/memory/graph-engine.js +628 -0
  664. package/dist/memory/graph-engine.js.map +1 -0
  665. package/dist/memory/insights.d.ts +39 -0
  666. package/dist/memory/insights.d.ts.map +1 -0
  667. package/dist/memory/insights.js +138 -0
  668. package/dist/memory/insights.js.map +1 -0
  669. package/dist/memory/memory-agent.d.ts +93 -0
  670. package/dist/memory/memory-agent.d.ts.map +1 -0
  671. package/dist/memory/memory-agent.js +475 -0
  672. package/dist/memory/memory-agent.js.map +1 -0
  673. package/dist/memory/memory-manager.d.ts +232 -0
  674. package/dist/memory/memory-manager.d.ts.map +1 -0
  675. package/dist/memory/memory-manager.js +1633 -0
  676. package/dist/memory/memory-manager.js.map +1 -0
  677. package/dist/memory/migration-v3.d.ts +22 -0
  678. package/dist/memory/migration-v3.d.ts.map +1 -0
  679. package/dist/memory/migration-v3.js +193 -0
  680. package/dist/memory/migration-v3.js.map +1 -0
  681. package/dist/memory/mode-recall.d.ts +20 -0
  682. package/dist/memory/mode-recall.d.ts.map +1 -0
  683. package/dist/memory/mode-recall.js +104 -0
  684. package/dist/memory/mode-recall.js.map +1 -0
  685. package/dist/memory/patterns.d.ts +92 -0
  686. package/dist/memory/patterns.d.ts.map +1 -0
  687. package/dist/memory/patterns.js +389 -0
  688. package/dist/memory/patterns.js.map +1 -0
  689. package/dist/memory/platform-sync.d.ts +54 -0
  690. package/dist/memory/platform-sync.d.ts.map +1 -0
  691. package/dist/memory/platform-sync.js +176 -0
  692. package/dist/memory/platform-sync.js.map +1 -0
  693. package/dist/memory/procedural.d.ts +47 -0
  694. package/dist/memory/procedural.d.ts.map +1 -0
  695. package/dist/memory/procedural.js +182 -0
  696. package/dist/memory/procedural.js.map +1 -0
  697. package/dist/memory/project-brain.d.ts +27 -0
  698. package/dist/memory/project-brain.d.ts.map +1 -0
  699. package/dist/memory/project-brain.js +158 -0
  700. package/dist/memory/project-brain.js.map +1 -0
  701. package/dist/memory/self-improvement.d.ts +45 -0
  702. package/dist/memory/self-improvement.d.ts.map +1 -0
  703. package/dist/memory/self-improvement.js +178 -0
  704. package/dist/memory/self-improvement.js.map +1 -0
  705. package/dist/memory/tfidf.d.ts +71 -0
  706. package/dist/memory/tfidf.d.ts.map +1 -0
  707. package/dist/memory/tfidf.js +223 -0
  708. package/dist/memory/tfidf.js.map +1 -0
  709. package/dist/memory/training-export.d.ts +51 -0
  710. package/dist/memory/training-export.d.ts.map +1 -0
  711. package/dist/memory/training-export.js +122 -0
  712. package/dist/memory/training-export.js.map +1 -0
  713. package/dist/memory/types.d.ts +380 -0
  714. package/dist/memory/types.d.ts.map +1 -0
  715. package/dist/memory/types.js +99 -0
  716. package/dist/memory/types.js.map +1 -0
  717. package/dist/news/index.d.ts +163 -0
  718. package/dist/news/index.d.ts.map +1 -0
  719. package/dist/news/index.js +184 -0
  720. package/dist/news/index.js.map +1 -0
  721. package/dist/papers/arxiv-client.d.ts +21 -0
  722. package/dist/papers/arxiv-client.d.ts.map +1 -0
  723. package/dist/papers/arxiv-client.js +130 -0
  724. package/dist/papers/arxiv-client.js.map +1 -0
  725. package/dist/papers/crossref-client.d.ts +3 -0
  726. package/dist/papers/crossref-client.d.ts.map +1 -0
  727. package/dist/papers/crossref-client.js +96 -0
  728. package/dist/papers/crossref-client.js.map +1 -0
  729. package/dist/papers/discipline.d.ts +19 -0
  730. package/dist/papers/discipline.d.ts.map +1 -0
  731. package/dist/papers/discipline.js +96 -0
  732. package/dist/papers/discipline.js.map +1 -0
  733. package/dist/papers/index.d.ts +10 -0
  734. package/dist/papers/index.d.ts.map +1 -0
  735. package/dist/papers/index.js +7 -0
  736. package/dist/papers/index.js.map +1 -0
  737. package/dist/papers/openalex-client.d.ts +13 -0
  738. package/dist/papers/openalex-client.d.ts.map +1 -0
  739. package/dist/papers/openalex-client.js +206 -0
  740. package/dist/papers/openalex-client.js.map +1 -0
  741. package/dist/papers/paper-fetcher.d.ts +37 -0
  742. package/dist/papers/paper-fetcher.d.ts.map +1 -0
  743. package/dist/papers/paper-fetcher.js +75 -0
  744. package/dist/papers/paper-fetcher.js.map +1 -0
  745. package/dist/papers/types.d.ts +80 -0
  746. package/dist/papers/types.d.ts.map +1 -0
  747. package/dist/papers/types.js +25 -0
  748. package/dist/papers/types.js.map +1 -0
  749. package/dist/personas/conductor.d.ts +184 -0
  750. package/dist/personas/conductor.d.ts.map +1 -0
  751. package/dist/personas/conductor.js +871 -0
  752. package/dist/personas/conductor.js.map +1 -0
  753. package/dist/personas/definitions.d.ts +48 -0
  754. package/dist/personas/definitions.d.ts.map +1 -0
  755. package/dist/personas/definitions.js +828 -0
  756. package/dist/personas/definitions.js.map +1 -0
  757. package/dist/personas/index.d.ts +4 -0
  758. package/dist/personas/index.d.ts.map +1 -0
  759. package/dist/personas/index.js +3 -0
  760. package/dist/personas/index.js.map +1 -0
  761. package/dist/personas/types.d.ts +148 -0
  762. package/dist/personas/types.d.ts.map +1 -0
  763. package/dist/personas/types.js +5 -0
  764. package/dist/personas/types.js.map +1 -0
  765. package/dist/personas/verification-matrix.d.ts +44 -0
  766. package/dist/personas/verification-matrix.d.ts.map +1 -0
  767. package/dist/personas/verification-matrix.js +232 -0
  768. package/dist/personas/verification-matrix.js.map +1 -0
  769. package/dist/portability/bundle.d.ts +80 -0
  770. package/dist/portability/bundle.d.ts.map +1 -0
  771. package/dist/portability/bundle.js +155 -0
  772. package/dist/portability/bundle.js.map +1 -0
  773. package/dist/portability/crypto.d.ts +42 -0
  774. package/dist/portability/crypto.d.ts.map +1 -0
  775. package/dist/portability/crypto.js +89 -0
  776. package/dist/portability/crypto.js.map +1 -0
  777. package/dist/portability/data-types.d.ts +54 -0
  778. package/dist/portability/data-types.d.ts.map +1 -0
  779. package/dist/portability/data-types.js +281 -0
  780. package/dist/portability/data-types.js.map +1 -0
  781. package/dist/portability/index.d.ts +35 -0
  782. package/dist/portability/index.d.ts.map +1 -0
  783. package/dist/portability/index.js +41 -0
  784. package/dist/portability/index.js.map +1 -0
  785. package/dist/providers/base-provider.d.ts +65 -0
  786. package/dist/providers/base-provider.d.ts.map +1 -0
  787. package/dist/providers/base-provider.js +305 -0
  788. package/dist/providers/base-provider.js.map +1 -0
  789. package/dist/providers/catalog.d.ts +25 -0
  790. package/dist/providers/catalog.d.ts.map +1 -0
  791. package/dist/providers/catalog.js +53 -0
  792. package/dist/providers/catalog.js.map +1 -0
  793. package/dist/providers/deepseek/index.d.ts +9 -0
  794. package/dist/providers/deepseek/index.d.ts.map +1 -0
  795. package/dist/providers/deepseek/index.js +19 -0
  796. package/dist/providers/deepseek/index.js.map +1 -0
  797. package/dist/providers/deepseek/models.d.ts +3 -0
  798. package/dist/providers/deepseek/models.d.ts.map +1 -0
  799. package/dist/providers/deepseek/models.js +56 -0
  800. package/dist/providers/deepseek/models.js.map +1 -0
  801. package/dist/providers/generic/index.d.ts +25 -0
  802. package/dist/providers/generic/index.d.ts.map +1 -0
  803. package/dist/providers/generic/index.js +51 -0
  804. package/dist/providers/generic/index.js.map +1 -0
  805. package/dist/providers/generic/models.d.ts +3 -0
  806. package/dist/providers/generic/models.d.ts.map +1 -0
  807. package/dist/providers/generic/models.js +13 -0
  808. package/dist/providers/generic/models.js.map +1 -0
  809. package/dist/providers/health-tracker.d.ts +44 -0
  810. package/dist/providers/health-tracker.d.ts.map +1 -0
  811. package/dist/providers/health-tracker.js +110 -0
  812. package/dist/providers/health-tracker.js.map +1 -0
  813. package/dist/providers/kimi/index.d.ts +9 -0
  814. package/dist/providers/kimi/index.d.ts.map +1 -0
  815. package/dist/providers/kimi/index.js +13 -0
  816. package/dist/providers/kimi/index.js.map +1 -0
  817. package/dist/providers/kimi/models.d.ts +3 -0
  818. package/dist/providers/kimi/models.d.ts.map +1 -0
  819. package/dist/providers/kimi/models.js +60 -0
  820. package/dist/providers/kimi/models.js.map +1 -0
  821. package/dist/providers/minimax/index.d.ts +9 -0
  822. package/dist/providers/minimax/index.d.ts.map +1 -0
  823. package/dist/providers/minimax/index.js +13 -0
  824. package/dist/providers/minimax/index.js.map +1 -0
  825. package/dist/providers/minimax/models.d.ts +3 -0
  826. package/dist/providers/minimax/models.d.ts.map +1 -0
  827. package/dist/providers/minimax/models.js +65 -0
  828. package/dist/providers/minimax/models.js.map +1 -0
  829. package/dist/providers/mistral/index.d.ts +11 -0
  830. package/dist/providers/mistral/index.d.ts.map +1 -0
  831. package/dist/providers/mistral/index.js +24 -0
  832. package/dist/providers/mistral/index.js.map +1 -0
  833. package/dist/providers/mistral/models.d.ts +3 -0
  834. package/dist/providers/mistral/models.d.ts.map +1 -0
  835. package/dist/providers/mistral/models.js +65 -0
  836. package/dist/providers/mistral/models.js.map +1 -0
  837. package/dist/providers/nvidia/index.d.ts +16 -0
  838. package/dist/providers/nvidia/index.d.ts.map +1 -0
  839. package/dist/providers/nvidia/index.js +20 -0
  840. package/dist/providers/nvidia/index.js.map +1 -0
  841. package/dist/providers/nvidia/models.d.ts +3 -0
  842. package/dist/providers/nvidia/models.d.ts.map +1 -0
  843. package/dist/providers/nvidia/models.js +56 -0
  844. package/dist/providers/nvidia/models.js.map +1 -0
  845. package/dist/providers/platform/index.d.ts +10 -0
  846. package/dist/providers/platform/index.d.ts.map +1 -0
  847. package/dist/providers/platform/index.js +16 -0
  848. package/dist/providers/platform/index.js.map +1 -0
  849. package/dist/providers/platform/models.d.ts +3 -0
  850. package/dist/providers/platform/models.d.ts.map +1 -0
  851. package/dist/providers/platform/models.js +233 -0
  852. package/dist/providers/platform/models.js.map +1 -0
  853. package/dist/providers/provider-registry.d.ts +44 -0
  854. package/dist/providers/provider-registry.d.ts.map +1 -0
  855. package/dist/providers/provider-registry.js +197 -0
  856. package/dist/providers/provider-registry.js.map +1 -0
  857. package/dist/providers/qwen/index.d.ts +9 -0
  858. package/dist/providers/qwen/index.d.ts.map +1 -0
  859. package/dist/providers/qwen/index.js +13 -0
  860. package/dist/providers/qwen/index.js.map +1 -0
  861. package/dist/providers/qwen/models.d.ts +3 -0
  862. package/dist/providers/qwen/models.d.ts.map +1 -0
  863. package/dist/providers/qwen/models.js +164 -0
  864. package/dist/providers/qwen/models.js.map +1 -0
  865. package/dist/providers/request-shaping/index.d.ts +29 -0
  866. package/dist/providers/request-shaping/index.d.ts.map +1 -0
  867. package/dist/providers/request-shaping/index.js +31 -0
  868. package/dist/providers/request-shaping/index.js.map +1 -0
  869. package/dist/providers/request-shaping/messages.d.ts +61 -0
  870. package/dist/providers/request-shaping/messages.d.ts.map +1 -0
  871. package/dist/providers/request-shaping/messages.js +114 -0
  872. package/dist/providers/request-shaping/messages.js.map +1 -0
  873. package/dist/providers/request-shaping/model-ids.d.ts +44 -0
  874. package/dist/providers/request-shaping/model-ids.d.ts.map +1 -0
  875. package/dist/providers/request-shaping/model-ids.js +96 -0
  876. package/dist/providers/request-shaping/model-ids.js.map +1 -0
  877. package/dist/providers/request-shaping/params.d.ts +38 -0
  878. package/dist/providers/request-shaping/params.d.ts.map +1 -0
  879. package/dist/providers/request-shaping/params.js +79 -0
  880. package/dist/providers/request-shaping/params.js.map +1 -0
  881. package/dist/providers/resilient-provider.d.ts +44 -0
  882. package/dist/providers/resilient-provider.d.ts.map +1 -0
  883. package/dist/providers/resilient-provider.js +141 -0
  884. package/dist/providers/resilient-provider.js.map +1 -0
  885. package/dist/providers/tencent/index.d.ts +19 -0
  886. package/dist/providers/tencent/index.d.ts.map +1 -0
  887. package/dist/providers/tencent/index.js +50 -0
  888. package/dist/providers/tencent/index.js.map +1 -0
  889. package/dist/providers/tencent/models.d.ts +3 -0
  890. package/dist/providers/tencent/models.d.ts.map +1 -0
  891. package/dist/providers/tencent/models.js +29 -0
  892. package/dist/providers/tencent/models.js.map +1 -0
  893. package/dist/providers/types.d.ts +98 -0
  894. package/dist/providers/types.d.ts.map +1 -0
  895. package/dist/providers/types.js +2 -0
  896. package/dist/providers/types.js.map +1 -0
  897. package/dist/providers/xiaomi/index.d.ts +9 -0
  898. package/dist/providers/xiaomi/index.d.ts.map +1 -0
  899. package/dist/providers/xiaomi/index.js +16 -0
  900. package/dist/providers/xiaomi/index.js.map +1 -0
  901. package/dist/providers/xiaomi/models.d.ts +3 -0
  902. package/dist/providers/xiaomi/models.d.ts.map +1 -0
  903. package/dist/providers/xiaomi/models.js +37 -0
  904. package/dist/providers/xiaomi/models.js.map +1 -0
  905. package/dist/providers/zhipu/index.d.ts +11 -0
  906. package/dist/providers/zhipu/index.d.ts.map +1 -0
  907. package/dist/providers/zhipu/index.js +44 -0
  908. package/dist/providers/zhipu/index.js.map +1 -0
  909. package/dist/providers/zhipu/models.d.ts +3 -0
  910. package/dist/providers/zhipu/models.d.ts.map +1 -0
  911. package/dist/providers/zhipu/models.js +37 -0
  912. package/dist/providers/zhipu/models.js.map +1 -0
  913. package/dist/recipes/index.d.ts +215 -0
  914. package/dist/recipes/index.d.ts.map +1 -0
  915. package/dist/recipes/index.js +232 -0
  916. package/dist/recipes/index.js.map +1 -0
  917. package/dist/remote/client.d.ts +67 -0
  918. package/dist/remote/client.d.ts.map +1 -0
  919. package/dist/remote/client.js +202 -0
  920. package/dist/remote/client.js.map +1 -0
  921. package/dist/remote/index.d.ts +9 -0
  922. package/dist/remote/index.d.ts.map +1 -0
  923. package/dist/remote/index.js +7 -0
  924. package/dist/remote/index.js.map +1 -0
  925. package/dist/remote/schema.d.ts +152 -0
  926. package/dist/remote/schema.d.ts.map +1 -0
  927. package/dist/remote/schema.js +26 -0
  928. package/dist/remote/schema.js.map +1 -0
  929. package/dist/security/index.d.ts +6 -0
  930. package/dist/security/index.d.ts.map +1 -0
  931. package/dist/security/index.js +5 -0
  932. package/dist/security/index.js.map +1 -0
  933. package/dist/security/scanner.d.ts +67 -0
  934. package/dist/security/scanner.d.ts.map +1 -0
  935. package/dist/security/scanner.js +422 -0
  936. package/dist/security/scanner.js.map +1 -0
  937. package/dist/social/day-plan.d.ts +38 -0
  938. package/dist/social/day-plan.d.ts.map +1 -0
  939. package/dist/social/day-plan.js +16 -0
  940. package/dist/social/day-plan.js.map +1 -0
  941. package/dist/social/index.d.ts +290 -0
  942. package/dist/social/index.d.ts.map +1 -0
  943. package/dist/social/index.js +96 -0
  944. package/dist/social/index.js.map +1 -0
  945. package/dist/tasks/platform-sync.d.ts +22 -0
  946. package/dist/tasks/platform-sync.d.ts.map +1 -0
  947. package/dist/tasks/platform-sync.js +132 -0
  948. package/dist/tasks/platform-sync.js.map +1 -0
  949. package/dist/tasks/task-manager.d.ts +164 -0
  950. package/dist/tasks/task-manager.d.ts.map +1 -0
  951. package/dist/tasks/task-manager.js +643 -0
  952. package/dist/tasks/task-manager.js.map +1 -0
  953. package/dist/tasks/types.d.ts +105 -0
  954. package/dist/tasks/types.d.ts.map +1 -0
  955. package/dist/tasks/types.js +23 -0
  956. package/dist/tasks/types.js.map +1 -0
  957. package/dist/tools/analyze-architecture.d.ts +17 -0
  958. package/dist/tools/analyze-architecture.d.ts.map +1 -0
  959. package/dist/tools/analyze-architecture.js +316 -0
  960. package/dist/tools/analyze-architecture.js.map +1 -0
  961. package/dist/tools/apply-plan.d.ts +12 -0
  962. package/dist/tools/apply-plan.d.ts.map +1 -0
  963. package/dist/tools/apply-plan.js +119 -0
  964. package/dist/tools/apply-plan.js.map +1 -0
  965. package/dist/tools/ask-user.d.ts +11 -0
  966. package/dist/tools/ask-user.d.ts.map +1 -0
  967. package/dist/tools/ask-user.js +32 -0
  968. package/dist/tools/ask-user.js.map +1 -0
  969. package/dist/tools/audit-dependencies.d.ts +13 -0
  970. package/dist/tools/audit-dependencies.d.ts.map +1 -0
  971. package/dist/tools/audit-dependencies.js +156 -0
  972. package/dist/tools/audit-dependencies.js.map +1 -0
  973. package/dist/tools/authoring/doc-model.d.ts +128 -0
  974. package/dist/tools/authoring/doc-model.d.ts.map +1 -0
  975. package/dist/tools/authoring/doc-model.js +82 -0
  976. package/dist/tools/authoring/doc-model.js.map +1 -0
  977. package/dist/tools/authoring/frontmatter.d.ts +51 -0
  978. package/dist/tools/authoring/frontmatter.d.ts.map +1 -0
  979. package/dist/tools/authoring/frontmatter.js +203 -0
  980. package/dist/tools/authoring/frontmatter.js.map +1 -0
  981. package/dist/tools/authoring/image-size.d.ts +17 -0
  982. package/dist/tools/authoring/image-size.d.ts.map +1 -0
  983. package/dist/tools/authoring/image-size.js +47 -0
  984. package/dist/tools/authoring/image-size.js.map +1 -0
  985. package/dist/tools/authoring/index.d.ts +34 -0
  986. package/dist/tools/authoring/index.d.ts.map +1 -0
  987. package/dist/tools/authoring/index.js +44 -0
  988. package/dist/tools/authoring/index.js.map +1 -0
  989. package/dist/tools/authoring/md-parse.d.ts +18 -0
  990. package/dist/tools/authoring/md-parse.d.ts.map +1 -0
  991. package/dist/tools/authoring/md-parse.js +262 -0
  992. package/dist/tools/authoring/md-parse.js.map +1 -0
  993. package/dist/tools/authoring/render-docx.d.ts +18 -0
  994. package/dist/tools/authoring/render-docx.d.ts.map +1 -0
  995. package/dist/tools/authoring/render-docx.js +272 -0
  996. package/dist/tools/authoring/render-docx.js.map +1 -0
  997. package/dist/tools/authoring/render-md.d.ts +13 -0
  998. package/dist/tools/authoring/render-md.d.ts.map +1 -0
  999. package/dist/tools/authoring/render-md.js +139 -0
  1000. package/dist/tools/authoring/render-md.js.map +1 -0
  1001. package/dist/tools/authoring/render-pdf.d.ts +16 -0
  1002. package/dist/tools/authoring/render-pdf.d.ts.map +1 -0
  1003. package/dist/tools/authoring/render-pdf.js +298 -0
  1004. package/dist/tools/authoring/render-pdf.js.map +1 -0
  1005. package/dist/tools/authoring/sections.d.ts +35 -0
  1006. package/dist/tools/authoring/sections.d.ts.map +1 -0
  1007. package/dist/tools/authoring/sections.js +81 -0
  1008. package/dist/tools/authoring/sections.js.map +1 -0
  1009. package/dist/tools/authoring/templates/builtins.d.ts +11 -0
  1010. package/dist/tools/authoring/templates/builtins.d.ts.map +1 -0
  1011. package/dist/tools/authoring/templates/builtins.js +478 -0
  1012. package/dist/tools/authoring/templates/builtins.js.map +1 -0
  1013. package/dist/tools/authoring/templates/index.d.ts +15 -0
  1014. package/dist/tools/authoring/templates/index.d.ts.map +1 -0
  1015. package/dist/tools/authoring/templates/index.js +25 -0
  1016. package/dist/tools/authoring/templates/index.js.map +1 -0
  1017. package/dist/tools/authoring/templates/store.d.ts +15 -0
  1018. package/dist/tools/authoring/templates/store.d.ts.map +1 -0
  1019. package/dist/tools/authoring/templates/store.js +63 -0
  1020. package/dist/tools/authoring/templates/store.js.map +1 -0
  1021. package/dist/tools/authoring/templates/template-model.d.ts +44 -0
  1022. package/dist/tools/authoring/templates/template-model.d.ts.map +1 -0
  1023. package/dist/tools/authoring/templates/template-model.js +39 -0
  1024. package/dist/tools/authoring/templates/template-model.js.map +1 -0
  1025. package/dist/tools/bash.d.ts +34 -0
  1026. package/dist/tools/bash.d.ts.map +1 -0
  1027. package/dist/tools/bash.js +353 -0
  1028. package/dist/tools/bash.js.map +1 -0
  1029. package/dist/tools/benchmark.d.ts +12 -0
  1030. package/dist/tools/benchmark.d.ts.map +1 -0
  1031. package/dist/tools/benchmark.js +147 -0
  1032. package/dist/tools/benchmark.js.map +1 -0
  1033. package/dist/tools/browse-library.d.ts +12 -0
  1034. package/dist/tools/browse-library.d.ts.map +1 -0
  1035. package/dist/tools/browse-library.js +188 -0
  1036. package/dist/tools/browse-library.js.map +1 -0
  1037. package/dist/tools/browser-click.d.ts +12 -0
  1038. package/dist/tools/browser-click.d.ts.map +1 -0
  1039. package/dist/tools/browser-click.js +58 -0
  1040. package/dist/tools/browser-click.js.map +1 -0
  1041. package/dist/tools/browser-close.d.ts +11 -0
  1042. package/dist/tools/browser-close.d.ts.map +1 -0
  1043. package/dist/tools/browser-close.js +27 -0
  1044. package/dist/tools/browser-close.js.map +1 -0
  1045. package/dist/tools/browser-navigate.d.ts +12 -0
  1046. package/dist/tools/browser-navigate.d.ts.map +1 -0
  1047. package/dist/tools/browser-navigate.js +66 -0
  1048. package/dist/tools/browser-navigate.js.map +1 -0
  1049. package/dist/tools/browser-snapshot.d.ts +11 -0
  1050. package/dist/tools/browser-snapshot.d.ts.map +1 -0
  1051. package/dist/tools/browser-snapshot.js +56 -0
  1052. package/dist/tools/browser-snapshot.js.map +1 -0
  1053. package/dist/tools/browser-type.d.ts +12 -0
  1054. package/dist/tools/browser-type.d.ts.map +1 -0
  1055. package/dist/tools/browser-type.js +68 -0
  1056. package/dist/tools/browser-type.js.map +1 -0
  1057. package/dist/tools/browser.d.ts +29 -0
  1058. package/dist/tools/browser.d.ts.map +1 -0
  1059. package/dist/tools/browser.js +307 -0
  1060. package/dist/tools/browser.js.map +1 -0
  1061. package/dist/tools/conversation-recall.d.ts +43 -0
  1062. package/dist/tools/conversation-recall.d.ts.map +1 -0
  1063. package/dist/tools/conversation-recall.js +177 -0
  1064. package/dist/tools/conversation-recall.js.map +1 -0
  1065. package/dist/tools/creative-asset-sync.d.ts +33 -0
  1066. package/dist/tools/creative-asset-sync.d.ts.map +1 -0
  1067. package/dist/tools/creative-asset-sync.js +39 -0
  1068. package/dist/tools/creative-asset-sync.js.map +1 -0
  1069. package/dist/tools/curator.d.ts +34 -0
  1070. package/dist/tools/curator.d.ts.map +1 -0
  1071. package/dist/tools/curator.js +191 -0
  1072. package/dist/tools/curator.js.map +1 -0
  1073. package/dist/tools/database-query.d.ts +11 -0
  1074. package/dist/tools/database-query.d.ts.map +1 -0
  1075. package/dist/tools/database-query.js +228 -0
  1076. package/dist/tools/database-query.js.map +1 -0
  1077. package/dist/tools/day-plan.d.ts +27 -0
  1078. package/dist/tools/day-plan.d.ts.map +1 -0
  1079. package/dist/tools/day-plan.js +207 -0
  1080. package/dist/tools/day-plan.js.map +1 -0
  1081. package/dist/tools/debug-logs.d.ts +13 -0
  1082. package/dist/tools/debug-logs.d.ts.map +1 -0
  1083. package/dist/tools/debug-logs.js +141 -0
  1084. package/dist/tools/debug-logs.js.map +1 -0
  1085. package/dist/tools/deploy-manifest.d.ts +37 -0
  1086. package/dist/tools/deploy-manifest.d.ts.map +1 -0
  1087. package/dist/tools/deploy-manifest.js +71 -0
  1088. package/dist/tools/deploy-manifest.js.map +1 -0
  1089. package/dist/tools/design-studio-tools.d.ts +83 -0
  1090. package/dist/tools/design-studio-tools.d.ts.map +1 -0
  1091. package/dist/tools/design-studio-tools.js +761 -0
  1092. package/dist/tools/design-studio-tools.js.map +1 -0
  1093. package/dist/tools/desktop-click-by-name.d.ts +12 -0
  1094. package/dist/tools/desktop-click-by-name.d.ts.map +1 -0
  1095. package/dist/tools/desktop-click-by-name.js +64 -0
  1096. package/dist/tools/desktop-click-by-name.js.map +1 -0
  1097. package/dist/tools/desktop-focus-window.d.ts +12 -0
  1098. package/dist/tools/desktop-focus-window.d.ts.map +1 -0
  1099. package/dist/tools/desktop-focus-window.js +59 -0
  1100. package/dist/tools/desktop-focus-window.js.map +1 -0
  1101. package/dist/tools/desktop-key-press.d.ts +12 -0
  1102. package/dist/tools/desktop-key-press.d.ts.map +1 -0
  1103. package/dist/tools/desktop-key-press.js +73 -0
  1104. package/dist/tools/desktop-key-press.js.map +1 -0
  1105. package/dist/tools/desktop-launch-app.d.ts +12 -0
  1106. package/dist/tools/desktop-launch-app.d.ts.map +1 -0
  1107. package/dist/tools/desktop-launch-app.js +58 -0
  1108. package/dist/tools/desktop-launch-app.js.map +1 -0
  1109. package/dist/tools/desktop-list-elements.d.ts +11 -0
  1110. package/dist/tools/desktop-list-elements.d.ts.map +1 -0
  1111. package/dist/tools/desktop-list-elements.js +65 -0
  1112. package/dist/tools/desktop-list-elements.js.map +1 -0
  1113. package/dist/tools/desktop-plan-approve.d.ts +30 -0
  1114. package/dist/tools/desktop-plan-approve.d.ts.map +1 -0
  1115. package/dist/tools/desktop-plan-approve.js +135 -0
  1116. package/dist/tools/desktop-plan-approve.js.map +1 -0
  1117. package/dist/tools/desktop-providers.d.ts +144 -0
  1118. package/dist/tools/desktop-providers.d.ts.map +1 -0
  1119. package/dist/tools/desktop-providers.js +12 -0
  1120. package/dist/tools/desktop-providers.js.map +1 -0
  1121. package/dist/tools/desktop-safety-gate.d.ts +84 -0
  1122. package/dist/tools/desktop-safety-gate.d.ts.map +1 -0
  1123. package/dist/tools/desktop-safety-gate.js +171 -0
  1124. package/dist/tools/desktop-safety-gate.js.map +1 -0
  1125. package/dist/tools/desktop-tools.d.ts +22 -0
  1126. package/dist/tools/desktop-tools.d.ts.map +1 -0
  1127. package/dist/tools/desktop-tools.js +71 -0
  1128. package/dist/tools/desktop-tools.js.map +1 -0
  1129. package/dist/tools/desktop-type.d.ts +12 -0
  1130. package/dist/tools/desktop-type.d.ts.map +1 -0
  1131. package/dist/tools/desktop-type.js +63 -0
  1132. package/dist/tools/desktop-type.js.map +1 -0
  1133. package/dist/tools/detect-language.d.ts +11 -0
  1134. package/dist/tools/detect-language.d.ts.map +1 -0
  1135. package/dist/tools/detect-language.js +235 -0
  1136. package/dist/tools/detect-language.js.map +1 -0
  1137. package/dist/tools/discover-news.d.ts +11 -0
  1138. package/dist/tools/discover-news.d.ts.map +1 -0
  1139. package/dist/tools/discover-news.js +261 -0
  1140. package/dist/tools/discover-news.js.map +1 -0
  1141. package/dist/tools/doc-generate.d.ts +17 -0
  1142. package/dist/tools/doc-generate.d.ts.map +1 -0
  1143. package/dist/tools/doc-generate.js +222 -0
  1144. package/dist/tools/doc-generate.js.map +1 -0
  1145. package/dist/tools/docs-lookup.d.ts +38 -0
  1146. package/dist/tools/docs-lookup.d.ts.map +1 -0
  1147. package/dist/tools/docs-lookup.js +174 -0
  1148. package/dist/tools/docs-lookup.js.map +1 -0
  1149. package/dist/tools/document-author.d.ts +40 -0
  1150. package/dist/tools/document-author.d.ts.map +1 -0
  1151. package/dist/tools/document-author.js +465 -0
  1152. package/dist/tools/document-author.js.map +1 -0
  1153. package/dist/tools/document-manage.d.ts +43 -0
  1154. package/dist/tools/document-manage.d.ts.map +1 -0
  1155. package/dist/tools/document-manage.js +665 -0
  1156. package/dist/tools/document-manage.js.map +1 -0
  1157. package/dist/tools/document-styling.d.ts +132 -0
  1158. package/dist/tools/document-styling.d.ts.map +1 -0
  1159. package/dist/tools/document-styling.js +360 -0
  1160. package/dist/tools/document-styling.js.map +1 -0
  1161. package/dist/tools/document-templates.d.ts +32 -0
  1162. package/dist/tools/document-templates.d.ts.map +1 -0
  1163. package/dist/tools/document-templates.js +95 -0
  1164. package/dist/tools/document-templates.js.map +1 -0
  1165. package/dist/tools/email-draft.d.ts +20 -0
  1166. package/dist/tools/email-draft.d.ts.map +1 -0
  1167. package/dist/tools/email-draft.js +191 -0
  1168. package/dist/tools/email-draft.js.map +1 -0
  1169. package/dist/tools/env-write.d.ts +32 -0
  1170. package/dist/tools/env-write.d.ts.map +1 -0
  1171. package/dist/tools/env-write.js +145 -0
  1172. package/dist/tools/env-write.js.map +1 -0
  1173. package/dist/tools/error-guidance.d.ts +38 -0
  1174. package/dist/tools/error-guidance.d.ts.map +1 -0
  1175. package/dist/tools/error-guidance.js +261 -0
  1176. package/dist/tools/error-guidance.js.map +1 -0
  1177. package/dist/tools/exercise-repair.d.ts +89 -0
  1178. package/dist/tools/exercise-repair.d.ts.map +1 -0
  1179. package/dist/tools/exercise-repair.js +350 -0
  1180. package/dist/tools/exercise-repair.js.map +1 -0
  1181. package/dist/tools/fact-check.d.ts +24 -0
  1182. package/dist/tools/fact-check.d.ts.map +1 -0
  1183. package/dist/tools/fact-check.js +78 -0
  1184. package/dist/tools/fact-check.js.map +1 -0
  1185. package/dist/tools/file-edit.d.ts +11 -0
  1186. package/dist/tools/file-edit.d.ts.map +1 -0
  1187. package/dist/tools/file-edit.js +166 -0
  1188. package/dist/tools/file-edit.js.map +1 -0
  1189. package/dist/tools/file-read.d.ts +12 -0
  1190. package/dist/tools/file-read.d.ts.map +1 -0
  1191. package/dist/tools/file-read.js +98 -0
  1192. package/dist/tools/file-read.js.map +1 -0
  1193. package/dist/tools/file-write.d.ts +13 -0
  1194. package/dist/tools/file-write.d.ts.map +1 -0
  1195. package/dist/tools/file-write.js +163 -0
  1196. package/dist/tools/file-write.js.map +1 -0
  1197. package/dist/tools/find-symbol.d.ts +13 -0
  1198. package/dist/tools/find-symbol.d.ts.map +1 -0
  1199. package/dist/tools/find-symbol.js +144 -0
  1200. package/dist/tools/find-symbol.js.map +1 -0
  1201. package/dist/tools/generate-image.d.ts +19 -0
  1202. package/dist/tools/generate-image.d.ts.map +1 -0
  1203. package/dist/tools/generate-image.js +438 -0
  1204. package/dist/tools/generate-image.js.map +1 -0
  1205. package/dist/tools/generate-video.d.ts +21 -0
  1206. package/dist/tools/generate-video.d.ts.map +1 -0
  1207. package/dist/tools/generate-video.js +197 -0
  1208. package/dist/tools/generate-video.js.map +1 -0
  1209. package/dist/tools/generate-voice.d.ts +13 -0
  1210. package/dist/tools/generate-voice.d.ts.map +1 -0
  1211. package/dist/tools/generate-voice.js +156 -0
  1212. package/dist/tools/generate-voice.js.map +1 -0
  1213. package/dist/tools/generation-manager.d.ts +75 -0
  1214. package/dist/tools/generation-manager.d.ts.map +1 -0
  1215. package/dist/tools/generation-manager.js +150 -0
  1216. package/dist/tools/generation-manager.js.map +1 -0
  1217. package/dist/tools/get-datetime.d.ts +11 -0
  1218. package/dist/tools/get-datetime.d.ts.map +1 -0
  1219. package/dist/tools/get-datetime.js +59 -0
  1220. package/dist/tools/get-datetime.js.map +1 -0
  1221. package/dist/tools/git-commit.d.ts +13 -0
  1222. package/dist/tools/git-commit.d.ts.map +1 -0
  1223. package/dist/tools/git-commit.js +136 -0
  1224. package/dist/tools/git-commit.js.map +1 -0
  1225. package/dist/tools/git-create-pr.d.ts +13 -0
  1226. package/dist/tools/git-create-pr.d.ts.map +1 -0
  1227. package/dist/tools/git-create-pr.js +134 -0
  1228. package/dist/tools/git-create-pr.js.map +1 -0
  1229. package/dist/tools/git-diff.d.ts +12 -0
  1230. package/dist/tools/git-diff.d.ts.map +1 -0
  1231. package/dist/tools/git-diff.js +134 -0
  1232. package/dist/tools/git-diff.js.map +1 -0
  1233. package/dist/tools/git.d.ts +11 -0
  1234. package/dist/tools/git.d.ts.map +1 -0
  1235. package/dist/tools/git.js +89 -0
  1236. package/dist/tools/git.js.map +1 -0
  1237. package/dist/tools/glob.d.ts +11 -0
  1238. package/dist/tools/glob.d.ts.map +1 -0
  1239. package/dist/tools/glob.js +64 -0
  1240. package/dist/tools/glob.js.map +1 -0
  1241. package/dist/tools/grep.d.ts +11 -0
  1242. package/dist/tools/grep.d.ts.map +1 -0
  1243. package/dist/tools/grep.js +131 -0
  1244. package/dist/tools/grep.js.map +1 -0
  1245. package/dist/tools/health-catalogue-search.d.ts +11 -0
  1246. package/dist/tools/health-catalogue-search.d.ts.map +1 -0
  1247. package/dist/tools/health-catalogue-search.js +179 -0
  1248. package/dist/tools/health-catalogue-search.js.map +1 -0
  1249. package/dist/tools/health-plan-create.d.ts +24 -0
  1250. package/dist/tools/health-plan-create.d.ts.map +1 -0
  1251. package/dist/tools/health-plan-create.js +325 -0
  1252. package/dist/tools/health-plan-create.js.map +1 -0
  1253. package/dist/tools/health-plan-delete.d.ts +11 -0
  1254. package/dist/tools/health-plan-delete.d.ts.map +1 -0
  1255. package/dist/tools/health-plan-delete.js +97 -0
  1256. package/dist/tools/health-plan-delete.js.map +1 -0
  1257. package/dist/tools/health-plan-list.d.ts +11 -0
  1258. package/dist/tools/health-plan-list.d.ts.map +1 -0
  1259. package/dist/tools/health-plan-list.js +123 -0
  1260. package/dist/tools/health-plan-list.js.map +1 -0
  1261. package/dist/tools/health-plan-update-day.d.ts +18 -0
  1262. package/dist/tools/health-plan-update-day.d.ts.map +1 -0
  1263. package/dist/tools/health-plan-update-day.js +134 -0
  1264. package/dist/tools/health-plan-update-day.js.map +1 -0
  1265. package/dist/tools/health-plan-update.d.ts +11 -0
  1266. package/dist/tools/health-plan-update.d.ts.map +1 -0
  1267. package/dist/tools/health-plan-update.js +103 -0
  1268. package/dist/tools/health-plan-update.js.map +1 -0
  1269. package/dist/tools/health-profile-ask.d.ts +21 -0
  1270. package/dist/tools/health-profile-ask.d.ts.map +1 -0
  1271. package/dist/tools/health-profile-ask.js +50 -0
  1272. package/dist/tools/health-profile-ask.js.map +1 -0
  1273. package/dist/tools/http-request.d.ts +12 -0
  1274. package/dist/tools/http-request.d.ts.map +1 -0
  1275. package/dist/tools/http-request.js +329 -0
  1276. package/dist/tools/http-request.js.map +1 -0
  1277. package/dist/tools/journal.d.ts +17 -0
  1278. package/dist/tools/journal.d.ts.map +1 -0
  1279. package/dist/tools/journal.js +159 -0
  1280. package/dist/tools/journal.js.map +1 -0
  1281. package/dist/tools/learning.d.ts +154 -0
  1282. package/dist/tools/learning.d.ts.map +1 -0
  1283. package/dist/tools/learning.js +1344 -0
  1284. package/dist/tools/learning.js.map +1 -0
  1285. package/dist/tools/list-directory.d.ts +11 -0
  1286. package/dist/tools/list-directory.d.ts.map +1 -0
  1287. package/dist/tools/list-directory.js +95 -0
  1288. package/dist/tools/list-directory.js.map +1 -0
  1289. package/dist/tools/memory-delete.d.ts +11 -0
  1290. package/dist/tools/memory-delete.d.ts.map +1 -0
  1291. package/dist/tools/memory-delete.js +54 -0
  1292. package/dist/tools/memory-delete.js.map +1 -0
  1293. package/dist/tools/memory-recall.d.ts +11 -0
  1294. package/dist/tools/memory-recall.d.ts.map +1 -0
  1295. package/dist/tools/memory-recall.js +101 -0
  1296. package/dist/tools/memory-recall.js.map +1 -0
  1297. package/dist/tools/memory-save.d.ts +11 -0
  1298. package/dist/tools/memory-save.d.ts.map +1 -0
  1299. package/dist/tools/memory-save.js +110 -0
  1300. package/dist/tools/memory-save.js.map +1 -0
  1301. package/dist/tools/memory-update.d.ts +11 -0
  1302. package/dist/tools/memory-update.d.ts.map +1 -0
  1303. package/dist/tools/memory-update.js +88 -0
  1304. package/dist/tools/memory-update.js.map +1 -0
  1305. package/dist/tools/news.d.ts +11 -0
  1306. package/dist/tools/news.d.ts.map +1 -0
  1307. package/dist/tools/news.js +137 -0
  1308. package/dist/tools/news.js.map +1 -0
  1309. package/dist/tools/open-design-studio.d.ts +20 -0
  1310. package/dist/tools/open-design-studio.d.ts.map +1 -0
  1311. package/dist/tools/open-design-studio.js +45 -0
  1312. package/dist/tools/open-design-studio.js.map +1 -0
  1313. package/dist/tools/open-health-room.d.ts +19 -0
  1314. package/dist/tools/open-health-room.d.ts.map +1 -0
  1315. package/dist/tools/open-health-room.js +44 -0
  1316. package/dist/tools/open-health-room.js.map +1 -0
  1317. package/dist/tools/open-learning-room.d.ts +20 -0
  1318. package/dist/tools/open-learning-room.d.ts.map +1 -0
  1319. package/dist/tools/open-learning-room.js +44 -0
  1320. package/dist/tools/open-learning-room.js.map +1 -0
  1321. package/dist/tools/paper-fetch.d.ts +11 -0
  1322. package/dist/tools/paper-fetch.d.ts.map +1 -0
  1323. package/dist/tools/paper-fetch.js +236 -0
  1324. package/dist/tools/paper-fetch.js.map +1 -0
  1325. package/dist/tools/post-performance.d.ts +17 -0
  1326. package/dist/tools/post-performance.d.ts.map +1 -0
  1327. package/dist/tools/post-performance.js +58 -0
  1328. package/dist/tools/post-performance.js.map +1 -0
  1329. package/dist/tools/present-plan.d.ts +34 -0
  1330. package/dist/tools/present-plan.d.ts.map +1 -0
  1331. package/dist/tools/present-plan.js +117 -0
  1332. package/dist/tools/present-plan.js.map +1 -0
  1333. package/dist/tools/project-index.d.ts +11 -0
  1334. package/dist/tools/project-index.d.ts.map +1 -0
  1335. package/dist/tools/project-index.js +88 -0
  1336. package/dist/tools/project-index.js.map +1 -0
  1337. package/dist/tools/propose-hooks.d.ts +17 -0
  1338. package/dist/tools/propose-hooks.d.ts.map +1 -0
  1339. package/dist/tools/propose-hooks.js +71 -0
  1340. package/dist/tools/propose-hooks.js.map +1 -0
  1341. package/dist/tools/propose-tool.d.ts +11 -0
  1342. package/dist/tools/propose-tool.d.ts.map +1 -0
  1343. package/dist/tools/propose-tool.js +155 -0
  1344. package/dist/tools/propose-tool.js.map +1 -0
  1345. package/dist/tools/recipe-repair.d.ts +116 -0
  1346. package/dist/tools/recipe-repair.d.ts.map +1 -0
  1347. package/dist/tools/recipe-repair.js +404 -0
  1348. package/dist/tools/recipe-repair.js.map +1 -0
  1349. package/dist/tools/record-machine-rule.d.ts +24 -0
  1350. package/dist/tools/record-machine-rule.d.ts.map +1 -0
  1351. package/dist/tools/record-machine-rule.js +60 -0
  1352. package/dist/tools/record-machine-rule.js.map +1 -0
  1353. package/dist/tools/release-notes.d.ts +11 -0
  1354. package/dist/tools/release-notes.d.ts.map +1 -0
  1355. package/dist/tools/release-notes.js +59 -0
  1356. package/dist/tools/release-notes.js.map +1 -0
  1357. package/dist/tools/remove-background.d.ts +15 -0
  1358. package/dist/tools/remove-background.d.ts.map +1 -0
  1359. package/dist/tools/remove-background.js +117 -0
  1360. package/dist/tools/remove-background.js.map +1 -0
  1361. package/dist/tools/report-generate.d.ts +30 -0
  1362. package/dist/tools/report-generate.d.ts.map +1 -0
  1363. package/dist/tools/report-generate.js +325 -0
  1364. package/dist/tools/report-generate.js.map +1 -0
  1365. package/dist/tools/research-post.d.ts +20 -0
  1366. package/dist/tools/research-post.d.ts.map +1 -0
  1367. package/dist/tools/research-post.js +87 -0
  1368. package/dist/tools/research-post.js.map +1 -0
  1369. package/dist/tools/research-story.d.ts +29 -0
  1370. package/dist/tools/research-story.d.ts.map +1 -0
  1371. package/dist/tools/research-story.js +78 -0
  1372. package/dist/tools/research-story.js.map +1 -0
  1373. package/dist/tools/rollback.d.ts +11 -0
  1374. package/dist/tools/rollback.d.ts.map +1 -0
  1375. package/dist/tools/rollback.js +81 -0
  1376. package/dist/tools/rollback.js.map +1 -0
  1377. package/dist/tools/scan-industry.d.ts +19 -0
  1378. package/dist/tools/scan-industry.d.ts.map +1 -0
  1379. package/dist/tools/scan-industry.js +82 -0
  1380. package/dist/tools/scan-industry.js.map +1 -0
  1381. package/dist/tools/screenshot.d.ts +11 -0
  1382. package/dist/tools/screenshot.d.ts.map +1 -0
  1383. package/dist/tools/screenshot.js +82 -0
  1384. package/dist/tools/screenshot.js.map +1 -0
  1385. package/dist/tools/secret-request.d.ts +24 -0
  1386. package/dist/tools/secret-request.d.ts.map +1 -0
  1387. package/dist/tools/secret-request.js +75 -0
  1388. package/dist/tools/secret-request.js.map +1 -0
  1389. package/dist/tools/security.d.ts +26 -0
  1390. package/dist/tools/security.d.ts.map +1 -0
  1391. package/dist/tools/security.js +78 -0
  1392. package/dist/tools/security.js.map +1 -0
  1393. package/dist/tools/self-inspect.d.ts +34 -0
  1394. package/dist/tools/self-inspect.d.ts.map +1 -0
  1395. package/dist/tools/self-inspect.js +427 -0
  1396. package/dist/tools/self-inspect.js.map +1 -0
  1397. package/dist/tools/suggest-beats.d.ts +17 -0
  1398. package/dist/tools/suggest-beats.d.ts.map +1 -0
  1399. package/dist/tools/suggest-beats.js +71 -0
  1400. package/dist/tools/suggest-beats.js.map +1 -0
  1401. package/dist/tools/suggest-stories.d.ts +26 -0
  1402. package/dist/tools/suggest-stories.d.ts.map +1 -0
  1403. package/dist/tools/suggest-stories.js +102 -0
  1404. package/dist/tools/suggest-stories.js.map +1 -0
  1405. package/dist/tools/support-request.d.ts +11 -0
  1406. package/dist/tools/support-request.d.ts.map +1 -0
  1407. package/dist/tools/support-request.js +110 -0
  1408. package/dist/tools/support-request.js.map +1 -0
  1409. package/dist/tools/switch-mode.d.ts +21 -0
  1410. package/dist/tools/switch-mode.d.ts.map +1 -0
  1411. package/dist/tools/switch-mode.js +57 -0
  1412. package/dist/tools/switch-mode.js.map +1 -0
  1413. package/dist/tools/task-manage.d.ts +16 -0
  1414. package/dist/tools/task-manage.d.ts.map +1 -0
  1415. package/dist/tools/task-manage.js +256 -0
  1416. package/dist/tools/task-manage.js.map +1 -0
  1417. package/dist/tools/task-suggest.d.ts +27 -0
  1418. package/dist/tools/task-suggest.d.ts.map +1 -0
  1419. package/dist/tools/task-suggest.js +70 -0
  1420. package/dist/tools/task-suggest.js.map +1 -0
  1421. package/dist/tools/test-generate.d.ts +20 -0
  1422. package/dist/tools/test-generate.d.ts.map +1 -0
  1423. package/dist/tools/test-generate.js +259 -0
  1424. package/dist/tools/test-generate.js.map +1 -0
  1425. package/dist/tools/test-run.d.ts +13 -0
  1426. package/dist/tools/test-run.d.ts.map +1 -0
  1427. package/dist/tools/test-run.js +177 -0
  1428. package/dist/tools/test-run.js.map +1 -0
  1429. package/dist/tools/todo-write.d.ts +11 -0
  1430. package/dist/tools/todo-write.d.ts.map +1 -0
  1431. package/dist/tools/todo-write.js +70 -0
  1432. package/dist/tools/todo-write.js.map +1 -0
  1433. package/dist/tools/tool-registry.d.ts +84 -0
  1434. package/dist/tools/tool-registry.d.ts.map +1 -0
  1435. package/dist/tools/tool-registry.js +728 -0
  1436. package/dist/tools/tool-registry.js.map +1 -0
  1437. package/dist/tools/types.d.ts +128 -0
  1438. package/dist/tools/types.d.ts.map +1 -0
  1439. package/dist/tools/types.js +2 -0
  1440. package/dist/tools/types.js.map +1 -0
  1441. package/dist/tools/verification-trust.d.ts +39 -0
  1442. package/dist/tools/verification-trust.d.ts.map +1 -0
  1443. package/dist/tools/verification-trust.js +135 -0
  1444. package/dist/tools/verification-trust.js.map +1 -0
  1445. package/dist/tools/verify-change.d.ts +11 -0
  1446. package/dist/tools/verify-change.d.ts.map +1 -0
  1447. package/dist/tools/verify-change.js +775 -0
  1448. package/dist/tools/verify-change.js.map +1 -0
  1449. package/dist/tools/weather.d.ts +11 -0
  1450. package/dist/tools/weather.d.ts.map +1 -0
  1451. package/dist/tools/weather.js +96 -0
  1452. package/dist/tools/weather.js.map +1 -0
  1453. package/dist/tools/web-search.d.ts +12 -0
  1454. package/dist/tools/web-search.d.ts.map +1 -0
  1455. package/dist/tools/web-search.js +137 -0
  1456. package/dist/tools/web-search.js.map +1 -0
  1457. package/dist/tools/write-article.d.ts +33 -0
  1458. package/dist/tools/write-article.d.ts.map +1 -0
  1459. package/dist/tools/write-article.js +206 -0
  1460. package/dist/tools/write-article.js.map +1 -0
  1461. package/dist/tools/write-exercise.d.ts +31 -0
  1462. package/dist/tools/write-exercise.d.ts.map +1 -0
  1463. package/dist/tools/write-exercise.js +278 -0
  1464. package/dist/tools/write-exercise.js.map +1 -0
  1465. package/dist/tools/write-post-image.d.ts +31 -0
  1466. package/dist/tools/write-post-image.d.ts.map +1 -0
  1467. package/dist/tools/write-post-image.js +102 -0
  1468. package/dist/tools/write-post-image.js.map +1 -0
  1469. package/dist/tools/write-post.d.ts +20 -0
  1470. package/dist/tools/write-post.d.ts.map +1 -0
  1471. package/dist/tools/write-post.js +113 -0
  1472. package/dist/tools/write-post.js.map +1 -0
  1473. package/dist/tools/write-recipe.d.ts +29 -0
  1474. package/dist/tools/write-recipe.d.ts.map +1 -0
  1475. package/dist/tools/write-recipe.js +262 -0
  1476. package/dist/tools/write-recipe.js.map +1 -0
  1477. package/dist/tools/write-video-post.d.ts +25 -0
  1478. package/dist/tools/write-video-post.d.ts.map +1 -0
  1479. package/dist/tools/write-video-post.js +238 -0
  1480. package/dist/tools/write-video-post.js.map +1 -0
  1481. package/dist/tools/write-voiceover.d.ts +29 -0
  1482. package/dist/tools/write-voiceover.d.ts.map +1 -0
  1483. package/dist/tools/write-voiceover.js +98 -0
  1484. package/dist/tools/write-voiceover.js.map +1 -0
  1485. package/dist/workflows/index.d.ts +4 -0
  1486. package/dist/workflows/index.d.ts.map +1 -0
  1487. package/dist/workflows/index.js +2 -0
  1488. package/dist/workflows/index.js.map +1 -0
  1489. package/dist/workflows/types.d.ts +112 -0
  1490. package/dist/workflows/types.d.ts.map +1 -0
  1491. package/dist/workflows/types.js +10 -0
  1492. package/dist/workflows/types.js.map +1 -0
  1493. package/dist/workflows/workflow-manager.d.ts +54 -0
  1494. package/dist/workflows/workflow-manager.d.ts.map +1 -0
  1495. package/dist/workflows/workflow-manager.js +277 -0
  1496. package/dist/workflows/workflow-manager.js.map +1 -0
  1497. package/package.json +223 -0
@@ -0,0 +1,1633 @@
1
+ import { readFile, writeFile, rename, mkdir, unlink } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { join, basename } from 'node:path';
4
+ import { randomUUID } from 'node:crypto';
5
+ import { TfIdfIndex, cosineDense } from './tfidf.js';
6
+ import { EmbeddingStore } from './embedding-store.js';
7
+ import { MEMORY_CATEGORIES, createEmptyStore, inferLayer } from './types.js';
8
+ import { MemoryGraph } from './graph-engine.js';
9
+ import { needsMigration, migrateV2ToV3 } from './migration-v3.js';
10
+ import { ProceduralObserver } from './procedural.js';
11
+ import { synthesiseProjectBrain, loadProjectBrain, saveProjectBrain } from './project-brain.js';
12
+ import { AmbientCaptureManager } from './ambient-capture.js';
13
+ import { logger } from '../core/logger.js';
14
+ import { avaEvents } from '../dataset/emitter.js';
15
+ const MEMORY_FILENAME_V1 = 'memory.md';
16
+ const MEMORY_FILENAME_V2 = 'memory.json';
17
+ const PROJECTS_REGISTRY = 'projects.json';
18
+ /** Minimum cosine for a node to count as a semantic recall hit. Related text
19
+ * sits well above this; unrelated text falls below. */
20
+ const SEMANTIC_RECALL_THRESHOLD = 0.5;
21
+ /** Backfill: flush the store + yield to the event loop every N embeds. */
22
+ const EMBED_BACKFILL_BATCH = 50;
23
+ /** Backfill: embed this many nodes concurrently (Ollama handles parallel
24
+ * requests; keeps a 29k backfill to minutes, not tens of minutes). */
25
+ const EMBED_BACKFILL_CONCURRENCY = 6;
26
+ import { CONFLICT_THRESHOLD as CONFLICT_TFIDF_THRESHOLD, RECALL_THRESHOLD as RECALL_TFIDF_THRESHOLD, CONSOLIDATION_THRESHOLD, STALE_DAYS as STALE_THRESHOLD_DAYS, W_TFIDF, W_RECENCY, W_FREQUENCY, } from './config.js';
27
+ export class MemoryManager {
28
+ globalDir;
29
+ projectDir;
30
+ sync;
31
+ // In-memory caches — loaded lazily, written through on save
32
+ globalStore = null;
33
+ projectStore = null;
34
+ // TF-IDF indexes — one per scope, rebuilt on load
35
+ globalIndex = new TfIdfIndex();
36
+ projectIndex = new TfIdfIndex();
37
+ /** When true, skip all platform sync — memories stay on disk only. Default: true (local-first). */
38
+ localOnly = true;
39
+ // ── v3 Graph layer ────────────────────────────────────────────────────────
40
+ // Runs alongside the v2 flat stores during the transition. New operations
41
+ // (recall, project brain, procedural learning, ambient capture) use the
42
+ // graph; existing operations (saveEntry, getEntries) write to both so
43
+ // backwards compat is preserved for dashboard and sync callers.
44
+ graphGlobal = null;
45
+ graphProject = null;
46
+ graphInitialized = false;
47
+ // Resolves when initGraph() completes — saveEntry awaits this so it never
48
+ // writes to a not-yet-loaded graph.
49
+ initGraphPromise = Promise.resolve();
50
+ proceduralGlobal = null;
51
+ proceduralProject = null;
52
+ ambientGlobal = null;
53
+ ambientProject = null;
54
+ projectBrainCache = null;
55
+ // ── Semantic recall (optional, local Ollama) ──────────────────────────────
56
+ // When an embedding service is injected, memories are embedded on write and
57
+ // recall adds a graph-wide semantic phase. All null/absent → pure TF-IDF, no
58
+ // external dependency. Vectors live in a SEPARATE embeddings.json per scope.
59
+ embeddingService = null;
60
+ embeddingStoreGlobal = null;
61
+ embeddingStoreProject = null;
62
+ // ── Sync coalescing — debounce + in-flight guard ──────────────────────────
63
+ // syncEntries() used to fire every store mutation, with each call doing a
64
+ // full pull + per-entry POST/PATCH against the platform. With the Memory
65
+ // Agent extracting 5+ memories at once, that meant dozens of parallel
66
+ // racing syncs from a single turn — flooding the client's connection pool
67
+ // and starving the LLM stream until the 30s stall watchdog tripped.
68
+ //
69
+ // The fix: debounce sync calls per scope (collect rapid mutations into one
70
+ // sync), and guard against concurrent runs (in-flight + dirty flag pattern).
71
+ SYNC_DEBOUNCE_MS = 2000;
72
+ syncTimers = new Map();
73
+ syncInFlight = new Set();
74
+ syncDirty = new Set();
75
+ constructor(opts) {
76
+ this.globalDir = opts.globalDir;
77
+ this.projectDir = opts.projectRoot ? join(opts.projectRoot, '.ava') : null;
78
+ this.sync = opts.sync;
79
+ this.localOnly = opts.localOnly ?? true;
80
+ this.embeddingService = opts.embeddingService ?? null;
81
+ // Auto-register this project in the global registry (fire-and-forget)
82
+ if (opts.projectRoot) {
83
+ this.registerProject(opts.projectRoot).catch(() => { });
84
+ }
85
+ // Initialize v3 graph layer (async, non-blocking). Keep the promise so
86
+ // saveEntry/recall can await readiness; warn (not debug) on failure so a
87
+ // broken graph init is visible rather than silently dropping memories.
88
+ this.initGraphPromise = this.initGraph().catch(err => logger.warn(`[memory] Graph init failed: ${err instanceof Error ? err.message : String(err)}`));
89
+ }
90
+ /** Resolves once the v3 graph layer has finished initializing. */
91
+ async ensureGraphReady() {
92
+ await this.initGraphPromise;
93
+ }
94
+ /**
95
+ * Initialize the v3 graph layer. Creates MemoryGraph instances for
96
+ * global + project scopes, runs auto-migration from v2 if needed,
97
+ * and sets up procedural observers + ambient capture managers.
98
+ */
99
+ async initGraph() {
100
+ if (this.graphInitialized)
101
+ return;
102
+ try {
103
+ // Global graph
104
+ const globalMemDir = join(this.globalDir, 'memory');
105
+ this.graphGlobal = new MemoryGraph(globalMemDir);
106
+ if (needsMigration(this.globalDir)) {
107
+ // v2 memory.json exists but no graph.json — migrate
108
+ await this.graphGlobal.load();
109
+ await migrateV2ToV3(this.globalDir, this.graphGlobal);
110
+ }
111
+ else {
112
+ await this.graphGlobal.load();
113
+ }
114
+ this.proceduralGlobal = new ProceduralObserver(globalMemDir);
115
+ await this.proceduralGlobal.load();
116
+ this.ambientGlobal = new AmbientCaptureManager(this.graphGlobal);
117
+ if (this.embeddingService) {
118
+ this.embeddingStoreGlobal = new EmbeddingStore(globalMemDir, this.embeddingService.embedModel);
119
+ await this.embeddingStoreGlobal.load();
120
+ }
121
+ // Project graph
122
+ if (this.projectDir) {
123
+ const projectMemDir = join(this.projectDir, 'memory');
124
+ this.graphProject = new MemoryGraph(projectMemDir);
125
+ if (needsMigration(this.projectDir)) {
126
+ await this.graphProject.load();
127
+ await migrateV2ToV3(this.projectDir, this.graphProject);
128
+ }
129
+ else {
130
+ await this.graphProject.load();
131
+ }
132
+ this.proceduralProject = new ProceduralObserver(projectMemDir);
133
+ await this.proceduralProject.load();
134
+ this.ambientProject = new AmbientCaptureManager(this.graphProject);
135
+ if (this.embeddingService) {
136
+ this.embeddingStoreProject = new EmbeddingStore(projectMemDir, this.embeddingService.embedModel);
137
+ await this.embeddingStoreProject.load();
138
+ }
139
+ // Load or generate project brain
140
+ const brainDir = join(this.projectDir, 'memory');
141
+ const graphHash = this.graphProject.getGraphHash();
142
+ this.projectBrainCache = await loadProjectBrain(brainDir, graphHash);
143
+ if (!this.projectBrainCache && this.graphProject.nodeCount > 0) {
144
+ const procedures = this.proceduralProject?.getAllPatterns() ?? [];
145
+ this.projectBrainCache = synthesiseProjectBrain(this.graphProject, this.projectDir, procedures);
146
+ await saveProjectBrain(brainDir, this.projectBrainCache);
147
+ }
148
+ }
149
+ this.graphInitialized = true;
150
+ logger.debug(`[memory] v3 graph initialized: global=${this.graphGlobal?.nodeCount ?? 0} nodes, project=${this.graphProject?.nodeCount ?? 0} nodes`);
151
+ // Background semantic backfill — embed any nodes missing a vector so
152
+ // recall spans the whole graph. Fire-and-forget; resumable (only fills
153
+ // gaps); fast-no-ops if Ollama is unreachable (breaker trips).
154
+ if (this.embeddingService) {
155
+ void this.runEmbeddingBackfill().catch(() => { });
156
+ }
157
+ }
158
+ catch (err) {
159
+ logger.warn(`[memory] v3 graph init failed: ${err instanceof Error ? err.message : String(err)}`);
160
+ // Non-fatal — v2 stores still work as fallback
161
+ }
162
+ }
163
+ // ── v3 Public API — Graph-specific operations ─────────────────────────────
164
+ /** Get the project brain brief for session-start injection. */
165
+ getProjectBrain() {
166
+ return this.projectBrainCache;
167
+ }
168
+ /** Get the graph instance for a scope (for direct graph operations). */
169
+ getGraph(scope) {
170
+ return scope === 'global' ? this.graphGlobal : this.graphProject;
171
+ }
172
+ /** Get the procedural observer for a scope. */
173
+ getProceduralObserver(scope) {
174
+ return scope === 'global' ? this.proceduralGlobal : this.proceduralProject;
175
+ }
176
+ /** Get the ambient capture manager for a scope. */
177
+ getAmbientCapture(scope) {
178
+ return scope === 'global' ? this.ambientGlobal : this.ambientProject;
179
+ }
180
+ // ── Semantic embeddings (optional, local Ollama) ──────────────────────────
181
+ embeddingStore(scope) {
182
+ return scope === 'global' ? this.embeddingStoreGlobal : this.embeddingStoreProject;
183
+ }
184
+ /** Embed a node's content and stash the vector. Background; never throws. */
185
+ async embedNode(scope, nodeId, content) {
186
+ const store = this.embeddingStore(scope);
187
+ if (!store || !this.embeddingService)
188
+ return;
189
+ try {
190
+ const vec = await this.embeddingService.embed(content);
191
+ if (vec)
192
+ store.set(nodeId, vec);
193
+ }
194
+ catch { /* never throw on a background embed */ }
195
+ }
196
+ /**
197
+ * Backfill embeddings for active graph nodes missing a vector, so recall can
198
+ * span the whole memory (not just newly-saved entries). Resumable (only
199
+ * fills gaps), batched (flush + yield every N), and bails fast if the
200
+ * endpoint is down (breaker trips → embed returns null). Fire-and-forget on
201
+ * init; also callable from maintenance.
202
+ */
203
+ async runEmbeddingBackfill(signal) {
204
+ if (!this.embeddingService)
205
+ return;
206
+ await this.ensureGraphReady();
207
+ const jobs = [];
208
+ if (this.graphGlobal && this.embeddingStoreGlobal)
209
+ jobs.push({ graph: this.graphGlobal, store: this.embeddingStoreGlobal, scope: 'global' });
210
+ if (this.graphProject && this.embeddingStoreProject)
211
+ jobs.push({ graph: this.graphProject, store: this.embeddingStoreProject, scope: 'project' });
212
+ for (const { graph, store, scope } of jobs) {
213
+ const nodes = graph.getActiveNodes();
214
+ const missing = nodes.filter(n => !store.has(n.id) && n.content?.trim());
215
+ if (missing.length === 0)
216
+ continue;
217
+ logger.info(`[embeddings] backfill ${scope}: ${missing.length}/${nodes.length} nodes need embedding`);
218
+ let done = 0, embedded = 0, sinceFlush = 0;
219
+ for (let i = 0; i < missing.length; i += EMBED_BACKFILL_CONCURRENCY) {
220
+ if (signal?.aborted) {
221
+ await store.flush();
222
+ return;
223
+ }
224
+ // Endpoint just failed → stop and resume next session rather than
225
+ // spinning through thousands of fast-fails.
226
+ if (this.embeddingService.tripped) {
227
+ logger.debug(`[embeddings] backfill ${scope}: endpoint unavailable, pausing after ${embedded}`);
228
+ break;
229
+ }
230
+ const batch = missing.slice(i, i + EMBED_BACKFILL_CONCURRENCY);
231
+ const vecs = await Promise.all(batch.map(n => this.embeddingService.embed(n.content)));
232
+ for (let j = 0; j < batch.length; j++) {
233
+ const vec = vecs[j];
234
+ if (vec) {
235
+ store.set(batch[j].id, vec);
236
+ embedded++;
237
+ }
238
+ }
239
+ done += batch.length;
240
+ sinceFlush += batch.length;
241
+ if (sinceFlush >= EMBED_BACKFILL_BATCH) {
242
+ sinceFlush = 0;
243
+ await store.flush();
244
+ await new Promise(r => setTimeout(r, 0)); // yield
245
+ logger.debug(`[embeddings] backfill ${scope}: ${done}/${missing.length}`);
246
+ }
247
+ }
248
+ await store.flush();
249
+ logger.info(`[embeddings] backfill ${scope} done: ${embedded} embedded`);
250
+ }
251
+ }
252
+ /** Run confidence decay + forgetting pass on both graphs. Called on session end. */
253
+ async runMaintenance() {
254
+ if (this.graphGlobal) {
255
+ this.graphGlobal.applyDecay();
256
+ this.graphGlobal.runForgettingPass();
257
+ await this.graphGlobal.save();
258
+ }
259
+ if (this.graphProject) {
260
+ this.graphProject.applyDecay();
261
+ this.graphProject.runForgettingPass();
262
+ await this.graphProject.save();
263
+ // Regenerate project brain after maintenance
264
+ if (this.projectDir && this.graphProject.nodeCount > 0) {
265
+ const procedures = this.proceduralProject?.getAllPatterns() ?? [];
266
+ this.projectBrainCache = synthesiseProjectBrain(this.graphProject, this.projectDir, procedures);
267
+ await saveProjectBrain(join(this.projectDir, 'memory'), this.projectBrainCache);
268
+ }
269
+ }
270
+ if (this.proceduralGlobal)
271
+ await this.proceduralGlobal.save();
272
+ if (this.proceduralProject)
273
+ await this.proceduralProject.save();
274
+ }
275
+ /** Save all graph state to disk (called at end of session). */
276
+ async saveGraphs() {
277
+ if (this.graphGlobal)
278
+ await this.graphGlobal.save();
279
+ if (this.graphProject)
280
+ await this.graphProject.save();
281
+ if (this.proceduralGlobal)
282
+ await this.proceduralGlobal.save();
283
+ if (this.proceduralProject)
284
+ await this.proceduralProject.save();
285
+ }
286
+ // ── Public API — Load ──────────────────────────────────────────────────────
287
+ /** Load global memory store, migrating from v1 if needed. */
288
+ async loadGlobalStore() {
289
+ if (this.globalStore)
290
+ return this.globalStore;
291
+ this.globalStore = await this.loadStore(this.globalDir, 'global');
292
+ this.rebuildIndex(this.globalStore, this.globalIndex);
293
+ return this.globalStore;
294
+ }
295
+ /** Load project memory store, migrating from v1 if needed. */
296
+ async loadProjectStore() {
297
+ if (!this.projectDir)
298
+ return null;
299
+ if (this.projectStore)
300
+ return this.projectStore;
301
+ this.projectStore = await this.loadStore(this.projectDir, 'project');
302
+ this.rebuildIndex(this.projectStore, this.projectIndex);
303
+ return this.projectStore;
304
+ }
305
+ /** Load both stores and format for system prompt injection. */
306
+ async loadAll(context, branch) {
307
+ const [globalStore, projectStore, episodic] = await Promise.all([
308
+ this.loadGlobalStore(),
309
+ this.loadProjectStore(),
310
+ context ? this.loadRelevantMemories(context) : Promise.resolve([]),
311
+ ]);
312
+ const sections = [];
313
+ // Filter to active (non-archived) entries, respecting branch scope
314
+ const globalEntries = this.filterActive(globalStore.entries, branch);
315
+ const projectEntries = projectStore ? this.filterActive(projectStore.entries, branch) : [];
316
+ if (globalEntries.length > 0) {
317
+ sections.push(`### Global Memory\n${this.formatEntriesForPrompt(globalEntries)}`);
318
+ }
319
+ if (projectEntries.length > 0) {
320
+ sections.push(`### Project Memory\n${this.formatEntriesForPrompt(projectEntries)}`);
321
+ }
322
+ if (episodic.length > 0) {
323
+ const items = episodic
324
+ .map((m) => `- **${m.key}** (${m.scope}, ${Math.round(m.similarity * 100)}% match): ${m.content}`)
325
+ .join('\n');
326
+ sections.push(`### Relevant Memories\n${items}`);
327
+ }
328
+ return sections.join('\n\n');
329
+ }
330
+ // ── Backwards compat — v1 string accessors ─────────────────────────────────
331
+ /** Load global memory as markdown string (v1 compat). */
332
+ async loadGlobalMemory() {
333
+ const store = await this.loadGlobalStore();
334
+ if (store.entries.length === 0)
335
+ return null;
336
+ return this.formatEntriesAsMarkdown(store.entries);
337
+ }
338
+ /** Load project memory as markdown string (v1 compat). */
339
+ async loadProjectMemory() {
340
+ const store = await this.loadProjectStore();
341
+ if (!store || store.entries.length === 0)
342
+ return null;
343
+ return this.formatEntriesAsMarkdown(store.entries);
344
+ }
345
+ /** Overwrite global memory with raw markdown (v1 compat — used by dashboard). */
346
+ async saveGlobalMemory(content) {
347
+ const store = await this.loadGlobalStore();
348
+ store.entries = this.markdownToEntries(content);
349
+ store.lastModified = new Date().toISOString();
350
+ this.globalStore = store;
351
+ this.rebuildIndex(store, this.globalIndex);
352
+ await this.persistStore(this.globalDir, store);
353
+ this.syncEntries('global', store.entries);
354
+ }
355
+ /** Overwrite project memory with raw markdown (v1 compat — used by dashboard). */
356
+ async saveProjectMemory(content) {
357
+ if (!this.projectDir)
358
+ throw new Error('No project root configured.');
359
+ await mkdir(this.projectDir, { recursive: true });
360
+ const store = await this.loadProjectStore() ?? createEmptyStore();
361
+ store.entries = this.markdownToEntries(content);
362
+ store.lastModified = new Date().toISOString();
363
+ this.projectStore = store;
364
+ this.rebuildIndex(store, this.projectIndex);
365
+ await this.persistStore(this.projectDir, store);
366
+ this.syncEntries('project', store.entries);
367
+ }
368
+ /** Append raw markdown entry (v1 compat). */
369
+ async appendGlobal(entry) {
370
+ await this.saveEntry({
371
+ scope: 'global',
372
+ content: entry.replace(/^####\s*\d{4}-\d{2}-\d{2}\n/, ''),
373
+ category: 'general',
374
+ });
375
+ }
376
+ /** Append raw markdown entry (v1 compat). */
377
+ async appendProject(entry) {
378
+ await this.saveEntry({
379
+ scope: 'project',
380
+ content: entry.replace(/^####\s*\d{4}-\d{2}-\d{2}\n/, ''),
381
+ category: 'general',
382
+ });
383
+ }
384
+ // ── Public API — v2 Structured Operations ──────────────────────────────────
385
+ /** Save a new memory entry with TF-IDF conflict detection. Returns the saved entry. */
386
+ async saveEntry(opts) {
387
+ // If saving to project scope but no project is open, fall back to global
388
+ // rather than silently losing the memory in a temporary in-memory store
389
+ const effectiveScope = (opts.scope === 'project' && !this.projectDir) ? 'global' : opts.scope;
390
+ const store = effectiveScope === 'global'
391
+ ? await this.loadGlobalStore()
392
+ : await this.loadProjectStore() ?? createEmptyStore();
393
+ if (effectiveScope === 'project' && this.projectDir) {
394
+ await mkdir(this.projectDir, { recursive: true });
395
+ }
396
+ const index = effectiveScope === 'global' ? this.globalIndex : this.projectIndex;
397
+ // Determine layer
398
+ const category = opts.category ?? 'general';
399
+ const layer = opts.layer ?? inferLayer(category, opts.scope);
400
+ // Conflict detection — project memories use stricter threshold to avoid over-merging
401
+ const conflict = this.findConflict(store, index, opts.content, opts.category, layer === 'project' ? 0.6 : undefined);
402
+ let entry;
403
+ if (conflict) {
404
+ // Update existing entry instead of duplicating
405
+ conflict.content = opts.content;
406
+ conflict.updatedAt = new Date().toISOString();
407
+ conflict.category = opts.category ?? conflict.category;
408
+ conflict.layer = layer;
409
+ if (opts.tags)
410
+ conflict.tags = opts.tags;
411
+ if (opts.branch !== undefined)
412
+ conflict.branch = opts.branch;
413
+ if (opts.directoryScope !== undefined)
414
+ conflict.directoryScope = opts.directoryScope;
415
+ // Unarchive if it was archived
416
+ conflict.archived = false;
417
+ conflict.archivedAt = null;
418
+ entry = conflict;
419
+ // Update index
420
+ index.addDocument(entry.id, entry.content);
421
+ }
422
+ else {
423
+ // Create new entry
424
+ entry = {
425
+ id: randomUUID(),
426
+ category,
427
+ layer,
428
+ content: opts.content,
429
+ createdAt: new Date().toISOString(),
430
+ updatedAt: new Date().toISOString(),
431
+ lastRecalledAt: null,
432
+ recallCount: 0,
433
+ sourceConversationId: opts.sourceConversationId,
434
+ tags: opts.tags,
435
+ archived: false,
436
+ branch: opts.branch ?? null,
437
+ directoryScope: opts.directoryScope ?? null,
438
+ };
439
+ store.entries.push(entry);
440
+ // Add to index
441
+ index.addDocument(entry.id, entry.content);
442
+ }
443
+ // Cap at 500 entries per scope — archive oldest non-archived entries
444
+ const MAX_ENTRIES = 500;
445
+ const active = store.entries.filter(e => !e.archived);
446
+ if (active.length > MAX_ENTRIES) {
447
+ const sorted = active.sort((a, b) => new Date(a.updatedAt).getTime() - new Date(b.updatedAt).getTime());
448
+ const toArchive = sorted.slice(0, active.length - MAX_ENTRIES);
449
+ for (const e of toArchive) {
450
+ e.archived = true;
451
+ }
452
+ }
453
+ store.lastModified = new Date().toISOString();
454
+ // Update cache and persist
455
+ if (effectiveScope === 'global') {
456
+ this.globalStore = store;
457
+ await this.persistStore(this.globalDir, store);
458
+ }
459
+ else {
460
+ this.projectStore = store;
461
+ if (this.projectDir)
462
+ await this.persistStore(this.projectDir, store);
463
+ }
464
+ this.syncEntries(effectiveScope, store.entries);
465
+ // ── v3 graph write ──────────────────────────────────────────────────
466
+ // The v2 store above is the legacy layer; getEntries() and the dashboard
467
+ // read from the GRAPH. Without this mirror, new memories saved here never
468
+ // appeared in the Memory panel ("nothing being logged"). Reinforces a
469
+ // near-duplicate node or adds a new one. Non-fatal on failure — the v2
470
+ // write already succeeded.
471
+ try {
472
+ await this.ensureGraphReady();
473
+ const graph = this.getGraph(effectiveScope);
474
+ if (graph) {
475
+ const node = graph.upsertNode({
476
+ content: entry.content,
477
+ category: entry.category,
478
+ scope: effectiveScope,
479
+ layer: entry.layer,
480
+ tags: entry.tags,
481
+ branch: entry.branch,
482
+ directoryScope: entry.directoryScope,
483
+ confidenceSource: 'explicit',
484
+ });
485
+ await graph.save();
486
+ logger.debug(`[memory] saved to ${effectiveScope} graph: "${entry.content.slice(0, 48)}"`);
487
+ // Semantic: embed the node's content in the background (never blocks
488
+ // the write). No-op if embeddings disabled / Ollama unreachable.
489
+ if (this.embeddingService) {
490
+ void this.embedNode(effectiveScope, node.id, node.content);
491
+ }
492
+ }
493
+ else {
494
+ logger.warn(`[memory] saveEntry: ${effectiveScope} graph unavailable — saved to v2 store only`);
495
+ }
496
+ }
497
+ catch (err) {
498
+ logger.warn(`[memory] saveEntry graph write failed: ${err instanceof Error ? err.message : String(err)}`);
499
+ }
500
+ // ── Dataset event ──────────────────────────────────────────────────
501
+ avaEvents.emit('memory_save', {
502
+ scope: effectiveScope,
503
+ layer,
504
+ category: entry.category,
505
+ source: opts.source ?? 'explicit',
506
+ // content_signature is the category — never the raw content.
507
+ content_signature: entry.category,
508
+ });
509
+ return entry;
510
+ }
511
+ /** Update an existing memory entry by ID. */
512
+ async updateEntry(scope, id, updates) {
513
+ const store = scope === 'global'
514
+ ? await this.loadGlobalStore()
515
+ : await this.loadProjectStore();
516
+ if (!store)
517
+ return null;
518
+ const entry = store.entries.find(e => e.id === id);
519
+ if (!entry)
520
+ return null;
521
+ if (updates.content !== undefined)
522
+ entry.content = updates.content;
523
+ if (updates.category !== undefined)
524
+ entry.category = updates.category;
525
+ if (updates.tags !== undefined)
526
+ entry.tags = updates.tags;
527
+ if (updates.branch !== undefined)
528
+ entry.branch = updates.branch;
529
+ if (updates.directoryScope !== undefined)
530
+ entry.directoryScope = updates.directoryScope;
531
+ entry.updatedAt = new Date().toISOString();
532
+ store.lastModified = new Date().toISOString();
533
+ // Update TF-IDF index if content changed
534
+ if (updates.content !== undefined) {
535
+ const index = scope === 'global' ? this.globalIndex : this.projectIndex;
536
+ index.addDocument(id, entry.content);
537
+ }
538
+ if (scope === 'global') {
539
+ this.globalStore = store;
540
+ await this.persistStore(this.globalDir, store);
541
+ }
542
+ else if (this.projectDir) {
543
+ this.projectStore = store;
544
+ await this.persistStore(this.projectDir, store);
545
+ }
546
+ this.syncEntries(scope, store.entries);
547
+ // ── Dataset event ──────────────────────────────────────────────────
548
+ // what_changed reports the first explicit change; covers the common
549
+ // case where a single field is updated. Multi-field updates fire one
550
+ // event with the highest-signal field reported.
551
+ const changedField = updates.content !== undefined ? 'content'
552
+ : updates.tags !== undefined ? 'tags'
553
+ : 'metadata';
554
+ avaEvents.emit('memory_update', {
555
+ scope,
556
+ what_changed: changedField,
557
+ reason: 'updateEntry',
558
+ });
559
+ return entry;
560
+ }
561
+ /** Delete a memory entry by ID. */
562
+ async deleteEntry(scope, id) {
563
+ const store = scope === 'global'
564
+ ? await this.loadGlobalStore()
565
+ : await this.loadProjectStore();
566
+ if (!store)
567
+ return false;
568
+ const idx = store.entries.findIndex(e => e.id === id);
569
+ if (idx === -1)
570
+ return false;
571
+ store.entries.splice(idx, 1);
572
+ store.lastModified = new Date().toISOString();
573
+ // Remove from TF-IDF index
574
+ const index = scope === 'global' ? this.globalIndex : this.projectIndex;
575
+ index.removeDocument(id);
576
+ if (scope === 'global') {
577
+ this.globalStore = store;
578
+ await this.persistStore(this.globalDir, store);
579
+ }
580
+ else if (this.projectDir) {
581
+ this.projectStore = store;
582
+ await this.persistStore(this.projectDir, store);
583
+ }
584
+ this.syncEntries(scope, store.entries);
585
+ return true;
586
+ }
587
+ /**
588
+ * Delete ALL entries from a scope. Permanent.
589
+ */
590
+ async clearAll(scope) {
591
+ const store = scope === 'global'
592
+ ? await this.loadGlobalStore()
593
+ : await this.loadProjectStore();
594
+ if (!store)
595
+ return;
596
+ store.entries = [];
597
+ store.lastModified = new Date().toISOString();
598
+ const index = scope === 'global' ? this.globalIndex : this.projectIndex;
599
+ index.clear();
600
+ if (scope === 'global') {
601
+ this.globalStore = store;
602
+ await this.persistStore(this.globalDir, store);
603
+ }
604
+ else if (this.projectDir) {
605
+ this.projectStore = store;
606
+ await this.persistStore(this.projectDir, store);
607
+ }
608
+ this.syncEntries(scope, []);
609
+ }
610
+ /**
611
+ * Delete ALL entries from ALL scopes — global + current project + all known projects.
612
+ * Reads the project registry to find every project memory file.
613
+ */
614
+ async clearEverything() {
615
+ // Disable sync to prevent re-upload of cached entries
616
+ this.sync = undefined;
617
+ this.localOnly = true;
618
+ // Reset in-memory caches
619
+ this.globalStore = null;
620
+ this.projectStore = null;
621
+ // Clear global
622
+ await this.clearAll('global');
623
+ // Clear current project
624
+ await this.clearAll('project');
625
+ // Clear all known projects from registry
626
+ try {
627
+ const registryPath = join(this.globalDir, PROJECTS_REGISTRY);
628
+ const data = await readFile(registryPath, 'utf-8');
629
+ const registry = JSON.parse(data);
630
+ for (const project of registry) {
631
+ try {
632
+ const projectMemoryPath = join(project.path, '.ava', MEMORY_FILENAME_V2);
633
+ const raw = await readFile(projectMemoryPath, 'utf-8');
634
+ const store = JSON.parse(raw);
635
+ store.entries = [];
636
+ store.lastModified = new Date().toISOString();
637
+ await this.writeSafe(projectMemoryPath, JSON.stringify(store, null, 2));
638
+ }
639
+ catch { /* project dir may not exist anymore */ }
640
+ }
641
+ }
642
+ catch { /* no registry or corrupt */ }
643
+ // Clear legacy memory.md
644
+ try {
645
+ const mdPath = join(this.globalDir, 'memory.md');
646
+ await this.writeSafe(mdPath, '');
647
+ }
648
+ catch { /* best effort */ }
649
+ }
650
+ /**
651
+ * Search memories with TF-IDF ranking + temporal relevance scoring.
652
+ * Falls back to substring for exact matches, then semantic via platform.
653
+ */
654
+ async recall(opts) {
655
+ const results = [];
656
+ const lowerQuery = opts.query.toLowerCase();
657
+ const limit = opts.limit ?? 10;
658
+ const includeArchived = opts.includeArchived ?? false;
659
+ const searchStore = (store, scope, index) => {
660
+ // Phase 1: Exact substring matches (highest priority)
661
+ const substringMatches = new Set();
662
+ for (const entry of store.entries) {
663
+ if (!includeArchived && entry.archived)
664
+ continue;
665
+ if (opts.category && entry.category !== opts.category)
666
+ continue;
667
+ if (opts.branch && entry.branch && entry.branch !== opts.branch)
668
+ continue;
669
+ if (entry.content.toLowerCase().includes(lowerQuery) ||
670
+ entry.tags?.some(t => t.toLowerCase().includes(lowerQuery))) {
671
+ const relevance = this.computeRelevance(1.0, entry);
672
+ results.push({ entry, scope, relevance, matchType: 'substring' });
673
+ substringMatches.add(entry.id);
674
+ // Update recall stats
675
+ entry.lastRecalledAt = new Date().toISOString();
676
+ entry.recallCount++;
677
+ }
678
+ }
679
+ // Phase 2: TF-IDF search for semantic-ish matches
680
+ const tfidfResults = index.search(opts.query, limit * 2);
681
+ for (const { id, score } of tfidfResults) {
682
+ if (substringMatches.has(id))
683
+ continue; // already found via substring
684
+ if (score < RECALL_TFIDF_THRESHOLD)
685
+ continue;
686
+ const entry = store.entries.find(e => e.id === id);
687
+ if (!entry)
688
+ continue;
689
+ if (!includeArchived && entry.archived)
690
+ continue;
691
+ if (opts.category && entry.category !== opts.category)
692
+ continue;
693
+ if (opts.branch && entry.branch && entry.branch !== opts.branch)
694
+ continue;
695
+ const relevance = this.computeRelevance(score, entry);
696
+ results.push({ entry, scope, relevance, matchType: 'tfidf' });
697
+ // Update recall stats
698
+ entry.lastRecalledAt = new Date().toISOString();
699
+ entry.recallCount++;
700
+ }
701
+ };
702
+ if (opts.scope !== 'project') {
703
+ const globalStore = await this.loadGlobalStore();
704
+ searchStore(globalStore, 'global', this.globalIndex);
705
+ }
706
+ if (opts.scope === 'all_projects') {
707
+ // Search every known project (including current)
708
+ const projects = await this.loadProjectRegistry();
709
+ for (const proj of projects) {
710
+ const projAvaDir = join(proj.path, '.ava');
711
+ // Skip the current project — it's searched via 'project' scope below
712
+ if (this.projectDir && projAvaDir === this.projectDir)
713
+ continue;
714
+ // Only search projects that still exist on disk
715
+ if (!existsSync(join(projAvaDir, MEMORY_FILENAME_V2)))
716
+ continue;
717
+ try {
718
+ const storeData = await readFile(join(projAvaDir, MEMORY_FILENAME_V2), 'utf-8');
719
+ const store = JSON.parse(storeData);
720
+ const tempIndex = new TfIdfIndex();
721
+ this.rebuildIndex(store, tempIndex);
722
+ searchStore(store, `project:${proj.name}`, tempIndex);
723
+ }
724
+ catch {
725
+ // Skip unreadable project stores
726
+ }
727
+ }
728
+ }
729
+ if (opts.scope !== 'global') {
730
+ const projectStore = await this.loadProjectStore();
731
+ if (projectStore)
732
+ searchStore(projectStore, 'project', this.projectIndex);
733
+ }
734
+ // Sort by composite relevance score
735
+ results.sort((a, b) => b.relevance - a.relevance);
736
+ // ── Local semantic phase (graph-wide, optional) ────────────────────────
737
+ // Embed the query and cosine against the graph's stored vectors. Unlike the
738
+ // keyword phases above (which see only the ≤500 v2 store), this spans the
739
+ // FULL graph — surfacing memories that are semantically related but share
740
+ // no keywords. Additive + graceful: no embeddings / endpoint down → skipped
741
+ // entirely, leaving the keyword results exactly as they are today.
742
+ if (this.embeddingService) {
743
+ const qVec = await this.embeddingService.embed(opts.query);
744
+ if (qVec) {
745
+ await this.ensureGraphReady();
746
+ const seen = new Set(results.map(r => r.entry.id));
747
+ const addSemantic = (graph, store, scope) => {
748
+ if (!graph || !store)
749
+ return;
750
+ const hits = [];
751
+ for (const node of graph.getActiveNodes()) {
752
+ if (seen.has(node.id))
753
+ continue;
754
+ if (opts.category && node.category !== opts.category)
755
+ continue;
756
+ if (opts.branch && node.branch && node.branch !== opts.branch)
757
+ continue;
758
+ const vec = store.get(node.id);
759
+ if (!vec)
760
+ continue;
761
+ const sim = cosineDense(qVec, vec);
762
+ if (sim >= SEMANTIC_RECALL_THRESHOLD)
763
+ hits.push({ node, sim });
764
+ }
765
+ hits.sort((a, b) => b.sim - a.sim);
766
+ for (const { node, sim } of hits.slice(0, limit)) {
767
+ seen.add(node.id);
768
+ results.push({ entry: node, scope, relevance: this.computeRelevance(sim, node), matchType: 'semantic' });
769
+ }
770
+ };
771
+ if (opts.scope !== 'project')
772
+ addSemantic(this.graphGlobal, this.embeddingStoreGlobal, 'global');
773
+ if (opts.scope !== 'global')
774
+ addSemantic(this.graphProject, this.embeddingStoreProject, 'project');
775
+ results.sort((a, b) => b.relevance - a.relevance);
776
+ }
777
+ }
778
+ // If no local matches, try semantic search via platform
779
+ if (results.length === 0 && this.sync) {
780
+ const semantic = opts.scope === 'all_projects'
781
+ ? await this.sync.semanticSearch(opts.query, { allProjects: true, threshold: 0.65, limit }).catch(() => [])
782
+ : await this.loadRelevantMemories(opts.query, limit);
783
+ for (const m of semantic) {
784
+ results.push({
785
+ entry: {
786
+ id: m.id,
787
+ category: 'general',
788
+ content: m.content,
789
+ createdAt: '',
790
+ updatedAt: '',
791
+ lastRecalledAt: new Date().toISOString(),
792
+ recallCount: 0,
793
+ },
794
+ scope: m.scope,
795
+ relevance: m.similarity,
796
+ matchType: 'semantic',
797
+ });
798
+ }
799
+ }
800
+ // Persist updated recall stats and sync
801
+ if (results.some(r => r.matchType === 'substring' || r.matchType === 'tfidf')) {
802
+ await Promise.all([
803
+ this.globalStore ? this.persistStore(this.globalDir, this.globalStore) : Promise.resolve(),
804
+ this.projectStore && this.projectDir ? this.persistStore(this.projectDir, this.projectStore) : Promise.resolve(),
805
+ ]);
806
+ // Don't sync on recall — only sync when explicitly saving/updating
807
+ // Recall just updates lastRecalledAt counters, not content
808
+ }
809
+ const final = results.slice(0, limit);
810
+ // ── Dataset event ──────────────────────────────────────────────────
811
+ // query_signature is a coarse length category (single-word /
812
+ // short-phrase / long-query). Never the raw query. results_used_count
813
+ // is set to 0 here because we don't know at recall time which entries
814
+ // will end up in the response — the join happens at training time
815
+ // via trajectory_id correlation with subsequent assistant turns.
816
+ const wordCount = opts.query.trim().split(/\s+/).filter(Boolean).length;
817
+ const querySignature = wordCount <= 1 ? 'single-word'
818
+ : wordCount <= 5 ? 'short-phrase'
819
+ : 'long-query';
820
+ avaEvents.emit('memory_recall', {
821
+ query_signature: querySignature,
822
+ results_count: final.length,
823
+ results_used_count: 0,
824
+ });
825
+ return final;
826
+ }
827
+ // ── Public API — Phase 3: Temporal & Scope ──────────────────────────────────
828
+ /**
829
+ * Archive stale entries (not recalled in 90+ days).
830
+ * Returns the number of entries archived.
831
+ */
832
+ async archiveStaleEntries(scope) {
833
+ const store = scope === 'global'
834
+ ? await this.loadGlobalStore()
835
+ : await this.loadProjectStore();
836
+ if (!store)
837
+ return 0;
838
+ let count = 0;
839
+ const now = new Date().toISOString();
840
+ for (const entry of store.entries) {
841
+ if (entry.archived)
842
+ continue;
843
+ if (this.isStale(entry)) {
844
+ entry.archived = true;
845
+ entry.archivedAt = now;
846
+ count++;
847
+ }
848
+ }
849
+ if (count > 0) {
850
+ store.lastModified = now;
851
+ if (scope === 'global') {
852
+ await this.persistStore(this.globalDir, store);
853
+ }
854
+ else if (this.projectDir) {
855
+ await this.persistStore(this.projectDir, store);
856
+ }
857
+ this.syncEntries(scope, store.entries);
858
+ }
859
+ return count;
860
+ }
861
+ /**
862
+ * Restore an archived entry back to active status.
863
+ */
864
+ async restoreEntry(scope, id) {
865
+ const store = scope === 'global'
866
+ ? await this.loadGlobalStore()
867
+ : await this.loadProjectStore();
868
+ if (!store)
869
+ return false;
870
+ const entry = store.entries.find(e => e.id === id);
871
+ if (!entry || !entry.archived)
872
+ return false;
873
+ entry.archived = false;
874
+ entry.archivedAt = null;
875
+ entry.updatedAt = new Date().toISOString();
876
+ store.lastModified = new Date().toISOString();
877
+ if (scope === 'global') {
878
+ await this.persistStore(this.globalDir, store);
879
+ }
880
+ else if (this.projectDir) {
881
+ await this.persistStore(this.projectDir, store);
882
+ }
883
+ this.syncEntries(scope, store.entries);
884
+ return true;
885
+ }
886
+ /**
887
+ * Archive a single entry by ID.
888
+ */
889
+ async archiveEntry(scope, id) {
890
+ const store = scope === 'global'
891
+ ? await this.loadGlobalStore()
892
+ : await this.loadProjectStore();
893
+ if (!store)
894
+ return false;
895
+ const entry = store.entries.find(e => e.id === id);
896
+ if (!entry || entry.archived)
897
+ return false;
898
+ entry.archived = true;
899
+ entry.archivedAt = new Date().toISOString();
900
+ entry.updatedAt = new Date().toISOString();
901
+ store.lastModified = new Date().toISOString();
902
+ if (scope === 'global') {
903
+ await this.persistStore(this.globalDir, store);
904
+ }
905
+ else if (this.projectDir) {
906
+ await this.persistStore(this.projectDir, store);
907
+ }
908
+ this.syncEntries(scope, store.entries);
909
+ return true;
910
+ }
911
+ /**
912
+ * Find groups of related entries that could be consolidated.
913
+ * Uses TF-IDF similarity to cluster entries within the same category.
914
+ * Returns groups sorted by number of related entries (largest first).
915
+ */
916
+ findConsolidationGroups(scope) {
917
+ const store = scope === 'global' ? this.globalStore : this.projectStore;
918
+ if (!store || store.entries.length < 2)
919
+ return [];
920
+ const index = scope === 'global' ? this.globalIndex : this.projectIndex;
921
+ const activeEntries = store.entries.filter(e => !e.archived);
922
+ // Group by category first — only consolidate within same category
923
+ const byCategory = new Map();
924
+ for (const entry of activeEntries) {
925
+ const list = byCategory.get(entry.category) ?? [];
926
+ list.push(entry);
927
+ byCategory.set(entry.category, list);
928
+ }
929
+ const groups = [];
930
+ const claimed = new Set(); // entries already in a group
931
+ for (const [, categoryEntries] of byCategory) {
932
+ if (categoryEntries.length < 2)
933
+ continue;
934
+ for (const entry of categoryEntries) {
935
+ if (claimed.has(entry.id))
936
+ continue;
937
+ // Find similar entries using TF-IDF
938
+ const similar = index.findSimilar(entry.id, CONSOLIDATION_THRESHOLD)
939
+ .filter(s => {
940
+ if (claimed.has(s.id))
941
+ return false;
942
+ const other = categoryEntries.find(e => e.id === s.id);
943
+ return other && !other.archived;
944
+ });
945
+ if (similar.length === 0)
946
+ continue;
947
+ const related = similar.map(s => categoryEntries.find(e => e.id === s.id));
948
+ const avgSimilarity = similar.reduce((sum, s) => sum + s.score, 0) / similar.length;
949
+ // Primary = entry with highest recall count
950
+ const allInGroup = [entry, ...related];
951
+ allInGroup.sort((a, b) => b.recallCount - a.recallCount);
952
+ groups.push({
953
+ primary: allInGroup[0],
954
+ related: allInGroup.slice(1),
955
+ avgSimilarity,
956
+ });
957
+ for (const e of allInGroup)
958
+ claimed.add(e.id);
959
+ }
960
+ }
961
+ // Sort by group size (most consolidation potential first)
962
+ groups.sort((a, b) => b.related.length - a.related.length);
963
+ return groups;
964
+ }
965
+ /**
966
+ * Get stale entries for a scope (for dashboard review).
967
+ */
968
+ async getStaleEntries(scope) {
969
+ const store = scope === 'global'
970
+ ? await this.loadGlobalStore()
971
+ : await this.loadProjectStore();
972
+ if (!store)
973
+ return [];
974
+ return store.entries.filter(e => !e.archived && this.isStale(e));
975
+ }
976
+ /**
977
+ * Get archived entries for a scope.
978
+ */
979
+ async getArchivedEntries(scope) {
980
+ const store = scope === 'global'
981
+ ? await this.loadGlobalStore()
982
+ : await this.loadProjectStore();
983
+ if (!store)
984
+ return [];
985
+ return store.entries.filter(e => e.archived);
986
+ }
987
+ /** Get summary statistics for a store. */
988
+ async getSummary(scope) {
989
+ const store = scope === 'global'
990
+ ? await this.loadGlobalStore()
991
+ : await this.loadProjectStore() ?? createEmptyStore();
992
+ const byCategory = {};
993
+ for (const cat of MEMORY_CATEGORIES)
994
+ byCategory[cat] = 0;
995
+ const byLayer = { person: 0, workflow: 0, project: 0 };
996
+ const now = Date.now();
997
+ let staleCount = 0;
998
+ let archivedCount = 0;
999
+ let branchScoped = 0;
1000
+ let oldest = null;
1001
+ let newest = null;
1002
+ for (const entry of store.entries) {
1003
+ if (entry.archived) {
1004
+ archivedCount++;
1005
+ continue; // don't count archived in category/stale stats
1006
+ }
1007
+ byCategory[entry.category] = (byCategory[entry.category] ?? 0) + 1;
1008
+ const layer = entry.layer ?? inferLayer(entry.category, scope);
1009
+ byLayer[layer] = (byLayer[layer] ?? 0) + 1;
1010
+ if (!oldest || entry.createdAt < oldest)
1011
+ oldest = entry.createdAt;
1012
+ if (!newest || entry.createdAt > newest)
1013
+ newest = entry.createdAt;
1014
+ if (entry.branch)
1015
+ branchScoped++;
1016
+ const lastActivity = entry.lastRecalledAt ?? entry.updatedAt ?? entry.createdAt;
1017
+ const daysSince = (now - new Date(lastActivity).getTime()) / (1000 * 60 * 60 * 24);
1018
+ if (daysSince > STALE_THRESHOLD_DAYS)
1019
+ staleCount++;
1020
+ }
1021
+ return {
1022
+ totalEntries: store.entries.filter(e => !e.archived).length,
1023
+ byCategory,
1024
+ byLayer,
1025
+ oldestEntry: oldest,
1026
+ newestEntry: newest,
1027
+ staleCount,
1028
+ archivedCount,
1029
+ branchScoped,
1030
+ };
1031
+ }
1032
+ /** Get all entries for a scope (for dashboard display). */
1033
+ async getEntries(scope) {
1034
+ // Wait for the v3 graph to finish its async init before reading — otherwise
1035
+ // a caller right after construction (e.g. the dashboard's get_memories) hits
1036
+ // a null graph and silently falls back to the stale v2 store / empty list.
1037
+ // recall() already guards this way; getEntries must too so the dashboard
1038
+ // always sees the authoritative graph.
1039
+ await this.ensureGraphReady();
1040
+ // v3: prefer graph nodes when available (MemoryNode extends MemoryEntry
1041
+ // so the return type is compatible). Falls back to v2 store if graph
1042
+ // isn't initialized yet.
1043
+ const graph = scope === 'global' ? this.graphGlobal : this.graphProject;
1044
+ if (graph) {
1045
+ return graph.getAllNodes();
1046
+ }
1047
+ const store = scope === 'global'
1048
+ ? await this.loadGlobalStore()
1049
+ : await this.loadProjectStore();
1050
+ return store?.entries ?? [];
1051
+ }
1052
+ /** Get graph stats for the dashboard (v3). */
1053
+ getGraphStats(scope) {
1054
+ const graph = scope === 'global' ? this.graphGlobal : this.graphProject;
1055
+ if (!graph)
1056
+ return null;
1057
+ const stats = graph.getStats();
1058
+ const contradictions = graph.getAllEdges().filter(e => e.type === 'contradicts').length;
1059
+ const observer = scope === 'global' ? this.proceduralGlobal : this.proceduralProject;
1060
+ const allPatterns = observer?.getAllPatterns() ?? [];
1061
+ return {
1062
+ ...stats,
1063
+ contradictions,
1064
+ proceduralPatterns: allPatterns.length,
1065
+ crystallisedPatterns: allPatterns.filter(p => p.crystallised).length,
1066
+ };
1067
+ }
1068
+ /** Get contradictions for the dashboard resolution UI (v3). */
1069
+ getContradictions(scope) {
1070
+ const graph = scope === 'global' ? this.graphGlobal : this.graphProject;
1071
+ if (!graph)
1072
+ return [];
1073
+ const contradictEdges = graph.getAllEdges().filter(e => e.type === 'contradicts');
1074
+ const results = [];
1075
+ for (const edge of contradictEdges) {
1076
+ const nodeA = graph.getNode(edge.fromNodeId);
1077
+ const nodeB = graph.getNode(edge.toNodeId);
1078
+ if (nodeA && nodeB && !nodeA.archived && !nodeB.archived) {
1079
+ results.push({ nodeA, nodeB, similarity: edge.weight, edgeId: edge.id });
1080
+ }
1081
+ }
1082
+ return results;
1083
+ }
1084
+ /** Get procedural patterns for the dashboard (v3). */
1085
+ getProceduralPatterns(scope) {
1086
+ const observer = scope === 'global' ? this.proceduralGlobal : this.proceduralProject;
1087
+ return observer?.getAllPatterns() ?? [];
1088
+ }
1089
+ /** Get file path for a scope (for display). */
1090
+ getPath(scope) {
1091
+ if (scope === 'global')
1092
+ return join(this.globalDir, MEMORY_FILENAME_V2);
1093
+ return this.projectDir ? join(this.projectDir, MEMORY_FILENAME_V2) : null;
1094
+ }
1095
+ /**
1096
+ * Pull latest memories from the platform and merge into local store.
1097
+ * Remote entries win conflicts (by updatedAt). Returns count of new/updated entries.
1098
+ */
1099
+ async pullLatest(scope) {
1100
+ if (!this.sync || this.localOnly)
1101
+ return 0;
1102
+ try {
1103
+ const remote = await this.sync.pull(scope);
1104
+ if (remote.length === 0)
1105
+ return 0;
1106
+ const store = scope === 'global'
1107
+ ? await this.loadGlobalStore()
1108
+ : await this.loadProjectStore() ?? { version: 2, lastModified: new Date().toISOString(), entries: [] };
1109
+ let updated = 0;
1110
+ for (const r of remote) {
1111
+ if (r.key === 'memory.json')
1112
+ continue; // Skip legacy blob records
1113
+ const existing = store.entries.find(e => e.id === r.key);
1114
+ if (existing) {
1115
+ // Remote wins if newer
1116
+ if (r.updated_at > existing.updatedAt) {
1117
+ existing.content = r.content;
1118
+ existing.updatedAt = r.updated_at;
1119
+ existing.category = this.inferCategory(r.content);
1120
+ updated++;
1121
+ }
1122
+ }
1123
+ else {
1124
+ // New entry from remote
1125
+ store.entries.push({
1126
+ id: r.key,
1127
+ category: this.inferCategory(r.content),
1128
+ content: r.content,
1129
+ createdAt: r.updated_at,
1130
+ updatedAt: r.updated_at,
1131
+ lastRecalledAt: null,
1132
+ recallCount: 0,
1133
+ archived: false,
1134
+ });
1135
+ updated++;
1136
+ }
1137
+ }
1138
+ if (updated > 0) {
1139
+ store.lastModified = new Date().toISOString();
1140
+ const dir = scope === 'global' ? this.globalDir : this.projectDir;
1141
+ if (dir) {
1142
+ await this.persistStore(dir, store);
1143
+ this.clearCache();
1144
+ }
1145
+ }
1146
+ return updated;
1147
+ }
1148
+ catch {
1149
+ return 0;
1150
+ }
1151
+ }
1152
+ /** Invalidate cached stores and TF-IDF indexes. */
1153
+ clearCache() {
1154
+ this.globalStore = null;
1155
+ this.projectStore = null;
1156
+ this.globalIndex.clear();
1157
+ this.projectIndex.clear();
1158
+ }
1159
+ // ── Semantic search (platform) ─────────────────────────────────────────────
1160
+ async loadRelevantMemories(context, limit = 5) {
1161
+ if (!this.sync)
1162
+ return [];
1163
+ try {
1164
+ return await this.sync.semanticSearch(context, { threshold: 0.65, limit });
1165
+ }
1166
+ catch {
1167
+ return [];
1168
+ }
1169
+ }
1170
+ // ── Private — Storage ──────────────────────────────────────────────────────
1171
+ async loadStore(dir, scope) {
1172
+ // Clean up orphaned .tmp files from interrupted writes
1173
+ try {
1174
+ const { readdir, unlink: unlinkFile } = await import('node:fs/promises');
1175
+ const files = await readdir(dir).catch(() => []);
1176
+ for (const file of files) {
1177
+ if (file.endsWith('.tmp')) {
1178
+ await unlinkFile(join(dir, file)).catch(() => { });
1179
+ }
1180
+ }
1181
+ }
1182
+ catch { /* non-critical cleanup */ }
1183
+ const v2Path = join(dir, MEMORY_FILENAME_V2);
1184
+ const v1Path = join(dir, MEMORY_FILENAME_V1);
1185
+ // Try v2 first
1186
+ try {
1187
+ const raw = await readFile(v2Path, 'utf-8');
1188
+ const parsed = JSON.parse(raw);
1189
+ if ((parsed.version === 2 || parsed.version === 3) && Array.isArray(parsed.entries)) {
1190
+ // Fix corrupt entries whose content is a JSON store blob
1191
+ const cleaned = this.cleanBlobEntries(parsed);
1192
+ if (cleaned) {
1193
+ await this.persistStore(dir, parsed);
1194
+ }
1195
+ // Auto-migrate v2 → v3: assign layer to entries that don't have one
1196
+ if (parsed.version === 2 || parsed.entries.some(e => !e.layer)) {
1197
+ for (const entry of parsed.entries) {
1198
+ if (!entry.layer) {
1199
+ entry.layer = inferLayer(entry.category, scope);
1200
+ }
1201
+ }
1202
+ parsed.version = 3;
1203
+ await this.persistStore(dir, parsed);
1204
+ }
1205
+ return parsed;
1206
+ }
1207
+ }
1208
+ catch { /* v2 doesn't exist or is corrupt */ }
1209
+ // Try migrating from v1
1210
+ try {
1211
+ const v1Content = await readFile(v1Path, 'utf-8');
1212
+ if (v1Content?.trim()) {
1213
+ const store = this.migrateFromV1(v1Content);
1214
+ await mkdir(dir, { recursive: true });
1215
+ await this.persistStore(dir, store);
1216
+ return store;
1217
+ }
1218
+ }
1219
+ catch { /* v1 doesn't exist either */ }
1220
+ // Try bootstrapping from platform
1221
+ if (this.sync) {
1222
+ try {
1223
+ const remote = await this.sync.pull(scope);
1224
+ if (remote.length > 0) {
1225
+ // Build store from individual remote entries
1226
+ const entries = remote
1227
+ .filter((m) => m.key !== 'memory.json') // Skip legacy blob records
1228
+ .map((m) => ({
1229
+ id: m.key, // Local entry ID was used as the key
1230
+ category: this.inferCategory(m.content),
1231
+ content: m.content,
1232
+ createdAt: m.updated_at,
1233
+ updatedAt: m.updated_at,
1234
+ lastRecalledAt: null,
1235
+ recallCount: 0,
1236
+ archived: false,
1237
+ }));
1238
+ if (entries.length > 0) {
1239
+ const store = {
1240
+ version: 2,
1241
+ lastModified: new Date().toISOString(),
1242
+ entries,
1243
+ };
1244
+ await mkdir(dir, { recursive: true });
1245
+ await this.persistStore(dir, store);
1246
+ return store;
1247
+ }
1248
+ // Fallback: if only legacy blob records exist, migrate them
1249
+ const legacyContent = remote.map((m) => m.content).join('\n\n');
1250
+ if (legacyContent.trim()) {
1251
+ const store = this.migrateFromV1(legacyContent);
1252
+ await mkdir(dir, { recursive: true });
1253
+ await this.persistStore(dir, store);
1254
+ return store;
1255
+ }
1256
+ }
1257
+ }
1258
+ catch { /* platform unavailable */ }
1259
+ }
1260
+ return createEmptyStore();
1261
+ }
1262
+ async persistStore(dir, store) {
1263
+ await mkdir(dir, { recursive: true });
1264
+ const path = join(dir, MEMORY_FILENAME_V2);
1265
+ const content = JSON.stringify(store, null, 2);
1266
+ await this.writeSafe(path, content);
1267
+ // Also write a human-readable markdown mirror (active entries only)
1268
+ const mdPath = join(dir, MEMORY_FILENAME_V1);
1269
+ const activeEntries = store.entries.filter(e => !e.archived);
1270
+ const markdown = this.formatEntriesAsMarkdown(activeEntries);
1271
+ await this.writeSafe(mdPath, markdown);
1272
+ }
1273
+ // ── Private — TF-IDF Index ─────────────────────────────────────────────────
1274
+ /** Rebuild TF-IDF index from a store's entries. */
1275
+ rebuildIndex(store, index) {
1276
+ index.clear();
1277
+ for (const entry of store.entries) {
1278
+ if (!entry.archived) {
1279
+ index.addDocument(entry.id, entry.content);
1280
+ }
1281
+ }
1282
+ }
1283
+ // ── Private — Relevance Scoring ────────────────────────────────────────────
1284
+ /**
1285
+ * Compute composite relevance score combining TF-IDF match quality,
1286
+ * recency, and recall frequency. Returns 0–1.
1287
+ */
1288
+ computeRelevance(tfidfScore, entry) {
1289
+ // Recency score: exponential decay, half-life of 30 days
1290
+ const lastActivity = entry.lastRecalledAt ?? entry.updatedAt ?? entry.createdAt;
1291
+ const daysSince = (Date.now() - new Date(lastActivity).getTime()) / (1000 * 60 * 60 * 24);
1292
+ const recencyScore = Math.exp(-daysSince / 30);
1293
+ // Frequency score: logarithmic — diminishing returns after many recalls
1294
+ const frequencyScore = entry.recallCount > 0
1295
+ ? Math.min(1, Math.log(1 + entry.recallCount) / Math.log(20))
1296
+ : 0;
1297
+ return (tfidfScore * W_TFIDF) + (recencyScore * W_RECENCY) + (frequencyScore * W_FREQUENCY);
1298
+ }
1299
+ // ── Private — Migration ────────────────────────────────────────────────────
1300
+ /** Convert v1 markdown to v2 structured store. */
1301
+ migrateFromV1(markdown) {
1302
+ const entries = this.markdownToEntries(markdown);
1303
+ return {
1304
+ version: 2,
1305
+ lastModified: new Date().toISOString(),
1306
+ entries,
1307
+ };
1308
+ }
1309
+ /** Parse markdown content into structured entries. */
1310
+ markdownToEntries(markdown) {
1311
+ const trimmedInput = markdown.trim();
1312
+ if (!trimmedInput)
1313
+ return [];
1314
+ // Detect JSON input — if it's a v2 store blob, extract entries directly
1315
+ if (trimmedInput.startsWith('{')) {
1316
+ try {
1317
+ const parsed = JSON.parse(trimmedInput);
1318
+ if ((parsed.version === 2 || parsed.version === 3) && Array.isArray(parsed.entries)) {
1319
+ // It's a full MemoryStore — return the entries as-is
1320
+ return parsed.entries;
1321
+ }
1322
+ }
1323
+ catch { /* not valid JSON — fall through to markdown parsing */ }
1324
+ }
1325
+ const sections = trimmedInput.split(/(?=^####\s)/m);
1326
+ const entries = [];
1327
+ for (const section of sections) {
1328
+ const trimmed = section.trim();
1329
+ if (!trimmed)
1330
+ continue;
1331
+ const dateMatch = trimmed.match(/^####\s*(\d{4}-\d{2}-\d{2})\s*\n([\s\S]*)$/);
1332
+ const createdAt = dateMatch ? new Date(dateMatch[1]).toISOString() : new Date().toISOString();
1333
+ const content = dateMatch ? dateMatch[2].trim() : trimmed;
1334
+ if (!content)
1335
+ continue;
1336
+ entries.push({
1337
+ id: randomUUID(),
1338
+ category: this.inferCategory(content),
1339
+ content,
1340
+ createdAt,
1341
+ updatedAt: createdAt,
1342
+ lastRecalledAt: null,
1343
+ recallCount: 0,
1344
+ archived: false,
1345
+ });
1346
+ }
1347
+ // If no #### sections found, treat the whole thing as one entry
1348
+ if (entries.length === 0 && trimmedInput) {
1349
+ entries.push({
1350
+ id: randomUUID(),
1351
+ category: this.inferCategory(trimmedInput),
1352
+ content: trimmedInput,
1353
+ createdAt: new Date().toISOString(),
1354
+ updatedAt: new Date().toISOString(),
1355
+ lastRecalledAt: null,
1356
+ recallCount: 0,
1357
+ archived: false,
1358
+ });
1359
+ }
1360
+ return entries;
1361
+ }
1362
+ /**
1363
+ * Fix corrupt entries where content is a JSON store blob.
1364
+ * Replaces them with the actual entries from inside the blob.
1365
+ * Returns true if any entries were fixed.
1366
+ */
1367
+ cleanBlobEntries(store) {
1368
+ let changed = false;
1369
+ const toRemove = [];
1370
+ const toAdd = [];
1371
+ for (let i = 0; i < store.entries.length; i++) {
1372
+ const entry = store.entries[i];
1373
+ if (entry.content.startsWith('{"version":')) {
1374
+ try {
1375
+ const blob = JSON.parse(entry.content);
1376
+ if ((blob.version === 2 || blob.version === 3) && Array.isArray(blob.entries)) {
1377
+ toRemove.push(i);
1378
+ // Extract real entries, skip duplicates already in store
1379
+ const existingIds = new Set(store.entries.map(e => e.id));
1380
+ for (const blobEntry of blob.entries) {
1381
+ if (!existingIds.has(blobEntry.id)) {
1382
+ toAdd.push(blobEntry);
1383
+ existingIds.add(blobEntry.id);
1384
+ }
1385
+ }
1386
+ changed = true;
1387
+ }
1388
+ }
1389
+ catch { /* not JSON — leave it */ }
1390
+ }
1391
+ }
1392
+ // Remove corrupt entries (reverse order to preserve indices)
1393
+ for (const idx of toRemove.reverse()) {
1394
+ store.entries.splice(idx, 1);
1395
+ }
1396
+ // Add extracted entries
1397
+ store.entries.push(...toAdd);
1398
+ if (changed) {
1399
+ store.lastModified = new Date().toISOString();
1400
+ }
1401
+ return changed;
1402
+ }
1403
+ /** Infer a category from content using keyword heuristics. */
1404
+ inferCategory(content) {
1405
+ const lower = content.toLowerCase();
1406
+ if (/\b(bug|fix|error|crash|issue|broken|regression)\b/.test(lower))
1407
+ return 'bug-fix';
1408
+ if (/\b(prefer|always use|never use|style|workflow)\b/.test(lower))
1409
+ return 'preference';
1410
+ if (/\b(architecture|structure|design|pattern|layout|monorepo)\b/.test(lower))
1411
+ return 'architecture';
1412
+ if (/\b(convention|naming|format|lint|rule)\b/.test(lower))
1413
+ return 'convention';
1414
+ if (/\b(config|setup|install|environment|tool|setting)\b/.test(lower))
1415
+ return 'tool-config';
1416
+ if (/\b(decided|decision|chose|agreed|went with)\b/.test(lower))
1417
+ return 'decision';
1418
+ if (/\b(pattern|approach|technique|method|strategy)\b/.test(lower))
1419
+ return 'pattern';
1420
+ return 'general';
1421
+ }
1422
+ // ── Private — Conflict Detection (TF-IDF enhanced) ─────────────────────────
1423
+ /** Find an existing entry that conflicts with new content using TF-IDF similarity. */
1424
+ findConflict(store, index, newContent, category, customThreshold) {
1425
+ const threshold = customThreshold ?? CONFLICT_TFIDF_THRESHOLD;
1426
+ // Only check active entries in the same category
1427
+ for (const entry of store.entries) {
1428
+ if (entry.archived)
1429
+ continue;
1430
+ if (category && entry.category !== category)
1431
+ continue;
1432
+ // TF-IDF similarity check
1433
+ const similarity = index.similarityToText(entry.id, newContent);
1434
+ if (similarity > threshold)
1435
+ return entry;
1436
+ // First-line exact match fallback (catches renamed/reformatted entries)
1437
+ const newFirstLine = newContent.toLowerCase().split('\n')[0].trim();
1438
+ const existingFirstLine = entry.content.toLowerCase().split('\n')[0].trim();
1439
+ if (newFirstLine.length > 10 && newFirstLine === existingFirstLine)
1440
+ return entry;
1441
+ }
1442
+ return null;
1443
+ }
1444
+ // ── Private — Filtering ────────────────────────────────────────────────────
1445
+ /** Filter entries to active (non-archived), optionally respecting branch scope. */
1446
+ filterActive(entries, branch) {
1447
+ return entries.filter(e => {
1448
+ if (e.archived)
1449
+ return false;
1450
+ // If entry is branch-scoped, only include if branch matches
1451
+ if (e.branch && branch && e.branch !== branch)
1452
+ return false;
1453
+ return true;
1454
+ });
1455
+ }
1456
+ // ── Private — Formatting ───────────────────────────────────────────────────
1457
+ /** Format entries for system prompt (compact, category-grouped). */
1458
+ formatEntriesForPrompt(entries) {
1459
+ const layerLabels = {
1460
+ person: 'About You',
1461
+ workflow: 'How You Work',
1462
+ project: 'This Project',
1463
+ };
1464
+ // Group by layer first, then category within each layer
1465
+ const byLayer = new Map();
1466
+ for (const entry of entries) {
1467
+ const layer = entry.layer ?? 'workflow';
1468
+ const list = byLayer.get(layer) ?? [];
1469
+ list.push(entry);
1470
+ byLayer.set(layer, list);
1471
+ }
1472
+ const parts = [];
1473
+ for (const layerKey of ['person', 'workflow', 'project']) {
1474
+ const layerEntries = byLayer.get(layerKey);
1475
+ if (!layerEntries || layerEntries.length === 0)
1476
+ continue;
1477
+ const items = layerEntries.map(e => {
1478
+ const stale = this.isStale(e) ? ' (stale)' : '';
1479
+ const branchTag = e.branch ? ` [${e.branch}]` : '';
1480
+ return `- [${e.category}] ${e.content}${branchTag}${stale}`;
1481
+ }).join('\n');
1482
+ parts.push(`**${layerLabels[layerKey] || layerKey}:**\n${items}`);
1483
+ }
1484
+ return parts.join('\n\n');
1485
+ }
1486
+ /** Format entries as flat markdown (for v1 compat and human-readable mirror). */
1487
+ formatEntriesAsMarkdown(entries) {
1488
+ return entries.map(e => {
1489
+ const date = e.createdAt.split('T')[0];
1490
+ const branchTag = e.branch ? ` [branch: ${e.branch}]` : '';
1491
+ return `#### ${date}${branchTag}\n${e.content}`;
1492
+ }).join('\n\n');
1493
+ }
1494
+ /** Check if an entry is stale (not recalled in 90+ days). */
1495
+ isStale(entry) {
1496
+ const lastActivity = entry.lastRecalledAt ?? entry.updatedAt ?? entry.createdAt;
1497
+ const daysSince = (Date.now() - new Date(lastActivity).getTime()) / (1000 * 60 * 60 * 24);
1498
+ return daysSince > STALE_THRESHOLD_DAYS;
1499
+ }
1500
+ // ── Private — File I/O ─────────────────────────────────────────────────────
1501
+ /** Atomic write with lock: acquire lock → temp file → rename → release. */
1502
+ async writeSafe(path, content) {
1503
+ const { withLock } = await import('../core/file-lock.js');
1504
+ await withLock(path, async () => {
1505
+ const tmpPath = path + '.tmp';
1506
+ await writeFile(tmpPath, content, 'utf-8');
1507
+ try {
1508
+ await rename(tmpPath, path);
1509
+ }
1510
+ catch (err) {
1511
+ await unlink(tmpPath).catch(() => { });
1512
+ throw err;
1513
+ }
1514
+ });
1515
+ }
1516
+ /** Set the localOnly flag at runtime (e.g. when user toggles the setting). */
1517
+ setLocalOnly(value) {
1518
+ this.localOnly = value;
1519
+ }
1520
+ /**
1521
+ * Fire-and-forget sync entries to platform. Never throws.
1522
+ *
1523
+ * Schedules a debounced sync — multiple calls in quick succession (e.g.
1524
+ * the Memory Agent saving 5 entries in a loop) coalesce into a single
1525
+ * sync 2 seconds after the last mutation. This eliminates the 5x parallel
1526
+ * racing-syncs flood that was saturating the client's HTTP connection
1527
+ * pool and stalling the LLM stream.
1528
+ *
1529
+ * The `entries` parameter is intentionally ignored — the actual sync
1530
+ * reads the latest store at execution time so we always push current
1531
+ * state, never stale snapshots.
1532
+ */
1533
+ syncEntries(scope, _entries) {
1534
+ if (!this.sync || this.localOnly)
1535
+ return;
1536
+ this.scheduleSync(scope);
1537
+ }
1538
+ /** Coalesce sync calls into a debounced execution per scope. */
1539
+ scheduleSync(scope) {
1540
+ const existing = this.syncTimers.get(scope);
1541
+ if (existing)
1542
+ clearTimeout(existing);
1543
+ const timer = setTimeout(() => {
1544
+ this.syncTimers.delete(scope);
1545
+ void this.runSync(scope);
1546
+ }, this.SYNC_DEBOUNCE_MS);
1547
+ this.syncTimers.set(scope, timer);
1548
+ }
1549
+ /**
1550
+ * Execute one sync for a scope. If a sync is already in flight, mark the
1551
+ * scope dirty so the running sync schedules another pass when it finishes.
1552
+ * Reads the latest store at execution time so we always push current state.
1553
+ */
1554
+ async runSync(scope) {
1555
+ if (!this.sync)
1556
+ return;
1557
+ // In-flight guard — coalesce with any sync already running
1558
+ if (this.syncInFlight.has(scope)) {
1559
+ this.syncDirty.add(scope);
1560
+ return;
1561
+ }
1562
+ this.syncInFlight.add(scope);
1563
+ this.syncDirty.delete(scope);
1564
+ try {
1565
+ const store = scope === 'global'
1566
+ ? await this.loadGlobalStore()
1567
+ : await this.loadProjectStore();
1568
+ if (!store)
1569
+ return;
1570
+ const entries = store.entries;
1571
+ console.info(`[memory] Syncing ${entries.length} ${scope} entries to platform`);
1572
+ await this.sync.pushEntries(scope, entries.map((e) => ({
1573
+ id: e.id,
1574
+ content: e.content,
1575
+ category: e.category,
1576
+ tags: e.tags,
1577
+ archived: e.archived,
1578
+ })));
1579
+ console.info(`[memory] Platform sync complete for ${scope} (${entries.length} entries)`);
1580
+ }
1581
+ catch (err) {
1582
+ const msg = err instanceof Error ? err.message : String(err);
1583
+ console.warn(`[memory] Platform sync failed for ${scope}: ${msg}`);
1584
+ }
1585
+ finally {
1586
+ this.syncInFlight.delete(scope);
1587
+ // If anything got marked dirty during the sync, schedule another pass
1588
+ // through the debounce so we coalesce subsequent dirty marks too.
1589
+ if (this.syncDirty.has(scope)) {
1590
+ this.syncDirty.delete(scope);
1591
+ this.scheduleSync(scope);
1592
+ }
1593
+ }
1594
+ }
1595
+ // ── Project Registry ────────────────────────────────────────────────────────
1596
+ /** Register the current project in the global project registry. */
1597
+ async registerProject(projectRoot) {
1598
+ const registryPath = join(this.globalDir, PROJECTS_REGISTRY);
1599
+ let registry = [];
1600
+ try {
1601
+ const data = await readFile(registryPath, 'utf-8');
1602
+ registry = JSON.parse(data);
1603
+ }
1604
+ catch {
1605
+ // No registry yet or corrupt — start fresh
1606
+ }
1607
+ const existing = registry.findIndex(p => p.path === projectRoot);
1608
+ const entry = {
1609
+ path: projectRoot,
1610
+ name: basename(projectRoot),
1611
+ lastUsed: new Date().toISOString(),
1612
+ };
1613
+ if (existing >= 0) {
1614
+ registry[existing] = entry;
1615
+ }
1616
+ else {
1617
+ registry.push(entry);
1618
+ }
1619
+ await mkdir(this.globalDir, { recursive: true });
1620
+ await this.writeSafe(registryPath, JSON.stringify(registry, null, 2));
1621
+ }
1622
+ /** Load the project registry — all known project paths. */
1623
+ async loadProjectRegistry() {
1624
+ try {
1625
+ const data = await readFile(join(this.globalDir, PROJECTS_REGISTRY), 'utf-8');
1626
+ return JSON.parse(data);
1627
+ }
1628
+ catch {
1629
+ return [];
1630
+ }
1631
+ }
1632
+ }
1633
+ //# sourceMappingURL=memory-manager.js.map