@agentmemory/agentmemory 0.9.29 → 0.9.31

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 (352) hide show
  1. package/.env.example +102 -35
  2. package/AGENTS.md +19 -26
  3. package/README.md +417 -525
  4. package/dist/.env.example +102 -35
  5. package/dist/cli.d.mts.map +1 -1
  6. package/dist/cli.mjs +2316 -655
  7. package/dist/cli.mjs.map +1 -1
  8. package/dist/compression-recovery-CnhLQC6N.mjs +5912 -0
  9. package/dist/compression-recovery-CnhLQC6N.mjs.map +1 -0
  10. package/dist/{connect-Qaeq15TQ.mjs → connect-BSLIAMpw.mjs} +900 -302
  11. package/dist/connect-BSLIAMpw.mjs.map +1 -0
  12. package/dist/hooks/_capture.d.mts +25 -0
  13. package/dist/hooks/_capture.d.mts.map +1 -0
  14. package/dist/hooks/_capture.mjs +944 -0
  15. package/dist/hooks/_capture.mjs.map +1 -0
  16. package/dist/hooks/antigravity-bridge.d.mts +1 -1
  17. package/dist/hooks/antigravity-bridge.d.mts.map +1 -1
  18. package/dist/hooks/antigravity-bridge.mjs +24 -15
  19. package/dist/hooks/antigravity-bridge.mjs.map +1 -1
  20. package/dist/hooks/notification.mjs +35 -29
  21. package/dist/hooks/notification.mjs.map +1 -1
  22. package/dist/hooks/post-commit.mjs +91 -1
  23. package/dist/hooks/post-commit.mjs.map +1 -1
  24. package/dist/hooks/post-tool-failure.mjs +71 -29
  25. package/dist/hooks/post-tool-failure.mjs.map +1 -1
  26. package/dist/hooks/post-tool-use.mjs +99 -39
  27. package/dist/hooks/post-tool-use.mjs.map +1 -1
  28. package/dist/hooks/pre-compact.mjs +113 -6
  29. package/dist/hooks/pre-compact.mjs.map +1 -1
  30. package/dist/hooks/pre-tool-use.mjs +91 -1
  31. package/dist/hooks/pre-tool-use.mjs.map +1 -1
  32. package/dist/hooks/prompt-submit.mjs +25 -25
  33. package/dist/hooks/prompt-submit.mjs.map +1 -1
  34. package/dist/hooks/session-end.mjs +67 -31
  35. package/dist/hooks/session-end.mjs.map +1 -1
  36. package/dist/hooks/session-start.mjs +110 -6
  37. package/dist/hooks/session-start.mjs.map +1 -1
  38. package/dist/hooks/stop.mjs +80 -8
  39. package/dist/hooks/stop.mjs.map +1 -1
  40. package/dist/hooks/subagent-start.mjs +28 -29
  41. package/dist/hooks/subagent-start.mjs.map +1 -1
  42. package/dist/hooks/subagent-stop.mjs +33 -29
  43. package/dist/hooks/subagent-stop.mjs.map +1 -1
  44. package/dist/hooks/task-completed.mjs +31 -31
  45. package/dist/hooks/task-completed.mjs.map +1 -1
  46. package/dist/{image-refs-BKLmp_sD.mjs → image-refs-BaT-9oMU.mjs} +2 -2
  47. package/dist/image-refs-BaT-9oMU.mjs.map +1 -0
  48. package/dist/{image-refs-CJgZmb9X.mjs → image-refs-Cyta4Lf9.mjs} +3 -3
  49. package/dist/image-refs-Cyta4Lf9.mjs.map +1 -0
  50. package/dist/{keyed-mutex-DTHtcZrt.mjs → image-store-BsN4vyjr.mjs} +2 -14
  51. package/dist/image-store-BsN4vyjr.mjs.map +1 -0
  52. package/dist/index.mjs +15180 -4119
  53. package/dist/index.mjs.map +1 -1
  54. package/dist/integrations/dsh.d.mts +55 -0
  55. package/dist/integrations/dsh.d.mts.map +1 -0
  56. package/dist/integrations/dsh.mjs +1145 -0
  57. package/dist/integrations/dsh.mjs.map +1 -0
  58. package/dist/{schema-BFZhNTF7.mjs → keyed-mutex-DCUh7PG-.mjs} +81 -8
  59. package/dist/keyed-mutex-DCUh7PG-.mjs.map +1 -0
  60. package/dist/secret-store-D9GwO0xp.mjs +2449 -0
  61. package/dist/secret-store-D9GwO0xp.mjs.map +1 -0
  62. package/dist/session-arguments-zxsbbd8y.mjs +113 -0
  63. package/dist/session-arguments-zxsbbd8y.mjs.map +1 -0
  64. package/dist/{src-G7yt8gGm.mjs → src-DaMtDzt_.mjs} +8320 -4260
  65. package/dist/src-DaMtDzt_.mjs.map +1 -0
  66. package/dist/{standalone-BqNJDJ04.mjs → standalone-BlqshyZ5.mjs} +246 -62
  67. package/dist/standalone-BlqshyZ5.mjs.map +1 -0
  68. package/dist/standalone.d.mts +1 -1
  69. package/dist/standalone.d.mts.map +1 -1
  70. package/dist/standalone.mjs +866 -78
  71. package/dist/standalone.mjs.map +1 -1
  72. package/dist/viewer/index.html +7394 -2816
  73. package/integrations/hermes/README.md +84 -0
  74. package/integrations/hermes/__init__.py +669 -0
  75. package/integrations/hermes/plugin.yaml +27 -0
  76. package/integrations/omp/LICENSE +190 -0
  77. package/integrations/omp/README.md +76 -0
  78. package/integrations/omp/capture.ts +1 -0
  79. package/integrations/omp/dist/index.mjs +1450 -0
  80. package/integrations/omp/index.ts +488 -0
  81. package/integrations/omp/package.json +13 -0
  82. package/integrations/omp/security.ts +67 -0
  83. package/integrations/omp/skills/agentmemory-agents/REFERENCE.md +32 -0
  84. package/integrations/omp/skills/agentmemory-agents/SKILL.md +48 -0
  85. package/integrations/omp/skills/agentmemory-agents/TROUBLESHOOTING.md +70 -0
  86. package/integrations/omp/skills/agentmemory-architecture/SKILL.md +33 -0
  87. package/integrations/omp/skills/agentmemory-architecture/TROUBLESHOOTING.md +70 -0
  88. package/integrations/omp/skills/agentmemory-config/REFERENCE.md +90 -0
  89. package/integrations/omp/skills/agentmemory-config/SKILL.md +78 -0
  90. package/integrations/omp/skills/agentmemory-config/TROUBLESHOOTING.md +70 -0
  91. package/integrations/omp/skills/agentmemory-hooks/REFERENCE.md +20 -0
  92. package/integrations/omp/skills/agentmemory-hooks/SKILL.md +49 -0
  93. package/integrations/omp/skills/agentmemory-hooks/TROUBLESHOOTING.md +70 -0
  94. package/integrations/omp/skills/agentmemory-mcp-tools/REFERENCE.md +66 -0
  95. package/integrations/omp/skills/agentmemory-mcp-tools/SKILL.md +42 -0
  96. package/integrations/omp/skills/agentmemory-mcp-tools/TROUBLESHOOTING.md +70 -0
  97. package/integrations/omp/skills/agentmemory-rest-api/REFERENCE.md +158 -0
  98. package/integrations/omp/skills/agentmemory-rest-api/SKILL.md +49 -0
  99. package/integrations/omp/skills/agentmemory-rest-api/TROUBLESHOOTING.md +70 -0
  100. package/integrations/omp/skills/commit-context/EXAMPLES.md +71 -0
  101. package/integrations/omp/skills/commit-context/SKILL.md +64 -0
  102. package/integrations/omp/skills/commit-context/TROUBLESHOOTING.md +70 -0
  103. package/integrations/omp/skills/commit-history/EXAMPLES.md +71 -0
  104. package/integrations/omp/skills/commit-history/SKILL.md +62 -0
  105. package/integrations/omp/skills/commit-history/TROUBLESHOOTING.md +70 -0
  106. package/integrations/omp/skills/forget/EXAMPLES.md +40 -0
  107. package/integrations/omp/skills/forget/SKILL.md +73 -0
  108. package/integrations/omp/skills/forget/TROUBLESHOOTING.md +70 -0
  109. package/integrations/omp/skills/handoff/EXAMPLES.md +57 -0
  110. package/integrations/omp/skills/handoff/SKILL.md +75 -0
  111. package/integrations/omp/skills/handoff/TROUBLESHOOTING.md +70 -0
  112. package/integrations/omp/skills/lesson/SKILL.md +64 -0
  113. package/integrations/omp/skills/lesson/TROUBLESHOOTING.md +70 -0
  114. package/integrations/omp/skills/memory-discipline/SKILL.md +65 -0
  115. package/integrations/omp/skills/memory-discipline/TROUBLESHOOTING.md +70 -0
  116. package/integrations/omp/skills/recall/EXAMPLES.md +74 -0
  117. package/integrations/omp/skills/recall/SKILL.md +74 -0
  118. package/integrations/omp/skills/recall/TROUBLESHOOTING.md +70 -0
  119. package/integrations/omp/skills/recap/EXAMPLES.md +62 -0
  120. package/integrations/omp/skills/recap/SKILL.md +68 -0
  121. package/integrations/omp/skills/recap/TROUBLESHOOTING.md +70 -0
  122. package/integrations/omp/skills/remember/EXAMPLES.md +67 -0
  123. package/integrations/omp/skills/remember/SKILL.md +66 -0
  124. package/integrations/omp/skills/remember/TROUBLESHOOTING.md +70 -0
  125. package/integrations/omp/skills/session-history/EXAMPLES.md +59 -0
  126. package/integrations/omp/skills/session-history/SKILL.md +67 -0
  127. package/integrations/omp/skills/session-history/TROUBLESHOOTING.md +70 -0
  128. package/integrations/omp/skills/write-agentmemory-skill/SKILL.md +41 -0
  129. package/integrations/omp/skills/write-agentmemory-skill/TROUBLESHOOTING.md +70 -0
  130. package/integrations/openclaw/LICENSE +190 -0
  131. package/integrations/openclaw/README.md +88 -0
  132. package/integrations/openclaw/openclaw.plugin.json +71 -0
  133. package/integrations/openclaw/package.json +38 -0
  134. package/integrations/openclaw/plugin.mjs +425 -0
  135. package/integrations/openclaw/plugin.yaml +26 -0
  136. package/integrations/openclaw/skills/agentmemory-agents/REFERENCE.md +32 -0
  137. package/integrations/openclaw/skills/agentmemory-agents/SKILL.md +48 -0
  138. package/integrations/openclaw/skills/agentmemory-agents/TROUBLESHOOTING.md +70 -0
  139. package/integrations/openclaw/skills/agentmemory-architecture/SKILL.md +33 -0
  140. package/integrations/openclaw/skills/agentmemory-architecture/TROUBLESHOOTING.md +70 -0
  141. package/integrations/openclaw/skills/agentmemory-config/REFERENCE.md +90 -0
  142. package/integrations/openclaw/skills/agentmemory-config/SKILL.md +78 -0
  143. package/integrations/openclaw/skills/agentmemory-config/TROUBLESHOOTING.md +70 -0
  144. package/integrations/openclaw/skills/agentmemory-hooks/REFERENCE.md +20 -0
  145. package/integrations/openclaw/skills/agentmemory-hooks/SKILL.md +49 -0
  146. package/integrations/openclaw/skills/agentmemory-hooks/TROUBLESHOOTING.md +70 -0
  147. package/integrations/openclaw/skills/agentmemory-mcp-tools/REFERENCE.md +66 -0
  148. package/integrations/openclaw/skills/agentmemory-mcp-tools/SKILL.md +42 -0
  149. package/integrations/openclaw/skills/agentmemory-mcp-tools/TROUBLESHOOTING.md +70 -0
  150. package/integrations/openclaw/skills/agentmemory-rest-api/REFERENCE.md +158 -0
  151. package/integrations/openclaw/skills/agentmemory-rest-api/SKILL.md +49 -0
  152. package/integrations/openclaw/skills/agentmemory-rest-api/TROUBLESHOOTING.md +70 -0
  153. package/integrations/openclaw/skills/commit-context/EXAMPLES.md +71 -0
  154. package/integrations/openclaw/skills/commit-context/SKILL.md +64 -0
  155. package/integrations/openclaw/skills/commit-context/TROUBLESHOOTING.md +70 -0
  156. package/integrations/openclaw/skills/commit-history/EXAMPLES.md +71 -0
  157. package/integrations/openclaw/skills/commit-history/SKILL.md +62 -0
  158. package/integrations/openclaw/skills/commit-history/TROUBLESHOOTING.md +70 -0
  159. package/integrations/openclaw/skills/forget/EXAMPLES.md +40 -0
  160. package/integrations/openclaw/skills/forget/SKILL.md +73 -0
  161. package/integrations/openclaw/skills/forget/TROUBLESHOOTING.md +70 -0
  162. package/integrations/openclaw/skills/handoff/EXAMPLES.md +57 -0
  163. package/integrations/openclaw/skills/handoff/SKILL.md +75 -0
  164. package/integrations/openclaw/skills/handoff/TROUBLESHOOTING.md +70 -0
  165. package/integrations/openclaw/skills/lesson/SKILL.md +64 -0
  166. package/integrations/openclaw/skills/lesson/TROUBLESHOOTING.md +70 -0
  167. package/integrations/openclaw/skills/memory-discipline/SKILL.md +65 -0
  168. package/integrations/openclaw/skills/memory-discipline/TROUBLESHOOTING.md +70 -0
  169. package/integrations/openclaw/skills/recall/EXAMPLES.md +74 -0
  170. package/integrations/openclaw/skills/recall/SKILL.md +74 -0
  171. package/integrations/openclaw/skills/recall/TROUBLESHOOTING.md +70 -0
  172. package/integrations/openclaw/skills/recap/EXAMPLES.md +62 -0
  173. package/integrations/openclaw/skills/recap/SKILL.md +68 -0
  174. package/integrations/openclaw/skills/recap/TROUBLESHOOTING.md +70 -0
  175. package/integrations/openclaw/skills/remember/EXAMPLES.md +67 -0
  176. package/integrations/openclaw/skills/remember/SKILL.md +66 -0
  177. package/integrations/openclaw/skills/remember/TROUBLESHOOTING.md +70 -0
  178. package/integrations/openclaw/skills/session-history/EXAMPLES.md +59 -0
  179. package/integrations/openclaw/skills/session-history/SKILL.md +67 -0
  180. package/integrations/openclaw/skills/session-history/TROUBLESHOOTING.md +70 -0
  181. package/integrations/openclaw/skills/write-agentmemory-skill/SKILL.md +41 -0
  182. package/integrations/openclaw/skills/write-agentmemory-skill/TROUBLESHOOTING.md +70 -0
  183. package/integrations/pi/LICENSE +190 -0
  184. package/integrations/pi/README.md +45 -51
  185. package/integrations/pi/dist/index.mjs +1379 -0
  186. package/integrations/pi/index.ts +139 -173
  187. package/integrations/pi/package.json +16 -6
  188. package/integrations/pi/security.ts +54 -22
  189. package/integrations/pi/skills/agentmemory-agents/REFERENCE.md +32 -0
  190. package/integrations/pi/skills/agentmemory-agents/SKILL.md +48 -0
  191. package/integrations/pi/skills/agentmemory-agents/TROUBLESHOOTING.md +70 -0
  192. package/integrations/pi/skills/agentmemory-architecture/SKILL.md +33 -0
  193. package/integrations/pi/skills/agentmemory-architecture/TROUBLESHOOTING.md +70 -0
  194. package/integrations/pi/skills/agentmemory-config/REFERENCE.md +90 -0
  195. package/integrations/pi/skills/agentmemory-config/SKILL.md +78 -0
  196. package/integrations/pi/skills/agentmemory-config/TROUBLESHOOTING.md +70 -0
  197. package/integrations/pi/skills/agentmemory-hooks/REFERENCE.md +20 -0
  198. package/integrations/pi/skills/agentmemory-hooks/SKILL.md +49 -0
  199. package/integrations/pi/skills/agentmemory-hooks/TROUBLESHOOTING.md +70 -0
  200. package/integrations/pi/skills/agentmemory-mcp-tools/REFERENCE.md +66 -0
  201. package/integrations/pi/skills/agentmemory-mcp-tools/SKILL.md +42 -0
  202. package/integrations/pi/skills/agentmemory-mcp-tools/TROUBLESHOOTING.md +70 -0
  203. package/integrations/pi/skills/agentmemory-rest-api/REFERENCE.md +158 -0
  204. package/integrations/pi/skills/agentmemory-rest-api/SKILL.md +49 -0
  205. package/integrations/pi/skills/agentmemory-rest-api/TROUBLESHOOTING.md +70 -0
  206. package/integrations/pi/skills/commit-context/EXAMPLES.md +71 -0
  207. package/integrations/pi/skills/commit-context/SKILL.md +64 -0
  208. package/integrations/pi/skills/commit-context/TROUBLESHOOTING.md +70 -0
  209. package/integrations/pi/skills/commit-history/EXAMPLES.md +71 -0
  210. package/integrations/pi/skills/commit-history/SKILL.md +62 -0
  211. package/integrations/pi/skills/commit-history/TROUBLESHOOTING.md +70 -0
  212. package/integrations/pi/skills/forget/EXAMPLES.md +40 -0
  213. package/integrations/pi/skills/forget/SKILL.md +73 -0
  214. package/integrations/pi/skills/forget/TROUBLESHOOTING.md +70 -0
  215. package/integrations/pi/skills/handoff/EXAMPLES.md +57 -0
  216. package/integrations/pi/skills/handoff/SKILL.md +75 -0
  217. package/integrations/pi/skills/handoff/TROUBLESHOOTING.md +70 -0
  218. package/integrations/pi/skills/lesson/SKILL.md +64 -0
  219. package/integrations/pi/skills/lesson/TROUBLESHOOTING.md +70 -0
  220. package/integrations/pi/skills/memory-discipline/SKILL.md +65 -0
  221. package/integrations/pi/skills/memory-discipline/TROUBLESHOOTING.md +70 -0
  222. package/integrations/pi/skills/recall/EXAMPLES.md +74 -0
  223. package/integrations/pi/skills/recall/SKILL.md +74 -0
  224. package/integrations/pi/skills/recall/TROUBLESHOOTING.md +70 -0
  225. package/integrations/pi/skills/recap/EXAMPLES.md +62 -0
  226. package/integrations/pi/skills/recap/SKILL.md +68 -0
  227. package/integrations/pi/skills/recap/TROUBLESHOOTING.md +70 -0
  228. package/integrations/pi/skills/remember/EXAMPLES.md +67 -0
  229. package/integrations/pi/skills/remember/SKILL.md +66 -0
  230. package/integrations/pi/skills/remember/TROUBLESHOOTING.md +70 -0
  231. package/integrations/pi/skills/session-history/EXAMPLES.md +59 -0
  232. package/integrations/pi/skills/session-history/SKILL.md +67 -0
  233. package/integrations/pi/skills/session-history/TROUBLESHOOTING.md +70 -0
  234. package/integrations/pi/skills/write-agentmemory-skill/SKILL.md +41 -0
  235. package/integrations/pi/skills/write-agentmemory-skill/TROUBLESHOOTING.md +70 -0
  236. package/package.json +42 -12
  237. package/plugin/.claude-plugin/plugin.json +2 -2
  238. package/plugin/.codex-plugin/plugin.json +27 -4
  239. package/plugin/.devin-plugin/plugin.json +5 -3
  240. package/plugin/.mcp.codex.json +12 -0
  241. package/plugin/.mcp.copilot.json +2 -7
  242. package/plugin/.mcp.json +2 -7
  243. package/plugin/assets/icon.svg +35 -0
  244. package/plugin/cursor/hooks.json +23 -8
  245. package/plugin/hooks/hooks.copilot.json +11 -11
  246. package/plugin/hooks.json +67 -0
  247. package/plugin/opencode/README.md +267 -31
  248. package/plugin/opencode/agentmemory-capture.ts +594 -11
  249. package/plugin/opencode/plugin.json +1 -1
  250. package/plugin/plugin.json +1 -1
  251. package/plugin/scripts/_capture.d.mts +25 -0
  252. package/plugin/scripts/_capture.d.mts.map +1 -0
  253. package/plugin/scripts/_capture.mjs +944 -0
  254. package/plugin/scripts/_capture.mjs.map +1 -0
  255. package/plugin/scripts/antigravity-bridge.d.mts +1 -1
  256. package/plugin/scripts/antigravity-bridge.d.mts.map +1 -1
  257. package/plugin/scripts/antigravity-bridge.mjs +24 -15
  258. package/plugin/scripts/antigravity-bridge.mjs.map +1 -1
  259. package/plugin/scripts/cursor/run-detached.d.mts +1 -0
  260. package/plugin/scripts/cursor/run-detached.mjs +786 -0
  261. package/plugin/scripts/cursor/run-detached.mjs.map +1 -0
  262. package/plugin/scripts/cursor/run-hook.d.mts +1 -0
  263. package/plugin/scripts/cursor/run-hook.mjs +704 -0
  264. package/plugin/scripts/cursor/run-hook.mjs.map +1 -0
  265. package/plugin/scripts/notification.mjs +35 -29
  266. package/plugin/scripts/notification.mjs.map +1 -1
  267. package/plugin/scripts/plugin-bridge.mjs +409 -0
  268. package/plugin/scripts/post-commit.mjs +91 -1
  269. package/plugin/scripts/post-commit.mjs.map +1 -1
  270. package/plugin/scripts/post-tool-failure.mjs +71 -29
  271. package/plugin/scripts/post-tool-failure.mjs.map +1 -1
  272. package/plugin/scripts/post-tool-use.mjs +99 -39
  273. package/plugin/scripts/post-tool-use.mjs.map +1 -1
  274. package/plugin/scripts/pre-compact.mjs +113 -6
  275. package/plugin/scripts/pre-compact.mjs.map +1 -1
  276. package/plugin/scripts/pre-tool-use.mjs +91 -1
  277. package/plugin/scripts/pre-tool-use.mjs.map +1 -1
  278. package/plugin/scripts/prompt-submit.mjs +25 -25
  279. package/plugin/scripts/prompt-submit.mjs.map +1 -1
  280. package/plugin/scripts/session-end.mjs +67 -31
  281. package/plugin/scripts/session-end.mjs.map +1 -1
  282. package/plugin/scripts/session-start.mjs +110 -6
  283. package/plugin/scripts/session-start.mjs.map +1 -1
  284. package/plugin/scripts/stop.mjs +80 -8
  285. package/plugin/scripts/stop.mjs.map +1 -1
  286. package/plugin/scripts/subagent-start.mjs +28 -29
  287. package/plugin/scripts/subagent-start.mjs.map +1 -1
  288. package/plugin/scripts/subagent-stop.mjs +33 -29
  289. package/plugin/scripts/subagent-stop.mjs.map +1 -1
  290. package/plugin/scripts/task-completed.mjs +31 -31
  291. package/plugin/scripts/task-completed.mjs.map +1 -1
  292. package/plugin/skills/_shared/TROUBLESHOOTING.md +42 -12
  293. package/plugin/skills/agentmemory-agents/REFERENCE.md +10 -9
  294. package/plugin/skills/agentmemory-agents/SKILL.md +19 -5
  295. package/plugin/skills/agentmemory-agents/TROUBLESHOOTING.md +70 -0
  296. package/plugin/skills/agentmemory-architecture/SKILL.md +4 -4
  297. package/plugin/skills/agentmemory-architecture/TROUBLESHOOTING.md +70 -0
  298. package/plugin/skills/agentmemory-config/REFERENCE.md +48 -3
  299. package/plugin/skills/agentmemory-config/SKILL.md +51 -10
  300. package/plugin/skills/agentmemory-config/TROUBLESHOOTING.md +70 -0
  301. package/plugin/skills/agentmemory-hooks/SKILL.md +15 -5
  302. package/plugin/skills/agentmemory-hooks/TROUBLESHOOTING.md +70 -0
  303. package/plugin/skills/agentmemory-mcp-tools/REFERENCE.md +5 -5
  304. package/plugin/skills/agentmemory-mcp-tools/SKILL.md +6 -3
  305. package/plugin/skills/agentmemory-mcp-tools/TROUBLESHOOTING.md +70 -0
  306. package/plugin/skills/agentmemory-rest-api/REFERENCE.md +18 -2
  307. package/plugin/skills/agentmemory-rest-api/SKILL.md +12 -6
  308. package/plugin/skills/agentmemory-rest-api/TROUBLESHOOTING.md +70 -0
  309. package/plugin/skills/commit-context/SKILL.md +1 -1
  310. package/plugin/skills/commit-context/TROUBLESHOOTING.md +70 -0
  311. package/plugin/skills/commit-history/SKILL.md +1 -1
  312. package/plugin/skills/commit-history/TROUBLESHOOTING.md +70 -0
  313. package/plugin/skills/forget/EXAMPLES.md +19 -54
  314. package/plugin/skills/forget/SKILL.md +16 -12
  315. package/plugin/skills/forget/TROUBLESHOOTING.md +70 -0
  316. package/plugin/skills/handoff/EXAMPLES.md +5 -4
  317. package/plugin/skills/handoff/SKILL.md +13 -6
  318. package/plugin/skills/handoff/TROUBLESHOOTING.md +70 -0
  319. package/plugin/skills/lesson/SKILL.md +1 -1
  320. package/plugin/skills/lesson/TROUBLESHOOTING.md +70 -0
  321. package/plugin/skills/memory-discipline/SKILL.md +14 -6
  322. package/plugin/skills/memory-discipline/TROUBLESHOOTING.md +70 -0
  323. package/plugin/skills/recall/SKILL.md +18 -7
  324. package/plugin/skills/recall/TROUBLESHOOTING.md +70 -0
  325. package/plugin/skills/recap/EXAMPLES.md +5 -3
  326. package/plugin/skills/recap/SKILL.md +11 -6
  327. package/plugin/skills/recap/TROUBLESHOOTING.md +70 -0
  328. package/plugin/skills/remember/EXAMPLES.md +3 -3
  329. package/plugin/skills/remember/SKILL.md +1 -1
  330. package/plugin/skills/remember/TROUBLESHOOTING.md +70 -0
  331. package/plugin/skills/session-history/EXAMPLES.md +2 -2
  332. package/plugin/skills/session-history/SKILL.md +10 -4
  333. package/plugin/skills/session-history/TROUBLESHOOTING.md +70 -0
  334. package/plugin/skills/write-agentmemory-skill/SKILL.md +2 -1
  335. package/plugin/skills/write-agentmemory-skill/TROUBLESHOOTING.md +70 -0
  336. package/dist/connect-Qaeq15TQ.mjs.map +0 -1
  337. package/dist/docker-compose.yml +0 -47
  338. package/dist/iii-config.docker.yaml +0 -53
  339. package/dist/iii-config.yaml +0 -61
  340. package/dist/image-refs-BKLmp_sD.mjs.map +0 -1
  341. package/dist/image-refs-CJgZmb9X.mjs.map +0 -1
  342. package/dist/keyed-mutex-DTHtcZrt.mjs.map +0 -1
  343. package/dist/logger-BEB7pCI9.mjs +0 -43
  344. package/dist/logger-BEB7pCI9.mjs.map +0 -1
  345. package/dist/schema-BFZhNTF7.mjs.map +0 -1
  346. package/dist/src-G7yt8gGm.mjs.map +0 -1
  347. package/dist/standalone-BqNJDJ04.mjs.map +0 -1
  348. package/dist/tools-registry-BV_2bu7z.mjs +0 -1405
  349. package/dist/tools-registry-BV_2bu7z.mjs.map +0 -1
  350. package/docker-compose.yml +0 -47
  351. package/iii-config.docker.yaml +0 -53
  352. package/iii-config.yaml +0 -61
