@soimy/dingtalk 3.6.2-beta.1 → 3.6.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"card-draft-controller.d.ts","sourceRoot":"","sources":["../../src/card-draft-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"card-draft-controller.d.ts","sourceRoot":"","sources":["../../src/card-draft-controller.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"card-service.d.ts","sourceRoot":"","sources":["../../src/card-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"card-service.d.ts","sourceRoot":"","sources":["../../src/card-service.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,cAAc,EAGd,cAAc,EACd,wBAAwB,EACxB,MAAM,EACN,SAAS,EACV,MAAM,SAAS,CAAC;AAgBjB,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,EACzC,OAAO,SAAI,GACV,OAAO,CAAC,IAAI,CAAC,CAiBf;AAoFD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAU3D;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,GAChB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAWhD;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,cAAc,EACvB,GAAG,CAAC,EAAE,MAAM,GACX,IAAI,CAeN;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAOxE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAInE;AA8HD,UAAU,mBAAmB;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA+MD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAM5D;AAsBD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAcnG;AA4CD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,wBAAwB,CAAC,CAqBrE;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAEjB;AAsED,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,MAAM,EACtB,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAsLhC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,cAAc,EACpB,aAAa,EAAE,MAAM,EACrB,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,cAAc,EACpB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAWf;AAsBD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,mBAAmB,EAC5B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAqEf;AAGD,wBAAsB,YAAY,CAChC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,OAAe,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,SAAS,CAAA;CAAO,GACtC,OAAO,CAAC,IAAI,CAAC,CAwBf;AAuBD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,cAAc,EACpB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAqFlB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,EACD,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAsCf;AAqCD,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CA0BN;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CAkCf;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAGnD"}
@@ -7,6 +7,16 @@ export declare function detectMarkdownAndExtractTitle(text: string, options: Sen
7
7
  useMarkdown: boolean;
8
8
  title: string;
9
9
  };
10
+ /**
11
+ * Convert markdown tables to DingTalk-compatible format.
12
+ * DingTalk's markdown renderer supports left/center/right alignment (:---, :---:, ---:).
13
+ * This function preserves the original alignment from the separator row.
14
+ * Tables inside code fences are preserved unchanged.
15
+ *
16
+ * Note: Despite the function name, this now produces DingTalk-compatible
17
+ * markdown tables rather than plain text. The name is preserved for API
18
+ * compatibility with the `convertMarkdownTables` config option.
19
+ */
10
20
  export declare function convertMarkdownTablesToPlainText(text: string): string;
11
21
  export declare function extractMessageContent(data: DingTalkInboundMessage): MessageContent;
12
22
  //# sourceMappingURL=message-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-utils.d.ts","sourceRoot":"","sources":["../../src/message-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,sBAAsB,EACtB,cAAc,EAEd,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAwWjB;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,MAAM,GACnB;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAczC;AAkCD,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoCrE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,cAAc,CAsSlF"}
1
+ {"version":3,"file":"message-utils.d.ts","sourceRoot":"","sources":["../../src/message-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,sBAAsB,EACtB,cAAc,EAEd,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAwWjB;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,MAAM,GACnB;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAczC;AAgHD;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4CrE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,cAAc,CAsSlF"}
@@ -1 +1 @@
1
- {"version":3,"file":"reply-strategy-card.d.ts","sourceRoot":"","sources":["../../src/reply-strategy-card.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,OAAO,KAAK,EAAgC,aAAa,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAQhH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAc9C,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,oBAAoB,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAA;CAAE,GACpF,aAAa,CAyvBf"}
1
+ {"version":3,"file":"reply-strategy-card.d.ts","sourceRoot":"","sources":["../../src/reply-strategy-card.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,OAAO,KAAK,EAAgC,aAAa,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAQhH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAc9C,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,oBAAoB,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAA;CAAE,GACpF,aAAa,CAkwBf"}
@@ -1 +1 @@
1
- {"version":3,"file":"reply-strategy-markdown.d.ts","sourceRoot":"","sources":["../../src/reply-strategy-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAgC,aAAa,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AA8ChH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,oBAAoB,GACxB,aAAa,CAuGf"}
1
+ {"version":3,"file":"reply-strategy-markdown.d.ts","sourceRoot":"","sources":["../../src/reply-strategy-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAGV,aAAa,EACb,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAmDhC,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,oBAAoB,GAAG,aAAa,CAmNpF"}
@@ -11,6 +11,7 @@ export type InternalReplyStrategyConfig = DingTalkConfig & {
11
11
  /** @deprecated Internal compatibility only. Removed from public config surface. */
12
12
  cardStreamReasoning?: boolean;
13
13
  };
14
+ export type SourceReplyDeliveryMode = "automatic" | "message_tool_only";
14
15
  export interface DeliverPayload {
15
16
  text?: string;
16
17
  mediaUrls: string[];
@@ -25,6 +26,7 @@ export interface DeliverPayload {
25
26
  }
26
27
  export interface ReplyOptions {
27
28
  disableBlockStreaming: boolean;
29
+ sourceReplyDeliveryMode?: SourceReplyDeliveryMode;
28
30
  onPartialReply?: (payload: {
29
31
  text?: string;
30
32
  }) => void | Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"reply-strategy-types.d.ts","sourceRoot":"","sources":["../../src/reply-strategy-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reply-strategy-types.d.ts","sourceRoot":"","sources":["../../src/reply-strategy-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"send-service.d.ts","sourceRoot":"","sources":["../../src/send-service.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,MAAM,EAGN,kBAAkB,EAEnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAiD7D,KAAK,uBAAuB,GAAG,aAAa,GAAG;IAAE,QAAQ,EAAE,wBAAwB,CAAA;CAAE,CAAC;AAiPtF;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,EAC/C,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACvC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAEnC;AAED,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,uBAAuB,CAAC,CA6HlC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,EAC/C,OAAO,GAAE,kBAAkB,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsJ5F;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,kBAAkB,GAAG;IAC5B,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACzB,GACL,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuE5F;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,aAAa,CAAC,CAqGxB;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAkB,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,cAAc,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAA;CAAE,CAAC,CAsGzH"}
1
+ {"version":3,"file":"send-service.d.ts","sourceRoot":"","sources":["../../src/send-service.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,MAAM,EAGN,kBAAkB,EAEnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAiD7D,KAAK,uBAAuB,GAAG,aAAa,GAAG;IAAE,QAAQ,EAAE,wBAAwB,CAAA;CAAE,CAAC;AAqPtF;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,EAC/C,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACvC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAEnC;AAED,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,uBAAuB,CAAC,CA6HlC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,EAC/C,OAAO,GAAE,kBAAkB,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsJ5F;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,kBAAkB,GAAG;IAC5B,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACzB,GACL,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuE5F;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,aAAa,CAAC,CA4ExB;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAkB,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,cAAc,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAA;CAAE,CAAC,CA6HzH"}
package/index.ts CHANGED
@@ -1,18 +1,36 @@
1
1
  import { defineChannelPluginEntry, type OpenClawPluginApi } from "openclaw/plugin-sdk/core";
2
2
  import { readStringParam } from "openclaw/plugin-sdk/param-readers";
3
+ import { getAccessToken } from "./src/auth";
3
4
  import { dingtalkPlugin } from "./src/channel";
4
- import { getConfig } from "./src/config";
5
- import { appendToDoc, createDoc, DocCreateAppendError, listDocs, searchDocs } from "./src/docs-service";
5
+ import { getConfig, listDingTalkAccountIds, resolveDingTalkAccount } from "./src/config";
6
+ import {
7
+ appendToDoc,
8
+ createDoc,
9
+ DocCreateAppendError,
10
+ listDocs,
11
+ searchDocs,
12
+ } from "./src/docs-service";
6
13
  import { accumulateUsage } from "./src/run-usage-store";
7
14
  import { setDingTalkRuntime } from "./src/runtime";
15
+ import { sendMessage } from "./src/send-service";
8
16
 
9
17
  type GatewayMethodContext = Pick<
10
18
  Parameters<Parameters<OpenClawPluginApi["registerGatewayMethod"]>[1]>[0],
11
- "params" | "respond"
19
+ "context" | "params" | "respond"
12
20
  >;
13
21
 
22
+ /**
23
+ * Register the canonical OpenClaw DingTalk docs RPC namespace.
24
+ *
25
+ * The `dingtalk-connector.docs.*` names below are compatibility aliases for
26
+ * existing connector-style Gateway callers that already use the
27
+ * `dingtalk-connector` prefix. They intentionally share the same handlers as
28
+ * `dingtalk.docs.*`; this plugin does not vendor or mirror a separate
29
+ * third-party connector implementation. New OpenClaw callers should prefer the
30
+ * canonical `dingtalk.docs.*` namespace.
31
+ */
14
32
  function registerDingTalkDocsGatewayMethods(api: OpenClawPluginApi): void {
15
- api.registerGatewayMethod("dingtalk.docs.create", async ({ respond, params }: GatewayMethodContext) => {
33
+ const createHandler = async ({ respond, params }: GatewayMethodContext) => {
16
34
  const accountId = readStringParam(params, "accountId");
17
35
  const spaceId = readStringParam(params, "spaceId", { required: true });
18
36
  const title = readStringParam(params, "title", { required: true });
@@ -41,34 +59,221 @@ function registerDingTalkDocsGatewayMethods(api: OpenClawPluginApi): void {
41
59
  }
42
60
  throw error;
43
61
  }
44
- });
62
+ };
45
63
 
46
- api.registerGatewayMethod("dingtalk.docs.append", async ({ respond, params }: GatewayMethodContext) => {
64
+ const appendHandler = async ({ respond, params }: GatewayMethodContext) => {
47
65
  const accountId = readStringParam(params, "accountId");
48
66
  const docId = readStringParam(params, "docId", { required: true });
49
67
  const content = readStringParam(params, "content", { required: true, allowEmpty: false });
50
68
  const config = getConfig(api.config, accountId ?? undefined);
51
69
  const result = await appendToDoc(config, docId, content, api.logger);
52
70
  return respond(true, result);
53
- });
71
+ };
54
72
 
55
- api.registerGatewayMethod("dingtalk.docs.search", async ({ respond, params }: GatewayMethodContext) => {
73
+ const searchHandler = async ({ respond, params }: GatewayMethodContext) => {
56
74
  const accountId = readStringParam(params, "accountId");
57
75
  const keyword = readStringParam(params, "keyword", { required: true });
58
76
  const spaceId = readStringParam(params, "spaceId");
59
77
  const config = getConfig(api.config, accountId ?? undefined);
60
78
  const docs = await searchDocs(config, keyword, spaceId, api.logger);
61
79
  return respond(true, { docs });
62
- });
80
+ };
63
81
 
64
- api.registerGatewayMethod("dingtalk.docs.list", async ({ respond, params }: GatewayMethodContext) => {
82
+ const listHandler = async ({ respond, params }: GatewayMethodContext) => {
65
83
  const accountId = readStringParam(params, "accountId");
66
84
  const spaceId = readStringParam(params, "spaceId", { required: true });
67
85
  const parentId = readStringParam(params, "parentId");
68
86
  const config = getConfig(api.config, accountId ?? undefined);
69
87
  const docs = await listDocs(config, spaceId, parentId, api.logger);
70
88
  return respond(true, { docs });
71
- });
89
+ };
90
+
91
+ api.registerGatewayMethod("dingtalk.docs.create", createHandler);
92
+ api.registerGatewayMethod("dingtalk.docs.append", appendHandler);
93
+ api.registerGatewayMethod("dingtalk.docs.search", searchHandler);
94
+ api.registerGatewayMethod("dingtalk.docs.list", listHandler);
95
+ api.registerGatewayMethod("dingtalk-connector.docs.create", createHandler);
96
+ api.registerGatewayMethod("dingtalk-connector.docs.append", appendHandler);
97
+ api.registerGatewayMethod("dingtalk-connector.docs.search", searchHandler);
98
+ api.registerGatewayMethod("dingtalk-connector.docs.list", listHandler);
99
+ }
100
+
101
+ function getContentParam(params: Record<string, unknown>): string | undefined {
102
+ return readStringParam(params, "content") ?? readStringParam(params, "message");
103
+ }
104
+
105
+ function getErrorMessage(error: unknown, fallback: string): string {
106
+ return error instanceof Error ? error.message : fallback;
107
+ }
108
+
109
+ function maskClientId(clientId: string | undefined): string | null {
110
+ if (!clientId) {
111
+ return null;
112
+ }
113
+ return clientId.length <= 4 ? "****" : `****${clientId.slice(-4)}`;
114
+ }
115
+
116
+ function isConnectorSendTarget(target: string): boolean {
117
+ return /^(user|group):\S+$/.test(target);
118
+ }
119
+
120
+ async function sendGatewayMessage(params: {
121
+ api: OpenClawPluginApi;
122
+ respond: GatewayMethodContext["respond"];
123
+ accountId?: string;
124
+ target: string;
125
+ content: string;
126
+ storePath?: string;
127
+ useAICard?: unknown;
128
+ }) {
129
+ const config = getConfig(params.api.config, params.accountId);
130
+ const accountId = params.accountId ?? "default";
131
+ if (!config.clientId || !config.clientSecret) {
132
+ return params.respond(false, { error: "DingTalk not configured" });
133
+ }
134
+ let result: Awaited<ReturnType<typeof sendMessage>>;
135
+ try {
136
+ result = await sendMessage(config, params.target, params.content, {
137
+ log: params.api.logger,
138
+ accountId,
139
+ conversationId: params.target,
140
+ storePath: params.storePath,
141
+ forceMarkdown: params.useAICard === false,
142
+ });
143
+ } catch (error: unknown) {
144
+ const message = getErrorMessage(error, "send failed");
145
+ params.api.logger?.warn?.(`[DingTalk][GatewayRPC] send failed: ${message}`);
146
+ return params.respond(false, { error: message });
147
+ }
148
+ return params.respond(
149
+ result.ok,
150
+ result.ok
151
+ ? {
152
+ ok: true,
153
+ target: params.target,
154
+ messageId: result.messageId ?? null,
155
+ tracking: result.tracking ?? null,
156
+ }
157
+ : { error: result.error || "send failed" },
158
+ );
159
+ }
160
+
161
+ /**
162
+ * Register compatibility Gateway RPCs for connector-style DingTalk callers.
163
+ *
164
+ * Compatibility target: callers that address DingTalk through the historical
165
+ * `dingtalk-connector.*` Gateway namespace. The maintenance boundary is only
166
+ * this thin parameter/response adapter; canonical plugin behavior, auth, docs,
167
+ * sending, and persistence remain implemented by this repository's existing
168
+ * `dingtalk.*` services. Do not add connector-only behavior here unless it is
169
+ * also documented as part of this compatibility surface.
170
+ */
171
+ function registerDingTalkConnectorCompatibilityGatewayMethods(api: OpenClawPluginApi): void {
172
+ api.registerGatewayMethod(
173
+ "dingtalk-connector.sendToUser",
174
+ async ({ context, respond, params }: GatewayMethodContext) => {
175
+ const accountId = readStringParam(params, "accountId");
176
+ const userId = readStringParam(params, "userId", { required: true });
177
+ const content = getContentParam(params);
178
+ if (!content) {
179
+ return respond(false, { error: "content or message is required" });
180
+ }
181
+ return sendGatewayMessage({
182
+ api,
183
+ respond,
184
+ accountId: accountId ?? undefined,
185
+ target: `user:${userId}`,
186
+ content,
187
+ storePath: context?.cronStorePath,
188
+ useAICard: params.useAICard,
189
+ });
190
+ },
191
+ );
192
+
193
+ api.registerGatewayMethod(
194
+ "dingtalk-connector.sendToGroup",
195
+ async ({ context, respond, params }: GatewayMethodContext) => {
196
+ const accountId = readStringParam(params, "accountId");
197
+ const openConversationId = readStringParam(params, "openConversationId", { required: true });
198
+ const content = getContentParam(params);
199
+ if (!content) {
200
+ return respond(false, { error: "content or message is required" });
201
+ }
202
+ return sendGatewayMessage({
203
+ api,
204
+ respond,
205
+ accountId: accountId ?? undefined,
206
+ target: `group:${openConversationId}`,
207
+ content,
208
+ storePath: context?.cronStorePath,
209
+ useAICard: params.useAICard,
210
+ });
211
+ },
212
+ );
213
+
214
+ api.registerGatewayMethod(
215
+ "dingtalk-connector.send",
216
+ async ({ context, respond, params }: GatewayMethodContext) => {
217
+ const accountId = readStringParam(params, "accountId");
218
+ const target = readStringParam(params, "target", { required: true });
219
+ const content = getContentParam(params);
220
+ if (!content) {
221
+ return respond(false, { error: "content or message is required" });
222
+ }
223
+ if (!isConnectorSendTarget(target)) {
224
+ return respond(false, { error: "target must start with user: or group:" });
225
+ }
226
+ return sendGatewayMessage({
227
+ api,
228
+ respond,
229
+ accountId: accountId ?? undefined,
230
+ target,
231
+ content,
232
+ storePath: context?.cronStorePath,
233
+ useAICard: params.useAICard,
234
+ });
235
+ },
236
+ );
237
+
238
+ api.registerGatewayMethod(
239
+ "dingtalk-connector.status",
240
+ async ({ respond }: GatewayMethodContext) => {
241
+ const accountIds = listDingTalkAccountIds(api.config);
242
+ const accounts = accountIds.length > 0 ? accountIds : ["default"];
243
+ return respond(true, {
244
+ channel: "dingtalk",
245
+ accounts: accounts.map((accountId) => {
246
+ const account = resolveDingTalkAccount(api.config, accountId);
247
+ return {
248
+ accountId,
249
+ configured: account.configured,
250
+ enabled: account.enabled !== false,
251
+ name: account.name ?? null,
252
+ clientId: maskClientId(account.clientId),
253
+ };
254
+ }),
255
+ });
256
+ },
257
+ );
258
+
259
+ api.registerGatewayMethod(
260
+ "dingtalk-connector.probe",
261
+ async ({ respond, params }: GatewayMethodContext) => {
262
+ const accountId = readStringParam(params, "accountId");
263
+ const config = getConfig(api.config, accountId ?? undefined);
264
+ if (!config.clientId || !config.clientSecret) {
265
+ return respond(false, { error: "DingTalk not configured" });
266
+ }
267
+ try {
268
+ await getAccessToken(config, api.logger);
269
+ return respond(true, { ok: true, clientId: maskClientId(config.clientId) });
270
+ } catch (error: unknown) {
271
+ const message = getErrorMessage(error, "probe failed");
272
+ api.logger?.warn?.(`[DingTalk][GatewayRPC] probe failed: ${message}`);
273
+ return respond(false, { error: message });
274
+ }
275
+ },
276
+ );
72
277
  }
73
278
 
74
279
  export { dingtalkPlugin } from "./src/channel";
@@ -82,11 +287,24 @@ export default defineChannelPluginEntry({
82
287
  setRuntime: setDingTalkRuntime,
83
288
  registerFull(api) {
84
289
  registerDingTalkDocsGatewayMethods(api);
290
+ registerDingTalkConnectorCompatibilityGatewayMethods(api);
85
291
 
86
- api.on("llm_output", (event: { runId: string; usage?: { input?: number; output?: number; cacheRead?: number; cacheWrite?: number; total?: number } }) => {
87
- if (event.usage) {
88
- accumulateUsage(event.runId, event.usage);
89
- }
90
- });
292
+ api.on(
293
+ "llm_output",
294
+ (event: {
295
+ runId: string;
296
+ usage?: {
297
+ input?: number;
298
+ output?: number;
299
+ cacheRead?: number;
300
+ cacheWrite?: number;
301
+ total?: number;
302
+ };
303
+ }) => {
304
+ if (event.usage) {
305
+ accumulateUsage(event.runId, event.usage);
306
+ }
307
+ },
308
+ );
91
309
  },
92
310
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soimy/dingtalk",
3
- "version": "3.6.2-beta.1",
3
+ "version": "3.6.3",
4
4
  "description": "DingTalk (钉钉) channel plugin for OpenClaw",
5
5
  "keywords": [
6
6
  "bot",
@@ -187,7 +187,7 @@ export async function updateCardVariables(
187
187
  {
188
188
  outTrackId,
189
189
  cardData: { cardParamMap: stringMap },
190
- cardUpdateOptions: { updateCardDataByKey: true, updatePrivateDataByKey: true },
190
+ cardUpdateOptions: { updateCardDataByKey: true },
191
191
  },
192
192
  {
193
193
  headers: {
@@ -328,9 +328,9 @@ export function createCardDraftController(params: {
328
328
  if (stopped || failed) {
329
329
  return;
330
330
  }
331
- await contentLoop.flush();
332
- await contentLoop.waitForInFlight();
333
- // Clear streaming content before committing blockList at boundary
331
+ // Clear the live streaming content before committing blockList at the boundary.
332
+ // This drops any queued fake-streaming tail so the empty stream update can stop
333
+ // the animation before the blockList frame lands.
334
334
  if (hasStreamingContent) {
335
335
  await clearStreamingContentFromCard();
336
336
  }
@@ -546,6 +546,7 @@ export function createCardDraftController(params: {
546
546
  discardCurrentAnswer();
547
547
  } else {
548
548
  sealCurrentAnswer();
549
+ queueRender();
549
550
  }
550
551
  await beginBoundaryFlush();
551
552
  return;
@@ -910,6 +910,29 @@ export async function createAICard(
910
910
 
911
911
  clearAICardDegrade(accountId, log);
912
912
 
913
+ // Kick the card into streaming mode immediately so the card enters the
914
+ // streaming lifecycle on the DingTalk side. Cards in IM_GROUP spaces may
915
+ // not accept variable updates (blockList etc.) without the streaming
916
+ // lifecycle being opened first. The lifecycle is tracked and finalized
917
+ // in commitAICardBlocks / finalizeStoppedAICard.
918
+ // Sends an empty content stream (isFull=true, isFinalize=false) which
919
+ // transitions the card from PROCESSING to INPUTING on the DingTalk side.
920
+ try {
921
+ await putAICardStreamingField(aiCardInstance, template.contentKey, "", false, log, {
922
+ suppressDegrade: true,
923
+ });
924
+ aiCardInstance.state = AICardStatus.INPUTING;
925
+ // Persist the updated streamLifecycleOpened and state so recovery
926
+ // can properly close the streaming lifecycle on DingTalk side.
927
+ if (shouldPersistPending) {
928
+ upsertPendingCard(aiCardInstance, options.storePath, log);
929
+ }
930
+ } catch (kickErr: any) {
931
+ log?.debug?.(
932
+ `[DingTalk][AICard] Non-critical: failed to kick card into streaming mode: ${kickErr.message}`,
933
+ );
934
+ }
935
+
913
936
  return aiCardInstance;
914
937
  } catch (err: any) {
915
938
  log?.error?.(`[DingTalk][AICard] Create failed: ${err.message}`);
@@ -1049,7 +1072,6 @@ export async function clearAICardStreamingContent(
1049
1072
 
1050
1073
  async function finalizeAICardStreamingLifecycleIfNeeded(
1051
1074
  card: AICardInstance,
1052
- content: string,
1053
1075
  log?: Logger,
1054
1076
  ): Promise<void> {
1055
1077
  if (!card.streamLifecycleOpened) {
@@ -1057,7 +1079,9 @@ async function finalizeAICardStreamingLifecycleIfNeeded(
1057
1079
  }
1058
1080
  const template = DINGTALK_CARD_TEMPLATE;
1059
1081
  try {
1060
- await putAICardStreamingField(card, template.streamingKey, content, true, log, {
1082
+ // Close DingTalk's opened streaming lifecycle without re-rendering the final
1083
+ // answer in the live content area; the instances API below commits it once.
1084
+ await putAICardStreamingField(card, template.streamingKey, "", true, log, {
1061
1085
  suppressDegrade: true,
1062
1086
  });
1063
1087
  } catch (err: unknown) {
@@ -1101,7 +1125,7 @@ export async function commitAICardBlocks(
1101
1125
  }
1102
1126
 
1103
1127
  await ensureFreshToken(card, log);
1104
- await finalizeAICardStreamingLifecycleIfNeeded(card, options.content, log);
1128
+ await finalizeAICardStreamingLifecycleIfNeeded(card, log);
1105
1129
 
1106
1130
  const template = DINGTALK_CARD_TEMPLATE;
1107
1131
  const updates: Record<string, unknown> = {
@@ -1395,7 +1419,7 @@ export async function finalizeStoppedAICard(
1395
1419
  await ensureFreshToken(card, log);
1396
1420
  const template = DINGTALK_CARD_TEMPLATE;
1397
1421
  const payload = buildStoppedCardFinalizePayload(options);
1398
- await finalizeAICardStreamingLifecycleIfNeeded(card, payload.content, log);
1422
+ await finalizeAICardStreamingLifecycleIfNeeded(card, log);
1399
1423
  try {
1400
1424
  await updateCardVariables(
1401
1425
  card.outTrackId || card.cardInstanceId,
@@ -398,7 +398,10 @@ function isMarkdownTableSeparator(line: string): boolean {
398
398
  .replace(/\|$/, "")
399
399
  .split("|")
400
400
  .map((cell) => cell.trim());
401
- return cells.length > 0 && cells.every((cell) => /^:?-{3,}:?$/.test(cell));
401
+ // DingTalk markdown requires :-: separator format (1 dash minimum).
402
+ // Note: single `-` cells in data rows would also match; this is an accepted trade-off
403
+ // for compatibility with DingTalk's recommended :-: separator format.
404
+ return cells.length > 0 && cells.every((cell) => /^:?-{1,}:?$/.test(cell));
402
405
  }
403
406
 
404
407
  function isMarkdownTableRow(line: string): boolean {
@@ -415,11 +418,96 @@ function parseMarkdownTableRow(line: string): string[] {
415
418
  .map((cell) => cell.trim());
416
419
  }
417
420
 
418
- function renderMarkdownTable(lines: string[]): string {
419
- const rows = lines.map(parseMarkdownTableRow).filter((cells) => cells.length > 0);
420
- return rows.map((cells) => cells.join(" | ")).join(" \n");
421
+ /**
422
+ * Parse alignment from a separator cell.
423
+ * Returns 'left', 'center', 'right', or 'center' (default).
424
+ */
425
+ function parseSeparatorAlignment(cell: string): "left" | "center" | "right" {
426
+ const trimmed = cell.trim();
427
+ const hasLeftColon = trimmed.startsWith(":");
428
+ const hasRightColon = trimmed.endsWith(":");
429
+ if (hasLeftColon && hasRightColon) {
430
+ return "center";
431
+ }
432
+ if (hasRightColon) {
433
+ return "right";
434
+ }
435
+ if (hasLeftColon) {
436
+ return "left";
437
+ }
438
+ // Default to center for bare dashes (standard markdown)
439
+ return "center";
440
+ }
441
+
442
+ /**
443
+ * Build separator row from alignment array.
444
+ */
445
+ function buildSeparatorRow(alignments: ("left" | "center" | "right")[]): string {
446
+ const cells = alignments.map((align) => {
447
+ if (align === "left") {
448
+ return ":---";
449
+ }
450
+ if (align === "right") {
451
+ return "---:";
452
+ }
453
+ return ":---:";
454
+ });
455
+ return "|" + cells.join("|") + "|";
456
+ }
457
+
458
+ /**
459
+ * Render markdown table rows preserving original alignment.
460
+ * Extracts alignment from the separator row and applies it to output.
461
+ */
462
+ function renderMarkdownTable(headerLine: string, separatorLine: string, dataLines: string[]): string {
463
+ const headerCells = parseMarkdownTableRow(headerLine);
464
+ const separatorCells = parseMarkdownTableRow(separatorLine);
465
+ const dataRows = dataLines.map(parseMarkdownTableRow).filter((cells) => cells.length > 0);
466
+
467
+ if (headerCells.length === 0) {
468
+ return "";
469
+ }
470
+
471
+ const colCount = Math.max(
472
+ headerCells.length,
473
+ separatorCells.length,
474
+ ...dataRows.map((cells) => cells.length),
475
+ );
476
+
477
+ // Extract alignments from separator
478
+ const alignments: ("left" | "center" | "right")[] = [];
479
+ for (let i = 0; i < colCount; i++) {
480
+ const sepCell = separatorCells[i] || "";
481
+ alignments.push(parseSeparatorAlignment(sepCell));
482
+ }
483
+
484
+ const separator = buildSeparatorRow(alignments);
485
+
486
+ const allRows = [headerCells, ...dataRows];
487
+ const rendered = allRows
488
+ .map((cells) => {
489
+ const padded = cells.length < colCount
490
+ ? [...cells, ...Array(colCount - cells.length).fill("")]
491
+ : cells;
492
+ return "|" + padded.join("|") + "|";
493
+ });
494
+
495
+ // Insert separator after header row (works for header-only tables too)
496
+ rendered.splice(1, 0, separator);
497
+
498
+ return rendered.join("\n");
421
499
  }
422
500
 
501
+ /**
502
+ * Convert markdown tables to DingTalk-compatible format.
503
+ * DingTalk's markdown renderer supports left/center/right alignment (:---, :---:, ---:).
504
+ * This function preserves the original alignment from the separator row.
505
+ * Tables inside code fences are preserved unchanged.
506
+ *
507
+ * Note: Despite the function name, this now produces DingTalk-compatible
508
+ * markdown tables rather than plain text. The name is preserved for API
509
+ * compatibility with the `convertMarkdownTables` config option.
510
+ */
423
511
  export function convertMarkdownTablesToPlainText(text: string): string {
424
512
  const lines = text.split("\n");
425
513
  const output: string[] = [];
@@ -441,13 +529,21 @@ export function convertMarkdownTablesToPlainText(text: string): string {
441
529
  isMarkdownTableRow(line) &&
442
530
  isMarkdownTableSeparator(lines[index + 1] || "")
443
531
  ) {
444
- const tableLines = [line];
532
+ const headerLine = line;
533
+ const separatorLine = lines[index + 1] || "";
534
+ const dataLines: string[] = [];
445
535
  index += 2;
446
536
  while (index < lines.length && isMarkdownTableRow(lines[index] || "")) {
447
- tableLines.push(lines[index] || "");
537
+ dataLines.push(lines[index] || "");
448
538
  index += 1;
449
539
  }
450
- output.push(renderMarkdownTable(tableLines));
540
+ const renderedTable = renderMarkdownTable(headerLine, separatorLine, dataLines);
541
+ // Ensure blank line before table for DingTalk markdown rendering
542
+ const lastOutput = output[output.length - 1];
543
+ if (lastOutput !== undefined && lastOutput.trim() !== "") {
544
+ output.push("");
545
+ }
546
+ output.push(renderedTable);
451
547
  continue;
452
548
  }
453
549