@poolzin/pool-bot 2026.2.17 → 2026.2.19

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 (488) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/agents/agent-scope.js +4 -0
  3. package/dist/agents/announce-idempotency.js +14 -0
  4. package/dist/agents/auth-profiles.resolve-auth-profile-order.fixtures.js +23 -0
  5. package/dist/agents/bash-tools.exec-runtime.js +438 -0
  6. package/dist/agents/bash-tools.shared.js +6 -0
  7. package/dist/agents/cli-runner/reliability.js +61 -0
  8. package/dist/agents/cli-watchdog-defaults.js +11 -0
  9. package/dist/agents/command-poll-backoff.js +63 -0
  10. package/dist/agents/current-time.js +16 -0
  11. package/dist/agents/model-alias-lines.js +18 -0
  12. package/dist/agents/model-auth-label.js +61 -0
  13. package/dist/agents/models-config.e2e-harness.js +115 -0
  14. package/dist/agents/ollama-stream.js +11 -3
  15. package/dist/agents/openclaw-tools.js +135 -0
  16. package/dist/agents/pi-auth-json.js +118 -0
  17. package/dist/agents/pi-embedded-runner/run.overflow-compaction.mocks.shared.js +147 -0
  18. package/dist/agents/pi-embedded-subscribe.e2e-harness.js +90 -0
  19. package/dist/agents/pi-embedded-subscribe.handlers.compaction.js +63 -0
  20. package/dist/agents/pi-embedded-subscribe.handlers.tools.media.test-helpers.js +30 -0
  21. package/dist/agents/pi-extensions/session-manager-runtime-registry.js +23 -0
  22. package/dist/agents/pi-tools.js +2 -0
  23. package/dist/agents/queued-file-writer.js +22 -0
  24. package/dist/agents/sandbox/docker.js +133 -40
  25. package/dist/agents/sandbox/fs-bridge.js +146 -0
  26. package/dist/agents/sandbox/fs-paths.js +205 -0
  27. package/dist/agents/sandbox/hash.js +4 -0
  28. package/dist/agents/sandbox-paths.js +3 -0
  29. package/dist/agents/session-dirs.js +20 -0
  30. package/dist/agents/skills/filter.js +24 -0
  31. package/dist/agents/skills/tools-dir.js +9 -0
  32. package/dist/agents/skills-install-download.js +290 -0
  33. package/dist/agents/skills-install-output.js +30 -0
  34. package/dist/agents/skills-install.download-test-utils.js +36 -0
  35. package/dist/agents/skills.e2e-test-helpers.js +13 -0
  36. package/dist/agents/subagent-announce-queue.js +59 -15
  37. package/dist/agents/subagent-depth.js +137 -0
  38. package/dist/agents/subagent-registry.js +448 -96
  39. package/dist/agents/subagent-spawn.js +262 -0
  40. package/dist/agents/test-helpers/fast-tool-stubs.js +18 -0
  41. package/dist/agents/test-helpers/host-sandbox-fs-bridge.js +74 -0
  42. package/dist/agents/tool-display-common.js +782 -0
  43. package/dist/agents/tools/image-tool.js +1 -1
  44. package/dist/agents/tools/sessions-access.js +178 -0
  45. package/dist/agents/tools/sessions-resolution.js +206 -0
  46. package/dist/agents/tools/subagents-tool.js +616 -0
  47. package/dist/agents/workspace-dir.js +18 -0
  48. package/dist/agents/workspace-dirs.js +14 -0
  49. package/dist/agents/workspace.js +70 -0
  50. package/dist/auto-reply/heartbeat-reply-payload.js +18 -0
  51. package/dist/auto-reply/reply/commands-export-session.js +163 -0
  52. package/dist/auto-reply/reply/commands-mesh.js +245 -0
  53. package/dist/auto-reply/reply/commands-setunset.js +28 -0
  54. package/dist/auto-reply/reply/commands-slash-parse.js +31 -0
  55. package/dist/auto-reply/reply/commands-system-prompt.js +117 -0
  56. package/dist/auto-reply/reply/directive-handling.levels.js +17 -0
  57. package/dist/auto-reply/reply/directive-handling.params.js +1 -0
  58. package/dist/auto-reply/reply/directive-parsing.js +36 -0
  59. package/dist/auto-reply/reply/dispatcher-registry.js +43 -0
  60. package/dist/auto-reply/reply/elevated-unavailable.js +20 -0
  61. package/dist/auto-reply/reply/reply-delivery.js +92 -0
  62. package/dist/auto-reply/reply/session-reset-prompt.js +1 -0
  63. package/dist/auto-reply/reply/session-run-accounting.js +33 -0
  64. package/dist/auto-reply/reply.directive.directive-behavior.e2e-harness.js +115 -0
  65. package/dist/auto-reply/reply.directive.directive-behavior.e2e-mocks.js +12 -0
  66. package/dist/browser/bridge-auth-registry.js +26 -0
  67. package/dist/browser/client-actions-url.js +10 -0
  68. package/dist/browser/control-auth.js +73 -0
  69. package/dist/browser/csrf.js +64 -0
  70. package/dist/browser/http-auth.js +52 -0
  71. package/dist/browser/paths.js +37 -0
  72. package/dist/browser/proxy-files.js +32 -0
  73. package/dist/browser/pw-ai-state.js +7 -0
  74. package/dist/browser/resolved-config-refresh.js +42 -0
  75. package/dist/browser/routes/path-output.js +1 -0
  76. package/dist/browser/server-context.chrome-test-harness.js +20 -0
  77. package/dist/browser/server-middleware.js +31 -0
  78. package/dist/browser/test-port.js +16 -0
  79. package/dist/build-info.json +3 -3
  80. package/dist/canvas-host/file-resolver.js +43 -0
  81. package/dist/channels/account-summary.js +19 -0
  82. package/dist/channels/draft-stream-loop.js +77 -0
  83. package/dist/channels/plugins/account-helpers.js +26 -0
  84. package/dist/channels/telegram/allow-from.js +10 -0
  85. package/dist/cli/browser-cli-resize.js +22 -0
  86. package/dist/cli/browser-cli-shared.js +8 -0
  87. package/dist/cli/clawbot-cli.js +5 -0
  88. package/dist/cli/completion-cli.js +566 -0
  89. package/dist/cli/config-cli.js +63 -5
  90. package/dist/cli/daemon-cli/lifecycle-core.js +256 -0
  91. package/dist/cli/daemon-cli/register-service-commands.js +60 -0
  92. package/dist/cli/daemon-cli-compat.js +80 -0
  93. package/dist/cli/nodes-cli/pairing-render.js +26 -0
  94. package/dist/cli/program/action-reparse.js +17 -0
  95. package/dist/cli/program/command-registry.js +17 -0
  96. package/dist/cli/program/program-context.js +8 -0
  97. package/dist/cli/program/register.subclis.js +7 -0
  98. package/dist/cli/program/routes.js +233 -0
  99. package/dist/cli/qr-cli.js +132 -0
  100. package/dist/cli/requirements-test-fixtures.js +17 -0
  101. package/dist/cli/respawn-policy.js +4 -0
  102. package/dist/cli/shared/parse-port.js +18 -0
  103. package/dist/cli/skills-cli.format.js +241 -0
  104. package/dist/cli/update-cli/progress.js +121 -0
  105. package/dist/cli/update-cli/restart-helper.js +108 -0
  106. package/dist/cli/update-cli/shared.js +196 -0
  107. package/dist/cli/update-cli/status.js +97 -0
  108. package/dist/cli/update-cli/suppress-deprecations.js +17 -0
  109. package/dist/cli/update-cli/update-command.js +506 -0
  110. package/dist/cli/update-cli/wizard.js +130 -0
  111. package/dist/cli/update-cli.js +3 -9
  112. package/dist/cli/windows-argv.js +69 -0
  113. package/dist/commands/auth-choice-legacy.js +20 -0
  114. package/dist/commands/auth-choice.apply-helpers.js +8 -0
  115. package/dist/commands/channel-test-helpers.js +19 -0
  116. package/dist/commands/cleanup-plan.js +10 -0
  117. package/dist/commands/cleanup-utils.js +7 -0
  118. package/dist/commands/config-validation.js +15 -0
  119. package/dist/commands/doctor-completion.js +112 -0
  120. package/dist/commands/doctor-memory-search.js +119 -0
  121. package/dist/commands/doctor-session-locks.js +73 -0
  122. package/dist/commands/doctor.e2e-harness.js +364 -0
  123. package/dist/commands/gateway-presence.js +19 -0
  124. package/dist/commands/model-default.js +35 -0
  125. package/dist/commands/models/fallbacks-shared.js +102 -0
  126. package/dist/commands/models/shared.js +24 -0
  127. package/dist/commands/onboard-auth.config-gateways.js +64 -0
  128. package/dist/commands/onboard-auth.config-litellm.js +45 -0
  129. package/dist/commands/onboard-auth.config-shared.js +116 -0
  130. package/dist/commands/onboard-config.js +16 -0
  131. package/dist/commands/onboard-non-interactive.test-helpers.js +31 -0
  132. package/dist/commands/onboard-provider-auth-flags.js +136 -0
  133. package/dist/commands/openai-codex-oauth.js +40 -0
  134. package/dist/commands/test-runtime-config-helpers.js +21 -0
  135. package/dist/commands/test-wizard-helpers.js +68 -0
  136. package/dist/commands/vllm-setup.js +66 -0
  137. package/dist/compat/legacy-names.js +2 -0
  138. package/dist/config/backup-rotation.js +19 -0
  139. package/dist/config/env-preserve.js +122 -0
  140. package/dist/config/includes-scan.js +78 -0
  141. package/dist/config/plugins-allowlist.js +13 -0
  142. package/dist/config/schema.help.js +256 -0
  143. package/dist/config/schema.hints.js +189 -0
  144. package/dist/config/schema.irc.js +20 -0
  145. package/dist/config/schema.labels.js +317 -0
  146. package/dist/config/sessions/delivery-info.js +40 -0
  147. package/dist/config/types.irc.js +1 -0
  148. package/dist/config/zod-schema.agent-model.js +10 -0
  149. package/dist/config/zod-schema.allowdeny.js +35 -0
  150. package/dist/config/zod-schema.sensitive.js +4 -0
  151. package/dist/control-ui/assets/index-HRr1grwl.js.map +1 -1
  152. package/dist/cron/isolated-agent/skills-snapshot.js +26 -0
  153. package/dist/cron/isolated-agent/subagent-followup.js +127 -0
  154. package/dist/cron/isolated-agent.mocks.js +12 -0
  155. package/dist/cron/isolated-agent.test-setup.js +22 -0
  156. package/dist/cron/legacy-delivery.js +43 -0
  157. package/dist/cron/webhook-url.js +22 -0
  158. package/dist/daemon/arg-split.js +40 -0
  159. package/dist/daemon/exec-file.js +23 -0
  160. package/dist/daemon/output.js +6 -0
  161. package/dist/daemon/runtime-format.js +31 -0
  162. package/dist/daemon/schtasks-exec.js +4 -0
  163. package/dist/daemon/service-audit.js +22 -0
  164. package/dist/discord/client.js +41 -0
  165. package/dist/discord/components-registry.js +57 -0
  166. package/dist/discord/components.js +816 -0
  167. package/dist/discord/guilds.js +12 -0
  168. package/dist/discord/monitor/gateway-plugin.js +48 -0
  169. package/dist/discord/monitor/presence.js +30 -0
  170. package/dist/discord/send.components.js +115 -0
  171. package/dist/discord/send.shared.js +4 -0
  172. package/dist/discord/ui.js +26 -0
  173. package/dist/discord/voice-message.js +254 -0
  174. package/dist/gateway/agent-event-assistant-text.js +5 -0
  175. package/dist/gateway/agent-prompt.js +33 -0
  176. package/dist/gateway/auth-rate-limit.js +136 -0
  177. package/dist/gateway/channel-health-monitor.js +114 -0
  178. package/dist/gateway/control-ui-contract.js +1 -0
  179. package/dist/gateway/control-ui-csp.js +15 -0
  180. package/dist/gateway/gateway-config-prompts.shared.js +25 -0
  181. package/dist/gateway/http-auth-helpers.js +18 -0
  182. package/dist/gateway/http-common.js +18 -0
  183. package/dist/gateway/http-endpoint-helpers.js +27 -0
  184. package/dist/gateway/node-invoke-sanitize.js +11 -0
  185. package/dist/gateway/node-invoke-system-run-approval.js +205 -0
  186. package/dist/gateway/probe-auth.js +21 -0
  187. package/dist/gateway/protocol/index.js +7 -2
  188. package/dist/gateway/protocol/schema/mesh.js +54 -0
  189. package/dist/gateway/protocol/schema/protocol-schemas.js +7 -0
  190. package/dist/gateway/protocol/schema.js +1 -0
  191. package/dist/gateway/server/ws-connection/auth-messages.js +54 -0
  192. package/dist/gateway/server-channels.js +11 -0
  193. package/dist/gateway/server-methods/attachment-normalize.js +16 -0
  194. package/dist/gateway/server-methods/base-hash.js +8 -0
  195. package/dist/gateway/server-methods/mesh.js +700 -0
  196. package/dist/gateway/server-methods/nodes.handlers.invoke-result.js +55 -0
  197. package/dist/gateway/server-methods/restart-request.js +13 -0
  198. package/dist/gateway/server-methods/validation.js +8 -0
  199. package/dist/gateway/server.agent.gateway-server-agent.mocks.js +35 -0
  200. package/dist/gateway/server.e2e-registry-helpers.js +1 -0
  201. package/dist/gateway/server.e2e-ws-harness.js +20 -0
  202. package/dist/gateway/test-helpers.js +2 -0
  203. package/dist/gateway/test-helpers.server.js +3 -1
  204. package/dist/gateway/test-http-response.js +12 -0
  205. package/dist/gateway/test-openai-responses-model.js +20 -0
  206. package/dist/gateway/test-temp-config.js +30 -0
  207. package/dist/gateway/test-with-server.js +32 -0
  208. package/dist/hooks/bundled/bootstrap-extra-files/handler.js +46 -0
  209. package/dist/imessage/monitor/abort-handler.js +23 -0
  210. package/dist/imessage/monitor/inbound-processing.js +346 -0
  211. package/dist/imessage/monitor/parse-notification.js +64 -0
  212. package/dist/imessage/target-parsing-helpers.js +92 -0
  213. package/dist/infra/archive.js +244 -20
  214. package/dist/infra/detect-package-manager.js +26 -0
  215. package/dist/infra/exec-approvals-allowlist.js +257 -0
  216. package/dist/infra/exec-approvals-analysis.js +770 -0
  217. package/dist/infra/exec-approvals.js +13 -0
  218. package/dist/infra/file-lock.js +1 -0
  219. package/dist/infra/gemini-auth.js +39 -0
  220. package/dist/infra/heartbeat-active-hours.js +85 -0
  221. package/dist/infra/heartbeat-events-filter.js +50 -0
  222. package/dist/infra/heartbeat-runner.test-utils.js +39 -0
  223. package/dist/infra/http-body.js +265 -0
  224. package/dist/infra/install-package-dir.js +50 -0
  225. package/dist/infra/install-safe-path.js +49 -0
  226. package/dist/infra/json-files.js +49 -0
  227. package/dist/infra/jsonl-socket.js +52 -0
  228. package/dist/infra/map-size.js +14 -0
  229. package/dist/infra/net/hostname.js +7 -0
  230. package/dist/infra/npm-registry-spec.js +39 -0
  231. package/dist/infra/openclaw-root.js +109 -0
  232. package/dist/infra/outbound/delivery-queue.js +214 -0
  233. package/dist/infra/outbound/identity.js +23 -0
  234. package/dist/infra/outbound/message-action-params.js +307 -0
  235. package/dist/infra/outbound/tool-payload.js +21 -0
  236. package/dist/infra/package-json.js +23 -0
  237. package/dist/infra/pairing-files.js +19 -0
  238. package/dist/infra/pairing-token.js +9 -0
  239. package/dist/infra/path-prepend.js +51 -0
  240. package/dist/infra/process-respawn.js +49 -0
  241. package/dist/infra/runtime-status.js +16 -0
  242. package/dist/infra/session-cost-usage.types.js +1 -0
  243. package/dist/infra/session-maintenance-warning.js +89 -0
  244. package/dist/infra/system-run-command.js +78 -0
  245. package/dist/infra/tmp-openclaw-dir.js +81 -0
  246. package/dist/infra/tmp-poolbot-dir.js +2 -0
  247. package/dist/infra/update-channels.js +19 -0
  248. package/dist/line/actions.js +45 -0
  249. package/dist/line/channel-access-token.js +9 -0
  250. package/dist/line/flex-templates/basic-cards.js +332 -0
  251. package/dist/line/flex-templates/common.js +18 -0
  252. package/dist/line/flex-templates/media-control-cards.js +453 -0
  253. package/dist/line/flex-templates/message.js +10 -0
  254. package/dist/line/flex-templates/schedule-cards.js +399 -0
  255. package/dist/line/flex-templates/types.js +1 -0
  256. package/dist/line/webhook-node.js +100 -0
  257. package/dist/line/webhook-utils.js +11 -0
  258. package/dist/logging/timestamps.js +14 -0
  259. package/dist/markdown/whatsapp.js +62 -0
  260. package/dist/media/base64.js +34 -0
  261. package/dist/media/local-roots.js +32 -0
  262. package/dist/media/outbound-attachment.js +10 -0
  263. package/dist/media/read-response-with-limit.js +41 -0
  264. package/dist/media/sniff-mime-from-base64.js +19 -0
  265. package/dist/media-understanding/audio-preflight.js +67 -0
  266. package/dist/media-understanding/fs.js +13 -0
  267. package/dist/media-understanding/output-extract.js +26 -0
  268. package/dist/media-understanding/providers/audio.test-helpers.js +34 -0
  269. package/dist/media-understanding/providers/google/inline-data.js +64 -0
  270. package/dist/media-understanding/providers/shared.js +7 -0
  271. package/dist/media-understanding/runner.entries.js +459 -0
  272. package/dist/memory/batch-error-utils.js +11 -0
  273. package/dist/memory/batch-http.js +27 -0
  274. package/dist/memory/batch-output.js +29 -0
  275. package/dist/memory/batch-runner.js +22 -0
  276. package/dist/memory/batch-upload.js +23 -0
  277. package/dist/memory/batch-utils.js +26 -0
  278. package/dist/memory/embeddings-debug.js +11 -0
  279. package/dist/memory/embeddings-remote-client.js +22 -0
  280. package/dist/memory/embeddings-remote-fetch.js +14 -0
  281. package/dist/memory/manager-embedding-ops.js +616 -0
  282. package/dist/memory/manager-sync-ops.js +953 -0
  283. package/dist/memory/qmd-manager.js +1061 -0
  284. package/dist/memory/qmd-query-parser.js +107 -0
  285. package/dist/memory/qmd-scope.js +93 -0
  286. package/dist/memory/search-manager.js +0 -1
  287. package/dist/memory/sync-index.js +21 -0
  288. package/dist/memory/sync-progress.js +22 -0
  289. package/dist/memory/sync-stale.js +30 -0
  290. package/dist/memory/test-embeddings-mock.js +16 -0
  291. package/dist/memory/test-manager-helpers.js +14 -0
  292. package/dist/memory/test-runtime-mocks.js +11 -0
  293. package/dist/node-host/invoke-browser.js +177 -0
  294. package/dist/node-host/invoke.js +685 -0
  295. package/dist/pairing/setup-code.js +285 -0
  296. package/dist/plugin-sdk/account-id.js +1 -0
  297. package/dist/plugin-sdk/agent-media-payload.js +13 -0
  298. package/dist/plugin-sdk/allow-from.js +47 -0
  299. package/dist/plugin-sdk/command-auth.js +23 -0
  300. package/dist/plugin-sdk/config-paths.js +9 -0
  301. package/dist/plugin-sdk/file-lock.js +116 -0
  302. package/dist/plugin-sdk/json-store.js +31 -0
  303. package/dist/plugin-sdk/onboarding.js +28 -0
  304. package/dist/plugin-sdk/provider-auth-result.js +29 -0
  305. package/dist/plugin-sdk/slack-message-actions.js +133 -0
  306. package/dist/plugin-sdk/status-helpers.js +35 -0
  307. package/dist/plugin-sdk/text-chunking.js +31 -0
  308. package/dist/plugin-sdk/tool-send.js +12 -0
  309. package/dist/plugin-sdk/webhook-path.js +27 -0
  310. package/dist/plugin-sdk/webhook-targets.js +34 -0
  311. package/dist/plugins/hooks.test-helpers.js +21 -0
  312. package/dist/plugins/uninstall.js +171 -0
  313. package/dist/process/supervisor/adapters/child.js +143 -0
  314. package/dist/process/supervisor/adapters/env.js +13 -0
  315. package/dist/process/supervisor/adapters/pty.js +148 -0
  316. package/dist/process/supervisor/index.js +10 -0
  317. package/dist/process/supervisor/registry.js +117 -0
  318. package/dist/process/supervisor/supervisor.js +244 -0
  319. package/dist/process/supervisor/types.js +1 -0
  320. package/dist/providers/google-shared.test-helpers.js +75 -0
  321. package/dist/security/audit-channel.js +419 -0
  322. package/dist/security/audit-tool-policy.js +1 -0
  323. package/dist/security/scan-paths.js +12 -0
  324. package/dist/sessions/input-provenance.js +55 -0
  325. package/dist/sessions/session-key-utils.js +7 -0
  326. package/dist/shared/chat-content.js +31 -0
  327. package/dist/shared/chat-envelope.js +45 -0
  328. package/dist/shared/config-eval.js +117 -0
  329. package/dist/shared/device-auth.js +16 -0
  330. package/dist/shared/entry-metadata.js +9 -0
  331. package/dist/shared/entry-status.js +25 -0
  332. package/dist/shared/frontmatter.js +98 -0
  333. package/dist/shared/model-param-b.js +19 -0
  334. package/dist/shared/net/ipv4.js +17 -0
  335. package/dist/shared/node-match.js +53 -0
  336. package/dist/shared/requirements.js +128 -0
  337. package/dist/shared/subagents-format.js +84 -0
  338. package/dist/shared/usage-aggregates.js +28 -0
  339. package/dist/signal/monitor/mentions.js +45 -0
  340. package/dist/signal/rpc-context.js +19 -0
  341. package/dist/slack/blocks-fallback.js +76 -0
  342. package/dist/slack/blocks-input.js +40 -0
  343. package/dist/slack/draft-stream.js +106 -0
  344. package/dist/slack/message-actions.js +51 -0
  345. package/dist/slack/modal-metadata.js +32 -0
  346. package/dist/slack/monitor/events/interactions.js +462 -0
  347. package/dist/slack/monitor/room-context.js +17 -0
  348. package/dist/slack/stream-mode.js +41 -0
  349. package/dist/telegram/bot-native-command-menu.js +64 -0
  350. package/dist/telegram/bot.media.e2e-harness.js +81 -0
  351. package/dist/telegram/button-types.js +1 -0
  352. package/dist/telegram/group-access.js +65 -0
  353. package/dist/telegram/outbound-params.js +21 -0
  354. package/dist/telegram/poll-vote-cache.js +21 -0
  355. package/dist/terminal/health-style.js +36 -0
  356. package/dist/test-utils/chunk-test-helpers.js +21 -0
  357. package/dist/test-utils/env.js +72 -0
  358. package/dist/test-utils/exec-assertions.js +12 -0
  359. package/dist/test-utils/imessage-test-plugin.js +54 -0
  360. package/dist/test-utils/mock-http-response.js +17 -0
  361. package/dist/test-utils/vitest-mock-fn.js +1 -0
  362. package/dist/tts/tts-core.js +550 -0
  363. package/dist/utils/chunk-items.js +10 -0
  364. package/dist/utils/reaction-level.js +52 -0
  365. package/dist/utils/safe-json.js +22 -0
  366. package/dist/utils/with-timeout.js +14 -0
  367. package/dist/web/media.js +17 -5
  368. package/dist/whatsapp/resolve-outbound-target.js +42 -0
  369. package/dist/wizard/onboarding.completion.js +74 -0
  370. package/extensions/bluebubbles/src/account-resolve.ts +29 -0
  371. package/extensions/bluebubbles/src/monitor-normalize.ts +796 -0
  372. package/extensions/bluebubbles/src/monitor-processing.ts +1007 -0
  373. package/extensions/bluebubbles/src/monitor-reply-cache.ts +185 -0
  374. package/extensions/bluebubbles/src/monitor-shared.ts +51 -0
  375. package/extensions/bluebubbles/src/multipart.ts +32 -0
  376. package/extensions/bluebubbles/src/send-helpers.ts +53 -0
  377. package/extensions/bluebubbles/src/test-harness.ts +50 -0
  378. package/extensions/bluebubbles/src/test-mocks.ts +11 -0
  379. package/extensions/device-pair/index.ts +554 -0
  380. package/extensions/device-pair/poolbot.plugin.json +20 -0
  381. package/extensions/discord/src/channel.js +366 -0
  382. package/extensions/discord/src/runtime.js +10 -0
  383. package/extensions/feishu/index.ts +63 -0
  384. package/extensions/feishu/package.json +37 -0
  385. package/extensions/feishu/poolbot.plugin.json +10 -0
  386. package/extensions/feishu/skills/feishu-doc/SKILL.md +105 -0
  387. package/extensions/feishu/skills/feishu-doc/references/block-types.md +103 -0
  388. package/extensions/feishu/skills/feishu-drive/SKILL.md +97 -0
  389. package/extensions/feishu/skills/feishu-perm/SKILL.md +119 -0
  390. package/extensions/feishu/skills/feishu-wiki/SKILL.md +111 -0
  391. package/extensions/feishu/src/accounts.ts +114 -0
  392. package/extensions/feishu/src/bitable.ts +739 -0
  393. package/extensions/feishu/src/bot.ts +965 -0
  394. package/extensions/feishu/src/channel.ts +351 -0
  395. package/extensions/feishu/src/client.ts +118 -0
  396. package/extensions/feishu/src/config-schema.ts +206 -0
  397. package/extensions/feishu/src/dedup.ts +33 -0
  398. package/extensions/feishu/src/directory.ts +177 -0
  399. package/extensions/feishu/src/doc-schema.ts +47 -0
  400. package/extensions/feishu/src/docx.ts +536 -0
  401. package/extensions/feishu/src/drive-schema.ts +46 -0
  402. package/extensions/feishu/src/drive.ts +227 -0
  403. package/extensions/feishu/src/dynamic-agent.ts +131 -0
  404. package/extensions/feishu/src/media.ts +449 -0
  405. package/extensions/feishu/src/mention.ts +126 -0
  406. package/extensions/feishu/src/monitor.ts +330 -0
  407. package/extensions/feishu/src/onboarding.ts +359 -0
  408. package/extensions/feishu/src/outbound.ts +55 -0
  409. package/extensions/feishu/src/perm-schema.ts +52 -0
  410. package/extensions/feishu/src/perm.ts +173 -0
  411. package/extensions/feishu/src/policy.ts +84 -0
  412. package/extensions/feishu/src/probe.ts +44 -0
  413. package/extensions/feishu/src/reactions.ts +160 -0
  414. package/extensions/feishu/src/reply-dispatcher.ts +239 -0
  415. package/extensions/feishu/src/runtime.ts +14 -0
  416. package/extensions/feishu/src/send-result.ts +29 -0
  417. package/extensions/feishu/src/send.ts +335 -0
  418. package/extensions/feishu/src/streaming-card.ts +223 -0
  419. package/extensions/feishu/src/targets.ts +78 -0
  420. package/extensions/feishu/src/tools-config.ts +21 -0
  421. package/extensions/feishu/src/types.ts +81 -0
  422. package/extensions/feishu/src/typing.ts +80 -0
  423. package/extensions/feishu/src/wiki-schema.ts +55 -0
  424. package/extensions/feishu/src/wiki.ts +232 -0
  425. package/extensions/imessage/src/channel.js +253 -0
  426. package/extensions/imessage/src/runtime.js +10 -0
  427. package/extensions/irc/index.ts +17 -0
  428. package/extensions/irc/package.json +14 -0
  429. package/extensions/irc/poolbot.plugin.json +9 -0
  430. package/extensions/irc/src/accounts.ts +268 -0
  431. package/extensions/irc/src/channel.ts +367 -0
  432. package/extensions/irc/src/client.ts +439 -0
  433. package/extensions/irc/src/config-schema.ts +97 -0
  434. package/extensions/irc/src/connect-options.ts +30 -0
  435. package/extensions/irc/src/control-chars.ts +22 -0
  436. package/extensions/irc/src/inbound.ts +334 -0
  437. package/extensions/irc/src/monitor.ts +147 -0
  438. package/extensions/irc/src/normalize.ts +117 -0
  439. package/extensions/irc/src/onboarding.ts +479 -0
  440. package/extensions/irc/src/policy.ts +157 -0
  441. package/extensions/irc/src/probe.ts +53 -0
  442. package/extensions/irc/src/protocol.ts +169 -0
  443. package/extensions/irc/src/runtime.ts +14 -0
  444. package/extensions/irc/src/send.ts +88 -0
  445. package/extensions/irc/src/types.ts +93 -0
  446. package/extensions/matrix/src/matrix/client-bootstrap.ts +39 -0
  447. package/extensions/mattermost/src/mattermost/monitor-onchar.ts +25 -0
  448. package/extensions/mattermost/src/mattermost/monitor-websocket.ts +221 -0
  449. package/extensions/mattermost/src/mattermost/reactions.ts +130 -0
  450. package/extensions/mattermost/src/mattermost/reconnect.ts +103 -0
  451. package/extensions/minimax-portal-auth/README.md +33 -0
  452. package/extensions/minimax-portal-auth/index.ts +161 -0
  453. package/extensions/minimax-portal-auth/oauth.ts +247 -0
  454. package/extensions/minimax-portal-auth/package.json +15 -0
  455. package/extensions/minimax-portal-auth/poolbot.plugin.json +9 -0
  456. package/extensions/msteams/src/file-lock.ts +1 -0
  457. package/extensions/msteams/src/graph.ts +92 -0
  458. package/extensions/msteams/src/mentions.ts +114 -0
  459. package/extensions/msteams/src/test-runtime.ts +16 -0
  460. package/extensions/openai-codex-auth/README.md +82 -0
  461. package/extensions/openai-codex-auth/index.ts +177 -0
  462. package/extensions/openai-codex-auth/package.json +15 -0
  463. package/extensions/openai-codex-auth/poolbot.plugin.json +9 -0
  464. package/extensions/phone-control/index.ts +421 -0
  465. package/extensions/phone-control/poolbot.plugin.json +10 -0
  466. package/extensions/shared/resolve-target-test-helpers.ts +66 -0
  467. package/extensions/signal/src/channel.js +273 -0
  468. package/extensions/signal/src/runtime.js +10 -0
  469. package/extensions/slack/src/channel.js +489 -0
  470. package/extensions/slack/src/runtime.js +10 -0
  471. package/extensions/talk-voice/index.ts +150 -0
  472. package/extensions/talk-voice/poolbot.plugin.json +10 -0
  473. package/extensions/telegram/src/channel.js +424 -0
  474. package/extensions/telegram/src/runtime.js +10 -0
  475. package/extensions/thread-ownership/index.ts +133 -0
  476. package/extensions/thread-ownership/poolbot.plugin.json +28 -0
  477. package/extensions/tlon/src/account-fields.ts +25 -0
  478. package/extensions/tlon/src/urbit/base-url.ts +57 -0
  479. package/extensions/tlon/src/urbit/channel-client.ts +157 -0
  480. package/extensions/tlon/src/urbit/channel-ops.ts +164 -0
  481. package/extensions/tlon/src/urbit/context.ts +47 -0
  482. package/extensions/tlon/src/urbit/errors.ts +51 -0
  483. package/extensions/tlon/src/urbit/fetch.ts +39 -0
  484. package/extensions/twitch/src/test-fixtures.ts +30 -0
  485. package/extensions/voice-call/src/allowlist.ts +19 -0
  486. package/extensions/whatsapp/src/channel.js +429 -0
  487. package/extensions/whatsapp/src/runtime.js +10 -0
  488. package/package.json +1 -1