@@ -1,5 +1,6 @@
1
- import { i as generateId } from "./schema-BFZhNTF7.mjs";
2
- import { f as getStandalonePersistPath, i as VERSION, n as getAllTools } from "./tools-registry-BV_2bu7z.mjs";
1
+ import { s as generateId } from "./keyed-mutex-DCUh7PG-.mjs";
2
+ import { R as getAgentId, Y as getStandalonePersistPath, c as memoryToObservation, i as resolveClientSecret, m as queryAudit, o as buildRecallResponse, tt as isAgentScopeIsolated, u as isSearchLayer, w as VERSION, x as getAllTools } from "./secret-store-D9GwO0xp.mjs";
3
+ import { a as pageAfterCursor, c as sortByKeyDesc, n as parseSearchExpansionIds, t as parseSessionArguments } from "./session-arguments-zxsbbd8y.mjs";
3
4
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
4
5
  import { dirname } from "node:path";
5
6
  //#region src/mcp/in-memory-kv.ts
@@ -32,20 +33,30 @@ var InMemoryKV = class {
32
33
  return entries ? Array.from(entries.values()) : [];
33
34
  }
34
35
  persist() {
35
- if (!this.persistPath) return;
36
+ if (!this.persistPath) return false;
36
37
  try {
37
38
  const dir = dirname(this.persistPath);
38
39
  if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
39
40
  const data = {};
40
41
  for (const [scope, entries] of this.store) data[scope] = Object.fromEntries(entries);
41
42
  writeFileSync(this.persistPath, JSON.stringify(data), "utf-8");
43
+ return true;
42
44
  } catch (err) {
43
45
  process.stderr.write(`[@agentmemory/mcp] Persist failed: ${err instanceof Error ? err.message : String(err)}\n`);
46
+ return false;
44
47
  }
45
48
  }
