@romiluz/clawmongo 2026.3.26 → 2026.3.28

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 (507) hide show
  1. package/README.md +84 -49
  2. package/dist/{accounts-boH28BFM.js → accounts-lL2y51Ag.js} +46 -46
  3. package/dist/{acp-cli-DLaTb29R.js → acp-cli-BZvVHRY8.js} +46 -46
  4. package/dist/{action-runtime-Bk-7pvN2.js → action-runtime-DMYRUL4q.js} +10 -10
  5. package/dist/{actions.runtime-Y529miLb.js → actions.runtime-Bd-NMAq6.js} +46 -46
  6. package/dist/{actions.runtime-DVQ4pmcp.js → actions.runtime-gPSeXscW.js} +49 -49
  7. package/dist/{agent-scope-BROpmzKv.js → agent-scope-DXZH506l.js} +1 -1
  8. package/dist/{agents-DZqtbDMD.js → agents-Bt25bmDR.js} +13 -13
  9. package/dist/{agents-BbO-i90j.js → agents-CyJmttnS.js} +114 -114
  10. package/dist/{agents.config-CDS6iAat.js → agents.config-BWm70Hr6.js} +2 -2
  11. package/dist/{agents.config-iY500LY-.js → agents.config-UsCw0kOR.js} +4 -4
  12. package/dist/{audit-Cmj7BNcZ.js → audit-Dg8ZiJrJ.js} +9 -9
  13. package/dist/{audit-DmXeao7s.js → audit-DhXhWoiv.js} +1 -1
  14. package/dist/{audit-channel.collect.runtime-DhP09fjv.js → audit-channel.collect.runtime-CvPUHy1X.js} +2 -2
  15. package/dist/{audit-channel.runtime-C-watgwg.js → audit-channel.runtime-B6ZnOPFc.js} +46 -46
  16. package/dist/{audit-extra.async-B-7dzgcz.js → audit-extra.async-826UZZhJ.js} +3 -3
  17. package/dist/{audit-membership-runtime-CbLi3-5b.js → audit-membership-runtime-DLQrV7Rr.js} +46 -46
  18. package/dist/{audit.deep.runtime-D5VgrTOT.js → audit.deep.runtime-DQDtV7Bc.js} +4 -4
  19. package/dist/{audit.nondeep.runtime-B7M0-7FZ.js → audit.nondeep.runtime-H6B-2xal.js} +4 -4
  20. package/dist/{audit.runtime-BUknqGaP.js → audit.runtime-D2ZRC2A_.js} +47 -47
  21. package/dist/{auth-choice-DfJRosb4.js → auth-choice-CEowrO66.js} +57 -57
  22. package/dist/{auth-choice-CpB99A-L.js → auth-choice-DiufM1b8.js} +55 -55
  23. package/dist/{auth-choice-Bnnngmkx.js → auth-choice-YrGxwB9A.js} +5 -5
  24. package/dist/{auth-choice-options-DvqJHFOp.js → auth-choice-options-n3_uFdT5.js} +2 -2
  25. package/dist/{auth-choice-prompt-DtTjWfPT.js → auth-choice-prompt-DYFzoWa6.js} +50 -50
  26. package/dist/{auth-choice-prompt-Cxz8du6E.js → auth-choice-prompt-sLET2Bkw.js} +1 -1
  27. package/dist/{auth-choice.apply-helpers-Bm5p2ZX7.js → auth-choice.apply-helpers-GU6nZntg.js} +1 -1
  28. package/dist/{auth-choice.plugin-providers.runtime-Dsu6-vb8.js → auth-choice.plugin-providers.runtime-BNqOEEtb.js} +47 -47
  29. package/dist/{auth-profiles-2-OV37OF.js → auth-profiles-BWBQJ6X_.js} +67 -76
  30. package/dist/{auth-profiles.runtime-HcQMBs3K.js → auth-profiles.runtime-DfKRAmQR.js} +46 -46
  31. package/dist/{backend-config-avgzgS5Z.js → backend-config--L236wE2.js} +26 -1
  32. package/dist/{backup-create-B9F0M7-J.js → backup-create-Bll6DgoT.js} +2 -2
  33. package/dist/{base-session-key-DyLtSGkj.js → base-session-key-CA4SoGLF.js} +1 -1
  34. package/dist/{bluebubbles-BTR7u4zE.js → bluebubbles-BsX68JOY.js} +6 -6
  35. package/dist/{browser-cli-tmytvFaa.js → browser-cli-B5euA0cQ.js} +8 -8
  36. package/dist/build-info.json +3 -3
  37. package/dist/bundled/boot-md/handler.js +46 -46
  38. package/dist/bundled/bootstrap-extra-files/handler.js +1 -1
  39. package/dist/bundled/session-memory/handler.js +47 -47
  40. package/dist/{call-Cqem-bCB.js → call-C-_XQxw5.js} +1 -1
  41. package/dist/{call-CxVOiYz-.js → call-lPTaDgAg.js} +6 -6
  42. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  43. package/dist/{channel-Br8MF00M.js → channel-5o-oIU2B.js} +1 -1
  44. package/dist/{channel-BvRm4jSj.js → channel-C1zZg_8b.js} +2 -2
  45. package/dist/{channel-CqkxOhz2.js → channel-CEytBPH-.js} +4 -4
  46. package/dist/{channel-D_h7IfYK.js → channel-Cm65A1lo.js} +7 -7
  47. package/dist/{channel-ngZRDeE3.js → channel-D4K0MVgr.js} +5 -5
  48. package/dist/{channel-account-context-DZhZw4oo.js → channel-account-context-CNZZPDSe.js} +1 -1
  49. package/dist/{channel-plugin-resolution-CXm5HIcm.js → channel-plugin-resolution-WWO690RK.js} +3 -3
  50. package/dist/{channel-reply-pipeline-DdDsf-Lc.js → channel-reply-pipeline-B17-tBLU.js} +1 -1
  51. package/dist/{channel-shared-VIRIADYn.js → channel-shared-RH6YsZ0I.js} +1 -1
  52. package/dist/{channel-summary-BTJxLPN8.js → channel-summary-Cy7WDRjQ.js} +7 -7
  53. package/dist/{channel-summary-DdJtHlvH.js → channel-summary-DV4_b3HZ.js} +2 -2
  54. package/dist/{channel-tFDEkWt9.js → channel-yCiI29Ju.js} +6 -6
  55. package/dist/{channel.runtime-DGnRryi2.js → channel.runtime-C3m1vacV.js} +47 -47
  56. package/dist/{channel.runtime-CdPEA_wb.js → channel.runtime-CUSE7Dn0.js} +47 -47
  57. package/dist/{channel.runtime-0n3_Hz_Y.js → channel.runtime-CtWi36oj.js} +49 -49
  58. package/dist/{channel.runtime-CkHcsWQ3.js → channel.runtime-LUpQZiWg.js} +49 -49
  59. package/dist/{channel.runtime-msXRrVzC.js → channel.runtime-QOkM4mJV.js} +51 -51
  60. package/dist/{channel.runtime-khqV1QRG.js → channel.runtime-rYuUs2po.js} +4 -4
  61. package/dist/{channels-DNza27NY.js → channels-4VTbN2Gt.js} +103 -103
  62. package/dist/{channels-CLZoq3SY.js → channels-BUMnLXLQ.js} +1 -1
  63. package/dist/{channels-cli-Bhsnjsix.js → channels-cli-BYmLj8zw.js} +55 -55
  64. package/dist/{clawbot-cli-9YJNF9pF.js → clawbot-cli-CIYY1u-6.js} +47 -47
  65. package/dist/cli/daemon-cli.js +1 -1
  66. package/dist/{cli-FF5823nM.js → cli-DUA0FvhM.js} +46 -46
  67. package/dist/{command-registry-Dw-TONf0.js → command-registry-B1ECZip_.js} +13 -13
  68. package/dist/{command-registry-TeN0aKPi.js → command-registry-DOAwIs0Y.js} +2 -2
  69. package/dist/{command-secret-gateway-CzHSHmXG.js → command-secret-gateway-Big-n6JY.js} +46 -46
  70. package/dist/{compact.runtime-Bye-pm7Z.js → compact.runtime-BKnPPv9X.js} +46 -46
  71. package/dist/{completion-cli-D08RAGPz.js → completion-cli-BeLNvVTI.js} +3 -3
  72. package/dist/{completion-cli-C0mwyiAb.js → completion-cli-CHwHDPuI.js} +2 -2
  73. package/dist/{config-Ca7pLyBD.js → config-BOWZMmDA.js} +1 -1
  74. package/dist/{config-GKOWhVMv.js → config-C68iwvDj.js} +5 -5
  75. package/dist/{config-cli-CxPspN-S.js → config-cli-BnC336Lu.js} +48 -48
  76. package/dist/{config-guard-BK2hWyPi.js → config-guard-Bn6rZnzK.js} +6 -6
  77. package/dist/{config-validation-DO6o_Kt_.js → config-validation-BBuJZ-WH.js} +2 -2
  78. package/dist/{configure-CODqvxU-.js → configure-CHJDsjOD.js} +120 -120
  79. package/dist/{configure-Dg65gBEw.js → configure-Cctw7tyJ.js} +19 -23
  80. package/dist/{connection-auth-zhL6PVn0.js → connection-auth-C2XaPpF5.js} +1 -1
  81. package/dist/{control-ui-shared-_VwcOcc_.js → control-ui-shared-BC-g150y.js} +1 -1
  82. package/dist/{core-CzwQmKcn.js → core-Cb3XxL6S.js} +1 -1
  83. package/dist/{cron-cli-Dp_EQt2v.js → cron-cli-C10feOtH.js} +7 -7
  84. package/dist/{daemon-cli-Dgpv6Y0R.js → daemon-cli-Ds8mu2VZ.js} +4 -4
  85. package/dist/{daemon-install-Dq1Ix-FO.js → daemon-install-B__sP_7j.js} +49 -49
  86. package/dist/{delegate-BVapk4rY.js → delegate-ByCLviVI.js} +1 -1
  87. package/dist/{deliver-runtime-DPzMjhNU.js → deliver-Co7G5ubS.js} +46 -46
  88. package/dist/{deliver-C32Gg-xU.js → deliver-runtime-2svrtAf1.js} +46 -46
  89. package/dist/{devices-cli-3WN_wB1C.js → devices-cli-CH8nWgcU.js} +6 -6
  90. package/dist/{diagnostic-BbXfhLMi.js → diagnostic-DHTG43d_.js} +1 -1
  91. package/dist/{directory-cli-D_5BYdXm.js → directory-cli-B0REFlKo.js} +48 -48
  92. package/dist/{directory.static-CsajbHw1.js → directory.static-wnw_R8dE.js} +1 -1
  93. package/dist/{discord-C-4y9vOT.js → discord-Cws9MsXn.js} +4 -4
  94. package/dist/{discord-B3mmVXuG.js → discord-b8Ff_BKB.js} +46 -46
  95. package/dist/{dns-cli-CdAnUzRi.js → dns-cli-aRTleL5e.js} +5 -5
  96. package/dist/{doctor-completion-BnqTtLhL.js → doctor-completion-KQWBMnEi.js} +1 -1
  97. package/dist/{doctor-config-preflight-BJ0lGLTO.js → doctor-config-preflight-BDYe5di1.js} +2 -2
  98. package/dist/{doctor-config-preflight-D32oVOWD.js → doctor-config-preflight-Dn5a_Dbr.js} +6 -6
  99. package/dist/{doctor-state-migrations-BklDIib1.js → doctor-state-migrations-BI6HzFyq.js} +47 -47
  100. package/dist/{doctor-state-migrations-Cdk3ep_f.js → doctor-state-migrations-DUPe9zNr.js} +2 -2
  101. package/dist/entry.js +1 -1
  102. package/dist/{exec-approvals-D8OOtgGc.js → exec-approvals-CZz2LqIW.js} +1 -1
  103. package/dist/{exec-approvals-cli-dGISWHE3.js → exec-approvals-cli-KbFpgd-p.js} +9 -9
  104. package/dist/extensionAPI.js +46 -46
  105. package/dist/extensions/amazon-bedrock/index.js +46 -46
  106. package/dist/extensions/anthropic/index.js +46 -46
  107. package/dist/extensions/bluebubbles/index.js +50 -50
  108. package/dist/extensions/bluebubbles/setup-entry.js +48 -48
  109. package/dist/extensions/byteplus/index.js +46 -46
  110. package/dist/extensions/chutes/index.js +48 -48
  111. package/dist/extensions/cloudflare-ai-gateway/index.js +47 -47
  112. package/dist/extensions/device-pair/index.js +46 -46
  113. package/dist/extensions/discord/index.js +48 -48
  114. package/dist/extensions/discord/node_modules/.package-lock.json +3 -3
  115. package/dist/extensions/discord/node_modules/hono/dist/adapter/service-worker/index.js +1 -3
  116. package/dist/extensions/discord/node_modules/hono/dist/cjs/adapter/service-worker/index.js +1 -3
  117. package/dist/extensions/discord/node_modules/hono/dist/cjs/helper/ssg/ssg.js +1 -1
  118. package/dist/extensions/discord/node_modules/hono/dist/cjs/middleware/cors/index.js +5 -2
  119. package/dist/extensions/discord/node_modules/hono/dist/cjs/request.js +1 -1
  120. package/dist/extensions/discord/node_modules/hono/dist/helper/ssg/ssg.js +1 -1
  121. package/dist/extensions/discord/node_modules/hono/dist/middleware/cors/index.js +5 -2
  122. package/dist/extensions/discord/node_modules/hono/dist/request.js +1 -1
  123. package/dist/extensions/discord/node_modules/hono/dist/tsconfig.build.tsbuildinfo +1 -1
  124. package/dist/extensions/discord/node_modules/hono/dist/types/client/index.d.ts +1 -1
  125. package/dist/extensions/discord/node_modules/hono/dist/types/client/types.d.ts +20 -0
  126. package/dist/extensions/discord/node_modules/hono/dist/types/request.d.ts +1 -3
  127. package/dist/extensions/discord/node_modules/hono/package.json +1 -1
  128. package/dist/extensions/discord/setup-entry.js +48 -48
  129. package/dist/extensions/elevenlabs/index.js +46 -46
  130. package/dist/extensions/fal/index.js +46 -46
  131. package/dist/extensions/feishu/index.js +55 -55
  132. package/dist/extensions/feishu/setup-entry.js +51 -51
  133. package/dist/extensions/firecrawl/index.js +46 -46
  134. package/dist/extensions/github-copilot/index.js +47 -47
  135. package/dist/extensions/google/index.js +46 -46
  136. package/dist/extensions/huggingface/index.js +47 -47
  137. package/dist/extensions/imessage/index.js +49 -49
  138. package/dist/extensions/imessage/setup-entry.js +49 -49
  139. package/dist/extensions/irc/index.js +49 -49
  140. package/dist/extensions/irc/setup-entry.js +48 -48
  141. package/dist/extensions/kilocode/index.js +47 -47
  142. package/dist/extensions/kimi-coding/index.js +47 -47
  143. package/dist/extensions/line/index.js +9 -9
  144. package/dist/extensions/line/setup-entry.js +8 -8
  145. package/dist/extensions/llm-task/index.js +46 -46
  146. package/dist/extensions/lobster/index.js +5 -5
  147. package/dist/extensions/mattermost/index.js +49 -49
  148. package/dist/extensions/mattermost/setup-entry.js +48 -48
  149. package/dist/extensions/microsoft/index.js +46 -46
  150. package/dist/extensions/minimax/index.js +48 -48
  151. package/dist/extensions/mistral/index.js +47 -47
  152. package/dist/extensions/modelstudio/index.js +47 -47
  153. package/dist/extensions/moonshot/index.js +46 -46
  154. package/dist/extensions/nextcloud-talk/index.js +50 -50
  155. package/dist/extensions/nextcloud-talk/setup-entry.js +49 -49
  156. package/dist/extensions/ollama/index.js +5 -5
  157. package/dist/extensions/openai/index.js +47 -47
  158. package/dist/extensions/opencode/index.js +47 -47
  159. package/dist/extensions/opencode-go/index.js +47 -47
  160. package/dist/extensions/openrouter/index.js +47 -47
  161. package/dist/extensions/openshell/index.js +46 -46
  162. package/dist/extensions/qianfan/index.js +47 -47
  163. package/dist/extensions/qwen-portal-auth/index.js +47 -47
  164. package/dist/extensions/sglang/index.js +46 -46
  165. package/dist/extensions/signal/index.js +49 -49
  166. package/dist/extensions/signal/setup-entry.js +49 -49
  167. package/dist/extensions/slack/index.js +50 -50
  168. package/dist/extensions/slack/setup-entry.js +50 -50
  169. package/dist/extensions/synology-chat/index.js +9 -9
  170. package/dist/extensions/synology-chat/setup-entry.js +8 -8
  171. package/dist/extensions/synthetic/index.js +47 -47
  172. package/dist/extensions/talk-voice/index.js +46 -46
  173. package/dist/extensions/tavily/index.js +46 -46
  174. package/dist/extensions/telegram/index.js +48 -48
  175. package/dist/extensions/telegram/setup-entry.js +48 -48
  176. package/dist/extensions/together/index.js +47 -47
  177. package/dist/extensions/venice/index.js +47 -47
  178. package/dist/extensions/vercel-ai-gateway/index.js +47 -47
  179. package/dist/extensions/vllm/index.js +46 -46
  180. package/dist/extensions/voice-call/index.js +46 -46
  181. package/dist/extensions/volcengine/index.js +46 -46
  182. package/dist/extensions/xai/index.js +46 -46
  183. package/dist/extensions/xiaomi/index.js +47 -47
  184. package/dist/extensions/zai/index.js +47 -47
  185. package/dist/extensions/zalo/index.js +49 -49
  186. package/dist/extensions/zalo/setup-entry.js +48 -48
  187. package/dist/{feishu-C637DYYe.js → feishu-D2fuiOiy.js} +4 -4
  188. package/dist/{gateway-cli-Cuk9d7J2.js → gateway-cli-nOgyXtih.js} +72 -106
  189. package/dist/{gateway-install-token-DlcVm1rP.js → gateway-install-token-nvsTK8KN.js} +4 -4
  190. package/dist/{gateway-rpc-siKa8KpM.js → gateway-rpc-DrH142-v.js} +1 -1
  191. package/dist/{gateway-runtime-roiTaOKO.js → gateway-runtime-CQXKGzrv.js} +2 -2
  192. package/dist/{github-copilot-auth-DJljh3gq.js → github-copilot-auth-C4z2AAd8.js} +3 -3
  193. package/dist/{health-DU_pBiid.js → health-DEgLPyA9.js} +7 -7
  194. package/dist/{health-B1OK1kJg.js → health-H5nbiXvA.js} +48 -48
  195. package/dist/{heartbeat-summary-CMwt9qam.js → heartbeat-summary-CNCptWmA.js} +1 -1
  196. package/dist/{hooks-cli-D42hQEUb.js → hooks-cli-jBhsJaOg.js} +46 -46
  197. package/dist/{identity-file-8MUyIAOy.js → identity-file-CYQnH12I.js} +1 -1
  198. package/dist/{imessage-zqZjecTU.js → imessage-DYqgZpLc.js} +6 -6
  199. package/dist/{imessage-CZb_pS8U.js → imessage-Dau6WdE3.js} +46 -46
  200. package/dist/{inbound-reply-dispatch-B73AkQh4.js → inbound-reply-dispatch-BFE3xy1S.js} +2 -2
  201. package/dist/index.js +2 -2
  202. package/dist/{internal-Bg_k56Pk.js → internal-DLE9baj7.js} +0 -24
  203. package/dist/{io-DE9vm7Eo.js → io-Du0b8gMO.js} +2 -2
  204. package/dist/{io-B7rO2wud.js → io-dJgqp8U8.js} +4 -4
  205. package/dist/{irc-BWzsfr2V.js → irc-BRaOVUse.js} +2 -2
  206. package/dist/{kb-cli-BOPGkNfJ.js → kb-cli-Cdif_vwn.js} +12 -12
  207. package/dist/{library-i-2ymInt.js → library-BwjFIWw3.js} +46 -46
  208. package/dist/{lifecycle-core-DwIo1PfK.js → lifecycle-core-DNO4MItg.js} +1 -1
  209. package/dist/line/send.js +6 -6
  210. package/dist/{line-DbTKdVgY.js → line-BCXUGrVz.js} +2 -2
  211. package/dist/{llm-slug-generator-Dm30OM2W.js → llm-slug-generator-B55FZ1aG.js} +3 -3
  212. package/dist/llm-slug-generator.js +47 -47
  213. package/dist/{logging-BM4mQ53W.js → logging-BvOzg0cM.js} +1 -1
  214. package/dist/{logging-0tvlVvFG.js → logging-nWyKsj9d.js} +5 -5
  215. package/dist/{login-qr-DQPSabxI.js → login-qr-C0QA3j4x.js} +46 -46
  216. package/dist/{logs-cli-ZnHk5eku.js → logs-cli-thlXBA9n.js} +7 -7
  217. package/dist/{manager.runtime-D3vjUOZF.js → manager.runtime-SoTq-tT4.js} +46 -46
  218. package/dist/{matrix-migration-snapshot-CRKiHq6Y.js → matrix-migration-snapshot-_6Rg-iLO.js} +2 -2
  219. package/dist/{mattermost-Bqn7Fd5U.js → mattermost-2nv5O_jQ.js} +2 -2
  220. package/dist/{mcp-cli-7aN2vJv-.js → mcp-cli-1vpy_yti.js} +5 -5
  221. package/dist/{mcp-config-NVrqojpu.js → mcp-config-Bmi2GUum.js} +1 -1
  222. package/dist/{media-understanding.runtime-DesF8Xhs.js → media-understanding.runtime-Wh-_SFK_.js} +46 -46
  223. package/dist/{memory-cli-CWqIJQS5.js → memory-cli-COJRHkaJ.js} +46 -46
  224. package/dist/{memory-search-DyxoUpq2.js → memory-search-CGmdrdM1.js} +1 -1
  225. package/dist/{memory-search-CgoWYj0V.js → memory-search-Cy36nO15.js} +3 -3
  226. package/dist/{model-picker-DX9P5pDr.js → model-picker-CYWvoS3z.js} +48 -48
  227. package/dist/{model-picker-Ds7-VqDS.js → model-picker-_32ihKqK.js} +4 -4
  228. package/dist/{model-picker.runtime-DqDt4s3S.js → model-picker.runtime-DBT5uEFi.js} +49 -49
  229. package/dist/{model-selection-DXFVauys.js → model-selection-014eeYCV.js} +1 -1
  230. package/dist/{model-suppression.runtime-8mU0VJs6.js → model-suppression.runtime-GTI9Rm85.js} +46 -46
  231. package/dist/{models-GXQSWyBX.js → models-Be9EWpVm.js} +54 -54
  232. package/dist/{models-CVG-VMBa.js → models-CX35daXC.js} +14 -14
  233. package/dist/{models-cli-Cvy8rGqU.js → models-cli-BYjac3oq.js} +54 -54
  234. package/dist/{models-config-BdanqM9X.js → models-config-Agv-ThDH.js} +46 -46
  235. package/dist/{models-config.providers.discovery-BHZ3WglC.js → models-config.providers.discovery-BJwjDHsg.js} +1 -1
  236. package/dist/{mongodb-analytics-BszyEhsq.js → mongodb-analytics-HJKYeseb.js} +2 -2
  237. package/dist/{mongodb-analytics-CcSYo_ae.js → mongodb-analytics-mnKJih5x.js} +1 -1
  238. package/dist/{mongodb-auto-setup-QcwgZSN9.js → mongodb-auto-setup-CCElSwNy.js} +2 -2
  239. package/dist/{mongodb-kb-C-VmGOq7.js → mongodb-kb-1tSOXXb9.js} +3 -3
  240. package/dist/{mongodb-kb-BotgVda9.js → mongodb-kb-CdSvNe3w.js} +2 -2
  241. package/dist/{mongodb-kb-search-CoIAFX8n.js → mongodb-kb-search-Dq6E746K.js} +1 -1
  242. package/dist/{mongodb-kb-search-BBYY_d_r.js → mongodb-kb-search-DvsXIUy6.js} +3 -3
  243. package/dist/{mongodb-manager-BVfTfpHf.js → mongodb-manager-DEZIQXuo.js} +10 -10
  244. package/dist/{mongodb-manager-BJ0PAYF_.js → mongodb-manager-NkerSpvH.js} +1183 -331
  245. package/dist/{mongodb-procedures-DNPmmW5r.js → mongodb-procedures-DI-_Dakz.js} +7 -3
  246. package/dist/{mongodb-procedures-D3M2Ph8E.js → mongodb-procedures-tjhGdBV7.js} +3 -3
  247. package/dist/{mongodb-schema-JpDXcAUV.js → mongodb-schema-DN3aspLa.js} +1 -1
  248. package/dist/{mongodb-schema-BI4Ze_ZV.js → mongodb-schema-Dt6jxcPL.js} +298 -4
  249. package/dist/{mongodb-search-VFKd72IZ.js → mongodb-search-DMsUyfpa.js} +2 -2
  250. package/dist/{mongodb-structured-memory-DnwUJ6SA.js → mongodb-structured-memory-D-3SEfTu.js} +58 -2
  251. package/dist/{mongodb-structured-memory-BySGexcm.js → mongodb-structured-memory-lpyyW0kn.js} +3 -3
  252. package/dist/{monitor-DGE0bx3s.js → monitor-BZFy1RTb.js} +47 -47
  253. package/dist/{monitor-Dfc0KXMD.js → monitor-DPYGxeY_.js} +5 -5
  254. package/dist/{monitor-CZZlkQUU.js → monitor-Duykki-j.js} +51 -51
  255. package/dist/{monitor-B61bVnMW.js → monitor-gq31SALd.js} +8 -8
  256. package/dist/{nextcloud-talk-CnwOv1rG.js → nextcloud-talk-C_-LfGeq.js} +2 -2
  257. package/dist/{node-cli-Avub0RKe.js → node-cli-NpJzvfQW.js} +12 -12
  258. package/dist/{nodes-cli-qSE-cmgX.js → nodes-cli-O5HciXeP.js} +10 -10
  259. package/dist/{nodes-screen-DQw8F5rA.js → nodes-screen-BIwiB35h.js} +1 -1
  260. package/dist/{oauth.runtime-825pMCgB.js → oauth.runtime-BxjW8DFO.js} +46 -46
  261. package/dist/{oauth.runtime-BCwH9-Yl.js → oauth.runtime-DKU2STuA.js} +46 -46
  262. package/dist/{oauth.runtime-BSddaUzc.js → oauth.runtime-mFizWM72.js} +46 -46
  263. package/dist/{onboard-CUbnVxXL.js → onboard-B6H0qDtg.js} +1 -1
  264. package/dist/{onboard-BwC0LbCx.js → onboard-C1AmXQ6f.js} +8 -8
  265. package/dist/{onboard-Cw65XmEU.js → onboard-DPdj0IBu.js} +2 -2
  266. package/dist/{onboard-channels-BYNDTtRI.js → onboard-channels-Cmj_5qXQ.js} +24 -24
  267. package/dist/{onboard-channels-CIR1ZSii.js → onboard-channels-Wf3nY9Bf.js} +97 -97
  268. package/dist/{onboard-custom-FImARgQC.js → onboard-custom-DILgXkiq.js} +50 -50
  269. package/dist/{onboard-custom-C4qOVxtG.js → onboard-custom-DlDCjvIw.js} +4 -4
  270. package/dist/{onboard-helpers-DW9Mskds.js → onboard-helpers-CqpD9TVU.js} +48 -48
  271. package/dist/{onboard-helpers-D3xV_T96.js → onboard-helpers-D-PLdtHT.js} +3 -3
  272. package/dist/{onboard-hooks-B0gJVtBY.js → onboard-hooks-MQ8QOguv.js} +2 -2
  273. package/dist/{onboard-remote-BMLo6WKH.js → onboard-remote-BZKWgKVw.js} +50 -50
  274. package/dist/{onboard-remote-XUah3N3G.js → onboard-remote-Bnad5LMv.js} +2 -2
  275. package/dist/{onboard-search-DHCzqxgq.js → onboard-search-Dyv1IuQ4.js} +46 -46
  276. package/dist/{onboard-skills-LXCIpyir.js → onboard-skills-DdCu1_hE.js} +1 -1
  277. package/dist/{onboard-skills-CH6q90Pf.js → onboard-skills-W_252asS.js} +49 -49
  278. package/dist/{onboarding-memory-BWEsBe08.js → onboarding-memory-BRHSmwx3.js} +24 -15
  279. package/dist/{outbound-media-CqfP0r4a.js → outbound-media-CHc08Sj8.js} +1 -1
  280. package/dist/{pairing-cli-BdCkQG2S.js → pairing-cli-oNWkjwCt.js} +5 -5
  281. package/dist/{persistent-dedupe-DNnh7hrR.js → persistent-dedupe-CS_uyVoq.js} +1 -1
  282. package/dist/{pi-model-discovery-runtime-DyT9C3Ap.js → pi-model-discovery-runtime-BJVREOXf.js} +46 -46
  283. package/dist/{pi-tools.before-tool-call.runtime-CA2js1Ig.js → pi-tools.before-tool-call.runtime-w-Q4HA_S.js} +6 -6
  284. package/dist/{plugin-install-DgvJfz7X.js → plugin-install-BysMw7Sl.js} +47 -47
  285. package/dist/{plugin-install-BKuy_--2.js → plugin-install-EyES0vGP.js} +2 -2
  286. package/dist/{plugin-registry-D-6OBqUU.js → plugin-registry-BenF9SYR.js} +47 -47
  287. package/dist/{plugin-registry-Dsx_6z3N.js → plugin-registry-CRV_Bc8K.js} +3 -3
  288. package/dist/plugin-sdk/account-resolution.js +46 -46
  289. package/dist/plugin-sdk/acp-runtime.js +46 -46
  290. package/dist/plugin-sdk/agent-runtime.js +46 -46
  291. package/dist/plugin-sdk/channel-inbound.js +46 -46
  292. package/dist/plugin-sdk/channel-reply-pipeline.js +3 -3
  293. package/dist/plugin-sdk/channel-runtime.js +46 -46
  294. package/dist/plugin-sdk/channel-setup.js +1 -1
  295. package/dist/plugin-sdk/command-auth.js +46 -46
  296. package/dist/plugin-sdk/compat.js +5 -5
  297. package/dist/plugin-sdk/config-runtime.js +46 -46
  298. package/dist/plugin-sdk/conversation-runtime.js +46 -46
  299. package/dist/plugin-sdk/core.js +5 -5
  300. package/dist/plugin-sdk/directory-runtime.js +1 -1
  301. package/dist/plugin-sdk/discord.js +46 -46
  302. package/dist/plugin-sdk/gateway-runtime.js +8 -8
  303. package/dist/plugin-sdk/image-generation.js +46 -46
  304. package/dist/plugin-sdk/index.js +46 -46
  305. package/dist/plugin-sdk/infra-runtime.js +46 -46
  306. package/dist/plugin-sdk/llm-task.js +46 -46
  307. package/dist/plugin-sdk/matrix-runtime-heavy.js +50 -50
  308. package/dist/plugin-sdk/media-runtime.js +46 -46
  309. package/dist/plugin-sdk/media-understanding-runtime.js +46 -46
  310. package/dist/plugin-sdk/media-understanding.js +46 -46
  311. package/dist/plugin-sdk/ollama-setup.js +8 -8
  312. package/dist/plugin-sdk/plugin-runtime.js +46 -46
  313. package/dist/plugin-sdk/provider-auth-api-key.js +46 -46
  314. package/dist/plugin-sdk/provider-auth-login.js +1 -1
  315. package/dist/plugin-sdk/provider-auth.js +46 -46
  316. package/dist/plugin-sdk/provider-models.js +5 -5
  317. package/dist/plugin-sdk/provider-onboard.js +5 -5
  318. package/dist/plugin-sdk/provider-setup.js +49 -49
  319. package/dist/plugin-sdk/provider-stream.js +46 -46
  320. package/dist/plugin-sdk/provider-usage.js +4 -4
  321. package/dist/plugin-sdk/reply-history.js +3 -3
  322. package/dist/plugin-sdk/reply-runtime.js +46 -46
  323. package/dist/plugin-sdk/routing.js +3 -3
  324. package/dist/plugin-sdk/sandbox.js +46 -46
  325. package/dist/plugin-sdk/self-hosted-provider-setup.js +48 -48
  326. package/dist/plugin-sdk/setup-runtime.js +1 -1
  327. package/dist/plugin-sdk/setup.js +1 -1
  328. package/dist/plugin-sdk/speech-runtime.js +46 -46
  329. package/dist/plugin-sdk/speech.js +46 -46
  330. package/dist/plugin-sdk/src/agents/workspace.d.ts +1 -3
  331. package/dist/plugin-sdk/src/config/types.memory.d.ts +44 -0
  332. package/dist/plugin-sdk/src/memory/backend-config.d.ts +24 -0
  333. package/dist/plugin-sdk/src/memory/index.d.ts +12 -4
  334. package/dist/plugin-sdk/src/memory/mongodb-entity-extractor.d.ts +33 -0
  335. package/dist/plugin-sdk/src/memory/mongodb-episodes.d.ts +16 -0
  336. package/dist/plugin-sdk/src/memory/mongodb-events.d.ts +9 -0
  337. package/dist/plugin-sdk/src/memory/mongodb-graph.d.ts +30 -3
  338. package/dist/plugin-sdk/src/memory/mongodb-manager.d.ts +18 -0
  339. package/dist/plugin-sdk/src/memory/mongodb-mutations.d.ts +38 -0
  340. package/dist/plugin-sdk/src/memory/mongodb-procedures.d.ts +32 -0
  341. package/dist/plugin-sdk/src/memory/mongodb-profile.d.ts +71 -0
  342. package/dist/plugin-sdk/src/memory/mongodb-query-cache.d.ts +68 -0
  343. package/dist/plugin-sdk/src/memory/mongodb-query-rewriter.d.ts +39 -0
  344. package/dist/plugin-sdk/src/memory/mongodb-reranker.d.ts +32 -0
  345. package/dist/plugin-sdk/src/memory/mongodb-schema.d.ts +3 -0
  346. package/dist/plugin-sdk/src/memory/mongodb-telemetry.d.ts +69 -0
  347. package/dist/plugin-sdk/text-runtime.js +6 -6
  348. package/dist/plugin-sdk/web-media.js +3 -3
  349. package/dist/plugin-sdk/zalo.js +47 -47
  350. package/dist/plugin-sdk/zalouser.js +47 -47
  351. package/dist/plugins/build-smoke-entry.js +46 -46
  352. package/dist/plugins/runtime/index.js +46 -46
  353. package/dist/{plugins-cli-C6wGAkD9.js → plugins-cli-BUiP4x7l.js} +46 -46
  354. package/dist/{policy-CcgojW9R.js → policy-DnUfJkOZ.js} +1 -1
  355. package/dist/{preflight-audio.runtime-Cyz9Zu89.js → preflight-audio.runtime-D3_iaSgF.js} +46 -46
  356. package/dist/{probe-auth-BmluVNJZ.js → probe-auth-BbNdYwb0.js} +1 -1
  357. package/dist/{probe-auth-DrgTJ7ki.js → probe-auth-CB9y2dLl.js} +7 -7
  358. package/dist/{program-CHFcfOlC.js → program-uHYlUP3c.js} +4 -4
  359. package/dist/{prompt-select-styled-Ck38XMb3.js → prompt-select-styled-DoTAWghe.js} +25 -51
  360. package/dist/{provider-api-key-auth.runtime-AT16DTa8.js → provider-api-key-auth.runtime-B3H0dODg.js} +46 -46
  361. package/dist/{provider-auth-choice-UhIkLc6q.js → provider-auth-choice-HRfxXEHk.js} +6 -6
  362. package/dist/{provider-auth-choice-helpers-CXWmWOdR.js → provider-auth-choice-helpers-2jZnBKMm.js} +1 -1
  363. package/dist/{provider-auth-choice-preference-TgulgKlz.js → provider-auth-choice-preference-CqKryjBB.js} +6 -6
  364. package/dist/{provider-auth-choice.runtime-FTNgi8Yh.js → provider-auth-choice.runtime-BaFSZgQG.js} +48 -48
  365. package/dist/{provider-auth-choice.runtime-CP91b3vK.js → provider-auth-choice.runtime-DPHuj1_l.js} +2 -2
  366. package/dist/{provider-auth-choices-BfWvatIg.js → provider-auth-choices-CqFh00uK.js} +1 -1
  367. package/dist/{provider-auth-guidance-D4-q7IHl.js → provider-auth-guidance-DmdBoDfS.js} +2 -2
  368. package/dist/{provider-auth-input-DnQ-RiX5.js → provider-auth-input-FZYEJh19.js} +46 -46
  369. package/dist/{provider-auth-login-D7eLUZwy.js → provider-auth-login-B-XedaK5.js} +1 -1
  370. package/dist/{provider-auth-login.runtime-BG_qqxZk.js → provider-auth-login.runtime-f9dxfJUB.js} +49 -49
  371. package/dist/{provider-model-allowlist-CC0lIQ6w.js → provider-model-allowlist-C16pn0B8.js} +1 -1
  372. package/dist/{provider-models-DbK6xrje.js → provider-models-PaymKOme.js} +1 -1
  373. package/dist/{provider-ollama-setup-B4RWr9oj.js → provider-ollama-setup-k5ozCUi2.js} +3 -3
  374. package/dist/{provider-onboarding-config-W5sF0oD8.js → provider-onboarding-config-qCltsaVl.js} +1 -1
  375. package/dist/{provider-runtime.runtime-Cva8S4wx.js → provider-runtime.runtime-CzVe0WBb.js} +46 -46
  376. package/dist/{provider-self-hosted-setup-jAzqLaqv.js → provider-self-hosted-setup-zxYnIftX.js} +3 -3
  377. package/dist/{provider-usage-CEgSCMW4.js → provider-usage-C9KdAhuS.js} +46 -46
  378. package/dist/{provider-usage-CCIC3SdY.js → provider-usage-DexJNI_0.js} +1 -1
  379. package/dist/{provider-wizard-DQd5eYhX.js → provider-wizard-D4RbMR2D.js} +2 -2
  380. package/dist/{push-apns-DQN5pcl6.js → push-apns-BAc0-Jy5.js} +1 -1
  381. package/dist/{pw-ai-BiXz8un2.js → pw-ai-C8v0s5wH.js} +6 -6
  382. package/dist/{qr-cli-B8bBpCd2.js → qr-cli-BpqLcmYC.js} +47 -47
  383. package/dist/{qr-cli-DOuhqzho.js → qr-cli-D0zqiQMl.js} +4 -4
  384. package/dist/{reactions-BkyHqIw4.js → reactions-CjJbniYK.js} +1 -1
  385. package/dist/{read-only-account-inspect-Cfaj7PFb.js → read-only-account-inspect-CEJ1r7AW.js} +3 -3
  386. package/dist/{read-only-account-inspect.discord.runtime-kreMwVgq.js → read-only-account-inspect.discord.runtime-C1n8r_Kj.js} +46 -46
  387. package/dist/{read-only-account-inspect.slack.runtime-DgV5VZ-n.js → read-only-account-inspect.slack.runtime-DAOzA9ke.js} +46 -46
  388. package/dist/{read-only-account-inspect.telegram.runtime-BQaHHCIS.js → read-only-account-inspect.telegram.runtime-CfNlnogC.js} +46 -46
  389. package/dist/{redact-snapshot-PisBVQFW.js → redact-snapshot-qQFn3bz8.js} +3 -3
  390. package/dist/{register.agent-CXTssAWM.js → register.agent-DC5QbIE7.js} +114 -114
  391. package/dist/{register.backup-MRTb86c6.js → register.backup-BRxspFkM.js} +6 -6
  392. package/dist/{register.configure-BfE3p-3h.js → register.configure-B7zhRBla.js} +120 -120
  393. package/dist/{register.maintenance-D_Gn-ZDc.js → register.maintenance-CCmppLW1.js} +65 -65
  394. package/dist/{register.message-s1z2QSP2.js → register.message-DSBPJS4x.js} +47 -47
  395. package/dist/{register.onboard-Cd-OV7xm.js → register.onboard-C4D9pjf7.js} +54 -54
  396. package/dist/{register.setup-DclQVR9m.js → register.setup-C4pDa0HW.js} +52 -52
  397. package/dist/{register.status-health-sessions-D-Xp8ae7.js → register.status-health-sessions-ClxLTjC5.js} +55 -55
  398. package/dist/{register.subclis-pcAQ13jU.js → register.subclis-BauDruMA.js} +30 -30
  399. package/dist/{register.subclis-BCvQmGkr.js → register.subclis-WyYRaoa-.js} +1 -1
  400. package/dist/{replies-DQwDaTBP.js → replies-CZGcXYVE.js} +1 -1
  401. package/dist/{reply-history-DVLrt4Es.js → reply-history-1yT9Tzib.js} +1 -1
  402. package/dist/{routes-CBWjQBhD.js → routes-D8CYDLDF.js} +5 -5
  403. package/dist/{rpc-O719GSVf.js → rpc-D8I_Qzen.js} +1 -1
  404. package/dist/{run-main-C_W2kjf-.js → run-main-BwEbDjI-.js} +19 -19
  405. package/dist/{runtime-COpSaRtb.js → runtime-CmSMHqwN.js} +1 -1
  406. package/dist/{runtime-PbP8BVEV.js → runtime-DQaeo-1L.js} +2 -2
  407. package/dist/{runtime-discord-ops.runtime-CmStqYK4.js → runtime-discord-ops.runtime-8w-055sR.js} +46 -46
  408. package/dist/{runtime-slack-ops.runtime-Cm1935hR.js → runtime-slack-ops.runtime-XJJrByCY.js} +48 -48
  409. package/dist/{runtime-telegram-ops.runtime-CKozoVxf.js → runtime-telegram-ops.runtime-wOdrd2eH.js} +46 -46
  410. package/dist/{sandbox-cli-BIyJ-1r-.js → sandbox-cli-CvFmY6Kq.js} +46 -46
  411. package/dist/{search-manager-BVE1EPHv.js → search-manager-ZNiamJHa.js} +6 -6
  412. package/dist/{search-manager-DMTYqpmg.js → search-manager-zaZ4tAYz.js} +5 -5
  413. package/dist/{secrets-cli-CMMtWzst.js → secrets-cli-D5a_lvAP.js} +47 -47
  414. package/dist/{security-cli-Bw4cVkTN.js → security-cli-DJovxmST.js} +47 -47
  415. package/dist/{send-CfI8y11o.js → send-C3KhjjcU.js} +1 -1
  416. package/dist/{send-C8HDmafP.js → send-CIkS5fLj.js} +2 -2
  417. package/dist/{server-0n2tu0ff.js → server-B1z10Ohi.js} +6 -6
  418. package/dist/{server-node-events-J5-mGOea.js → server-node-events-D3_b2nU-.js} +47 -47
  419. package/dist/{server-startup-matrix-migration-CMBUtdN2.js → server-startup-matrix-migration-DDRaKUPQ.js} +3 -3
  420. package/dist/{session-cost-usage-CrPCO4HN.js → session-cost-usage-BwIud0lY.js} +46 -46
  421. package/dist/{sessions-n_Z6bcbr.js → sessions-B5Pffwj6.js} +3 -3
  422. package/dist/{sessions-BK_M3Nu1.js → sessions-ClamZkvP.js} +47 -47
  423. package/dist/{setup-OCrVlmv7.js → setup-B8gsbmH4.js} +18 -18
  424. package/dist/{setup-core-BVBCTInv.js → setup-core-B6csKf5s.js} +2 -2
  425. package/dist/{setup-core-z8Q1sgUU.js → setup-core-DkgiVKzw.js} +2 -2
  426. package/dist/{setup-entry-CvuaW-4I.js → setup-entry-C8XH3da9.js} +2 -2
  427. package/dist/{setup-entry-Jf6V23s6.js → setup-entry-CMSlnfft.js} +3 -3
  428. package/dist/{setup-entry-Bo3chgoG.js → setup-entry-CZVAwPKZ.js} +2 -2
  429. package/dist/{setup-entry-Co-YP41_.js → setup-entry-Duh-ewBV.js} +3 -3
  430. package/dist/{setup-entry-BnSZlMP1.js → setup-entry-ksUWY45r.js} +2 -2
  431. package/dist/{setup-entry-BNSYJMzp.js → setup-entry-vQgAuveW.js} +2 -2
  432. package/dist/{setup-group-access-BYV3O8yu.js → setup-group-access-CTlnq-M9.js} +1 -1
  433. package/dist/{setup-surface-B6XBqyMJ.js → setup-surface-B7uYEI9F.js} +2 -2
  434. package/dist/{setup-surface-fixjWejm.js → setup-surface-CMgQr2R9.js} +5 -5
  435. package/dist/{setup-surface-CzzV3QV6.js → setup-surface-Yd-YLGfa.js} +46 -46
  436. package/dist/{setup-wizard-proxy-DFDQV7FN.js → setup-wizard-proxy-CHGAY6ob.js} +1 -1
  437. package/dist/{setup.finalize-WT9kXSLX.js → setup.finalize-C2bq4D8j.js} +58 -58
  438. package/dist/{setup.gateway-config-Bp50kjo3.js → setup.gateway-config-BGgVOvQf.js} +48 -48
  439. package/dist/{shared-CyR3Ki--.js → shared-BEMZg0vb.js} +5 -5
  440. package/dist/{shared-DXzPv5D7.js → shared-BYRyVoVx.js} +5 -5
  441. package/dist/{shared-DCOVJ3QB.js → shared-Bj3fwdyM.js} +4 -4
  442. package/dist/{shared-B8_JHpU2.js → shared-CSydqOgE.js} +4 -4
  443. package/dist/{shared-C3fKAUbw.js → shared-DLAg-pKT.js} +3 -3
  444. package/dist/{signal-D16eMrBf.js → signal-Dh6z2uaT.js} +5 -5
  445. package/dist/{signal-oGrspg1k.js → signal-FEtxekyc.js} +46 -46
  446. package/dist/{skills-cli-CY6lUTRv.js → skills-cli-9NuRJd3Z.js} +5 -5
  447. package/dist/{slack-ueYeeNF7.js → slack-Ci1VArkq.js} +48 -48
  448. package/dist/{slack-B1GgT1_u.js → slack-CjslLjTc.js} +5 -5
  449. package/dist/{slash-commands.runtime-1q-llUpe.js → slash-commands.runtime-COXzcGjL.js} +46 -46
  450. package/dist/{slash-dispatch.runtime-BqJ1FZZ6.js → slash-dispatch.runtime-D5j8d7dg.js} +47 -47
  451. package/dist/{slash-skill-commands.runtime-D-BEZgQ1.js → slash-skill-commands.runtime-6U65Nany.js} +46 -46
  452. package/dist/{status-CnKcjD2h.js → status-BWUft8B5.js} +16 -16
  453. package/dist/{status-C1BR9Hft.js → status-BjV1ysoW.js} +50 -50
  454. package/dist/{status-D_1nxvoi.js → status-CM77XYRR.js} +4 -4
  455. package/dist/{status-Dp3OriYl.js → status-D7XHAzLz.js} +46 -46
  456. package/dist/{status-DoSH4nEL.js → status-DwO4xEHI.js} +54 -54
  457. package/dist/{status-json-DwNPzoCk.js → status-json-BYDBfkr3.js} +19 -19
  458. package/dist/{status-B45v-A8b.js → status-yoA_KX2O.js} +1 -1
  459. package/dist/{status.link-channel-Cz8GoHZ2.js → status.link-channel-DkISMfW8.js} +2 -2
  460. package/dist/{status.scan.deps.runtime-BQGei2B_.js → status.scan.deps.runtime-B6__B0kL.js} +14 -14
  461. package/dist/{status.scan.runtime-D4HkKTZu.js → status.scan.runtime-BAkcX3vO.js} +2 -2
  462. package/dist/{status.summary-Dxo5qDuD.js → status.summary-DNaMhaXy.js} +8 -8
  463. package/dist/{subagent-orphan-recovery-BPa7yoId.js → subagent-orphan-recovery-DtK8inah.js} +46 -46
  464. package/dist/{subagent-registry-runtime-B6homy_H.js → subagent-registry-runtime-02s7QJo3.js} +46 -46
  465. package/dist/{synology-chat-DY8xNv_g.js → synology-chat-QURTpvMf.js} +2 -2
  466. package/dist/{system-cli-CkWRbLu4.js → system-cli-BXd7evEt.js} +7 -7
  467. package/dist/{system-run-command-jY6Is_ri.js → system-run-command-CQCx0f24.js} +1 -1
  468. package/dist/telegram/audit.js +1 -1
  469. package/dist/telegram/token.js +46 -46
  470. package/dist/{telegram-uQdpyLeS.js → telegram-Btwvg0PX.js} +46 -46
  471. package/dist/{telegram-Bnigf1Qe.js → telegram-Dh5gM1mc.js} +7 -7
  472. package/dist/{tool-policy-match-BLASiL8y.js → tool-policy-match-B6J0bSfQ.js} +1 -1
  473. package/dist/{tui-Dj52JiFV.js → tui-CKGcNyM8.js} +6 -6
  474. package/dist/{tui-cli-B4SN4wzX.js → tui-cli-D3CLnnB9.js} +47 -47
  475. package/dist/{update-cli-CEAEBCp2.js → update-cli-DQ4j_nIh.js} +69 -69
  476. package/dist/{update-offset-store-Bp1RjZK2.js → update-offset-store-RxVdgbyo.js} +46 -46
  477. package/dist/{upsert-with-lock-CFIy4b7I.js → upsert-with-lock-BqkAnFym.js} +1 -1
  478. package/dist/{web-media-BJ-azd7j.js → web-media-BM1Mg6AN.js} +1 -1
  479. package/dist/{webhook-shared-DYKTXPVw.js → webhook-shared-UDKLpQnU.js} +1 -1
  480. package/dist/{webhooks-cli-CEBJbLqS.js → webhooks-cli-Ca3PlK8h.js} +5 -5
  481. package/dist/{whatsapp-63jqHVrE.js → whatsapp-CHEvDa2g.js} +46 -46
  482. package/dist/{with-timeout-CvaBvNie.js → with-timeout-CvBH67nj.js} +2 -2
  483. package/dist/{workspace-DuH1agxz.js → workspace-uCYzunu4.js} +5 -33
  484. package/dist/{zalo-CTrI2C4i.js → zalo-Dr4ysJLW.js} +1 -1
  485. package/dist/{zalo-Sw_XHo3-.js → zalo-keqX1Wnx.js} +2 -2
  486. package/docs/concepts/agent-workspace.md +0 -5
  487. package/docs/concepts/memory.md +6 -12
  488. package/docs/plans/2026-03-22-semantic-cache-telemetry-docs-plan.md +1431 -0
  489. package/docs/plans/2026-03-22-supermemory-steals-plan.md +1679 -0
  490. package/docs/plans/2026-03-23-almost-perfect-sprint-plan.md +1080 -0
  491. package/docs/plans/2026-03-23-master-steal-list.md +224 -0
  492. package/docs/plans/2026-03-23-memory-md-deprecation-plan.md +632 -0
  493. package/docs/plans/2026-03-23-production-readiness-e2e-plan.md +659 -0
  494. package/docs/plans/2026-03-23-supermemory-audit-fixes-plan.md +1291 -0
  495. package/docs/reference/clawmongo-vs-default-memory.md +2 -2
  496. package/docs/reference/heart-brain-boundary.md +8 -10
  497. package/docs/reference/memory-config.md +3 -4
  498. package/docs/reference/mongodb-capabilities.md +246 -9
  499. package/docs/reference/templates/AGENTS.md +5 -10
  500. package/docs/research/2026-03-22-atlas-local-preview-web.md +41 -31
  501. package/docs/research/2026-03-23-agent-management-ui-github.md +482 -0
  502. package/docs/research/2026-03-23-almost-perfect-mongodb-docs.md +255 -0
  503. package/docs/research/2026-03-23-company-os-agent-ui-web.md +511 -0
  504. package/docs/research/2026-03-23-supermemory-audit-fixes-mongodb-research.md +995 -0
  505. package/docs/start/clawmongo-getting-started.md +1 -1
  506. package/package.json +1 -1
  507. /package/dist/{memory-BAVM2Jxh.js → memory-CcbELE82.js} +0 -0
