@poolzin/pool-bot 2026.2.17 → 2026.2.18
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.
- package/CHANGELOG.md +17 -0
- package/dist/agents/agent-scope.js +4 -0
- package/dist/agents/announce-idempotency.js +14 -0
- package/dist/agents/auth-profiles.resolve-auth-profile-order.fixtures.js +23 -0
- package/dist/agents/bash-tools.exec-runtime.js +438 -0
- package/dist/agents/bash-tools.shared.js +6 -0
- package/dist/agents/cli-runner/reliability.js +61 -0
- package/dist/agents/cli-watchdog-defaults.js +11 -0
- package/dist/agents/command-poll-backoff.js +63 -0
- package/dist/agents/current-time.js +16 -0
- package/dist/agents/model-alias-lines.js +18 -0
- package/dist/agents/model-auth-label.js +61 -0
- package/dist/agents/models-config.e2e-harness.js +115 -0
- package/dist/agents/ollama-stream.js +11 -3
- package/dist/agents/openclaw-tools.js +135 -0
- package/dist/agents/pi-auth-json.js +118 -0
- package/dist/agents/pi-embedded-runner/run.overflow-compaction.mocks.shared.js +147 -0
- package/dist/agents/pi-embedded-subscribe.e2e-harness.js +90 -0
- package/dist/agents/pi-embedded-subscribe.handlers.compaction.js +63 -0
- package/dist/agents/pi-embedded-subscribe.handlers.tools.media.test-helpers.js +30 -0
- package/dist/agents/pi-extensions/session-manager-runtime-registry.js +23 -0
- package/dist/agents/pi-tools.js +2 -0
- package/dist/agents/queued-file-writer.js +22 -0
- package/dist/agents/sandbox/docker.js +133 -40
- package/dist/agents/sandbox/fs-bridge.js +146 -0
- package/dist/agents/sandbox/fs-paths.js +205 -0
- package/dist/agents/sandbox/hash.js +4 -0
- package/dist/agents/sandbox-paths.js +3 -0
- package/dist/agents/session-dirs.js +20 -0
- package/dist/agents/skills/filter.js +24 -0
- package/dist/agents/skills/tools-dir.js +9 -0
- package/dist/agents/skills-install-download.js +290 -0
- package/dist/agents/skills-install-output.js +30 -0
- package/dist/agents/skills-install.download-test-utils.js +36 -0
- package/dist/agents/skills.e2e-test-helpers.js +13 -0
- package/dist/agents/subagent-announce-queue.js +59 -15
- package/dist/agents/subagent-depth.js +137 -0
- package/dist/agents/subagent-registry.js +448 -96
- package/dist/agents/subagent-spawn.js +262 -0
- package/dist/agents/test-helpers/fast-tool-stubs.js +18 -0
- package/dist/agents/test-helpers/host-sandbox-fs-bridge.js +74 -0
- package/dist/agents/tool-display-common.js +782 -0
- package/dist/agents/tools/image-tool.js +1 -1
- package/dist/agents/tools/sessions-access.js +178 -0
- package/dist/agents/tools/sessions-resolution.js +206 -0
- package/dist/agents/tools/subagents-tool.js +616 -0
- package/dist/agents/workspace-dir.js +18 -0
- package/dist/agents/workspace-dirs.js +14 -0
- package/dist/agents/workspace.js +70 -0
- package/dist/auto-reply/heartbeat-reply-payload.js +18 -0
- package/dist/auto-reply/reply/commands-export-session.js +163 -0
- package/dist/auto-reply/reply/commands-mesh.js +245 -0
- package/dist/auto-reply/reply/commands-setunset.js +28 -0
- package/dist/auto-reply/reply/commands-slash-parse.js +31 -0
- package/dist/auto-reply/reply/commands-system-prompt.js +117 -0
- package/dist/auto-reply/reply/directive-handling.levels.js +17 -0
- package/dist/auto-reply/reply/directive-handling.params.js +1 -0
- package/dist/auto-reply/reply/directive-parsing.js +36 -0
- package/dist/auto-reply/reply/dispatcher-registry.js +43 -0
- package/dist/auto-reply/reply/elevated-unavailable.js +20 -0
- package/dist/auto-reply/reply/reply-delivery.js +92 -0
- package/dist/auto-reply/reply/session-reset-prompt.js +1 -0
- package/dist/auto-reply/reply/session-run-accounting.js +33 -0
- package/dist/auto-reply/reply.directive.directive-behavior.e2e-harness.js +115 -0
- package/dist/auto-reply/reply.directive.directive-behavior.e2e-mocks.js +12 -0
- package/dist/browser/bridge-auth-registry.js +26 -0
- package/dist/browser/client-actions-url.js +10 -0
- package/dist/browser/control-auth.js +73 -0
- package/dist/browser/csrf.js +64 -0
- package/dist/browser/http-auth.js +52 -0
- package/dist/browser/paths.js +37 -0
- package/dist/browser/proxy-files.js +32 -0
- package/dist/browser/pw-ai-state.js +7 -0
- package/dist/browser/resolved-config-refresh.js +42 -0
- package/dist/browser/routes/path-output.js +1 -0
- package/dist/browser/server-context.chrome-test-harness.js +20 -0
- package/dist/browser/server-middleware.js +31 -0
- package/dist/browser/test-port.js +16 -0
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/file-resolver.js +43 -0
- package/dist/channels/account-summary.js +19 -0
- package/dist/channels/draft-stream-loop.js +77 -0
- package/dist/channels/plugins/account-helpers.js +26 -0
- package/dist/channels/telegram/allow-from.js +10 -0
- package/dist/cli/browser-cli-resize.js +22 -0
- package/dist/cli/browser-cli-shared.js +8 -0
- package/dist/cli/clawbot-cli.js +5 -0
- package/dist/cli/completion-cli.js +566 -0
- package/dist/cli/config-cli.js +63 -5
- package/dist/cli/daemon-cli/lifecycle-core.js +256 -0
- package/dist/cli/daemon-cli/register-service-commands.js +60 -0
- package/dist/cli/daemon-cli-compat.js +80 -0
- package/dist/cli/nodes-cli/pairing-render.js +26 -0
- package/dist/cli/program/action-reparse.js +17 -0
- package/dist/cli/program/command-registry.js +17 -0
- package/dist/cli/program/program-context.js +8 -0
- package/dist/cli/program/register.subclis.js +7 -0
- package/dist/cli/program/routes.js +233 -0
- package/dist/cli/qr-cli.js +132 -0
- package/dist/cli/requirements-test-fixtures.js +17 -0
- package/dist/cli/respawn-policy.js +4 -0
- package/dist/cli/shared/parse-port.js +18 -0
- package/dist/cli/skills-cli.format.js +241 -0
- package/dist/cli/update-cli/progress.js +121 -0
- package/dist/cli/update-cli/restart-helper.js +108 -0
- package/dist/cli/update-cli/shared.js +196 -0
- package/dist/cli/update-cli/status.js +97 -0
- package/dist/cli/update-cli/suppress-deprecations.js +17 -0
- package/dist/cli/update-cli/update-command.js +506 -0
- package/dist/cli/update-cli/wizard.js +130 -0
- package/dist/cli/update-cli.js +3 -9
- package/dist/cli/windows-argv.js +69 -0
- package/dist/commands/auth-choice-legacy.js +20 -0
- package/dist/commands/auth-choice.apply-helpers.js +8 -0
- package/dist/commands/channel-test-helpers.js +19 -0
- package/dist/commands/cleanup-plan.js +10 -0
- package/dist/commands/cleanup-utils.js +7 -0
- package/dist/commands/config-validation.js +15 -0
- package/dist/commands/doctor-completion.js +112 -0
- package/dist/commands/doctor-memory-search.js +119 -0
- package/dist/commands/doctor-session-locks.js +73 -0
- package/dist/commands/doctor.e2e-harness.js +364 -0
- package/dist/commands/gateway-presence.js +19 -0
- package/dist/commands/model-default.js +35 -0
- package/dist/commands/models/fallbacks-shared.js +102 -0
- package/dist/commands/models/shared.js +24 -0
- package/dist/commands/onboard-auth.config-gateways.js +64 -0
- package/dist/commands/onboard-auth.config-litellm.js +45 -0
- package/dist/commands/onboard-auth.config-shared.js +116 -0
- package/dist/commands/onboard-config.js +16 -0
- package/dist/commands/onboard-non-interactive.test-helpers.js +31 -0
- package/dist/commands/onboard-provider-auth-flags.js +136 -0
- package/dist/commands/openai-codex-oauth.js +40 -0
- package/dist/commands/test-runtime-config-helpers.js +21 -0
- package/dist/commands/test-wizard-helpers.js +68 -0
- package/dist/commands/vllm-setup.js +66 -0
- package/dist/compat/legacy-names.js +2 -0
- package/dist/config/backup-rotation.js +19 -0
- package/dist/config/env-preserve.js +122 -0
- package/dist/config/includes-scan.js +78 -0
- package/dist/config/plugins-allowlist.js +13 -0
- package/dist/config/schema.help.js +256 -0
- package/dist/config/schema.hints.js +189 -0
- package/dist/config/schema.irc.js +20 -0
- package/dist/config/schema.labels.js +317 -0
- package/dist/config/sessions/delivery-info.js +40 -0
- package/dist/config/types.irc.js +1 -0
- package/dist/config/zod-schema.agent-model.js +10 -0
- package/dist/config/zod-schema.allowdeny.js +35 -0
- package/dist/config/zod-schema.sensitive.js +4 -0
- package/dist/control-ui/assets/index-HRr1grwl.js.map +1 -1
- package/dist/cron/isolated-agent/skills-snapshot.js +26 -0
- package/dist/cron/isolated-agent/subagent-followup.js +127 -0
- package/dist/cron/isolated-agent.mocks.js +12 -0
- package/dist/cron/isolated-agent.test-setup.js +22 -0
- package/dist/cron/legacy-delivery.js +43 -0
- package/dist/cron/webhook-url.js +22 -0
- package/dist/daemon/arg-split.js +40 -0
- package/dist/daemon/exec-file.js +23 -0
- package/dist/daemon/output.js +6 -0
- package/dist/daemon/runtime-format.js +31 -0
- package/dist/daemon/schtasks-exec.js +4 -0
- package/dist/daemon/service-audit.js +22 -0
- package/dist/discord/client.js +41 -0
- package/dist/discord/components-registry.js +57 -0
- package/dist/discord/components.js +816 -0
- package/dist/discord/guilds.js +12 -0
- package/dist/discord/monitor/gateway-plugin.js +48 -0
- package/dist/discord/monitor/presence.js +30 -0
- package/dist/discord/send.components.js +115 -0
- package/dist/discord/send.shared.js +4 -0
- package/dist/discord/ui.js +26 -0
- package/dist/discord/voice-message.js +254 -0
- package/dist/gateway/agent-event-assistant-text.js +5 -0
- package/dist/gateway/agent-prompt.js +33 -0
- package/dist/gateway/auth-rate-limit.js +136 -0
- package/dist/gateway/channel-health-monitor.js +114 -0
- package/dist/gateway/control-ui-contract.js +1 -0
- package/dist/gateway/control-ui-csp.js +15 -0
- package/dist/gateway/gateway-config-prompts.shared.js +25 -0
- package/dist/gateway/http-auth-helpers.js +18 -0
- package/dist/gateway/http-common.js +18 -0
- package/dist/gateway/http-endpoint-helpers.js +27 -0
- package/dist/gateway/node-invoke-sanitize.js +11 -0
- package/dist/gateway/node-invoke-system-run-approval.js +205 -0
- package/dist/gateway/probe-auth.js +21 -0
- package/dist/gateway/protocol/index.js +7 -2
- package/dist/gateway/protocol/schema/mesh.js +54 -0
- package/dist/gateway/protocol/schema/protocol-schemas.js +7 -0
- package/dist/gateway/protocol/schema.js +1 -0
- package/dist/gateway/server/ws-connection/auth-messages.js +54 -0
- package/dist/gateway/server-channels.js +11 -0
- package/dist/gateway/server-methods/attachment-normalize.js +16 -0
- package/dist/gateway/server-methods/base-hash.js +8 -0
- package/dist/gateway/server-methods/mesh.js +700 -0
- package/dist/gateway/server-methods/nodes.handlers.invoke-result.js +55 -0
- package/dist/gateway/server-methods/restart-request.js +13 -0
- package/dist/gateway/server-methods/validation.js +8 -0
- package/dist/gateway/server.agent.gateway-server-agent.mocks.js +35 -0
- package/dist/gateway/server.e2e-registry-helpers.js +1 -0
- package/dist/gateway/server.e2e-ws-harness.js +20 -0
- package/dist/gateway/test-helpers.js +2 -0
- package/dist/gateway/test-helpers.server.js +3 -1
- package/dist/gateway/test-http-response.js +12 -0
- package/dist/gateway/test-openai-responses-model.js +20 -0
- package/dist/gateway/test-temp-config.js +30 -0
- package/dist/gateway/test-with-server.js +32 -0
- package/dist/hooks/bundled/bootstrap-extra-files/handler.js +46 -0
- package/dist/imessage/monitor/abort-handler.js +23 -0
- package/dist/imessage/monitor/inbound-processing.js +346 -0
- package/dist/imessage/monitor/parse-notification.js +64 -0
- package/dist/imessage/target-parsing-helpers.js +92 -0
- package/dist/infra/archive.js +244 -20
- package/dist/infra/detect-package-manager.js +26 -0
- package/dist/infra/exec-approvals-allowlist.js +257 -0
- package/dist/infra/exec-approvals-analysis.js +770 -0
- package/dist/infra/exec-approvals.js +13 -0
- package/dist/infra/file-lock.js +1 -0
- package/dist/infra/gemini-auth.js +39 -0
- package/dist/infra/heartbeat-active-hours.js +85 -0
- package/dist/infra/heartbeat-events-filter.js +50 -0
- package/dist/infra/heartbeat-runner.test-utils.js +39 -0
- package/dist/infra/http-body.js +265 -0
- package/dist/infra/install-package-dir.js +50 -0
- package/dist/infra/install-safe-path.js +49 -0
- package/dist/infra/json-files.js +49 -0
- package/dist/infra/jsonl-socket.js +52 -0
- package/dist/infra/map-size.js +14 -0
- package/dist/infra/net/hostname.js +7 -0
- package/dist/infra/npm-registry-spec.js +39 -0
- package/dist/infra/openclaw-root.js +109 -0
- package/dist/infra/outbound/delivery-queue.js +214 -0
- package/dist/infra/outbound/identity.js +23 -0
- package/dist/infra/outbound/message-action-params.js +307 -0
- package/dist/infra/outbound/tool-payload.js +21 -0
- package/dist/infra/package-json.js +23 -0
- package/dist/infra/pairing-files.js +19 -0
- package/dist/infra/pairing-token.js +9 -0
- package/dist/infra/path-prepend.js +51 -0
- package/dist/infra/process-respawn.js +49 -0
- package/dist/infra/runtime-status.js +16 -0
- package/dist/infra/session-cost-usage.types.js +1 -0
- package/dist/infra/session-maintenance-warning.js +89 -0
- package/dist/infra/system-run-command.js +78 -0
- package/dist/infra/tmp-openclaw-dir.js +81 -0
- package/dist/infra/tmp-poolbot-dir.js +2 -0
- package/dist/infra/update-channels.js +19 -0
- package/dist/line/actions.js +45 -0
- package/dist/line/channel-access-token.js +9 -0
- package/dist/line/flex-templates/basic-cards.js +332 -0
- package/dist/line/flex-templates/common.js +18 -0
- package/dist/line/flex-templates/media-control-cards.js +453 -0
- package/dist/line/flex-templates/message.js +10 -0
- package/dist/line/flex-templates/schedule-cards.js +399 -0
- package/dist/line/flex-templates/types.js +1 -0
- package/dist/line/webhook-node.js +100 -0
- package/dist/line/webhook-utils.js +11 -0
- package/dist/logging/timestamps.js +14 -0
- package/dist/markdown/whatsapp.js +62 -0
- package/dist/media/base64.js +34 -0
- package/dist/media/local-roots.js +32 -0
- package/dist/media/outbound-attachment.js +10 -0
- package/dist/media/read-response-with-limit.js +41 -0
- package/dist/media/sniff-mime-from-base64.js +19 -0
- package/dist/media-understanding/audio-preflight.js +67 -0
- package/dist/media-understanding/fs.js +13 -0
- package/dist/media-understanding/output-extract.js +26 -0
- package/dist/media-understanding/providers/audio.test-helpers.js +34 -0
- package/dist/media-understanding/providers/google/inline-data.js +64 -0
- package/dist/media-understanding/providers/shared.js +7 -0
- package/dist/media-understanding/runner.entries.js +459 -0
- package/dist/memory/batch-error-utils.js +11 -0
- package/dist/memory/batch-http.js +27 -0
- package/dist/memory/batch-output.js +29 -0
- package/dist/memory/batch-runner.js +22 -0
- package/dist/memory/batch-upload.js +23 -0
- package/dist/memory/batch-utils.js +26 -0
- package/dist/memory/embeddings-debug.js +11 -0
- package/dist/memory/embeddings-remote-client.js +22 -0
- package/dist/memory/embeddings-remote-fetch.js +14 -0
- package/dist/memory/manager-embedding-ops.js +616 -0
- package/dist/memory/manager-sync-ops.js +953 -0
- package/dist/memory/qmd-manager.js +1061 -0
- package/dist/memory/qmd-query-parser.js +107 -0
- package/dist/memory/qmd-scope.js +93 -0
- package/dist/memory/search-manager.js +0 -1
- package/dist/memory/sync-index.js +21 -0
- package/dist/memory/sync-progress.js +22 -0
- package/dist/memory/sync-stale.js +30 -0
- package/dist/memory/test-embeddings-mock.js +16 -0
- package/dist/memory/test-manager-helpers.js +14 -0
- package/dist/memory/test-runtime-mocks.js +11 -0
- package/dist/node-host/invoke-browser.js +177 -0
- package/dist/node-host/invoke.js +685 -0
- package/dist/pairing/setup-code.js +285 -0
- package/dist/plugin-sdk/account-id.js +1 -0
- package/dist/plugin-sdk/agent-media-payload.js +13 -0
- package/dist/plugin-sdk/allow-from.js +47 -0
- package/dist/plugin-sdk/command-auth.js +23 -0
- package/dist/plugin-sdk/config-paths.js +9 -0
- package/dist/plugin-sdk/file-lock.js +116 -0
- package/dist/plugin-sdk/json-store.js +31 -0
- package/dist/plugin-sdk/onboarding.js +28 -0
- package/dist/plugin-sdk/provider-auth-result.js +29 -0
- package/dist/plugin-sdk/slack-message-actions.js +133 -0
- package/dist/plugin-sdk/status-helpers.js +35 -0
- package/dist/plugin-sdk/text-chunking.js +31 -0
- package/dist/plugin-sdk/tool-send.js +12 -0
- package/dist/plugin-sdk/webhook-path.js +27 -0
- package/dist/plugin-sdk/webhook-targets.js +34 -0
- package/dist/plugins/hooks.test-helpers.js +21 -0
- package/dist/plugins/uninstall.js +171 -0
- package/dist/process/supervisor/adapters/child.js +143 -0
- package/dist/process/supervisor/adapters/env.js +13 -0
- package/dist/process/supervisor/adapters/pty.js +148 -0
- package/dist/process/supervisor/index.js +10 -0
- package/dist/process/supervisor/registry.js +117 -0
- package/dist/process/supervisor/supervisor.js +244 -0
- package/dist/process/supervisor/types.js +1 -0
- package/dist/providers/google-shared.test-helpers.js +75 -0
- package/dist/security/audit-channel.js +419 -0
- package/dist/security/audit-tool-policy.js +1 -0
- package/dist/security/scan-paths.js +12 -0
- package/dist/sessions/input-provenance.js +55 -0
- package/dist/sessions/session-key-utils.js +7 -0
- package/dist/shared/chat-content.js +31 -0
- package/dist/shared/chat-envelope.js +45 -0
- package/dist/shared/config-eval.js +117 -0
- package/dist/shared/device-auth.js +16 -0
- package/dist/shared/entry-metadata.js +9 -0
- package/dist/shared/entry-status.js +25 -0
- package/dist/shared/frontmatter.js +98 -0
- package/dist/shared/model-param-b.js +19 -0
- package/dist/shared/net/ipv4.js +17 -0
- package/dist/shared/node-match.js +53 -0
- package/dist/shared/requirements.js +128 -0
- package/dist/shared/subagents-format.js +84 -0
- package/dist/shared/usage-aggregates.js +28 -0
- package/dist/signal/monitor/mentions.js +45 -0
- package/dist/signal/rpc-context.js +19 -0
- package/dist/slack/blocks-fallback.js +76 -0
- package/dist/slack/blocks-input.js +40 -0
- package/dist/slack/draft-stream.js +106 -0
- package/dist/slack/message-actions.js +51 -0
- package/dist/slack/modal-metadata.js +32 -0
- package/dist/slack/monitor/events/interactions.js +462 -0
- package/dist/slack/monitor/room-context.js +17 -0
- package/dist/slack/stream-mode.js +41 -0
- package/dist/telegram/bot-native-command-menu.js +64 -0
- package/dist/telegram/bot.media.e2e-harness.js +81 -0
- package/dist/telegram/button-types.js +1 -0
- package/dist/telegram/group-access.js +65 -0
- package/dist/telegram/outbound-params.js +21 -0
- package/dist/telegram/poll-vote-cache.js +21 -0
- package/dist/terminal/health-style.js +36 -0
- package/dist/test-utils/chunk-test-helpers.js +21 -0
- package/dist/test-utils/env.js +72 -0
- package/dist/test-utils/exec-assertions.js +12 -0
- package/dist/test-utils/imessage-test-plugin.js +54 -0
- package/dist/test-utils/mock-http-response.js +17 -0
- package/dist/test-utils/vitest-mock-fn.js +1 -0
- package/dist/tts/tts-core.js +550 -0
- package/dist/utils/chunk-items.js +10 -0
- package/dist/utils/reaction-level.js +52 -0
- package/dist/utils/safe-json.js +22 -0
- package/dist/utils/with-timeout.js +14 -0
- package/dist/web/media.js +17 -5
- package/dist/whatsapp/resolve-outbound-target.js +42 -0
- package/dist/wizard/onboarding.completion.js +74 -0
- package/extensions/bluebubbles/src/account-resolve.ts +29 -0
- package/extensions/bluebubbles/src/monitor-normalize.ts +796 -0
- package/extensions/bluebubbles/src/monitor-processing.ts +1007 -0
- package/extensions/bluebubbles/src/monitor-reply-cache.ts +185 -0
- package/extensions/bluebubbles/src/monitor-shared.ts +51 -0
- package/extensions/bluebubbles/src/multipart.ts +32 -0
- package/extensions/bluebubbles/src/send-helpers.ts +53 -0
- package/extensions/bluebubbles/src/test-harness.ts +50 -0
- package/extensions/bluebubbles/src/test-mocks.ts +11 -0
- package/extensions/device-pair/index.ts +554 -0
- package/extensions/discord/src/channel.js +366 -0
- package/extensions/discord/src/runtime.js +10 -0
- package/extensions/feishu/index.ts +63 -0
- package/extensions/feishu/src/accounts.ts +114 -0
- package/extensions/feishu/src/bitable.ts +739 -0
- package/extensions/feishu/src/bot.ts +965 -0
- package/extensions/feishu/src/channel.ts +351 -0
- package/extensions/feishu/src/client.ts +118 -0
- package/extensions/feishu/src/config-schema.ts +206 -0
- package/extensions/feishu/src/dedup.ts +33 -0
- package/extensions/feishu/src/directory.ts +177 -0
- package/extensions/feishu/src/doc-schema.ts +47 -0
- package/extensions/feishu/src/docx.ts +536 -0
- package/extensions/feishu/src/drive-schema.ts +46 -0
- package/extensions/feishu/src/drive.ts +227 -0
- package/extensions/feishu/src/dynamic-agent.ts +131 -0
- package/extensions/feishu/src/media.ts +449 -0
- package/extensions/feishu/src/mention.ts +126 -0
- package/extensions/feishu/src/monitor.ts +330 -0
- package/extensions/feishu/src/onboarding.ts +359 -0
- package/extensions/feishu/src/outbound.ts +55 -0
- package/extensions/feishu/src/perm-schema.ts +52 -0
- package/extensions/feishu/src/perm.ts +173 -0
- package/extensions/feishu/src/policy.ts +84 -0
- package/extensions/feishu/src/probe.ts +44 -0
- package/extensions/feishu/src/reactions.ts +160 -0
- package/extensions/feishu/src/reply-dispatcher.ts +239 -0
- package/extensions/feishu/src/runtime.ts +14 -0
- package/extensions/feishu/src/send-result.ts +29 -0
- package/extensions/feishu/src/send.ts +335 -0
- package/extensions/feishu/src/streaming-card.ts +223 -0
- package/extensions/feishu/src/targets.ts +78 -0
- package/extensions/feishu/src/tools-config.ts +21 -0
- package/extensions/feishu/src/types.ts +81 -0
- package/extensions/feishu/src/typing.ts +80 -0
- package/extensions/feishu/src/wiki-schema.ts +55 -0
- package/extensions/feishu/src/wiki.ts +232 -0
- package/extensions/imessage/src/channel.js +253 -0
- package/extensions/imessage/src/runtime.js +10 -0
- package/extensions/irc/index.ts +17 -0
- package/extensions/irc/src/accounts.ts +268 -0
- package/extensions/irc/src/channel.ts +367 -0
- package/extensions/irc/src/client.ts +439 -0
- package/extensions/irc/src/config-schema.ts +97 -0
- package/extensions/irc/src/connect-options.ts +30 -0
- package/extensions/irc/src/control-chars.ts +22 -0
- package/extensions/irc/src/inbound.ts +334 -0
- package/extensions/irc/src/monitor.ts +147 -0
- package/extensions/irc/src/normalize.ts +117 -0
- package/extensions/irc/src/onboarding.ts +479 -0
- package/extensions/irc/src/policy.ts +157 -0
- package/extensions/irc/src/probe.ts +53 -0
- package/extensions/irc/src/protocol.ts +169 -0
- package/extensions/irc/src/runtime.ts +14 -0
- package/extensions/irc/src/send.ts +88 -0
- package/extensions/irc/src/types.ts +93 -0
- package/extensions/matrix/src/matrix/client-bootstrap.ts +39 -0
- package/extensions/mattermost/src/mattermost/monitor-onchar.ts +25 -0
- package/extensions/mattermost/src/mattermost/monitor-websocket.ts +221 -0
- package/extensions/mattermost/src/mattermost/reactions.ts +130 -0
- package/extensions/mattermost/src/mattermost/reconnect.ts +103 -0
- package/extensions/minimax-portal-auth/index.ts +161 -0
- package/extensions/minimax-portal-auth/oauth.ts +247 -0
- package/extensions/msteams/src/file-lock.ts +1 -0
- package/extensions/msteams/src/graph.ts +92 -0
- package/extensions/msteams/src/mentions.ts +114 -0
- package/extensions/msteams/src/test-runtime.ts +16 -0
- package/extensions/openai-codex-auth/index.ts +177 -0
- package/extensions/phone-control/index.ts +421 -0
- package/extensions/shared/resolve-target-test-helpers.ts +66 -0
- package/extensions/signal/src/channel.js +273 -0
- package/extensions/signal/src/runtime.js +10 -0
- package/extensions/slack/src/channel.js +489 -0
- package/extensions/slack/src/runtime.js +10 -0
- package/extensions/talk-voice/index.ts +150 -0
- package/extensions/telegram/src/channel.js +424 -0
- package/extensions/telegram/src/runtime.js +10 -0
- package/extensions/thread-ownership/index.ts +133 -0
- package/extensions/tlon/src/account-fields.ts +25 -0
- package/extensions/tlon/src/urbit/base-url.ts +57 -0
- package/extensions/tlon/src/urbit/channel-client.ts +157 -0
- package/extensions/tlon/src/urbit/channel-ops.ts +164 -0
- package/extensions/tlon/src/urbit/context.ts +47 -0
- package/extensions/tlon/src/urbit/errors.ts +51 -0
- package/extensions/tlon/src/urbit/fetch.ts +39 -0
- package/extensions/twitch/src/test-fixtures.ts +30 -0
- package/extensions/voice-call/src/allowlist.ts +19 -0
- package/extensions/whatsapp/src/channel.js +429 -0
- package/extensions/whatsapp/src/runtime.js +10 -0
- 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,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;
|