@poolzin/pool-bot 2026.2.25 → 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 (506) hide show
  1. package/dist/acp/event-mapper.js +87 -22
  2. package/dist/acp/meta.js +12 -6
  3. package/dist/agents/agent-paths.js +8 -9
  4. package/dist/agents/agent-scope.js +7 -5
  5. package/dist/agents/auth-profiles/oauth.js +148 -64
  6. package/dist/agents/auth-profiles/session-override.js +13 -7
  7. package/dist/agents/bash-tools.exec-host-gateway.js +14 -4
  8. package/dist/agents/bash-tools.exec-runtime.js +2 -25
  9. package/dist/agents/bedrock-discovery.js +3 -1
  10. package/dist/agents/byteplus-models.js +97 -0
  11. package/dist/agents/chutes-oauth.js +1 -0
  12. package/dist/agents/cli-runner/helpers.js +4 -0
  13. package/dist/agents/compaction.js +41 -14
  14. package/dist/agents/doubao-models.js +121 -0
  15. package/dist/agents/failover-error.js +2 -0
  16. package/dist/agents/huggingface-models.js +5 -3
  17. package/dist/agents/live-model-filter.js +5 -0
  18. package/dist/agents/minimax-vlm.js +10 -8
  19. package/dist/agents/model-auth.js +6 -0
  20. package/dist/agents/model-catalog.js +3 -1
  21. package/dist/agents/model-selection.js +7 -1
  22. package/dist/agents/models-config.providers.js +93 -11
  23. package/dist/agents/ollama-stream.js +117 -4
  24. package/dist/agents/opencode-zen-models.js +22 -11
  25. package/dist/agents/pi-embedded-helpers/errors.js +55 -33
  26. package/dist/agents/pi-embedded-helpers/messaging-dedupe.js +10 -5
  27. package/dist/agents/pi-embedded-helpers/thinking.js +10 -5
  28. package/dist/agents/pi-embedded-helpers.js +1 -1
  29. package/dist/agents/pi-embedded-runner/compact.js +29 -7
  30. package/dist/agents/pi-embedded-runner/extensions.js +28 -26
  31. package/dist/agents/pi-embedded-runner/google.js +20 -8
  32. package/dist/agents/pi-embedded-runner/run/attempt.js +95 -36
  33. package/dist/agents/pi-embedded-runner/run.js +71 -12
  34. package/dist/agents/pi-embedded-runner/run.overflow-compaction.mocks.shared.js +11 -2
  35. package/dist/agents/pi-embedded-runner/session-manager-cache.js +11 -7
  36. package/dist/agents/pi-embedded-runner/system-prompt.js +2 -0
  37. package/dist/agents/pi-embedded-runner/thinking.js +42 -0
  38. package/dist/agents/pi-embedded-runner/tool-name-allowlist.js +19 -0
  39. package/dist/agents/pi-embedded-runner/utils.js +7 -10
  40. package/dist/agents/pi-embedded-subscribe.handlers.lifecycle.js +45 -56
  41. package/dist/agents/pi-embedded-subscribe.handlers.tools.js +2 -2
  42. package/dist/agents/pi-embedded-subscribe.js +9 -4
  43. package/dist/agents/pi-embedded-subscribe.tools.js +68 -14
  44. package/dist/agents/pi-embedded-utils.js +3 -0
  45. package/dist/agents/pi-extensions/compaction-safeguard-runtime.js +4 -20
  46. package/dist/agents/pi-extensions/compaction-safeguard.js +75 -33
  47. package/dist/agents/pi-settings.js +40 -0
  48. package/dist/agents/pi-tools.policy.js +2 -1
  49. package/dist/agents/provider/config-loader.js +1 -1
  50. package/dist/agents/sandbox/browser.js +170 -33
  51. package/dist/agents/sandbox/config-hash.js +14 -27
  52. package/dist/agents/sandbox/config.js +21 -2
  53. package/dist/agents/sandbox/constants.js +2 -0
  54. package/dist/agents/sandbox/docker.js +16 -2
  55. package/dist/agents/sandbox/novnc-auth.js +62 -0
  56. package/dist/agents/sandbox/sanitize-env-vars.js +1 -1
  57. package/dist/agents/sandbox/shared.js +10 -6
  58. package/dist/agents/sandbox-paths.js +24 -11
  59. package/dist/agents/schema/clean-for-gemini.js +132 -85
  60. package/dist/agents/session-slug.js +10 -5
  61. package/dist/agents/session-tool-result-guard-wrapper.js +1 -0
  62. package/dist/agents/session-tool-result-guard.js +3 -1
  63. package/dist/agents/session-transcript-repair.js +40 -6
  64. package/dist/agents/skills/bundled-dir.js +19 -5
  65. package/dist/agents/skills/env-overrides.js +124 -43
  66. package/dist/agents/skills/frontmatter.js +6 -6
  67. package/dist/agents/skills/plugin-skills.js +14 -7
  68. package/dist/agents/skills/workspace.js +1 -0
  69. package/dist/agents/subagent-announce.js +251 -49
  70. package/dist/agents/subagent-lifecycle-events.js +19 -0
  71. package/dist/agents/subagent-registry-cleanup.js +31 -0
  72. package/dist/agents/subagent-registry-completion.js +68 -0
  73. package/dist/agents/subagent-registry-queries.js +117 -0
  74. package/dist/agents/subagent-registry-state.js +46 -0
  75. package/dist/agents/subagent-registry.js +252 -221
  76. package/dist/agents/subagent-registry.store.js +1 -0
  77. package/dist/agents/subagent-registry.types.js +1 -0
  78. package/dist/agents/subagent-spawn.js +195 -7
  79. package/dist/agents/system-prompt.js +22 -6
  80. package/dist/agents/test-helpers/fast-coding-tools.js +1 -18
  81. package/dist/agents/test-helpers/fast-core-tools.js +1 -17
  82. package/dist/agents/timeout.js +18 -6
  83. package/dist/agents/tool-call-id.js +1 -1
  84. package/dist/agents/tool-display-common.js +162 -29
  85. package/dist/agents/tool-images.js +82 -9
  86. package/dist/agents/tool-policy.js +51 -26
  87. package/dist/agents/tools/browser-tool.js +2 -2
  88. package/dist/agents/tools/canvas-tool.js +27 -1
  89. package/dist/agents/tools/common.js +45 -0
  90. package/dist/agents/tools/discord-actions-guild.js +4 -1
  91. package/dist/agents/tools/gateway-tool.js +3 -1
  92. package/dist/agents/tools/nodes-utils.js +1 -10
  93. package/dist/agents/tools/sessions-send-helpers.js +12 -6
  94. package/dist/agents/tools/sessions-spawn-tool.js +8 -2
  95. package/dist/agents/tools/subagents-tool.js +2 -1
  96. package/dist/agents/tools/whatsapp-actions.js +10 -2
  97. package/dist/agents/tools/whatsapp-target-auth.js +18 -0
  98. package/dist/agents/transcript-policy.js +22 -8
  99. package/dist/agents/venice-models.js +11 -3
  100. package/dist/auto-reply/commands-registry.data.js +51 -0
  101. package/dist/auto-reply/commands-registry.js +4 -3
  102. package/dist/auto-reply/group-activation.js +10 -5
  103. package/dist/auto-reply/inbound-debounce.js +10 -5
  104. package/dist/auto-reply/reply/abort.js +1 -1
  105. package/dist/auto-reply/reply/agent-runner-execution.js +4 -1
  106. package/dist/auto-reply/reply/bash-command.js +41 -39
  107. package/dist/auto-reply/reply/command-gates.js +25 -0
  108. package/dist/auto-reply/reply/commands-allowlist.js +111 -72
  109. package/dist/auto-reply/reply/commands-bash.js +6 -5
  110. package/dist/auto-reply/reply/commands-config.js +30 -28
  111. package/dist/auto-reply/reply/commands-core.js +2 -1
  112. package/dist/auto-reply/reply/commands-info.js +1 -0
  113. package/dist/auto-reply/reply/commands-models.js +65 -14
  114. package/dist/auto-reply/reply/commands-session.js +237 -82
  115. package/dist/auto-reply/reply/commands-setunset.js +45 -0
  116. package/dist/auto-reply/reply/commands-subagents/action-agents.js +44 -0
  117. package/dist/auto-reply/reply/commands-subagents/action-focus.js +64 -0
  118. package/dist/auto-reply/reply/commands-subagents/action-help.js +4 -0
  119. package/dist/auto-reply/reply/commands-subagents/action-info.js +45 -0
  120. package/dist/auto-reply/reply/commands-subagents/action-kill.js +60 -0
  121. package/dist/auto-reply/reply/commands-subagents/action-list.js +44 -0
  122. package/dist/auto-reply/reply/commands-subagents/action-log.js +29 -0
  123. package/dist/auto-reply/reply/commands-subagents/action-send.js +119 -0
  124. package/dist/auto-reply/reply/commands-subagents/action-spawn.js +52 -0
  125. package/dist/auto-reply/reply/commands-subagents/action-unfocus.js +30 -0
  126. package/dist/auto-reply/reply/commands-subagents/shared.js +303 -0
  127. package/dist/auto-reply/reply/commands-subagents.js +51 -587
  128. package/dist/auto-reply/reply/commands-tts.js +10 -5
  129. package/dist/auto-reply/reply/config-value.js +10 -5
  130. package/dist/auto-reply/reply/directive-handling.model-picker.js +12 -6
  131. package/dist/auto-reply/reply/directive-handling.persist.js +9 -21
  132. package/dist/auto-reply/reply/directive-handling.shared.js +24 -4
  133. package/dist/auto-reply/reply/followup-runner.js +1 -0
  134. package/dist/auto-reply/reply/get-reply-directives-utils.js +23 -14
  135. package/dist/auto-reply/reply/get-reply-directives.js +17 -28
  136. package/dist/auto-reply/reply/get-reply-inline-actions.js +1 -0
  137. package/dist/auto-reply/reply/get-reply.js +71 -12
  138. package/dist/auto-reply/reply/model-selection.js +80 -39
  139. package/dist/auto-reply/reply/queue/enqueue.js +10 -5
  140. package/dist/auto-reply/reply/queue/state.js +13 -12
  141. package/dist/auto-reply/reply/reply-payloads.js +67 -36
  142. package/dist/auto-reply/reply/reply-reference.js +9 -8
  143. package/dist/auto-reply/reply/route-reply.js +15 -8
  144. package/dist/auto-reply/reply/session-reset-prompt.js +1 -1
  145. package/dist/auto-reply/reply/session.js +22 -6
  146. package/dist/auto-reply/reply/strip-inbound-meta.js +147 -0
  147. package/dist/auto-reply/reply/subagents-utils.js +56 -30
  148. package/dist/auto-reply/reply/typing.js +46 -21
  149. package/dist/auto-reply/send-policy.js +14 -7
  150. package/dist/auto-reply/status.js +140 -16
  151. package/dist/auto-reply/templating.js +10 -5
  152. package/dist/auto-reply/thinking.js +7 -16
  153. package/dist/auto-reply/tokens.js +21 -5
  154. package/dist/browser/bridge-server.js +36 -20
  155. package/dist/browser/cdp.helpers.js +7 -14
  156. package/dist/browser/cdp.js +35 -15
  157. package/dist/browser/chrome.profile-decoration.js +7 -4
  158. package/dist/browser/config.js +4 -0
  159. package/dist/browser/extension-relay-auth.js +55 -0
  160. package/dist/browser/extension-relay.js +74 -29
  161. package/dist/browser/navigation-guard.js +9 -1
  162. package/dist/browser/paths.js +77 -0
  163. package/dist/browser/profiles.js +13 -8
  164. package/dist/browser/pw-ai-module.js +10 -5
  165. package/dist/browser/pw-session.js +76 -39
  166. package/dist/browser/pw-tools-core.interactions.js +14 -7
  167. package/dist/browser/pw-tools-core.state.js +12 -6
  168. package/dist/browser/routes/agent.act.js +2 -2
  169. package/dist/browser/server-context.js +7 -0
  170. package/dist/build-info.json +3 -3
  171. package/dist/channels/allow-from.js +2 -1
  172. package/dist/channels/allowlists/resolve-utils.js +43 -19
  173. package/dist/channels/channel-config.js +14 -7
  174. package/dist/channels/draft-stream-loop.js +7 -0
  175. package/dist/channels/model-overrides.js +82 -0
  176. package/dist/channels/plugins/normalize/imessage.js +14 -7
  177. package/dist/channels/plugins/normalize/slack.js +10 -5
  178. package/dist/channels/plugins/normalize/telegram.js +14 -7
  179. package/dist/channels/plugins/outbound/discord.js +80 -8
  180. package/dist/channels/plugins/outbound/signal.js +11 -11
  181. package/dist/channels/plugins/setup-helpers.js +10 -5
  182. package/dist/channels/sender-label.js +14 -7
  183. package/dist/channels/session.js +4 -2
  184. package/dist/channels/status-reactions.js +297 -0
  185. package/dist/cli/banner.js +1 -1
  186. package/dist/cli/browser-cli-actions-input/register.files-downloads.js +65 -56
  187. package/dist/cli/cli-name.js +11 -11
  188. package/dist/cli/cli-utils.js +13 -3
  189. package/dist/cli/command-format.js +1 -1
  190. package/dist/cli/config-cli.js +1 -1
  191. package/dist/cli/daemon-cli/lifecycle-core.js +31 -19
  192. package/dist/cli/daemon-cli/lifecycle.js +64 -2
  193. package/dist/cli/daemon-cli/restart-health.js +126 -0
  194. package/dist/cli/daemon-cli/status.gather.js +9 -13
  195. package/dist/cli/daemon-cli/status.print.js +2 -10
  196. package/dist/cli/deps.js +27 -22
  197. package/dist/cli/gateway-cli/run-loop.js +23 -5
  198. package/dist/cli/node-cli/register.js +14 -5
  199. package/dist/cli/nodes-media-utils.js +7 -2
  200. package/dist/cli/outbound-send-deps.js +2 -9
  201. package/dist/cli/outbound-send-mapping.js +11 -0
  202. package/dist/cli/pairing-cli.js +40 -14
  203. package/dist/cli/plugins-cli.js +34 -41
  204. package/dist/cli/ports.js +11 -10
  205. package/dist/cli/program/command-registry.js +2 -11
  206. package/dist/cli/program/command-tree.js +16 -0
  207. package/dist/cli/program/preaction.js +13 -9
  208. package/dist/cli/program/register.configure.js +3 -18
  209. package/dist/cli/program/register.maintenance.js +2 -2
  210. package/dist/cli/program/register.onboard.js +2 -0
  211. package/dist/cli/program/register.status-health-sessions.js +16 -17
  212. package/dist/cli/program/register.subclis.js +93 -52
  213. package/dist/cli/route.js +11 -7
  214. package/dist/cli/system-cli.js +36 -46
  215. package/dist/cli/update-cli/shared.js +22 -9
  216. package/dist/cli/update-cli/update-command.js +89 -14
  217. package/dist/cli/update-cli/wizard.js +6 -12
  218. package/dist/commands/agent/run-context.js +18 -5
  219. package/dist/commands/agent/session-store.js +17 -4
  220. package/dist/commands/agent.js +22 -2
  221. package/dist/commands/agents.bindings.js +14 -7
  222. package/dist/commands/agents.commands.add.js +13 -9
  223. package/dist/commands/agents.commands.identity.js +12 -6
  224. package/dist/commands/agents.commands.list.js +11 -6
  225. package/dist/commands/agents.config.js +8 -10
  226. package/dist/commands/agents.providers.js +12 -6
  227. package/dist/commands/auth-choice-options.js +103 -75
  228. package/dist/commands/auth-choice.apply.byteplus.js +55 -0
  229. package/dist/commands/auth-choice.apply.js +4 -0
  230. package/dist/commands/auth-choice.apply.minimax.js +61 -13
  231. package/dist/commands/auth-choice.apply.openai.js +3 -1
  232. package/dist/commands/auth-choice.apply.volcengine.js +55 -0
  233. package/dist/commands/auth-choice.preferred-provider.js +2 -0
  234. package/dist/commands/channels/remove.js +13 -6
  235. package/dist/commands/channels/shared.js +4 -14
  236. package/dist/commands/configure.commands.js +14 -0
  237. package/dist/commands/configure.gateway.js +2 -4
  238. package/dist/commands/configure.js +1 -1
  239. package/dist/commands/configure.shared.js +11 -0
  240. package/dist/commands/daemon-install-helpers.js +2 -2
  241. package/dist/commands/dashboard.js +12 -10
  242. package/dist/commands/docs.js +14 -8
  243. package/dist/commands/doctor-config-flow.js +11 -9
  244. package/dist/commands/doctor-legacy-config.js +281 -0
  245. package/dist/commands/doctor-state-integrity.js +99 -23
  246. package/dist/commands/doctor-update.js +12 -9
  247. package/dist/commands/models/list.list-command.js +7 -5
  248. package/dist/commands/models/set-image.js +2 -21
  249. package/dist/commands/node-daemon-install-helpers.js +10 -8
  250. package/dist/commands/onboard-auth.config-minimax.js +54 -80
  251. package/dist/commands/onboard-auth.config-opencode.js +2 -18
  252. package/dist/commands/onboard-auth.credentials.js +90 -13
  253. package/dist/commands/onboard-auth.js +1 -1
  254. package/dist/commands/onboard-auth.models.js +6 -5
  255. package/dist/commands/onboard-hooks.js +1 -1
  256. package/dist/commands/onboard-non-interactive/api-keys.js +14 -7
  257. package/dist/commands/onboard-non-interactive/local/auth-choice.js +64 -49
  258. package/dist/commands/onboard-provider-auth-flags.js +14 -0
  259. package/dist/commands/onboard-remote.js +14 -7
  260. package/dist/commands/onboard.js +11 -13
  261. package/dist/commands/sandbox-display.js +6 -5
  262. package/dist/commands/status-all/diagnosis.js +14 -10
  263. package/dist/commands/status-all/format.js +1 -0
  264. package/dist/commands/status.gateway-probe.js +1 -16
  265. package/dist/commands/systemd-linger.js +12 -6
  266. package/dist/config/agent-limits.js +2 -0
  267. package/dist/config/commands.js +30 -16
  268. package/dist/config/config-paths.js +9 -11
  269. package/dist/config/defaults.js +22 -2
  270. package/dist/config/discord-preview-streaming.js +104 -0
  271. package/dist/config/env-vars.js +37 -8
  272. package/dist/config/includes.js +4 -0
  273. package/dist/config/io.js +97 -12
  274. package/dist/config/legacy.migrations.part-1.js +189 -78
  275. package/dist/config/legacy.shared.js +3 -1
  276. package/dist/config/merge-patch.js +4 -0
  277. package/dist/config/prototype-keys.js +4 -0
  278. package/dist/config/schema.help.js +44 -7
  279. package/dist/config/schema.labels.js +38 -6
  280. package/dist/config/sessions/delivery-info.js +10 -3
  281. package/dist/config/sessions/main-session.js +10 -5
  282. package/dist/config/sessions/session-file.js +33 -0
  283. package/dist/config/sessions/session-key.js +10 -5
  284. package/dist/config/sessions/store.js +1 -1
  285. package/dist/config/sessions.js +1 -0
  286. package/dist/config/zod-schema.agent-runtime.js +11 -0
  287. package/dist/config/zod-schema.js +148 -13
  288. package/dist/config/zod-schema.providers-core.js +78 -4
  289. package/dist/config/zod-schema.providers.js +6 -1
  290. package/dist/config/zod-schema.session.js +41 -2
  291. package/dist/cron/run-log.js +3 -0
  292. package/dist/cron/schedule.js +21 -10
  293. package/dist/cron/service/ops.js +35 -21
  294. package/dist/cron/service/timer.js +116 -16
  295. package/dist/cron/stagger.js +3 -1
  296. package/dist/discord/api.js +12 -6
  297. package/dist/discord/draft-chunking.js +22 -0
  298. package/dist/discord/draft-stream.js +124 -0
  299. package/dist/discord/monitor/agent-components.js +1 -1
  300. package/dist/discord/monitor/commands.js +5 -0
  301. package/dist/discord/monitor/gateway-plugin.js +2 -1
  302. package/dist/discord/monitor/listeners.js +37 -27
  303. package/dist/discord/monitor/message-handler.js +4 -1
  304. package/dist/discord/monitor/message-handler.preflight.js +65 -8
  305. package/dist/discord/monitor/message-handler.process.js +246 -217
  306. package/dist/discord/monitor/message-utils.js +143 -6
  307. package/dist/discord/monitor/model-picker-preferences.js +143 -0
  308. package/dist/discord/monitor/model-picker.js +651 -0
  309. package/dist/discord/monitor/native-command.js +573 -16
  310. package/dist/discord/monitor/provider.allowlist.js +223 -0
  311. package/dist/discord/monitor/provider.js +275 -347
  312. package/dist/discord/monitor/provider.lifecycle.js +100 -0
  313. package/dist/discord/monitor/reply-delivery.js +123 -16
  314. package/dist/discord/monitor/thread-bindings.discord-api.js +215 -0
  315. package/dist/discord/monitor/thread-bindings.js +4 -0
  316. package/dist/discord/monitor/thread-bindings.lifecycle.js +177 -0
  317. package/dist/discord/monitor/thread-bindings.manager.js +423 -0
  318. package/dist/discord/monitor/thread-bindings.messages.js +55 -0
  319. package/dist/discord/monitor/thread-bindings.state.js +358 -0
  320. package/dist/discord/monitor/thread-bindings.types.js +6 -0
  321. package/dist/discord/resolve-users.js +33 -21
  322. package/dist/discord/send.channels.js +15 -0
  323. package/dist/discord/send.js +3 -2
  324. package/dist/discord/send.outbound.js +82 -26
  325. package/dist/discord/send.permissions.js +83 -30
  326. package/dist/discord/send.reactions.js +8 -4
  327. package/dist/discord/token.js +10 -5
  328. package/dist/discord/voice/command.js +263 -0
  329. package/dist/discord/voice/manager.js +531 -0
  330. package/dist/gateway/auth.js +34 -10
  331. package/dist/gateway/call.js +4 -16
  332. package/dist/gateway/client.js +28 -4
  333. package/dist/gateway/config-reload.js +3 -4
  334. package/dist/gateway/control-ui.js +219 -96
  335. package/dist/gateway/hooks-mapping.js +88 -38
  336. package/dist/gateway/http-auth-helpers.js +3 -2
  337. package/dist/gateway/http-endpoint-helpers.js +1 -0
  338. package/dist/gateway/net.js +54 -12
  339. package/dist/gateway/node-invoke-system-run-approval.js +14 -35
  340. package/dist/gateway/node-registry.js +10 -5
  341. package/dist/gateway/openai-http.js +1 -0
  342. package/dist/gateway/openresponses-http.js +1 -0
  343. package/dist/gateway/origin-check.js +1 -18
  344. package/dist/gateway/protocol/index.js +4 -3
  345. package/dist/gateway/protocol/schema/cron.js +1 -0
  346. package/dist/gateway/protocol/schema/devices.js +1 -0
  347. package/dist/gateway/protocol/schema/protocol-schemas.js +2 -1
  348. package/dist/gateway/protocol/schema/sessions.js +6 -0
  349. package/dist/gateway/role-policy.js +17 -0
  350. package/dist/gateway/server/ws-connection/connect-policy.js +37 -0
  351. package/dist/gateway/server/ws-connection/message-handler.js +175 -148
  352. package/dist/gateway/server-chat.js +83 -25
  353. package/dist/gateway/server-constants.js +10 -9
  354. package/dist/gateway/server-cron.js +1 -0
  355. package/dist/gateway/server-http.js +16 -7
  356. package/dist/gateway/server-maintenance.js +20 -5
  357. package/dist/gateway/server-methods/chat.js +10 -6
  358. package/dist/gateway/server-methods/config.js +12 -14
  359. package/dist/gateway/server-methods/devices.js +17 -3
  360. package/dist/gateway/server-methods/models.js +11 -1
  361. package/dist/gateway/server-methods/sessions.js +64 -8
  362. package/dist/gateway/server-methods/usage.js +162 -75
  363. package/dist/gateway/server-node-events.js +29 -0
  364. package/dist/gateway/server-runtime-config.js +34 -13
  365. package/dist/gateway/server-startup-memory.js +17 -11
  366. package/dist/gateway/session-utils.fs.js +32 -34
  367. package/dist/gateway/sessions-resolve.js +17 -5
  368. package/dist/gateway/test-helpers.openai-mock.js +14 -7
  369. package/dist/gateway/tools-invoke-http.js +21 -10
  370. package/dist/hooks/bundled/bootstrap-extra-files/handler.js +3 -1
  371. package/dist/hooks/bundled/command-logger/handler.js +7 -2
  372. package/dist/hooks/bundled/session-memory/handler.js +6 -5
  373. package/dist/hooks/frontmatter.js +6 -6
  374. package/dist/hooks/gmail-watcher.js +11 -6
  375. package/dist/hooks/internal-hooks.js +11 -1
  376. package/dist/hooks/llm-slug-generator.js +4 -1
  377. package/dist/hooks/workspace.js +47 -17
  378. package/dist/imessage/accounts.js +9 -20
  379. package/dist/imessage/monitor/inbound-processing.js +2 -1
  380. package/dist/infra/archive.js +174 -73
  381. package/dist/infra/control-ui-assets.js +14 -6
  382. package/dist/infra/device-pairing.js +108 -29
  383. package/dist/infra/env.js +10 -5
  384. package/dist/infra/exec-approvals-allowlist.js +122 -0
  385. package/dist/infra/exec-approvals-analysis.js +34 -3
  386. package/dist/infra/exec-approvals.js +5 -17
  387. package/dist/infra/exec-safe-bin-policy.js +53 -45
  388. package/dist/infra/fs-safe.js +71 -39
  389. package/dist/infra/gateway-lock.js +6 -2
  390. package/dist/infra/heartbeat-wake.js +6 -12
  391. package/dist/infra/host-env-security-policy.json +19 -0
  392. package/dist/infra/host-env-security.js +66 -0
  393. package/dist/infra/net/ssrf.js +131 -38
  394. package/dist/infra/outbound/bound-delivery-router.js +88 -0
  395. package/dist/infra/outbound/channel-selection.js +12 -6
  396. package/dist/infra/outbound/envelope.js +1 -1
  397. package/dist/infra/outbound/format.js +12 -6
  398. package/dist/infra/outbound/payloads.js +14 -7
  399. package/dist/infra/outbound/session-binding-service.js +123 -0
  400. package/dist/infra/path-guards.js +25 -0
  401. package/dist/infra/provider-usage.fetch.codex.js +7 -15
  402. package/dist/infra/provider-usage.fetch.gemini.js +14 -11
  403. package/dist/infra/provider-usage.fetch.shared.js +30 -1
  404. package/dist/infra/provider-usage.fetch.zai.js +10 -9
  405. package/dist/infra/retry-policy.js +4 -2
  406. package/dist/infra/retry.js +9 -5
  407. package/dist/infra/session-cost-usage.js +107 -59
  408. package/dist/infra/session-maintenance-warning.js +3 -1
  409. package/dist/infra/shell-env.js +98 -34
  410. package/dist/infra/ssh-config.js +12 -6
  411. package/dist/infra/system-run-command.js +49 -4
  412. package/dist/infra/update-channels.js +10 -5
  413. package/dist/line/accounts.js +5 -7
  414. package/dist/line/bot-access.js +8 -20
  415. package/dist/line/bot-handlers.js +3 -1
  416. package/dist/link-understanding/detect.js +15 -7
  417. package/dist/media/constants.js +15 -6
  418. package/dist/media/image-ops.js +7 -0
  419. package/dist/media/local-roots.js +3 -2
  420. package/dist/media-understanding/apply.js +4 -1
  421. package/dist/media-understanding/concurrency.js +8 -20
  422. package/dist/memory/backend-config.js +45 -6
  423. package/dist/memory/embeddings.js +10 -4
  424. package/dist/memory/fs-utils.js +23 -0
  425. package/dist/memory/manager-search.js +12 -6
  426. package/dist/memory/manager-sync-ops.js +12 -2
  427. package/dist/memory/qmd-manager.js +466 -53
  428. package/dist/memory/query-expansion.js +167 -3
  429. package/dist/memory/status-format.js +10 -5
  430. package/dist/memory/sync-memory-files.js +1 -1
  431. package/dist/node-host/invoke-system-run.js +281 -0
  432. package/dist/node-host/invoke.js +55 -337
  433. package/dist/pairing/pairing-store.js +22 -0
  434. package/dist/plugin-sdk/allow-from.js +1 -1
  435. package/dist/plugin-sdk/command-auth.js +3 -1
  436. package/dist/plugin-sdk/index.js +6 -3
  437. package/dist/plugin-sdk/webhook-targets.js +32 -0
  438. package/dist/plugins/bundled-dir.js +9 -6
  439. package/dist/plugins/hooks.js +50 -0
  440. package/dist/plugins/install.js +28 -16
  441. package/dist/plugins/runtime.js +3 -17
  442. package/dist/plugins/update.js +78 -12
  443. package/dist/process/spawn-utils.js +14 -7
  444. package/dist/providers/github-copilot-token.js +11 -6
  445. package/dist/providers/qwen-portal-oauth.js +14 -6
  446. package/dist/routing/account-id.js +30 -0
  447. package/dist/routing/resolve-route.js +3 -7
  448. package/dist/routing/session-key.js +2 -16
  449. package/dist/security/audit-channel.js +93 -2
  450. package/dist/security/audit-extra.async.js +159 -5
  451. package/dist/security/audit-extra.js +1 -1
  452. package/dist/security/audit-extra.sync.js +85 -6
  453. package/dist/security/audit.js +40 -4
  454. package/dist/security/dm-policy-shared.js +44 -0
  455. package/dist/security/external-content.js +26 -6
  456. package/dist/shared/entry-status.js +6 -0
  457. package/dist/shared/frontmatter.js +5 -5
  458. package/dist/shared/node-match.js +11 -4
  459. package/dist/shared/operator-scope-compat.js +8 -3
  460. package/dist/signal/accounts.js +7 -20
  461. package/dist/signal/monitor/event-handler.js +3 -1
  462. package/dist/slack/accounts.js +6 -19
  463. package/dist/slack/actions.js +11 -3
  464. package/dist/slack/monitor/auth.js +1 -1
  465. package/dist/slack/monitor/message-handler/dispatch.js +50 -29
  466. package/dist/slack/monitor/replies.js +15 -7
  467. package/dist/slack/monitor/slash.js +22 -13
  468. package/dist/slack/resolve-channels.js +10 -5
  469. package/dist/slack/send.js +102 -12
  470. package/dist/slack/stream-mode.js +10 -0
  471. package/dist/slack/streaming.js +4 -2
  472. package/dist/telegram/accounts.js +19 -14
  473. package/dist/telegram/bot/helpers.js +3 -5
  474. package/dist/telegram/bot-access.js +35 -36
  475. package/dist/telegram/bot-handlers.js +120 -148
  476. package/dist/telegram/bot-message-context.js +68 -9
  477. package/dist/telegram/bot-message-dispatch.js +155 -90
  478. package/dist/telegram/bot-native-commands.js +16 -0
  479. package/dist/telegram/draft-stream.js +14 -1
  480. package/dist/telegram/inline-buttons.js +5 -15
  481. package/dist/telegram/monitor.js +11 -7
  482. package/dist/telegram/network-config.js +19 -7
  483. package/dist/telegram/send.js +3 -2
  484. package/dist/telegram/sent-message-cache.js +5 -6
  485. package/dist/telegram/status-reaction-variants.js +208 -0
  486. package/dist/telegram/sticker-cache.js +11 -9
  487. package/dist/terminal/theme.js +12 -12
  488. package/dist/tts/tts.js +80 -567
  489. package/dist/tui/components/chat-log.js +41 -8
  490. package/dist/tui/theme/theme.js +10 -12
  491. package/dist/tui/tui-local-shell.js +16 -6
  492. package/dist/tui/tui.js +58 -6
  493. package/dist/utils/account-id.js +2 -4
  494. package/dist/utils/boolean.js +10 -5
  495. package/dist/utils/directive-tags.js +11 -0
  496. package/dist/utils/queue-helpers.js +67 -12
  497. package/dist/web/auto-reply/deliver-reply.js +8 -4
  498. package/dist/web/auto-reply/mentions.js +10 -5
  499. package/dist/web/auto-reply/monitor/group-members.js +14 -7
  500. package/dist/web/auto-reply/monitor/process-message.js +45 -24
  501. package/dist/web/inbound/access-control.js +5 -2
  502. package/dist/web/login-qr.js +12 -6
  503. package/dist/web/media.js +123 -16
  504. package/extensions/bluebubbles/src/monitor-processing.ts +580 -139
  505. package/extensions/bluebubbles/src/monitor.ts +208 -1950
  506. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import fs from "node:fs/promises";
