@poolzin/pool-bot 2026.1.39 → 2026.2.1

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 (511) hide show
  1. package/assets/chrome-extension/README.md +3 -3
  2. package/assets/chrome-extension/background.js +5 -5
  3. package/assets/chrome-extension/manifest.json +3 -3
  4. package/assets/chrome-extension/options.html +4 -4
  5. package/assets/chrome-extension/options.js +1 -1
  6. package/dist/acp/client.js +3 -3
  7. package/dist/acp/types.js +1 -1
  8. package/dist/agents/agent-paths.js +3 -3
  9. package/dist/agents/auth-profiles/paths.js +3 -3
  10. package/dist/agents/bash-tools.exec.js +76 -25
  11. package/dist/agents/cli-runner/helpers.js +10 -12
  12. package/dist/agents/cli-runner.js +2 -2
  13. package/dist/agents/cloudflare-ai-gateway.js +31 -0
  14. package/dist/agents/compaction.js +16 -2
  15. package/dist/agents/context-window-guard.js +13 -10
  16. package/dist/agents/context.js +4 -4
  17. package/dist/agents/docs-path.js +1 -1
  18. package/dist/agents/identity.js +47 -7
  19. package/dist/agents/memory-search.js +25 -8
  20. package/dist/agents/minimax-vlm.js +1 -1
  21. package/dist/agents/model-auth.js +12 -1
  22. package/dist/agents/model-catalog.js +4 -4
  23. package/dist/agents/model-selection.js +31 -4
  24. package/dist/agents/models-config.js +3 -3
  25. package/dist/agents/models-config.providers.js +147 -39
  26. package/dist/agents/pi-embedded-block-chunker.js +117 -42
  27. package/dist/agents/pi-embedded-helpers/errors.js +183 -78
  28. package/dist/agents/pi-embedded-helpers/openai.js +1 -1
  29. package/dist/agents/pi-embedded-helpers.js +1 -1
  30. package/dist/agents/pi-embedded-runner/compact.js +9 -8
  31. package/dist/agents/pi-embedded-runner/model.js +63 -4
  32. package/dist/agents/pi-embedded-runner/run/attempt.js +27 -17
  33. package/dist/agents/pi-embedded-runner/run.js +203 -50
  34. package/dist/agents/pi-embedded-runner/system-prompt.js +10 -2
  35. package/dist/agents/pi-embedded-runner/tool-result-truncation.js +275 -0
  36. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  37. package/dist/agents/pi-embedded-subscribe.js +118 -29
  38. package/dist/agents/pi-model-discovery.js +10 -0
  39. package/dist/agents/pi-tool-definition-adapter.js +50 -9
  40. package/dist/agents/pi-tools.before-tool-call.js +67 -0
  41. package/dist/agents/pi-tools.js +20 -10
  42. package/dist/agents/pi-tools.read.js +2 -2
  43. package/dist/agents/poolbot-tools.js +15 -10
  44. package/dist/agents/sandbox-paths.js +31 -0
  45. package/dist/agents/session-file-repair.js +83 -0
  46. package/dist/agents/session-tool-result-guard.js +94 -15
  47. package/dist/agents/session-transcript-repair.js +68 -0
  48. package/dist/agents/shell-utils.js +51 -0
  49. package/dist/agents/skills/bundled-context.js +23 -0
  50. package/dist/agents/skills/bundled-dir.js +41 -7
  51. package/dist/agents/skills/frontmatter.js +1 -1
  52. package/dist/agents/skills/workspace.js +2 -2
  53. package/dist/agents/skills-install.js +60 -23
  54. package/dist/agents/subagent-announce.js +79 -34
  55. package/dist/agents/system-prompt.js +28 -4
  56. package/dist/agents/together-models.js +127 -0
  57. package/dist/agents/tool-images.js +1 -1
  58. package/dist/agents/tool-policy.conformance.js +14 -0
  59. package/dist/agents/tool-policy.js +25 -1
  60. package/dist/agents/tools/browser-tool.js +3 -3
  61. package/dist/agents/tools/cron-tool.js +166 -19
  62. package/dist/agents/tools/discord-actions-presence.js +78 -0
  63. package/dist/agents/tools/image-tool.js +2 -2
  64. package/dist/agents/tools/memory-tool.js +93 -5
  65. package/dist/agents/tools/message-tool.js +56 -2
  66. package/dist/agents/tools/sessions-history-tool.js +69 -1
  67. package/dist/agents/tools/web-search.js +211 -42
  68. package/dist/agents/usage.js +23 -1
  69. package/dist/agents/workspace-run.js +67 -0
  70. package/dist/agents/workspace-templates.js +44 -0
  71. package/dist/auto-reply/command-auth.js +121 -6
  72. package/dist/auto-reply/commands-registry.data.js +1 -1
  73. package/dist/auto-reply/envelope.js +50 -72
  74. package/dist/auto-reply/reply/commands-compact.js +1 -0
  75. package/dist/auto-reply/reply/commands-context-report.js +3 -2
  76. package/dist/auto-reply/reply/commands-context.js +1 -0
  77. package/dist/auto-reply/reply/commands-models.js +107 -60
  78. package/dist/auto-reply/reply/commands-ptt.js +171 -0
  79. package/dist/auto-reply/reply/commands-session.js +2 -2
  80. package/dist/auto-reply/reply/get-reply-run.js +16 -5
  81. package/dist/auto-reply/reply/groups.js +1 -1
  82. package/dist/auto-reply/reply/inbound-context.js +9 -1
  83. package/dist/auto-reply/reply/inbound-meta.js +130 -0
  84. package/dist/auto-reply/reply/model-selection.js +3 -3
  85. package/dist/auto-reply/reply/untrusted-context.js +15 -0
  86. package/dist/auto-reply/status.js +1 -1
  87. package/dist/auto-reply/thinking.js +88 -43
  88. package/dist/browser/bridge-server.js +13 -0
  89. package/dist/browser/cdp.helpers.js +38 -24
  90. package/dist/browser/client-fetch.js +51 -8
  91. package/dist/browser/config.js +2 -11
  92. package/dist/browser/extension-relay.js +104 -43
  93. package/dist/browser/pw-ai.js +1 -1
  94. package/dist/browser/pw-session.js +143 -8
  95. package/dist/browser/pw-tools-core.interactions.js +125 -27
  96. package/dist/browser/pw-tools-core.responses.js +1 -1
  97. package/dist/browser/pw-tools-core.state.js +1 -1
  98. package/dist/browser/routes/agent.act.js +86 -41
  99. package/dist/browser/routes/dispatcher.js +4 -4
  100. package/dist/browser/screenshot.js +1 -1
  101. package/dist/browser/server-context.js +2 -2
  102. package/dist/browser/server.js +13 -0
  103. package/dist/build-info.json +3 -3
  104. package/dist/canvas-host/a2ui.js +3 -3
  105. package/dist/channels/plugins/catalog.js +2 -2
  106. package/dist/channels/plugins/onboarding/imessage.js +1 -1
  107. package/dist/channels/plugins/onboarding/signal.js +1 -1
  108. package/dist/channels/plugins/onboarding/slack.js +4 -4
  109. package/dist/channels/plugins/onboarding/whatsapp.js +3 -3
  110. package/dist/channels/plugins/pairing-message.js +1 -1
  111. package/dist/channels/reply-prefix.js +8 -1
  112. package/dist/cli/browser-cli-extension.js +2 -2
  113. package/dist/cli/cron-cli/register.cron-add.js +61 -40
  114. package/dist/cli/cron-cli/register.cron-edit.js +60 -34
  115. package/dist/cli/cron-cli/shared.js +56 -41
  116. package/dist/cli/dns-cli.js +26 -14
  117. package/dist/cli/docs-cli.js +1 -1
  118. package/dist/cli/gateway-cli/dev.js +1 -1
  119. package/dist/cli/gateway-cli/register.js +37 -19
  120. package/dist/cli/memory-cli.js +30 -20
  121. package/dist/cli/nodes-cli/register.canvas.js +1 -1
  122. package/dist/cli/parse-bytes.js +37 -0
  123. package/dist/cli/plugins-cli.js +1 -1
  124. package/dist/cli/run-main.js +2 -2
  125. package/dist/cli/security-cli.js +1 -1
  126. package/dist/cli/tagline.js +1 -1
  127. package/dist/cli/update-cli.js +173 -52
  128. package/dist/cli/webhooks-cli.js +5 -5
  129. package/dist/commands/agent.js +1 -0
  130. package/dist/commands/agents.commands.add.js +1 -1
  131. package/dist/commands/auth-choice.apply.api-providers.js +305 -17
  132. package/dist/commands/auth-choice.apply.js +4 -1
  133. package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
  134. package/dist/commands/auth-choice.apply.xai.js +63 -0
  135. package/dist/commands/auth-choice.preferred-provider.js +7 -1
  136. package/dist/commands/configure.wizard.js +1 -1
  137. package/dist/commands/dashboard.js +1 -1
  138. package/dist/commands/docs.js +1 -1
  139. package/dist/commands/doctor-config-flow.js +61 -5
  140. package/dist/commands/doctor-gateway-services.js +3 -3
  141. package/dist/commands/doctor-state-migrations.js +1 -1
  142. package/dist/commands/doctor-update.js +3 -3
  143. package/dist/commands/doctor.js +1 -1
  144. package/dist/commands/health.js +1 -1
  145. package/dist/commands/model-allowlist.js +29 -0
  146. package/dist/commands/model-picker.js +2 -1
  147. package/dist/commands/models/list.probe.js +2 -2
  148. package/dist/commands/models/list.registry.js +4 -4
  149. package/dist/commands/models/list.status-command.js +44 -24
  150. package/dist/commands/models/shared.js +15 -0
  151. package/dist/commands/onboard-auth.config-core.js +366 -28
  152. package/dist/commands/onboard-auth.credentials.js +71 -9
  153. package/dist/commands/onboard-auth.js +3 -3
  154. package/dist/commands/onboard-auth.models.js +26 -24
  155. package/dist/commands/onboard-custom.js +384 -0
  156. package/dist/commands/onboard-non-interactive/local/auth-choice-inference.js +35 -0
  157. package/dist/commands/onboard-non-interactive/local/auth-choice.js +146 -9
  158. package/dist/commands/onboard-skills.js +63 -38
  159. package/dist/commands/openai-model-default.js +41 -0
  160. package/dist/commands/status-all/report-lines.js +1 -1
  161. package/dist/commands/status.command.js +1 -1
  162. package/dist/commands/uninstall.js +3 -3
  163. package/dist/compat/legacy-names.js +1 -1
  164. package/dist/config/defaults.js +3 -2
  165. package/dist/config/io.js +3 -3
  166. package/dist/config/paths.js +136 -35
  167. package/dist/config/plugin-auto-enable.js +21 -5
  168. package/dist/config/redact-snapshot.js +153 -0
  169. package/dist/config/schema.field-metadata.js +590 -0
  170. package/dist/config/schema.js +3 -3
  171. package/dist/config/sessions/store.js +291 -23
  172. package/dist/config/types.memory.js +1 -0
  173. package/dist/config/version.js +4 -4
  174. package/dist/config/zod-schema.agent-defaults.js +3 -0
  175. package/dist/config/zod-schema.agent-runtime.js +13 -2
  176. package/dist/config/zod-schema.providers-core.js +142 -0
  177. package/dist/config/zod-schema.session.js +3 -0
  178. package/dist/cron/delivery.js +57 -0
  179. package/dist/cron/isolated-agent/delivery-target.js +18 -3
  180. package/dist/cron/isolated-agent/helpers.js +22 -5
  181. package/dist/cron/isolated-agent/run.js +171 -63
  182. package/dist/cron/isolated-agent/session.js +2 -0
  183. package/dist/cron/normalize.js +356 -28
  184. package/dist/cron/parse.js +10 -5
  185. package/dist/cron/run-log.js +35 -10
  186. package/dist/cron/schedule.js +41 -6
  187. package/dist/cron/service/jobs.js +208 -35
  188. package/dist/cron/service/ops.js +72 -16
  189. package/dist/cron/service/state.js +2 -0
  190. package/dist/cron/service/store.js +386 -14
  191. package/dist/cron/service/timer.js +390 -147
  192. package/dist/cron/session-reaper.js +86 -0
  193. package/dist/cron/store.js +23 -8
  194. package/dist/cron/validate-timestamp.js +43 -0
  195. package/dist/daemon/constants.js +7 -7
  196. package/dist/daemon/inspect.js +6 -6
  197. package/dist/daemon/systemd-unit.js +1 -1
  198. package/dist/discord/monitor/agent-components.js +438 -0
  199. package/dist/discord/monitor/allow-list.js +28 -5
  200. package/dist/discord/monitor/gateway-registry.js +29 -0
  201. package/dist/discord/monitor/native-command.js +44 -23
  202. package/dist/discord/monitor/sender-identity.js +45 -0
  203. package/dist/discord/pluralkit.js +27 -0
  204. package/dist/discord/send.outbound.js +92 -5
  205. package/dist/discord/send.shared.js +60 -23
  206. package/dist/discord/targets.js +84 -1
  207. package/dist/entry.js +15 -9
  208. package/dist/extensionAPI.js +8 -0
  209. package/dist/gateway/control-ui.js +8 -1
  210. package/dist/gateway/hooks-mapping.js +3 -0
  211. package/dist/gateway/hooks.js +65 -0
  212. package/dist/gateway/live-image-probe.js +1 -66
  213. package/dist/gateway/net.js +96 -31
  214. package/dist/gateway/node-command-policy.js +50 -15
  215. package/dist/gateway/openai-http.js +2 -2
  216. package/dist/gateway/openresponses-http.js +4 -4
  217. package/dist/gateway/origin-check.js +56 -0
  218. package/dist/gateway/protocol/client-info.js +9 -0
  219. package/dist/gateway/protocol/index.js +9 -2
  220. package/dist/gateway/protocol/schema/agents-models-skills.js +71 -1
  221. package/dist/gateway/protocol/schema/cron.js +22 -10
  222. package/dist/gateway/protocol/schema/protocol-schemas.js +16 -2
  223. package/dist/gateway/protocol/schema/sessions.js +12 -0
  224. package/dist/gateway/server/hooks.js +1 -1
  225. package/dist/gateway/server-broadcast.js +26 -9
  226. package/dist/gateway/server-chat.js +112 -23
  227. package/dist/gateway/server-discovery-runtime.js +10 -2
  228. package/dist/gateway/server-discovery.js +2 -2
  229. package/dist/gateway/server-http.js +110 -12
  230. package/dist/gateway/server-methods/agent-timestamp.js +60 -0
  231. package/dist/gateway/server-methods/agents.js +321 -2
  232. package/dist/gateway/server-methods/usage.js +559 -16
  233. package/dist/gateway/server-runtime-state.js +22 -8
  234. package/dist/gateway/server-startup-memory.js +16 -0
  235. package/dist/gateway/server.impl.js +7 -3
  236. package/dist/gateway/session-utils.fs.js +23 -25
  237. package/dist/gateway/session-utils.js +20 -10
  238. package/dist/gateway/sessions-patch.js +7 -22
  239. package/dist/gateway/test-helpers.server.js +35 -2
  240. package/dist/hooks/frontmatter.js +1 -1
  241. package/dist/hooks/hooks-status.js +1 -1
  242. package/dist/hooks/install.js +2 -2
  243. package/dist/hooks/loader.js +1 -1
  244. package/dist/hooks/workspace.js +3 -3
  245. package/dist/imessage/constants.js +2 -0
  246. package/dist/imessage/monitor/deliver.js +4 -1
  247. package/dist/imessage/monitor/monitor-provider.js +51 -1
  248. package/dist/index.js +2 -2
  249. package/dist/infra/bonjour-discovery.js +131 -70
  250. package/dist/infra/bonjour.js +3 -3
  251. package/dist/infra/control-ui-assets.js +134 -12
  252. package/dist/infra/errors.js +12 -0
  253. package/dist/infra/exec-approvals.js +266 -57
  254. package/dist/infra/format-time/format-datetime.js +79 -0
  255. package/dist/infra/format-time/format-duration.js +81 -0
  256. package/dist/infra/format-time/format-relative.js +80 -0
  257. package/dist/infra/heartbeat-runner.js +140 -49
  258. package/dist/infra/home-dir.js +54 -0
  259. package/dist/infra/net/fetch-guard.js +122 -0
  260. package/dist/infra/net/ssrf.js +65 -29
  261. package/dist/infra/outbound/abort.js +14 -0
  262. package/dist/infra/outbound/message-action-runner.js +77 -13
  263. package/dist/infra/outbound/outbound-session.js +143 -37
  264. package/dist/infra/path-env.js +3 -3
  265. package/dist/infra/poolbot-root.js +43 -1
  266. package/dist/infra/provider-usage.fetch.minimax.js +1 -1
  267. package/dist/infra/restart.js +1 -1
  268. package/dist/infra/session-cost-usage.js +631 -41
  269. package/dist/infra/state-migrations.js +317 -47
  270. package/dist/infra/tailscale.js +1 -1
  271. package/dist/infra/update-global.js +35 -0
  272. package/dist/infra/update-runner.js +149 -43
  273. package/dist/infra/warning-filter.js +65 -0
  274. package/dist/infra/widearea-dns.js +30 -9
  275. package/dist/logging/redact-identifier.js +12 -0
  276. package/dist/macos/relay.js +2 -2
  277. package/dist/media/fetch.js +81 -58
  278. package/dist/media/input-files.js +1 -1
  279. package/dist/media/mime.js +4 -0
  280. package/dist/media/png-encode.js +74 -0
  281. package/dist/media-understanding/apply.js +403 -3
  282. package/dist/media-understanding/attachments.js +38 -27
  283. package/dist/media-understanding/defaults.js +16 -0
  284. package/dist/media-understanding/providers/deepgram/audio.js +22 -14
  285. package/dist/media-understanding/providers/google/audio.js +24 -17
  286. package/dist/media-understanding/providers/google/video.js +24 -17
  287. package/dist/media-understanding/providers/image.js +4 -4
  288. package/dist/media-understanding/providers/index.js +4 -1
  289. package/dist/media-understanding/providers/openai/audio.js +22 -14
  290. package/dist/media-understanding/providers/shared.js +16 -11
  291. package/dist/media-understanding/providers/zai/index.js +6 -0
  292. package/dist/media-understanding/runner.js +158 -90
  293. package/dist/memory/backend-config.js +207 -0
  294. package/dist/memory/batch-voyage.js +277 -0
  295. package/dist/memory/embeddings-voyage.js +75 -0
  296. package/dist/memory/embeddings.js +29 -17
  297. package/dist/memory/internal.js +101 -18
  298. package/dist/memory/manager.js +155 -48
  299. package/dist/memory/search-manager.js +173 -0
  300. package/dist/memory/session-files.js +9 -3
  301. package/dist/memory/types.js +1 -0
  302. package/dist/node-host/runner.js +36 -26
  303. package/dist/node-host/with-timeout.js +27 -0
  304. package/dist/pairing/pairing-messages.js +1 -1
  305. package/dist/plugins/commands.js +5 -1
  306. package/dist/plugins/config-state.js +86 -7
  307. package/dist/plugins/discovery.js +1 -1
  308. package/dist/plugins/install.js +2 -2
  309. package/dist/plugins/source-display.js +51 -0
  310. package/dist/plugins/update.js +1 -1
  311. package/dist/process/exec.js +20 -2
  312. package/dist/routing/resolve-route.js +12 -0
  313. package/dist/routing/session-key.js +15 -0
  314. package/dist/runtime.js +2 -0
  315. package/dist/security/audit-extra.async.js +601 -0
  316. package/dist/security/audit-extra.js +2 -830
  317. package/dist/security/audit-extra.sync.js +505 -0
  318. package/dist/security/audit.js +2 -2
  319. package/dist/security/channel-metadata.js +34 -0
  320. package/dist/security/external-content.js +88 -6
  321. package/dist/security/skill-scanner.js +330 -0
  322. package/dist/sessions/session-key-utils.js +7 -0
  323. package/dist/shared/text/reasoning-tags.js +52 -7
  324. package/dist/signal/monitor/event-handler.js +80 -1
  325. package/dist/slack/monitor/media.js +85 -15
  326. package/dist/tailscale/detect.js +145 -0
  327. package/dist/telegram/bot/helpers.js +109 -28
  328. package/dist/telegram/bot-handlers.js +144 -3
  329. package/dist/telegram/bot-message-context.js +38 -11
  330. package/dist/telegram/bot-message-dispatch.js +48 -15
  331. package/dist/telegram/bot-native-commands.js +86 -29
  332. package/dist/telegram/bot.js +30 -29
  333. package/dist/telegram/model-buttons.js +163 -0
  334. package/dist/telegram/monitor.js +110 -85
  335. package/dist/telegram/send.js +129 -47
  336. package/dist/terminal/restore.js +45 -0
  337. package/dist/test-helpers/state-dir-env.js +16 -0
  338. package/dist/test-helpers/workspace.js +11 -0
  339. package/dist/test-utils/channel-plugins.js +82 -0
  340. package/dist/test-utils/ports.js +73 -0
  341. package/dist/tts/tts.js +12 -6
  342. package/dist/tui/tui-session-actions.js +166 -54
  343. package/dist/utils/fetch-timeout.js +20 -0
  344. package/dist/utils/normalize-secret-input.js +19 -0
  345. package/dist/utils/shell-argv.js +61 -0
  346. package/dist/utils/transcript-tools.js +58 -0
  347. package/dist/utils.js +55 -14
  348. package/dist/version.js +42 -5
  349. package/dist/web/qr-image.js +1 -61
  350. package/dist/wizard/onboarding.finalize.js +7 -7
  351. package/dist/wizard/onboarding.js +3 -3
  352. package/docs/RELEASE_WORKFOTS_COMPARISON.md +3 -3
  353. package/docs/_config.yml +2 -2
  354. package/docs/_layouts/default.html +9 -9
  355. package/docs/concepts/typebox.md +1 -1
  356. package/docs/docs.json +1 -1
  357. package/docs/northflank.mdx +7 -7
  358. package/docs/railway.mdx +3 -3
  359. package/docs/render.mdx +5 -5
  360. package/docs/start/lore.md +2 -2
  361. package/extensions/bluebubbles/index.ts +2 -2
  362. package/extensions/bluebubbles/package.json +1 -1
  363. package/extensions/bluebubbles/src/accounts.ts +8 -8
  364. package/extensions/bluebubbles/src/actions.test.ts +22 -22
  365. package/extensions/bluebubbles/src/actions.ts +5 -5
  366. package/extensions/bluebubbles/src/attachments.ts +2 -2
  367. package/extensions/bluebubbles/src/channel.ts +16 -16
  368. package/extensions/bluebubbles/src/chat.ts +2 -2
  369. package/extensions/bluebubbles/src/media-send.ts +2 -2
  370. package/extensions/bluebubbles/src/monitor.test.ts +46 -46
  371. package/extensions/bluebubbles/src/monitor.ts +5 -5
  372. package/extensions/bluebubbles/src/onboarding.ts +7 -7
  373. package/extensions/bluebubbles/src/reactions.ts +2 -2
  374. package/extensions/bluebubbles/src/send.ts +2 -2
  375. package/extensions/copilot-proxy/README.md +1 -1
  376. package/extensions/copilot-proxy/package.json +1 -1
  377. package/extensions/diagnostics-otel/index.ts +2 -2
  378. package/extensions/diagnostics-otel/package.json +1 -1
  379. package/extensions/diagnostics-otel/src/service.ts +3 -3
  380. package/extensions/discord/index.ts +2 -2
  381. package/extensions/discord/package.json +1 -1
  382. package/extensions/google-antigravity-auth/README.md +1 -1
  383. package/extensions/google-antigravity-auth/index.ts +1 -1
  384. package/extensions/google-antigravity-auth/package.json +1 -1
  385. package/extensions/google-gemini-cli-auth/README.md +1 -1
  386. package/extensions/google-gemini-cli-auth/oauth.ts +1 -1
  387. package/extensions/google-gemini-cli-auth/package.json +1 -1
  388. package/extensions/googlechat/index.ts +3 -3
  389. package/extensions/googlechat/package.json +1 -1
  390. package/extensions/googlechat/src/accounts.ts +8 -8
  391. package/extensions/googlechat/src/actions.ts +6 -6
  392. package/extensions/googlechat/src/channel.ts +21 -21
  393. package/extensions/googlechat/src/monitor.ts +8 -8
  394. package/extensions/googlechat/src/onboarding.ts +10 -10
  395. package/extensions/imessage/index.ts +2 -2
  396. package/extensions/imessage/package.json +1 -1
  397. package/extensions/line/index.ts +2 -2
  398. package/extensions/line/package.json +1 -1
  399. package/extensions/line/src/card-command.ts +2 -2
  400. package/extensions/line/src/channel.logout.test.ts +4 -4
  401. package/extensions/line/src/channel.sendPayload.test.ts +8 -8
  402. package/extensions/line/src/channel.ts +3 -3
  403. package/extensions/llm-task/README.md +3 -3
  404. package/extensions/llm-task/index.ts +2 -2
  405. package/extensions/llm-task/package.json +1 -1
  406. package/extensions/llm-task/src/llm-task-tool.ts +4 -4
  407. package/extensions/lobster/README.md +6 -6
  408. package/extensions/lobster/index.ts +2 -2
  409. package/extensions/lobster/src/lobster-tool.test.ts +4 -4
  410. package/extensions/lobster/src/lobster-tool.ts +2 -2
  411. package/extensions/matrix/index.ts +2 -2
  412. package/extensions/matrix/package.json +1 -1
  413. package/extensions/matrix/src/matrix/client/config.ts +1 -1
  414. package/extensions/matrix/src/matrix/monitor/handler.ts +1 -1
  415. package/extensions/matrix/src/onboarding.ts +1 -1
  416. package/extensions/mattermost/index.ts +2 -2
  417. package/extensions/mattermost/package.json +1 -1
  418. package/extensions/mattermost/src/mattermost/accounts.ts +8 -8
  419. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
  420. package/extensions/mattermost/src/mattermost/monitor.ts +2 -2
  421. package/extensions/mattermost/src/onboarding-helpers.ts +3 -3
  422. package/extensions/mattermost/src/onboarding.ts +2 -2
  423. package/extensions/memory-core/index.ts +2 -2
  424. package/extensions/memory-core/package.json +1 -1
  425. package/extensions/memory-lancedb/index.ts +3 -3
  426. package/extensions/memory-lancedb/package.json +1 -1
  427. package/extensions/msteams/index.ts +2 -2
  428. package/extensions/msteams/package.json +1 -1
  429. package/extensions/msteams/src/channel.directory.test.ts +2 -2
  430. package/extensions/msteams/src/channel.ts +2 -2
  431. package/extensions/msteams/src/graph-upload.ts +4 -4
  432. package/extensions/msteams/src/monitor-handler.ts +2 -2
  433. package/extensions/msteams/src/monitor.ts +2 -2
  434. package/extensions/msteams/src/onboarding.ts +9 -9
  435. package/extensions/msteams/src/reply-dispatcher.ts +2 -2
  436. package/extensions/msteams/src/send-context.ts +2 -2
  437. package/extensions/msteams/src/send.ts +4 -4
  438. package/extensions/nextcloud-talk/index.ts +2 -2
  439. package/extensions/nextcloud-talk/package.json +1 -1
  440. package/extensions/nextcloud-talk/src/channel.ts +7 -7
  441. package/extensions/nextcloud-talk/src/inbound.ts +7 -7
  442. package/extensions/nextcloud-talk/src/onboarding.ts +1 -1
  443. package/extensions/nostr/README.md +2 -2
  444. package/extensions/nostr/index.ts +5 -5
  445. package/extensions/nostr/package.json +1 -1
  446. package/extensions/nostr/src/types.ts +4 -4
  447. package/extensions/open-prose/index.ts +2 -2
  448. package/extensions/qwen-portal-auth/README.md +1 -1
  449. package/extensions/signal/index.ts +2 -2
  450. package/extensions/signal/package.json +1 -1
  451. package/extensions/slack/index.ts +2 -2
  452. package/extensions/slack/package.json +1 -1
  453. package/extensions/telegram/index.ts +2 -2
  454. package/extensions/telegram/package.json +1 -1
  455. package/extensions/telegram/src/channel.ts +2 -2
  456. package/extensions/tlon/README.md +2 -2
  457. package/extensions/tlon/index.ts +2 -2
  458. package/extensions/tlon/package.json +1 -1
  459. package/extensions/tlon/src/channel.ts +13 -13
  460. package/extensions/tlon/src/monitor/index.ts +3 -3
  461. package/extensions/tlon/src/onboarding.ts +3 -3
  462. package/extensions/tlon/src/types.ts +3 -3
  463. package/extensions/twitch/README.md +1 -1
  464. package/extensions/twitch/index.ts +2 -2
  465. package/extensions/twitch/package.json +1 -1
  466. package/extensions/twitch/src/config.ts +3 -3
  467. package/extensions/twitch/src/monitor.ts +3 -3
  468. package/extensions/twitch/src/onboarding.ts +9 -9
  469. package/extensions/twitch/src/outbound.test.ts +2 -2
  470. package/extensions/twitch/src/plugin.test.ts +2 -2
  471. package/extensions/twitch/src/plugin.ts +8 -8
  472. package/extensions/twitch/src/send.test.ts +2 -2
  473. package/extensions/twitch/src/send.ts +4 -4
  474. package/extensions/twitch/src/token.test.ts +8 -8
  475. package/extensions/twitch/src/token.ts +3 -3
  476. package/extensions/twitch/src/twitch-client.ts +3 -3
  477. package/extensions/twitch/src/types.ts +3 -3
  478. package/extensions/twitch/src/utils/markdown.ts +1 -1
  479. package/extensions/voice-call/README.md +3 -3
  480. package/extensions/voice-call/package.json +1 -1
  481. package/extensions/voice-call/src/core-bridge.ts +2 -2
  482. package/extensions/voice-call/src/response-generator.ts +1 -1
  483. package/extensions/whatsapp/index.ts +2 -2
  484. package/extensions/whatsapp/package.json +1 -1
  485. package/extensions/zalo/README.md +1 -1
  486. package/extensions/zalo/index.ts +2 -2
  487. package/extensions/zalo/package.json +1 -1
  488. package/extensions/zalo/src/accounts.ts +8 -8
  489. package/extensions/zalo/src/actions.ts +4 -4
  490. package/extensions/zalo/src/channel.directory.test.ts +2 -2
  491. package/extensions/zalo/src/channel.ts +18 -18
  492. package/extensions/zalo/src/monitor.ts +9 -9
  493. package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
  494. package/extensions/zalo/src/onboarding.ts +24 -24
  495. package/extensions/zalo/src/send.ts +2 -2
  496. package/extensions/zalouser/README.md +2 -2
  497. package/extensions/zalouser/index.ts +2 -2
  498. package/extensions/zalouser/package.json +1 -1
  499. package/extensions/zalouser/src/accounts.ts +9 -9
  500. package/extensions/zalouser/src/channel.ts +24 -24
  501. package/extensions/zalouser/src/monitor.ts +4 -4
  502. package/extensions/zalouser/src/onboarding.ts +28 -28
  503. package/package.json +13 -251
  504. package/skills/nano-banana-pro/scripts/generate_image.py +1 -1
  505. package/skills/tmux/scripts/find-sessions.sh +1 -1
  506. package/CHANGELOG.md +0 -102
  507. package/README-header.png +0 -0
  508. package/git-hooks/pre-commit +0 -4
  509. package/scripts/format-staged.js +0 -148
  510. package/scripts/postinstall.js +0 -300
  511. package/scripts/setup-git-hooks.js +0 -96
