@larksuite/openclaw-lark 2026.3.9
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/LICENSE +10 -0
- package/README.md +283 -0
- package/index.d.ts +37 -0
- package/index.d.ts.map +1 -0
- package/index.js +119 -0
- package/index.js.map +1 -0
- package/openclaw.plugin.json +10 -0
- package/package.json +47 -0
- package/skills/feishu-bitable/SKILL.md +248 -0
- package/skills/feishu-bitable/references/examples.md +813 -0
- package/skills/feishu-bitable/references/field-properties.md +763 -0
- package/skills/feishu-bitable/references/record-values.md +911 -0
- package/skills/feishu-calendar/SKILL.md +244 -0
- package/skills/feishu-channel-rules/SKILL.md +18 -0
- package/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
- package/skills/feishu-create-doc/SKILL.md +719 -0
- package/skills/feishu-fetch-doc/SKILL.md +93 -0
- package/skills/feishu-im-read/SKILL.md +163 -0
- package/skills/feishu-task/SKILL.md +293 -0
- package/skills/feishu-troubleshoot/SKILL.md +70 -0
- package/skills/feishu-update-doc/SKILL.md +285 -0
- package/src/card/builder.d.ts +100 -0
- package/src/card/builder.d.ts.map +1 -0
- package/src/card/builder.js +381 -0
- package/src/card/builder.js.map +1 -0
- package/src/card/cardkit.d.ts +91 -0
- package/src/card/cardkit.d.ts.map +1 -0
- package/src/card/cardkit.js +182 -0
- package/src/card/cardkit.js.map +1 -0
- package/src/card/flush-controller.d.ts +46 -0
- package/src/card/flush-controller.d.ts.map +1 -0
- package/src/card/flush-controller.js +135 -0
- package/src/card/flush-controller.js.map +1 -0
- package/src/card/markdown-style.d.ts +17 -0
- package/src/card/markdown-style.d.ts.map +1 -0
- package/src/card/markdown-style.js +98 -0
- package/src/card/markdown-style.js.map +1 -0
- package/src/card/reply-dispatcher-types.d.ts +121 -0
- package/src/card/reply-dispatcher-types.d.ts.map +1 -0
- package/src/card/reply-dispatcher-types.js +58 -0
- package/src/card/reply-dispatcher-types.js.map +1 -0
- package/src/card/reply-dispatcher.d.ts +16 -0
- package/src/card/reply-dispatcher.d.ts.map +1 -0
- package/src/card/reply-dispatcher.js +293 -0
- package/src/card/reply-dispatcher.js.map +1 -0
- package/src/card/reply-mode.d.ts +39 -0
- package/src/card/reply-mode.d.ts.map +1 -0
- package/src/card/reply-mode.js +66 -0
- package/src/card/reply-mode.js.map +1 -0
- package/src/card/streaming-card-controller.d.ts +88 -0
- package/src/card/streaming-card-controller.d.ts.map +1 -0
- package/src/card/streaming-card-controller.js +717 -0
- package/src/card/streaming-card-controller.js.map +1 -0
- package/src/card/unavailable-guard.d.ts +36 -0
- package/src/card/unavailable-guard.d.ts.map +1 -0
- package/src/card/unavailable-guard.js +84 -0
- package/src/card/unavailable-guard.js.map +1 -0
- package/src/channel/abort-detect.d.ts +35 -0
- package/src/channel/abort-detect.d.ts.map +1 -0
- package/src/channel/abort-detect.js +125 -0
- package/src/channel/abort-detect.js.map +1 -0
- package/src/channel/chat-queue.d.ts +42 -0
- package/src/channel/chat-queue.d.ts.map +1 -0
- package/src/channel/chat-queue.js +59 -0
- package/src/channel/chat-queue.js.map +1 -0
- package/src/channel/config-adapter.d.ts +24 -0
- package/src/channel/config-adapter.d.ts.map +1 -0
- package/src/channel/config-adapter.js +102 -0
- package/src/channel/config-adapter.js.map +1 -0
- package/src/channel/directory.d.ts +58 -0
- package/src/channel/directory.d.ts.map +1 -0
- package/src/channel/directory.js +192 -0
- package/src/channel/directory.js.map +1 -0
- package/src/channel/event-handlers.d.ts +16 -0
- package/src/channel/event-handlers.d.ts.map +1 -0
- package/src/channel/event-handlers.js +222 -0
- package/src/channel/event-handlers.js.map +1 -0
- package/src/channel/monitor.d.ts +18 -0
- package/src/channel/monitor.d.ts.map +1 -0
- package/src/channel/monitor.js +128 -0
- package/src/channel/monitor.js.map +1 -0
- package/src/channel/onboarding-config.d.ts +18 -0
- package/src/channel/onboarding-config.d.ts.map +1 -0
- package/src/channel/onboarding-config.js +89 -0
- package/src/channel/onboarding-config.js.map +1 -0
- package/src/channel/onboarding-migrate.d.ts +26 -0
- package/src/channel/onboarding-migrate.d.ts.map +1 -0
- package/src/channel/onboarding-migrate.js +68 -0
- package/src/channel/onboarding-migrate.js.map +1 -0
- package/src/channel/onboarding.d.ts +13 -0
- package/src/channel/onboarding.d.ts.map +1 -0
- package/src/channel/onboarding.js +297 -0
- package/src/channel/onboarding.js.map +1 -0
- package/src/channel/plugin.d.ts +14 -0
- package/src/channel/plugin.d.ts.map +1 -0
- package/src/channel/plugin.js +279 -0
- package/src/channel/plugin.js.map +1 -0
- package/src/channel/probe.d.ts +15 -0
- package/src/channel/probe.d.ts.map +1 -0
- package/src/channel/probe.js +22 -0
- package/src/channel/probe.js.map +1 -0
- package/src/channel/types.d.ts +37 -0
- package/src/channel/types.d.ts.map +1 -0
- package/src/channel/types.js +8 -0
- package/src/channel/types.js.map +1 -0
- package/src/commands/auth.d.ts +16 -0
- package/src/commands/auth.d.ts.map +1 -0
- package/src/commands/auth.js +85 -0
- package/src/commands/auth.js.map +1 -0
- package/src/commands/diagnose.d.ts +70 -0
- package/src/commands/diagnose.d.ts.map +1 -0
- package/src/commands/diagnose.js +808 -0
- package/src/commands/diagnose.js.map +1 -0
- package/src/commands/doctor.d.ts +18 -0
- package/src/commands/doctor.d.ts.map +1 -0
- package/src/commands/doctor.js +439 -0
- package/src/commands/doctor.js.map +1 -0
- package/src/commands/index.d.ts +9 -0
- package/src/commands/index.d.ts.map +1 -0
- package/src/commands/index.js +208 -0
- package/src/commands/index.js.map +1 -0
- package/src/core/accounts.d.ts +38 -0
- package/src/core/accounts.d.ts.map +1 -0
- package/src/core/accounts.js +179 -0
- package/src/core/accounts.js.map +1 -0
- package/src/core/agent-config.d.ts +101 -0
- package/src/core/agent-config.d.ts.map +1 -0
- package/src/core/agent-config.js +140 -0
- package/src/core/agent-config.js.map +1 -0
- package/src/core/api-error.d.ts +49 -0
- package/src/core/api-error.d.ts.map +1 -0
- package/src/core/api-error.js +113 -0
- package/src/core/api-error.js.map +1 -0
- package/src/core/app-owner-fallback.d.ts +22 -0
- package/src/core/app-owner-fallback.d.ts.map +1 -0
- package/src/core/app-owner-fallback.js +39 -0
- package/src/core/app-owner-fallback.js.map +1 -0
- package/src/core/app-scope-checker.d.ts +88 -0
- package/src/core/app-scope-checker.d.ts.map +1 -0
- package/src/core/app-scope-checker.js +191 -0
- package/src/core/app-scope-checker.js.map +1 -0
- package/src/core/auth-errors.d.ts +143 -0
- package/src/core/auth-errors.d.ts.map +1 -0
- package/src/core/auth-errors.js +156 -0
- package/src/core/auth-errors.js.map +1 -0
- package/src/core/chat-info-cache.d.ts +58 -0
- package/src/core/chat-info-cache.d.ts.map +1 -0
- package/src/core/chat-info-cache.js +153 -0
- package/src/core/chat-info-cache.js.map +1 -0
- package/src/core/config-schema.d.ts +449 -0
- package/src/core/config-schema.d.ts.map +1 -0
- package/src/core/config-schema.js +201 -0
- package/src/core/config-schema.js.map +1 -0
- package/src/core/device-flow.d.ts +78 -0
- package/src/core/device-flow.d.ts.map +1 -0
- package/src/core/device-flow.js +213 -0
- package/src/core/device-flow.js.map +1 -0
- package/src/core/feishu-fetch.d.ts +19 -0
- package/src/core/feishu-fetch.d.ts.map +1 -0
- package/src/core/feishu-fetch.js +26 -0
- package/src/core/feishu-fetch.js.map +1 -0
- package/src/core/footer-config.d.ts +25 -0
- package/src/core/footer-config.d.ts.map +1 -0
- package/src/core/footer-config.js +40 -0
- package/src/core/footer-config.js.map +1 -0
- package/src/core/lark-client.d.ts +109 -0
- package/src/core/lark-client.d.ts.map +1 -0
- package/src/core/lark-client.js +354 -0
- package/src/core/lark-client.js.map +1 -0
- package/src/core/lark-logger.d.ts +24 -0
- package/src/core/lark-logger.d.ts.map +1 -0
- package/src/core/lark-logger.js +155 -0
- package/src/core/lark-logger.js.map +1 -0
- package/src/core/lark-ticket.d.ts +30 -0
- package/src/core/lark-ticket.d.ts.map +1 -0
- package/src/core/lark-ticket.js +36 -0
- package/src/core/lark-ticket.js.map +1 -0
- package/src/core/message-unavailable.d.ts +54 -0
- package/src/core/message-unavailable.d.ts.map +1 -0
- package/src/core/message-unavailable.js +131 -0
- package/src/core/message-unavailable.js.map +1 -0
- package/src/core/owner-policy.d.ts +32 -0
- package/src/core/owner-policy.d.ts.map +1 -0
- package/src/core/owner-policy.js +53 -0
- package/src/core/owner-policy.js.map +1 -0
- package/src/core/permission-url.d.ts +23 -0
- package/src/core/permission-url.d.ts.map +1 -0
- package/src/core/permission-url.js +73 -0
- package/src/core/permission-url.js.map +1 -0
- package/src/core/raw-request.d.ts +28 -0
- package/src/core/raw-request.d.ts.map +1 -0
- package/src/core/raw-request.js +63 -0
- package/src/core/raw-request.js.map +1 -0
- package/src/core/scope-manager.d.ts +169 -0
- package/src/core/scope-manager.d.ts.map +1 -0
- package/src/core/scope-manager.js +214 -0
- package/src/core/scope-manager.js.map +1 -0
- package/src/core/security-check.d.ts +73 -0
- package/src/core/security-check.d.ts.map +1 -0
- package/src/core/security-check.js +175 -0
- package/src/core/security-check.js.map +1 -0
- package/src/core/shutdown-hooks.d.ts +23 -0
- package/src/core/shutdown-hooks.d.ts.map +1 -0
- package/src/core/shutdown-hooks.js +57 -0
- package/src/core/shutdown-hooks.js.map +1 -0
- package/src/core/targets.d.ts +50 -0
- package/src/core/targets.d.ts.map +1 -0
- package/src/core/targets.js +128 -0
- package/src/core/targets.js.map +1 -0
- package/src/core/token-store.d.ts +55 -0
- package/src/core/token-store.d.ts.map +1 -0
- package/src/core/token-store.js +315 -0
- package/src/core/token-store.js.map +1 -0
- package/src/core/tool-client.d.ts +177 -0
- package/src/core/tool-client.d.ts.map +1 -0
- package/src/core/tool-client.js +381 -0
- package/src/core/tool-client.js.map +1 -0
- package/src/core/tool-scopes.d.ts +154 -0
- package/src/core/tool-scopes.d.ts.map +1 -0
- package/src/core/tool-scopes.js +326 -0
- package/src/core/tool-scopes.js.map +1 -0
- package/src/core/tools-config.d.ts +35 -0
- package/src/core/tools-config.d.ts.map +1 -0
- package/src/core/tools-config.js +88 -0
- package/src/core/tools-config.js.map +1 -0
- package/src/core/types.d.ts +88 -0
- package/src/core/types.d.ts.map +1 -0
- package/src/core/types.js +12 -0
- package/src/core/types.js.map +1 -0
- package/src/core/uat-client.d.ts +47 -0
- package/src/core/uat-client.d.ts.map +1 -0
- package/src/core/uat-client.js +173 -0
- package/src/core/uat-client.js.map +1 -0
- package/src/core/version.d.ts +26 -0
- package/src/core/version.d.ts.map +1 -0
- package/src/core/version.js +50 -0
- package/src/core/version.js.map +1 -0
- package/src/messaging/converters/audio.d.ts +9 -0
- package/src/messaging/converters/audio.d.ts.map +1 -0
- package/src/messaging/converters/audio.js +22 -0
- package/src/messaging/converters/audio.js.map +1 -0
- package/src/messaging/converters/calendar.d.ts +14 -0
- package/src/messaging/converters/calendar.d.ts.map +1 -0
- package/src/messaging/converters/calendar.js +51 -0
- package/src/messaging/converters/calendar.js.map +1 -0
- package/src/messaging/converters/content-converter.d.ts +42 -0
- package/src/messaging/converters/content-converter.d.ts.map +1 -0
- package/src/messaging/converters/content-converter.js +107 -0
- package/src/messaging/converters/content-converter.js.map +1 -0
- package/src/messaging/converters/file.d.ts +9 -0
- package/src/messaging/converters/file.d.ts.map +1 -0
- package/src/messaging/converters/file.js +21 -0
- package/src/messaging/converters/file.js.map +1 -0
- package/src/messaging/converters/folder.d.ts +9 -0
- package/src/messaging/converters/folder.d.ts.map +1 -0
- package/src/messaging/converters/folder.js +21 -0
- package/src/messaging/converters/folder.js.map +1 -0
- package/src/messaging/converters/hongbao.d.ts +9 -0
- package/src/messaging/converters/hongbao.d.ts.map +1 -0
- package/src/messaging/converters/hongbao.js +17 -0
- package/src/messaging/converters/hongbao.js.map +1 -0
- package/src/messaging/converters/image.d.ts +9 -0
- package/src/messaging/converters/image.d.ts.map +1 -0
- package/src/messaging/converters/image.js +19 -0
- package/src/messaging/converters/image.js.map +1 -0
- package/src/messaging/converters/index.d.ts +9 -0
- package/src/messaging/converters/index.d.ts.map +1 -0
- package/src/messaging/converters/index.js +51 -0
- package/src/messaging/converters/index.js.map +1 -0
- package/src/messaging/converters/interactive/card-converter.d.ts +77 -0
- package/src/messaging/converters/interactive/card-converter.d.ts.map +1 -0
- package/src/messaging/converters/interactive/card-converter.js +1174 -0
- package/src/messaging/converters/interactive/card-converter.js.map +1 -0
- package/src/messaging/converters/interactive/card-utils.d.ts +10 -0
- package/src/messaging/converters/interactive/card-utils.d.ts.map +1 -0
- package/src/messaging/converters/interactive/card-utils.js +43 -0
- package/src/messaging/converters/interactive/card-utils.js.map +1 -0
- package/src/messaging/converters/interactive/index.d.ts +9 -0
- package/src/messaging/converters/interactive/index.d.ts.map +1 -0
- package/src/messaging/converters/interactive/index.js +22 -0
- package/src/messaging/converters/interactive/index.js.map +1 -0
- package/src/messaging/converters/interactive/legacy.d.ts +12 -0
- package/src/messaging/converters/interactive/legacy.d.ts.map +1 -0
- package/src/messaging/converters/interactive/legacy.js +58 -0
- package/src/messaging/converters/interactive/legacy.js.map +1 -0
- package/src/messaging/converters/interactive/types.d.ts +24 -0
- package/src/messaging/converters/interactive/types.d.ts.map +1 -0
- package/src/messaging/converters/interactive/types.js +25 -0
- package/src/messaging/converters/interactive/types.js.map +1 -0
- package/src/messaging/converters/location.d.ts +9 -0
- package/src/messaging/converters/location.d.ts.map +1 -0
- package/src/messaging/converters/location.js +20 -0
- package/src/messaging/converters/location.js.map +1 -0
- package/src/messaging/converters/merge-forward.d.ts +33 -0
- package/src/messaging/converters/merge-forward.d.ts.map +1 -0
- package/src/messaging/converters/merge-forward.js +226 -0
- package/src/messaging/converters/merge-forward.js.map +1 -0
- package/src/messaging/converters/post.d.ts +12 -0
- package/src/messaging/converters/post.d.ts.map +1 -0
- package/src/messaging/converters/post.js +136 -0
- package/src/messaging/converters/post.js.map +1 -0
- package/src/messaging/converters/share.d.ts +10 -0
- package/src/messaging/converters/share.d.ts.map +1 -0
- package/src/messaging/converters/share.js +24 -0
- package/src/messaging/converters/share.js.map +1 -0
- package/src/messaging/converters/sticker.d.ts +9 -0
- package/src/messaging/converters/sticker.d.ts.map +1 -0
- package/src/messaging/converters/sticker.js +19 -0
- package/src/messaging/converters/sticker.js.map +1 -0
- package/src/messaging/converters/system.d.ts +13 -0
- package/src/messaging/converters/system.d.ts.map +1 -0
- package/src/messaging/converters/system.js +33 -0
- package/src/messaging/converters/system.js.map +1 -0
- package/src/messaging/converters/text.d.ts +9 -0
- package/src/messaging/converters/text.d.ts.map +1 -0
- package/src/messaging/converters/text.js +15 -0
- package/src/messaging/converters/text.js.map +1 -0
- package/src/messaging/converters/todo.d.ts +9 -0
- package/src/messaging/converters/todo.d.ts.map +1 -0
- package/src/messaging/converters/todo.js +42 -0
- package/src/messaging/converters/todo.js.map +1 -0
- package/src/messaging/converters/types.d.ts +108 -0
- package/src/messaging/converters/types.d.ts.map +1 -0
- package/src/messaging/converters/types.js +8 -0
- package/src/messaging/converters/types.js.map +1 -0
- package/src/messaging/converters/unknown.d.ts +9 -0
- package/src/messaging/converters/unknown.d.ts.map +1 -0
- package/src/messaging/converters/unknown.js +17 -0
- package/src/messaging/converters/unknown.js.map +1 -0
- package/src/messaging/converters/utils.d.ts +23 -0
- package/src/messaging/converters/utils.d.ts.map +1 -0
- package/src/messaging/converters/utils.js +52 -0
- package/src/messaging/converters/utils.js.map +1 -0
- package/src/messaging/converters/video-chat.d.ts +9 -0
- package/src/messaging/converters/video-chat.d.ts.map +1 -0
- package/src/messaging/converters/video-chat.js +24 -0
- package/src/messaging/converters/video-chat.js.map +1 -0
- package/src/messaging/converters/video.d.ts +9 -0
- package/src/messaging/converters/video.d.ts.map +1 -0
- package/src/messaging/converters/video.js +33 -0
- package/src/messaging/converters/video.js.map +1 -0
- package/src/messaging/converters/vote.d.ts +9 -0
- package/src/messaging/converters/vote.d.ts.map +1 -0
- package/src/messaging/converters/vote.js +25 -0
- package/src/messaging/converters/vote.js.map +1 -0
- package/src/messaging/inbound/dedup.d.ts +60 -0
- package/src/messaging/inbound/dedup.d.ts.map +1 -0
- package/src/messaging/inbound/dedup.js +117 -0
- package/src/messaging/inbound/dedup.js.map +1 -0
- package/src/messaging/inbound/dispatch-builders.d.ts +84 -0
- package/src/messaging/inbound/dispatch-builders.d.ts.map +1 -0
- package/src/messaging/inbound/dispatch-builders.js +153 -0
- package/src/messaging/inbound/dispatch-builders.js.map +1 -0
- package/src/messaging/inbound/dispatch-commands.d.ts +28 -0
- package/src/messaging/inbound/dispatch-commands.d.ts.map +1 -0
- package/src/messaging/inbound/dispatch-commands.js +113 -0
- package/src/messaging/inbound/dispatch-commands.js.map +1 -0
- package/src/messaging/inbound/dispatch-context.d.ts +68 -0
- package/src/messaging/inbound/dispatch-context.d.ts.map +1 -0
- package/src/messaging/inbound/dispatch-context.js +137 -0
- package/src/messaging/inbound/dispatch-context.js.map +1 -0
- package/src/messaging/inbound/dispatch.d.ts +48 -0
- package/src/messaging/inbound/dispatch.d.ts.map +1 -0
- package/src/messaging/inbound/dispatch.js +193 -0
- package/src/messaging/inbound/dispatch.js.map +1 -0
- package/src/messaging/inbound/enrich.d.ts +103 -0
- package/src/messaging/inbound/enrich.d.ts.map +1 -0
- package/src/messaging/inbound/enrich.js +228 -0
- package/src/messaging/inbound/enrich.js.map +1 -0
- package/src/messaging/inbound/gate-effects.d.ts +24 -0
- package/src/messaging/inbound/gate-effects.d.ts.map +1 -0
- package/src/messaging/inbound/gate-effects.js +44 -0
- package/src/messaging/inbound/gate-effects.js.map +1 -0
- package/src/messaging/inbound/gate.d.ts +61 -0
- package/src/messaging/inbound/gate.d.ts.map +1 -0
- package/src/messaging/inbound/gate.js +234 -0
- package/src/messaging/inbound/gate.js.map +1 -0
- package/src/messaging/inbound/handler.d.ts +36 -0
- package/src/messaging/inbound/handler.d.ts.map +1 -0
- package/src/messaging/inbound/handler.js +174 -0
- package/src/messaging/inbound/handler.js.map +1 -0
- package/src/messaging/inbound/media-resolver.d.ts +33 -0
- package/src/messaging/inbound/media-resolver.d.ts.map +1 -0
- package/src/messaging/inbound/media-resolver.js +88 -0
- package/src/messaging/inbound/media-resolver.js.map +1 -0
- package/src/messaging/inbound/mention.d.ts +40 -0
- package/src/messaging/inbound/mention.d.ts.map +1 -0
- package/src/messaging/inbound/mention.js +82 -0
- package/src/messaging/inbound/mention.js.map +1 -0
- package/src/messaging/inbound/parse-io.d.ts +51 -0
- package/src/messaging/inbound/parse-io.d.ts.map +1 -0
- package/src/messaging/inbound/parse-io.js +82 -0
- package/src/messaging/inbound/parse-io.js.map +1 -0
- package/src/messaging/inbound/parse.d.ts +29 -0
- package/src/messaging/inbound/parse.d.ts.map +1 -0
- package/src/messaging/inbound/parse.js +107 -0
- package/src/messaging/inbound/parse.js.map +1 -0
- package/src/messaging/inbound/permission.d.ts +18 -0
- package/src/messaging/inbound/permission.d.ts.map +1 -0
- package/src/messaging/inbound/permission.js +41 -0
- package/src/messaging/inbound/permission.js.map +1 -0
- package/src/messaging/inbound/policy.d.ts +95 -0
- package/src/messaging/inbound/policy.d.ts.map +1 -0
- package/src/messaging/inbound/policy.js +161 -0
- package/src/messaging/inbound/policy.js.map +1 -0
- package/src/messaging/inbound/reaction-handler.d.ts +62 -0
- package/src/messaging/inbound/reaction-handler.d.ts.map +1 -0
- package/src/messaging/inbound/reaction-handler.js +221 -0
- package/src/messaging/inbound/reaction-handler.js.map +1 -0
- package/src/messaging/inbound/user-name-cache.d.ts +83 -0
- package/src/messaging/inbound/user-name-cache.d.ts.map +1 -0
- package/src/messaging/inbound/user-name-cache.js +242 -0
- package/src/messaging/inbound/user-name-cache.js.map +1 -0
- package/src/messaging/outbound/actions.d.ts +17 -0
- package/src/messaging/outbound/actions.d.ts.map +1 -0
- package/src/messaging/outbound/actions.js +310 -0
- package/src/messaging/outbound/actions.js.map +1 -0
- package/src/messaging/outbound/chat-manage.d.ts +65 -0
- package/src/messaging/outbound/chat-manage.d.ts.map +1 -0
- package/src/messaging/outbound/chat-manage.js +112 -0
- package/src/messaging/outbound/chat-manage.js.map +1 -0
- package/src/messaging/outbound/deliver.d.ts +156 -0
- package/src/messaging/outbound/deliver.d.ts.map +1 -0
- package/src/messaging/outbound/deliver.js +299 -0
- package/src/messaging/outbound/deliver.js.map +1 -0
- package/src/messaging/outbound/fetch.d.ts +13 -0
- package/src/messaging/outbound/fetch.d.ts.map +1 -0
- package/src/messaging/outbound/fetch.js +13 -0
- package/src/messaging/outbound/fetch.js.map +1 -0
- package/src/messaging/outbound/forward.d.ts +27 -0
- package/src/messaging/outbound/forward.d.ts.map +1 -0
- package/src/messaging/outbound/forward.js +49 -0
- package/src/messaging/outbound/forward.js.map +1 -0
- package/src/messaging/outbound/media-url-utils.d.ts +30 -0
- package/src/messaging/outbound/media-url-utils.d.ts.map +1 -0
- package/src/messaging/outbound/media-url-utils.js +131 -0
- package/src/messaging/outbound/media-url-utils.js.map +1 -0
- package/src/messaging/outbound/media.d.ts +256 -0
- package/src/messaging/outbound/media.d.ts.map +1 -0
- package/src/messaging/outbound/media.js +749 -0
- package/src/messaging/outbound/media.js.map +1 -0
- package/src/messaging/outbound/outbound.d.ts +90 -0
- package/src/messaging/outbound/outbound.d.ts.map +1 -0
- package/src/messaging/outbound/outbound.js +112 -0
- package/src/messaging/outbound/outbound.js.map +1 -0
- package/src/messaging/outbound/reactions.d.ts +125 -0
- package/src/messaging/outbound/reactions.d.ts.map +1 -0
- package/src/messaging/outbound/reactions.js +379 -0
- package/src/messaging/outbound/reactions.js.map +1 -0
- package/src/messaging/outbound/send.d.ts +136 -0
- package/src/messaging/outbound/send.d.ts.map +1 -0
- package/src/messaging/outbound/send.js +289 -0
- package/src/messaging/outbound/send.js.map +1 -0
- package/src/messaging/outbound/typing.d.ts +61 -0
- package/src/messaging/outbound/typing.d.ts.map +1 -0
- package/src/messaging/outbound/typing.js +136 -0
- package/src/messaging/outbound/typing.js.map +1 -0
- package/src/messaging/shared/message-lookup.d.ts +55 -0
- package/src/messaging/shared/message-lookup.d.ts.map +1 -0
- package/src/messaging/shared/message-lookup.js +118 -0
- package/src/messaging/shared/message-lookup.js.map +1 -0
- package/src/messaging/types.d.ts +177 -0
- package/src/messaging/types.d.ts.map +1 -0
- package/src/messaging/types.js +11 -0
- package/src/messaging/types.js.map +1 -0
- package/src/tools/auto-auth.d.ts +57 -0
- package/src/tools/auto-auth.d.ts.map +1 -0
- package/src/tools/auto-auth.js +925 -0
- package/src/tools/auto-auth.js.map +1 -0
- package/src/tools/helpers.d.ts +220 -0
- package/src/tools/helpers.d.ts.map +1 -0
- package/src/tools/helpers.js +298 -0
- package/src/tools/helpers.js.map +1 -0
- package/src/tools/mcp/doc/create.d.ts +13 -0
- package/src/tools/mcp/doc/create.d.ts.map +1 -0
- package/src/tools/mcp/doc/create.js +45 -0
- package/src/tools/mcp/doc/create.js.map +1 -0
- package/src/tools/mcp/doc/fetch.d.ts +13 -0
- package/src/tools/mcp/doc/fetch.d.ts.map +1 -0
- package/src/tools/mcp/doc/fetch.js +37 -0
- package/src/tools/mcp/doc/fetch.js.map +1 -0
- package/src/tools/mcp/doc/index.d.ts +13 -0
- package/src/tools/mcp/doc/index.d.ts.map +1 -0
- package/src/tools/mcp/doc/index.js +42 -0
- package/src/tools/mcp/doc/index.js.map +1 -0
- package/src/tools/mcp/doc/update.d.ts +13 -0
- package/src/tools/mcp/doc/update.d.ts.map +1 -0
- package/src/tools/mcp/doc/update.js +62 -0
- package/src/tools/mcp/doc/update.js.map +1 -0
- package/src/tools/mcp/shared.d.ts +58 -0
- package/src/tools/mcp/shared.d.ts.map +1 -0
- package/src/tools/mcp/shared.js +224 -0
- package/src/tools/mcp/shared.js.map +1 -0
- package/src/tools/oapi/bitable/app-table-field.d.ts +17 -0
- package/src/tools/oapi/bitable/app-table-field.d.ts.map +1 -0
- package/src/tools/oapi/bitable/app-table-field.js +224 -0
- package/src/tools/oapi/bitable/app-table-field.js.map +1 -0
- package/src/tools/oapi/bitable/app-table-record.d.ts +21 -0
- package/src/tools/oapi/bitable/app-table-record.d.ts.map +1 -0
- package/src/tools/oapi/bitable/app-table-record.js +449 -0
- package/src/tools/oapi/bitable/app-table-record.js.map +1 -0
- package/src/tools/oapi/bitable/app-table-view.d.ts +18 -0
- package/src/tools/oapi/bitable/app-table-view.d.ts.map +1 -0
- package/src/tools/oapi/bitable/app-table-view.js +197 -0
- package/src/tools/oapi/bitable/app-table-view.js.map +1 -0
- package/src/tools/oapi/bitable/app-table.d.ts +20 -0
- package/src/tools/oapi/bitable/app-table.d.ts.map +1 -0
- package/src/tools/oapi/bitable/app-table.js +249 -0
- package/src/tools/oapi/bitable/app-table.js.map +1 -0
- package/src/tools/oapi/bitable/app.d.ts +19 -0
- package/src/tools/oapi/bitable/app.d.ts.map +1 -0
- package/src/tools/oapi/bitable/app.js +188 -0
- package/src/tools/oapi/bitable/app.js.map +1 -0
- package/src/tools/oapi/bitable/index.d.ts +10 -0
- package/src/tools/oapi/bitable/index.d.ts.map +1 -0
- package/src/tools/oapi/bitable/index.js +10 -0
- package/src/tools/oapi/bitable/index.js.map +1 -0
- package/src/tools/oapi/calendar/calendar.d.ts +16 -0
- package/src/tools/oapi/calendar/calendar.d.ts.map +1 -0
- package/src/tools/oapi/calendar/calendar.js +124 -0
- package/src/tools/oapi/calendar/calendar.js.map +1 -0
- package/src/tools/oapi/calendar/event-attendee.d.ts +17 -0
- package/src/tools/oapi/calendar/event-attendee.d.ts.map +1 -0
- package/src/tools/oapi/calendar/event-attendee.js +275 -0
- package/src/tools/oapi/calendar/event-attendee.js.map +1 -0
- package/src/tools/oapi/calendar/event.d.ts +17 -0
- package/src/tools/oapi/calendar/event.d.ts.map +1 -0
- package/src/tools/oapi/calendar/event.js +721 -0
- package/src/tools/oapi/calendar/event.js.map +1 -0
- package/src/tools/oapi/calendar/freebusy.d.ts +14 -0
- package/src/tools/oapi/calendar/freebusy.d.ts.map +1 -0
- package/src/tools/oapi/calendar/freebusy.js +113 -0
- package/src/tools/oapi/calendar/freebusy.js.map +1 -0
- package/src/tools/oapi/calendar/index.d.ts +9 -0
- package/src/tools/oapi/calendar/index.d.ts.map +1 -0
- package/src/tools/oapi/calendar/index.js +9 -0
- package/src/tools/oapi/calendar/index.js.map +1 -0
- package/src/tools/oapi/chat/chat.d.ts +17 -0
- package/src/tools/oapi/chat/chat.d.ts.map +1 -0
- package/src/tools/oapi/chat/chat.js +126 -0
- package/src/tools/oapi/chat/chat.js.map +1 -0
- package/src/tools/oapi/chat/index.d.ts +11 -0
- package/src/tools/oapi/chat/index.d.ts.map +1 -0
- package/src/tools/oapi/chat/index.js +16 -0
- package/src/tools/oapi/chat/index.js.map +1 -0
- package/src/tools/oapi/chat/members.d.ts +12 -0
- package/src/tools/oapi/chat/members.d.ts.map +1 -0
- package/src/tools/oapi/chat/members.js +83 -0
- package/src/tools/oapi/chat/members.js.map +1 -0
- package/src/tools/oapi/common/get-user.d.ts +13 -0
- package/src/tools/oapi/common/get-user.d.ts.map +1 -0
- package/src/tools/oapi/common/get-user.js +108 -0
- package/src/tools/oapi/common/get-user.js.map +1 -0
- package/src/tools/oapi/common/index.d.ts +7 -0
- package/src/tools/oapi/common/index.d.ts.map +1 -0
- package/src/tools/oapi/common/index.js +7 -0
- package/src/tools/oapi/common/index.js.map +1 -0
- package/src/tools/oapi/common/search-user.d.ts +12 -0
- package/src/tools/oapi/common/search-user.d.ts.map +1 -0
- package/src/tools/oapi/common/search-user.js +75 -0
- package/src/tools/oapi/common/search-user.js.map +1 -0
- package/src/tools/oapi/drive/doc-comments.d.ts +16 -0
- package/src/tools/oapi/drive/doc-comments.d.ts.map +1 -0
- package/src/tools/oapi/drive/doc-comments.js +288 -0
- package/src/tools/oapi/drive/doc-comments.js.map +1 -0
- package/src/tools/oapi/drive/doc-media.d.ts +20 -0
- package/src/tools/oapi/drive/doc-media.d.ts.map +1 -0
- package/src/tools/oapi/drive/doc-media.js +337 -0
- package/src/tools/oapi/drive/doc-media.js.map +1 -0
- package/src/tools/oapi/drive/file.d.ts +20 -0
- package/src/tools/oapi/drive/file.d.ts.map +1 -0
- package/src/tools/oapi/drive/file.js +485 -0
- package/src/tools/oapi/drive/file.js.map +1 -0
- package/src/tools/oapi/drive/index.d.ts +13 -0
- package/src/tools/oapi/drive/index.d.ts.map +1 -0
- package/src/tools/oapi/drive/index.js +37 -0
- package/src/tools/oapi/drive/index.js.map +1 -0
- package/src/tools/oapi/helpers.d.ts +174 -0
- package/src/tools/oapi/helpers.d.ts.map +1 -0
- package/src/tools/oapi/helpers.js +341 -0
- package/src/tools/oapi/helpers.js.map +1 -0
- package/src/tools/oapi/im/format-messages.d.ts +51 -0
- package/src/tools/oapi/im/format-messages.d.ts.map +1 -0
- package/src/tools/oapi/im/format-messages.js +166 -0
- package/src/tools/oapi/im/format-messages.js.map +1 -0
- package/src/tools/oapi/im/index.d.ts +11 -0
- package/src/tools/oapi/im/index.d.ts.map +1 -0
- package/src/tools/oapi/im/index.js +18 -0
- package/src/tools/oapi/im/index.js.map +1 -0
- package/src/tools/oapi/im/message-read.d.ts +14 -0
- package/src/tools/oapi/im/message-read.d.ts.map +1 -0
- package/src/tools/oapi/im/message-read.js +412 -0
- package/src/tools/oapi/im/message-read.js.map +1 -0
- package/src/tools/oapi/im/message.d.ts +17 -0
- package/src/tools/oapi/im/message.d.ts.map +1 -0
- package/src/tools/oapi/im/message.js +171 -0
- package/src/tools/oapi/im/message.js.map +1 -0
- package/src/tools/oapi/im/resource.d.ts +14 -0
- package/src/tools/oapi/im/resource.d.ts.map +1 -0
- package/src/tools/oapi/im/resource.js +152 -0
- package/src/tools/oapi/im/resource.js.map +1 -0
- package/src/tools/oapi/im/time-utils.d.ts +47 -0
- package/src/tools/oapi/im/time-utils.d.ts.map +1 -0
- package/src/tools/oapi/im/time-utils.js +202 -0
- package/src/tools/oapi/im/time-utils.js.map +1 -0
- package/src/tools/oapi/im/user-name-uat.d.ts +24 -0
- package/src/tools/oapi/im/user-name-uat.d.ts.map +1 -0
- package/src/tools/oapi/im/user-name-uat.js +128 -0
- package/src/tools/oapi/im/user-name-uat.js.map +1 -0
- package/src/tools/oapi/index.d.ts +12 -0
- package/src/tools/oapi/index.d.ts.map +1 -0
- package/src/tools/oapi/index.js +59 -0
- package/src/tools/oapi/index.js.map +1 -0
- package/src/tools/oapi/sdk-types.d.ts +97 -0
- package/src/tools/oapi/sdk-types.d.ts.map +1 -0
- package/src/tools/oapi/sdk-types.js +13 -0
- package/src/tools/oapi/sdk-types.js.map +1 -0
- package/src/tools/oapi/search/doc-search.d.ts +14 -0
- package/src/tools/oapi/search/doc-search.d.ts.map +1 -0
- package/src/tools/oapi/search/doc-search.js +203 -0
- package/src/tools/oapi/search/doc-search.js.map +1 -0
- package/src/tools/oapi/search/index.d.ts +13 -0
- package/src/tools/oapi/search/index.d.ts.map +1 -0
- package/src/tools/oapi/search/index.js +34 -0
- package/src/tools/oapi/search/index.js.map +1 -0
- package/src/tools/oapi/sheets/index.d.ts +13 -0
- package/src/tools/oapi/sheets/index.d.ts.map +1 -0
- package/src/tools/oapi/sheets/index.js +32 -0
- package/src/tools/oapi/sheets/index.js.map +1 -0
- package/src/tools/oapi/sheets/sheet.d.ts +17 -0
- package/src/tools/oapi/sheets/sheet.d.ts.map +1 -0
- package/src/tools/oapi/sheets/sheet.js +652 -0
- package/src/tools/oapi/sheets/sheet.js.map +1 -0
- package/src/tools/oapi/task/comment.d.ts +16 -0
- package/src/tools/oapi/task/comment.d.ts.map +1 -0
- package/src/tools/oapi/task/comment.js +142 -0
- package/src/tools/oapi/task/comment.js.map +1 -0
- package/src/tools/oapi/task/index.d.ts +9 -0
- package/src/tools/oapi/task/index.d.ts.map +1 -0
- package/src/tools/oapi/task/index.js +9 -0
- package/src/tools/oapi/task/index.js.map +1 -0
- package/src/tools/oapi/task/subtask.d.ts +15 -0
- package/src/tools/oapi/task/subtask.d.ts.map +1 -0
- package/src/tools/oapi/task/subtask.js +164 -0
- package/src/tools/oapi/task/subtask.js.map +1 -0
- package/src/tools/oapi/task/task.d.ts +17 -0
- package/src/tools/oapi/task/task.d.ts.map +1 -0
- package/src/tools/oapi/task/task.js +346 -0
- package/src/tools/oapi/task/task.js.map +1 -0
- package/src/tools/oapi/task/tasklist.d.ts +22 -0
- package/src/tools/oapi/task/tasklist.d.ts.map +1 -0
- package/src/tools/oapi/task/tasklist.js +323 -0
- package/src/tools/oapi/task/tasklist.js.map +1 -0
- package/src/tools/oapi/wiki/index.d.ts +13 -0
- package/src/tools/oapi/wiki/index.d.ts.map +1 -0
- package/src/tools/oapi/wiki/index.js +35 -0
- package/src/tools/oapi/wiki/index.js.map +1 -0
- package/src/tools/oapi/wiki/space-node.d.ts +18 -0
- package/src/tools/oapi/wiki/space-node.d.ts.map +1 -0
- package/src/tools/oapi/wiki/space-node.js +253 -0
- package/src/tools/oapi/wiki/space-node.js.map +1 -0
- package/src/tools/oapi/wiki/space.d.ts +16 -0
- package/src/tools/oapi/wiki/space.d.ts.map +1 -0
- package/src/tools/oapi/wiki/space.js +132 -0
- package/src/tools/oapi/wiki/space.js.map +1 -0
- package/src/tools/oauth-batch-auth.d.ts +12 -0
- package/src/tools/oauth-batch-auth.d.ts.map +1 -0
- package/src/tools/oauth-batch-auth.js +142 -0
- package/src/tools/oauth-batch-auth.js.map +1 -0
- package/src/tools/oauth-cards.d.ts +27 -0
- package/src/tools/oauth-cards.d.ts.map +1 -0
- package/src/tools/oauth-cards.js +251 -0
- package/src/tools/oauth-cards.js.map +1 -0
- package/src/tools/oauth.d.ts +48 -0
- package/src/tools/oauth.d.ts.map +1 -0
- package/src/tools/oauth.js +619 -0
- package/src/tools/oauth.js.map +1 -0
- package/src/tools/onboarding-auth.d.ts +28 -0
- package/src/tools/onboarding-auth.d.ts.map +1 -0
- package/src/tools/onboarding-auth.js +131 -0
- package/src/tools/onboarding-auth.js.map +1 -0
- package/src/tools/tat/im/index.d.ts +16 -0
- package/src/tools/tat/im/index.d.ts.map +1 -0
- package/src/tools/tat/im/index.js +19 -0
- package/src/tools/tat/im/index.js.map +1 -0
- package/src/tools/tat/im/resource.d.ts +16 -0
- package/src/tools/tat/im/resource.d.ts.map +1 -0
- package/src/tools/tat/im/resource.js +158 -0
- package/src/tools/tat/im/resource.js.map +1 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Pure construction functions for the agent dispatch pipeline.
|
|
6
|
+
*
|
|
7
|
+
* All functions in this module are side-effect-free: they build data
|
|
8
|
+
* structures (message bodies, envelope payloads, inbound context) but
|
|
9
|
+
* never perform I/O, send messages, or mutate external state.
|
|
10
|
+
*/
|
|
11
|
+
import type { HistoryEntry } from 'openclaw/plugin-sdk';
|
|
12
|
+
import type { MessageContext } from '../types';
|
|
13
|
+
import type { DispatchContext } from './dispatch-context';
|
|
14
|
+
import { LarkClient } from '../../core/lark-client';
|
|
15
|
+
/**
|
|
16
|
+
* Build a `[System: ...]` mention annotation when the message @-mentions
|
|
17
|
+
* non-bot users. Returns `undefined` when there are no user mentions.
|
|
18
|
+
*
|
|
19
|
+
* Sender identity / chat metadata are handled by the SDK's own
|
|
20
|
+
* `buildInboundUserContextPrefix` (via SenderId, SenderName, ReplyToBody,
|
|
21
|
+
* InboundHistory, etc.), so we only inject the mention data that the SDK
|
|
22
|
+
* does not natively support.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildMentionAnnotation(ctx: MessageContext): string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Pure function: build the annotated message body with optional quote,
|
|
27
|
+
* speaker prefix, and mention annotation (for the envelope Body).
|
|
28
|
+
*
|
|
29
|
+
* Note: message_id and reply_to are now conveyed via system-event tags
|
|
30
|
+
* (msg:om_xxx, reply_to:om_yyy) instead of inline annotations, keeping
|
|
31
|
+
* the body cleaner and avoiding misleading heuristics for non-text
|
|
32
|
+
* message types (merge_forward, interactive cards, etc.).
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildMessageBody(ctx: MessageContext, quotedContent?: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Build the BodyForAgent value: the clean message content plus an
|
|
37
|
+
* optional mention annotation.
|
|
38
|
+
*
|
|
39
|
+
* SDK >= 2026.2.10 changed the BodyForAgent fallback chain from
|
|
40
|
+
* `BodyForAgent ?? Body` to `BodyForAgent ?? CommandBody ?? RawBody ?? Body`,
|
|
41
|
+
* so annotations embedded only in Body never reach the AI. Setting
|
|
42
|
+
* BodyForAgent explicitly ensures the mention annotation survives.
|
|
43
|
+
*
|
|
44
|
+
* Sender identity, reply context, and chat history are NOT duplicated
|
|
45
|
+
* here — they are injected by the SDK's `buildInboundUserContextPrefix`
|
|
46
|
+
* via the standard fields (SenderId, SenderName, ReplyToBody,
|
|
47
|
+
* InboundHistory) that we pass in buildInboundPayload.
|
|
48
|
+
*
|
|
49
|
+
* Note: media file paths are substituted into `ctx.content` upstream
|
|
50
|
+
* (handler.ts -> substituteMediaPaths) before this function is called.
|
|
51
|
+
* The SDK's `detectAndLoadPromptImages` will discover image paths from
|
|
52
|
+
* the text and inject them as multimodal content blocks.
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildBodyForAgent(ctx: MessageContext): string;
|
|
55
|
+
/**
|
|
56
|
+
* Unified call to `finalizeInboundContext`, eliminating the duplicated
|
|
57
|
+
* field-mapping between permission notification and main message paths.
|
|
58
|
+
*/
|
|
59
|
+
export declare function buildInboundPayload(dc: DispatchContext, opts: {
|
|
60
|
+
body: string;
|
|
61
|
+
bodyForAgent: string;
|
|
62
|
+
rawBody: string;
|
|
63
|
+
commandBody: string;
|
|
64
|
+
senderName: string;
|
|
65
|
+
senderId: string;
|
|
66
|
+
messageSid: string;
|
|
67
|
+
wasMentioned: boolean;
|
|
68
|
+
replyToBody?: string;
|
|
69
|
+
inboundHistory?: {
|
|
70
|
+
sender: string;
|
|
71
|
+
body: string;
|
|
72
|
+
timestamp: number;
|
|
73
|
+
}[];
|
|
74
|
+
extraFields?: Record<string, unknown>;
|
|
75
|
+
}): ReturnType<typeof LarkClient.runtime.channel.reply.finalizeInboundContext>;
|
|
76
|
+
/**
|
|
77
|
+
* Format the agent envelope and prepend group chat history if applicable.
|
|
78
|
+
* Returns the combined body and the history key (undefined for DMs).
|
|
79
|
+
*/
|
|
80
|
+
export declare function buildEnvelopeWithHistory(dc: DispatchContext, messageBody: string, chatHistories: Map<string, HistoryEntry[]> | undefined, historyLimit: number): {
|
|
81
|
+
combinedBody: string;
|
|
82
|
+
historyKey: string | undefined;
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=dispatch-builders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch-builders.d.ts","sourceRoot":"","sources":["../../../../src/messaging/inbound/dispatch-builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQpD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAK9E;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAepF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAM7D;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,eAAe,EACnB,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,GACA,UAAU,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CA2B5E;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,eAAe,EACnB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,SAAS,EACtD,YAAY,EAAE,MAAM,GACnB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CA8B1D"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Pure construction functions for the agent dispatch pipeline.
|
|
6
|
+
*
|
|
7
|
+
* All functions in this module are side-effect-free: they build data
|
|
8
|
+
* structures (message bodies, envelope payloads, inbound context) but
|
|
9
|
+
* never perform I/O, send messages, or mutate external state.
|
|
10
|
+
*/
|
|
11
|
+
import { buildPendingHistoryContextFromMap } from 'openclaw/plugin-sdk';
|
|
12
|
+
import { nonBotMentions } from './mention';
|
|
13
|
+
import { threadScopedKey } from '../../channel/chat-queue';
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Mention annotation
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
/**
|
|
18
|
+
* Build a `[System: ...]` mention annotation when the message @-mentions
|
|
19
|
+
* non-bot users. Returns `undefined` when there are no user mentions.
|
|
20
|
+
*
|
|
21
|
+
* Sender identity / chat metadata are handled by the SDK's own
|
|
22
|
+
* `buildInboundUserContextPrefix` (via SenderId, SenderName, ReplyToBody,
|
|
23
|
+
* InboundHistory, etc.), so we only inject the mention data that the SDK
|
|
24
|
+
* does not natively support.
|
|
25
|
+
*/
|
|
26
|
+
export function buildMentionAnnotation(ctx) {
|
|
27
|
+
const mentions = nonBotMentions(ctx);
|
|
28
|
+
if (mentions.length === 0)
|
|
29
|
+
return undefined;
|
|
30
|
+
const mentionDetails = mentions.map((t) => `${t.name} (open_id: ${t.openId})`).join(', ');
|
|
31
|
+
return `[System: This message @mentions the following users: ${mentionDetails}. Use these open_ids when performing actions involving these users.]`;
|
|
32
|
+
}
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// Message body builders
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
/**
|
|
37
|
+
* Pure function: build the annotated message body with optional quote,
|
|
38
|
+
* speaker prefix, and mention annotation (for the envelope Body).
|
|
39
|
+
*
|
|
40
|
+
* Note: message_id and reply_to are now conveyed via system-event tags
|
|
41
|
+
* (msg:om_xxx, reply_to:om_yyy) instead of inline annotations, keeping
|
|
42
|
+
* the body cleaner and avoiding misleading heuristics for non-text
|
|
43
|
+
* message types (merge_forward, interactive cards, etc.).
|
|
44
|
+
*/
|
|
45
|
+
export function buildMessageBody(ctx, quotedContent) {
|
|
46
|
+
let messageBody = ctx.content;
|
|
47
|
+
if (quotedContent) {
|
|
48
|
+
messageBody = `[Replying to: "${quotedContent}"]\n\n${ctx.content}`;
|
|
49
|
+
}
|
|
50
|
+
const speaker = ctx.senderName ?? ctx.senderId;
|
|
51
|
+
messageBody = `${speaker}: ${messageBody}`;
|
|
52
|
+
const mentionAnnotation = buildMentionAnnotation(ctx);
|
|
53
|
+
if (mentionAnnotation) {
|
|
54
|
+
messageBody += `\n\n${mentionAnnotation}`;
|
|
55
|
+
}
|
|
56
|
+
return messageBody;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build the BodyForAgent value: the clean message content plus an
|
|
60
|
+
* optional mention annotation.
|
|
61
|
+
*
|
|
62
|
+
* SDK >= 2026.2.10 changed the BodyForAgent fallback chain from
|
|
63
|
+
* `BodyForAgent ?? Body` to `BodyForAgent ?? CommandBody ?? RawBody ?? Body`,
|
|
64
|
+
* so annotations embedded only in Body never reach the AI. Setting
|
|
65
|
+
* BodyForAgent explicitly ensures the mention annotation survives.
|
|
66
|
+
*
|
|
67
|
+
* Sender identity, reply context, and chat history are NOT duplicated
|
|
68
|
+
* here — they are injected by the SDK's `buildInboundUserContextPrefix`
|
|
69
|
+
* via the standard fields (SenderId, SenderName, ReplyToBody,
|
|
70
|
+
* InboundHistory) that we pass in buildInboundPayload.
|
|
71
|
+
*
|
|
72
|
+
* Note: media file paths are substituted into `ctx.content` upstream
|
|
73
|
+
* (handler.ts -> substituteMediaPaths) before this function is called.
|
|
74
|
+
* The SDK's `detectAndLoadPromptImages` will discover image paths from
|
|
75
|
+
* the text and inject them as multimodal content blocks.
|
|
76
|
+
*/
|
|
77
|
+
export function buildBodyForAgent(ctx) {
|
|
78
|
+
const mentionAnnotation = buildMentionAnnotation(ctx);
|
|
79
|
+
if (mentionAnnotation) {
|
|
80
|
+
return `${ctx.content}\n\n${mentionAnnotation}`;
|
|
81
|
+
}
|
|
82
|
+
return ctx.content;
|
|
83
|
+
}
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
// Inbound payload builder
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
/**
|
|
88
|
+
* Unified call to `finalizeInboundContext`, eliminating the duplicated
|
|
89
|
+
* field-mapping between permission notification and main message paths.
|
|
90
|
+
*/
|
|
91
|
+
export function buildInboundPayload(dc, opts) {
|
|
92
|
+
return dc.core.channel.reply.finalizeInboundContext({
|
|
93
|
+
// extraFields first — fixed fields below always take precedence
|
|
94
|
+
...opts.extraFields,
|
|
95
|
+
Body: opts.body,
|
|
96
|
+
BodyForAgent: opts.bodyForAgent,
|
|
97
|
+
RawBody: opts.rawBody,
|
|
98
|
+
CommandBody: opts.commandBody,
|
|
99
|
+
From: dc.feishuFrom,
|
|
100
|
+
To: dc.feishuTo,
|
|
101
|
+
SessionKey: dc.threadSessionKey ?? dc.route.sessionKey,
|
|
102
|
+
AccountId: dc.route.accountId,
|
|
103
|
+
ChatType: dc.isGroup ? 'group' : 'direct',
|
|
104
|
+
GroupSubject: dc.isGroup ? dc.ctx.chatId : undefined,
|
|
105
|
+
SenderName: opts.senderName,
|
|
106
|
+
SenderId: opts.senderId,
|
|
107
|
+
Provider: 'feishu',
|
|
108
|
+
Surface: 'feishu',
|
|
109
|
+
MessageSid: opts.messageSid,
|
|
110
|
+
ReplyToBody: opts.replyToBody,
|
|
111
|
+
InboundHistory: opts.inboundHistory,
|
|
112
|
+
Timestamp: Date.now(),
|
|
113
|
+
WasMentioned: opts.wasMentioned,
|
|
114
|
+
CommandAuthorized: dc.commandAuthorized,
|
|
115
|
+
OriginatingChannel: 'feishu',
|
|
116
|
+
OriginatingTo: dc.feishuTo,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
// Envelope + history builder
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
/**
|
|
123
|
+
* Format the agent envelope and prepend group chat history if applicable.
|
|
124
|
+
* Returns the combined body and the history key (undefined for DMs).
|
|
125
|
+
*/
|
|
126
|
+
export function buildEnvelopeWithHistory(dc, messageBody, chatHistories, historyLimit) {
|
|
127
|
+
const body = dc.core.channel.reply.formatAgentEnvelope({
|
|
128
|
+
channel: 'Feishu',
|
|
129
|
+
from: dc.envelopeFrom,
|
|
130
|
+
timestamp: new Date(),
|
|
131
|
+
envelope: dc.envelopeOptions,
|
|
132
|
+
body: messageBody,
|
|
133
|
+
});
|
|
134
|
+
let combinedBody = body;
|
|
135
|
+
const historyKey = dc.isGroup ? threadScopedKey(dc.ctx.chatId, dc.isThread ? dc.ctx.threadId : undefined) : undefined;
|
|
136
|
+
if (dc.isGroup && historyKey && chatHistories) {
|
|
137
|
+
combinedBody = buildPendingHistoryContextFromMap({
|
|
138
|
+
historyMap: chatHistories,
|
|
139
|
+
historyKey,
|
|
140
|
+
limit: historyLimit,
|
|
141
|
+
currentMessage: combinedBody,
|
|
142
|
+
formatEntry: (entry) => dc.core.channel.reply.formatAgentEnvelope({
|
|
143
|
+
channel: 'Feishu',
|
|
144
|
+
from: `${dc.ctx.chatId}:${entry.sender}`,
|
|
145
|
+
timestamp: entry.timestamp,
|
|
146
|
+
body: entry.body,
|
|
147
|
+
envelope: dc.envelopeOptions,
|
|
148
|
+
}),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return { combinedBody, historyKey };
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=dispatch-builders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch-builders.js","sourceRoot":"","sources":["../../../../src/messaging/inbound/dispatch-builders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* System command and permission notification dispatch for inbound messages.
|
|
6
|
+
*
|
|
7
|
+
* Handles control commands (/help, /reset, etc.) via plain-text delivery
|
|
8
|
+
* and permission-error notifications via the streaming card flow.
|
|
9
|
+
*/
|
|
10
|
+
import type { DispatchContext } from './dispatch-context';
|
|
11
|
+
import type { PermissionError } from './permission';
|
|
12
|
+
import { LarkClient } from '../../core/lark-client';
|
|
13
|
+
/**
|
|
14
|
+
* Dispatch a permission-error notification to the agent so it can
|
|
15
|
+
* inform the user about the missing Feishu API scope.
|
|
16
|
+
*/
|
|
17
|
+
export declare function dispatchPermissionNotification(dc: DispatchContext, permissionError: PermissionError, replyToMessageId?: string): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Dispatch a system command (/help, /reset, etc.) via plain-text delivery.
|
|
20
|
+
* No streaming card, no "Processing..." state.
|
|
21
|
+
*
|
|
22
|
+
* When `suppressReply` is true the agent still runs (e.g. reads workspace
|
|
23
|
+
* files) but its text output is not forwarded to Feishu. This is used for
|
|
24
|
+
* bare /new and /reset commands: the SDK already sends a "done" notice
|
|
25
|
+
* via its own route, so the AI greeting would be redundant.
|
|
26
|
+
*/
|
|
27
|
+
export declare function dispatchSystemCommand(dc: DispatchContext, ctxPayload: ReturnType<typeof LarkClient.runtime.channel.reply.finalizeInboundContext>, suppressReply?: boolean, replyToMessageId?: string): Promise<void>;
|
|
28
|
+
//# sourceMappingURL=dispatch-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch-commands.d.ts","sourceRoot":"","sources":["../../../../src/messaging/inbound/dispatch-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAapD;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,EAAE,EAAE,eAAe,EACnB,eAAe,EAAE,eAAe,EAChC,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAkDf;AAMD;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,eAAe,EACnB,UAAU,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,EACtF,aAAa,UAAQ,EACrB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAwCf"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* System command and permission notification dispatch for inbound messages.
|
|
6
|
+
*
|
|
7
|
+
* Handles control commands (/help, /reset, etc.) via plain-text delivery
|
|
8
|
+
* and permission-error notifications via the streaming card flow.
|
|
9
|
+
*/
|
|
10
|
+
import { larkLogger } from '../../core/lark-logger';
|
|
11
|
+
import { ticketElapsed } from '../../core/lark-ticket';
|
|
12
|
+
import { createFeishuReplyDispatcher } from '../../card/reply-dispatcher';
|
|
13
|
+
import { sendMessageFeishu } from '../outbound/send';
|
|
14
|
+
import { buildInboundPayload } from './dispatch-builders';
|
|
15
|
+
const log = larkLogger('inbound/dispatch-commands');
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Permission error notification
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
/**
|
|
20
|
+
* Dispatch a permission-error notification to the agent so it can
|
|
21
|
+
* inform the user about the missing Feishu API scope.
|
|
22
|
+
*/
|
|
23
|
+
export async function dispatchPermissionNotification(dc, permissionError, replyToMessageId) {
|
|
24
|
+
const grantUrl = permissionError.grantUrl ?? '';
|
|
25
|
+
const permissionNotifyBody = `[System: The bot encountered a Feishu API permission error. Please inform the user about this issue and provide the permission grant URL for the admin to authorize. Permission grant URL: ${grantUrl}]`;
|
|
26
|
+
const permBody = dc.core.channel.reply.formatAgentEnvelope({
|
|
27
|
+
channel: 'Feishu',
|
|
28
|
+
from: dc.envelopeFrom,
|
|
29
|
+
timestamp: new Date(),
|
|
30
|
+
envelope: dc.envelopeOptions,
|
|
31
|
+
body: permissionNotifyBody,
|
|
32
|
+
});
|
|
33
|
+
const permCtx = buildInboundPayload(dc, {
|
|
34
|
+
body: permBody,
|
|
35
|
+
bodyForAgent: permissionNotifyBody,
|
|
36
|
+
rawBody: permissionNotifyBody,
|
|
37
|
+
commandBody: permissionNotifyBody,
|
|
38
|
+
senderName: 'system',
|
|
39
|
+
senderId: 'system',
|
|
40
|
+
messageSid: `${dc.ctx.messageId}:permission-error`,
|
|
41
|
+
wasMentioned: false,
|
|
42
|
+
});
|
|
43
|
+
const { dispatcher: permDispatcher, replyOptions: permReplyOptions, markDispatchIdle: markPermIdle, markFullyComplete: markPermComplete, } = createFeishuReplyDispatcher({
|
|
44
|
+
cfg: dc.accountScopedCfg,
|
|
45
|
+
agentId: dc.route.agentId,
|
|
46
|
+
chatId: dc.ctx.chatId,
|
|
47
|
+
replyToMessageId: replyToMessageId ?? dc.ctx.messageId,
|
|
48
|
+
accountId: dc.account.accountId,
|
|
49
|
+
chatType: dc.ctx.chatType,
|
|
50
|
+
replyInThread: dc.isThread,
|
|
51
|
+
});
|
|
52
|
+
dc.log(`feishu[${dc.account.accountId}]: dispatching permission error notification to agent`);
|
|
53
|
+
await dc.core.channel.reply.dispatchReplyFromConfig({
|
|
54
|
+
ctx: permCtx,
|
|
55
|
+
cfg: dc.accountScopedCfg,
|
|
56
|
+
dispatcher: permDispatcher,
|
|
57
|
+
replyOptions: permReplyOptions,
|
|
58
|
+
});
|
|
59
|
+
await permDispatcher.waitForIdle();
|
|
60
|
+
markPermComplete();
|
|
61
|
+
markPermIdle();
|
|
62
|
+
}
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// System command dispatch
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
/**
|
|
67
|
+
* Dispatch a system command (/help, /reset, etc.) via plain-text delivery.
|
|
68
|
+
* No streaming card, no "Processing..." state.
|
|
69
|
+
*
|
|
70
|
+
* When `suppressReply` is true the agent still runs (e.g. reads workspace
|
|
71
|
+
* files) but its text output is not forwarded to Feishu. This is used for
|
|
72
|
+
* bare /new and /reset commands: the SDK already sends a "done" notice
|
|
73
|
+
* via its own route, so the AI greeting would be redundant.
|
|
74
|
+
*/
|
|
75
|
+
export async function dispatchSystemCommand(dc, ctxPayload, suppressReply = false, replyToMessageId) {
|
|
76
|
+
let delivered = false;
|
|
77
|
+
dc.log(`feishu[${dc.account.accountId}]: detected system command, using plain-text dispatch${suppressReply ? ' (reply suppressed)' : ''}`);
|
|
78
|
+
log.info(`system command detected, plain-text dispatch${suppressReply ? ', reply suppressed' : ''}`);
|
|
79
|
+
await dc.core.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
|
|
80
|
+
ctx: ctxPayload,
|
|
81
|
+
cfg: dc.accountScopedCfg,
|
|
82
|
+
dispatcherOptions: {
|
|
83
|
+
deliver: async (payload) => {
|
|
84
|
+
if (suppressReply)
|
|
85
|
+
return;
|
|
86
|
+
const text = payload.text?.trim() ?? '';
|
|
87
|
+
if (!text)
|
|
88
|
+
return;
|
|
89
|
+
await sendMessageFeishu({
|
|
90
|
+
cfg: dc.accountScopedCfg,
|
|
91
|
+
to: dc.ctx.chatId,
|
|
92
|
+
text,
|
|
93
|
+
replyToMessageId: replyToMessageId ?? dc.ctx.messageId,
|
|
94
|
+
accountId: dc.account.accountId,
|
|
95
|
+
replyInThread: dc.isThread,
|
|
96
|
+
});
|
|
97
|
+
delivered = true;
|
|
98
|
+
},
|
|
99
|
+
onSkip: (_payload, info) => {
|
|
100
|
+
if (info.reason !== 'silent') {
|
|
101
|
+
dc.log(`feishu[${dc.account.accountId}]: command reply skipped (reason=${info.reason})`);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
onError: (err, info) => {
|
|
105
|
+
dc.error(`feishu[${dc.account.accountId}]: command ${info.kind} reply failed: ${String(err)}`);
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
replyOptions: {},
|
|
109
|
+
});
|
|
110
|
+
dc.log(`feishu[${dc.account.accountId}]: system command dispatched (delivered=${delivered})`);
|
|
111
|
+
log.info(`system command dispatched (delivered=${delivered}, elapsed=${ticketElapsed()}ms)`);
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=dispatch-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch-commands.js","sourceRoot":"","sources":["../../../../src/messaging/inbound/dispatch-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Dispatch context construction for the inbound agent dispatch pipeline.
|
|
6
|
+
*
|
|
7
|
+
* Derives all shared values needed by downstream dispatch helpers:
|
|
8
|
+
* logging, addressing, route resolution, thread session, and system
|
|
9
|
+
* event emission.
|
|
10
|
+
*/
|
|
11
|
+
import type { ClawdbotConfig, RuntimeEnv } from 'openclaw/plugin-sdk';
|
|
12
|
+
import type { MessageContext } from '../types';
|
|
13
|
+
import type { LarkAccount } from '../../core/types';
|
|
14
|
+
import { LarkClient } from '../../core/lark-client';
|
|
15
|
+
export interface DispatchContext {
|
|
16
|
+
ctx: MessageContext;
|
|
17
|
+
/** account 级别的 ClawdbotConfig(channels.feishu 已替换为 per-account 合并后的配置) */
|
|
18
|
+
accountScopedCfg: ClawdbotConfig;
|
|
19
|
+
account: LarkAccount;
|
|
20
|
+
runtime: RuntimeEnv;
|
|
21
|
+
log: (...args: unknown[]) => void;
|
|
22
|
+
error: (...args: unknown[]) => void;
|
|
23
|
+
core: typeof LarkClient.runtime;
|
|
24
|
+
isGroup: boolean;
|
|
25
|
+
isThread: boolean;
|
|
26
|
+
feishuFrom: string;
|
|
27
|
+
feishuTo: string;
|
|
28
|
+
envelopeFrom: string;
|
|
29
|
+
envelopeOptions: ReturnType<typeof LarkClient.runtime.channel.reply.resolveEnvelopeFormatOptions>;
|
|
30
|
+
route: ReturnType<typeof LarkClient.runtime.channel.routing.resolveAgentRoute>;
|
|
31
|
+
threadSessionKey?: string;
|
|
32
|
+
commandAuthorized?: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Provide a safe RuntimeEnv fallback when the caller did not supply one.
|
|
36
|
+
* Replaces the previous unsafe `runtime as RuntimeEnv` casts.
|
|
37
|
+
*/
|
|
38
|
+
export declare function ensureRuntime(runtime: RuntimeEnv | undefined): RuntimeEnv;
|
|
39
|
+
/**
|
|
40
|
+
* Derive all shared values needed by downstream helpers:
|
|
41
|
+
* logging, addressing, route resolution, and system event emission.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildDispatchContext(params: {
|
|
44
|
+
ctx: MessageContext;
|
|
45
|
+
account: LarkAccount;
|
|
46
|
+
accountScopedCfg: ClawdbotConfig;
|
|
47
|
+
runtime?: RuntimeEnv;
|
|
48
|
+
commandAuthorized?: boolean;
|
|
49
|
+
}): DispatchContext;
|
|
50
|
+
/**
|
|
51
|
+
* Resolve thread session key for thread-capable groups.
|
|
52
|
+
*
|
|
53
|
+
* Returns a thread-scoped session key when ALL conditions are met:
|
|
54
|
+
* 1. `threadSession` config is enabled on the account
|
|
55
|
+
* 2. The group is a topic group (chat_mode=topic) or uses thread
|
|
56
|
+
* message mode (group_message_type=thread)
|
|
57
|
+
*
|
|
58
|
+
* The group info is fetched via `im.chat.get` with a 1-hour LRU cache
|
|
59
|
+
* to minimise OAPI calls.
|
|
60
|
+
*/
|
|
61
|
+
export declare function resolveThreadSessionKey(params: {
|
|
62
|
+
accountScopedCfg: ClawdbotConfig;
|
|
63
|
+
account: LarkAccount;
|
|
64
|
+
chatId: string;
|
|
65
|
+
threadId: string;
|
|
66
|
+
baseSessionKey: string;
|
|
67
|
+
}): Promise<string | undefined>;
|
|
68
|
+
//# sourceMappingURL=dispatch-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch-context.d.ts","sourceRoot":"","sources":["../../../../src/messaging/inbound/dispatch-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAUpD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,cAAc,CAAC;IACpB,0EAA0E;IAC1E,gBAAgB,EAAE,cAAc,CAAC;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,OAAO,UAAU,CAAC,OAAO,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClG,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAOzE;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,gBAAgB,EAAE,cAAc,CAAC;IACjC,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,eAAe,CAkElB;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,gBAAgB,EAAE,cAAc,CAAC;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuB9B"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Dispatch context construction for the inbound agent dispatch pipeline.
|
|
6
|
+
*
|
|
7
|
+
* Derives all shared values needed by downstream dispatch helpers:
|
|
8
|
+
* logging, addressing, route resolution, thread session, and system
|
|
9
|
+
* event emission.
|
|
10
|
+
*/
|
|
11
|
+
import { resolveThreadSessionKeys } from 'openclaw/plugin-sdk';
|
|
12
|
+
import { LarkClient } from '../../core/lark-client';
|
|
13
|
+
import { larkLogger } from '../../core/lark-logger';
|
|
14
|
+
import { isThreadCapableGroup } from '../../core/chat-info-cache';
|
|
15
|
+
const log = larkLogger('inbound/dispatch-context');
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// RuntimeEnv fallback
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
/**
|
|
20
|
+
* Provide a safe RuntimeEnv fallback when the caller did not supply one.
|
|
21
|
+
* Replaces the previous unsafe `runtime as RuntimeEnv` casts.
|
|
22
|
+
*/
|
|
23
|
+
export function ensureRuntime(runtime) {
|
|
24
|
+
if (runtime)
|
|
25
|
+
return runtime;
|
|
26
|
+
return {
|
|
27
|
+
log: (...args) => log.info(args.map(String).join(' ')),
|
|
28
|
+
error: (...args) => log.error(args.map(String).join(' ')),
|
|
29
|
+
exit: (code) => process.exit(code),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Context construction
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
/**
|
|
36
|
+
* Derive all shared values needed by downstream helpers:
|
|
37
|
+
* logging, addressing, route resolution, and system event emission.
|
|
38
|
+
*/
|
|
39
|
+
export function buildDispatchContext(params) {
|
|
40
|
+
const { ctx, account, accountScopedCfg } = params;
|
|
41
|
+
const runtime = ensureRuntime(params.runtime);
|
|
42
|
+
const log = runtime.log;
|
|
43
|
+
const error = runtime.error;
|
|
44
|
+
const isGroup = ctx.chatType === 'group';
|
|
45
|
+
const isThread = isGroup && Boolean(ctx.threadId);
|
|
46
|
+
const core = LarkClient.runtime;
|
|
47
|
+
const feishuFrom = `feishu:${ctx.senderId}`;
|
|
48
|
+
const feishuTo = isGroup ? `chat:${ctx.chatId}` : `user:${ctx.senderId}`;
|
|
49
|
+
const envelopeFrom = isGroup ? `${ctx.chatId}:${ctx.senderId}` : ctx.senderId;
|
|
50
|
+
const envelopeOptions = core.channel.reply.resolveEnvelopeFormatOptions(accountScopedCfg);
|
|
51
|
+
// ---- Route resolution ----
|
|
52
|
+
const route = core.channel.routing.resolveAgentRoute({
|
|
53
|
+
cfg: accountScopedCfg,
|
|
54
|
+
channel: 'feishu',
|
|
55
|
+
accountId: account.accountId,
|
|
56
|
+
peer: {
|
|
57
|
+
kind: isGroup ? 'group' : 'direct',
|
|
58
|
+
id: isGroup ? ctx.chatId : ctx.senderId,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
// ---- System event ----
|
|
62
|
+
const sender = ctx.senderName ? `${ctx.senderName} (${ctx.senderId})` : ctx.senderId;
|
|
63
|
+
const location = isGroup ? `group ${ctx.chatId}` : 'DM';
|
|
64
|
+
const tags = [];
|
|
65
|
+
tags.push(`msg:${ctx.messageId}`);
|
|
66
|
+
if (ctx.parentId)
|
|
67
|
+
tags.push(`reply_to:${ctx.parentId}`);
|
|
68
|
+
if (ctx.contentType !== 'text')
|
|
69
|
+
tags.push(ctx.contentType);
|
|
70
|
+
if (ctx.mentions.some((m) => m.isBot))
|
|
71
|
+
tags.push('@bot');
|
|
72
|
+
if (ctx.threadId)
|
|
73
|
+
tags.push(`thread:${ctx.threadId}`);
|
|
74
|
+
if (ctx.resources.length > 0) {
|
|
75
|
+
tags.push(`${ctx.resources.length} attachment(s)`);
|
|
76
|
+
}
|
|
77
|
+
const tagStr = tags.length > 0 ? ` [${tags.join(', ')}]` : '';
|
|
78
|
+
core.system.enqueueSystemEvent(`Feishu[${account.accountId}] ${location} | ${sender}${tagStr}`, {
|
|
79
|
+
sessionKey: route.sessionKey,
|
|
80
|
+
contextKey: `feishu:message:${ctx.chatId}:${ctx.messageId}`,
|
|
81
|
+
});
|
|
82
|
+
return {
|
|
83
|
+
ctx,
|
|
84
|
+
accountScopedCfg,
|
|
85
|
+
account,
|
|
86
|
+
runtime,
|
|
87
|
+
log,
|
|
88
|
+
error,
|
|
89
|
+
core,
|
|
90
|
+
isGroup,
|
|
91
|
+
isThread,
|
|
92
|
+
feishuFrom,
|
|
93
|
+
feishuTo,
|
|
94
|
+
envelopeFrom,
|
|
95
|
+
envelopeOptions,
|
|
96
|
+
route,
|
|
97
|
+
threadSessionKey: undefined,
|
|
98
|
+
commandAuthorized: params.commandAuthorized,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
// Thread session resolution
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
/**
|
|
105
|
+
* Resolve thread session key for thread-capable groups.
|
|
106
|
+
*
|
|
107
|
+
* Returns a thread-scoped session key when ALL conditions are met:
|
|
108
|
+
* 1. `threadSession` config is enabled on the account
|
|
109
|
+
* 2. The group is a topic group (chat_mode=topic) or uses thread
|
|
110
|
+
* message mode (group_message_type=thread)
|
|
111
|
+
*
|
|
112
|
+
* The group info is fetched via `im.chat.get` with a 1-hour LRU cache
|
|
113
|
+
* to minimise OAPI calls.
|
|
114
|
+
*/
|
|
115
|
+
export async function resolveThreadSessionKey(params) {
|
|
116
|
+
const { accountScopedCfg, account, chatId, threadId, baseSessionKey } = params;
|
|
117
|
+
if (account.config?.threadSession !== true)
|
|
118
|
+
return undefined;
|
|
119
|
+
const threadCapable = await isThreadCapableGroup({
|
|
120
|
+
cfg: accountScopedCfg,
|
|
121
|
+
chatId,
|
|
122
|
+
accountId: account.accountId,
|
|
123
|
+
});
|
|
124
|
+
if (!threadCapable) {
|
|
125
|
+
log.info(`thread session skipped: group ${chatId} is not topic/thread mode`);
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
// 使用 SDK 标准函数,保证分隔符格式与 resolveThreadParentSessionKey 兼容
|
|
129
|
+
const { sessionKey } = resolveThreadSessionKeys({
|
|
130
|
+
baseSessionKey,
|
|
131
|
+
threadId,
|
|
132
|
+
parentSessionKey: baseSessionKey,
|
|
133
|
+
normalizeThreadId: (id) => id, // 飞书 thread ID (omt_xxx) 区分大小写,不做 lowercase
|
|
134
|
+
});
|
|
135
|
+
return sessionKey;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=dispatch-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch-context.js","sourceRoot":"","sources":["../../../../src/messaging/inbound/dispatch-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,GAAG,GAAG,UAAU,CAAC,0BAA0B,CAAC,CAAC;AA0BnD,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAA+B;IAC3D,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,OAAO;QACL,GAAG,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjE,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAU;KACpD,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAMpC;IACC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAElD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;IAEhC,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC;IAEzE,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;IAE9E,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,gBAAgB,CAAC,CAAC;IAE1F,6BAA6B;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACnD,GAAG,EAAE,gBAAgB;QACrB,OAAO,EAAE,QAAQ;QACjB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;YAClC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ;SACxC;KACF,CAAC,CAAC;IAEH,yBAAyB;IACzB,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrF,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAExD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IAClC,IAAI,GAAG,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxD,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3D,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,GAAG,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,gBAAgB,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,UAAU,OAAO,CAAC,SAAS,KAAK,QAAQ,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE;QAC9F,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,kBAAkB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE;KAC5D,CAAC,CAAC;IAEH,OAAO;QACL,GAAG;QACH,gBAAgB;QAChB,OAAO;QACP,OAAO;QACP,GAAG;QACH,KAAK;QACL,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,YAAY;QACZ,eAAe;QACf,KAAK;QACL,gBAAgB,EAAE,SAAS;QAC3B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;KAC5C,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAM7C;IACC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAE/E,IAAI,OAAO,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAE7D,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC;QAC/C,GAAG,EAAE,gBAAgB;QACrB,MAAM;QACN,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IACH,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,GAAG,CAAC,IAAI,CAAC,iCAAiC,MAAM,2BAA2B,CAAC,CAAC;QAC7E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,wDAAwD;IACxD,MAAM,EAAE,UAAU,EAAE,GAAG,wBAAwB,CAAC;QAC9C,cAAc;QACd,QAAQ;QACR,gBAAgB,EAAE,cAAc;QAChC,iBAAiB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,4CAA4C;KAC5E,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC"}
|