@larksuite/openclaw-lark 2026.5.20 → 2026.6.10-beta.0
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/README.zh.md +70 -0
- package/dist/LICENSE +21 -0
- package/dist/README.md +76 -0
- package/dist/openclaw.plugin.json +64 -0
- package/dist/secret-contract-api.js +78 -0
- package/dist/skills/feishu-bitable/SKILL.md +248 -0
- package/dist/skills/feishu-bitable/references/examples.md +813 -0
- package/dist/skills/feishu-bitable/references/field-properties.md +763 -0
- package/dist/skills/feishu-bitable/references/record-values.md +911 -0
- package/dist/skills/feishu-calendar/SKILL.md +242 -0
- package/dist/skills/feishu-channel-rules/SKILL.md +18 -0
- package/dist/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
- package/dist/skills/feishu-create-doc/SKILL.md +719 -0
- package/dist/skills/feishu-fetch-doc/SKILL.md +93 -0
- package/dist/skills/feishu-im-read/SKILL.md +163 -0
- package/dist/skills/feishu-task/SKILL.md +340 -0
- package/dist/skills/feishu-troubleshoot/SKILL.md +70 -0
- package/dist/skills/feishu-update-doc/SKILL.md +285 -0
- package/{src → dist/src}/card/reply-mode.js +8 -5
- package/{src → dist/src}/channel/abort-detect.d.ts +13 -0
- package/{src → dist/src}/channel/abort-detect.js +87 -0
- package/{src → dist/src}/core/config-schema.d.ts +7 -0
- package/{src → dist/src}/core/config-schema.js +6 -0
- package/{src → dist/src}/messaging/converters/content-converter-helpers.d.ts +7 -2
- package/{src → dist/src}/messaging/converters/content-converter-helpers.js +10 -4
- package/dist/src/messaging/inbound/bot-content.d.ts +84 -0
- package/dist/src/messaging/inbound/bot-content.js +117 -0
- package/dist/src/messaging/inbound/bot-loop-guard.d.ts +48 -0
- package/dist/src/messaging/inbound/bot-loop-guard.js +89 -0
- package/{src → dist/src}/messaging/inbound/dispatch-builders.d.ts +18 -0
- package/{src → dist/src}/messaging/inbound/dispatch-builders.js +55 -0
- package/{src → dist/src}/messaging/inbound/dispatch.d.ts +2 -0
- package/{src → dist/src}/messaging/inbound/dispatch.js +50 -28
- package/{src → dist/src}/messaging/inbound/handler.js +97 -2
- package/dist/src/messaging/inbound/mention-registry.d.ts +59 -0
- package/dist/src/messaging/inbound/mention-registry.js +115 -0
- package/{src → dist/src}/messaging/inbound/vc-meeting-invited-handler.js +11 -1
- package/dist/src/messaging/outbound/bot-peer-context.d.ts +42 -0
- package/dist/src/messaging/outbound/bot-peer-context.js +40 -0
- package/dist/src/messaging/outbound/outbound-mention.d.ts +41 -0
- package/dist/src/messaging/outbound/outbound-mention.js +112 -0
- package/{src → dist/src}/messaging/outbound/outbound.js +30 -4
- package/{src → dist/src}/messaging/outbound/send.js +26 -3
- package/{src → dist/src}/messaging/types.d.ts +4 -0
- package/package.json +41 -5
- package/secret-contract-api.js +8 -78
- /package/{index.d.ts → dist/index.d.ts} +0 -0
- /package/{index.js → dist/index.js} +0 -0
- /package/{secret-contract-api.d.ts → dist/secret-contract-api.d.ts} +0 -0
- /package/{src → dist/src}/card/builder.d.ts +0 -0
- /package/{src → dist/src}/card/builder.js +0 -0
- /package/{src → dist/src}/card/card-error.d.ts +0 -0
- /package/{src → dist/src}/card/card-error.js +0 -0
- /package/{src → dist/src}/card/cardkit.d.ts +0 -0
- /package/{src → dist/src}/card/cardkit.js +0 -0
- /package/{src → dist/src}/card/flush-controller.d.ts +0 -0
- /package/{src → dist/src}/card/flush-controller.js +0 -0
- /package/{src → dist/src}/card/image-resolver.d.ts +0 -0
- /package/{src → dist/src}/card/image-resolver.js +0 -0
- /package/{src → dist/src}/card/markdown-style.d.ts +0 -0
- /package/{src → dist/src}/card/markdown-style.js +0 -0
- /package/{src → dist/src}/card/reasoning-utils.d.ts +0 -0
- /package/{src → dist/src}/card/reasoning-utils.js +0 -0
- /package/{src → dist/src}/card/reply-dispatcher-types.d.ts +0 -0
- /package/{src → dist/src}/card/reply-dispatcher-types.js +0 -0
- /package/{src → dist/src}/card/reply-dispatcher.d.ts +0 -0
- /package/{src → dist/src}/card/reply-dispatcher.js +0 -0
- /package/{src → dist/src}/card/reply-mode.d.ts +0 -0
- /package/{src → dist/src}/card/streaming-card-controller.d.ts +0 -0
- /package/{src → dist/src}/card/streaming-card-controller.js +0 -0
- /package/{src → dist/src}/card/tool-use-config.d.ts +0 -0
- /package/{src → dist/src}/card/tool-use-config.js +0 -0
- /package/{src → dist/src}/card/tool-use-display.d.ts +0 -0
- /package/{src → dist/src}/card/tool-use-display.js +0 -0
- /package/{src → dist/src}/card/tool-use-trace-store.d.ts +0 -0
- /package/{src → dist/src}/card/tool-use-trace-store.js +0 -0
- /package/{src → dist/src}/card/unavailable-guard.d.ts +0 -0
- /package/{src → dist/src}/card/unavailable-guard.js +0 -0
- /package/{src → dist/src}/channel/chat-queue.d.ts +0 -0
- /package/{src → dist/src}/channel/chat-queue.js +0 -0
- /package/{src → dist/src}/channel/config-adapter.d.ts +0 -0
- /package/{src → dist/src}/channel/config-adapter.js +0 -0
- /package/{src → dist/src}/channel/directory.d.ts +0 -0
- /package/{src → dist/src}/channel/directory.js +0 -0
- /package/{src → dist/src}/channel/event-handlers.d.ts +0 -0
- /package/{src → dist/src}/channel/event-handlers.js +0 -0
- /package/{src → dist/src}/channel/interactive-dispatch.d.ts +0 -0
- /package/{src → dist/src}/channel/interactive-dispatch.js +0 -0
- /package/{src → dist/src}/channel/monitor.d.ts +0 -0
- /package/{src → dist/src}/channel/monitor.js +0 -0
- /package/{src → dist/src}/channel/onboarding-config.d.ts +0 -0
- /package/{src → dist/src}/channel/onboarding-config.js +0 -0
- /package/{src → dist/src}/channel/onboarding-migrate.d.ts +0 -0
- /package/{src → dist/src}/channel/onboarding-migrate.js +0 -0
- /package/{src → dist/src}/channel/onboarding.d.ts +0 -0
- /package/{src → dist/src}/channel/onboarding.js +0 -0
- /package/{src → dist/src}/channel/plugin.d.ts +0 -0
- /package/{src → dist/src}/channel/plugin.js +0 -0
- /package/{src → dist/src}/channel/probe.d.ts +0 -0
- /package/{src → dist/src}/channel/probe.js +0 -0
- /package/{src → dist/src}/channel/types.d.ts +0 -0
- /package/{src → dist/src}/channel/types.js +0 -0
- /package/{src → dist/src}/commands/auth.d.ts +0 -0
- /package/{src → dist/src}/commands/auth.js +0 -0
- /package/{src → dist/src}/commands/diagnose.d.ts +0 -0
- /package/{src → dist/src}/commands/diagnose.js +0 -0
- /package/{src → dist/src}/commands/doctor.d.ts +0 -0
- /package/{src → dist/src}/commands/doctor.js +0 -0
- /package/{src → dist/src}/commands/index.d.ts +0 -0
- /package/{src → dist/src}/commands/index.js +0 -0
- /package/{src → dist/src}/commands/locale.d.ts +0 -0
- /package/{src → dist/src}/commands/locale.js +0 -0
- /package/{src → dist/src}/core/accounts.d.ts +0 -0
- /package/{src → dist/src}/core/accounts.js +0 -0
- /package/{src → dist/src}/core/agent-config.d.ts +0 -0
- /package/{src → dist/src}/core/agent-config.js +0 -0
- /package/{src → dist/src}/core/api-error.d.ts +0 -0
- /package/{src → dist/src}/core/api-error.js +0 -0
- /package/{src → dist/src}/core/app-owner-fallback.d.ts +0 -0
- /package/{src → dist/src}/core/app-owner-fallback.js +0 -0
- /package/{src → dist/src}/core/app-scope-checker.d.ts +0 -0
- /package/{src → dist/src}/core/app-scope-checker.js +0 -0
- /package/{src → dist/src}/core/auth-errors.d.ts +0 -0
- /package/{src → dist/src}/core/auth-errors.js +0 -0
- /package/{src → dist/src}/core/card-action-operator.d.ts +0 -0
- /package/{src → dist/src}/core/card-action-operator.js +0 -0
- /package/{src → dist/src}/core/chat-info-cache.d.ts +0 -0
- /package/{src → dist/src}/core/chat-info-cache.js +0 -0
- /package/{src → dist/src}/core/comment-target.d.ts +0 -0
- /package/{src → dist/src}/core/comment-target.js +0 -0
- /package/{src → dist/src}/core/device-flow.d.ts +0 -0
- /package/{src → dist/src}/core/device-flow.js +0 -0
- /package/{src → dist/src}/core/domains.d.ts +0 -0
- /package/{src → dist/src}/core/domains.js +0 -0
- /package/{src → dist/src}/core/feishu-fetch.d.ts +0 -0
- /package/{src → dist/src}/core/feishu-fetch.js +0 -0
- /package/{src → dist/src}/core/footer-config.d.ts +0 -0
- /package/{src → dist/src}/core/footer-config.js +0 -0
- /package/{src → dist/src}/core/lark-client.d.ts +0 -0
- /package/{src → dist/src}/core/lark-client.js +0 -0
- /package/{src → dist/src}/core/lark-logger.d.ts +0 -0
- /package/{src → dist/src}/core/lark-logger.js +0 -0
- /package/{src → dist/src}/core/lark-ticket.d.ts +0 -0
- /package/{src → dist/src}/core/lark-ticket.js +0 -0
- /package/{src → dist/src}/core/message-unavailable.d.ts +0 -0
- /package/{src → dist/src}/core/message-unavailable.js +0 -0
- /package/{src → dist/src}/core/owner-policy.d.ts +0 -0
- /package/{src → dist/src}/core/owner-policy.js +0 -0
- /package/{src → dist/src}/core/permission-url.d.ts +0 -0
- /package/{src → dist/src}/core/permission-url.js +0 -0
- /package/{src → dist/src}/core/raw-request.d.ts +0 -0
- /package/{src → dist/src}/core/raw-request.js +0 -0
- /package/{src → dist/src}/core/runtime-store.d.ts +0 -0
- /package/{src → dist/src}/core/runtime-store.js +0 -0
- /package/{src → dist/src}/core/scope-manager.d.ts +0 -0
- /package/{src → dist/src}/core/scope-manager.js +0 -0
- /package/{src → dist/src}/core/sdk-compat.d.ts +0 -0
- /package/{src → dist/src}/core/sdk-compat.js +0 -0
- /package/{src → dist/src}/core/security-check.d.ts +0 -0
- /package/{src → dist/src}/core/security-check.js +0 -0
- /package/{src → dist/src}/core/shutdown-hooks.d.ts +0 -0
- /package/{src → dist/src}/core/shutdown-hooks.js +0 -0
- /package/{src → dist/src}/core/synthetic-target.d.ts +0 -0
- /package/{src → dist/src}/core/synthetic-target.js +0 -0
- /package/{src → dist/src}/core/targets.d.ts +0 -0
- /package/{src → dist/src}/core/targets.js +0 -0
- /package/{src → dist/src}/core/token-store.d.ts +0 -0
- /package/{src → dist/src}/core/token-store.js +0 -0
- /package/{src → dist/src}/core/tool-client.d.ts +0 -0
- /package/{src → dist/src}/core/tool-client.js +0 -0
- /package/{src → dist/src}/core/tool-scopes.d.ts +0 -0
- /package/{src → dist/src}/core/tool-scopes.js +0 -0
- /package/{src → dist/src}/core/tools-config.d.ts +0 -0
- /package/{src → dist/src}/core/tools-config.js +0 -0
- /package/{src → dist/src}/core/types.d.ts +0 -0
- /package/{src → dist/src}/core/types.js +0 -0
- /package/{src → dist/src}/core/uat-client.d.ts +0 -0
- /package/{src → dist/src}/core/uat-client.js +0 -0
- /package/{src → dist/src}/core/version.d.ts +0 -0
- /package/{src → dist/src}/core/version.js +0 -0
- /package/{src → dist/src}/messaging/converters/audio.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/audio.js +0 -0
- /package/{src → dist/src}/messaging/converters/calendar.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/calendar.js +0 -0
- /package/{src → dist/src}/messaging/converters/content-converter.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/content-converter.js +0 -0
- /package/{src → dist/src}/messaging/converters/file.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/file.js +0 -0
- /package/{src → dist/src}/messaging/converters/folder.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/folder.js +0 -0
- /package/{src → dist/src}/messaging/converters/hongbao.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/hongbao.js +0 -0
- /package/{src → dist/src}/messaging/converters/image.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/image.js +0 -0
- /package/{src → dist/src}/messaging/converters/index.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/index.js +0 -0
- /package/{src → dist/src}/messaging/converters/interactive/card-converter.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/interactive/card-converter.js +0 -0
- /package/{src → dist/src}/messaging/converters/interactive/card-utils.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/interactive/card-utils.js +0 -0
- /package/{src → dist/src}/messaging/converters/interactive/index.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/interactive/index.js +0 -0
- /package/{src → dist/src}/messaging/converters/interactive/legacy.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/interactive/legacy.js +0 -0
- /package/{src → dist/src}/messaging/converters/interactive/types.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/interactive/types.js +0 -0
- /package/{src → dist/src}/messaging/converters/location.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/location.js +0 -0
- /package/{src → dist/src}/messaging/converters/merge-forward.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/merge-forward.js +0 -0
- /package/{src → dist/src}/messaging/converters/post.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/post.js +0 -0
- /package/{src → dist/src}/messaging/converters/share.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/share.js +0 -0
- /package/{src → dist/src}/messaging/converters/sticker.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/sticker.js +0 -0
- /package/{src → dist/src}/messaging/converters/system.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/system.js +0 -0
- /package/{src → dist/src}/messaging/converters/text.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/text.js +0 -0
- /package/{src → dist/src}/messaging/converters/todo.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/todo.js +0 -0
- /package/{src → dist/src}/messaging/converters/types.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/types.js +0 -0
- /package/{src → dist/src}/messaging/converters/unknown.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/unknown.js +0 -0
- /package/{src → dist/src}/messaging/converters/utils.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/utils.js +0 -0
- /package/{src → dist/src}/messaging/converters/video-chat.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/video-chat.js +0 -0
- /package/{src → dist/src}/messaging/converters/video.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/video.js +0 -0
- /package/{src → dist/src}/messaging/converters/vote.d.ts +0 -0
- /package/{src → dist/src}/messaging/converters/vote.js +0 -0
- /package/{src → dist/src}/messaging/inbound/comment-context.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/comment-context.js +0 -0
- /package/{src → dist/src}/messaging/inbound/comment-handler.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/comment-handler.js +0 -0
- /package/{src → dist/src}/messaging/inbound/dedup.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/dedup.js +0 -0
- /package/{src → dist/src}/messaging/inbound/dispatch-commands.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/dispatch-commands.js +0 -0
- /package/{src → dist/src}/messaging/inbound/dispatch-context.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/dispatch-context.js +0 -0
- /package/{src → dist/src}/messaging/inbound/enrich.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/enrich.js +0 -0
- /package/{src → dist/src}/messaging/inbound/gate-effects.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/gate-effects.js +0 -0
- /package/{src → dist/src}/messaging/inbound/gate.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/gate.js +0 -0
- /package/{src → dist/src}/messaging/inbound/handler-registry.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/handler-registry.js +0 -0
- /package/{src → dist/src}/messaging/inbound/handler.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/media-resolver.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/media-resolver.js +0 -0
- /package/{src → dist/src}/messaging/inbound/mention.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/mention.js +0 -0
- /package/{src → dist/src}/messaging/inbound/parse-io.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/parse-io.js +0 -0
- /package/{src → dist/src}/messaging/inbound/parse.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/parse.js +0 -0
- /package/{src → dist/src}/messaging/inbound/permission.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/permission.js +0 -0
- /package/{src → dist/src}/messaging/inbound/policy.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/policy.js +0 -0
- /package/{src → dist/src}/messaging/inbound/reaction-handler.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/reaction-handler.js +0 -0
- /package/{src → dist/src}/messaging/inbound/sentinel-store.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/sentinel-store.js +0 -0
- /package/{src → dist/src}/messaging/inbound/synthetic-message.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/synthetic-message.js +0 -0
- /package/{src → dist/src}/messaging/inbound/user-name-cache-store.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/user-name-cache-store.js +0 -0
- /package/{src → dist/src}/messaging/inbound/user-name-cache.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/user-name-cache.js +0 -0
- /package/{src → dist/src}/messaging/inbound/vc-meeting-invited-handler.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/vc-sender.d.ts +0 -0
- /package/{src → dist/src}/messaging/inbound/vc-sender.js +0 -0
- /package/{src → dist/src}/messaging/outbound/actions.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/actions.js +0 -0
- /package/{src → dist/src}/messaging/outbound/chat-manage.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/chat-manage.js +0 -0
- /package/{src → dist/src}/messaging/outbound/deliver.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/deliver.js +0 -0
- /package/{src → dist/src}/messaging/outbound/fetch.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/fetch.js +0 -0
- /package/{src → dist/src}/messaging/outbound/forward.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/forward.js +0 -0
- /package/{src → dist/src}/messaging/outbound/media-url-utils.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/media-url-utils.js +0 -0
- /package/{src → dist/src}/messaging/outbound/media.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/media.js +0 -0
- /package/{src → dist/src}/messaging/outbound/normalize-mentions.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/normalize-mentions.js +0 -0
- /package/{src → dist/src}/messaging/outbound/outbound.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/reactions.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/reactions.js +0 -0
- /package/{src → dist/src}/messaging/outbound/send.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/typing.d.ts +0 -0
- /package/{src → dist/src}/messaging/outbound/typing.js +0 -0
- /package/{src → dist/src}/messaging/shared/message-lookup.d.ts +0 -0
- /package/{src → dist/src}/messaging/shared/message-lookup.js +0 -0
- /package/{src → dist/src}/messaging/types.js +0 -0
- /package/{src → dist/src}/tools/ask-user-question.d.ts +0 -0
- /package/{src → dist/src}/tools/ask-user-question.js +0 -0
- /package/{src → dist/src}/tools/auto-auth.d.ts +0 -0
- /package/{src → dist/src}/tools/auto-auth.js +0 -0
- /package/{src → dist/src}/tools/helpers.d.ts +0 -0
- /package/{src → dist/src}/tools/helpers.js +0 -0
- /package/{src → dist/src}/tools/mcp/doc/create.d.ts +0 -0
- /package/{src → dist/src}/tools/mcp/doc/create.js +0 -0
- /package/{src → dist/src}/tools/mcp/doc/fetch.d.ts +0 -0
- /package/{src → dist/src}/tools/mcp/doc/fetch.js +0 -0
- /package/{src → dist/src}/tools/mcp/doc/index.d.ts +0 -0
- /package/{src → dist/src}/tools/mcp/doc/index.js +0 -0
- /package/{src → dist/src}/tools/mcp/doc/update.d.ts +0 -0
- /package/{src → dist/src}/tools/mcp/doc/update.js +0 -0
- /package/{src → dist/src}/tools/mcp/shared.d.ts +0 -0
- /package/{src → dist/src}/tools/mcp/shared.js +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/app-table-field.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/app-table-field.js +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/app-table-record.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/app-table-record.js +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/app-table-view.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/app-table-view.js +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/app-table.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/app-table.js +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/app.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/app.js +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/index.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/bitable/index.js +0 -0
- /package/{src → dist/src}/tools/oapi/calendar/calendar.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/calendar/calendar.js +0 -0
- /package/{src → dist/src}/tools/oapi/calendar/event-attendee.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/calendar/event-attendee.js +0 -0
- /package/{src → dist/src}/tools/oapi/calendar/event.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/calendar/event.js +0 -0
- /package/{src → dist/src}/tools/oapi/calendar/freebusy.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/calendar/freebusy.js +0 -0
- /package/{src → dist/src}/tools/oapi/calendar/index.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/calendar/index.js +0 -0
- /package/{src → dist/src}/tools/oapi/chat/chat.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/chat/chat.js +0 -0
- /package/{src → dist/src}/tools/oapi/chat/index.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/chat/index.js +0 -0
- /package/{src → dist/src}/tools/oapi/chat/members.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/chat/members.js +0 -0
- /package/{src → dist/src}/tools/oapi/common/get-user.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/common/get-user.js +0 -0
- /package/{src → dist/src}/tools/oapi/common/index.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/common/index.js +0 -0
- /package/{src → dist/src}/tools/oapi/common/search-user.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/common/search-user.js +0 -0
- /package/{src → dist/src}/tools/oapi/drive/doc-comments.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/drive/doc-comments.js +0 -0
- /package/{src → dist/src}/tools/oapi/drive/doc-media.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/drive/doc-media.js +0 -0
- /package/{src → dist/src}/tools/oapi/drive/file.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/drive/file.js +0 -0
- /package/{src → dist/src}/tools/oapi/drive/index.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/drive/index.js +0 -0
- /package/{src → dist/src}/tools/oapi/helpers.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/helpers.js +0 -0
- /package/{src → dist/src}/tools/oapi/im/format-messages.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/im/format-messages.js +0 -0
- /package/{src → dist/src}/tools/oapi/im/index.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/im/index.js +0 -0
- /package/{src → dist/src}/tools/oapi/im/message-read.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/im/message-read.js +0 -0
- /package/{src → dist/src}/tools/oapi/im/message.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/im/message.js +0 -0
- /package/{src → dist/src}/tools/oapi/im/resource.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/im/resource.js +0 -0
- /package/{src → dist/src}/tools/oapi/im/time-utils.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/im/time-utils.js +0 -0
- /package/{src → dist/src}/tools/oapi/im/user-name-uat.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/im/user-name-uat.js +0 -0
- /package/{src → dist/src}/tools/oapi/index.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/index.js +0 -0
- /package/{src → dist/src}/tools/oapi/sdk-types.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/sdk-types.js +0 -0
- /package/{src → dist/src}/tools/oapi/search/doc-search.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/search/doc-search.js +0 -0
- /package/{src → dist/src}/tools/oapi/search/index.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/search/index.js +0 -0
- /package/{src → dist/src}/tools/oapi/sheets/index.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/sheets/index.js +0 -0
- /package/{src → dist/src}/tools/oapi/sheets/sheet.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/sheets/sheet.js +0 -0
- /package/{src → dist/src}/tools/oapi/task/attachment.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/task/attachment.js +0 -0
- /package/{src → dist/src}/tools/oapi/task/comment.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/task/comment.js +0 -0
- /package/{src → dist/src}/tools/oapi/task/index.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/task/index.js +0 -0
- /package/{src → dist/src}/tools/oapi/task/section.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/task/section.js +0 -0
- /package/{src → dist/src}/tools/oapi/task/subtask.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/task/subtask.js +0 -0
- /package/{src → dist/src}/tools/oapi/task/task.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/task/task.js +0 -0
- /package/{src → dist/src}/tools/oapi/task/task_agent.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/task/task_agent.js +0 -0
- /package/{src → dist/src}/tools/oapi/task/tasklist.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/task/tasklist.js +0 -0
- /package/{src → dist/src}/tools/oapi/wiki/index.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/wiki/index.js +0 -0
- /package/{src → dist/src}/tools/oapi/wiki/space-node.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/wiki/space-node.js +0 -0
- /package/{src → dist/src}/tools/oapi/wiki/space.d.ts +0 -0
- /package/{src → dist/src}/tools/oapi/wiki/space.js +0 -0
- /package/{src → dist/src}/tools/oauth-batch-auth.d.ts +0 -0
- /package/{src → dist/src}/tools/oauth-batch-auth.js +0 -0
- /package/{src → dist/src}/tools/oauth-cards.d.ts +0 -0
- /package/{src → dist/src}/tools/oauth-cards.js +0 -0
- /package/{src → dist/src}/tools/oauth.d.ts +0 -0
- /package/{src → dist/src}/tools/oauth.js +0 -0
- /package/{src → dist/src}/tools/onboarding-auth.d.ts +0 -0
- /package/{src → dist/src}/tools/onboarding-auth.js +0 -0
- /package/{src → dist/src}/tools/tat/im/index.d.ts +0 -0
- /package/{src → dist/src}/tools/tat/im/index.js +0 -0
- /package/{src → dist/src}/tools/tat/im/resource.d.ts +0 -0
- /package/{src → dist/src}/tools/tat/im/resource.js +0 -0
- /package/{tsdown.config.d.ts → dist/tsdown.config.d.ts} +0 -0
- /package/{tsdown.config.js → dist/tsdown.config.js} +0 -0
- /package/{vitest.config.d.ts → dist/vitest.config.d.ts} +0 -0
- /package/{vitest.config.js → dist/vitest.config.js} +0 -0
package/README.zh.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# OpenClaw Lark/飞书 插件
|
|
2
|
+
|
|
3
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
|
+
[](https://www.npmjs.com/package/@larksuite/openclaw-lark)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
|
|
7
|
+
[English](./README.md) | 中文版
|
|
8
|
+
|
|
9
|
+
这是 OpenClaw 的官方 Lark/飞书 插件,由 Lark/飞书开放平台团队开发和维护。它将你的 OpenClaw Agent 无缝对接到 Lark/飞书 工作区,赋予其直接读写消息、文档、多维表格、日历、任务等应用的能力。
|
|
10
|
+
|
|
11
|
+
## 特性
|
|
12
|
+
|
|
13
|
+
本插件为 OpenClaw 提供了全面的 Lark/飞书集成能力,主要包括:
|
|
14
|
+
|
|
15
|
+
| 类别 | 能力 |
|
|
16
|
+
|------|------|
|
|
17
|
+
| 💬 消息 | 消息读取(群聊/单聊历史、话题回复)、消息发送、消息回复、消息搜索、图片/文件下载 |
|
|
18
|
+
| 📄 文档 | 创建云文档、更新云文档、读取云文档内容 |
|
|
19
|
+
| 📊 多维表格 | 创建/管理多维表格、数据表、字段、记录(增删改查、批量操作、高级筛选)、视图 |
|
|
20
|
+
| 📈 电子表格 | 创建、编辑、查看电子表格 |
|
|
21
|
+
| 📅 日历日程 | 日历管理、日程管理(创建/查询/修改/删除/搜索)、参会人管理、忙闲查询 |
|
|
22
|
+
| ✅ 任务 | 任务管理(创建/查询/更新/完成)、清单管理、子任务、评论 |
|
|
23
|
+
|
|
24
|
+
此外,插件还支持:
|
|
25
|
+
- **📱 交互式卡片**:实时状态更新(思考中/生成中/完成状态),提供敏感操作的确认按钮
|
|
26
|
+
- **🌊 流式回复**:在消息卡片中提供实时的流式响应
|
|
27
|
+
- **🔒 权限策略**:为私聊和群聊提供灵活的访问控制策略
|
|
28
|
+
- **⚙️ 高级群组配置**:每个群聊的独立设置,包括白名单、技能绑定和自定义系统提示词
|
|
29
|
+
|
|
30
|
+
## 安全与风险提示(使用前必读)
|
|
31
|
+
本插件对接 OpenClaw AI 自动化能力,存在模型幻觉、执行不可控、提示词注入等固有风险;授权飞书权限后,OpenClaw 将以您的用户身份在授权范围内执行操作,可能导致敏感数据泄露、越权操作等高风险后果,请您谨慎操作和使用。
|
|
32
|
+
为降低上述风险,插件已在多个层面启用默认安全保护以降低上述风险,但上述风险仍然存在。我们强烈建议不要主动修改任何默认安全配置;一旦放开相关限制,上述风险将显著提高,由此产生的后果需由您自行承担。
|
|
33
|
+
我们建议您将接入 OpenClaw 的飞书机器人作为私人对话助手使用,请勿将其拉入群聊或允许其他用户与其交互,以避免权限被滥用或数据泄露。
|
|
34
|
+
请您充分知悉全部使用风险,使用本插件即视为您自愿承担相关所有责任。
|
|
35
|
+
|
|
36
|
+
**免责声明:**
|
|
37
|
+
|
|
38
|
+
本软件的代码采用MIT许可证。
|
|
39
|
+
该软件运行时会调用Lark/飞书开放平台的API,使用这些API需要遵守如下协议和隐私政策:
|
|
40
|
+
|
|
41
|
+
- [飞书用户服务协议](https://www.feishu.cn/terms)
|
|
42
|
+
- [飞书隐私政策](https://www.feishu.cn/privacy)
|
|
43
|
+
- [飞书开放平台独立软件服务商安全管理运营规范](https://open.larkoffice.com/document/uAjLw4CM/uMzNwEjLzcDMx4yM3ATM/management-practice/app-service-provider-security-management-specifications)
|
|
44
|
+
- [Lark用户服务协议](https://www.larksuite.com/user-terms-of-service)
|
|
45
|
+
- [Lark隐私政策](https://www.larksuite.com/privacy-policy)
|
|
46
|
+
|
|
47
|
+
## 安装与要求
|
|
48
|
+
|
|
49
|
+
在开始之前,请确保你已准备好以下各项:
|
|
50
|
+
|
|
51
|
+
- **Node.js**: `v22` 或更高版本。
|
|
52
|
+
- **OpenClaw**: OpenClaw 已成功安装并可运行。详情请访问 [OpenClaw 官方网站](https://openclaw.ai)。
|
|
53
|
+
|
|
54
|
+
> **注意**:OpenClaw 版本需在 **2026.2.26** 及以上,可通过 `openclaw -v` 命令查看。如果低于该版本可能出现异常,执行以下命令升级:
|
|
55
|
+
> ```bash
|
|
56
|
+
> npm install -g openclaw
|
|
57
|
+
> ```
|
|
58
|
+
|
|
59
|
+
## 使用说明
|
|
60
|
+
[OpenClaw Lark/飞书官方插件使用指南](https://bytedance.larkoffice.com/docx/MFK7dDFLFoVlOGxWCv5cTXKmnMh)
|
|
61
|
+
|
|
62
|
+
## 贡献
|
|
63
|
+
|
|
64
|
+
我们欢迎社区的贡献!如果你发现 Bug 或有功能建议,请随时提交 [Issue](https://github.com/larksuite/openclaw-larksuite/issues) 或 [Pull Request](https://github.com/larksuite/openclaw-larksuite/pulls)。
|
|
65
|
+
|
|
66
|
+
对于较大的改动,我们建议你先通过 Issue 与我们讨论。
|
|
67
|
+
|
|
68
|
+
## 许可证
|
|
69
|
+
|
|
70
|
+
本项目基于 **MIT 许可证**。详情请参阅 [LICENSE](./LICENSE.md) 文件。
|
package/dist/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/README.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# OpenClaw Lark/Feishu Plugin
|
|
2
|
+
|
|
3
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
|
+
[](https://www.npmjs.com/package/@larksuite/openclaw-lark)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
|
|
7
|
+
[中文版](./README.zh.md) | English
|
|
8
|
+
|
|
9
|
+
This is the official Lark/Feishu plugin for OpenClaw, developed and maintained by the Lark/Feishu Open Platform team. It seamlessly connects your OpenClaw Agent to your Lark/Feishu workspace, enabling it to directly read from and write to messages, docs, bases, calendars, tasks, and more.
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
This plugin provides comprehensive Lark/Feishu integration for OpenClaw, including:
|
|
14
|
+
|
|
15
|
+
| Category | Capabilities |
|
|
16
|
+
|------|------|
|
|
17
|
+
| 💬 Messenger | Read messages (group/DM history, thread replies), send messages, reply to messages, search messages, download images/files |
|
|
18
|
+
| 📄 Docs | Create, update, and read documents |
|
|
19
|
+
| 📊 Base | Create/manage bases, tables, fields, records (CRUD, batch operations, advanced filtering), views |
|
|
20
|
+
| 📈 Sheets | Create, edit, and view spreadsheets |
|
|
21
|
+
| 📅 Calendar | Manage calendars and events (create/query/update/delete/search), manage attendees, check free/busy status |
|
|
22
|
+
| ✅ Tasks | Manage tasks (create/query/update/complete), manage task lists, subtasks, and comments |
|
|
23
|
+
|
|
24
|
+
Additionally, the plugin supports:
|
|
25
|
+
- **📱 Interactive Cards**: Real-time status updates (Thinking/Generating/Complete), plus confirmation buttons for sensitive operations
|
|
26
|
+
- **🌊 Streaming Responses**: Live streaming text directly within message cards
|
|
27
|
+
- **🔒 Permission Policies**: Flexible access control policies for DMs and group chats
|
|
28
|
+
- **⚙️ Advanced Group Configuration**: Per-group settings including allowlists, skill bindings, and custom system prompts
|
|
29
|
+
|
|
30
|
+
## Security & Risk Warnings (Read Before Use)
|
|
31
|
+
|
|
32
|
+
This plugin integrates with OpenClaw AI automation capabilities and carries inherent risks such as model hallucinations, unpredictable execution, and prompt injection. After you authorize Lark/Feishu permissions, OpenClaw will act under your user identity within the authorized scope, which may lead to high-risk consequences such as leakage of sensitive data or unauthorized operations. Please use with caution.
|
|
33
|
+
|
|
34
|
+
To reduce these risks, the plugin enables default security protections at multiple layers. However, these risks still exist. We strongly recommend that you do not proactively modify any default security settings; once relevant restrictions are relaxed, the risks will increase significantly, and you will bear the consequences.
|
|
35
|
+
|
|
36
|
+
We recommend using the Lark/Feishu bot connected to OpenClaw as a private conversational assistant. Do not add it to group chats or allow other users to interact with it, to avoid abuse of permissions or data leakage.
|
|
37
|
+
|
|
38
|
+
Please fully understand all usage risks. By using this plugin, you are deemed to voluntarily assume all related responsibilities.
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
**Disclaimer:**
|
|
42
|
+
|
|
43
|
+
This software is licensed under the MIT License. When running, it calls Lark/Feishu Open Platform APIs. To use these APIs, you must comply with the following agreements and privacy policies:
|
|
44
|
+
|
|
45
|
+
- [Feishu Privacy Policy](https://www.feishu.cn/en/privacy?from=openclaw_plugin_readme)
|
|
46
|
+
- [Feishu User Terms of Service](https://www.feishu.cn/en/terms?from=openclaw_plugin_readme)
|
|
47
|
+
- [Feishu Store App Service Provider Security Management Specifications](https://open.larkoffice.com/document/uAjLw4CM/uMzNwEjLzcDMx4yM3ATM/management-practice/app-service-provider-security-management-specifications)
|
|
48
|
+
|
|
49
|
+
- [Lark Privacy Policy](https://www.larksuite.com/user-terms-of-service)
|
|
50
|
+
- [Lark User Terms of Service](https://www.larksuite.com/privacy-policy)
|
|
51
|
+
|
|
52
|
+
## Requirements & Installation
|
|
53
|
+
|
|
54
|
+
Before you start, make sure you have the following:
|
|
55
|
+
|
|
56
|
+
- **Node.js**: `v22` or higher.
|
|
57
|
+
- **OpenClaw**: OpenClaw is installed and works properly. For details, visit the [OpenClaw official website](https://openclaw.ai).
|
|
58
|
+
|
|
59
|
+
> **Note**: OpenClaw version must be **2026.2.26** or higher. Check with `openclaw -v`. If below this version, you may encounter issues. Upgrade with:
|
|
60
|
+
> ```bash
|
|
61
|
+
> npm install -g openclaw
|
|
62
|
+
> ```
|
|
63
|
+
|
|
64
|
+
## Usage Guide
|
|
65
|
+
|
|
66
|
+
[How to Use the Official Lark/Feishu Plugin for OpenClaw](https://bytedance.larkoffice.com/docx/MFK7dDFLFoVlOGxWCv5cTXKmnMh)
|
|
67
|
+
|
|
68
|
+
## Contributing
|
|
69
|
+
|
|
70
|
+
Community contributions are welcome! If you find a bug or have feature suggestions, please submit an [Issue](https://github.com/larksuite/openclaw-larksuite/issues) or a [Pull Request](https://github.com/larksuite/openclaw-larksuite/pulls).
|
|
71
|
+
|
|
72
|
+
For major changes, we recommend discussing with us first via an Issue.
|
|
73
|
+
|
|
74
|
+
## License
|
|
75
|
+
|
|
76
|
+
This project is licensed under the **MIT License**. See [LICENSE](./LICENSE.md) for details.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "openclaw-lark",
|
|
3
|
+
"channels": [
|
|
4
|
+
"feishu"
|
|
5
|
+
],
|
|
6
|
+
"skills": [
|
|
7
|
+
"./skills"
|
|
8
|
+
],
|
|
9
|
+
"configSchema": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"additionalProperties": false,
|
|
12
|
+
"properties": {}
|
|
13
|
+
},
|
|
14
|
+
"contracts": {
|
|
15
|
+
"tools": [
|
|
16
|
+
"feishu_bitable_app",
|
|
17
|
+
"feishu_bitable_app_table",
|
|
18
|
+
"feishu_bitable_app_table_field",
|
|
19
|
+
"feishu_bitable_app_table_record",
|
|
20
|
+
"feishu_bitable_app_table_view",
|
|
21
|
+
"feishu_calendar_calendar",
|
|
22
|
+
"feishu_calendar_event",
|
|
23
|
+
"feishu_calendar_event_attendee",
|
|
24
|
+
"feishu_calendar_freebusy",
|
|
25
|
+
"feishu_chat",
|
|
26
|
+
"feishu_chat_members",
|
|
27
|
+
"feishu_create_doc",
|
|
28
|
+
"feishu_doc_comments",
|
|
29
|
+
"feishu_doc_media",
|
|
30
|
+
"feishu_drive_file",
|
|
31
|
+
"feishu_fetch_doc",
|
|
32
|
+
"feishu_get_user",
|
|
33
|
+
"feishu_im_bot_image",
|
|
34
|
+
"feishu_im_user_fetch_resource",
|
|
35
|
+
"feishu_im_user_get_messages",
|
|
36
|
+
"feishu_im_user_get_thread_messages",
|
|
37
|
+
"feishu_im_user_message",
|
|
38
|
+
"feishu_im_user_search_messages",
|
|
39
|
+
"feishu_oauth",
|
|
40
|
+
"feishu_oauth_batch_auth",
|
|
41
|
+
"feishu_search_doc_wiki",
|
|
42
|
+
"feishu_search_user",
|
|
43
|
+
"feishu_sheet",
|
|
44
|
+
"feishu_task_comment",
|
|
45
|
+
"feishu_task_subtask",
|
|
46
|
+
"feishu_task_task",
|
|
47
|
+
"feishu_task_agent",
|
|
48
|
+
"feishu_task_attachment",
|
|
49
|
+
"feishu_task_tasklist",
|
|
50
|
+
"feishu_update_doc",
|
|
51
|
+
"feishu_wiki_space",
|
|
52
|
+
"feishu_wiki_space_node",
|
|
53
|
+
"feishu_task_section",
|
|
54
|
+
"feishu_ask_user_question"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
"channelConfigs": {
|
|
58
|
+
"feishu": {
|
|
59
|
+
"schema": {
|
|
60
|
+
"type": "object"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*
|
|
6
|
+
* Feishu channel secret-contract registration. Declares which fields are
|
|
7
|
+
* SecretRef-shaped so OpenClaw's runtime resolves them at startup.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.secretTargetRegistryEntries = void 0;
|
|
11
|
+
exports.collectRuntimeConfigAssignments = collectRuntimeConfigAssignments;
|
|
12
|
+
const channel_secret_basic_runtime_1 = require("openclaw/plugin-sdk/channel-secret-basic-runtime");
|
|
13
|
+
const SECRET_FIELDS = ['appSecret', 'encryptKey', 'verificationToken'];
|
|
14
|
+
/** Fields the Lark SDK only consumes when an account is in webhook mode. */
|
|
15
|
+
const WEBHOOK_ONLY_FIELDS = ['encryptKey', 'verificationToken'];
|
|
16
|
+
exports.secretTargetRegistryEntries = SECRET_FIELDS.flatMap((field) => {
|
|
17
|
+
const acctPath = `channels.feishu.accounts.*.${field}`;
|
|
18
|
+
const topPath = `channels.feishu.${field}`;
|
|
19
|
+
return [
|
|
20
|
+
{
|
|
21
|
+
id: acctPath,
|
|
22
|
+
targetType: acctPath,
|
|
23
|
+
configFile: 'openclaw.json',
|
|
24
|
+
pathPattern: acctPath,
|
|
25
|
+
secretShape: 'secret_input',
|
|
26
|
+
expectedResolvedValue: 'string',
|
|
27
|
+
includeInPlan: true,
|
|
28
|
+
includeInConfigure: true,
|
|
29
|
+
includeInAudit: true,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: topPath,
|
|
33
|
+
targetType: topPath,
|
|
34
|
+
configFile: 'openclaw.json',
|
|
35
|
+
pathPattern: topPath,
|
|
36
|
+
secretShape: 'secret_input',
|
|
37
|
+
expectedResolvedValue: 'string',
|
|
38
|
+
includeInPlan: true,
|
|
39
|
+
includeInConfigure: true,
|
|
40
|
+
includeInAudit: true,
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
});
|
|
44
|
+
function collectRuntimeConfigAssignments(params) {
|
|
45
|
+
const resolved = (0, channel_secret_basic_runtime_1.getChannelSurface)(params.config, 'feishu');
|
|
46
|
+
if (!resolved)
|
|
47
|
+
return;
|
|
48
|
+
const { channel, surface } = resolved;
|
|
49
|
+
(0, channel_secret_basic_runtime_1.collectSimpleChannelFieldAssignments)({
|
|
50
|
+
channelKey: 'feishu',
|
|
51
|
+
field: 'appSecret',
|
|
52
|
+
channel,
|
|
53
|
+
surface,
|
|
54
|
+
defaults: params.defaults,
|
|
55
|
+
context: params.context,
|
|
56
|
+
topInactiveReason: 'no enabled Feishu account inherits this top-level appSecret.',
|
|
57
|
+
accountInactiveReason: 'Feishu account is disabled.',
|
|
58
|
+
});
|
|
59
|
+
const baseConnectionMode = (0, channel_secret_basic_runtime_1.normalizeSecretStringValue)(channel.connectionMode) === 'webhook' ? 'webhook' : 'websocket';
|
|
60
|
+
const resolveAccountMode = (account) => (0, channel_secret_basic_runtime_1.hasOwnProperty)(account, 'connectionMode')
|
|
61
|
+
? (0, channel_secret_basic_runtime_1.normalizeSecretStringValue)(account.connectionMode)
|
|
62
|
+
: baseConnectionMode;
|
|
63
|
+
for (const field of WEBHOOK_ONLY_FIELDS) {
|
|
64
|
+
(0, channel_secret_basic_runtime_1.collectConditionalChannelFieldAssignments)({
|
|
65
|
+
channelKey: 'feishu',
|
|
66
|
+
field,
|
|
67
|
+
channel,
|
|
68
|
+
surface,
|
|
69
|
+
defaults: params.defaults,
|
|
70
|
+
context: params.context,
|
|
71
|
+
topLevelActiveWithoutAccounts: baseConnectionMode === 'webhook',
|
|
72
|
+
topLevelInheritedAccountActive: ({ account, enabled }) => enabled && !(0, channel_secret_basic_runtime_1.hasOwnProperty)(account, field) && resolveAccountMode(account) === 'webhook',
|
|
73
|
+
accountActive: ({ account, enabled }) => enabled && resolveAccountMode(account) === 'webhook',
|
|
74
|
+
topInactiveReason: `no enabled Feishu webhook-mode surface inherits this top-level ${field}.`,
|
|
75
|
+
accountInactiveReason: 'Feishu account is disabled or not running in webhook mode.',
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feishu-bitable
|
|
3
|
+
description: |
|
|
4
|
+
飞书多维表格(Bitable)的创建、查询、编辑和管理工具。包含 27 种字段类型支持、高级筛选、批量操作和视图管理。
|
|
5
|
+
|
|
6
|
+
**当以下情况时使用此 Skill**:
|
|
7
|
+
(1) 需要创建或管理飞书多维表格 App
|
|
8
|
+
(2) 需要在多维表格中新增、查询、修改、删除记录(行数据)
|
|
9
|
+
(3) 需要管理字段(列)、视图、数据表
|
|
10
|
+
(4) 用户提到"多维表格"、"bitable"、"数据表"、"记录"、"字段"
|
|
11
|
+
(5) 需要批量导入数据或批量更新多维表格
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Feishu Bitable (多维表格) SKILL
|
|
15
|
+
|
|
16
|
+
## 🚨 执行前必读
|
|
17
|
+
|
|
18
|
+
- ✅ **创建数据表**:支持两种模式 — ① 明确需求时,在 `create` 时通过 `table.fields` 一次性定义字段(减少 API 调用);② 探索式场景时,使用默认表 + 逐步修改字段(更稳定,易调整)
|
|
19
|
+
- ⚠️ **默认表的空行坑**:`app.create` 自带的默认表中会有空记录(空行)!插入数据前建议先调用 `feishu_bitable_app_table_record.list` + `batch_delete` 删除空行,避免数据污染
|
|
20
|
+
- ✅ **写记录前**:先调用 `feishu_bitable_app_table_field.list` 获取字段 type/ui_type
|
|
21
|
+
- ✅ **人员字段**:默认 open_id(ou_...),值必须是 `[{id:"ou_xxx"}]`(数组对象)
|
|
22
|
+
- ✅ **日期字段**:毫秒时间戳(例如 `1674206443000`),不是秒
|
|
23
|
+
- ✅ **单选字段**:字符串(例如 `"选项1"`),不是数组
|
|
24
|
+
- ✅ **多选字段**:字符串数组(例如 `["选项1", "选项2"]`)
|
|
25
|
+
- ✅ **附件字段**:必须先上传到当前多维表格,使用返回的 file_token
|
|
26
|
+
- ✅ **批量上限**:单次 ≤ 500 条,超过需分批(批量操作是原子性的)
|
|
27
|
+
- ✅ **并发限制**:同一数据表不支持并发写,需串行调用 + 延迟 0.5-1 秒
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 📋 快速索引:意图 → 工具 → 必填参数
|
|
32
|
+
|
|
33
|
+
| 用户意图 | 工具 | action | 必填参数 | 常用可选 |
|
|
34
|
+
|---------|------|--------|---------|---------|
|
|
35
|
+
| 查表有哪些字段 | feishu_bitable_app_table_field | list | app_token, table_id | - |
|
|
36
|
+
| 查记录 | feishu_bitable_app_table_record | list | app_token, table_id | filter, sort, field_names |
|
|
37
|
+
| 新增一行 | feishu_bitable_app_table_record | create | app_token, table_id, fields | - |
|
|
38
|
+
| 批量导入 | feishu_bitable_app_table_record | batch_create | app_token, table_id, records (≤500) | - |
|
|
39
|
+
| 更新一行 | feishu_bitable_app_table_record | update | app_token, table_id, record_id, fields | - |
|
|
40
|
+
| 批量更新 | feishu_bitable_app_table_record | batch_update | app_token, table_id, records (≤500) | - |
|
|
41
|
+
| 创建多维表格 | feishu_bitable_app | create | name | folder_token |
|
|
42
|
+
| 创建数据表 | feishu_bitable_app_table | create | app_token, name | fields |
|
|
43
|
+
| 创建字段 | feishu_bitable_app_table_field | create | app_token, table_id, field_name, type | property |
|
|
44
|
+
| 创建视图 | feishu_bitable_app_table_view | create | app_token, table_id, view_name, view_type | - |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 🎯 核心约束(Schema 未透露的知识)
|
|
49
|
+
|
|
50
|
+
### 📚 详细参考文档
|
|
51
|
+
|
|
52
|
+
**当遇到字段配置、记录值格式问题或需要完整示例时,查阅以下文档**:
|
|
53
|
+
|
|
54
|
+
- **[字段 Property 配置详解](references/field-properties.md)** - 每种字段类型创建/更新时需要的 `property` 参数结构(单选的 options、进度的 min/max、关联的 table_id 等)
|
|
55
|
+
- **[记录值数据结构详解](references/record-values.md)** - 每种字段类型在记录中对应的 `fields` 值格式(人员字段只传 id、日期是毫秒时间戳、附件需先上传等)
|
|
56
|
+
- **[使用场景完整示例](references/examples.md)** - 8 个完整场景示例(创建表模式对比、批量导入、筛选查询、附件处理、关联字段等)
|
|
57
|
+
|
|
58
|
+
**何时查阅**:
|
|
59
|
+
- 创建/更新字段时收到 `125408X` 错误码(property 结构错误)→ 查 field-properties.md
|
|
60
|
+
- 写入记录时收到 `125406X` 错误码(字段值转换失败)→ 查 record-values.md
|
|
61
|
+
- 需要完整的操作流程和参数示例 → 查 examples.md
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### 1. 字段类型与值格式必须严格匹配
|
|
66
|
+
|
|
67
|
+
**Bitable 最大的坑**:不同字段类型对 value 的数据结构要求完全不同。
|
|
68
|
+
|
|
69
|
+
#### 最易错的字段类型(完整列表见 [record-values.md](references/record-values.md))
|
|
70
|
+
|
|
71
|
+
| type | ui_type | 字段类型 | 正确格式 | ❌ 常见错误 |
|
|
72
|
+
|------|---------|----------|---------|-----------|
|
|
73
|
+
| 11 | User | 人员 | `[{id: "ou_xxx"}]` | 传字符串 `"ou_xxx"` 或 `[{name: "张三"}]` |
|
|
74
|
+
| 5 | DateTime | 日期 | `1674206443000`(毫秒) | 传秒时间戳或字符串 |
|
|
75
|
+
| 3 | SingleSelect | 单选 | `"选项名"` | 传数组 `["选项名"]` |
|
|
76
|
+
| 4 | MultiSelect | 多选 | `["选项1", "选项2"]` | 传字符串 `"选项1"` |
|
|
77
|
+
| 15 | Url | 超链接 | `{link: "...", text: "..."}` | 只传字符串 URL |
|
|
78
|
+
| 17 | Attachment | 附件 | `[{file_token: "..."}]` | 传外部 URL 或本地路径 |
|
|
79
|
+
|
|
80
|
+
**强制流程**:
|
|
81
|
+
1. 先调用 `feishu_bitable_app_table_field.list` 获取字段的 `type` 和 `ui_type`
|
|
82
|
+
2. 根据上表或 [record-values.md](references/record-values.md) 构造正确格式
|
|
83
|
+
3. 错误码 `125406X` 或 `1254015` → 检查字段值格式
|
|
84
|
+
|
|
85
|
+
**人员字段特别注意**:
|
|
86
|
+
- 默认使用 open_id(ou_...),与 calendar/task 一致
|
|
87
|
+
- 格式:`[{id: "ou_xxx"}]`(数组对象)
|
|
88
|
+
- **只能传 id 字段**,不能传 name/email 等
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
## 📌 核心使用场景
|
|
92
|
+
|
|
93
|
+
> **完整示例**: 查阅 [examples.md](references/examples.md) 了解更多场景(创建表模式对比、空行处理、附件上传、关联字段等)
|
|
94
|
+
|
|
95
|
+
### 场景 1: 查字段类型(必做第一步)
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"action": "list",
|
|
100
|
+
"app_token": "S404b...",
|
|
101
|
+
"table_id": "tbl..."
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**返回**:包含每个字段的 `field_id`、`field_name`、`type`、`ui_type`、`property`
|
|
106
|
+
|
|
107
|
+
### 场景 2: 批量导入客户数据
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"action": "batch_create",
|
|
112
|
+
"app_token": "S404b...",
|
|
113
|
+
"table_id": "tbl...",
|
|
114
|
+
"records": [
|
|
115
|
+
{
|
|
116
|
+
"fields": {
|
|
117
|
+
"客户名称": "Bytedance",
|
|
118
|
+
"负责人": [{"id": "ou_xxx"}],
|
|
119
|
+
"签约日期": 1674206443000,
|
|
120
|
+
"状态": "进行中"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"fields": {
|
|
125
|
+
"客户名称": "飞书",
|
|
126
|
+
"负责人": [{"id": "ou_yyy"}],
|
|
127
|
+
"签约日期": 1675416243000,
|
|
128
|
+
"状态": "已完成"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**字段值格式**:
|
|
136
|
+
- 人员:`[{id: "ou_xxx"}]`(数组对象)
|
|
137
|
+
- 日期:毫秒时间戳
|
|
138
|
+
- 单选:字符串
|
|
139
|
+
- 多选:字符串数组
|
|
140
|
+
|
|
141
|
+
**限制**: 最多 500 条记录
|
|
142
|
+
|
|
143
|
+
### 场景 3: 筛选查询(高级筛选)
|
|
144
|
+
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"action": "list",
|
|
148
|
+
"app_token": "S404b...",
|
|
149
|
+
"table_id": "tbl...",
|
|
150
|
+
"filter": {
|
|
151
|
+
"conjunction": "and",
|
|
152
|
+
"conditions": [
|
|
153
|
+
{
|
|
154
|
+
"field_name": "状态",
|
|
155
|
+
"operator": "is",
|
|
156
|
+
"value": ["进行中"]
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"field_name": "截止日期",
|
|
160
|
+
"operator": "isLess",
|
|
161
|
+
"value": ["ExactDate", "1740441600000"]
|
|
162
|
+
}
|
|
163
|
+
]
|
|
164
|
+
},
|
|
165
|
+
"sort": [
|
|
166
|
+
{
|
|
167
|
+
"field_name": "截止日期",
|
|
168
|
+
"desc": false
|
|
169
|
+
}
|
|
170
|
+
]
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**filter 说明**:
|
|
175
|
+
- 支持 10 种 operator(is/isNot/contains/isEmpty 等,见附录 C)
|
|
176
|
+
- ⚠️ **isEmpty/isNotEmpty 必须传 `value: []`**(虽然逻辑上不需要值,但 API 要求必须传空数组)
|
|
177
|
+
- 日期筛选可使用 `["Today"]`、`["ExactDate", "时间戳"]` 等
|
|
178
|
+
- `sort` 可指定多个排序字段
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 🔍 常见错误与排查
|
|
183
|
+
|
|
184
|
+
| 错误码 | 错误现象 | 根本原因 | 解决方案 |
|
|
185
|
+
|--------|---------|---------|---------|
|
|
186
|
+
| 1254064 | DatetimeFieldConvFail | 日期字段格式错误 | **必须用毫秒时间戳**(如 `1772121600000`),不能用字符串(`"2026-02-27"`、RFC3339)或秒级时间戳 |
|
|
187
|
+
| 1254068 | URLFieldConvFail | 超链接字段格式错误 | **必须用对象** `{text: "显示文本", link: "URL"}`,不能直接传字符串 URL |
|
|
188
|
+
| 1254066 | UserFieldConvFail | 人员字段格式错误或 ID 类型不匹配 | 必须传 `[{id: "ou_xxx"}]`,确认 `user_id_type` |
|
|
189
|
+
| 1254015 | Field types do not match | 字段值格式与类型不匹配 | 先 list 字段,按类型构造正确格式 |
|
|
190
|
+
| 1254104 | RecordAddOnceExceedLimit | 批量创建超过 500 条 | 分批调用,每批 ≤ 500 |
|
|
191
|
+
| 1254291 | Write conflict | 并发写冲突 | 串行调用 + 延迟 0.5-1 秒 |
|
|
192
|
+
| 1254303 | AttachPermNotAllow | 附件未上传到当前表格 | 先调用上传素材接口 |
|
|
193
|
+
| 1254045 | FieldNameNotFound | 字段名不存在 | 检查字段名(包括空格、大小写) |
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## 📚 附录:背景知识
|
|
198
|
+
|
|
199
|
+
### A. 资源层级关系
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
App (多维表格应用)
|
|
203
|
+
├── Table (数据表) ×100
|
|
204
|
+
│ ├── Record (记录/行) ×20,000
|
|
205
|
+
│ ├── Field (字段/列) ×300
|
|
206
|
+
│ └── View (视图) ×200
|
|
207
|
+
└── Dashboard (仪表盘)
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### B. 筛选条件 operator 列表
|
|
211
|
+
|
|
212
|
+
| operator | 含义 | 支持字段 | value 要求 |
|
|
213
|
+
|----------|------|----------|-----------|
|
|
214
|
+
| `is` | 等于 | 所有 | 单个值 |
|
|
215
|
+
| `isNot` | 不等于 | 除日期外 | 单个值 |
|
|
216
|
+
| `contains` | 包含 | 除日期外 | 可多个值 |
|
|
217
|
+
| `doesNotContain` | 不包含 | 除日期外 | 可多个值 |
|
|
218
|
+
| `isEmpty` | 为空 | 所有 | 必须为 `[]` |
|
|
219
|
+
| `isNotEmpty` | 不为空 | 所有 | 必须为 `[]` |
|
|
220
|
+
| `isGreater` | 大于 | 数字、日期 | 单个值 |
|
|
221
|
+
| `isGreaterEqual` | 大于等于 | 数字(不支持日期) | 单个值 |
|
|
222
|
+
| `isLess` | 小于 | 数字、日期 | 单个值 |
|
|
223
|
+
| `isLessEqual` | 小于等于 | 数字(不支持日期) | 单个值 |
|
|
224
|
+
|
|
225
|
+
**日期字段特殊值**: `["Today"]`, `["Tomorrow"]`, `["ExactDate", "时间戳"]` 等(完整列表见 [examples.md](references/examples.md#场景-3-筛选查询高级筛选))
|
|
226
|
+
|
|
227
|
+
### C. 使用限制
|
|
228
|
+
|
|
229
|
+
| 限制项 | 上限 |
|
|
230
|
+
|--------|------|
|
|
231
|
+
| 数据表 + 仪表盘 | 100(单个 App) |
|
|
232
|
+
| 记录数 | 20,000(单个数据表) |
|
|
233
|
+
| 字段数 | 300(单个数据表) |
|
|
234
|
+
| 视图数 | 200(单个数据表) |
|
|
235
|
+
| 批量创建/更新/删除 | 500(单次 API 调用) |
|
|
236
|
+
| 单元格文本 | 10 万字符 |
|
|
237
|
+
| 单选/多选选项 | 20,000(单个字段) |
|
|
238
|
+
| 单元格附件 | 100 |
|
|
239
|
+
| 单元格人员 | 1,000 |
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
### D. 其他约束
|
|
244
|
+
|
|
245
|
+
- 从其他数据源同步的数据表,**不支持增删改**记录
|
|
246
|
+
- 公式字段、查看引用字段是**只读**的
|
|
247
|
+
- 删除操作**无法恢复**
|
|
248
|
+
- 视图筛选条件使用 `field_id`,需先调用 field.list 获取
|