@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
@@ -0,0 +1,43 @@
1
+ export type NormalizedAllowFrom = {
2
+ entries: string[];
3
+ entriesLower: string[];
4
+ hasWildcard: boolean;
5
+ hasEntries: boolean;
6
+ };
7
+ /**
8
+ * Normalize allowFrom list:
9
+ * - trim whitespace
10
+ * - support "dingtalk:/dd:/ding:" prefixes
11
+ * - precompute lower-case list for case-insensitive checks
12
+ */
13
+ export declare function normalizeAllowFrom(list?: Array<string>): NormalizedAllowFrom;
14
+ export declare function isSenderAllowed(params: {
15
+ allow: NormalizedAllowFrom;
16
+ senderId?: string;
17
+ }): boolean;
18
+ export declare function isSenderGroupAllowed(params: {
19
+ allow: NormalizedAllowFrom;
20
+ groupId?: string;
21
+ }): boolean;
22
+ export type GroupAccessResult = {
23
+ allowed: boolean;
24
+ reason?: "disabled" | "group_not_allowed" | "sender_not_allowed";
25
+ legacyFallback?: boolean;
26
+ };
27
+ export type GroupAccessParams = {
28
+ groupPolicy: "open" | "allowlist" | "disabled";
29
+ groupId: string;
30
+ senderId: string;
31
+ groups?: Record<string, {
32
+ groupAllowFrom?: string[];
33
+ }>;
34
+ groupAllowFrom?: string[];
35
+ allowFrom?: string[];
36
+ };
37
+ export declare function resolveGroupAccess(params: GroupAccessParams): GroupAccessResult;
38
+ export declare function isSenderOwner(params: {
39
+ allow: NormalizedAllowFrom;
40
+ senderId?: string;
41
+ rawSenderId?: string;
42
+ }): boolean;
43
+ //# sourceMappingURL=access-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-control.d.ts","sourceRoot":"","sources":["../../src/access-control.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,mBAAmB,CAa5E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAYV;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,KAAK,EAAE,mBAAmB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAMV;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;IACjE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAgD/E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAYV"}
@@ -0,0 +1,22 @@
1
+ import type { DingTalkConfig } from "../types";
2
+ import { type DynamicAckReactionLogger, type RuntimeEventsSurface } from "./dynamic-ack-reaction-events";
3
+ type DynamicAckReactionControllerParams = {
4
+ enabled: boolean;
5
+ initialReaction: string;
6
+ initialAttached: boolean;
7
+ initialAttachedAt: number;
8
+ dingtalkConfig: DingTalkConfig;
9
+ msgId: string;
10
+ conversationId: string;
11
+ sessionKey: string;
12
+ log?: DynamicAckReactionLogger;
13
+ runtimeEvents?: RuntimeEventsSurface;
14
+ onReactionDisposed?: () => void;
15
+ };
16
+ export declare function createDynamicAckReactionController(params: DynamicAckReactionControllerParams): {
17
+ awaitDrain(): Promise<void>;
18
+ dispose(minVisibleMs: number): Promise<void>;
19
+ stop: () => void;
20
+ };
21
+ export {};
22
+ //# sourceMappingURL=dynamic-ack-reaction-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-ack-reaction-controller.d.ts","sourceRoot":"","sources":["../../../src/ack-reaction/dynamic-ack-reaction-controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EAGL,KAAK,wBAAwB,EAE7B,KAAK,oBAAoB,EAC1B,MAAM,+BAA+B,CAAC;AAGvC,KAAK,kCAAkC,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,cAAc,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,wBAAwB,CAAC;IAC/B,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC,CAAC;AAQF,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,kCAAkC;kBA2MrE,OAAO,CAAC,IAAI,CAAC;0BAGL,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;gBAhBnC,IAAI;EAgDtB"}
@@ -0,0 +1,36 @@
1
+ export type DynamicAckReactionLogger = {
2
+ debug?: (msg: string) => void;
3
+ info?: (msg: string) => void;
4
+ warn?: (msg: string) => void;
5
+ };
6
+ export type RuntimeAgentEvent = {
7
+ stream?: string;
8
+ runId?: string;
9
+ sessionKey?: string;
10
+ data?: {
11
+ phase?: string;
12
+ name?: string;
13
+ args?: unknown;
14
+ runId?: string;
15
+ sessionKey?: string;
16
+ toolCallId?: string;
17
+ meta?: {
18
+ runId?: string;
19
+ sessionKey?: string;
20
+ } | null;
21
+ };
22
+ };
23
+ export type RuntimeEventsSurface = {
24
+ onAgentEvent?: (listener: (event: unknown) => void) => (() => void);
25
+ };
26
+ export declare function getEventRunId(event: RuntimeAgentEvent | undefined): string | undefined;
27
+ export declare function getEventSessionKey(event: RuntimeAgentEvent | undefined): string | undefined;
28
+ export declare function describeEvent(event: RuntimeAgentEvent | undefined): string;
29
+ export declare function createDynamicAckReactionCorrelator(params: {
30
+ sessionKey: string;
31
+ enabled: boolean;
32
+ createdAt: number;
33
+ optimisticCaptureWindowMs: number;
34
+ log?: DynamicAckReactionLogger;
35
+ }): (event: RuntimeAgentEvent | undefined) => boolean;
36
+ //# sourceMappingURL=dynamic-ack-reaction-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-ack-reaction-events.d.ts","sourceRoot":"","sources":["../../../src/ack-reaction/dynamic-ack-reaction-events.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE;YACL,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,GAAG,IAAI,CAAC;KACV,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;CACrE,CAAC;AAWF,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEtF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE3F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAO1E;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB,EAAE,MAAM,CAAC;IAClC,GAAG,CAAC,EAAE,wBAAwB,CAAC;CAChC,IAKS,OAAO,iBAAiB,GAAG,SAAS,KAAG,OAAO,CAuDvD"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Tool names here come from the runtime `onAgentEvent` tool-start payload.
3
+ * The runtime does not expose a typed enum on this event surface yet,
4
+ * so this mapping is intentionally best-effort and keeps a safe default.
5
+ */
6
+ export declare function resolveToolProgressReaction(toolName: unknown, args: unknown): string;
7
+ //# sourceMappingURL=dynamic-ack-reaction-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-ack-reaction-progress.d.ts","sourceRoot":"","sources":["../../../src/ack-reaction/dynamic-ack-reaction-progress.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAuCpF"}
@@ -0,0 +1,8 @@
1
+ type SentenceType = "夸奖" | "责怪" | "命令" | "叙事" | "请求" | "未知";
2
+ type AckReactionClassifyResult = {
3
+ type: SentenceType;
4
+ emoji: string;
5
+ };
6
+ export declare function classifyAckReactionEmoji(sentence: unknown): AckReactionClassifyResult;
7
+ export {};
8
+ //# sourceMappingURL=ack-reaction-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ack-reaction-classifier.d.ts","sourceRoot":"","sources":["../../src/ack-reaction-classifier.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5D,KAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAyCF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,GAAG,yBAAyB,CA4BrF"}
@@ -0,0 +1,15 @@
1
+ import type { DingTalkConfig } from "./types";
2
+ type AckReactionLogger = {
3
+ debug?: (msg: string) => void;
4
+ info?: (msg: string) => void;
5
+ warn?: (msg: string) => void;
6
+ };
7
+ type AckReactionTarget = {
8
+ msgId: string;
9
+ conversationId: string;
10
+ reactionName?: string;
11
+ };
12
+ export declare function attachNativeAckReaction(config: DingTalkConfig, data: AckReactionTarget, log?: AckReactionLogger): Promise<boolean>;
13
+ export declare function recallNativeAckReactionWithRetry(config: DingTalkConfig, data: AckReactionTarget, log?: AckReactionLogger): Promise<void>;
14
+ export {};
15
+ //# sourceMappingURL=ack-reaction-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ack-reaction-service.d.ts","sourceRoot":"","sources":["../../src/ack-reaction-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAc9C,KAAK,iBAAiB,GAAG;IACvB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAoGF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,iBAAiB,EACvB,GAAG,CAAC,EAAE,iBAAiB,GACtB,OAAO,CAAC,OAAO,CAAC,CAiClB;AAmBD,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,iBAAiB,EACvB,GAAG,CAAC,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAaf"}
@@ -0,0 +1,7 @@
1
+ import type { DingTalkConfig, Logger } from "./types";
2
+ /**
3
+ * Get DingTalk access token with clientId-scoped cache + retry.
4
+ * Refreshes token one minute before expiry to avoid near-expiry failures.
5
+ */
6
+ export declare function getAccessToken(config: DingTalkConfig, log?: Logger): Promise<string>;
7
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAa,MAAM,SAAS,CAAC;AAWjE;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC1F"}
@@ -0,0 +1,14 @@
1
+ import type { OpenClawConfig } from "openclaw/plugin-sdk/core";
2
+ import type { CardCallbackAnalysis } from "../card-callback-service";
3
+ import type { DingTalkConfig, Logger } from "../types";
4
+ export interface CardActionResult {
5
+ handled: boolean;
6
+ }
7
+ export declare function handleCardAction(params: {
8
+ analysis: CardCallbackAnalysis;
9
+ cfg: OpenClawConfig;
10
+ accountId: string;
11
+ config: DingTalkConfig;
12
+ log?: Logger;
13
+ }): Promise<CardActionResult>;
14
+ //# sourceMappingURL=card-action-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-action-handler.d.ts","sourceRoot":"","sources":["../../../src/card/card-action-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,GAAG,EAAE,cAAc,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6C5B"}
@@ -0,0 +1,16 @@
1
+ export type MarkdownImageUrlClassification = "public" | "local" | "unsupported";
2
+ export interface MarkdownImageCandidate {
3
+ alt: string;
4
+ url: string;
5
+ raw: string;
6
+ classification: MarkdownImageUrlClassification;
7
+ start: number;
8
+ end: number;
9
+ }
10
+ export declare function classifyMarkdownImageUrl(url: string): MarkdownImageUrlClassification;
11
+ export declare function buildImagePlaceholderText(input: {
12
+ alt: string;
13
+ url: string;
14
+ }): string;
15
+ export declare function extractMarkdownImageCandidates(text: string): MarkdownImageCandidate[];
16
+ //# sourceMappingURL=card-markdown-image-reroute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-markdown-image-reroute.d.ts","sourceRoot":"","sources":["../../../src/card/card-markdown-image-reroute.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,8BAA8B,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;AAEhF,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,8BAA8B,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAuCD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,8BAA8B,CAsBpF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAYrF;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAmBrF"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * In-process card run registry for tracking active AI card runs.
3
+ *
4
+ * DEPLOYMENT CONSTRAINT: This registry uses a process-local Map. In multi-process
5
+ * deployments (cluster/PM2), stop callbacks may route to a different worker than
6
+ * the one that created the card run, causing resolveCardRun to return null and
7
+ * the stop button to silently fail. Ensure single-process deployment or sticky
8
+ * routing per card callback when using the stop button feature.
9
+ */
10
+ import type { CardDraftController } from "../card-draft-controller";
11
+ import type { AICardInstance } from "../types";
12
+ export interface CardRunRecord {
13
+ outTrackId: string;
14
+ accountId: string;
15
+ sessionKey: string;
16
+ /** OpenClaw agent ID resolved from the inbound route. */
17
+ agentId: string;
18
+ /** DingTalk userId of the user who initiated this card run. */
19
+ ownerUserId?: string;
20
+ card?: AICardInstance;
21
+ controller?: CardDraftController;
22
+ stopRequestedAt?: number;
23
+ registeredAt: number;
24
+ }
25
+ export declare function registerCardRun(outTrackId: string, params: {
26
+ accountId: string;
27
+ sessionKey: string;
28
+ agentId: string;
29
+ ownerUserId?: string;
30
+ card?: AICardInstance;
31
+ /** Override registeredAt timestamp (useful for tests). */
32
+ registeredAt?: number;
33
+ }): void;
34
+ export declare function attachCardRunController(outTrackId: string, controller: CardDraftController): void;
35
+ export declare function resolveCardRun(outTrackId: string): CardRunRecord | null;
36
+ /**
37
+ * Find the most recently registered card run for a given account + conversation.
38
+ * Uses case-insensitive match of the conversationId within sessionKey.
39
+ *
40
+ * @param accountId - The DingTalk account ID
41
+ * @param conversationId - The target conversation ID (matches within sessionKey)
42
+ * @param options - Optional filtering criteria
43
+ * @param options.ownerUserId - If provided, only return runs owned by this user
44
+ */
45
+ export declare function resolveCardRunByConversation(accountId: string, conversationId: string, options?: {
46
+ ownerUserId?: string;
47
+ }): CardRunRecord | null;
48
+ /**
49
+ * Find the most recently registered card run for a given account + owner.
50
+ * This is a fallback query when conversationId is unavailable (e.g., sessionKey=-).
51
+ *
52
+ * @param accountId - The DingTalk account ID
53
+ * @param ownerUserId - The DingTalk userId of the card owner
54
+ */
55
+ export declare function resolveCardRunByOwner(accountId: string, ownerUserId: string): CardRunRecord | null;
56
+ export declare function markCardRunStopRequested(outTrackId: string): void;
57
+ export declare function isCardRunStopRequested(outTrackId: string): boolean;
58
+ export declare function removeCardRun(outTrackId: string): void;
59
+ export declare function clearCardRunRegistryForTest(): void;
60
+ //# sourceMappingURL=card-run-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-run-registry.d.ts","sourceRoot":"","sources":["../../../src/card/card-run-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AA+BD,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE;IACN,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,IAAI,CAeN;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAKjG;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAEvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC,aAAa,GAAG,IAAI,CActB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,aAAa,GAAG,IAAI,CAUtB;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAKjE;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAElE;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAMtD;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAMlD"}
@@ -0,0 +1,18 @@
1
+ import type { OpenClawConfig } from "openclaw/plugin-sdk/core";
2
+ import type { DingTalkConfig, Logger } from "../types";
3
+ export interface StopCardRunResult {
4
+ ok: boolean;
5
+ status: string;
6
+ reason?: string;
7
+ /** Last streamed content before stop, so callback response can preserve it. */
8
+ lastContent?: string;
9
+ }
10
+ export declare function stopCardRun(params: {
11
+ cfg: OpenClawConfig;
12
+ accountId: string;
13
+ outTrackId: string;
14
+ config?: DingTalkConfig;
15
+ clickerUserId?: string;
16
+ log?: Logger;
17
+ }): Promise<StopCardRunResult>;
18
+ //# sourceMappingURL=card-stop-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-stop-handler.d.ts","sourceRoot":"","sources":["../../../src/card/card-stop-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE;IACxC,GAAG,EAAE,cAAc,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6D7B"}
@@ -0,0 +1,8 @@
1
+ import type { DingTalkConfig } from "../types";
2
+ export type CardStreamingMode = "off" | "answer" | "all";
3
+ export declare function resolveCardStreamingMode(config: Pick<DingTalkConfig, "cardStreamingMode" | "cardRealTimeStream">): {
4
+ mode: CardStreamingMode;
5
+ usedDeprecatedCardRealTimeStream: boolean;
6
+ };
7
+ export declare function shouldWarnDeprecatedCardRealTimeStreamOnce(configKey: string): boolean;
8
+ //# sourceMappingURL=card-streaming-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-streaming-mode.d.ts","sourceRoot":"","sources":["../../../src/card/card-streaming-mode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAC;AAMzD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,mBAAmB,GAAG,oBAAoB,CAAC,GACvE;IACD,IAAI,EAAE,iBAAiB,CAAC;IACxB,gCAAgC,EAAE,OAAO,CAAC;CAC3C,CAQA;AAED,wBAAgB,0CAA0C,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAMrF"}
@@ -0,0 +1,21 @@
1
+ /** Card variable value that shows the stop button. */
2
+ export declare const STOP_ACTION_VISIBLE = true;
3
+ /** Card variable value that hides the stop button. */
4
+ export declare const STOP_ACTION_HIDDEN = false;
5
+ export declare const BUILTIN_DINGTALK_CARD_TEMPLATE_ID: string;
6
+ export declare const BUILTIN_DINGTALK_CARD_CONTENT_KEY = "content";
7
+ export declare const BUILTIN_DINGTALK_CARD_BLOCK_LIST_KEY = "blockList";
8
+ export declare const BUILTIN_DINGTALK_CARD_COPY_CONTENT_KEY = "copy_content";
9
+ export interface DingTalkCardTemplateContract {
10
+ templateId: string;
11
+ contentKey: string;
12
+ /** V2: key for the streaming markdown field (same as contentKey). */
13
+ streamingKey: string;
14
+ /** V2: key for the block-list loopArray variable. */
15
+ blockListKey: string;
16
+ /** V2: key for the plain-text copy content variable (String type for card copy action). */
17
+ copyContentKey: string;
18
+ }
19
+ /** Frozen singleton — no allocation on every call. */
20
+ export declare const DINGTALK_CARD_TEMPLATE: Readonly<DingTalkCardTemplateContract>;
21
+ //# sourceMappingURL=card-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-template.d.ts","sourceRoot":"","sources":["../../../src/card/card-template.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAExC,eAAO,MAAM,iCAAiC,QAC0C,CAAC;AACzF,eAAO,MAAM,iCAAiC,YAAY,CAAC;AAC3D,eAAO,MAAM,oCAAoC,cAAc,CAAC;AAChE,eAAO,MAAM,sCAAsC,iBAAiB,CAAC;AAErE,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,sDAAsD;AACtD,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,4BAA4B,CAMxE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface CardReasoningAnswerSplit {
2
+ reasoningText?: string;
3
+ answerText?: string;
4
+ }
5
+ export declare function splitCardReasoningAnswerText(text?: string): CardReasoningAnswerSplit;
6
+ //# sourceMappingURL=reasoning-answer-split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning-answer-split.d.ts","sourceRoot":"","sources":["../../../src/card/reasoning-answer-split.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AA4ID,wBAAgB,4BAA4B,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,wBAAwB,CAkBpF"}
@@ -0,0 +1,7 @@
1
+ export interface ReasoningBlockAssembler {
2
+ ingestSnapshot: (text: string | undefined) => string[];
3
+ flushPendingAtBoundary: () => string[];
4
+ reset: () => void;
5
+ }
6
+ export declare function createReasoningBlockAssembler(): ReasoningBlockAssembler;
7
+ //# sourceMappingURL=reasoning-block-assembler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning-block-assembler.d.ts","sourceRoot":"","sources":["../../../src/card/reasoning-block-assembler.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACpC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,EAAE,CAAC;IACvD,sBAAsB,EAAE,MAAM,MAAM,EAAE,CAAC;IACvC,KAAK,EAAE,MAAM,IAAI,CAAC;CACrB;AAgHD,wBAAgB,6BAA6B,IAAI,uBAAuB,CAwCvE"}
@@ -0,0 +1,24 @@
1
+ export declare function formatTokenCount(n: number): string;
2
+ export declare function formatDuration(seconds: number): string;
3
+ export interface StatusLineData {
4
+ model?: string;
5
+ effort?: string;
6
+ agent?: string;
7
+ taskTime?: number;
8
+ inputTokens?: number;
9
+ outputTokens?: number;
10
+ cacheRead?: number;
11
+ dapi_usage?: number;
12
+ }
13
+ export interface StatusLineConfig {
14
+ cardStatusLine?: {
15
+ model?: boolean;
16
+ effort?: boolean;
17
+ agent?: boolean;
18
+ taskTime?: boolean;
19
+ tokens?: boolean;
20
+ dapiUsage?: boolean;
21
+ };
22
+ }
23
+ export declare function renderStatusLine(data: StatusLineData, config: StatusLineConfig): string;
24
+ //# sourceMappingURL=statusline-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statusline-renderer.d.ts","sourceRoot":"","sources":["../../../src/card/statusline-renderer.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CAAC,EAAE;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAyCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAavF"}
@@ -0,0 +1,23 @@
1
+ export interface CardCallbackAnalysis {
2
+ summary: string;
3
+ actionId?: string;
4
+ feedbackTarget?: string;
5
+ feedbackAckText?: string;
6
+ userId?: string;
7
+ spaceId?: string;
8
+ processQueryKey?: string;
9
+ outTrackId?: string;
10
+ cardInstanceId?: string;
11
+ }
12
+ export declare function extractCardActionSummary(data: unknown): string;
13
+ export declare function extractCardActionId(data: unknown): string | undefined;
14
+ export declare function analyzeCardCallback(data: unknown): CardCallbackAnalysis;
15
+ /**
16
+ * Update card variables via PUT /v1.0/card/instances.
17
+ * Echoes params back into cardParamMap so the template can use conditional
18
+ * rendering (e.g. hiding buttons when a param is set).
19
+ */
20
+ export declare function updateCardVariables(outTrackId: string, params: Record<string, unknown>, token: string, config?: {
21
+ bypassProxyForSend?: boolean;
22
+ }): Promise<number>;
23
+ //# sourceMappingURL=card-callback-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-callback-service.d.ts","sourceRoot":"","sources":["../../src/card-callback-service.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA+BD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAmB9D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAwBrE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,CA0EvE;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,GACxC,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Card draft controller for throttled AI Card streaming updates.
3
+ *
4
+ * The controller keeps a single rendered card timeline made of:
5
+ * - sealed process blocks (`thinking` / `tool`)
6
+ * - an optional live thinking block
7
+ * - accumulated answer turns rendered as JSON CardBlock[]
8
+ *
9
+ * It delegates throttling and single-flight transport guarantees to
10
+ * {@link createDraftStreamLoop}.
11
+ */
12
+ import type { AICardInstance, Logger } from "./types";
13
+ export interface CardDraftController {
14
+ updateAnswer: (text: string, options?: {
15
+ stream?: boolean;
16
+ renderBlocks?: boolean;
17
+ }) => Promise<void>;
18
+ updateReasoning: (text: string) => Promise<void>;
19
+ updateThinking: (text: string) => Promise<void>;
20
+ appendThinkingBlock: (text: string) => Promise<void>;
21
+ updateTool: (text: string) => Promise<void>;
22
+ appendTool: (text: string) => Promise<void>;
23
+ /** Append an image block (type=3) with an uploaded mediaId. */
24
+ appendImageBlock: (mediaId: string, text?: string) => Promise<void>;
25
+ appendToolBeforeCurrentAnswer: (text: string) => Promise<void>;
26
+ /** Drop the current answer draft while keeping sealed earlier turns intact. */
27
+ discardCurrentAnswer: () => void;
28
+ /** Signal that a new assistant turn has started (e.g. after a tool call). */
29
+ notifyNewAssistantTurn: (options?: {
30
+ discardActiveAnswer?: boolean;
31
+ }) => Promise<void>;
32
+ startAssistantTurn: () => Promise<void>;
33
+ /** Seal the active thinking entry (keep it in timeline) without removing it. */
34
+ sealActiveThinking: () => Promise<void>;
35
+ flush: () => Promise<void>;
36
+ waitForInFlight: () => Promise<void>;
37
+ stop: () => void;
38
+ isFailed: () => boolean;
39
+ /** Last content successfully sent to card. */
40
+ getLastContent: () => string;
41
+ /** Last answer-only content successfully sent to card. */
42
+ getLastAnswerContent: () => string;
43
+ /** Current answer-only content composed from all completed answer turns. */
44
+ getFinalAnswerContent: () => string;
45
+ /** Current rendered timeline as CardBlock[] JSON string for blockList parameter. */
46
+ getRenderedBlocks: (options?: {
47
+ fallbackAnswer?: string;
48
+ overrideAnswer?: string;
49
+ compactProcessAnswerSpacing?: boolean;
50
+ }) => string;
51
+ /** Current rendered timeline as pure markdown text for content parameter and fallback. */
52
+ getRenderedContent: (options?: {
53
+ fallbackAnswer?: string;
54
+ overrideAnswer?: string;
55
+ compactProcessAnswerSpacing?: boolean;
56
+ }) => string;
57
+ /** Stream answer text to content key for real-time display. Only available when realTimeStreamEnabled=true. */
58
+ streamContent?: (text: string) => Promise<void>;
59
+ /** Clear the streaming content key. Only available when realTimeStreamEnabled=true. */
60
+ clearStreamingContent?: () => Promise<void>;
61
+ /** Whether real-time streaming is enabled. */
62
+ isRealTimeStreamEnabled: () => boolean;
63
+ }
64
+ export declare function createCardDraftController(params: {
65
+ card: AICardInstance;
66
+ throttleMs?: number;
67
+ /** Legacy compatibility: verbose mode previously lowered the throttle. */
68
+ verboseMode?: boolean;
69
+ /** Enable real-time streaming to content key for answer display. */
70
+ realTimeStreamEnabled?: boolean;
71
+ /** Optional callback to get the current statusLine for piggy-backing on blockList updates. */
72
+ getStatusLine?: () => string | undefined;
73
+ log?: Logger;
74
+ }): CardDraftController;
75
+ //# sourceMappingURL=card-draft-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-draft-controller.d.ts","sourceRoot":"","sources":["../../src/card-draft-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import type { AICardInstance, DingTalkConfig, DingTalkTrackingMetadata, Logger, QuotedRef } from "./types";
2
+ export declare function hideCardStopButton(outTrackId: string, token: string, config?: {
3
+ bypassProxyForSend?: boolean;
4
+ }, retries?: number): Promise<void>;
5
+ export declare function isAICardDegraded(accountId: string): boolean;
6
+ export declare function getAICardDegradeState(accountId: string): {
7
+ remainingMs: number;
8
+ reason: string;
9
+ } | null;
10
+ export declare function activateAICardDegrade(accountId: string, reason: string, config?: DingTalkConfig, log?: Logger): void;
11
+ export declare function clearAICardDegrade(accountId: string, log?: Logger): void;
12
+ export declare function incrementCardDapiCount(card: AICardInstance): number;
13
+ interface CreateAICardOptions {
14
+ accountId?: string;
15
+ storePath?: string;
16
+ persistPending?: boolean;
17
+ contextConversationId?: string;
18
+ /** Quote content to display in card header (shown when non-empty) */
19
+ quoteContent?: string;
20
+ /** Initial statusLine string to show on the first createAndDeliver render. */
21
+ statusLine?: string;
22
+ }
23
+ export declare function isCardInTerminalState(state: string): boolean;
24
+ export declare function formatContentForCard(content: string | undefined, type: "thinking" | "tool"): string;
25
+ /**
26
+ * Send a proactive text message via card API (createAndDeliver + immediate finalize).
27
+ * Used in card mode to replace oToMessages/batchSend for single-chat users.
28
+ */
29
+ export declare function sendProactiveCardText(config: DingTalkConfig, conversationId: string, content: string, log?: Logger): Promise<{
30
+ ok: boolean;
31
+ error?: string;
32
+ } & DingTalkTrackingMetadata>;
33
+ export declare function recoverPendingCardsForAccount(config: DingTalkConfig, accountId: string, storePath?: string, log?: Logger): Promise<number>;
34
+ export declare function finalizeActiveCardsForAccount(config: DingTalkConfig, accountId: string, reason: string, storePath?: string, log?: Logger): Promise<number>;
35
+ export declare function createAICard(config: DingTalkConfig, conversationId: string, log?: Logger, options?: CreateAICardOptions): Promise<AICardInstance | null>;
36
+ /**
37
+ * Update statusLine via PUT /v1.0/card/instances API.
38
+ */
39
+ export declare function updateAICardStatusLine(card: AICardInstance, statusLine: string, log?: Logger): Promise<void>;
40
+ export declare function updateAICardBlockList(card: AICardInstance, blockListJson: string, log?: Logger, options?: {
41
+ statusLine?: string;
42
+ }): Promise<void>;
43
+ /**
44
+ * Stream answer text to content key for real-time display.
45
+ * Only used when cardRealTimeStream=true.
46
+ * Uses streaming API because content is a simple string type.
47
+ */
48
+ export declare function streamAICardContent(card: AICardInstance, text: string, log?: Logger): Promise<void>;
49
+ /**
50
+ * Clear the streaming content key.
51
+ * Called when transitioning from streaming to blockList commit.
52
+ */
53
+ export declare function clearAICardStreamingContent(card: AICardInstance, log?: Logger): Promise<void>;
54
+ /**
55
+ * Options for finalizing an AI Card via instances API.
56
+ * All variables are written in a single API call for V2 template compatibility.
57
+ */
58
+ export interface FinalizeCardOptions {
59
+ /** CardBlock[] JSON string for blockList variable */
60
+ blockListJson: string;
61
+ /** Pure markdown answer text for copy action (content variable) */
62
+ content: string;
63
+ /** Optional quoted message preview text */
64
+ quoteContent?: string;
65
+ /** Optional statusLine string for card template */
66
+ statusLine?: string;
67
+ /** Optional quoted message reference for caching */
68
+ quotedRef?: QuotedRef;
69
+ }
70
+ /**
71
+ * Commit blocks and finalize card via single instances API call.
72
+ * V2 template requires finalize through instances API (not streaming API).
73
+ * Writes blockList, content, quoteContent, statusLine, and flowStatus in one call.
74
+ */
75
+ export declare function commitAICardBlocks(card: AICardInstance, options: FinalizeCardOptions, log?: Logger): Promise<void>;
76
+ export declare function streamAICard(card: AICardInstance, content: string, finished?: boolean, log?: Logger): Promise<void>;
77
+ /**
78
+ * Finalize AI Card via streaming API.
79
+ *
80
+ * @deprecated For V2 template, use `commitAICardBlocks()` instead which finalizes
81
+ * via instances API (single call writes blockList, content, flowStatus=3).
82
+ * This function is kept for backward compatibility with V1 template and for
83
+ * card-stop-handler which uses streaming API for immediate stop acknowledgment.
84
+ */
85
+ export declare function finishAICard(card: AICardInstance, content: string, log?: Logger, options?: {
86
+ quotedRef?: QuotedRef;
87
+ }): Promise<void>;
88
+ export declare function recallAICardMessage(card: AICardInstance, log?: Logger): Promise<boolean>;
89
+ export declare function finishStoppedAICard(card: AICardInstance, content: string, log?: Logger): Promise<void>;
90
+ export declare function finalizeStoppedAICard(card: AICardInstance, options: {
91
+ reason: string;
92
+ previousContent?: string;
93
+ previousBlockListJson?: string;
94
+ }, log?: Logger): Promise<void>;
95
+ export declare function cacheCardContent(accountId: string, conversationId: string, content: string, createdAt: number, storePath?: string): void;
96
+ export declare function findCardContent(accountId: string, conversationId: string, repliedCreatedAt: number, storePath?: string): string | null;
97
+ export declare function clearCardContentCacheForTest(): void;
98
+ export {};
99
+ //# sourceMappingURL=card-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-service.d.ts","sourceRoot":"","sources":["../../src/card-service.ts"],"names":[],"mappings":"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"}