2
2
  import os from "node:os";
3
- import { createAgentSession, estimateTokens, SessionManager, SettingsManager, } from "@mariozechner/pi-coding-agent";
3
+ import { createAgentSession, DefaultResourceLoader, estimateTokens, SessionManager, SettingsManager, } from "@mariozechner/pi-coding-agent";
4
4
  import { resolveHeartbeatPrompt } from "../../auto-reply/heartbeat.js";
5
5
  import { resolveChannelCapabilities } from "../../config/channel-capabilities.js";
6
6
  import { getMachineDisplayName } from "../../infra/machine-name.js";
@@ -24,7 +24,7 @@ import { resolvePoolbotDocsPath } from "../docs-path.js";
24
24
  import { getApiKeyForModel, resolveModelAuthMode } from "../model-auth.js";
25
25
  import { ensurePoolbotModelsJson } from "../models-config.js";
26
26
  import { ensureSessionHeader, validateAnthropicTurns, validateGeminiTurns, } from "../pi-embedded-helpers.js";
27
- import { ensurePiCompactionReserveTokens, resolveCompactionReserveTokensFloor, } from "../pi-settings.js";
27
+ import { applyPiCompactionSettingsFromConfig } from "../pi-settings.js";
28
28
  import { createPoolbotCodingTools } from "../pi-tools.js";
