rol-websocket-channel 1.0.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.
Files changed (58) hide show
  1. package/MQTT-API.md +967 -0
  2. package/dist/index.js +430 -0
  3. package/dist/message-handler.js +327 -0
  4. package/dist/src/admin/cli.js +43 -0
  5. package/dist/src/admin/jsonrpc.js +60 -0
  6. package/dist/src/admin/lib/fs.js +30 -0
  7. package/dist/src/admin/lib/paths.js +46 -0
  8. package/dist/src/admin/methods/admin.js +60 -0
  9. package/dist/src/admin/methods/agents-extended.js +235 -0
  10. package/dist/src/admin/methods/index.js +69 -0
  11. package/dist/src/admin/methods/memory.js +360 -0
  12. package/dist/src/admin/methods/models-extended.js +107 -0
  13. package/dist/src/admin/methods/models.js +39 -0
  14. package/dist/src/admin/methods/sessions-extended.js +207 -0
  15. package/dist/src/admin/methods/sessions.js +64 -0
  16. package/dist/src/admin/methods/skills-extended.js +157 -0
  17. package/dist/src/admin/methods/skills-toggle.js +182 -0
  18. package/dist/src/admin/methods/skills.js +384 -0
  19. package/dist/src/admin/methods/system.js +178 -0
  20. package/dist/src/admin/methods/usage.js +1170 -0
  21. package/dist/src/admin/types.js +1 -0
  22. package/dist/src/mqtt/connection-manager.js +155 -0
  23. package/dist/src/mqtt/index.js +5 -0
  24. package/dist/src/mqtt/mqtt-client.js +86 -0
  25. package/dist/src/mqtt/types.js +2 -0
  26. package/dist/src/shared/context.js +24 -0
  27. package/dist/src/shared/wrapper.js +23 -0
  28. package/index.ts +514 -0
  29. package/message-handler.ts +415 -0
  30. package/openclaw.plugin.json +84 -0
  31. package/package.json +35 -0
  32. package/readme.md +32 -0
  33. package/src/admin/cli.ts +60 -0
  34. package/src/admin/jsonrpc.ts +88 -0
  35. package/src/admin/lib/fs.ts +35 -0
  36. package/src/admin/lib/paths.ts +61 -0
  37. package/src/admin/methods/admin.ts +95 -0
  38. package/src/admin/methods/agents-extended.ts +310 -0
  39. package/src/admin/methods/index.ts +103 -0
  40. package/src/admin/methods/memory.ts +546 -0
  41. package/src/admin/methods/models-extended.ts +191 -0
  42. package/src/admin/methods/models.ts +103 -0
  43. package/src/admin/methods/sessions-extended.ts +313 -0
  44. package/src/admin/methods/sessions.ts +122 -0
  45. package/src/admin/methods/skills-extended.ts +249 -0
  46. package/src/admin/methods/skills-toggle.ts +235 -0
  47. package/src/admin/methods/skills.ts +651 -0
  48. package/src/admin/methods/system.ts +203 -0
  49. package/src/admin/methods/usage.ts +1491 -0
  50. package/src/admin/types.ts +46 -0
  51. package/src/mqtt/connection-manager.ts +188 -0
  52. package/src/mqtt/index.ts +6 -0
  53. package/src/mqtt/mqtt-client.ts +119 -0
  54. package/src/mqtt/types.ts +36 -0
  55. package/src/shared/context.ts +33 -0
  56. package/src/shared/wrapper.ts +35 -0
  57. package/tsconfig.json +16 -0
  58. package/types/openclaw.d.ts +74 -0
