@openclaw/slack 2026.9.6 → 2026.9.7
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/assets/icon.png +0 -0
- package/dist/.setup/{account-inspect-DP1Bcwj4.mjs → account-inspect-DWBXpER6.mjs} +1 -1
- package/dist/.setup/{accounts-BBHvg0pY.mjs → accounts-D_N9IqNA.mjs} +23 -1
- package/dist/.setup/{action-runtime-B01d85zt.mjs → action-runtime-DfWvuiZd.mjs} +26 -41
- package/dist/.setup/action-runtime.runtime-Ck4bAWOX.mjs +2 -0
- package/dist/.setup/{actions-DKCtBgCI.mjs → actions-Df0CzcDl.mjs} +88 -175
- package/dist/.setup/{approval-handler.runtime-DMszKn_7.mjs → approval-handler.runtime-Ed6Sw5VK.mjs} +37 -47
- package/dist/.setup/{approval-message-updates-Tb_qRokK.mjs → approval-message-updates-BadvtA7R.mjs} +1 -2
- package/dist/.setup/{channel-CErYZ5zw.mjs → channel-C7bgPSTE.mjs} +181 -273
- package/dist/.setup/channel-meta-C443t-lI.mjs +27 -0
- package/dist/.setup/{channel-type-Dxk8VJUb.mjs → channel-type-ClOttrZ5.mjs} +13 -21
- package/dist/.setup/{channel.setup-BVoUtdPn.mjs → channel.setup-Dh2jzAjN.mjs} +35 -42
- package/dist/.setup/{config-schema-CyL279e7.mjs → config-schema-BZCxmHKG.mjs} +24 -21
- package/dist/.setup/{directory-config-CQTSH45W.mjs → directory-config-BOUWH3hR.mjs} +7 -10
- package/dist/.setup/{directory-live-BCcj89QV.mjs → directory-live-B2O4B_Ho.mjs} +9 -21
- package/dist/.setup/doctor-contract-CRN1Z_c7.mjs +342 -0
- package/dist/.setup/{message-tool-api-C0PTFaNV.mjs → message-tool-api-Cu4lwlGy.mjs} +34 -48
- package/dist/.setup/{provider-C-jPaGt2.mjs → monitor-BPVfkumU.mjs} +2181 -2693
- package/dist/.setup/{outbound-adapter-A7Wdn8ZT.mjs → outbound-adapter-Bv48XUjq.mjs} +10 -21
- package/dist/.setup/{pipeline.runtime-BlPOexmJ.mjs → pipeline.runtime-B1H63Frf.mjs} +311 -457
- package/dist/.setup/{plugin-routes-C3X0eVaK.mjs → plugin-routes-B8tooDLj.mjs} +1 -1
- package/dist/.setup/{policy-BApW53pI.mjs → policy-D-jfM174.mjs} +5 -5
- package/dist/.setup/{probe-DiYIMPJo.mjs → probe-B2Y9qc_z.mjs} +101 -39
- package/dist/.setup/{registry-bbjH7IHX.mjs → registry-CIbMfuf8.mjs} +6 -2
- package/dist/.setup/{relay-source-DfOnjJTE.mjs → relay-source-BpKdjsll.mjs} +10 -12
- package/dist/.setup/{replies-BBAJxUOQ.mjs → replies-BAnUtr2f.mjs} +16 -76
- package/dist/.setup/{reply-blocks-Bm8kf6mK.mjs → reply-blocks-SE1kTE3I.mjs} +27 -154
- package/dist/.setup/{resolve-channels-BXbMBbJD.mjs → resolve-channels-XXBn8UU_.mjs} +4 -5
- package/dist/.setup/{resolve-users-65WqvIqD.mjs → resolve-users-DW0ngD03.mjs} +20 -22
- package/dist/.setup/{scopes-h3YB-mMs.mjs → scopes-CasuDvaa.mjs} +6 -17
- package/dist/.setup/{secret-contract-DxmvbxBF.mjs → secret-contract-BaZcu6P_.mjs} +15 -20
- package/dist/.setup/{secret-contract-api-D9UfYujm.mjs → secret-contract-api-Dp6290Vg.mjs} +1 -1
- package/dist/.setup/{security-audit-BypHqcq5.mjs → security-audit-BqDc-6VL.mjs} +1 -1
- package/dist/.setup/{send-Cp6omkOg.mjs → send-BOVLQi3n.mjs} +84 -171
- package/dist/.setup/{session-status-Cf7AvWOt.mjs → session-status-DscajIsd.mjs} +315 -238
- package/dist/.setup/{setup-plugin-api-dLPkL06L.mjs → setup-plugin-api-DTtbTKNk.mjs} +1 -1
- package/dist/.setup/{setup-surface-D3DLcCxu.mjs → setup-surface-Dn7QgWRE.mjs} +24 -56
- package/dist/.setup/{shared-CJ3arAFL.mjs → shared-qau-uDGl.mjs} +30 -56
- package/dist/.setup/{slash-dispatch.runtime-HFy_XvyO.mjs → slash-dispatch.runtime--AEzLVBF.mjs} +1 -1
- package/dist/.setup/{streaming-compat-B-e0mqM0.mjs → streaming-compat-C5Wut626.mjs} +31 -8
- package/dist/.setup/{target-parsing-DEsPjngB.mjs → target-parsing-FFE26kOV.mjs} +1 -7
- package/dist/.setup/{targets-Cku2KCvg.mjs → targets-C6LZQL1Q.mjs} +1 -1
- package/dist/.setup/{thread-ts-CukseRVL.mjs → thread-ts-Cvt7WD6B.mjs} +0 -1
- package/dist/account-inspect-api.js +1 -1
- package/dist/api.js +18 -17
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/directory-contract-api.js +1 -1
- package/dist/doctor-contract-api.js +1 -1
- package/dist/http-routes-api.js +1 -1
- package/dist/index.js +1 -1
- package/dist/message-tool-api.js +1 -1
- package/dist/runtime-api.js +11 -12
- package/dist/secret-contract-api.js +1 -1
- package/dist/security-contract-api.js +1 -1
- package/dist/setup-entry.js +2 -2
- package/dist/setup-plugin-api.js +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/child_process.d.ts +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/crypto.d.ts +20 -8
- package/node_modules/@slack/bolt/node_modules/@types/node/ffi.d.ts +14 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/http2.d.ts +3 -2
- package/node_modules/@slack/bolt/node_modules/@types/node/net.d.ts +16 -4
- package/node_modules/@slack/bolt/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/bolt/node_modules/@types/node/process.d.ts +1 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/quic.d.ts +39 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/stream/iter.d.ts +9 -12
- package/node_modules/@slack/bolt/node_modules/@types/node/test/reporters.d.ts +1 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/test.d.ts +72 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/tls.d.ts +14 -10
- package/node_modules/@slack/bolt/node_modules/@types/node/vm.d.ts +2 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/worker_threads.d.ts +4 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/child_process.d.ts +1 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/crypto.d.ts +20 -8
- package/node_modules/@slack/web-api/node_modules/@types/node/ffi.d.ts +14 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/http2.d.ts +3 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/net.d.ts +16 -4
- package/node_modules/@slack/web-api/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/process.d.ts +1 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/quic.d.ts +39 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/stream/iter.d.ts +9 -12
- package/node_modules/@slack/web-api/node_modules/@types/node/test/reporters.d.ts +1 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/test.d.ts +72 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/tls.d.ts +14 -10
- package/node_modules/@slack/web-api/node_modules/@types/node/vm.d.ts +2 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/worker_threads.d.ts +4 -1
- package/node_modules/get-east-asian-width/index.js +8 -3
- package/node_modules/get-east-asian-width/lookup-data.js +1 -1
- package/node_modules/get-east-asian-width/lookup.js +4 -4
- package/node_modules/get-east-asian-width/package.json +1 -1
- package/node_modules/typebox/build/compile/code.mjs +1 -2
- package/node_modules/typebox/build/compile/validator.mjs +5 -1
- package/node_modules/typebox/build/format/iri.mjs +16 -9
- package/node_modules/typebox/build/guard/emit.mjs +2 -2
- package/node_modules/typebox/build/guard/guard.d.mts +7 -5
- package/node_modules/typebox/build/guard/guard.mjs +14 -9
- package/node_modules/typebox/build/guard/index.mjs +6 -0
- package/node_modules/typebox/build/guard/unicode/unicode.d.mts +6 -0
- package/node_modules/typebox/build/guard/unicode/unicode.mjs +35 -0
- package/node_modules/typebox/build/guard/{string.mjs → unicode/unicode_segment.mjs} +16 -19
- package/node_modules/typebox/build/schema/build.mjs +2 -3
- package/node_modules/typebox/build/schema/engine/_pathing.d.mts +1 -0
- package/node_modules/typebox/build/schema/engine/_pathing.mjs +11 -0
- package/node_modules/typebox/build/schema/engine/_refine.mjs +13 -5
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dependencies.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dependentSchemas.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/format.mjs +9 -2
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/properties.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/ref.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/ref.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/schema.mjs +24 -24
- package/node_modules/typebox/build/schema/parse.mjs +3 -0
- package/node_modules/typebox/build/schema/pointer/pointer.d.mts +1 -6
- package/node_modules/typebox/build/schema/pointer/pointer.mjs +47 -64
- package/node_modules/typebox/build/system/settings/internal.d.mts +2 -0
- package/node_modules/typebox/build/system/settings/internal.mjs +20 -0
- package/node_modules/typebox/build/system/settings/settings.d.mts +11 -0
- package/node_modules/typebox/build/system/settings/settings.mjs +14 -0
- package/node_modules/typebox/build/type/extends/inference.d.mts +1 -1
- package/node_modules/typebox/build/type/extends/inference.mjs +15 -2
- package/node_modules/typebox/build/type/extends/tuple.d.mts +2 -1
- package/node_modules/typebox/build/type/extends/tuple.mjs +21 -1
- package/node_modules/typebox/build/value/parse/parse.mjs +10 -4
- package/node_modules/typebox/package.json +1 -1
- package/node_modules/typebox/readme.md +3 -1
- package/node_modules/undici/README.md +81 -25
- package/node_modules/undici/docs/docs/api/Agent.md +249 -42
- package/node_modules/undici/docs/docs/api/BalancedPool.md +246 -48
- package/node_modules/undici/docs/docs/api/CacheStorage.md +171 -13
- package/node_modules/undici/docs/docs/api/CacheStore.md +294 -98
- package/node_modules/undici/docs/docs/api/Client.md +407 -162
- package/node_modules/undici/docs/docs/api/ClientStats.md +80 -14
- package/node_modules/undici/docs/docs/api/Connector.md +118 -35
- package/node_modules/undici/docs/docs/api/ContentType.md +65 -25
- package/node_modules/undici/docs/docs/api/Cookies.md +122 -71
- package/node_modules/undici/docs/docs/api/Debug.md +34 -18
- package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +364 -164
- package/node_modules/undici/docs/docs/api/Dispatcher.md +490 -1055
- package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +105 -93
- package/node_modules/undici/docs/docs/api/Errors.md +503 -28
- package/node_modules/undici/docs/docs/api/EventSource.md +326 -13
- package/node_modules/undici/docs/docs/api/Fetch.md +681 -30
- package/node_modules/undici/docs/docs/api/GlobalInstallation.md +78 -96
- package/node_modules/undici/docs/docs/api/H2CClient.md +298 -176
- package/node_modules/undici/docs/docs/api/Interceptors.md +418 -0
- package/node_modules/undici/docs/docs/api/MockAgent.md +333 -314
- package/node_modules/undici/docs/docs/api/MockCallHistory.md +272 -98
- package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +189 -26
- package/node_modules/undici/docs/docs/api/MockClient.md +151 -33
- package/node_modules/undici/docs/docs/api/MockErrors.md +56 -5
- package/node_modules/undici/docs/docs/api/MockPool.md +321 -258
- package/node_modules/undici/docs/docs/api/Pool.md +236 -41
- package/node_modules/undici/docs/docs/api/PoolStats.md +119 -13
- package/node_modules/undici/docs/docs/api/ProxyAgent.md +179 -160
- package/node_modules/undici/docs/docs/api/RedirectHandler.md +238 -55
- package/node_modules/undici/docs/docs/api/RetryAgent.md +113 -27
- package/node_modules/undici/docs/docs/api/RetryHandler.md +161 -79
- package/node_modules/undici/docs/docs/api/RoundRobinPool.md +166 -72
- package/node_modules/undici/docs/docs/api/SnapshotAgent.md +262 -517
- package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +177 -196
- package/node_modules/undici/docs/docs/api/Util.md +68 -11
- package/node_modules/undici/docs/docs/api/WebSocket.md +475 -80
- package/node_modules/undici/docs/docs/api/api-lifecycle.md +100 -32
- package/node_modules/undici/docs/docs/best-practices/client-certificate.md +2 -0
- package/node_modules/undici/docs/docs/best-practices/crawling.md +3 -1
- package/node_modules/undici/docs/docs/best-practices/migrating-from-v7-to-v8.md +233 -0
- package/node_modules/undici/docs/docs/best-practices/mocking-request.md +9 -7
- package/node_modules/undici/docs/docs/best-practices/proxy.md +3 -1
- package/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +10 -8
- package/node_modules/undici/docs/docs/best-practices/writing-tests.md +2 -0
- package/node_modules/undici/docs/docs/getting-started.md +281 -0
- package/node_modules/undici/docs/docs/index.md +784 -0
- package/node_modules/undici/docs/docs/site.json +125 -0
- package/node_modules/undici/docs/docs/type-map.json +79 -0
- package/node_modules/undici/index.js +4 -2
- package/node_modules/undici/lib/api/api-connect.js +13 -11
- package/node_modules/undici/lib/api/api-pipeline.js +26 -13
- package/node_modules/undici/lib/api/api-request.js +51 -21
- package/node_modules/undici/lib/api/api-stream.js +81 -20
- package/node_modules/undici/lib/api/api-upgrade.js +21 -11
- package/node_modules/undici/lib/api/readable.js +45 -9
- package/node_modules/undici/lib/cache/memory-cache-store.js +3 -3
- package/node_modules/undici/lib/cache/sqlite-cache-store.js +3 -1
- package/node_modules/undici/lib/core/connect.js +46 -7
- package/node_modules/undici/lib/core/constants.js +1 -24
- package/node_modules/undici/lib/core/errors.js +22 -2
- package/node_modules/undici/lib/core/request.js +100 -18
- package/node_modules/undici/lib/core/symbols.js +4 -0
- package/node_modules/undici/lib/core/util.js +105 -48
- package/node_modules/undici/lib/dispatcher/agent.js +51 -32
- package/node_modules/undici/lib/dispatcher/balanced-pool.js +23 -27
- package/node_modules/undici/lib/dispatcher/client-h1.js +86 -24
- package/node_modules/undici/lib/dispatcher/client-h2.js +1091 -361
- package/node_modules/undici/lib/dispatcher/client.js +109 -36
- package/node_modules/undici/lib/dispatcher/dispatcher-base.js +19 -6
- package/node_modules/undici/lib/dispatcher/dispatcher.js +15 -5
- package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +110 -0
- package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +37 -8
- package/node_modules/undici/lib/dispatcher/h2c-client.js +4 -4
- package/node_modules/undici/lib/dispatcher/pool-base.js +28 -10
- package/node_modules/undici/lib/dispatcher/pool.js +30 -5
- package/node_modules/undici/lib/dispatcher/proxy-agent.js +95 -19
- package/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
- package/node_modules/undici/lib/dispatcher/round-robin-pool.js +32 -10
- package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +153 -63
- package/node_modules/undici/lib/global.js +37 -14
- package/node_modules/undici/lib/handler/cache-handler.js +49 -7
- package/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
- package/node_modules/undici/lib/handler/decorator-handler.js +8 -3
- package/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
- package/node_modules/undici/lib/handler/redirect-handler.js +66 -66
- package/node_modules/undici/lib/handler/retry-handler.js +191 -50
- package/node_modules/undici/lib/interceptor/cache.js +75 -25
- package/node_modules/undici/lib/interceptor/decompress.js +5 -2
- package/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
- package/node_modules/undici/lib/interceptor/dns.js +12 -1
- package/node_modules/undici/lib/interceptor/redirect.js +3 -3
- package/node_modules/undici/lib/llhttp/llhttp-wasm.js +1 -1
- package/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +1 -1
- package/node_modules/undici/lib/mock/mock-agent.js +21 -9
- package/node_modules/undici/lib/mock/mock-call-history.js +1 -1
- package/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
- package/node_modules/undici/lib/mock/mock-utils.js +281 -47
- package/node_modules/undici/lib/mock/snapshot-agent.js +25 -7
- package/node_modules/undici/lib/mock/snapshot-recorder.js +38 -3
- package/node_modules/undici/lib/util/cache.js +92 -10
- package/node_modules/undici/lib/util/runtime-features.js +3 -34
- package/node_modules/undici/lib/web/cache/cache.js +6 -8
- package/node_modules/undici/lib/web/cookies/parse.js +150 -146
- package/node_modules/undici/lib/web/cookies/util.js +1 -1
- package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
- package/node_modules/undici/lib/web/eventsource/eventsource.js +20 -21
- package/node_modules/undici/lib/web/eventsource/util.js +32 -1
- package/node_modules/undici/lib/web/fetch/body.js +48 -10
- package/node_modules/undici/lib/web/fetch/constants.js +1 -1
- package/node_modules/undici/lib/web/fetch/formdata.js +21 -2
- package/node_modules/undici/lib/web/fetch/index.js +242 -223
- package/node_modules/undici/lib/web/fetch/request.js +35 -6
- package/node_modules/undici/lib/web/fetch/response.js +1 -3
- package/node_modules/undici/lib/web/fetch/util.js +10 -2
- package/node_modules/undici/lib/web/webidl/index.js +5 -7
- package/node_modules/undici/lib/web/websocket/frame.js +1 -7
- package/node_modules/undici/lib/web/websocket/receiver.js +1 -1
- package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +10 -10
- package/node_modules/undici/lib/web/websocket/websocket.js +25 -3
- package/node_modules/undici/package.json +10 -10
- package/node_modules/undici/types/agent.d.ts +0 -2
- package/node_modules/undici/types/client.d.ts +69 -24
- package/node_modules/undici/types/connector.d.ts +1 -0
- package/node_modules/undici/types/cookies.d.ts +1 -1
- package/node_modules/undici/types/dispatcher.d.ts +8 -30
- package/node_modules/undici/types/dispatcher1-wrapper.d.ts +7 -0
- package/node_modules/undici/types/errors.d.ts +10 -0
- package/node_modules/undici/types/fetch.d.ts +5 -1
- package/node_modules/undici/types/formdata.d.ts +0 -6
- package/node_modules/undici/types/h2c-client.d.ts +6 -6
- package/node_modules/undici/types/handlers.d.ts +2 -0
- package/node_modules/undici/types/header.d.ts +5 -0
- package/node_modules/undici/types/index.d.ts +3 -1
- package/node_modules/undici/types/interceptors.d.ts +1 -1
- package/node_modules/undici/types/mock-agent.d.ts +11 -10
- package/node_modules/undici/types/mock-interceptor.d.ts +5 -1
- package/node_modules/undici/types/pool.d.ts +0 -2
- package/node_modules/undici/types/proxy-agent.d.ts +9 -2
- package/node_modules/undici/types/round-robin-pool.d.ts +0 -2
- package/node_modules/undici/types/snapshot-agent.d.ts +4 -0
- package/node_modules/undici/types/socks5-proxy-agent.d.ts +4 -2
- package/node_modules/undici/types/webidl.d.ts +0 -1
- package/openclaw.plugin.json +31 -3
- package/package.json +7 -7
- package/dist/.setup/accounts.runtime-DN-PPocC.mjs +0 -2
- package/dist/.setup/action-runtime.runtime-C8R8CUan.mjs +0 -2
- package/dist/.setup/doctor-contract-CtMUqjvk.mjs +0 -186
- package/dist/.setup/monitor-_Sht7Dqy.mjs +0 -13
- package/dist/.setup/rolldown-runtime-D7D4PA-g.mjs +0 -13
- package/dist/.setup/send.runtime-B4caZU6T.mjs +0 -2
- package/dist/.setup/slash-commands.runtime-BpSH0b3q.mjs +0 -2
- package/dist/.setup/slash-skill-commands.runtime-Bi1JWZHY.mjs +0 -2
- package/node_modules/undici/lib/handler/unwrap-handler.js +0 -106
- package/node_modules/undici/lib/handler/wrap-handler.js +0 -105
- package/node_modules/undici/lib/llhttp/.gitkeep +0 -0
- package/node_modules/undici/lib/util/promise.js +0 -28
- /package/node_modules/typebox/build/guard/{string.d.mts → unicode/unicode_segment.d.mts} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region extensions/slack/src/channel-meta.ts
|
|
2
|
+
const SLACK_CHANNEL_META = {
|
|
3
|
+
id: "slack",
|
|
4
|
+
label: "Slack",
|
|
5
|
+
selectionLabel: "Slack",
|
|
6
|
+
docsPath: "/channels/slack",
|
|
7
|
+
docsLabel: "slack",
|
|
8
|
+
blurb: "supports bot + app tokens, channels, threads, and interactive replies.",
|
|
9
|
+
systemImage: "number.square",
|
|
10
|
+
markdownCapable: true
|
|
11
|
+
};
|
|
12
|
+
const DEFAULT_SLACK_SUGGESTED_PROMPTS = [
|
|
13
|
+
{
|
|
14
|
+
title: "What can you do?",
|
|
15
|
+
message: "What can you help me with?"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
title: "Summarize this channel",
|
|
19
|
+
message: "Summarize the recent activity in this channel."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
title: "Draft a reply",
|
|
23
|
+
message: "Help me draft a reply."
|
|
24
|
+
}
|
|
25
|
+
];
|
|
26
|
+
//#endregion
|
|
27
|
+
export { SLACK_CHANNEL_META as n, DEFAULT_SLACK_SUGGESTED_PROMPTS as t };
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { f as assertSlackDetachedTargetAllowed } from "./session-status-
|
|
4
|
-
import {
|
|
1
|
+
import { r as __exportAll } from "./streaming-compat-C5Wut626.mjs";
|
|
2
|
+
import { d as resolveSlackOperationToken, s as resolveSlackAccount } from "./accounts-D_N9IqNA.mjs";
|
|
3
|
+
import { f as assertSlackDetachedTargetAllowed } from "./session-status-DscajIsd.mjs";
|
|
4
|
+
import { d as createSlackReadClient, m as createSlackWebClient, v as readLruMapEntry } from "./probe-B2Y9qc_z.mjs";
|
|
5
5
|
import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
|
-
import {
|
|
6
|
+
import { normalizeStringEntriesLower } from "openclaw/plugin-sdk/string-normalization-runtime";
|
|
7
7
|
import { pruneMapToMaxSize } from "openclaw/plugin-sdk/collection-runtime";
|
|
8
|
+
import { createHash } from "node:crypto";
|
|
8
9
|
//#region extensions/slack/src/channel-type.ts
|
|
9
10
|
var channel_type_exports = /* @__PURE__ */ __exportAll({
|
|
10
11
|
resolveSlackChannelType: () => resolveSlackChannelType,
|
|
@@ -12,14 +13,6 @@ var channel_type_exports = /* @__PURE__ */ __exportAll({
|
|
|
12
13
|
});
|
|
13
14
|
const SLACK_CONVERSATION_INFO_CACHE_MAX_ENTRIES = 1024;
|
|
14
15
|
const SLACK_CONVERSATION_INFO_CACHE = /* @__PURE__ */ new Map();
|
|
15
|
-
function getCachedSlackConversationInfo(cacheKey) {
|
|
16
|
-
const cached = SLACK_CONVERSATION_INFO_CACHE.get(cacheKey);
|
|
17
|
-
if (cached) {
|
|
18
|
-
SLACK_CONVERSATION_INFO_CACHE.delete(cacheKey);
|
|
19
|
-
SLACK_CONVERSATION_INFO_CACHE.set(cacheKey, cached);
|
|
20
|
-
}
|
|
21
|
-
return cached;
|
|
22
|
-
}
|
|
23
16
|
function setCachedSlackConversationInfo(cacheKey, conversationInfo) {
|
|
24
17
|
SLACK_CONVERSATION_INFO_CACHE.delete(cacheKey);
|
|
25
18
|
SLACK_CONVERSATION_INFO_CACHE.set(cacheKey, conversationInfo);
|
|
@@ -31,7 +24,7 @@ function fingerprintSlackCredential(token) {
|
|
|
31
24
|
function resolveConfiguredSlackConversationInfo(params) {
|
|
32
25
|
if (/^D/i.test(params.channelId)) return { type: "dm" };
|
|
33
26
|
const channelIdLower = normalizeLowercaseStringOrEmpty(params.channelId);
|
|
34
|
-
const groupChannels =
|
|
27
|
+
const groupChannels = normalizeStringEntriesLower(params.account.dm?.groupChannels);
|
|
35
28
|
if (groupChannels.includes(channelIdLower) || groupChannels.includes(`slack:${channelIdLower}`) || groupChannels.includes(`channel:${channelIdLower}`) || groupChannels.includes(`group:${channelIdLower}`) || groupChannels.includes(`mpim:${channelIdLower}`)) return { type: "group" };
|
|
36
29
|
return { type: Object.keys(params.account.channels ?? {}).some((key) => {
|
|
37
30
|
const normalized = normalizeLowercaseStringOrEmpty(key);
|
|
@@ -54,7 +47,7 @@ async function resolveSlackConversationInfo(params) {
|
|
|
54
47
|
const teamId = normalizeLowercaseStringOrEmpty(params.teamId) || "no-team-id";
|
|
55
48
|
const cacheKey = `${account.accountId}:${teamId}:${operation}:${credentialRole}:${credentialFingerprint}:${channelId}`;
|
|
56
49
|
if (!params.requireFreshName) {
|
|
57
|
-
const cached =
|
|
50
|
+
const cached = readLruMapEntry(SLACK_CONVERSATION_INFO_CACHE, cacheKey);
|
|
58
51
|
if (cached) return cached;
|
|
59
52
|
}
|
|
60
53
|
const isNativeImChannel = /^D/i.test(channelId);
|
|
@@ -64,12 +57,12 @@ async function resolveSlackConversationInfo(params) {
|
|
|
64
57
|
});
|
|
65
58
|
if (token) try {
|
|
66
59
|
if (isNativeImChannel && operation === "write") {
|
|
67
|
-
const opened = await
|
|
60
|
+
const opened = await createSlackWebClient(token, { teamId: params.teamId }, params.assertDirectAdapterHandoff).conversations.open({
|
|
68
61
|
channel: channelId,
|
|
69
62
|
prevent_creation: true,
|
|
70
63
|
return_im: true
|
|
71
64
|
});
|
|
72
|
-
const user =
|
|
65
|
+
const user = normalizeOptionalString(opened.channel?.user);
|
|
73
66
|
const result = user ? {
|
|
74
67
|
type: "dm",
|
|
75
68
|
user
|
|
@@ -77,7 +70,7 @@ async function resolveSlackConversationInfo(params) {
|
|
|
77
70
|
if (user) setCachedSlackConversationInfo(cacheKey, result);
|
|
78
71
|
return result;
|
|
79
72
|
}
|
|
80
|
-
const channel = (await
|
|
73
|
+
const channel = (await createSlackReadClient(token, { teamId: params.teamId }, void 0, params.assertDirectAdapterHandoff).conversations.info({ channel: channelId })).channel;
|
|
81
74
|
const type = channel?.is_im ? "dm" : channel?.is_mpim ? "group" : "channel";
|
|
82
75
|
const name = normalizeOptionalString(channel?.name);
|
|
83
76
|
const user = normalizeOptionalString(channel?.user);
|
|
@@ -95,9 +88,8 @@ async function resolveSlackConversationInfo(params) {
|
|
|
95
88
|
params.assertDirectAdapterHandoff?.();
|
|
96
89
|
return { type: isNativeImChannel ? "dm" : "unknown" };
|
|
97
90
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return result;
|
|
91
|
+
if (!isNativeImChannel) setCachedSlackConversationInfo(cacheKey, configuredInfo);
|
|
92
|
+
return configuredInfo;
|
|
101
93
|
}
|
|
102
94
|
async function resolveSlackChannelType(params) {
|
|
103
95
|
return (await resolveSlackConversationInfo(params)).type;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { r as isSlackSetupAccountConfigured } from "./account-configured-sUohAxZr.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { t as inspectSlackAccount } from "./account-inspect-
|
|
4
|
-
import { t as
|
|
2
|
+
import { i as listSlackAccountIds, o as resolveDefaultSlackAccountId, s as resolveSlackAccount, u as resolveSlackConfigAccessorAccount } from "./accounts-D_N9IqNA.mjs";
|
|
3
|
+
import { t as inspectSlackAccount } from "./account-inspect-DWBXpER6.mjs";
|
|
4
|
+
import { t as DEFAULT_SLACK_SUGGESTED_PROMPTS } from "./channel-meta-C443t-lI.mjs";
|
|
5
|
+
import { t as SlackChannelConfigSchema } from "./config-schema-BZCxmHKG.mjs";
|
|
5
6
|
import { normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
6
7
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
7
8
|
import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
|
|
@@ -14,6 +15,30 @@ import { formatDocsLink } from "openclaw/plugin-sdk/setup-tools";
|
|
|
14
15
|
import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
|
|
15
16
|
//#region extensions/slack/src/setup-shared.ts
|
|
16
17
|
const SLACK_CHANNEL = "slack";
|
|
18
|
+
function buildSlackAllowFromPrompt() {
|
|
19
|
+
const t = createSetupTranslator();
|
|
20
|
+
return {
|
|
21
|
+
helpTitle: t("wizard.slack.allowlistTitle"),
|
|
22
|
+
helpLines: [
|
|
23
|
+
t("wizard.slack.allowlistIntro"),
|
|
24
|
+
t("wizard.slack.examples"),
|
|
25
|
+
"- U12345678",
|
|
26
|
+
"- @alice",
|
|
27
|
+
t("wizard.slack.multipleEntries"),
|
|
28
|
+
t("wizard.channels.docs", { link: formatDocsLink("/slack", "slack") })
|
|
29
|
+
],
|
|
30
|
+
message: t("wizard.slack.allowFromPrompt"),
|
|
31
|
+
placeholder: "@alice, U12345678",
|
|
32
|
+
invalidWithoutCredentialNote: t("wizard.slack.allowFromInvalidWithoutToken"),
|
|
33
|
+
parseId: (value) => parseMentionOrPrefixedId({
|
|
34
|
+
value,
|
|
35
|
+
mentionPattern: /^<@([A-Z0-9]+)>$/i,
|
|
36
|
+
prefixPattern: /^(slack:|user:)/i,
|
|
37
|
+
idPattern: /^[A-Z][A-Z0-9]+$/i,
|
|
38
|
+
normalizeId: (id) => id.toUpperCase()
|
|
39
|
+
})
|
|
40
|
+
};
|
|
41
|
+
}
|
|
17
42
|
function buildSlackManifest(botName = "OpenClaw") {
|
|
18
43
|
const safeName = botName.trim() || "OpenClaw";
|
|
19
44
|
const manifest = {
|
|
@@ -33,20 +58,7 @@ function buildSlackManifest(botName = "OpenClaw") {
|
|
|
33
58
|
},
|
|
34
59
|
agent_view: {
|
|
35
60
|
agent_description: `${safeName} connects Slack Agent View conversations to OpenClaw agents.`,
|
|
36
|
-
suggested_prompts:
|
|
37
|
-
{
|
|
38
|
-
title: "What can you do?",
|
|
39
|
-
message: "What can you help me with?"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
title: "Summarize this channel",
|
|
43
|
-
message: "Summarize the recent activity in this channel."
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
title: "Draft a reply",
|
|
47
|
-
message: "Help me draft a reply."
|
|
48
|
-
}
|
|
49
|
-
]
|
|
61
|
+
suggested_prompts: DEFAULT_SLACK_SUGGESTED_PROMPTS
|
|
50
62
|
},
|
|
51
63
|
slash_commands: [{
|
|
52
64
|
command: "/openclaw",
|
|
@@ -477,25 +489,7 @@ function createSlackSetupWizardBase(handlers) {
|
|
|
477
489
|
dmPolicy: slackDmPolicy,
|
|
478
490
|
allowFrom: createAccountScopedAllowFromSection({
|
|
479
491
|
channel: SLACK_CHANNEL,
|
|
480
|
-
|
|
481
|
-
helpLines: [
|
|
482
|
-
t("wizard.slack.allowlistIntro"),
|
|
483
|
-
t("wizard.slack.examples"),
|
|
484
|
-
"- U12345678",
|
|
485
|
-
"- @alice",
|
|
486
|
-
t("wizard.slack.multipleEntries"),
|
|
487
|
-
t("wizard.channels.docs", { link: formatDocsLink("/slack", "slack") })
|
|
488
|
-
],
|
|
489
|
-
message: t("wizard.slack.allowFromPrompt"),
|
|
490
|
-
placeholder: "@alice, U12345678",
|
|
491
|
-
invalidWithoutCredentialNote: t("wizard.slack.allowFromInvalidWithoutToken"),
|
|
492
|
-
parseId: (value) => parseMentionOrPrefixedId({
|
|
493
|
-
value,
|
|
494
|
-
mentionPattern: /^<@([A-Z0-9]+)>$/i,
|
|
495
|
-
prefixPattern: /^(slack:|user:)/i,
|
|
496
|
-
idPattern: /^[A-Z][A-Z0-9]+$/i,
|
|
497
|
-
normalizeId: (id) => id.toUpperCase()
|
|
498
|
-
}),
|
|
492
|
+
...buildSlackAllowFromPrompt(),
|
|
499
493
|
resolveEntries: handlers.resolveAllowFromEntries
|
|
500
494
|
}),
|
|
501
495
|
groupAccess: createAccountScopedGroupAccessSection({
|
|
@@ -549,7 +543,6 @@ const slackBaseConfigAdapter = createScopedChannelConfigAdapter({
|
|
|
549
543
|
});
|
|
550
544
|
//#endregion
|
|
551
545
|
//#region extensions/slack/src/channel.setup.ts
|
|
552
|
-
const slackSetupWizard = createSlackSetupWizardProxy(async () => ({ slackSetupWizard: (await import("./setup-surface-D3DLcCxu.mjs")).slackSetupWizard }));
|
|
553
546
|
const slackSetupPlugin = {
|
|
554
547
|
id: SLACK_CHANNEL,
|
|
555
548
|
meta: {
|
|
@@ -564,7 +557,7 @@ const slackSetupPlugin = {
|
|
|
564
557
|
markdownCapable: true,
|
|
565
558
|
preferSessionLookupForAnnounceTarget: true
|
|
566
559
|
},
|
|
567
|
-
setupWizard:
|
|
560
|
+
setupWizard: createSlackSetupWizardProxy(() => import("./setup-surface-Dn7QgWRE.mjs")),
|
|
568
561
|
capabilities: {
|
|
569
562
|
chatTypes: [
|
|
570
563
|
"direct",
|
|
@@ -586,7 +579,7 @@ const slackSetupPlugin = {
|
|
|
586
579
|
idleMs: 1e3
|
|
587
580
|
} },
|
|
588
581
|
reload: {
|
|
589
|
-
configPrefixes: ["channels.slack"],
|
|
582
|
+
configPrefixes: ["channels.slack", "approvals.plugin.slack"],
|
|
590
583
|
noopPrefixes: [
|
|
591
584
|
"messages.inbound",
|
|
592
585
|
"messages.ackReactionScope",
|
|
@@ -637,10 +630,10 @@ const slackSetupPlugin = {
|
|
|
637
630
|
"SLACK_BOT_TOKEN",
|
|
638
631
|
"SLACK_USER_TOKEN"
|
|
639
632
|
].some((key) => typeof env?.[key] === "string" && env[key]?.trim().length > 0),
|
|
640
|
-
isConfigured:
|
|
641
|
-
describeAccount:
|
|
633
|
+
isConfigured: isSlackSetupAccountConfigured,
|
|
634
|
+
describeAccount: describeSlackSetupAccount
|
|
642
635
|
},
|
|
643
636
|
setupContract: slackSetupContract
|
|
644
637
|
};
|
|
645
638
|
//#endregion
|
|
646
|
-
export { slackSetupContract as a, createSlackSetupWizardProxy as i, slackBaseConfigAdapter as n, SLACK_CHANNEL as o, createSlackSetupWizardBase as r, slackSetupPlugin as t };
|
|
639
|
+
export { slackSetupContract as a, createSlackSetupWizardProxy as i, slackBaseConfigAdapter as n, SLACK_CHANNEL as o, createSlackSetupWizardBase as r, buildSlackAllowFromPrompt as s, slackSetupPlugin as t };
|
|
@@ -5,6 +5,10 @@ import { z } from "zod";
|
|
|
5
5
|
//#region extensions/slack/src/config-ui-hints.ts
|
|
6
6
|
const observedGroupHistoryHint = { help: "Automatic observed-message context uses a default of 50 and a maximum of 200 messages; 0 disables automatic injection. The JSON integer maximum selects the 50-message default. Session transcript trimming separately counts user turns, where 0 means no trimming. The observed-message cap does not rewrite saved values." };
|
|
7
7
|
const observedDmHistoryHint = { help: "Automatic observed-DM context uses a default of 0 and a maximum of 200 messages; 0 disables that extra context. The JSON integer maximum selects the 0-message default. Session transcript trimming separately counts user turns, where 0 means no trimming. The observed-message cap does not rewrite saved values." };
|
|
8
|
+
const botThreadMentionHint = {
|
|
9
|
+
label: "Require Mention in Bot Threads",
|
|
10
|
+
help: "Override mention gating in threads whose root message was sent by this bot. False allows unmentioned replies; true requires a mention even when implicit reply or participation signals are enabled. Omit to preserve the existing mention policy. Channel settings override account settings; access restrictions still apply."
|
|
11
|
+
};
|
|
8
12
|
const slackChannelConfigUiHints = {
|
|
9
13
|
historyLimit: observedGroupHistoryHint,
|
|
10
14
|
"accounts.*.historyLimit": observedGroupHistoryHint,
|
|
@@ -12,6 +16,10 @@ const slackChannelConfigUiHints = {
|
|
|
12
16
|
"accounts.*.dmHistoryLimit": observedDmHistoryHint,
|
|
13
17
|
"dms.*.historyLimit": observedDmHistoryHint,
|
|
14
18
|
"accounts.*.dms.*.historyLimit": observedDmHistoryHint,
|
|
19
|
+
requireMentionInBotThreads: botThreadMentionHint,
|
|
20
|
+
"accounts.*.requireMentionInBotThreads": botThreadMentionHint,
|
|
21
|
+
"channels.*.requireMentionInBotThreads": botThreadMentionHint,
|
|
22
|
+
"accounts.*.channels.*.requireMentionInBotThreads": botThreadMentionHint,
|
|
15
23
|
"": {
|
|
16
24
|
label: "Slack",
|
|
17
25
|
help: "Slack channel provider configuration for bot/app tokens, streaming behavior, and DM policy controls. Keep token handling and thread behavior explicit to avoid noisy workspace interactions."
|
|
@@ -33,14 +41,14 @@ const slackChannelConfigUiHints = {
|
|
|
33
41
|
implicitMentions: true,
|
|
34
42
|
streaming: {
|
|
35
43
|
"": "Unified Slack stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\" (default). Legacy boolean/streamMode keys are auto-mapped.",
|
|
36
|
-
mode: "Canonical Slack preview mode: \"off\" | \"partial\" | \"block\" | \"progress\" (default).",
|
|
44
|
+
mode: "Canonical Slack preview mode: \"off\" | \"partial\" | \"block\" | \"progress\" (default). Default progress outside reply threads uses only a temporary typing reaction. Any explicit streaming.progress setting opts top-level turns into a preview, except nativeTaskCards: true, which only affects threads.",
|
|
37
45
|
chunkMode: "Chunking mode for outbound Slack text delivery: \"length\" (default) or \"newline\".",
|
|
38
46
|
"block.enabled": "Enable chunked block-style Slack preview delivery when channels.slack.streaming.mode=\"block\".",
|
|
39
47
|
"block.coalesce": "Merge streamed Slack block replies before final delivery.",
|
|
40
48
|
nativeTransport: "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming.mode is partial (default: true). Native streaming and Slack session status require a reply thread target; top-level DMs can still use draft post-and-edit preview streaming.",
|
|
41
49
|
"preview.toolProgress": "Show tool/progress activity in the live draft preview message (default: true). Set false to hide interim tool updates while the draft preview stays active.",
|
|
42
50
|
"preview.commandText": "Command/exec detail in preview tool-progress lines: \"status\" is the safe default; \"raw\" opts into command text.",
|
|
43
|
-
"progress.style": "Slack progress presentation: \"card\" uses structured task/session cards; \"compact\" keeps a temporary editable text draft. The final response is posted as a new message, then the draft is deleted after confirmed delivery.
|
|
51
|
+
"progress.style": "Slack progress presentation: \"card\" uses structured task/session cards; \"compact\" keeps a temporary editable text draft. The final response is posted as a new message, then the draft is deleted after confirmed delivery. Outside reply threads, unset progress presentation is quiet. Any explicit streaming.progress setting in the merged root and account config opts top-level turns into a preview, except nativeTaskCards: true, which only affects threads. This includes commentary or label alone. The style defaults to \"compact\" when toolProgress is explicitly false, otherwise \"card\".",
|
|
44
52
|
"progress.nativeTaskCards": "Slack native task-card progress updates when channels.slack.streaming.mode=\"progress\", progress.style=\"card\", and streaming.nativeTransport is enabled. Set false to fall back to the Block Kit progress card. Default: true."
|
|
45
53
|
},
|
|
46
54
|
progress: { labels: "openclaw" }
|
|
@@ -51,7 +59,7 @@ const slackChannelConfigUiHints = {
|
|
|
51
59
|
},
|
|
52
60
|
allowBots: {
|
|
53
61
|
label: "Slack Allow Bot Messages",
|
|
54
|
-
help: "Allow bot-authored messages to trigger Slack replies (default:
|
|
62
|
+
help: "Allow bot-authored messages to trigger Slack replies (default: true). Set false to disable bot-triggered turns, or \"mentions\" to require a mention. Channel access, mention, owner-presence, and loop-protection rules still apply; accessible bot-authored context remains available independently."
|
|
55
63
|
},
|
|
56
64
|
botLoopProtection: {
|
|
57
65
|
label: "Slack Bot Loop Protection",
|
|
@@ -188,6 +196,7 @@ const SlackPresenceEventsSchema = z.object({
|
|
|
188
196
|
prompt: z.string().max(SLACK_PRESENCE_EVENT_PROMPT_MAX_CHARS).optional()
|
|
189
197
|
}).strict();
|
|
190
198
|
const SlackChannelSchema = buildGroupEntrySchema({
|
|
199
|
+
requireMentionInBotThreads: z.boolean().optional(),
|
|
191
200
|
ignoreOtherMentions: z.boolean().optional(),
|
|
192
201
|
replyToMode: ReplyToModeSchema.optional(),
|
|
193
202
|
allowBots: buildChannelAllowBotsSchema({ allowMentions: true }),
|
|
@@ -237,6 +246,7 @@ const SlackAccountSchema = z.object({
|
|
|
237
246
|
botLoopProtection: ChannelBotLoopProtectionSchema.optional(),
|
|
238
247
|
dangerouslyAllowNameMatching: ChannelDangerouslyAllowNameMatchingSchema,
|
|
239
248
|
requireMention: z.boolean().optional(),
|
|
249
|
+
requireMentionInBotThreads: z.boolean().optional(),
|
|
240
250
|
implicitMentions: ChannelImplicitMentionsSchema.optional(),
|
|
241
251
|
unfurlLinks: z.boolean().optional(),
|
|
242
252
|
unfurlMedia: z.boolean().optional(),
|
|
@@ -274,8 +284,7 @@ const SlackAccountSchema = z.object({
|
|
|
274
284
|
typingReaction: z.string().optional()
|
|
275
285
|
}).strict();
|
|
276
286
|
function validateSlackSigningSecretRequirements(value, ctx) {
|
|
277
|
-
const
|
|
278
|
-
const baseMode = resolveMode(value.mode) ?? "socket";
|
|
287
|
+
const baseMode = value.mode ?? "socket";
|
|
279
288
|
const hasImplicitRootAccount = Object.keys(value.accounts ?? {}).length === 0;
|
|
280
289
|
if (baseMode === "http" && hasImplicitRootAccount && !hasConfiguredSecretInput(value.signingSecret)) ctx.addIssue({
|
|
281
290
|
code: z.ZodIssueCode.custom,
|
|
@@ -284,7 +293,7 @@ function validateSlackSigningSecretRequirements(value, ctx) {
|
|
|
284
293
|
});
|
|
285
294
|
for (const [accountId, account] of Object.entries(value.accounts ?? {})) {
|
|
286
295
|
if (!account || account.enabled === false) continue;
|
|
287
|
-
if ((
|
|
296
|
+
if ((account.mode ?? baseMode) !== "http") continue;
|
|
288
297
|
const accountSecret = account.signingSecret ?? value.signingSecret;
|
|
289
298
|
if (!hasConfiguredSecretInput(accountSecret)) ctx.addIssue({
|
|
290
299
|
code: z.ZodIssueCode.custom,
|
|
@@ -335,34 +344,28 @@ const SlackConfigSchema = SlackAccountSchema.safeExtend({
|
|
|
335
344
|
});
|
|
336
345
|
};
|
|
337
346
|
const baseMode = value.mode ?? "socket";
|
|
338
|
-
const accountIds = value.accounts ? Object.keys(value.accounts) : [];
|
|
339
347
|
if (!value.accounts) {
|
|
340
348
|
if (baseMode === "relay") requireRelayConfig(value.relay, ["relay"]);
|
|
341
349
|
validateSlackSigningSecretRequirements(value, ctx);
|
|
342
350
|
return;
|
|
343
351
|
}
|
|
344
|
-
for (const accountId of
|
|
345
|
-
const account = value.accounts[accountId];
|
|
352
|
+
for (const [accountId, account] of Object.entries(value.accounts)) {
|
|
346
353
|
if (!account || account.enabled === false) continue;
|
|
347
354
|
const accountMode = account.mode ?? baseMode;
|
|
348
|
-
const effectiveRelay = {
|
|
349
|
-
...value.relay,
|
|
350
|
-
...account.relay
|
|
351
|
-
};
|
|
352
355
|
refineChannelDmPolicy({
|
|
353
356
|
channelId: "slack",
|
|
354
357
|
value,
|
|
355
358
|
accountId,
|
|
356
359
|
ctx
|
|
357
360
|
});
|
|
358
|
-
if (accountMode
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
361
|
+
if (accountMode === "relay") requireRelayConfig({
|
|
362
|
+
...value.relay,
|
|
363
|
+
...account.relay
|
|
364
|
+
}, [
|
|
365
|
+
"accounts",
|
|
366
|
+
accountId,
|
|
367
|
+
"relay"
|
|
368
|
+
]);
|
|
366
369
|
}
|
|
367
370
|
validateSlackSigningSecretRequirements(value, ctx);
|
|
368
371
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as
|
|
3
|
-
import { a as parseSlackTarget } from "./target-parsing-
|
|
4
|
-
import "./targets-
|
|
1
|
+
import { r as __exportAll } from "./streaming-compat-C5Wut626.mjs";
|
|
2
|
+
import { a as mergeSlackAccountConfig, c as resolveSlackAccountAllowFrom, o as resolveDefaultSlackAccountId } from "./accounts-D_N9IqNA.mjs";
|
|
3
|
+
import { a as parseSlackTarget } from "./target-parsing-FFE26kOV.mjs";
|
|
4
|
+
import "./targets-C6LZQL1Q.mjs";
|
|
5
5
|
import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
|
|
6
6
|
import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
7
7
|
import { createResolvedDirectoryEntriesLister } from "openclaw/plugin-sdk/directory-config-runtime";
|
|
@@ -12,11 +12,8 @@ var directory_config_exports = /* @__PURE__ */ __exportAll({
|
|
|
12
12
|
});
|
|
13
13
|
function resolveSlackDirectoryConfigAccount(cfg, accountId) {
|
|
14
14
|
const resolvedAccountId = normalizeAccountId(accountId ?? resolveDefaultSlackAccountId(cfg));
|
|
15
|
-
const config = mergeSlackAccountConfig(cfg, resolvedAccountId);
|
|
16
15
|
return {
|
|
17
|
-
|
|
18
|
-
config,
|
|
19
|
-
dm: config.dm,
|
|
16
|
+
config: mergeSlackAccountConfig(cfg, resolvedAccountId),
|
|
20
17
|
allowFrom: resolveSlackAccountAllowFrom({
|
|
21
18
|
cfg,
|
|
22
19
|
accountId: resolvedAccountId
|
|
@@ -25,7 +22,7 @@ function resolveSlackDirectoryConfigAccount(cfg, accountId) {
|
|
|
25
22
|
}
|
|
26
23
|
const listSlackDirectoryPeersFromConfig = createResolvedDirectoryEntriesLister({
|
|
27
24
|
kind: "user",
|
|
28
|
-
resolveAccount:
|
|
25
|
+
resolveAccount: resolveSlackDirectoryConfigAccount,
|
|
29
26
|
resolveSources: (account) => {
|
|
30
27
|
const channelUsers = Object.values(account.config.channels ?? {}).flatMap((channel) => channel.users ?? []);
|
|
31
28
|
return [
|
|
@@ -44,7 +41,7 @@ const listSlackDirectoryPeersFromConfig = createResolvedDirectoryEntriesLister({
|
|
|
44
41
|
});
|
|
45
42
|
const listSlackDirectoryGroupsFromConfig = createResolvedDirectoryEntriesLister({
|
|
46
43
|
kind: "group",
|
|
47
|
-
resolveAccount:
|
|
44
|
+
resolveAccount: resolveSlackDirectoryConfigAccount,
|
|
48
45
|
resolveSources: (account) => [Object.keys(account.config.channels ?? {})],
|
|
49
46
|
normalizeId: (raw) => {
|
|
50
47
|
const normalized = parseSlackTarget(raw, { defaultKind: "channel" });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { c as
|
|
1
|
+
import { r as __exportAll } from "./streaming-compat-C5Wut626.mjs";
|
|
2
|
+
import { s as resolveSlackAccount } from "./accounts-D_N9IqNA.mjs";
|
|
3
|
+
import { c as collectSlackCursorPages, l as fetchSlackChannelListPage, u as createSlackLookupClient } from "./probe-B2Y9qc_z.mjs";
|
|
4
4
|
import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
5
5
|
//#region extensions/slack/src/directory-live.ts
|
|
6
6
|
var directory_live_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -16,17 +16,8 @@ function createSlackDirectoryClient(params) {
|
|
|
16
16
|
const token = account.userToken ?? account.botToken?.trim();
|
|
17
17
|
return token ? createSlackLookupClient(token) : null;
|
|
18
18
|
}
|
|
19
|
-
function normalizeQuery(value) {
|
|
20
|
-
return normalizeLowercaseStringOrEmpty(value);
|
|
21
|
-
}
|
|
22
19
|
function buildUserRank(user) {
|
|
23
|
-
|
|
24
|
-
if (!user.deleted) rank += 2;
|
|
25
|
-
if (!user.is_bot && !user.is_app_user) rank += 1;
|
|
26
|
-
return rank;
|
|
27
|
-
}
|
|
28
|
-
function buildChannelRank(channel) {
|
|
29
|
-
return channel.is_archived ? 0 : 1;
|
|
20
|
+
return (user.deleted ? 0 : 2) + (user.is_bot || user.is_app_user ? 0 : 1);
|
|
30
21
|
}
|
|
31
22
|
function slackUserToDirectoryEntry(user, fallback) {
|
|
32
23
|
const id = normalizeOptionalString(user.id) ?? normalizeOptionalString(fallback?.id);
|
|
@@ -57,16 +48,13 @@ async function getSlackDirectorySelfLive(params) {
|
|
|
57
48
|
return slackUserToDirectoryEntry({
|
|
58
49
|
id: userId,
|
|
59
50
|
name: auth.user
|
|
60
|
-
}, {
|
|
61
|
-
id: userId,
|
|
62
|
-
name: auth.user
|
|
63
51
|
});
|
|
64
52
|
}
|
|
65
53
|
}
|
|
66
54
|
async function listSlackDirectoryPeersLive(params) {
|
|
67
55
|
const client = createSlackDirectoryClient(params);
|
|
68
56
|
if (!client) return [];
|
|
69
|
-
const query =
|
|
57
|
+
const query = normalizeLowercaseStringOrEmpty(params.query);
|
|
70
58
|
const rows = (await collectSlackCursorPages({
|
|
71
59
|
fetchPage: (cursor) => client.users.list({
|
|
72
60
|
limit: 200,
|
|
@@ -81,14 +69,14 @@ async function listSlackDirectoryPeersLive(params) {
|
|
|
81
69
|
].map((item) => normalizeOptionalLowercaseString(item)).filter(Boolean);
|
|
82
70
|
if (!query) return true;
|
|
83
71
|
return candidates.some((candidate) => candidate?.includes(query));
|
|
84
|
-
}).map((member) => slackUserToDirectoryEntry(member)).filter(
|
|
72
|
+
}).map((member) => slackUserToDirectoryEntry(member)).filter((entry) => entry !== null);
|
|
85
73
|
if (typeof params.limit === "number" && params.limit > 0) return rows.slice(0, params.limit);
|
|
86
74
|
return rows;
|
|
87
75
|
}
|
|
88
76
|
async function listSlackDirectoryGroupsLive(params) {
|
|
89
77
|
const client = createSlackDirectoryClient(params);
|
|
90
78
|
if (!client) return [];
|
|
91
|
-
const query =
|
|
79
|
+
const query = normalizeLowercaseStringOrEmpty(params.query);
|
|
92
80
|
const rows = (await collectSlackCursorPages({
|
|
93
81
|
fetchPage: (cursor) => fetchSlackChannelListPage(client, cursor),
|
|
94
82
|
collectPageItems: (res) => Array.isArray(res.channels) ? res.channels : []
|
|
@@ -105,10 +93,10 @@ async function listSlackDirectoryGroupsLive(params) {
|
|
|
105
93
|
id: `channel:${id}`,
|
|
106
94
|
name,
|
|
107
95
|
handle: `#${name}`,
|
|
108
|
-
rank:
|
|
96
|
+
rank: channel.is_archived ? 0 : 1,
|
|
109
97
|
raw: channel
|
|
110
98
|
};
|
|
111
|
-
}).filter(
|
|
99
|
+
}).filter((entry) => entry !== null);
|
|
112
100
|
if (typeof params.limit === "number" && params.limit > 0) return rows.slice(0, params.limit);
|
|
113
101
|
return rows;
|
|
114
102
|
}
|