@soimy/dingtalk 3.6.1 → 3.6.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 (163) hide show
  1. package/dist/index.d.ts +14 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +14603 -0
  4. package/dist/index.js.map +7 -0
  5. package/dist/src/access-control.d.ts +43 -0
  6. package/dist/src/access-control.d.ts.map +1 -0
  7. package/dist/src/ack-reaction/dynamic-ack-reaction-controller.d.ts +22 -0
  8. package/dist/src/ack-reaction/dynamic-ack-reaction-controller.d.ts.map +1 -0
  9. package/dist/src/ack-reaction/dynamic-ack-reaction-events.d.ts +36 -0
  10. package/dist/src/ack-reaction/dynamic-ack-reaction-events.d.ts.map +1 -0
  11. package/dist/src/ack-reaction/dynamic-ack-reaction-progress.d.ts +7 -0
  12. package/dist/src/ack-reaction/dynamic-ack-reaction-progress.d.ts.map +1 -0
  13. package/dist/src/ack-reaction-classifier.d.ts +8 -0
  14. package/dist/src/ack-reaction-classifier.d.ts.map +1 -0
  15. package/dist/src/ack-reaction-service.d.ts +15 -0
  16. package/dist/src/ack-reaction-service.d.ts.map +1 -0
  17. package/dist/src/auth.d.ts +7 -0
  18. package/dist/src/auth.d.ts.map +1 -0
  19. package/dist/src/card/card-action-handler.d.ts +14 -0
  20. package/dist/src/card/card-action-handler.d.ts.map +1 -0
  21. package/dist/src/card/card-markdown-image-reroute.d.ts +16 -0
  22. package/dist/src/card/card-markdown-image-reroute.d.ts.map +1 -0
  23. package/dist/src/card/card-run-registry.d.ts +60 -0
  24. package/dist/src/card/card-run-registry.d.ts.map +1 -0
  25. package/dist/src/card/card-stop-handler.d.ts +18 -0
  26. package/dist/src/card/card-stop-handler.d.ts.map +1 -0
  27. package/dist/src/card/card-streaming-mode.d.ts +8 -0
  28. package/dist/src/card/card-streaming-mode.d.ts.map +1 -0
  29. package/dist/src/card/card-template.d.ts +21 -0
  30. package/dist/src/card/card-template.d.ts.map +1 -0
  31. package/dist/src/card/reasoning-answer-split.d.ts +6 -0
  32. package/dist/src/card/reasoning-answer-split.d.ts.map +1 -0
  33. package/dist/src/card/reasoning-block-assembler.d.ts +7 -0
  34. package/dist/src/card/reasoning-block-assembler.d.ts.map +1 -0
  35. package/dist/src/card/statusline-renderer.d.ts +24 -0
  36. package/dist/src/card/statusline-renderer.d.ts.map +1 -0
  37. package/dist/src/card-callback-service.d.ts +23 -0
  38. package/dist/src/card-callback-service.d.ts.map +1 -0
  39. package/dist/src/card-draft-controller.d.ts +75 -0
  40. package/dist/src/card-draft-controller.d.ts.map +1 -0
  41. package/dist/src/card-service.d.ts +99 -0
  42. package/dist/src/card-service.d.ts.map +1 -0
  43. package/dist/src/channel.d.ts +10 -0
  44. package/dist/src/channel.d.ts.map +1 -0
  45. package/dist/src/command/card-stop-command.d.ts +30 -0
  46. package/dist/src/command/card-stop-command.d.ts.map +1 -0
  47. package/dist/src/command/inbound-command-dispatch-service.d.ts +40 -0
  48. package/dist/src/command/inbound-command-dispatch-service.d.ts.map +1 -0
  49. package/dist/src/config-schema.d.ts +8 -0
  50. package/dist/src/config-schema.d.ts.map +1 -0
  51. package/dist/src/config.d.ts +60 -0
  52. package/dist/src/config.d.ts.map +1 -0
  53. package/dist/src/connection-manager.d.ts +148 -0
  54. package/dist/src/connection-manager.d.ts.map +1 -0
  55. package/dist/src/dedup.d.ts +4 -0
  56. package/dist/src/dedup.d.ts.map +1 -0
  57. package/dist/src/device-registration.d.ts +16 -0
  58. package/dist/src/device-registration.d.ts.map +1 -0
  59. package/dist/src/docs-service.d.ts +12 -0
  60. package/dist/src/docs-service.d.ts.map +1 -0
  61. package/dist/src/draft-stream-loop.d.ts +28 -0
  62. package/dist/src/draft-stream-loop.d.ts.map +1 -0
  63. package/dist/src/feedback-learning-service.d.ts +123 -0
  64. package/dist/src/feedback-learning-service.d.ts.map +1 -0
  65. package/dist/src/feedback-learning-store.d.ts +181 -0
  66. package/dist/src/feedback-learning-store.d.ts.map +1 -0
  67. package/dist/src/gateway/channel-gateway.d.ts +4 -0
  68. package/dist/src/gateway/channel-gateway.d.ts.map +1 -0
  69. package/dist/src/http-client.d.ts +9 -0
  70. package/dist/src/http-client.d.ts.map +1 -0
  71. package/dist/src/inbound-handler.d.ts +9 -0
  72. package/dist/src/inbound-handler.d.ts.map +1 -0
  73. package/dist/src/learning-command-service.d.ts +64 -0
  74. package/dist/src/learning-command-service.d.ts.map +1 -0
  75. package/dist/src/logger-context.d.ts +10 -0
  76. package/dist/src/logger-context.d.ts.map +1 -0
  77. package/dist/src/media-utils.d.ts +63 -0
  78. package/dist/src/media-utils.d.ts.map +1 -0
  79. package/dist/src/message-context-store.d.ts +126 -0
  80. package/dist/src/message-context-store.d.ts.map +1 -0
  81. package/dist/src/message-utils.d.ts +12 -0
  82. package/dist/src/message-utils.d.ts.map +1 -0
  83. package/dist/src/messaging/attachment-text-extractor.d.ts +13 -0
  84. package/dist/src/messaging/attachment-text-extractor.d.ts.map +1 -0
  85. package/dist/src/messaging/btw-deliver.d.ts +42 -0
  86. package/dist/src/messaging/btw-deliver.d.ts.map +1 -0
  87. package/dist/src/messaging/channel-actions.d.ts +3 -0
  88. package/dist/src/messaging/channel-actions.d.ts.map +1 -0
  89. package/dist/src/messaging/channel-outbound.d.ts +3 -0
  90. package/dist/src/messaging/channel-outbound.d.ts.map +1 -0
  91. package/dist/src/messaging/quoted-context.d.ts +36 -0
  92. package/dist/src/messaging/quoted-context.d.ts.map +1 -0
  93. package/dist/src/messaging/quoted-file-service.d.ts +25 -0
  94. package/dist/src/messaging/quoted-file-service.d.ts.map +1 -0
  95. package/dist/src/messaging/quoted-ref.d.ts +12 -0
  96. package/dist/src/messaging/quoted-ref.d.ts.map +1 -0
  97. package/dist/src/onboarding.d.ts +4 -0
  98. package/dist/src/onboarding.d.ts.map +1 -0
  99. package/dist/src/path-utils.d.ts +3 -0
  100. package/dist/src/path-utils.d.ts.map +1 -0
  101. package/dist/src/peer-id-registry.d.ts +35 -0
  102. package/dist/src/peer-id-registry.d.ts.map +1 -0
  103. package/dist/src/persistence-store.d.ts +27 -0
  104. package/dist/src/persistence-store.d.ts.map +1 -0
  105. package/dist/src/platform/channel-status.d.ts +3 -0
  106. package/dist/src/platform/channel-status.d.ts.map +1 -0
  107. package/dist/src/plugin-sdk-channel-actions-augment.d.ts +7 -0
  108. package/dist/src/plugin-sdk-channel-actions-augment.d.ts.map +1 -0
  109. package/dist/src/proactive-risk-registry.d.ts +22 -0
  110. package/dist/src/proactive-risk-registry.d.ts.map +1 -0
  111. package/dist/src/reply-strategy-card.d.ts +14 -0
  112. package/dist/src/reply-strategy-card.d.ts.map +1 -0
  113. package/dist/src/reply-strategy-markdown.d.ts +10 -0
  114. package/dist/src/reply-strategy-markdown.d.ts.map +1 -0
  115. package/dist/src/reply-strategy-types.d.ts +85 -0
  116. package/dist/src/reply-strategy-types.d.ts.map +1 -0
  117. package/dist/src/reply-strategy-with-reaction.d.ts +47 -0
  118. package/dist/src/reply-strategy-with-reaction.d.ts.map +1 -0
  119. package/dist/src/reply-strategy.d.ts +14 -0
  120. package/dist/src/reply-strategy.d.ts.map +1 -0
  121. package/dist/src/run-usage-store.d.ts +15 -0
  122. package/dist/src/run-usage-store.d.ts.map +1 -0
  123. package/dist/src/runtime.d.ts +4 -0
  124. package/dist/src/runtime.d.ts.map +1 -0
  125. package/dist/src/secret-input.d.ts +42 -0
  126. package/dist/src/secret-input.d.ts.map +1 -0
  127. package/dist/src/send-service.d.ts +46 -0
  128. package/dist/src/send-service.d.ts.map +1 -0
  129. package/dist/src/session-command-service.d.ts +35 -0
  130. package/dist/src/session-command-service.d.ts.map +1 -0
  131. package/dist/src/session-lock.d.ts +11 -0
  132. package/dist/src/session-lock.d.ts.map +1 -0
  133. package/dist/src/session-peer-store.d.ts +21 -0
  134. package/dist/src/session-peer-store.d.ts.map +1 -0
  135. package/dist/src/session-routing.d.ts +14 -0
  136. package/dist/src/session-routing.d.ts.map +1 -0
  137. package/dist/src/session-state.d.ts +13 -0
  138. package/dist/src/session-state.d.ts.map +1 -0
  139. package/dist/src/signature.d.ts +6 -0
  140. package/dist/src/signature.d.ts.map +1 -0
  141. package/dist/src/targeting/agent-name-matcher.d.ts +63 -0
  142. package/dist/src/targeting/agent-name-matcher.d.ts.map +1 -0
  143. package/dist/src/targeting/agent-routing.d.ts +72 -0
  144. package/dist/src/targeting/agent-routing.d.ts.map +1 -0
  145. package/dist/src/targeting/group-members-store.d.ts +3 -0
  146. package/dist/src/targeting/group-members-store.d.ts.map +1 -0
  147. package/dist/src/targeting/target-directory-adapter.d.ts +13 -0
  148. package/dist/src/targeting/target-directory-adapter.d.ts.map +1 -0
  149. package/dist/src/targeting/target-directory-store.d.ts +45 -0
  150. package/dist/src/targeting/target-directory-store.d.ts.map +1 -0
  151. package/dist/src/targeting/target-input.d.ts +3 -0
  152. package/dist/src/targeting/target-input.d.ts.map +1 -0
  153. package/dist/src/types.d.ts +730 -0
  154. package/dist/src/types.d.ts.map +1 -0
  155. package/dist/src/utils.d.ts +54 -0
  156. package/dist/src/utils.d.ts.map +1 -0
  157. package/index.ts +234 -16
  158. package/openclaw.plugin.json +5 -5
  159. package/package.json +26 -5
  160. package/src/device-registration.ts +0 -32
  161. package/src/gateway/channel-gateway.ts +1 -1
  162. package/src/onboarding.ts +3 -7
  163. package/src/secret-input.ts +13 -47
