@songsid/agend 2.2.1 → 2.2.5

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 (447) hide show
  1. package/dist/agent-cli-instructions.md +5 -2
  2. package/dist/agent-cli.js +284 -2
  3. package/dist/agent-cli.js.map +1 -1
  4. package/dist/agent-endpoint.d.ts +2 -0
  5. package/dist/agent-endpoint.js +29 -0
  6. package/dist/agent-endpoint.js.map +1 -1
  7. package/dist/agent-file-read.d.ts +38 -0
  8. package/dist/agent-file-read.js +317 -0
  9. package/dist/agent-file-read.js.map +1 -0
  10. package/dist/agent-whats-new.d.ts +11 -0
  11. package/dist/agent-whats-new.js +34 -2
  12. package/dist/agent-whats-new.js.map +1 -1
  13. package/dist/atomic-write.js +9 -1
  14. package/dist/atomic-write.js.map +1 -1
  15. package/dist/auth-api.d.ts +30 -1
  16. package/dist/auth-api.js +61 -12
  17. package/dist/auth-api.js.map +1 -1
  18. package/dist/authority/authority-state.d.ts +38 -0
  19. package/dist/authority/authority-state.js +114 -0
  20. package/dist/authority/authority-state.js.map +1 -0
  21. package/dist/authority/session-authorizations.d.ts +43 -0
  22. package/dist/authority/session-authorizations.js +102 -0
  23. package/dist/authority/session-authorizations.js.map +1 -0
  24. package/dist/authority/web-authority.d.ts +120 -0
  25. package/dist/authority/web-authority.js +157 -0
  26. package/dist/authority/web-authority.js.map +1 -0
  27. package/dist/backend/antigravity.js +3 -3
  28. package/dist/backend/antigravity.js.map +1 -1
  29. package/dist/backend/claude-code.d.ts +2 -2
  30. package/dist/backend/claude-code.js +10 -5
  31. package/dist/backend/claude-code.js.map +1 -1
  32. package/dist/backend/launch-effort.js +1 -1
  33. package/dist/backend/launch-effort.js.map +1 -1
  34. package/dist/backend/muse.js +10 -2
  35. package/dist/backend/muse.js.map +1 -1
  36. package/dist/backend/types.d.ts +14 -0
  37. package/dist/backend/types.js +25 -0
  38. package/dist/backend/types.js.map +1 -1
  39. package/dist/backend-availability.d.ts +120 -0
  40. package/dist/backend-availability.js +396 -0
  41. package/dist/backend-availability.js.map +1 -0
  42. package/dist/backend-command.d.ts +21 -3
  43. package/dist/backend-command.js +23 -4
  44. package/dist/backend-command.js.map +1 -1
  45. package/dist/bundled-skills.d.ts +14 -0
  46. package/dist/bundled-skills.js +29 -0
  47. package/dist/bundled-skills.js.map +1 -0
  48. package/dist/cache-analysis.d.ts +47 -1
  49. package/dist/cache-analysis.js +68 -8
  50. package/dist/cache-analysis.js.map +1 -1
  51. package/dist/cache-ledger.d.ts +16 -3
  52. package/dist/cache-ledger.js +33 -13
  53. package/dist/cache-ledger.js.map +1 -1
  54. package/dist/cache-report-tool.d.ts +17 -0
  55. package/dist/cache-report-tool.js +40 -0
  56. package/dist/cache-report-tool.js.map +1 -0
  57. package/dist/cache-service.d.ts +70 -3
  58. package/dist/cache-service.js +178 -17
  59. package/dist/cache-service.js.map +1 -1
  60. package/dist/channel/adapters/discord-client-retirement.d.ts +5 -0
  61. package/dist/channel/adapters/discord-client-retirement.js +57 -0
  62. package/dist/channel/adapters/discord-client-retirement.js.map +1 -0
  63. package/dist/channel/adapters/discord.d.ts +11 -0
  64. package/dist/channel/adapters/discord.js +66 -6
  65. package/dist/channel/adapters/discord.js.map +1 -1
  66. package/dist/channel/adapters/telegram.d.ts +8 -1
  67. package/dist/channel/adapters/telegram.js +74 -4
  68. package/dist/channel/adapters/telegram.js.map +1 -1
  69. package/dist/channel/mcp-tools.js +48 -2
  70. package/dist/channel/mcp-tools.js.map +1 -1
  71. package/dist/channel/types.d.ts +21 -0
  72. package/dist/classic-channel-manager.d.ts +10 -5
  73. package/dist/classic-channel-manager.js +12 -9
  74. package/dist/classic-channel-manager.js.map +1 -1
  75. package/dist/cli.js +142 -110
  76. package/dist/cli.js.map +1 -1
  77. package/dist/config-validator.js +119 -4
  78. package/dist/config-validator.js.map +1 -1
  79. package/dist/daemon.d.ts +8 -0
  80. package/dist/daemon.js +298 -22
  81. package/dist/daemon.js.map +1 -1
  82. package/dist/decision-list.d.ts +25 -0
  83. package/dist/decision-list.js +30 -0
  84. package/dist/decision-list.js.map +1 -0
  85. package/dist/delivery-outbox.d.ts +10 -0
  86. package/dist/delivery-outbox.js +12 -1
  87. package/dist/delivery-outbox.js.map +1 -1
  88. package/dist/fleet-context.d.ts +15 -0
  89. package/dist/fleet-manager.d.ts +514 -12
  90. package/dist/fleet-manager.js +1885 -163
  91. package/dist/fleet-manager.js.map +1 -1
  92. package/dist/fleet-process-handlers.d.ts +18 -0
  93. package/dist/fleet-process-handlers.js +69 -0
  94. package/dist/fleet-process-handlers.js.map +1 -0
  95. package/dist/fleet-traffic.d.ts +74 -0
  96. package/dist/fleet-traffic.js +196 -0
  97. package/dist/fleet-traffic.js.map +1 -0
  98. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +20 -5
  99. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +6 -1
  100. package/dist/general-knowledge/skills/multi-channel/SKILL.md +3 -2
  101. package/dist/general-knowledge/skills/persona-emoji/SKILL.md +1 -1
  102. package/dist/general-knowledge/skills/web-appearance/SKILL.md +492 -0
  103. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +482 -0
  104. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
  105. package/dist/human-delivery-receipts.d.ts +24 -1
  106. package/dist/human-delivery-receipts.js +64 -11
  107. package/dist/human-delivery-receipts.js.map +1 -1
  108. package/dist/instance-avatar.js +3 -0
  109. package/dist/instance-avatar.js.map +1 -1
  110. package/dist/instance-config-impact.js +6 -1
  111. package/dist/instance-config-impact.js.map +1 -1
  112. package/dist/instance-lifecycle.d.ts +2 -0
  113. package/dist/instance-lifecycle.js +20 -10
  114. package/dist/instance-lifecycle.js.map +1 -1
  115. package/dist/instance-names.d.ts +4 -0
  116. package/dist/instance-names.js +12 -0
  117. package/dist/instance-names.js.map +1 -0
  118. package/dist/instructions.d.ts +12 -1
  119. package/dist/instructions.js +13 -2
  120. package/dist/instructions.js.map +1 -1
  121. package/dist/locale.js +100 -8
  122. package/dist/locale.js.map +1 -1
  123. package/dist/ls-attach-resolve.d.ts +95 -0
  124. package/dist/ls-attach-resolve.js +174 -0
  125. package/dist/ls-attach-resolve.js.map +1 -0
  126. package/dist/memory-hogs.d.ts +27 -0
  127. package/dist/memory-hogs.js +124 -0
  128. package/dist/memory-hogs.js.map +1 -0
  129. package/dist/needs-you-hub.d.ts +4 -0
  130. package/dist/needs-you-hub.js +31 -6
  131. package/dist/needs-you-hub.js.map +1 -1
  132. package/dist/needs-you.d.ts +1 -13
  133. package/dist/needs-you.js +3 -37
  134. package/dist/needs-you.js.map +1 -1
  135. package/dist/outbound-handlers.d.ts +15 -0
  136. package/dist/outbound-handlers.js +152 -11
  137. package/dist/outbound-handlers.js.map +1 -1
  138. package/dist/outbound-schemas.d.ts +228 -4
  139. package/dist/outbound-schemas.js +147 -1
  140. package/dist/outbound-schemas.js.map +1 -1
  141. package/dist/public-web-gateway.js +21 -1
  142. package/dist/public-web-gateway.js.map +1 -1
  143. package/dist/public-web-link.d.ts +9 -0
  144. package/dist/public-web-link.js +8 -0
  145. package/dist/public-web-link.js.map +1 -1
  146. package/dist/quickstart-api.d.ts +10 -1
  147. package/dist/quickstart-api.js +12 -4
  148. package/dist/quickstart-api.js.map +1 -1
  149. package/dist/reply-buttons-controller.d.ts +4 -0
  150. package/dist/reply-buttons-controller.js +2 -2
  151. package/dist/reply-buttons-controller.js.map +1 -1
  152. package/dist/repo-worktree-guard.d.ts +36 -0
  153. package/dist/repo-worktree-guard.js +143 -0
  154. package/dist/repo-worktree-guard.js.map +1 -0
  155. package/dist/restart-progress.d.ts +65 -1
  156. package/dist/restart-progress.js +236 -10
  157. package/dist/restart-progress.js.map +1 -1
  158. package/dist/rollout-index.d.ts +5 -0
  159. package/dist/rollout-index.js +26 -5
  160. package/dist/rollout-index.js.map +1 -1
  161. package/dist/scheduler/scheduler.d.ts +70 -1
  162. package/dist/scheduler/scheduler.js +256 -17
  163. package/dist/scheduler/scheduler.js.map +1 -1
  164. package/dist/service-installer.d.ts +2 -1
  165. package/dist/service-installer.js +18 -3
  166. package/dist/service-installer.js.map +1 -1
  167. package/dist/settings-api.d.ts +23 -0
  168. package/dist/settings-api.js +233 -2
  169. package/dist/settings-api.js.map +1 -1
  170. package/dist/settings-change.js +112 -0
  171. package/dist/settings-change.js.map +1 -1
  172. package/dist/settings-effect.js +32 -2
  173. package/dist/settings-effect.js.map +1 -1
  174. package/dist/settings-http-confirmation.js +5 -0
  175. package/dist/settings-http-confirmation.js.map +1 -1
  176. package/dist/tmux-manager.d.ts +5 -0
  177. package/dist/tmux-manager.js +16 -0
  178. package/dist/tmux-manager.js.map +1 -1
  179. package/dist/tool-permissions.d.ts +4 -6
  180. package/dist/tool-permissions.js +100 -2
  181. package/dist/tool-permissions.js.map +1 -1
  182. package/dist/topic-commands.d.ts +17 -7
  183. package/dist/topic-commands.js +39 -21
  184. package/dist/topic-commands.js.map +1 -1
  185. package/dist/topic-link.d.ts +128 -0
  186. package/dist/topic-link.js +269 -0
  187. package/dist/topic-link.js.map +1 -0
  188. package/dist/types.d.ts +61 -1
  189. package/dist/ui/app-effects.js +245 -0
  190. package/dist/ui/chat-ambient.js +307 -0
  191. package/dist/ui/chat-effect-posters.js +42 -0
  192. package/dist/ui/chat-effects.js +160 -0
  193. package/dist/ui/chat-live-replies.js +58 -0
  194. package/dist/ui/chat-render.js +25 -7
  195. package/dist/ui/chat-store.js +41 -13
  196. package/dist/ui/chat-strings.js +86 -2
  197. package/dist/ui/chat-thread.js +204 -37
  198. package/dist/ui/chat-tour.js +1 -1
  199. package/dist/ui/effect-trial-controller.js +124 -0
  200. package/dist/ui/effect-trial-offer.js +31 -0
  201. package/dist/ui/effect-trial-panel.js +40 -0
  202. package/dist/ui/fleet-cache.js +23 -1
  203. package/dist/ui/fleet-canvas-layout.js +111 -0
  204. package/dist/ui/fleet-canvas.js +525 -0
  205. package/dist/ui/fleet-org.js +27 -12
  206. package/dist/ui/fleet-traffic.js +343 -0
  207. package/dist/ui/fleet-usage.js +401 -0
  208. package/dist/ui/image-lightbox.js +1 -1
  209. package/dist/ui/panel-chat.js +252 -58
  210. package/dist/ui/panel-details.js +20 -6
  211. package/dist/ui/panel-fleet.js +45 -19
  212. package/dist/ui/panel-log.js +6 -6
  213. package/dist/ui/panel-needs.js +3 -3
  214. package/dist/ui/panel-settings.js +58 -13
  215. package/dist/ui/preview-panel.js +25 -9
  216. package/dist/ui/preview.js +3 -2
  217. package/dist/ui/settings-appearance.js +349 -0
  218. package/dist/ui/settings-catalog.js +92 -0
  219. package/dist/ui/settings-dialogs.js +40 -12
  220. package/dist/ui/settings-effects.js +202 -0
  221. package/dist/ui/settings-guests.js +117 -0
  222. package/dist/ui/settings-learn.js +25 -0
  223. package/dist/ui/settings-model.js +15 -6
  224. package/dist/ui/settings-mods.js +271 -0
  225. package/dist/ui/settings-owner-effects.js +80 -0
  226. package/dist/ui/settings-strings.js +335 -10
  227. package/dist/ui/settings-web-authority.js +91 -0
  228. package/dist/ui/shared/agend-auth.js +28 -4
  229. package/dist/ui/shared/agent-widget.js +248 -0
  230. package/dist/ui/shared/app-i18n.js +6 -2
  231. package/dist/ui/shared/app-prefs.js +34 -13
  232. package/dist/ui/shared/app-route.js +42 -2
  233. package/dist/ui/shared/app-session.js +3 -1
  234. package/dist/ui/shared/app-shell.js +119 -41
  235. package/dist/ui/shared/app-store.js +28 -1
  236. package/dist/ui/shared/app-stream.js +14 -7
  237. package/dist/ui/shared/app-themes.js +206 -0
  238. package/dist/ui/shared/app.css +566 -5
  239. package/dist/ui/shared/app.js +23 -10
  240. package/dist/ui/shared/card-strings.js +32 -0
  241. package/dist/ui/shared/effect-app-runtime.js +297 -0
  242. package/dist/ui/shared/effect-baseline.js +64 -0
  243. package/dist/ui/shared/effect-chat-runtime.js +167 -0
  244. package/dist/ui/shared/effect-cursor.js +125 -0
  245. package/dist/ui/shared/effect-frame.js +146 -0
  246. package/dist/ui/shared/effect-geometry.js +137 -0
  247. package/dist/ui/shared/effect-host-style.js +10 -0
  248. package/dist/ui/shared/effect-owner-regions.js +74 -0
  249. package/dist/ui/shared/effect-owner-source.js +122 -0
  250. package/dist/ui/shared/effect-policy.js +151 -0
  251. package/dist/ui/shared/effect-poster-reader.js +98 -0
  252. package/dist/ui/shared/effect-posters.js +117 -0
  253. package/dist/ui/shared/effect-profiler.js +184 -0
  254. package/dist/ui/shared/effect-profiles.js +65 -0
  255. package/dist/ui/shared/effect-registry.js +543 -0
  256. package/dist/ui/shared/effect-runtime-loader.js +234 -0
  257. package/dist/ui/shared/effect-safety.js +153 -0
  258. package/dist/ui/shared/effect-stock-snapshot.js +43 -0
  259. package/dist/ui/shared/effect-stock-trust.js +217 -0
  260. package/dist/ui/shared/effect-trial-shadow.js +62 -0
  261. package/dist/ui/shared/effect-trial-source.js +103 -0
  262. package/dist/ui/shared/effect-trial-stage.js +170 -0
  263. package/dist/ui/shared/effect-trial.css +40 -0
  264. package/dist/ui/shared/fx-motion.js +67 -0
  265. package/dist/ui/shared/header-tools.js +1 -1
  266. package/dist/ui/shared/identity-card.js +273 -0
  267. package/dist/ui/shared/identity-color.js +261 -0
  268. package/dist/ui/shared/instance-nav.js +215 -41
  269. package/dist/ui/shared/owner-css.js +250 -0
  270. package/dist/ui/shared/owner-effect-prefs.js +117 -0
  271. package/dist/ui/shared/panel-view.js +103 -10
  272. package/dist/ui/shared/signin.js +2 -0
  273. package/dist/ui/shared/tokens.css +9 -3
  274. package/dist/ui/shared/ui-dialog.js +1 -1
  275. package/dist/ui/shared/ui-icons.js +3 -0
  276. package/dist/ui/shared/ui-menu.js +1 -1
  277. package/dist/ui/shared/ui-toast.js +1 -1
  278. package/dist/ui/shared/usage-dialog.js +22 -2
  279. package/dist/ui/shared/view-strings.js +98 -2
  280. package/dist/ui/shared/web-authorize.js +151 -0
  281. package/dist/ui/signin.html +1 -0
  282. package/dist/ui/web-terminal/terminal.css +4 -4
  283. package/dist/usage/providers.d.ts +28 -0
  284. package/dist/usage/providers.js +126 -36
  285. package/dist/usage/providers.js.map +1 -1
  286. package/dist/usage-report.d.ts +158 -0
  287. package/dist/usage-report.js +226 -0
  288. package/dist/usage-report.js.map +1 -0
  289. package/dist/usage-rollup.d.ts +51 -0
  290. package/dist/usage-rollup.js +168 -0
  291. package/dist/usage-rollup.js.map +1 -0
  292. package/dist/view-api.d.ts +68 -0
  293. package/dist/view-api.js +249 -8
  294. package/dist/view-api.js.map +1 -1
  295. package/dist/web-ambient.d.ts +72 -0
  296. package/dist/web-ambient.js +161 -0
  297. package/dist/web-ambient.js.map +1 -0
  298. package/dist/web-api.d.ts +117 -7
  299. package/dist/web-api.js +1283 -70
  300. package/dist/web-api.js.map +1 -1
  301. package/dist/web-appearance-limits.d.ts +82 -0
  302. package/dist/web-appearance-limits.js +83 -0
  303. package/dist/web-appearance-limits.js.map +1 -0
  304. package/dist/web-appearance-policy.d.ts +64 -0
  305. package/dist/web-appearance-policy.js +87 -0
  306. package/dist/web-appearance-policy.js.map +1 -0
  307. package/dist/web-appearance-tools.d.ts +53 -0
  308. package/dist/web-appearance-tools.js +124 -0
  309. package/dist/web-appearance-tools.js.map +1 -0
  310. package/dist/web-appearance-view.d.ts +124 -0
  311. package/dist/web-appearance-view.js +278 -0
  312. package/dist/web-appearance-view.js.map +1 -0
  313. package/dist/web-appearance.d.ts +93 -0
  314. package/dist/web-appearance.js +373 -0
  315. package/dist/web-appearance.js.map +1 -0
  316. package/dist/web-asset-parts.d.ts +93 -0
  317. package/dist/web-asset-parts.js +133 -0
  318. package/dist/web-asset-parts.js.map +1 -0
  319. package/dist/web-auth.js +20 -2
  320. package/dist/web-auth.js.map +1 -1
  321. package/dist/web-card.d.ts +110 -0
  322. package/dist/web-card.js +266 -0
  323. package/dist/web-card.js.map +1 -0
  324. package/dist/web-channel-echo.d.ts +7 -1
  325. package/dist/web-channel-echo.js +6 -2
  326. package/dist/web-channel-echo.js.map +1 -1
  327. package/dist/web-chat-history.d.ts +63 -0
  328. package/dist/web-chat-history.js +109 -6
  329. package/dist/web-chat-history.js.map +1 -1
  330. package/dist/web-commands.d.ts +1 -0
  331. package/dist/web-effect-bootstrap.d.ts +12 -0
  332. package/dist/web-effect-bootstrap.js +49 -0
  333. package/dist/web-effect-bootstrap.js.map +1 -0
  334. package/dist/web-effect-bundle.d.ts +28 -0
  335. package/dist/web-effect-bundle.js +171 -0
  336. package/dist/web-effect-bundle.js.map +1 -0
  337. package/dist/web-effect-canonical.d.ts +8 -0
  338. package/dist/web-effect-canonical.js +27 -0
  339. package/dist/web-effect-canonical.js.map +1 -0
  340. package/dist/web-effect-library.d.ts +114 -0
  341. package/dist/web-effect-library.js +530 -0
  342. package/dist/web-effect-library.js.map +1 -0
  343. package/dist/web-effect-playback.d.ts +30 -0
  344. package/dist/web-effect-playback.js +71 -0
  345. package/dist/web-effect-playback.js.map +1 -0
  346. package/dist/web-effect-poster.d.ts +8 -0
  347. package/dist/web-effect-poster.js +52 -0
  348. package/dist/web-effect-poster.js.map +1 -0
  349. package/dist/web-effect-profiles.d.ts +118 -0
  350. package/dist/web-effect-profiles.js +180 -0
  351. package/dist/web-effect-profiles.js.map +1 -0
  352. package/dist/web-effect-service.d.ts +93 -0
  353. package/dist/web-effect-service.js +335 -0
  354. package/dist/web-effect-service.js.map +1 -0
  355. package/dist/web-effect-tools.d.ts +48 -0
  356. package/dist/web-effect-tools.js +129 -0
  357. package/dist/web-effect-tools.js.map +1 -0
  358. package/dist/web-effect-trials.d.ts +86 -0
  359. package/dist/web-effect-trials.js +204 -0
  360. package/dist/web-effect-trials.js.map +1 -0
  361. package/dist/web-effect-upload.d.ts +27 -0
  362. package/dist/web-effect-upload.js +185 -0
  363. package/dist/web-effect-upload.js.map +1 -0
  364. package/dist/web-effect-worker.d.ts +8 -0
  365. package/dist/web-effect-worker.js +170 -0
  366. package/dist/web-effect-worker.js.map +1 -0
  367. package/dist/web-effect.d.ts +103 -0
  368. package/dist/web-effect.js +153 -0
  369. package/dist/web-effect.js.map +1 -0
  370. package/dist/web-guest-access.d.ts +125 -0
  371. package/dist/web-guest-access.js +234 -0
  372. package/dist/web-guest-access.js.map +1 -0
  373. package/dist/web-guest-rooms.d.ts +82 -0
  374. package/dist/web-guest-rooms.js +135 -0
  375. package/dist/web-guest-rooms.js.map +1 -0
  376. package/dist/web-identity-color.d.ts +87 -0
  377. package/dist/web-identity-color.js +209 -0
  378. package/dist/web-identity-color.js.map +1 -0
  379. package/dist/web-identity-palette.d.ts +113 -0
  380. package/dist/web-identity-palette.js +84 -0
  381. package/dist/web-identity-palette.js.map +1 -0
  382. package/dist/web-image-meta.d.ts +38 -0
  383. package/dist/web-image-meta.js +262 -0
  384. package/dist/web-image-meta.js.map +1 -0
  385. package/dist/web-login.d.ts +47 -0
  386. package/dist/web-login.js +115 -0
  387. package/dist/web-login.js.map +1 -1
  388. package/dist/web-mod-agent.d.ts +50 -0
  389. package/dist/web-mod-agent.js +207 -0
  390. package/dist/web-mod-agent.js.map +1 -0
  391. package/dist/web-mod-bundle.d.ts +157 -0
  392. package/dist/web-mod-bundle.js +529 -0
  393. package/dist/web-mod-bundle.js.map +1 -0
  394. package/dist/web-mod-export.d.ts +68 -0
  395. package/dist/web-mod-export.js +100 -0
  396. package/dist/web-mod-export.js.map +1 -0
  397. package/dist/web-mod-store.d.ts +289 -0
  398. package/dist/web-mod-store.js +638 -0
  399. package/dist/web-mod-store.js.map +1 -0
  400. package/dist/web-org.d.ts +3 -3
  401. package/dist/web-org.js +11 -17
  402. package/dist/web-org.js.map +1 -1
  403. package/dist/web-owner-css-store.d.ts +222 -0
  404. package/dist/web-owner-css-store.js +440 -0
  405. package/dist/web-owner-css-store.js.map +1 -0
  406. package/dist/web-owner-css.d.ts +58 -0
  407. package/dist/web-owner-css.js +552 -0
  408. package/dist/web-owner-css.js.map +1 -0
  409. package/dist/web-prefs.d.ts +62 -0
  410. package/dist/web-prefs.js +232 -36
  411. package/dist/web-prefs.js.map +1 -1
  412. package/dist/web-preview.d.ts +15 -3
  413. package/dist/web-preview.js +28 -9
  414. package/dist/web-preview.js.map +1 -1
  415. package/dist/web-returning-device.d.ts +41 -0
  416. package/dist/web-returning-device.js +57 -5
  417. package/dist/web-returning-device.js.map +1 -1
  418. package/dist/web-session-authorization.d.ts +132 -0
  419. package/dist/web-session-authorization.js +193 -0
  420. package/dist/web-session-authorization.js.map +1 -0
  421. package/dist/web-session.d.ts +70 -10
  422. package/dist/web-session.js +137 -22
  423. package/dist/web-session.js.map +1 -1
  424. package/dist/web-settings-patch.d.ts +67 -2
  425. package/dist/web-settings-patch.js +196 -1
  426. package/dist/web-settings-patch.js.map +1 -1
  427. package/dist/web-settings-tools.d.ts +89 -0
  428. package/dist/web-settings-tools.js +273 -0
  429. package/dist/web-settings-tools.js.map +1 -0
  430. package/dist/web-shell-routes.d.ts +2 -2
  431. package/dist/web-shell-routes.js +2 -2
  432. package/dist/web-shell-routes.js.map +1 -1
  433. package/dist/web-theme-store.d.ts +257 -0
  434. package/dist/web-theme-store.js +627 -0
  435. package/dist/web-theme-store.js.map +1 -0
  436. package/dist/web-theme.d.ts +123 -0
  437. package/dist/web-theme.js +416 -0
  438. package/dist/web-theme.js.map +1 -0
  439. package/dist/web-upload.d.ts +13 -0
  440. package/dist/web-upload.js +39 -3
  441. package/dist/web-upload.js.map +1 -1
  442. package/dist/web-widget.d.ts +72 -0
  443. package/dist/web-widget.js +245 -0
  444. package/dist/web-widget.js.map +1 -0
  445. package/dist/workflow-templates/default.md +1 -1
  446. package/package.json +1 -1
  447. package/templates/systemd.service.ejs +8 -0
