@spacebar_ai/moldclaw-core 2026.3.43 → 2026.3.45

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 (1131) hide show
  1. package/dist/accounts-5qY-dKca.d.ts +103 -0
  2. package/dist/accounts-CxV5zzzp.js +114 -0
  3. package/dist/acp-cli-2JoKJ0xt.js +2093 -0
  4. package/dist/actions.runtime-BJPd9nat.js +119 -0
  5. package/dist/actions.runtime-DVs4a2cB.js +133 -0
  6. package/dist/agent-scope-lZlwP1At.js +208 -0
  7. package/dist/agents-CmT3Jwvj.js +222 -0
  8. package/dist/agents-D7Pebhph.js +853 -0
  9. package/dist/agents.config-CX9CPNfP.js +17 -0
  10. package/dist/agents.config-DF9Zwn9n.js +121 -0
  11. package/dist/allow-list-B3f4EqAM.js +81 -0
  12. package/dist/allowlist-_YpK0-4h.js +142 -0
  13. package/dist/api-B44giplI.js +117 -0
  14. package/dist/audit-C3InXm7H.js +787 -0
  15. package/dist/audit-ChWS6RiF.js +54 -0
  16. package/dist/audit-channel.collect.runtime-DZzrS6v2.js +605 -0
  17. package/dist/audit-channel.runtime-B2XTOsSF.js +121 -0
  18. package/dist/audit-extra.async-C2G0mqmk.js +813 -0
  19. package/dist/audit-membership-runtime-DOv5-eHo.js +162 -0
  20. package/dist/audit.deep.runtime-DyL9O_sU.js +25 -0
  21. package/dist/audit.nondeep.runtime-C6jFgJfH.js +832 -0
  22. package/dist/audit.runtime-Cvh2wmWM.js +118 -0
  23. package/dist/auth-Ch3Rchm4.js +101 -0
  24. package/dist/auth-choice-Beq0dWPS.js +268 -0
  25. package/dist/auth-choice-DZYg94gS.js +122 -0
  26. package/dist/auth-choice-TVG_8lJj.js +507 -0
  27. package/dist/auth-choice-options-B_qxsjdj.js +123 -0
  28. package/dist/auth-choice-prompt-BayzDobT.js +115 -0
  29. package/dist/auth-choice-prompt-_UES859x.js +36 -0
  30. package/dist/auth-choice.apply-helpers-BhbNIV8X.js +66 -0
  31. package/dist/auth-choice.plugin-providers.runtime-CVC4Jzhp.js +119 -0
  32. package/dist/auth-profiles-C-Ul-Qkn.js +128139 -0
  33. package/dist/auth-profiles.runtime-Clyka_jV.js +116 -0
  34. package/dist/banner-CojBHPWr.js +342 -0
  35. package/dist/bluebubbles-BnLsj2Fy.d.ts +6 -0
  36. package/dist/bluebubbles-irYTGbfn.js +64 -0
  37. package/dist/bot-DdyrB2z9.d.ts +478 -0
  38. package/dist/brave-w4Fo8WZ3.js +24 -0
  39. package/dist/browser-cli-DWFs3P_i.js +1494 -0
  40. package/dist/build-info.json +3 -3
  41. package/dist/bundled/boot-md/handler.d.ts +1 -1
  42. package/dist/bundled/boot-md/handler.js +35 -35
  43. package/dist/bundled/bootstrap-extra-files/handler.d.ts +1 -1
  44. package/dist/bundled/bootstrap-extra-files/handler.js +1 -1
  45. package/dist/bundled/command-logger/handler.d.ts +1 -1
  46. package/dist/bundled/session-memory/handler.d.ts +1 -1
  47. package/dist/bundled/session-memory/handler.js +36 -36
  48. package/dist/call-Do7wTSr7.js +39 -0
  49. package/dist/call-gdDAt07d.js +640 -0
  50. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  51. package/dist/channel-34O87pvK.js +949 -0
  52. package/dist/channel-B3Xo_4d8.js +1598 -0
  53. package/dist/channel-BEqDvL49.js +397 -0
  54. package/dist/channel-BLOk9WRE.js +214 -0
  55. package/dist/channel-BY5H2cdy.js +803 -0
  56. package/dist/channel-BeOtzXIH.js +4681 -0
  57. package/dist/channel-Bt8x_5Kj.js +306 -0
  58. package/dist/channel-C3E8XWLF.js +1321 -0
  59. package/dist/channel-C6ngVfGr.js +943 -0
  60. package/dist/channel-CVDBca2b.js +226 -0
  61. package/dist/channel-Cctli72q.js +562 -0
  62. package/dist/channel-DEAbU9Dj2.js +316 -0
  63. package/dist/channel-DIULkrBN.js +575 -0
  64. package/dist/channel-DXb4gsSd.js +619 -0
  65. package/dist/channel-Dap9LY-9.js +352 -0
  66. package/dist/channel-DcJdUnab.js +538 -0
  67. package/dist/channel-ZYCQj3hP.js +207 -0
  68. package/dist/channel-account-context-Baszl3_B.js +103 -0
  69. package/dist/channel-hlzhFHDl.js +497 -0
  70. package/dist/channel-options-PwBzYYtq.js +50 -0
  71. package/dist/channel-plugin-ids-TZIY4hFs.js +26 -0
  72. package/dist/channel-summary-CCEAV13o.js +111 -0
  73. package/dist/channel-tY2Hg5ac.js +542 -0
  74. package/dist/channel-vMWcWq1U.js +920 -0
  75. package/dist/channel.runtime-8qWgkCxX.js +404 -0
  76. package/dist/channel.runtime-C4jtgrbI.js +179 -0
  77. package/dist/channel.runtime-CJ4ug6Mp.js +127 -0
  78. package/dist/channel.runtime-ChKRJAZ8.js +4011 -0
  79. package/dist/channel.runtime-Cj54LYU-.js +418 -0
  80. package/dist/channel.runtime-KH06-bu1.js +870 -0
  81. package/dist/channel.runtime-_GYnBh2X.js +199 -0
  82. package/dist/channel.runtime-go7Pzt6N.js +241 -0
  83. package/dist/channel.runtime-iypIZ0EU.js +171 -0
  84. package/dist/channel.runtime-mukTWpon.js +182 -0
  85. package/dist/channel.runtime-oNtF1sc3.js +218 -0
  86. package/dist/channel.setup-BZfok6kX.js +11 -0
  87. package/dist/channel.setup-CbXfZ2dq.js +9 -0
  88. package/dist/channel.setup-CfyM55np.js +8 -0
  89. package/dist/channel.setup-CoG-gJ6n.js +9 -0
  90. package/dist/channel.setup-Cp4PH_rc.js +57 -0
  91. package/dist/channel.setup-V2w9Jk9j.js +6 -0
  92. package/dist/channel.setup-t7F5WZE7.js +8 -0
  93. package/dist/channels/plugins/actions/discord.d.ts +2 -2
  94. package/dist/channels/plugins/actions/discord.js +35 -35
  95. package/dist/channels/plugins/actions/signal.d.ts +1 -1
  96. package/dist/channels/plugins/actions/signal.js +35 -35
  97. package/dist/channels/plugins/actions/telegram.d.ts +2 -2
  98. package/dist/channels/plugins/actions/telegram.js +35 -35
  99. package/dist/channels/plugins/agent-tools/whatsapp-login.d.ts +3 -3
  100. package/dist/channels/plugins/agent-tools/whatsapp-login.js +35 -35
  101. package/dist/channels-H5ThmyG8.js +1118 -0
  102. package/dist/channels-cQ-6NFCQ.js +404 -0
  103. package/dist/channels-cli-TmchKLFS.js +291 -0
  104. package/dist/channels-status-issues-DXnkXEeJ.js +16 -0
  105. package/dist/clawbot-cli-Cpbxu8dD.js +118 -0
  106. package/dist/cleanup-utils-D0L17RsX.js +96 -0
  107. package/dist/cli/daemon-cli.js +1 -1
  108. package/dist/cli--2bGSKdX.js +154 -0
  109. package/dist/command-registry-BaVPDmwn.js +242 -0
  110. package/dist/command-registry-DhLyeSbO.js +14 -0
  111. package/dist/command-secret-gateway-C5D_-jb0.js +111 -0
  112. package/dist/compact.runtime-C9a0kRAg.js +116 -0
  113. package/dist/completion-cli-Bg95upyk.js +17 -0
  114. package/dist/completion-cli-CrPdlnCH.js +445 -0
  115. package/dist/config-BbvDRSYp.js +31 -0
  116. package/dist/config-CwBv71QC.js +44 -0
  117. package/dist/config-cli-jsZsYhAl.js +678 -0
  118. package/dist/config-guard-DTaXXqly.js +118 -0
  119. package/dist/config-validation-Q6U1sP84.js +262 -0
  120. package/dist/config-value-DT3-5958.js +132 -0
  121. package/dist/configure-BJfMiVej.js +1100 -0
  122. package/dist/configure-Cist3Iza.js +243 -0
  123. package/dist/control-ui-assets-C1YDYi82.js +232 -0
  124. package/dist/control-ui-shared-Dm5Dh0Lo.js +29 -0
  125. package/dist/core-BwKq3krw.js +150 -0
  126. package/dist/core-hjBwfDsW.d.ts +87 -0
  127. package/dist/cron-cli-Bktbk7iP.js +639 -0
  128. package/dist/daemon-cli-BXyH8DBL.js +339 -0
  129. package/dist/daemon-install-mxcGYsRJ.js +180 -0
  130. package/dist/deliver-BPYUKaSp.js +111 -0
  131. package/dist/deliver-runtime-CwnLQZTN.js +111 -0
  132. package/dist/device-id-cli-XvwZbIyC.js +52 -0
  133. package/dist/device-identity-IG5DngWM.js +365 -0
  134. package/dist/devices-cli-DIsxj4xp.js +342 -0
  135. package/dist/diagnostic-DTPopFvh.js +310 -0
  136. package/dist/directory-cli-D253m0er.js +311 -0
  137. package/dist/directory-config-helpers-DpFcAbmo.d.ts +38 -0
  138. package/dist/directory.static-BXv9MXqm.js +44 -0
  139. package/dist/discord-DwFf1qp7.js +114 -0
  140. package/dist/discovery-DzRM1wzK.js +48 -0
  141. package/dist/dm-policy-shared-DKoGdUpY.d.ts +95 -0
  142. package/dist/dns-cli-BJiz6CLK.js +217 -0
  143. package/dist/docs-cli-Dq2Yi5qO.js +174 -0
  144. package/dist/doctor-completion-BPl6HiiZ.js +90 -0
  145. package/dist/doctor-config-flow-BHR1Ayyh.js +2437 -0
  146. package/dist/doctor-config-flow-PXVtrfkE.js +112 -0
  147. package/dist/enable-Cyagpq3b.js +24 -0
  148. package/dist/entry.js +4 -4
  149. package/dist/exec-approvals-cli-kLAev6bP.js +421 -0
  150. package/dist/extensions/acpx/index.d.ts +1 -1
  151. package/dist/extensions/amazon-bedrock/index.d.ts +1 -1
  152. package/dist/extensions/amazon-bedrock/index.js +4 -4
  153. package/dist/extensions/anthropic/index.d.ts +1 -1
  154. package/dist/extensions/anthropic/index.js +35 -35
  155. package/dist/extensions/bluebubbles/index.d.ts +1 -1
  156. package/dist/extensions/bluebubbles/index.js +39 -39
  157. package/dist/extensions/bluebubbles/setup-entry.d.ts +2 -2
  158. package/dist/extensions/bluebubbles/setup-entry.js +39 -39
  159. package/dist/extensions/brave/index.d.ts +1 -1
  160. package/dist/extensions/brave/index.js +5 -5
  161. package/dist/extensions/byteplus/index.d.ts +1 -1
  162. package/dist/extensions/byteplus/index.js +35 -35
  163. package/dist/extensions/cloudflare-ai-gateway/index.d.ts +1 -1
  164. package/dist/extensions/cloudflare-ai-gateway/index.js +36 -36
  165. package/dist/extensions/copilot-proxy/index.d.ts +1 -1
  166. package/dist/extensions/copilot-proxy/index.js +4 -4
  167. package/dist/extensions/device-pair/index.d.ts +1 -1
  168. package/dist/extensions/device-pair/index.js +4 -4
  169. package/dist/extensions/diagnostics-otel/index.d.ts +1 -1
  170. package/dist/extensions/diagnostics-otel/index.js +4 -4
  171. package/dist/extensions/diffs/index.d.ts +1 -1
  172. package/dist/extensions/discord/index.d.ts +1 -1
  173. package/dist/extensions/discord/index.js +40 -40
  174. package/dist/extensions/discord/setup-entry.d.ts +1 -1
  175. package/dist/extensions/discord/setup-entry.js +38 -38
  176. package/dist/extensions/elevenlabs/index.d.ts +1 -1
  177. package/dist/extensions/elevenlabs/index.js +35 -35
  178. package/dist/extensions/feishu/index.d.ts +2 -2
  179. package/dist/extensions/feishu/index.js +40 -40
  180. package/dist/extensions/feishu/setup-entry.d.ts +2 -2
  181. package/dist/extensions/feishu/setup-entry.js +37 -37
  182. package/dist/extensions/firecrawl/index.d.ts +1 -1
  183. package/dist/extensions/firecrawl/index.js +35 -35
  184. package/dist/extensions/github-copilot/index.d.ts +1 -1
  185. package/dist/extensions/github-copilot/index.js +35 -35
  186. package/dist/extensions/google/index.d.ts +1 -1
  187. package/dist/extensions/google/index.js +35 -35
  188. package/dist/extensions/googlechat/index.d.ts +1 -1
  189. package/dist/extensions/googlechat/index.js +38 -38
  190. package/dist/extensions/googlechat/setup-entry.d.ts +1 -1
  191. package/dist/extensions/googlechat/setup-entry.js +38 -38
  192. package/dist/extensions/huggingface/index.d.ts +1 -1
  193. package/dist/extensions/huggingface/index.js +35 -35
  194. package/dist/extensions/imessage/index.d.ts +1 -1
  195. package/dist/extensions/imessage/index.js +39 -39
  196. package/dist/extensions/imessage/setup-entry.d.ts +1 -1
  197. package/dist/extensions/imessage/setup-entry.js +39 -39
  198. package/dist/extensions/irc/index.d.ts +1 -1
  199. package/dist/extensions/irc/index.js +38 -38
  200. package/dist/extensions/irc/setup-entry.d.ts +2 -2
  201. package/dist/extensions/irc/setup-entry.js +38 -38
  202. package/dist/extensions/kakao-talkchannel/index.d.ts +1 -1
  203. package/dist/extensions/kakao-talkchannel/index.js +4 -4
  204. package/dist/extensions/kilocode/index.d.ts +1 -1
  205. package/dist/extensions/kilocode/index.js +35 -35
  206. package/dist/extensions/kimi-coding/index.d.ts +1 -1
  207. package/dist/extensions/kimi-coding/index.js +35 -35
  208. package/dist/extensions/line/index.d.ts +1 -1
  209. package/dist/extensions/line/index.js +37 -37
  210. package/dist/extensions/line/setup-entry.d.ts +1 -1
  211. package/dist/extensions/line/setup-entry.js +37 -37
  212. package/dist/extensions/llm-task/index.d.ts +1 -1
  213. package/dist/extensions/llm-task/index.js +35 -35
  214. package/dist/extensions/lobster/index.d.ts +1 -1
  215. package/dist/extensions/lobster/index.js +4 -4
  216. package/dist/extensions/matrix/index.d.ts +1 -1
  217. package/dist/extensions/matrix/index.js +40 -40
  218. package/dist/extensions/matrix/setup-entry.d.ts +2 -2
  219. package/dist/extensions/matrix/setup-entry.js +40 -40
  220. package/dist/extensions/mattermost/index.d.ts +1 -1
  221. package/dist/extensions/mattermost/index.js +37 -37
  222. package/dist/extensions/mattermost/setup-entry.d.ts +2 -2
  223. package/dist/extensions/mattermost/setup-entry.js +37 -37
  224. package/dist/extensions/memory-core/index.d.ts +1 -1
  225. package/dist/extensions/memory-core/index.js +4 -4
  226. package/dist/extensions/memory-lancedb/index.d.ts +1 -1
  227. package/dist/extensions/memory-lancedb/index.js +4 -4
  228. package/dist/extensions/microsoft/index.d.ts +1 -1
  229. package/dist/extensions/microsoft/index.js +35 -35
  230. package/dist/extensions/minimax/index.d.ts +1 -1
  231. package/dist/extensions/minimax/index.js +35 -35
  232. package/dist/extensions/mistral/index.d.ts +1 -1
  233. package/dist/extensions/mistral/index.js +35 -35
  234. package/dist/extensions/modelstudio/index.d.ts +1 -1
  235. package/dist/extensions/modelstudio/index.js +35 -35
  236. package/dist/extensions/moonshot/index.d.ts +1 -1
  237. package/dist/extensions/moonshot/index.js +35 -35
  238. package/dist/extensions/msteams/index.d.ts +1 -1
  239. package/dist/extensions/msteams/index.js +40 -40
  240. package/dist/extensions/msteams/setup-entry.d.ts +1 -1
  241. package/dist/extensions/msteams/setup-entry.js +40 -40
  242. package/dist/extensions/nextcloud-talk/index.d.ts +1 -1
  243. package/dist/extensions/nextcloud-talk/index.js +37 -37
  244. package/dist/extensions/nextcloud-talk/setup-entry.d.ts +2 -2
  245. package/dist/extensions/nextcloud-talk/setup-entry.js +37 -37
  246. package/dist/extensions/nostr/index.d.ts +1 -1
  247. package/dist/extensions/nostr/index.js +37 -37
  248. package/dist/extensions/nostr/setup-entry.d.ts +1 -1
  249. package/dist/extensions/nostr/setup-entry.js +37 -37
  250. package/dist/extensions/nvidia/index.d.ts +1 -1
  251. package/dist/extensions/nvidia/index.js +4 -4
  252. package/dist/extensions/ollama/index.d.ts +1 -1
  253. package/dist/extensions/ollama/index.js +7 -7
  254. package/dist/extensions/open-prose/index.d.ts +1 -1
  255. package/dist/extensions/open-prose/index.js +4 -4
  256. package/dist/extensions/openai/index.d.ts +1 -1
  257. package/dist/extensions/openai/index.js +35 -35
  258. package/dist/extensions/opencode/index.d.ts +1 -1
  259. package/dist/extensions/opencode/index.js +35 -35
  260. package/dist/extensions/opencode-go/index.d.ts +1 -1
  261. package/dist/extensions/opencode-go/index.js +35 -35
  262. package/dist/extensions/openrouter/index.d.ts +1 -1
  263. package/dist/extensions/openrouter/index.js +35 -35
  264. package/dist/extensions/openshell/index.d.ts +1 -1
  265. package/dist/extensions/openshell/index.js +35 -35
  266. package/dist/extensions/perplexity/index.d.ts +1 -1
  267. package/dist/extensions/perplexity/index.js +5 -5
  268. package/dist/extensions/phone-control/index.d.ts +1 -1
  269. package/dist/extensions/phone-control/index.js +4 -4
  270. package/dist/extensions/qianfan/index.d.ts +1 -1
  271. package/dist/extensions/qianfan/index.js +35 -35
  272. package/dist/extensions/qwen-portal-auth/index.d.ts +1 -1
  273. package/dist/extensions/qwen-portal-auth/index.js +35 -35
  274. package/dist/extensions/sglang/index.d.ts +1 -1
  275. package/dist/extensions/sglang/index.js +35 -35
  276. package/dist/extensions/signal/index.d.ts +1 -1
  277. package/dist/extensions/signal/index.js +38 -38
  278. package/dist/extensions/signal/setup-entry.d.ts +1 -1
  279. package/dist/extensions/signal/setup-entry.js +38 -38
  280. package/dist/extensions/slack/index.d.ts +1 -1
  281. package/dist/extensions/slack/index.js +39 -39
  282. package/dist/extensions/slack/setup-entry.d.ts +1 -1
  283. package/dist/extensions/slack/setup-entry.js +38 -38
  284. package/dist/extensions/synology-chat/index.d.ts +1 -1
  285. package/dist/extensions/synology-chat/index.js +37 -37
  286. package/dist/extensions/synology-chat/setup-entry.d.ts +1 -1
  287. package/dist/extensions/synology-chat/setup-entry.js +37 -37
  288. package/dist/extensions/synthetic/index.d.ts +1 -1
  289. package/dist/extensions/synthetic/index.js +35 -35
  290. package/dist/extensions/talk-voice/index.d.ts +1 -1
  291. package/dist/extensions/talk-voice/index.js +35 -35
  292. package/dist/extensions/telegram/index.d.ts +1 -1
  293. package/dist/extensions/telegram/index.js +38 -38
  294. package/dist/extensions/telegram/setup-entry.d.ts +1 -1
  295. package/dist/extensions/telegram/setup-entry.js +37 -37
  296. package/dist/extensions/thread-ownership/index.d.ts +1 -1
  297. package/dist/extensions/thread-ownership/index.js +4 -4
  298. package/dist/extensions/tlon/index.d.ts +1 -1
  299. package/dist/extensions/tlon/index.js +37 -37
  300. package/dist/extensions/tlon/setup-entry.d.ts +1 -1
  301. package/dist/extensions/tlon/setup-entry.js +37 -37
  302. package/dist/extensions/together/index.d.ts +1 -1
  303. package/dist/extensions/together/index.js +35 -35
  304. package/dist/extensions/twitch/index.d.ts +2 -2
  305. package/dist/extensions/twitch/index.js +37 -37
  306. package/dist/extensions/venice/index.d.ts +1 -1
  307. package/dist/extensions/venice/index.js +35 -35
  308. package/dist/extensions/vercel-ai-gateway/index.d.ts +1 -1
  309. package/dist/extensions/vercel-ai-gateway/index.js +36 -36
  310. package/dist/extensions/vllm/index.d.ts +1 -1
  311. package/dist/extensions/vllm/index.js +35 -35
  312. package/dist/extensions/voice-call/index.d.ts +1 -1
  313. package/dist/extensions/voice-call/index.js +35 -35
  314. package/dist/extensions/volcengine/index.d.ts +1 -1
  315. package/dist/extensions/volcengine/index.js +35 -35
  316. package/dist/extensions/whatsapp/index.d.ts +1 -1
  317. package/dist/extensions/whatsapp/index.js +38 -38
  318. package/dist/extensions/whatsapp/setup-entry.d.ts +1 -1
  319. package/dist/extensions/whatsapp/setup-entry.js +38 -38
  320. package/dist/extensions/xai/index.d.ts +1 -1
  321. package/dist/extensions/xai/index.js +35 -35
  322. package/dist/extensions/xiaomi/index.d.ts +1 -1
  323. package/dist/extensions/xiaomi/index.js +35 -35
  324. package/dist/extensions/zai/index.d.ts +1 -1
  325. package/dist/extensions/zai/index.js +35 -35
  326. package/dist/extensions/zalo/index.d.ts +1 -1
  327. package/dist/extensions/zalo/index.js +39 -39
  328. package/dist/extensions/zalo/setup-entry.d.ts +1 -1
  329. package/dist/extensions/zalo/setup-entry.js +39 -39
  330. package/dist/extensions/zalouser/index.d.ts +1 -1
  331. package/dist/extensions/zalouser/index.js +40 -40
  332. package/dist/extensions/zalouser/setup-entry.d.ts +1 -1
  333. package/dist/extensions/zalouser/setup-entry.js +40 -40
  334. package/dist/feishu-fIcnHDTd.d.ts +36 -0
  335. package/dist/gateway-cli-DofujQf3.js +26437 -0
  336. package/dist/gateway-install-token-vvtOvufH.js +163 -0
  337. package/dist/gateway-rpc-C0Vk51W7.js +26 -0
  338. package/dist/gateway-runtime-CBm3CCoA.js +69 -0
  339. package/dist/git-commit-BTWXFY41.js +177 -0
  340. package/dist/git-commit-D6GTN5Yt.js +2 -0
  341. package/dist/googlechat-BvwsCVKl.d.ts +12 -0
  342. package/dist/googlechat-DzoFLiDG.js +307 -0
  343. package/dist/group-access-DpiQnd-G.d.ts +61 -0
  344. package/dist/health-CqUU_ecm.js +570 -0
  345. package/dist/health-Dzn8BT5I.js +113 -0
  346. package/dist/heartbeat-summary-Dct2lqJj.js +57 -0
  347. package/dist/help-CtwSApfq.js +81 -0
  348. package/dist/hooks-9gokOxZ5.d.ts +6 -0
  349. package/dist/hooks-cli-DtBvd1lb.js +1000 -0
  350. package/dist/hooks-status-Bm_pGORf.js +78 -0
  351. package/dist/http-registry-D-S6a1Na.d.ts +20 -0
  352. package/dist/identity-file-Diub2a0t.js +60 -0
  353. package/dist/image-generation-CbIVzmAR.d.ts +9 -0
  354. package/dist/imessage-C7Z59nbV.js +31 -0
  355. package/dist/imessage-scXvYYHX.js +115 -0
  356. package/dist/inbound-reply-dispatch-gzPJFtkc.js +71 -0
  357. package/dist/inbound-reply-dispatch-n7U3qg15.d.ts +72 -0
  358. package/dist/index.js +2 -2
  359. package/dist/install-target-B4n74f_B.js +574 -0
  360. package/dist/installs-e1WEcS2x.js +532 -0
  361. package/dist/io-BaBxjB1v.js +9739 -0
  362. package/dist/io-CgHb1Jld.js +29 -0
  363. package/dist/irc-DxJ7uOKl.js +672 -0
  364. package/dist/library-DjjiKiBC.js +112 -0
  365. package/dist/lifecycle-core-Dn8PK6nk.js +382 -0
  366. package/dist/line/accounts.d.ts +2 -2
  367. package/dist/line/send.d.ts +1 -1
  368. package/dist/line/send.js +7 -7
  369. package/dist/line/template-messages.d.ts +1 -1
  370. package/dist/line-B5QFpgN_.d.ts +75 -0
  371. package/dist/line-BBiBiGgL.js +530 -0
  372. package/dist/llm-slug-generator-BQ09Fz6D.js +67 -0
  373. package/dist/llm-slug-generator.d.ts +1 -1
  374. package/dist/llm-slug-generator.js +36 -36
  375. package/dist/logging-CdisccbY.js +13 -0
  376. package/dist/logging-LKQSgX1d.js +30 -0
  377. package/dist/login-qr-B2ElPfmb.js +112 -0
  378. package/dist/login-qr-Di3uPIK1.js +233 -0
  379. package/dist/logs-cli-CNzOvZ2d.js +256 -0
  380. package/dist/manager-runtime-2RwW64dE.js +111 -0
  381. package/dist/manager.runtime-BacHmSFL.js +715 -0
  382. package/dist/manifest-registry-CS_p1OBQ.js +1329 -0
  383. package/dist/matrix-43_RGLZN.d.ts +68 -0
  384. package/dist/matrix-6-xpfQHf.js +1269 -0
  385. package/dist/matrix-DKYdZvGK.js +1495 -0
  386. package/dist/mcp-cli-Ci2jvv3s.js +87 -0
  387. package/dist/media-understanding.runtime-0668UZMb.js +116 -0
  388. package/dist/memory-cli-BGfRJOPh.js +111 -0
  389. package/dist/memory-search-BHhETk6u.js +17 -0
  390. package/dist/memory-search-tTD5o_rU.js +204 -0
  391. package/dist/method-scopes-B2ZKSsxQ.js +2452 -0
  392. package/dist/model-auth-markers-LqZ4qhrZ.d.ts +20 -0
  393. package/dist/model-picker-D9Gmg9vM.js +390 -0
  394. package/dist/model-picker-VOam6Dfa.js +112 -0
  395. package/dist/model-picker.runtime-B8h4yaGk.js +125 -0
  396. package/dist/model-selection-bBBxfXdb.js +653 -0
  397. package/dist/model-suppression.runtime-IpdzuuaW.js +116 -0
  398. package/dist/models-CEr8OkSA.js +118 -0
  399. package/dist/models-FgjlnyvT.js +2514 -0
  400. package/dist/models-cli-CdXULEZe.js +309 -0
  401. package/dist/models-config-UQxq76ac.js +111 -0
  402. package/dist/models-config.providers.discovery-puxTsH39.d.ts +18 -0
  403. package/dist/moldclaw-root-Cb6HRlUO.js +92 -0
  404. package/dist/monitor-BGAB5pZp.js +772 -0
  405. package/dist/monitor-C_1qA4q5.js +6823 -0
  406. package/dist/monitor-D8WcCUuA.js +782 -0
  407. package/dist/monitor-DesGoihT.js +113 -0
  408. package/dist/monitor-DhrUY3U6.js +3468 -0
  409. package/dist/monitor-DsDCIG87.js +3076 -0
  410. package/dist/monitor-dBB-luY7.js +115 -0
  411. package/dist/monitor-shared-CkicpwVc.js +444 -0
  412. package/dist/msteams-qmY7xMCK.js +852 -0
  413. package/dist/node-cli-B_2nTm80.js +2503 -0
  414. package/dist/node-resolve-BYC2FbO2.js +835 -0
  415. package/dist/nodes-cli-CBX71Wd_.js +1380 -0
  416. package/dist/nostr-BFKRoOlz.d.ts +7 -0
  417. package/dist/nostr-OB78XVlq.js +8744 -0
  418. package/dist/npm-resolution-DZJB3Hgh.js +60 -0
  419. package/dist/oauth-env-CLG8KOrz.js +10 -0
  420. package/dist/onboard-BON0C360.js +48 -0
  421. package/dist/onboard-DsKI17iq.js +25 -0
  422. package/dist/onboard-DyBwXVGT.js +589 -0
  423. package/dist/onboard-channels-BaVA02kK.js +1241 -0
  424. package/dist/onboard-channels-JJVMXpKl.js +205 -0
  425. package/dist/onboard-custom-D6YDrk9n.js +571 -0
  426. package/dist/onboard-custom-DqsNalL1.js +114 -0
  427. package/dist/onboard-helpers-DiSRTpZC.js +335 -0
  428. package/dist/onboard-helpers-DqZsjdb8.js +113 -0
  429. package/dist/onboard-hooks-pzEPZAvl.js +72 -0
  430. package/dist/onboard-remote-DFMLELsg.js +181 -0
  431. package/dist/onboard-remote-DmMYxY80.js +117 -0
  432. package/dist/onboard-search-B7FsNd7m.js +302 -0
  433. package/dist/onboard-skills-BJRdI-K3.js +133 -0
  434. package/dist/onboard-skills-Cg1YQAZa.js +117 -0
  435. package/dist/outbound-media-BHD4aJEX.d.ts +11 -0
  436. package/dist/outbound-media-CrraEXXv.js +11 -0
  437. package/dist/pairing-access-CzHpaM0R.d.ts +21 -0
  438. package/dist/pairing-cli-DSQTYgc0.js +217 -0
  439. package/dist/perplexity-CXwMDD3u.js +24 -0
  440. package/dist/persistent-dedupe-B9vrAf8t.d.ts +26 -0
  441. package/dist/pi-model-discovery-runtime-vSSbBDFG.js +111 -0
  442. package/dist/pi-tools.before-tool-call.runtime-C5yLUogH.js +381 -0
  443. package/dist/plugin-install-B1RfdrdV.js +117 -0
  444. package/dist/plugin-install-C9aaL42Y.js +184 -0
  445. package/dist/plugin-install-plan-BlfDt117.js +49 -0
  446. package/dist/plugin-registry-D2P9SYJ9.js +113 -0
  447. package/dist/plugin-registry-QtjVXmj3.js +49 -0
  448. package/dist/plugin-sdk/account-resolution.js +35 -35
  449. package/dist/plugin-sdk/acp-runtime.js +35 -35
  450. package/dist/plugin-sdk/agent-runtime.js +35 -35
  451. package/dist/plugin-sdk/bluebubbles.js +37 -37
  452. package/dist/plugin-sdk/channel-config-helpers.js +35 -35
  453. package/dist/plugin-sdk/channel-policy.js +35 -35
  454. package/dist/plugin-sdk/channel-runtime.js +35 -35
  455. package/dist/plugin-sdk/compat.js +36 -36
  456. package/dist/plugin-sdk/config-runtime.js +35 -35
  457. package/dist/plugin-sdk/conversation-runtime.js +35 -35
  458. package/dist/plugin-sdk/copilot-proxy.js +4 -4
  459. package/dist/plugin-sdk/core.js +4 -4
  460. package/dist/plugin-sdk/device-pair.js +4 -4
  461. package/dist/plugin-sdk/discord.js +35 -35
  462. package/dist/plugin-sdk/feishu.js +35 -35
  463. package/dist/plugin-sdk/gateway-runtime.js +10 -10
  464. package/dist/plugin-sdk/googlechat.js +37 -37
  465. package/dist/plugin-sdk/image-generation-runtime.js +35 -35
  466. package/dist/plugin-sdk/image-generation.js +35 -35
  467. package/dist/plugin-sdk/imessage.js +36 -36
  468. package/dist/plugin-sdk/index.js +35 -35
  469. package/dist/plugin-sdk/infra-runtime.js +35 -35
  470. package/dist/plugin-sdk/irc.js +37 -37
  471. package/dist/plugin-sdk/line.js +36 -36
  472. package/dist/plugin-sdk/llm-task.js +35 -35
  473. package/dist/plugin-sdk/lobster.js +4 -4
  474. package/dist/plugin-sdk/matrix.js +37 -37
  475. package/dist/plugin-sdk/mattermost.js +36 -36
  476. package/dist/plugin-sdk/media-runtime.js +35 -35
  477. package/dist/plugin-sdk/media-understanding-runtime.js +35 -35
  478. package/dist/plugin-sdk/media-understanding.js +35 -35
  479. package/dist/plugin-sdk/memory-lancedb.js +4 -4
  480. package/dist/plugin-sdk/minimax-portal-auth.js +4 -4
  481. package/dist/plugin-sdk/msteams.js +38 -38
  482. package/dist/plugin-sdk/nextcloud-talk.js +36 -36
  483. package/dist/plugin-sdk/nostr.js +36 -36
  484. package/dist/plugin-sdk/ollama-setup.js +9 -9
  485. package/dist/plugin-sdk/open-prose.js +4 -4
  486. package/dist/plugin-sdk/phone-control.js +4 -4
  487. package/dist/plugin-sdk/plugin-runtime.js +35 -35
  488. package/dist/plugin-sdk/provider-auth.js +35 -35
  489. package/dist/plugin-sdk/provider-models.js +5 -5
  490. package/dist/plugin-sdk/provider-onboard.js +4 -4
  491. package/dist/plugin-sdk/provider-setup.js +39 -39
  492. package/dist/plugin-sdk/provider-stream.js +4 -4
  493. package/dist/plugin-sdk/provider-usage.js +4 -4
  494. package/dist/plugin-sdk/qwen-portal-auth.js +35 -35
  495. package/dist/plugin-sdk/reply-history.js +35 -35
  496. package/dist/plugin-sdk/reply-runtime.js +35 -35
  497. package/dist/plugin-sdk/routing.js +3 -3
  498. package/dist/plugin-sdk/sandbox.js +35 -35
  499. package/dist/plugin-sdk/security-runtime.js +35 -35
  500. package/dist/plugin-sdk/self-hosted-provider-setup.js +37 -37
  501. package/dist/plugin-sdk/setup.js +35 -35
  502. package/dist/plugin-sdk/signal.js +35 -35
  503. package/dist/plugin-sdk/slack.js +35 -35
  504. package/dist/plugin-sdk/speech-runtime.js +35 -35
  505. package/dist/plugin-sdk/speech.js +35 -35
  506. package/dist/plugin-sdk/src/secrets/secure-file-store.d.ts +26 -0
  507. package/dist/plugin-sdk/src/subscription/provider.d.ts +5 -3
  508. package/dist/plugin-sdk/synology-chat.js +36 -36
  509. package/dist/plugin-sdk/talk-voice.js +4 -4
  510. package/dist/plugin-sdk/telegram.js +35 -35
  511. package/dist/plugin-sdk/text-runtime.js +7 -7
  512. package/dist/plugin-sdk/thread-ownership.js +4 -4
  513. package/dist/plugin-sdk/tlon.js +36 -36
  514. package/dist/plugin-sdk/twitch.js +35 -35
  515. package/dist/plugin-sdk/voice-call.js +35 -35
  516. package/dist/plugin-sdk/whatsapp.js +35 -35
  517. package/dist/plugin-sdk/zalo.js +38 -38
  518. package/dist/plugin-sdk/zalouser.js +38 -38
  519. package/dist/plugins/runtime/index.d.ts +1 -1
  520. package/dist/plugins/runtime/index.js +35 -35
  521. package/dist/plugins-CAULK-lt.js +111 -0
  522. package/dist/plugins-cli-BGAgYy3Z.js +917 -0
  523. package/dist/policy-WKZJ8cPK.js +143 -0
  524. package/dist/preflight-audio.runtime-Bc6Hv-u4.js +116 -0
  525. package/dist/probe-B7a_VBCB.js +47 -0
  526. package/dist/probe-BLioBOhT.js +6329 -0
  527. package/dist/probe-BkM5pykD.js +21 -0
  528. package/dist/probe-DOEaWez2.js +1793 -0
  529. package/dist/probe-DpcJ0WeP.js +129 -0
  530. package/dist/probe-auth-BcNjX8hy.js +40 -0
  531. package/dist/probe-auth-DhuAb8ls.js +48 -0
  532. package/dist/program-zG0CuBsn.js +253 -0
  533. package/dist/prompt-select-styled-B-D6NQFO.js +2673 -0
  534. package/dist/provider-api-key-auth.runtime-DgGM_pHf.js +121 -0
  535. package/dist/provider-auth-choice-BOQA0idb.js +126 -0
  536. package/dist/provider-auth-choice-helpers-hzDkh3f1.js +48 -0
  537. package/dist/provider-auth-choice-preference-BPcuoO9b.js +189 -0
  538. package/dist/provider-auth-choice.runtime-B4E0A4J8.js +123 -0
  539. package/dist/provider-auth-choices-0KaDNPBQ.js +57 -0
  540. package/dist/provider-auth-guidance-BxxMxMEt.js +34 -0
  541. package/dist/provider-auth-result-Bto1bYtS.d.ts +18 -0
  542. package/dist/provider-models-DxOmeToO.d.ts +867 -0
  543. package/dist/provider-models-xnyxy6mO.js +2113 -0
  544. package/dist/provider-ollama-setup-DBYK__ov.d.ts +32 -0
  545. package/dist/provider-ollama-setup-QzgCxj44.js +314 -0
  546. package/dist/provider-onboard-B9ionepI.js +139 -0
  547. package/dist/provider-onboard-CURxJ_UX.d.ts +40 -0
  548. package/dist/provider-runtime.runtime-DFAIaPZT.js +111 -0
  549. package/dist/provider-self-hosted-setup-CclMg3QB.js +182 -0
  550. package/dist/provider-self-hosted-setup-qeY8BYSy.d.ts +61 -0
  551. package/dist/provider-stream-Chz_EFw3.js +512 -0
  552. package/dist/provider-usage-Cn_OrdMP.js +111 -0
  553. package/dist/provider-usage-kxemdMp2.js +633 -0
  554. package/dist/provider-wizard-BMc1Dzks.js +152 -0
  555. package/dist/push-apns-CuIs_G0k.js +1038 -0
  556. package/dist/pw-ai-DUe4BbH2.js +1867 -0
  557. package/dist/qmd-manager-CAAFp7qK.js +1570 -0
  558. package/dist/qr-cli-9H9go9JE.js +113 -0
  559. package/dist/qr-cli-Bxxttvx3.js +369 -0
  560. package/dist/reactions-Dx2ypGlm.js +281 -0
  561. package/dist/read-only-account-inspect.discord.runtime-D_RVd1-r.js +116 -0
  562. package/dist/read-only-account-inspect.slack.runtime-Ckl92Rhy.js +116 -0
  563. package/dist/read-only-account-inspect.telegram.runtime-D97ssjQk.js +116 -0
  564. package/dist/redact-snapshot-ojhTflxp.js +2663 -0
  565. package/dist/register.agent-DlBmy_RL.js +439 -0
  566. package/dist/register.backup-8nOYtJqg.js +625 -0
  567. package/dist/register.configure-BV_GUQ5w.js +252 -0
  568. package/dist/register.maintenance-BafAHBum.js +574 -0
  569. package/dist/register.message-CHhfcEq2.js +709 -0
  570. package/dist/register.onboard-DjPNnlnr.js +192 -0
  571. package/dist/register.setup-BMGXI9PG.js +212 -0
  572. package/dist/register.status-health-sessions-BJMsh2AL.js +498 -0
  573. package/dist/register.subclis-B7nrik3-.js +315 -0
  574. package/dist/register.subclis-BCoAVyGn.js +13 -0
  575. package/dist/replies-BU4AvOyD.js +110 -0
  576. package/dist/resolve-channels-CDfj5NGq.js +226 -0
  577. package/dist/resolve-channels-Cz120Lvf.js +262 -0
  578. package/dist/resolve-route-DdX-HBVt.js +538 -0
  579. package/dist/resolve-users-Bc6nRqpb.js +143 -0
  580. package/dist/root-help-QAkoA7GD.js +32 -0
  581. package/dist/routes-CcJNnwTF.js +7097 -0
  582. package/dist/rpc-DDUAlBbH.js +67 -0
  583. package/dist/run-main-Cf8vXm6i.js +424 -0
  584. package/dist/runtime-Bitmi8Er.d.ts +26 -0
  585. package/dist/runtime-discord-ops.runtime-DWBnG-Hf.js +9078 -0
  586. package/dist/runtime-slack-ops.runtime-oYfbYvX4.js +4556 -0
  587. package/dist/runtime-telegram-ops.runtime-EPGDYN1f.js +133 -0
  588. package/dist/runtime-whatsapp-login.runtime-BGJoKM2h.js +114 -0
  589. package/dist/runtime-whatsapp-outbound.runtime-D3Sag6Bv.js +117 -0
  590. package/dist/sandbox-cli-waaYyhsC.js +535 -0
  591. package/dist/search-manager-BjDsOXzB.js +16 -0
  592. package/dist/search-manager-D-G9UaXe.js +386 -0
  593. package/dist/secrets-cli-BmeEhlzt.js +2070 -0
  594. package/dist/security-cli-CSsLnFuN.js +575 -0
  595. package/dist/send-6o7piqfv.js +100 -0
  596. package/dist/send-99FyFLgk.js +629 -0
  597. package/dist/send-B1pX9_Oc.js +283 -0
  598. package/dist/send-Dg5-AjXW.js +1025 -0
  599. package/dist/send-LdV9TRoN.js +631 -0
  600. package/dist/server-node-events-BAUUKNFW.js +506 -0
  601. package/dist/server-zI_K-D05.js +107 -0
  602. package/dist/sessions-DJGywtY2.js +112 -0
  603. package/dist/sessions-WR0GKdGl.js +218 -0
  604. package/dist/setup-2LvBON2J.js +387 -0
  605. package/dist/setup-CFIMq-Pz.d.ts +37 -0
  606. package/dist/setup-binary-CcAv8NXz.js +406 -0
  607. package/dist/setup-browser-C4eRV3h6.js +70 -0
  608. package/dist/setup-core-ByqF8Nvc.js +166 -0
  609. package/dist/setup-core-COkq8Zop.js +205 -0
  610. package/dist/setup-core-C_o77DVV.js +143 -0
  611. package/dist/setup-core-tAdHbqi9.js +47 -0
  612. package/dist/setup-surface-DMHtZByF.js +490 -0
  613. package/dist/setup-wizard-helpers-r0J6l8ST.d.ts +203 -0
  614. package/dist/setup.finalize-pTkXn8pV.js +522 -0
  615. package/dist/setup.gateway-config-D1wiUQe6.js +343 -0
  616. package/dist/shared-BaM_tMxk.js +102 -0
  617. package/dist/shared-BgUgXsM9.js +75 -0
  618. package/dist/shared-CezRuVfl.js +96 -0
  619. package/dist/shared-DQgf3R0B.js +298 -0
  620. package/dist/shared-RA6kxQfu.js +182 -0
  621. package/dist/signal-xxP4dGx7.js +114 -0
  622. package/dist/skills-Bio8GwTE.js +20 -0
  623. package/dist/skills-DE_MXFSN.js +853 -0
  624. package/dist/skills-cli-BGuW-tKw.js +292 -0
  625. package/dist/skills-install-BIlG41ei.js +763 -0
  626. package/dist/skills-status-B08PtBc_.js +21 -0
  627. package/dist/skills-status-CzM008aB.js +169 -0
  628. package/dist/slack-Bzt3M7d8.js +114 -0
  629. package/dist/slash-commands.runtime-EYqj8SbV.js +128 -0
  630. package/dist/slash-dispatch.runtime-vWH92PUY.js +141 -0
  631. package/dist/slash-skill-commands.runtime-sUTjM3J0.js +116 -0
  632. package/dist/src-Iso9-DPo.js +1701 -0
  633. package/dist/status-8S882KRO.js +43 -0
  634. package/dist/status-BF7h_jTB.js +126 -0
  635. package/dist/status-DxOIyRm9.js +131 -0
  636. package/dist/status-HlvixAOq.js +606 -0
  637. package/dist/status-json-CShBo8A6.js +288 -0
  638. package/dist/status-qhtgsJFd.js +1599 -0
  639. package/dist/status.link-channel-D3dLYZiH.js +143 -0
  640. package/dist/status.scan.deps.runtime-mCmOLzpG.js +126 -0
  641. package/dist/status.scan.runtime-CYuUlDeg.js +119 -0
  642. package/dist/status.summary-BjB1aTjV.js +592 -0
  643. package/dist/status.summary.runtime-DW4MOt1Z.js +118 -0
  644. package/dist/status.update-BxblMS7P.js +77 -0
  645. package/dist/subagent-orphan-recovery-CCVopsdP.js +307 -0
  646. package/dist/subagent-registry-runtime-oG47Fzvg.js +111 -0
  647. package/dist/subscription-CpFdxuFS.js +33 -0
  648. package/dist/subscription-DaA1urx-.js +102 -0
  649. package/dist/subscription-cli-Bvto9EmO.js +134 -0
  650. package/dist/synology-chat-CVy1tJGY.js +297 -0
  651. package/dist/system-cli-BvNps8sl.js +94 -0
  652. package/dist/telegram/audit.d.ts +1 -1
  653. package/dist/telegram/audit.js +1 -1
  654. package/dist/telegram/token.d.ts +1 -1
  655. package/dist/telegram/token.js +35 -35
  656. package/dist/telegram-Dug8pd82.js +114 -0
  657. package/dist/text-chunking-CQ6ttpWs.js +84 -0
  658. package/dist/text-chunking-DDUU_vAF.d.ts +79 -0
  659. package/dist/tlon-BnckVr_7.js +433 -0
  660. package/dist/tui-DXTge9Ac.js +3834 -0
  661. package/dist/tui-cli-BRUfLUTd.js +137 -0
  662. package/dist/types-2H_e7eWT.d.ts +45 -0
  663. package/dist/types-ZKnGUchG.d.ts +22692 -0
  664. package/dist/types.base-BFiQZ4J9.d.ts +188 -0
  665. package/dist/ui--iP08xRA.js +31 -0
  666. package/dist/update-CtxBD-Cf.js +1036 -0
  667. package/dist/update-cli-DPE3GCHJ.js +1503 -0
  668. package/dist/update-offset-store-BlBY7dWj.js +112 -0
  669. package/dist/update-runner-Cfcrhf2j.js +1496 -0
  670. package/dist/upsert-with-lock-BZU7Le8n.js +33 -0
  671. package/dist/usage-Czgwvg0h.js +115 -0
  672. package/dist/web-BGDXhunB.js +112 -0
  673. package/dist/web-shared-B5Q0mIJq.d.ts +45 -0
  674. package/dist/webhook-request-guards-CsKDhZJr.d.ts +76 -0
  675. package/dist/webhook-targets-CjxuEE9C.d.ts +106 -0
  676. package/dist/webhook-targets-Dtt6rH4N.js +181 -0
  677. package/dist/webhooks-cli-Wl9y6AWW.js +350 -0
  678. package/dist/whatsapp-D64cBQ_9.js +114 -0
  679. package/dist/whatsapp-actions-CVoTcagb.js +167 -0
  680. package/dist/workspace-DJ_S272u.js +484 -0
  681. package/dist/workspace-DbZSqjw0.js +289 -0
  682. package/dist/workspace-cli-D93DLmAh.js +154 -0
  683. package/dist/workspace-dirs-CGeIPpGN.js +2003 -0
  684. package/dist/zalo-CK2dlGmu.d.ts +9 -0
  685. package/dist/zalo-DxoY8M22.js +415 -0
  686. package/dist/zalouser-DTHIrPvs.js +30911 -0
  687. package/extensions/discord/src/monitor/allow-list.ts +8 -1
  688. package/extensions/discord/src/monitor/message-handler.preflight.ts +4 -1
  689. package/package.json +1 -1
  690. package/dist/accounts-CS8U4v8C.js +0 -114
  691. package/dist/accounts-gLr-Udmt.d.ts +0 -103
  692. package/dist/acp-cli-BGT0jXcC.js +0 -2093
  693. package/dist/actions.runtime-BfckTw6c.js +0 -119
  694. package/dist/actions.runtime-Cl9mBfqH.js +0 -133
  695. package/dist/agent-scope-C-YmLnnb.js +0 -208
  696. package/dist/agents-CydD54p8.js +0 -222
  697. package/dist/agents-DpQsZO6O.js +0 -853
  698. package/dist/agents.config-XU7IsYE-.js +0 -121
  699. package/dist/agents.config-ssoQXuvF.js +0 -17
  700. package/dist/allow-list-Cfn6lmMK.js +0 -81
  701. package/dist/allowlist-CCYXVpM9.js +0 -142
  702. package/dist/api-BoXoFKxy.js +0 -117
  703. package/dist/audit-Bv05N5o9.js +0 -787
  704. package/dist/audit-CIWW1Aqm.js +0 -54
  705. package/dist/audit-channel.collect.runtime-Bi7yrdcO.js +0 -605
  706. package/dist/audit-channel.runtime-C_NDweiW.js +0 -121
  707. package/dist/audit-extra.async-Dp7OKSXg.js +0 -813
  708. package/dist/audit-membership-runtime-B8FQ6VtN.js +0 -162
  709. package/dist/audit.deep.runtime-CXhobL6b.js +0 -25
  710. package/dist/audit.nondeep.runtime-CrEm3T16.js +0 -832
  711. package/dist/audit.runtime-CJPKj1Zg.js +0 -118
  712. package/dist/auth-Byfp0flq.js +0 -101
  713. package/dist/auth-choice-BgOjdeXN.js +0 -507
  714. package/dist/auth-choice-CD1Heq0M.js +0 -122
  715. package/dist/auth-choice-ePNfg0iQ.js +0 -268
  716. package/dist/auth-choice-options-BlewQWI0.js +0 -123
  717. package/dist/auth-choice-prompt-BP2b6aXz.js +0 -36
  718. package/dist/auth-choice-prompt-Cmwl4n97.js +0 -115
  719. package/dist/auth-choice.apply-helpers-Dq-nxuuX.js +0 -66
  720. package/dist/auth-choice.plugin-providers.runtime-B23kOUzQ.js +0 -119
  721. package/dist/auth-profiles-1kPLbBwI.js +0 -127823
  722. package/dist/auth-profiles.runtime-DAfSjku1.js +0 -116
  723. package/dist/banner-DeOsobLO.js +0 -342
  724. package/dist/bluebubbles-BsLGedBM.js +0 -64
  725. package/dist/bluebubbles-U2sAfO4_.d.ts +0 -6
  726. package/dist/bot-DW12K3bO.d.ts +0 -478
  727. package/dist/brave-BoWimrLe.js +0 -24
  728. package/dist/browser-cli-D_S3wEYE.js +0 -1494
  729. package/dist/call-ByEzDJ1_.js +0 -640
  730. package/dist/call-CHCWVg-O.js +0 -39
  731. package/dist/channel-3VC0oOMu.js +0 -214
  732. package/dist/channel-B9fCBPiS.js +0 -207
  733. package/dist/channel-B9q775cM.js +0 -562
  734. package/dist/channel-BG3UK54j.js +0 -803
  735. package/dist/channel-BRQAdMML.js +0 -352
  736. package/dist/channel-BmlLp933.js +0 -1321
  737. package/dist/channel-By6KvdTG.js +0 -920
  738. package/dist/channel-C8rRsdf6.js +0 -226
  739. package/dist/channel-CLEDBbXE.js +0 -943
  740. package/dist/channel-CMvBAG7o.js +0 -306
  741. package/dist/channel-CmlxxjHY.js +0 -1598
  742. package/dist/channel-CqG6_xN0.js +0 -949
  743. package/dist/channel-DNueHKs92.js +0 -316
  744. package/dist/channel-DUtyN7BX.js +0 -4681
  745. package/dist/channel-DWD6GrfZ.js +0 -538
  746. package/dist/channel-DaRYMYzj.js +0 -619
  747. package/dist/channel-Dj6BgLp8.js +0 -575
  748. package/dist/channel-account-context-Ba3u5D21.js +0 -103
  749. package/dist/channel-crabk6Em.js +0 -542
  750. package/dist/channel-i8uqQaK2.js +0 -497
  751. package/dist/channel-options-xljvwHS2.js +0 -50
  752. package/dist/channel-plugin-ids-DAgknSG4.js +0 -26
  753. package/dist/channel-summary-dHTMCG75.js +0 -111
  754. package/dist/channel-xVWQ96Ni.js +0 -397
  755. package/dist/channel.runtime-B6PoZ4BV.js +0 -182
  756. package/dist/channel.runtime-BPZmo57e.js +0 -404
  757. package/dist/channel.runtime-B_1uGR-U.js +0 -199
  758. package/dist/channel.runtime-BiXnPU0d.js +0 -218
  759. package/dist/channel.runtime-BpvDc9sv.js +0 -870
  760. package/dist/channel.runtime-CUua3W80.js +0 -418
  761. package/dist/channel.runtime-CaCBTd0A.js +0 -179
  762. package/dist/channel.runtime-D0FfYvUj.js +0 -4011
  763. package/dist/channel.runtime-DhoJtpvJ.js +0 -241
  764. package/dist/channel.runtime-Kj9EXNE0.js +0 -127
  765. package/dist/channel.runtime-r4tPuPyh.js +0 -171
  766. package/dist/channel.setup-B7d_grfe.js +0 -6
  767. package/dist/channel.setup-C0vu1fhi.js +0 -9
  768. package/dist/channel.setup-CAI0FNHj.js +0 -11
  769. package/dist/channel.setup-CkDVwv5R.js +0 -57
  770. package/dist/channel.setup-Cpd00YqQ.js +0 -8
  771. package/dist/channel.setup-DbBz1-WT.js +0 -9
  772. package/dist/channel.setup-GZnAvD9g.js +0 -8
  773. package/dist/channels-5H484RSw.js +0 -1118
  774. package/dist/channels-BnPudfyx.js +0 -404
  775. package/dist/channels-cli-WIC-QeH_.js +0 -291
  776. package/dist/channels-status-issues-RDmzovJU.js +0 -16
  777. package/dist/clawbot-cli-BgutNwf8.js +0 -118
  778. package/dist/cleanup-utils-DBl1Aij1.js +0 -96
  779. package/dist/cli-1P7u6zqu.js +0 -154
  780. package/dist/command-registry-B8jovrws.js +0 -232
  781. package/dist/command-registry-DtDl1FVm.js +0 -14
  782. package/dist/command-secret-gateway-BgUo3FxJ.js +0 -111
  783. package/dist/compact.runtime-CXbXM0AU.js +0 -116
  784. package/dist/completion-cli-Cik_owAE.js +0 -17
  785. package/dist/completion-cli-RU3P2RSl.js +0 -445
  786. package/dist/config-5HUpB1L1.js +0 -31
  787. package/dist/config-cli-QHaUHoZI.js +0 -433
  788. package/dist/config-guard-C9Sn3pE-.js +0 -118
  789. package/dist/config-sW57gztj.js +0 -44
  790. package/dist/config-validation-5LkjIKNt.js +0 -262
  791. package/dist/config-value-CtTWALxG.js +0 -132
  792. package/dist/configure-BmR2TPLf.js +0 -243
  793. package/dist/configure-DaLN-5xM.js +0 -1100
  794. package/dist/control-ui-assets-CH3MYmAo.js +0 -232
  795. package/dist/control-ui-shared-CA77PTml.js +0 -29
  796. package/dist/core-CvDzLs7B.js +0 -150
  797. package/dist/core-dPA4nFkn.d.ts +0 -87
  798. package/dist/cron-cli-tguLpzyq.js +0 -639
  799. package/dist/daemon-cli-ptosOkL8.js +0 -339
  800. package/dist/daemon-install-DzU4EnVa.js +0 -180
  801. package/dist/deliver-DwxFoHM3.js +0 -111
  802. package/dist/deliver-runtime-DOdDyaPI.js +0 -111
  803. package/dist/device-id-cli-GopvlxxZ.js +0 -52
  804. package/dist/device-identity-CRfhC3_s.js +0 -365
  805. package/dist/devices-cli-ain7ESqU.js +0 -342
  806. package/dist/diagnostic-D96Xaqrj.js +0 -310
  807. package/dist/directory-cli-fh1UxGgY.js +0 -311
  808. package/dist/directory-config-helpers-CpU1oflo.d.ts +0 -38
  809. package/dist/directory.static-CKjJUNGl.js +0 -44
  810. package/dist/discord-CflhwDEM.js +0 -114
  811. package/dist/discovery-x0ZqY4AB.js +0 -48
  812. package/dist/dm-policy-shared-73A52W6E.d.ts +0 -95
  813. package/dist/dns-cli-DCHyKjGf.js +0 -217
  814. package/dist/docs-cli-D3OoqYSP.js +0 -174
  815. package/dist/doctor-completion-Bq2eP87s.js +0 -90
  816. package/dist/doctor-config-flow-D8XRG9Ku.js +0 -2437
  817. package/dist/doctor-config-flow-DGiF1HGc.js +0 -112
  818. package/dist/enable-0QSF4YGH.js +0 -24
  819. package/dist/exec-approvals-cli-Bncym0Gd.js +0 -421
  820. package/dist/feishu-B5JDcyF9.d.ts +0 -36
  821. package/dist/gateway-cli-DYscsmA-.js +0 -26437
  822. package/dist/gateway-install-token-CNv17ac9.js +0 -163
  823. package/dist/gateway-rpc-BGC1Rxvg.js +0 -26
  824. package/dist/gateway-runtime-D89mSQPB.js +0 -69
  825. package/dist/git-commit-CeLH5Ozm.js +0 -2
  826. package/dist/git-commit-DUKRiCP-.js +0 -177
  827. package/dist/googlechat-BgXeXjd1.js +0 -307
  828. package/dist/googlechat-De-T7C31.d.ts +0 -12
  829. package/dist/group-access-Deh1tVNr.d.ts +0 -61
  830. package/dist/health-BEjzWwaB.js +0 -570
  831. package/dist/health-FjqrWQL6.js +0 -113
  832. package/dist/heartbeat-summary-CfdSA9M1.js +0 -57
  833. package/dist/help-BZeVprq1.js +0 -81
  834. package/dist/hooks-B5pYs_d7.d.ts +0 -6
  835. package/dist/hooks-cli-B7uGJs2O.js +0 -1000
  836. package/dist/hooks-status-CfceaUSg.js +0 -78
  837. package/dist/http-registry-C-KXqwnj.d.ts +0 -20
  838. package/dist/identity-file-sshkKKIr.js +0 -60
  839. package/dist/image-generation-CafM5hZh.d.ts +0 -9
  840. package/dist/imessage-BcV3WGx_.js +0 -31
  841. package/dist/imessage-Dhje7Ty-.js +0 -115
  842. package/dist/inbound-reply-dispatch-C73_7SOl.js +0 -71
  843. package/dist/inbound-reply-dispatch-DmL0KWLe.d.ts +0 -72
  844. package/dist/install-target-D7NRhfzc.js +0 -574
  845. package/dist/installs-Bj6jblqc.js +0 -532
  846. package/dist/io-CMfWWPXQ.js +0 -9738
  847. package/dist/io-CV844hAM.js +0 -29
  848. package/dist/irc-DKi1fDYI.js +0 -672
  849. package/dist/library-rygTG3oA.js +0 -112
  850. package/dist/lifecycle-core-BPlvShWY.js +0 -382
  851. package/dist/line-CGsemKWJ.js +0 -530
  852. package/dist/line-CKU3ER-n.d.ts +0 -75
  853. package/dist/llm-slug-generator-DlhVyMqT.js +0 -67
  854. package/dist/logging-5wu9k6w4.js +0 -30
  855. package/dist/logging-CxP9suT8.js +0 -13
  856. package/dist/login-qr-BcDsiwHs.js +0 -233
  857. package/dist/login-qr-Y8pJ5yV4.js +0 -112
  858. package/dist/logs-cli-XI9oVXpH.js +0 -256
  859. package/dist/manager-runtime-DkIlXBhD.js +0 -111
  860. package/dist/manager.runtime-Q0q2rJCC.js +0 -715
  861. package/dist/manifest-registry-DAd0SRAP.js +0 -1329
  862. package/dist/matrix-BI0DBBrG.js +0 -1495
  863. package/dist/matrix-DiABGjJR.js +0 -1269
  864. package/dist/matrix-fC6NrFM5.d.ts +0 -68
  865. package/dist/mcp-cli-BOyn_DLL.js +0 -87
  866. package/dist/media-understanding.runtime-DjUa7Dka.js +0 -116
  867. package/dist/memory-cli-CJd_vl-Y.js +0 -111
  868. package/dist/memory-search-CEEItIFR.js +0 -17
  869. package/dist/memory-search-Cv1SBrn7.js +0 -204
  870. package/dist/method-scopes-CQE7-bZ-.js +0 -2452
  871. package/dist/model-auth-markers-B1bbs9Qd.d.ts +0 -20
  872. package/dist/model-picker-D6_89XHg.js +0 -112
  873. package/dist/model-picker-Svaw-APs.js +0 -390
  874. package/dist/model-picker.runtime-Chi9nV7A.js +0 -125
  875. package/dist/model-selection-hL8i1Jbs.js +0 -653
  876. package/dist/model-suppression.runtime-DjWJZ0X-.js +0 -116
  877. package/dist/models-7qj1dG_W.js +0 -118
  878. package/dist/models-BPOB_xJF.js +0 -2514
  879. package/dist/models-cli-DdlOVUjS.js +0 -309
  880. package/dist/models-config-CBqUS-jX.js +0 -111
  881. package/dist/models-config.providers.discovery-BKB5JH9M.d.ts +0 -18
  882. package/dist/moldclaw-root-D6PbhbZk.js +0 -88
  883. package/dist/monitor-BPYhkEqF.js +0 -782
  884. package/dist/monitor-BuTcQ24j.js +0 -3468
  885. package/dist/monitor-CuXvNhFh.js +0 -113
  886. package/dist/monitor-D-TqSIHF.js +0 -6823
  887. package/dist/monitor-DRSgo9u2.js +0 -3076
  888. package/dist/monitor-DcHch39z.js +0 -772
  889. package/dist/monitor-DsHBMrXp.js +0 -115
  890. package/dist/monitor-shared-CL8T4gt1.js +0 -444
  891. package/dist/msteams-7FMwTvQG.js +0 -852
  892. package/dist/node-cli-BCjaSCZM.js +0 -2503
  893. package/dist/node-resolve-D5Hvcgyx.js +0 -835
  894. package/dist/nodes-cli-Dd_SNbkt.js +0 -1380
  895. package/dist/nostr-D8scBiYq.d.ts +0 -7
  896. package/dist/nostr-DBTFTxKs.js +0 -8744
  897. package/dist/npm-resolution-CYfb3MHG.js +0 -60
  898. package/dist/oauth-env-zPt5RywA.js +0 -10
  899. package/dist/onboard-BEFQQeig.js +0 -25
  900. package/dist/onboard-CJHNyxJh.js +0 -48
  901. package/dist/onboard-D_3UeLEN.js +0 -589
  902. package/dist/onboard-channels-B_JL0Djc.js +0 -1241
  903. package/dist/onboard-channels-CqZzHt2C.js +0 -205
  904. package/dist/onboard-custom-CER3Ggbq.js +0 -571
  905. package/dist/onboard-custom-bNRdGECb.js +0 -114
  906. package/dist/onboard-helpers-BK0Hsb7Y.js +0 -335
  907. package/dist/onboard-helpers-CXZ5RPoR.js +0 -113
  908. package/dist/onboard-hooks-1NsxEDjH.js +0 -72
  909. package/dist/onboard-remote-DuKhC_7W.js +0 -117
  910. package/dist/onboard-remote-OwRcDuB3.js +0 -181
  911. package/dist/onboard-search-Cy8dOq2W.js +0 -302
  912. package/dist/onboard-skills-D5phRa6r.js +0 -117
  913. package/dist/onboard-skills-c9qWCNe9.js +0 -133
  914. package/dist/outbound-media-CgNYEQWb.d.ts +0 -11
  915. package/dist/outbound-media-DYRO2vTD.js +0 -11
  916. package/dist/pairing-access-Dsiu5Mvl.d.ts +0 -21
  917. package/dist/pairing-cli-BOnv0TYn.js +0 -217
  918. package/dist/perplexity-EZwC3y2b.js +0 -24
  919. package/dist/persistent-dedupe-DMLOqJ23.d.ts +0 -26
  920. package/dist/pi-model-discovery-runtime-BToY3A6K.js +0 -111
  921. package/dist/pi-tools.before-tool-call.runtime-D_acPtld.js +0 -381
  922. package/dist/plugin-install-CgJpSjYd.js +0 -184
  923. package/dist/plugin-install-Cl1A4EF6.js +0 -117
  924. package/dist/plugin-install-plan-Dc2Z4DeU.js +0 -49
  925. package/dist/plugin-registry-B1UaWrQD.js +0 -49
  926. package/dist/plugin-registry-Cy8biwnn.js +0 -113
  927. package/dist/plugins-CXwvg50F.js +0 -111
  928. package/dist/plugins-cli-Uvzp2aYV.js +0 -917
  929. package/dist/policy-DsMBbEe7.js +0 -143
  930. package/dist/preflight-audio.runtime-hWsZIYvc.js +0 -116
  931. package/dist/probe-CNsSf1Uf.js +0 -6329
  932. package/dist/probe-CqOIrPhb.js +0 -47
  933. package/dist/probe-DH6gDw-h.js +0 -129
  934. package/dist/probe-DM16PLf4.js +0 -21
  935. package/dist/probe-DvAEEWYr.js +0 -1793
  936. package/dist/probe-auth-COfgCble.js +0 -48
  937. package/dist/probe-auth-I_5TX1Eh.js +0 -40
  938. package/dist/program-Dz80sgTU.js +0 -253
  939. package/dist/prompt-select-styled-wQehwFxK.js +0 -2673
  940. package/dist/provider-api-key-auth.runtime-BR9GU4ya.js +0 -121
  941. package/dist/provider-auth-choice-CdhA84kr.js +0 -126
  942. package/dist/provider-auth-choice-helpers-kabp_0zA.js +0 -48
  943. package/dist/provider-auth-choice-preference-se3zAM_2.js +0 -189
  944. package/dist/provider-auth-choice.runtime-BMc8-xNQ.js +0 -123
  945. package/dist/provider-auth-choices-CYsCViGi.js +0 -57
  946. package/dist/provider-auth-guidance-CMjUWlNf.js +0 -34
  947. package/dist/provider-auth-result-Cw6qIhO-.d.ts +0 -18
  948. package/dist/provider-models-BCId_Lfu.js +0 -2113
  949. package/dist/provider-models-Ok-DrSiY.d.ts +0 -867
  950. package/dist/provider-ollama-setup-B6XJZ0So.js +0 -314
  951. package/dist/provider-ollama-setup-lGDdTl0b.d.ts +0 -32
  952. package/dist/provider-onboard-CSPi7jOK.d.ts +0 -40
  953. package/dist/provider-onboard-Ca0TaNud.js +0 -139
  954. package/dist/provider-runtime.runtime-DwwkHw_7.js +0 -111
  955. package/dist/provider-self-hosted-setup-BEKLVGpj.js +0 -182
  956. package/dist/provider-self-hosted-setup-Df91By-J.d.ts +0 -61
  957. package/dist/provider-stream-DrUD69ai.js +0 -512
  958. package/dist/provider-usage-BgKHCnjr.js +0 -111
  959. package/dist/provider-usage-D8EZpFz9.js +0 -633
  960. package/dist/provider-wizard-DMdb-zj_.js +0 -152
  961. package/dist/push-apns-BPH6d4VV.js +0 -1038
  962. package/dist/pw-ai-DttfldtL.js +0 -1867
  963. package/dist/qmd-manager-CybcDUfk.js +0 -1570
  964. package/dist/qr-cli-8NcmJ8Ft.js +0 -369
  965. package/dist/qr-cli-DWe0Our3.js +0 -113
  966. package/dist/reactions-D6N0LR16.js +0 -281
  967. package/dist/read-only-account-inspect.discord.runtime-CqUWTRfl.js +0 -116
  968. package/dist/read-only-account-inspect.slack.runtime-9-jpln3q.js +0 -116
  969. package/dist/read-only-account-inspect.telegram.runtime-EKPI1D7n.js +0 -116
  970. package/dist/redact-snapshot-DwJEIVk9.js +0 -2663
  971. package/dist/register.agent-D3YdDirP.js +0 -439
  972. package/dist/register.backup-dR27qCuo.js +0 -625
  973. package/dist/register.configure-BjFhkkka.js +0 -252
  974. package/dist/register.maintenance-DiMQJIOa.js +0 -574
  975. package/dist/register.message-CdZsKYH1.js +0 -709
  976. package/dist/register.onboard-B0rV1eaO.js +0 -192
  977. package/dist/register.setup-wKMvohzo.js +0 -212
  978. package/dist/register.status-health-sessions-BJ68m6pt.js +0 -498
  979. package/dist/register.subclis-CnnrWt2a.js +0 -315
  980. package/dist/register.subclis-lSvTkC6z.js +0 -13
  981. package/dist/replies-BABt9b48.js +0 -110
  982. package/dist/resolve-channels-BqZFl2Ux.js +0 -262
  983. package/dist/resolve-channels-DjQLXb7B.js +0 -226
  984. package/dist/resolve-route-CSHDsa_m.js +0 -538
  985. package/dist/resolve-users-BG6HaSR5.js +0 -143
  986. package/dist/root-help-ohmaCyC_.js +0 -32
  987. package/dist/routes-4k2kpvoT.js +0 -7097
  988. package/dist/rpc-Cnwn4Q6L.js +0 -67
  989. package/dist/run-main-VYlacKA0.js +0 -424
  990. package/dist/runtime-D61jzMiI.d.ts +0 -26
  991. package/dist/runtime-discord-ops.runtime-DafrU-rI.js +0 -9078
  992. package/dist/runtime-slack-ops.runtime-CdXBKXwd.js +0 -4556
  993. package/dist/runtime-telegram-ops.runtime-B12sF7gE.js +0 -133
  994. package/dist/runtime-whatsapp-login.runtime-CqEudH37.js +0 -114
  995. package/dist/runtime-whatsapp-outbound.runtime-D5m2qyn-.js +0 -117
  996. package/dist/sandbox-cli-CHJiEWXB.js +0 -535
  997. package/dist/search-manager-BtNC3-i_.js +0 -16
  998. package/dist/search-manager-C7J7B3_a.js +0 -386
  999. package/dist/secrets-cli-C6yIWBbN.js +0 -2070
  1000. package/dist/security-cli-BVu9BkjD.js +0 -575
  1001. package/dist/send-BSreC7rr.js +0 -631
  1002. package/dist/send-BsLHQG_B.js +0 -1025
  1003. package/dist/send-BuNhp8PH.js +0 -283
  1004. package/dist/send-DOCswVar.js +0 -100
  1005. package/dist/send-Dl0LLErk.js +0 -629
  1006. package/dist/server-node-events-Bq2067EG.js +0 -506
  1007. package/dist/server-y38L7N5H.js +0 -107
  1008. package/dist/sessions-BV8gXURR.js +0 -112
  1009. package/dist/sessions-dl1Kc-Ci.js +0 -218
  1010. package/dist/setup-BSPXdMuK.d.ts +0 -37
  1011. package/dist/setup-DGszQH0_.js +0 -387
  1012. package/dist/setup-binary-C17YnmA8.js +0 -406
  1013. package/dist/setup-browser-CPx-nEsr.js +0 -70
  1014. package/dist/setup-core-BByHN1ME.js +0 -143
  1015. package/dist/setup-core-C0KPlBmL.js +0 -47
  1016. package/dist/setup-core-Cq37G6of.js +0 -166
  1017. package/dist/setup-core-uO84_Y75.js +0 -205
  1018. package/dist/setup-surface-BEMi7Rmb.js +0 -490
  1019. package/dist/setup-wizard-helpers-Ck9wDR0b.d.ts +0 -203
  1020. package/dist/setup.finalize-BzPBa8zW.js +0 -522
  1021. package/dist/setup.gateway-config-DdwkF-8e.js +0 -343
  1022. package/dist/shared-BCw4SKjB.js +0 -96
  1023. package/dist/shared-CjNzsULP.js +0 -75
  1024. package/dist/shared-Cu1BE7ZE.js +0 -298
  1025. package/dist/shared-DSClmyUn.js +0 -182
  1026. package/dist/shared-DyJdGH6y.js +0 -102
  1027. package/dist/signal-Dyv4NZsB.js +0 -114
  1028. package/dist/skills-CbB5b27M.js +0 -853
  1029. package/dist/skills-CnfI7Szw.js +0 -20
  1030. package/dist/skills-cli-CavB1f_3.js +0 -292
  1031. package/dist/skills-install-B1OBdgd0.js +0 -763
  1032. package/dist/skills-status-B3gAmIbW.js +0 -169
  1033. package/dist/skills-status-DrHhFgU9.js +0 -21
  1034. package/dist/slack-BRzqnoAz.js +0 -114
  1035. package/dist/slash-commands.runtime-BK88kgds.js +0 -128
  1036. package/dist/slash-dispatch.runtime-COGywwJE.js +0 -141
  1037. package/dist/slash-skill-commands.runtime-Ti4brxgh.js +0 -116
  1038. package/dist/src-DUR6OQxI.js +0 -1701
  1039. package/dist/status-C6dgQY9a.js +0 -131
  1040. package/dist/status-CNK0Q7QH.js +0 -606
  1041. package/dist/status-DBcX0DSC.js +0 -43
  1042. package/dist/status-DKgFgbwv.js +0 -1599
  1043. package/dist/status-Wn5lhNAc.js +0 -126
  1044. package/dist/status-json-D2EkWqAl.js +0 -288
  1045. package/dist/status.link-channel-D3ULIdEa.js +0 -143
  1046. package/dist/status.scan.deps.runtime-BsjWTAm4.js +0 -126
  1047. package/dist/status.scan.runtime-D4HbzROD.js +0 -119
  1048. package/dist/status.summary-C3YxPrDK.js +0 -592
  1049. package/dist/status.summary.runtime-DAkXPSaK.js +0 -118
  1050. package/dist/status.update-B4NnN9P1.js +0 -77
  1051. package/dist/subagent-orphan-recovery-QiQEBv36.js +0 -307
  1052. package/dist/subagent-registry-runtime-BJatPQFK.js +0 -111
  1053. package/dist/subscription-BhZORXN9.js +0 -100
  1054. package/dist/subscription-QEUjQRMv.js +0 -33
  1055. package/dist/subscription-cli-HrULlAgc.js +0 -134
  1056. package/dist/synology-chat-DB76GWMN.js +0 -297
  1057. package/dist/system-cli-D8jDwWuL.js +0 -94
  1058. package/dist/telegram-BHiiqKkQ.js +0 -114
  1059. package/dist/text-chunking-Baonm9Lu.js +0 -84
  1060. package/dist/text-chunking-DzB11ONk.d.ts +0 -79
  1061. package/dist/tlon-DLESxNgD.js +0 -433
  1062. package/dist/tui-C75zi2Cl.js +0 -3834
  1063. package/dist/tui-cli-DFwx5e6i.js +0 -137
  1064. package/dist/types-BKldC9YN.d.ts +0 -22692
  1065. package/dist/types-MeyueBE0.d.ts +0 -45
  1066. package/dist/types.base-Cw0-zIvE.d.ts +0 -188
  1067. package/dist/ui-B55NOIB6.js +0 -31
  1068. package/dist/update--ojavYQ4.js +0 -1036
  1069. package/dist/update-cli-Cvj5aWYM.js +0 -1503
  1070. package/dist/update-offset-store-upatuWwX.js +0 -112
  1071. package/dist/update-runner-DHkY_-76.js +0 -1496
  1072. package/dist/upsert-with-lock-C171GLaR.js +0 -33
  1073. package/dist/usage-N3bxnbmt.js +0 -115
  1074. package/dist/web-RdvT7gKa.js +0 -112
  1075. package/dist/web-shared-C2qHVxw1.d.ts +0 -45
  1076. package/dist/webhook-request-guards-CosLyl01.d.ts +0 -76
  1077. package/dist/webhook-targets-Bfnag-du.js +0 -181
  1078. package/dist/webhook-targets-DP_EkQa4.d.ts +0 -106
  1079. package/dist/webhooks-cli-ZpnXrq7G.js +0 -350
  1080. package/dist/whatsapp-DNTAyZHt.js +0 -114
  1081. package/dist/whatsapp-actions-o1zKQzKZ.js +0 -167
  1082. package/dist/workspace-CpWi5wPr.js +0 -479
  1083. package/dist/workspace-Ii7aRS7c.js +0 -289
  1084. package/dist/workspace-dirs-x10McA9t.js +0 -2003
  1085. package/dist/zalo-C9OQRYRw.d.ts +0 -9
  1086. package/dist/zalo-zm_bYCKg.js +0 -415
  1087. package/dist/zalouser-CvVEUvc5.js +0 -30911
  1088. /package/dist/{account-id-B3YSn4hl.d.ts → account-id-B8ce6G_4.d.ts} +0 -0
  1089. /package/dist/{acpx-CnNv70m2.d.ts → acpx-Ci50I9T2.d.ts} +0 -0
  1090. /package/dist/{agent-media-payload-DE2pEcsz.d.ts → agent-media-payload-en-gS5p6.d.ts} +0 -0
  1091. /package/dist/{allow-from-DPpHnT2A.d.ts → allow-from-cMeQ47Ot.d.ts} +0 -0
  1092. /package/dist/{allowlist-resolution-CLFiZ6nE.d.ts → allowlist-resolution-DoAWbfXV.d.ts} +0 -0
  1093. /package/dist/{bluebubbles-Duhu-Jer.d.ts → bluebubbles-C6yYmUl0.d.ts} +0 -0
  1094. /package/dist/{boolean-param-BhFjB3gp.d.ts → boolean-param-CdO2TFTk.d.ts} +0 -0
  1095. /package/dist/{channel-config-schema-DnnVMdjR.d.ts → channel-config-schema-Chp38wel.d.ts} +0 -0
  1096. /package/dist/{channel-policy-Baq-Z06b.d.ts → channel-policy-g2h6AbYQ.d.ts} +0 -0
  1097. /package/dist/{chat-type-DpiBgwuG.d.ts → chat-type-BLt59pPT.d.ts} +0 -0
  1098. /package/dist/{command-format-vi4xq8e8.d.ts → command-format-BDJC05Jp.d.ts} +0 -0
  1099. /package/dist/{diffs-DK7fVSDo.d.ts → diffs-D_iNKCyn.d.ts} +0 -0
  1100. /package/dist/{directory-runtime-BTLPaysA.d.ts → directory-runtime-DhMex6HY.d.ts} +0 -0
  1101. /package/dist/{exec-C01wtBHu.d.ts → exec-pjfUY4KM.d.ts} +0 -0
  1102. /package/dist/{gaxios-fetch-compat-wZ38b3w3.js → gaxios-fetch-compat-B_vtINdV.js} +0 -0
  1103. /package/dist/{history-CwXuP2TW.d.ts → history-aqSS5VGQ.d.ts} +0 -0
  1104. /package/dist/{inbound-envelope-SggrBs9m.d.ts → inbound-envelope-C5hWuZod.d.ts} +0 -0
  1105. /package/dist/{index-apAZHsDo.d.ts → index-DXVQFYGX.d.ts} +0 -0
  1106. /package/dist/{json-store-r75IZGk9.d.ts → json-store-UnqQ5aV3.d.ts} +0 -0
  1107. /package/dist/{keyed-async-queue-DHIr7yNe.d.ts → keyed-async-queue-guucpLw3.d.ts} +0 -0
  1108. /package/dist/{links-HeQ3r_L0.d.ts → links-Bar0meEK.d.ts} +0 -0
  1109. /package/dist/{markdown-to-line-CDb4Jy3V.d.ts → markdown-to-line-D8uH_KOj.d.ts} +0 -0
  1110. /package/dist/{mattermost-DtCsxpgg.d.ts → mattermost-xl7jAFJL.d.ts} +0 -0
  1111. /package/dist/{net-BATPDwdQ.d.ts → net-rGOKGds6.d.ts} +0 -0
  1112. /package/dist/{nextcloud-talk-Bb2wHOwp.d.ts → nextcloud-talk-De2CZ9dV.d.ts} +0 -0
  1113. /package/dist/{oauth-utils-u567CLT0.d.ts → oauth-utils-DzN1AlEH.d.ts} +0 -0
  1114. /package/dist/{parse-finite-number-l3tNlrZh.d.ts → parse-finite-number-odgyqhi0.d.ts} +0 -0
  1115. /package/dist/{provider-usage.types-C6061OVN.d.ts → provider-usage.types-EDE9o-H_.d.ts} +0 -0
  1116. /package/dist/{reply-history-BDsFnZFl.d.ts → reply-history-CVuU31xe.d.ts} +0 -0
  1117. /package/dist/{reply-payload-CCvM4W9u.d.ts → reply-payload-CHkpBYwL.d.ts} +0 -0
  1118. /package/dist/{request-url-C54l4-xC.d.ts → request-url-DHisbiHY.d.ts} +0 -0
  1119. /package/dist/{run-command-D3RqWcHu.d.ts → run-command-y0Cndsb1.d.ts} +0 -0
  1120. /package/dist/{secret-input-schema-BLBt-NAP.d.ts → secret-input-schema-b1vpYDQN.d.ts} +0 -0
  1121. /package/dist/{session-key-BQ2-bR-9.d.ts → session-key-DTHQl57f.d.ts} +0 -0
  1122. /package/dist/{ssh-config-C4mcH9Ly.js → ssh-config-hEHBfU2_.js} +0 -0
  1123. /package/dist/{testing-DLkhGsoz.d.ts → testing-DszuZXgK.d.ts} +0 -0
  1124. /package/dist/{thinking-DRkjX18p.d.ts → thinking-IwXTGSeT.d.ts} +0 -0
  1125. /package/dist/{tool-send-CMMD1uDu.d.ts → tool-send-DWHRmKpz.d.ts} +0 -0
  1126. /package/dist/{vllm-defaults-CcGuf4hL.d.ts → vllm-defaults-CrxZgE6-.d.ts} +0 -0
  1127. /package/dist/{wait-Daog8bxM.d.ts → wait-wDWw_MTI.d.ts} +0 -0
  1128. /package/dist/{webhook-memory-guards-C5MrExwT.d.ts → webhook-memory-guards-DreORuJy.d.ts} +0 -0
  1129. /package/dist/{windows-spawn-j2l-dqu8.d.ts → windows-spawn-BIzH92x2.d.ts} +0 -0
  1130. /package/dist/{zod-schema.agent-runtime-krMrBnIn.d.ts → zod-schema.agent-runtime-CP2rmis3.d.ts} +0 -0
  1131. /package/dist/{zod-schema.core-BNDieZDZ.d.ts → zod-schema.core-Foi1tYwi.d.ts} +0 -0
