@soimy/dingtalk 3.6.0 → 3.6.2-beta.1
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 +4 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14443 -0
- package/dist/index.js.map +7 -0
- package/dist/src/access-control.d.ts +43 -0
- package/dist/src/access-control.d.ts.map +1 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-controller.d.ts +22 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-controller.d.ts.map +1 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-events.d.ts +36 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-events.d.ts.map +1 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-progress.d.ts +7 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-progress.d.ts.map +1 -0
- package/dist/src/ack-reaction-classifier.d.ts +8 -0
- package/dist/src/ack-reaction-classifier.d.ts.map +1 -0
- package/dist/src/ack-reaction-service.d.ts +15 -0
- package/dist/src/ack-reaction-service.d.ts.map +1 -0
- package/dist/src/auth.d.ts +7 -0
- package/dist/src/auth.d.ts.map +1 -0
- package/dist/src/card/card-action-handler.d.ts +14 -0
- package/dist/src/card/card-action-handler.d.ts.map +1 -0
- package/dist/src/card/card-markdown-image-reroute.d.ts +16 -0
- package/dist/src/card/card-markdown-image-reroute.d.ts.map +1 -0
- package/dist/src/card/card-run-registry.d.ts +60 -0
- package/dist/src/card/card-run-registry.d.ts.map +1 -0
- package/dist/src/card/card-stop-handler.d.ts +18 -0
- package/dist/src/card/card-stop-handler.d.ts.map +1 -0
- package/dist/src/card/card-streaming-mode.d.ts +8 -0
- package/dist/src/card/card-streaming-mode.d.ts.map +1 -0
- package/dist/src/card/card-template.d.ts +21 -0
- package/dist/src/card/card-template.d.ts.map +1 -0
- package/dist/src/card/reasoning-answer-split.d.ts +6 -0
- package/dist/src/card/reasoning-answer-split.d.ts.map +1 -0
- package/dist/src/card/reasoning-block-assembler.d.ts +7 -0
- package/dist/src/card/reasoning-block-assembler.d.ts.map +1 -0
- package/dist/src/card/statusline-renderer.d.ts +24 -0
- package/dist/src/card/statusline-renderer.d.ts.map +1 -0
- package/dist/src/card-callback-service.d.ts +23 -0
- package/dist/src/card-callback-service.d.ts.map +1 -0
- package/dist/src/card-draft-controller.d.ts +75 -0
- package/dist/src/card-draft-controller.d.ts.map +1 -0
- package/dist/src/card-service.d.ts +99 -0
- package/dist/src/card-service.d.ts.map +1 -0
- package/dist/src/channel.d.ts +10 -0
- package/dist/src/channel.d.ts.map +1 -0
- package/dist/src/command/card-stop-command.d.ts +30 -0
- package/dist/src/command/card-stop-command.d.ts.map +1 -0
- package/dist/src/command/inbound-command-dispatch-service.d.ts +40 -0
- package/dist/src/command/inbound-command-dispatch-service.d.ts.map +1 -0
- package/dist/src/config-schema.d.ts +8 -0
- package/dist/src/config-schema.d.ts.map +1 -0
- package/dist/src/config.d.ts +60 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/connection-manager.d.ts +148 -0
- package/dist/src/connection-manager.d.ts.map +1 -0
- package/dist/src/dedup.d.ts +4 -0
- package/dist/src/dedup.d.ts.map +1 -0
- package/dist/src/device-registration.d.ts +16 -0
- package/dist/src/device-registration.d.ts.map +1 -0
- package/dist/src/docs-service.d.ts +12 -0
- package/dist/src/docs-service.d.ts.map +1 -0
- package/dist/src/draft-stream-loop.d.ts +28 -0
- package/dist/src/draft-stream-loop.d.ts.map +1 -0
- package/dist/src/feedback-learning-service.d.ts +123 -0
- package/dist/src/feedback-learning-service.d.ts.map +1 -0
- package/dist/src/feedback-learning-store.d.ts +181 -0
- package/dist/src/feedback-learning-store.d.ts.map +1 -0
- package/dist/src/gateway/channel-gateway.d.ts +4 -0
- package/dist/src/gateway/channel-gateway.d.ts.map +1 -0
- package/dist/src/http-client.d.ts +9 -0
- package/dist/src/http-client.d.ts.map +1 -0
- package/dist/src/inbound-handler.d.ts +9 -0
- package/dist/src/inbound-handler.d.ts.map +1 -0
- package/dist/src/learning-command-service.d.ts +64 -0
- package/dist/src/learning-command-service.d.ts.map +1 -0
- package/dist/src/logger-context.d.ts +10 -0
- package/dist/src/logger-context.d.ts.map +1 -0
- package/dist/src/media-utils.d.ts +63 -0
- package/dist/src/media-utils.d.ts.map +1 -0
- package/dist/src/message-context-store.d.ts +126 -0
- package/dist/src/message-context-store.d.ts.map +1 -0
- package/dist/src/message-utils.d.ts +12 -0
- package/dist/src/message-utils.d.ts.map +1 -0
- package/dist/src/messaging/attachment-text-extractor.d.ts +13 -0
- package/dist/src/messaging/attachment-text-extractor.d.ts.map +1 -0
- package/dist/src/messaging/btw-deliver.d.ts +42 -0
- package/dist/src/messaging/btw-deliver.d.ts.map +1 -0
- package/dist/src/messaging/channel-actions.d.ts +3 -0
- package/dist/src/messaging/channel-actions.d.ts.map +1 -0
- package/dist/src/messaging/channel-outbound.d.ts +3 -0
- package/dist/src/messaging/channel-outbound.d.ts.map +1 -0
- package/dist/src/messaging/quoted-context.d.ts +36 -0
- package/dist/src/messaging/quoted-context.d.ts.map +1 -0
- package/dist/src/messaging/quoted-file-service.d.ts +25 -0
- package/dist/src/messaging/quoted-file-service.d.ts.map +1 -0
- package/dist/src/messaging/quoted-ref.d.ts +12 -0
- package/dist/src/messaging/quoted-ref.d.ts.map +1 -0
- package/dist/src/onboarding.d.ts +4 -0
- package/dist/src/onboarding.d.ts.map +1 -0
- package/dist/src/path-utils.d.ts +3 -0
- package/dist/src/path-utils.d.ts.map +1 -0
- package/dist/src/peer-id-registry.d.ts +35 -0
- package/dist/src/peer-id-registry.d.ts.map +1 -0
- package/dist/src/persistence-store.d.ts +27 -0
- package/dist/src/persistence-store.d.ts.map +1 -0
- package/dist/src/platform/channel-status.d.ts +3 -0
- package/dist/src/platform/channel-status.d.ts.map +1 -0
- package/dist/src/plugin-sdk-channel-actions-augment.d.ts +7 -0
- package/dist/src/plugin-sdk-channel-actions-augment.d.ts.map +1 -0
- package/dist/src/proactive-risk-registry.d.ts +22 -0
- package/dist/src/proactive-risk-registry.d.ts.map +1 -0
- package/dist/src/reply-strategy-card.d.ts +14 -0
- package/dist/src/reply-strategy-card.d.ts.map +1 -0
- package/dist/src/reply-strategy-markdown.d.ts +10 -0
- package/dist/src/reply-strategy-markdown.d.ts.map +1 -0
- package/dist/src/reply-strategy-types.d.ts +85 -0
- package/dist/src/reply-strategy-types.d.ts.map +1 -0
- package/dist/src/reply-strategy-with-reaction.d.ts +47 -0
- package/dist/src/reply-strategy-with-reaction.d.ts.map +1 -0
- package/dist/src/reply-strategy.d.ts +14 -0
- package/dist/src/reply-strategy.d.ts.map +1 -0
- package/dist/src/run-usage-store.d.ts +15 -0
- package/dist/src/run-usage-store.d.ts.map +1 -0
- package/dist/src/runtime.d.ts +4 -0
- package/dist/src/runtime.d.ts.map +1 -0
- package/dist/src/secret-input.d.ts +42 -0
- package/dist/src/secret-input.d.ts.map +1 -0
- package/dist/src/send-service.d.ts +46 -0
- package/dist/src/send-service.d.ts.map +1 -0
- package/dist/src/session-command-service.d.ts +35 -0
- package/dist/src/session-command-service.d.ts.map +1 -0
- package/dist/src/session-lock.d.ts +11 -0
- package/dist/src/session-lock.d.ts.map +1 -0
- package/dist/src/session-peer-store.d.ts +21 -0
- package/dist/src/session-peer-store.d.ts.map +1 -0
- package/dist/src/session-routing.d.ts +14 -0
- package/dist/src/session-routing.d.ts.map +1 -0
- package/dist/src/session-state.d.ts +13 -0
- package/dist/src/session-state.d.ts.map +1 -0
- package/dist/src/signature.d.ts +6 -0
- package/dist/src/signature.d.ts.map +1 -0
- package/dist/src/targeting/agent-name-matcher.d.ts +63 -0
- package/dist/src/targeting/agent-name-matcher.d.ts.map +1 -0
- package/dist/src/targeting/agent-routing.d.ts +72 -0
- package/dist/src/targeting/agent-routing.d.ts.map +1 -0
- package/dist/src/targeting/group-members-store.d.ts +3 -0
- package/dist/src/targeting/group-members-store.d.ts.map +1 -0
- package/dist/src/targeting/target-directory-adapter.d.ts +13 -0
- package/dist/src/targeting/target-directory-adapter.d.ts.map +1 -0
- package/dist/src/targeting/target-directory-store.d.ts +45 -0
- package/dist/src/targeting/target-directory-store.d.ts.map +1 -0
- package/dist/src/targeting/target-input.d.ts +3 -0
- package/dist/src/targeting/target-input.d.ts.map +1 -0
- package/dist/src/types.d.ts +730 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/utils.d.ts +54 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/openclaw.plugin.json +49 -5
- package/package.json +26 -5
- package/src/auth.ts +5 -2
- package/src/card-service.ts +41 -16
- package/src/channel.ts +5 -2
- package/src/config-schema.ts +2 -1
- package/src/config.ts +24 -67
- package/src/device-registration.ts +0 -32
- package/src/gateway/channel-gateway.ts +9 -8
- package/src/inbound-handler.ts +1239 -1061
- package/src/message-context-store.ts +183 -85
- package/src/messaging/channel-actions.ts +2 -1
- package/src/onboarding.ts +18 -13
- package/src/path-utils.ts +49 -0
- package/src/secret-input.ts +182 -0
- package/src/targeting/agent-routing.ts +30 -5
- package/src/types.ts +25 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as dns from "node:dns";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as net from "node:net";
|
|
4
|
+
import type { Logger, RetryOptions } from "./types";
|
|
5
|
+
type PluginDebugLogParams = {
|
|
6
|
+
accountId: string;
|
|
7
|
+
storePath?: string;
|
|
8
|
+
debug?: boolean;
|
|
9
|
+
baseLog?: Logger;
|
|
10
|
+
now?: () => Date;
|
|
11
|
+
fsImpl?: Pick<typeof fs, "appendFileSync" | "mkdirSync">;
|
|
12
|
+
};
|
|
13
|
+
export declare function resolvePluginDebugLog(params: PluginDebugLogParams): Logger;
|
|
14
|
+
export declare function closePluginDebugLog(params: {
|
|
15
|
+
accountId: string;
|
|
16
|
+
storePath?: string;
|
|
17
|
+
}): void;
|
|
18
|
+
/**
|
|
19
|
+
* Mask sensitive fields in data for safe logging
|
|
20
|
+
* Prevents PII leakage in debug logs
|
|
21
|
+
*/
|
|
22
|
+
export declare function maskSensitiveData(data: unknown): any;
|
|
23
|
+
export declare function stringifyUnknown(value: unknown): string;
|
|
24
|
+
export declare function parseBooleanLike(value: unknown): boolean | undefined;
|
|
25
|
+
export declare function getErrorMessage(err: unknown): string;
|
|
26
|
+
export declare function getErrorResponseData(err: unknown): unknown;
|
|
27
|
+
export declare function formatDingTalkErrorPayload(payload: unknown): string;
|
|
28
|
+
export declare function formatDingTalkErrorPayloadLog(scope: string, payload: unknown, prefix?: "[DingTalk]" | "[DingTalk][AICard]"): string;
|
|
29
|
+
export declare function getProxyBypassOption(config?: {
|
|
30
|
+
bypassProxyForSend?: boolean;
|
|
31
|
+
}): {
|
|
32
|
+
proxy: false;
|
|
33
|
+
} | Record<string, never>;
|
|
34
|
+
type LookupCallback = (err: NodeJS.ErrnoException | null, address: string | dns.LookupAddress[], family?: number) => void;
|
|
35
|
+
type LookupOptions = dns.LookupOneOptions | dns.LookupAllOptions;
|
|
36
|
+
export declare function createResolve4FallbackLookup(log?: Logger, accountId?: string): (hostname: string, options: LookupOptions, callback: LookupCallback) => void;
|
|
37
|
+
export declare function createResolve4FallbackLookupWithDeps(log: Logger | undefined, accountId: string | undefined, dnsImpl: Pick<typeof dns, "lookup" | "resolve4">, netImpl: Pick<typeof net, "isIP">): (hostname: string, options: LookupOptions, callback: LookupCallback) => void;
|
|
38
|
+
export declare function formatDingTalkConnectionErrorLog(scope: string, err: unknown, baseMessage: string): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* Cleanup orphaned temp files from dingtalk media
|
|
41
|
+
* Run at startup to clean up files from crashed processes
|
|
42
|
+
*/
|
|
43
|
+
export declare function cleanupOrphanedTempFiles(log?: Logger): number;
|
|
44
|
+
/**
|
|
45
|
+
* Retry logic for API calls with exponential backoff
|
|
46
|
+
* Handles transient failures like 401 token expiry
|
|
47
|
+
*/
|
|
48
|
+
export declare function retryWithBackoff<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
49
|
+
/**
|
|
50
|
+
* Get current timestamp in ISO-compatible epoch milliseconds for status tracking.
|
|
51
|
+
*/
|
|
52
|
+
export declare function getCurrentTimestamp(): number;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
package/openclaw.plugin.json
CHANGED
|
@@ -36,8 +36,30 @@
|
|
|
36
36
|
"description": "DingTalk App Key (Client ID) used to authenticate API and Stream connections."
|
|
37
37
|
},
|
|
38
38
|
"clientSecret": {
|
|
39
|
-
"
|
|
40
|
-
|
|
39
|
+
"anyOf": [
|
|
40
|
+
{ "type": "string" },
|
|
41
|
+
{
|
|
42
|
+
"type": "object",
|
|
43
|
+
"additionalProperties": false,
|
|
44
|
+
"required": ["source", "provider", "id"],
|
|
45
|
+
"properties": {
|
|
46
|
+
"source": { "type": "string", "enum": ["env", "file"] },
|
|
47
|
+
"provider": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"minLength": 1,
|
|
50
|
+
"maxLength": 1024,
|
|
51
|
+
"pattern": "^[^:>]+$"
|
|
52
|
+
},
|
|
53
|
+
"id": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"minLength": 1,
|
|
56
|
+
"maxLength": 1024,
|
|
57
|
+
"pattern": "^[^>]+$"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"description": "DingTalk App Secret (Client Secret) used to obtain DingTalk access tokens. Supports SecretInput references such as env/file. Security boundary: file reads the configured local path; use file only with trusted plugin configuration."
|
|
41
63
|
},
|
|
42
64
|
"dmPolicy": {
|
|
43
65
|
"type": "string",
|
|
@@ -320,8 +342,30 @@
|
|
|
320
342
|
"description": "DingTalk App Key (Client ID) used to authenticate API and Stream connections."
|
|
321
343
|
},
|
|
322
344
|
"clientSecret": {
|
|
323
|
-
"
|
|
324
|
-
|
|
345
|
+
"anyOf": [
|
|
346
|
+
{ "type": "string" },
|
|
347
|
+
{
|
|
348
|
+
"type": "object",
|
|
349
|
+
"additionalProperties": false,
|
|
350
|
+
"required": ["source", "provider", "id"],
|
|
351
|
+
"properties": {
|
|
352
|
+
"source": { "type": "string", "enum": ["env", "file"] },
|
|
353
|
+
"provider": {
|
|
354
|
+
"type": "string",
|
|
355
|
+
"minLength": 1,
|
|
356
|
+
"maxLength": 1024,
|
|
357
|
+
"pattern": "^[^:>]+$"
|
|
358
|
+
},
|
|
359
|
+
"id": {
|
|
360
|
+
"type": "string",
|
|
361
|
+
"minLength": 1,
|
|
362
|
+
"maxLength": 1024,
|
|
363
|
+
"pattern": "^[^>]+$"
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
],
|
|
368
|
+
"description": "DingTalk App Secret (Client Secret) used to obtain DingTalk access tokens. Supports SecretInput references such as env/file. Security boundary: file reads the configured local path; use file only with trusted plugin configuration."
|
|
325
369
|
},
|
|
326
370
|
"dmPolicy": {
|
|
327
371
|
"type": "string",
|
|
@@ -607,7 +651,7 @@
|
|
|
607
651
|
},
|
|
608
652
|
"clientSecret": {
|
|
609
653
|
"label": "DingTalk Client Secret",
|
|
610
|
-
"help": "App Secret used to obtain DingTalk access tokens.",
|
|
654
|
+
"help": "App Secret used to obtain DingTalk access tokens. SecretInput file references are for trusted plugin configuration because file reads a local path.",
|
|
611
655
|
"sensitive": true
|
|
612
656
|
},
|
|
613
657
|
"dmPolicy": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soimy/dingtalk",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.2-beta.1",
|
|
4
4
|
"description": "DingTalk (钉钉) channel plugin for OpenClaw",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bot",
|
|
@@ -19,19 +19,34 @@
|
|
|
19
19
|
"url": "git+https://github.com/soimy/openclaw-channel-dingtalk.git"
|
|
20
20
|
},
|
|
21
21
|
"files": [
|
|
22
|
+
"dist/**/*.js",
|
|
23
|
+
"dist/**/*.js.map",
|
|
24
|
+
"dist/**/*.d.ts",
|
|
25
|
+
"dist/**/*.d.ts.map",
|
|
22
26
|
"index.ts",
|
|
23
27
|
"src/**/*.ts",
|
|
24
28
|
"openclaw.plugin.json",
|
|
25
|
-
"
|
|
29
|
+
"README.md",
|
|
30
|
+
"LICENSE"
|
|
26
31
|
],
|
|
27
32
|
"type": "module",
|
|
28
33
|
"packageManager": "pnpm@10.33.0",
|
|
29
|
-
"main": "index.
|
|
34
|
+
"main": "./dist/index.js",
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"exports": {
|
|
37
|
+
".": {
|
|
38
|
+
"types": "./dist/index.d.ts",
|
|
39
|
+
"default": "./dist/index.js"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
30
42
|
"publishConfig": {
|
|
31
43
|
"access": "public",
|
|
32
44
|
"registry": "https://registry.npmjs.org/"
|
|
33
45
|
},
|
|
34
46
|
"scripts": {
|
|
47
|
+
"build": "pnpm run build:runtime && pnpm run build:types",
|
|
48
|
+
"build:runtime": "node scripts/build-runtime.mjs",
|
|
49
|
+
"build:types": "tsc -p tsconfig.build.json",
|
|
35
50
|
"format": "oxfmt --write package.json tsconfig.json index.ts src/*.ts",
|
|
36
51
|
"format:check": "oxfmt --check package.json tsconfig.json index.ts src/*.ts",
|
|
37
52
|
"lint": "oxlint --type-aware index.ts src",
|
|
@@ -41,6 +56,8 @@
|
|
|
41
56
|
"docs:build": "vitepress build docs",
|
|
42
57
|
"docs:preview": "vitepress preview docs --host 127.0.0.1 --port 4173",
|
|
43
58
|
"monitor:stream": "node scripts/dingtalk-stream-monitor.mjs",
|
|
59
|
+
"pack:check": "node scripts/verify-runtime-package.mjs",
|
|
60
|
+
"prepack": "pnpm run build",
|
|
44
61
|
"test": "vitest run",
|
|
45
62
|
"test:coverage": "vitest run --coverage",
|
|
46
63
|
"type-check": "tsc -p tsconfig.json"
|
|
@@ -56,9 +73,10 @@
|
|
|
56
73
|
"devDependencies": {
|
|
57
74
|
"@types/node": "^25.2.0",
|
|
58
75
|
"@vitest/coverage-v8": "^3.2.4",
|
|
76
|
+
"esbuild": "^0.27.3",
|
|
59
77
|
"oxfmt": "0.34.0",
|
|
60
|
-
"oxlint": "
|
|
61
|
-
"oxlint-tsgolint": "
|
|
78
|
+
"oxlint": "1.49.0",
|
|
79
|
+
"oxlint-tsgolint": "0.18.1",
|
|
62
80
|
"typescript": "^5.3.0",
|
|
63
81
|
"vitepress": "1.6.4",
|
|
64
82
|
"vitest": "^3.2.4"
|
|
@@ -81,6 +99,9 @@
|
|
|
81
99
|
"extensions": [
|
|
82
100
|
"./index.ts"
|
|
83
101
|
],
|
|
102
|
+
"runtimeExtensions": [
|
|
103
|
+
"./dist/index.js"
|
|
104
|
+
],
|
|
84
105
|
"channels": [
|
|
85
106
|
"dingtalk"
|
|
86
107
|
],
|
package/src/auth.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveRuntimeConfig } from "./config";
|
|
1
2
|
import axios from "./http-client";
|
|
2
3
|
import type { DingTalkConfig, Logger, TokenInfo } from "./types";
|
|
3
4
|
import { retryWithBackoff } from "./utils";
|
|
@@ -23,13 +24,15 @@ export async function getAccessToken(config: DingTalkConfig, log?: Logger): Prom
|
|
|
23
24
|
return cached.accessToken;
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
const runtimeConfig = await resolveRuntimeConfig(config, log);
|
|
28
|
+
|
|
26
29
|
const token = await retryWithBackoff(
|
|
27
30
|
async () => {
|
|
28
31
|
const response = await axios.post<TokenInfo>(
|
|
29
32
|
"https://api.dingtalk.com/v1.0/oauth2/accessToken",
|
|
30
33
|
{
|
|
31
|
-
appKey:
|
|
32
|
-
appSecret:
|
|
34
|
+
appKey: runtimeConfig.clientId,
|
|
35
|
+
appSecret: runtimeConfig.clientSecret,
|
|
33
36
|
},
|
|
34
37
|
);
|
|
35
38
|
|
package/src/card-service.ts
CHANGED
|
@@ -216,6 +216,10 @@ export function incrementCardDapiCount(card: AICardInstance): number {
|
|
|
216
216
|
return next;
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
+
function markStreamingLifecycleAcknowledged(card: AICardInstance, finished: boolean): void {
|
|
220
|
+
card.streamLifecycleOpened = !finished;
|
|
221
|
+
}
|
|
222
|
+
|
|
219
223
|
function extractCardProcessQueryKey(payload: unknown): string | undefined {
|
|
220
224
|
if (!payload || typeof payload !== "object") {
|
|
221
225
|
return undefined;
|
|
@@ -238,6 +242,7 @@ async function putAICardStreamingField(
|
|
|
238
242
|
content: string,
|
|
239
243
|
finished: boolean,
|
|
240
244
|
log?: Logger,
|
|
245
|
+
options: { suppressDegrade?: boolean } = {},
|
|
241
246
|
): Promise<void> {
|
|
242
247
|
const tokenAge = Date.now() - card.createdAt;
|
|
243
248
|
const tokenRefreshThreshold = 90 * 60 * 1000;
|
|
@@ -283,6 +288,7 @@ async function putAICardStreamingField(
|
|
|
283
288
|
);
|
|
284
289
|
card.lastUpdated = Date.now();
|
|
285
290
|
incrementCardDapiCount(card);
|
|
291
|
+
markStreamingLifecycleAcknowledged(card, finished);
|
|
286
292
|
} catch (err: any) {
|
|
287
293
|
if (err.response?.status === 401 && card.config && !tokenAlreadyRefreshed) {
|
|
288
294
|
log?.warn?.("[DingTalk][AICard] Received 401 error, attempting token refresh and retry...");
|
|
@@ -300,6 +306,7 @@ async function putAICardStreamingField(
|
|
|
300
306
|
);
|
|
301
307
|
card.lastUpdated = Date.now();
|
|
302
308
|
incrementCardDapiCount(card);
|
|
309
|
+
markStreamingLifecycleAcknowledged(card, finished);
|
|
303
310
|
return;
|
|
304
311
|
} catch (retryErr: any) {
|
|
305
312
|
log?.error?.(`[DingTalk][AICard] Retry after token refresh failed: ${retryErr.message}`);
|
|
@@ -315,7 +322,7 @@ async function putAICardStreamingField(
|
|
|
315
322
|
}
|
|
316
323
|
}
|
|
317
324
|
|
|
318
|
-
if (card.accountId && shouldTriggerAICardDegrade(err)) {
|
|
325
|
+
if (!options.suppressDegrade && card.accountId && shouldTriggerAICardDegrade(err)) {
|
|
319
326
|
activateAICardDegrade(
|
|
320
327
|
card.accountId,
|
|
321
328
|
`card.stream:${err?.response?.status || "unknown"}`,
|
|
@@ -355,6 +362,7 @@ interface PendingCardRecord {
|
|
|
355
362
|
state: string;
|
|
356
363
|
lastContent?: string;
|
|
357
364
|
lastBlockListJson?: string;
|
|
365
|
+
streamLifecycleOpened?: boolean;
|
|
358
366
|
}
|
|
359
367
|
|
|
360
368
|
interface PendingCardStateFile {
|
|
@@ -393,7 +401,8 @@ function normalizePendingState(parsed: Partial<PendingCardStateFile>): PendingCa
|
|
|
393
401
|
(entry.outTrackId === undefined || typeof entry.outTrackId === "string") &&
|
|
394
402
|
typeof entry.conversationId === "string" &&
|
|
395
403
|
(entry.lastContent === undefined || typeof entry.lastContent === "string") &&
|
|
396
|
-
(entry.lastBlockListJson === undefined || typeof entry.lastBlockListJson === "string")
|
|
404
|
+
(entry.lastBlockListJson === undefined || typeof entry.lastBlockListJson === "string") &&
|
|
405
|
+
(entry.streamLifecycleOpened === undefined || typeof entry.streamLifecycleOpened === "boolean"),
|
|
397
406
|
),
|
|
398
407
|
),
|
|
399
408
|
};
|
|
@@ -467,6 +476,7 @@ function upsertPendingCard(card: AICardInstance, storePath?: string, log?: Logge
|
|
|
467
476
|
state: card.state,
|
|
468
477
|
lastContent: card.lastStreamedContent,
|
|
469
478
|
lastBlockListJson: card.lastBlockListJson,
|
|
479
|
+
streamLifecycleOpened: card.streamLifecycleOpened,
|
|
470
480
|
};
|
|
471
481
|
const index = state.pendingCards.findIndex((item) => item.cardInstanceId === card.cardInstanceId);
|
|
472
482
|
if (index >= 0) {
|
|
@@ -647,7 +657,11 @@ export async function sendProactiveCardText(
|
|
|
647
657
|
if (!card) {
|
|
648
658
|
return { ok: false, error: "Failed to create AI card" };
|
|
649
659
|
}
|
|
650
|
-
|
|
660
|
+
const blockListJson = JSON.stringify([{ type: 0, markdown: content } satisfies CardBlock]);
|
|
661
|
+
await commitAICardBlocks(card, {
|
|
662
|
+
blockListJson,
|
|
663
|
+
content,
|
|
664
|
+
}, log);
|
|
651
665
|
return {
|
|
652
666
|
ok: true,
|
|
653
667
|
processQueryKey: card.processQueryKey,
|
|
@@ -733,6 +747,7 @@ async function finalizePendingCardsByAccount(
|
|
|
733
747
|
config,
|
|
734
748
|
lastStreamedContent: entry.lastContent,
|
|
735
749
|
lastBlockListJson: entry.lastBlockListJson,
|
|
750
|
+
streamLifecycleOpened: entry.streamLifecycleOpened,
|
|
736
751
|
};
|
|
737
752
|
try {
|
|
738
753
|
await finalizeStoppedAICard(card, {
|
|
@@ -783,12 +798,13 @@ export async function createAICard(
|
|
|
783
798
|
// DingTalk createAndDeliver API payload.
|
|
784
799
|
// Note: do NOT include template.statusKey here — the createAndDeliver API may
|
|
785
800
|
// reject unknown fields if the template variable is not yet provisioned.
|
|
786
|
-
//
|
|
801
|
+
// flowStatus=2 (INPUTING) is set directly so the card shows "输出中" immediately.
|
|
787
802
|
const cardParamMap = {
|
|
788
803
|
config: JSON.stringify({ autoLayout: true, enableForward: true }),
|
|
789
804
|
[template.streamingKey]: "",
|
|
790
805
|
quoteContent: options.quoteContent || "",
|
|
791
806
|
...(options.statusLine?.trim() ? { statusLine: options.statusLine } : {}),
|
|
807
|
+
flowStatus: AICardStatus.INPUTING,
|
|
792
808
|
// V2 template uses hasAction (string), V1 uses stop_action (string)
|
|
793
809
|
// DingTalk cardParamMap requires all values to be strings
|
|
794
810
|
hasAction: String(STOP_ACTION_VISIBLE),
|
|
@@ -894,18 +910,6 @@ export async function createAICard(
|
|
|
894
910
|
|
|
895
911
|
clearAICardDegrade(accountId, log);
|
|
896
912
|
|
|
897
|
-
// Kick the card into streaming mode immediately so the UI shows "输出中" and the
|
|
898
|
-
// stop button becomes visible. Without this, the card sits in "创建中" skeleton state
|
|
899
|
-
// until the first real content arrives — which may never happen for non-streaming replies.
|
|
900
|
-
// This sends an empty content stream (isFull=true, isFinalize=false) which transitions
|
|
901
|
-
// the card from PROCESSING to INPUTING on the DingTalk side.
|
|
902
|
-
try {
|
|
903
|
-
await putAICardStreamingField(aiCardInstance, template.contentKey, "", false, log);
|
|
904
|
-
aiCardInstance.state = AICardStatus.INPUTING;
|
|
905
|
-
} catch (kickErr: any) {
|
|
906
|
-
log?.debug?.(`[DingTalk][AICard] Non-critical: failed to kick card into streaming mode: ${kickErr.message}`);
|
|
907
|
-
}
|
|
908
|
-
|
|
909
913
|
return aiCardInstance;
|
|
910
914
|
} catch (err: any) {
|
|
911
915
|
log?.error?.(`[DingTalk][AICard] Create failed: ${err.message}`);
|
|
@@ -1043,6 +1047,25 @@ export async function clearAICardStreamingContent(
|
|
|
1043
1047
|
}
|
|
1044
1048
|
}
|
|
1045
1049
|
|
|
1050
|
+
async function finalizeAICardStreamingLifecycleIfNeeded(
|
|
1051
|
+
card: AICardInstance,
|
|
1052
|
+
content: string,
|
|
1053
|
+
log?: Logger,
|
|
1054
|
+
): Promise<void> {
|
|
1055
|
+
if (!card.streamLifecycleOpened) {
|
|
1056
|
+
return;
|
|
1057
|
+
}
|
|
1058
|
+
const template = DINGTALK_CARD_TEMPLATE;
|
|
1059
|
+
try {
|
|
1060
|
+
await putAICardStreamingField(card, template.streamingKey, content, true, log, {
|
|
1061
|
+
suppressDegrade: true,
|
|
1062
|
+
});
|
|
1063
|
+
} catch (err: unknown) {
|
|
1064
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
1065
|
+
log?.warn?.(`[DingTalk][AICard] Streaming lifecycle finalize failed; continuing instances finalize: ${message}`);
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1046
1069
|
/**
|
|
1047
1070
|
* Options for finalizing an AI Card via instances API.
|
|
1048
1071
|
* All variables are written in a single API call for V2 template compatibility.
|
|
@@ -1078,6 +1101,7 @@ export async function commitAICardBlocks(
|
|
|
1078
1101
|
}
|
|
1079
1102
|
|
|
1080
1103
|
await ensureFreshToken(card, log);
|
|
1104
|
+
await finalizeAICardStreamingLifecycleIfNeeded(card, options.content, log);
|
|
1081
1105
|
|
|
1082
1106
|
const template = DINGTALK_CARD_TEMPLATE;
|
|
1083
1107
|
const updates: Record<string, unknown> = {
|
|
@@ -1371,6 +1395,7 @@ export async function finalizeStoppedAICard(
|
|
|
1371
1395
|
await ensureFreshToken(card, log);
|
|
1372
1396
|
const template = DINGTALK_CARD_TEMPLATE;
|
|
1373
1397
|
const payload = buildStoppedCardFinalizePayload(options);
|
|
1398
|
+
await finalizeAICardStreamingLifecycleIfNeeded(card, payload.content, log);
|
|
1374
1399
|
try {
|
|
1375
1400
|
await updateCardVariables(
|
|
1376
1401
|
card.outTrackId || card.cardInstanceId,
|
package/src/channel.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { dingtalkSetupAdapter, dingtalkSetupWizard } from "./onboarding.js";
|
|
|
9
9
|
import { createDingTalkMessageActions } from "./messaging/channel-actions";
|
|
10
10
|
import { createDingTalkOutbound } from "./messaging/channel-outbound";
|
|
11
11
|
import { createDingTalkStatus } from "./platform/channel-status";
|
|
12
|
+
import { hasConfiguredSecretInput } from "./secret-input";
|
|
12
13
|
import {
|
|
13
14
|
listDingTalkDirectoryGroups,
|
|
14
15
|
listDingTalkDirectoryUsers,
|
|
@@ -54,7 +55,9 @@ export const dingtalkPlugin: DingTalkChannelPlugin = {
|
|
|
54
55
|
const id = accountId || "default";
|
|
55
56
|
const account = config.accounts?.[id];
|
|
56
57
|
const resolvedConfig = account ? mergeAccountWithDefaults(config, account) : config;
|
|
57
|
-
const configured = Boolean(
|
|
58
|
+
const configured = Boolean(
|
|
59
|
+
resolvedConfig.clientId && hasConfiguredSecretInput(resolvedConfig.clientSecret),
|
|
60
|
+
);
|
|
58
61
|
return {
|
|
59
62
|
accountId: id,
|
|
60
63
|
config: resolvedConfig,
|
|
@@ -65,7 +68,7 @@ export const dingtalkPlugin: DingTalkChannelPlugin = {
|
|
|
65
68
|
},
|
|
66
69
|
defaultAccountId: (): string => "default",
|
|
67
70
|
isConfigured: (account: ResolvedAccount): boolean =>
|
|
68
|
-
Boolean(account.config?.clientId && account.config?.clientSecret),
|
|
71
|
+
Boolean(account.config?.clientId && hasConfiguredSecretInput(account.config?.clientSecret)),
|
|
69
72
|
describeAccount: (account: ResolvedAccount) => ({
|
|
70
73
|
accountId: account.accountId,
|
|
71
74
|
name: account.config?.name || "DingTalk",
|
package/src/config-schema.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { DEFAULT_MESSAGE_CONTEXT_TTL_DAYS } from "./message-context-store";
|
|
3
|
+
import { buildSecretInputSchema } from "./secret-input";
|
|
3
4
|
|
|
4
5
|
const AckReactionSchema = z.union([
|
|
5
6
|
z.literal(""),
|
|
@@ -29,7 +30,7 @@ const DingTalkAccountConfigShape = {
|
|
|
29
30
|
clientId: z.string().optional(),
|
|
30
31
|
|
|
31
32
|
/** DingTalk App Secret (Client Secret) used to obtain DingTalk access tokens. */
|
|
32
|
-
clientSecret:
|
|
33
|
+
clientSecret: buildSecretInputSchema().optional(),
|
|
33
34
|
|
|
34
35
|
/** Direct-message access policy: open, pairing, or allowlist. */
|
|
35
36
|
dmPolicy: z.enum(["open", "pairing", "allowlist"]).optional().default("open"),
|
package/src/config.ts
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
import * as os from "node:os";
|
|
2
|
-
import * as path from "node:path";
|
|
3
1
|
import type { OpenClawConfig } from "openclaw/plugin-sdk/core";
|
|
2
|
+
import {
|
|
3
|
+
formatSecretInputResolutionFailure,
|
|
4
|
+
hasConfiguredSecretInput,
|
|
5
|
+
resolveDingTalkSecretConfig,
|
|
6
|
+
} from "./secret-input";
|
|
4
7
|
import type { DingTalkChannelConfig, DingTalkConfig } from "./types";
|
|
5
|
-
|
|
6
|
-
const WINDOWS_ROOT_DIRECTORIES = new Set([
|
|
7
|
-
"Users",
|
|
8
|
-
"Program Files",
|
|
9
|
-
"Program Files (x86)",
|
|
10
|
-
"ProgramData",
|
|
11
|
-
"Windows",
|
|
12
|
-
"Documents and Settings",
|
|
13
|
-
]);
|
|
8
|
+
export { resolveRelativePath, resolveUserPath } from "./path-utils";
|
|
14
9
|
const DEFAULT_LEARNING_NOTE_TTL_MS = 6 * 60 * 60 * 1000;
|
|
10
|
+
export type RuntimeDingTalkConfig = Omit<DingTalkConfig, "clientSecret"> & { clientSecret: string };
|
|
15
11
|
|
|
16
12
|
function normalizeLearningConfig(
|
|
17
13
|
config: DingTalkConfig,
|
|
@@ -114,65 +110,26 @@ export function getConfig(cfg: OpenClawConfig, accountId?: string): DingTalkConf
|
|
|
114
110
|
|
|
115
111
|
export function isConfigured(cfg: OpenClawConfig, accountId?: string): boolean {
|
|
116
112
|
const config = getConfig(cfg, accountId);
|
|
117
|
-
return Boolean(config.clientId && config.clientSecret);
|
|
113
|
+
return Boolean(config.clientId && hasConfiguredSecretInput(config.clientSecret));
|
|
118
114
|
}
|
|
119
115
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
* @param input - The path string to resolve
|
|
131
|
-
* @returns The resolved absolute path
|
|
132
|
-
*/
|
|
133
|
-
export function resolveRelativePath(input: string): string {
|
|
134
|
-
const trimmed = input.trim();
|
|
135
|
-
if (!trimmed) {
|
|
136
|
-
return trimmed;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
const segments = (value: string): string[] => value.split(/[\\/]+/).filter(Boolean);
|
|
140
|
-
const pathSegments = segments(trimmed);
|
|
141
|
-
const firstSegment = pathSegments[0];
|
|
142
|
-
|
|
143
|
-
// Expand bare "~" and "~/" or "~\\" prefixes into the user home directory.
|
|
144
|
-
if (trimmed === "~") {
|
|
145
|
-
return path.resolve(os.homedir());
|
|
146
|
-
}
|
|
147
|
-
if (trimmed.startsWith("~/") || trimmed.startsWith("~\\")) {
|
|
148
|
-
return path.resolve(os.homedir(), ...segments(trimmed.slice(2)));
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
if (process.platform === "win32") {
|
|
152
|
-
// On Windows, OpenClaw may drop the leading "\" from root-based paths like
|
|
153
|
-
// "Users\name\.openclaw\workspace\file.xlsx". Only recover paths that start
|
|
154
|
-
// with well-known root directories to avoid misclassifying ordinary relative paths.
|
|
155
|
-
if (/^[a-zA-Z]:[\\/]/.test(trimmed)) {
|
|
156
|
-
return path.win32.normalize(trimmed);
|
|
157
|
-
}
|
|
158
|
-
if (firstSegment && /^[a-zA-Z]:$/.test(firstSegment)) {
|
|
159
|
-
return path.win32.resolve(`${firstSegment}\\`, ...pathSegments.slice(1));
|
|
160
|
-
}
|
|
161
|
-
if (firstSegment && WINDOWS_ROOT_DIRECTORIES.has(firstSegment)) {
|
|
162
|
-
return path.win32.resolve("\\", ...pathSegments);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
// Treat both "/" and "\\" as absolute root prefixes for cross-platform input.
|
|
166
|
-
if (/^[\\/]/.test(trimmed)) {
|
|
167
|
-
return path.resolve(path.sep, ...pathSegments);
|
|
116
|
+
export async function resolveRuntimeConfig(
|
|
117
|
+
config: DingTalkConfig,
|
|
118
|
+
log?: { warn?: (message: string, data?: unknown) => void },
|
|
119
|
+
): Promise<RuntimeDingTalkConfig> {
|
|
120
|
+
const resolved = await resolveDingTalkSecretConfig(config, log);
|
|
121
|
+
if (!resolved.clientId || !resolved.clientSecret) {
|
|
122
|
+
const secretFailure = resolved.clientSecretResolutionFailure
|
|
123
|
+
? `: clientSecret resolution failed for ${formatSecretInputResolutionFailure(resolved.clientSecretResolutionFailure)}`
|
|
124
|
+
: "";
|
|
125
|
+
throw new Error(`DingTalk clientId and resolved clientSecret are required${secretFailure}`);
|
|
168
126
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
127
|
+
return {
|
|
128
|
+
...resolved,
|
|
129
|
+
clientSecret: resolved.clientSecret,
|
|
130
|
+
};
|
|
172
131
|
}
|
|
173
132
|
|
|
174
|
-
export const resolveUserPath = resolveRelativePath;
|
|
175
|
-
|
|
176
133
|
/**
|
|
177
134
|
* Resolve the robot code used by DingTalk APIs.
|
|
178
135
|
* DingTalk robotCode is always equal to clientId; this helper trims whitespace.
|
|
@@ -363,7 +320,7 @@ export function resolveDingTalkAccount(
|
|
|
363
320
|
return {
|
|
364
321
|
...config,
|
|
365
322
|
accountId: id,
|
|
366
|
-
configured: Boolean(config.clientId && config.clientSecret),
|
|
323
|
+
configured: Boolean(config.clientId && hasConfiguredSecretInput(config.clientSecret)),
|
|
367
324
|
};
|
|
368
325
|
}
|
|
369
326
|
|
|
@@ -377,7 +334,7 @@ export function resolveDingTalkAccount(
|
|
|
377
334
|
return {
|
|
378
335
|
...publicMerged,
|
|
379
336
|
accountId: id,
|
|
380
|
-
configured: Boolean(merged.clientId && merged.clientSecret),
|
|
337
|
+
configured: Boolean(merged.clientId && hasConfiguredSecretInput(merged.clientSecret)),
|
|
381
338
|
};
|
|
382
339
|
}
|
|
383
340
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
1
|
import httpClient from "./http-client.js";
|
|
3
2
|
|
|
4
3
|
// ── Constants ──────────────────────────────────────────────────────────────
|
|
@@ -212,34 +211,3 @@ export async function beginDeviceRegistration(): Promise<DeviceRegistrationSessi
|
|
|
212
211
|
|
|
213
212
|
return { verificationUrl, waitForResult };
|
|
214
213
|
}
|
|
215
|
-
|
|
216
|
-
// ── Browser helper ─────────────────────────────────────────────────────────
|
|
217
|
-
|
|
218
|
-
export function openUrlInBrowser(url: string): void {
|
|
219
|
-
// Validate URL before handing to OS launcher
|
|
220
|
-
try {
|
|
221
|
-
const parsed = new URL(url);
|
|
222
|
-
if (parsed.protocol !== "https:" || !parsed.hostname.endsWith(".dingtalk.com")) {
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
} catch {
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
const platform = process.platform;
|
|
230
|
-
let bin: string;
|
|
231
|
-
let args: string[];
|
|
232
|
-
if (platform === "darwin") {
|
|
233
|
-
bin = "open";
|
|
234
|
-
args = [url];
|
|
235
|
-
} else if (platform === "win32") {
|
|
236
|
-
bin = "cmd";
|
|
237
|
-
args = ["/c", "start", "", url];
|
|
238
|
-
} else {
|
|
239
|
-
bin = "xdg-open";
|
|
240
|
-
args = [url];
|
|
241
|
-
}
|
|
242
|
-
execFile(bin, args, (err) => {
|
|
243
|
-
void err;
|
|
244
|
-
});
|
|
245
|
-
}
|