@@ -0,0 +1,57 @@
1
+ const retirements = new WeakMap();
2
+ const destroyers = new WeakMap();
3
+ /** Client.login() also calls this.destroy() internally when gateway startup fails. */
4
+ export function protectDiscordClientRetirement(client, report) {
5
+ if (destroyers.has(client))
6
+ return;
7
+ destroyers.set(client, client.destroy.bind(client));
8
+ client.destroy = () => retireDiscordClient(client, report);
9
+ }
10
+ /** Contain a retired gateway's errors until its underlying socket actually closes. */
11
+ export function retireDiscordClient(client, report) {
12
+ const pending = retirements.get(client);
13
+ if (pending)
14
+ return pending;
15
+ // discord.js 14 / @discordjs/ws 1.2.3 destroy() clears connection.onerror,
16
+ // but leaves CONNECTING sockets and their ws handshake timers running. Their
17
+ // later timeout then emits an unhandled EventEmitter error in the fleet.
18
+ // These are deliberately scoped private internals of the default in-process
19
+ // strategy; a Client without a gateway (including before login) has no sockets.
20
+ const strategy = client.ws?._ws?.strategy;
21
+ // A pending GET gateway/bot can resume Client.login after destroy has finished.
22
+ // Fence the strategy permanently before our first await: spawning/connecting
23
+ // after retirement would create sockets outside the snapshot below. A spawn
24
+ // already awaiting gateway info may still finish, but cannot connect them.
25
+ if (strategy) {
26
+ strategy.spawn = async () => { };
27
+ strategy.connect = async () => { };
28
+ }
29
+ const shards = strategy?.shards;
30
+ for (const shard of shards?.values() ?? []) {
31
+ // A HELLO timeout can already have scheduled native recovery in 1.2.3's
32
+ // 500ms backoff. A retired shard must never open another socket after the
33
+ // manager has forgotten it. This instance is never reused.
34
+ if (typeof shard.internalConnect === "function")
35
+ shard.internalConnect = async () => { };
36
+ }
37
+ const sockets = [...(shards?.values() ?? [])].flatMap(shard => shard.connection ? [shard.connection] : []);
38
+ for (const socket of sockets) {
39
+ socket.on("error", report);
40
+ socket.once("close", () => socket.removeListener("error", report));
41
+ }
42
+ const retirement = (async () => {
43
+ try {
44
+ await (destroyers.get(client) ?? client.destroy.bind(client))();
45
+ }
46
+ finally {
47
+ // Destroy first: it disconnects shard callbacks, so terminating a pending
48
+ // handshake cannot start the retired shard's native reconnect loop.
49
+ for (const socket of sockets)
50
+ if (socket.readyState === 0)
51
+ socket.terminate();
52
+ }
53
+ })();
54
+ retirements.set(client, retirement);
55
+ return retirement;
56
+ }
57
+ //# sourceMappingURL=discord-client-retirement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-client-retirement.js","sourceRoot":"","sources":["../../../src/channel/adapters/discord-client-retirement.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,GAAG,IAAI,OAAO,EAAyB,CAAC;AACzD,MAAM,UAAU,GAAG,IAAI,OAAO,EAAyB,CAAC;AAExD,sFAAsF;AACtF,MAAM,UAAU,8BAA8B,CAAC,MAAc,EAAE,MAA8B;IAC3F,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IACnC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,MAA8B;IAChF,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,2EAA2E;IAC3E,6EAA6E;IAC7E,yEAAyE;IACzE,4EAA4E;IAC5E,gFAAgF;IAChF,MAAM,QAAQ,GAAI,MAAM,CAAC,EAMvB,EAAE,GAAG,EAAE,QAAQ,CAAC;IAClB,gFAAgF;IAChF,6EAA6E;IAC7E,4EAA4E;IAC5E,2EAA2E;IAC3E,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;QAChC,QAAQ,CAAC,OAAO,GAAG,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAC3C,wEAAwE;QACxE,0EAA0E;QAC1E,2DAA2D;QAC3D,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,UAAU;YAAE,KAAK,CAAC,eAAe,GAAG,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3G,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAClE,CAAC;gBAAS,CAAC;YACT,0EAA0E;YAC1E,oEAAoE;YACpE,KAAK,MAAM,MAAM,IAAI,OAAO;gBAAE,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC;oBAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAChF,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IACL,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpC,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -142,6 +142,8 @@ export declare class DiscordAdapter extends EventEmitter implements ChannelAdapt
142
142
  private emitFromClient;