29
29
  import { resolveSandboxContext } from "../sandbox.js";
30
30
  import { repairSessionFileIfNeeded } from "../session-file-repair.js";
@@ -35,7 +35,7 @@ import { detectRuntimeShell } from "../shell-utils.js";
35
35
  import { applySkillEnvOverrides, applySkillEnvOverridesFromSnapshot, loadWorkspaceSkillEntries, resolveSkillsPromptForRun, } from "../skills.js";
36
36
  import { resolveTranscriptPolicy } from "../transcript-policy.js";
37
37
  import { compactWithSafetyTimeout, EMBEDDED_COMPACTION_TIMEOUT_MS, } from "./compaction-safety-timeout.js";
38
- import { buildEmbeddedExtensionPaths } from "./extensions.js";
38
+ import { buildEmbeddedExtensionFactories } from "./extensions.js";
39
39
  import { logToolSchemasForGoogle, sanitizeSessionHistory, sanitizeToolsForGoogle, } from "./google.js";
40
40
  import { getDmHistoryLimitFromSessionKey, limitHistoryTurns } from "./history.js";
41
41
  import { resolveGlobalLane, resolveSessionLane } from "./lanes.js";
@@ -44,6 +44,7 @@ import { buildModelAliasLines, resolveModel } from "./model.js";
44
44
  import { buildEmbeddedSandboxInfo } from "./sandbox-info.js";
