@openclaw/qqbot 2026.7.1 → 2026.7.2-beta.2

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 (41) hide show
  1. package/dist/api.js +8 -7
  2. package/dist/{channel-entry-C5YdhX3Y.js → channel-entry-CA2T2sf8.js} +4 -4
  3. package/dist/channel-entry-api.js +1 -1
  4. package/dist/{channel-D1UztsnG.js → channel-nz3Mkify.js} +99 -54
  5. package/dist/channel-plugin-api.js +1 -1
  6. package/dist/{channel.setup-2ItDYKhz.js → channel.setup-CNoBtKXQ.js} +1 -1
  7. package/dist/{config-C1qZbh0K.js → config-CpOXnoEc.js} +2 -2
  8. package/dist/{config-schema-JZEf1dvB.js → config-schema-D7MaH5X5.js} +61 -76
  9. package/dist/doctor-contract-api.js +4 -10
  10. package/dist/{gateway-pJQppxe4.js → gateway-D8uYPtoy.js} +286 -174
  11. package/dist/{group-o0GmovSf.js → group-BVHG8qUZ.js} +40 -23
  12. package/dist/{handler-runtime-zQvT6SrI.js → handler-runtime-S1_XF8on.js} +8 -12
  13. package/dist/{log-DEtcoDWe.js → log-Da4jz75I.js} +4 -8
  14. package/dist/{outbound-BIrfvvFJ.js → outbound-FOG4zNLY.js} +8 -142
  15. package/dist/{runtime-DodcT_fQ.js → runtime-CyjBiGD2.js} +2 -2
  16. package/dist/runtime-api.js +1 -1
  17. package/dist/secret-contract-api.js +6 -22
  18. package/dist/{sender-CjDuU-uz.js → sender-BAUHZqDW.js} +225 -66
  19. package/dist/setup-plugin-api.js +1 -1
  20. package/dist/state-keys-jLJ2SmJA.js +225 -0
  21. package/dist/{tools-UJJ-tLHP.js → tools-CC5CKQig.js} +71 -26
  22. package/dist/tools-api.js +1 -1
  23. package/node_modules/p-map/index.d.ts +155 -0
  24. package/node_modules/p-map/index.js +284 -0
  25. package/node_modules/p-map/license +9 -0
  26. package/node_modules/p-map/package.json +57 -0
  27. package/node_modules/p-map/readme.md +190 -0
  28. package/node_modules/parse-ms/index.d.ts +30 -0
  29. package/node_modules/parse-ms/index.js +45 -0
  30. package/node_modules/parse-ms/license +9 -0
  31. package/node_modules/parse-ms/package.json +47 -0
  32. package/node_modules/parse-ms/readme.md +46 -0
  33. package/node_modules/pretty-ms/index.d.ts +157 -0
  34. package/node_modules/pretty-ms/index.js +149 -0
  35. package/node_modules/pretty-ms/license +9 -0
  36. package/node_modules/pretty-ms/package.json +55 -0
  37. package/node_modules/pretty-ms/readme.md +179 -0
  38. package/npm-shrinkwrap.json +44 -3
  39. package/openclaw.plugin.json +105 -133
  40. package/package.json +8 -4
  41. package/dist/state-keys-CQKlAFyo.js +0 -141
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "pretty-ms",
3
+ "version": "9.3.0",
4
+ "description": "Convert milliseconds to a human readable string: `1337000000` → `15d 11h 23m 20s`",
5
+ "license": "MIT",
6
+ "repository": "sindresorhus/pretty-ms",
7
+ "funding": "https://github.com/sponsors/sindresorhus",
8
+ "author": {
9
+ "name": "Sindre Sorhus",
10
+ "email": "sindresorhus@gmail.com",
11
+ "url": "https://sindresorhus.com"
12
+ },
13
+ "type": "module",
14
+ "exports": {
15
+ "types": "./index.d.ts",
16
+ "default": "./index.js"
17
+ },
18
+ "sideEffects": false,
19
+ "engines": {
20
+ "node": ">=18"
21
+ },
22
+ "scripts": {
23
+ "test": "xo && ava && tsd"
24
+ },
25
+ "files": [
26
+ "index.js",
27
+ "index.d.ts"
28
+ ],
29
+ "keywords": [
30
+ "pretty",
31
+ "prettify",
32
+ "human",
33
+ "humanize",
34
+ "humanized",
35
+ "readable",
36
+ "time",
37
+ "ms",
38
+ "milliseconds",
39
+ "duration",
40
+ "period",
41
+ "range",
42
+ "text",
43
+ "string",
44
+ "number",
45
+ "hrtime"
46
+ ],
47
+ "dependencies": {
48
+ "parse-ms": "^4.0.0"
49
+ },
50
+ "devDependencies": {
51
+ "ava": "^6.2.0",
52
+ "tsd": "^0.31.2",
53
+ "xo": "^0.59.3"
54
+ }
55
+ }
@@ -0,0 +1,179 @@
1
+ # pretty-ms
2
+
3
+ > Convert milliseconds to a human readable string: `1337000000` → `15d 11h 23m 20s`
4
+
5
+ ## Install
6
+
7
+ ```sh
8
+ npm install pretty-ms
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```js
14
+ import prettyMilliseconds from 'pretty-ms';
15
+
16
+ prettyMilliseconds(1337000000);
17
+ //=> '15d 11h 23m 20s'
18
+
19
+ prettyMilliseconds(1337000000n);
20
+ //=> '15d 11h 23m 20s'
21
+
22
+ prettyMilliseconds(1337);
23
+ //=> '1.3s'
24
+
25
+ prettyMilliseconds(133);
26
+ //=> '133ms'
27
+
28
+ // `compact` option
29
+ prettyMilliseconds(1337, {compact: true});
30
+ //=> '1s'
31
+
32
+ // `verbose` option
33
+ prettyMilliseconds(1335669000, {verbose: true});
34
+ //=> '15 days 11 hours 1 minute 9 seconds'
35
+
36
+ // `colonNotation` option
37
+ prettyMilliseconds(95500, {colonNotation: true});
38
+ //=> '1:35.5'
39
+
40
+ // `formatSubMilliseconds` option
41
+ prettyMilliseconds(100.400080, {formatSubMilliseconds: true})
42
+ //=> '100ms 400µs 80ns'
43
+
44
+ // `subSecondsAsDecimals` option
45
+ prettyMilliseconds(900, {subSecondsAsDecimals: true});
46
+ //=> '0.9s'
47
+
48
+ // Can be useful for time durations
49
+ prettyMilliseconds(new Date(2014, 0, 1, 10, 40) - new Date(2014, 0, 1, 10, 5))
50
+ //=> '35m'
51
+ ```
52
+
53
+ ## API
54
+
55
+ ### prettyMilliseconds(milliseconds, options?)
56
+
57
+ #### milliseconds
58
+
59
+ Type: `number | bigint`
60
+
61
+ Milliseconds to humanize.
62
+
63
+ #### options
64
+
65
+ Type: `object`
66
+
67
+ ##### secondsDecimalDigits
68
+
69
+ Type: `number`\
70
+ Default: `1`
71
+
72
+ Number of digits to appear after the seconds decimal point.
73
+
74
+ ##### millisecondsDecimalDigits
75
+
76
+ Type: `number`\
77
+ Default: `0`
78
+
79
+ Number of digits to appear after the milliseconds decimal point.
80
+
81
+ Useful in combination with [`process.hrtime()`](https://nodejs.org/api/process.html#process_process_hrtime_time).
82
+
83
+ ##### keepDecimalsOnWholeSeconds
84
+
85
+ Type: `boolean`\
86
+ Default: `false`
87
+
88
+ Keep milliseconds on whole seconds: `13s` → `13.0s`.
89
+
90
+ Useful when you are showing a number of seconds spent on an operation and don't want the width of the output to change when hitting a whole number.
91
+
92
+ ##### compact
93
+
94
+ Type: `boolean`\
95
+ Default: `false`
96
+
97
+ Only show the first unit: `1h 10m` → `1h`.
98
+
99
+ Also ensures that `millisecondsDecimalDigits` and `secondsDecimalDigits` are both set to `0`.
100
+
101
+ ##### unitCount
102
+
103
+ Type: `number`\
104
+ Default: `Infinity`
105
+
106
+ Number of units to show. Setting `compact` to `true` overrides this option.
107
+
108
+ ##### verbose
109
+
110
+ Type: `boolean`\
111
+ Default: `false`
112
+
113
+ Use full-length units: `5h 1m 45s` → `5 hours 1 minute 45 seconds`
114
+
115
+ ##### separateMilliseconds
116
+
117
+ Type: `boolean`\
118
+ Default: `false`
119
+
120
+ Show milliseconds separately. This means they won't be included in the decimal part of the seconds.
121
+
122
+ ##### formatSubMilliseconds
123
+
124
+ Type: `boolean`\
125
+ Default: `false`
126
+
127
+ Show microseconds and nanoseconds.
128
+
129
+ ##### colonNotation
130
+
131
+ Type: `boolean`\
132
+ Default: `false`
133
+
134
+ Display time using colon notation: `5h 1m 45s` → `5:01:45`. Always shows time in at least minutes: `1s` → `0:01`
135
+
136
+ Useful when you want to display time without the time units, similar to a digital watch.
137
+
138
+ Setting `colonNotation` to `true` overrides the following options to `false`:
139
+ - `compact`
140
+ - `formatSubMilliseconds`
141
+ - `separateMilliseconds`
142
+ - `verbose`
143
+
144
+ ##### hideYear
145
+
146
+ Type: `boolean`\
147
+ Default: `false`
148
+
149
+ Hides the year and shows the hidden year additionally as days (365 per year): `1y 3d 5h 1m 45s` → `368d 5h 1m 45s`.
150
+
151
+ ##### hideYearAndDays
152
+
153
+ Type: `boolean`\
154
+ Default: `false`
155
+
156
+ Hides the year and days and shows the hidden values additionally as hours: `1y 3d 5h 1m 45s` → `8837h 1m 45s`.
157
+
158
+ ##### hideSeconds
159
+
160
+ Type: `boolean`\
161
+ Default: `false`
162
+
163
+ Hides the seconds: `1y 3d 5h 1m 45s` → `1y 3d 5h 1m`.
164
+
165
+ ##### subSecondsAsDecimals
166
+
167
+ Type: `boolean`\
168
+ Default: `false`
169
+
170
+ Show sub-second values as decimal seconds: `900ms` → `0.9s`.
171
+
172
+ Useful for progress indicators where you want consistent unit format to prevent flickering.
173
+
174
+ ## Related
175
+
176
+ - [pretty-ms-cli](https://github.com/sindresorhus/pretty-ms-cli) - CLI for this module
177
+ - [parse-ms](https://github.com/sindresorhus/parse-ms) - Parse milliseconds into an object
178
+ - [to-milliseconds](https://github.com/sindresorhus/to-milliseconds) - Convert an object of time properties to milliseconds
179
+ - [pretty-bytes](https://github.com/sindresorhus/pretty-bytes) - Convert bytes to a human readable string
@@ -1,21 +1,23 @@
1
1
  {
2
2
  "name": "@openclaw/qqbot",
3
- "version": "2026.7.1",
3
+ "version": "2026.7.2-beta.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/qqbot",
9
- "version": "2026.7.1",
9
+ "version": "2026.7.2-beta.2",
10
10
  "dependencies": {
11
11
  "@tencent-connect/qqbot-connector": "1.1.0",
12
12
  "mpg123-decoder": "1.0.3",
13
+ "p-map": "7.0.5",
14
+ "pretty-ms": "9.3.0",
13
15
  "silk-wasm": "3.7.1",
14
16
  "ws": "8.21.0",
15
17
  "zod": "4.4.3"
16
18
  },
17
19
  "peerDependencies": {
18
- "openclaw": ">=2026.7.1"
20
+ "openclaw": ">=2026.7.2-beta.2"
19
21
  },
20
22
  "peerDependenciesMeta": {
21
23
  "openclaw": {
@@ -64,6 +66,45 @@
64
66
  "url": "https://github.com/sponsors/eshaz"
65
67
  }
66
68
  },
69
+ "node_modules/p-map": {
70
+ "version": "7.0.5",
71
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.5.tgz",
72
+ "integrity": "sha512-e8vJF4XdVkzqqSHguEMz41mQO1wKwxKm5ENrUJQUu9kLDCtn83cxbyHZcszr4QC5zEA7WffRRC4gsTecC7J9oA==",
73
+ "license": "MIT",
74
+ "engines": {
75
+ "node": ">=18"
76
+ },
77
+ "funding": {
78
+ "url": "https://github.com/sponsors/sindresorhus"
79
+ }
80
+ },
81
+ "node_modules/parse-ms": {
82
+ "version": "4.0.0",
83
+ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
84
+ "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
85
+ "license": "MIT",
86
+ "engines": {
87
+ "node": ">=18"
88
+ },
89
+ "funding": {
90
+ "url": "https://github.com/sponsors/sindresorhus"
91
+ }
92
+ },
93
+ "node_modules/pretty-ms": {
94
+ "version": "9.3.0",
95
+ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz",
96
+ "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==",
97
+ "license": "MIT",
98
+ "dependencies": {
99
+ "parse-ms": "^4.0.0"
100
+ },
101
+ "engines": {
102
+ "node": ">=18"
103
+ },
104
+ "funding": {
105
+ "url": "https://github.com/sponsors/sindresorhus"
106
+ }
107
+ },
67
108
  "node_modules/qrcode-terminal": {
68
109
  "version": "0.12.0",
69
110
  "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
@@ -196,29 +196,22 @@
196
196
  ]
197
197
  },
198
198
  "streaming": {
199
- "anyOf": [
200
- {
201
- "type": "boolean"
199
+ "type": "object",
200
+ "additionalProperties": false,
201
+ "properties": {
202
+ "mode": {
203
+ "type": "string",
204
+ "enum": [
205
+ "off",
206
+ "partial"
207
+ ],
208
+ "default": "partial"
202
209
  },
203
- {
204
- "type": "object",
205
- "additionalProperties": true,
206
- "properties": {
207
- "mode": {
208
- "type": "string",
209
- "enum": [
210
- "off",
211
- "partial"
212
- ],
213
- "default": "partial"
214
- },
215
- "c2cStreamApi": {
216
- "type": "boolean",
217
- "description": "Use QQ C2C official stream_messages API (single-message typing-style updates)."
218
- }
219
- }
210
+ "nativeTransport": {
211
+ "type": "boolean",
212
+ "description": "Use QQ's official C2C stream_messages API for DM replies (single-message typing-style updates)."
220
213
  }
221
- ]
214
+ }
222
215
  },
223
216
  "groups": {
224
217
  "$ref": "#/$defs/groups"
@@ -280,29 +273,22 @@
280
273
  ]
281
274
  },
282
275
  "streaming": {
283
- "anyOf": [
284
- {
285
- "type": "boolean"
286
- },
287
- {
288
- "type": "object",
289
- "additionalProperties": false,
290
- "properties": {
291
- "mode": {
292
- "type": "string",
293
- "enum": [
294
- "off",
295
- "partial"
296
- ],
297
- "default": "partial"
298
- },
299
- "c2cStreamApi": {
300
- "type": "boolean",
301
- "description": "Use QQ C2C official stream_messages API (single-message typing-style updates)."
302
- }
303
- }
276
+ "type": "object",
277
+ "additionalProperties": false,
278
+ "properties": {
279
+ "mode": {
280
+ "type": "string",
281
+ "enum": [
282
+ "off",
283
+ "partial"
284
+ ],
285
+ "default": "partial"
286
+ },
287
+ "nativeTransport": {
288
+ "type": "boolean",
289
+ "description": "Use QQ's official C2C stream_messages API for DM replies (single-message typing-style updates)."
304
290
  }
305
- ]
291
+ }
306
292
  },
307
293
  "accounts": {
308
294
  "type": "object",
@@ -452,8 +438,8 @@
452
438
  "type": "string",
453
439
  "enum": [
454
440
  "open",
455
- "allowlist",
456
- "disabled"
441
+ "disabled",
442
+ "allowlist"
457
443
  ]
458
444
  },
459
445
  "systemPrompt": {
@@ -503,31 +489,24 @@
503
489
  ]
504
490
  },
505
491
  "streaming": {
506
- "anyOf": [
507
- {
508
- "type": "boolean"
492
+ "type": "object",
493
+ "properties": {
494
+ "mode": {
495
+ "default": "partial",
496
+ "type": "string",
497
+ "enum": [
498
+ "off",
499
+ "partial"
500
+ ]
509
501
  },
510
- {
511
- "type": "object",
512
- "properties": {
513
- "mode": {
514
- "default": "partial",
515
- "type": "string",
516
- "enum": [
517
- "off",
518
- "partial"
519
- ]
520
- },
521
- "c2cStreamApi": {
522
- "type": "boolean"
523
- }
524
- },
525
- "required": [
526
- "mode"
527
- ],
528
- "additionalProperties": {}
502
+ "nativeTransport": {
503
+ "type": "boolean"
529
504
  }
530
- ]
505
+ },
506
+ "required": [
507
+ "mode"
508
+ ],
509
+ "additionalProperties": false
531
510
  },
532
511
  "execApprovals": {
533
512
  "type": "object",
@@ -583,26 +562,6 @@
583
562
  "requireMention": {
584
563
  "type": "boolean"
585
564
  },
586
- "commandLevel": {
587
- "type": "string",
588
- "enum": [
589
- "all",
590
- "safety",
591
- "strict"
592
- ]
593
- },
594
- "ignoreOtherMentions": {
595
- "type": "boolean"
596
- },
597
- "historyLimit": {
598
- "type": "number"
599
- },
600
- "name": {
601
- "type": "string"
602
- },
603
- "prompt": {
604
- "type": "string"
605
- },
606
565
  "tools": {
607
566
  "type": "object",
608
567
  "properties": {
@@ -656,6 +615,26 @@
656
615
  },
657
616
  "additionalProperties": false
658
617
  }
618
+ },
619
+ "commandLevel": {
620
+ "type": "string",
621
+ "enum": [
622
+ "all",
623
+ "safety",
624
+ "strict"
625
+ ]
626
+ },
627
+ "ignoreOtherMentions": {
628
+ "type": "boolean"
629
+ },
630
+ "historyLimit": {
631
+ "type": "number"
632
+ },
633
+ "name": {
634
+ "type": "string"
635
+ },
636
+ "prompt": {
637
+ "type": "string"
659
638
  }
660
639
  },
661
640
  "additionalProperties": false
@@ -816,8 +795,8 @@
816
795
  "type": "string",
817
796
  "enum": [
818
797
  "open",
819
- "allowlist",
820
- "disabled"
798
+ "disabled",
799
+ "allowlist"
821
800
  ]
822
801
  },
823
802
  "systemPrompt": {
@@ -867,31 +846,24 @@
867
846
  ]
868
847
  },
869
848
  "streaming": {
870
- "anyOf": [
871
- {
872
- "type": "boolean"
849
+ "type": "object",
850
+ "properties": {
851
+ "mode": {
852
+ "default": "partial",
853
+ "type": "string",
854
+ "enum": [
855
+ "off",
856
+ "partial"
857
+ ]
873
858
  },
874
- {
875
- "type": "object",
876
- "properties": {
877
- "mode": {
878
- "default": "partial",
879
- "type": "string",
880
- "enum": [
881
- "off",
882
- "partial"
883
- ]
884
- },
885
- "c2cStreamApi": {
886
- "type": "boolean"
887
- }
888
- },
889
- "required": [
890
- "mode"
891
- ],
892
- "additionalProperties": {}
859
+ "nativeTransport": {
860
+ "type": "boolean"
893
861
  }
894
- ]
862
+ },
863
+ "required": [
864
+ "mode"
865
+ ],
866
+ "additionalProperties": false
895
867
  },
896
868
  "execApprovals": {
897
869
  "type": "object",
@@ -947,26 +919,6 @@
947
919
  "requireMention": {
948
920
  "type": "boolean"
949
921
  },
950
- "commandLevel": {
951
- "type": "string",
952
- "enum": [
953
- "all",
954
- "safety",
955
- "strict"
956
- ]
957
- },
958
- "ignoreOtherMentions": {
959
- "type": "boolean"
960
- },
961
- "historyLimit": {
962
- "type": "number"
963
- },
964
- "name": {
965
- "type": "string"
966
- },
967
- "prompt": {
968
- "type": "string"
969
- },
970
922
  "tools": {
971
923
  "type": "object",
972
924
  "properties": {
@@ -1020,6 +972,26 @@
1020
972
  },
1021
973
  "additionalProperties": false
1022
974
  }
975
+ },
976
+ "commandLevel": {
977
+ "type": "string",
978
+ "enum": [
979
+ "all",
980
+ "safety",
981
+ "strict"
982
+ ]
983
+ },
984
+ "ignoreOtherMentions": {
985
+ "type": "boolean"
986
+ },
987
+ "historyLimit": {
988
+ "type": "number"
989
+ },
990
+ "name": {
991
+ "type": "string"
992
+ },
993
+ "prompt": {
994
+ "type": "string"
1023
995
  }
1024
996
  },
1025
997
  "additionalProperties": false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/qqbot",
3
- "version": "2026.7.1",
3
+ "version": "2026.7.2-beta.2",
4
4
  "private": false,
5
5
  "description": "OpenClaw QQ Bot channel plugin for group and direct-message workflows.",
6
6
  "repository": {
@@ -11,12 +11,14 @@
11
11
  "dependencies": {
12
12
  "@tencent-connect/qqbot-connector": "1.1.0",
13
13
  "mpg123-decoder": "1.0.3",
14
+ "p-map": "7.0.5",
15
+ "pretty-ms": "9.3.0",
14
16
  "silk-wasm": "3.7.1",
15
17
  "ws": "8.21.0",
16
18
  "zod": "4.4.3"
17
19
  },
18
20
  "peerDependencies": {
19
- "openclaw": ">=2026.7.1"
21
+ "openclaw": ">=2026.7.2-beta.2"
20
22
  },
21
23
  "peerDependenciesMeta": {
22
24
  "openclaw": {
@@ -45,10 +47,10 @@
45
47
  "minHostVersion": ">=2026.4.10"
46
48
  },
47
49
  "compat": {
48
- "pluginApi": ">=2026.7.1"
50
+ "pluginApi": ">=2026.7.2-beta.2"
49
51
  },
50
52
  "build": {
51
- "openclawVersion": "2026.7.1"
53
+ "openclawVersion": "2026.7.2-beta.2"
52
54
  },
53
55
  "release": {
54
56
  "publishToClawHub": true,
@@ -69,6 +71,8 @@
69
71
  "bundledDependencies": [
70
72
  "@tencent-connect/qqbot-connector",
71
73
  "mpg123-decoder",
74
+ "p-map",
75
+ "pretty-ms",
72
76
  "silk-wasm",
73
77
  "ws",
74
78
  "zod"