143
143
  private emitHealthChanged;
144
144
  private loginFreshClient;
145
+ private retireClient;
146
+ private reportRetiredSocketError;
145
147
  /** Rebuild just this bot's gateway Client. Calls coalesce into one generation. */
146
148
  reconnectGateway(reason: string): Promise<void>;
147
149
  private readyClient;
@@ -199,6 +201,15 @@ export declare class DiscordAdapter extends EventEmitter implements ChannelAdapt
199
201
  r: Record<string, string>;
200
202
  c: Record<string, string>;
201
203
  };
204
+ /** #1990: whether `userId` is in the guild now (one member read; an unknown member or any error rejects). */
205
+ isGroupMember(groupId: string, userId: string): Promise<boolean>;
206
+ /**
207
+ * #1920 §3.2: whether a user can read this room as on Discord — a member of the channel's guild (read from Discord,
208
+ * force: never the member cache) with View Channel and Read Message History there (the web shows a room's history,
209
+ * #2092 review). A private thread (a ClassicBot room can be one) also needs the user in it, or Manage Threads:
210
+ * discord.js answers a thread's permissionsFor from its parent, which every guild member who sees the parent passes.
211
+ */
212
+ canViewChannel(channelId: string, userId: string): Promise<boolean>;
202
213
  /** Private delivery: a DM to the user (fails if the user disallows DMs from this server). */