@@ -1,1570 +0,0 @@
1
- import "./redact-fatrROh9.js";
2
- import "./logger-BFfIIIKH.js";
3
- import { _ as resolveStateDir } from "./paths-D6AgsMTU.js";
4
- import "./tmp-moldclaw-dir-DWF-d8qD.js";
5
- import "./theme-BSXzMzAA.js";
6
- import "./globals-DESrFYmC.js";
7
- import "./runtime-_tQz41uA.js";
8
- import "./ansi-BPhP6LBZ.js";
9
- import { t as createSubsystemLogger } from "./subsystem-CPmDTJ2P.js";
10
- import "./warning-filter-B1UOeM0G.js";
11
- import "./utils-C7ykRPCQ.js";
12
- import { p as resolveAgentWorkspaceDir } from "./agent-scope-C-YmLnnb.js";
13
- import { S as parseAgentSessionKey } from "./session-key-UoG7Kfw5.js";
14
- import "./boundary-file-read-tPYh_8fH.js";
15
- import "./logger-BGzLUitz.js";
16
- import "./exec-CvEtXqTZ.js";
17
- import "./workspace-CpWi5wPr.js";
18
- import "./path-alias-guards-BtSO7sk7.js";
19
- import { n as materializeWindowsSpawnProgram, r as resolveWindowsSpawnProgram } from "./windows-spawn-Du1a57S-.js";
20
- import { f as writeFileWithinRoot } from "./fs-safe-CRXFoBmh.js";
21
- import "./mime-DGFQe4XX.js";
22
- import "./paths-ApLcu1Uu.js";
23
- import "./multimodal-BJBBn_4F.js";
24
- import { C as isFileMissingError, a as listSessionFilesForAgent, i as buildSessionEntry, r as requireNodeSqlite, t as extractKeywords, w as statRegularFile } from "./query-expansion-D_Mm5Hhi.js";
25
- import path from "node:path";
26
- import { spawn } from "node:child_process";
27
- import os from "node:os";
28
- import fs from "node:fs/promises";
29
- import readline from "node:readline";
30
- //#region src/memory/qmd-process.ts
31
- function resolveCliSpawnInvocation(params) {
32
- return materializeWindowsSpawnProgram(resolveWindowsSpawnProgram({
33
- command: params.command,
34
- platform: process.platform,
35
- env: params.env,
36
- execPath: process.execPath,
37
- packageName: params.packageName,
38
- allowShellFallback: false
39
- }), params.args);
40
- }
41
- async function runCliCommand(params) {
42
- return await new Promise((resolve, reject) => {
43
- const child = spawn(params.spawnInvocation.command, params.spawnInvocation.argv, {
44
- env: params.env,
45
- cwd: params.cwd,
46
- shell: params.spawnInvocation.shell,
47
- windowsHide: params.spawnInvocation.windowsHide
48
- });
49
- let stdout = "";
50
- let stderr = "";
51
- let stdoutTruncated = false;
52
- let stderrTruncated = false;
53
- const discardStdout = params.discardStdout === true;
54
- const timer = params.timeoutMs ? setTimeout(() => {
55
- child.kill("SIGKILL");
56
- reject(/* @__PURE__ */ new Error(`${params.commandSummary} timed out after ${params.timeoutMs}ms`));
57
- }, params.timeoutMs) : null;
58
- child.stdout.on("data", (data) => {
59
- if (discardStdout) return;
60
- const next = appendOutputWithCap(stdout, data.toString("utf8"), params.maxOutputChars);
61
- stdout = next.text;
62
- stdoutTruncated = stdoutTruncated || next.truncated;
63
- });
64
- child.stderr.on("data", (data) => {
65
- const next = appendOutputWithCap(stderr, data.toString("utf8"), params.maxOutputChars);
66
- stderr = next.text;
67
- stderrTruncated = stderrTruncated || next.truncated;
68
- });
69
- child.on("error", (err) => {
70
- if (timer) clearTimeout(timer);
71
- reject(err);
72
- });
73
- child.on("close", (code) => {
74
- if (timer) clearTimeout(timer);
75
- if (!discardStdout && (stdoutTruncated || stderrTruncated)) {
76
- reject(/* @__PURE__ */ new Error(`${params.commandSummary} produced too much output (limit ${params.maxOutputChars} chars)`));
77
- return;
78
- }
79
- if (code === 0) resolve({
80
- stdout,
81
- stderr
82
- });
83
- else reject(/* @__PURE__ */ new Error(`${params.commandSummary} failed (code ${code}): ${stderr || stdout}`));
84
- });
85
- });
86
- }
87
- function appendOutputWithCap(current, chunk, maxChars) {
88
- const appended = current + chunk;
89
- if (appended.length <= maxChars) return {
90
- text: appended,
91
- truncated: false
92
- };
93
- return {
94
- text: appended.slice(-maxChars),
95
- truncated: true
96
- };
97
- }
98
- //#endregion
99
- //#region src/memory/qmd-scope.ts
100
- function isQmdScopeAllowed(scope, sessionKey) {
101
- if (!scope) return true;
102
- const parsed = parseQmdSessionScope(sessionKey);
103
- const channel = parsed.channel;
104
- const chatType = parsed.chatType;
105
- const normalizedKey = parsed.normalizedKey ?? "";
106
- const rawKey = sessionKey?.trim().toLowerCase() ?? "";
107
- for (const rule of scope.rules ?? []) {
108
- if (!rule) continue;
109
- const match = rule.match ?? {};
110
- if (match.channel && match.channel !== channel) continue;
111
- if (match.chatType && match.chatType !== chatType) continue;
112
- const normalizedPrefix = match.keyPrefix?.trim().toLowerCase() || void 0;
113
- const rawPrefix = match.rawKeyPrefix?.trim().toLowerCase() || void 0;
114
- if (rawPrefix && !rawKey.startsWith(rawPrefix)) continue;
115
- if (normalizedPrefix) {
116
- if (normalizedPrefix.startsWith("agent:")) {
117
- if (!rawKey.startsWith(normalizedPrefix)) continue;
118
- } else if (!normalizedKey.startsWith(normalizedPrefix)) continue;
119
- }
120
- return rule.action === "allow";
121
- }
122
- return (scope.default ?? "allow") === "allow";
123
- }
124
- function deriveQmdScopeChannel(key) {
125
- return parseQmdSessionScope(key).channel;
126
- }
127
- function deriveQmdScopeChatType(key) {
128
- return parseQmdSessionScope(key).chatType;
129
- }
130
- function parseQmdSessionScope(key) {
131
- const normalized = normalizeQmdSessionKey(key);
132
- if (!normalized) return {};
133
- const parts = normalized.split(":").filter(Boolean);
134
- let chatType;
135
- if (parts.length >= 2 && (parts[1] === "group" || parts[1] === "channel" || parts[1] === "direct" || parts[1] === "dm")) {
136
- if (parts.includes("group")) chatType = "group";
137
- else if (parts.includes("channel")) chatType = "channel";
138
- return {
139
- normalizedKey: normalized,
140
- channel: parts[0]?.toLowerCase(),
141
- chatType: chatType ?? "direct"
142
- };
143
- }
144
- if (normalized.includes(":group:")) return {
145
- normalizedKey: normalized,
146
- chatType: "group"
147
- };
148
- if (normalized.includes(":channel:")) return {
149
- normalizedKey: normalized,
150
- chatType: "channel"
151
- };
152
- return {
153
- normalizedKey: normalized,
154
- chatType: "direct"
155
- };
156
- }
157
- function normalizeQmdSessionKey(key) {
158
- if (!key) return;
159
- const trimmed = key.trim();
160
- if (!trimmed) return;
161
- const normalized = (parseAgentSessionKey(trimmed)?.rest ?? trimmed).toLowerCase();
162
- if (normalized.startsWith("subagent:")) return;
163
- return normalized;
164
- }
165
- //#endregion
166
- //#region src/memory/qmd-query-parser.ts
167
- const log$1 = createSubsystemLogger("memory");
168
- function parseQmdQueryJson(stdout, stderr) {
169
- const trimmedStdout = stdout.trim();
170
- const trimmedStderr = stderr.trim();
171
- const stdoutIsMarker = trimmedStdout.length > 0 && isQmdNoResultsOutput(trimmedStdout);
172
- const stderrIsMarker = trimmedStderr.length > 0 && isQmdNoResultsOutput(trimmedStderr);
173
- if (stdoutIsMarker || !trimmedStdout && stderrIsMarker) return [];
174
- if (!trimmedStdout) {
175
- const message = `stdout empty${trimmedStderr ? ` (stderr: ${summarizeQmdStderr(trimmedStderr)})` : ""}`;
176
- log$1.warn(`qmd query returned invalid JSON: ${message}`);
177
- throw new Error(`qmd query returned invalid JSON: ${message}`);
178
- }
179
- try {
180
- const parsed = parseQmdQueryResultArray(trimmedStdout);
181
- if (parsed !== null) return parsed;
182
- const noisyPayload = extractFirstJsonArray(trimmedStdout);
183
- if (!noisyPayload) throw new Error("qmd query JSON response was not an array");
184
- const fallback = parseQmdQueryResultArray(noisyPayload);
185
- if (fallback !== null) return fallback;
186
- throw new Error("qmd query JSON response was not an array");
187
- } catch (err) {
188
- const message = err instanceof Error ? err.message : String(err);
189
- log$1.warn(`qmd query returned invalid JSON: ${message}`);
190
- throw new Error(`qmd query returned invalid JSON: ${message}`, { cause: err });
191
- }
192
- }
193
- function isQmdNoResultsOutput(raw) {
194
- return raw.split(/\r?\n/).map((line) => line.trim().toLowerCase().replace(/\s+/g, " ")).filter((line) => line.length > 0).some((line) => isQmdNoResultsLine(line));
195
- }
196
- function isQmdNoResultsLine(line) {
197
- if (line === "no results found" || line === "no results found.") return true;
198
- return /^(?:\[[^\]]+\]\s*)?(?:(?:warn(?:ing)?|info|error|qmd)\s*:\s*)+no results found\.?$/.test(line);
199
- }
200
- function summarizeQmdStderr(raw) {
201
- return raw.length <= 120 ? raw : `${raw.slice(0, 117)}...`;
202
- }
203
- function parseQmdQueryResultArray(raw) {
204
- try {
205
- const parsed = JSON.parse(raw);
206
- if (!Array.isArray(parsed)) return null;
207
- return parsed;
208
- } catch {
209
- return null;
210
- }
211
- }
212
- function extractFirstJsonArray(raw) {
213
- const start = raw.indexOf("[");
214
- if (start < 0) return null;
215
- let depth = 0;
216
- let inString = false;
217
- let escaped = false;
218
- for (let i = start; i < raw.length; i += 1) {
219
- const char = raw[i];
220
- if (char === void 0) break;
221
- if (inString) {
222
- if (escaped) {
223
- escaped = false;
224
- continue;
225
- }
226
- if (char === "\\") escaped = true;
227
- else if (char === "\"") inString = false;
228
- continue;
229
- }
230
- if (char === "\"") {
231
- inString = true;
232
- continue;
233
- }
234
- if (char === "[") depth += 1;
235
- else if (char === "]") {
236
- depth -= 1;
237
- if (depth === 0) return raw.slice(start, i + 1);
238
- }
239
- }
240
- return null;
241
- }
242
- //#endregion
243
- //#region src/memory/qmd-manager.ts
244
- const log = createSubsystemLogger("memory");
245
- const SNIPPET_HEADER_RE = /@@\s*-([0-9]+),([0-9]+)/;
246
- const SEARCH_PENDING_UPDATE_WAIT_MS = 500;
247
- const MAX_QMD_OUTPUT_CHARS = 2e5;
248
- const NUL_MARKER_RE = /(?:\^@|\\0|\\x00|\\u0000|null\s*byte|nul\s*byte)/i;
249
- const QMD_EMBED_BACKOFF_BASE_MS = 6e4;
250
- const QMD_EMBED_BACKOFF_MAX_MS = 3600 * 1e3;
251
- const HAN_SCRIPT_RE = /[\u3400-\u9fff]/u;
252
- const QMD_BM25_HAN_KEYWORD_LIMIT = 12;
253
- let qmdEmbedQueueTail = Promise.resolve();
254
- function hasHanScript(value) {
255
- return HAN_SCRIPT_RE.test(value);
256
- }
257
- function normalizeHanBm25Query(query) {
258
- const trimmed = query.trim();
259
- if (!trimmed || !hasHanScript(trimmed)) return trimmed;
260
- const keywords = extractKeywords(trimmed);
261
- const normalizedKeywords = [];
262
- const seen = /* @__PURE__ */ new Set();
263
- for (const keyword of keywords) {
264
- const token = keyword.trim();
265
- if (!token || seen.has(token)) continue;
266
- const includesHan = hasHanScript(token);
267
- if (includesHan && Array.from(token).length < 2) continue;
268
- if (!includesHan && token.length < 2) continue;
269
- seen.add(token);
270
- normalizedKeywords.push(token);
271
- if (normalizedKeywords.length >= QMD_BM25_HAN_KEYWORD_LIMIT) break;
272
- }
273
- return normalizedKeywords.length > 0 ? normalizedKeywords.join(" ") : trimmed;
274
- }
275
- async function runWithQmdEmbedLock(task) {
276
- const previous = qmdEmbedQueueTail;
277
- let release;
278
- qmdEmbedQueueTail = new Promise((resolve) => {
279
- release = resolve;
280
- });
281
- await previous.catch(() => void 0);
282
- try {
283
- return await task();
284
- } finally {
285
- release?.();
286
- }
287
- }
288
- var QmdMemoryManager = class QmdMemoryManager {
289
- static async create(params) {
290
- const resolved = params.resolved.qmd;
291
- if (!resolved) return null;
292
- const manager = new QmdMemoryManager({
293
- cfg: params.cfg,
294
- agentId: params.agentId,
295
- resolved
296
- });
297
- await manager.initialize(params.mode ?? "full");
298
- return manager;
299
- }
300
- constructor(params) {
301
- this.collectionRoots = /* @__PURE__ */ new Map();
302
- this.sources = /* @__PURE__ */ new Set();
303
- this.docPathCache = /* @__PURE__ */ new Map();
304
- this.exportedSessionState = /* @__PURE__ */ new Map();
305
- this.maxQmdOutputChars = MAX_QMD_OUTPUT_CHARS;
306
- this.updateTimer = null;
307
- this.pendingUpdate = null;
308
- this.queuedForcedUpdate = null;
309
- this.queuedForcedRuns = 0;
310
- this.closed = false;
311
- this.db = null;
312
- this.lastUpdateAt = null;
313
- this.lastEmbedAt = null;
314
- this.embedBackoffUntil = null;
315
- this.embedFailureCount = 0;
316
- this.attemptedNullByteCollectionRepair = false;
317
- this.attemptedDuplicateDocumentRepair = false;
318
- this.cfg = params.cfg;
319
- this.agentId = params.agentId;
320
- this.qmd = params.resolved;
321
- this.workspaceDir = resolveAgentWorkspaceDir(params.cfg, params.agentId);
322
- this.stateDir = resolveStateDir(process.env, os.homedir);
323
- this.agentStateDir = path.join(this.stateDir, "agents", this.agentId);
324
- this.qmdDir = path.join(this.agentStateDir, "qmd");
325
- this.xdgConfigHome = path.join(this.qmdDir, "xdg-config");
326
- this.xdgCacheHome = path.join(this.qmdDir, "xdg-cache");
327
- this.indexPath = path.join(this.xdgCacheHome, "qmd", "index.sqlite");
328
- this.env = {
329
- ...process.env,
330
- XDG_CONFIG_HOME: this.xdgConfigHome,
331
- QMD_CONFIG_DIR: this.xdgConfigHome,
332
- XDG_CACHE_HOME: this.xdgCacheHome,
333
- NO_COLOR: "1"
334
- };
335
- this.sessionExporter = this.qmd.sessions.enabled ? {
336
- dir: this.qmd.sessions.exportDir ?? path.join(this.qmdDir, "sessions"),
337
- retentionMs: this.qmd.sessions.retentionDays ? this.qmd.sessions.retentionDays * 24 * 60 * 60 * 1e3 : void 0,
338
- collectionName: this.pickSessionCollectionName()
339
- } : null;
340
- if (this.sessionExporter) this.qmd.collections = [...this.qmd.collections, {
341
- name: this.sessionExporter.collectionName,
342
- path: this.sessionExporter.dir,
343
- pattern: "**/*.md",
344
- kind: "sessions"
345
- }];
346
- this.managedCollectionNames = this.computeManagedCollectionNames();
347
- }
348
- async initialize(mode) {
349
- this.bootstrapCollections();
350
- if (mode === "status") return;
351
- await fs.mkdir(this.xdgConfigHome, { recursive: true });
352
- await fs.mkdir(this.xdgCacheHome, { recursive: true });
353
- await fs.mkdir(path.dirname(this.indexPath), { recursive: true });
354
- if (this.sessionExporter) await fs.mkdir(this.sessionExporter.dir, { recursive: true });
355
- await this.symlinkSharedModels();
356
- await this.ensureCollections();
357
- if (this.qmd.update.onBoot) {
358
- const bootRun = this.runUpdate("boot", true);
359
- if (this.qmd.update.waitForBootSync) await bootRun.catch((err) => {
360
- log.warn(`qmd boot update failed: ${String(err)}`);
361
- });
362
- else bootRun.catch((err) => {
363
- log.warn(`qmd boot update failed: ${String(err)}`);
364
- });
365
- }
366
- if (this.qmd.update.intervalMs > 0) this.updateTimer = setInterval(() => {
367
- this.runUpdate("interval").catch((err) => {
368
- log.warn(`qmd update failed (${String(err)})`);
369
- });
370
- }, this.qmd.update.intervalMs);
371
- }
372
- bootstrapCollections() {
373
- this.collectionRoots.clear();
374
- this.sources.clear();
375
- for (const collection of this.qmd.collections) {
376
- const kind = collection.kind === "sessions" ? "sessions" : "memory";
377
- this.collectionRoots.set(collection.name, {
378
- path: collection.path,
379
- kind
380
- });
381
- this.sources.add(kind);
382
- }
383
- }
384
- async ensureCollections() {
385
- const existing = await this.listCollectionsBestEffort();
386
- await this.migrateLegacyUnscopedCollections(existing);
387
- for (const collection of this.qmd.collections) {
388
- const listed = existing.get(collection.name);
389
- if (listed && !this.shouldRebindCollection(collection, listed)) continue;
390
- if (listed) try {
391
- await this.removeCollection(collection.name);
392
- } catch (err) {
393
- const message = err instanceof Error ? err.message : String(err);
394
- if (!this.isCollectionMissingError(message)) log.warn(`qmd collection remove failed for ${collection.name}: ${message}`);
395
- }
396
- try {
397
- await this.ensureCollectionPath(collection);
398
- await this.addCollection(collection.path, collection.name, collection.pattern);
399
- existing.set(collection.name, {
400
- path: collection.path,
401
- pattern: collection.pattern
402
- });
403
- } catch (err) {
404
- const message = err instanceof Error ? err.message : String(err);
405
- if (this.isCollectionAlreadyExistsError(message)) {
406
- if (!await this.tryRebindConflictingCollection({
407
- collection,
408
- existing,
409
- addErrorMessage: message
410
- })) log.warn(`qmd collection add skipped for ${collection.name}: ${message}`);
411
- continue;
412
- }
413
- log.warn(`qmd collection add failed for ${collection.name}: ${message}`);
414
- }
415
- }
416
- }
417
- async listCollectionsBestEffort() {
418
- const existing = /* @__PURE__ */ new Map();
419
- try {
420
- const result = await this.runQmd([
421
- "collection",
422
- "list",
423
- "--json"
424
- ], { timeoutMs: this.qmd.update.commandTimeoutMs });
425
- const parsed = this.parseListedCollections(result.stdout);
426
- for (const [name, details] of parsed) existing.set(name, details);
427
- } catch {}
428
- return existing;
429
- }
430
- findCollectionByPathPattern(collection, listed) {
431
- for (const [name, details] of listed) {
432
- if (!details.path || typeof details.pattern !== "string") continue;
433
- if (!this.pathsMatch(details.path, collection.path)) continue;
434
- if (details.pattern !== collection.pattern) continue;
435
- return name;
436
- }
437
- return null;
438
- }
439
- async tryRebindConflictingCollection(params) {
440
- const { collection, existing, addErrorMessage } = params;
441
- let conflictName = this.findCollectionByPathPattern(collection, existing);
442
- if (!conflictName) {
443
- const refreshed = await this.listCollectionsBestEffort();
444
- existing.clear();
445
- for (const [name, details] of refreshed) existing.set(name, details);
446
- conflictName = this.findCollectionByPathPattern(collection, existing);
447
- }
448
- if (!conflictName) return false;
449
- if (conflictName === collection.name) {
450
- existing.set(collection.name, {
451
- path: collection.path,
452
- pattern: collection.pattern
453
- });
454
- return true;
455
- }
456
- log.warn(`qmd collection add conflict for ${collection.name}: path+pattern already bound by ${conflictName}; rebinding`);
457
- try {
458
- await this.removeCollection(conflictName);
459
- existing.delete(conflictName);
460
- } catch (removeErr) {
461
- const removeMessage = removeErr instanceof Error ? removeErr.message : String(removeErr);
462
- if (!this.isCollectionMissingError(removeMessage)) log.warn(`qmd collection remove failed for ${conflictName}: ${removeMessage}`);
463
- return false;
464
- }
465
- try {
466
- await this.addCollection(collection.path, collection.name, collection.pattern);
467
- existing.set(collection.name, {
468
- path: collection.path,
469
- pattern: collection.pattern
470
- });
471
- return true;
472
- } catch (retryErr) {
473
- const retryMessage = retryErr instanceof Error ? retryErr.message : String(retryErr);
474
- log.warn(`qmd collection add failed for ${collection.name} after rebinding ${conflictName}: ${retryMessage} (initial: ${addErrorMessage})`);
475
- return false;
476
- }
477
- }
478
- async migrateLegacyUnscopedCollections(existing) {
479
- for (const collection of this.qmd.collections) {
480
- if (existing.has(collection.name)) continue;
481
- const legacyName = this.deriveLegacyCollectionName(collection.name);
482
- if (!legacyName) continue;
483
- const listedLegacy = existing.get(legacyName);
484
- if (!listedLegacy) continue;
485
- if (!this.canMigrateLegacyCollection(collection, listedLegacy)) {
486
- log.debug(`qmd legacy collection migration skipped for ${legacyName} (path/pattern mismatch)`);
487
- continue;
488
- }
489
- try {
490
- await this.removeCollection(legacyName);
491
- existing.delete(legacyName);
492
- } catch (err) {
493
- const message = err instanceof Error ? err.message : String(err);
494
- if (!this.isCollectionMissingError(message)) log.warn(`qmd collection remove failed for ${legacyName}: ${message}`);
495
- }
496
- }
497
- }
498
- deriveLegacyCollectionName(scopedName) {
499
- const agentSuffix = `-${this.sanitizeCollectionNameSegment(this.agentId)}`;
500
- if (!scopedName.endsWith(agentSuffix)) return null;
501
- return scopedName.slice(0, -agentSuffix.length).trim() || null;
502
- }
503
- canMigrateLegacyCollection(collection, listedLegacy) {
504
- if (listedLegacy.path && !this.pathsMatch(listedLegacy.path, collection.path)) return false;
505
- if (typeof listedLegacy.pattern === "string" && listedLegacy.pattern !== collection.pattern) return false;
506
- return true;
507
- }
508
- async ensureCollectionPath(collection) {
509
- if (!this.isDirectoryGlobPattern(collection.pattern)) return;
510
- await fs.mkdir(collection.path, { recursive: true });
511
- }
512
- isDirectoryGlobPattern(pattern) {
513
- return pattern.includes("*") || pattern.includes("?") || pattern.includes("[");
514
- }
515
- isCollectionAlreadyExistsError(message) {
516
- const lower = message.toLowerCase();
517
- return lower.includes("already exists") || lower.includes("exists");
518
- }
519
- isCollectionMissingError(message) {
520
- const lower = message.toLowerCase();
521
- return lower.includes("not found") || lower.includes("does not exist") || lower.includes("missing");
522
- }
523
- isMissingCollectionSearchError(err) {
524
- const message = err instanceof Error ? err.message : String(err);
525
- return this.isCollectionMissingError(message) && message.toLowerCase().includes("collection");
526
- }
527
- async tryRepairMissingCollectionSearch(err) {
528
- if (!this.isMissingCollectionSearchError(err)) return false;
529
- log.warn("qmd search failed because a managed collection is missing; repairing collections and retrying once");
530
- await this.ensureCollections();
531
- return true;
532
- }
533
- async addCollection(pathArg, name, pattern) {
534
- await this.runQmd([
535
- "collection",
536
- "add",
537
- pathArg,
538
- "--name",
539
- name,
540
- "--mask",
541
- pattern
542
- ], { timeoutMs: this.qmd.update.commandTimeoutMs });
543
- }
544
- async removeCollection(name) {
545
- await this.runQmd([
546
- "collection",
547
- "remove",
548
- name
549
- ], { timeoutMs: this.qmd.update.commandTimeoutMs });
550
- }
551
- parseListedCollections(output) {
552
- const listed = /* @__PURE__ */ new Map();
553
- const trimmed = output.trim();
554
- if (!trimmed) return listed;
555
- try {
556
- const parsed = JSON.parse(trimmed);
557
- if (Array.isArray(parsed)) {
558
- for (const entry of parsed) {
559
- if (typeof entry === "string") {
560
- listed.set(entry, {});
561
- continue;
562
- }
563
- if (!entry || typeof entry !== "object") continue;
564
- const name = entry.name;
565
- if (typeof name !== "string") continue;
566
- const listedPath = entry.path;
567
- const listedPattern = entry.pattern;
568
- const listedMask = entry.mask;
569
- listed.set(name, {
570
- path: typeof listedPath === "string" ? listedPath : void 0,
571
- pattern: typeof listedPattern === "string" ? listedPattern : typeof listedMask === "string" ? listedMask : void 0
572
- });
573
- }
574
- return listed;
575
- }
576
- } catch {}
577
- let currentName = null;
578
- for (const rawLine of output.split(/\r?\n/)) {
579
- const line = rawLine.trimEnd();
580
- if (!line.trim()) {
581
- currentName = null;
582
- continue;
583
- }
584
- const collectionLine = /^\s*([a-z0-9._-]+)\s+\(qmd:\/\/[^)]+\)\s*$/i.exec(line);
585
- if (collectionLine) {
586
- currentName = collectionLine[1];
587
- if (!listed.has(currentName)) listed.set(currentName, {});
588
- continue;
589
- }
590
- if (/^\s*collections\b/i.test(line)) continue;
591
- const bareNameLine = /^\s*([a-z0-9._-]+)\s*$/i.exec(line);
592
- if (bareNameLine && !line.includes(":")) {
593
- currentName = bareNameLine[1];
594
- if (!listed.has(currentName)) listed.set(currentName, {});
595
- continue;
596
- }
597
- if (!currentName) continue;
598
- const patternLine = /^\s*(?:pattern|mask)\s*:\s*(.+?)\s*$/i.exec(line);
599
- if (patternLine) {
600
- const existing = listed.get(currentName) ?? {};
601
- existing.pattern = patternLine[1].trim();
602
- listed.set(currentName, existing);
603
- continue;
604
- }
605
- const pathLine = /^\s*path\s*:\s*(.+?)\s*$/i.exec(line);
606
- if (pathLine) {
607
- const existing = listed.get(currentName) ?? {};
608
- existing.path = pathLine[1].trim();
609
- listed.set(currentName, existing);
610
- }
611
- }
612
- return listed;
613
- }
614
- shouldRebindCollection(collection, listed) {
615
- if (!listed.path) return false;
616
- if (!this.pathsMatch(listed.path, collection.path)) return true;
617
- if (typeof listed.pattern === "string" && listed.pattern !== collection.pattern) return true;
618
- return false;
619
- }
620
- pathsMatch(left, right) {
621
- const normalize = (value) => {
622
- const resolved = path.isAbsolute(value) ? path.resolve(value) : path.resolve(this.workspaceDir, value);
623
- const normalized = path.normalize(resolved);
624
- return process.platform === "win32" ? normalized.toLowerCase() : normalized;
625
- };
626
- return normalize(left) === normalize(right);
627
- }
628
- shouldRepairNullByteCollectionError(err) {
629
- const message = err instanceof Error ? err.message : String(err);
630
- const lower = message.toLowerCase();
631
- return (lower.includes("enotdir") || lower.includes("not a directory")) && NUL_MARKER_RE.test(message);
632
- }
633
- shouldRepairDuplicateDocumentConstraint(err) {
634
- const lower = (err instanceof Error ? err.message : String(err)).toLowerCase();
635
- return lower.includes("unique constraint failed") && lower.includes("documents.collection") && lower.includes("documents.path");
636
- }
637
- async rebuildManagedCollectionsForRepair(reason) {
638
- for (const collection of this.qmd.collections) {
639
- try {
640
- await this.removeCollection(collection.name);
641
- } catch (removeErr) {
642
- const removeMessage = removeErr instanceof Error ? removeErr.message : String(removeErr);
643
- if (!this.isCollectionMissingError(removeMessage)) log.warn(`qmd collection remove failed for ${collection.name}: ${removeMessage}`);
644
- }
645
- try {
646
- await this.addCollection(collection.path, collection.name, collection.pattern);
647
- } catch (addErr) {
648
- const addMessage = addErr instanceof Error ? addErr.message : String(addErr);
649
- if (!this.isCollectionAlreadyExistsError(addMessage)) log.warn(`qmd collection add failed for ${collection.name}: ${addMessage}`);
650
- }
651
- }
652
- log.warn(`qmd managed collections rebuilt for update repair (${reason})`);
653
- }
654
- async tryRepairNullByteCollections(err, reason) {
655
- if (this.attemptedNullByteCollectionRepair) return false;
656
- if (!this.shouldRepairNullByteCollectionError(err)) return false;
657
- this.attemptedNullByteCollectionRepair = true;
658
- log.warn(`qmd update failed with suspected null-byte collection metadata (${reason}); rebuilding managed collections and retrying once`);
659
- await this.rebuildManagedCollectionsForRepair(`null-byte metadata (${reason})`);
660
- return true;
661
- }
662
- async tryRepairDuplicateDocumentConstraint(err, reason) {
663
- if (this.attemptedDuplicateDocumentRepair) return false;
664
- if (!this.shouldRepairDuplicateDocumentConstraint(err)) return false;
665
- this.attemptedDuplicateDocumentRepair = true;
666
- log.warn(`qmd update failed with duplicate document constraint (${reason}); rebuilding managed collections and retrying once`);
667
- await this.rebuildManagedCollectionsForRepair(`duplicate-document constraint (${reason})`);
668
- return true;
669
- }
670
- async search(query, opts) {
671
- if (!this.isScopeAllowed(opts?.sessionKey)) {
672
- this.logScopeDenied(opts?.sessionKey);
673
- return [];
674
- }
675
- const trimmed = query.trim();
676
- if (!trimmed) return [];
677
- await this.waitForPendingUpdateBeforeSearch();
678
- const limit = Math.min(this.qmd.limits.maxResults, opts?.maxResults ?? this.qmd.limits.maxResults);
679
- const collectionNames = this.listManagedCollectionNames();
680
- if (collectionNames.length === 0) {
681
- log.warn("qmd query skipped: no managed collections configured");
682
- return [];
683
- }
684
- const qmdSearchCommand = this.qmd.searchMode;
685
- const mcporterEnabled = this.qmd.mcporter.enabled;
686
- const runSearchAttempt = async (allowMissingCollectionRepair) => {
687
- try {
688
- if (mcporterEnabled) {
689
- const tool = qmdSearchCommand === "search" ? "search" : qmdSearchCommand === "vsearch" ? "vector_search" : "deep_search";
690
- const minScore = opts?.minScore ?? 0;
691
- if (collectionNames.length > 1) return await this.runMcporterAcrossCollections({
692
- tool,
693
- query: trimmed,
694
- limit,
695
- minScore,
696
- collectionNames
697
- });
698
- return await this.runQmdSearchViaMcporter({
699
- mcporter: this.qmd.mcporter,
700
- tool,
701
- query: trimmed,
702
- limit,
703
- minScore,
704
- collection: collectionNames[0],
705
- timeoutMs: this.qmd.limits.timeoutMs
706
- });
707
- }
708
- if (collectionNames.length > 1) return await this.runQueryAcrossCollections(trimmed, limit, collectionNames, qmdSearchCommand);
709
- const args = this.buildSearchArgs(qmdSearchCommand, trimmed, limit);
710
- args.push(...this.buildCollectionFilterArgs(collectionNames));
711
- const result = await this.runQmd(args, { timeoutMs: this.qmd.limits.timeoutMs });
712
- return parseQmdQueryJson(result.stdout, result.stderr);
713
- } catch (err) {
714
- if (allowMissingCollectionRepair && this.isMissingCollectionSearchError(err)) throw err;
715
- if (!mcporterEnabled && qmdSearchCommand !== "query" && this.isUnsupportedQmdOptionError(err)) {
716
- log.warn(`qmd ${qmdSearchCommand} does not support configured flags; retrying search with qmd query`);
717
- try {
718
- if (collectionNames.length > 1) return await this.runQueryAcrossCollections(trimmed, limit, collectionNames, "query");
719
- const fallbackArgs = this.buildSearchArgs("query", trimmed, limit);
720
- fallbackArgs.push(...this.buildCollectionFilterArgs(collectionNames));
721
- const fallback = await this.runQmd(fallbackArgs, { timeoutMs: this.qmd.limits.timeoutMs });
722
- return parseQmdQueryJson(fallback.stdout, fallback.stderr);
723
- } catch (fallbackErr) {
724
- log.warn(`qmd query fallback failed: ${String(fallbackErr)}`);
725
- throw fallbackErr instanceof Error ? fallbackErr : new Error(String(fallbackErr));
726
- }
727
- }
728
- const label = mcporterEnabled ? "mcporter/qmd" : `qmd ${qmdSearchCommand}`;
729
- log.warn(`${label} failed: ${String(err)}`);
730
- throw err instanceof Error ? err : new Error(String(err));
731
- }
732
- };
733
- let parsed;
734
- try {
735
- parsed = await runSearchAttempt(true);
736
- } catch (err) {
737
- if (!await this.tryRepairMissingCollectionSearch(err)) throw err instanceof Error ? err : new Error(String(err));
738
- parsed = await runSearchAttempt(false);
739
- }
740
- const results = [];
741
- for (const entry of parsed) {
742
- const docHints = this.normalizeDocHints({
743
- preferredCollection: entry.collection,
744
- preferredFile: entry.file
745
- });
746
- const doc = await this.resolveDocLocation(entry.docid, docHints);
747
- if (!doc) continue;
748
- const snippet = entry.snippet?.slice(0, this.qmd.limits.maxSnippetChars) ?? "";
749
- const lines = this.extractSnippetLines(snippet);
750
- const score = typeof entry.score === "number" ? entry.score : 0;
751
- if (score < (opts?.minScore ?? 0)) continue;
752
- results.push({
753
- path: doc.rel,
754
- startLine: lines.startLine,
755
- endLine: lines.endLine,
756
- score,
757
- snippet,
758
- source: doc.source
759
- });
760
- }
761
- return this.clampResultsByInjectedChars(this.diversifyResultsBySource(results, limit));
762
- }
763
- async sync(params) {
764
- if (params?.sessionFiles?.some((sessionFile) => sessionFile.trim().length > 0)) log.debug("qmd sync ignoring targeted sessionFiles hint; running regular update");
765
- if (params?.progress) params.progress({
766
- completed: 0,
767
- total: 1,
768
- label: "Updating QMD index…"
769
- });
770
- await this.runUpdate(params?.reason ?? "manual", params?.force);
771
- if (params?.progress) params.progress({
772
- completed: 1,
773
- total: 1,
774
- label: "QMD index updated"
775
- });
776
- }
777
- async readFile(params) {
778
- const relPath = params.relPath?.trim();
779
- if (!relPath) throw new Error("path required");
780
- const absPath = this.resolveReadPath(relPath);
781
- if (!absPath.endsWith(".md")) throw new Error("path required");
782
- if ((await statRegularFile(absPath)).missing) return {
783
- text: "",
784
- path: relPath
785
- };
786
- if (params.from !== void 0 || params.lines !== void 0) {
787
- const partial = await this.readPartialText(absPath, params.from, params.lines);
788
- if (partial.missing) return {
789
- text: "",
790
- path: relPath
791
- };
792
- return {
793
- text: partial.text,
794
- path: relPath
795
- };
796
- }
797
- const full = await this.readFullText(absPath);
798
- if (full.missing) return {
799
- text: "",
800
- path: relPath
801
- };
802
- if (!params.from && !params.lines) return {
803
- text: full.text,
804
- path: relPath
805
- };
806
- const lines = full.text.split("\n");
807
- const start = Math.max(1, params.from ?? 1);
808
- const count = Math.max(1, params.lines ?? lines.length);
809
- return {
810
- text: lines.slice(start - 1, start - 1 + count).join("\n"),
811
- path: relPath
812
- };
813
- }
814
- status() {
815
- const counts = this.readCounts();
816
- return {
817
- backend: "qmd",
818
- provider: "qmd",
819
- model: "qmd",
820
- requestedProvider: "qmd",
821
- files: counts.totalDocuments,
822
- chunks: counts.totalDocuments,
823
- dirty: false,
824
- workspaceDir: this.workspaceDir,
825
- dbPath: this.indexPath,
826
- sources: Array.from(this.sources),
827
- sourceCounts: counts.sourceCounts,
828
- vector: {
829
- enabled: true,
830
- available: true
831
- },
832
- batch: {
833
- enabled: false,
834
- failures: 0,
835
- limit: 0,
836
- wait: false,
837
- concurrency: 0,
838
- pollIntervalMs: 0,
839
- timeoutMs: 0
840
- },
841
- custom: { qmd: {
842
- collections: this.qmd.collections.length,
843
- lastUpdateAt: this.lastUpdateAt
844
- } }
845
- };
846
- }
847
- async probeEmbeddingAvailability() {
848
- return { ok: true };
849
- }
850
- async probeVectorAvailability() {
851
- return true;
852
- }
853
- async close() {
854
- if (this.closed) return;
855
- this.closed = true;
856
- if (this.updateTimer) {
857
- clearInterval(this.updateTimer);
858
- this.updateTimer = null;
859
- }
860
- this.queuedForcedRuns = 0;
861
- await this.pendingUpdate?.catch(() => void 0);
862
- await this.queuedForcedUpdate?.catch(() => void 0);
863
- if (this.db) {
864
- this.db.close();
865
- this.db = null;
866
- }
867
- }
868
- async runUpdate(reason, force, opts) {
869
- if (this.closed) return;
870
- if (this.pendingUpdate) {
871
- if (force) return this.enqueueForcedUpdate(reason);
872
- return this.pendingUpdate;
873
- }
874
- if (this.queuedForcedUpdate && !opts?.fromForcedQueue) {
875
- if (force) return this.enqueueForcedUpdate(reason);
876
- return this.queuedForcedUpdate;
877
- }
878
- if (this.shouldSkipUpdate(force)) return;
879
- const run = async () => {
880
- if (this.sessionExporter) await this.exportSessions();
881
- await this.runQmdUpdateWithRetry(reason);
882
- if (this.shouldRunEmbed(force)) try {
883
- await runWithQmdEmbedLock(async () => {
884
- await this.runQmd(["embed"], {
885
- timeoutMs: this.qmd.update.embedTimeoutMs,
886
- discardOutput: true
887
- });
888
- });
889
- this.lastEmbedAt = Date.now();
890
- this.embedBackoffUntil = null;
891
- this.embedFailureCount = 0;
892
- } catch (err) {
893
- this.noteEmbedFailure(reason, err);
894
- }
895
- this.lastUpdateAt = Date.now();
896
- this.docPathCache.clear();
897
- };
898
- this.pendingUpdate = run().finally(() => {
899
- this.pendingUpdate = null;
900
- });
901
- await this.pendingUpdate;
902
- }
903
- async runQmdUpdateWithRetry(reason) {
904
- const maxAttempts = reason === "boot" || reason.startsWith("boot:") ? 3 : 1;
905
- for (let attempt = 1; attempt <= maxAttempts; attempt += 1) try {
906
- await this.runQmdUpdateOnce(reason);
907
- return;
908
- } catch (err) {
909
- if (attempt >= maxAttempts || !this.isRetryableUpdateError(err)) throw err;
910
- const delayMs = 500 * 2 ** (attempt - 1);
911
- log.warn(`qmd update retry ${attempt}/${maxAttempts - 1} after failure (${reason}): ${String(err)}`);
912
- await new Promise((resolve) => setTimeout(resolve, delayMs));
913
- }
914
- }
915
- async runQmdUpdateOnce(reason) {
916
- try {
917
- await this.runQmd(["update"], {
918
- timeoutMs: this.qmd.update.updateTimeoutMs,
919
- discardOutput: true
920
- });
921
- } catch (err) {
922
- if (!await this.tryRepairNullByteCollections(err, reason) && !await this.tryRepairDuplicateDocumentConstraint(err, reason)) throw err;
923
- await this.runQmd(["update"], {
924
- timeoutMs: this.qmd.update.updateTimeoutMs,
925
- discardOutput: true
926
- });
927
- }
928
- }
929
- isRetryableUpdateError(err) {
930
- if (this.isSqliteBusyError(err)) return true;
931
- return (err instanceof Error ? err.message : String(err)).toLowerCase().includes("timed out");
932
- }
933
- shouldRunEmbed(force) {
934
- if (this.qmd.searchMode === "search") return false;
935
- const now = Date.now();
936
- if (this.embedBackoffUntil !== null && now < this.embedBackoffUntil) return false;
937
- const embedIntervalMs = this.qmd.update.embedIntervalMs;
938
- return Boolean(force) || this.lastEmbedAt === null || embedIntervalMs > 0 && now - this.lastEmbedAt > embedIntervalMs;
939
- }
940
- noteEmbedFailure(reason, err) {
941
- this.embedFailureCount += 1;
942
- const delayMs = Math.min(QMD_EMBED_BACKOFF_MAX_MS, QMD_EMBED_BACKOFF_BASE_MS * 2 ** Math.max(0, this.embedFailureCount - 1));
943
- this.embedBackoffUntil = Date.now() + delayMs;
944
- log.warn(`qmd embed failed (${reason}): ${String(err)}; backing off for ${Math.ceil(delayMs / 1e3)}s`);
945
- }
946
- enqueueForcedUpdate(reason) {
947
- this.queuedForcedRuns += 1;
948
- if (!this.queuedForcedUpdate) this.queuedForcedUpdate = this.drainForcedUpdates(reason).finally(() => {
949
- this.queuedForcedUpdate = null;
950
- });
951
- return this.queuedForcedUpdate;
952
- }
953
- async drainForcedUpdates(reason) {
954
- await this.pendingUpdate?.catch(() => void 0);
955
- while (!this.closed && this.queuedForcedRuns > 0) {
956
- this.queuedForcedRuns -= 1;
957
- await this.runUpdate(`${reason}:queued`, true, { fromForcedQueue: true });
958
- }
959
- }
960
- /**
961
- * Symlink the default QMD models directory into our custom XDG_CACHE_HOME so
962
- * that the pre-installed ML models (~/.cache/qmd/models/) are reused rather
963
- * than re-downloaded for every agent. If the default models directory does
964
- * not exist, or a models directory/symlink already exists in the target, this
965
- * is a no-op.
966
- */
967
- async symlinkSharedModels() {
968
- const defaultCacheHome = process.env.XDG_CACHE_HOME || (process.platform === "win32" ? process.env.LOCALAPPDATA : void 0) || path.join(os.homedir(), ".cache");
969
- const defaultModelsDir = path.join(defaultCacheHome, "qmd", "models");
970
- const targetModelsDir = path.join(this.xdgCacheHome, "qmd", "models");
971
- try {
972
- if (!(await fs.stat(defaultModelsDir).catch((err) => {
973
- if (err.code === "ENOENT") return null;
974
- throw err;
975
- }))?.isDirectory()) return;
976
- try {
977
- await fs.lstat(targetModelsDir);
978
- return;
979
- } catch {}
980
- try {
981
- await fs.symlink(defaultModelsDir, targetModelsDir, "dir");
982
- } catch (symlinkErr) {
983
- const code = symlinkErr.code;
984
- if (process.platform === "win32" && (code === "EPERM" || code === "ENOTSUP")) await fs.symlink(defaultModelsDir, targetModelsDir, "junction");
985
- else throw symlinkErr;
986
- }
987
- log.debug(`symlinked qmd models: ${defaultModelsDir} → ${targetModelsDir}`);
988
- } catch (err) {
989
- log.warn(`failed to symlink qmd models directory: ${String(err)}`);
990
- }
991
- }
992
- async runQmd(args, opts) {
993
- return await runCliCommand({
994
- commandSummary: `qmd ${args.join(" ")}`,
995
- spawnInvocation: resolveCliSpawnInvocation({
996
- command: this.qmd.command,
997
- args,
998
- env: this.env,
999
- packageName: "qmd"
1000
- }),
1001
- env: this.env,
1002
- cwd: this.workspaceDir,
1003
- timeoutMs: opts?.timeoutMs,
1004
- maxOutputChars: this.maxQmdOutputChars,
1005
- discardStdout: opts?.discardOutput
1006
- });
1007
- }
1008
- async ensureMcporterDaemonStarted(mcporter) {
1009
- if (!mcporter.enabled) return;
1010
- if (!mcporter.startDaemon) {
1011
- const g = globalThis;
1012
- if (!g.__moldclawMcporterColdStartWarned) {
1013
- g.__moldclawMcporterColdStartWarned = true;
1014
- log.warn("mcporter qmd bridge enabled but startDaemon=false; each query may cold-start QMD MCP. Consider setting memory.qmd.mcporter.startDaemon=true to keep it warm.");
1015
- }
1016
- return;
1017
- }
1018
- const g = globalThis;
1019
- if (!g.__moldclawMcporterDaemonStart) g.__moldclawMcporterDaemonStart = (async () => {
1020
- try {
1021
- await this.runMcporter(["daemon", "start"], { timeoutMs: 1e4 });
1022
- } catch (err) {
1023
- log.warn(`mcporter daemon start failed: ${String(err)}`);
1024
- delete g.__moldclawMcporterDaemonStart;
1025
- }
1026
- })();
1027
- await g.__moldclawMcporterDaemonStart;
1028
- }
1029
- async runMcporter(args, opts) {
1030
- const spawnInvocation = resolveCliSpawnInvocation({
1031
- command: "mcporter",
1032
- args,
1033
- env: this.env,
1034
- packageName: "mcporter"
1035
- });
1036
- return await runCliCommand({
1037
- commandSummary: `${spawnInvocation.command} ${spawnInvocation.argv.join(" ")}`,
1038
- spawnInvocation,
1039
- env: this.env,
1040
- cwd: this.workspaceDir,
1041
- timeoutMs: opts?.timeoutMs,
1042
- maxOutputChars: this.maxQmdOutputChars
1043
- });
1044
- }
1045
- async runQmdSearchViaMcporter(params) {
1046
- await this.ensureMcporterDaemonStarted(params.mcporter);
1047
- const selector = `${params.mcporter.serverName}.${params.tool}`;
1048
- const callArgs = {
1049
- query: params.query,
1050
- limit: params.limit,
1051
- minScore: params.minScore
1052
- };
1053
- if (params.collection) callArgs.collection = params.collection;
1054
- const result = await this.runMcporter([
1055
- "call",
1056
- selector,
1057
- "--args",
1058
- JSON.stringify(callArgs),
1059
- "--output",
1060
- "json",
1061
- "--timeout",
1062
- String(Math.max(0, params.timeoutMs))
1063
- ], { timeoutMs: Math.max(params.timeoutMs + 2e3, 5e3) });
1064
- const parsedUnknown = JSON.parse(result.stdout);
1065
- const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1066
- const structured = isRecord(parsedUnknown) && isRecord(parsedUnknown.structuredContent) ? parsedUnknown.structuredContent : parsedUnknown;
1067
- const results = isRecord(structured) && Array.isArray(structured.results) ? structured.results : Array.isArray(structured) ? structured : [];
1068
- const out = [];
1069
- for (const item of results) {
1070
- if (!isRecord(item)) continue;
1071
- const docidRaw = item.docid;
1072
- const docid = typeof docidRaw === "string" ? docidRaw.replace(/^#/, "").trim() : "";
1073
- if (!docid) continue;
1074
- const scoreRaw = item.score;
1075
- const score = typeof scoreRaw === "number" ? scoreRaw : Number(scoreRaw);
1076
- const snippet = typeof item.snippet === "string" ? item.snippet : "";
1077
- out.push({
1078
- docid,
1079
- score: Number.isFinite(score) ? score : 0,
1080
- snippet
1081
- });
1082
- }
1083
- return out;
1084
- }
1085
- async readPartialText(absPath, from, lines) {
1086
- const start = Math.max(1, from ?? 1);
1087
- const count = Math.max(1, lines ?? Number.POSITIVE_INFINITY);
1088
- let handle;
1089
- try {
1090
- handle = await fs.open(absPath);
1091
- } catch (err) {
1092
- if (isFileMissingError(err)) return { missing: true };
1093
- throw err;
1094
- }
1095
- const stream = handle.createReadStream({ encoding: "utf-8" });
1096
- const rl = readline.createInterface({
1097
- input: stream,
1098
- crlfDelay: Infinity
1099
- });
1100
- const selected = [];
1101
- let index = 0;
1102
- try {
1103
- for await (const line of rl) {
1104
- index += 1;
1105
- if (index < start) continue;
1106
- if (selected.length >= count) break;
1107
- selected.push(line);
1108
- }
1109
- } finally {
1110
- rl.close();
1111
- await handle.close();
1112
- }
1113
- return {
1114
- missing: false,
1115
- text: selected.slice(0, count).join("\n")
1116
- };
1117
- }
1118
- async readFullText(absPath) {
1119
- try {
1120
- return {
1121
- missing: false,
1122
- text: await fs.readFile(absPath, "utf-8")
1123
- };
1124
- } catch (err) {
1125
- if (isFileMissingError(err)) return { missing: true };
1126
- throw err;
1127
- }
1128
- }
1129
- ensureDb() {
1130
- if (this.db) return this.db;
1131
- const { DatabaseSync } = requireNodeSqlite();
1132
- this.db = new DatabaseSync(this.indexPath, { readOnly: true });
1133
- this.db.exec("PRAGMA busy_timeout = 1000");
1134
- return this.db;
1135
- }
1136
- async exportSessions() {
1137
- if (!this.sessionExporter) return;
1138
- const exportDir = this.sessionExporter.dir;
1139
- await fs.mkdir(exportDir, { recursive: true });
1140
- const files = await listSessionFilesForAgent(this.agentId);
1141
- const keep = /* @__PURE__ */ new Set();
1142
- const tracked = /* @__PURE__ */ new Set();
1143
- const cutoff = this.sessionExporter.retentionMs ? Date.now() - this.sessionExporter.retentionMs : null;
1144
- for (const sessionFile of files) {
1145
- const entry = await buildSessionEntry(sessionFile);
1146
- if (!entry) continue;
1147
- if (cutoff && entry.mtimeMs < cutoff) continue;
1148
- const targetName = `${path.basename(sessionFile, ".jsonl")}.md`;
1149
- const target = path.join(exportDir, targetName);
1150
- tracked.add(sessionFile);
1151
- const state = this.exportedSessionState.get(sessionFile);
1152
- if (!state || state.hash !== entry.hash || state.mtimeMs !== entry.mtimeMs) await writeFileWithinRoot({
1153
- rootDir: exportDir,
1154
- relativePath: targetName,
1155
- data: this.renderSessionMarkdown(entry),
1156
- encoding: "utf-8"
1157
- });
1158
- this.exportedSessionState.set(sessionFile, {
1159
- hash: entry.hash,
1160
- mtimeMs: entry.mtimeMs,
1161
- target
1162
- });
1163
- keep.add(target);
1164
- }
1165
- const exported = await fs.readdir(exportDir).catch(() => []);
1166
- for (const name of exported) {
1167
- if (!name.endsWith(".md")) continue;
1168
- const full = path.join(exportDir, name);
1169
- if (!keep.has(full)) await fs.rm(full, { force: true });
1170
- }
1171
- for (const [sessionFile, state] of this.exportedSessionState) if (!tracked.has(sessionFile) || !state.target.startsWith(exportDir + path.sep)) this.exportedSessionState.delete(sessionFile);
1172
- }
1173
- renderSessionMarkdown(entry) {
1174
- return `${`# Session ${path.basename(entry.absPath, path.extname(entry.absPath))}`}\n\n${entry.content?.trim().length ? entry.content.trim() : "(empty)"}\n`;
1175
- }
1176
- pickSessionCollectionName() {
1177
- const existing = new Set(this.qmd.collections.map((collection) => collection.name));
1178
- const base = `sessions-${this.sanitizeCollectionNameSegment(this.agentId)}`;
1179
- if (!existing.has(base)) return base;
1180
- let counter = 2;
1181
- let candidate = `${base}-${counter}`;
1182
- while (existing.has(candidate)) {
1183
- counter += 1;
1184
- candidate = `${base}-${counter}`;
1185
- }
1186
- return candidate;
1187
- }
1188
- sanitizeCollectionNameSegment(input) {
1189
- return input.toLowerCase().replace(/[^a-z0-9-]+/g, "-").replace(/^-+|-+$/g, "") || "agent";
1190
- }
1191
- async resolveDocLocation(docid, hints) {
1192
- const normalizedHints = this.normalizeDocHints(hints);
1193
- if (!docid) return this.resolveDocLocationFromHints(normalizedHints);
1194
- const normalized = docid.startsWith("#") ? docid.slice(1) : docid;
1195
- if (!normalized) return null;
1196
- const cacheKey = `${normalizedHints.preferredCollection ?? "*"}:${normalized}`;
1197
- const cached = this.docPathCache.get(cacheKey);
1198
- if (cached) return cached;
1199
- const db = this.ensureDb();
1200
- let rows = [];
1201
- try {
1202
- rows = db.prepare("SELECT collection, path FROM documents WHERE hash = ? AND active = 1").all(normalized);
1203
- if (rows.length === 0) rows = db.prepare("SELECT collection, path FROM documents WHERE hash LIKE ? AND active = 1").all(`${normalized}%`);
1204
- } catch (err) {
1205
- if (this.isSqliteBusyError(err)) {
1206
- log.debug(`qmd index is busy while resolving doc path: ${String(err)}`);
1207
- throw this.createQmdBusyError(err);
1208
- }
1209
- throw err;
1210
- }
1211
- if (rows.length === 0) return null;
1212
- const location = this.pickDocLocation(rows, normalizedHints);
1213
- if (!location) return null;
1214
- this.docPathCache.set(cacheKey, location);
1215
- return location;
1216
- }
1217
- resolveDocLocationFromHints(hints) {
1218
- if (!hints.preferredCollection || !hints.preferredFile) return null;
1219
- const collectionRelativePath = this.toCollectionRelativePath(hints.preferredCollection, hints.preferredFile);
1220
- if (!collectionRelativePath) return null;
1221
- return this.toDocLocation(hints.preferredCollection, collectionRelativePath);
1222
- }
1223
- normalizeDocHints(hints) {
1224
- const preferredCollection = hints?.preferredCollection?.trim();
1225
- const preferredFile = hints?.preferredFile?.trim();
1226
- if (!preferredFile) return preferredCollection ? { preferredCollection } : {};
1227
- const parsedQmdFile = this.parseQmdFileUri(preferredFile);
1228
- return {
1229
- preferredCollection: parsedQmdFile?.collection ?? preferredCollection,
1230
- preferredFile: parsedQmdFile?.collectionRelativePath ?? preferredFile
1231
- };
1232
- }
1233
- parseQmdFileUri(fileRef) {
1234
- if (!fileRef.toLowerCase().startsWith("qmd://")) return null;
1235
- try {
1236
- const parsed = new URL(fileRef);
1237
- const collection = decodeURIComponent(parsed.hostname).trim();
1238
- const pathname = decodeURIComponent(parsed.pathname).replace(/^\/+/, "").trim();
1239
- if (!collection && !pathname) return null;
1240
- return {
1241
- collection: collection || void 0,
1242
- collectionRelativePath: pathname || void 0
1243
- };
1244
- } catch {
1245
- return null;
1246
- }
1247
- }
1248
- toCollectionRelativePath(collection, filePath) {
1249
- const root = this.collectionRoots.get(collection);
1250
- if (!root) return null;
1251
- const trimmedFilePath = filePath.trim();
1252
- if (!trimmedFilePath) return null;
1253
- const normalizedInput = path.normalize(trimmedFilePath);
1254
- const absolutePath = path.isAbsolute(normalizedInput) ? normalizedInput : path.resolve(root.path, normalizedInput);
1255
- if (!this.isWithinRoot(root.path, absolutePath)) return null;
1256
- const relative = path.relative(root.path, absolutePath);
1257
- if (!relative || relative === ".") return null;
1258
- return relative.replace(/\\/g, "/");
1259
- }
1260
- pickDocLocation(rows, hints) {
1261
- if (hints?.preferredCollection) for (const row of rows) {
1262
- if (row.collection !== hints.preferredCollection) continue;
1263
- const location = this.toDocLocation(row.collection, row.path);
1264
- if (location) return location;
1265
- }
1266
- if (hints?.preferredFile) {
1267
- const preferred = path.normalize(hints.preferredFile);
1268
- for (const row of rows) {
1269
- const rowPath = path.normalize(row.path);
1270
- if (rowPath !== preferred && !rowPath.endsWith(path.sep + preferred)) continue;
1271
- const location = this.toDocLocation(row.collection, row.path);
1272
- if (location) return location;
1273
- }
1274
- }
1275
- for (const row of rows) {
1276
- const location = this.toDocLocation(row.collection, row.path);
1277
- if (location) return location;
1278
- }
1279
- return null;
1280
- }
1281
- extractSnippetLines(snippet) {
1282
- const match = SNIPPET_HEADER_RE.exec(snippet);
1283
- if (match) {
1284
- const start = Number(match[1]);
1285
- const count = Number(match[2]);
1286
- if (Number.isFinite(start) && Number.isFinite(count)) return {
1287
- startLine: start,
1288
- endLine: start + count - 1
1289
- };
1290
- }
1291
- return {
1292
- startLine: 1,
1293
- endLine: snippet.split("\n").length
1294
- };
1295
- }
1296
- readCounts() {
1297
- try {
1298
- const rows = this.ensureDb().prepare("SELECT collection, COUNT(*) as c FROM documents WHERE active = 1 GROUP BY collection").all();
1299
- const bySource = /* @__PURE__ */ new Map();
1300
- for (const source of this.sources) bySource.set(source, {
1301
- files: 0,
1302
- chunks: 0
1303
- });
1304
- let total = 0;
1305
- for (const row of rows) {
1306
- const source = this.collectionRoots.get(row.collection)?.kind ?? "memory";
1307
- const entry = bySource.get(source) ?? {
1308
- files: 0,
1309
- chunks: 0
1310
- };
1311
- entry.files += row.c ?? 0;
1312
- entry.chunks += row.c ?? 0;
1313
- bySource.set(source, entry);
1314
- total += row.c ?? 0;
1315
- }
1316
- return {
1317
- totalDocuments: total,
1318
- sourceCounts: Array.from(bySource.entries()).map(([source, value]) => ({
1319
- source,
1320
- files: value.files,
1321
- chunks: value.chunks
1322
- }))
1323
- };
1324
- } catch (err) {
1325
- log.warn(`failed to read qmd index stats: ${String(err)}`);
1326
- return {
1327
- totalDocuments: 0,
1328
- sourceCounts: Array.from(this.sources).map((source) => ({
1329
- source,
1330
- files: 0,
1331
- chunks: 0
1332
- }))
1333
- };
1334
- }
1335
- }
1336
- logScopeDenied(sessionKey) {
1337
- const channel = deriveQmdScopeChannel(sessionKey) ?? "unknown";
1338
- const chatType = deriveQmdScopeChatType(sessionKey) ?? "unknown";
1339
- const key = sessionKey?.trim() || "<none>";
1340
- log.warn(`qmd search denied by scope (channel=${channel}, chatType=${chatType}, session=${key})`);
1341
- }
1342
- isScopeAllowed(sessionKey) {
1343
- return isQmdScopeAllowed(this.qmd.scope, sessionKey);
1344
- }
1345
- toDocLocation(collection, collectionRelativePath) {
1346
- const root = this.collectionRoots.get(collection);
1347
- if (!root) return null;
1348
- const normalizedRelative = collectionRelativePath.replace(/\\/g, "/");
1349
- const absPath = path.normalize(path.resolve(root.path, collectionRelativePath));
1350
- const relativeToWorkspace = path.relative(this.workspaceDir, absPath);
1351
- return {
1352
- rel: this.buildSearchPath(collection, normalizedRelative, relativeToWorkspace, absPath),
1353
- abs: absPath,
1354
- source: root.kind
1355
- };
1356
- }
1357
- buildSearchPath(collection, collectionRelativePath, relativeToWorkspace, absPath) {
1358
- if (this.isInsideWorkspace(relativeToWorkspace)) {
1359
- const normalized = relativeToWorkspace.replace(/\\/g, "/");
1360
- if (!normalized) return path.basename(absPath);
1361
- return normalized;
1362
- }
1363
- return `qmd/${collection}/${collectionRelativePath.replace(/^\/+/, "")}`;
1364
- }
1365
- isInsideWorkspace(relativePath) {
1366
- if (!relativePath) return true;
1367
- if (relativePath.startsWith("..")) return false;
1368
- if (relativePath.startsWith(`..${path.sep}`)) return false;
1369
- return !path.isAbsolute(relativePath);
1370
- }
1371
- resolveReadPath(relPath) {
1372
- if (relPath.startsWith("qmd/")) {
1373
- const [, collection, ...rest] = relPath.split("/");
1374
- if (!collection || rest.length === 0) throw new Error("invalid qmd path");
1375
- const root = this.collectionRoots.get(collection);
1376
- if (!root) throw new Error(`unknown qmd collection: ${collection}`);
1377
- const joined = rest.join("/");
1378
- const resolved = path.resolve(root.path, joined);
1379
- if (!this.isWithinRoot(root.path, resolved)) throw new Error("qmd path escapes collection");
1380
- return resolved;
1381
- }
1382
- const absPath = path.resolve(this.workspaceDir, relPath);
1383
- if (!this.isWithinWorkspace(absPath)) throw new Error("path escapes workspace");
1384
- return absPath;
1385
- }
1386
- isWithinWorkspace(absPath) {
1387
- const normalizedWorkspace = this.workspaceDir.endsWith(path.sep) ? this.workspaceDir : `${this.workspaceDir}${path.sep}`;
1388
- if (absPath === this.workspaceDir) return true;
1389
- return (absPath.endsWith(path.sep) ? absPath : `${absPath}${path.sep}`).startsWith(normalizedWorkspace);
1390
- }
1391
- isWithinRoot(root, candidate) {
1392
- const normalizedRoot = root.endsWith(path.sep) ? root : `${root}${path.sep}`;
1393
- if (candidate === root) return true;
1394
- return (candidate.endsWith(path.sep) ? candidate : `${candidate}${path.sep}`).startsWith(normalizedRoot);
1395
- }
1396
- clampResultsByInjectedChars(results) {
1397
- const budget = this.qmd.limits.maxInjectedChars;
1398
- if (!budget || budget <= 0) return results;
1399
- let remaining = budget;
1400
- const clamped = [];
1401
- for (const entry of results) {
1402
- if (remaining <= 0) break;
1403
- const snippet = entry.snippet ?? "";
1404
- if (snippet.length <= remaining) {
1405
- clamped.push(entry);
1406
- remaining -= snippet.length;
1407
- } else {
1408
- const trimmed = snippet.slice(0, Math.max(0, remaining));
1409
- clamped.push({
1410
- ...entry,
1411
- snippet: trimmed
1412
- });
1413
- break;
1414
- }
1415
- }
1416
- return clamped;
1417
- }
1418
- diversifyResultsBySource(results, limit) {
1419
- const target = Math.max(0, limit);
1420
- if (target <= 0) return [];
1421
- if (results.length <= 1) return results.slice(0, target);
1422
- const bySource = /* @__PURE__ */ new Map();
1423
- for (const entry of results) {
1424
- const list = bySource.get(entry.source) ?? [];
1425
- list.push(entry);
1426
- bySource.set(entry.source, list);
1427
- }
1428
- const hasSessions = bySource.has("sessions");
1429
- const hasMemory = bySource.has("memory");
1430
- if (!hasSessions || !hasMemory) return results.slice(0, target);
1431
- const sourceOrder = Array.from(bySource.entries()).toSorted((a, b) => (b[1][0]?.score ?? 0) - (a[1][0]?.score ?? 0)).map(([source]) => source);
1432
- const diversified = [];
1433
- while (diversified.length < target) {
1434
- let emitted = false;
1435
- for (const source of sourceOrder) {
1436
- const next = bySource.get(source)?.shift();
1437
- if (!next) continue;
1438
- diversified.push(next);
1439
- emitted = true;
1440
- if (diversified.length >= target) break;
1441
- }
1442
- if (!emitted) break;
1443
- }
1444
- return diversified;
1445
- }
1446
- shouldSkipUpdate(force) {
1447
- if (force) return false;
1448
- const debounceMs = this.qmd.update.debounceMs;
1449
- if (debounceMs <= 0) return false;
1450
- if (!this.lastUpdateAt) return false;
1451
- return Date.now() - this.lastUpdateAt < debounceMs;
1452
- }
1453
- isSqliteBusyError(err) {
1454
- const normalized = (err instanceof Error ? err.message : String(err)).toLowerCase();
1455
- return normalized.includes("sqlite_busy") || normalized.includes("database is locked");
1456
- }
1457
- isUnsupportedQmdOptionError(err) {
1458
- const normalized = (err instanceof Error ? err.message : String(err)).toLowerCase();
1459
- return normalized.includes("unknown flag") || normalized.includes("unknown option") || normalized.includes("unrecognized option") || normalized.includes("flag provided but not defined") || normalized.includes("unexpected argument");
1460
- }
1461
- createQmdBusyError(err) {
1462
- const message = err instanceof Error ? err.message : String(err);
1463
- return /* @__PURE__ */ new Error(`qmd index busy while reading results: ${message}`);
1464
- }
1465
- async waitForPendingUpdateBeforeSearch() {
1466
- const pending = this.pendingUpdate;
1467
- if (!pending) return;
1468
- await Promise.race([pending.catch(() => void 0), new Promise((resolve) => setTimeout(resolve, SEARCH_PENDING_UPDATE_WAIT_MS))]);
1469
- }
1470
- async runQueryAcrossCollections(query, limit, collectionNames, command) {
1471
- log.debug(`qmd ${command} multi-collection workaround active (${collectionNames.length} collections)`);
1472
- const bestByResultKey = /* @__PURE__ */ new Map();
1473
- for (const collectionName of collectionNames) {
1474
- const args = this.buildSearchArgs(command, query, limit);
1475
- args.push("-c", collectionName);
1476
- const result = await this.runQmd(args, { timeoutMs: this.qmd.limits.timeoutMs });
1477
- const parsed = parseQmdQueryJson(result.stdout, result.stderr);
1478
- for (const entry of parsed) {
1479
- const normalizedHints = this.normalizeDocHints({
1480
- preferredCollection: entry.collection ?? collectionName,
1481
- preferredFile: entry.file
1482
- });
1483
- const normalizedDocId = typeof entry.docid === "string" && entry.docid.trim().length > 0 ? entry.docid : void 0;
1484
- const withCollection = {
1485
- ...entry,
1486
- docid: normalizedDocId,
1487
- collection: normalizedHints.preferredCollection ?? entry.collection ?? collectionName,
1488
- file: normalizedHints.preferredFile ?? entry.file
1489
- };
1490
- const resultKey = this.buildQmdResultKey(withCollection);
1491
- if (!resultKey) continue;
1492
- const prev = bestByResultKey.get(resultKey);
1493
- const prevScore = typeof prev?.score === "number" ? prev.score : Number.NEGATIVE_INFINITY;
1494
- const nextScore = typeof withCollection.score === "number" ? withCollection.score : Number.NEGATIVE_INFINITY;
1495
- if (!prev || nextScore > prevScore) bestByResultKey.set(resultKey, withCollection);
1496
- }
1497
- }
1498
- return [...bestByResultKey.values()].toSorted((a, b) => (b.score ?? 0) - (a.score ?? 0));
1499
- }
1500
- buildQmdResultKey(entry) {
1501
- if (typeof entry.docid === "string" && entry.docid.trim().length > 0) return `docid:${entry.docid}`;
1502
- const hints = this.normalizeDocHints({
1503
- preferredCollection: entry.collection,
1504
- preferredFile: entry.file
1505
- });
1506
- if (!hints.preferredCollection || !hints.preferredFile) return null;
1507
- const collectionRelativePath = this.toCollectionRelativePath(hints.preferredCollection, hints.preferredFile);
1508
- if (!collectionRelativePath) return null;
1509
- return `file:${hints.preferredCollection}:${collectionRelativePath}`;
1510
- }
1511
- async runMcporterAcrossCollections(params) {
1512
- const bestByDocId = /* @__PURE__ */ new Map();
1513
- for (const collectionName of params.collectionNames) {
1514
- const parsed = await this.runQmdSearchViaMcporter({
1515
- mcporter: this.qmd.mcporter,
1516
- tool: params.tool,
1517
- query: params.query,
1518
- limit: params.limit,
1519
- minScore: params.minScore,
1520
- collection: collectionName,
1521
- timeoutMs: this.qmd.limits.timeoutMs
1522
- });
1523
- for (const entry of parsed) {
1524
- if (typeof entry.docid !== "string" || !entry.docid.trim()) continue;
1525
- const prev = bestByDocId.get(entry.docid);
1526
- const prevScore = typeof prev?.score === "number" ? prev.score : Number.NEGATIVE_INFINITY;
1527
- const nextScore = typeof entry.score === "number" ? entry.score : Number.NEGATIVE_INFINITY;
1528
- if (!prev || nextScore > prevScore) bestByDocId.set(entry.docid, entry);
1529
- }
1530
- }
1531
- return [...bestByDocId.values()].toSorted((a, b) => (b.score ?? 0) - (a.score ?? 0));
1532
- }
1533
- listManagedCollectionNames() {
1534
- return this.managedCollectionNames;
1535
- }
1536
- computeManagedCollectionNames() {
1537
- const seen = /* @__PURE__ */ new Set();
1538
- const names = [];
1539
- for (const collection of this.qmd.collections) {
1540
- const name = collection.name?.trim();
1541
- if (!name || seen.has(name)) continue;
1542
- seen.add(name);
1543
- names.push(name);
1544
- }
1545
- return names;
1546
- }
1547
- buildCollectionFilterArgs(collectionNames) {
1548
- if (collectionNames.length === 0) return [];
1549
- return collectionNames.filter(Boolean).flatMap((name) => ["-c", name]);
1550
- }
1551
- buildSearchArgs(command, query, limit) {
1552
- const normalizedQuery = command === "search" ? normalizeHanBm25Query(query) : query;
1553
- if (command === "query") return [
1554
- "query",
1555
- normalizedQuery,
1556
- "--json",
1557
- "-n",
1558
- String(limit)
1559
- ];
1560
- return [
1561
- command,
1562
- normalizedQuery,
1563
- "--json",
1564
- "-n",
1565
- String(limit)
1566
- ];
1567
- }
1568
- };
1569
- //#endregion
1570
- export { QmdMemoryManager };