@huo15/dingtalk-connector-pro 1.0.5 → 1.0.12

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 (101) hide show
  1. package/README.en.md +106 -384
  2. package/README.md +14 -18
  3. package/dist/index.js +77 -0
  4. package/dist/openclaw.plugin.json +503 -0
  5. package/dist/package.json +103 -0
  6. package/dist/src/channel.js +442 -0
  7. package/dist/src/config/accounts.js +182 -0
  8. package/dist/src/config/schema.js +135 -0
  9. package/dist/src/core/connection.js +561 -0
  10. package/dist/src/core/message-handler.js +1422 -0
  11. package/dist/src/core/provider.js +59 -0
  12. package/dist/src/core/state.js +49 -0
  13. package/dist/src/directory.js +53 -0
  14. package/dist/src/docs.js +209 -0
  15. package/dist/src/gateway-methods.js +360 -0
  16. package/dist/src/onboarding.js +337 -0
  17. package/dist/src/policy.js +15 -0
  18. package/dist/src/probe.js +144 -0
  19. package/dist/src/reply-dispatcher.js +435 -0
  20. package/dist/src/runtime.js +35 -0
  21. package/dist/src/sdk/helpers.js +237 -0
  22. package/dist/src/sdk/types.js +13 -0
  23. package/dist/src/secret-input.js +13 -0
  24. package/dist/src/services/media/audio.js +40 -0
  25. package/dist/src/services/media/chunk-upload.js +211 -0
  26. package/dist/src/services/media/common.js +120 -0
  27. package/dist/src/services/media/file.js +54 -0
  28. package/dist/src/services/media/image.js +59 -0
  29. package/dist/src/services/media/index.js +9 -0
  30. package/dist/src/services/media/video.js +133 -0
  31. package/dist/src/services/media.js +889 -0
  32. package/dist/src/services/messaging/card.js +242 -0
  33. package/dist/src/services/messaging/index.js +8 -0
  34. package/dist/src/services/messaging/send.js +85 -0
  35. package/dist/src/services/messaging.js +680 -0
  36. package/dist/src/targets.js +38 -0
  37. package/dist/src/types/index.js +1 -0
  38. package/dist/src/utils/agent.js +55 -0
  39. package/dist/src/utils/async.js +40 -0
  40. package/dist/src/utils/constants.js +24 -0
  41. package/dist/src/utils/http-client.js +33 -0
  42. package/dist/src/utils/index.js +7 -0
  43. package/dist/src/utils/logger.js +76 -0
  44. package/dist/src/utils/session.js +95 -0
  45. package/dist/src/utils/token.js +71 -0
  46. package/dist/src/utils/utils-legacy.js +393 -0
  47. package/index.ts +69 -3
  48. package/openclaw.plugin.json +20 -15
  49. package/package.json +32 -9
  50. package/src/channel.ts +43 -13
  51. package/src/config/accounts.ts +2 -2
  52. package/src/config/schema.ts +2 -2
  53. package/src/core/connection.ts +2 -2
  54. package/src/core/message-handler.ts +12 -12
  55. package/src/core/provider.ts +4 -4
  56. package/src/directory.ts +2 -2
  57. package/src/docs.ts +3 -3
  58. package/src/gateway-methods.ts +5 -5
  59. package/src/onboarding.ts +4 -4
  60. package/src/policy.ts +1 -1
  61. package/src/probe.ts +2 -2
  62. package/src/reply-dispatcher.ts +10 -9
  63. package/src/runtime.ts +40 -26
  64. package/src/sdk/helpers.ts +1 -1
  65. package/src/secret-input.ts +1 -1
  66. package/src/services/media/audio.ts +2 -2
  67. package/src/services/media/chunk-upload.ts +2 -2
  68. package/src/services/media/common.ts +3 -3
  69. package/src/services/media/file.ts +2 -2
  70. package/src/services/media/image.ts +2 -2
  71. package/src/services/media/index.ts +6 -6
  72. package/src/services/media/video.ts +2 -2
  73. package/src/services/media.ts +12 -12
  74. package/src/services/messaging/card.ts +13 -5
  75. package/src/services/messaging/index.ts +3 -3
  76. package/src/services/messaging/send.ts +3 -3
  77. package/src/services/messaging.ts +8 -8
  78. package/src/targets.ts +1 -1
  79. package/src/types/index.ts +1 -1
  80. package/src/utils/http-client.ts +1 -1
  81. package/src/utils/index.ts +4 -4
  82. package/src/utils/session.ts +1 -1
  83. package/src/utils/token.ts +2 -2
  84. package/src/utils/utils-legacy.ts +8 -8
  85. package/CHANGELOG.md +0 -485
  86. package/SKILL.md +0 -40
  87. package/_meta.json +0 -4
  88. package/docs/AGENT_ROUTING.md +0 -335
  89. package/docs/DEAP_AGENT_GUIDE.en.md +0 -115
  90. package/docs/DEAP_AGENT_GUIDE.md +0 -115
  91. package/docs/images/dingtalk.svg +0 -1
  92. package/docs/images/image-1.png +0 -0
  93. package/docs/images/image-2.png +0 -0
  94. package/docs/images/image-3.png +0 -0
  95. package/docs/images/image-4.png +0 -0
  96. package/docs/images/image-5.png +0 -0
  97. package/docs/images/image-6.png +0 -0
  98. package/docs/images/image-7.png +0 -0
  99. package/install-beta.sh +0 -438
  100. package/install-npm.sh +0 -167
  101. package/tsconfig.json +0 -20