203
214
  sendDirect(userId: string, text: string, opts?: SendOpts): Promise<SentMessage>;
204
215
  sendText(chatId: string, text: string, opts?: SendOpts): Promise<SentMessage>;
@@ -14,8 +14,10 @@ import { Client, GatewayIntentBits, Partials, ActionRowBuilder, ButtonBuilder, B
14
14
  import { downloadStickerImage } from "../sticker-download.js";
15
15
  import { MessageQueue } from "../message-queue.js";
16
16
  import { splitTextFenceAware, truncatePreview, fenceBlock } from "../markdown-chunk.js";
17
+ import { stripPlaceRefs } from "../../topic-link.js";
17
18
  import { CROSS_INSTANCE_VISIBILITY_MODES } from "../../cross-instance-notice.js";
18
19
  import { POLL_STATUS_CALLBACK } from "../../reply-polls.js";
20
+ import { protectDiscordClientRetirement, retireDiscordClient } from "./discord-client-retirement.js";
19
21
  const DISCORD_MAX_LENGTH = 2000;
20
22
  const GATEWAY_WATCHDOG_INTERVAL_MS = 30_000;
21
23
  const GATEWAY_STALE_MIN_MS = 180_000;
@@ -287,6 +289,7 @@ export class DiscordAdapter extends EventEmitter {
287
289
  return channel;
288
290
  }
289
291
  registerClientHandlers(client, generation) {
292
+ protectDiscordClientRetirement(client, error => this.reportRetiredSocketError(error));
290
293
  // Client/shard errors (WebSocket hiccups, gateway resumes, etc.). discord.js
291
294
  // auto-reconnects; we just need a listener so Node's EventEmitter doesn't
292
295
  // rethrow on "error" — without one it surfaces as an uncaughtException and
@@ -841,7 +844,10 @@ export class DiscordAdapter extends EventEmitter {
841
844
  const oldClient = this.client;
842
845
  // A destroyed discord.js Client cannot be logged in again. Destroy first to
843
846
  // avoid overlapping gateway sessions delivering MESSAGE_CREATE twice.
844
- oldClient.destroy();
847
+ await this.retireClient(oldClient);
848
+ if (!this.desiredRunning || epoch !== this.lifecycleEpoch) {
849
+ throw new Error("Discord gateway login superseded by lifecycle change");
850
+ }
845
851
  const client = this.clientFactory();
846
852
  const generation = ++this.clientGeneration;
847
853
  this.client = client;
@@ -855,7 +861,6 @@ export class DiscordAdapter extends EventEmitter {
855
861
  try {
856
862
  await client.login(this.botToken);
857
863
  if (!this.desiredRunning || epoch !== this.lifecycleEpoch || this.client !== client) {
858
- client.destroy();
859
864
  throw new Error("Discord gateway login superseded by lifecycle change");
860
865
  }
861
866
  this.lastReconnectAt = this.now();
@@ -864,10 +869,16 @@ export class DiscordAdapter extends EventEmitter {
864
869
  this.emitHealthChanged();
865
870
  }
866
871
  catch (err) {
867
- client.destroy();
872
+ await this.retireClient(client);
868
873
  throw err;
869
874
  }
870
875
  }
876
+ retireClient(client) {
877
+ return retireDiscordClient(client, error => this.reportRetiredSocketError(error));
878
+ }
879
+ reportRetiredSocketError(error) {
880
+ console.warn(`[discord:${this.id}] retired gateway socket error: ${error.message}`);
881
+ }
871
882
  /** Rebuild just this bot's gateway Client. Calls coalesce into one generation. */
872
883
  reconnectGateway(reason) {
873
884
  if (this.reconnectPromise)
@@ -1341,7 +1352,7 @@ export class DiscordAdapter extends EventEmitter {
1341
1352
  clearInterval(this.watchdogTimer);
1342
1353
  this.watchdogTimer = null;
1343
1354
  this.queue.stop();
1344
- this.client.destroy();
1355
+ await this.retireClient(this.client);
1345
1356
  }
1346
1357
  // ── Text / file sending ────────────────────────────────────────────────
1347
1358
  /**
@@ -1406,14 +1417,61 @@ export class DiscordAdapter extends EventEmitter {
1406
1417
  }
1407
1418
  return out;
1408
1419
  }
1420
+ /** #1990: whether `userId` is in the guild now (one member read; an unknown member or any error rejects). */
1421
+ async isGroupMember(groupId, userId) {
1422
+ if (!/^\d{5,25}$/.test(userId) || !groupId || groupId !== this.guildId)
1423
+ return false;
1424
+ const guild = await (await this.readyClient()).guilds.fetch(this.guildId);
1425
+ // force: a read from Discord, never the member cache — without the GuildMembers intent a member who left can
1426
+ // stay cached, and each ten-minute recheck would confirm them again.
1427
+ await guild.members.fetch({ user: userId, force: true });
1428
+ return true;
1429
+ }
1430
+ /**
1431
+ * #1920 §3.2: whether a user can read this room as on Discord — a member of the channel's guild (read from Discord,
1432
+ * force: never the member cache) with View Channel and Read Message History there (the web shows a room's history,
1433
+ * #2092 review). A private thread (a ClassicBot room can be one) also needs the user in it, or Manage Threads:
1434
+ * discord.js answers a thread's permissionsFor from its parent, which every guild member who sees the parent passes.
1435
+ */
1436
+ async canViewChannel(channelId, userId) {
1437
+ if (!/^\d{5,25}$/.test(userId) || !/^\d{5,25}$/.test(channelId))
1438
+ return false;
1439
+ const channel = await (await this.readyClient()).channels.fetch(channelId);
1440
+ if (!channel || !("guild" in channel) || !channel.guild || typeof channel.permissionsFor !== "function")
1441
+ return false;
1442
+ // 10007 Unknown Member / 10013 Unknown User: a definite "not in it"; anything else is no answer (rethrown).
1443
+ const notIn = (err) => { if ([10007, 10013].includes(err.code))
1444
+ return false; throw err; };
1445
+ let member;
1446
+ try {
1447
+ member = await channel.guild.members.fetch({ user: userId, force: true });
1448
+ }
1449
+ catch (err) {
1450
+ return notIn(err);
1451
+ }
1452
+ const perms = channel.permissionsFor(member);
1453
+ if (perms?.has(PermissionFlagsBits.ViewChannel) !== true || perms.has(PermissionFlagsBits.ReadMessageHistory) !== true)
1454
+ return false;
1455
+ if (channel.type !== ChannelType.PrivateThread || perms.has(PermissionFlagsBits.ManageThreads))
1456
+ return true;
1457
+ try {
1458
+ await channel.members.fetch({ member: userId, force: true });
1459
+ return true;
1460
+ }
1461
+ catch (err) {
1462
+ return notIn(err);
1463
+ }
1464
+ }
1409
1465
  /** Private delivery: a DM to the user (fails if the user disallows DMs from this server). */
1410
1466
  async sendDirect(userId, text, opts) {
1467
+ text = stripPlaceRefs(text);
1411
1468
  const user = await this.client.users.fetch(userId);
1412
1469
  const dm = await user.createDM();
1413
1470
  const sent = await dm.send({ content: text, ...(opts?.disablePreview ? { flags: MessageFlags.SuppressEmbeds } : {}), ...(opts?.choices ? { components: buttonRows(opts.choices) } : {}), allowedMentions: { parse: [] } });
1414
1471
  return { messageId: sent.id, chatId: dm.id };
1415
1472
  }
1416
1473
  async sendText(chatId, text, opts) {
1474
+ text = stripPlaceRefs(text);
1417
1475
  const channelId = opts?.threadId ?? chatId;
1418
1476
  const channel = await this._fetchTextChannel(channelId);
1419
1477
  const chunkLimit = opts?.chunkLimit ?? DISCORD_MAX_LENGTH;
@@ -1483,6 +1541,7 @@ export class DiscordAdapter extends EventEmitter {
1483
1541
  }
1484
1542
  /** #1651: `_opts.format` changes nothing here — Discord always renders Markdown (as sendText ignores it too). */
1485
1543
  async editMessage(chatId, messageId, text, threadId, _opts) {
1544
+ text = stripPlaceRefs(text);
1486
1545
  // Prefer the exact channel (handles forum-topic threads, which a GuildText
1487
1546
  // scan misses). chatId is the guild id in the channels topology, so the
1488
1547
  // message actually lives in threadId (when set) or a specific text channel.
@@ -1535,6 +1594,7 @@ export class DiscordAdapter extends EventEmitter {
1535
1594
  await msg.edit({ components: [] });
1536
1595
  }
1537
1596
  async editMessageRemoveButtons(chatId, messageId, text, threadId) {
1597
+ text = stripPlaceRefs(text);
1538
1598
  // Prefer the exact channel (handles forum-topic threads, which a GuildText
1539
1599
  // scan misses); fall back to scanning top-level text channels.
1540
1600
  let exactError;
@@ -1908,7 +1968,7 @@ export class DiscordAdapter extends EventEmitter {
1908
1968
  if (alert.choices && alert.choices.length > 0) {
1909
1969
  const channelId = opts?.threadId ?? chatId;
1910
1970
  const channel = await this._fetchTextChannel(channelId);
1911
- const msg = await channel.send({ content: alert.message, components: buttonRows(alert.choices) });
1971
+ const msg = await channel.send({ content: stripPlaceRefs(alert.message), components: buttonRows(alert.choices) });
1912
1972
  // The address this adapter's own callbacks report for these buttons
1913
1973
  // (guild + channel as thread), not the caller's spelling of it (#1131).
1914
1974
  // A native slash command addresses its channel as the chat; the button
@@ -1937,7 +1997,7 @@ export class DiscordAdapter extends EventEmitter {
1937
1997
  const channel = await this._fetchTextChannel(opts?.threadId ?? chatId);
1938
1998
  const msg = await channel.messages.fetch(messageId);
1939
1999
  await msg.edit({
1940
- content: truncatePreview(alert.message, DISCORD_MAX_LENGTH),
2000
+ content: truncatePreview(stripPlaceRefs(alert.message), DISCORD_MAX_LENGTH),
1941
2001
  components: buttonRows(alert.choices ?? []),
1942
2002
  });
1943
2003
  }