@@ -0,0 +1,659 @@
1
+ # Production-Readiness E2E Test Suite Plan
2
+
3
+ > **For Claude:** REQUIRED: Follow this plan task-by-task using TDD.
4
+ > **Design:** N/A (self-contained test file, no design doc needed).
5
+ > **Existing tests:** `src/memory/real-e2e-v2.e2e.test.ts` (81 tests, 17 phases) and `src/memory/mongodb-e2e.e2e.test.ts` (existing collections/sync tests). This plan creates a NEW complementary file.
6
+
7
+ **Goal:** Create `src/memory/production-readiness.e2e.test.ts` — a single living test file that validates all 15 audit gaps the existing 81-test e2e suite missed, covering operational quality (score bounds, index usage, telemetry completeness, timeout behavior, bulkWrite batching) against real MongoDB (atlas-local:preview).
8
+
9
+ **Architecture:** Sequential layered phases where later phases depend on data seeded in earlier phases. A realistic multi-turn agent conversation is written in Phase 1, then every subsequent phase validates a different production-quality aspect using that shared data. Uses the same vitest.e2e.config.ts infrastructure as the existing e2e tests.
10
+
11
+ **Tech Stack:** TypeScript, Vitest, MongoDB Node.js driver, atlas-local:preview (MongoDB 8.2+), Voyage AI API (for reranking/vector search)
12
+
13
+ **Prerequisites:**
14
+
15
+ - `MONGODB_TEST_URI` env var pointing to a running atlas-local:preview instance
16
+ - `VOYAGE_API_KEY` env var for reranking/vector-search tests (some tests degrade gracefully without it)
17
+ - Collections and indexes created by `ensureCollections` + `ensureStandardIndexes`
18
+
19
+ ---
20
+
21
+ ## Plan Mode & Rigor
22
+
23
+ - Plan mode: `execution_plan`
24
+ - Verification rigor: `standard`
25
+
26
+ ## Requirements Snapshot
27
+
28
+ 1. ONE new test file: `src/memory/production-readiness.e2e.test.ts`
29
+ 2. Tests run against REAL MongoDB via `vitest.e2e.config.ts`
30
+ 3. Covers all 15 audit gaps identified in the gap analysis
31
+ 4. Uses realistic agent conversation data (not synthetic "test123")
32
+ 5. Validates operational quality: score ranges, index usage, telemetry, timeouts
33
+ 6. File follows existing project patterns: randomUUID() agentId, deleteMany cleanup, VECTOR_SEARCH_TIMEOUT for autoEmbed
34
+ 7. Complements existing tests — does NOT duplicate them
35
+
36
+ ## Constraints Snapshot
37
+
38
+ - atlas-local:preview = MongoDB 8.2+ (all operators available)
39
+ - `$vectorSearch` requires search indexes + autoEmbed time (180s timeout for polling)
40
+ - Voyage API tests need `VOYAGE_API_KEY` env var (tests should skip gracefully if absent)
41
+ - Fire-and-forget telemetry means we need `setTimeout` or `flushTelemetry` helper to wait for insertOne completion
42
+ - Cannot use `$vectorSearch` inside `$facet` or `$lookup`
43
+ - `$percentile` requires `method: "approximate"` (GA since MongoDB 7.0)
44
+ - Test file should NOT import from `mongodb-manager.ts` MongoDBMemoryManager class (use standalone functions)
45
+
46
+ ## In Scope
47
+
48
+ - All 15 audit gaps from the gap analysis
49
+ - 12 test phases covering: foundation data, write-path quality, read-path quality, index health, cache behavior, reranker robustness, profile synthesis, telemetry completeness, query rewriting, graceful degradation, score normalization, MongoDB operator inventory
50
+ - Realistic conversation dataset (multi-turn, multi-session, named entities)
51
+ - `explain("executionStats")` assertions for index usage (COLLSCAN detection)
52
+ - `$percentile` server-side aggregation validation
53
+ - bulkWrite batching verification
54
+ - RRF score normalization bounds validation
55
+
56
+ ## Out Of Scope
57
+
58
+ - Modifying existing e2e test files
59
+ - Testing the `MongoDBMemoryManager` class (tested elsewhere)
60
+ - LLM entity extraction (not production-ready yet)
61
+ - Change Streams testing (already covered in mongodb-e2e.e2e.test.ts)
62
+ - Performance benchmarking (this is correctness-focused)
63
+
64
+ ## Open Decisions
65
+
66
+ None
67
+
68
+ ## Differences From Agreement
69
+
70
+ None
71
+
72
+ ## Recommended Defaults
73
+
74
+ - Phase 1 conversation size: 15+ events across 2 sessions (sufficient to trigger episode materialization, entity extraction, and multi-path searchV2)
75
+ - Telemetry flush wait: 200ms setTimeout after fire-and-forget calls (empirically sufficient for local insertOne)
76
+ - explain() threshold: reject if ANY critical pipeline stage shows `COLLSCAN` (zero tolerance for missing indexes)
77
+
78
+ ## Current State
79
+
80
+ ### Existing test coverage
81
+
82
+ - `src/memory/real-e2e-v2.e2e.test.ts` — 81 tests across 17 phases. Covers: event write, entity extraction, graph ops, episode materialization, consolidation, auto triggers, retrieval planner, searchV2 pipeline, V2 status/health, agent isolation, vector search, semantic cache, telemetry, profile synthesis, reranking, query rewriting, entity extraction.
83
+ - `src/memory/mongodb-e2e.e2e.test.ts` — ~30 tests. Covers: collection/index creation, sync workflow, $text search, search dispatcher, dedup, transactions, TTL, analytics, change streams, v2 event/chunk/graph/episode/migration/retrieval/health.
84
+
85
+ ### 15 audit gaps NOT covered
86
+
87
+ | # | Gap | Why it matters |
88
+ | --- | ---------------------------------- | ---------------------------------------------------------------------------------------------------- |
89
+ | 1 | RRF Score Normalization | Scores from different paths merged without validating [0,1] |
90
+ | 2 | Tier 2 Cache (Semantic Similarity) | $vectorSearch on cache never tested with real MongoDB |
91
+ | 3 | KB Path in searchV2 | Retrieval planner routes to "kb" but no KB search e2e (Phase 1 seeds KB data, Phase 3 tests KB path) |
92
+ | 4 | Index Usage (explain) | ZERO explain() calls in any test |
93
+ | 5 | Score Bounds | No test asserts all scores in [0,1] after fusion |
94
+ | 6 | Graceful Degradation Cascade | Multi-layer failure cascade not tested |
95
+ | 7 | Config Validation | Bad config never tested e2e |
96
+ | 8 | Reranking Timeout | Timeout behavior with real latency not tested |
97
+ | 9 | Empty Snippet Handling | Graph relations with empty text sent to reranker |
98
+ | 10 | Entity-Extraction Telemetry | Entity extraction telemetry emission never verified |
99
+ | 11 | Cache TTL from Paths | TTL derivation from pathsExecuted never verified |
100
+ | 12 | Raw-Window Event Cap | Unbounded time-range query never stress-tested |
101
+ | 13 | $percentile Server-Side | Telemetry $percentile never tested against real MongoDB |
102
+ | 14 | bulkWrite Batching | Entity upserts bulkWrite behavior never verified |
103
+ | 15 | Synonym Expansion Quality | False-positive rate never measured |
104
+
105
+ ### Key source files referenced
106
+
107
+ | File | What it provides | Lines |
108
+ | -------------------------------------------- | ---------------------------------------------------------------- | ----- |
109
+ | `src/memory/mongodb-manager.ts:2603-3083` | `searchV2()` — multi-path search with RRF normalization |
110
+ | `src/memory/mongodb-telemetry.ts:72-133` | `getLatencyStats()` — $percentile aggregation |
111
+ | `src/memory/mongodb-query-cache.ts:78-222` | `checkCache()` — two-tier cache lookup |
112
+ | `src/memory/mongodb-reranker.ts:50-166` | `crossEncoderRerank()` — Voyage API reranking |
113
+ | `src/memory/mongodb-query-rewriter.ts:73-97` | `expandSynonyms()` — synonym expansion |
114
+ | `src/memory/mongodb-profile.ts:78-295` | `synthesizeProfile()` — $facet + $lookup |
115
+ | `src/memory/mongodb-hybrid.ts:64-66` | `rrfScore()` — RRF formula |
116
+ | `src/memory/mongodb-graph.ts` | `extractAndUpsertEntities()`, `expandGraph()` |
117
+ | `src/memory/mongodb-events.ts` | `writeEvent()`, `getEventsByTimeRange()` |
118
+ | `src/memory/mongodb-schema.ts` | Collection helpers, `ensureCollections`, `ensureStandardIndexes` |
119
+ | `src/memory/mongodb-episodes.ts` | `materializeEpisode()`, `searchEpisodes()` |
120
+
121
+ ---
122
+
123
+ ## Critical-Path Verification Design
124
+
125
+ - Behavior contract: Not required (standard rigor)
126
+ - Edge-case catalog: See Phase 10 (graceful degradation) and Phase 6 (reranker robustness)
127
+ - Provable properties: None
128
+ - Purity boundary map: Not required
129
+ - Verification strategy: Each phase has explicit assertions. Run via `pnpm vitest run --config vitest.e2e.config.ts src/memory/production-readiness.e2e.test.ts --reporter=verbose`
130
+
131
+ ---
132
+
133
+ ## Phase Plan
134
+
135
+ ### Phase 1: File Scaffold and Realistic Conversation Data
136
+
137
+ **Objective:** Create the test file skeleton with imports, connection setup, cleanup, and a realistic 15-event multi-session conversation dataset that all later phases share.
138
+
139
+ **Inputs:** Existing e2e patterns from `real-e2e-v2.e2e.test.ts` and `mongodb-e2e.e2e.test.ts`
140
+
141
+ **Files/surfaces:**
142
+
143
+ - Create: `src/memory/production-readiness.e2e.test.ts`
144
+
145
+ **Expected artifacts:**
146
+
147
+ - Test file with:
148
+ - MongoDB connection setup (beforeAll/afterAll)
149
+ - `ensureCollections` + `ensureStandardIndexes` in beforeAll
150
+ - Unique `AGENT_ID = randomUUID()` for test isolation
151
+ - Unique `PREFIX = "prodready_"` to avoid collisions
152
+ - Two conversation sessions:
153
+ - Session 1 (10 events): A developer discussing Kubernetes migration with named people (Sarah, Marcus), specific projects (Atlas Migration), and technical topics (pod autoscaling, Helm charts, CI/CD pipeline)
154
+ - Session 2 (5 events): Bug report and fix discussion with references back to earlier conversation
155
+ - Events written via `writeEvent()` with realistic timestamps spanning 2 days
156
+ - Entity extraction via `extractAndUpsertEntities()` on the events
157
+ - Episode materialization via `materializeEpisode()` on day 1 events
158
+ - Structured memory entries (preferences, decisions, facts) via `writeStructuredMemory()`
159
+ - KB data seeded: Insert 3-5 documents into `kb_chunks` collection with realistic reference content (e.g., "Kubernetes Helm chart best practices", "MongoDB aggregation pipeline patterns", "CI/CD pipeline configuration guide") to support Gap #3 testing in Phase 3
160
+ - A `describe("Phase 1: Foundation Data", ...)` with basic smoke tests confirming data was seeded
161
+ - Phase 1 test count: ~6 tests (events written, entities extracted, episode created, structured mem written, relations created, KB data seeded)
162
+
163
+ **Required checks:**
164
+
165
+ - `it("seeds 15 events across 2 sessions")` — countDocuments === 15
166
+ - `it("extracts entities: Sarah, Marcus, Atlas Migration, Kubernetes")` — findEntitiesByName returns matches
167
+ - `it("materializes day-1 episode")` — episode exists with correct sourceEventCount
168
+ - `it("creates structured memory entries")` — at least 3 entries exist
169
+ - `it("creates entity relations")` — relation count > 0
170
+ - `it("seeds KB reference documents")` — kb_chunks countDocuments >= 3
171
+
172
+ **Checkpoint type:** Automated (all assertions)
173
+
174
+ **Exit criteria:** 15 events, 4+ entities, 1+ episode, 3+ structured memory entries, 1+ relations, 3+ KB chunks exist in the test database.
175
+
176
+ ---
177
+
178
+ ### Phase 2: Write-Path Quality (Gaps #10, #14)
179
+
180
+ **Objective:** Verify entity extraction telemetry emission and bulkWrite batching behavior.
181
+
182
+ **Files/surfaces:** Same test file
183
+
184
+ **Expected artifacts:**
185
+
186
+ - `describe("Phase 2: Write-Path Quality", ...)` with tests for:
187
+ - **Gap #10 (Entity-Extraction Telemetry):** After Phase 1 extraction, query `memory_telemetry` collection for `meta.operation === "entity-extraction"` entries. Assert they exist and have `ok: true`, `entitiesExtracted >= 1`, and valid `durationMs`.
188
+ - **Gap #14 (bulkWrite Batching):** Call `extractAndUpsertEntities()` with a text containing 6+ entity names. Verify: (a) all entities created with correct types, (b) relations created between them (C(n,2) pairs capped at 15), (c) performance: entire batch completes in <500ms (single bulkWrite vs N sequential inserts).
189
+
190
+ **Required checks:**
191
+
192
+ - `it("emits entity-extraction telemetry")` — telemetry doc exists with correct fields
193
+ - `it("batches entity upserts for multiple entities")` — 6+ entities created, 15 relations (cap), all in one call
194
+ - `it("records extraction method in telemetry")` — `extractionMethod` field present
195
+
196
+ **Checkpoint type:** Automated
197
+
198
+ **Exit criteria:** Telemetry entries for entity-extraction exist. bulkWrite creates entities and relations in bounded time.
199
+
200
+ ---
201
+
202
+ ### Phase 3: Read-Path Quality — searchV2 (Gaps #1, #3, #5)
203
+
204
+ **Objective:** Validate that searchV2 produces scores in [0,1] after RRF normalization, that multi-path results are properly fused, and that the KB path actually executes.
205
+
206
+ **Files/surfaces:** Same test file
207
+
208
+ **Expected artifacts:**
209
+
210
+ - `describe("Phase 3: Read-Path Quality", ...)` with tests for:
211
+ - **Gap #1 (RRF Score Normalization):** Run `searchV2()` with a query that hits multiple paths (e.g., "Sarah Kubernetes migration" triggers graph + hybrid + episodic). Assert: every result score is `>= 0 && <= 1`. Assert: results are sorted by score descending. Assert: `metadata.pathsExecuted.length >= 2`.
212
+ - **Gap #5 (Score Bounds):** Run searchV2 with multiple query types (entity name, time reference, technical topic) and assert ALL scores across all queries are in [0,1].
213
+ - **Gap #3 (KB Path in searchV2):** Seed KB data in Phase 1 (insert documents into `kb_chunks` collection with realistic content like "Kubernetes Helm chart best practices" and "CI/CD pipeline configuration guide"). Then run `searchV2()` with the "kb" path available (`availablePaths` includes "kb") and a query like "Helm chart best practices" that should route through the kb path. Assert: either (a) `metadata.pathsExecuted` includes "kb" and results contain KB content, OR (b) if $vectorSearch is not available for kb_chunks, the path fails gracefully (no crash) and metadata does NOT include "kb". Also directly test `searchKB()` function with the seeded data and $text search to confirm the function works against real MongoDB.
214
+ - Verify `metadata.resultsByPath` accurately reports per-path counts.
215
+ - Verify deduplication: if same content appears in multiple paths, only highest-scoring version survives.
216
+
217
+ **Required checks:**
218
+
219
+ - `it("all searchV2 scores are in [0,1] after RRF normalization")` — every result.score validated
220
+ - `it("results are sorted by score descending")` — adjacent pair comparison
221
+ - `it("multiple paths are executed for entity+topic queries")` — pathsExecuted.length >= 2
222
+ - `it("KB path routes through searchKB on kb-related queries")` — searchKB returns results or fails gracefully
223
+ - `it("resultsByPath accurately reports per-path counts")` — sum(resultsByPath values) >= total results
224
+ - `it("deduplicates results across paths")` — no duplicate snippets in final results
225
+
226
+ **Checkpoint type:** Automated
227
+
228
+ **Exit criteria:** All searchV2 results have scores in [0,1], sorted descending, with multi-path execution confirmed. KB path tested directly via searchKB.
229
+
230
+ ---
231
+
232
+ ### Phase 4: Index Health via explain() (Gap #4)
233
+
234
+ **Objective:** Run `explain("executionStats")` on critical aggregation pipelines and assert NO COLLSCAN on indexed fields.
235
+
236
+ **Files/surfaces:** Same test file
237
+
238
+ **Expected artifacts:**
239
+
240
+ - `describe("Phase 4: Index Health", ...)` with tests for:
241
+ - **Relations $lookup by fromEntityId:** Run explain on the profile synthesis outgoing relations lookup. Assert: winning plan uses index on `fromEntityId`.
242
+ - **Relations $lookup by toEntityId:** Same for incoming relations. Assert: index used.
243
+ - **Entity search by name:** explain on `findEntitiesByName` query. Assert: uses compound index, not COLLSCAN.
244
+ - **Event time-range query:** explain on `getEventsByTimeRange` equivalent query. Assert: uses timestamp compound index.
245
+ - **Structured memory by type:** explain on structured_mem find with type filter. Assert: uses compound index.
246
+ - **Telemetry by operation:** explain on telemetry aggregation $match. Assert: uses ts index.
247
+
248
+ **Implementation pattern:**
249
+
250
+ ```typescript
251
+ const explainResult = await collection.find(filter).explain("executionStats");
252
+ // Walk executionStats.executionStages looking for COLLSCAN
253
+ function hasCollScan(stages: any): boolean {
254
+ if (stages.stage === "COLLSCAN") return true;
255
+ if (stages.inputStage) return hasCollScan(stages.inputStage);
256
+ if (stages.inputStages) return stages.inputStages.some(hasCollScan);
257
+ return false;
258
+ }
259
+ expect(hasCollScan(explainResult.queryPlanner.winningPlan)).toBe(false);
260
+ ```
261
+
262
+ **Required checks:**
263
+
264
+ - `it("relations fromEntityId lookup uses index")` — no COLLSCAN
265
+ - `it("relations toEntityId lookup uses index")` — no COLLSCAN
266
+ - `it("entity name search uses compound index")` — no COLLSCAN
267
+ - `it("event time-range query uses timestamp index")` — no COLLSCAN
268
+ - `it("structured memory type query uses compound index")` — no COLLSCAN
269
+ - `it("telemetry operation query uses ts index")` — no COLLSCAN
270
+
271
+ **Checkpoint type:** Automated
272
+
273
+ **Exit criteria:** All 6 explain checks pass with zero COLLSCAN stages on indexed paths.
274
+
275
+ ---
276
+
277
+ ### Phase 5: Cache Behavior (Gaps #2, #11)
278
+
279
+ **Objective:** Validate two-tier cache (exact + semantic), TTL derivation from pathsExecuted, and cache hit/miss lifecycle.
280
+
281
+ **Files/surfaces:** Same test file
282
+
283
+ **Expected artifacts:**
284
+
285
+ - `describe("Phase 5: Cache Behavior", ...)` with tests for:
286
+ - **Cache miss on first query:** Call `checkCache()` with a fresh query. Assert: `hit === false, tier === "miss"`.
287
+ - **Cache write then exact hit:** Call `writeCache()` with results, then `checkCache()` with same query. Assert: `hit === true, tier === "exact"`.
288
+ - **Gap #2 (Tier 2 Semantic Cache):** Write cache with query "Kubernetes pod autoscaling". Check cache with slightly different query "K8s autoscaling pods". If vector search index exists, assert: `tier === "semantic"` with high similarity. If not, assert: `tier === "miss"` (graceful degradation).
289
+ - **Gap #11 (Cache TTL from Paths):** Write cache entries with different TTLs (conversation: 300s, KB: 3600s). Assert: `expiresAt` field reflects the TTL correctly by checking the stored document directly.
290
+ - **Cache hit count tracking:** Verify `hitCount` increments on repeated hits and `lastHitAt` updates.
291
+
292
+ **Required checks:**
293
+
294
+ - `it("reports cache miss on first query")` — hit === false
295
+ - `it("reports exact cache hit after write")` — tier === "exact"
296
+ - `it("attempts semantic similarity lookup on near-miss query")` — tier is "semantic" or "miss" depending on index
297
+ - `it("derives TTL from source type: conversation=300s, kb=3600s")` — expiresAt math validated
298
+ - `it("increments hitCount and updates lastHitAt")` — verified via direct document read
299
+
300
+ **Checkpoint type:** Automated
301
+
302
+ **Exit criteria:** Cache lifecycle (miss -> write -> hit) works. TTL derivation correct. Hit tracking functional.
303
+
304
+ ---
305
+
306
+ ### Phase 6: Reranker Robustness (Gaps #8, #9)
307
+
308
+ **Objective:** Test cross-encoder reranking with real Voyage API including timeout behavior and empty snippet handling.
309
+
310
+ **Files/surfaces:** Same test file
311
+
312
+ **Expected artifacts:**
313
+
314
+ - `describe("Phase 6: Reranker Robustness", ...)` with tests for:
315
+ - **Valid reranking:** Call `crossEncoderRerank()` with 5+ results from Phase 1 data. Assert: `reranked === true`, all output scores in [0,1], results are sorted by relevance_score.
316
+ - **Gap #8 (Reranking Timeout):** `crossEncoderRerank()` uses `AbortSignal.timeout(10_000)`. Test: verify that when the function handles timeout gracefully (reranked=false, original order preserved). Use a mock URL or verify the catch behavior by checking the fallback path.
317
+ - **Gap #9 (Empty Snippet Handling):** Create results where some have empty/blank snippets (simulating graph relations). Call `crossEncoderRerank()`. Assert: empty-snippet results are filtered before API call (counted separately), non-empty results are reranked, final output includes both reranked + empty-snippet + overflow + below-minScore in correct order.
318
+ - Skip tests gracefully if `VOYAGE_API_KEY` is not set.
319
+
320
+ **Required checks:**
321
+
322
+ - `it("reranks valid results with Voyage API")` — reranked=true, scores in [0,1] (skip if no API key)
323
+ - `it("preserves input order when reranking fails or times out")` — reranked=false
324
+ - `it("filters empty snippets before sending to reranker API")` — empty snippets not in API payload but appear in output
325
+ - `it("emits rerank telemetry on success and failure")` — telemetry docs exist for both
326
+
327
+ **Checkpoint type:** Automated
328
+
329
+ **Exit criteria:** Reranker handles valid, timeout, and empty-snippet cases correctly.
330
+
331
+ ---
332
+
333
+ ### Phase 7: Profile Synthesis (Gap #4 continued — $facet + $lookup index usage)
334
+
335
+ **Objective:** Validate `synthesizeProfile()` with real data and verify the split-$lookup pattern uses indexes.
336
+
337
+ **Files/surfaces:** Same test file
338
+
339
+ **Expected artifacts:**
340
+
341
+ - `describe("Phase 7: Profile Synthesis", ...)` with tests for:
342
+ - **Profile completeness:** Call `synthesizeProfile()` on Phase 1 data. Assert: preferences, decisions, facts have entries. topEntities includes at least "Sarah" and "Kubernetes". recentEpisodes has at least 1 entry. activityPatterns.totalEvents === 15.
343
+ - **$facet returns structured memory grouped by type:** Assert preferences.length > 0, decisions.length > 0.
344
+ - **Activity patterns from events:** Assert roleDistribution has "user" and "assistant" keys. lastActive is a valid Date.
345
+ - **Top entities by relation count:** Assert topEntities are sorted by relationCount descending.
346
+ - **Profile emits telemetry:** Check telemetry collection for `operation === "profile-synthesis"`.
347
+
348
+ **Required checks:**
349
+
350
+ - `it("returns complete profile with all sections populated")` — all fields non-empty
351
+ - `it("groups structured memory by type via $facet")` — preferences and decisions have entries
352
+ - `it("calculates activity patterns from events")` — roleDistribution, totalEvents, lastActive validated
353
+ - `it("ranks entities by relation count")` — sorted descending
354
+ - `it("emits profile-synthesis telemetry")` — telemetry entry exists
355
+
356
+ **Checkpoint type:** Automated
357
+
358
+ **Exit criteria:** Profile synthesis returns complete, correctly structured results from real MongoDB data.
359
+
360
+ ---
361
+
362
+ ### Phase 8: Telemetry Completeness (Gap #13)
363
+
364
+ **Objective:** Verify all telemetry operations are represented and `$percentile` works against real MongoDB.
365
+
366
+ **Files/surfaces:** Same test file
367
+
368
+ **Expected artifacts:**
369
+
370
+ - `describe("Phase 8: Telemetry Completeness", ...)` with tests for:
371
+ - **Gap #13 ($percentile Server-Side):** Call `getLatencyStats()` after all prior phases generated telemetry. Assert: p50, p95, p99 are numbers >= 0. Count > 0. This validates the `$percentile` aggregation runs successfully on real MongoDB 8.2.
372
+ - **Operation distribution:** Call `getOperationDistribution()`. Assert: at least 3 different operation types appear (e.g., "entity-extraction", "profile-synthesis", "cache-check").
373
+ - **Cache hit rate:** Call `getCacheHitRate()`. Assert: returns valid hitRate (0 <= hitRate <= 1).
374
+ - **Every operation type has telemetry:** Query telemetry collection grouped by `meta.operation`. Assert that operations from prior phases exist: "entity-extraction", "profile-synthesis", "cache-check", and optionally "rerank" and "query-rewrite".
375
+
376
+ **Required checks:**
377
+
378
+ - `it("getLatencyStats returns valid p50/p95/p99 via $percentile")` — all are numbers >= 0
379
+ - `it("getOperationDistribution reports multiple operations")` — 3+ distinct operations
380
+ - `it("getCacheHitRate returns valid rate")` — 0 <= hitRate <= 1
381
+ - `it("telemetry covers all operation types from prior phases")` — 3+ operation types present
382
+
383
+ **Checkpoint type:** Automated
384
+
385
+ **Exit criteria:** $percentile works on real MongoDB. All telemetry aggregation helpers return valid data.
386
+
387
+ ---
388
+
389
+ ### Phase 9: Query Rewriting (Gap #15)
390
+
391
+ **Objective:** Validate synonym expansion quality — no false positives, 3x cap respected.
392
+
393
+ **Files/surfaces:** Same test file
394
+
395
+ **Expected artifacts:**
396
+
397
+ - `describe("Phase 9: Query Rewriting", ...)` with tests for:
398
+ - **Expansion works on realistic queries:** `expandSynonyms("auth db config")` produces expanded terms including "authentication", "database", "configuration".
399
+ - **Gap #15 (No false positives):** Assert that "api" does NOT expand to "route" or "rest" (H7 audit fix). Assert "ui" does NOT expand to "frontend" or "component".
400
+ - **3x expansion cap:** `expandSynonyms("auth db config deps deploy")` — 5 words, max 15 expanded. Count words in result, assert <= 15.
401
+ - **Original words preserved:** All original words appear in expanded output.
402
+ - **rewriteQuery integration:** Call `rewriteQuery()` with config `{ enabled: true, method: "synonym-expansion", maxTokens: 100 }`. Assert: `rewritten === true`, `method === "synonym-expansion"`, `rewrittenQuery` contains original + expanded terms.
403
+ - **Telemetry emission:** After rewriteQuery, check telemetry for `operation === "query-rewrite"` with `queryRewritten === true`.
404
+
405
+ **Required checks:**
406
+
407
+ - `it("expands known synonyms: auth -> authentication, login, oauth")` — terms present
408
+ - `it("does NOT expand api to route/rest (H7 fix)")` — no false positives
409
+ - `it("respects 3x expansion cap")` — word count <= 3 \* original count
410
+ - `it("preserves original words in expansion")` — all originals present
411
+ - `it("rewriteQuery emits query-rewrite telemetry")` — telemetry entry exists
412
+
413
+ **Checkpoint type:** Automated
414
+
415
+ **Exit criteria:** Synonym expansion is correct, bounded, and free of known false positives.
416
+
417
+ ---
418
+
419
+ ### Phase 10: Graceful Degradation (Gap #6)
420
+
421
+ **Objective:** Test multi-layer failure cascades and empty-state behavior.
422
+
423
+ **Files/surfaces:** Same test file
424
+
425
+ **Expected artifacts:**
426
+
427
+ - `describe("Phase 10: Graceful Degradation", ...)` with tests for:
428
+ - **Gap #6 (Multi-layer cascade):** Use a fresh agentId with NO data. Call `searchV2()` with all paths available. Assert: returns empty results (not crash), metadata shows 0 pathsExecuted, no error thrown.
429
+ - **Empty profile synthesis:** Call `synthesizeProfile()` on empty agentId. Assert: returns profile with all arrays empty, totalEvents === 0, lastActive === null. No error thrown.
430
+ - **searchV2 with no vector index available:** Call searchV2 with `capabilities: { vectorSearch: false, textSearch: false, scoreFusion: false, rankFusion: false }`. Assert: degrades to $text search or returns empty gracefully.
431
+ - **getLatencyStats with no telemetry:** Call on empty agentId. Assert: returns { p50: 0, p95: 0, p99: 0, count: 0 }.
432
+ - **checkCache on empty cache:** Assert: `hit === false, tier === "miss"`.
433
+
434
+ **Required checks:**
435
+
436
+ - `it("searchV2 returns empty on completely empty agent")` — no crash
437
+ - `it("synthesizeProfile returns empty profile on no data")` — all arrays empty
438
+ - `it("getLatencyStats returns zeros on no telemetry")` — all fields are 0
439
+ - `it("checkCache returns miss on empty cache")` — hit === false
440
+ - `it("searchV2 degrades gracefully with no vector capabilities")` — no crash
441
+
442
+ **Checkpoint type:** Automated
443
+
444
+ **Exit criteria:** All empty-state and degraded-capability scenarios return safe defaults without crashing.
445
+
446
+ ---
447
+
448
+ ### Phase 11: Score Normalization Deep Check (Gaps #1, #5 reinforced)
449
+
450
+ **Objective:** The deep validation that the original e2e MISSED — write data that triggers all paths, run searchV2, and exhaustively validate every score.
451
+
452
+ **Files/surfaces:** Same test file
453
+
454
+ **Expected artifacts:**
455
+
456
+ - `describe("Phase 11: Score Normalization Deep Check", ...)` with tests for:
457
+ - **Multi-path execution:** Use the Phase 1 agent's data. Run searchV2 with a query that references entities ("Sarah"), time ("yesterday"), and topic ("Kubernetes migration") to trigger graph + raw-window + hybrid/episodic paths simultaneously.
458
+ - **Exhaustive score validation:** Iterate ALL results. For each: assert `result.score >= 0`, assert `result.score <= 1`, assert `typeof result.score === "number"`, assert `!Number.isNaN(result.score)`.
459
+ - **RRF metadata present:** When pathsExecuted.length > 1, verify that scores were modified by RRF (not raw synthetic scores like 0.85 or 1.0 - recency).
460
+ - **Sort order invariant:** For every pair of adjacent results, assert `results[i].score >= results[i+1].score`.
461
+ - **Gap #12 (Raw-Window Event Cap):** Call searchV2 with raw-window path on a query that matches many events. Verify result count from raw-window path is capped at 50 (the M2 audit fix limit).
462
+
463
+ **Required checks:**
464
+
465
+ - `it("every searchV2 result score satisfies 0 <= score <= 1")` — exhaustive loop
466
+ - `it("scores are finite numbers (no NaN, Infinity)")` — typeof + isNaN + isFinite
467
+ - `it("results are sorted descending by score")` — pairwise check
468
+ - `it("RRF normalization applied when multiple paths execute")` — pathsExecuted.length > 1
469
+ - `it("raw-window path caps results at 50")` — resultsByPath["raw-window"] <= 50
470
+
471
+ **Checkpoint type:** Automated
472
+
473
+ **Exit criteria:** ALL searchV2 results pass exhaustive score validation.
474
+
475
+ ---
476
+
477
+ ### Phase 12: MongoDB Operator Inventory
478
+
479
+ **Objective:** One test per MongoDB operator/feature to confirm it works on atlas-local:preview.
480
+
481
+ **Files/surfaces:** Same test file
482
+
483
+ **Expected artifacts:**
484
+
485
+ - `describe("Phase 12: MongoDB Operator Inventory", ...)` with tests for:
486
+ - **$facet:** Run a $facet aggregation on structured_mem. Assert: returns an object with facet keys.
487
+ - **$lookup:** Run a $lookup from entities to relations. Assert: joined results present.
488
+ - **$graphLookup:** Run a $graphLookup on relations. Assert: recursive traversal works.
489
+ - **$percentile:** Run $percentile on telemetry durationMs. Assert: returns array of numbers.
490
+ - **$group + $count:** Run $group on events by role with $count. Assert: counts match expected.
491
+ - **$addFields + $sort + $limit:** Run pipeline on entities. Assert: computed field present, sorted, limited.
492
+ - **bulkWrite (updateOne + upsert):** Run bulkWrite on entities with 3 upserts. Assert: upsertedCount + modifiedCount correct.
493
+ - **insertOne (time series):** Insert into telemetry collection (time series). Assert: insertedId present.
494
+ - **createIndex (compound):** Create a test compound index. Assert: no error.
495
+ - **createIndex (text):** Verify text index exists on chunks. Assert: index present.
496
+ - **createIndex (TTL):** Create a TTL index on a test field. Assert: expireAfterSeconds set.
497
+ - **createIndex (sparse):** Create a sparse index. Assert: sparse === true.
498
+ - **$vectorSearch:** If search indexes available, run $vectorSearch. Assert: results have vectorSearchScore.
499
+ - **$search:** If search indexes available, run $search. Assert: results have searchScore.
500
+
501
+ **Required checks:** One `it()` per operator (14 tests)
502
+
503
+ **Checkpoint type:** Automated
504
+
505
+ **Exit criteria:** All MongoDB operators used by ClawMongo work on atlas-local:preview.
506
+
507
+ ---
508
+
509
+ ## Acceptance Checks
510
+
511
+ ```bash
512
+ # Run the full production-readiness e2e suite
513
+ MONGODB_TEST_URI="mongodb://admin:admin@localhost:27017/openclaw?authSource=admin&replicaSet=rs0&directConnection=true" \
514
+ pnpm vitest run --config vitest.e2e.config.ts src/memory/production-readiness.e2e.test.ts --reporter=verbose
515
+
516
+ # Expected: all tests pass (some skip gracefully if VOYAGE_API_KEY absent)
517
+
518
+ # Verify the file compiles with no new TS errors
519
+ pnpm tsgo
520
+
521
+ # Verify it doesn't break existing tests
522
+ pnpm test -- src/memory/
523
+ ```
524
+
525
+ ## Risks And Mitigations
526
+
527
+ | Risk | P | I | Score | Mitigation |
528
+ | ------------------------------------------------------ | --- | --- | ----- | ---------------------------------------------------------------------------------- |
529
+ | atlas-local:preview not running | 2 | 5 | 10 | Test file header documents required setup; beforeAll fails fast with clear message |
530
+ | Voyage API key missing | 3 | 3 | 9 | Reranker + vector tests skip gracefully with `describe.skipIf(!API_KEY)` |
531
+ | $vectorSearch requires autoEmbed delay | 3 | 3 | 9 | Use existing `waitForVectorResults` polling pattern with 180s timeout |
532
+ | explain() output format varies by MongoDB version | 2 | 3 | 6 | Use recursive COLLSCAN detection helper that walks any explain structure |
533
+ | Fire-and-forget telemetry not flushed before assertion | 4 | 2 | 8 | Add 200ms await + retry pattern for telemetry assertions |
534
+ | Test data isolation across parallel runs | 2 | 4 | 8 | randomUUID() agentId + unique prefix ensures isolation |
535
+
536
+ ## Summary
537
+
538
+ - Plan saved: `docs/plans/2026-03-23-production-readiness-e2e-plan.md`
539
+ - Phases: 12
540
+ - Risks: 6 identified
541
+ - Key decisions: Sequential layered phases, realistic conversation data, explain()-based index validation, graceful skip for optional API keys
542
+
543
+ ## Recommended Skills for BUILD (SKILL_HINTS for Router)
544
+
545
+ - `cc10x:architecture-patterns` (multi-component test architecture)
546
+
547
+ ## Confidence Score: 88/100
548
+
549
+ - Context References included with file:line (+25) — all source files documented
550
+ - All edge cases documented (+20) — 15 gaps mapped to specific tests
551
+ - Test commands specific (+20) — exact vitest command provided
552
+ - Risk mitigations defined (+20) — 6 risks with concrete mitigations
553
+ - File paths exact (+15) — single file, clear path
554
+ - Deductions: -12 for Voyage API dependency (some tests need real API key to fully validate)
555
+
556
+ **Key Assumptions:**
557
+
558
+ - atlas-local:preview (MongoDB 8.2+) is available and running
559
+ - `$percentile` operator is GA in the test environment (MongoDB 7.0+)
560
+ - Voyage API key is available for reranking/vector tests (tests skip if not)
561
+ - Existing `ensureCollections` + `ensureStandardIndexes` create all needed indexes
562
+ - Fire-and-forget telemetry flushes within 200ms on local MongoDB
563
+
564
+ ## Findings
565
+
566
+ - The existing 81-test real-e2e-v2.e2e.test.ts covers feature correctness well but has ZERO operational quality assertions (no explain(), no score bounds, no telemetry completeness)
567
+ - The RRF normalization in searchV2 (lines 3030-3046 of mongodb-manager.ts) uses `rrfScore()` from mongodb-hybrid.ts which produces values in (0, 1/k) range — should naturally be in [0,1] for k=60, but this was never validated
568
+ - The split-$lookup pattern in synthesizeProfile (replacing $or with two $eq lookups) was the C2/M4 audit fix — this plan validates it actually uses indexes via explain()
569
+ - `crossEncoderRerank` already has `AbortSignal.timeout(10_000)` but this timeout behavior was never tested
570
+ - `expandSynonyms` already has the 3x cap and H7 false-positive fixes — this plan validates those fixes hold
571
+
572
+ ## Task Status
573
+
574
+ - Follow-up tasks created: None
575
+ - **CRITICAL:** Now execute the `TaskUpdate` tool to mark task as completed.
576
+
577
+ ---
578
+
579
+ ## Router Contract (MACHINE-READABLE)
580
+
581
+ ```yaml
582
+ STATUS: PLAN_CREATED
583
+ PLAN_MODE: execution_plan
584
+ VERIFICATION_RIGOR: standard
585
+ CONFIDENCE: 88
586
+ PLAN_FILE: "docs/plans/2026-03-23-production-readiness-e2e-plan.md"
587
+ PHASES: 12
588
+ RISKS_IDENTIFIED: 6
589
+ SCENARIOS:
590
+ - name: "searchV2 multi-path RRF score normalization"
591
+ given: "15 realistic events with entities and episodes seeded"
592
+ when: "searchV2 executes with query hitting graph + hybrid + episodic paths"
593
+ then: "all result scores are in [0,1], sorted descending, pathsExecuted >= 2"
594
+ - name: "explain detects no COLLSCAN on indexed queries"
595
+ given: "standard indexes created via ensureStandardIndexes"
596
+ when: "explain('executionStats') runs on 6 critical query patterns"
597
+ then: "zero COLLSCAN stages found in any winning plan"
598
+ - name: "$percentile telemetry aggregation"
599
+ given: "telemetry entries emitted by prior test phases"
600
+ when: "getLatencyStats runs $percentile aggregation"
601
+ then: "p50, p95, p99 are valid non-negative numbers"
602
+ - name: "graceful degradation on empty data"
603
+ given: "fresh agentId with no data in any collection"
604
+ when: "searchV2, synthesizeProfile, getLatencyStats called"
605
+ then: "all return safe empty defaults without throwing"
606
+ - name: "cache two-tier lifecycle"
607
+ given: "empty cache for agent"
608
+ when: "checkCache (miss) -> writeCache -> checkCache (hit)"
609
+ then: "first check misses, second hits with tier=exact"
610
+ ASSUMPTIONS:
611
+ [
612
+ "atlas-local:preview running with MongoDB 8.2+",
613
+ "$percentile GA in test environment",
614
+ "Voyage API key available (tests skip if not)",
615
+ "ensureStandardIndexes creates all needed indexes",
616
+ ]
617
+ DECISIONS:
618
+ [
619
+ "Sequential layered phases sharing data",
620
+ "Single file for all 12 phases",
621
+ "explain-based COLLSCAN detection",
622
+ "Graceful skip for optional API keys",
623
+ ]
624
+ OPEN_DECISIONS: []
625
+ DIFFERENCES_FROM_AGREEMENT: []
626
+ RECOMMENDED_DEFAULTS:
627
+ [
628
+ "telemetry flush wait: 200ms",
629
+ "explain threshold: zero COLLSCAN tolerance",
630
+ "conversation size: 15 events across 2 sessions",
631
+ ]
632
+ ALTERNATIVES: ["Separate files per phase", "Mock-based instead of real MongoDB"]
633
+ DRAWBACKS:
634
+ [
635
+ "Requires atlas-local:preview running for test execution",
636
+ "Some tests need Voyage API key",
637
+ "Sequential phases mean later tests depend on earlier data",
638
+ ]
639
+ PROVABLE_PROPERTIES: []
640
+ BLOCKING: false
641
+ NEXT_ACTION: "build"
642
+ REMEDIATION_NEEDED: false
643
+ REQUIRES_REMEDIATION: false
644
+ REMEDIATION_REASON: null
645
+ GATE_PASSED: true
646
+ USER_INPUT_NEEDED: []
647
+ MEMORY_NOTES:
648
+ learnings:
649
+ [
650
+ "15 audit gaps mapped to 12 test phases covering operational quality, all using shared realistic conversation data",
651
+ ]
652
+ patterns:
653
+ [
654
+ "explain-based COLLSCAN detection pattern for index health validation",
655
+ "Sequential layered e2e test design where phases build on shared seeded data",
656
+ ]
657
+ verification:
658
+ ["Plan: docs/plans/2026-03-23-production-readiness-e2e-plan.md with 88/100 confidence"]
659
+ ```