@poolzin/pool-bot 2026.2.24 → 2026.2.26

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 (646) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/acp/client.js +207 -18
  3. package/dist/acp/event-mapper.js +87 -22
  4. package/dist/acp/meta.js +12 -6
  5. package/dist/acp/secret-file.js +22 -0
  6. package/dist/agents/agent-paths.js +8 -9
  7. package/dist/agents/agent-scope.js +17 -5
  8. package/dist/agents/auth-profiles/oauth.js +148 -64
  9. package/dist/agents/auth-profiles/session-override.js +13 -7
  10. package/dist/agents/bash-process-registry.test-helpers.js +29 -0
  11. package/dist/agents/bash-tools.exec-approval-request.js +20 -0
  12. package/dist/agents/bash-tools.exec-host-gateway.js +240 -0
  13. package/dist/agents/bash-tools.exec-host-node.js +235 -0
  14. package/dist/agents/bash-tools.exec-runtime.js +2 -25
  15. package/dist/agents/bash-tools.exec-types.js +1 -0
  16. package/dist/agents/bash-tools.process.js +224 -218
  17. package/dist/agents/bedrock-discovery.js +3 -1
  18. package/dist/agents/byteplus-models.js +97 -0
  19. package/dist/agents/chutes-oauth.js +1 -0
  20. package/dist/agents/cli-runner/helpers.js +4 -0
  21. package/dist/agents/compaction.js +41 -14
  22. package/dist/agents/content-blocks.js +16 -0
  23. package/dist/agents/doubao-models.js +121 -0
  24. package/dist/agents/failover-error.js +2 -0
  25. package/dist/agents/huggingface-models.js +5 -3
  26. package/dist/agents/live-model-filter.js +5 -0
  27. package/dist/agents/minimax-vlm.js +10 -8
  28. package/dist/agents/model-auth.js +6 -0
  29. package/dist/agents/model-catalog.js +3 -1
  30. package/dist/agents/model-fallback.js +96 -101
  31. package/dist/agents/model-selection.js +7 -1
  32. package/dist/agents/models-config.providers.js +364 -165
  33. package/dist/agents/ollama-stream.js +117 -4
  34. package/dist/agents/opencode-zen-models.js +22 -11
  35. package/dist/agents/pi-embedded-helpers/errors.js +55 -33
  36. package/dist/agents/pi-embedded-helpers/messaging-dedupe.js +10 -5
  37. package/dist/agents/pi-embedded-helpers/thinking.js +10 -5
  38. package/dist/agents/pi-embedded-helpers.js +1 -1
  39. package/dist/agents/pi-embedded-payloads.js +1 -0
  40. package/dist/agents/pi-embedded-runner/compact.js +29 -7
  41. package/dist/agents/pi-embedded-runner/extensions.js +28 -26
  42. package/dist/agents/pi-embedded-runner/google.js +20 -8
  43. package/dist/agents/pi-embedded-runner/run/attempt.js +95 -36
  44. package/dist/agents/pi-embedded-runner/run.js +71 -12
  45. package/dist/agents/pi-embedded-runner/run.overflow-compaction.fixture.js +34 -0
  46. package/dist/agents/pi-embedded-runner/run.overflow-compaction.mocks.shared.js +11 -2
  47. package/dist/agents/pi-embedded-runner/session-manager-cache.js +11 -7
  48. package/dist/agents/pi-embedded-runner/system-prompt.js +2 -0
  49. package/dist/agents/pi-embedded-runner/thinking.js +42 -0
  50. package/dist/agents/pi-embedded-runner/tool-name-allowlist.js +19 -0
  51. package/dist/agents/pi-embedded-runner/utils.js +7 -10
  52. package/dist/agents/pi-embedded-subscribe.handlers.lifecycle.js +45 -56
  53. package/dist/agents/pi-embedded-subscribe.handlers.tools.js +2 -2
  54. package/dist/agents/pi-embedded-subscribe.js +9 -4
  55. package/dist/agents/pi-embedded-subscribe.tools.js +68 -14
  56. package/dist/agents/pi-embedded-utils.js +3 -0
  57. package/dist/agents/pi-extensions/compaction-safeguard-runtime.js +4 -20
  58. package/dist/agents/pi-extensions/compaction-safeguard.js +75 -33
  59. package/dist/agents/pi-settings.js +40 -0
  60. package/dist/agents/pi-tools.policy.js +2 -1
  61. package/dist/agents/provider/config-loader.js +1 -1
  62. package/dist/agents/sandbox/browser.js +170 -33
  63. package/dist/agents/sandbox/config-hash.js +14 -27
  64. package/dist/agents/sandbox/config.js +21 -2
  65. package/dist/agents/sandbox/constants.js +2 -0
  66. package/dist/agents/sandbox/docker.js +16 -2
  67. package/dist/agents/sandbox/novnc-auth.js +62 -0
  68. package/dist/agents/sandbox/sanitize-env-vars.js +1 -1
  69. package/dist/agents/sandbox/shared.js +10 -6
  70. package/dist/agents/sandbox-paths.js +24 -11
  71. package/dist/agents/schema/clean-for-gemini.js +132 -85
  72. package/dist/agents/session-slug.js +10 -5
  73. package/dist/agents/session-tool-result-guard-wrapper.js +1 -0
  74. package/dist/agents/session-tool-result-guard.js +3 -1
  75. package/dist/agents/session-transcript-repair.js +40 -6
  76. package/dist/agents/skills/bundled-dir.js +19 -5
  77. package/dist/agents/skills/env-overrides.js +124 -43
  78. package/dist/agents/skills/frontmatter.js +6 -6
  79. package/dist/agents/skills/plugin-skills.js +14 -7
  80. package/dist/agents/skills/workspace.js +1 -0
  81. package/dist/agents/skills.test-helpers.js +13 -0
  82. package/dist/agents/stable-stringify.js +12 -0
  83. package/dist/agents/subagent-announce.js +251 -49
  84. package/dist/agents/subagent-lifecycle-events.js +19 -0
  85. package/dist/agents/subagent-registry-cleanup.js +31 -0
  86. package/dist/agents/subagent-registry-completion.js +68 -0
  87. package/dist/agents/subagent-registry-queries.js +117 -0
  88. package/dist/agents/subagent-registry-state.js +46 -0
  89. package/dist/agents/subagent-registry.js +252 -221
  90. package/dist/agents/subagent-registry.mocks.shared.js +12 -0
  91. package/dist/agents/subagent-registry.store.js +1 -0
  92. package/dist/agents/subagent-registry.types.js +1 -0
  93. package/dist/agents/subagent-spawn.js +195 -7
  94. package/dist/agents/system-prompt.js +22 -6
  95. package/dist/agents/test-helpers/assistant-message-fixtures.js +29 -0
  96. package/dist/agents/test-helpers/fast-coding-tools.js +1 -18
  97. package/dist/agents/test-helpers/fast-core-tools.js +1 -17
  98. package/dist/agents/test-helpers/pi-tools-sandbox-context.js +27 -0
  99. package/dist/agents/timeout.js +18 -6
  100. package/dist/agents/tool-call-id.js +1 -1
  101. package/dist/agents/tool-display-common.js +162 -29
  102. package/dist/agents/tool-images.js +82 -9
  103. package/dist/agents/tool-policy-shared.js +108 -0
  104. package/dist/agents/tool-policy.js +51 -26
  105. package/dist/agents/tools/browser-tool.js +160 -54
  106. package/dist/agents/tools/canvas-tool.js +27 -1
  107. package/dist/agents/tools/common.js +45 -0
  108. package/dist/agents/tools/cron-tool.test-helpers.js +12 -0
  109. package/dist/agents/tools/discord-actions-guild.js +4 -1
  110. package/dist/agents/tools/discord-actions-moderation-shared.js +27 -0
  111. package/dist/agents/tools/gateway-tool.js +3 -1
  112. package/dist/agents/tools/image-tool.js +214 -99
  113. package/dist/agents/tools/nodes-utils.js +1 -10
  114. package/dist/agents/tools/sessions-history-tool.js +140 -108
  115. package/dist/agents/tools/sessions-send-helpers.js +12 -6
  116. package/dist/agents/tools/sessions-spawn-tool.js +8 -2
  117. package/dist/agents/tools/subagents-tool.js +2 -1
  118. package/dist/agents/tools/whatsapp-actions.js +10 -2
  119. package/dist/agents/tools/whatsapp-target-auth.js +18 -0
  120. package/dist/agents/transcript-policy.js +22 -8
  121. package/dist/agents/venice-models.js +11 -3
  122. package/dist/agents/workspace.js +222 -46
  123. package/dist/auto-reply/commands-registry.data.js +51 -0
  124. package/dist/auto-reply/commands-registry.js +19 -21
  125. package/dist/auto-reply/fallback-state.js +114 -0
  126. package/dist/auto-reply/group-activation.js +10 -5
  127. package/dist/auto-reply/inbound-debounce.js +10 -5
  128. package/dist/auto-reply/model-runtime.js +68 -0
  129. package/dist/auto-reply/reply/abort.js +1 -1
  130. package/dist/auto-reply/reply/agent-runner-execution.js +40 -5
  131. package/dist/auto-reply/reply/agent-runner.js +165 -39
  132. package/dist/auto-reply/reply/bash-command.js +41 -39
  133. package/dist/auto-reply/reply/command-gates.js +25 -0
  134. package/dist/auto-reply/reply/commands-allowlist.js +111 -72
  135. package/dist/auto-reply/reply/commands-bash.js +6 -5
  136. package/dist/auto-reply/reply/commands-config.js +30 -28
  137. package/dist/auto-reply/reply/commands-core.js +2 -1
  138. package/dist/auto-reply/reply/commands-info.js +1 -0
  139. package/dist/auto-reply/reply/commands-models.js +65 -14
  140. package/dist/auto-reply/reply/commands-session.js +237 -82
  141. package/dist/auto-reply/reply/commands-setunset-standard.js +13 -0
  142. package/dist/auto-reply/reply/commands-setunset.js +45 -0
  143. package/dist/auto-reply/reply/commands-subagents/action-agents.js +44 -0
  144. package/dist/auto-reply/reply/commands-subagents/action-focus.js +64 -0
  145. package/dist/auto-reply/reply/commands-subagents/action-help.js +4 -0
  146. package/dist/auto-reply/reply/commands-subagents/action-info.js +45 -0
  147. package/dist/auto-reply/reply/commands-subagents/action-kill.js +60 -0
  148. package/dist/auto-reply/reply/commands-subagents/action-list.js +44 -0
  149. package/dist/auto-reply/reply/commands-subagents/action-log.js +29 -0
  150. package/dist/auto-reply/reply/commands-subagents/action-send.js +119 -0
  151. package/dist/auto-reply/reply/commands-subagents/action-spawn.js +52 -0
  152. package/dist/auto-reply/reply/commands-subagents/action-unfocus.js +30 -0
  153. package/dist/auto-reply/reply/commands-subagents/shared.js +303 -0
  154. package/dist/auto-reply/reply/commands-subagents.js +51 -587
  155. package/dist/auto-reply/reply/commands-tts.js +10 -5
  156. package/dist/auto-reply/reply/config-value.js +10 -5
  157. package/dist/auto-reply/reply/directive-handling.model-picker.js +12 -6
  158. package/dist/auto-reply/reply/directive-handling.persist.js +9 -21
  159. package/dist/auto-reply/reply/directive-handling.shared.js +24 -4
  160. package/dist/auto-reply/reply/followup-runner.js +1 -0
  161. package/dist/auto-reply/reply/get-reply-directives-utils.js +23 -14
  162. package/dist/auto-reply/reply/get-reply-directives.js +17 -28
  163. package/dist/auto-reply/reply/get-reply-inline-actions.js +1 -0
  164. package/dist/auto-reply/reply/get-reply.js +71 -12
  165. package/dist/auto-reply/reply/model-selection.js +80 -39
  166. package/dist/auto-reply/reply/queue/enqueue.js +10 -5
  167. package/dist/auto-reply/reply/queue/state.js +13 -12
  168. package/dist/auto-reply/reply/reply-payloads.js +67 -36
  169. package/dist/auto-reply/reply/reply-reference.js +9 -8
  170. package/dist/auto-reply/reply/route-reply.js +15 -8
  171. package/dist/auto-reply/reply/session-reset-prompt.js +1 -1
  172. package/dist/auto-reply/reply/session.js +22 -6
  173. package/dist/auto-reply/reply/strip-inbound-meta.js +147 -0
  174. package/dist/auto-reply/reply/subagents-utils.js +56 -30
  175. package/dist/auto-reply/reply/typing.js +46 -21
  176. package/dist/auto-reply/send-policy.js +14 -7
  177. package/dist/auto-reply/status.js +140 -16
  178. package/dist/auto-reply/templating.js +10 -5
  179. package/dist/auto-reply/thinking.js +7 -16
  180. package/dist/auto-reply/tokens.js +21 -5
  181. package/dist/browser/bridge-server.js +36 -20
  182. package/dist/browser/cdp.helpers.js +7 -14
  183. package/dist/browser/cdp.js +35 -15
  184. package/dist/browser/chrome.profile-decoration.js +7 -4
  185. package/dist/browser/config.js +30 -0
  186. package/dist/browser/extension-relay-auth.js +55 -0
  187. package/dist/browser/extension-relay.js +74 -29
  188. package/dist/browser/navigation-guard.js +39 -0
  189. package/dist/browser/paths.js +77 -0
  190. package/dist/browser/profiles.js +13 -8
  191. package/dist/browser/pw-ai-module.js +10 -5
  192. package/dist/browser/pw-session.js +76 -39
  193. package/dist/browser/pw-tools-core.interactions.js +14 -7
  194. package/dist/browser/pw-tools-core.state.js +12 -6
  195. package/dist/browser/routes/agent.act.js +431 -424
  196. package/dist/browser/routes/agent.shared.js +47 -3
  197. package/dist/browser/routes/agent.snapshot.js +122 -116
  198. package/dist/browser/routes/agent.storage.js +303 -297
  199. package/dist/browser/routes/tabs.js +154 -100
  200. package/dist/browser/server-context.js +7 -0
  201. package/dist/browser/server-lifecycle.js +37 -0
  202. package/dist/build-info.json +3 -3
  203. package/dist/channels/allow-from.js +26 -0
  204. package/dist/channels/allowlists/resolve-utils.js +43 -19
  205. package/dist/channels/channel-config.js +14 -7
  206. package/dist/channels/draft-stream-loop.js +7 -0
  207. package/dist/channels/model-overrides.js +82 -0
  208. package/dist/channels/plugins/account-action-gate.js +13 -0
  209. package/dist/channels/plugins/message-actions.js +10 -0
  210. package/dist/channels/plugins/normalize/imessage.js +14 -7
  211. package/dist/channels/plugins/normalize/slack.js +10 -5
  212. package/dist/channels/plugins/normalize/telegram.js +14 -7
  213. package/dist/channels/plugins/outbound/discord.js +80 -8
  214. package/dist/channels/plugins/outbound/signal.js +11 -11
  215. package/dist/channels/plugins/setup-helpers.js +10 -5
  216. package/dist/channels/sender-label.js +14 -7
  217. package/dist/channels/session.js +4 -2
  218. package/dist/channels/status-reactions.js +297 -0
  219. package/dist/channels/telegram/api.js +18 -0
  220. package/dist/cli/argv.js +84 -21
  221. package/dist/cli/banner.js +3 -2
  222. package/dist/cli/browser-cli-actions-input/register.files-downloads.js +65 -56
  223. package/dist/cli/cli-name.js +11 -11
  224. package/dist/cli/cli-utils.js +13 -3
  225. package/dist/cli/command-format.js +1 -1
  226. package/dist/cli/config-cli.js +1 -1
  227. package/dist/cli/daemon-cli/lifecycle-core.js +31 -19
  228. package/dist/cli/daemon-cli/lifecycle.js +64 -2
  229. package/dist/cli/daemon-cli/restart-health.js +126 -0
  230. package/dist/cli/daemon-cli/status.gather.js +9 -13
  231. package/dist/cli/daemon-cli/status.print.js +2 -10
  232. package/dist/cli/deps.js +27 -22
  233. package/dist/cli/exec-approvals-cli.js +92 -124
  234. package/dist/cli/gateway-cli/run-loop.js +23 -5
  235. package/dist/cli/memory-cli.js +158 -61
  236. package/dist/cli/node-cli/register.js +14 -5
  237. package/dist/cli/nodes-cli/register.push.js +63 -0
  238. package/dist/cli/nodes-media-utils.js +26 -0
  239. package/dist/cli/outbound-send-deps.js +2 -9
  240. package/dist/cli/outbound-send-mapping.js +11 -0
  241. package/dist/cli/pairing-cli.js +40 -14
  242. package/dist/cli/plugins-cli.js +250 -73
  243. package/dist/cli/ports.js +11 -10
  244. package/dist/cli/program/build-program.js +3 -1
  245. package/dist/cli/program/command-registry.js +214 -136
  246. package/dist/cli/program/command-tree.js +16 -0
  247. package/dist/cli/program/help.js +43 -12
  248. package/dist/cli/program/preaction.js +13 -9
  249. package/dist/cli/program/register.configure.js +3 -18
  250. package/dist/cli/program/register.maintenance.js +2 -2
  251. package/dist/cli/program/register.onboard.js +2 -0
  252. package/dist/cli/program/register.status-health-sessions.js +16 -17
  253. package/dist/cli/program/register.subclis.js +93 -52
  254. package/dist/cli/route.js +12 -8
  255. package/dist/cli/system-cli.js +36 -46
  256. package/dist/cli/test-runtime-capture.js +24 -0
  257. package/dist/cli/update-cli/shared.js +22 -9
  258. package/dist/cli/update-cli/update-command.js +89 -14
  259. package/dist/cli/update-cli/wizard.js +6 -12
  260. package/dist/commands/agent/run-context.js +18 -5
  261. package/dist/commands/agent/session-store.js +17 -4
  262. package/dist/commands/agent.js +185 -89
  263. package/dist/commands/agents.bindings.js +14 -7
  264. package/dist/commands/agents.commands.add.js +13 -9
  265. package/dist/commands/agents.commands.identity.js +12 -6
  266. package/dist/commands/agents.commands.list.js +11 -6
  267. package/dist/commands/agents.config.js +8 -10
  268. package/dist/commands/agents.providers.js +12 -6
  269. package/dist/commands/auth-choice-options.js +103 -75
  270. package/dist/commands/auth-choice.apply.byteplus.js +55 -0
  271. package/dist/commands/auth-choice.apply.js +4 -0
  272. package/dist/commands/auth-choice.apply.minimax.js +61 -13
  273. package/dist/commands/auth-choice.apply.openai.js +3 -1
  274. package/dist/commands/auth-choice.apply.volcengine.js +55 -0
  275. package/dist/commands/auth-choice.preferred-provider.js +2 -0
  276. package/dist/commands/channels/remove.js +13 -6
  277. package/dist/commands/channels/shared.js +4 -14
  278. package/dist/commands/channels.mock-harness.js +23 -0
  279. package/dist/commands/configure.commands.js +14 -0
  280. package/dist/commands/configure.gateway.js +2 -4
  281. package/dist/commands/configure.js +1 -1
  282. package/dist/commands/configure.shared.js +11 -0
  283. package/dist/commands/daemon-install-helpers.js +2 -2
  284. package/dist/commands/daemon-install-runtime-warning.js +11 -0
  285. package/dist/commands/dashboard.js +12 -10
  286. package/dist/commands/docs.js +14 -8
  287. package/dist/commands/doctor-config-flow.js +11 -9
  288. package/dist/commands/doctor-legacy-config.js +281 -0
  289. package/dist/commands/doctor-state-integrity.js +99 -23
  290. package/dist/commands/doctor-update.js +12 -9
  291. package/dist/commands/models/list.list-command.js +7 -5
  292. package/dist/commands/models/set-image.js +2 -21
  293. package/dist/commands/node-daemon-install-helpers.js +10 -8
  294. package/dist/commands/onboard-auth.config-minimax.js +54 -80
  295. package/dist/commands/onboard-auth.config-opencode.js +2 -18
  296. package/dist/commands/onboard-auth.credentials.js +90 -13
  297. package/dist/commands/onboard-auth.js +1 -1
  298. package/dist/commands/onboard-auth.models.js +6 -5
  299. package/dist/commands/onboard-hooks.js +1 -1
  300. package/dist/commands/onboard-non-interactive/api-keys.js +14 -7
  301. package/dist/commands/onboard-non-interactive/local/auth-choice.js +64 -49
  302. package/dist/commands/onboard-provider-auth-flags.js +14 -0
  303. package/dist/commands/onboard-remote.js +14 -7
  304. package/dist/commands/onboard.js +11 -13
  305. package/dist/commands/sandbox-display.js +6 -5
  306. package/dist/commands/sessions.test-helpers.js +61 -0
  307. package/dist/commands/status-all/diagnosis.js +14 -10
  308. package/dist/commands/status-all/format.js +1 -0
  309. package/dist/commands/status.gateway-probe.js +1 -16
  310. package/dist/commands/systemd-linger.js +12 -6
  311. package/dist/config/agent-limits.js +2 -0
  312. package/dist/config/commands.js +32 -15
  313. package/dist/config/config-paths.js +9 -11
  314. package/dist/config/config.js +1 -1
  315. package/dist/config/defaults.js +22 -2
  316. package/dist/config/discord-preview-streaming.js +104 -0
  317. package/dist/config/env-substitution.js +62 -34
  318. package/dist/config/env-vars.js +45 -7
  319. package/dist/config/includes.js +4 -0
  320. package/dist/config/io.js +656 -171
  321. package/dist/config/legacy.migrations.part-1.js +189 -78
  322. package/dist/config/legacy.shared.js +3 -1
  323. package/dist/config/merge-patch.js +54 -4
  324. package/dist/config/prototype-keys.js +4 -0
  325. package/dist/config/redact-snapshot.js +404 -76
  326. package/dist/config/schema.help.js +44 -7
  327. package/dist/config/schema.js +58 -570
  328. package/dist/config/schema.labels.js +38 -6
  329. package/dist/config/sessions/delivery-info.js +10 -3
  330. package/dist/config/sessions/main-session.js +10 -5
  331. package/dist/config/sessions/session-file.js +33 -0
  332. package/dist/config/sessions/session-key.js +10 -5
  333. package/dist/config/sessions/store.js +1 -1
  334. package/dist/config/sessions.js +1 -0
  335. package/dist/config/validation.js +140 -85
  336. package/dist/config/zod-schema.agent-runtime.js +11 -0
  337. package/dist/config/zod-schema.hooks.js +40 -11
  338. package/dist/config/zod-schema.installs.js +20 -0
  339. package/dist/config/zod-schema.js +156 -20
  340. package/dist/config/zod-schema.providers-core.js +78 -4
  341. package/dist/config/zod-schema.providers.js +6 -1
  342. package/dist/config/zod-schema.session.js +41 -2
  343. package/dist/cron/run-log.js +3 -0
  344. package/dist/cron/schedule.js +21 -10
  345. package/dist/cron/service/ops.js +35 -21
  346. package/dist/cron/service/timer.js +116 -16
  347. package/dist/cron/stagger.js +3 -1
  348. package/dist/daemon/cmd-argv.js +21 -0
  349. package/dist/daemon/cmd-set.js +58 -0
  350. package/dist/daemon/service-types.js +1 -0
  351. package/dist/discord/api.js +12 -6
  352. package/dist/discord/draft-chunking.js +22 -0
  353. package/dist/discord/draft-stream.js +124 -0
  354. package/dist/discord/monitor/agent-components.js +1 -1
  355. package/dist/discord/monitor/commands.js +5 -0
  356. package/dist/discord/monitor/exec-approvals.js +357 -162
  357. package/dist/discord/monitor/gateway-plugin.js +2 -1
  358. package/dist/discord/monitor/listeners.js +37 -27
  359. package/dist/discord/monitor/message-handler.js +4 -1
  360. package/dist/discord/monitor/message-handler.preflight.js +65 -8
  361. package/dist/discord/monitor/message-handler.process.js +246 -217
  362. package/dist/discord/monitor/message-utils.js +143 -6
  363. package/dist/discord/monitor/model-picker-preferences.js +143 -0
  364. package/dist/discord/monitor/model-picker.js +651 -0
  365. package/dist/discord/monitor/native-command.js +573 -16
  366. package/dist/discord/monitor/provider.allowlist.js +223 -0
  367. package/dist/discord/monitor/provider.js +275 -347
  368. package/dist/discord/monitor/provider.lifecycle.js +100 -0
  369. package/dist/discord/monitor/reply-delivery.js +123 -16
  370. package/dist/discord/monitor/thread-bindings.discord-api.js +215 -0
  371. package/dist/discord/monitor/thread-bindings.js +4 -0
  372. package/dist/discord/monitor/thread-bindings.lifecycle.js +177 -0
  373. package/dist/discord/monitor/thread-bindings.manager.js +423 -0
  374. package/dist/discord/monitor/thread-bindings.messages.js +55 -0
  375. package/dist/discord/monitor/thread-bindings.state.js +358 -0
  376. package/dist/discord/monitor/thread-bindings.types.js +6 -0
  377. package/dist/discord/resolve-users.js +33 -21
  378. package/dist/discord/send.channels.js +15 -0
  379. package/dist/discord/send.js +3 -2
  380. package/dist/discord/send.outbound.js +82 -26
  381. package/dist/discord/send.permissions.js +83 -30
  382. package/dist/discord/send.reactions.js +8 -4
  383. package/dist/discord/token.js +10 -5
  384. package/dist/discord/voice/command.js +263 -0
  385. package/dist/discord/voice/manager.js +531 -0
  386. package/dist/gateway/auth.js +72 -13
  387. package/dist/gateway/call.js +152 -83
  388. package/dist/gateway/canvas-capability.js +75 -0
  389. package/dist/gateway/client.js +28 -4
  390. package/dist/gateway/config-reload.js +3 -4
  391. package/dist/gateway/control-plane-audit.js +28 -0
  392. package/dist/gateway/control-plane-rate-limit.js +53 -0
  393. package/dist/gateway/control-ui.js +219 -96
  394. package/dist/gateway/events.js +1 -0
  395. package/dist/gateway/hooks-mapping.js +88 -38
  396. package/dist/gateway/hooks.js +109 -54
  397. package/dist/gateway/http-auth-helpers.js +3 -2
  398. package/dist/gateway/http-common.js +22 -0
  399. package/dist/gateway/http-endpoint-helpers.js +1 -0
  400. package/dist/gateway/method-scopes.js +169 -0
  401. package/dist/gateway/net.js +74 -9
  402. package/dist/gateway/node-invoke-system-run-approval.js +14 -35
  403. package/dist/gateway/node-registry.js +10 -5
  404. package/dist/gateway/openai-http.js +1 -0
  405. package/dist/gateway/openresponses-http.js +121 -110
  406. package/dist/gateway/origin-check.js +1 -18
  407. package/dist/gateway/probe-auth.js +2 -0
  408. package/dist/gateway/protocol/index.js +4 -2
  409. package/dist/gateway/protocol/schema/cron.js +1 -0
  410. package/dist/gateway/protocol/schema/devices.js +1 -0
  411. package/dist/gateway/protocol/schema/protocol-schemas.js +4 -1
  412. package/dist/gateway/protocol/schema/push.js +18 -0
  413. package/dist/gateway/protocol/schema/sessions.js +6 -0
  414. package/dist/gateway/protocol/schema.js +1 -0
  415. package/dist/gateway/role-policy.js +17 -0
  416. package/dist/gateway/server/ws-connection/connect-policy.js +37 -0
  417. package/dist/gateway/server/ws-connection/message-handler.js +175 -148
  418. package/dist/gateway/server-chat.js +83 -25
  419. package/dist/gateway/server-constants.js +10 -9
  420. package/dist/gateway/server-cron.js +1 -0
  421. package/dist/gateway/server-http.js +247 -54
  422. package/dist/gateway/server-maintenance.js +20 -5
  423. package/dist/gateway/server-methods/agent.js +162 -24
  424. package/dist/gateway/server-methods/chat.js +465 -130
  425. package/dist/gateway/server-methods/config.js +193 -152
  426. package/dist/gateway/server-methods/devices.js +17 -3
  427. package/dist/gateway/server-methods/models.js +11 -1
  428. package/dist/gateway/server-methods/nodes.helpers.js +12 -0
  429. package/dist/gateway/server-methods/nodes.js +251 -69
  430. package/dist/gateway/server-methods/push.js +53 -0
  431. package/dist/gateway/server-methods/sessions.js +64 -8
  432. package/dist/gateway/server-methods/usage.js +162 -75
  433. package/dist/gateway/server-node-events.js +29 -0
  434. package/dist/gateway/server-reload-handlers.js +2 -3
  435. package/dist/gateway/server-runtime-config.js +39 -13
  436. package/dist/gateway/server-runtime-state.js +2 -0
  437. package/dist/gateway/server-startup-memory.js +17 -11
  438. package/dist/gateway/server-ws-runtime.js +1 -0
  439. package/dist/gateway/server.impl.js +296 -139
  440. package/dist/gateway/session-preview.test-helpers.js +11 -0
  441. package/dist/gateway/session-utils.fs.js +32 -34
  442. package/dist/gateway/sessions-resolve.js +17 -5
  443. package/dist/gateway/startup-auth.js +126 -0
  444. package/dist/gateway/test-helpers.agent-results.js +15 -0
  445. package/dist/gateway/test-helpers.mocks.js +37 -14
  446. package/dist/gateway/test-helpers.openai-mock.js +14 -7
  447. package/dist/gateway/test-helpers.server.js +161 -77
  448. package/dist/gateway/tools-invoke-http.js +21 -10
  449. package/dist/hooks/bundled/bootstrap-extra-files/handler.js +3 -1
  450. package/dist/hooks/bundled/command-logger/handler.js +7 -2
  451. package/dist/hooks/bundled/session-memory/handler.js +170 -38
  452. package/dist/hooks/frontmatter.js +6 -6
  453. package/dist/hooks/gmail-watcher-lifecycle.js +23 -0
  454. package/dist/hooks/gmail-watcher.js +11 -6
  455. package/dist/hooks/internal-hooks.js +11 -1
  456. package/dist/hooks/llm-slug-generator.js +4 -1
  457. package/dist/hooks/workspace.js +47 -17
  458. package/dist/imessage/accounts.js +9 -20
  459. package/dist/imessage/monitor/inbound-processing.js +2 -1
  460. package/dist/infra/archive-path.js +49 -0
  461. package/dist/infra/archive.js +174 -73
  462. package/dist/infra/control-ui-assets.js +14 -6
  463. package/dist/infra/device-pairing.js +204 -144
  464. package/dist/infra/env.js +10 -5
  465. package/dist/infra/exec-approvals-allowlist.js +141 -70
  466. package/dist/infra/exec-approvals-analysis.js +78 -20
  467. package/dist/infra/exec-approvals.js +5 -17
  468. package/dist/infra/exec-safe-bin-policy.js +277 -0
  469. package/dist/infra/fixed-window-rate-limit.js +33 -0
  470. package/dist/infra/fs-safe.js +71 -39
  471. package/dist/infra/gateway-lock.js +6 -2
  472. package/dist/infra/git-root.js +61 -0
  473. package/dist/infra/heartbeat-active-hours.js +2 -2
  474. package/dist/infra/heartbeat-reason.js +40 -0
  475. package/dist/infra/heartbeat-runner.js +72 -32
  476. package/dist/infra/heartbeat-wake.js +6 -12
  477. package/dist/infra/host-env-security-policy.json +19 -0
  478. package/dist/infra/host-env-security.js +66 -0
  479. package/dist/infra/install-source-utils.js +91 -7
  480. package/dist/infra/net/ssrf.js +131 -38
  481. package/dist/infra/node-pairing.js +50 -105
  482. package/dist/infra/npm-integrity.js +45 -0
  483. package/dist/infra/npm-pack-install.js +40 -0
  484. package/dist/infra/outbound/bound-delivery-router.js +88 -0
  485. package/dist/infra/outbound/channel-adapters.js +20 -7
  486. package/dist/infra/outbound/channel-selection.js +12 -6
  487. package/dist/infra/outbound/envelope.js +1 -1
  488. package/dist/infra/outbound/format.js +12 -6
  489. package/dist/infra/outbound/message-action-runner.js +107 -327
  490. package/dist/infra/outbound/message.js +59 -36
  491. package/dist/infra/outbound/outbound-policy.js +52 -25
  492. package/dist/infra/outbound/outbound-send-service.js +58 -71
  493. package/dist/infra/outbound/payloads.js +14 -7
  494. package/dist/infra/outbound/session-binding-service.js +123 -0
  495. package/dist/infra/pairing-files.js +10 -0
  496. package/dist/infra/path-guards.js +25 -0
  497. package/dist/infra/plain-object.js +9 -0
  498. package/dist/infra/provider-usage.fetch.codex.js +7 -15
  499. package/dist/infra/provider-usage.fetch.gemini.js +14 -11
  500. package/dist/infra/provider-usage.fetch.shared.js +30 -1
  501. package/dist/infra/provider-usage.fetch.zai.js +10 -9
  502. package/dist/infra/push-apns.js +365 -0
  503. package/dist/infra/restart-sentinel.js +16 -1
  504. package/dist/infra/restart.js +229 -26
  505. package/dist/infra/retry-policy.js +4 -2
  506. package/dist/infra/retry.js +9 -5
  507. package/dist/infra/scp-host.js +54 -0
  508. package/dist/infra/session-cost-usage.js +107 -59
  509. package/dist/infra/session-maintenance-warning.js +3 -1
  510. package/dist/infra/shell-env.js +98 -34
  511. package/dist/infra/ssh-config.js +12 -6
  512. package/dist/infra/system-run-command.js +49 -4
  513. package/dist/infra/update-channels.js +10 -5
  514. package/dist/infra/update-startup.js +86 -9
  515. package/dist/line/accounts.js +5 -7
  516. package/dist/line/bot-access.js +8 -20
  517. package/dist/line/bot-handlers.js +3 -1
  518. package/dist/link-understanding/detect.js +15 -7
  519. package/dist/media/constants.js +15 -6
  520. package/dist/media/image-ops.js +7 -0
  521. package/dist/media/inbound-path-policy.js +114 -0
  522. package/dist/media/input-files.js +16 -0
  523. package/dist/media/local-roots.js +3 -2
  524. package/dist/media-understanding/apply.js +4 -1
  525. package/dist/media-understanding/concurrency.js +8 -20
  526. package/dist/memory/backend-config.js +45 -6
  527. package/dist/memory/embeddings.js +10 -4
  528. package/dist/memory/fs-utils.js +23 -0
  529. package/dist/memory/manager-search.js +12 -6
  530. package/dist/memory/manager-sync-ops.js +12 -2
  531. package/dist/memory/qmd-manager.js +466 -53
  532. package/dist/memory/query-expansion.js +167 -3
  533. package/dist/memory/status-format.js +10 -5
  534. package/dist/memory/sync-memory-files.js +1 -1
  535. package/dist/memory/test-manager.js +8 -0
  536. package/dist/node-host/invoke-system-run.js +281 -0
  537. package/dist/node-host/invoke.js +55 -337
  538. package/dist/pairing/pairing-store.js +22 -0
  539. package/dist/plugin-sdk/allow-from.js +1 -1
  540. package/dist/plugin-sdk/command-auth.js +3 -1
  541. package/dist/plugin-sdk/index.js +6 -3
  542. package/dist/plugin-sdk/temp-path.js +47 -0
  543. package/dist/plugin-sdk/webhook-targets.js +32 -0
  544. package/dist/plugins/bundled-dir.js +9 -6
  545. package/dist/plugins/discovery.js +217 -23
  546. package/dist/plugins/hook-runner-global.js +16 -0
  547. package/dist/plugins/hooks.js +50 -0
  548. package/dist/plugins/install.js +28 -16
  549. package/dist/plugins/loader.js +192 -26
  550. package/dist/plugins/logger.js +8 -0
  551. package/dist/plugins/manifest-registry.js +3 -0
  552. package/dist/plugins/path-safety.js +34 -0
  553. package/dist/plugins/registry.js +5 -2
  554. package/dist/plugins/runtime/index.js +271 -206
  555. package/dist/plugins/runtime.js +3 -17
  556. package/dist/plugins/update.js +78 -12
  557. package/dist/process/spawn-utils.js +14 -7
  558. package/dist/providers/github-copilot-models.js +4 -1
  559. package/dist/providers/github-copilot-token.js +11 -6
  560. package/dist/providers/qwen-portal-oauth.js +14 -6
  561. package/dist/routing/account-id.js +30 -0
  562. package/dist/routing/resolve-route.js +3 -7
  563. package/dist/routing/session-key.js +2 -16
  564. package/dist/security/audit-channel.js +100 -20
  565. package/dist/security/audit-extra.async.js +505 -179
  566. package/dist/security/audit-extra.js +12 -2
  567. package/dist/security/audit-extra.sync.js +421 -35
  568. package/dist/security/audit-fs.js +31 -13
  569. package/dist/security/audit.js +180 -370
  570. package/dist/security/dm-policy-shared.js +68 -0
  571. package/dist/security/external-content.js +46 -14
  572. package/dist/security/fix.js +49 -85
  573. package/dist/security/scan-paths.js +20 -0
  574. package/dist/security/secret-equal.js +3 -7
  575. package/dist/security/windows-acl.js +30 -15
  576. package/dist/shared/entry-status.js +6 -0
  577. package/dist/shared/frontmatter.js +5 -5
  578. package/dist/shared/node-list-parse.js +13 -0
  579. package/dist/shared/node-match.js +11 -4
  580. package/dist/shared/operator-scope-compat.js +42 -0
  581. package/dist/shared/text-chunking.js +29 -0
  582. package/dist/signal/accounts.js +7 -20
  583. package/dist/signal/monitor/event-handler.js +3 -1
  584. package/dist/slack/accounts.js +6 -19
  585. package/dist/slack/actions.js +11 -3
  586. package/dist/slack/blocks.test-helpers.js +31 -0
  587. package/dist/slack/monitor/auth.js +1 -1
  588. package/dist/slack/monitor/message-handler/dispatch.js +50 -29
  589. package/dist/slack/monitor/mrkdwn.js +8 -0
  590. package/dist/slack/monitor/replies.js +15 -7
  591. package/dist/slack/monitor/slash.js +22 -13
  592. package/dist/slack/resolve-channels.js +10 -5
  593. package/dist/slack/send.js +102 -12
  594. package/dist/slack/stream-mode.js +10 -0
  595. package/dist/slack/streaming.js +4 -2
  596. package/dist/telegram/accounts.js +19 -14
  597. package/dist/telegram/bot/helpers.js +3 -5
  598. package/dist/telegram/bot-access.js +35 -36
  599. package/dist/telegram/bot-handlers.js +120 -148
  600. package/dist/telegram/bot-message-context.js +68 -9
  601. package/dist/telegram/bot-message-dispatch.js +477 -210
  602. package/dist/telegram/bot-native-commands.js +16 -0
  603. package/dist/telegram/draft-stream.js +44 -8
  604. package/dist/telegram/inline-buttons.js +5 -15
  605. package/dist/telegram/monitor.js +11 -7
  606. package/dist/telegram/network-config.js +19 -7
  607. package/dist/telegram/reasoning-lane-coordinator.js +128 -0
  608. package/dist/telegram/send.js +3 -2
  609. package/dist/telegram/sent-message-cache.js +5 -6
  610. package/dist/telegram/status-reaction-variants.js +208 -0
  611. package/dist/telegram/sticker-cache.js +11 -9
  612. package/dist/terminal/prompt-select-styled.js +9 -0
  613. package/dist/terminal/theme.js +12 -12
  614. package/dist/test-utils/command-runner.js +6 -0
  615. package/dist/test-utils/internal-hook-event-payload.js +10 -0
  616. package/dist/test-utils/model-auth-mock.js +12 -0
  617. package/dist/test-utils/provider-usage-fetch.js +14 -0
  618. package/dist/test-utils/temp-home.js +33 -0
  619. package/dist/tts/tts.js +80 -567
  620. package/dist/tui/components/chat-log.js +50 -8
  621. package/dist/tui/theme/theme.js +10 -12
  622. package/dist/tui/tui-command-handlers.js +36 -27
  623. package/dist/tui/tui-event-handlers.js +122 -32
  624. package/dist/tui/tui-local-shell.js +16 -6
  625. package/dist/tui/tui.js +236 -48
  626. package/dist/utils/account-id.js +2 -4
  627. package/dist/utils/boolean.js +10 -5
  628. package/dist/utils/directive-tags.js +11 -0
  629. package/dist/utils/mask-api-key.js +10 -0
  630. package/dist/utils/queue-helpers.js +67 -12
  631. package/dist/utils/run-with-concurrency.js +39 -0
  632. package/dist/web/auto-reply/deliver-reply.js +8 -4
  633. package/dist/web/auto-reply/mentions.js +10 -5
  634. package/dist/web/auto-reply/monitor/group-members.js +14 -7
  635. package/dist/web/auto-reply/monitor/process-message.js +45 -24
  636. package/dist/web/inbound/access-control.js +5 -2
  637. package/dist/web/login-qr.js +12 -6
  638. package/dist/web/media.js +126 -15
  639. package/docs/tools/slash-commands.md +5 -1
  640. package/extensions/bluebubbles/src/monitor-processing.ts +580 -139
  641. package/extensions/bluebubbles/src/monitor.ts +208 -1950
  642. package/extensions/feishu/src/external-keys.ts +19 -0
  643. package/extensions/lobster/src/windows-spawn.ts +193 -0
  644. package/extensions/matrix/src/matrix/actions/limits.ts +6 -0
  645. package/extensions/mattermost/src/mattermost/reactions.test-helpers.ts +83 -0
  646. package/package.json +1 -1
