@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,181 @@
1
+ export type FeedbackKind = "explicit_positive" | "explicit_negative" | "implicit_negative";
2
+ export type ReflectionCategory = "missing_image_context" | "quoted_context_missing" | "misunderstood_intent" | "generic_negative" | "positive_direct_answer";
3
+ export interface FeedbackEventRecord {
4
+ id: string;
5
+ kind: FeedbackKind;
6
+ targetId: string;
7
+ sessionKey?: string;
8
+ processQueryKey?: string;
9
+ userId?: string;
10
+ createdAt: number;
11
+ signalText?: string;
12
+ snapshotId?: string;
13
+ }
14
+ export interface OutboundReplySnapshot {
15
+ id: string;
16
+ targetId: string;
17
+ sessionKey: string;
18
+ question: string;
19
+ answer: string;
20
+ createdAt: number;
21
+ processQueryKey?: string;
22
+ mode?: "card" | "markdown";
23
+ }
24
+ export interface ReflectionRecord {
25
+ id: string;
26
+ targetId: string;
27
+ sourceEventId: string;
28
+ kind: FeedbackKind;
29
+ category: ReflectionCategory;
30
+ diagnosis: string;
31
+ suggestedInstruction: string;
32
+ question?: string;
33
+ answer?: string;
34
+ createdAt: number;
35
+ }
36
+ export interface SessionLearningNote {
37
+ id: string;
38
+ targetId: string;
39
+ instruction: string;
40
+ source: FeedbackKind;
41
+ category: ReflectionCategory;
42
+ createdAt: number;
43
+ expiresAt: number;
44
+ }
45
+ export interface LearnedRuleRecord {
46
+ ruleId: string;
47
+ category: ReflectionCategory;
48
+ instruction: string;
49
+ negativeCount: number;
50
+ positiveCount: number;
51
+ updatedAt: number;
52
+ enabled: boolean;
53
+ manual?: boolean;
54
+ triggerText?: string;
55
+ forcedReply?: string;
56
+ }
57
+ export interface TargetSetRecord {
58
+ name: string;
59
+ targetIds: string[];
60
+ updatedAt: number;
61
+ }
62
+ export interface ScopedLearnedRuleRecord extends LearnedRuleRecord {
63
+ scope: "global" | "target";
64
+ targetId?: string;
65
+ }
66
+ export declare function appendFeedbackEvent(params: {
67
+ storePath?: string;
68
+ accountId: string;
69
+ targetId: string;
70
+ event: FeedbackEventRecord;
71
+ }): void;
72
+ export declare function listFeedbackEvents(params: {
73
+ storePath?: string;
74
+ accountId: string;
75
+ targetId: string;
76
+ }): FeedbackEventRecord[];
77
+ export declare function appendOutboundReplySnapshot(params: {
78
+ storePath?: string;
79
+ accountId: string;
80
+ targetId: string;
81
+ snapshot: OutboundReplySnapshot;
82
+ }): void;
83
+ export declare function listOutboundReplySnapshots(params: {
84
+ storePath?: string;
85
+ accountId: string;
86
+ targetId: string;
87
+ }): OutboundReplySnapshot[];
88
+ export declare function appendReflectionRecord(params: {
89
+ storePath?: string;
90
+ accountId: string;
91
+ targetId: string;
92
+ reflection: ReflectionRecord;
93
+ }): void;
94
+ export declare function listReflectionRecords(params: {
95
+ storePath?: string;
96
+ accountId: string;
97
+ targetId: string;
98
+ }): ReflectionRecord[];
99
+ export declare function appendSessionLearningNote(params: {
100
+ storePath?: string;
101
+ accountId: string;
102
+ targetId: string;
103
+ note: Omit<SessionLearningNote, "expiresAt"> & {
104
+ expiresAt?: number;
105
+ };
106
+ ttlMs?: number;
107
+ }): void;
108
+ export declare function listActiveSessionLearningNotes(params: {
109
+ storePath?: string;
110
+ accountId: string;
111
+ targetId: string;
112
+ nowMs?: number;
113
+ }): SessionLearningNote[];
114
+ export declare function upsertLearnedRule(params: {
115
+ storePath?: string;
116
+ accountId: string;
117
+ rule: LearnedRuleRecord;
118
+ }): void;
119
+ export declare function listLearnedRules(params: {
120
+ storePath?: string;
121
+ accountId: string;
122
+ }): LearnedRuleRecord[];
123
+ export declare function disableLearnedRule(params: {
124
+ storePath?: string;
125
+ accountId: string;
126
+ ruleId: string;
127
+ }): boolean;
128
+ export declare function deleteLearnedRule(params: {
129
+ storePath?: string;
130
+ accountId: string;
131
+ ruleId: string;
132
+ }): boolean;
133
+ export declare function upsertTargetRule(params: {
134
+ storePath?: string;
135
+ accountId: string;
136
+ targetId: string;
137
+ rule: LearnedRuleRecord;
138
+ }): void;
139
+ export declare function listTargetRules(params: {
140
+ storePath?: string;
141
+ accountId: string;
142
+ targetId: string;
143
+ }): LearnedRuleRecord[];
144
+ export declare function listAllScopedRules(params: {
145
+ storePath?: string;
146
+ accountId: string;
147
+ }): ScopedLearnedRuleRecord[];
148
+ export declare function disableScopedRule(params: {
149
+ storePath?: string;
150
+ accountId: string;
151
+ ruleId: string;
152
+ }): {
153
+ existed: boolean;
154
+ scope?: "global" | "target";
155
+ targetId?: string;
156
+ };
157
+ export declare function deleteScopedRule(params: {
158
+ storePath?: string;
159
+ accountId: string;
160
+ ruleId: string;
161
+ }): {
162
+ existed: boolean;
163
+ scope?: "global" | "target";
164
+ targetId?: string;
165
+ };
166
+ export declare function upsertTargetSet(params: {
167
+ storePath?: string;
168
+ accountId: string;
169
+ name: string;
170
+ targetIds: string[];
171
+ }): void;
172
+ export declare function getTargetSet(params: {
173
+ storePath?: string;
174
+ accountId: string;
175
+ name: string;
176
+ }): TargetSetRecord | null;
177
+ export declare function listTargetSets(params: {
178
+ storePath?: string;
179
+ accountId: string;
180
+ }): TargetSetRecord[];
181
+ //# sourceMappingURL=feedback-learning-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-learning-store.d.ts","sourceRoot":"","sources":["../../src/feedback-learning-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { DingTalkChannelPlugin } from "../types";
2
+ export declare const CHANNEL_INFLIGHT_NAMESPACE_POLICY: "memory-only";
3
+ export declare function createDingTalkGateway(): NonNullable<DingTalkChannelPlugin["gateway"]>;
4
+ //# sourceMappingURL=channel-gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-gateway.d.ts","sourceRoot":"","sources":["../../../src/gateway/channel-gateway.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAEV,qBAAqB,EAKtB,MAAM,UAAU,CAAC;AAuFlB,eAAO,MAAM,iCAAiC,EAAG,aAAsB,CAAC;AAwCxE,wBAAgB,qBAAqB,IAAI,WAAW,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAkerF"}
@@ -0,0 +1,9 @@
1
+ import axios from "axios";
2
+ import type { AxiosInstance } from "axios";
3
+ export declare const DEFAULT_HTTP_TIMEOUT_MS = 10000;
4
+ type AxiosInstanceWithGuards = AxiosInstance & {
5
+ isAxiosError: typeof axios.isAxiosError;
6
+ };
7
+ declare const httpClient: AxiosInstanceWithGuards;
8
+ export default httpClient;
9
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,KAAK,uBAAuB,GAAG,aAAa,GAAG;IAC7C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,CAAC;CACzC,CAAC;AAIF,QAAA,MAAM,UAAU,EAIX,uBAAuB,CAAC;AAI7B,eAAe,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { DingTalkConfig, HandleDingTalkMessageParams, MediaFile } from "./types";
2
+ export declare function resetProactivePermissionHintStateForTest(): void;
3
+ /**
4
+ * Download DingTalk media file via runtime media service (sandbox-compatible).
5
+ * Files are stored in the global media inbound directory.
6
+ */
7
+ export declare function downloadMedia(config: DingTalkConfig, downloadCode: string, log?: any, originalFilename?: string): Promise<MediaFile | null>;
8
+ export declare function handleDingTalkMessage(params: HandleDingTalkMessageParams): Promise<void>;
9
+ //# sourceMappingURL=inbound-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound-handler.d.ts","sourceRoot":"","sources":["../../src/inbound-handler.ts"],"names":[],"mappings":"AAuEA,OAAO,KAAK,EAAE,cAAc,EAAE,2BAA2B,EAAU,SAAS,EAAE,MAAM,SAAS,CAAC;AAyQ9F,wBAAgB,wCAAwC,IAAI,IAAI,CAG/D;AA4FD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,GAAG,EACT,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA0G3B;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsnD9F"}
@@ -0,0 +1,64 @@
1
+ import type { DingTalkConfig } from "./types";
2
+ export interface ParsedLearnCommand {
3
+ scope: "help" | "global" | "session" | "here" | "target" | "targets" | "list" | "disable" | "delete" | "whoami" | "whereami" | "owner-status" | "target-set-create" | "target-set-apply" | "unknown";
4
+ instruction?: string;
5
+ ruleId?: string;
6
+ targetId?: string;
7
+ targetIds?: string[];
8
+ setName?: string;
9
+ }
10
+ export declare function parseLearnCommand(text: string | undefined): ParsedLearnCommand;
11
+ export declare function isLearningOwner(params: {
12
+ cfg?: {
13
+ commands?: {
14
+ ownerAllowFrom?: Array<string | number>;
15
+ };
16
+ };
17
+ config?: DingTalkConfig;
18
+ senderId?: string;
19
+ rawSenderId?: string;
20
+ }): boolean;
21
+ export declare function formatWhoAmIReply(params: {
22
+ senderId: string;
23
+ rawSenderId?: string;
24
+ senderStaffId?: string;
25
+ isOwner?: boolean;
26
+ }): string;
27
+ export declare function formatWhereAmIReply(params: {
28
+ conversationId: string;
29
+ conversationType: "group" | "dm";
30
+ peerId?: string;
31
+ }): string;
32
+ export declare function formatOwnerStatusReply(params: {
33
+ senderId: string;
34
+ rawSenderId?: string;
35
+ isOwner: boolean;
36
+ }): string;
37
+ export declare function formatOwnerOnlyDeniedReply(): string;
38
+ export declare function formatLearnCommandHelp(): string;
39
+ export declare function formatLearnAppliedReply(params: {
40
+ scope: "global" | "session" | "target" | "targets" | "target-set";
41
+ instruction: string;
42
+ ruleId?: string;
43
+ targetId?: string;
44
+ targetIds?: string[];
45
+ setName?: string;
46
+ }): string;
47
+ export declare function formatLearnListReply(lines: string[]): string;
48
+ export declare function formatLearnDisabledReply(params: {
49
+ ruleId: string;
50
+ existed: boolean;
51
+ scope?: "global" | "target";
52
+ targetId?: string;
53
+ }): string;
54
+ export declare function formatLearnDeletedReply(params: {
55
+ ruleId: string;
56
+ existed: boolean;
57
+ scope?: "global" | "target";
58
+ targetId?: string;
59
+ }): string;
60
+ export declare function formatTargetSetSavedReply(params: {
61
+ setName: string;
62
+ targetIds: string[];
63
+ }): string;
64
+ //# sourceMappingURL=learning-command-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-command-service.d.ts","sourceRoot":"","sources":["../../src/learning-command-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Logger } from "./types";
2
+ /**
3
+ * Persist current request logger for shared services invoked outside handler scope.
4
+ */
5
+ export declare function setCurrentLogger(log?: Logger, accountId?: string | null): void;
6
+ /**
7
+ * Read current logger bound by inbound handler.
8
+ */
9
+ export declare function getLogger(accountId?: string | null): Logger | undefined;
10
+ //# sourceMappingURL=logger-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-context.d.ts","sourceRoot":"","sources":["../../src/logger-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKtC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAW9E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAMvE"}
@@ -0,0 +1,63 @@
1
+ import type { DingTalkConfig, Logger } from "./types";
2
+ /**
3
+ * Calculate MP3 duration in seconds by parsing MPEG frame headers
4
+ * Supports CBR and VBR MP3 files
5
+ * @param filePathOrBuffer Path to the MP3 file, or a pre-read Buffer
6
+ * @param log Optional logger
7
+ * @returns Duration in seconds (0 if parsing fails)
8
+ */
9
+ export declare function getMp3DurationSeconds(filePathOrBuffer: string | Buffer, log?: Logger): Promise<number>;
10
+ export declare function getVoiceDurationMs(filePath: string, mediaType: DingTalkMediaType, log?: Logger, options?: {
11
+ mediaLocalRoots?: string[];
12
+ preReadBuffer?: Buffer;
13
+ }): Promise<number>;
14
+ export type DingTalkMediaType = "image" | "voice" | "video" | "file";
15
+ export type DingTalkOutboundMediaType = DingTalkMediaType;
16
+ export interface PreparedMediaInput {
17
+ path: string;
18
+ cleanup?: () => Promise<void>;
19
+ }
20
+ export declare const REMOTE_MEDIA_ERROR_CODES: {
21
+ readonly ALLOWLIST_MISS: "ERR_MEDIA_ALLOWLIST_MISS";
22
+ readonly PRIVATE_HOST: "ERR_MEDIA_PRIVATE_HOST";
23
+ readonly DNS_UNRESOLVED: "ERR_MEDIA_DNS_UNRESOLVED";
24
+ readonly DNS_PRIVATE: "ERR_MEDIA_DNS_PRIVATE";
25
+ readonly REDIRECT_HOST: "ERR_MEDIA_REDIRECT_HOST";
26
+ };
27
+ export declare class RemoteMediaError extends Error {
28
+ readonly code: (typeof REMOTE_MEDIA_ERROR_CODES)[keyof typeof REMOTE_MEDIA_ERROR_CODES];
29
+ constructor(message: string, code: (typeof REMOTE_MEDIA_ERROR_CODES)[keyof typeof REMOTE_MEDIA_ERROR_CODES]);
30
+ }
31
+ /**
32
+ * Detect media type from file extension
33
+ * Matches DingTalk's supported media types:
34
+ * - image: jpg, gif, png, bmp (max 20MB)
35
+ * - voice: ogg, amr, mp3, wav (max 2MB)
36
+ * - video: mp4 (max 20MB)
37
+ * - file: doc, docx, xls, xlsx, ppt, pptx, zip, pdf, rar (max 20MB)
38
+ *
39
+ * @param filePath Path to the media file
40
+ * @returns Detected media type
41
+ */
42
+ export declare function detectMediaTypeFromExtension(filePath: string): DingTalkMediaType;
43
+ export declare function resolveOutboundMediaType(params: {
44
+ mediaType?: string | null;
45
+ mediaPath: string;
46
+ asVoice: boolean;
47
+ }): DingTalkOutboundMediaType;
48
+ export declare function prepareMediaInput(input: string, log?: Logger, mediaUrlAllowlist?: string[]): Promise<PreparedMediaInput>;
49
+ export interface UploadMediaResult {
50
+ mediaId: string;
51
+ /** The file buffer read during upload, reusable for voice duration parsing etc. */
52
+ buffer: Buffer;
53
+ /**
54
+ * Voice duration captured before any temporary transcoded file is cleaned up.
55
+ * This is the stable field callers should use instead of depending on any
56
+ * upload-time temp path lifecycle.
57
+ */
58
+ durationMs?: number;
59
+ }
60
+ export declare function uploadMedia(config: DingTalkConfig, mediaPath: string, mediaType: DingTalkMediaType, getAccessToken: (config: DingTalkConfig, log?: Logger) => Promise<string>, log?: Logger, options?: {
61
+ mediaLocalRoots?: string[];
62
+ }): Promise<UploadMediaResult | null>;
63
+ //# sourceMappingURL=media-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-utils.d.ts","sourceRoot":"","sources":["../../src/media-utils.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAmBtD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqK5G;AAwHD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,iBAAiB,EAC5B,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/D,OAAO,CAAC,MAAM,CAAC,CAgDjB;AAGD,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AACrE,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,eAAO,MAAM,wBAAwB;;;;;;CAM3B,CAAC;AAEX,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,IAAI,EAAE,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC;gBAD9F,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC;CAKjG;AAmED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAYhF;AAeD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,yBAAyB,CA2B5B;AAiFD,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,EACZ,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAyI7B;AA+DD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,iBAAiB,EAC5B,cAAc,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EACzE,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACvC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CA4EnC"}
@@ -0,0 +1,126 @@
1
+ import type { AttachmentTextSource, Logger, QuotedRef } from "./types";
2
+ export declare const DEFAULT_MESSAGE_CONTEXT_TTL_DAYS = 7;
3
+ export declare const DEFAULT_CARD_CONTENT_TTL_MS: number;
4
+ export declare const DEFAULT_MEDIA_CONTEXT_TTL_MS: number;
5
+ export declare const DEFAULT_CREATED_AT_MATCH_WINDOW_MS = 2000;
6
+ export type MessageContextDirection = "inbound" | "outbound";
7
+ export type MessageAliasKind = "inboundMsgId" | "messageId" | "processQueryKey" | "outTrackId" | "cardInstanceId";
8
+ export type MessageDeliveryKind = "session" | "proactive-text" | "proactive-card" | "proactive-media";
9
+ export declare const DEFAULT_OUTBOUND_SENDER: {
10
+ readonly senderId: "bot";
11
+ readonly senderName: "OpenClaw";
12
+ };
13
+ /** DingTalk conversation ids usually start with "cid" for group chats; treat this as a heuristic. */
14
+ export declare function inferConversationChatType(conversationId: string): "direct" | "group";
15
+ export interface MessageRecord {
16
+ msgId: string;
17
+ direction: MessageContextDirection;
18
+ topic: string | null;
19
+ accountId: string;
20
+ conversationId: string | null;
21
+ createdAt: number;
22
+ updatedAt: number;
23
+ expiresAt?: number;
24
+ messageType?: string;
25
+ text?: string;
26
+ attachmentText?: string;
27
+ attachmentTextSource?: AttachmentTextSource;
28
+ attachmentTextTruncated?: boolean;
29
+ attachmentFileName?: string;
30
+ quotedRef?: QuotedRef;
31
+ senderId?: string;
32
+ senderName?: string;
33
+ mentions?: string[];
34
+ chatType?: "direct" | "group";
35
+ /** Flat quoted target for summary/history lookups; quotedRef remains the authoritative structured link. */
36
+ quotedMessageId?: string;
37
+ media?: {
38
+ downloadCode?: string;
39
+ downloadCodes?: string[];
40
+ spaceId?: string;
41
+ fileId?: string;
42
+ };
43
+ delivery?: {
44
+ messageId?: string;
45
+ processQueryKey?: string;
46
+ outTrackId?: string;
47
+ cardInstanceId?: string;
48
+ kind?: MessageDeliveryKind;
49
+ };
50
+ }
51
+ interface BaseUpsertParams {
52
+ storePath?: string;
53
+ accountId: string;
54
+ conversationId: string | null;
55
+ createdAt: number;
56
+ updatedAt?: number;
57
+ ttlMs?: number;
58
+ ttlReferenceMs?: number;
59
+ topic?: string | null;
60
+ messageType?: string;
61
+ text?: string;
62
+ attachmentText?: string;
63
+ attachmentTextSource?: AttachmentTextSource;
64
+ attachmentTextTruncated?: boolean;
65
+ attachmentFileName?: string;
66
+ quotedRef?: QuotedRef;
67
+ senderId?: string;
68
+ senderName?: string;
69
+ mentions?: string[];
70
+ chatType?: "direct" | "group";
71
+ quotedMessageId?: string;
72
+ media?: {
73
+ downloadCode?: string;
74
+ downloadCodes?: string[];
75
+ spaceId?: string;
76
+ fileId?: string;
77
+ };
78
+ }
79
+ export interface UpsertInboundMessageContextParams extends BaseUpsertParams {
80
+ msgId: string;
81
+ cleanupCreatedAtTtlDays?: number;
82
+ }
83
+ export interface UpsertOutboundMessageContextParams extends BaseUpsertParams {
84
+ msgId?: string;
85
+ delivery?: MessageRecord["delivery"];
86
+ }
87
+ interface ScopeParams {
88
+ storePath?: string;
89
+ accountId: string;
90
+ conversationId: string | null;
91
+ }
92
+ export declare function upsertInboundMessageContext(params: UpsertInboundMessageContextParams): string;
93
+ export declare function upsertOutboundMessageContext(params: UpsertOutboundMessageContextParams): string | undefined;
94
+ export declare function createSyntheticOutboundMsgId(createdAt: number): string;
95
+ export declare function resolveByMsgId(params: ScopeParams & {
96
+ msgId: string;
97
+ nowMs?: number;
98
+ }): MessageRecord | null;
99
+ export declare function resolveByAlias(params: ScopeParams & {
100
+ kind: MessageAliasKind;
101
+ value: string;
102
+ nowMs?: number;
103
+ }): MessageRecord | null;
104
+ export declare function resolveByQuotedRef(params: ScopeParams & {
105
+ quotedRef: QuotedRef;
106
+ nowMs?: number;
107
+ log?: Logger;
108
+ }): MessageRecord | null;
109
+ export declare function resolveByCreatedAtWindow(params: ScopeParams & {
110
+ createdAt: number;
111
+ windowMs?: number;
112
+ direction?: MessageContextDirection;
113
+ nowMs?: number;
114
+ }): MessageRecord | null;
115
+ export declare function cleanupExpiredMessageContexts(params: ScopeParams & {
116
+ nowMs?: number;
117
+ }): number;
118
+ export declare function clearMessageContextCacheForTest(): void;
119
+ /**
120
+ * Lists non-expired message-context records for one account/conversation scope in createdAt ascending order.
121
+ */
122
+ export declare function listMessageContexts(params: ScopeParams & {
123
+ nowMs?: number;
124
+ }): MessageRecord[];
125
+ export {};
126
+ //# sourceMappingURL=message-context-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-context-store.d.ts","sourceRoot":"","sources":["../../src/message-context-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { DingTalkInboundMessage, MessageContent, SendMessageOptions } from "./types";
2
+ /**
3
+ * Auto-detect markdown usage and derive message title.
4
+ * Title extraction follows DingTalk markdown card title constraints.
5
+ */
6
+ export declare function detectMarkdownAndExtractTitle(text: string, options: SendMessageOptions, defaultTitle: string): {
7
+ useMarkdown: boolean;
8
+ title: string;
9
+ };
10
+ export declare function convertMarkdownTablesToPlainText(text: string): string;
11
+ export declare function extractMessageContent(data: DingTalkInboundMessage): MessageContent;
12
+ //# sourceMappingURL=message-utils.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,13 @@
1
+ import type { AttachmentTextSource } from "../types";
2
+ export interface AttachmentTextExtractionInput {
3
+ path: string;
4
+ mimeType?: string;
5
+ fileName?: string;
6
+ }
7
+ export interface AttachmentTextExtractionResult {
8
+ text: string;
9
+ truncated: boolean;
10
+ sourceType: AttachmentTextSource;
11
+ }
12
+ export declare function extractAttachmentText(input: AttachmentTextExtractionInput): Promise<AttachmentTextExtractionResult | null>;
13
+ //# sourceMappingURL=attachment-text-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-text-extractor.d.ts","sourceRoot":"","sources":["../../../src/messaging/attachment-text-extractor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAKrD,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAuFD,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,8BAA8B,GAAG,IAAI,CAAC,CAyChD"}
@@ -0,0 +1,42 @@
1
+ import type { DingTalkConfig, Logger } from "../types";
2
+ /**
3
+ * Strip leading `@mention` tokens from inbound text. Used by both the abort and
4
+ * BTW bypass branches in `inbound-handler.ts` so that command detection works
5
+ * uniformly in DM and group chats.
6
+ */
7
+ export declare function stripLeadingMentions(text: string): string;
8
+ export declare function buildBtwBlockquote(senderName: string, rawQuestion: string): string;
9
+ export interface DeliverBtwReplyArgs {
10
+ config: DingTalkConfig;
11
+ sessionWebhook: string | undefined;
12
+ conversationId: string;
13
+ to: string;
14
+ senderName: string;
15
+ rawQuestion: string;
16
+ replyText: string;
17
+ log: Logger | undefined;
18
+ accountId?: string;
19
+ storePath?: string;
20
+ }
21
+ /**
22
+ * Deliver a BTW reply through the unified `sendMessage` entry point.
23
+ *
24
+ * BTW is a special inbound trigger, but the *outbound* reply is still a regular
25
+ * markdown/text message and must inherit the standard send-service semantics:
26
+ * persistence into the message context store, delivery metadata tracking, and
27
+ * the single `{ ok, error, ... }` contract. We pass `forceMarkdown: true` so
28
+ * that `sendMessage` skips the card branch even when the channel is configured
29
+ * for card mode — BTW must never create or touch an AI Card (see CLAUDE.md
30
+ * anti-pattern: "Do not create multiple active AI Cards for the same
31
+ * `accountId:conversationId`").
32
+ *
33
+ * When `sessionWebhook` is present `sendMessage` internally dispatches via
34
+ * `sendBySession`; otherwise it falls back to the proactive text/markdown API.
35
+ * Either way the caller sees the same return shape, and failures propagate as
36
+ * `{ ok: false }` instead of being silently swallowed.
37
+ */
38
+ export declare function deliverBtwReply(args: DeliverBtwReplyArgs): Promise<{
39
+ ok: boolean;
40
+ error?: string;
41
+ }>;
42
+ //# sourceMappingURL=btw-deliver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"btw-deliver.d.ts","sourceRoot":"","sources":["../../../src/messaging/btw-deliver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKvD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAWlF;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,cAAc,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB1C"}
@@ -0,0 +1,3 @@
1
+ import type { ChannelMessageActionAdapter } from "openclaw/plugin-sdk/channel-contract";
2
+ export declare function createDingTalkMessageActions(): ChannelMessageActionAdapter;
3
+ //# sourceMappingURL=channel-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-actions.d.ts","sourceRoot":"","sources":["../../../src/messaging/channel-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AAkExF,wBAAgB,4BAA4B,IAAI,2BAA2B,CA0G1E"}
@@ -0,0 +1,3 @@
1
+ import type { DingTalkChannelPlugin } from "../types";
2
+ export declare function createDingTalkOutbound(): NonNullable<DingTalkChannelPlugin["outbound"]>;
3
+ //# sourceMappingURL=channel-outbound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-outbound.d.ts","sourceRoot":"","sources":["../../../src/messaging/channel-outbound.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAetD,wBAAgB,sBAAsB,IAAI,WAAW,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAwIvF"}