45
45
  import { prewarmSessionFile, trackSessionManagerAccess } from "./session-manager-cache.js";
46
46
  import { applySystemPromptOverrideToSession, buildEmbeddedSystemPrompt, createSystemPromptOverride, } from "./system-prompt.js";
47
+ import { collectAllowedToolNames } from "./tool-name-allowlist.js";
47
48
  import { splitSdkTools } from "./tool-split.js";
48
49
  import { describeUnknownError, mapThinkingLevel } from "./utils.js";
49
50
  import { flushPendingToolResultsAfterIdle } from "./wait-for-idle-before-flush.js";
@@ -276,6 +277,7 @@ export async function compactEmbeddedPiSessionDirect(params) {
276
277
  modelAuthMode: resolveModelAuthMode(model.provider, params.config),
277
278
  });
278
279
  const tools = sanitizeToolsForGoogle({ tools: toolsRaw, provider });
280
+ const allowedToolNames = collectAllowedToolNames({ tools });
279
281
  logToolSchemasForGoogle({ tools, provider });
280
282
  const machineName = await getMachineDisplayName();
281
283
  const runtimeChannel = normalizeMessageChannel(params.messageChannel ?? params.messageProvider);
@@ -372,6 +374,10 @@ export async function compactEmbeddedPiSessionDirect(params) {
372
374
  reasoningLevel: params.reasoningLevel ?? "off",
373
375
  extraSystemPrompt: params.extraSystemPrompt,
374
376
  ownerNumbers: params.ownerNumbers,
377
+ ownerDisplay: params.config?.commands?.ownerDisplay,
378
+ ownerDisplaySecret: params.config?.commands?.ownerDisplaySecret ??
379
+ params.config?.gateway?.auth?.token ??
380
+ params.config?.gateway?.remote?.token,
375
381
  reasoningTagHint,
376
382
  heartbeatPrompt: isDefaultAgent
377
383
  ? resolveHeartbeatPrompt(params.config?.agents?.defaults?.heartbeat?.prompt)
@@ -414,21 +420,35 @@ export async function compactEmbeddedPiSessionDirect(params) {
414
420
  agentId: sessionAgentId,
415
421
  sessionKey: params.sessionKey,
416
422
  allowSyntheticToolResults: transcriptPolicy.allowSyntheticToolResults,
423
+ allowedToolNames,
417
424
  });