46
49
  };
47
50
  //#endregion
48
51
  //#region src/mcp/transport.ts
52
+ let activeStdioTransports = 0;
53
+ var JsonRpcError = class extends Error {
54
+ constructor(code, message) {
55
+ super(message);
56
+ this.code = code;
57
+ this.name = "JsonRpcError";
58
+ }
59
+ };
49
60
  function isNotification(req) {
50
61
  return req.id === void 0 || req.id === null;
51
62
  }
@@ -111,7 +122,7 @@ async function processLine(line, handler, writeOut, writeErr = (msg) => process.
111
122
  jsonrpc: "2.0",
112
123
  id: request.id,
113
124
  error: {
114
- code: -32603,
125
+ code: err instanceof JsonRpcError ? err.code : -32603,
115
126
  message: err instanceof Error ? err.message : String(err)
116
127
  }
117
128
  });
@@ -191,6 +202,7 @@ function createMessageParser(onMessage, writeErr = (msg) => process.stderr.write
191
202
  function createStdioTransport(handler) {
192
203
  let parser = null;
193
204
  let queue = Promise.resolve();
205
+ let active = false;
194
206
  const writeResponse = (response) => {
195
207
  const formatted = formatResponse(response, parser?.isFramed() ?? false);
196
208
  if (typeof formatted === "string") {
@@ -202,6 +214,10 @@ function createStdioTransport(handler) {
202
214
  const onData = (chunk) => parser?.push(chunk);
203
215
  return {
204
216
  start() {
217
+ if (active) return;
218
+ active = true;
219
+ activeStdioTransports += 1;
220
+ process.env["AGENTMEMORY_MCP_STDIO__"] = "1";
205
221
  parser = createMessageParser((message) => {
206
222
  queue = queue.then(() => processLine(message, handler, writeResponse));
207
223
  queue.catch((err) => {
@@ -212,6 +228,11 @@ function createStdioTransport(handler) {
212
228
  },
213
229
  stop() {
214
230
  process.stdin.off("data", onData);
231
+ if (active) {
232
+ active = false;
233
+ activeStdioTransports -= 1;
234
+ if (activeStdioTransports === 0) delete process.env["AGENTMEMORY_MCP_STDIO__"];
235
+ }
215
236
  parser = null;
216
237
  }
217
238
  };
@@ -228,11 +249,22 @@ function probeTimeoutMs() {
228
249
  const n = Number(raw);
229
250
  return Number.isFinite(n) && n > 0 ? Math.floor(n) : DEFAULT_HEALTH_PROBE_TIMEOUT_MS;
230
251
  }
231
- function forceProxy() {
252
+ function isProxyRequired() {
232
253
  const raw = process.env["AGENTMEMORY_FORCE_PROXY"];
233
254
  return raw === "1" || raw === "true";
234
255
  }
256
+ var ProxyCallError = class extends Error {
257
+ status;
258
+ body;
259
+ constructor(message, status, body) {
260
+ super(message);
261
+ this.name = "ProxyCallError";
262
+ this.status = status;
263
+ this.body = body;
264
+ }
265
+ };
235
266
  let cached = null;
267
+ let cachedUrl = null;
236
268
  let cachedAt = 0;
237
269
  let probeInFlight = null;
238
270
  function resolveEnvOrEmpty(name) {
@@ -242,17 +274,25 @@ function resolveEnvOrEmpty(name) {
242
274
  return raw;
243
275
  }
244
276
  function baseUrl() {
245
- return (resolveEnvOrEmpty("AGENTMEMORY_URL") || DEFAULT_URL).replace(/\/+$/, "");
277
+ const value = resolveEnvOrEmpty("AGENTMEMORY_URL") || DEFAULT_URL;
278
+ try {
279
+ const parsed = new URL(value);
280
+ if (!["http:", "https:"].includes(parsed.protocol) || !parsed.hostname || parsed.username || parsed.password || /[?#\s]/.test(value)) throw new Error();
281
+ return value.replace(/\/+$/, "");
282
+ } catch {
283
+ throw new Error("AGENTMEMORY_URL must be an HTTP(S) URL without credentials, query, or fragment");
284
+ }
246
285
  }
247
- function authHeader() {
248
- const secret = resolveEnvOrEmpty("AGENTMEMORY_SECRET");
286
+ function authHeader(url) {
287
+ const secret = resolveClientSecret(url);
249
288
  return secret ? { authorization: `Bearer ${secret}` } : {};
250
289
  }
251
290
  const defaultLivezProbe = async (url, timeoutMs, headers) => {
252
291
  const res = await fetch(`${url}/agentmemory/livez`, {
253
292
  method: "GET",
254
293
  headers,
255
- signal: AbortSignal.timeout(timeoutMs)
294
+ signal: AbortSignal.timeout(timeoutMs),
295
+ redirect: "error"
256
296
  });
257
297
  return {
258
298
  ok: res.ok,
@@ -264,7 +304,7 @@ let livezProbe = defaultLivezProbe;
264
304
  async function probe(url) {
265
305
  const timeout = probeTimeoutMs();
266
306
  try {
267
- const res = await livezProbe(url, timeout, authHeader());
307
+ const res = await livezProbe(url, timeout, authHeader(url));
268
308
  if (!res.ok) process.stderr.write(`[@agentmemory/mcp] livez probe ${url}/agentmemory/livez -> ${res.status ?? "?"} ${res.statusText ?? ""}; falling back to local InMemoryKV (set AGENTMEMORY_FORCE_PROXY=1 to skip the probe)\n`);
269
309
  return res.ok;
270
310
  } catch (err) {
@@ -274,52 +314,73 @@ async function probe(url) {
274
314
  }
275
315
  function invalidateHandle() {
276
316
  cached = null;
317
+ cachedUrl = null;
277
318
  cachedAt = 0;
278
319
  }
279
320
  async function resolveHandle() {
280
321
  const now = Date.now();
322
+ const url = baseUrl();
323
+ if (cached && (cachedUrl !== url || cached.mode === "local" && isProxyRequired())) invalidateHandle();
281
324
  if (cached) if (cached.mode === "local" && now - cachedAt >= LOCAL_MODE_TTL_MS) {
282
325
  cached = null;
283
326
  cachedAt = 0;
284
327
  } else return cached;
285
- if (probeInFlight) return probeInFlight;
286
- const url = baseUrl();
287
- const skipProbe = forceProxy();
288
- probeInFlight = (async () => {
328
+ const skipProbe = isProxyRequired();
329
+ if (probeInFlight?.url === url && probeInFlight.forceProxy === skipProbe) return probeInFlight.promise;
330
+ const pending = (async () => {
289
331
  const up = skipProbe ? true : await probe(url);
332
+ if (baseUrl() !== url || isProxyRequired() !== skipProbe) return resolveHandle();
290
333
  if (skipProbe) process.stderr.write(`[@agentmemory/mcp] AGENTMEMORY_FORCE_PROXY set; skipping livez probe and trusting ${url}\n`);
291
334
  if (up) {
292
335
  const handle = {
293
336
  mode: "proxy",
294
337
  baseUrl: url,
295
338
  call: async (path, init) => {
339
+ if (baseUrl() !== url) throw new Error("AgentMemory endpoint changed; resolve a new proxy handle before retrying.");
296
340
  const res = await fetch(`${url}${path}`, {
297
341
  ...init,
298
342
  headers: {
299
343
  "content-type": "application/json",
300
- ...authHeader(),
344
+ ...authHeader(url),
301
345
  ...init?.headers
302
346
  },
303
- signal: AbortSignal.timeout(CALL_TIMEOUT_MS)
347
+ signal: AbortSignal.timeout(CALL_TIMEOUT_MS),
348
+ redirect: "error"
304
349
  });
305
- if (!res.ok) throw new Error(`${init?.method || "GET"} ${path} -> ${res.status} ${res.statusText}`);
350
+ if (!res.ok) {
351
+ const errText = await res.text().catch(() => "");
352
+ let errBody = void 0;
353
+ if (errText) try {
354
+ errBody = JSON.parse(errText);
355
+ } catch {
356
+ errBody = void 0;
357
+ }
358
+ throw new ProxyCallError(`${init?.method || "GET"} ${path} -> ${res.status} ${res.statusText}`, res.status, errBody);
359
+ }
306
360
  const text = await res.text();
307
361
  return text ? JSON.parse(text) : null;
308
362
  }
309
363
  };
310
364
  cached = handle;
365
+ cachedUrl = url;
311
366
  cachedAt = Date.now();
312
367
  return handle;
313
368
  }
314
369
  const local = { mode: "local" };
315
370
  cached = local;
371
+ cachedUrl = url;
316
372
  cachedAt = Date.now();
317
373
  return local;
318
374
  })();
375
+ probeInFlight = {
376
+ url,
377
+ forceProxy: skipProbe,
378
+ promise: pending
379
+ };
319
380
  try {
320
- return await probeInFlight;
381
+ return await pending;
321
382
  } finally {
322
- probeInFlight = null;
383
+ if (probeInFlight?.promise === pending) probeInFlight = null;
323
384
  }
324
385
  }
325
386
  //#endregion
@@ -379,6 +440,9 @@ function textResponse(payload, pretty = false) {
379
440
  text: JSON.stringify(payload, null, pretty ? 2 : 0)
380
441
  }] };
381
442
  }
443
+ function isAuthenticationError(error) {
444
+ return error instanceof ProxyCallError && (error.status === 401 || error.status === 403);
445
+ }
382
446
  function validate(toolName, args) {
383
447
  if (!IMPLEMENTED_TOOLS.has(toolName)) throw new Error(`Unknown tool: ${toolName}`);
384
448
  const v = { tool: toolName };
@@ -396,22 +460,41 @@ function validate(toolName, args) {
396
460
  }
397
461
  case "memory_recall":
398
462
  case "memory_smart_search": {
463
+ if (args.targetLayer !== void 0 && !isSearchLayer(args.targetLayer)) throw new Error("targetLayer must be one of: all, memory, observation");
464
+ v.targetLayer = args.targetLayer ?? "all";
465
+ for (const field of [
466
+ "project",
467
+ "cwd",
468
+ "agentId",
469
+ "sessionId",
470
+ "source"
471
+ ]) {
472
+ if (args[field] !== void 0 && typeof args[field] !== "string") throw new Error(`${field} must be a string`);
473
+ if (typeof args[field] === "string" && args[field].trim()) v[field] = args[field].trim();
474
+ }
475
+ if (toolName === "memory_smart_search") {
476
+ v.expandIds = parseSearchExpansionIds(args.expandIds);
477
+ if (typeof args.includeLessons === "boolean") v.includeLessons = args.includeLessons;
478
+ }
399
479
  const query = args["query"];
400
- if (typeof query !== "string" || !query.trim()) throw new Error("query is required");
401
- v.query = query.trim();
480
+ if (typeof query !== "string" || !query.trim()) {
481
+ if (!v.expandIds?.length) throw new Error("query is required unless expandIds is provided");
482
+ } else v.query = query.trim();
402
483
  v.limit = parseLimit(args["limit"]);
403
- const fmt = args["format"];
404
- if (typeof fmt === "string" && fmt.trim()) v.format = fmt.trim().toLowerCase();
405
- const budget = args["token_budget"];
406
- if (typeof budget === "number" && Number.isFinite(budget) && budget > 0) v.tokenBudget = Math.floor(budget);
407
- else if (typeof budget === "string" && budget.trim()) {
408
- const n = Number(budget);
409
- if (Number.isFinite(n) && n > 0) v.tokenBudget = Math.floor(n);
484
+ if (toolName === "memory_recall") {
485
+ const format = typeof args.format === "string" ? args.format.trim().toLowerCase() : args.format ?? "full";
486
+ if (format !== "full" && format !== "compact" && format !== "narrative") throw new Error("format must be one of: full, compact, narrative");
487
+ v.format = format;
488
+ if (args.token_budget !== void 0) {
489
+ const budget = typeof args.token_budget === "string" ? Number(args.token_budget) : args.token_budget;
490
+ if (typeof budget !== "number" || !Number.isInteger(budget) || budget < 1) throw new Error("token_budget must be a positive integer");
491
+ v.tokenBudget = budget;
492
+ }
410
493
  }
411
494
  return v;
412
495
  }
413
496
  case "memory_sessions":
414
- v.limit = parseLimit(args["limit"], 20);
497
+ v.sessionQuery = parseSessionArguments(args);
415
498
  return v;
416
499
  case "memory_governance_delete": {
417
500
  const ids = normalizeList(args["memoryIds"]);
@@ -420,7 +503,22 @@ function validate(toolName, args) {
420
503
  v.reason = args["reason"] || "plugin skill request";
421
504
  return v;
422
505
  }
423
- case "memory_export": return v;
506
+ case "memory_export": {
507
+ const query = new URLSearchParams();
508
+ for (const key of [
509
+ "maxSessions",
510
+ "offset",
511
+ "collectionLimit",
512
+ "collectionOffset"
513
+ ]) {
514
+ const n = Number(args[key]);
515
+ const min = key === "maxSessions" || key === "collectionLimit" ? 1 : 0;
516
+ if (args[key] !== void 0 && Number.isInteger(n) && n >= min) query.set(key, String(n));
517
+ }
518
+ if (typeof args["collections"] === "string") query.set("collections", args["collections"]);
519
+ v.exportQuery = query.toString();
520
+ return v;
521
+ }
424
522
  case "memory_audit":
425
523
  v.limit = parseLimit(args["limit"], 50);
426
524
  return v;
@@ -444,7 +542,11 @@ async function handleProxy(v, handle) {
444
542
  const body = {
445
543
  query: v.query,
446
544
  limit: v.limit,
447
- format: v.format ?? "full"
545
+ format: v.format ?? "full",
546
+ targetLayer: v.targetLayer,
547
+ project: v.project,
548
+ cwd: v.cwd,
549
+ agentId: v.agentId
448
550
  };
449
551
  if (v.tokenBudget != null) body["token_budget"] = v.tokenBudget;
450
552
  return textResponse(await handle.call("/agentmemory/search", {
@@ -455,16 +557,21 @@ async function handleProxy(v, handle) {
455
557
  case "memory_smart_search": {
456
558
  const body = {
457
559
  query: v.query,
458
- limit: v.limit
560
+ limit: v.limit,
561
+ targetLayer: v.targetLayer,
562
+ project: v.project,
563
+ agentId: v.agentId,
564
+ expandIds: v.expandIds,
565
+ sessionId: v.sessionId,
566
+ source: v.source,
567
+ includeLessons: v.includeLessons
459
568
  };
460
- if (v.format != null) body["format"] = v.format;
461
- if (v.tokenBudget != null) body["token_budget"] = v.tokenBudget;
462
569
  return textResponse(await handle.call("/agentmemory/smart-search", {
463
570
  method: "POST",
464
571
  body: JSON.stringify(body)
465
572
  }), true);
466
573
  }
467
- case "memory_sessions": return textResponse(await handle.call(`/agentmemory/sessions?limit=${v.limit}`, { method: "GET" }), true);
574
+ case "memory_sessions": return textResponse(await handle.call(`/agentmemory/sessions?${new URLSearchParams(v.sessionQuery)}`, { method: "GET" }), true);
468
575
  case "memory_governance_delete": return textResponse(await handle.call("/agentmemory/governance/memories", {
469
576
  method: "DELETE",
470
577
  body: JSON.stringify({
@@ -472,11 +579,23 @@ async function handleProxy(v, handle) {
472
579
  reason: v.reason
473
580
  })
474
581
  }));
475
- case "memory_export": return textResponse(await handle.call("/agentmemory/export", { method: "GET" }), true);
582
+ case "memory_export": try {
583
+ return textResponse(await handle.call(`/agentmemory/export${v.exportQuery ? `?${v.exportQuery}` : ""}`, { method: "GET" }), true);
584
+ } catch (err) {
585
+ if (err instanceof ProxyCallError && err.status === 413 && err.body != null && typeof err.body === "object" && err.body.oversized === true) return textResponse(err.body, true);
586
+ throw err;
587
+ }
476
588
  case "memory_audit": return textResponse(await handle.call(`/agentmemory/audit?limit=${v.limit}`, { method: "GET" }), true);
477
589
  default: throw new Error(`Unknown tool: ${v.tool}`);
478
590
  }
479
591
  }
592
+ function localFallbackNotice(persisted) {
593
+ const store = persisted ? "the local fallback file, which the server does not read" : "this process's in-memory fallback store, which is lost when the process exits";
594
+ return {
595
+ storage: "local",
596
+ warning: `agentmemory server at ${displayAgentmemoryUrl()} did not confirm this call, so it ran against ${store}.`
597
+ };
598
+ }
480
599
  async function handleLocal(v, kvInstance) {
481
600
  switch (v.tool) {
482
601
  case "memory_save": {
@@ -494,34 +613,96 @@ async function handleLocal(v, kvInstance) {
494
613
  strength: 7,
495
614
  version: 1,
496
615
  isLatest: true,
497
- sessionIds: []
616
+ sessionIds: [],
617
+ ...v.project !== void 0 && { project: v.project },
618
+ ...(v.agentId ?? getAgentId()) !== void 0 && { agentId: v.agentId ?? getAgentId() }
619
+ });
620
+ return textResponse({
621
+ saved: id,
622
+ ...localFallbackNotice(kvInstance.persist())
498
623
  });
499
- kvInstance.persist();
500
- return textResponse({ saved: id });
501
624
  }
502
625
  case "memory_recall":
503
626
  case "memory_smart_search": {
627
+ const isolated = isAgentScopeIsolated();
628
+ const agentId = v.agentId === "*" ? void 0 : v.agentId ?? (isolated ? getAgentId() : void 0);
629
+ if (isolated && v.agentId !== "*" && !agentId) throw new Error("AGENTMEMORY_AGENT_SCOPE=isolated requires an agentId; pass '*' to read across agents");
504
630
  const query = (v.query || "").toLowerCase();
505
631
  const limit = v.limit ?? DEFAULT_LIMIT;
632
+ const all = v.targetLayer === "observation" ? [] : await kvInstance.list("mem:memories");
633
+ const sessions = v.project || v.cwd ? await kvInstance.list("mem:sessions") : [];
634
+ const sessionsById = new Map(sessions.map((session) => [session.id, session]));
635
+ const scoped = all.filter((memory) => {
636
+ if (memory.isLatest === false || agentId && memory.agentId !== agentId) return false;
637
+ const linkedSessions = (memory.sessionIds ?? []).map((id) => sessionsById.get(id));
638
+ if (v.project && (memory.project ? memory.project !== v.project : !linkedSessions.some((session) => session?.project === v.project))) return false;
639
+ if (v.cwd && !linkedSessions.some((session) => session?.cwd === v.cwd)) return false;
640
+ return true;
641
+ });
642
+ if (v.tool === "memory_smart_search" && v.expandIds?.length) {
643
+ const ids = v.expandIds.map((entry) => typeof entry === "string" ? entry : entry.obsId);
644
+ const byId = new Map(scoped.map((memory) => [memory.id, memory]));
645
+ const eligible = ids.filter((id) => byId.has(id));
646
+ return textResponse({
647
+ mode: "expanded",
648
+ results: eligible.slice(0, 20).map((id) => {
649
+ const observation = memoryToObservation(byId.get(id));
650
+ return {
651
+ obsId: id,
652
+ sessionId: observation.sessionId,
653
+ observation,
654
+ layer: "memory"
655
+ };
656
+ }),
657
+ truncated: eligible.length > 20
658
+ }, true);
659
+ }
660
+ const results = scoped.filter((memory) => {
661
+ const text = [
662
+ memory.title,
663
+ memory.content,
664
+ ...memory.files ?? [],
665
+ ...memory.concepts ?? [],
666
+ ...memory.sessionIds ?? [],
667
+ memory.id
668
+ ].join(" ").toLowerCase();
669
+ return query.split(/\s+/).every((word) => text.includes(word));
670
+ }).slice(0, limit);
671
+ if (v.tool === "memory_recall") return textResponse(buildRecallResponse(results.map((memory) => {
672
+ const observation = memoryToObservation(memory);
673
+ return {
674
+ sessionId: observation.sessionId,
675
+ observation,
676
+ score: 1,
677
+ layer: "memory"
678
+ };
679
+ }), v.format ?? "full", v.tokenBudget), true);
506
680
  return textResponse({
507
681
  mode: "compact",
508
- results: (await kvInstance.list("mem:memories")).filter((m) => {
509
- const text = [
510
- typeof m["title"] === "string" ? m["title"] : "",
511
- typeof m["content"] === "string" ? m["content"] : "",
512
- Array.isArray(m["files"]) ? m["files"].join(" ") : "",
513
- Array.isArray(m["concepts"]) ? m["concepts"].join(" ") : "",
514
- Array.isArray(m["sessionIds"]) ? m["sessionIds"].join(" ") : "",
515
- typeof m["id"] === "string" ? m["id"] : ""
516
- ].join(" ").toLowerCase();
517
- return query.split(/\s+/).every((word) => text.includes(word));
518
- }).slice(0, limit)
682
+ results: results.map((memory) => ({
683
+ ...memory,
684
+ obsId: memory.id,
685
+ sessionId: memory.sessionIds?.[0] ?? "memory",
686
+ layer: "memory"
687
+ }))
519
688
  }, true);
520
689
  }
521
690
  case "memory_sessions": {
522
- const sessions = await kvInstance.list("mem:sessions");
523
- const limit = v.limit ?? 20;
524
- return textResponse({ sessions: sessions.slice(0, limit) }, true);
691
+ const query = v.sessionQuery;
692
+ const agentId = query.agentId === "*" ? void 0 : query.agentId ?? (isAgentScopeIsolated() ? getAgentId() : void 0);
693
+ const sessions = (await kvInstance.list("mem:sessions")).filter((session) => session && typeof session.id === "string" && session.id.length > 0).filter((session) => !query.project || session.project === query.project).filter((session) => !agentId || session.agentId === agentId);
694
+ const key = (session) => session.startedAt || "";
695
+ const { page, nextCursor } = pageAfterCursor(sortByKeyDesc(sessions, key, (session) => session.id), key, (session) => session.id, query.cursor, Number(query.limit));
696
+ return textResponse({
697
+ sessions: await Promise.all(page.map(async (session) => {
698
+ const summary = await kvInstance.get("mem:summaries", session.id);
699
+ return summary ? {
700
+ ...session,
701
+ summary
702
+ } : session;
703
+ })),
704
+ nextCursor
705
+ }, true);
525
706
  }
526
707
  case "memory_governance_delete": {
527
708
  let deleted = 0;
@@ -529,11 +710,12 @@ async function handleLocal(v, kvInstance) {
529
710
  await kvInstance.delete("mem:memories", id);
530
711
  deleted++;
531
712
  }
532
- kvInstance.persist();
713
+ const persisted = kvInstance.persist();
533
714
  return textResponse({
534
715
  deleted,
535
716
  requested: (v.memoryIds || []).length,
536
- reason: v.reason
717
+ reason: v.reason,
718
+ ...localFallbackNotice(persisted)
537
719
  });
538
720
  }
539
721
  case "memory_export": return textResponse({
@@ -541,11 +723,7 @@ async function handleLocal(v, kvInstance) {
541
723
  memories: await kvInstance.list("mem:memories"),
542
724
  sessions: await kvInstance.list("mem:sessions")
543
725
  }, true);
544
- case "memory_audit": {
545
- const entries = await kvInstance.list("mem:audit");
546
- const limit = v.limit ?? 50;
547
- return textResponse({ entries: entries.slice(0, limit) }, true);
548
- }
726
+ case "memory_audit": return textResponse(await queryAudit(kvInstance, { limit: v.limit ?? 50 }), true);
549
727
  default: throw new Error(`Unknown tool: ${v.tool}`);
550
728
  }
551
729
  }
@@ -577,6 +755,10 @@ async function handleToolCall(toolName, args, kvInstance = kv) {
577
755
  if (handle.mode === "proxy") try {
578
756
  return await handleProxy(validated, handle);
579
757
  } catch (err) {
758
+ if (toolName === "memory_sessions" || isAuthenticationError(err) || isProxyRequired()) {
759
+ invalidateHandle();
760
+ throw err;
761
+ }
580
762
  process.stderr.write(`[@agentmemory/mcp] proxy call failed for ${toolName}: ${err instanceof Error ? err.message : String(err)}; invalidating handle and falling back to local KV\n`);
581
763
  invalidateHandle();
582
764
  }
@@ -597,10 +779,12 @@ async function handleToolsList() {
597
779
  if (debug) process.stderr.write(`[@agentmemory/mcp] tools/list: returning ${remote.tools.length} tools from server\n`);
598
780
  return { tools: remote.tools };
599
781
  }
782
+ if (isProxyRequired()) throw new Error("AgentMemory returned an invalid tool inventory");
600
783
  process.stderr.write(`[@agentmemory/mcp] tools/list: server returned unexpected shape (no .tools array); falling back to local IMPLEMENTED_TOOLS list. Set AGENTMEMORY_DEBUG=1 to inspect response.\n`);
601
784
  } catch (err) {
602
- process.stderr.write(`[@agentmemory/mcp] tools/list proxy failed: ${err instanceof Error ? err.message : String(err)}; falling back to local list\n`);
603
785
  invalidateHandle();
786
+ if (isAuthenticationError(err) || isProxyRequired()) throw err;
787
+ process.stderr.write(`[@agentmemory/mcp] tools/list proxy failed: ${err instanceof Error ? err.message : String(err)}; falling back to local list\n`);
604
788
  }
605
789
  const fallback = getAllTools().filter((t) => IMPLEMENTED_TOOLS.has(t.name));
606
790
  if (debug) process.stderr.write(`[@agentmemory/mcp] tools/list: returning ${fallback.length} local fallback tools (${fallback.map((t) => t.name).join(",")})\n`);
@@ -652,4 +836,4 @@ process.on("SIGTERM", () => {
652
836
  //#endregion
653
837
  export {};
654
838
 
655
- //# sourceMappingURL=standalone-BqNJDJ04.mjs.map
839
+ //# sourceMappingURL=standalone-BlqshyZ5.mjs.map