@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
@@ -0,0 +1,1598 @@
1
+ import { t as formatDocsLink } from "./links-BcahUP5U.js";
2
+ import { Ag as setTopLevelChannelDmPolicyWithAllowFrom, Ah as createScopedPairingAccess, BT as collectOpenGroupPolicyRouteAllowlistWarnings, Cg as resolveSetupAccountId, Dh as createPersistentDedupe, GC as buildBaseChannelStatusSummary, HC as createAccountListHelpers, HT as clearAccountEntryFields, IT as collectAllowlistProviderGroupPolicyWarnings, JC as buildRuntimeAccountStatusSnapshot, Kw as buildChannelKeyCandidates, Md as resolveDmGroupAccessWithCommandGate, Og as setSetupChannelEnabled, Oh as issuePairingChallenge, Rx as resolveAccountWithDefaultFallback, Tw as applyAccountNameToChannelSection, UT as deleteAccountFromConfigSection, Ug as logInboundDrop, WT as setAccountEnabledInConfigSection, Yw as resolveChannelEntryMatchWithFallback, Zw as resolveNestedAllowlistDecision, bS as readRequestBodyWithLimit, bs as resolveMentionGatingWithBypass, gT as mapAllowFromEntries, ig as buildSecretInputSchema, jw as patchScopedAccountConfig, kT as buildAccountScopedDmSecurityPolicy, kd as readStoreAllowFromForDmPolicy, qw as normalizeChannelSlug, ug as mergeAllowFromEntries, vS as isRequestBodyLimitError, xS as requestBodyErrorToText } from "./auth-profiles-C-Ul-Qkn.js";
3
+ import { n as normalizeAccountId, t as DEFAULT_ACCOUNT_ID } from "./account-id-BuyZMNja.js";
4
+ import { X as ToolPolicySchema } from "./io-BaBxjB1v.js";
5
+ import { a as hasConfiguredSecretInput, c as normalizeResolvedSecretInputString } from "./types.secrets-Ca-9L8vU.js";
6
+ import { F as requireOpenAllowFrom, a as DmPolicySchema, c as GroupPolicySchema, m as MarkdownConfigSchema, y as ReplyRuntimeConfigSchemaShape } from "./zod-schema.core-DvwgNmpd.js";
7
+ import { J as fetchWithSsrFGuard } from "./provider-web-search-CcUC9ktE.js";
8
+ import { c as resolveAllowlistProviderRuntimeGroupPolicy, f as warnMissingProviderGroupPolicyFallbackOnce, l as resolveDefaultGroupPolicy, n as evaluateMatchedGroupAccessForPolicy, o as GROUP_POLICY_BLOCKED_LABEL } from "./group-access-UAqUyJod.js";
9
+ import { r as buildChannelConfigSchema } from "./config-schema-BNU4GQh_.js";
10
+ import { i as tryReadSecretFileSync } from "./secret-file-p1IhQzwJ.js";
11
+ import { t as formatAllowFromLowercase } from "./allow-from-Brz0jyla.js";
12
+ import { t as createPluginRuntimeStore } from "./runtime-store-DTqHvPYo.js";
13
+ import { t as createAccountStatusSink } from "./channel-lifecycle-DA5pCpey.js";
14
+ import { i as resolveOutboundMediaUrls, n as formatTextWithAttachmentLinks } from "./reply-payload-BD0_s60z.js";
15
+ import { t as dispatchInboundReplyWithBase } from "./inbound-reply-dispatch-gzPJFtkc.js";
16
+ import { n as runStoppablePassiveMonitor, t as resolveLoggerBackedRuntime } from "./runtime-CS-itw_w.js";
17
+ import { t as requireChannelOpenAllowFrom } from "./config-schema-helpers-D4ZGZ7dA.js";
18
+ import { readFileSync } from "node:fs";
19
+ import path from "node:path";
20
+ import os from "node:os";
21
+ import { createHmac, randomBytes } from "node:crypto";
22
+ import { z } from "zod";
23
+ import { createServer } from "node:http";
24
+ //#region extensions/nextcloud-talk/src/accounts.ts
25
+ function isTruthyEnvValue(value) {
26
+ const normalized = (value ?? "").trim().toLowerCase();
27
+ return normalized === "true" || normalized === "1" || normalized === "yes" || normalized === "on";
28
+ }
29
+ const debugAccounts = (...args) => {
30
+ if (isTruthyEnvValue(process.env.MOLDCLAW_DEBUG_NEXTCLOUD_TALK_ACCOUNTS)) console.warn("[nextcloud-talk:accounts]", ...args);
31
+ };
32
+ const { listAccountIds: listNextcloudTalkAccountIdsInternal, resolveDefaultAccountId: resolveDefaultNextcloudTalkAccountId } = createAccountListHelpers("nextcloud-talk", { normalizeAccountId });
33
+ function listNextcloudTalkAccountIds(cfg) {
34
+ const ids = listNextcloudTalkAccountIdsInternal(cfg);
35
+ debugAccounts("listNextcloudTalkAccountIds", ids);
36
+ return ids;
37
+ }
38
+ function resolveAccountConfig(cfg, accountId) {
39
+ const accounts = cfg.channels?.["nextcloud-talk"]?.accounts;
40
+ if (!accounts || typeof accounts !== "object") return;
41
+ const direct = accounts[accountId];
42
+ if (direct) return direct;
43
+ const normalized = normalizeAccountId(accountId);
44
+ const matchKey = Object.keys(accounts).find((key) => normalizeAccountId(key) === normalized);
45
+ return matchKey ? accounts[matchKey] : void 0;
46
+ }
47
+ function mergeNextcloudTalkAccountConfig(cfg, accountId) {
48
+ const { accounts: _ignored, defaultAccount: _ignoredDefaultAccount, ...base } = cfg.channels?.["nextcloud-talk"] ?? {};
49
+ const account = resolveAccountConfig(cfg, accountId) ?? {};
50
+ return {
51
+ ...base,
52
+ ...account
53
+ };
54
+ }
55
+ function resolveNextcloudTalkSecret(cfg, opts) {
56
+ const merged = mergeNextcloudTalkAccountConfig(cfg, opts.accountId ?? "default");
57
+ const envSecret = process.env.NEXTCLOUD_TALK_BOT_SECRET?.trim();
58
+ if (envSecret && (!opts.accountId || opts.accountId === "default")) return {
59
+ secret: envSecret,
60
+ source: "env"
61
+ };
62
+ if (merged.botSecretFile) {
63
+ const fileSecret = tryReadSecretFileSync(merged.botSecretFile, "Nextcloud Talk bot secret file", { rejectSymlink: true });
64
+ if (fileSecret) return {
65
+ secret: fileSecret,
66
+ source: "secretFile"
67
+ };
68
+ }
69
+ const inlineSecret = normalizeResolvedSecretInputString({
70
+ value: merged.botSecret,
71
+ path: `channels.nextcloud-talk.accounts.${opts.accountId ?? "default"}.botSecret`
72
+ });
73
+ if (inlineSecret) return {
74
+ secret: inlineSecret,
75
+ source: "config"
76
+ };
77
+ return {
78
+ secret: "",
79
+ source: "none"
80
+ };
81
+ }
82
+ function resolveNextcloudTalkAccount(params) {
83
+ const baseEnabled = params.cfg.channels?.["nextcloud-talk"]?.enabled !== false;
84
+ const resolve = (accountId) => {
85
+ const merged = mergeNextcloudTalkAccountConfig(params.cfg, accountId);
86
+ const accountEnabled = merged.enabled !== false;
87
+ const enabled = baseEnabled && accountEnabled;
88
+ const secretResolution = resolveNextcloudTalkSecret(params.cfg, { accountId });
89
+ const baseUrl = merged.baseUrl?.trim()?.replace(/\/$/, "") ?? "";
90
+ debugAccounts("resolve", {
91
+ accountId,
92
+ enabled,
93
+ secretSource: secretResolution.source,
94
+ baseUrl: baseUrl ? "[set]" : "[missing]"
95
+ });
96
+ return {
97
+ accountId,
98
+ enabled,
99
+ name: merged.name?.trim() || void 0,
100
+ baseUrl,
101
+ secret: secretResolution.secret,
102
+ secretSource: secretResolution.source,
103
+ config: merged
104
+ };
105
+ };
106
+ return resolveAccountWithDefaultFallback({
107
+ accountId: params.accountId,
108
+ normalizeAccountId,
109
+ resolvePrimary: resolve,
110
+ hasCredential: (account) => account.secretSource !== "none",
111
+ resolveDefaultAccountId: () => resolveDefaultNextcloudTalkAccountId(params.cfg)
112
+ });
113
+ }
114
+ //#endregion
115
+ //#region extensions/nextcloud-talk/src/config-schema.ts
116
+ const NextcloudTalkRoomSchema = z.object({
117
+ requireMention: z.boolean().optional(),
118
+ tools: ToolPolicySchema,
119
+ skills: z.array(z.string()).optional(),
120
+ enabled: z.boolean().optional(),
121
+ allowFrom: z.array(z.string()).optional(),
122
+ systemPrompt: z.string().optional()
123
+ }).strict();
124
+ const NextcloudTalkAccountSchemaBase = z.object({
125
+ name: z.string().optional(),
126
+ enabled: z.boolean().optional(),
127
+ markdown: MarkdownConfigSchema,
128
+ baseUrl: z.string().optional(),
129
+ botSecret: buildSecretInputSchema().optional(),
130
+ botSecretFile: z.string().optional(),
131
+ apiUser: z.string().optional(),
132
+ apiPassword: buildSecretInputSchema().optional(),
133
+ apiPasswordFile: z.string().optional(),
134
+ dmPolicy: DmPolicySchema.optional().default("pairing"),
135
+ webhookPort: z.number().int().positive().optional(),
136
+ webhookHost: z.string().optional(),
137
+ webhookPath: z.string().optional(),
138
+ webhookPublicUrl: z.string().optional(),
139
+ allowFrom: z.array(z.string()).optional(),
140
+ groupAllowFrom: z.array(z.string()).optional(),
141
+ groupPolicy: GroupPolicySchema.optional().default("allowlist"),
142
+ rooms: z.record(z.string(), NextcloudTalkRoomSchema.optional()).optional(),
143
+ ...ReplyRuntimeConfigSchemaShape
144
+ }).strict();
145
+ const NextcloudTalkAccountSchema = NextcloudTalkAccountSchemaBase.superRefine((value, ctx) => {
146
+ requireChannelOpenAllowFrom({
147
+ channel: "nextcloud-talk",
148
+ policy: value.dmPolicy,
149
+ allowFrom: value.allowFrom,
150
+ ctx,
151
+ requireOpenAllowFrom
152
+ });
153
+ });
154
+ const NextcloudTalkConfigSchema = NextcloudTalkAccountSchemaBase.extend({
155
+ accounts: z.record(z.string(), NextcloudTalkAccountSchema.optional()).optional(),
156
+ defaultAccount: z.string().optional()
157
+ }).superRefine((value, ctx) => {
158
+ requireChannelOpenAllowFrom({
159
+ channel: "nextcloud-talk",
160
+ policy: value.dmPolicy,
161
+ allowFrom: value.allowFrom,
162
+ ctx,
163
+ requireOpenAllowFrom
164
+ });
165
+ });
166
+ //#endregion
167
+ //#region extensions/nextcloud-talk/src/policy.ts
168
+ function normalizeAllowEntry(raw) {
169
+ return raw.trim().toLowerCase().replace(/^(nextcloud-talk|nc-talk|nc):/i, "");
170
+ }
171
+ function normalizeNextcloudTalkAllowlist(values) {
172
+ return (values ?? []).map((value) => normalizeAllowEntry(String(value))).filter(Boolean);
173
+ }
174
+ function resolveNextcloudTalkAllowlistMatch(params) {
175
+ const allowFrom = normalizeNextcloudTalkAllowlist(params.allowFrom);
176
+ if (allowFrom.length === 0) return { allowed: false };
177
+ if (allowFrom.includes("*")) return {
178
+ allowed: true,
179
+ matchKey: "*",
180
+ matchSource: "wildcard"
181
+ };
182
+ const senderId = normalizeAllowEntry(params.senderId);
183
+ if (allowFrom.includes(senderId)) return {
184
+ allowed: true,
185
+ matchKey: senderId,
186
+ matchSource: "id"
187
+ };
188
+ return { allowed: false };
189
+ }
190
+ function resolveNextcloudTalkRoomMatch(params) {
191
+ const rooms = params.rooms ?? {};
192
+ const allowlistConfigured = Object.keys(rooms).length > 0;
193
+ const match = resolveChannelEntryMatchWithFallback({
194
+ entries: rooms,
195
+ keys: buildChannelKeyCandidates(params.roomToken),
196
+ wildcardKey: "*",
197
+ normalizeKey: normalizeChannelSlug
198
+ });
199
+ const roomConfig = match.entry;
200
+ const allowed = resolveNestedAllowlistDecision({
201
+ outerConfigured: allowlistConfigured,
202
+ outerMatched: Boolean(roomConfig),
203
+ innerConfigured: false,
204
+ innerMatched: false
205
+ });
206
+ return {
207
+ roomConfig,
208
+ wildcardConfig: match.wildcardEntry,
209
+ roomKey: match.matchKey ?? match.key,
210
+ matchSource: match.matchSource,
211
+ allowed,
212
+ allowlistConfigured
213
+ };
214
+ }
215
+ function resolveNextcloudTalkGroupToolPolicy(params) {
216
+ const cfg = params.cfg;
217
+ const roomToken = params.groupId?.trim();
218
+ if (!roomToken) return;
219
+ const match = resolveNextcloudTalkRoomMatch({
220
+ rooms: cfg.channels?.["nextcloud-talk"]?.rooms,
221
+ roomToken
222
+ });
223
+ return match.roomConfig?.tools ?? match.wildcardConfig?.tools;
224
+ }
225
+ function resolveNextcloudTalkRequireMention(params) {
226
+ if (typeof params.roomConfig?.requireMention === "boolean") return params.roomConfig.requireMention;
227
+ if (typeof params.wildcardConfig?.requireMention === "boolean") return params.wildcardConfig.requireMention;
228
+ return true;
229
+ }
230
+ function resolveNextcloudTalkGroupAllow(params) {
231
+ const outerAllow = normalizeNextcloudTalkAllowlist(params.outerAllowFrom);
232
+ const innerAllow = normalizeNextcloudTalkAllowlist(params.innerAllowFrom);
233
+ const outerMatch = resolveNextcloudTalkAllowlistMatch({
234
+ allowFrom: params.outerAllowFrom,
235
+ senderId: params.senderId
236
+ });
237
+ const innerMatch = resolveNextcloudTalkAllowlistMatch({
238
+ allowFrom: params.innerAllowFrom,
239
+ senderId: params.senderId
240
+ });
241
+ return {
242
+ allowed: evaluateMatchedGroupAccessForPolicy({
243
+ groupPolicy: params.groupPolicy,
244
+ allowlistConfigured: outerAllow.length > 0 || innerAllow.length > 0,
245
+ allowlistMatched: resolveNestedAllowlistDecision({
246
+ outerConfigured: outerAllow.length > 0 || innerAllow.length > 0,
247
+ outerMatched: outerAllow.length > 0 ? outerMatch.allowed : true,
248
+ innerConfigured: innerAllow.length > 0,
249
+ innerMatched: innerMatch.allowed
250
+ })
251
+ }).allowed,
252
+ outerMatch: params.groupPolicy === "open" ? { allowed: true } : params.groupPolicy === "disabled" ? { allowed: false } : outerMatch,
253
+ innerMatch: params.groupPolicy === "open" ? { allowed: true } : params.groupPolicy === "disabled" ? { allowed: false } : innerMatch
254
+ };
255
+ }
256
+ function resolveNextcloudTalkMentionGate(params) {
257
+ const result = resolveMentionGatingWithBypass({
258
+ isGroup: params.isGroup,
259
+ requireMention: params.requireMention,
260
+ canDetectMention: true,
261
+ wasMentioned: params.wasMentioned,
262
+ allowTextCommands: params.allowTextCommands,
263
+ hasControlCommand: params.hasControlCommand,
264
+ commandAuthorized: params.commandAuthorized
265
+ });
266
+ return {
267
+ shouldSkip: result.shouldSkip,
268
+ shouldBypassMention: result.shouldBypassMention
269
+ };
270
+ }
271
+ //#endregion
272
+ //#region extensions/nextcloud-talk/src/room-info.ts
273
+ const ROOM_CACHE_TTL_MS = 300 * 1e3;
274
+ const ROOM_CACHE_ERROR_TTL_MS = 30 * 1e3;
275
+ const roomCache = /* @__PURE__ */ new Map();
276
+ function resolveRoomCacheKey(params) {
277
+ return `${params.accountId}:${params.roomToken}`;
278
+ }
279
+ function readApiPassword(params) {
280
+ const inlinePassword = normalizeResolvedSecretInputString({
281
+ value: params.apiPassword,
282
+ path: "channels.nextcloud-talk.apiPassword"
283
+ });
284
+ if (inlinePassword) return inlinePassword;
285
+ if (!params.apiPasswordFile) return;
286
+ try {
287
+ return readFileSync(params.apiPasswordFile, "utf-8").trim() || void 0;
288
+ } catch {
289
+ return;
290
+ }
291
+ }
292
+ function coerceRoomType(value) {
293
+ if (typeof value === "number" && Number.isFinite(value)) return value;
294
+ if (typeof value === "string" && value.trim()) {
295
+ const parsed = Number.parseInt(value, 10);
296
+ return Number.isFinite(parsed) ? parsed : void 0;
297
+ }
298
+ }
299
+ function resolveRoomKindFromType(type) {
300
+ if (!type) return;
301
+ if (type === 1 || type === 5 || type === 6) return "direct";
302
+ return "group";
303
+ }
304
+ async function resolveNextcloudTalkRoomKind(params) {
305
+ const { account, roomToken, runtime } = params;
306
+ const key = resolveRoomCacheKey({
307
+ accountId: account.accountId,
308
+ roomToken
309
+ });
310
+ const cached = roomCache.get(key);
311
+ if (cached) {
312
+ const age = Date.now() - cached.fetchedAt;
313
+ if (cached.kind && age < ROOM_CACHE_TTL_MS) return cached.kind;
314
+ if (cached.error && age < ROOM_CACHE_ERROR_TTL_MS) return;
315
+ }
316
+ const apiUser = account.config.apiUser?.trim();
317
+ const apiPassword = readApiPassword({
318
+ apiPassword: account.config.apiPassword,
319
+ apiPasswordFile: account.config.apiPasswordFile
320
+ });
321
+ if (!apiUser || !apiPassword) return;
322
+ const baseUrl = account.baseUrl?.trim();
323
+ if (!baseUrl) return;
324
+ const url = `${baseUrl}/ocs/v2.php/apps/spreed/api/v4/room/${roomToken}`;
325
+ const auth = Buffer.from(`${apiUser}:${apiPassword}`, "utf-8").toString("base64");
326
+ try {
327
+ const { response, release } = await fetchWithSsrFGuard({
328
+ url,
329
+ init: {
330
+ method: "GET",
331
+ headers: {
332
+ Authorization: `Basic ${auth}`,
333
+ "OCS-APIRequest": "true",
334
+ Accept: "application/json"
335
+ }
336
+ },
337
+ auditContext: "nextcloud-talk.room-info"
338
+ });
339
+ try {
340
+ if (!response.ok) {
341
+ roomCache.set(key, {
342
+ fetchedAt: Date.now(),
343
+ error: `status:${response.status}`
344
+ });
345
+ runtime?.log?.(`nextcloud-talk: room lookup failed (${response.status}) token=${roomToken}`);
346
+ return;
347
+ }
348
+ const kind = resolveRoomKindFromType(coerceRoomType((await response.json()).ocs?.data?.type));
349
+ roomCache.set(key, {
350
+ fetchedAt: Date.now(),
351
+ kind
352
+ });
353
+ return kind;
354
+ } finally {
355
+ await release();
356
+ }
357
+ } catch (err) {
358
+ roomCache.set(key, {
359
+ fetchedAt: Date.now(),
360
+ error: err instanceof Error ? err.message : String(err)
361
+ });
362
+ runtime?.error?.(`nextcloud-talk: room lookup error: ${String(err)}`);
363
+ return;
364
+ }
365
+ }
366
+ //#endregion
367
+ //#region extensions/nextcloud-talk/src/runtime.ts
368
+ const { setRuntime: setNextcloudTalkRuntime, getRuntime: getNextcloudTalkRuntime } = createPluginRuntimeStore("Nextcloud Talk runtime not initialized");
369
+ //#endregion
370
+ //#region extensions/nextcloud-talk/src/normalize.ts
371
+ function stripNextcloudTalkTargetPrefix(raw) {
372
+ const trimmed = raw.trim();
373
+ if (!trimmed) return;
374
+ let normalized = trimmed;
375
+ if (normalized.startsWith("nextcloud-talk:")) normalized = normalized.slice(15).trim();
376
+ else if (normalized.startsWith("nc-talk:")) normalized = normalized.slice(8).trim();
377
+ else if (normalized.startsWith("nc:")) normalized = normalized.slice(3).trim();
378
+ if (normalized.startsWith("room:")) normalized = normalized.slice(5).trim();
379
+ if (!normalized) return;
380
+ return normalized;
381
+ }
382
+ function normalizeNextcloudTalkMessagingTarget(raw) {
383
+ const normalized = stripNextcloudTalkTargetPrefix(raw);
384
+ return normalized ? `nextcloud-talk:${normalized}`.toLowerCase() : void 0;
385
+ }
386
+ function looksLikeNextcloudTalkTargetId(raw) {
387
+ const trimmed = raw.trim();
388
+ if (!trimmed) return false;
389
+ if (/^(nextcloud-talk|nc-talk|nc):/i.test(trimmed)) return true;
390
+ return /^[a-z0-9]{8,}$/i.test(trimmed);
391
+ }
392
+ //#endregion
393
+ //#region extensions/nextcloud-talk/src/signature.ts
394
+ const SIGNATURE_HEADER = "x-nextcloud-talk-signature";
395
+ const RANDOM_HEADER = "x-nextcloud-talk-random";
396
+ const BACKEND_HEADER = "x-nextcloud-talk-backend";
397
+ /**
398
+ * Verify the HMAC-SHA256 signature of an incoming webhook request.
399
+ * Signature is calculated as: HMAC-SHA256(random + body, secret)
400
+ */
401
+ function verifyNextcloudTalkSignature(params) {
402
+ const { signature, random, body, secret } = params;
403
+ if (!signature || !random || !secret) return false;
404
+ const expected = createHmac("sha256", secret).update(random + body).digest("hex");
405
+ if (signature.length !== expected.length) return false;
406
+ let result = 0;
407
+ for (let i = 0; i < signature.length; i++) result |= signature.charCodeAt(i) ^ expected.charCodeAt(i);
408
+ return result === 0;
409
+ }
410
+ /**
411
+ * Extract webhook headers from an incoming request.
412
+ */
413
+ function extractNextcloudTalkHeaders(headers) {
414
+ const getHeader = (name) => {
415
+ const value = headers[name] ?? headers[name.toLowerCase()];
416
+ return Array.isArray(value) ? value[0] : value;
417
+ };
418
+ const signature = getHeader(SIGNATURE_HEADER);
419
+ const random = getHeader(RANDOM_HEADER);
420
+ const backend = getHeader(BACKEND_HEADER);
421
+ if (!signature || !random || !backend) return null;
422
+ return {
423
+ signature,
424
+ random,
425
+ backend
426
+ };
427
+ }
428
+ /**
429
+ * Generate signature headers for an outbound request to Nextcloud Talk.
430
+ */
431
+ function generateNextcloudTalkSignature(params) {
432
+ const { body, secret } = params;
433
+ const random = randomBytes(32).toString("hex");
434
+ return {
435
+ random,
436
+ signature: createHmac("sha256", secret).update(random + body).digest("hex")
437
+ };
438
+ }
439
+ //#endregion
440
+ //#region extensions/nextcloud-talk/src/send.ts
441
+ function resolveCredentials(explicit, account) {
442
+ const baseUrl = explicit.baseUrl?.trim() ?? account.baseUrl;
443
+ const secret = explicit.secret?.trim() ?? account.secret;
444
+ if (!baseUrl) throw new Error(`Nextcloud Talk baseUrl missing for account "${account.accountId}" (set channels.nextcloud-talk.baseUrl).`);
445
+ if (!secret) throw new Error(`Nextcloud Talk bot secret missing for account "${account.accountId}" (set channels.nextcloud-talk.botSecret/botSecretFile or NEXTCLOUD_TALK_BOT_SECRET for default).`);
446
+ return {
447
+ baseUrl,
448
+ secret
449
+ };
450
+ }
451
+ function normalizeRoomToken(to) {
452
+ const normalized = stripNextcloudTalkTargetPrefix(to);
453
+ if (!normalized) throw new Error("Room token is required for Nextcloud Talk sends");
454
+ return normalized;
455
+ }
456
+ function resolveNextcloudTalkSendContext(opts) {
457
+ const cfg = opts.cfg ?? getNextcloudTalkRuntime().config.loadConfig();
458
+ const account = resolveNextcloudTalkAccount({
459
+ cfg,
460
+ accountId: opts.accountId
461
+ });
462
+ const { baseUrl, secret } = resolveCredentials({
463
+ baseUrl: opts.baseUrl,
464
+ secret: opts.secret
465
+ }, account);
466
+ return {
467
+ cfg,
468
+ account,
469
+ baseUrl,
470
+ secret
471
+ };
472
+ }
473
+ async function sendMessageNextcloudTalk(to, text, opts = {}) {
474
+ const { cfg, account, baseUrl, secret } = resolveNextcloudTalkSendContext(opts);
475
+ const roomToken = normalizeRoomToken(to);
476
+ if (!text?.trim()) throw new Error("Message must be non-empty for Nextcloud Talk sends");
477
+ const tableMode = getNextcloudTalkRuntime().channel.text.resolveMarkdownTableMode({
478
+ cfg,
479
+ channel: "nextcloud-talk",
480
+ accountId: account.accountId
481
+ });
482
+ const message = getNextcloudTalkRuntime().channel.text.convertMarkdownTables(text.trim(), tableMode);
483
+ const body = { message };
484
+ if (opts.replyTo) body.replyTo = opts.replyTo;
485
+ const bodyStr = JSON.stringify(body);
486
+ const { random, signature } = generateNextcloudTalkSignature({
487
+ body: message,
488
+ secret
489
+ });
490
+ const url = `${baseUrl}/ocs/v2.php/apps/spreed/api/v1/bot/${roomToken}/message`;
491
+ const response = await fetch(url, {
492
+ method: "POST",
493
+ headers: {
494
+ "Content-Type": "application/json",
495
+ "OCS-APIRequest": "true",
496
+ "X-Nextcloud-Talk-Bot-Random": random,
497
+ "X-Nextcloud-Talk-Bot-Signature": signature
498
+ },
499
+ body: bodyStr
500
+ });
501
+ if (!response.ok) {
502
+ const errorBody = await response.text().catch(() => "");
503
+ const status = response.status;
504
+ let errorMsg = `Nextcloud Talk send failed (${status})`;
505
+ if (status === 400) errorMsg = `Nextcloud Talk: bad request - ${errorBody || "invalid message format"}`;
506
+ else if (status === 401) errorMsg = "Nextcloud Talk: authentication failed - check bot secret";
507
+ else if (status === 403) errorMsg = "Nextcloud Talk: forbidden - bot may not have permission in this room";
508
+ else if (status === 404) errorMsg = `Nextcloud Talk: room not found (token=${roomToken})`;
509
+ else if (errorBody) errorMsg = `Nextcloud Talk send failed: ${errorBody}`;
510
+ throw new Error(errorMsg);
511
+ }
512
+ let messageId = "unknown";
513
+ let timestamp;
514
+ try {
515
+ const data = await response.json();
516
+ if (data.ocs?.data?.id != null) messageId = String(data.ocs.data.id);
517
+ if (typeof data.ocs?.data?.timestamp === "number") timestamp = data.ocs.data.timestamp;
518
+ } catch {}
519
+ if (opts.verbose) console.log(`[nextcloud-talk] Sent message ${messageId} to room ${roomToken}`);
520
+ getNextcloudTalkRuntime().channel.activity.record({
521
+ channel: "nextcloud-talk",
522
+ accountId: account.accountId,
523
+ direction: "outbound"
524
+ });
525
+ return {
526
+ messageId,
527
+ roomToken,
528
+ timestamp
529
+ };
530
+ }
531
+ //#endregion
532
+ //#region extensions/nextcloud-talk/src/inbound.ts
533
+ const CHANNEL_ID = "nextcloud-talk";
534
+ async function deliverNextcloudTalkReply(params) {
535
+ const { payload, roomToken, accountId, statusSink } = params;
536
+ const combined = formatTextWithAttachmentLinks(payload.text, resolveOutboundMediaUrls(payload));
537
+ if (!combined) return;
538
+ await sendMessageNextcloudTalk(roomToken, combined, {
539
+ accountId,
540
+ replyTo: payload.replyToId
541
+ });
542
+ statusSink?.({ lastOutboundAt: Date.now() });
543
+ }
544
+ async function handleNextcloudTalkInbound(params) {
545
+ const { message, account, config, runtime, statusSink } = params;
546
+ const core = getNextcloudTalkRuntime();
547
+ const pairing = createScopedPairingAccess({
548
+ core,
549
+ channel: CHANNEL_ID,
550
+ accountId: account.accountId
551
+ });
552
+ const rawBody = message.text?.trim() ?? "";
553
+ if (!rawBody) return;
554
+ const roomKind = await resolveNextcloudTalkRoomKind({
555
+ account,
556
+ roomToken: message.roomToken,
557
+ runtime
558
+ });
559
+ const isGroup = roomKind === "direct" ? false : roomKind === "group" ? true : message.isGroupChat;
560
+ const senderId = message.senderId;
561
+ const senderName = message.senderName;
562
+ const roomToken = message.roomToken;
563
+ const roomName = message.roomName;
564
+ statusSink?.({ lastInboundAt: message.timestamp });
565
+ const dmPolicy = account.config.dmPolicy ?? "pairing";
566
+ const defaultGroupPolicy = resolveDefaultGroupPolicy(config);
567
+ const { groupPolicy, providerMissingFallbackApplied } = resolveAllowlistProviderRuntimeGroupPolicy({
568
+ providerConfigPresent: (config.channels?.["nextcloud-talk"] ?? void 0) !== void 0,
569
+ groupPolicy: account.config.groupPolicy,
570
+ defaultGroupPolicy
571
+ });
572
+ warnMissingProviderGroupPolicyFallbackOnce({
573
+ providerMissingFallbackApplied,
574
+ providerKey: "nextcloud-talk",
575
+ accountId: account.accountId,
576
+ blockedLabel: GROUP_POLICY_BLOCKED_LABEL.room,
577
+ log: (message) => runtime.log?.(message)
578
+ });
579
+ const configAllowFrom = normalizeNextcloudTalkAllowlist(account.config.allowFrom);
580
+ const configGroupAllowFrom = normalizeNextcloudTalkAllowlist(account.config.groupAllowFrom);
581
+ const storeAllowList = normalizeNextcloudTalkAllowlist(await readStoreAllowFromForDmPolicy({
582
+ provider: CHANNEL_ID,
583
+ accountId: account.accountId,
584
+ dmPolicy,
585
+ readStore: pairing.readStoreForDmPolicy
586
+ }));
587
+ const roomMatch = resolveNextcloudTalkRoomMatch({
588
+ rooms: account.config.rooms,
589
+ roomToken
590
+ });
591
+ const roomConfig = roomMatch.roomConfig;
592
+ if (isGroup && !roomMatch.allowed) {
593
+ runtime.log?.(`nextcloud-talk: drop room ${roomToken} (not allowlisted)`);
594
+ return;
595
+ }
596
+ if (roomConfig?.enabled === false) {
597
+ runtime.log?.(`nextcloud-talk: drop room ${roomToken} (disabled)`);
598
+ return;
599
+ }
600
+ const roomAllowFrom = normalizeNextcloudTalkAllowlist(roomConfig?.allowFrom);
601
+ const allowTextCommands = core.channel.commands.shouldHandleTextCommands({
602
+ cfg: config,
603
+ surface: CHANNEL_ID
604
+ });
605
+ const useAccessGroups = config.commands?.useAccessGroups !== false;
606
+ const hasControlCommand = core.channel.text.hasControlCommand(rawBody, config);
607
+ const access = resolveDmGroupAccessWithCommandGate({
608
+ isGroup,
609
+ dmPolicy,
610
+ groupPolicy,
611
+ allowFrom: configAllowFrom,
612
+ groupAllowFrom: configGroupAllowFrom,
613
+ storeAllowFrom: storeAllowList,
614
+ isSenderAllowed: (allowFrom) => resolveNextcloudTalkAllowlistMatch({
615
+ allowFrom,
616
+ senderId
617
+ }).allowed,
618
+ command: {
619
+ useAccessGroups,
620
+ allowTextCommands,
621
+ hasControlCommand
622
+ }
623
+ });
624
+ const commandAuthorized = access.commandAuthorized;
625
+ const effectiveGroupAllowFrom = access.effectiveGroupAllowFrom;
626
+ if (isGroup) {
627
+ if (access.decision !== "allow") {
628
+ runtime.log?.(`nextcloud-talk: drop group sender ${senderId} (reason=${access.reason})`);
629
+ return;
630
+ }
631
+ if (!resolveNextcloudTalkGroupAllow({
632
+ groupPolicy,
633
+ outerAllowFrom: effectiveGroupAllowFrom,
634
+ innerAllowFrom: roomAllowFrom,
635
+ senderId
636
+ }).allowed) {
637
+ runtime.log?.(`nextcloud-talk: drop group sender ${senderId} (policy=${groupPolicy})`);
638
+ return;
639
+ }
640
+ } else if (access.decision !== "allow") {
641
+ if (access.decision === "pairing") await issuePairingChallenge({
642
+ channel: CHANNEL_ID,
643
+ senderId,
644
+ senderIdLine: `Your Nextcloud user id: ${senderId}`,
645
+ meta: { name: senderName || void 0 },
646
+ upsertPairingRequest: pairing.upsertPairingRequest,
647
+ sendPairingReply: async (text) => {
648
+ await sendMessageNextcloudTalk(roomToken, text, { accountId: account.accountId });
649
+ statusSink?.({ lastOutboundAt: Date.now() });
650
+ },
651
+ onReplyError: (err) => {
652
+ runtime.error?.(`nextcloud-talk: pairing reply failed for ${senderId}: ${String(err)}`);
653
+ }
654
+ });
655
+ runtime.log?.(`nextcloud-talk: drop DM sender ${senderId} (reason=${access.reason})`);
656
+ return;
657
+ }
658
+ if (access.shouldBlockControlCommand) {
659
+ logInboundDrop({
660
+ log: (message) => runtime.log?.(message),
661
+ channel: CHANNEL_ID,
662
+ reason: "control command (unauthorized)",
663
+ target: senderId
664
+ });
665
+ return;
666
+ }
667
+ const mentionRegexes = core.channel.mentions.buildMentionRegexes(config);
668
+ const wasMentioned = mentionRegexes.length ? core.channel.mentions.matchesMentionPatterns(rawBody, mentionRegexes) : false;
669
+ const mentionGate = resolveNextcloudTalkMentionGate({
670
+ isGroup,
671
+ requireMention: isGroup ? resolveNextcloudTalkRequireMention({
672
+ roomConfig,
673
+ wildcardConfig: roomMatch.wildcardConfig
674
+ }) : false,
675
+ wasMentioned,
676
+ allowTextCommands,
677
+ hasControlCommand,
678
+ commandAuthorized
679
+ });
680
+ if (isGroup && mentionGate.shouldSkip) {
681
+ runtime.log?.(`nextcloud-talk: drop room ${roomToken} (no mention)`);
682
+ return;
683
+ }
684
+ const route = core.channel.routing.resolveAgentRoute({
685
+ cfg: config,
686
+ channel: CHANNEL_ID,
687
+ accountId: account.accountId,
688
+ peer: {
689
+ kind: isGroup ? "group" : "direct",
690
+ id: isGroup ? roomToken : senderId
691
+ }
692
+ });
693
+ const fromLabel = isGroup ? `room:${roomName || roomToken}` : senderName || `user:${senderId}`;
694
+ const storePath = core.channel.session.resolveStorePath(config.session?.store, { agentId: route.agentId });
695
+ const envelopeOptions = core.channel.reply.resolveEnvelopeFormatOptions(config);
696
+ const previousTimestamp = core.channel.session.readSessionUpdatedAt({
697
+ storePath,
698
+ sessionKey: route.sessionKey
699
+ });
700
+ const body = core.channel.reply.formatAgentEnvelope({
701
+ channel: "Nextcloud Talk",
702
+ from: fromLabel,
703
+ timestamp: message.timestamp,
704
+ previousTimestamp,
705
+ envelope: envelopeOptions,
706
+ body: rawBody
707
+ });
708
+ const groupSystemPrompt = roomConfig?.systemPrompt?.trim() || void 0;
709
+ const ctxPayload = core.channel.reply.finalizeInboundContext({
710
+ Body: body,
711
+ BodyForAgent: rawBody,
712
+ RawBody: rawBody,
713
+ CommandBody: rawBody,
714
+ From: isGroup ? `nextcloud-talk:room:${roomToken}` : `nextcloud-talk:${senderId}`,
715
+ To: `nextcloud-talk:${roomToken}`,
716
+ SessionKey: route.sessionKey,
717
+ AccountId: route.accountId,
718
+ ChatType: isGroup ? "group" : "direct",
719
+ ConversationLabel: fromLabel,
720
+ SenderName: senderName || void 0,
721
+ SenderId: senderId,
722
+ GroupSubject: isGroup ? roomName || roomToken : void 0,
723
+ GroupSystemPrompt: isGroup ? groupSystemPrompt : void 0,
724
+ Provider: CHANNEL_ID,
725
+ Surface: CHANNEL_ID,
726
+ WasMentioned: isGroup ? wasMentioned : void 0,
727
+ MessageSid: message.messageId,
728
+ Timestamp: message.timestamp,
729
+ OriginatingChannel: CHANNEL_ID,
730
+ OriginatingTo: `nextcloud-talk:${roomToken}`,
731
+ CommandAuthorized: commandAuthorized
732
+ });
733
+ await dispatchInboundReplyWithBase({
734
+ cfg: config,
735
+ channel: CHANNEL_ID,
736
+ accountId: account.accountId,
737
+ route,
738
+ storePath,
739
+ ctxPayload,
740
+ core,
741
+ deliver: async (payload) => {
742
+ await deliverNextcloudTalkReply({
743
+ payload,
744
+ roomToken,
745
+ accountId: account.accountId,
746
+ statusSink
747
+ });
748
+ },
749
+ onRecordError: (err) => {
750
+ runtime.error?.(`nextcloud-talk: failed updating session meta: ${String(err)}`);
751
+ },
752
+ onDispatchError: (err, info) => {
753
+ runtime.error?.(`nextcloud-talk ${info.kind} reply failed: ${String(err)}`);
754
+ },
755
+ replyOptions: {
756
+ skillFilter: roomConfig?.skills,
757
+ disableBlockStreaming: typeof account.config.blockStreaming === "boolean" ? !account.config.blockStreaming : void 0
758
+ }
759
+ });
760
+ }
761
+ //#endregion
762
+ //#region extensions/nextcloud-talk/src/replay-guard.ts
763
+ const DEFAULT_REPLAY_TTL_MS = 1440 * 60 * 1e3;
764
+ const DEFAULT_MEMORY_MAX_SIZE = 1e3;
765
+ const DEFAULT_FILE_MAX_ENTRIES = 1e4;
766
+ function sanitizeSegment(value) {
767
+ const trimmed = value.trim();
768
+ if (!trimmed) return "default";
769
+ return trimmed.replace(/[^a-zA-Z0-9_-]/g, "_");
770
+ }
771
+ function buildReplayKey(params) {
772
+ const roomToken = params.roomToken.trim();
773
+ const messageId = params.messageId.trim();
774
+ if (!roomToken || !messageId) return null;
775
+ return `${roomToken}:${messageId}`;
776
+ }
777
+ function createNextcloudTalkReplayGuard(options) {
778
+ const stateDir = options.stateDir.trim();
779
+ const persistentDedupe = createPersistentDedupe({
780
+ ttlMs: options.ttlMs ?? DEFAULT_REPLAY_TTL_MS,
781
+ memoryMaxSize: options.memoryMaxSize ?? DEFAULT_MEMORY_MAX_SIZE,
782
+ fileMaxEntries: options.fileMaxEntries ?? DEFAULT_FILE_MAX_ENTRIES,
783
+ resolveFilePath: (namespace) => path.join(stateDir, "nextcloud-talk", "replay-dedupe", `${sanitizeSegment(namespace)}.json`)
784
+ });
785
+ return { shouldProcessMessage: async ({ accountId, roomToken, messageId }) => {
786
+ const replayKey = buildReplayKey({
787
+ roomToken,
788
+ messageId
789
+ });
790
+ if (!replayKey) return true;
791
+ return await persistentDedupe.checkAndRecord(replayKey, {
792
+ namespace: accountId,
793
+ onDiskError: options.onDiskError
794
+ });
795
+ } };
796
+ }
797
+ //#endregion
798
+ //#region extensions/nextcloud-talk/src/monitor.ts
799
+ const DEFAULT_WEBHOOK_PORT = 8788;
800
+ const DEFAULT_WEBHOOK_HOST = "0.0.0.0";
801
+ const DEFAULT_WEBHOOK_PATH = "/nextcloud-talk-webhook";
802
+ const DEFAULT_WEBHOOK_MAX_BODY_BYTES = 1024 * 1024;
803
+ const PREAUTH_WEBHOOK_MAX_BODY_BYTES = 64 * 1024;
804
+ const PREAUTH_WEBHOOK_BODY_TIMEOUT_MS = 5e3;
805
+ const HEALTH_PATH = "/healthz";
806
+ const WEBHOOK_ERRORS = {
807
+ missingSignatureHeaders: "Missing signature headers",
808
+ invalidBackend: "Invalid backend",
809
+ invalidSignature: "Invalid signature",
810
+ invalidPayloadFormat: "Invalid payload format",
811
+ payloadTooLarge: "Payload too large",
812
+ internalServerError: "Internal server error"
813
+ };
814
+ function formatError(err) {
815
+ if (err instanceof Error) return err.message;
816
+ return typeof err === "string" ? err : JSON.stringify(err);
817
+ }
818
+ function normalizeOrigin(value) {
819
+ try {
820
+ return new URL(value).origin.toLowerCase();
821
+ } catch {
822
+ return null;
823
+ }
824
+ }
825
+ function parseWebhookPayload(body) {
826
+ try {
827
+ const data = JSON.parse(body);
828
+ if (!data.type || !data.actor?.type || !data.actor?.id || !data.object?.type || !data.object?.id || !data.target?.type || !data.target?.id) return null;
829
+ return data;
830
+ } catch {
831
+ return null;
832
+ }
833
+ }
834
+ function writeJsonResponse(res, status, body) {
835
+ if (body) {
836
+ res.writeHead(status, { "Content-Type": "application/json" });
837
+ res.end(JSON.stringify(body));
838
+ return;
839
+ }
840
+ res.writeHead(status);
841
+ res.end();
842
+ }
843
+ function writeWebhookError(res, status, error) {
844
+ if (res.headersSent) return;
845
+ writeJsonResponse(res, status, { error });
846
+ }
847
+ function validateWebhookHeaders(params) {
848
+ const headers = extractNextcloudTalkHeaders(params.req.headers);
849
+ if (!headers) {
850
+ writeWebhookError(params.res, 400, WEBHOOK_ERRORS.missingSignatureHeaders);
851
+ return null;
852
+ }
853
+ if (params.isBackendAllowed && !params.isBackendAllowed(headers.backend)) {
854
+ writeWebhookError(params.res, 401, WEBHOOK_ERRORS.invalidBackend);
855
+ return null;
856
+ }
857
+ return headers;
858
+ }
859
+ function verifyWebhookSignature(params) {
860
+ if (!verifyNextcloudTalkSignature({
861
+ signature: params.headers.signature,
862
+ random: params.headers.random,
863
+ body: params.body,
864
+ secret: params.secret
865
+ })) {
866
+ writeWebhookError(params.res, 401, WEBHOOK_ERRORS.invalidSignature);
867
+ return false;
868
+ }
869
+ return true;
870
+ }
871
+ function decodeWebhookCreateMessage(params) {
872
+ const payload = parseWebhookPayload(params.body);
873
+ if (!payload) {
874
+ writeWebhookError(params.res, 400, WEBHOOK_ERRORS.invalidPayloadFormat);
875
+ return { kind: "invalid" };
876
+ }
877
+ if (payload.type !== "Create") return { kind: "ignore" };
878
+ return {
879
+ kind: "message",
880
+ message: payloadToInboundMessage(payload)
881
+ };
882
+ }
883
+ function payloadToInboundMessage(payload) {
884
+ return {
885
+ messageId: String(payload.object.id),
886
+ roomToken: payload.target.id,
887
+ roomName: payload.target.name,
888
+ senderId: payload.actor.id,
889
+ senderName: payload.actor.name ?? "",
890
+ text: payload.object.content || payload.object.name || "",
891
+ mediaType: payload.object.mediaType || "text/plain",
892
+ timestamp: Date.now(),
893
+ isGroupChat: true
894
+ };
895
+ }
896
+ function readNextcloudTalkWebhookBody(req, maxBodyBytes) {
897
+ return readRequestBodyWithLimit(req, {
898
+ maxBytes: Math.min(maxBodyBytes, PREAUTH_WEBHOOK_MAX_BODY_BYTES),
899
+ timeoutMs: PREAUTH_WEBHOOK_BODY_TIMEOUT_MS
900
+ });
901
+ }
902
+ function createNextcloudTalkWebhookServer(opts) {
903
+ const { port, host, path, secret, onMessage, onError, abortSignal } = opts;
904
+ const maxBodyBytes = typeof opts.maxBodyBytes === "number" && Number.isFinite(opts.maxBodyBytes) && opts.maxBodyBytes > 0 ? Math.floor(opts.maxBodyBytes) : DEFAULT_WEBHOOK_MAX_BODY_BYTES;
905
+ const readBody = opts.readBody ?? readNextcloudTalkWebhookBody;
906
+ const isBackendAllowed = opts.isBackendAllowed;
907
+ const shouldProcessMessage = opts.shouldProcessMessage;
908
+ const server = createServer(async (req, res) => {
909
+ if (req.url === HEALTH_PATH) {
910
+ res.writeHead(200, { "Content-Type": "text/plain" });
911
+ res.end("ok");
912
+ return;
913
+ }
914
+ if (req.url !== path || req.method !== "POST") {
915
+ res.writeHead(404);
916
+ res.end();
917
+ return;
918
+ }
919
+ try {
920
+ const headers = validateWebhookHeaders({
921
+ req,
922
+ res,
923
+ isBackendAllowed
924
+ });
925
+ if (!headers) return;
926
+ const body = await readBody(req, maxBodyBytes);
927
+ if (!verifyWebhookSignature({
928
+ headers,
929
+ body,
930
+ secret,
931
+ res
932
+ })) return;
933
+ const decoded = decodeWebhookCreateMessage({
934
+ body,
935
+ res
936
+ });
937
+ if (decoded.kind === "invalid") return;
938
+ if (decoded.kind === "ignore") {
939
+ writeJsonResponse(res, 200);
940
+ return;
941
+ }
942
+ const message = decoded.message;
943
+ if (shouldProcessMessage) {
944
+ if (!await shouldProcessMessage(message)) {
945
+ writeJsonResponse(res, 200);
946
+ return;
947
+ }
948
+ }
949
+ writeJsonResponse(res, 200);
950
+ try {
951
+ await onMessage(message);
952
+ } catch (err) {
953
+ onError?.(err instanceof Error ? err : new Error(formatError(err)));
954
+ }
955
+ } catch (err) {
956
+ if (isRequestBodyLimitError(err, "PAYLOAD_TOO_LARGE")) {
957
+ writeWebhookError(res, 413, WEBHOOK_ERRORS.payloadTooLarge);
958
+ return;
959
+ }
960
+ if (isRequestBodyLimitError(err, "REQUEST_BODY_TIMEOUT")) {
961
+ writeWebhookError(res, 408, requestBodyErrorToText("REQUEST_BODY_TIMEOUT"));
962
+ return;
963
+ }
964
+ const error = err instanceof Error ? err : new Error(formatError(err));
965
+ onError?.(error);
966
+ writeWebhookError(res, 500, WEBHOOK_ERRORS.internalServerError);
967
+ }
968
+ });
969
+ const start = () => {
970
+ return new Promise((resolve) => {
971
+ server.listen(port, host, () => resolve());
972
+ });
973
+ };
974
+ let stopped = false;
975
+ const stop = () => {
976
+ if (stopped) return;
977
+ stopped = true;
978
+ try {
979
+ server.close();
980
+ } catch {}
981
+ };
982
+ if (abortSignal) if (abortSignal.aborted) stop();
983
+ else abortSignal.addEventListener("abort", stop, { once: true });
984
+ return {
985
+ server,
986
+ start,
987
+ stop
988
+ };
989
+ }
990
+ async function monitorNextcloudTalkProvider(opts) {
991
+ const core = getNextcloudTalkRuntime();
992
+ const cfg = opts.config ?? core.config.loadConfig();
993
+ const account = resolveNextcloudTalkAccount({
994
+ cfg,
995
+ accountId: opts.accountId
996
+ });
997
+ const runtime = resolveLoggerBackedRuntime(opts.runtime, core.logging.getChildLogger());
998
+ if (!account.secret) throw new Error(`Nextcloud Talk bot secret not configured for account "${account.accountId}"`);
999
+ const port = account.config.webhookPort ?? DEFAULT_WEBHOOK_PORT;
1000
+ const host = account.config.webhookHost ?? DEFAULT_WEBHOOK_HOST;
1001
+ const path = account.config.webhookPath ?? DEFAULT_WEBHOOK_PATH;
1002
+ const logger = core.logging.getChildLogger({
1003
+ channel: "nextcloud-talk",
1004
+ accountId: account.accountId
1005
+ });
1006
+ const expectedBackendOrigin = normalizeOrigin(account.baseUrl);
1007
+ const replayGuard = createNextcloudTalkReplayGuard({
1008
+ stateDir: core.state.resolveStateDir(process.env, os.homedir),
1009
+ onDiskError: (error) => {
1010
+ logger.warn(`[nextcloud-talk:${account.accountId}] replay guard disk error: ${String(error)}`);
1011
+ }
1012
+ });
1013
+ const { start, stop } = createNextcloudTalkWebhookServer({
1014
+ port,
1015
+ host,
1016
+ path,
1017
+ secret: account.secret,
1018
+ isBackendAllowed: (backend) => {
1019
+ if (!expectedBackendOrigin) return true;
1020
+ return normalizeOrigin(backend) === expectedBackendOrigin;
1021
+ },
1022
+ shouldProcessMessage: async (message) => {
1023
+ const shouldProcess = await replayGuard.shouldProcessMessage({
1024
+ accountId: account.accountId,
1025
+ roomToken: message.roomToken,
1026
+ messageId: message.messageId
1027
+ });
1028
+ if (!shouldProcess) logger.warn(`[nextcloud-talk:${account.accountId}] replayed webhook ignored room=${message.roomToken} messageId=${message.messageId}`);
1029
+ return shouldProcess;
1030
+ },
1031
+ onMessage: async (message) => {
1032
+ core.channel.activity.record({
1033
+ channel: "nextcloud-talk",
1034
+ accountId: account.accountId,
1035
+ direction: "inbound",
1036
+ at: message.timestamp
1037
+ });
1038
+ if (opts.onMessage) {
1039
+ await opts.onMessage(message);
1040
+ return;
1041
+ }
1042
+ await handleNextcloudTalkInbound({
1043
+ message,
1044
+ account,
1045
+ config: cfg,
1046
+ runtime,
1047
+ statusSink: opts.statusSink
1048
+ });
1049
+ },
1050
+ onError: (error) => {
1051
+ logger.error(`[nextcloud-talk:${account.accountId}] webhook error: ${error.message}`);
1052
+ },
1053
+ abortSignal: opts.abortSignal
1054
+ });
1055
+ if (opts.abortSignal?.aborted) return { stop };
1056
+ await start();
1057
+ if (opts.abortSignal?.aborted) {
1058
+ stop();
1059
+ return { stop };
1060
+ }
1061
+ const publicUrl = account.config.webhookPublicUrl ?? `http://${host === "0.0.0.0" ? "localhost" : host}:${port}${path}`;
1062
+ logger.info(`[nextcloud-talk:${account.accountId}] webhook listening on ${publicUrl}`);
1063
+ return { stop };
1064
+ }
1065
+ //#endregion
1066
+ //#region extensions/nextcloud-talk/src/setup-core.ts
1067
+ const channel$1 = "nextcloud-talk";
1068
+ function normalizeNextcloudTalkBaseUrl(value) {
1069
+ return value?.trim().replace(/\/+$/, "") ?? "";
1070
+ }
1071
+ function validateNextcloudTalkBaseUrl(value) {
1072
+ if (!value) return "Required";
1073
+ if (!value.startsWith("http://") && !value.startsWith("https://")) return "URL must start with http:// or https://";
1074
+ }
1075
+ function setNextcloudTalkDmPolicy(cfg, dmPolicy) {
1076
+ return setTopLevelChannelDmPolicyWithAllowFrom({
1077
+ cfg,
1078
+ channel: channel$1,
1079
+ dmPolicy
1080
+ });
1081
+ }
1082
+ function setNextcloudTalkAccountConfig(cfg, accountId, updates) {
1083
+ return patchScopedAccountConfig({
1084
+ cfg,
1085
+ channelKey: channel$1,
1086
+ accountId,
1087
+ patch: updates
1088
+ });
1089
+ }
1090
+ function clearNextcloudTalkAccountFields(cfg, accountId, fields) {
1091
+ const section = cfg.channels?.["nextcloud-talk"];
1092
+ if (!section) return cfg;
1093
+ if (accountId === "default") {
1094
+ const nextSection = { ...section };
1095
+ for (const field of fields) delete nextSection[field];
1096
+ return {
1097
+ ...cfg,
1098
+ channels: {
1099
+ ...cfg.channels ?? {},
1100
+ "nextcloud-talk": nextSection
1101
+ }
1102
+ };
1103
+ }
1104
+ const currentAccount = section.accounts?.[accountId];
1105
+ if (!currentAccount) return cfg;
1106
+ const nextAccount = { ...currentAccount };
1107
+ for (const field of fields) delete nextAccount[field];
1108
+ return {
1109
+ ...cfg,
1110
+ channels: {
1111
+ ...cfg.channels ?? {},
1112
+ "nextcloud-talk": {
1113
+ ...section,
1114
+ accounts: {
1115
+ ...section.accounts,
1116
+ [accountId]: nextAccount
1117
+ }
1118
+ }
1119
+ }
1120
+ };
1121
+ }
1122
+ async function promptNextcloudTalkAllowFrom(params) {
1123
+ const existingAllowFrom = resolveNextcloudTalkAccount({
1124
+ cfg: params.cfg,
1125
+ accountId: params.accountId
1126
+ }).config.allowFrom ?? [];
1127
+ await params.prompter.note([
1128
+ "1) Check the Nextcloud admin panel for user IDs",
1129
+ "2) Or look at the webhook payload logs when someone messages",
1130
+ "3) User IDs are typically lowercase usernames in Nextcloud",
1131
+ `Docs: ${formatDocsLink("/channels/nextcloud-talk", "nextcloud-talk")}`
1132
+ ].join("\n"), "Nextcloud Talk user id");
1133
+ let resolvedIds = [];
1134
+ while (resolvedIds.length === 0) {
1135
+ const entry = await params.prompter.text({
1136
+ message: "Nextcloud Talk allowFrom (user id)",
1137
+ placeholder: "username",
1138
+ initialValue: existingAllowFrom[0] ? String(existingAllowFrom[0]) : void 0,
1139
+ validate: (value) => String(value ?? "").trim() ? void 0 : "Required"
1140
+ });
1141
+ resolvedIds = String(entry).split(/[\n,;]+/g).map((value) => value.trim().toLowerCase()).filter(Boolean);
1142
+ if (resolvedIds.length === 0) await params.prompter.note("Please enter at least one valid user ID.", "Nextcloud Talk");
1143
+ }
1144
+ return setNextcloudTalkAccountConfig(params.cfg, params.accountId, {
1145
+ dmPolicy: "allowlist",
1146
+ allowFrom: mergeAllowFromEntries(existingAllowFrom.map((value) => String(value).trim().toLowerCase()), resolvedIds)
1147
+ });
1148
+ }
1149
+ async function promptNextcloudTalkAllowFromForAccount(params) {
1150
+ const accountId = resolveSetupAccountId({
1151
+ accountId: params.accountId,
1152
+ defaultAccountId: resolveDefaultNextcloudTalkAccountId(params.cfg)
1153
+ });
1154
+ return await promptNextcloudTalkAllowFrom({
1155
+ cfg: params.cfg,
1156
+ prompter: params.prompter,
1157
+ accountId
1158
+ });
1159
+ }
1160
+ const nextcloudTalkDmPolicy = {
1161
+ label: "Nextcloud Talk",
1162
+ channel: channel$1,
1163
+ policyKey: "channels.nextcloud-talk.dmPolicy",
1164
+ allowFromKey: "channels.nextcloud-talk.allowFrom",
1165
+ getCurrent: (cfg) => cfg.channels?.["nextcloud-talk"]?.dmPolicy ?? "pairing",
1166
+ setPolicy: (cfg, policy) => setNextcloudTalkDmPolicy(cfg, policy),
1167
+ promptAllowFrom: promptNextcloudTalkAllowFromForAccount
1168
+ };
1169
+ const nextcloudTalkSetupAdapter = {
1170
+ resolveAccountId: ({ accountId }) => normalizeAccountId(accountId),
1171
+ applyAccountName: ({ cfg, accountId, name }) => applyAccountNameToChannelSection({
1172
+ cfg,
1173
+ channelKey: channel$1,
1174
+ accountId,
1175
+ name
1176
+ }),
1177
+ validateInput: ({ accountId, input }) => {
1178
+ const setupInput = input;
1179
+ if (setupInput.useEnv && accountId !== "default") return "NEXTCLOUD_TALK_BOT_SECRET can only be used for the default account.";
1180
+ if (!setupInput.useEnv && !setupInput.secret && !setupInput.secretFile) return "Nextcloud Talk requires bot secret or --secret-file (or --use-env).";
1181
+ if (!setupInput.baseUrl) return "Nextcloud Talk requires --base-url.";
1182
+ return null;
1183
+ },
1184
+ applyAccountConfig: ({ cfg, accountId, input }) => {
1185
+ const setupInput = input;
1186
+ const namedConfig = applyAccountNameToChannelSection({
1187
+ cfg,
1188
+ channelKey: channel$1,
1189
+ accountId,
1190
+ name: setupInput.name
1191
+ });
1192
+ return setNextcloudTalkAccountConfig(setupInput.useEnv ? clearNextcloudTalkAccountFields(namedConfig, accountId, ["botSecret", "botSecretFile"]) : namedConfig, accountId, {
1193
+ baseUrl: normalizeNextcloudTalkBaseUrl(setupInput.baseUrl),
1194
+ ...setupInput.useEnv ? {} : setupInput.secretFile ? { botSecretFile: setupInput.secretFile } : setupInput.secret ? { botSecret: setupInput.secret } : {}
1195
+ });
1196
+ }
1197
+ };
1198
+ //#endregion
1199
+ //#region extensions/nextcloud-talk/src/setup-surface.ts
1200
+ const channel = "nextcloud-talk";
1201
+ const CONFIGURE_API_FLAG = "__nextcloudTalkConfigureApiCredentials";
1202
+ const nextcloudTalkPlugin = {
1203
+ id: "nextcloud-talk",
1204
+ meta: {
1205
+ id: "nextcloud-talk",
1206
+ label: "Nextcloud Talk",
1207
+ selectionLabel: "Nextcloud Talk (self-hosted)",
1208
+ docsPath: "/channels/nextcloud-talk",
1209
+ docsLabel: "nextcloud-talk",
1210
+ blurb: "Self-hosted chat via Nextcloud Talk webhook bots.",
1211
+ aliases: ["nc-talk", "nc"],
1212
+ order: 65,
1213
+ quickstartAllowFrom: true
1214
+ },
1215
+ setupWizard: {
1216
+ channel,
1217
+ stepOrder: "text-first",
1218
+ status: {
1219
+ configuredLabel: "configured",
1220
+ unconfiguredLabel: "needs setup",
1221
+ configuredHint: "configured",
1222
+ unconfiguredHint: "self-hosted chat",
1223
+ configuredScore: 1,
1224
+ unconfiguredScore: 5,
1225
+ resolveConfigured: ({ cfg }) => listNextcloudTalkAccountIds(cfg).some((accountId) => {
1226
+ const account = resolveNextcloudTalkAccount({
1227
+ cfg,
1228
+ accountId
1229
+ });
1230
+ return Boolean(account.secret && account.baseUrl);
1231
+ })
1232
+ },
1233
+ introNote: {
1234
+ title: "Nextcloud Talk bot setup",
1235
+ lines: [
1236
+ "1) SSH into your Nextcloud server",
1237
+ "2) Run: ./occ talk:bot:install \"MoldClaw\" \"<shared-secret>\" \"<webhook-url>\" --feature reaction",
1238
+ "3) Copy the shared secret you used in the command",
1239
+ "4) Enable the bot in your Nextcloud Talk room settings",
1240
+ "Tip: you can also set NEXTCLOUD_TALK_BOT_SECRET in your env.",
1241
+ `Docs: ${formatDocsLink("/channels/nextcloud-talk", "channels/nextcloud-talk")}`
1242
+ ],
1243
+ shouldShow: ({ cfg, accountId }) => {
1244
+ const account = resolveNextcloudTalkAccount({
1245
+ cfg,
1246
+ accountId
1247
+ });
1248
+ return !account.secret || !account.baseUrl;
1249
+ }
1250
+ },
1251
+ prepare: async ({ cfg, accountId, credentialValues, prompter }) => {
1252
+ const resolvedAccount = resolveNextcloudTalkAccount({
1253
+ cfg,
1254
+ accountId
1255
+ });
1256
+ const hasApiCredentials = Boolean(resolvedAccount.config.apiUser?.trim() && (hasConfiguredSecretInput(resolvedAccount.config.apiPassword) || resolvedAccount.config.apiPasswordFile));
1257
+ if (!await prompter.confirm({
1258
+ message: "Configure optional Nextcloud Talk API credentials for room lookups?",
1259
+ initialValue: hasApiCredentials
1260
+ })) return;
1261
+ return { credentialValues: {
1262
+ ...credentialValues,
1263
+ [CONFIGURE_API_FLAG]: "1"
1264
+ } };
1265
+ },
1266
+ credentials: [{
1267
+ inputKey: "token",
1268
+ providerHint: channel,
1269
+ credentialLabel: "bot secret",
1270
+ preferredEnvVar: "NEXTCLOUD_TALK_BOT_SECRET",
1271
+ envPrompt: "NEXTCLOUD_TALK_BOT_SECRET detected. Use env var?",
1272
+ keepPrompt: "Nextcloud Talk bot secret already configured. Keep it?",
1273
+ inputPrompt: "Enter Nextcloud Talk bot secret",
1274
+ allowEnv: ({ accountId }) => accountId === DEFAULT_ACCOUNT_ID,
1275
+ inspect: ({ cfg, accountId }) => {
1276
+ const resolvedAccount = resolveNextcloudTalkAccount({
1277
+ cfg,
1278
+ accountId
1279
+ });
1280
+ return {
1281
+ accountConfigured: Boolean(resolvedAccount.secret && resolvedAccount.baseUrl),
1282
+ hasConfiguredValue: Boolean(hasConfiguredSecretInput(resolvedAccount.config.botSecret) || resolvedAccount.config.botSecretFile),
1283
+ resolvedValue: resolvedAccount.secret || void 0,
1284
+ envValue: accountId === "default" ? process.env.NEXTCLOUD_TALK_BOT_SECRET?.trim() || void 0 : void 0
1285
+ };
1286
+ },
1287
+ applyUseEnv: async (params) => {
1288
+ const resolvedAccount = resolveNextcloudTalkAccount({
1289
+ cfg: params.cfg,
1290
+ accountId: params.accountId
1291
+ });
1292
+ return setNextcloudTalkAccountConfig(clearNextcloudTalkAccountFields(params.cfg, params.accountId, ["botSecret", "botSecretFile"]), params.accountId, { baseUrl: resolvedAccount.baseUrl });
1293
+ },
1294
+ applySet: async (params) => setNextcloudTalkAccountConfig(clearNextcloudTalkAccountFields(params.cfg, params.accountId, ["botSecret", "botSecretFile"]), params.accountId, { botSecret: params.value })
1295
+ }, {
1296
+ inputKey: "password",
1297
+ providerHint: "nextcloud-talk-api",
1298
+ credentialLabel: "API password",
1299
+ preferredEnvVar: "NEXTCLOUD_TALK_API_PASSWORD",
1300
+ envPrompt: "",
1301
+ keepPrompt: "Nextcloud Talk API password already configured. Keep it?",
1302
+ inputPrompt: "Enter Nextcloud Talk API password",
1303
+ inspect: ({ cfg, accountId }) => {
1304
+ const resolvedAccount = resolveNextcloudTalkAccount({
1305
+ cfg,
1306
+ accountId
1307
+ });
1308
+ const apiUser = resolvedAccount.config.apiUser?.trim();
1309
+ const apiPasswordConfigured = Boolean(hasConfiguredSecretInput(resolvedAccount.config.apiPassword) || resolvedAccount.config.apiPasswordFile);
1310
+ return {
1311
+ accountConfigured: Boolean(apiUser && apiPasswordConfigured),
1312
+ hasConfiguredValue: apiPasswordConfigured
1313
+ };
1314
+ },
1315
+ shouldPrompt: ({ credentialValues }) => credentialValues[CONFIGURE_API_FLAG] === "1",
1316
+ applySet: async (params) => setNextcloudTalkAccountConfig(clearNextcloudTalkAccountFields(params.cfg, params.accountId, ["apiPassword", "apiPasswordFile"]), params.accountId, { apiPassword: params.value })
1317
+ }],
1318
+ textInputs: [{
1319
+ inputKey: "httpUrl",
1320
+ message: "Enter Nextcloud instance URL (e.g., https://cloud.example.com)",
1321
+ currentValue: ({ cfg, accountId }) => resolveNextcloudTalkAccount({
1322
+ cfg,
1323
+ accountId
1324
+ }).baseUrl || void 0,
1325
+ shouldPrompt: ({ currentValue }) => !currentValue,
1326
+ validate: ({ value }) => validateNextcloudTalkBaseUrl(value),
1327
+ normalizeValue: ({ value }) => normalizeNextcloudTalkBaseUrl(value),
1328
+ applySet: async (params) => setNextcloudTalkAccountConfig(params.cfg, params.accountId, { baseUrl: params.value })
1329
+ }, {
1330
+ inputKey: "userId",
1331
+ message: "Nextcloud Talk API user",
1332
+ currentValue: ({ cfg, accountId }) => resolveNextcloudTalkAccount({
1333
+ cfg,
1334
+ accountId
1335
+ }).config.apiUser?.trim() || void 0,
1336
+ shouldPrompt: ({ credentialValues }) => credentialValues[CONFIGURE_API_FLAG] === "1",
1337
+ validate: ({ value }) => value ? void 0 : "Required",
1338
+ applySet: async (params) => setNextcloudTalkAccountConfig(params.cfg, params.accountId, { apiUser: params.value })
1339
+ }],
1340
+ dmPolicy: nextcloudTalkDmPolicy,
1341
+ disable: (cfg) => setSetupChannelEnabled(cfg, channel, false)
1342
+ },
1343
+ pairing: {
1344
+ idLabel: "nextcloudUserId",
1345
+ normalizeAllowEntry: (entry) => entry.replace(/^(nextcloud-talk|nc-talk|nc):/i, "").toLowerCase(),
1346
+ notifyApproval: async ({ id }) => {
1347
+ console.log(`[nextcloud-talk] User ${id} approved for pairing`);
1348
+ }
1349
+ },
1350
+ capabilities: {
1351
+ chatTypes: ["direct", "group"],
1352
+ reactions: true,
1353
+ threads: false,
1354
+ media: true,
1355
+ nativeCommands: false,
1356
+ blockStreaming: true
1357
+ },
1358
+ reload: { configPrefixes: ["channels.nextcloud-talk"] },
1359
+ configSchema: buildChannelConfigSchema(NextcloudTalkConfigSchema),
1360
+ config: {
1361
+ listAccountIds: (cfg) => listNextcloudTalkAccountIds(cfg),
1362
+ resolveAccount: (cfg, accountId) => resolveNextcloudTalkAccount({
1363
+ cfg,
1364
+ accountId
1365
+ }),
1366
+ defaultAccountId: (cfg) => resolveDefaultNextcloudTalkAccountId(cfg),
1367
+ setAccountEnabled: ({ cfg, accountId, enabled }) => setAccountEnabledInConfigSection({
1368
+ cfg,
1369
+ sectionKey: "nextcloud-talk",
1370
+ accountId,
1371
+ enabled,
1372
+ allowTopLevel: true
1373
+ }),
1374
+ deleteAccount: ({ cfg, accountId }) => deleteAccountFromConfigSection({
1375
+ cfg,
1376
+ sectionKey: "nextcloud-talk",
1377
+ accountId,
1378
+ clearBaseFields: [
1379
+ "botSecret",
1380
+ "botSecretFile",
1381
+ "baseUrl",
1382
+ "name"
1383
+ ]
1384
+ }),
1385
+ isConfigured: (account) => Boolean(account.secret?.trim() && account.baseUrl?.trim()),
1386
+ describeAccount: (account) => ({
1387
+ accountId: account.accountId,
1388
+ name: account.name,
1389
+ enabled: account.enabled,
1390
+ configured: Boolean(account.secret?.trim() && account.baseUrl?.trim()),
1391
+ secretSource: account.secretSource,
1392
+ baseUrl: account.baseUrl ? "[set]" : "[missing]"
1393
+ }),
1394
+ resolveAllowFrom: ({ cfg, accountId }) => mapAllowFromEntries(resolveNextcloudTalkAccount({
1395
+ cfg,
1396
+ accountId
1397
+ }).config.allowFrom).map((entry) => entry.toLowerCase()),
1398
+ formatAllowFrom: ({ allowFrom }) => formatAllowFromLowercase({
1399
+ allowFrom,
1400
+ stripPrefixRe: /^(nextcloud-talk|nc-talk|nc):/i
1401
+ })
1402
+ },
1403
+ security: {
1404
+ resolveDmPolicy: ({ cfg, accountId, account }) => {
1405
+ return buildAccountScopedDmSecurityPolicy({
1406
+ cfg,
1407
+ channelKey: "nextcloud-talk",
1408
+ accountId,
1409
+ fallbackAccountId: account.accountId ?? "default",
1410
+ policy: account.config.dmPolicy,
1411
+ allowFrom: account.config.allowFrom ?? [],
1412
+ policyPathSuffix: "dmPolicy",
1413
+ normalizeEntry: (raw) => raw.replace(/^(nextcloud-talk|nc-talk|nc):/i, "").toLowerCase()
1414
+ });
1415
+ },
1416
+ collectWarnings: ({ account, cfg }) => {
1417
+ const roomAllowlistConfigured = account.config.rooms && Object.keys(account.config.rooms).length > 0;
1418
+ return collectAllowlistProviderGroupPolicyWarnings({
1419
+ cfg,
1420
+ providerConfigPresent: cfg.channels?.["nextcloud-talk"] !== void 0,
1421
+ configuredGroupPolicy: account.config.groupPolicy,
1422
+ collect: (groupPolicy) => collectOpenGroupPolicyRouteAllowlistWarnings({
1423
+ groupPolicy,
1424
+ routeAllowlistConfigured: Boolean(roomAllowlistConfigured),
1425
+ restrictSenders: {
1426
+ surface: "Nextcloud Talk rooms",
1427
+ openScope: "any member in allowed rooms",
1428
+ groupPolicyPath: "channels.nextcloud-talk.groupPolicy",
1429
+ groupAllowFromPath: "channels.nextcloud-talk.groupAllowFrom"
1430
+ },
1431
+ noRouteAllowlist: {
1432
+ surface: "Nextcloud Talk rooms",
1433
+ routeAllowlistPath: "channels.nextcloud-talk.rooms",
1434
+ routeScope: "room",
1435
+ groupPolicyPath: "channels.nextcloud-talk.groupPolicy",
1436
+ groupAllowFromPath: "channels.nextcloud-talk.groupAllowFrom"
1437
+ }
1438
+ })
1439
+ });
1440
+ }
1441
+ },
1442
+ groups: {
1443
+ resolveRequireMention: ({ cfg, accountId, groupId }) => {
1444
+ const rooms = resolveNextcloudTalkAccount({
1445
+ cfg,
1446
+ accountId
1447
+ }).config.rooms;
1448
+ if (!rooms || !groupId) return true;
1449
+ const roomConfig = rooms[groupId];
1450
+ if (roomConfig?.requireMention !== void 0) return roomConfig.requireMention;
1451
+ const wildcardConfig = rooms["*"];
1452
+ if (wildcardConfig?.requireMention !== void 0) return wildcardConfig.requireMention;
1453
+ return true;
1454
+ },
1455
+ resolveToolPolicy: resolveNextcloudTalkGroupToolPolicy
1456
+ },
1457
+ messaging: {
1458
+ normalizeTarget: normalizeNextcloudTalkMessagingTarget,
1459
+ targetResolver: {
1460
+ looksLikeId: looksLikeNextcloudTalkTargetId,
1461
+ hint: "<roomToken>"
1462
+ }
1463
+ },
1464
+ setup: nextcloudTalkSetupAdapter,
1465
+ outbound: {
1466
+ deliveryMode: "direct",
1467
+ chunker: (text, limit) => getNextcloudTalkRuntime().channel.text.chunkMarkdownText(text, limit),
1468
+ chunkerMode: "markdown",
1469
+ textChunkLimit: 4e3,
1470
+ sendText: async ({ cfg, to, text, accountId, replyToId }) => {
1471
+ return {
1472
+ channel: "nextcloud-talk",
1473
+ ...await sendMessageNextcloudTalk(to, text, {
1474
+ accountId: accountId ?? void 0,
1475
+ replyTo: replyToId ?? void 0,
1476
+ cfg
1477
+ })
1478
+ };
1479
+ },
1480
+ sendMedia: async ({ cfg, to, text, mediaUrl, accountId, replyToId }) => {
1481
+ return {
1482
+ channel: "nextcloud-talk",
1483
+ ...await sendMessageNextcloudTalk(to, mediaUrl ? `${text}\n\nAttachment: ${mediaUrl}` : text, {
1484
+ accountId: accountId ?? void 0,
1485
+ replyTo: replyToId ?? void 0,
1486
+ cfg
1487
+ })
1488
+ };
1489
+ }
1490
+ },
1491
+ status: {
1492
+ defaultRuntime: {
1493
+ accountId: DEFAULT_ACCOUNT_ID,
1494
+ running: false,
1495
+ lastStartAt: null,
1496
+ lastStopAt: null,
1497
+ lastError: null
1498
+ },
1499
+ buildChannelSummary: ({ snapshot }) => {
1500
+ const base = buildBaseChannelStatusSummary(snapshot);
1501
+ return {
1502
+ configured: base.configured,
1503
+ secretSource: snapshot.secretSource ?? "none",
1504
+ running: base.running,
1505
+ mode: "webhook",
1506
+ lastStartAt: base.lastStartAt,
1507
+ lastStopAt: base.lastStopAt,
1508
+ lastError: base.lastError
1509
+ };
1510
+ },
1511
+ buildAccountSnapshot: ({ account, runtime }) => {
1512
+ const configured = Boolean(account.secret?.trim() && account.baseUrl?.trim());
1513
+ const runtimeSnapshot = buildRuntimeAccountStatusSnapshot({ runtime });
1514
+ return {
1515
+ accountId: account.accountId,
1516
+ name: account.name,
1517
+ enabled: account.enabled,
1518
+ configured,
1519
+ secretSource: account.secretSource,
1520
+ baseUrl: account.baseUrl ? "[set]" : "[missing]",
1521
+ running: runtimeSnapshot.running,
1522
+ lastStartAt: runtimeSnapshot.lastStartAt,
1523
+ lastStopAt: runtimeSnapshot.lastStopAt,
1524
+ lastError: runtimeSnapshot.lastError,
1525
+ mode: "webhook",
1526
+ lastInboundAt: runtime?.lastInboundAt ?? null,
1527
+ lastOutboundAt: runtime?.lastOutboundAt ?? null
1528
+ };
1529
+ }
1530
+ },
1531
+ gateway: {
1532
+ startAccount: async (ctx) => {
1533
+ const account = ctx.account;
1534
+ if (!account.secret || !account.baseUrl) throw new Error(`Nextcloud Talk not configured for account "${account.accountId}" (missing secret or baseUrl)`);
1535
+ ctx.log?.info(`[${account.accountId}] starting Nextcloud Talk webhook server`);
1536
+ const statusSink = createAccountStatusSink({
1537
+ accountId: ctx.accountId,
1538
+ setStatus: ctx.setStatus
1539
+ });
1540
+ await runStoppablePassiveMonitor({
1541
+ abortSignal: ctx.abortSignal,
1542
+ start: async () => await monitorNextcloudTalkProvider({
1543
+ accountId: account.accountId,
1544
+ config: ctx.cfg,
1545
+ runtime: ctx.runtime,
1546
+ abortSignal: ctx.abortSignal,
1547
+ statusSink
1548
+ })
1549
+ });
1550
+ },
1551
+ logoutAccount: async ({ accountId, cfg }) => {
1552
+ const nextCfg = { ...cfg };
1553
+ const nextSection = cfg.channels?.["nextcloud-talk"] ? { ...cfg.channels["nextcloud-talk"] } : void 0;
1554
+ let cleared = false;
1555
+ let changed = false;
1556
+ if (nextSection) {
1557
+ if (accountId === "default" && nextSection.botSecret) {
1558
+ delete nextSection.botSecret;
1559
+ cleared = true;
1560
+ changed = true;
1561
+ }
1562
+ const accountCleanup = clearAccountEntryFields({
1563
+ accounts: nextSection.accounts,
1564
+ accountId,
1565
+ fields: ["botSecret"]
1566
+ });
1567
+ if (accountCleanup.changed) {
1568
+ changed = true;
1569
+ if (accountCleanup.cleared) cleared = true;
1570
+ if (accountCleanup.nextAccounts) nextSection.accounts = accountCleanup.nextAccounts;
1571
+ else delete nextSection.accounts;
1572
+ }
1573
+ }
1574
+ if (changed) if (nextSection && Object.keys(nextSection).length > 0) nextCfg.channels = {
1575
+ ...nextCfg.channels,
1576
+ "nextcloud-talk": nextSection
1577
+ };
1578
+ else {
1579
+ const nextChannels = { ...nextCfg.channels };
1580
+ delete nextChannels["nextcloud-talk"];
1581
+ if (Object.keys(nextChannels).length > 0) nextCfg.channels = nextChannels;
1582
+ else delete nextCfg.channels;
1583
+ }
1584
+ const loggedOut = resolveNextcloudTalkAccount({
1585
+ cfg: changed ? nextCfg : cfg,
1586
+ accountId
1587
+ }).secretSource === "none";
1588
+ if (changed) await getNextcloudTalkRuntime().config.writeConfigFile(nextCfg);
1589
+ return {
1590
+ cleared,
1591
+ envSecret: Boolean(process.env.NEXTCLOUD_TALK_BOT_SECRET?.trim()),
1592
+ loggedOut
1593
+ };
1594
+ }
1595
+ }
1596
+ };
1597
+ //#endregion
1598
+ export { setNextcloudTalkRuntime as n, nextcloudTalkPlugin as t };