@@ -1,11 +1,9 @@
1
- import { execFile } from "node:child_process";
2
1
  import { readFile } from "node:fs/promises";
3
- import { promisify } from "node:util";
4
2
  import { z } from "zod";
5
3
  import { resolveRelativePath } from "./path-utils";
6
4
 
7
5
  export type SecretInputRef = {
8
- source: "env" | "file" | "exec";
6
+ source: "env" | "file";
9
7
  provider: string;
10
8
  id: string;
11
9
  };
@@ -19,13 +17,10 @@ export type SecretInputResolutionFailure = {
19
17
  reason: string;
20
18
  };
21
19
 
22
- export const SECRET_INPUT_EXEC_TIMEOUT_MS = 5000;
23
-
24
20
  type SecretInputLog = {
25
21
  warn?: (message: string, data?: unknown) => void;
26
22
  };
27
23
 
28
- const execFileAsync = promisify(execFile);
29
24
  const SECRET_INPUT_PROVIDER_PATTERN = /^[^:>]+$/;
30
25
  const SECRET_INPUT_ID_PATTERN = /^[^>]+$/;
31
26
 
@@ -49,7 +44,7 @@ export function buildSecretInputSchema() {
49
44
  return z.union([
50
45
  z.string(),
51
46
  z.object({
52
- source: z.enum(["env", "file", "exec"]),
47
+ source: z.enum(["env", "file"]),
53
48
  provider: z.string().min(1).max(1024).regex(SECRET_INPUT_PROVIDER_PATTERN),
54
49
  id: z.string().min(1).max(1024).regex(SECRET_INPUT_ID_PATTERN),
55
50
  }),
@@ -62,7 +57,7 @@ export function isSecretInputRef(value: unknown): value is SecretInputRef {
62
57
  }
63
58
  const ref = value as SecretInputRef;
64
59
  return (
65
- (ref.source === "env" || ref.source === "file" || ref.source === "exec") &&
60
+ (ref.source === "env" || ref.source === "file") &&
66
61
  typeof ref.provider === "string" &&
67
62
  ref.provider.trim().length > 0 &&
68
63
  SECRET_INPUT_PROVIDER_PATTERN.test(ref.provider) &&
@@ -82,9 +77,9 @@ export function hasConfiguredSecretInput(value: unknown): boolean {
82
77
  if (value.source === "env") {
83
78
  return Boolean(process.env[value.id]?.trim());
84
79
  }
85
- // file/exec references are considered configured when the reference shape is
86
- // present. The actual filesystem/process lookup happens at runtime so status
87
- // checks can stay side-effect free.
80
+ // File references are considered configured when the reference shape is
81
+ // present. The actual filesystem lookup happens at runtime so status checks
82
+ // can stay side-effect free.
88
83
  return true;
89
84
  }
90
85
 
@@ -107,7 +102,7 @@ export function parseSecretInputString(value: unknown): SecretInput | undefined
107
102
  if (!trimmed) {
108
103
  return undefined;
109
104
  }
110
- const match = trimmed.match(/^<(env|file|exec):([^:>]+):([^>]+)>$/);
105
+ const match = trimmed.match(/^<(env|file):([^:>]+):([^>]+)>$/);
111
106
  if (!match) {
112
107
  return trimmed;
113
108
  }
@@ -149,50 +144,21 @@ export async function resolveSecretInputStringWithFailure(
149
144
  });
150
145
  return { failure };
151
146
  }
152
- if (value.source === "file") {
153
- try {
154
- // Trust boundary: file SecretInput reads the configured local path. Use it
155
- // only with trusted plugin configuration.
156
- const filePath = resolveRelativePath(value.id);
157
- const secret = (await readFile(filePath, "utf8")).trim();
158
- if (secret) {
159
- return { value: secret };
160
- }
161
- return { failure: buildSecretInputFailure(value, "file secret is empty") };
162
- } catch (error) {
163
- const failure = buildSecretInputFailure(
164
- value,
165
- error instanceof Error ? error.message : String(error),
166
- );
167
- log?.warn?.("[DingTalk][SecretInput] Failed to read file secret", {
168
- provider: value.provider,
169
- id: value.id,
170
- error: failure.reason,
171
- });
172
- return { failure };
173
- }
174
- }
175
147
  try {
176
- // Trust boundary: exec SecretInput runs the configured provider binary with
177
- // the secret id as its only argument. Use it only with trusted plugin
178
- // configuration; execFile avoids shell interpolation but still executes the
179
- // selected program.
180
- const result = await execFileAsync(value.provider, [value.id], {
181
- encoding: "utf8",
182
- timeout: SECRET_INPUT_EXEC_TIMEOUT_MS,
183
- windowsHide: true,
184
- });
185
- const secret = String(result.stdout).trim();
148
+ // Trust boundary: file SecretInput reads the configured local path. Use it
149
+ // only with trusted plugin configuration.
150
+ const filePath = resolveRelativePath(value.id);
151
+ const secret = (await readFile(filePath, "utf8")).trim();
186
152
  if (secret) {
187
153
  return { value: secret };
188
154
  }
189
- return { failure: buildSecretInputFailure(value, "exec secret output is empty") };
155
+ return { failure: buildSecretInputFailure(value, "file secret is empty") };
190
156
  } catch (error) {
191
157
  const failure = buildSecretInputFailure(
192
158
  value,
193
159
  error instanceof Error ? error.message : String(error),
194
160
  );
195
- log?.warn?.("[DingTalk][SecretInput] Failed to resolve exec secret", {
161
+ log?.warn?.("[DingTalk][SecretInput] Failed to read file secret", {
196
162
  provider: value.provider,
197
163
  id: value.id,
198
164
  error: failure.reason,