@rowger_go/chatu 0.1.3

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.
Files changed (77) hide show
  1. package/.github/workflows/ci.yml +30 -0
  2. package/.github/workflows/publish.yml +55 -0
  3. package/INSTALL.md +285 -0
  4. package/INSTALL.zh.md +285 -0
  5. package/LICENSE +21 -0
  6. package/README.md +293 -0
  7. package/README.zh.md +293 -0
  8. package/dist/index.d.ts +96 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +1381 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/index.test.d.ts +5 -0
  13. package/dist/index.test.d.ts.map +1 -0
  14. package/dist/index.test.js +334 -0
  15. package/dist/index.test.js.map +1 -0
  16. package/dist/sdk/adapters/cache.d.ts +94 -0
  17. package/dist/sdk/adapters/cache.d.ts.map +1 -0
  18. package/dist/sdk/adapters/cache.js +158 -0
  19. package/dist/sdk/adapters/cache.js.map +1 -0
  20. package/dist/sdk/adapters/cache.test.d.ts +14 -0
  21. package/dist/sdk/adapters/cache.test.d.ts.map +1 -0
  22. package/dist/sdk/adapters/cache.test.js +178 -0
  23. package/dist/sdk/adapters/cache.test.js.map +1 -0
  24. package/dist/sdk/adapters/default.d.ts +24 -0
  25. package/dist/sdk/adapters/default.d.ts.map +1 -0
  26. package/dist/sdk/adapters/default.js +151 -0
  27. package/dist/sdk/adapters/default.js.map +1 -0
  28. package/dist/sdk/adapters/webhub.d.ts +336 -0
  29. package/dist/sdk/adapters/webhub.d.ts.map +1 -0
  30. package/dist/sdk/adapters/webhub.js +663 -0
  31. package/dist/sdk/adapters/webhub.js.map +1 -0
  32. package/dist/sdk/adapters/websocket.d.ts +133 -0
  33. package/dist/sdk/adapters/websocket.d.ts.map +1 -0
  34. package/dist/sdk/adapters/websocket.js +314 -0
  35. package/dist/sdk/adapters/websocket.js.map +1 -0
  36. package/dist/sdk/core/channel.d.ts +104 -0
  37. package/dist/sdk/core/channel.d.ts.map +1 -0
  38. package/dist/sdk/core/channel.js +158 -0
  39. package/dist/sdk/core/channel.js.map +1 -0
  40. package/dist/sdk/index.d.ts +27 -0
  41. package/dist/sdk/index.d.ts.map +1 -0
  42. package/dist/sdk/index.js +33 -0
  43. package/dist/sdk/index.js.map +1 -0
  44. package/dist/sdk/types/adapters.d.ts +128 -0
  45. package/dist/sdk/types/adapters.d.ts.map +1 -0
  46. package/dist/sdk/types/adapters.js +10 -0
  47. package/dist/sdk/types/adapters.js.map +1 -0
  48. package/dist/sdk/types/channel.d.ts +270 -0
  49. package/dist/sdk/types/channel.d.ts.map +1 -0
  50. package/dist/sdk/types/channel.js +36 -0
  51. package/dist/sdk/types/channel.js.map +1 -0
  52. package/docs/channel/01-overview.md +117 -0
  53. package/docs/channel/02-configuration.md +138 -0
  54. package/docs/channel/03-capabilities.md +86 -0
  55. package/docs/channel/04-api-reference.md +394 -0
  56. package/docs/channel/05-message-protocol.md +194 -0
  57. package/docs/channel/06-security.md +83 -0
  58. package/docs/channel/README.md +30 -0
  59. package/docs/sdk/README.md +13 -0
  60. package/docs/sdk/v2026.1.29-v2026.2.19.md +630 -0
  61. package/jest.config.js +19 -0
  62. package/openclaw.plugin.json +113 -0
  63. package/package.json +74 -0
  64. package/run-poll.mjs +209 -0
  65. package/scripts/reload-plugin.sh +78 -0
  66. package/src/index.test.ts +432 -0
  67. package/src/index.ts +1638 -0
  68. package/src/sdk/adapters/cache.test.ts +205 -0
  69. package/src/sdk/adapters/cache.ts +193 -0
  70. package/src/sdk/adapters/default.ts +196 -0
  71. package/src/sdk/adapters/webhub.ts +857 -0
  72. package/src/sdk/adapters/websocket.ts +378 -0
  73. package/src/sdk/core/channel.ts +230 -0
  74. package/src/sdk/index.ts +36 -0
  75. package/src/sdk/types/adapters.ts +169 -0
  76. package/src/sdk/types/channel.ts +346 -0
  77. package/tsconfig.json +31 -0