package/MQTT-API.md ADDED
@@ -0,0 +1,967 @@
1
+ # OpenClaw MQTT API 文档
2
+
3
+ ## 消息格式
4
+
5
+ 所有 MQTT 消息使用以下格式:
6
+
7
+ **请求消息**
8
+ ```json
9
+ {
10
+ "type": "消息类型",
11
+ "trace_id": "唯一追踪ID",
12
+ "data": { /* 请求参数 */ }
13
+ }
14
+ ```
15
+
16
+ **响应消息**
17
+ ```json
18
+ {
19
+ "type": "receiver",
20
+ "trace_id": "对应的请求 trace_id",
21
+ "source": "system",
22
+ "timestamp": 1776331005170,
23
+ "success": true,
24
+ "data": { /* 响应数据 */ }
25
+ }
26
+ ```
27
+
28
+ ---
29
+
30
+ ## 系统管理 (System)
31
+
32
+ ### systemRestart - 重启网关
33
+
34
+ **请求**
35
+ ```json
36
+ {
37
+ "type": "systemRestart",
38
+ "trace_id": "system-restart-001",
39
+ "data": {}
40
+ }
41
+ ```
42
+
43
+ ---
44
+
45
+ ### systemStop - 停止网关 *
46
+
47
+ **请求**
48
+
49
+ ```json
50
+ {
51
+ "type": "systemStop",
52
+ "trace_id": "system-stop-001",
53
+ "data": {}
54
+ }
55
+ ```
56
+
57
+ ---
58
+
59
+ ### systemDoctorFix - 诊断修复
60
+
61
+ **请求**
62
+ ```json
63
+ {
64
+ "type": "systemDoctorFix",
65
+ "trace_id": "system-doctor-001",
66
+ "data": {}
67
+ }
68
+ ```
69
+
70
+ ---
71
+
72
+ ### systemLogs - 查看日志/暂时 *
73
+
74
+ **请求**
75
+ ```json
76
+ {
77
+ "type": "systemLogs",
78
+ "trace_id": "system-logs-001",
79
+ "data": {}
80
+ }
81
+ ```
82
+ ```
83
+ 说明:获取最近 100 条日志。
84
+ ```
85
+
86
+ ---
87
+
88
+ ## 代理管理 (Agents)
89
+
90
+ ### agentsGet - 获取代理配置
91
+
92
+ **说明**
93
+ - `agentsGet` 偏向配置视角,返回默认代理配置、命名代理配置和当前工具配置。
94
+ - 如果前端是做代理列表页,优先使用 `agentsList`。
95
+
96
+ **请求**
97
+ ```json
98
+ {
99
+ "type": "agentsGet",
100
+ "trace_id": "agents-get-001",
101
+ "data": {}
102
+ }
103
+ ```
104
+
105
+ ---
106
+
107
+ ### agentsList - 列出所有代理
108
+
109
+ **说明**
110
+ - `agentsList` 偏向管理列表视角,返回可直接用于列表渲染的 `items`。
111
+ - 返回中通常包含 `defaults` 和所有命名代理。
112
+
113
+ **请求**
114
+ ```json
115
+ {
116
+ "type": "agentsList",
117
+ "trace_id": "agents-list-001",
118
+ "data": {}
119
+ }
120
+ ```
121
+
122
+ ---
123
+
124
+ ### agentsCreate - 创建代理
125
+
126
+ **说明**
127
+ - `agentId` 是代理唯一标识,建议前端统一使用这个字段。
128
+ - `workspace` 表示代理实际工作的目录。
129
+ - `agentDir` 表示代理自己的运行/状态目录。
130
+ - 不传 `workspace` / `agentDir` 时,后端会自动生成默认路径。
131
+
132
+ **请求**
133
+ ```json
134
+ {
135
+ "type": "agentsCreate",
136
+ "trace_id": "agents-create-001",
137
+ "data": {
138
+ "agentId": "my-agent",
139
+ "name": "My Agent",
140
+ "workspace": "/home/woowonjae/.openclaw/workspace/my-agent",
141
+ "agentDir": "/home/woowonjae/.openclaw/agents/my-agent/agent",
142
+ "modelPrimary": "custom-dashscope-aliyuncs-com/qwen-plus",
143
+ "modelProvider": "custom-dashscope-aliyuncs-com",
144
+ "toolsProfile": "coding"
145
+ }
146
+ }
147
+ ```
148
+
149
+ ---
150
+
151
+ ### agentsUpdate - 更新代理
152
+
153
+ **说明**
154
+ - 使用 `agentId` 指定要修改的代理。
155
+ - 不传 `agentId` 时,默认更新 `defaults`。
156
+ - `updates` 目前只支持这些字段:
157
+ - `name`
158
+ - `workspace`
159
+ - `agentDir`
160
+ - `model.primary`
161
+ - `model.provider`
162
+ - `skills`
163
+ - `tools.profile`
164
+ - `behavior`
165
+
166
+ **请求**
167
+
168
+ ```json
169
+ {
170
+ "type": "agentsUpdate",
171
+ "trace_id": "agents-update-001",
172
+ "data": {
173
+ "agentId": "my-agent",
174
+ "updates": {
175
+ "model.primary": "custom-dashscope-aliyuncs-com/qwen-plus",
176
+ "tools.profile": "coding"
177
+ }
178
+ }
179
+ }
180
+ ```
181
+
182
+ **更新默认代理示例**
183
+
184
+ ```json
185
+ {
186
+ "type": "agentsUpdate",
187
+ "trace_id": "agents-update-defaults-001",
188
+ "data": {
189
+ "updates": {
190
+ "model.primary": "custom-dashscope-aliyuncs-com/qwen-plus"
191
+ }
192
+ }
193
+ }
194
+ ```
195
+
196
+ ---
197
+
198
+ ### agentsDelete - 删除代理
199
+
200
+ **请求**
201
+
202
+ ```json
203
+ {
204
+ "type": "agentsDelete",
205
+ "trace_id": "agent-delete-001",
206
+ "data": {
207
+ "agentId": "coder2",
208
+ "purgeFiles": false
209
+ }
210
+ }
211
+ ```
212
+
213
+ ---
214
+
215
+ ## 配置管理 (Config)
216
+
217
+ ### configGet - 获取配置
218
+
219
+ **请求**
220
+
221
+ ```json
222
+ {
223
+ "type": "configGet",
224
+ "trace_id": "config-get-001",
225
+ "data": {}
226
+ }
227
+ ```
228
+
229
+ ---
230
+
231
+ ## 会话管理 (Sessions)
232
+
233
+ ### sessionsList - 列出所有会话
234
+
235
+ **请求**
236
+
237
+ ```json
238
+ {
239
+ "type": "sessionsList",
240
+ "trace_id": "sessions-list-001",
241
+ "data": {}
242
+ }
243
+ ```
244
+
245
+ ---
246
+
247
+ ### sessionsGet - 获取会话详情
248
+
249
+ **说明**
250
+
251
+ - 支持分页参数 `limit` 和 `offset`。
252
+ - 后端单次最多返回 `100` 条消息。
253
+
254
+ **请求**
255
+
256
+ ```json
257
+ {
258
+ "type": "sessionsGet",
259
+ "trace_id": "sessions-get-001",
260
+ "data": {
261
+ "sessionId": "session-123",
262
+ "limit": 50,
263
+ "offset": 0
264
+ }
265
+ }
266
+ ```
267
+
268
+ ---
269
+
270
+ ### sessionsPrepareMessage - 准备消息 *
271
+
272
+ **请求**
273
+
274
+ ```json
275
+ {
276
+ "type": "sessionsPrepareMessage",
277
+ "trace_id": "sessions-prepare-001",
278
+ "data": {
279
+ "sessionId": "session-123",
280
+ "message": "Hello, how are you?"
281
+ }
282
+ }
283
+ ```
284
+
285
+ ---
286
+
287
+ ### sessionsAttachSkill - 附加技能 *
288
+
289
+ **请求**
290
+
291
+ ```json
292
+ {
293
+ "type": "sessionsAttachSkill",
294
+ "trace_id": "sessions-attach-001",
295
+ "data": {
296
+ "sessionId": "session-123",
297
+ "skillSlug": "letsping",
298
+ "message": "按这个 skill 处理"
299
+ }
300
+ }
301
+ ```
302
+
303
+ ---
304
+
305
+ ## 模型管理 (Models)
306
+
307
+ ### modelsGet - 获取模型列表
308
+
309
+ **本次变更**
310
+ | 项目 | 之前 | 现在 | 前端需要调整 |
311
+ | --- | --- | --- | --- |
312
+ | 默认模型字段 | 顶层返回 `defaultAgentPrimaryModel` | 移除顶层默认模型字段,统一返回 `defaults.model` | 改为读取 `defaults.model.primary` / `defaults.model.provider` |
313
+ | agent 模型视图 | 不返回 | 新增 `agents[]` | agent 列表可直接展示每个 agent 的模型 |
314
+ | providers | 返回脱敏 `configuredProviders` | 保持不变 | 无需调整 |
315
+
316
+ **破坏性调整**
317
+ - `defaultAgentPrimaryModel` 已移除。
318
+ - 不再新增 `defaultAgentModelProvider`。
319
+ - 默认模型统一从 `defaults.model` 读取;默认 agent 也会出现在 `agents[]` 的第一项。
320
+
321
+ **说明**
322
+ - 返回默认代理模型、所有 agent 的模型配置视图、模型配置模式,以及脱敏后的 providers。
323
+
324
+ **请求**
325
+ ```json
326
+ {
327
+ "type": "modelsGet",
328
+ "trace_id": "models-get-001",
329
+ "data": {}
330
+ }
331
+ ```
332
+
333
+ **响应 data 主要字段**
334
+ ```json
335
+ {
336
+ "defaults": {
337
+ "model": {
338
+ "primary": "custom-dashscope-aliyuncs-com/qwen-plus",
339
+ "provider": "custom-dashscope-aliyuncs-com"
340
+ }
341
+ },
342
+ "agents": [
343
+ {
344
+ "id": "defaults",
345
+ "name": "defaults",
346
+ "model": {
347
+ "primary": "custom-dashscope-aliyuncs-com/qwen-plus",
348
+ "provider": "custom-dashscope-aliyuncs-com"
349
+ }
350
+ }
351
+ ],
352
+ "configuredProviders": {}
353
+ }
354
+ ```
355
+
356
+ ---
357
+
358
+ ### modelsUpdate - 更新模型配置
359
+
360
+ **本次变更**
361
+ | 项目 | 之前 | 现在 | 前端需要调整 |
362
+ | --- | --- | --- | --- |
363
+ | 切换默认模型 | 只传 `primaryModel`,只写 `agents.defaults.model.primary` | 支持 `primaryModel` + `modelProvider`,会同时写 `primary` 和 `provider` | 默认模型切换表单建议同时提交 `primaryModel` 和 `modelProvider` |
364
+ | provider 推断 | 不处理 | `primaryModel` 为 `providerId/modelName` 时自动推断 `model.provider` | 如果模型值已带 provider 前缀,可以不传 `modelProvider`,但推荐显式传 |
365
+ | 仅切 provider | 不支持 | 支持只传 `modelProvider` | provider 下拉单独保存时可用 |
366
+ | 厂商配置 | `provider` + `providerConfig` | 保持不变 | 继续用于更新 `models.providers[provider]` |
367
+
368
+ **兼容性**
369
+ - 旧请求仍可用:
370
+ ```json
371
+ {
372
+ "type": "modelsUpdate",
373
+ "trace_id": "models-update-old-001",
374
+ "data": {
375
+ "primaryModel": "custom-dashscope-aliyuncs-com/qwen-plus"
376
+ }
377
+ }
378
+ ```
379
+ - 旧请求现在会额外自动写入:
380
+ ```json
381
+ {
382
+ "agents": {
383
+ "defaults": {
384
+ "model": {
385
+ "provider": "custom-dashscope-aliyuncs-com"
386
+ }
387
+ }
388
+ }
389
+ }
390
+ ```
391
+ - 如果 `primaryModel` 没有 `/`,后端不会自动推断 provider,需要前端显式传 `modelProvider`。
392
+
393
+ **请求对比**
394
+ 旧请求:
395
+ ```json
396
+ {
397
+ "type": "modelsUpdate",
398
+ "trace_id": "models-switch-default-old-001",
399
+ "data": {
400
+ "primaryModel": "custom-dashscope-aliyuncs-com/qwen-plus"
401
+ }
402
+ }
403
+ ```
404
+
405
+ 新推荐请求:
406
+ ```json
407
+ {
408
+ "type": "modelsUpdate",
409
+ "trace_id": "models-switch-default-new-001",
410
+ "data": {
411
+ "primaryModel": "custom-dashscope-aliyuncs-com/qwen-plus",
412
+ "modelProvider": "custom-dashscope-aliyuncs-com"
413
+ }
414
+ }
415
+ ```
416
+
417
+ **说明**
418
+ - `openclaw.json` 可以同时保存多个 AI 厂商/provider 的配置,通常放在 `models.providers` 下。
419
+ - 每个 agent 通过 `model.primary` 指向具体模型,格式通常是 `providerId/modelName`,例如 `custom-dashscope-aliyuncs-com/qwen-plus`。
420
+ - `modelsUpdate` 负责远程修改默认代理的 `agents.defaults.model.primary` / `agents.defaults.model.provider`,以及合并写入 `models.providers[provider]` 的配置;真正能否调用成功取决于 OpenClaw 本体是否支持该 provider 配置格式和密钥。
421
+ - `primaryModel` 形如 `providerId/modelName` 时,会自动把 `/` 前面的部分写入默认代理的 `model.provider`。也可以显式传 `modelProvider` 覆盖自动推断。
422
+ - `provider` + `providerConfig` 只用于更新 `models.providers[provider]`,不要把它和默认代理的 `modelProvider` 混用。
423
+ - 如果要修改某个指定代理的模型,使用 `agentsUpdate` 并传入 `agentId`。
424
+ - 可先调用 `configGet` 或 `modelsGet` 查看当前配置。
425
+
426
+ **openclaw.json 多厂商配置示例**
427
+ ```json
428
+ {
429
+ "models": {
430
+ "mode": "custom",
431
+ "providers": {
432
+ "custom-dashscope-aliyuncs-com": {
433
+ "apiKey": "YOUR_DASHSCOPE_API_KEY",
434
+ "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1"
435
+ },
436
+ "custom-openai": {
437
+ "apiKey": "YOUR_OPENAI_API_KEY",
438
+ "baseUrl": "https://api.openai.com/v1"
439
+ }
440
+ }
441
+ },
442
+ "agents": {
443
+ "defaults": {
444
+ "model": {
445
+ "primary": "custom-dashscope-aliyuncs-com/qwen-plus",
446
+ "provider": "custom-dashscope-aliyuncs-com"
447
+ }
448
+ },
449
+ "list": [
450
+ {
451
+ "id": "openai-agent",
452
+ "name": "OpenAI Agent",
453
+ "model": {
454
+ "primary": "custom-openai/gpt-4.1",
455
+ "provider": "custom-openai"
456
+ }
457
+ }
458
+ ]
459
+ }
460
+ }
461
+ ```
462
+
463
+ **请求**
464
+ ```json
465
+ {
466
+ "type": "modelsUpdate",
467
+ "trace_id": "models-update-001",
468
+ "data": {
469
+ "primaryModel": "custom-dashscope-aliyuncs-com/qwen-plus",
470
+ "modelProvider": "custom-dashscope-aliyuncs-com"
471
+ }
472
+ }
473
+ ```
474
+
475
+ **切换默认模型示例**
476
+ ```json
477
+ {
478
+ "type": "modelsUpdate",
479
+ "trace_id": "models-switch-default-001",
480
+ "data": {
481
+ "primaryModel": "custom-dashscope-aliyuncs-com/qwen-plus",
482
+ "modelProvider": "custom-dashscope-aliyuncs-com"
483
+ }
484
+ }
485
+ ```
486
+
487
+ **仅切换默认 provider 示例**
488
+ ```json
489
+ {
490
+ "type": "modelsUpdate",
491
+ "trace_id": "models-switch-provider-001",
492
+ "data": {
493
+ "modelProvider": "custom-dashscope-aliyuncs-com"
494
+ }
495
+ }
496
+ ```
497
+
498
+ **同时更新 provider 配置示例**
499
+ ```json
500
+ {
501
+ "type": "modelsUpdate",
502
+ "trace_id": "models-update-provider-001",
503
+ "data": {
504
+ "primaryModel": "custom-dashscope-aliyuncs-com/qwen-plus",
505
+ "modelProvider": "custom-dashscope-aliyuncs-com",
506
+ "provider": "custom-dashscope-aliyuncs-com",
507
+ "providerConfig": {
508
+ "apiKey": "YOUR_API_KEY",
509
+ "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1"
510
+ }
511
+ }
512
+ }
513
+ ```
514
+
515
+ **切换指定代理模型示例**
516
+ ```json
517
+ {
518
+ "type": "agentsUpdate",
519
+ "trace_id": "agent-switch-model-001",
520
+ "data": {
521
+ "agentId": "my-agent",
522
+ "updates": {
523
+ "model.primary": "custom-dashscope-aliyuncs-com/qwen-plus",
524
+ "model.provider": "custom-dashscope-aliyuncs-com"
525
+ }
526
+ }
527
+ }
528
+ ```
529
+
530
+ **允许更新的 providerConfig 字段**
531
+ - `apiKey`
532
+ - `baseUrl`
533
+ - `model`
534
+ - `temperature`
535
+ - `maxTokens`
536
+ - `topP`
537
+ - `frequencyPenalty`
538
+ - `presencePenalty`
539
+
540
+ ---
541
+
542
+ ## 使用统计 (Usage)
543
+
544
+ ### usageSummary - 获取使用统计摘要
545
+
546
+ **请求**
547
+ ```json
548
+ {
549
+ "type": "usageSummary",
550
+ "trace_id": "usage-summary-001",
551
+ "data": {}
552
+ }
553
+ ```
554
+
555
+ ---
556
+
557
+ ### usagePageSummary - 获取页面使用统计
558
+
559
+ **说明**
560
+ - 用途:获取一个完整的使用统计概览页面,包含多个维度的汇总数据。
561
+ - 返回内容:
562
+ - `totals` - 总体统计指标(token、成本、消息数等)
563
+ - `topModels` - 使用最多的前 10 个模型排行
564
+ - `topProviders` - 使用最多的前 10 个提供商排行
565
+ - `topTools` - 使用最多的前 10 个工具排行
566
+ - `topAgents` - 使用最多的前 10 个代理排行
567
+ - `topChannels` - 使用最多的前 10 个渠道排行
568
+ - `sessions` - 会话列表
569
+ - `meta` - 元数据(扫描的会话数、数据源等)
570
+
571
+ **请求**
572
+ ```json
573
+ {
574
+ "type": "usagePageSummary",
575
+ "trace_id": "usage-page-001",
576
+ "data": {}
577
+ }
578
+ ```
579
+
580
+ ---
581
+
582
+ ### usageTimeseries - 获取时间序列数据
583
+
584
+ **说明**
585
+ - 用途:获取按时间分组的使用数据,用于绘制趋势图表。
586
+ - 参数:
587
+ - `granularity` - 时间粒度(`day` / `hour` / `week` 等)
588
+ - 返回内容:
589
+ - `series` - 时间序列数组,每个元素表示一个时间桶
590
+ - `ts` - 当前时间桶的起始时间
591
+ - `messages` - 当前时间桶内的消息数
592
+ - `sessions` - 当前时间桶内涉及的会话数
593
+ - `inputTokens` - 当前时间桶内输入 token 总数
594
+ - `outputTokens` - 当前时间桶内输出 token 总数
595
+ - `cacheReadTokens` - 当前时间桶内缓存读取 token 总数
596
+ - `cacheWriteTokens` - 当前时间桶内缓存写入 token 总数
597
+ - `totalTokens` - 当前时间桶内总 token 数
598
+ - `totalCostUsd` - 当前时间桶内总成本
599
+ - `toolCalls` - 当前时间桶内工具调用次数
600
+ - `errors` - 当前时间桶内错误次数
601
+ - `avgTokensPerMessage` - 当前时间桶内平均每条消息的 token 数
602
+ - `throughputTokPerMin` - 当前时间桶内折算的 token 吞吐量(token/分钟)
603
+
604
+ **请求**
605
+ ```json
606
+ {
607
+ "type": "usageTimeseries",
608
+ "trace_id": "usage-timeseries-001",
609
+ "data": {
610
+ "granularity": "day"
611
+ }
612
+ }
613
+ ```
614
+
615
+ ---
616
+
617
+ ### usageBreakdown - 获取使用明细
618
+
619
+ **说明**
620
+ - 参数:
621
+ - `dimension` - 分组维度(`model` / `provider` / `agent` / `channel` / `tool`)
622
+ - `limit` - 返回前 N 条记录(默认 20)
623
+ - `sortBy` - 排序字段(`totalTokens` / `totalCostUsd` 等)
624
+ - `order` - 排序方向(`asc` / `desc`)
625
+ - 返回内容:
626
+ - `rows` - 按维度分组的统计行,每行包含:
627
+ - 维度值(例如具体的模型名)
628
+ - 该维度的使用统计(token、成本、消息数等)
629
+ - 占总量的百分比
630
+
631
+ **请求**
632
+ ```json
633
+ {
634
+ "type": "usageBreakdown",
635
+ "trace_id": "usage-breakdown-001",
636
+ "data": {
637
+ "dimension": "model"
638
+ }
639
+ }
640
+ ```
641
+
642
+ ---
643
+
644
+ ## 技能管理 (Skills)
645
+
646
+ **说明**
647
+ - 所有技能相关操作统一使用 `slug`,不要使用 `skillId`。
648
+
649
+ ### skillsListInstalled - 列出已安装技能
650
+
651
+ **请求**
652
+ ```json
653
+ {
654
+ "type": "skillsListInstalled",
655
+ "trace_id": "skills-list-001",
656
+ "data": {}
657
+ }
658
+ ```
659
+
660
+ ---
661
+
662
+ ### skillsInstallFromNpm - 从 NPM 安装技能
663
+
664
+ **请求**
665
+
666
+ ```json
667
+ {
668
+ "type": "skillsInstallFromNpm",
669
+ "trace_id": "skills-install-001",
670
+ "data": {
671
+ "package": "@openclaw/skill-example",
672
+ "scope": "global"
673
+ }
674
+ }
675
+ ```
676
+
677
+ ---
678
+
679
+ ### skillsGetInstalled - 获取已安装技能详情
680
+
681
+ **请求**
682
+ ```json
683
+ {
684
+ "type": "skillsGetInstalled",
685
+ "trace_id": "skills-get-001",
686
+ "data": {
687
+ "slug": "letsping"
688
+ }
689
+ }
690
+ ```
691
+
692
+ ---
693
+
694
+ ### skillsUninstall - 卸载技能 *
695
+
696
+ **请求**
697
+ ```json
698
+ {
699
+ "type": "skillsUninstall",
700
+ "trace_id": "skills-uninstall-001",
701
+ "data": {
702
+ "slug": "letsping",
703
+ "scope": "global"
704
+ }
705
+ }
706
+ ```
707
+
708
+ ---
709
+
710
+ ### skillsToggle - 启用/停用技能
711
+
712
+ **请求**
713
+
714
+ ```json
715
+ {
716
+ "type": "skillsToggle",
717
+ "trace_id": "skills-toggle-001",
718
+ "data": {
719
+ "slug": "letsping",
720
+ "enabled": true
721
+ }
722
+ }
723
+ ```
724
+
725
+ ---
726
+
727
+ ## 记忆管理 (Memory)
728
+
729
+ **说明**
730
+ - 当前备份/恢复白名单固定为:
731
+ - `openclaw.json`
732
+ - `workspace/AGENTS.md`
733
+ - `workspace/HEARTBEAT.md`
734
+ - `workspace/IDENTITY.md`
735
+ - `workspace/MEMORY.md`
736
+ - `workspace/SoUL.md`
737
+ - `workspace/TooLS.md`
738
+ - `workspace/USER.md`
739
+ - `credentials/*`
740
+ - 不在上述范围内的文件不会进入备份,也不会参与恢复。
741
+
742
+ ### memoryListFiles - 列出记忆文件
743
+
744
+ **请求**
745
+ ```json
746
+ {
747
+ "type": "memoryListFiles",
748
+ "trace_id": "memory-list-001",
749
+ "data": {}
750
+ }
751
+ ```
752
+
753
+ ---
754
+
755
+ ### memoryGetFile - 获取记忆文件
756
+
757
+ **请求**
758
+ ```json
759
+ {
760
+ "type": "memoryGetFile",
761
+ "trace_id": "memory-get-001",
762
+ "data": {
763
+ "path": "workspace/MEMORY.md"
764
+ }
765
+ }
766
+ ```
767
+
768
+ ---
769
+
770
+ ### memoryBackup - 创建备份快照 *
771
+
772
+ **请求**
773
+ ```json
774
+ {
775
+ "type": "memoryBackup",
776
+ "trace_id": "memory-backup-001",
777
+ "data": {}
778
+ }
779
+ ```
780
+
781
+ ---
782
+
783
+ ### memoryExportZip - 导出 ZIP
784
+
785
+ **请求**
786
+
787
+ ```json
788
+ {
789
+ "type": "memoryExportZip",
790
+ "trace_id": "memory-export-001",
791
+ "data": {}
792
+ }
793
+ ```
794
+
795
+ ---
796
+
797
+ ### memoryGetPresignedPost - 获取预签名上传参数
798
+
799
+ **请求**
800
+ ```json
801
+ {
802
+ "type": "memoryGetPresignedPost",
803
+ "trace_id": "memory-presigned-001",
804
+ "data": {
805
+ "body": {
806
+ "file_name": "memory-backup-2026-04-17.zip",
807
+ "dir": "memory/2026/04/17/"
808
+ }
809
+ }
810
+ }
811
+ ```
812
+
813
+ ---
814
+
815
+ ### memoryCreateBackupRecord - 创建备份记录
816
+
817
+ **请求**
818
+
819
+ ```json
820
+ {
821
+ "type": "memoryCreateBackupRecord",
822
+ "trace_id": "memory-backup-record-001",
823
+ "data": {
824
+ "body": {
825
+ "user_id": 1,
826
+ "source_file_key": "memory/2026/04/17/memory-backup-2026-04-17.zip",
827
+ "source_file_name": "memory-backup-2026-04-17.zip",
828
+ "source_file_url": "https://example-bucket.s3.amazonaws.com/memory/2026/04/17/memory-backup-2026-04-17.zip",
829
+ "backup_location": "s3",
830
+ "remark": "OpenClaw memory backup",
831
+ "extend_json": {
832
+ "upload_dir": "memory/2026/04/17/"
833
+ }
834
+ }
835
+ }
836
+ }
837
+ ```
838
+
839
+ ---
840
+
841
+ ### memoryImportZip - 导入 ZIP
842
+
843
+ **说明**
844
+ - 同一个 `type` 同时支持:
845
+ - 全量恢复:不传 `includePaths`
846
+ - 指定文件恢复:传 `includePaths`
847
+
848
+ **请求**
849
+
850
+ ```json
851
+ {
852
+ "type": "memoryImportZip",
853
+ "trace_id": "memory-import-001",
854
+ "data": {
855
+ "zipPath": "path/to/backup.zip",
856
+ "createBackup": true,
857
+ "includePaths": [
858
+ "openclaw.json",
859
+ "workspace/MEMORY.md",
860
+ "credentials/"
861
+ ]
862
+ }
863
+ }
864
+ ```
865
+
866
+ ---
867
+
868
+ ## 其他消息类型
869
+
870
+ **说明**
871
+ - `ping`、`status`、`echo` 是基础调试类消息。
872
+ - `systemRestart`、`systemStop`、`systemDoctorFix`、`systemLogs` 这类系统运维命令联调前建议先实际调用确认一次。
873
+
874
+ ### ping - 健康检查
875
+
876
+ **请求**
877
+
878
+ ```json
879
+ {
880
+ "type": "ping",
881
+ "trace_id": "ping-001",
882
+ "data": {}
883
+ }
884
+ ```
885
+
886
+ ---
887
+
888
+ ### status - 获取状态
889
+
890
+ **请求**
891
+ ```json
892
+ {
893
+ "type": "status",
894
+ "trace_id": "status-001",
895
+ "data": {}
896
+ }
897
+ ```
898
+
899
+ ---
900
+
901
+ ### echo - 回显测试
902
+
903
+ **请求**
904
+ ```json
905
+ {
906
+ "type": "echo",
907
+ "trace_id": "echo-001",
908
+ "data": {
909
+ "message": "test"
910
+ }
911
+ }
912
+ ```
913
+
914
+ ---
915
+
916
+ ## 消息类型快速索引
917
+
918
+ ### 系统管理
919
+ - `systemRestart`
920
+ - `systemStop`
921
+ - `systemDoctorFix`
922
+ - `systemLogs`
923
+ - `ping`
924
+ - `status`
925
+ - `echo`
926
+
927
+ ### 代理管理
928
+ - `agentsGet`
929
+ - `agentsList`
930
+ - `agentsCreate`
931
+ - `agentsUpdate`
932
+ - `agentsDelete`
933
+
934
+ ### 配置管理
935
+ - `configGet`
936
+
937
+ ### 会话管理
938
+ - `sessionsList`
939
+ - `sessionsGet`
940
+ - `sessionsPrepareMessage`
941
+ - `sessionsAttachSkill`
942
+
943
+ ### 模型管理
944
+ - `modelsGet`
945
+ - `modelsUpdate`
946
+
947
+ ### 使用统计
948
+ - `usageSummary`
949
+ - `usagePageSummary`
950
+ - `usageTimeseries`
951
+ - `usageBreakdown`
952
+
953
+ ### 技能管理
954
+ - `skillsListInstalled`
955
+ - `skillsInstallFromNpm`
956
+ - `skillsGetInstalled`
957
+ - `skillsUninstall`
958
+ - `skillsToggle`
959
+
960
+ ### 记忆管理
961
+ - `memoryListFiles`
962
+ - `memoryGetFile`
963
+ - `memoryBackup`
964
+ - `memoryExportZip`
965
+ - `memoryGetPresignedPost`
966
+ - `memoryCreateBackupRecord`
967
+ - `memoryImportZip`