lightclawbot 1.1.2 → 1.2.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/dist/index.js +38 -31
- package/dist/setup-entry.js +32 -0
- package/dist/src/channel.js +301 -257
- package/dist/src/channel.setup.js +16 -0
- package/dist/src/config.js +31 -124
- package/dist/src/dedup.js +0 -1
- package/dist/src/download-tool.js +0 -1
- package/dist/src/file-storage.js +2 -2
- package/dist/src/gateway.js +226 -178
- package/dist/src/history/cron-utils.js +0 -1
- package/dist/src/history/index.js +0 -1
- package/dist/src/history/message-parser.js +0 -1
- package/dist/src/history/session-reader.js +3 -1
- package/dist/src/history/session-store.js +0 -1
- package/dist/src/history/text-processing.js +0 -1
- package/dist/src/history/types.js +0 -1
- package/dist/src/inbound.js +183 -234
- package/dist/src/media.js +0 -1
- package/dist/src/messaging.js +65 -0
- package/dist/src/outbound.js +131 -45
- package/dist/src/runtime.js +29 -11
- package/dist/src/setup-core.js +27 -0
- package/dist/src/shared.js +141 -0
- package/dist/src/socket/handlers.js +72 -49
- package/dist/src/socket/index.js +0 -1
- package/dist/src/socket/native-socket.js +385 -0
- package/dist/src/socket/registry.js +0 -1
- package/dist/src/socket/reliable-emitter.js +188 -50
- package/dist/src/streaming/delta-tracker.js +140 -0
- package/dist/src/streaming/index.js +12 -0
- package/dist/src/streaming/stream-reply-sink.js +387 -0
- package/dist/src/streaming/types.js +4 -0
- package/dist/src/tools.js +13 -0
- package/dist/src/types.js +23 -2
- package/dist/src/upload-tool.js +0 -1
- package/dist/src/utils/account.js +73 -0
- package/dist/src/utils/common.js +48 -0
- package/dist/src/utils/index.js +2 -0
- package/node_modules/ws/index.js +22 -0
- package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/constants.js +1 -0
- package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/permessage-deflate.js +6 -6
- package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/websocket-server.js +10 -6
- package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/websocket.js +19 -14
- package/node_modules/{engine.io-client/node_modules/ws → ws}/package.json +4 -3
- package/node_modules/ws/wrapper.mjs +21 -0
- package/openclaw.plugin.json +0 -7
- package/package.json +8 -5
- package/dist/index.d.ts +0 -24
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/public/data/scripts/manifest.json +0 -11
- package/dist/public/data/scripts/preflight.9af62b39.sh +0 -191
- package/dist/public/data/scripts/preflight.sh +0 -191
- package/dist/src/channel.d.ts +0 -11
- package/dist/src/channel.d.ts.map +0 -1
- package/dist/src/channel.js.map +0 -1
- package/dist/src/config.d.ts +0 -129
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/config.js.map +0 -1
- package/dist/src/dedup.d.ts +0 -12
- package/dist/src/dedup.d.ts.map +0 -1
- package/dist/src/dedup.js.map +0 -1
- package/dist/src/download-tool.d.ts +0 -32
- package/dist/src/download-tool.d.ts.map +0 -1
- package/dist/src/download-tool.js.map +0 -1
- package/dist/src/file-storage.d.ts +0 -74
- package/dist/src/file-storage.d.ts.map +0 -1
- package/dist/src/file-storage.js.map +0 -1
- package/dist/src/format-urls.d.ts +0 -26
- package/dist/src/format-urls.d.ts.map +0 -1
- package/dist/src/format-urls.js +0 -53
- package/dist/src/format-urls.js.map +0 -1
- package/dist/src/gateway.d.ts +0 -16
- package/dist/src/gateway.d.ts.map +0 -1
- package/dist/src/gateway.js.map +0 -1
- package/dist/src/history/cron-utils.d.ts +0 -76
- package/dist/src/history/cron-utils.d.ts.map +0 -1
- package/dist/src/history/cron-utils.js.map +0 -1
- package/dist/src/history/index.d.ts +0 -20
- package/dist/src/history/index.d.ts.map +0 -1
- package/dist/src/history/index.js.map +0 -1
- package/dist/src/history/message-parser.d.ts +0 -52
- package/dist/src/history/message-parser.d.ts.map +0 -1
- package/dist/src/history/message-parser.js.map +0 -1
- package/dist/src/history/session-reader.d.ts +0 -58
- package/dist/src/history/session-reader.d.ts.map +0 -1
- package/dist/src/history/session-reader.js.map +0 -1
- package/dist/src/history/session-store.d.ts +0 -42
- package/dist/src/history/session-store.d.ts.map +0 -1
- package/dist/src/history/session-store.js.map +0 -1
- package/dist/src/history/text-processing.d.ts +0 -41
- package/dist/src/history/text-processing.d.ts.map +0 -1
- package/dist/src/history/text-processing.js.map +0 -1
- package/dist/src/history/types.d.ts +0 -134
- package/dist/src/history/types.d.ts.map +0 -1
- package/dist/src/history/types.js.map +0 -1
- package/dist/src/inbound.d.ts +0 -18
- package/dist/src/inbound.d.ts.map +0 -1
- package/dist/src/inbound.js.map +0 -1
- package/dist/src/media.d.ts +0 -12
- package/dist/src/media.d.ts.map +0 -1
- package/dist/src/media.js.map +0 -1
- package/dist/src/outbound.d.ts +0 -28
- package/dist/src/outbound.d.ts.map +0 -1
- package/dist/src/outbound.js.map +0 -1
- package/dist/src/runtime.d.ts +0 -4
- package/dist/src/runtime.d.ts.map +0 -1
- package/dist/src/runtime.js.map +0 -1
- package/dist/src/socket/handlers.d.ts +0 -26
- package/dist/src/socket/handlers.d.ts.map +0 -1
- package/dist/src/socket/handlers.js.map +0 -1
- package/dist/src/socket/index.d.ts +0 -11
- package/dist/src/socket/index.d.ts.map +0 -1
- package/dist/src/socket/index.js.map +0 -1
- package/dist/src/socket/registry.d.ts +0 -59
- package/dist/src/socket/registry.d.ts.map +0 -1
- package/dist/src/socket/registry.js.map +0 -1
- package/dist/src/socket/reliable-emitter.d.ts +0 -79
- package/dist/src/socket/reliable-emitter.d.ts.map +0 -1
- package/dist/src/socket/reliable-emitter.js.map +0 -1
- package/dist/src/types.d.ts +0 -112
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js.map +0 -1
- package/dist/src/upload-tool.d.ts +0 -27
- package/dist/src/upload-tool.d.ts.map +0 -1
- package/dist/src/upload-tool.js.map +0 -1
- package/node_modules/@socket.io/component-emitter/LICENSE +0 -24
- package/node_modules/@socket.io/component-emitter/Readme.md +0 -79
- package/node_modules/@socket.io/component-emitter/lib/cjs/index.d.ts +0 -179
- package/node_modules/@socket.io/component-emitter/lib/cjs/index.js +0 -176
- package/node_modules/@socket.io/component-emitter/lib/cjs/package.json +0 -4
- package/node_modules/@socket.io/component-emitter/lib/esm/index.d.ts +0 -179
- package/node_modules/@socket.io/component-emitter/lib/esm/index.js +0 -169
- package/node_modules/@socket.io/component-emitter/lib/esm/package.json +0 -4
- package/node_modules/@socket.io/component-emitter/package.json +0 -28
- package/node_modules/debug/LICENSE +0 -20
- package/node_modules/debug/README.md +0 -481
- package/node_modules/debug/package.json +0 -64
- package/node_modules/debug/src/browser.js +0 -272
- package/node_modules/debug/src/common.js +0 -292
- package/node_modules/debug/src/index.js +0 -10
- package/node_modules/debug/src/node.js +0 -263
- package/node_modules/engine.io-client/LICENSE +0 -22
- package/node_modules/engine.io-client/README.md +0 -331
- package/node_modules/engine.io-client/build/cjs/browser-entrypoint.d.ts +0 -3
- package/node_modules/engine.io-client/build/cjs/browser-entrypoint.js +0 -4
- package/node_modules/engine.io-client/build/cjs/contrib/has-cors.d.ts +0 -1
- package/node_modules/engine.io-client/build/cjs/contrib/has-cors.js +0 -14
- package/node_modules/engine.io-client/build/cjs/contrib/parseqs.d.ts +0 -15
- package/node_modules/engine.io-client/build/cjs/contrib/parseqs.js +0 -38
- package/node_modules/engine.io-client/build/cjs/contrib/parseuri.d.ts +0 -1
- package/node_modules/engine.io-client/build/cjs/contrib/parseuri.js +0 -67
- package/node_modules/engine.io-client/build/cjs/globals.d.ts +0 -4
- package/node_modules/engine.io-client/build/cjs/globals.js +0 -26
- package/node_modules/engine.io-client/build/cjs/globals.node.d.ts +0 -21
- package/node_modules/engine.io-client/build/cjs/globals.node.js +0 -97
- package/node_modules/engine.io-client/build/cjs/index.d.ts +0 -15
- package/node_modules/engine.io-client/build/cjs/index.js +0 -32
- package/node_modules/engine.io-client/build/cjs/package.json +0 -10
- package/node_modules/engine.io-client/build/cjs/socket.d.ts +0 -482
- package/node_modules/engine.io-client/build/cjs/socket.js +0 -765
- package/node_modules/engine.io-client/build/cjs/transport.d.ts +0 -106
- package/node_modules/engine.io-client/build/cjs/transport.js +0 -153
- package/node_modules/engine.io-client/build/cjs/transports/index.d.ts +0 -8
- package/node_modules/engine.io-client/build/cjs/transports/index.js +0 -11
- package/node_modules/engine.io-client/build/cjs/transports/polling-fetch.d.ts +0 -15
- package/node_modules/engine.io-client/build/cjs/transports/polling-fetch.js +0 -60
- package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.d.ts +0 -108
- package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.js +0 -285
- package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.node.d.ts +0 -11
- package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.node.js +0 -44
- package/node_modules/engine.io-client/build/cjs/transports/polling.d.ts +0 -52
- package/node_modules/engine.io-client/build/cjs/transports/polling.js +0 -165
- package/node_modules/engine.io-client/build/cjs/transports/websocket.d.ts +0 -36
- package/node_modules/engine.io-client/build/cjs/transports/websocket.js +0 -136
- package/node_modules/engine.io-client/build/cjs/transports/websocket.node.d.ts +0 -14
- package/node_modules/engine.io-client/build/cjs/transports/websocket.node.js +0 -68
- package/node_modules/engine.io-client/build/cjs/transports/webtransport.d.ts +0 -18
- package/node_modules/engine.io-client/build/cjs/transports/webtransport.js +0 -94
- package/node_modules/engine.io-client/build/cjs/util.d.ts +0 -7
- package/node_modules/engine.io-client/build/cjs/util.js +0 -65
- package/node_modules/engine.io-client/build/esm/browser-entrypoint.d.ts +0 -3
- package/node_modules/engine.io-client/build/esm/browser-entrypoint.js +0 -2
- package/node_modules/engine.io-client/build/esm/contrib/has-cors.d.ts +0 -1
- package/node_modules/engine.io-client/build/esm/contrib/has-cors.js +0 -11
- package/node_modules/engine.io-client/build/esm/contrib/parseqs.d.ts +0 -15
- package/node_modules/engine.io-client/build/esm/contrib/parseqs.js +0 -34
- package/node_modules/engine.io-client/build/esm/contrib/parseuri.d.ts +0 -1
- package/node_modules/engine.io-client/build/esm/contrib/parseuri.js +0 -64
- package/node_modules/engine.io-client/build/esm/globals.d.ts +0 -4
- package/node_modules/engine.io-client/build/esm/globals.js +0 -22
- package/node_modules/engine.io-client/build/esm/globals.node.d.ts +0 -21
- package/node_modules/engine.io-client/build/esm/globals.node.js +0 -91
- package/node_modules/engine.io-client/build/esm/index.d.ts +0 -15
- package/node_modules/engine.io-client/build/esm/index.js +0 -15
- package/node_modules/engine.io-client/build/esm/package.json +0 -10
- package/node_modules/engine.io-client/build/esm/socket.d.ts +0 -482
- package/node_modules/engine.io-client/build/esm/socket.js +0 -727
- package/node_modules/engine.io-client/build/esm/transport.d.ts +0 -106
- package/node_modules/engine.io-client/build/esm/transport.js +0 -142
- package/node_modules/engine.io-client/build/esm/transports/index.d.ts +0 -8
- package/node_modules/engine.io-client/build/esm/transports/index.js +0 -8
- package/node_modules/engine.io-client/build/esm/transports/polling-fetch.d.ts +0 -15
- package/node_modules/engine.io-client/build/esm/transports/polling-fetch.js +0 -56
- package/node_modules/engine.io-client/build/esm/transports/polling-xhr.d.ts +0 -108
- package/node_modules/engine.io-client/build/esm/transports/polling-xhr.js +0 -271
- package/node_modules/engine.io-client/build/esm/transports/polling-xhr.node.d.ts +0 -11
- package/node_modules/engine.io-client/build/esm/transports/polling-xhr.node.js +0 -17
- package/node_modules/engine.io-client/build/esm/transports/polling.d.ts +0 -52
- package/node_modules/engine.io-client/build/esm/transports/polling.js +0 -145
- package/node_modules/engine.io-client/build/esm/transports/websocket.d.ts +0 -36
- package/node_modules/engine.io-client/build/esm/transports/websocket.js +0 -125
- package/node_modules/engine.io-client/build/esm/transports/websocket.node.d.ts +0 -14
- package/node_modules/engine.io-client/build/esm/transports/websocket.node.js +0 -41
- package/node_modules/engine.io-client/build/esm/transports/webtransport.d.ts +0 -18
- package/node_modules/engine.io-client/build/esm/transports/webtransport.js +0 -80
- package/node_modules/engine.io-client/build/esm/util.d.ts +0 -7
- package/node_modules/engine.io-client/build/esm/util.js +0 -59
- package/node_modules/engine.io-client/build/esm-debug/browser-entrypoint.d.ts +0 -3
- package/node_modules/engine.io-client/build/esm-debug/browser-entrypoint.js +0 -2
- package/node_modules/engine.io-client/build/esm-debug/contrib/has-cors.d.ts +0 -1
- package/node_modules/engine.io-client/build/esm-debug/contrib/has-cors.js +0 -11
- package/node_modules/engine.io-client/build/esm-debug/contrib/parseqs.d.ts +0 -15
- package/node_modules/engine.io-client/build/esm-debug/contrib/parseqs.js +0 -34
- package/node_modules/engine.io-client/build/esm-debug/contrib/parseuri.d.ts +0 -1
- package/node_modules/engine.io-client/build/esm-debug/contrib/parseuri.js +0 -64
- package/node_modules/engine.io-client/build/esm-debug/globals.d.ts +0 -4
- package/node_modules/engine.io-client/build/esm-debug/globals.js +0 -22
- package/node_modules/engine.io-client/build/esm-debug/globals.node.d.ts +0 -21
- package/node_modules/engine.io-client/build/esm-debug/globals.node.js +0 -91
- package/node_modules/engine.io-client/build/esm-debug/index.d.ts +0 -15
- package/node_modules/engine.io-client/build/esm-debug/index.js +0 -15
- package/node_modules/engine.io-client/build/esm-debug/package.json +0 -10
- package/node_modules/engine.io-client/build/esm-debug/socket.d.ts +0 -482
- package/node_modules/engine.io-client/build/esm-debug/socket.js +0 -756
- package/node_modules/engine.io-client/build/esm-debug/transport.d.ts +0 -106
- package/node_modules/engine.io-client/build/esm-debug/transport.js +0 -145
- package/node_modules/engine.io-client/build/esm-debug/transports/index.d.ts +0 -8
- package/node_modules/engine.io-client/build/esm-debug/transports/index.js +0 -8
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-fetch.d.ts +0 -15
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-fetch.js +0 -56
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.d.ts +0 -108
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.js +0 -276
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.node.d.ts +0 -11
- package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.node.js +0 -17
- package/node_modules/engine.io-client/build/esm-debug/transports/polling.d.ts +0 -52
- package/node_modules/engine.io-client/build/esm-debug/transports/polling.js +0 -158
- package/node_modules/engine.io-client/build/esm-debug/transports/websocket.d.ts +0 -36
- package/node_modules/engine.io-client/build/esm-debug/transports/websocket.js +0 -128
- package/node_modules/engine.io-client/build/esm-debug/transports/websocket.node.d.ts +0 -14
- package/node_modules/engine.io-client/build/esm-debug/transports/websocket.node.js +0 -41
- package/node_modules/engine.io-client/build/esm-debug/transports/webtransport.d.ts +0 -18
- package/node_modules/engine.io-client/build/esm-debug/transports/webtransport.js +0 -87
- package/node_modules/engine.io-client/build/esm-debug/util.d.ts +0 -7
- package/node_modules/engine.io-client/build/esm-debug/util.js +0 -59
- package/node_modules/engine.io-client/dist/engine.io.esm.min.js +0 -7
- package/node_modules/engine.io-client/dist/engine.io.esm.min.js.map +0 -1
- package/node_modules/engine.io-client/dist/engine.io.js +0 -3064
- package/node_modules/engine.io-client/dist/engine.io.js.map +0 -1
- package/node_modules/engine.io-client/dist/engine.io.min.js +0 -7
- package/node_modules/engine.io-client/dist/engine.io.min.js.map +0 -1
- package/node_modules/engine.io-client/node_modules/ws/index.js +0 -13
- package/node_modules/engine.io-client/node_modules/ws/wrapper.mjs +0 -8
- package/node_modules/engine.io-client/package.json +0 -95
- package/node_modules/engine.io-parser/LICENSE +0 -22
- package/node_modules/engine.io-parser/Readme.md +0 -158
- package/node_modules/engine.io-parser/build/cjs/commons.d.ts +0 -14
- package/node_modules/engine.io-parser/build/cjs/commons.js +0 -19
- package/node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.d.ts +0 -2
- package/node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.js +0 -48
- package/node_modules/engine.io-parser/build/cjs/decodePacket.browser.d.ts +0 -2
- package/node_modules/engine.io-parser/build/cjs/decodePacket.browser.js +0 -66
- package/node_modules/engine.io-parser/build/cjs/decodePacket.d.ts +0 -2
- package/node_modules/engine.io-parser/build/cjs/decodePacket.js +0 -59
- package/node_modules/engine.io-parser/build/cjs/encodePacket.browser.d.ts +0 -4
- package/node_modules/engine.io-parser/build/cjs/encodePacket.browser.js +0 -72
- package/node_modules/engine.io-parser/build/cjs/encodePacket.d.ts +0 -3
- package/node_modules/engine.io-parser/build/cjs/encodePacket.js +0 -38
- package/node_modules/engine.io-parser/build/cjs/index.d.ts +0 -9
- package/node_modules/engine.io-parser/build/cjs/index.js +0 -164
- package/node_modules/engine.io-parser/build/cjs/package.json +0 -8
- package/node_modules/engine.io-parser/build/esm/commons.d.ts +0 -14
- package/node_modules/engine.io-parser/build/esm/commons.js +0 -14
- package/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.d.ts +0 -2
- package/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js +0 -43
- package/node_modules/engine.io-parser/build/esm/decodePacket.browser.d.ts +0 -2
- package/node_modules/engine.io-parser/build/esm/decodePacket.browser.js +0 -62
- package/node_modules/engine.io-parser/build/esm/decodePacket.d.ts +0 -2
- package/node_modules/engine.io-parser/build/esm/decodePacket.js +0 -55
- package/node_modules/engine.io-parser/build/esm/encodePacket.browser.d.ts +0 -4
- package/node_modules/engine.io-parser/build/esm/encodePacket.browser.js +0 -68
- package/node_modules/engine.io-parser/build/esm/encodePacket.d.ts +0 -3
- package/node_modules/engine.io-parser/build/esm/encodePacket.js +0 -33
- package/node_modules/engine.io-parser/build/esm/index.d.ts +0 -9
- package/node_modules/engine.io-parser/build/esm/index.js +0 -156
- package/node_modules/engine.io-parser/build/esm/package.json +0 -8
- package/node_modules/engine.io-parser/package.json +0 -46
- package/node_modules/ms/index.js +0 -162
- package/node_modules/ms/license.md +0 -21
- package/node_modules/ms/package.json +0 -38
- package/node_modules/ms/readme.md +0 -59
- package/node_modules/socket.io-client/LICENSE +0 -21
- package/node_modules/socket.io-client/README.md +0 -29
- package/node_modules/socket.io-client/build/cjs/browser-entrypoint.d.ts +0 -2
- package/node_modules/socket.io-client/build/cjs/browser-entrypoint.js +0 -4
- package/node_modules/socket.io-client/build/cjs/contrib/backo2.d.ts +0 -12
- package/node_modules/socket.io-client/build/cjs/contrib/backo2.js +0 -69
- package/node_modules/socket.io-client/build/cjs/index.d.ts +0 -29
- package/node_modules/socket.io-client/build/cjs/index.js +0 -76
- package/node_modules/socket.io-client/build/cjs/manager.d.ts +0 -295
- package/node_modules/socket.io-client/build/cjs/manager.js +0 -416
- package/node_modules/socket.io-client/build/cjs/on.d.ts +0 -2
- package/node_modules/socket.io-client/build/cjs/on.js +0 -9
- package/node_modules/socket.io-client/build/cjs/socket.d.ts +0 -593
- package/node_modules/socket.io-client/build/cjs/socket.js +0 -909
- package/node_modules/socket.io-client/build/cjs/url.d.ts +0 -33
- package/node_modules/socket.io-client/build/cjs/url.js +0 -69
- package/node_modules/socket.io-client/build/esm/browser-entrypoint.d.ts +0 -2
- package/node_modules/socket.io-client/build/esm/browser-entrypoint.js +0 -2
- package/node_modules/socket.io-client/build/esm/contrib/backo2.d.ts +0 -12
- package/node_modules/socket.io-client/build/esm/contrib/backo2.js +0 -66
- package/node_modules/socket.io-client/build/esm/index.d.ts +0 -29
- package/node_modules/socket.io-client/build/esm/index.js +0 -58
- package/node_modules/socket.io-client/build/esm/manager.d.ts +0 -295
- package/node_modules/socket.io-client/build/esm/manager.js +0 -367
- package/node_modules/socket.io-client/build/esm/on.d.ts +0 -2
- package/node_modules/socket.io-client/build/esm/on.js +0 -6
- package/node_modules/socket.io-client/build/esm/package.json +0 -5
- package/node_modules/socket.io-client/build/esm/socket.d.ts +0 -593
- package/node_modules/socket.io-client/build/esm/socket.js +0 -880
- package/node_modules/socket.io-client/build/esm/url.d.ts +0 -33
- package/node_modules/socket.io-client/build/esm/url.js +0 -59
- package/node_modules/socket.io-client/build/esm-debug/browser-entrypoint.d.ts +0 -2
- package/node_modules/socket.io-client/build/esm-debug/browser-entrypoint.js +0 -2
- package/node_modules/socket.io-client/build/esm-debug/contrib/backo2.d.ts +0 -12
- package/node_modules/socket.io-client/build/esm-debug/contrib/backo2.js +0 -66
- package/node_modules/socket.io-client/build/esm-debug/index.d.ts +0 -29
- package/node_modules/socket.io-client/build/esm-debug/index.js +0 -62
- package/node_modules/socket.io-client/build/esm-debug/manager.d.ts +0 -295
- package/node_modules/socket.io-client/build/esm-debug/manager.js +0 -386
- package/node_modules/socket.io-client/build/esm-debug/on.d.ts +0 -2
- package/node_modules/socket.io-client/build/esm-debug/on.js +0 -6
- package/node_modules/socket.io-client/build/esm-debug/package.json +0 -5
- package/node_modules/socket.io-client/build/esm-debug/socket.d.ts +0 -593
- package/node_modules/socket.io-client/build/esm-debug/socket.js +0 -902
- package/node_modules/socket.io-client/build/esm-debug/url.d.ts +0 -33
- package/node_modules/socket.io-client/build/esm-debug/url.js +0 -63
- package/node_modules/socket.io-client/dist/socket.io.esm.min.js +0 -7
- package/node_modules/socket.io-client/dist/socket.io.esm.min.js.map +0 -1
- package/node_modules/socket.io-client/dist/socket.io.js +0 -4955
- package/node_modules/socket.io-client/dist/socket.io.js.map +0 -1
- package/node_modules/socket.io-client/dist/socket.io.min.js +0 -7
- package/node_modules/socket.io-client/dist/socket.io.min.js.map +0 -1
- package/node_modules/socket.io-client/dist/socket.io.msgpack.min.js +0 -7
- package/node_modules/socket.io-client/dist/socket.io.msgpack.min.js.map +0 -1
- package/node_modules/socket.io-client/package.json +0 -101
- package/node_modules/socket.io-parser/LICENSE +0 -20
- package/node_modules/socket.io-parser/Readme.md +0 -81
- package/node_modules/socket.io-parser/build/cjs/binary.d.ts +0 -20
- package/node_modules/socket.io-parser/build/cjs/binary.js +0 -87
- package/node_modules/socket.io-parser/build/cjs/index.d.ts +0 -101
- package/node_modules/socket.io-parser/build/cjs/index.js +0 -367
- package/node_modules/socket.io-parser/build/cjs/is-binary.d.ts +0 -7
- package/node_modules/socket.io-parser/build/cjs/is-binary.js +0 -54
- package/node_modules/socket.io-parser/build/cjs/package.json +0 -3
- package/node_modules/socket.io-parser/build/esm/binary.d.ts +0 -20
- package/node_modules/socket.io-parser/build/esm/binary.js +0 -83
- package/node_modules/socket.io-parser/build/esm/index.d.ts +0 -101
- package/node_modules/socket.io-parser/build/esm/index.js +0 -356
- package/node_modules/socket.io-parser/build/esm/is-binary.d.ts +0 -7
- package/node_modules/socket.io-parser/build/esm/is-binary.js +0 -50
- package/node_modules/socket.io-parser/build/esm/package.json +0 -3
- package/node_modules/socket.io-parser/build/esm-debug/binary.d.ts +0 -20
- package/node_modules/socket.io-parser/build/esm-debug/binary.js +0 -83
- package/node_modules/socket.io-parser/build/esm-debug/index.d.ts +0 -101
- package/node_modules/socket.io-parser/build/esm-debug/index.js +0 -361
- package/node_modules/socket.io-parser/build/esm-debug/is-binary.d.ts +0 -7
- package/node_modules/socket.io-parser/build/esm-debug/is-binary.js +0 -50
- package/node_modules/socket.io-parser/build/esm-debug/package.json +0 -3
- package/node_modules/socket.io-parser/package.json +0 -44
- package/node_modules/xmlhttprequest-ssl/LICENSE +0 -22
- package/node_modules/xmlhttprequest-ssl/README.md +0 -67
- package/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js +0 -689
- package/node_modules/xmlhttprequest-ssl/package.json +0 -40
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/LICENSE +0 -0
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/README.md +0 -0
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/browser.js +0 -0
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/buffer-util.js +0 -0
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/event-target.js +0 -0
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/extension.js +0 -0
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/limiter.js +0 -0
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/receiver.js +0 -0
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/sender.js +0 -0
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/stream.js +0 -0
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/subprotocol.js +0 -0
- /package/node_modules/{engine.io-client/node_modules/ws → ws}/lib/validation.js +0 -0
package/dist/src/channel.js
CHANGED
|
@@ -1,272 +1,316 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* LightClaw — ChannelPlugin
|
|
2
|
+
* LightClaw — ChannelPlugin 主定义文件
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* 使用 OpenClaw SDK 标准的 createChatChannelPlugin 构建器创建聊天频道插件,
|
|
5
|
+
*
|
|
6
|
+
* 主要结构组成:
|
|
7
|
+
* base: 基础配置 - 来自 shared.ts 的 createLightclawPluginBase + 扩展字段
|
|
8
|
+
* messaging: 消息目标解析 - 处理消息发送目标的标准化和验证
|
|
9
|
+
* status: 状态管理 - 插件运行状态监控和状态面板构建
|
|
10
|
+
* gateway: Gateway 生命周期 - WebSocket 连接管理和账户生命周期
|
|
11
|
+
* outbound: 出站消息适配器 - 消息发送和媒体文件处理
|
|
12
|
+
*
|
|
13
|
+
* 该插件实现了与 AI 助手服务的 WebSocket 通信、消息收发、状态管理等核心功能。
|
|
7
14
|
*/
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return chunks;
|
|
34
|
-
}
|
|
35
|
-
// ============================================================
|
|
36
|
-
// ChannelPlugin 定义
|
|
37
|
-
// ============================================================
|
|
38
|
-
export const myAssistantPlugin = {
|
|
39
|
-
id: CHANNEL_KEY,
|
|
40
|
-
// ---- 元信息 ----
|
|
41
|
-
meta: {
|
|
42
|
-
id: CHANNEL_KEY,
|
|
43
|
-
label: "LightClawBot",
|
|
44
|
-
selectionLabel: "LightClawBot",
|
|
45
|
-
docsPath: "/docs/channels/lightclawbot",
|
|
46
|
-
blurb: "Connect OpenClaw to your LightClawBot via WebSocket long-connection",
|
|
47
|
-
order: 60,
|
|
48
|
-
},
|
|
49
|
-
// ---- 能力声明 ----
|
|
50
|
-
capabilities: {
|
|
51
|
-
chatTypes: ["direct"],
|
|
52
|
-
media: true,
|
|
53
|
-
reactions: false,
|
|
54
|
-
threads: false,
|
|
55
|
-
// true = deliver 回调会收到 kind="block" 的中间块,实现流式推送
|
|
56
|
-
blockStreaming: true,
|
|
57
|
-
},
|
|
58
|
-
// ---- 配置管理(多账户) ----
|
|
59
|
-
config: {
|
|
60
|
-
listAccountIds: (cfg) => listAccountIds(cfg),
|
|
61
|
-
resolveAccount: (cfg, accountId) => resolveAccount(cfg, accountId),
|
|
62
|
-
defaultAccountId: (cfg) => defaultAccountId(cfg),
|
|
63
|
-
setAccountEnabled: ({ cfg, accountId, enabled }) => setAccountEnabledInConfigSection({
|
|
64
|
-
cfg,
|
|
65
|
-
sectionKey: CHANNEL_KEY,
|
|
66
|
-
accountId,
|
|
67
|
-
enabled,
|
|
68
|
-
allowTopLevel: true,
|
|
69
|
-
}),
|
|
70
|
-
deleteAccount: ({ cfg, accountId }) => deleteAccountFromConfigSection({
|
|
71
|
-
cfg,
|
|
72
|
-
sectionKey: CHANNEL_KEY,
|
|
73
|
-
accountId,
|
|
74
|
-
clearBaseFields: ["apiKeys", "apiBaseUrl", "name"],
|
|
75
|
-
}),
|
|
76
|
-
isConfigured: (account) => Boolean(account?.allApiKeys?.length),
|
|
77
|
-
describeAccount: (account) => ({
|
|
78
|
-
accountId: account?.accountId ?? DEFAULT_ACCOUNT_ID,
|
|
79
|
-
name: account?.name,
|
|
80
|
-
enabled: account?.enabled ?? false,
|
|
81
|
-
configured: Boolean(account?.allApiKeys?.length),
|
|
82
|
-
tokenSource: account?.secretSource,
|
|
15
|
+
import { createChatChannelPlugin } from 'openclaw/plugin-sdk/core';
|
|
16
|
+
// 导入工具函数和常量
|
|
17
|
+
import { chunkText, defaultAccountId } from './utils/index.js';
|
|
18
|
+
import { CHANNEL_KEY, DEFAULT_ACCOUNT_ID, TEXT_CHUNK_LIMIT } from './config.js';
|
|
19
|
+
// 导入功能模块
|
|
20
|
+
import { sendText, sendMedia } from './outbound.js'; // 出站消息发送
|
|
21
|
+
import { startGateway } from './gateway.js'; // WebSocket Gateway 启动
|
|
22
|
+
import { createLightclawPluginBase } from './shared.js'; // 基础插件配置
|
|
23
|
+
import { lightclawSetupAdapter } from './setup-core.js'; // Setup 适配器
|
|
24
|
+
import { normalizeTarget, looksLikeId } from './messaging.js'; // 消息目标处理
|
|
25
|
+
/**
|
|
26
|
+
* LightClaw 主插件实例
|
|
27
|
+
*
|
|
28
|
+
* 使用 createChatChannelPlugin 工厂函数创建类型安全的 ChannelPlugin 实例,
|
|
29
|
+
* 泛型参数 ResolvedAssistantAccount 指定了账户数据的类型结构。
|
|
30
|
+
*
|
|
31
|
+
* @type {ChannelPlugin<ResolvedAssistantAccount>}
|
|
32
|
+
*/
|
|
33
|
+
export const lightclawPlugin = createChatChannelPlugin({
|
|
34
|
+
// ==================== 基础配置 ====================
|
|
35
|
+
base: {
|
|
36
|
+
// ---- 来自 shared.ts 的基础定义 ----
|
|
37
|
+
// 使用扩展运算符合并基础配置和 setup 适配器
|
|
38
|
+
...createLightclawPluginBase({
|
|
39
|
+
setup: lightclawSetupAdapter, // Setup 阶段使用的适配器
|
|
83
40
|
}),
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (cleaned.startsWith("dm:")) {
|
|
117
|
-
return `user:${cleaned.slice(3)}`;
|
|
118
|
-
}
|
|
119
|
-
// group:xxx → channel:xxx (群聊)
|
|
120
|
-
if (cleaned.startsWith("group:")) {
|
|
121
|
-
return `channel:${cleaned.slice(6)}`;
|
|
122
|
-
}
|
|
123
|
-
// 已经是标准格式 user:/channel:,原样返回
|
|
124
|
-
if (/^(user|channel):/i.test(cleaned)) {
|
|
125
|
-
return cleaned;
|
|
126
|
-
}
|
|
127
|
-
// 纯 ID,默认当作私聊
|
|
128
|
-
return `user:${cleaned}`;
|
|
41
|
+
// ---- 消息目标解析配置 ----
|
|
42
|
+
messaging: {
|
|
43
|
+
/**
|
|
44
|
+
* 目标标准化函数
|
|
45
|
+
* 对原始目标字符串进行标准化处理:去除空格、统一格式、转换编码等
|
|
46
|
+
*
|
|
47
|
+
* @param {string} target - 原始目标字符串
|
|
48
|
+
* @returns {string} 标准化后的目标字符串
|
|
49
|
+
*/
|
|
50
|
+
normalizeTarget: (target) => {
|
|
51
|
+
return normalizeTarget(target);
|
|
52
|
+
},
|
|
53
|
+
/** 目标解析器配置 */
|
|
54
|
+
targetResolver: {
|
|
55
|
+
/**
|
|
56
|
+
* ID 格式检测函数
|
|
57
|
+
* 判断一个原始字符串是否看起来像一个有效的 ID 格式
|
|
58
|
+
* 用于在完整解析前快速分流处理逻辑,提高性能
|
|
59
|
+
*
|
|
60
|
+
* @param {string} id - 待检测的字符串
|
|
61
|
+
* @param {string} [normalized] - 可选的标准化的字符串
|
|
62
|
+
* @returns {boolean} 是否看起来像 ID 格式
|
|
63
|
+
*/
|
|
64
|
+
looksLikeId: (id, normalized) => {
|
|
65
|
+
return looksLikeId(id, normalized);
|
|
66
|
+
},
|
|
67
|
+
/**
|
|
68
|
+
* 目标格式提示文本
|
|
69
|
+
* 显示在 CLI 帮助信息中,指导用户正确的目标格式
|
|
70
|
+
*/
|
|
71
|
+
hint: `user:<userId> or channel:<groupId>`,
|
|
72
|
+
},
|
|
129
73
|
},
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
//
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
//
|
|
139
|
-
const cleaned = value.replace(new RegExp(`^${CHANNEL_KEY}:`, "i"), "");
|
|
140
|
-
return /^(dm|group):\d+/.test(cleaned) || /^\d+$/.test(cleaned);
|
|
74
|
+
// ---- 状态面板配置 ----
|
|
75
|
+
status: {
|
|
76
|
+
/** 默认运行时状态配置 */
|
|
77
|
+
defaultRuntime: {
|
|
78
|
+
accountId: DEFAULT_ACCOUNT_ID, // 默认账户ID
|
|
79
|
+
running: false, // 运行状态:未运行
|
|
80
|
+
connected: false, // 连接状态:未连接
|
|
81
|
+
lastConnectedAt: null, // 最后连接时间:null
|
|
82
|
+
lastError: null, // 最后错误信息:null
|
|
141
83
|
},
|
|
142
|
-
|
|
84
|
+
/**
|
|
85
|
+
* 构建频道摘要信息
|
|
86
|
+
* 根据快照数据生成频道级别的状态摘要
|
|
87
|
+
*
|
|
88
|
+
* @param {Object} param0 - 参数对象
|
|
89
|
+
* @param {Object} param0.snapshot - 状态快照数据
|
|
90
|
+
* @returns {Object} 频道摘要信息
|
|
91
|
+
*/
|
|
92
|
+
buildChannelSummary: ({ snapshot }) => ({
|
|
93
|
+
configured: snapshot.configured ?? false, // 是否已配置
|
|
94
|
+
running: snapshot.running ?? false, // 是否正在运行
|
|
95
|
+
connected: snapshot.connected ?? false, // 是否已连接
|
|
96
|
+
lastConnectedAt: snapshot.lastConnectedAt ?? null, // 最后连接时间
|
|
97
|
+
lastError: snapshot.lastError ?? null, // 最后错误信息
|
|
98
|
+
}),
|
|
99
|
+
/**
|
|
100
|
+
* 构建账户快照信息
|
|
101
|
+
* 根据账户、运行时和配置数据生成账户级别的状态快照
|
|
102
|
+
*
|
|
103
|
+
* @param {Object} param0 - 参数对象
|
|
104
|
+
* @param {ResolvedAssistantAccount} param0.account - 账户信息
|
|
105
|
+
* @param {Object} param0.runtime - 运行时状态
|
|
106
|
+
* @param {OpenClawConfig} param0.cfg - 配置信息
|
|
107
|
+
* @returns {Object} 账户快照信息
|
|
108
|
+
*/
|
|
109
|
+
buildAccountSnapshot: ({ account, runtime, cfg }) => ({
|
|
110
|
+
accountId: account?.accountId ?? defaultAccountId(cfg), // 账户ID,优先使用账户的ID
|
|
111
|
+
name: account?.name, // 账户名称
|
|
112
|
+
enabled: account?.enabled ?? false, // 是否启用
|
|
113
|
+
configured: Boolean(account?.apiKey), // 是否已配置(有API密钥)
|
|
114
|
+
running: runtime?.running ?? false, // 是否正在运行
|
|
115
|
+
connected: runtime?.connected ?? false, // 是否已连接
|
|
116
|
+
lastConnectedAt: runtime?.lastConnectedAt ?? null, // 最后连接时间
|
|
117
|
+
lastError: runtime?.lastError ?? null, // 最后错误信息
|
|
118
|
+
}),
|
|
143
119
|
},
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
120
|
+
// ---- Gateway 生命周期管理(核心功能) ----
|
|
121
|
+
gateway: {
|
|
122
|
+
/**
|
|
123
|
+
* 启动账户
|
|
124
|
+
* 建立 WebSocket 长连接到 AI 助手服务器
|
|
125
|
+
* OpenClaw 框架会在加载配置后为每个启用的账户调用此方法
|
|
126
|
+
*
|
|
127
|
+
* @async
|
|
128
|
+
* @param {Object} ctx - 上下文对象
|
|
129
|
+
* @param {ResolvedAssistantAccount} ctx.account - 账户信息
|
|
130
|
+
* @param {AbortSignal} ctx.abortSignal - 中止信号,用于取消操作
|
|
131
|
+
* @param {Object} ctx.log - 日志记录器
|
|
132
|
+
* @param {OpenClawConfig} ctx.cfg - 配置信息
|
|
133
|
+
* @param {Function} ctx.setStatus - 状态设置函数
|
|
134
|
+
* @param {Function} ctx.getStatus - 状态获取函数
|
|
135
|
+
*/
|
|
136
|
+
startAccount: async (ctx) => {
|
|
137
|
+
const { account, abortSignal, log, cfg, accountId } = ctx;
|
|
138
|
+
// 记录启动日志
|
|
139
|
+
log?.info(`[${CHANNEL_KEY}:${accountId}] Starting gateway...`);
|
|
140
|
+
// 启动并维持一个 Socket.IO Gateway 实例
|
|
141
|
+
await startGateway({
|
|
142
|
+
account, // 账户信息
|
|
143
|
+
abortSignal, // 中止信号
|
|
144
|
+
cfg, // 配置信息
|
|
145
|
+
log, // 日志记录器
|
|
146
|
+
/**
|
|
147
|
+
* WebSocket 连接就绪回调
|
|
148
|
+
* 当 WebSocket 连接成功建立时调用
|
|
149
|
+
*/
|
|
150
|
+
onReady: () => {
|
|
151
|
+
log?.info(`[${CHANNEL_KEY}:${accountId}] Gateway ready: WS connected`);
|
|
152
|
+
const now = Date.now();
|
|
153
|
+
// 更新运行时状态
|
|
154
|
+
ctx.setStatus({
|
|
155
|
+
...ctx.getStatus(), // 保留现有状态
|
|
156
|
+
running: true, // 设置为运行中
|
|
157
|
+
connected: true, // 设置为已连接
|
|
158
|
+
lastConnectedAt: now, // 记录最后连接时间
|
|
159
|
+
// 连接建立时即设置 lastEventAt,作为 health-monitor stale-socket 检测的初始基准
|
|
160
|
+
lastEventAt: now, // 最后事件时间
|
|
161
|
+
});
|
|
162
|
+
},
|
|
163
|
+
/**
|
|
164
|
+
* WebSocket 连接断开回调
|
|
165
|
+
* 当 WebSocket 连接断开时调用
|
|
166
|
+
*/
|
|
167
|
+
onDisconnect: () => {
|
|
168
|
+
log?.info(`[${CHANNEL_KEY}:${accountId}] Gateway ready: WS disconnect`);
|
|
169
|
+
// 更新连接状态为断开
|
|
170
|
+
ctx.setStatus({
|
|
171
|
+
...ctx.getStatus(), // 保留现有状态
|
|
172
|
+
connected: false, // 设置为未连接
|
|
173
|
+
});
|
|
174
|
+
},
|
|
175
|
+
/**
|
|
176
|
+
* 错误回调
|
|
177
|
+
* 当发生错误时调用,记录错误信息但不中断重连逻辑
|
|
178
|
+
* 重连逻辑由 gateway 内部处理
|
|
179
|
+
*
|
|
180
|
+
* @param {Error} error - 错误对象
|
|
181
|
+
*/
|
|
182
|
+
onError: (error) => {
|
|
183
|
+
log?.error(`[${CHANNEL_KEY}:${accountId}] Gateway error: ${error.message}`);
|
|
184
|
+
// 记录错误信息
|
|
185
|
+
ctx.setStatus({
|
|
186
|
+
...ctx.getStatus(), // 保留现有状态
|
|
187
|
+
lastError: error.message, // 记录错误消息
|
|
188
|
+
});
|
|
189
|
+
},
|
|
190
|
+
/**
|
|
191
|
+
* 入站事件回调
|
|
192
|
+
* 每次收到消息时调用,用于:
|
|
193
|
+
* - 刷新 lastEventAt 和 lastInboundAt 时间戳
|
|
194
|
+
* - 通知框架 health-monitor 该连接仍处于活跃状态
|
|
195
|
+
* - 防止因长时间无活动而被判定为僵死连接
|
|
196
|
+
*/
|
|
197
|
+
onEvent: () => {
|
|
198
|
+
log?.info(`[${CHANNEL_KEY}:${accountId}] Gateway Ready: WS message enter`);
|
|
199
|
+
// 更新事件时间戳
|
|
200
|
+
ctx.setStatus({
|
|
201
|
+
...ctx.getStatus(), // 保留现有状态
|
|
202
|
+
lastEventAt: Date.now(), // 最后事件时间
|
|
203
|
+
lastInboundAt: Date.now(), // 最后入站消息时间
|
|
204
|
+
});
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
},
|
|
208
|
+
/**
|
|
209
|
+
* 登出账户
|
|
210
|
+
* 清除账户的凭证信息(如 API 密钥)
|
|
211
|
+
*
|
|
212
|
+
* @async
|
|
213
|
+
* @param {Object} param0 - 参数对象
|
|
214
|
+
* @param {string} param0.accountId - 账户ID
|
|
215
|
+
* @param {OpenClawConfig} param0.cfg - 配置信息
|
|
216
|
+
* @returns {Promise<{ok: boolean, cleared: boolean}>} 操作结果
|
|
217
|
+
*/
|
|
218
|
+
logoutAccount: async ({ accountId, cfg }) => {
|
|
219
|
+
// 创建配置副本以避免修改原始配置
|
|
220
|
+
const nextCfg = { ...cfg };
|
|
221
|
+
// 获取当前 channel 的配置节
|
|
222
|
+
const section = nextCfg.channels?.[CHANNEL_KEY];
|
|
223
|
+
let cleared = false; // 清理标志
|
|
224
|
+
if (section) {
|
|
225
|
+
// 处理默认账户的 API 密钥
|
|
226
|
+
if (accountId === DEFAULT_ACCOUNT_ID && section.apiKeys) {
|
|
227
|
+
delete section.apiKeys; // 删除默认账户的 API 密钥
|
|
228
|
+
cleared = true; // 标记为已清理
|
|
229
|
+
}
|
|
230
|
+
// 处理特定账户的 API 密钥
|
|
231
|
+
const accounts = section.accounts;
|
|
232
|
+
if (accounts?.[accountId]?.apiKeys) {
|
|
233
|
+
delete accounts[accountId].apiKeys; // 删除指定账户的 API 密钥
|
|
234
|
+
cleared = true; // 标记为已清理
|
|
235
|
+
}
|
|
161
236
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
error: new Error(`No delivery target for ${CHANNEL_KEY}. Specify a target with --to or configure allowFrom.`),
|
|
166
|
-
};
|
|
167
|
-
},
|
|
168
|
-
sendText: async ({ to, text, accountId, replyToId, cfg }) => {
|
|
169
|
-
return sendText({ to, text, accountId, replyToId, cfg });
|
|
170
|
-
},
|
|
171
|
-
sendMedia: async ({ to, text, mediaUrl, accountId, replyToId, cfg }) => {
|
|
172
|
-
return sendMedia({ to, text, mediaUrl, accountId, replyToId, cfg });
|
|
237
|
+
// 返回操作结果
|
|
238
|
+
return { ok: true, cleared };
|
|
239
|
+
},
|
|
173
240
|
},
|
|
174
241
|
},
|
|
175
|
-
//
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
lastEventAt: now,
|
|
199
|
-
});
|
|
200
|
-
},
|
|
201
|
-
onDisconnect: () => {
|
|
202
|
-
ctx.setStatus({
|
|
203
|
-
...ctx.getStatus(),
|
|
204
|
-
connected: false,
|
|
205
|
-
});
|
|
206
|
-
},
|
|
207
|
-
onError: (error) => {
|
|
208
|
-
log?.error(`[${CHANNEL_KEY}:${account.accountId}] Gateway error: ${error.message}`);
|
|
209
|
-
ctx.setStatus({
|
|
210
|
-
...ctx.getStatus(),
|
|
211
|
-
lastError: error.message,
|
|
212
|
-
});
|
|
213
|
-
},
|
|
214
|
-
onEvent: () => {
|
|
215
|
-
// 通知框架收到了入站事件,防止 health-monitor 因 lastEventAt 过期而误判 stale-socket
|
|
216
|
-
ctx.setStatus({
|
|
217
|
-
...ctx.getStatus(),
|
|
218
|
-
lastEventAt: Date.now(),
|
|
219
|
-
lastInboundAt: Date.now(),
|
|
220
|
-
});
|
|
221
|
-
},
|
|
222
|
-
});
|
|
223
|
-
},
|
|
224
|
-
/** 登出账户:清除凭证 */
|
|
225
|
-
logoutAccount: async ({ accountId, cfg }) => {
|
|
226
|
-
const nextCfg = { ...cfg };
|
|
227
|
-
const section = nextCfg.channels?.[CHANNEL_KEY];
|
|
228
|
-
let cleared = false;
|
|
229
|
-
if (section) {
|
|
230
|
-
if (accountId === DEFAULT_ACCOUNT_ID && section.apiKeys) {
|
|
231
|
-
delete section.apiKeys;
|
|
232
|
-
cleared = true;
|
|
242
|
+
// ==================== 出站消息适配器 ====================
|
|
243
|
+
outbound: {
|
|
244
|
+
// 基础出站配置
|
|
245
|
+
base: {
|
|
246
|
+
deliveryMode: 'direct', // 交付模式:直接交付
|
|
247
|
+
chunker: chunkText, // 文本分块处理器
|
|
248
|
+
chunkerMode: 'markdown', // 分块模式:Markdown
|
|
249
|
+
textChunkLimit: TEXT_CHUNK_LIMIT, // 文本分块限制大小
|
|
250
|
+
/**
|
|
251
|
+
* 目标解析函数
|
|
252
|
+
* 解析消息发送的目标地址
|
|
253
|
+
*
|
|
254
|
+
* @param {Object} param0 - 参数对象
|
|
255
|
+
* @param {string} param0.to - 显式指定的目标
|
|
256
|
+
* @param {string[]} param0.allowFrom - 允许的来源列表
|
|
257
|
+
* @param {string} param0.mode - 模式('direct' 或 'implicit')
|
|
258
|
+
* @returns {Object} 解析结果
|
|
259
|
+
*/
|
|
260
|
+
resolveTarget: ({ to, allowFrom, mode }) => {
|
|
261
|
+
// 优先使用显式指定的目标地址
|
|
262
|
+
const effectiveTo = to?.trim();
|
|
263
|
+
if (effectiveTo) {
|
|
264
|
+
return { ok: true, to: effectiveTo };
|
|
233
265
|
}
|
|
234
|
-
|
|
235
|
-
if (
|
|
236
|
-
|
|
237
|
-
|
|
266
|
+
// implicit 模式下回退到 allowFrom 第一个非通配符条目
|
|
267
|
+
if (mode === 'implicit' && allowFrom && allowFrom.length > 0) {
|
|
268
|
+
const candidate = allowFrom.find((entry) => entry && entry !== '*');
|
|
269
|
+
if (candidate) {
|
|
270
|
+
return { ok: true, to: candidate };
|
|
271
|
+
}
|
|
238
272
|
}
|
|
239
|
-
|
|
240
|
-
|
|
273
|
+
// 没有找到有效目标,返回错误
|
|
274
|
+
return {
|
|
275
|
+
ok: false,
|
|
276
|
+
error: new Error(`No delivery target for ${CHANNEL_KEY}. Specify a target with --to or configure allowFrom.`),
|
|
277
|
+
};
|
|
278
|
+
},
|
|
241
279
|
},
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
280
|
+
// 附加结果处理
|
|
281
|
+
attachedResults: {
|
|
282
|
+
channel: CHANNEL_KEY, // 频道标识
|
|
283
|
+
/**
|
|
284
|
+
* 发送文本消息
|
|
285
|
+
*
|
|
286
|
+
* @async
|
|
287
|
+
* @param {Object} param0 - 参数对象
|
|
288
|
+
* @param {string} param0.to - 目标地址
|
|
289
|
+
* @param {string} param0.text - 文本内容
|
|
290
|
+
* @param {string} param0.accountId - 账户ID
|
|
291
|
+
* @param {string} param0.replyToId - 回复消息ID
|
|
292
|
+
* @param {OpenClawConfig} param0.cfg - 配置信息
|
|
293
|
+
* @returns {Promise<any>} 发送结果
|
|
294
|
+
*/
|
|
295
|
+
sendText: async ({ to, text, accountId, replyToId, cfg }) => {
|
|
296
|
+
return sendText({ to, text, accountId, replyToId, cfg });
|
|
297
|
+
},
|
|
298
|
+
/**
|
|
299
|
+
* 发送媒体消息
|
|
300
|
+
*
|
|
301
|
+
* @async
|
|
302
|
+
* @param {Object} param0 - 参数对象
|
|
303
|
+
* @param {string} param0.to - 目标地址
|
|
304
|
+
* @param {string} param0.text - 文本内容
|
|
305
|
+
* @param {string} param0.mediaUrl - 媒体文件URL
|
|
306
|
+
* @param {string} param0.accountId - 账户ID
|
|
307
|
+
* @param {string} param0.replyToId - 回复消息ID
|
|
308
|
+
* @param {OpenClawConfig} param0.cfg - 配置信息
|
|
309
|
+
* @returns {Promise<any>} 发送结果
|
|
310
|
+
*/
|
|
311
|
+
sendMedia: async ({ to, text, mediaUrl, accountId, replyToId, cfg }) => {
|
|
312
|
+
return sendMedia({ to, text, mediaUrl, accountId, replyToId, cfg });
|
|
313
|
+
},
|
|
251
314
|
},
|
|
252
|
-
buildChannelSummary: ({ snapshot }) => ({
|
|
253
|
-
configured: snapshot.configured ?? false,
|
|
254
|
-
running: snapshot.running ?? false,
|
|
255
|
-
connected: snapshot.connected ?? false,
|
|
256
|
-
lastConnectedAt: snapshot.lastConnectedAt ?? null,
|
|
257
|
-
lastError: snapshot.lastError ?? null,
|
|
258
|
-
}),
|
|
259
|
-
buildAccountSnapshot: ({ account, runtime, }) => ({
|
|
260
|
-
accountId: account?.accountId ?? DEFAULT_ACCOUNT_ID,
|
|
261
|
-
name: account?.name,
|
|
262
|
-
enabled: account?.enabled ?? false,
|
|
263
|
-
configured: Boolean(account?.allApiKeys?.length),
|
|
264
|
-
tokenSource: account?.secretSource,
|
|
265
|
-
running: runtime?.running ?? false,
|
|
266
|
-
connected: runtime?.connected ?? false,
|
|
267
|
-
lastConnectedAt: runtime?.lastConnectedAt ?? null,
|
|
268
|
-
lastError: runtime?.lastError ?? null,
|
|
269
|
-
}),
|
|
270
315
|
},
|
|
271
|
-
};
|
|
272
|
-
//# sourceMappingURL=channel.js.map
|
|
316
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LightClaw — Setup-only 轻量插件
|
|
3
|
+
*
|
|
4
|
+
* 参照 Discord 的 channel.setup.ts 模式:
|
|
5
|
+
* 仅包含 shared base 骨架(id, meta, config, setup),
|
|
6
|
+
* 不加载 gateway / inbound / outbound 等运行时重依赖。
|
|
7
|
+
*
|
|
8
|
+
* 用于插件未配置/未启用时的 setup 流程,避免拉起不必要的运行时。
|
|
9
|
+
*/
|
|
10
|
+
import { createLightclawPluginBase } from "./shared.js";
|
|
11
|
+
import { lightclawSetupAdapter } from "./setup-core.js";
|
|
12
|
+
export const lightclawSetupPlugin = {
|
|
13
|
+
...createLightclawPluginBase({
|
|
14
|
+
setup: lightclawSetupAdapter,
|
|
15
|
+
}),
|
|
16
|
+
};
|