@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.
- package/CHANGELOG.md +25 -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/device-pair/poolbot.plugin.json +20 -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/package.json +37 -0
- package/extensions/feishu/poolbot.plugin.json +10 -0
- package/extensions/feishu/skills/feishu-doc/SKILL.md +105 -0
- package/extensions/feishu/skills/feishu-doc/references/block-types.md +103 -0
- package/extensions/feishu/skills/feishu-drive/SKILL.md +97 -0
- package/extensions/feishu/skills/feishu-perm/SKILL.md +119 -0
- package/extensions/feishu/skills/feishu-wiki/SKILL.md +111 -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/package.json +14 -0
- package/extensions/irc/poolbot.plugin.json +9 -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/README.md +33 -0
- package/extensions/minimax-portal-auth/index.ts +161 -0
- package/extensions/minimax-portal-auth/oauth.ts +247 -0
- package/extensions/minimax-portal-auth/package.json +15 -0
- package/extensions/minimax-portal-auth/poolbot.plugin.json +9 -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/README.md +82 -0
- package/extensions/openai-codex-auth/index.ts +177 -0
- package/extensions/openai-codex-auth/package.json +15 -0
- package/extensions/openai-codex-auth/poolbot.plugin.json +9 -0
- package/extensions/phone-control/index.ts +421 -0
- package/extensions/phone-control/poolbot.plugin.json +10 -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/talk-voice/poolbot.plugin.json +10 -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/thread-ownership/poolbot.plugin.json +28 -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,103 @@
|
|
|
1
|
+
# Feishu Block Types Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for Feishu document block types. Use with `feishu_doc_list_blocks`, `feishu_doc_update_block`, and `feishu_doc_delete_block`.
|
|
4
|
+
|
|
5
|
+
## Block Type Table
|
|
6
|
+
|
|
7
|
+
| block_type | Name | Description | Editable |
|
|
8
|
+
| ---------- | --------------- | ------------------------------ | -------- |
|
|
9
|
+
| 1 | Page | Document root (contains title) | No |
|
|
10
|
+
| 2 | Text | Plain text paragraph | Yes |
|
|
11
|
+
| 3 | Heading1 | H1 heading | Yes |
|
|
12
|
+
| 4 | Heading2 | H2 heading | Yes |
|
|
13
|
+
| 5 | Heading3 | H3 heading | Yes |
|
|
14
|
+
| 6 | Heading4 | H4 heading | Yes |
|
|
15
|
+
| 7 | Heading5 | H5 heading | Yes |
|
|
16
|
+
| 8 | Heading6 | H6 heading | Yes |
|
|
17
|
+
| 9 | Heading7 | H7 heading | Yes |
|
|
18
|
+
| 10 | Heading8 | H8 heading | Yes |
|
|
19
|
+
| 11 | Heading9 | H9 heading | Yes |
|
|
20
|
+
| 12 | Bullet | Unordered list item | Yes |
|
|
21
|
+
| 13 | Ordered | Ordered list item | Yes |
|
|
22
|
+
| 14 | Code | Code block | Yes |
|
|
23
|
+
| 15 | Quote | Blockquote | Yes |
|
|
24
|
+
| 16 | Equation | LaTeX equation | Partial |
|
|
25
|
+
| 17 | Todo | Checkbox / task item | Yes |
|
|
26
|
+
| 18 | Bitable | Multi-dimensional table | No |
|
|
27
|
+
| 19 | Callout | Highlight block | Yes |
|
|
28
|
+
| 20 | ChatCard | Chat card embed | No |
|
|
29
|
+
| 21 | Diagram | Diagram embed | No |
|
|
30
|
+
| 22 | Divider | Horizontal rule | No |
|
|
31
|
+
| 23 | File | File attachment | No |
|
|
32
|
+
| 24 | Grid | Grid layout container | No |
|
|
33
|
+
| 25 | GridColumn | Grid column | No |
|
|
34
|
+
| 26 | Iframe | Embedded iframe | No |
|
|
35
|
+
| 27 | Image | Image | Partial |
|
|
36
|
+
| 28 | ISV | Third-party widget | No |
|
|
37
|
+
| 29 | MindnoteBlock | Mindmap embed | No |
|
|
38
|
+
| 30 | Sheet | Spreadsheet embed | No |
|
|
39
|
+
| 31 | Table | Table | Partial |
|
|
40
|
+
| 32 | TableCell | Table cell | Yes |
|
|
41
|
+
| 33 | View | View embed | No |
|
|
42
|
+
| 34 | Undefined | Unknown type | No |
|
|
43
|
+
| 35 | QuoteContainer | Quote container | No |
|
|
44
|
+
| 36 | Task | Lark Tasks integration | No |
|
|
45
|
+
| 37 | OKR | OKR integration | No |
|
|
46
|
+
| 38 | OKRObjective | OKR objective | No |
|
|
47
|
+
| 39 | OKRKeyResult | OKR key result | No |
|
|
48
|
+
| 40 | OKRProgress | OKR progress | No |
|
|
49
|
+
| 41 | AddOns | Add-ons block | No |
|
|
50
|
+
| 42 | JiraIssue | Jira issue embed | No |
|
|
51
|
+
| 43 | WikiCatalog | Wiki catalog | No |
|
|
52
|
+
| 44 | Board | Board embed | No |
|
|
53
|
+
| 45 | Agenda | Agenda block | No |
|
|
54
|
+
| 46 | AgendaItem | Agenda item | No |
|
|
55
|
+
| 47 | AgendaItemTitle | Agenda item title | No |
|
|
56
|
+
| 48 | SyncedBlock | Synced block reference | No |
|
|
57
|
+
|
|
58
|
+
## Editing Guidelines
|
|
59
|
+
|
|
60
|
+
### Text-based blocks (2-17, 19)
|
|
61
|
+
|
|
62
|
+
Update text content using `feishu_doc_update_block`:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"doc_token": "ABC123",
|
|
67
|
+
"block_id": "block_xxx",
|
|
68
|
+
"content": "New text content"
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Image blocks (27)
|
|
73
|
+
|
|
74
|
+
Images cannot be updated directly via `update_block`. Use `feishu_doc_write` or `feishu_doc_append` with markdown to add new images.
|
|
75
|
+
|
|
76
|
+
### Table blocks (31)
|
|
77
|
+
|
|
78
|
+
**Important:** Table blocks CANNOT be created via the `documentBlockChildren.create` API (error 1770029). This affects `feishu_doc_write` and `feishu_doc_append` - markdown tables will be skipped with a warning.
|
|
79
|
+
|
|
80
|
+
Tables can only be read (via `list_blocks`) and individual cells (type 32) can be updated, but new tables cannot be inserted programmatically via markdown.
|
|
81
|
+
|
|
82
|
+
### Container blocks (24, 25, 35)
|
|
83
|
+
|
|
84
|
+
Grid and QuoteContainer are layout containers. Edit their child blocks instead.
|
|
85
|
+
|
|
86
|
+
## Common Patterns
|
|
87
|
+
|
|
88
|
+
### Replace specific paragraph
|
|
89
|
+
|
|
90
|
+
1. `feishu_doc_list_blocks` - find the block_id
|
|
91
|
+
2. `feishu_doc_update_block` - update its content
|
|
92
|
+
|
|
93
|
+
### Insert content at specific location
|
|
94
|
+
|
|
95
|
+
Currently, the API only supports appending to document end. For insertion at specific positions, consider:
|
|
96
|
+
|
|
97
|
+
1. Read existing content
|
|
98
|
+
2. Delete affected blocks
|
|
99
|
+
3. Rewrite with new content in desired order
|
|
100
|
+
|
|
101
|
+
### Delete multiple blocks
|
|
102
|
+
|
|
103
|
+
Blocks must be deleted one at a time. Delete child blocks before parent containers.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feishu-drive
|
|
3
|
+
description: |
|
|
4
|
+
Feishu cloud storage file management. Activate when user mentions cloud space, folders, drive.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Feishu Drive Tool
|
|
8
|
+
|
|
9
|
+
Single tool `feishu_drive` for cloud storage operations.
|
|
10
|
+
|
|
11
|
+
## Token Extraction
|
|
12
|
+
|
|
13
|
+
From URL `https://xxx.feishu.cn/drive/folder/ABC123` → `folder_token` = `ABC123`
|
|
14
|
+
|
|
15
|
+
## Actions
|
|
16
|
+
|
|
17
|
+
### List Folder Contents
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{ "action": "list" }
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Root directory (no folder_token).
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{ "action": "list", "folder_token": "fldcnXXX" }
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Returns: files with token, name, type, url, timestamps.
|
|
30
|
+
|
|
31
|
+
### Get File Info
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{ "action": "info", "file_token": "ABC123", "type": "docx" }
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Searches for the file in the root directory. Note: file must be in root or use `list` to browse folders first.
|
|
38
|
+
|
|
39
|
+
`type`: `doc`, `docx`, `sheet`, `bitable`, `folder`, `file`, `mindnote`, `shortcut`
|
|
40
|
+
|
|
41
|
+
### Create Folder
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{ "action": "create_folder", "name": "New Folder" }
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
In parent folder:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{ "action": "create_folder", "name": "New Folder", "folder_token": "fldcnXXX" }
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Move File
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{ "action": "move", "file_token": "ABC123", "type": "docx", "folder_token": "fldcnXXX" }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Delete File
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{ "action": "delete", "file_token": "ABC123", "type": "docx" }
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## File Types
|
|
66
|
+
|
|
67
|
+
| Type | Description |
|
|
68
|
+
| ---------- | ----------------------- |
|
|
69
|
+
| `doc` | Old format document |
|
|
70
|
+
| `docx` | New format document |
|
|
71
|
+
| `sheet` | Spreadsheet |
|
|
72
|
+
| `bitable` | Multi-dimensional table |
|
|
73
|
+
| `folder` | Folder |
|
|
74
|
+
| `file` | Uploaded file |
|
|
75
|
+
| `mindnote` | Mind map |
|
|
76
|
+
| `shortcut` | Shortcut |
|
|
77
|
+
|
|
78
|
+
## Configuration
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
channels:
|
|
82
|
+
feishu:
|
|
83
|
+
tools:
|
|
84
|
+
drive: true # default: true
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Permissions
|
|
88
|
+
|
|
89
|
+
- `drive:drive` - Full access (create, move, delete)
|
|
90
|
+
- `drive:drive:readonly` - Read only (list, info)
|
|
91
|
+
|
|
92
|
+
## Known Limitations
|
|
93
|
+
|
|
94
|
+
- **Bots have no root folder**: Feishu bots use `tenant_access_token` and don't have their own "My Space". The root folder concept only exists for user accounts. This means:
|
|
95
|
+
- `create_folder` without `folder_token` will fail (400 error)
|
|
96
|
+
- Bot can only access files/folders that have been **shared with it**
|
|
97
|
+
- **Workaround**: User must first create a folder manually and share it with the bot, then bot can create subfolders inside it
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feishu-perm
|
|
3
|
+
description: |
|
|
4
|
+
Feishu permission management for documents and files. Activate when user mentions sharing, permissions, collaborators.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Feishu Permission Tool
|
|
8
|
+
|
|
9
|
+
Single tool `feishu_perm` for managing file/document permissions.
|
|
10
|
+
|
|
11
|
+
## Actions
|
|
12
|
+
|
|
13
|
+
### List Collaborators
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{ "action": "list", "token": "ABC123", "type": "docx" }
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Returns: members with member_type, member_id, perm, name.
|
|
20
|
+
|
|
21
|
+
### Add Collaborator
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"action": "add",
|
|
26
|
+
"token": "ABC123",
|
|
27
|
+
"type": "docx",
|
|
28
|
+
"member_type": "email",
|
|
29
|
+
"member_id": "user@example.com",
|
|
30
|
+
"perm": "edit"
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Remove Collaborator
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"action": "remove",
|
|
39
|
+
"token": "ABC123",
|
|
40
|
+
"type": "docx",
|
|
41
|
+
"member_type": "email",
|
|
42
|
+
"member_id": "user@example.com"
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Token Types
|
|
47
|
+
|
|
48
|
+
| Type | Description |
|
|
49
|
+
| ---------- | ----------------------- |
|
|
50
|
+
| `doc` | Old format document |
|
|
51
|
+
| `docx` | New format document |
|
|
52
|
+
| `sheet` | Spreadsheet |
|
|
53
|
+
| `bitable` | Multi-dimensional table |
|
|
54
|
+
| `folder` | Folder |
|
|
55
|
+
| `file` | Uploaded file |
|
|
56
|
+
| `wiki` | Wiki node |
|
|
57
|
+
| `mindnote` | Mind map |
|
|
58
|
+
|
|
59
|
+
## Member Types
|
|
60
|
+
|
|
61
|
+
| Type | Description |
|
|
62
|
+
| ------------------ | ------------------ |
|
|
63
|
+
| `email` | Email address |
|
|
64
|
+
| `openid` | User open_id |
|
|
65
|
+
| `userid` | User user_id |
|
|
66
|
+
| `unionid` | User union_id |
|
|
67
|
+
| `openchat` | Group chat open_id |
|
|
68
|
+
| `opendepartmentid` | Department open_id |
|
|
69
|
+
|
|
70
|
+
## Permission Levels
|
|
71
|
+
|
|
72
|
+
| Perm | Description |
|
|
73
|
+
| ------------- | ------------------------------------ |
|
|
74
|
+
| `view` | View only |
|
|
75
|
+
| `edit` | Can edit |
|
|
76
|
+
| `full_access` | Full access (can manage permissions) |
|
|
77
|
+
|
|
78
|
+
## Examples
|
|
79
|
+
|
|
80
|
+
Share document with email:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"action": "add",
|
|
85
|
+
"token": "doxcnXXX",
|
|
86
|
+
"type": "docx",
|
|
87
|
+
"member_type": "email",
|
|
88
|
+
"member_id": "alice@company.com",
|
|
89
|
+
"perm": "edit"
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Share folder with group:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"action": "add",
|
|
98
|
+
"token": "fldcnXXX",
|
|
99
|
+
"type": "folder",
|
|
100
|
+
"member_type": "openchat",
|
|
101
|
+
"member_id": "oc_xxx",
|
|
102
|
+
"perm": "view"
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Configuration
|
|
107
|
+
|
|
108
|
+
```yaml
|
|
109
|
+
channels:
|
|
110
|
+
feishu:
|
|
111
|
+
tools:
|
|
112
|
+
perm: true # default: false (disabled)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Note:** This tool is disabled by default because permission management is a sensitive operation. Enable explicitly if needed.
|
|
116
|
+
|
|
117
|
+
## Permissions
|
|
118
|
+
|
|
119
|
+
Required: `drive:permission`
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feishu-wiki
|
|
3
|
+
description: |
|
|
4
|
+
Feishu knowledge base navigation. Activate when user mentions knowledge base, wiki, or wiki links.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Feishu Wiki Tool
|
|
8
|
+
|
|
9
|
+
Single tool `feishu_wiki` for knowledge base operations.
|
|
10
|
+
|
|
11
|
+
## Token Extraction
|
|
12
|
+
|
|
13
|
+
From URL `https://xxx.feishu.cn/wiki/ABC123def` → `token` = `ABC123def`
|
|
14
|
+
|
|
15
|
+
## Actions
|
|
16
|
+
|
|
17
|
+
### List Knowledge Spaces
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{ "action": "spaces" }
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Returns all accessible wiki spaces.
|
|
24
|
+
|
|
25
|
+
### List Nodes
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{ "action": "nodes", "space_id": "7xxx" }
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
With parent:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{ "action": "nodes", "space_id": "7xxx", "parent_node_token": "wikcnXXX" }
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Get Node Details
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{ "action": "get", "token": "ABC123def" }
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Returns: `node_token`, `obj_token`, `obj_type`, etc. Use `obj_token` with `feishu_doc` to read/write the document.
|
|
44
|
+
|
|
45
|
+
### Create Node
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{ "action": "create", "space_id": "7xxx", "title": "New Page" }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
With type and parent:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"action": "create",
|
|
56
|
+
"space_id": "7xxx",
|
|
57
|
+
"title": "Sheet",
|
|
58
|
+
"obj_type": "sheet",
|
|
59
|
+
"parent_node_token": "wikcnXXX"
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
`obj_type`: `docx` (default), `sheet`, `bitable`, `mindnote`, `file`, `doc`, `slides`
|
|
64
|
+
|
|
65
|
+
### Move Node
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{ "action": "move", "space_id": "7xxx", "node_token": "wikcnXXX" }
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
To different location:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"action": "move",
|
|
76
|
+
"space_id": "7xxx",
|
|
77
|
+
"node_token": "wikcnXXX",
|
|
78
|
+
"target_space_id": "7yyy",
|
|
79
|
+
"target_parent_token": "wikcnYYY"
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Rename Node
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{ "action": "rename", "space_id": "7xxx", "node_token": "wikcnXXX", "title": "New Title" }
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Wiki-Doc Workflow
|
|
90
|
+
|
|
91
|
+
To edit a wiki page:
|
|
92
|
+
|
|
93
|
+
1. Get node: `{ "action": "get", "token": "wiki_token" }` → returns `obj_token`
|
|
94
|
+
2. Read doc: `feishu_doc { "action": "read", "doc_token": "obj_token" }`
|
|
95
|
+
3. Write doc: `feishu_doc { "action": "write", "doc_token": "obj_token", "content": "..." }`
|
|
96
|
+
|
|
97
|
+
## Configuration
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
channels:
|
|
101
|
+
feishu:
|
|
102
|
+
tools:
|
|
103
|
+
wiki: true # default: true
|
|
104
|
+
doc: true # required - wiki content uses feishu_doc
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Dependency:** This tool requires `feishu_doc` to be enabled. Wiki pages are documents - use `feishu_wiki` to navigate, then `feishu_doc` to read/edit content.
|
|
108
|
+
|
|
109
|
+
## Permissions
|
|
110
|
+
|
|
111
|
+
Required: `wiki:wiki` or `wiki:wiki:readonly`
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { ClawdbotConfig } from "poolbot/plugin-sdk";
|
|
2
|
+
import { createAccountListHelpers } from "poolbot/plugin-sdk";
|
|
3
|
+
import { normalizeAccountId } from "poolbot/plugin-sdk/account-id";
|
|
4
|
+
import type {
|
|
5
|
+
FeishuConfig,
|
|
6
|
+
FeishuAccountConfig,
|
|
7
|
+
FeishuDomain,
|
|
8
|
+
ResolvedFeishuAccount,
|
|
9
|
+
} from "./types.js";
|
|
10
|
+
|
|
11
|
+
const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("feishu");
|
|
12
|
+
export const listFeishuAccountIds = listAccountIds;
|
|
13
|
+
export const resolveDefaultFeishuAccountId = resolveDefaultAccountId;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Get the raw account-specific config.
|
|
17
|
+
*/
|
|
18
|
+
function resolveAccountConfig(
|
|
19
|
+
cfg: ClawdbotConfig,
|
|
20
|
+
accountId: string,
|
|
21
|
+
): FeishuAccountConfig | undefined {
|
|
22
|
+
const accounts = (cfg.channels?.feishu as FeishuConfig)?.accounts;
|
|
23
|
+
if (!accounts || typeof accounts !== "object") {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
return accounts[accountId];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Merge top-level config with account-specific config.
|
|
31
|
+
* Account-specific fields override top-level fields.
|
|
32
|
+
*/
|
|
33
|
+
function mergeFeishuAccountConfig(cfg: ClawdbotConfig, accountId: string): FeishuConfig {
|
|
34
|
+
const feishuCfg = cfg.channels?.feishu as FeishuConfig | undefined;
|
|
35
|
+
|
|
36
|
+
// Extract base config (exclude accounts field to avoid recursion)
|
|
37
|
+
const { accounts: _ignored, ...base } = feishuCfg ?? {};
|
|
38
|
+
|
|
39
|
+
// Get account-specific overrides
|
|
40
|
+
const account = resolveAccountConfig(cfg, accountId) ?? {};
|
|
41
|
+
|
|
42
|
+
// Merge: account config overrides base config
|
|
43
|
+
return { ...base, ...account } as FeishuConfig;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Resolve Feishu credentials from a config.
|
|
48
|
+
*/
|
|
49
|
+
export function resolveFeishuCredentials(cfg?: FeishuConfig): {
|
|
50
|
+
appId: string;
|
|
51
|
+
appSecret: string;
|
|
52
|
+
encryptKey?: string;
|
|
53
|
+
verificationToken?: string;
|
|
54
|
+
domain: FeishuDomain;
|
|
55
|
+
} | null {
|
|
56
|
+
const appId = cfg?.appId?.trim();
|
|
57
|
+
const appSecret = cfg?.appSecret?.trim();
|
|
58
|
+
if (!appId || !appSecret) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
appId,
|
|
63
|
+
appSecret,
|
|
64
|
+
encryptKey: cfg?.encryptKey?.trim() || undefined,
|
|
65
|
+
verificationToken: cfg?.verificationToken?.trim() || undefined,
|
|
66
|
+
domain: cfg?.domain ?? "feishu",
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Resolve a complete Feishu account with merged config.
|
|
72
|
+
*/
|
|
73
|
+
export function resolveFeishuAccount(params: {
|
|
74
|
+
cfg: ClawdbotConfig;
|
|
75
|
+
accountId?: string | null;
|
|
76
|
+
}): ResolvedFeishuAccount {
|
|
77
|
+
const accountId = normalizeAccountId(params.accountId);
|
|
78
|
+
const feishuCfg = params.cfg.channels?.feishu as FeishuConfig | undefined;
|
|
79
|
+
|
|
80
|
+
// Base enabled state (top-level)
|
|
81
|
+
const baseEnabled = feishuCfg?.enabled !== false;
|
|
82
|
+
|
|
83
|
+
// Merge configs
|
|
84
|
+
const merged = mergeFeishuAccountConfig(params.cfg, accountId);
|
|
85
|
+
|
|
86
|
+
// Account-level enabled state
|
|
87
|
+
const accountEnabled = merged.enabled !== false;
|
|
88
|
+
const enabled = baseEnabled && accountEnabled;
|
|
89
|
+
|
|
90
|
+
// Resolve credentials from merged config
|
|
91
|
+
const creds = resolveFeishuCredentials(merged);
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
accountId,
|
|
95
|
+
enabled,
|
|
96
|
+
configured: Boolean(creds),
|
|
97
|
+
name: (merged as FeishuAccountConfig).name?.trim() || undefined,
|
|
98
|
+
appId: creds?.appId,
|
|
99
|
+
appSecret: creds?.appSecret,
|
|
100
|
+
encryptKey: creds?.encryptKey,
|
|
101
|
+
verificationToken: creds?.verificationToken,
|
|
102
|
+
domain: creds?.domain ?? "feishu",
|
|
103
|
+
config: merged,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* List all enabled and configured accounts.
|
|
109
|
+
*/
|
|
110
|
+
export function listEnabledFeishuAccounts(cfg: ClawdbotConfig): ResolvedFeishuAccount[] {
|
|
111
|
+
return listFeishuAccountIds(cfg)
|
|
112
|
+
.map((accountId) => resolveFeishuAccount({ cfg, accountId }))
|
|
113
|
+
.filter((account) => account.enabled && account.configured);
|
|
114
|
+
}
|