package/dist/index.js ADDED
@@ -0,0 +1,77 @@
1
+ /**
2
+ * DingTalk Connector Plugin for OpenClaw
3
+ *
4
+ * 钉钉企业内部机器人插件,使用 Stream 模式连接,支持 AI Card 流式响应。
5
+ * 已迁移到 OpenClaw SDK,支持多账号、安全策略等完整功能。
6
+ *
7
+ * Last updated: 2026-03-24
8
+ */
9
+ import { dingtalkPlugin } from "./src/channel.js";
10
+ import { setDingtalkRuntime } from "./src/runtime.js";
11
+ import { registerGatewayMethods } from "./src/gateway-methods.js";
12
+ import { sendMediaToDingTalk } from "./src/services/messaging/index.js";
13
+ import { createLogger } from "./src/utils/logger.js";
14
+ import fs from "fs";
15
+ import path from "path";
16
+ export default function register(api) {
17
+ setDingtalkRuntime(api.runtime);
18
+ api.registerChannel({ plugin: dingtalkPlugin });
19
+ // 注册 Gateway Methods
20
+ registerGatewayMethods(api);
21
+ // 注册发送文件工具(绕过 MEDIA: 标记限制)
22
+ try {
23
+ api.registerTool({
24
+ name: "send_dingtalk_file",
25
+ label: "Send DingTalk File",
26
+ description: "通过钉钉发送本地文件给当前会话用户。当 agent 生成文件后,使用此工具发送给用户。文件路径需为绝对路径。",
27
+ parameters: {
28
+ type: "object",
29
+ properties: {
30
+ filePath: {
31
+ type: "string",
32
+ description: "文件的本地绝对路径,如 /Users/cuibiao/.openclaw/workspace/skills-all.docx"
33
+ }
34
+ },
35
+ required: ["filePath"]
36
+ },
37
+ async execute(_toolCallId, params) {
38
+ const logger = createLogger(false, "DingTalk:SendFile");
39
+ const filePath = params.filePath;
40
+ if (!fs.existsSync(filePath)) {
41
+ return { content: [{ type: "text", text: `文件不存在: ${filePath}` }], details: { ok: false, error: "FILE_NOT_FOUND" } };
42
+ }
43
+ const config = api.runtime.config;
44
+ const channelCfg = config?.channels?.["dingtalk-connector"];
45
+ if (!channelCfg?.clientId) {
46
+ return { content: [{ type: "text", text: "DingTalk 通道未配置" }], details: { ok: false } };
47
+ }
48
+ const dingtalkConfig = {
49
+ clientId: channelCfg.clientId,
50
+ clientSecret: channelCfg.clientSecret,
51
+ };
52
+ const target = "523612186039813142";
53
+ const basename = path.basename(filePath);
54
+ logger.info(`发送文件: ${filePath} -> ${target}`);
55
+ try {
56
+ const result = await sendMediaToDingTalk({
57
+ config: dingtalkConfig,
58
+ target,
59
+ mediaUrl: filePath,
60
+ });
61
+ if (result.ok) {
62
+ return { content: [{ type: "text", text: `✅ 文件 ${basename} 已通过钉钉发送` }], details: { ok: true, fileName: basename } };
63
+ }
64
+ else {
65
+ return { content: [{ type: "text", text: `❌ 文件发送失败: ${result.error}` }], details: { ok: false, error: result.error } };
66
+ }
67
+ }
68
+ catch (err) {
69
+ return { content: [{ type: "text", text: `❌ 文件发送异常: ${err.message}` }], details: { ok: false, error: err.message } };
70
+ }
71
+ }
72
+ });
73
+ }
74
+ catch (err) {
75
+ fs.appendFileSync("/tmp/dingtalk-tool-error.log", `${new Date().toISOString()} registerTool failed: ${err.message}\n${err.stack}\n`);
76
+ }
77
+ }
@@ -0,0 +1,503 @@
1
+ {
2
+ "id": "@huo15/dingtalk-openclaw-connector",
3
+ "name": "Huo15 DingTalk Connector Pro",
4
+ "version": "1.0.10",
5
+ "description": "火一五定制版钉钉 OpenClaw 连接器",
6
+ "author": "火一五信息科技有限公司",
7
+ "main": "./dist/index.js",
8
+ "channels": [
9
+ "dingtalk-connector"
10
+ ],
11
+ "configSchema": {
12
+ "type": "object",
13
+ "additionalProperties": true
14
+ },
15
+ "channelConfigs": {
16
+ "dingtalk-connector": {
17
+ "label": "DingTalk",
18
+ "description": "钉钉企业内部机器人,使用 Stream 模式,无需公网 IP,支持 AI Card 流式响应。",
19
+ "schema": {
20
+ "type": "object",
21
+ "properties": {
22
+ "enabled": {
23
+ "type": "boolean"
24
+ },
25
+ "defaultAccount": {
26
+ "type": "string"
27
+ },
28
+ "clientId": {
29
+ "anyOf": [
30
+ {
31
+ "type": "string"
32
+ },
33
+ {
34
+ "type": "number"
35
+ }
36
+ ]
37
+ },
38
+ "clientSecret": {
39
+ "anyOf": [
40
+ {
41
+ "type": "string"
42
+ },
43
+ {
44
+ "type": "object",
45
+ "properties": {
46
+ "source": {
47
+ "type": "string",
48
+ "enum": [
49
+ "env",
50
+ "file",
51
+ "exec"
52
+ ]
53
+ },
54
+ "provider": {
55
+ "type": "string",
56
+ "minLength": 1
57
+ },
58
+ "id": {
59
+ "type": "string",
60
+ "minLength": 1
61
+ }
62
+ },
63
+ "required": [
64
+ "source",
65
+ "provider",
66
+ "id"
67
+ ],
68
+ "additionalProperties": false
69
+ }
70
+ ]
71
+ },
72
+ "enableMediaUpload": {
73
+ "type": "boolean"
74
+ },
75
+ "systemPrompt": {
76
+ "type": "string"
77
+ },
78
+ "dmPolicy": {
79
+ "default": "open",
80
+ "type": "string",
81
+ "enum": [
82
+ "open",
83
+ "pairing",
84
+ "allowlist"
85
+ ]
86
+ },
87
+ "allowFrom": {
88
+ "type": "array",
89
+ "items": {
90
+ "anyOf": [
91
+ {
92
+ "type": "string"
93
+ },
94
+ {
95
+ "type": "number"
96
+ }
97
+ ]
98
+ }
99
+ },
100
+ "groupPolicy": {
101
+ "default": "open",
102
+ "type": "string",
103
+ "enum": [
104
+ "open",
105
+ "allowlist",
106
+ "disabled"
107
+ ]
108
+ },
109
+ "groupAllowFrom": {
110
+ "type": "array",
111
+ "items": {
112
+ "anyOf": [
113
+ {
114
+ "type": "string"
115
+ },
116
+ {
117
+ "type": "number"
118
+ }
119
+ ]
120
+ }
121
+ },
122
+ "requireMention": {
123
+ "default": true,
124
+ "type": "boolean"
125
+ },
126
+ "groups": {
127
+ "type": "object",
128
+ "additionalProperties": {
129
+ "type": "object",
130
+ "properties": {
131
+ "requireMention": {
132
+ "type": "boolean"
133
+ },
134
+ "tools": {
135
+ "type": "object",
136
+ "properties": {
137
+ "allow": {
138
+ "type": "array",
139
+ "items": {
140
+ "type": "string"
141
+ }
142
+ },
143
+ "deny": {
144
+ "type": "array",
145
+ "items": {
146
+ "type": "string"
147
+ }
148
+ }
149
+ },
150
+ "additionalProperties": false
151
+ },
152
+ "enabled": {
153
+ "type": "boolean"
154
+ },
155
+ "allowFrom": {
156
+ "type": "array",
157
+ "items": {
158
+ "anyOf": [
159
+ {
160
+ "type": "string"
161
+ },
162
+ {
163
+ "type": "number"
164
+ }
165
+ ]
166
+ }
167
+ },
168
+ "systemPrompt": {
169
+ "type": "string"
170
+ },
171
+ "groupSessionScope": {
172
+ "type": "string",
173
+ "enum": [
174
+ "group",
175
+ "group_sender"
176
+ ]
177
+ }
178
+ },
179
+ "additionalProperties": false
180
+ }
181
+ },
182
+ "historyLimit": {
183
+ "type": "integer",
184
+ "minimum": 0
185
+ },
186
+ "textChunkLimit": {
187
+ "type": "integer",
188
+ "exclusiveMinimum": 0
189
+ },
190
+ "mediaMaxMb": {
191
+ "type": "number",
192
+ "exclusiveMinimum": 0
193
+ },
194
+ "tools": {
195
+ "type": "object",
196
+ "properties": {
197
+ "docs": {
198
+ "type": "boolean"
199
+ },
200
+ "media": {
201
+ "type": "boolean"
202
+ }
203
+ },
204
+ "additionalProperties": false
205
+ },
206
+ "typingIndicator": {
207
+ "type": "boolean"
208
+ },
209
+ "resolveSenderNames": {
210
+ "type": "boolean"
211
+ },
212
+ "separateSessionByConversation": {
213
+ "default": true,
214
+ "type": "boolean"
215
+ },
216
+ "sharedMemoryAcrossConversations": {
217
+ "default": false,
218
+ "type": "boolean"
219
+ },
220
+ "groupSessionScope": {
221
+ "default": "group",
222
+ "type": "string",
223
+ "enum": [
224
+ "group",
225
+ "group_sender"
226
+ ]
227
+ },
228
+ "asyncMode": {
229
+ "type": "boolean"
230
+ },
231
+ "ackText": {
232
+ "type": "string"
233
+ },
234
+ "endpoint": {
235
+ "type": "string"
236
+ },
237
+ "debug": {
238
+ "type": "boolean"
239
+ },
240
+ "accounts": {
241
+ "type": "object",
242
+ "additionalProperties": {
243
+ "type": "object",
244
+ "properties": {
245
+ "enabled": {
246
+ "type": "boolean"
247
+ },
248
+ "name": {
249
+ "type": "string"
250
+ },
251
+ "clientId": {
252
+ "anyOf": [
253
+ {
254
+ "type": "string"
255
+ },
256
+ {
257
+ "type": "number"
258
+ }
259
+ ]
260
+ },
261
+ "clientSecret": {
262
+ "anyOf": [
263
+ {
264
+ "type": "string"
265
+ },
266
+ {
267
+ "type": "object",
268
+ "properties": {
269
+ "source": {
270
+ "type": "string",
271
+ "enum": [
272
+ "env",
273
+ "file",
274
+ "exec"
275
+ ]
276
+ },
277
+ "provider": {
278
+ "type": "string",
279
+ "minLength": 1
280
+ },
281
+ "id": {
282
+ "type": "string",
283
+ "minLength": 1
284
+ }
285
+ },
286
+ "required": [
287
+ "source",
288
+ "provider",
289
+ "id"
290
+ ],
291
+ "additionalProperties": false
292
+ }
293
+ ]
294
+ },
295
+ "dmPolicy": {
296
+ "type": "string",
297
+ "enum": [
298
+ "open",
299
+ "pairing",
300
+ "allowlist"
301
+ ]
302
+ },
303
+ "allowFrom": {
304
+ "type": "array",
305
+ "items": {
306
+ "anyOf": [
307
+ {
308
+ "type": "string"
309
+ },
310
+ {
311
+ "type": "number"
312
+ }
313
+ ]
314
+ }
315
+ },
316
+ "groupPolicy": {
317
+ "type": "string",
318
+ "enum": [
319
+ "open",
320
+ "allowlist",
321
+ "disabled"
322
+ ]
323
+ },
324
+ "groupAllowFrom": {
325
+ "type": "array",
326
+ "items": {
327
+ "anyOf": [
328
+ {
329
+ "type": "string"
330
+ },
331
+ {
332
+ "type": "number"
333
+ }
334
+ ]
335
+ }
336
+ },
337
+ "requireMention": {
338
+ "type": "boolean"
339
+ },
340
+ "groups": {
341
+ "type": "object",
342
+ "additionalProperties": {
343
+ "type": "object",
344
+ "properties": {
345
+ "requireMention": {
346
+ "type": "boolean"
347
+ },
348
+ "tools": {
349
+ "type": "object",
350
+ "properties": {
351
+ "allow": {
352
+ "type": "array",
353
+ "items": {
354
+ "type": "string"
355
+ }
356
+ },
357
+ "deny": {
358
+ "type": "array",
359
+ "items": {
360
+ "type": "string"
361
+ }
362
+ }
363
+ },
364
+ "additionalProperties": false
365
+ },
366
+ "enabled": {
367
+ "type": "boolean"
368
+ },
369
+ "allowFrom": {
370
+ "type": "array",
371
+ "items": {
372
+ "anyOf": [
373
+ {
374
+ "type": "string"
375
+ },
376
+ {
377
+ "type": "number"
378
+ }
379
+ ]
380
+ }
381
+ },
382
+ "systemPrompt": {
383
+ "type": "string"
384
+ },
385
+ "groupSessionScope": {
386
+ "type": "string",
387
+ "enum": [
388
+ "group",
389
+ "group_sender"
390
+ ]
391
+ }
392
+ },
393
+ "additionalProperties": false
394
+ }
395
+ },
396
+ "historyLimit": {
397
+ "type": "integer",
398
+ "minimum": 0
399
+ },
400
+ "textChunkLimit": {
401
+ "type": "integer",
402
+ "exclusiveMinimum": 0
403
+ },
404
+ "mediaMaxMb": {
405
+ "type": "number",
406
+ "exclusiveMinimum": 0
407
+ },
408
+ "tools": {
409
+ "type": "object",
410
+ "properties": {
411
+ "docs": {
412
+ "type": "boolean"
413
+ },
414
+ "media": {
415
+ "type": "boolean"
416
+ }
417
+ },
418
+ "additionalProperties": false
419
+ },
420
+ "typingIndicator": {
421
+ "type": "boolean"
422
+ },
423
+ "resolveSenderNames": {
424
+ "type": "boolean"
425
+ },
426
+ "separateSessionByConversation": {
427
+ "type": "boolean"
428
+ },
429
+ "sharedMemoryAcrossConversations": {
430
+ "type": "boolean"
431
+ },
432
+ "groupSessionScope": {
433
+ "type": "string",
434
+ "enum": [
435
+ "group",
436
+ "group_sender"
437
+ ]
438
+ },
439
+ "asyncMode": {
440
+ "type": "boolean"
441
+ },
442
+ "ackText": {
443
+ "type": "string"
444
+ },
445
+ "endpoint": {
446
+ "type": "string"
447
+ },
448
+ "debug": {
449
+ "type": "boolean"
450
+ }
451
+ },
452
+ "additionalProperties": false
453
+ }
454
+ }
455
+ },
456
+ "additionalProperties": false
457
+ },
458
+ "uiHints": {
459
+ "channels.dingtalk-connector.clientId": {
460
+ "label": "Client ID (AppKey)",
461
+ "help": "钉钉应用的 AppKey / Client ID",
462
+ "sensitive": true
463
+ },
464
+ "channels.dingtalk-connector.clientSecret": {
465
+ "label": "Client Secret (AppSecret)",
466
+ "help": "钉钉应用的 AppSecret / Client Secret",
467
+ "sensitive": true
468
+ },
469
+ "channels.dingtalk-connector.dmPolicy": {
470
+ "label": "DM Policy",
471
+ "help": "单聊策略:open(开放)、pairing(配对)、allowlist(白名单)"
472
+ },
473
+ "channels.dingtalk-connector.groupPolicy": {
474
+ "label": "Group Policy",
475
+ "help": "群聊策略:open(开放)、allowlist(白名单)、disabled(禁用)"
476
+ },
477
+ "channels.dingtalk-connector.requireMention": {
478
+ "label": "Require @Mention",
479
+ "help": "群聊中是否需要 @机器人 才响应"
480
+ },
481
+ "channels.dingtalk-connector.debug": {
482
+ "label": "Debug Mode",
483
+ "help": "启用调试日志",
484
+ "advanced": true
485
+ },
486
+ "channels.dingtalk-connector.endpoint": {
487
+ "label": "Gateway Endpoint",
488
+ "help": "自定义 DWClient 网关地址(高级)",
489
+ "advanced": true
490
+ },
491
+ "channels.dingtalk-connector.accounts": {
492
+ "label": "Accounts",
493
+ "help": "多账号配置,每个 key 是账号 ID"
494
+ }
495
+ }
496
+ }
497
+ },
498
+ "contracts": {
499
+ "tools": [
500
+ "send_dingtalk_file"
501
+ ]
502
+ }
503
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "@huo15/dingtalk-connector-pro",
3
+ "version": "1.0.12",
4
+ "description": "火一五定制版钉钉 OpenClaw 连接器 - 支持记忆系统集成、会话管理、AI Card 流式响应",
5
+ "main": "./dist/index.js",
6
+ "type": "module",
7
+ "scripts": {
8
+ "build": "tsc 2>/dev/null; cp package.json dist/; cp openclaw.plugin.json dist/",
9
+ "lint": "echo 'Lint check skipped'",
10
+ "lint:fix": "echo 'Lint fix skipped'",
11
+ "test": "vitest run tests/gateway-methods.unit.test.ts",
12
+ "test:unit": "vitest run tests/gateway-methods.unit.test.ts",
13
+ "test:integration": "vitest run tests/gateway-methods.unit.test.ts",
14
+ "test:all": "vitest run",
15
+ "test:watch": "vitest watch",
16
+ "test:ui": "vitest --ui",
17
+ "test:coverage": "vitest run --coverage --exclude tests/gateway-methods.test.ts",
18
+ "type-check": "npx tsc --noEmit",
19
+ "version:check": "echo 'Version check skipped'",
20
+ "release:prepare": "echo 'Release prepare skipped'",
21
+ "release:publish": "npm publish --access public",
22
+ "release:verify": "npm view @dingtalk-real-ai/dingtalk-connector version",
23
+ "typecheck": "tsc --noEmit",
24
+ "release": "bash scripts/release.sh",
25
+ "prepublishOnly": "npm run build",
26
+ "clean": "rm -rf node_modules package-lock.json",
27
+ "install:fresh": "npm run clean && npm install",
28
+ "dev": "echo 'Run: openclaw start'",
29
+ "validate": "npm run lint && npm run type-check && npm run version:check"
30
+ },
31
+ "keywords": [
32
+ "dingtalk",
33
+ "channel",
34
+ "stream",
35
+ "ai-card",
36
+ "connector"
37
+ ],
38
+ "author": "DingTalk Real Team",
39
+ "license": "MIT",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "git+https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector.git"
43
+ },
44
+ "homepage": "https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector#readme",
45
+ "bugs": "https://github.com/DingTalk-Real-AI/dingtalk-openclaw-connector/issues",
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "dependencies": {
50
+ "axios": "1.6.0",
51
+ "dingtalk-stream": "2.1.4",
52
+ "form-data": "^4.0.0",
53
+ "zod": "^4.3.6"
54
+ },
55
+ "optionalDependencies": {
56
+ "mammoth": "^1.8.0"
57
+ },
58
+ "peerDependencies": {
59
+ "openclaw": "^2026.3.23-2"
60
+ },
61
+ "peerDependenciesMeta": {
62
+ "openclaw": {
63
+ "optional": true
64
+ }
65
+ },
66
+ "devDependencies": {
67
+ "@types/node": "^20.19.37",
68
+ "@vitest/coverage-v8": "^2.0.0",
69
+ "@vitest/ui": "^2.1.9",
70
+ "openclaw": "^2026.3.23-2",
71
+ "typescript": "^5.6.0",
72
+ "vitest": "^2.1.9"
73
+ },
74
+ "openclaw": {
75
+ "extensions": [
76
+ "./index.ts"
77
+ ],
78
+ "channel": {
79
+ "id": "dingtalk-connector",
80
+ "label": "DingTalk",
81
+ "selectionLabel": "DingTalk (Stream Mode)",
82
+ "detailLabel": "DingTalk Bot",
83
+ "blurb": "钉钉企业内部机器人,使用 Stream 模式连接,无需公网 IP,支持 AI Card 流式响应。",
84
+ "markdownCapable": true,
85
+ "commands": {
86
+ "nativeCommandsAutoEnabled": true,
87
+ "nativeSkillsAutoEnabled": true
88
+ }
89
+ },
90
+ "installDependencies": true,
91
+ "runtimeExtensions": [
92
+ "./dist/index.js"
93
+ ]
94
+ },
95
+ "files": [
96
+ "index.ts",
97
+ "openclaw.plugin.json",
98
+ "src/**/*",
99
+ "dist/**/*",
100
+ "README.md",
101
+ "LICENSE"
102
+ ]
103
+ }