@@ -40,13 +40,15 @@ export class NodeRegistry {
40
40
  }
41
41
  unregister(connId) {
42
42
  const nodeId = this.nodesByConn.get(connId);
43
- if (!nodeId)
43
+ if (!nodeId) {
44
44
  return null;
45
+ }
45
46
  this.nodesByConn.delete(connId);
46
47
  this.nodesById.delete(nodeId);
47
48
  for (const [id, pending] of this.pendingInvokes.entries()) {
48
- if (pending.nodeId !== nodeId)
49
+ if (pending.nodeId !== nodeId) {
49
50
  continue;
51
+ }
50
52
  clearTimeout(pending.timer);
51
53
  pending.reject(new Error(`node disconnected (${pending.command})`));
52
54
  this.pendingInvokes.delete(id);
@@ -103,10 +105,12 @@ export class NodeRegistry {
103
105
  }
104
106
  handleInvokeResult(params) {
105
107
  const pending = this.pendingInvokes.get(params.id);
106
- if (!pending)
108
+ if (!pending) {
107
109
  return false;
108
- if (pending.nodeId !== params.nodeId)
110
+ }
111
+ if (pending.nodeId !== params.nodeId) {
109
112
  return false;
113
+ }
110
114
  clearTimeout(pending.timer);
111
115
  this.pendingInvokes.delete(params.id);
112
116
  pending.resolve({
@@ -119,8 +123,9 @@ export class NodeRegistry {
119
123
  }
120
124
  sendEvent(nodeId, event, payload) {
121
125
  const node = this.nodesById.get(nodeId);
122
- if (!node)
126
+ if (!node) {
123
127
  return false;
128
+ }
124
129
  return this.sendEventToSession(node, event, payload);
125
130
  }
126
131
  sendEventInternal(node, event, payload) {
@@ -124,6 +124,7 @@ export async function handleOpenAiHttpRequest(req, res, opts) {
124
124
  connectAuth: { token, password: token },
125
125
  req,
126
126
  trustedProxies: opts.trustedProxies,
127
+ allowRealIpFallback: opts.allowRealIpFallback,
127
128
  });
128
129
  if (!authResult.ok) {
129
130
  sendUnauthorized(res);
@@ -1,60 +1,69 @@
1
1
  /**
2
2
  * OpenResponses HTTP Handler
3
3
  *
4
- * Implements the OpenResponses `/v1/responses` endpoint for Poolbot Gateway.
4
+ * Implements the OpenResponses `/v1/responses` endpoint for Pool Bot Gateway.
5
5
  *
6
6
  * @see https://www.open-responses.com/
7
7
  */
8
8
  import { randomUUID } from "node:crypto";
9
- import { buildHistoryContextFromEntries } from "../auto-reply/reply/history.js";
10
9
  import { createDefaultDeps } from "../cli/deps.js";
11
10
  import { agentCommand } from "../commands/agent.js";
12
11
  import { emitAgentEvent, onAgentEvent } from "../infra/agent-events.js";
12
+ import { logWarn } from "../logger.js";
13
+ import { DEFAULT_INPUT_IMAGE_MAX_BYTES, DEFAULT_INPUT_IMAGE_MIMES, DEFAULT_INPUT_MAX_REDIRECTS, DEFAULT_INPUT_TIMEOUT_MS, extractFileContentFromSource, extractImageContentFromSource, normalizeMimeList, resolveInputFileLimits, } from "../media/input-files.js";
13
14
  import { defaultRuntime } from "../runtime.js";
14
- import { authorizeGatewayConnect } from "./auth.js";
15
- import { getBearerToken, resolveAgentIdForRequest, resolveSessionKey } from "./http-utils.js";
16
- import { readJsonBodyOrError, sendJson, sendMethodNotAllowed, sendUnauthorized, setSseHeaders, writeDone, } from "./http-common.js";
15
+ import { resolveAssistantStreamDeltaText } from "./agent-event-assistant-text.js";
16
+ import { buildAgentMessageFromConversationEntries, } from "./agent-prompt.js";
17
+ import { sendJson, setSseHeaders, writeDone } from "./http-common.js";
18
+ import { handleGatewayPostJsonEndpoint } from "./http-endpoint-helpers.js";
19
+ import { resolveAgentIdForRequest, resolveSessionKey } from "./http-utils.js";
17
20
  import { CreateResponseBodySchema, } from "./open-responses.schema.js";
18
- import { DEFAULT_INPUT_FILE_MAX_BYTES, DEFAULT_INPUT_FILE_MAX_CHARS, DEFAULT_INPUT_FILE_MIMES, DEFAULT_INPUT_IMAGE_MAX_BYTES, DEFAULT_INPUT_IMAGE_MIMES, DEFAULT_INPUT_MAX_REDIRECTS, DEFAULT_INPUT_PDF_MAX_PAGES, DEFAULT_INPUT_PDF_MAX_PIXELS, DEFAULT_INPUT_PDF_MIN_TEXT_CHARS, DEFAULT_INPUT_TIMEOUT_MS, extractFileContentFromSource, extractImageContentFromSource, normalizeMimeList, } from "../media/input-files.js";
19
21
  const DEFAULT_BODY_BYTES = 20 * 1024 * 1024;
22
+ const DEFAULT_MAX_URL_PARTS = 8;
20
23
  function writeSseEvent(res, event) {
21
24
  res.write(`event: ${event.type}\n`);
22
25
  res.write(`data: ${JSON.stringify(event)}\n\n`);
23
26
  }
24
27
  function extractTextContent(content) {
25
- if (typeof content === "string")
28
+ if (typeof content === "string") {
26
29
  return content;
30
+ }
27
31
  return content
28
32
  .map((part) => {
29
- if (part.type === "input_text")
33
+ if (part.type === "input_text") {
30
34
  return part.text;
31
- if (part.type === "output_text")
35
+ }
36
+ if (part.type === "output_text") {
32
37
  return part.text;
38
+ }
33
39
  return "";
34
40
  })
35
41
  .filter(Boolean)
36
42
  .join("\n");
37
43
  }
44
+ function normalizeHostnameAllowlist(values) {
45
+ if (!values || values.length === 0) {
46
+ return undefined;
47
+ }
48
+ const normalized = values.map((value) => value.trim()).filter((value) => value.length > 0);
49
+ return normalized.length > 0 ? normalized : undefined;
50
+ }
38
51
  function resolveResponsesLimits(config) {
39
52
  const files = config?.files;
40
53
  const images = config?.images;
54
+ const fileLimits = resolveInputFileLimits(files);
41
55
  return {
42
56
  maxBodyBytes: config?.maxBodyBytes ?? DEFAULT_BODY_BYTES,
57
+ maxUrlParts: typeof config?.maxUrlParts === "number"
58
+ ? Math.max(0, Math.floor(config.maxUrlParts))
59
+ : DEFAULT_MAX_URL_PARTS,
43
60
  files: {
44
- allowUrl: files?.allowUrl ?? true,
45
- allowedMimes: normalizeMimeList(files?.allowedMimes, DEFAULT_INPUT_FILE_MIMES),
46
- maxBytes: files?.maxBytes ?? DEFAULT_INPUT_FILE_MAX_BYTES,
47
- maxChars: files?.maxChars ?? DEFAULT_INPUT_FILE_MAX_CHARS,
48
- maxRedirects: files?.maxRedirects ?? DEFAULT_INPUT_MAX_REDIRECTS,
49
- timeoutMs: files?.timeoutMs ?? DEFAULT_INPUT_TIMEOUT_MS,
50
- pdf: {
51
- maxPages: files?.pdf?.maxPages ?? DEFAULT_INPUT_PDF_MAX_PAGES,
52
- maxPixels: files?.pdf?.maxPixels ?? DEFAULT_INPUT_PDF_MAX_PIXELS,
53
- minTextChars: files?.pdf?.minTextChars ?? DEFAULT_INPUT_PDF_MIN_TEXT_CHARS,
54
- },
61
+ ...fileLimits,
62
+ urlAllowlist: normalizeHostnameAllowlist(files?.urlAllowlist),
55
63
  },
56
64
  images: {
57
65
  allowUrl: images?.allowUrl ?? true,
66
+ urlAllowlist: normalizeHostnameAllowlist(images?.urlAllowlist),
58
67
  allowedMimes: normalizeMimeList(images?.allowedMimes, DEFAULT_INPUT_IMAGE_MIMES),
59
68
  maxBytes: images?.maxBytes ?? DEFAULT_INPUT_IMAGE_MAX_BYTES,
60
69
  maxRedirects: images?.maxRedirects ?? DEFAULT_INPUT_MAX_REDIRECTS,
@@ -67,8 +76,9 @@ function extractClientTools(body) {
67
76
  }
68
77
  function applyToolChoice(params) {
69
78
  const { tools, toolChoice } = params;
70
- if (!toolChoice)
79
+ if (!toolChoice) {
71
80
  return { tools };
81
+ }
72
82
  if (toolChoice === "none") {
73
83
  return { tools: [] };
74
84
  }
@@ -106,8 +116,9 @@ export function buildAgentPrompt(input) {
106
116
  for (const item of input) {
107
117
  if (item.type === "message") {
108
118
  const content = extractTextContent(item.content).trim();
109
- if (!content)
119
+ if (!content) {
110
120
  continue;
121
+ }
111
122
  if (item.role === "system" || item.role === "developer") {
112
123
  systemParts.push(content);
113
124
  continue;
@@ -127,35 +138,7 @@ export function buildAgentPrompt(input) {
127
138
  }
128
139
  // Skip reasoning and item_reference for prompt building (Phase 1)
129
140
  }
130
- let message = "";
131
- if (conversationEntries.length > 0) {
132
- // Find the last user or tool message as the current message
133
- let currentIndex = -1;
134
- for (let i = conversationEntries.length - 1; i >= 0; i -= 1) {
135
- const entryRole = conversationEntries[i]?.role;
136
- if (entryRole === "user" || entryRole === "tool") {
137
- currentIndex = i;
138
- break;
139
- }
140
- }
141
- if (currentIndex < 0)
142
- currentIndex = conversationEntries.length - 1;
143
- const currentEntry = conversationEntries[currentIndex]?.entry;
144
- if (currentEntry) {
145
- const historyEntries = conversationEntries.slice(0, currentIndex).map((entry) => entry.entry);
146
- if (historyEntries.length === 0) {
147
- message = currentEntry.body;
148
- }
149
- else {
150
- const formatEntry = (entry) => `${entry.sender}: ${entry.body}`;
151
- message = buildHistoryContextFromEntries({
152
- entries: [...historyEntries, currentEntry],
153
- currentMessage: formatEntry(currentEntry),
154
- formatEntry,
155
- });
156
- }
157
- }
158
- }
141
+ const message = buildAgentMessageFromConversationEntries(conversationEntries);
159
142
  return {
160
143
  message,
161
144
  extraSystemPrompt: systemParts.length > 0 ? systemParts.join("\n\n") : undefined,
@@ -168,8 +151,9 @@ function createEmptyUsage() {
168
151
  return { input_tokens: 0, output_tokens: 0, total_tokens: 0 };
169
152
  }
170
153
  function toUsage(value) {
171
- if (!value)
154
+ if (!value) {
172
155
  return createEmptyUsage();
156
+ }
173
157
  const input = value.input ?? 0;
174
158
  const output = value.output ?? 0;
175
159
  const cacheRead = value.cacheRead ?? 0;
@@ -207,35 +191,42 @@ function createAssistantOutputItem(params) {
207
191
  status: params.status,
208
192
  };
209
193
  }
194
+ async function runResponsesAgentCommand(params) {
195
+ return agentCommand({
196
+ message: params.message,
197
+ images: params.images.length > 0 ? params.images : undefined,
198
+ clientTools: params.clientTools.length > 0 ? params.clientTools : undefined,
199
+ extraSystemPrompt: params.extraSystemPrompt || undefined,
200
+ streamParams: params.streamParams ?? undefined,
201
+ sessionKey: params.sessionKey,
202
+ runId: params.runId,
203
+ deliver: false,
204
+ messageChannel: "webchat",
205
+ bestEffortDeliver: false,
206
+ }, defaultRuntime, params.deps);
207
+ }
210
208
  export async function handleOpenResponsesHttpRequest(req, res, opts) {
211
- const url = new URL(req.url ?? "/", `http://${req.headers.host || "localhost"}`);
212
- if (url.pathname !== "/v1/responses")
213
- return false;
214
- if (req.method !== "POST") {
215
- sendMethodNotAllowed(res);
216
- return true;
217
- }
218
- const token = getBearerToken(req);
219
- const authResult = await authorizeGatewayConnect({
220
- auth: opts.auth,
221
- connectAuth: { token, password: token },
222
- req,
223
- trustedProxies: opts.trustedProxies,
224
- });
225
- if (!authResult.ok) {
226
- sendUnauthorized(res);
227
- return true;
228
- }
229
209
  const limits = resolveResponsesLimits(opts.config);
230
210
  const maxBodyBytes = opts.maxBodyBytes ??
231
211
  (opts.config?.maxBodyBytes
232
212
  ? limits.maxBodyBytes
233
213
  : Math.max(limits.maxBodyBytes, limits.files.maxBytes * 2, limits.images.maxBytes * 2));
234
- const body = await readJsonBodyOrError(req, res, maxBodyBytes);
235
- if (body === undefined)
214
+ const handled = await handleGatewayPostJsonEndpoint(req, res, {
215
+ pathname: "/v1/responses",
216
+ auth: opts.auth,
217
+ trustedProxies: opts.trustedProxies,
218
+ allowRealIpFallback: opts.allowRealIpFallback,
219
+ rateLimiter: opts.rateLimiter,
220
+ maxBodyBytes,
221
+ });
222
+ if (handled === false) {
223
+ return false;
224
+ }
225
+ if (!handled) {
236
226
  return true;
227
+ }
237
228
  // Validate request body with Zod
238
- const parseResult = CreateResponseBodySchema.safeParse(body);
229
+ const parseResult = CreateResponseBodySchema.safeParse(handled.body);
239
230
  if (!parseResult.success) {
240
231
  const issue = parseResult.error.issues[0];
241
232
  const message = issue ? `${issue.path.join(".")}: ${issue.message}` : "Invalid request body";
@@ -251,6 +242,13 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
251
242
  // Extract images + files from input (Phase 2)
252
243
  let images = [];
253
244
  let fileContexts = [];
245
+ let urlParts = 0;
246
+ const markUrlPart = () => {
247
+ urlParts += 1;
248
+ if (urlParts > limits.maxUrlParts) {
249
+ throw new Error(`Too many URL-based input sources: ${urlParts} (limit: ${limits.maxUrlParts})`);
250
+ }
251
+ };
254
252
  try {
255
253
  if (Array.isArray(payload.input)) {
256
254
  for (const item of payload.input) {
@@ -262,6 +260,9 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
262
260
  if (!sourceType) {
263
261
  throw new Error("input_image must have 'source.url' or 'source.data'");
264
262
  }
263
+ if (sourceType === "url") {
264
+ markUrlPart();
265
+ }
265
266
  const imageSource = {
266
267
  type: sourceType,
267
268
  url: source.url,
@@ -278,6 +279,9 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
278
279
  if (!sourceType) {
279
280
  throw new Error("input_file must have 'source.url' or 'source.data'");
280
281
  }
282
+ if (sourceType === "url") {
283
+ markUrlPart();
284
+ }
281
285
  const file = await extractFileContentFromSource({
282
286
  source: {
283
287
  type: sourceType,
@@ -304,8 +308,9 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
304
308
  }
305
309
  }
306
310
  catch (err) {
311
+ logWarn(`openresponses: request parsing failed: ${String(err)}`);
307
312
  sendJson(res, 400, {
308
- error: { message: String(err), type: "invalid_request_error" },
313
+ error: { message: "invalid request", type: "invalid_request_error" },
309
314
  });
310
315
  return true;
311
316
  }
@@ -321,8 +326,9 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
321
326
  toolChoicePrompt = toolChoiceResult.extraSystemPrompt;
322
327
  }
323
328
  catch (err) {
329
+ logWarn(`openresponses: tool configuration failed: ${String(err)}`);
324
330
  sendJson(res, 400, {
325
- error: { message: String(err), type: "invalid_request_error" },
331
+ error: { message: "invalid tool configuration", type: "invalid_request_error" },
326
332
  });
327
333
  return true;
328
334
  }
@@ -358,18 +364,16 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
358
364
  : undefined;
359
365
  if (!stream) {
360
366
  try {
361
- const result = await agentCommand({
367
+ const result = await runResponsesAgentCommand({
362
368
  message: prompt.message,
363
- images: images.length > 0 ? images : undefined,
364
- clientTools: resolvedClientTools.length > 0 ? resolvedClientTools : undefined,
365
- extraSystemPrompt: extraSystemPrompt || undefined,
366
- streamParams: streamParams ?? undefined,
369
+ images,
370
+ clientTools: resolvedClientTools,
371
+ extraSystemPrompt,
372
+ streamParams,
367
373
  sessionKey,
368
374
  runId: responseId,
369
- deliver: false,
370
- messageChannel: "webchat",
371
- bestEffortDeliver: false,
372
- }, defaultRuntime, deps);
375
+ deps,
376
+ });
373
377
  const payloads = result?.payloads;
374
378
  const usage = extractUsageFromResult(result);
375
379
  const meta = result?.meta;
@@ -405,7 +409,7 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
405
409
  .map((p) => (typeof p.text === "string" ? p.text : ""))
406
410
  .filter(Boolean)
407
411
  .join("\n\n")
408
- : "No response from Poolbot.";
412
+ : "No response from Pool Bot.";
409
413
  const response = createResponseResource({
410
414
  id: responseId,
411
415
  model,
@@ -418,12 +422,13 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
418
422
  sendJson(res, 200, response);
419
423
  }
420
424
  catch (err) {
425
+ logWarn(`openresponses: non-stream response failed: ${String(err)}`);
421
426
  const response = createResponseResource({
422
427
  id: responseId,
423
428
  model,
424
429
  status: "failed",
425
430
  output: [],
426
- error: { code: "api_error", message: String(err) },
431
+ error: { code: "api_error", message: "internal error" },
427
432
  });
428
433
  sendJson(res, 500, response);
429
434
  }
@@ -440,12 +445,15 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
440
445
  let finalUsage;
441
446
  let finalizeRequested = null;
442
447
  const maybeFinalize = () => {
443
- if (closed)
448
+ if (closed) {
444
449
  return;
445
- if (!finalizeRequested)
450
+ }
451
+ if (!finalizeRequested) {
446
452
  return;
447
- if (!finalUsage)
453
+ }
454
+ if (!finalUsage) {
448
455
  return;
456
+ }
449
457
  const usage = finalUsage;
450
458
  closed = true;
451
459
  unsubscribe();
@@ -485,8 +493,9 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
485
493
  res.end();
486
494
  };
487
495
  const requestFinalize = (status, text) => {
488
- if (finalizeRequested)
496
+ if (finalizeRequested) {
489
497
  return;
498
+ }
490
499
  finalizeRequested = { status, text };
491
500
  maybeFinalize();
492
501
  };
@@ -519,16 +528,17 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
519
528
  part: { type: "output_text", text: "" },
520
529
  });
521
530
  unsubscribe = onAgentEvent((evt) => {
522
- if (evt.runId !== responseId)
531
+ if (evt.runId !== responseId) {
523
532
  return;
524
- if (closed)
533
+ }
534
+ if (closed) {
525
535
  return;
536
+ }
526
537
  if (evt.stream === "assistant") {
527
- const delta = evt.data?.delta;
528
- const text = evt.data?.text;
529
- const content = typeof delta === "string" ? delta : typeof text === "string" ? text : "";
530
- if (!content)
538
+ const content = resolveAssistantStreamDeltaText(evt);
539
+ if (!content) {
531
540
  return;
541
+ }
532
542
  sawAssistantDelta = true;
533
543
  accumulatedText += content;
534
544
  writeSseEvent(res, {
@@ -543,7 +553,7 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
543
553
  if (evt.stream === "lifecycle") {
544
554
  const phase = evt.data?.phase;
545
555
  if (phase === "end" || phase === "error") {
546
- const finalText = accumulatedText || "No response from Poolbot.";
556
+ const finalText = accumulatedText || "No response from Pool Bot.";
547
557
  const finalStatus = phase === "error" ? "failed" : "completed";
548
558
  requestFinalize(finalStatus, finalText);
549
559
  }
@@ -555,22 +565,21 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
555
565
  });
556
566
  void (async () => {
557
567
  try {
558
- const result = await agentCommand({
568
+ const result = await runResponsesAgentCommand({
559
569
  message: prompt.message,
560
- images: images.length > 0 ? images : undefined,
561
- clientTools: resolvedClientTools.length > 0 ? resolvedClientTools : undefined,
562
- extraSystemPrompt: extraSystemPrompt || undefined,
563
- streamParams: streamParams ?? undefined,
570
+ images,
571
+ clientTools: resolvedClientTools,
572
+ extraSystemPrompt,
573
+ streamParams,
564
574
  sessionKey,
565
575
  runId: responseId,
566
- deliver: false,
567
- messageChannel: "webchat",
568
- bestEffortDeliver: false,
569
- }, defaultRuntime, deps);
576
+ deps,
577
+ });
570
578
  finalUsage = extractUsageFromResult(result);
571
579
  maybeFinalize();
572
- if (closed)
580
+ if (closed) {
573
581
  return;
582
+ }
574
583
  // Fallback: if no streaming deltas were received, send the full response
575
584
  if (!sawAssistantDelta) {
576
585
  const resultAny = result;
@@ -647,7 +656,7 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
647
656
  .map((p) => (typeof p.text === "string" ? p.text : ""))
648
657
  .filter(Boolean)
649
658
  .join("\n\n")
650
- : "No response from Poolbot.";
659
+ : "No response from Pool Bot.";
651
660
  accumulatedText = content;
652
661
  sawAssistantDelta = true;
653
662
  writeSseEvent(res, {
@@ -660,15 +669,17 @@ export async function handleOpenResponsesHttpRequest(req, res, opts) {
660
669
  }
661
670
  }
662
671
  catch (err) {
663
- if (closed)
672
+ logWarn(`openresponses: streaming response failed: ${String(err)}`);
673
+ if (closed) {
664
674
  return;
675
+ }
665
676
  finalUsage = finalUsage ?? createEmptyUsage();
666
677
  const errorResponse = createResponseResource({
667
678
  id: responseId,
668
679
  model,
669
680
  status: "failed",
670
681
  output: [],
671
- error: { code: "api_error", message: String(err) },
682
+ error: { code: "api_error", message: "internal error" },
672
683
  usage: finalUsage,
673
684
  });
674
685
  writeSseEvent(res, { type: "response.failed", response: errorResponse });
@@ -1,21 +1,4 @@
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
- }
1
+ import { isLoopbackHost, normalizeHostHeader, resolveHostName } from "./net.js";
19
2
  function parseOrigin(originRaw) {
20
3
  const trimmed = (originRaw ?? "").trim();
21
4
  if (!trimmed || trimmed === "null") {
@@ -8,8 +8,10 @@ export function resolveGatewayProbeAuth(params) {
8
8
  ? remote.token.trim()
9
9
  : undefined
10
10
  : env.POOLBOT_GATEWAY_TOKEN?.trim() ||
11
+ env.CLAWDBOT_GATEWAY_TOKEN?.trim() ||
11
12
  (typeof authToken === "string" && authToken.trim() ? authToken.trim() : undefined);
12
13
  const password = env.POOLBOT_GATEWAY_PASSWORD?.trim() ||
14
+ env.CLAWDBOT_GATEWAY_PASSWORD?.trim() ||
13
15
  (params.mode === "remote"
14
16
  ? typeof remote?.password === "string" && remote.password.trim()
15
17
  ? remote.password.trim()
@@ -1,5 +1,5 @@
1
1
  import AjvPkg from "ajv";
2
- import { AgentEventSchema, AgentIdentityParamsSchema, AgentIdentityResultSchema, AgentParamsSchema, AgentSummarySchema, AgentsFileEntrySchema, AgentsCreateParamsSchema, AgentsCreateResultSchema, AgentsUpdateParamsSchema, AgentsUpdateResultSchema, AgentsDeleteParamsSchema, AgentsDeleteResultSchema, AgentsFilesGetParamsSchema, AgentsFilesGetResultSchema, AgentsFilesListParamsSchema, AgentsFilesListResultSchema, AgentsFilesSetParamsSchema, AgentsFilesSetResultSchema, AgentsListParamsSchema, AgentsListResultSchema, AgentWaitParamsSchema, ChannelsLogoutParamsSchema, TalkConfigParamsSchema, TalkConfigResultSchema, 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";
2
+ import { AgentEventSchema, AgentIdentityParamsSchema, AgentIdentityResultSchema, AgentParamsSchema, AgentSummarySchema, AgentsFileEntrySchema, AgentsCreateParamsSchema, AgentsCreateResultSchema, AgentsUpdateParamsSchema, AgentsUpdateResultSchema, AgentsDeleteParamsSchema, AgentsDeleteResultSchema, AgentsFilesGetParamsSchema, AgentsFilesGetResultSchema, AgentsFilesListParamsSchema, AgentsFilesListResultSchema, AgentsFilesSetParamsSchema, AgentsFilesSetResultSchema, AgentsListParamsSchema, AgentsListResultSchema, AgentWaitParamsSchema, ChannelsLogoutParamsSchema, TalkConfigParamsSchema, TalkConfigResultSchema, ChannelsStatusParamsSchema, ChannelsStatusResultSchema, ChatAbortParamsSchema, ChatEventSchema, ChatHistoryParamsSchema, ChatInjectParamsSchema, ChatSendParamsSchema, ConfigApplyParamsSchema, ConfigGetParamsSchema, ConfigPatchParamsSchema, ConfigSchemaParamsSchema, ConfigSchemaResponseSchema, ConfigSetParamsSchema, ConnectParamsSchema, CronAddParamsSchema, CronJobSchema, CronListParamsSchema, CronRemoveParamsSchema, CronRunParamsSchema, CronRunsParamsSchema, CronStatusParamsSchema, CronUpdateParamsSchema, DevicePairApproveParamsSchema, DevicePairListParamsSchema, DevicePairRemoveParamsSchema, 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, PushTestParamsSchema, PushTestResultSchema, 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,
@@ -33,6 +33,7 @@ export const validateNodeDescribeParams = ajv.compile(NodeDescribeParamsSchema);
33
33
  export const validateNodeInvokeParams = ajv.compile(NodeInvokeParamsSchema);
34
34
  export const validateNodeInvokeResultParams = ajv.compile(NodeInvokeResultParamsSchema);
35
35
  export const validateNodeEventParams = ajv.compile(NodeEventParamsSchema);
36
+ export const validatePushTestParams = ajv.compile(PushTestParamsSchema);
36
37
  export const validateSessionsListParams = ajv.compile(SessionsListParamsSchema);
37
38
  export const validateSessionsPreviewParams = ajv.compile(SessionsPreviewParamsSchema);
38
39
  export const validateSessionsResolveParams = ajv.compile(SessionsResolveParamsSchema);
@@ -69,6 +70,7 @@ export const validateCronRunsParams = ajv.compile(CronRunsParamsSchema);
69
70
  export const validateDevicePairListParams = ajv.compile(DevicePairListParamsSchema);
70
71
  export const validateDevicePairApproveParams = ajv.compile(DevicePairApproveParamsSchema);
71
72
  export const validateDevicePairRejectParams = ajv.compile(DevicePairRejectParamsSchema);
73
+ export const validateDevicePairRemoveParams = ajv.compile(DevicePairRemoveParamsSchema);
72
74
  export const validateDeviceTokenRotateParams = ajv.compile(DeviceTokenRotateParamsSchema);
73
75
  export const validateDeviceTokenRevokeParams = ajv.compile(DeviceTokenRevokeParamsSchema);
74
76
  export const validateExecApprovalsGetParams = ajv.compile(ExecApprovalsGetParamsSchema);
@@ -115,4 +117,4 @@ export function formatValidationErrors(errors) {
115
117
  }
116
118
  return unique.join("; ");
117
119
  }
118
- 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, TalkConfigParamsSchema, TalkConfigResultSchema, ChannelsStatusParamsSchema, ChannelsStatusResultSchema, ChannelsLogoutParamsSchema, WebLoginStartParamsSchema, WebLoginWaitParamsSchema, AgentSummarySchema, AgentsFileEntrySchema, AgentsCreateParamsSchema, AgentsCreateResultSchema, AgentsUpdateParamsSchema, AgentsUpdateResultSchema, AgentsDeleteParamsSchema, AgentsDeleteResultSchema, AgentsFilesListParamsSchema, AgentsFilesListResultSchema, AgentsFilesGetParamsSchema, AgentsFilesGetResultSchema, AgentsFilesSetParamsSchema, AgentsFilesSetResultSchema, 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, };
120
+ export { ConnectParamsSchema, HelloOkSchema, RequestFrameSchema, ResponseFrameSchema, EventFrameSchema, GatewayFrameSchema, PresenceEntrySchema, SnapshotSchema, ErrorShapeSchema, StateVersionSchema, AgentEventSchema, ChatEventSchema, SendParamsSchema, PollParamsSchema, AgentParamsSchema, AgentIdentityParamsSchema, AgentIdentityResultSchema, WakeParamsSchema, PushTestParamsSchema, PushTestResultSchema, 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, TalkConfigParamsSchema, TalkConfigResultSchema, ChannelsStatusParamsSchema, ChannelsStatusResultSchema, ChannelsLogoutParamsSchema, WebLoginStartParamsSchema, WebLoginWaitParamsSchema, AgentSummarySchema, AgentsFileEntrySchema, AgentsCreateParamsSchema, AgentsCreateResultSchema, AgentsUpdateParamsSchema, AgentsUpdateResultSchema, AgentsDeleteParamsSchema, AgentsDeleteResultSchema, AgentsFilesListParamsSchema, AgentsFilesListResultSchema, AgentsFilesGetParamsSchema, AgentsFilesGetResultSchema, AgentsFilesSetParamsSchema, AgentsFilesSetResultSchema, 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, };
@@ -82,6 +82,7 @@ export const CronJobStateSchema = Type.Object({
82
82
  lastError: Type.Optional(Type.String()),
83
83
  lastDurationMs: Type.Optional(Type.Integer({ minimum: 0 })),
84
84
  consecutiveErrors: Type.Optional(Type.Integer({ minimum: 0 })),
85
+ lastDelivered: Type.Optional(Type.Boolean()),
85
86
  }, { additionalProperties: false });
86
87
  export const CronJobSchema = Type.Object({
87
88
  id: NonEmptyString,
@@ -3,6 +3,7 @@ import { NonEmptyString } from "./primitives.js";
3
3
  export const DevicePairListParamsSchema = Type.Object({}, { additionalProperties: false });
4
4
  export const DevicePairApproveParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
5
5
  export const DevicePairRejectParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
6
+ export const DevicePairRemoveParamsSchema = Type.Object({ deviceId: NonEmptyString }, { additionalProperties: false });
6
7
  export const DeviceTokenRotateParamsSchema = Type.Object({
7
8
  deviceId: NonEmptyString,
8
9
  role: NonEmptyString,
@@ -3,11 +3,12 @@ import { AgentSummarySchema, AgentsCreateParamsSchema, AgentsCreateResultSchema,
3
3
  import { ChannelsLogoutParamsSchema, TalkConfigParamsSchema, TalkConfigResultSchema, 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";
6
- import { DevicePairApproveParamsSchema, DevicePairListParamsSchema, DevicePairRejectParamsSchema, DevicePairRequestedEventSchema, DevicePairResolvedEventSchema, DeviceTokenRevokeParamsSchema, DeviceTokenRotateParamsSchema, } from "./devices.js";
6
+ import { DevicePairApproveParamsSchema, DevicePairListParamsSchema, DevicePairRejectParamsSchema, DevicePairRemoveParamsSchema, DevicePairRequestedEventSchema, DevicePairResolvedEventSchema, DeviceTokenRevokeParamsSchema, DeviceTokenRotateParamsSchema, } from "./devices.js";
7
7
  import { ExecApprovalsGetParamsSchema, ExecApprovalsNodeGetParamsSchema, ExecApprovalsNodeSetParamsSchema, ExecApprovalsSetParamsSchema, ExecApprovalsSnapshotSchema, ExecApprovalRequestParamsSchema, ExecApprovalResolveParamsSchema, } from "./exec-approvals.js";
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 { PushTestParamsSchema } from "./push.js";
11
12
  import { SessionsCompactParamsSchema, SessionsDeleteParamsSchema, SessionsListParamsSchema, SessionsPatchParamsSchema, SessionsPreviewParamsSchema, SessionsResetParamsSchema, SessionsResolveParamsSchema, SessionsUsageParamsSchema, } from "./sessions.js";
12
13
  import { PresenceEntrySchema, SnapshotSchema, StateVersionSchema } from "./snapshot.js";
13
14
  import { WizardCancelParamsSchema, WizardNextParamsSchema, WizardNextResultSchema, WizardStartParamsSchema, WizardStartResultSchema, WizardStatusParamsSchema, WizardStatusResultSchema, WizardStepSchema, } from "./wizard.js";
@@ -117,6 +118,7 @@ export const ProtocolSchemas = {
117
118
  DevicePairListParams: DevicePairListParamsSchema,
118
119
  DevicePairApproveParams: DevicePairApproveParamsSchema,
119
120
  DevicePairRejectParams: DevicePairRejectParamsSchema,
121
+ DevicePairRemoveParams: DevicePairRemoveParamsSchema,
120
122
  DeviceTokenRotateParams: DeviceTokenRotateParamsSchema,
121
123
  DeviceTokenRevokeParams: DeviceTokenRevokeParamsSchema,
122
124
  DevicePairRequestedEvent: DevicePairRequestedEventSchema,
@@ -127,6 +129,7 @@ export const ProtocolSchemas = {
127
129
  ChatInjectParams: ChatInjectParamsSchema,
128
130
  ChatEvent: ChatEventSchema,
129
131
  UpdateRunParams: UpdateRunParamsSchema,
132
+ PushTestParams: PushTestParamsSchema,
130
133
  TickEvent: TickEventSchema,
131
134
  ShutdownEvent: ShutdownEventSchema,
132
135
  };
@@ -0,0 +1,18 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { NonEmptyString } from "./primitives.js";
3
+ const ApnsEnvironmentSchema = Type.String({ enum: ["sandbox", "production"] });
4
+ export const PushTestParamsSchema = Type.Object({
5
+ nodeId: NonEmptyString,
6
+ title: Type.Optional(Type.String()),
7
+ body: Type.Optional(Type.String()),
8
+ environment: Type.Optional(ApnsEnvironmentSchema),
9
+ }, { additionalProperties: false });
10
+ export const PushTestResultSchema = Type.Object({
11
+ ok: Type.Boolean(),
12
+ status: Type.Integer(),
13
+ apnsId: Type.Optional(Type.String()),
14
+ reason: Type.Optional(Type.String()),
15
+ tokenSuffix: Type.String(),
16
+ topic: Type.String(),
17
+ environment: ApnsEnvironmentSchema,
18
+ }, { additionalProperties: false });