@@ -0,0 +1,92 @@
1
+ import type { MSTeamsConfig } from "poolbot/plugin-sdk";
2
+ import { GRAPH_ROOT } from "./attachments/shared.js";
3
+ import { loadMSTeamsSdkWithAuth } from "./sdk.js";
4
+ import { resolveMSTeamsCredentials } from "./token.js";
5
+
6
+ export type GraphUser = {
7
+ id?: string;
8
+ displayName?: string;
9
+ userPrincipalName?: string;
10
+ mail?: string;
11
+ };
12
+
13
+ export type GraphGroup = {
14
+ id?: string;
15
+ displayName?: string;
16
+ };
17
+
18
+ export type GraphChannel = {
19
+ id?: string;
20
+ displayName?: string;
21
+ };
22
+
23
+ export type GraphResponse<T> = { value?: T[] };
24
+
25
+ function readAccessToken(value: unknown): string | null {
26
+ if (typeof value === "string") {
27
+ return value;
28
+ }
29
+ if (value && typeof value === "object") {
30
+ const token =
31
+ (value as { accessToken?: unknown }).accessToken ?? (value as { token?: unknown }).token;
32
+ return typeof token === "string" ? token : null;
33
+ }
34
+ return null;
35
+ }
36
+
37
+ export function normalizeQuery(value?: string | null): string {
38
+ return value?.trim() ?? "";
39
+ }
40
+
41
+ export function escapeOData(value: string): string {
42
+ return value.replace(/'/g, "''");
43
+ }
44
+
45
+ export async function fetchGraphJson<T>(params: {
46
+ token: string;
47
+ path: string;
48
+ headers?: Record<string, string>;
49
+ }): Promise<T> {
50
+ const res = await fetch(`${GRAPH_ROOT}${params.path}`, {
51
+ headers: {
52
+ Authorization: `Bearer ${params.token}`,
53
+ ...params.headers,
54
+ },
55
+ });
56
+ if (!res.ok) {
57
+ const text = await res.text().catch(() => "");
58
+ throw new Error(`Graph ${params.path} failed (${res.status}): ${text || "unknown error"}`);
59
+ }
60
+ return (await res.json()) as T;
61
+ }
62
+
63
+ export async function resolveGraphToken(cfg: unknown): Promise<string> {
64
+ const creds = resolveMSTeamsCredentials(
65
+ (cfg as { channels?: { msteams?: unknown } })?.channels?.msteams as MSTeamsConfig | undefined,
66
+ );
67
+ if (!creds) {
68
+ throw new Error("MS Teams credentials missing");
69
+ }
70
+ const { sdk, authConfig } = await loadMSTeamsSdkWithAuth(creds);
71
+ const tokenProvider = new sdk.MsalTokenProvider(authConfig);
72
+ const token = await tokenProvider.getAccessToken("https://graph.microsoft.com");
73
+ const accessToken = readAccessToken(token);
74
+ if (!accessToken) {
75
+ throw new Error("MS Teams graph token unavailable");
76
+ }
77
+ return accessToken;
78
+ }
79
+
80
+ export async function listTeamsByName(token: string, query: string): Promise<GraphGroup[]> {
81
+ const escaped = escapeOData(query);
82
+ const filter = `resourceProvisioningOptions/Any(x:x eq 'Team') and startsWith(displayName,'${escaped}')`;
83
+ const path = `/groups?$filter=${encodeURIComponent(filter)}&$select=id,displayName`;
84
+ const res = await fetchGraphJson<GraphResponse<GraphGroup>>({ token, path });
85
+ return res.value ?? [];
86
+ }
87
+
88
+ export async function listChannelsForTeam(token: string, teamId: string): Promise<GraphChannel[]> {
89
+ const path = `/teams/${encodeURIComponent(teamId)}/channels?$select=id,displayName`;
90
+ const res = await fetchGraphJson<GraphResponse<GraphChannel>>({ token, path });
91
+ return res.value ?? [];
92
+ }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * MS Teams mention handling utilities.
3
+ *
4
+ * Mentions in Teams require:
5
+ * 1. Text containing <at>Name</at> tags
6
+ * 2. entities array with mention metadata
7
+ */
8
+
9
+ export type MentionEntity = {
10
+ type: "mention";
11
+ text: string;
12
+ mentioned: {
13
+ id: string;
14
+ name: string;
15
+ };
16
+ };
17
+
18
+ export type MentionInfo = {
19
+ /** User/bot ID (e.g., "28:xxx" or AAD object ID) */
20
+ id: string;
21
+ /** Display name */
22
+ name: string;
23
+ };
24
+
25
+ /**
26
+ * Check whether an ID looks like a valid Teams user/bot identifier.
27
+ * Accepts:
28
+ * - Bot Framework IDs: "28:xxx..." / "29:xxx..." / "8:orgid:..."
29
+ * - AAD object IDs (UUIDs): "d5318c29-33ac-4e6b-bd42-57b8b793908f"
30
+ *
31
+ * Keep this permissive enough for real Teams IDs while still rejecting
32
+ * documentation placeholders like `@[表示名](ユーザーID)`.
33
+ */
34
+ const TEAMS_BOT_ID_PATTERN = /^\d+:[a-z0-9._=-]+(?::[a-z0-9._=-]+)*$/i;
35
+ const AAD_OBJECT_ID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;
36
+
37
+ function isValidTeamsId(id: string): boolean {
38
+ return TEAMS_BOT_ID_PATTERN.test(id) || AAD_OBJECT_ID_PATTERN.test(id);
39
+ }
40
+
41
+ /**
42
+ * Parse mentions from text in the format @[Name](id).
43
+ * Example: "Hello @[John Doe](28:xxx-yyy-zzz)!"
44
+ *
45
+ * Only matches where the id looks like a real Teams user/bot ID are treated
46
+ * as mentions. This avoids false positives from documentation or code samples
47
+ * embedded in the message (e.g. `@[表示名](ユーザーID)` in backticks).
48
+ *
49
+ * Returns both the formatted text with <at> tags and the entities array.
50
+ */
51
+ export function parseMentions(text: string): {
52
+ text: string;
53
+ entities: MentionEntity[];
54
+ } {
55
+ const mentionPattern = /@\[([^\]]+)\]\(([^)]+)\)/g;
56
+ const entities: MentionEntity[] = [];
57
+
58
+ // Replace @[Name](id) with <at>Name</at> only for valid Teams IDs
59
+ const formattedText = text.replace(mentionPattern, (match, name, id) => {
60
+ const trimmedId = id.trim();
61
+
62
+ // Skip matches where the id doesn't look like a real Teams identifier
63
+ if (!isValidTeamsId(trimmedId)) {
64
+ return match;
65
+ }
66
+
67
+ const trimmedName = name.trim();
68
+ const mentionTag = `<at>${trimmedName}</at>`;
69
+ entities.push({
70
+ type: "mention",
71
+ text: mentionTag,
72
+ mentioned: {
73
+ id: trimmedId,
74
+ name: trimmedName,
75
+ },
76
+ });
77
+ return mentionTag;
78
+ });
79
+
80
+ return {
81
+ text: formattedText,
82
+ entities,
83
+ };
84
+ }
85
+
86
+ /**
87
+ * Build mention entities array from a list of mentions.
88
+ * Use this when you already have the mention info and formatted text.
89
+ */
90
+ export function buildMentionEntities(mentions: MentionInfo[]): MentionEntity[] {
91
+ return mentions.map((mention) => ({
92
+ type: "mention",
93
+ text: `<at>${mention.name}</at>`,
94
+ mentioned: {
95
+ id: mention.id,
96
+ name: mention.name,
97
+ },
98
+ }));
99
+ }
100
+
101
+ /**
102
+ * Format text with mentions using <at> tags.
103
+ * This is a convenience function when you want to manually format mentions.
104
+ */
105
+ export function formatMentionText(text: string, mentions: MentionInfo[]): string {
106
+ let formatted = text;
107
+ for (const mention of mentions) {
108
+ // Replace @Name or @name with <at>Name</at>
109
+ const escapedName = mention.name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
110
+ const namePattern = new RegExp(`@${escapedName}`, "gi");
111
+ formatted = formatted.replace(namePattern, `<at>${mention.name}</at>`);
112
+ }
113
+ return formatted;
114
+ }
@@ -0,0 +1,16 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ import type { PluginRuntime } from "poolbot/plugin-sdk";
4
+
5
+ export const msteamsRuntimeStub = {
6
+ state: {
7
+ resolveStateDir: (env: NodeJS.ProcessEnv = process.env, homedir?: () => string) => {
8
+ const override = env.POOLBOT_STATE_DIR?.trim() || env.POOLBOT_STATE_DIR?.trim();
9
+ if (override) {
10
+ return override;
11
+ }
12
+ const resolvedHome = homedir ? homedir() : os.homedir();
13
+ return path.join(resolvedHome, ".openclaw");
14
+ },
15
+ },
16
+ } as unknown as PluginRuntime;
@@ -0,0 +1,82 @@
1
+ # OpenAI Codex CLI Auth (Pool Bot plugin)
2
+
3
+ Use OpenAI models with your **ChatGPT Plus/Pro subscription** via the Codex CLI OAuth tokens.
4
+
5
+ This plugin reads authentication from the [OpenAI Codex CLI](https://github.com/openai/codex) and uses those OAuth credentials to access OpenAI models — no separate API key required.
6
+
7
+ ## Enable
8
+
9
+ Bundled plugins are disabled by default. Enable this one:
10
+
11
+ ```bash
12
+ poolbot plugins enable openai-codex-auth
13
+ ```
14
+
15
+ Restart the Gateway after enabling.
16
+
17
+ ## Prerequisites
18
+
19
+ 1. **ChatGPT Plus or Pro subscription** — required for Codex CLI access
20
+ 2. **Codex CLI installed and authenticated**:
21
+
22
+ ```bash
23
+ # Install Codex CLI
24
+ npm install -g @openai/codex
25
+
26
+ # Authenticate (opens browser for OAuth)
27
+ codex login
28
+ ```
29
+
30
+ This creates `~/.codex/auth.json` with your OAuth tokens.
31
+
32
+ ## Authenticate with Pool Bot
33
+
34
+ After Codex CLI is authenticated:
35
+
36
+ ```bash
37
+ poolbot models auth login --provider openai-codex --set-default
38
+ ```
39
+
40
+ ## Available Models
41
+
42
+ The following models are available through Codex CLI authentication:
43
+
44
+ - `openai/gpt-4.1`, `openai/gpt-4.1-mini`, `openai/gpt-4.1-nano`
45
+ - `openai/gpt-4o`, `openai/gpt-4o-mini`
46
+ - `openai/o1`, `openai/o1-mini`, `openai/o1-pro`
47
+ - `openai/o3`, `openai/o3-mini`
48
+ - `openai/o4-mini`
49
+
50
+ Default model: `openai/o3`
51
+
52
+ ## How It Works
53
+
54
+ 1. The plugin reads `~/.codex/auth.json` created by `codex login`
55
+ 2. OAuth tokens from your ChatGPT subscription are extracted
56
+ 3. Pool Bot uses these tokens to authenticate with OpenAI's API
57
+ 4. Tokens auto-refresh when needed (handled by Pool Bot's credential system)
58
+
59
+ ## Why Use This?
60
+
61
+ - **No separate API key** — use your existing ChatGPT Plus/Pro subscription
62
+ - **No usage-based billing** — covered by your subscription
63
+ - **Access to latest models** — same models available in ChatGPT
64
+
65
+ ## Troubleshooting
66
+
67
+ ### "No Codex auth found"
68
+
69
+ Run `codex login` to authenticate the Codex CLI first.
70
+
71
+ ### Tokens expired
72
+
73
+ Re-run `codex login` to refresh your tokens, then re-authenticate:
74
+
75
+ ```bash
76
+ codex login
77
+ poolbot models auth login --provider openai-codex --set-default
78
+ ```
79
+
80
+ ### Model not available
81
+
82
+ Some models may require specific subscription tiers (e.g., o1-pro requires ChatGPT Pro).
@@ -0,0 +1,177 @@
1
+ import * as fs from "node:fs";
2
+ import * as os from "node:os";
3
+ import * as path from "node:path";
4
+ import {
5
+ emptyPluginConfigSchema,
6
+ type PoolBotPluginApi,
7
+ type ProviderAuthContext,
8
+ type ProviderAuthResult,
9
+ } from "poolbot/plugin-sdk";
10
+
11
+ const PROVIDER_ID = "openai-codex-import";
12
+ const PROVIDER_LABEL = "OpenAI Codex CLI Import";
13
+
14
+ /**
15
+ * Resolve the Codex auth file path, respecting CODEX_HOME env var like core does.
16
+ * Called lazily to pick up env var changes.
17
+ */
18
+ function getAuthFilePath(): string {
19
+ const codexHome = process.env.CODEX_HOME
20
+ ? path.resolve(process.env.CODEX_HOME)
21
+ : path.join(os.homedir(), ".codex");
22
+ return path.join(codexHome, "auth.json");
23
+ }
24
+
25
+ /**
26
+ * OpenAI Codex models available via ChatGPT Plus/Pro subscription.
27
+ * Uses openai-codex/ prefix to match core provider namespace and avoid
28
+ * conflicts with the standard openai/ API key-based provider.
29
+ */
30
+ const CODEX_MODELS = [
31
+ "openai-codex/gpt-5.3-codex",
32
+ "openai-codex/gpt-5.3-codex-spark",
33
+ "openai-codex/gpt-5.2-codex",
34
+ ] as const;
35
+
36
+ const DEFAULT_MODEL = "openai-codex/gpt-5.3-codex";
37
+
38
+ interface CodexAuthTokens {
39
+ access_token: string;
40
+ refresh_token?: string;
41
+ account_id?: string;
42
+ expires_at?: number;
43
+ }
44
+
45
+ interface CodexAuthFile {
46
+ tokens?: CodexAuthTokens;
47
+ }
48
+
49
+ /**
50
+ * Read the Codex CLI auth.json file, respecting CODEX_HOME env var.
51
+ */
52
+ function readCodexAuth(): CodexAuthFile | null {
53
+ try {
54
+ const authFile = getAuthFilePath();
55
+ if (!fs.existsSync(authFile)) return null;
56
+ const content = fs.readFileSync(authFile, "utf-8");
57
+ return JSON.parse(content) as CodexAuthFile;
58
+ } catch {
59
+ return null;
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Decode JWT expiry timestamp from access token
65
+ */
66
+ function decodeJwtExpiry(token: string): number | undefined {
67
+ try {
68
+ const payload = token.split(".")[1];
69
+ if (!payload) return undefined;
70
+ const decoded = JSON.parse(Buffer.from(payload, "base64").toString()) as { exp?: number };
71
+ return decoded.exp ? decoded.exp * 1000 : undefined;
72
+ } catch {
73
+ return undefined;
74
+ }
75
+ }
76
+
77
+ const openaiCodexPlugin = {
78
+ id: "openai-codex-auth",
79
+ name: "OpenAI Codex Auth",
80
+ description: "Use OpenAI models via Codex CLI authentication (ChatGPT Plus/Pro)",
81
+ configSchema: emptyPluginConfigSchema(),
82
+
83
+ register(api: PoolBotPluginApi) {
84
+ api.registerProvider({
85
+ id: PROVIDER_ID,
86
+ label: PROVIDER_LABEL,
87
+ docsPath: "/providers/models",
88
+ aliases: ["codex-import"],
89
+
90
+ auth: [
91
+ {
92
+ id: "codex-cli",
93
+ label: "Codex CLI Auth",
94
+ hint: "Import existing Codex CLI authentication (respects CODEX_HOME env var)",
95
+ kind: "custom",
96
+
97
+ run: async (ctx: ProviderAuthContext): Promise<ProviderAuthResult> => {
98
+ const spin = ctx.prompter.progress("Reading Codex CLI auth…");
99
+
100
+ try {
101
+ const auth = readCodexAuth();
102
+
103
+ if (!auth?.tokens?.access_token) {
104
+ spin.stop("No Codex auth found");
105
+ await ctx.prompter.note(
106
+ "Run 'codex login' first to authenticate with OpenAI.\n\n" +
107
+ "Install Codex CLI: npm install -g @openai/codex\n" +
108
+ "Then run: codex login",
109
+ "Setup required",
110
+ );
111
+ throw new Error("Codex CLI not authenticated. Run: codex login");
112
+ }
113
+
114
+ spin.stop("Codex auth loaded");
115
+
116
+ const profileId = `openai-codex-import:${auth.tokens.account_id ?? "default"}`;
117
+ const expires = auth.tokens.expires_at
118
+ ? auth.tokens.expires_at * 1000
119
+ : decodeJwtExpiry(auth.tokens.access_token);
120
+
121
+ const modelsConfig: Record<string, object> = {};
122
+ for (const model of CODEX_MODELS) {
123
+ modelsConfig[model] = {};
124
+ }
125
+
126
+ // Validate refresh token - empty/missing refresh tokens cause silent failures
127
+ if (!auth.tokens.refresh_token) {
128
+ spin.stop("Invalid Codex auth");
129
+ await ctx.prompter.note(
130
+ "Your Codex CLI auth is missing a refresh token.\n\n" +
131
+ "Please re-authenticate: codex logout && codex login",
132
+ "Re-authentication required",
133
+ );
134
+ throw new Error(
135
+ "Codex CLI auth missing refresh token. Run: codex logout && codex login",
136
+ );
137
+ }
138
+
139
+ return {
140
+ profiles: [
141
+ {
142
+ profileId,
143
+ credential: {
144
+ type: "oauth",
145
+ provider: PROVIDER_ID,
146
+ access: auth.tokens.access_token,
147
+ refresh: auth.tokens.refresh_token,
148
+ expires: expires ?? Date.now() + 3600000,
149
+ },
150
+ },
151
+ ],
152
+ configPatch: {
153
+ agents: {
154
+ defaults: {
155
+ models: modelsConfig,
156
+ },
157
+ },
158
+ },
159
+ defaultModel: DEFAULT_MODEL,
160
+ notes: [
161
+ `Using Codex CLI auth from ${getAuthFilePath()}`,
162
+ `Available models: ${CODEX_MODELS.join(", ")}`,
163
+ "Tokens auto-refresh when needed.",
164
+ ],
165
+ };
166
+ } catch (err) {
167
+ spin.stop("Failed to load Codex auth");
168
+ throw err;
169
+ }
170
+ },
171
+ },
172
+ ],
173
+ });
174
+ },
175
+ };
176
+
177
+ export default openaiCodexPlugin;
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "@poolzin/openai-codex-auth",
3
+ "version": "2026.2.18",
4
+ "private": true,
5
+ "description": "OpenAI Codex CLI auth provider plugin - use ChatGPT Plus/Pro subscription for OpenAI models",
6
+ "type": "module",
7
+ "devDependencies": {
8
+ "poolbot": "workspace:*"
9
+ },
10
+ "poolbot": {
11
+ "extensions": [
12
+ "./index.ts"
13
+ ]
14
+ }
15
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": "openai-codex-auth",
3
+ "providers": ["openai-codex"],
4
+ "configSchema": {
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "properties": {}
8
+ }
9
+ }