@@ -0,0 +1,394 @@
1
+ # Chatu Channel Plugin - API 接口参考
2
+
3
+ > **上一节**:[03-capabilities.md](03-capabilities.md)
4
+ > **下一节**:[05-message-protocol.md](05-message-protocol.md)
5
+
6
+ 本文档描述 Chatu 插件**调用 WebHub 后端**的所有 HTTP/WebSocket 接口。WebHub 后端开发者需要实现这些接口。
7
+
8
+ ---
9
+
10
+ ## 认证方式(通用规则)
11
+
12
+ 大多数接口通过以下请求头认证:
13
+
14
+ ```http
15
+ X-Channel-Token: {accessToken}
16
+ X-Channel-ID: {channelId}
17
+ ```
18
+
19
+ 部分接口使用:
20
+
21
+ ```http
22
+ x-access-token: {accessToken}
23
+ ```
24
+
25
+ 或:
26
+
27
+ ```http
28
+ Authorization: Bearer {accessToken}
29
+ ```
30
+
31
+ 具体认证头见各接口说明。
32
+
33
+ ---
34
+
35
+ ## 1. 健康检查
36
+
37
+ ### `GET /health`
38
+
39
+ 检查后端服务是否可达(心跳探测使用)。
40
+
41
+ **请求头**:无
42
+
43
+ **响应示例**:
44
+ ```json
45
+ { "status": "ok", "timestamp": "2026-02-25T10:00:00.000Z" }
46
+ ```
47
+
48
+ ---
49
+
50
+ ## 2. 注册 / 连接管理
51
+
52
+ ### `POST /api/channel/quick-register`
53
+
54
+ 环境变量方式自动注册,获取频道凭证。
55
+
56
+ **请求头**:无
57
+
58
+ **请求体**:
59
+ ```json
60
+ {
61
+ "key": "your-registration-key",
62
+ "url": "https://your-webhub.example.com"
63
+ }
64
+ ```
65
+
66
+ **响应**:
67
+ ```json
68
+ {
69
+ "data": {
70
+ "channelId": "wh_ch_xxxxxx",
71
+ "accessToken": "wh_xxxxxxxxxxxxxxxx"
72
+ }
73
+ }
74
+ ```
75
+
76
+ ---
77
+
78
+ ### `POST /api/channel/connect`
79
+
80
+ 插件启动时通知后端建立连接。
81
+
82
+ **请求头**:
83
+ ```http
84
+ x-access-token: {accessToken}
85
+ ```
86
+
87
+ **请求体**:
88
+ ```json
89
+ {
90
+ "channelId": "wh_ch_xxxxxx",
91
+ "pluginVersion": "0.1.0",
92
+ "workingDir": "/home/user"
93
+ }
94
+ ```
95
+
96
+ ---
97
+
98
+ ### `POST /api/channel/disconnect`
99
+
100
+ 插件停止时通知后端断开连接。
101
+
102
+ **请求头**:
103
+ ```http
104
+ x-access-token: {accessToken}
105
+ ```
106
+
107
+ **请求体**:
108
+ ```json
109
+ {
110
+ "channelId": "wh_ch_xxxxxx"
111
+ }
112
+ ```
113
+
114
+ ---
115
+
116
+ ## 3. 实时连接(WebSocket)
117
+
118
+ ### `GET /api/channel/ws` ← WebSocket 升级
119
+
120
+ 插件主连接方式,通过 WebSocket 实时接收用户消息。
121
+
122
+ **协议**:`ws://` 或 `wss://`(由 `apiUrl` 的 http/https 自动转换)
123
+
124
+ **认证**:连接时携带 `accessToken` 和 `channelId`(具体参数由后端实现决定)
125
+
126
+ **后端推送消息格式**:见 [05-message-protocol.md](05-message-protocol.md)
127
+
128
+ ---
129
+
130
+ ## 4. 消息收发
131
+
132
+ ### `POST /api/channel/messages`
133
+
134
+ 插件向后端发送 AI 回复。
135
+
136
+ **请求头**:
137
+ ```http
138
+ Content-Type: application/json
139
+ X-Channel-Token: {accessToken}
140
+ X-Channel-ID: {channelId}
141
+ ```
142
+
143
+ **请求体**:见 [05-message-protocol.md#出站消息格式](05-message-protocol.md#2-出站消息格式ai--webhub-后端)
144
+
145
+ **响应**:
146
+ ```json
147
+ {
148
+ "success": true,
149
+ "messageId": "msg_1234567_abc",
150
+ "id": "internal-db-id",
151
+ "deliveredAt": "2026-02-25T10:00:00.000Z"
152
+ }
153
+ ```
154
+
155
+ ---
156
+
157
+ ### `POST /api/channel/messages/:messageId/ack`
158
+
159
+ 确认消息已被插件处理(HTTP 轮询模式使用)。
160
+
161
+ **请求头**:
162
+ ```http
163
+ Content-Type: application/json
164
+ X-Channel-Token: {accessToken}
165
+ ```
166
+
167
+ ---
168
+
169
+ ## 5. 流式输出
170
+
171
+ ### `POST /api/channel/stream/chunk`
172
+
173
+ 发送流式 AI 回复的单个分块。
174
+
175
+ **请求头**:
176
+ ```http
177
+ Content-Type: application/json
178
+ Authorization: Bearer {accessToken}
179
+ ```
180
+
181
+ **请求体**:
182
+ ```json
183
+ {
184
+ "messageId": "msg_1234567_abc",
185
+ "seq": 1,
186
+ "delta": "Hello, "
187
+ }
188
+ ```
189
+
190
+ ---
191
+
192
+ ### `POST /api/channel/stream/done`
193
+
194
+ 通知后端流式回复已完成。
195
+
196
+ **请求头**:
197
+ ```http
198
+ Content-Type: application/json
199
+ Authorization: Bearer {accessToken}
200
+ ```
201
+
202
+ **请求体**:
203
+ ```json
204
+ {
205
+ "messageId": "msg_1234567_abc",
206
+ "totalSeq": 5
207
+ }
208
+ ```
209
+
210
+ ---
211
+
212
+ ## 6. 状态查询
213
+
214
+ ### `GET /api/channel/status`
215
+
216
+ 查询频道在后端的状态。
217
+
218
+ **请求头**:
219
+ ```http
220
+ x-access-token: {accessToken}
221
+ X-Channel-ID: {channelId}
222
+ ```
223
+
224
+ **响应**:
225
+ ```json
226
+ {
227
+ "data": {
228
+ "status": "active"
229
+ }
230
+ }
231
+ ```
232
+
233
+ ---
234
+
235
+ ## 7. 输入中状态
236
+
237
+ ### `POST /api/channel/typing`
238
+
239
+ 通知后端 AI 正在处理(显示"正在输入"提示)。
240
+
241
+ **请求头**:
242
+ ```http
243
+ Content-Type: application/json
244
+ X-Channel-Token: {accessToken}
245
+ ```
246
+
247
+ **请求体**:
248
+ ```json
249
+ {
250
+ "channelId": "wh_ch_xxxxxx"
251
+ }
252
+ ```
253
+
254
+ ---
255
+
256
+ ## 8. 会话命令
257
+
258
+ ### `GET /api/channel/commands`
259
+
260
+ 轮询获取后端下发的会话管理命令(在 HTTP 轮询模式末尾调用)。
261
+
262
+ **请求头**:
263
+ ```http
264
+ X-Channel-Token: {accessToken}
265
+ X-Channel-ID: {channelId}
266
+ ```
267
+
268
+ **查询参数**:`channelId={channelId}`
269
+
270
+ **响应**:
271
+ ```json
272
+ {
273
+ "data": {
274
+ "commands": [
275
+ {
276
+ "id": "cmd_001",
277
+ "commandType": "reset",
278
+ "senderId": "user-123",
279
+ "payload": null
280
+ },
281
+ {
282
+ "id": "cmd_002",
283
+ "commandType": "switch",
284
+ "senderId": "user-456",
285
+ "payload": {
286
+ "targetSessionKey": "session_key_abc",
287
+ "reason": "restore"
288
+ }
289
+ }
290
+ ]
291
+ }
292
+ }
293
+ ```
294
+
295
+ 命令类型:
296
+
297
+ | 类型 | 说明 |
298
+ |------|------|
299
+ | `reset` | 清空该用户的 OpenClaw 会话历史(删除 transcript 文件) |
300
+ | `switch` | 将用户切换到指定历史会话 |
301
+
302
+ ---
303
+
304
+ ### `POST /api/channel/commands/:commandId/ack`
305
+
306
+ 确认命令执行结果。
307
+
308
+ **请求头**:
309
+ ```http
310
+ Content-Type: application/json
311
+ X-Channel-Token: {accessToken}
312
+ ```
313
+
314
+ **请求体**:
315
+ ```json
316
+ {
317
+ "success": true,
318
+ "error": null,
319
+ "channelId": "wh_ch_xxxxxx"
320
+ }
321
+ ```
322
+
323
+ ---
324
+
325
+ ## 9. 跨频道中继
326
+
327
+ ### `POST /api/channel/cross-channel-messages`
328
+
329
+ 将来自其他 OpenClaw 频道的消息同步到 WebHub 前端显示。
330
+
331
+ **请求头**:
332
+ ```http
333
+ Content-Type: application/json
334
+ X-Access-Token: {accessToken}
335
+ ```
336
+
337
+ **请求体**:
338
+ ```json
339
+ {
340
+ "sourceChannel": "whatsapp",
341
+ "direction": "inbound",
342
+ "sender": {
343
+ "id": "user-123",
344
+ "name": "张三"
345
+ },
346
+ "content": "消息内容",
347
+ "sessionKey": "session_key_xxx",
348
+ "dedupId": "openclaw-msg-id"
349
+ }
350
+ ```
351
+
352
+ | 字段 | 类型 | 说明 |
353
+ |------|------|------|
354
+ | `sourceChannel` | string | 来源频道 ID(如 `whatsapp`、`tui`) |
355
+ | `direction` | `"inbound"` \| `"outbound"` | `inbound` = AI 回复,`outbound` = 用户消息 |
356
+ | `sender.id` | string | 发送者 ID(可选) |
357
+ | `sender.name` | string | 发送者显示名 |
358
+ | `content` | string | 消息文本 |
359
+ | `sessionKey` | string | 来源频道的会话 Key |
360
+ | `dedupId` | string | OpenClaw 内部消息 ID(去重用,可选) |
361
+
362
+ ---
363
+
364
+ ## 10. HTTP 轮询(已废弃,仅参考)
365
+
366
+ ### `GET /api/channel/messages/pending`
367
+
368
+ 获取待处理的用户消息列表。当前版本使用 WebSocket 代替,此接口仅供参考。
369
+
370
+ **请求头**:
371
+ ```http
372
+ X-Channel-Token: {accessToken}
373
+ X-Channel-ID: {accountId}
374
+ ```
375
+
376
+ **查询参数**:`channelId={channelId}&after={isoTimestamp}`
377
+
378
+ **响应**:
379
+ ```json
380
+ {
381
+ "data": [
382
+ {
383
+ "id": "msg_001",
384
+ "content": "用户消息内容",
385
+ "sender": { "id": "user-123", "name": "张三" },
386
+ "createdAt": "2026-02-25T10:00:00.000Z"
387
+ }
388
+ ]
389
+ }
390
+ ```
391
+
392
+ ---
393
+
394
+ *最后更新: 2026-02-25*
@@ -0,0 +1,194 @@
1
+ # Chatu Channel Plugin - 消息协议规范
2
+
3
+ > **上一节**:[04-api-reference.md](04-api-reference.md)
4
+ > **下一节**:[06-security.md](06-security.md)
5
+
6
+ 本文档描述 Chatu 插件与 WebHub 后端之间交换的消息格式。
7
+
8
+ ---
9
+
10
+ ## 1. 入站消息格式(WebHub 后端 → 插件)
11
+
12
+ 通过 WebSocket 推送给插件的消息格式:
13
+
14
+ ```typescript
15
+ interface InboundMessage {
16
+ /** 消息唯一 ID */
17
+ id: string;
18
+
19
+ /** 消息文本内容 */
20
+ content: {
21
+ text: string;
22
+ format?: string;
23
+ };
24
+
25
+ /** 发送者信息 */
26
+ sender: {
27
+ id: string;
28
+ displayName?: string;
29
+ };
30
+
31
+ /** 消息时间戳(毫秒) */
32
+ timestamp: number;
33
+
34
+ /** 消息角色(可选,'agent' 表示来自人工操作员) */
35
+ role?: 'agent' | string;
36
+
37
+ /** 媒体附件(可选) */
38
+ media?: Array<{
39
+ type: string;
40
+ url: string;
41
+ }>;
42
+ }
43
+ ```
44
+
45
+ ### 示例
46
+
47
+ ```json
48
+ {
49
+ "id": "msg-abc123",
50
+ "content": {
51
+ "text": "你好,我有一个问题"
52
+ },
53
+ "sender": {
54
+ "id": "user-456",
55
+ "displayName": "张三"
56
+ },
57
+ "timestamp": 1708139100000
58
+ }
59
+ ```
60
+
61
+ ### `role: 'agent'` 的处理
62
+
63
+ 当 `role` 为 `"agent"` 时,消息来源为 WebHub 前端的人工操作员,插件会以 sender ID `webhub-agent` 派发到 OpenClaw AI。普通用户消息 `role` 字段为空。
64
+
65
+ ---
66
+
67
+ ## 2. 出站消息格式(AI → WebHub 后端)
68
+
69
+ 插件调用 `POST /api/channel/messages` 发送 AI 回复:
70
+
71
+ ```typescript
72
+ interface OutboundMessage {
73
+ /** 插件生成的消息 ID(格式:msg_{timestamp}_{random}) */
74
+ messageId: string;
75
+
76
+ /** 目标接收者 */
77
+ target: {
78
+ type: 'user';
79
+ id: string; // 用户 ID(与入站 sender.id 对应)
80
+ };
81
+
82
+ /** 消息内容 */
83
+ content: {
84
+ text: string;
85
+ format: 'plain'; // 当前固定为 plain
86
+ };
87
+
88
+ /** 消息时间戳(毫秒) */
89
+ timestamp: number;
90
+
91
+ /** 消息角色(固定为 'ai') */
92
+ role: 'ai';
93
+
94
+ /** 回复引用(可选) */
95
+ replyTo?: {
96
+ id: string; // 被回复的消息 ID
97
+ };
98
+
99
+ /** 媒体附件(可选) */
100
+ media?: Array<{
101
+ type: string; // 如 'image', 'file'
102
+ url: string;
103
+ }>;
104
+
105
+ /** 消息类型(可选,由后端扩展使用) */
106
+ messageType?: string;
107
+
108
+ /** 元数据(可选,用于去重等) */
109
+ metadata?: {
110
+ dedupId?: string; // OpenClaw 内部消息 ID,用于跨频道去重
111
+ [key: string]: unknown;
112
+ };
113
+ }
114
+ ```
115
+
116
+ ### 示例
117
+
118
+ ```json
119
+ {
120
+ "messageId": "msg_1708139100000_a3f7b",
121
+ "target": {
122
+ "type": "user",
123
+ "id": "user-456"
124
+ },
125
+ "content": {
126
+ "text": "您好!我来为您解答。",
127
+ "format": "plain"
128
+ },
129
+ "timestamp": 1708139102000,
130
+ "role": "ai",
131
+ "replyTo": {
132
+ "id": "msg-abc123"
133
+ }
134
+ }
135
+ ```
136
+
137
+ ---
138
+
139
+ ## 3. 流式消息格式
140
+
141
+ 当 AI 以流式方式生成回复时,插件通过以下两个端点分块发送:
142
+
143
+ ### 3.1 单个分块(`POST /api/channel/stream/chunk`)
144
+
145
+ ```json
146
+ {
147
+ "messageId": "msg_1708139100000_a3f7b",
148
+ "seq": 1,
149
+ "delta": "您好!"
150
+ }
151
+ ```
152
+
153
+ | 字段 | 说明 |
154
+ |------|------|
155
+ | `messageId` | 本次流式回复的消息 ID(全程保持不变) |
156
+ | `seq` | 分块序号,从 1 开始递增 |
157
+ | `delta` | 本次分块的文本增量 |
158
+
159
+ ### 3.2 流式完成(`POST /api/channel/stream/done`)
160
+
161
+ ```json
162
+ {
163
+ "messageId": "msg_1708139100000_a3f7b",
164
+ "totalSeq": 5
165
+ }
166
+ ```
167
+
168
+ ---
169
+
170
+ ## 4. 会话 Key 推导规则
171
+
172
+ OpenClaw 通过以下规则将 `senderId` 映射到唯一会话 Key,相同 `senderId` + `accountId` + `channelId` 始终映射到同一会话:
173
+
174
+ ```
175
+ sessionKey = resolveAgentRoute({
176
+ channel: 'chatu',
177
+ accountId: accountId,
178
+ peer: { kind: 'direct', id: senderId }
179
+ })
180
+ ```
181
+
182
+ 这意味着:
183
+ - 同一用户(`senderId` 相同)在同一账户下始终共享同一 AI 会话
184
+ - 重置会话就是删除该 `sessionKey` 对应的 transcript 文件
185
+
186
+ ---
187
+
188
+ ## 5. Slash 命令授权规则
189
+
190
+ 消息文本以 `/` 开头时,OpenClaw 会将其标记为授权命令(`CommandAuthorized: true`),允许执行 agent slash-commands。普通消息不授权命令执行。
191
+
192
+ ---
193
+
194
+ *最后更新: 2026-02-25*
@@ -0,0 +1,83 @@
1
+ # Chatu Channel Plugin - 安全说明
2
+
3
+ > **上一节**:[05-message-protocol.md](05-message-protocol.md)
4
+ > **返回**:[README.md](README.md)
5
+
6
+ ---
7
+
8
+ ## 1. 认证机制
9
+
10
+ Chatu 插件使用基于 Token 的简单认证,无签名验证要求。
11
+
12
+ ### 1.1 主要认证方式
13
+
14
+ 大多数 API 请求使用以下请求头:
15
+
16
+ ```http
17
+ X-Channel-Token: {accessToken}
18
+ X-Channel-ID: {channelId}
19
+ ```
20
+
21
+ ### 1.2 连接时认证
22
+
23
+ 连接通知和断开通知使用:
24
+
25
+ ```http
26
+ x-access-token: {accessToken}
27
+ ```
28
+
29
+ ### 1.3 流式接口认证
30
+
31
+ 流式输出相关接口使用标准 Bearer 令牌:
32
+
33
+ ```http
34
+ Authorization: Bearer {accessToken}
35
+ ```
36
+
37
+ ### 1.4 跨频道中继认证
38
+
39
+ ```http
40
+ X-Access-Token: {accessToken}
41
+ ```
42
+
43
+ ---
44
+
45
+ ## 2. Token 获取方式
46
+
47
+ | 方式 | 说明 |
48
+ |------|------|
49
+ | **手动配置** | 从 WebHub 管理界面获取 `accessToken` 后直接写入 OpenClaw 配置 |
50
+ | **环境变量注册** | 设置 `CHATU_KEY` + `CHATU_URL`,插件启动时自动调用 `/api/channel/quick-register` 获取 |
51
+ | **密钥注册** | 配置 `secret`(`wh_secret_xxx`),用于自动注册 |
52
+
53
+ ---
54
+
55
+ ## 3. 安全最佳实践
56
+
57
+ ### 3.1 Token 保护
58
+
59
+ - 不要将 `accessToken` 或 `secret` 提交到版本控制
60
+ - 使用环境变量方式(`CHATU_KEY`)代替硬编码凭证
61
+ - 定期轮换 Access Token
62
+
63
+ ### 3.2 网络安全
64
+
65
+ - **生产环境务必使用 HTTPS/WSS**,避免 Token 在传输层泄露
66
+ - `apiUrl` 使用 `https://` 时,WebSocket 自动升级为 `wss://`
67
+
68
+ ### 3.3 SSRF 防护
69
+
70
+ 由于 `apiUrl` 来自用户配置,WebHub 后端应验证 OpenClaw 侧的请求来源合法性。OpenClaw 平台本身也内置了 SSRF 防护机制。
71
+
72
+ ---
73
+
74
+ ## 4. 配置文件安全
75
+
76
+ OpenClaw 配置存储在 `~/.openclaw/openclaw.json`,包含 `accessToken` 等敏感字段。建议:
77
+
78
+ - 确保该文件权限为 `600`(仅所有者可读)
79
+ - 不要将 `~/.openclaw/` 目录内容共享或纳入版本控制
80
+
81
+ ---
82
+
83
+ *最后更新: 2026-02-25*
@@ -0,0 +1,30 @@
1
+ # Chatu Channel Plugin - 文档目录
2
+
3
+ 本目录包含 OpenClaw Chatu 频道插件的技术文档。Chatu 通过 WebSocket(主)和 HTTP 轮询(兜底)与任意 WebHub 后端服务通信。
4
+
5
+ ---
6
+
7
+ ## 目录结构
8
+
9
+ | 文档 | 内容 |
10
+ |------|------|
11
+ | [01-overview.md](01-overview.md) | 架构概述、消息流向、工作原理 |
12
+ | [02-configuration.md](02-configuration.md) | 配置项说明、多账户配置、环境变量 |
13
+ | [03-capabilities.md](03-capabilities.md) | 插件支持的功能矩阵 |
14
+ | [04-api-reference.md](04-api-reference.md) | 插件调用的 WebHub API 端点 |
15
+ | [05-message-protocol.md](05-message-protocol.md) | 入站/出站消息格式规范 |
16
+ | [06-security.md](06-security.md) | 认证方式与安全说明 |
17
+
18
+ ---
19
+
20
+ ## 快速导航
21
+
22
+ - **新接入 WebHub 后端?** → [01-overview.md](01-overview.md)
23
+ - **配置插件?** → [02-configuration.md](02-configuration.md)
24
+ - **实现 WebHub 后端服务?** → [04-api-reference.md](04-api-reference.md) 和 [05-message-protocol.md](05-message-protocol.md)
25
+ - **了解支持的消息类型?** → [03-capabilities.md](03-capabilities.md)
26
+ - **Auth/Token 问题?** → [06-security.md](06-security.md)
27
+
28
+ ---
29
+
30
+ *最后更新: 2026-02-25*
@@ -0,0 +1,13 @@
1
+ # OpenClaw Channel Plugin SDK - 变更说明
2
+
3
+ 本目录记录 OpenClaw Channel Plugin SDK 各版本间的 API 变更,供插件维护者参考。
4
+
5
+ ## 版本变更记录
6
+
7
+ | 文件 | 内容 |
8
+ |------|------|
9
+ | [v2026.1.29-v2026.2.19.md](v2026.1.29-v2026.2.19.md) | SDK `v2026.1.29` → `v2026.2.19` 变更报告 |
10
+
11
+ ---
12
+
13
+ *最后更新: 2026-02-25*