@@ -8,10 +8,22 @@ const CANVAS_COMMANDS = [
8
8
  "canvas.a2ui.pushJSONL",
9
9
  "canvas.a2ui.reset",
10
10
  ];
11
- const CAMERA_COMMANDS = ["camera.list", "camera.snap", "camera.clip"];
12
- const SCREEN_COMMANDS = ["screen.record"];
11
+ const CAMERA_COMMANDS = ["camera.list"];
12
+ const CAMERA_DANGEROUS_COMMANDS = ["camera.snap", "camera.clip"];
13
+ const SCREEN_DANGEROUS_COMMANDS = ["screen.record"];
13
14
  const LOCATION_COMMANDS = ["location.get"];
14
- const SMS_COMMANDS = ["sms.send"];
15
+ const DEVICE_COMMANDS = ["device.info", "device.status"];
16
+ const CONTACTS_COMMANDS = ["contacts.search"];
17
+ const CONTACTS_DANGEROUS_COMMANDS = ["contacts.add"];
18
+ const CALENDAR_COMMANDS = ["calendar.events"];
19
+ const CALENDAR_DANGEROUS_COMMANDS = ["calendar.add"];
20
+ const REMINDERS_COMMANDS = ["reminders.list"];
21
+ const REMINDERS_DANGEROUS_COMMANDS = ["reminders.add"];
22
+ const PHOTOS_COMMANDS = ["photos.latest"];
23
+ const MOTION_COMMANDS = ["motion.activity", "motion.pedometer"];
24
+ const SMS_DANGEROUS_COMMANDS = ["sms.send"];
25
+ // iOS nodes don't implement system.run/which, but they do support notifications.
26
+ const IOS_SYSTEM_COMMANDS = ["system.notify"];
15
27
  const SYSTEM_COMMANDS = [
16
28
  "system.run",
17
29
  "system.which",
@@ -20,32 +32,55 @@ const SYSTEM_COMMANDS = [
20
32
  "system.execApprovals.set",
21
33
  "browser.proxy",
22
34
  ];
35
+ // "High risk" node commands. These can be enabled by explicitly adding them to
36
+ // `gateway.nodes.allowCommands` (and ensuring they're not blocked by denyCommands).
37
+ export const DEFAULT_DANGEROUS_NODE_COMMANDS = [
38
+ ...CAMERA_DANGEROUS_COMMANDS,
39
+ ...SCREEN_DANGEROUS_COMMANDS,
40
+ ...CONTACTS_DANGEROUS_COMMANDS,
41
+ ...CALENDAR_DANGEROUS_COMMANDS,
42
+ ...REMINDERS_DANGEROUS_COMMANDS,
43
+ ...SMS_DANGEROUS_COMMANDS,
44
+ ];
23
45
  const PLATFORM_DEFAULTS = {
24
- ios: [...CANVAS_COMMANDS, ...CAMERA_COMMANDS, ...SCREEN_COMMANDS, ...LOCATION_COMMANDS],
25
- android: [
46
+ ios: [
26
47
  ...CANVAS_COMMANDS,
27
48
  ...CAMERA_COMMANDS,
28
- ...SCREEN_COMMANDS,
29
49
  ...LOCATION_COMMANDS,
30
- ...SMS_COMMANDS,
50
+ ...DEVICE_COMMANDS,
51
+ ...CONTACTS_COMMANDS,
52
+ ...CALENDAR_COMMANDS,
53
+ ...REMINDERS_COMMANDS,
54
+ ...PHOTOS_COMMANDS,
55
+ ...MOTION_COMMANDS,
56
+ ...IOS_SYSTEM_COMMANDS,
31
57
  ],
32
- macos: [
58
+ android: [
33
59
  ...CANVAS_COMMANDS,
34
60
  ...CAMERA_COMMANDS,
35
- ...SCREEN_COMMANDS,
36
61
  ...LOCATION_COMMANDS,
37
- ...SYSTEM_COMMANDS,
62
+ ...DEVICE_COMMANDS,
63
+ ...CONTACTS_COMMANDS,
64
+ ...CALENDAR_COMMANDS,
65
+ ...REMINDERS_COMMANDS,
66
+ ...PHOTOS_COMMANDS,
67
+ ...MOTION_COMMANDS,
38
68
  ],
39
- linux: [...SYSTEM_COMMANDS],
40
- windows: [...SYSTEM_COMMANDS],
41
- unknown: [
69
+ macos: [
42
70
  ...CANVAS_COMMANDS,
43
71
  ...CAMERA_COMMANDS,
44
- ...SCREEN_COMMANDS,
45
72
  ...LOCATION_COMMANDS,
46
- ...SMS_COMMANDS,
73
+ ...DEVICE_COMMANDS,
74
+ ...CONTACTS_COMMANDS,
75
+ ...CALENDAR_COMMANDS,
76
+ ...REMINDERS_COMMANDS,
77
+ ...PHOTOS_COMMANDS,
78
+ ...MOTION_COMMANDS,
47
79
  ...SYSTEM_COMMANDS,
48
80
  ],
81
+ linux: [...SYSTEM_COMMANDS],
82
+ windows: [...SYSTEM_COMMANDS],
83
+ unknown: [...CANVAS_COMMANDS, ...CAMERA_COMMANDS, ...LOCATION_COMMANDS, ...SYSTEM_COMMANDS],
49
84
  };
50
85
  function normalizePlatformId(platform, deviceFamily) {
51
86
  const raw = (platform ?? "").trim().toLowerCase();
@@ -167,7 +167,7 @@ export async function handleOpenAiHttpRequest(req, res, opts) {
167
167
  .map((p) => (typeof p.text === "string" ? p.text : ""))
168
168
  .filter(Boolean)
169
169
  .join("\n\n")
170
- : "No response from Moltbot.";
170
+ : "No response from Poolbot.";
171
171
  sendJson(res, 200, {
172
172
  id: runId,
173
173
  object: "chat.completion",
@@ -275,7 +275,7 @@ export async function handleOpenAiHttpRequest(req, res, opts) {
275
275
  .map((p) => (typeof p.text === "string" ? p.text : ""))
276
276
  .filter(Boolean)
277
277
  .join("\n\n")
278
- : "No response from Moltbot.";
278
+ : "No response from Poolbot.";
279
279
  sawAssistantDelta = true;
280
280
  writeSse(res, {
281
281
  id: runId,
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * OpenResponses HTTP Handler
3
3
  *
4
- * Implements the OpenResponses `/v1/responses` endpoint for Moltbot Gateway.
4
+ * Implements the OpenResponses `/v1/responses` endpoint for Poolbot Gateway.
5
5
  *
6
6
  * @see https://www.open-responses.com/
7
7
  */
@@ -405,7 +405,7 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
405
405
  .map((p) => (typeof p.text === "string" ? p.text : ""))
406
406
  .filter(Boolean)
407
407
  .join("\n\n")
408
- : "No response from Moltbot.";
408
+ : "No response from Poolbot.";
409
409
  const response = createResponseResource({
410
410
  id: responseId,
411
411
  model,
@@ -543,7 +543,7 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
543
543
  if (evt.stream === "lifecycle") {
544
544
  const phase = evt.data?.phase;
545
545
  if (phase === "end" || phase === "error") {
546
- const finalText = accumulatedText || "No response from Moltbot.";
546
+ const finalText = accumulatedText || "No response from Poolbot.";
547
547
  const finalStatus = phase === "error" ? "failed" : "completed";
548
548
  requestFinalize(finalStatus, finalText);
549
549
  }
@@ -647,7 +647,7 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
647
647
  .map((p) => (typeof p.text === "string" ? p.text : ""))
648
648
  .filter(Boolean)
649
649
  .join("\n\n")
650
- : "No response from Moltbot.";
650
+ : "No response from Poolbot.";
651
651
  accumulatedText = content;
652
652
  sawAssistantDelta = true;
653
653
  writeSseEvent(res, {
@@ -0,0 +1,56 @@
1
+ import { isLoopbackHost } from "./net.js";
2
+ function normalizeHostHeader(hostHeader) {
3
+ return (hostHeader ?? "").trim().toLowerCase();
4
+ }
5
+ function resolveHostName(hostHeader) {
6
+ const host = normalizeHostHeader(hostHeader);
7
+ if (!host) {
8
+ return "";
9
+ }
10
+ if (host.startsWith("[")) {
11
+ const end = host.indexOf("]");
12
+ if (end !== -1) {
13
+ return host.slice(1, end);
14
+ }
15
+ }
16
+ const [name] = host.split(":");
17
+ return name ?? "";
18
+ }
19
+ function parseOrigin(originRaw) {
20
+ const trimmed = (originRaw ?? "").trim();
21
+ if (!trimmed || trimmed === "null") {
22
+ return null;
23
+ }
24
+ try {
25
+ const url = new URL(trimmed);
26
+ return {
27
+ origin: url.origin.toLowerCase(),
28
+ host: url.host.toLowerCase(),
29
+ hostname: url.hostname.toLowerCase(),
30
+ };
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ export function checkBrowserOrigin(params) {
37
+ const parsedOrigin = parseOrigin(params.origin);
38
+ if (!parsedOrigin) {
39
+ return { ok: false, reason: "origin missing or invalid" };
40
+ }
41
+ const allowlist = (params.allowedOrigins ?? [])
42
+ .map((value) => value.trim().toLowerCase())
43
+ .filter(Boolean);
44
+ if (allowlist.includes(parsedOrigin.origin)) {
45
+ return { ok: true };
46
+ }
47
+ const requestHost = normalizeHostHeader(params.requestHost);
48
+ if (requestHost && parsedOrigin.host === requestHost) {
49
+ return { ok: true };
50
+ }
51
+ const requestHostname = resolveHostName(requestHost);
52
+ if (isLoopbackHost(parsedOrigin.hostname) && isLoopbackHost(requestHostname)) {
53
+ return { ok: true };
54
+ }
55
+ return { ok: false, reason: "origin not allowed" };
56
+ }
@@ -23,6 +23,9 @@ export const GATEWAY_CLIENT_MODES = {
23
23
  PROBE: "probe",
24
24
  TEST: "test",
25
25
  };
26
+ export const GATEWAY_CLIENT_CAPS = {
27
+ TOOL_EVENTS: "tool-events",
28
+ };
26
29
  const GATEWAY_CLIENT_ID_SET = new Set(Object.values(GATEWAY_CLIENT_IDS));
27
30
  const GATEWAY_CLIENT_MODE_SET = new Set(Object.values(GATEWAY_CLIENT_MODES));
28
31
  export function normalizeGatewayClientId(raw) {
@@ -44,3 +47,9 @@ export function normalizeGatewayClientMode(raw) {
44
47
  ? normalized
45
48
  : undefined;
46
49
  }
50
+ export function hasGatewayClientCap(caps, cap) {
51
+ if (!Array.isArray(caps)) {
52
+ return false;
53
+ }
54
+ return caps.includes(cap);
55
+ }
@@ -1,5 +1,5 @@
1
1
  import AjvPkg from "ajv";
2
- import { AgentEventSchema, AgentIdentityParamsSchema, AgentIdentityResultSchema, AgentParamsSchema, AgentSummarySchema, AgentsListParamsSchema, AgentsListResultSchema, AgentWaitParamsSchema, ChannelsLogoutParamsSchema, ChannelsStatusParamsSchema, ChannelsStatusResultSchema, ChatAbortParamsSchema, ChatEventSchema, ChatHistoryParamsSchema, ChatInjectParamsSchema, ChatSendParamsSchema, ConfigApplyParamsSchema, ConfigGetParamsSchema, ConfigPatchParamsSchema, ConfigSchemaParamsSchema, ConfigSchemaResponseSchema, ConfigSetParamsSchema, ConnectParamsSchema, CronAddParamsSchema, CronJobSchema, CronListParamsSchema, CronRemoveParamsSchema, CronRunParamsSchema, CronRunsParamsSchema, CronStatusParamsSchema, CronUpdateParamsSchema, DevicePairApproveParamsSchema, DevicePairListParamsSchema, DevicePairRejectParamsSchema, DeviceTokenRevokeParamsSchema, DeviceTokenRotateParamsSchema, ExecApprovalsGetParamsSchema, ExecApprovalsNodeGetParamsSchema, ExecApprovalsNodeSetParamsSchema, ExecApprovalsSetParamsSchema, ExecApprovalRequestParamsSchema, ExecApprovalResolveParamsSchema, ErrorCodes, ErrorShapeSchema, EventFrameSchema, errorShape, GatewayFrameSchema, HelloOkSchema, LogsTailParamsSchema, LogsTailResultSchema, ModelsListParamsSchema, NodeDescribeParamsSchema, NodeEventParamsSchema, NodeInvokeParamsSchema, NodeInvokeResultParamsSchema, NodeListParamsSchema, NodePairApproveParamsSchema, NodePairListParamsSchema, NodePairRejectParamsSchema, NodePairRequestParamsSchema, NodePairVerifyParamsSchema, NodeRenameParamsSchema, PollParamsSchema, PROTOCOL_VERSION, PresenceEntrySchema, ProtocolSchemas, RequestFrameSchema, ResponseFrameSchema, SendParamsSchema, SessionsCompactParamsSchema, SessionsDeleteParamsSchema, SessionsListParamsSchema, SessionsPatchParamsSchema, SessionsPreviewParamsSchema, SessionsResetParamsSchema, SessionsResolveParamsSchema, ShutdownEventSchema, SkillsBinsParamsSchema, SkillsInstallParamsSchema, SkillsStatusParamsSchema, SkillsUpdateParamsSchema, SnapshotSchema, StateVersionSchema, TalkModeParamsSchema, TickEventSchema, UpdateRunParamsSchema, WakeParamsSchema, WebLoginStartParamsSchema, WebLoginWaitParamsSchema, WizardCancelParamsSchema, WizardNextParamsSchema, WizardNextResultSchema, WizardStartParamsSchema, WizardStartResultSchema, WizardStatusParamsSchema, WizardStatusResultSchema, WizardStepSchema, } from "./schema.js";
2
+ import { AgentEventSchema, AgentIdentityParamsSchema, AgentIdentityResultSchema, AgentParamsSchema, AgentSummarySchema, AgentsFileEntrySchema, AgentsCreateParamsSchema, AgentsCreateResultSchema, AgentsUpdateParamsSchema, AgentsUpdateResultSchema, AgentsDeleteParamsSchema, AgentsDeleteResultSchema, AgentsFilesGetParamsSchema, AgentsFilesGetResultSchema, AgentsFilesListParamsSchema, AgentsFilesListResultSchema, AgentsFilesSetParamsSchema, AgentsFilesSetResultSchema, AgentsListParamsSchema, AgentsListResultSchema, AgentWaitParamsSchema, ChannelsLogoutParamsSchema, ChannelsStatusParamsSchema, ChannelsStatusResultSchema, ChatAbortParamsSchema, ChatEventSchema, ChatHistoryParamsSchema, ChatInjectParamsSchema, ChatSendParamsSchema, ConfigApplyParamsSchema, ConfigGetParamsSchema, ConfigPatchParamsSchema, ConfigSchemaParamsSchema, ConfigSchemaResponseSchema, ConfigSetParamsSchema, ConnectParamsSchema, CronAddParamsSchema, CronJobSchema, CronListParamsSchema, CronRemoveParamsSchema, CronRunParamsSchema, CronRunsParamsSchema, CronStatusParamsSchema, CronUpdateParamsSchema, DevicePairApproveParamsSchema, DevicePairListParamsSchema, DevicePairRejectParamsSchema, DeviceTokenRevokeParamsSchema, DeviceTokenRotateParamsSchema, ExecApprovalsGetParamsSchema, ExecApprovalsNodeGetParamsSchema, ExecApprovalsNodeSetParamsSchema, ExecApprovalsSetParamsSchema, ExecApprovalRequestParamsSchema, ExecApprovalResolveParamsSchema, ErrorCodes, ErrorShapeSchema, EventFrameSchema, errorShape, GatewayFrameSchema, HelloOkSchema, LogsTailParamsSchema, LogsTailResultSchema, ModelsListParamsSchema, NodeDescribeParamsSchema, NodeEventParamsSchema, NodeInvokeParamsSchema, NodeInvokeResultParamsSchema, NodeListParamsSchema, NodePairApproveParamsSchema, NodePairListParamsSchema, NodePairRejectParamsSchema, NodePairRequestParamsSchema, NodePairVerifyParamsSchema, NodeRenameParamsSchema, PollParamsSchema, PROTOCOL_VERSION, PresenceEntrySchema, ProtocolSchemas, RequestFrameSchema, ResponseFrameSchema, SendParamsSchema, SessionsCompactParamsSchema, SessionsDeleteParamsSchema, SessionsListParamsSchema, SessionsPatchParamsSchema, SessionsPreviewParamsSchema, SessionsResetParamsSchema, SessionsResolveParamsSchema, SessionsUsageParamsSchema, ShutdownEventSchema, SkillsBinsParamsSchema, SkillsInstallParamsSchema, SkillsStatusParamsSchema, SkillsUpdateParamsSchema, SnapshotSchema, StateVersionSchema, TalkModeParamsSchema, TickEventSchema, UpdateRunParamsSchema, WakeParamsSchema, WebLoginStartParamsSchema, WebLoginWaitParamsSchema, WizardCancelParamsSchema, WizardNextParamsSchema, WizardNextResultSchema, WizardStartParamsSchema, WizardStartResultSchema, WizardStatusParamsSchema, WizardStatusResultSchema, WizardStepSchema, } from "./schema.js";
3
3
  const ajv = new AjvPkg({
4
4
  allErrors: true,
5
5
  strict: false,
@@ -16,6 +16,12 @@ export const validateAgentIdentityParams = ajv.compile(AgentIdentityParamsSchema
16
16
  export const validateAgentWaitParams = ajv.compile(AgentWaitParamsSchema);
17
17
  export const validateWakeParams = ajv.compile(WakeParamsSchema);
18
18
  export const validateAgentsListParams = ajv.compile(AgentsListParamsSchema);
19
+ export const validateAgentsCreateParams = ajv.compile(AgentsCreateParamsSchema);
20
+ export const validateAgentsUpdateParams = ajv.compile(AgentsUpdateParamsSchema);
21
+ export const validateAgentsDeleteParams = ajv.compile(AgentsDeleteParamsSchema);
22
+ export const validateAgentsFilesListParams = ajv.compile(AgentsFilesListParamsSchema);
23
+ export const validateAgentsFilesGetParams = ajv.compile(AgentsFilesGetParamsSchema);
24
+ export const validateAgentsFilesSetParams = ajv.compile(AgentsFilesSetParamsSchema);
19
25
  export const validateNodePairRequestParams = ajv.compile(NodePairRequestParamsSchema);
20
26
  export const validateNodePairListParams = ajv.compile(NodePairListParamsSchema);
21
27
  export const validateNodePairApproveParams = ajv.compile(NodePairApproveParamsSchema);
@@ -34,6 +40,7 @@ export const validateSessionsPatchParams = ajv.compile(SessionsPatchParamsSchema
34
40
  export const validateSessionsResetParams = ajv.compile(SessionsResetParamsSchema);
35
41
  export const validateSessionsDeleteParams = ajv.compile(SessionsDeleteParamsSchema);
36
42
  export const validateSessionsCompactParams = ajv.compile(SessionsCompactParamsSchema);
43
+ export const validateSessionsUsageParams = ajv.compile(SessionsUsageParamsSchema);
37
44
  export const validateConfigGetParams = ajv.compile(ConfigGetParamsSchema);
38
45
  export const validateConfigSetParams = ajv.compile(ConfigSetParamsSchema);
39
46
  export const validateConfigApplyParams = ajv.compile(ConfigApplyParamsSchema);
@@ -106,4 +113,4 @@ export function formatValidationErrors(errors) {
106
113
  }
107
114
  return unique.join("; ");
108
115
  }
109
- export { ConnectParamsSchema, HelloOkSchema, RequestFrameSchema, ResponseFrameSchema, EventFrameSchema, GatewayFrameSchema, PresenceEntrySchema, SnapshotSchema, ErrorShapeSchema, StateVersionSchema, AgentEventSchema, ChatEventSchema, SendParamsSchema, PollParamsSchema, AgentParamsSchema, AgentIdentityParamsSchema, AgentIdentityResultSchema, WakeParamsSchema, NodePairRequestParamsSchema, NodePairListParamsSchema, NodePairApproveParamsSchema, NodePairRejectParamsSchema, NodePairVerifyParamsSchema, NodeListParamsSchema, NodeInvokeParamsSchema, SessionsListParamsSchema, SessionsPreviewParamsSchema, SessionsPatchParamsSchema, SessionsResetParamsSchema, SessionsDeleteParamsSchema, SessionsCompactParamsSchema, ConfigGetParamsSchema, ConfigSetParamsSchema, ConfigApplyParamsSchema, ConfigPatchParamsSchema, ConfigSchemaParamsSchema, ConfigSchemaResponseSchema, WizardStartParamsSchema, WizardNextParamsSchema, WizardCancelParamsSchema, WizardStatusParamsSchema, WizardStepSchema, WizardNextResultSchema, WizardStartResultSchema, WizardStatusResultSchema, ChannelsStatusParamsSchema, ChannelsStatusResultSchema, ChannelsLogoutParamsSchema, WebLoginStartParamsSchema, WebLoginWaitParamsSchema, AgentSummarySchema, AgentsListParamsSchema, AgentsListResultSchema, ModelsListParamsSchema, SkillsStatusParamsSchema, SkillsInstallParamsSchema, SkillsUpdateParamsSchema, CronJobSchema, CronListParamsSchema, CronStatusParamsSchema, CronAddParamsSchema, CronUpdateParamsSchema, CronRemoveParamsSchema, CronRunParamsSchema, CronRunsParamsSchema, LogsTailParamsSchema, LogsTailResultSchema, ChatHistoryParamsSchema, ChatSendParamsSchema, ChatInjectParamsSchema, UpdateRunParamsSchema, TickEventSchema, ShutdownEventSchema, ProtocolSchemas, PROTOCOL_VERSION, ErrorCodes, errorShape, };
116
+ export { ConnectParamsSchema, HelloOkSchema, RequestFrameSchema, ResponseFrameSchema, EventFrameSchema, GatewayFrameSchema, PresenceEntrySchema, SnapshotSchema, ErrorShapeSchema, StateVersionSchema, AgentEventSchema, ChatEventSchema, SendParamsSchema, PollParamsSchema, AgentParamsSchema, AgentIdentityParamsSchema, AgentIdentityResultSchema, WakeParamsSchema, NodePairRequestParamsSchema, NodePairListParamsSchema, NodePairApproveParamsSchema, NodePairRejectParamsSchema, NodePairVerifyParamsSchema, NodeListParamsSchema, NodeInvokeParamsSchema, SessionsListParamsSchema, SessionsPreviewParamsSchema, SessionsPatchParamsSchema, SessionsResetParamsSchema, SessionsDeleteParamsSchema, SessionsCompactParamsSchema, SessionsUsageParamsSchema, ConfigGetParamsSchema, ConfigSetParamsSchema, ConfigApplyParamsSchema, ConfigPatchParamsSchema, ConfigSchemaParamsSchema, ConfigSchemaResponseSchema, WizardStartParamsSchema, WizardNextParamsSchema, WizardCancelParamsSchema, WizardStatusParamsSchema, WizardStepSchema, WizardNextResultSchema, WizardStartResultSchema, WizardStatusResultSchema, ChannelsStatusParamsSchema, ChannelsStatusResultSchema, ChannelsLogoutParamsSchema, WebLoginStartParamsSchema, WebLoginWaitParamsSchema, AgentSummarySchema, AgentsListParamsSchema, AgentsListResultSchema, AgentsFileEntrySchema, AgentsCreateParamsSchema, AgentsCreateResultSchema, AgentsUpdateParamsSchema, AgentsUpdateResultSchema, AgentsDeleteParamsSchema, AgentsDeleteResultSchema, AgentsFilesListParamsSchema, AgentsFilesListResultSchema, AgentsFilesGetParamsSchema, AgentsFilesGetResultSchema, AgentsFilesSetParamsSchema, AgentsFilesSetResultSchema, ModelsListParamsSchema, SkillsStatusParamsSchema, SkillsInstallParamsSchema, SkillsUpdateParamsSchema, CronJobSchema, CronListParamsSchema, CronStatusParamsSchema, CronAddParamsSchema, CronUpdateParamsSchema, CronRemoveParamsSchema, CronRunParamsSchema, CronRunsParamsSchema, LogsTailParamsSchema, LogsTailResultSchema, ChatHistoryParamsSchema, ChatSendParamsSchema, ChatInjectParamsSchema, UpdateRunParamsSchema, TickEventSchema, ShutdownEventSchema, ProtocolSchemas, PROTOCOL_VERSION, ErrorCodes, errorShape, };
@@ -25,11 +25,81 @@ export const AgentsListResultSchema = Type.Object({
25
25
  scope: Type.Union([Type.Literal("per-sender"), Type.Literal("global")]),
26
26
  agents: Type.Array(AgentSummarySchema),
27
27
  }, { additionalProperties: false });
28
+ export const AgentsCreateParamsSchema = Type.Object({
29
+ name: NonEmptyString,
30
+ workspace: NonEmptyString,
31
+ emoji: Type.Optional(Type.String()),
32
+ avatar: Type.Optional(Type.String()),
33
+ }, { additionalProperties: false });
34
+ export const AgentsCreateResultSchema = Type.Object({
35
+ ok: Type.Literal(true),
36
+ agentId: NonEmptyString,
37
+ name: NonEmptyString,
38
+ workspace: NonEmptyString,
39
+ }, { additionalProperties: false });
40
+ export const AgentsUpdateParamsSchema = Type.Object({
41
+ agentId: NonEmptyString,
42
+ name: Type.Optional(NonEmptyString),
43
+ workspace: Type.Optional(NonEmptyString),
44
+ model: Type.Optional(NonEmptyString),
45
+ avatar: Type.Optional(Type.String()),
46
+ }, { additionalProperties: false });
47
+ export const AgentsUpdateResultSchema = Type.Object({
48
+ ok: Type.Literal(true),
49
+ agentId: NonEmptyString,
50
+ }, { additionalProperties: false });
51
+ export const AgentsDeleteParamsSchema = Type.Object({
52
+ agentId: NonEmptyString,
53
+ deleteFiles: Type.Optional(Type.Boolean()),
54
+ }, { additionalProperties: false });
55
+ export const AgentsDeleteResultSchema = Type.Object({
56
+ ok: Type.Literal(true),
57
+ agentId: NonEmptyString,
58
+ removedBindings: Type.Integer({ minimum: 0 }),
59
+ }, { additionalProperties: false });
60
+ export const AgentsFileEntrySchema = Type.Object({
61
+ name: NonEmptyString,
62
+ path: NonEmptyString,
63
+ missing: Type.Boolean(),
64
+ size: Type.Optional(Type.Integer({ minimum: 0 })),
65
+ updatedAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
66
+ content: Type.Optional(Type.String()),
67
+ }, { additionalProperties: false });
68
+ export const AgentsFilesListParamsSchema = Type.Object({
69
+ agentId: NonEmptyString,
70
+ }, { additionalProperties: false });
71
+ export const AgentsFilesListResultSchema = Type.Object({
72
+ agentId: NonEmptyString,
73
+ workspace: NonEmptyString,
74
+ files: Type.Array(AgentsFileEntrySchema),
75
+ }, { additionalProperties: false });
76
+ export const AgentsFilesGetParamsSchema = Type.Object({
77
+ agentId: NonEmptyString,
78
+ name: NonEmptyString,
79
+ }, { additionalProperties: false });
80
+ export const AgentsFilesGetResultSchema = Type.Object({
81
+ agentId: NonEmptyString,
82
+ workspace: NonEmptyString,
83
+ file: AgentsFileEntrySchema,
84
+ }, { additionalProperties: false });
85
+ export const AgentsFilesSetParamsSchema = Type.Object({
86
+ agentId: NonEmptyString,
87
+ name: NonEmptyString,
88
+ content: Type.String(),
89
+ }, { additionalProperties: false });
90
+ export const AgentsFilesSetResultSchema = Type.Object({
91
+ ok: Type.Literal(true),
92
+ agentId: NonEmptyString,
93
+ workspace: NonEmptyString,
94
+ file: AgentsFileEntrySchema,
95
+ }, { additionalProperties: false });
28
96
  export const ModelsListParamsSchema = Type.Object({}, { additionalProperties: false });
29
97
  export const ModelsListResultSchema = Type.Object({
30
98
  models: Type.Array(ModelChoiceSchema),
31
99
  }, { additionalProperties: false });
32
- export const SkillsStatusParamsSchema = Type.Object({}, { additionalProperties: false });
100
+ export const SkillsStatusParamsSchema = Type.Object({
101
+ agentId: Type.Optional(NonEmptyString),
102
+ }, { additionalProperties: false });
33
103
  export const SkillsBinsParamsSchema = Type.Object({}, { additionalProperties: false });
34
104
  export const SkillsBinsResultSchema = Type.Object({
35
105
  bins: Type.Array(NonEmptyString),
@@ -3,7 +3,7 @@ import { NonEmptyString } from "./primitives.js";
3
3
  export const CronScheduleSchema = Type.Union([
4
4
  Type.Object({
5
5
  kind: Type.Literal("at"),
6
- atMs: Type.Integer({ minimum: 0 }),
6
+ at: NonEmptyString,
7
7
  }, { additionalProperties: false }),
8
8
  Type.Object({
9
9
  kind: Type.Literal("every"),
@@ -27,8 +27,9 @@ export const CronPayloadSchema = Type.Union([
27
27
  model: Type.Optional(Type.String()),
28
28
  thinking: Type.Optional(Type.String()),
29
29
  timeoutSeconds: Type.Optional(Type.Integer({ minimum: 1 })),
30
+ allowUnsafeExternalContent: Type.Optional(Type.Boolean()),
30
31
  deliver: Type.Optional(Type.Boolean()),
31
- channel: Type.Optional(Type.Union([Type.Literal("last"), NonEmptyString])),
32
+ channel: Type.Optional(Type.String()),
32
33
  to: Type.Optional(Type.String()),
33
34
  bestEffortDeliver: Type.Optional(Type.Boolean()),
34
35
  }, { additionalProperties: false }),
@@ -44,16 +45,24 @@ export const CronPayloadPatchSchema = Type.Union([
44
45
  model: Type.Optional(Type.String()),
45
46
  thinking: Type.Optional(Type.String()),
46
47
  timeoutSeconds: Type.Optional(Type.Integer({ minimum: 1 })),
48
+ allowUnsafeExternalContent: Type.Optional(Type.Boolean()),
47
49
  deliver: Type.Optional(Type.Boolean()),
48
- channel: Type.Optional(Type.Union([Type.Literal("last"), NonEmptyString])),
50
+ channel: Type.Optional(Type.String()),
49
51
  to: Type.Optional(Type.String()),
50
52
  bestEffortDeliver: Type.Optional(Type.Boolean()),
51
53
  }, { additionalProperties: false }),
52
54
  ]);
53
- export const CronIsolationSchema = Type.Object({
54
- postToMainPrefix: Type.Optional(Type.String()),
55
- postToMainMode: Type.Optional(Type.Union([Type.Literal("summary"), Type.Literal("full")])),
56
- postToMainMaxChars: Type.Optional(Type.Integer({ minimum: 0 })),
55
+ export const CronDeliverySchema = Type.Object({
56
+ mode: Type.Union([Type.Literal("none"), Type.Literal("announce")]),
57
+ channel: Type.Optional(Type.Union([Type.Literal("last"), NonEmptyString])),
58
+ to: Type.Optional(Type.String()),
59
+ bestEffort: Type.Optional(Type.Boolean()),
60
+ }, { additionalProperties: false });
61
+ export const CronDeliveryPatchSchema = Type.Object({
62
+ mode: Type.Optional(Type.Union([Type.Literal("none"), Type.Literal("announce")])),
63
+ channel: Type.Optional(Type.Union([Type.Literal("last"), NonEmptyString])),
64
+ to: Type.Optional(Type.String()),
65
+ bestEffort: Type.Optional(Type.Boolean()),
57
66
  }, { additionalProperties: false });
58
67
  export const CronJobStateSchema = Type.Object({
59
68
  nextRunAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
@@ -62,6 +71,7 @@ export const CronJobStateSchema = Type.Object({
62
71
  lastStatus: Type.Optional(Type.Union([Type.Literal("ok"), Type.Literal("error"), Type.Literal("skipped")])),
63
72
  lastError: Type.Optional(Type.String()),
64
73
  lastDurationMs: Type.Optional(Type.Integer({ minimum: 0 })),
74
+ consecutiveErrors: Type.Optional(Type.Integer({ minimum: 0 })),
65
75
  }, { additionalProperties: false });
66
76
  export const CronJobSchema = Type.Object({
67
77
  id: NonEmptyString,
@@ -76,7 +86,7 @@ export const CronJobSchema = Type.Object({
76
86
  sessionTarget: Type.Union([Type.Literal("main"), Type.Literal("isolated")]),
77
87
  wakeMode: Type.Union([Type.Literal("next-heartbeat"), Type.Literal("now")]),
78
88
  payload: CronPayloadSchema,
79
- isolation: Type.Optional(CronIsolationSchema),
89
+ delivery: Type.Optional(CronDeliverySchema),
80
90
  state: CronJobStateSchema,
81
91
  }, { additionalProperties: false });
82
92
  export const CronListParamsSchema = Type.Object({
@@ -93,7 +103,7 @@ export const CronAddParamsSchema = Type.Object({
93
103
  sessionTarget: Type.Union([Type.Literal("main"), Type.Literal("isolated")]),
94
104
  wakeMode: Type.Union([Type.Literal("next-heartbeat"), Type.Literal("now")]),
95
105
  payload: CronPayloadSchema,
96
- isolation: Type.Optional(CronIsolationSchema),
106
+ delivery: Type.Optional(CronDeliverySchema),
97
107
  }, { additionalProperties: false });
98
108
  export const CronJobPatchSchema = Type.Object({
99
109
  name: Type.Optional(NonEmptyString),
@@ -105,7 +115,7 @@ export const CronJobPatchSchema = Type.Object({
105
115
  sessionTarget: Type.Optional(Type.Union([Type.Literal("main"), Type.Literal("isolated")])),
106
116
  wakeMode: Type.Optional(Type.Union([Type.Literal("next-heartbeat"), Type.Literal("now")])),
107
117
  payload: Type.Optional(CronPayloadPatchSchema),
108
- isolation: Type.Optional(CronIsolationSchema),
118
+ delivery: Type.Optional(CronDeliveryPatchSchema),
109
119
  state: Type.Optional(Type.Partial(CronJobStateSchema)),
110
120
  }, { additionalProperties: false });
111
121
  export const CronUpdateParamsSchema = Type.Union([
@@ -153,6 +163,8 @@ export const CronRunLogEntrySchema = Type.Object({
153
163
  status: Type.Optional(Type.Union([Type.Literal("ok"), Type.Literal("error"), Type.Literal("skipped")])),
154
164
  error: Type.Optional(Type.String()),
155
165
  summary: Type.Optional(Type.String()),
166
+ sessionId: Type.Optional(NonEmptyString),
167
+ sessionKey: Type.Optional(NonEmptyString),
156
168
  runAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
157
169
  durationMs: Type.Optional(Type.Integer({ minimum: 0 })),
158
170
  nextRunAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
@@ -1,5 +1,5 @@
1
1
  import { AgentEventSchema, AgentIdentityParamsSchema, AgentIdentityResultSchema, AgentParamsSchema, AgentWaitParamsSchema, PollParamsSchema, SendParamsSchema, WakeParamsSchema, } from "./agent.js";
2
- import { AgentSummarySchema, AgentsListParamsSchema, AgentsListResultSchema, ModelChoiceSchema, ModelsListParamsSchema, ModelsListResultSchema, SkillsBinsParamsSchema, SkillsBinsResultSchema, SkillsInstallParamsSchema, SkillsStatusParamsSchema, SkillsUpdateParamsSchema, } from "./agents-models-skills.js";
2
+ import { AgentSummarySchema, AgentsCreateParamsSchema, AgentsCreateResultSchema, AgentsDeleteParamsSchema, AgentsDeleteResultSchema, AgentsFileEntrySchema, AgentsFilesGetParamsSchema, AgentsFilesGetResultSchema, AgentsFilesListParamsSchema, AgentsFilesListResultSchema, AgentsFilesSetParamsSchema, AgentsFilesSetResultSchema, AgentsListParamsSchema, AgentsListResultSchema, AgentsUpdateParamsSchema, AgentsUpdateResultSchema, ModelChoiceSchema, ModelsListParamsSchema, ModelsListResultSchema, SkillsBinsParamsSchema, SkillsBinsResultSchema, SkillsInstallParamsSchema, SkillsStatusParamsSchema, SkillsUpdateParamsSchema, } from "./agents-models-skills.js";
3
3
  import { ChannelsLogoutParamsSchema, ChannelsStatusParamsSchema, ChannelsStatusResultSchema, TalkModeParamsSchema, WebLoginStartParamsSchema, WebLoginWaitParamsSchema, } from "./channels.js";
4
4
  import { ConfigApplyParamsSchema, ConfigGetParamsSchema, ConfigPatchParamsSchema, ConfigSchemaParamsSchema, ConfigSchemaResponseSchema, ConfigSetParamsSchema, UpdateRunParamsSchema, } from "./config.js";
5
5
  import { CronAddParamsSchema, CronJobSchema, CronListParamsSchema, CronRemoveParamsSchema, CronRunLogEntrySchema, CronRunParamsSchema, CronRunsParamsSchema, CronStatusParamsSchema, CronUpdateParamsSchema, } from "./cron.js";
@@ -8,7 +8,7 @@ import { DevicePairApproveParamsSchema, DevicePairListParamsSchema, DevicePairRe
8
8
  import { ConnectParamsSchema, ErrorShapeSchema, EventFrameSchema, GatewayFrameSchema, HelloOkSchema, RequestFrameSchema, ResponseFrameSchema, ShutdownEventSchema, TickEventSchema, } from "./frames.js";
9
9
  import { ChatAbortParamsSchema, ChatEventSchema, ChatHistoryParamsSchema, ChatInjectParamsSchema, ChatSendParamsSchema, LogsTailParamsSchema, LogsTailResultSchema, } from "./logs-chat.js";
10
10
  import { NodeDescribeParamsSchema, NodeEventParamsSchema, NodeInvokeParamsSchema, NodeInvokeResultParamsSchema, NodeInvokeRequestEventSchema, NodeListParamsSchema, NodePairApproveParamsSchema, NodePairListParamsSchema, NodePairRejectParamsSchema, NodePairRequestParamsSchema, NodePairVerifyParamsSchema, NodeRenameParamsSchema, } from "./nodes.js";
11
- import { SessionsCompactParamsSchema, SessionsDeleteParamsSchema, SessionsListParamsSchema, SessionsPatchParamsSchema, SessionsPreviewParamsSchema, SessionsResetParamsSchema, SessionsResolveParamsSchema, } from "./sessions.js";
11
+ import { SessionsCompactParamsSchema, SessionsDeleteParamsSchema, SessionsListParamsSchema, SessionsPatchParamsSchema, SessionsPreviewParamsSchema, SessionsResetParamsSchema, SessionsResolveParamsSchema, SessionsUsageParamsSchema, } from "./sessions.js";
12
12
  import { PresenceEntrySchema, SnapshotSchema, StateVersionSchema } from "./snapshot.js";
13
13
  import { WizardCancelParamsSchema, WizardNextParamsSchema, WizardNextResultSchema, WizardStartParamsSchema, WizardStartResultSchema, WizardStatusParamsSchema, WizardStatusResultSchema, WizardStepSchema, } from "./wizard.js";
14
14
  export const ProtocolSchemas = {
@@ -49,6 +49,7 @@ export const ProtocolSchemas = {
49
49
  SessionsResetParams: SessionsResetParamsSchema,
50
50
  SessionsDeleteParams: SessionsDeleteParamsSchema,
51
51
  SessionsCompactParams: SessionsCompactParamsSchema,
52
+ SessionsUsageParams: SessionsUsageParamsSchema,
52
53
  ConfigGetParams: ConfigGetParamsSchema,
53
54
  ConfigSetParams: ConfigSetParamsSchema,
54
55
  ConfigApplyParams: ConfigApplyParamsSchema,
@@ -72,6 +73,19 @@ export const ProtocolSchemas = {
72
73
  AgentSummary: AgentSummarySchema,
73
74
  AgentsListParams: AgentsListParamsSchema,
74
75
  AgentsListResult: AgentsListResultSchema,
76
+ AgentsCreateParams: AgentsCreateParamsSchema,
77
+ AgentsCreateResult: AgentsCreateResultSchema,
78
+ AgentsUpdateParams: AgentsUpdateParamsSchema,
79
+ AgentsUpdateResult: AgentsUpdateResultSchema,
80
+ AgentsDeleteParams: AgentsDeleteParamsSchema,
81
+ AgentsDeleteResult: AgentsDeleteResultSchema,
82
+ AgentsFileEntry: AgentsFileEntrySchema,
83
+ AgentsFilesListParams: AgentsFilesListParamsSchema,
84
+ AgentsFilesListResult: AgentsFilesListResultSchema,
85
+ AgentsFilesGetParams: AgentsFilesGetParamsSchema,
86
+ AgentsFilesGetResult: AgentsFilesGetResultSchema,
87
+ AgentsFilesSetParams: AgentsFilesSetParamsSchema,
88
+ AgentsFilesSetResult: AgentsFilesSetResultSchema,
75
89
  ModelChoice: ModelChoiceSchema,
76
90
  ModelsListParams: ModelsListParamsSchema,
77
91
  ModelsListResult: ModelsListResultSchema,
@@ -67,3 +67,15 @@ export const SessionsCompactParamsSchema = Type.Object({
67
67
  key: NonEmptyString,
68
68
  maxLines: Type.Optional(Type.Integer({ minimum: 1 })),
69
69
  }, { additionalProperties: false });
70
+ export const SessionsUsageParamsSchema = Type.Object({
71
+ /** Specific session key to analyze; if omitted returns all sessions. */
72
+ key: Type.Optional(NonEmptyString),
73
+ /** Start date for range filter (YYYY-MM-DD). */
74
+ startDate: Type.Optional(Type.String({ pattern: "^\\d{4}-\\d{2}-\\d{2}$" })),
75
+ /** End date for range filter (YYYY-MM-DD). */
76
+ endDate: Type.Optional(Type.String({ pattern: "^\\d{4}-\\d{2}-\\d{2}$" })),
77
+ /** Maximum sessions to return (default 50). */
78
+ limit: Type.Optional(Type.Integer({ minimum: 1 })),
79
+ /** Include context weight breakdown (systemPromptReport). */
80
+ includeContextWeight: Type.Optional(Type.Boolean()),
81
+ }, { additionalProperties: false });
@@ -25,7 +25,7 @@ export function createGatewayHooksRequestHandler(params) {
25
25
  enabled: true,
26
26
  createdAtMs: now,
27
27
  updatedAtMs: now,
28
- schedule: { kind: "at", atMs: now },
28
+ schedule: { kind: "at", at: new Date(now).toISOString() },
29
29
  sessionTarget: "isolated",
30
30
  wakeMode: value.wakeMode,
31
31
  payload: {
@@ -13,20 +13,24 @@ const EVENT_SCOPE_GUARDS = {
13
13
  };
14
14
  function hasEventScope(client, event) {
15
15
  const required = EVENT_SCOPE_GUARDS[event];
16
- if (!required)
16
+ if (!required) {
17
17
  return true;
18
+ }
18
19
  const role = client.connect.role ?? "operator";
19
- if (role !== "operator")
20
+ if (role !== "operator") {
20
21
  return false;
22
+ }
21
23
  const scopes = Array.isArray(client.connect.scopes) ? client.connect.scopes : [];
22
- if (scopes.includes(ADMIN_SCOPE))
24
+ if (scopes.includes(ADMIN_SCOPE)) {
23
25
  return true;
26
+ }
24
27
  return required.some((scope) => scopes.includes(scope));
25
28
  }
26
29
  export function createGatewayBroadcaster(params) {
27
30
  let seq = 0;
28
- const broadcast = (event, payload, opts) => {
29
- const eventSeq = ++seq;
31
+ const broadcastInternal = (event, payload, opts, targetConnIds) => {
32
+ const isTargeted = Boolean(targetConnIds);
33
+ const eventSeq = isTargeted ? undefined : ++seq;
30
34
  const frame = JSON.stringify({
31
35
  type: "event",
32
36
  event,
@@ -36,8 +40,9 @@ export function createGatewayBroadcaster(params) {
36
40
  });
37
41
  const logMeta = {
38
42
  event,
39
- seq: eventSeq,
43
+ seq: eventSeq ?? "targeted",
40
44
  clients: params.clients.size,
45
+ targets: targetConnIds ? targetConnIds.size : undefined,
41
46
  dropIfSlow: opts?.dropIfSlow,
42
47
  presenceVersion: opts?.stateVersion?.presence,
43
48
  healthVersion: opts?.stateVersion?.health,
@@ -47,11 +52,16 @@ export function createGatewayBroadcaster(params) {
47
52
  }
48
53
  logWs("out", "event", logMeta);
49
54
  for (const c of params.clients) {
50
- if (!hasEventScope(c, event))
55
+ if (targetConnIds && !targetConnIds.has(c.connId)) {
56
+ continue;
57
+ }
58
+ if (!hasEventScope(c, event)) {
51
59
  continue;
60
+ }
52
61
  const slow = c.socket.bufferedAmount > MAX_BUFFERED_BYTES;
53
- if (slow && opts?.dropIfSlow)
62
+ if (slow && opts?.dropIfSlow) {
54
63
  continue;
64
+ }
55
65
  if (slow) {
56
66
  try {
57
67
  c.socket.close(1008, "slow consumer");
@@ -69,5 +79,12 @@ export function createGatewayBroadcaster(params) {
69
79
  }
70
80
  }
71
81
  };
72
- return { broadcast };
82
+ const broadcast = (event, payload, opts) => broadcastInternal(event, payload, opts);
83
+ const broadcastToConnIds = (event, payload, connIds, opts) => {
84
+ if (connIds.size === 0) {
85
+ return;
86
+ }
87
+ broadcastInternal(event, payload, opts, connIds);
88
+ };
89
+ return { broadcast, broadcastToConnIds };
73
90
  }