418
425
  trackSessionManagerAccess(params.sessionFile);
419
426
  const settingsManager = SettingsManager.create(effectiveWorkspace, agentDir);
420
- ensurePiCompactionReserveTokens({
427
+ applyPiCompactionSettingsFromConfig({
421
428
  settingsManager,
422
- minReserveTokens: resolveCompactionReserveTokensFloor(params.config),
429
+ cfg: params.config,
423
430
  });
424
- // Call for side effects (sets compaction/pruning runtime state)
425
- buildEmbeddedExtensionPaths({
431
+ // Sets compaction/pruning runtime state and returns extension factories
432
+ // that must be passed to the resource loader for the safeguard to be active.
433
+ const extensionFactories = buildEmbeddedExtensionFactories({
426
434
  cfg: params.config,
427
435
  sessionManager,
428
436
  provider,
429
437
  modelId,
430
438
  model,
431
439
  });
440
+ // Only create an explicit resource loader when there are extension factories
441
+ // to register; otherwise let createAgentSession use its built-in default.
442
+ let resourceLoader;
443
+ if (extensionFactories.length > 0) {
444
+ resourceLoader = new DefaultResourceLoader({
445
+ cwd: resolvedWorkspace,
446
+ agentDir,
447
+ settingsManager,
448
+ extensionFactories,
449
+ });
450
+ await resourceLoader.reload();
451
+ }
432
452
  const { builtInTools, customTools } = splitSdkTools({
433
453
  tools,
434
454
  sandboxEnabled: !!sandbox?.enabled,
@@ -444,6 +464,7 @@ export async function compactEmbeddedPiSessionDirect(params) {
444
464
  customTools,
445
465
  sessionManager,
446
466
  settingsManager,
467
+ resourceLoader,
447
468
  });
448
469
  applySystemPromptOverrideToSession(session, systemPromptOverride());
449
470
  try {
@@ -452,6 +473,7 @@ export async function compactEmbeddedPiSessionDirect(params) {
452
473
  modelApi: model.api,
453
474
  modelId,
454
475
  provider,
476
+ allowedToolNames,
455
477
  config: params.config,
456
478
  sessionManager,
457
479
  sessionId: params.sessionId,
@@ -1,20 +1,13 @@
1
- import path from "node:path";
2
- import { fileURLToPath } from "node:url";
3
1
  import { resolveContextWindowInfo } from "../context-window-guard.js";
4
2
  import { DEFAULT_CONTEXT_TOKENS } from "../defaults.js";
5
3
  import { setCompactionSafeguardRuntime } from "../pi-extensions/compaction-safeguard-runtime.js";
4
+ import compactionSafeguardExtension from "../pi-extensions/compaction-safeguard.js";
5
+ import contextPruningExtension from "../pi-extensions/context-pruning.js";
6
6
  import { setContextPruningRuntime } from "../pi-extensions/context-pruning/runtime.js";
7
7
  import { computeEffectiveSettings } from "../pi-extensions/context-pruning/settings.js";
8
8
  import { makeToolPrunablePredicate } from "../pi-extensions/context-pruning/tools.js";
9
9
  import { ensurePiCompactionReserveTokens } from "../pi-settings.js";
10
10
  import { isCacheTtlEligibleProvider, readLastCacheTtlTimestamp } from "./cache-ttl.js";
11
- function resolvePiExtensionPath(id) {
12
- const self = fileURLToPath(import.meta.url);
13
- const dir = path.dirname(self);
14
- // In dev this file is `.ts` (tsx), in production it's `.js`.
15
- const ext = path.extname(self) === ".ts" ? "ts" : "js";
16
- return path.join(dir, "..", "pi-extensions", `${id}.${ext}`);
17
- }
18
11
  function resolveContextWindowTokens(params) {
19
12
  return resolveContextWindowInfo({
20
13
  cfg: params.cfg,
@@ -24,41 +17,50 @@ function resolveContextWindowTokens(params) {
24
17
  defaultTokens: DEFAULT_CONTEXT_TOKENS,
25
18
  }).tokens;
26
19
  }
27
- function buildContextPruningExtension(params) {
20
+ function buildContextPruningFactory(params) {
28
21
  const raw = params.cfg?.agents?.defaults?.contextPruning;
29
- if (raw?.mode !== "cache-ttl")
30
- return {};
31
- if (!isCacheTtlEligibleProvider(params.provider, params.modelId))
32
- return {};
22
+ if (raw?.mode !== "cache-ttl") {
23
+ return undefined;
24
+ }
25
+ if (!isCacheTtlEligibleProvider(params.provider, params.modelId)) {
26
+ return undefined;
27
+ }
33
28
  const settings = computeEffectiveSettings(raw);
34
- if (!settings)
35
- return {};
29
+ if (!settings) {
30
+ return undefined;
31
+ }
36
32
  setContextPruningRuntime(params.sessionManager, {
37
33
  settings,
38
34
  contextWindowTokens: resolveContextWindowTokens(params),
39
35
  isToolPrunable: makeToolPrunablePredicate(settings.tools),
40
36
  lastCacheTouchAt: readLastCacheTtlTimestamp(params.sessionManager),
41
37
  });
42
- return {
43
- additionalExtensionPaths: [resolvePiExtensionPath("context-pruning")],
44
- };
38
+ return contextPruningExtension;
45
39
  }
46
40
  function resolveCompactionMode(cfg) {
47
41
  return cfg?.agents?.defaults?.compaction?.mode === "safeguard" ? "safeguard" : "default";
48
42
  }
49
- export function buildEmbeddedExtensionPaths(params) {
50
- const paths = [];
43
+ export function buildEmbeddedExtensionFactories(params) {
44
+ const factories = [];
51
45
  if (resolveCompactionMode(params.cfg) === "safeguard") {
52
46
  const compactionCfg = params.cfg?.agents?.defaults?.compaction;
47
+ const contextWindowInfo = resolveContextWindowInfo({
48
+ cfg: params.cfg,
49
+ provider: params.provider,
50
+ modelId: params.modelId,
51
+ modelContextWindow: params.model?.contextWindow,
52
+ defaultTokens: DEFAULT_CONTEXT_TOKENS,
53
+ });
53
54
  setCompactionSafeguardRuntime(params.sessionManager, {
54
55
  maxHistoryShare: compactionCfg?.maxHistoryShare,
56
+ contextWindowTokens: contextWindowInfo.tokens,
55
57
  });
56
- paths.push(resolvePiExtensionPath("compaction-safeguard"));
58
+ factories.push(compactionSafeguardExtension);
57
59
  }
58
- const pruning = buildContextPruningExtension(params);
59
- if (pruning.additionalExtensionPaths) {
60
- paths.push(...pruning.additionalExtensionPaths);
60
+ const pruningFactory = buildContextPruningFactory(params);
61
+ if (pruningFactory) {
62
+ factories.push(pruningFactory);
61
63
  }
62
- return paths;
64
+ return factories;
63
65
  }
64
66
  export { ensurePiCompactionReserveTokens };
@@ -7,6 +7,7 @@ import { cleanToolSchemaForGemini } from "../pi-tools.schema.js";
7
7
  import { sanitizeToolCallInputs, stripToolResultDetails, sanitizeToolUseResultPairing, } from "../session-transcript-repair.js";
8
8
  import { resolveTranscriptPolicy } from "../transcript-policy.js";
9
9
  import { log } from "./logger.js";
10
+ import { dropThinkingBlocks } from "./thinking.js";
10
11
  import { describeUnknownError } from "./utils.js";
11
12
  const GOOGLE_TURN_ORDERING_CUSTOM_TYPE = "google-turn-ordering-bootstrap";
12
13
  const GOOGLE_SCHEMA_UNSUPPORTED_KEYWORDS = new Set([
@@ -71,6 +72,12 @@ export function sanitizeAntigravityThinkingBlocks(messages) {
71
72
  const rec = block;
72
73
  const candidate = rec.thinkingSignature ?? rec.signature ?? rec.thought_signature ?? rec.thoughtSignature;
73
74
  if (!isValidAntigravitySignature(candidate)) {
75
+ // Preserve reasoning content as plain text when signatures are invalid/missing.
76
+ // Antigravity Claude rejects unsigned thinking blocks, but dropping them loses context.
77
+ const thinkingText = block.thinking;
78
+ if (typeof thinkingText === "string" && thinkingText.trim()) {
79
+ nextContent.push({ type: "text", text: thinkingText });
80
+ }
74
81
  contentChanged = true;
75
82
  continue;
76
83
  }
@@ -199,11 +206,11 @@ function findUnsupportedSchemaKeywords(schema, path) {
199
206
  return violations;
200
207
  }
201
208
  export function sanitizeToolsForGoogle(params) {
202
- // google-antigravity serves Anthropic models (e.g. claude-opus-4-6-thinking),
203
- // NOT Gemini. Applying Gemini schema cleaning strips JSON Schema keywords
204
- // (minimum, maximum, format, etc.) that Anthropic's API requires for
205
- // draft 2020-12 compliance. Only clean for actual Gemini providers.
206
- if (params.provider !== "google-gemini-cli") {
209
+ // Cloud Code Assist uses the OpenAPI 3.03 `parameters` field for both Gemini
210
+ // AND Claude models. This field does not support JSON Schema keywords such as
211
+ // patternProperties, additionalProperties, $ref, etc. We must clean schemas
212
+ // for every provider that routes through this path.
213
+ if (params.provider !== "google-gemini-cli" && params.provider !== "google-antigravity") {
207
214
  return params.tools;
208
215
  }
209
216
  return params.tools.map((tool) => {
@@ -350,10 +357,15 @@ export async function sanitizeSessionHistory(params) {
350
357
  sanitizeThoughtSignatures: policy.sanitizeThoughtSignatures,
351
358
  ...resolveImageSanitizationLimits(params.config),
352
359
  });
353
- const sanitizedThinking = policy.normalizeAntigravityThinkingBlocks
354
- ? sanitizeAntigravityThinkingBlocks(sanitizedImages)
360
+ const droppedThinking = policy.dropThinkingBlocks
361
+ ? dropThinkingBlocks(sanitizedImages)
355
362
  : sanitizedImages;
356
- const sanitizedToolCalls = sanitizeToolCallInputs(sanitizedThinking);
363
+ const sanitizedThinking = policy.sanitizeThinkingSignatures
364
+ ? sanitizeAntigravityThinkingBlocks(droppedThinking)
365
+ : droppedThinking;
366
+ const sanitizedToolCalls = sanitizeToolCallInputs(sanitizedThinking, {
367
+ allowedToolNames: params.allowedToolNames,
368
+ });
357
369
  const repairedTools = policy.repairToolUseResultPairing
358
370
  ? sanitizeToolUseResultPairing(sanitizedToolCalls)
359
371
  : sanitizedToolCalls;
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs/promises";
2
2
  import os from "node:os";
3
3
  import { streamSimple } from "@mariozechner/pi-ai";
4
- import { createAgentSession, SessionManager, SettingsManager } from "@mariozechner/pi-coding-agent";
4
+ import { createAgentSession, DefaultResourceLoader, SessionManager, SettingsManager, } from "@mariozechner/pi-coding-agent";
5
5
  import { resolveHeartbeatPrompt } from "../../../auto-reply/heartbeat.js";
6
6
  import { resolveChannelCapabilities } from "../../../config/channel-capabilities.js";
7
7
  import { getMachineDisplayName } from "../../../infra/machine-name.js";
@@ -30,7 +30,7 @@ import { resolveDefaultModelForAgent } from "../../model-selection.js";
30
30
  import { createOllamaStreamFn, OLLAMA_NATIVE_BASE_URL } from "../../ollama-stream.js";
31
31
  import { isCloudCodeAssistFormatError, resolveBootstrapMaxChars, resolveBootstrapTotalMaxChars, validateAnthropicTurns, validateGeminiTurns, } from "../../pi-embedded-helpers.js";
32
32
  import { subscribeEmbeddedPiSession } from "../../pi-embedded-subscribe.js";
33
- import { ensurePiCompactionReserveTokens, resolveCompactionReserveTokensFloor, } from "../../pi-settings.js";
33
+ import { applyPiCompactionSettingsFromConfig } from "../../pi-settings.js";
34
34
  import { toClientToolDefinitions } from "../../pi-tool-definition-adapter.js";
35
35
  import { createPoolbotCodingTools, resolveToolLoopDetectionConfig } from "../../pi-tools.js";
36
36
  import { resolveSandboxContext } from "../../sandbox.js";
@@ -47,7 +47,7 @@ import { resolveTranscriptPolicy } from "../../transcript-policy.js";
47
47
  import { DEFAULT_BOOTSTRAP_FILENAME } from "../../workspace.js";
48
48
  import { isRunnerAbortError } from "../abort.js";
49
49
  import { appendCacheTtlTimestamp, isCacheTtlEligibleProvider } from "../cache-ttl.js";
50
- import { buildEmbeddedExtensionPaths } from "../extensions.js";
50
+ import { buildEmbeddedExtensionFactories } from "../extensions.js";
51
51
  import { applyExtraParamsToAgent } from "../extra-params.js";
52
52
  import { logToolSchemasForGoogle, sanitizeAntigravityThinkingBlocks, sanitizeSessionHistory, sanitizeToolsForGoogle, } from "../google.js";
53
53
  import { getDmHistoryLimitFromSessionKey, limitHistoryTurns } from "../history.js";
@@ -58,6 +58,8 @@ import { buildEmbeddedSandboxInfo } from "../sandbox-info.js";
58
58
  import { prewarmSessionFile, trackSessionManagerAccess } from "../session-manager-cache.js";
59
59
  import { prepareSessionManagerForRun } from "../session-manager-init.js";
60
60
  import { applySystemPromptOverrideToSession, buildEmbeddedSystemPrompt, createSystemPromptOverride, } from "../system-prompt.js";
61
+ import { dropThinkingBlocks } from "../thinking.js";
62
+ import { collectAllowedToolNames } from "../tool-name-allowlist.js";
61
63
  import { installToolResultContextGuard } from "../tool-result-context-guard.js";
62
64
  import { splitSdkTools } from "../tool-split.js";
63
65
  import { describeUnknownError, mapThinkingLevel } from "../utils.js";
@@ -101,6 +103,37 @@ export function injectHistoryImagesIntoMessages(messages, historyImagesByIndex)
101
103
  }
102
104
  return didMutate;
103
105
  }
106
+ export async function resolvePromptBuildHookResult(params) {
107
+ const promptBuildResult = params.hookRunner?.hasHooks("before_prompt_build")
108
+ ? await params.hookRunner
109
+ .runBeforePromptBuild({
110
+ prompt: params.prompt,
111
+ messages: params.messages,
112
+ }, params.hookCtx)
113
+ .catch((hookErr) => {
114
+ log.warn(`before_prompt_build hook failed: ${String(hookErr)}`);
115
+ return undefined;
116
+ })
117
+ : undefined;
118
+ const legacyResult = params.legacyBeforeAgentStartResult ??
119
+ (params.hookRunner?.hasHooks("before_agent_start")
120
+ ? await params.hookRunner
121
+ .runBeforeAgentStart({
122
+ prompt: params.prompt,
123
+ messages: params.messages,
124
+ }, params.hookCtx)
125
+ .catch((hookErr) => {
126
+ log.warn(`before_agent_start hook (legacy prompt build path) failed: ${String(hookErr)}`);
127
+ return undefined;
128
+ })
129
+ : undefined);
130
+ return {
131
+ systemPrompt: promptBuildResult?.systemPrompt ?? legacyResult?.systemPrompt,
132
+ prependContext: [promptBuildResult?.prependContext, legacyResult?.prependContext]
133
+ .filter((value) => Boolean(value))
134
+ .join("\n\n"),
135
+ };
136
+ }
104
137
  function summarizeMessagePayload(msg) {
105
138
  const content = msg.content;
106
139
  if (typeof content === "string") {
@@ -244,6 +277,10 @@ export async function runEmbeddedAttempt(params) {
244
277
  disableMessageTool: params.disableMessageTool,
245
278
  });
246
279
  const tools = sanitizeToolsForGoogle({ tools: toolsRaw, provider: params.provider });
280
+ const allowedToolNames = collectAllowedToolNames({
281
+ tools,
282
+ clientTools: params.clientTools,
283
+ });
247
284
  logToolSchemasForGoogle({ tools, provider: params.provider });
248
285
  const machineName = await getMachineDisplayName();
249
286
  const runtimeChannel = normalizeMessageChannel(params.messageChannel ?? params.messageProvider);
@@ -349,6 +386,10 @@ export async function runEmbeddedAttempt(params) {
349
386
  reasoningLevel: params.reasoningLevel ?? "off",
350
387
  extraSystemPrompt: params.extraSystemPrompt,
351
388
  ownerNumbers: params.ownerNumbers,
389
+ ownerDisplay: params.config?.commands?.ownerDisplay,
390
+ ownerDisplaySecret: params.config?.commands?.ownerDisplaySecret ??
391
+ params.config?.gateway?.auth?.token ??
392
+ params.config?.gateway?.remote?.token,
352
393
  reasoningTagHint,
353
394
  heartbeatPrompt: isDefaultAgent
354
395
  ? resolveHeartbeatPrompt(params.config?.agents?.defaults?.heartbeat?.prompt)
@@ -424,6 +465,7 @@ export async function runEmbeddedAttempt(params) {
424
465
  sessionKey: params.sessionKey,
425
466
  inputProvenance: params.inputProvenance,
426
467
  allowSyntheticToolResults: transcriptPolicy.allowSyntheticToolResults,
468
+ allowedToolNames,
427
469
  });
428
470
  trackSessionManagerAccess(params.sessionFile);
429
471
  await prepareSessionManagerForRun({
@@ -434,18 +476,31 @@ export async function runEmbeddedAttempt(params) {
434
476
  cwd: effectiveWorkspace,
435
477
  });
436
478
  const settingsManager = SettingsManager.create(effectiveWorkspace, agentDir);
437
- ensurePiCompactionReserveTokens({
479
+ applyPiCompactionSettingsFromConfig({
438
480
  settingsManager,
439
- minReserveTokens: resolveCompactionReserveTokensFloor(params.config),
481
+ cfg: params.config,
440
482
  });
441
- // Call for side effects (sets compaction/pruning runtime state)
442
- buildEmbeddedExtensionPaths({
483
+ // Sets compaction/pruning runtime state and returns extension factories
484
+ // that must be passed to the resource loader for the safeguard to be active.
485
+ const extensionFactories = buildEmbeddedExtensionFactories({
443
486
  cfg: params.config,
444
487
  sessionManager,
445
488
  provider: params.provider,
446
489
  modelId: params.modelId,
447
490
  model: params.model,
448
491
  });
492
+ // Only create an explicit resource loader when there are extension factories
493
+ // to register; otherwise let createAgentSession use its built-in default.
494
+ let resourceLoader;
495
+ if (extensionFactories.length > 0) {
496
+ resourceLoader = new DefaultResourceLoader({
497
+ cwd: resolvedWorkspace,
498
+ agentDir,
499
+ settingsManager,
500
+ extensionFactories,
501
+ });
502
+ await resourceLoader.reload();
503
+ }
449
504
  // Get hook runner early so it's available when creating tools
450
505
  const hookRunner = getGlobalHookRunner();
451
506
  const { builtInTools, customTools } = splitSdkTools({
@@ -479,6 +534,7 @@ export async function runEmbeddedAttempt(params) {
479
534
  customTools: allCustomTools,
480
535
  sessionManager,
481
536
  settingsManager,
537
+ resourceLoader,
482
538
  }));
483
539
  applySystemPromptOverrideToSession(session, systemPromptText);
484
540
  if (!session) {
@@ -533,6 +589,28 @@ export async function runEmbeddedAttempt(params) {
533
589
  });
534
590
  activeSession.agent.streamFn = cacheTrace.wrapStreamFn(activeSession.agent.streamFn);
535
591
  }
592
+ // Copilot/Claude can reject persisted `thinking` blocks (e.g. thinkingSignature:"reasoning_text")
593
+ // on *any* follow-up provider call (including tool continuations). Wrap the stream function
594
+ // so every outbound request sees sanitized messages.
595
+ if (transcriptPolicy.dropThinkingBlocks) {
596
+ const inner = activeSession.agent.streamFn;
597
+ activeSession.agent.streamFn = (model, context, options) => {
598
+ const ctx = context;
599
+ const messages = ctx?.messages;
600
+ if (!Array.isArray(messages)) {
601
+ return inner(model, context, options);
602
+ }
603
+ const sanitized = dropThinkingBlocks(messages);
604
+ if (sanitized === messages) {
605
+ return inner(model, context, options);
606
+ }
607
+ const nextContext = {
608
+ ...context,
609
+ messages: sanitized,
610
+ };
611
+ return inner(model, nextContext, options);
612
+ };
613
+ }
536
614
  if (anthropicPayloadLogger) {
537
615
  activeSession.agent.streamFn = anthropicPayloadLogger.wrapStreamFn(activeSession.agent.streamFn);
538
616
  }
@@ -542,6 +620,7 @@ export async function runEmbeddedAttempt(params) {
542
620
  modelApi: params.model.api,
543
621
  modelId: params.modelId,
544
622
  provider: params.provider,
623
+ allowedToolNames,
545
624
  config: params.config,
546
625
  sessionManager,
547
626
  sessionId: params.sessionId,
@@ -725,34 +804,13 @@ export async function runEmbeddedAttempt(params) {
725
804
  workspaceDir: params.workspaceDir,
726
805
  messageProvider: params.messageProvider ?? undefined,
727
806
  };
728
- const promptBuildResult = hookRunner?.hasHooks("before_prompt_build")
729
- ? await hookRunner
730
- .runBeforePromptBuild({
731
- prompt: params.prompt,
732
- messages: activeSession.messages,
733
- }, hookCtx)
734
- .catch((hookErr) => {
735
- log.warn(`before_prompt_build hook failed: ${String(hookErr)}`);
736
- return undefined;
737
- })
738
- : undefined;
739
- const legacyResult = hookRunner?.hasHooks("before_agent_start")
740
- ? await hookRunner
741
- .runBeforeAgentStart({
742
- prompt: params.prompt,
743
- messages: activeSession.messages,
744
- }, hookCtx)
745
- .catch((hookErr) => {
746
- log.warn(`before_agent_start hook (legacy prompt build path) failed: ${String(hookErr)}`);
747
- return undefined;
748
- })
749
- : undefined;
750
- const hookResult = {
751
- systemPrompt: promptBuildResult?.systemPrompt ?? legacyResult?.systemPrompt,
752
- prependContext: [promptBuildResult?.prependContext, legacyResult?.prependContext]
753
- .filter((value) => Boolean(value))
754
- .join("\n\n"),
755
- };
807
+ const hookResult = await resolvePromptBuildHookResult({
808
+ prompt: params.prompt,
809
+ messages: activeSession.messages,
810
+ hookCtx,
811
+ hookRunner,
812
+ legacyBeforeAgentStartResult: params.legacyBeforeAgentStartResult,
813
+ });
756
814
  {
757
815
  if (hookResult?.prependContext) {
758
816
  effectivePrompt = `${hookResult.prependContext}\n\n${params.prompt}`;
@@ -774,7 +832,8 @@ export async function runEmbeddedAttempt(params) {
774
832
  sessionManager.resetLeaf();
775
833
  }
776
834
  const sessionContext = sessionManager.buildSessionContext();
777
- const sanitizedOrphan = transcriptPolicy.normalizeAntigravityThinkingBlocks
835
+ const sanitizedOrphan = transcriptPolicy.sanitizeThinkingSignatures ||
836
+ transcriptPolicy.normalizeAntigravityThinkingBlocks
778
837
  ? sanitizeAntigravityThinkingBlocks(sessionContext.messages)
779
838
  : sessionContext.messages;
780
839
  activeSession.agent.replaceMessages(sanitizedOrphan);