@xgjktech/xg_cwork_im 1.11.6 → 1.11.7

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 (84) hide show
  1. package/README.md +17 -6
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +12 -7
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/agent-context-types.d.ts +33 -0
  6. package/dist/src/agent-context-types.d.ts.map +1 -0
  7. package/dist/src/agent-context-types.js +26 -0
  8. package/dist/src/agent-context-types.js.map +1 -0
  9. package/dist/src/apply-sync-mapping.d.ts +17 -0
  10. package/dist/src/apply-sync-mapping.d.ts.map +1 -0
  11. package/dist/src/apply-sync-mapping.js +86 -0
  12. package/dist/src/apply-sync-mapping.js.map +1 -0
  13. package/dist/src/auth.d.ts +2 -2
  14. package/dist/src/auth.d.ts.map +1 -1
  15. package/dist/src/auth.js +18 -12
  16. package/dist/src/auth.js.map +1 -1
  17. package/dist/src/build-project-prompt.d.ts +28 -0
  18. package/dist/src/build-project-prompt.d.ts.map +1 -0
  19. package/dist/src/build-project-prompt.js +86 -0
  20. package/dist/src/build-project-prompt.js.map +1 -0
  21. package/dist/src/channel-config.d.ts +256 -0
  22. package/dist/src/channel-config.d.ts.map +1 -0
  23. package/dist/src/channel-config.js +194 -0
  24. package/dist/src/channel-config.js.map +1 -0
  25. package/dist/src/channel-log.d.ts +17 -0
  26. package/dist/src/channel-log.d.ts.map +1 -0
  27. package/dist/src/channel-log.js +45 -0
  28. package/dist/src/channel-log.js.map +1 -0
  29. package/dist/src/channel.d.ts +4 -7
  30. package/dist/src/channel.d.ts.map +1 -1
  31. package/dist/src/channel.js +81 -603
  32. package/dist/src/channel.js.map +1 -1
  33. package/dist/src/connection.d.ts +45 -9
  34. package/dist/src/connection.d.ts.map +1 -1
  35. package/dist/src/connection.js +117 -5
  36. package/dist/src/connection.js.map +1 -1
  37. package/dist/src/dispatch-mentioned-reply.d.ts +25 -0
  38. package/dist/src/dispatch-mentioned-reply.d.ts.map +1 -0
  39. package/dist/src/dispatch-mentioned-reply.js +346 -0
  40. package/dist/src/dispatch-mentioned-reply.js.map +1 -0
  41. package/dist/src/gateway-session-queue.d.ts +26 -0
  42. package/dist/src/gateway-session-queue.d.ts.map +1 -0
  43. package/dist/src/gateway-session-queue.js +82 -0
  44. package/dist/src/gateway-session-queue.js.map +1 -0
  45. package/dist/src/group-history-tool.d.ts +11 -3
  46. package/dist/src/group-history-tool.d.ts.map +1 -1
  47. package/dist/src/group-history-tool.js +14 -10
  48. package/dist/src/group-history-tool.js.map +1 -1
  49. package/dist/src/inbound-display.d.ts +25 -0
  50. package/dist/src/inbound-display.d.ts.map +1 -0
  51. package/dist/src/inbound-display.js +100 -0
  52. package/dist/src/inbound-display.js.map +1 -0
  53. package/dist/src/project-path-normalize.d.ts +16 -0
  54. package/dist/src/project-path-normalize.d.ts.map +1 -0
  55. package/dist/src/project-path-normalize.js +75 -0
  56. package/dist/src/project-path-normalize.js.map +1 -0
  57. package/dist/src/resolve-inbound-group-prompt.d.ts +18 -0
  58. package/dist/src/resolve-inbound-group-prompt.d.ts.map +1 -0
  59. package/dist/src/resolve-inbound-group-prompt.js +38 -0
  60. package/dist/src/resolve-inbound-group-prompt.js.map +1 -0
  61. package/dist/src/resource-file.d.ts +17 -8
  62. package/dist/src/resource-file.d.ts.map +1 -1
  63. package/dist/src/resource-file.js +60 -21
  64. package/dist/src/resource-file.js.map +1 -1
  65. package/dist/src/send-group-message-tool.d.ts +3 -2
  66. package/dist/src/send-group-message-tool.d.ts.map +1 -1
  67. package/dist/src/send-group-message-tool.js +5 -4
  68. package/dist/src/send-group-message-tool.js.map +1 -1
  69. package/dist/src/send-service.d.ts +5 -1
  70. package/dist/src/send-service.d.ts.map +1 -1
  71. package/dist/src/send-service.js +6 -2
  72. package/dist/src/send-service.js.map +1 -1
  73. package/dist/src/sync-mapping-types.d.ts +170 -0
  74. package/dist/src/sync-mapping-types.d.ts.map +1 -0
  75. package/dist/src/sync-mapping-types.js +41 -0
  76. package/dist/src/sync-mapping-types.js.map +1 -0
  77. package/dist/src/sync-service-client.d.ts +27 -0
  78. package/dist/src/sync-service-client.d.ts.map +1 -0
  79. package/dist/src/sync-service-client.js +72 -0
  80. package/dist/src/sync-service-client.js.map +1 -0
  81. package/dist/src/types.d.ts +22 -0
  82. package/dist/src/types.d.ts.map +1 -1
  83. package/dist/src/types.js.map +1 -1
  84. package/package.json +1 -1
@@ -0,0 +1,256 @@
1
+ /**
2
+ * channels.xg_cwork_im:Zod schema、账户合并、群 systemPrompt、命令门控(allowFrom / resolveControlCommandGate)。
3
+ */
4
+ import type { OpenClawConfig } from "openclaw/plugin-sdk";
5
+ import { z } from "zod";
6
+ import type { XgImConfig } from "./types.js";
7
+ export declare const XgImConfigSchema: z.ZodEffects<z.ZodObject<{
8
+ robotKey: z.ZodOptional<z.ZodString>;
9
+ appKey: z.ZodOptional<z.ZodString>;
10
+ agentId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
11
+ baseUrl: z.ZodString;
12
+ wsBaseUrl: z.ZodOptional<z.ZodString>;
13
+ enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
14
+ name: z.ZodOptional<z.ZodString>;
15
+ groupPolicy: z.ZodDefault<z.ZodOptional<z.ZodEnum<["open", "mention"]>>>;
16
+ allowFrom: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
17
+ debug: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
18
+ maxConnectionAttempts: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
19
+ initialReconnectDelay: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
20
+ maxReconnectDelay: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
21
+ reconnectJitter: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
22
+ fileUploadFormField: z.ZodOptional<z.ZodString>;
23
+ maxAttachmentBytes: z.ZodOptional<z.ZodNumber>;
24
+ inboundMediaWorkspaceSubdir: z.ZodOptional<z.ZodString>;
25
+ inboundMediaOpenClawPath: z.ZodOptional<z.ZodEnum<["workspaceRelative", "absoluteFileUrl"]>>;
26
+ inboundMediaSandboxRootPrefix: z.ZodOptional<z.ZodString>;
27
+ systemPrompt: z.ZodOptional<z.ZodString>;
28
+ maxPendingMessages: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
29
+ syncServiceBaseUrl: z.ZodOptional<z.ZodString>;
30
+ projectPromptMaxChars: z.ZodOptional<z.ZodNumber>;
31
+ accounts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
32
+ robotKey: z.ZodOptional<z.ZodString>;
33
+ appKey: z.ZodOptional<z.ZodString>;
34
+ agentId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
35
+ name: z.ZodOptional<z.ZodString>;
36
+ groupPolicy: z.ZodDefault<z.ZodOptional<z.ZodEnum<["open", "mention"]>>>;
37
+ fileUploadFormField: z.ZodOptional<z.ZodString>;
38
+ maxAttachmentBytes: z.ZodOptional<z.ZodNumber>;
39
+ inboundMediaWorkspaceSubdir: z.ZodOptional<z.ZodString>;
40
+ inboundMediaOpenClawPath: z.ZodOptional<z.ZodEnum<["workspaceRelative", "absoluteFileUrl"]>>;
41
+ inboundMediaSandboxRootPrefix: z.ZodOptional<z.ZodString>;
42
+ systemPrompt: z.ZodOptional<z.ZodString>;
43
+ maxPendingMessages: z.ZodOptional<z.ZodNumber>;
44
+ syncServiceBaseUrl: z.ZodOptional<z.ZodString>;
45
+ projectPromptMaxChars: z.ZodOptional<z.ZodNumber>;
46
+ }, "strip", z.ZodTypeAny, {
47
+ agentId: string;
48
+ groupPolicy: "open" | "mention";
49
+ name?: string | undefined;
50
+ robotKey?: string | undefined;
51
+ appKey?: string | undefined;
52
+ fileUploadFormField?: string | undefined;
53
+ maxAttachmentBytes?: number | undefined;
54
+ inboundMediaWorkspaceSubdir?: string | undefined;
55
+ inboundMediaOpenClawPath?: "workspaceRelative" | "absoluteFileUrl" | undefined;
56
+ inboundMediaSandboxRootPrefix?: string | undefined;
57
+ systemPrompt?: string | undefined;
58
+ maxPendingMessages?: number | undefined;
59
+ syncServiceBaseUrl?: string | undefined;
60
+ projectPromptMaxChars?: number | undefined;
61
+ }, {
62
+ name?: string | undefined;
63
+ robotKey?: string | undefined;
64
+ appKey?: string | undefined;
65
+ agentId?: string | undefined;
66
+ groupPolicy?: "open" | "mention" | undefined;
67
+ fileUploadFormField?: string | undefined;
68
+ maxAttachmentBytes?: number | undefined;
69
+ inboundMediaWorkspaceSubdir?: string | undefined;
70
+ inboundMediaOpenClawPath?: "workspaceRelative" | "absoluteFileUrl" | undefined;
71
+ inboundMediaSandboxRootPrefix?: string | undefined;
72
+ systemPrompt?: string | undefined;
73
+ maxPendingMessages?: number | undefined;
74
+ syncServiceBaseUrl?: string | undefined;
75
+ projectPromptMaxChars?: number | undefined;
76
+ }>>>;
77
+ }, "strip", z.ZodTypeAny, {
78
+ agentId: string;
79
+ baseUrl: string;
80
+ enabled: boolean;
81
+ groupPolicy: "open" | "mention";
82
+ allowFrom: string[];
83
+ debug: boolean;
84
+ maxConnectionAttempts: number;
85
+ initialReconnectDelay: number;
86
+ maxReconnectDelay: number;
87
+ reconnectJitter: number;
88
+ maxPendingMessages: number;
89
+ name?: string | undefined;
90
+ accounts?: Record<string, {
91
+ agentId: string;
92
+ groupPolicy: "open" | "mention";
93
+ name?: string | undefined;
94
+ robotKey?: string | undefined;
95
+ appKey?: string | undefined;
96
+ fileUploadFormField?: string | undefined;
97
+ maxAttachmentBytes?: number | undefined;
98
+ inboundMediaWorkspaceSubdir?: string | undefined;
99
+ inboundMediaOpenClawPath?: "workspaceRelative" | "absoluteFileUrl" | undefined;
100
+ inboundMediaSandboxRootPrefix?: string | undefined;
101
+ systemPrompt?: string | undefined;
102
+ maxPendingMessages?: number | undefined;
103
+ syncServiceBaseUrl?: string | undefined;
104
+ projectPromptMaxChars?: number | undefined;
105
+ }> | undefined;
106
+ robotKey?: string | undefined;
107
+ appKey?: string | undefined;
108
+ wsBaseUrl?: string | undefined;
109
+ fileUploadFormField?: string | undefined;
110
+ maxAttachmentBytes?: number | undefined;
111
+ inboundMediaWorkspaceSubdir?: string | undefined;
112
+ inboundMediaOpenClawPath?: "workspaceRelative" | "absoluteFileUrl" | undefined;
113
+ inboundMediaSandboxRootPrefix?: string | undefined;
114
+ systemPrompt?: string | undefined;
115
+ syncServiceBaseUrl?: string | undefined;
116
+ projectPromptMaxChars?: number | undefined;
117
+ }, {
118
+ baseUrl: string;
119
+ name?: string | undefined;
120
+ accounts?: Record<string, {
121
+ name?: string | undefined;
122
+ robotKey?: string | undefined;
123
+ appKey?: string | undefined;
124
+ agentId?: string | undefined;
125
+ groupPolicy?: "open" | "mention" | undefined;
126
+ fileUploadFormField?: string | undefined;
127
+ maxAttachmentBytes?: number | undefined;
128
+ inboundMediaWorkspaceSubdir?: string | undefined;
129
+ inboundMediaOpenClawPath?: "workspaceRelative" | "absoluteFileUrl" | undefined;
130
+ inboundMediaSandboxRootPrefix?: string | undefined;
131
+ systemPrompt?: string | undefined;
132
+ maxPendingMessages?: number | undefined;
133
+ syncServiceBaseUrl?: string | undefined;
134
+ projectPromptMaxChars?: number | undefined;
135
+ }> | undefined;
136
+ robotKey?: string | undefined;
137
+ appKey?: string | undefined;
138
+ agentId?: string | undefined;
139
+ wsBaseUrl?: string | undefined;
140
+ enabled?: boolean | undefined;
141
+ groupPolicy?: "open" | "mention" | undefined;
142
+ allowFrom?: string[] | undefined;
143
+ debug?: boolean | undefined;
144
+ maxConnectionAttempts?: number | undefined;
145
+ initialReconnectDelay?: number | undefined;
146
+ maxReconnectDelay?: number | undefined;
147
+ reconnectJitter?: number | undefined;
148
+ fileUploadFormField?: string | undefined;
149
+ maxAttachmentBytes?: number | undefined;
150
+ inboundMediaWorkspaceSubdir?: string | undefined;
151
+ inboundMediaOpenClawPath?: "workspaceRelative" | "absoluteFileUrl" | undefined;
152
+ inboundMediaSandboxRootPrefix?: string | undefined;
153
+ systemPrompt?: string | undefined;
154
+ maxPendingMessages?: number | undefined;
155
+ syncServiceBaseUrl?: string | undefined;
156
+ projectPromptMaxChars?: number | undefined;
157
+ }>, {
158
+ agentId: string;
159
+ baseUrl: string;
160
+ enabled: boolean;
161
+ groupPolicy: "open" | "mention";
162
+ allowFrom: string[];
163
+ debug: boolean;
164
+ maxConnectionAttempts: number;
165
+ initialReconnectDelay: number;
166
+ maxReconnectDelay: number;
167
+ reconnectJitter: number;
168
+ maxPendingMessages: number;
169
+ name?: string | undefined;
170
+ accounts?: Record<string, {
171
+ agentId: string;
172
+ groupPolicy: "open" | "mention";
173
+ name?: string | undefined;
174
+ robotKey?: string | undefined;
175
+ appKey?: string | undefined;
176
+ fileUploadFormField?: string | undefined;
177
+ maxAttachmentBytes?: number | undefined;
178
+ inboundMediaWorkspaceSubdir?: string | undefined;
179
+ inboundMediaOpenClawPath?: "workspaceRelative" | "absoluteFileUrl" | undefined;
180
+ inboundMediaSandboxRootPrefix?: string | undefined;
181
+ systemPrompt?: string | undefined;
182
+ maxPendingMessages?: number | undefined;
183
+ syncServiceBaseUrl?: string | undefined;
184
+ projectPromptMaxChars?: number | undefined;
185
+ }> | undefined;
186
+ robotKey?: string | undefined;
187
+ appKey?: string | undefined;
188
+ wsBaseUrl?: string | undefined;
189
+ fileUploadFormField?: string | undefined;
190
+ maxAttachmentBytes?: number | undefined;
191
+ inboundMediaWorkspaceSubdir?: string | undefined;
192
+ inboundMediaOpenClawPath?: "workspaceRelative" | "absoluteFileUrl" | undefined;
193
+ inboundMediaSandboxRootPrefix?: string | undefined;
194
+ systemPrompt?: string | undefined;
195
+ syncServiceBaseUrl?: string | undefined;
196
+ projectPromptMaxChars?: number | undefined;
197
+ }, {
198
+ baseUrl: string;
199
+ name?: string | undefined;
200
+ accounts?: Record<string, {
201
+ name?: string | undefined;
202
+ robotKey?: string | undefined;
203
+ appKey?: string | undefined;
204
+ agentId?: string | undefined;
205
+ groupPolicy?: "open" | "mention" | undefined;
206
+ fileUploadFormField?: string | undefined;
207
+ maxAttachmentBytes?: number | undefined;
208
+ inboundMediaWorkspaceSubdir?: string | undefined;
209
+ inboundMediaOpenClawPath?: "workspaceRelative" | "absoluteFileUrl" | undefined;
210
+ inboundMediaSandboxRootPrefix?: string | undefined;
211
+ systemPrompt?: string | undefined;
212
+ maxPendingMessages?: number | undefined;
213
+ syncServiceBaseUrl?: string | undefined;
214
+ projectPromptMaxChars?: number | undefined;
215
+ }> | undefined;
216
+ robotKey?: string | undefined;
217
+ appKey?: string | undefined;
218
+ agentId?: string | undefined;
219
+ wsBaseUrl?: string | undefined;
220
+ enabled?: boolean | undefined;
221
+ groupPolicy?: "open" | "mention" | undefined;
222
+ allowFrom?: string[] | undefined;
223
+ debug?: boolean | undefined;
224
+ maxConnectionAttempts?: number | undefined;
225
+ initialReconnectDelay?: number | undefined;
226
+ maxReconnectDelay?: number | undefined;
227
+ reconnectJitter?: number | undefined;
228
+ fileUploadFormField?: string | undefined;
229
+ maxAttachmentBytes?: number | undefined;
230
+ inboundMediaWorkspaceSubdir?: string | undefined;
231
+ inboundMediaOpenClawPath?: "workspaceRelative" | "absoluteFileUrl" | undefined;
232
+ inboundMediaSandboxRootPrefix?: string | undefined;
233
+ systemPrompt?: string | undefined;
234
+ maxPendingMessages?: number | undefined;
235
+ syncServiceBaseUrl?: string | undefined;
236
+ projectPromptMaxChars?: number | undefined;
237
+ }>;
238
+ /** 将 `robotKey`(推荐)或旧字段 `appKey` 归一为鉴权可用的密钥(两字段同步为同一非空值)。 */
239
+ export declare function normalizeRobotKey<T extends {
240
+ robotKey?: string;
241
+ appKey?: string;
242
+ }>(config: T): T;
243
+ /** 从顶层 cfg 中取出 XgImConfig,支持多账户(README:channels.xg_cwork_im) */
244
+ export declare function getXgImConfig(cfg: OpenClawConfig, accountId?: string | null): XgImConfig;
245
+ /**
246
+ * 合并 `channels.xg_cwork_im` 顶层、`accounts.default`、以及 `accounts.<accountId>` 后的 `systemPrompt`,
247
+ * 写入 OpenClaw 入站 `GroupSystemPrompt`。
248
+ */
249
+ export declare function resolveXgImGroupSystemPrompt(cfg: OpenClawConfig, accountId: string): string | undefined;
250
+ export declare function isConfigured(cfg: OpenClawConfig): boolean;
251
+ export declare function resolveInboundCommandAuthorized(rt: unknown, cfg: OpenClawConfig, p: {
252
+ accountId: string;
253
+ senderId: string | undefined;
254
+ config: XgImConfig;
255
+ }): boolean;
256
+ //# sourceMappingURL=channel-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-config.d.ts","sourceRoot":"","sources":["../../src/channel-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmB7C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgFvB,CAAC;AAEP,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAIhG;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAuBxF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBvG;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAOzD;AAUD,wBAAgB,+BAA+B,CAC3C,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,cAAc,EACnB,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAC3E,OAAO,CA6BT"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * channels.xg_cwork_im:Zod schema、账户合并、群 systemPrompt、命令门控(allowFrom / resolveControlCommandGate)。
3
+ */
4
+ import { z } from "zod";
5
+ import { normalizeInboundWorkspaceSubdir } from "./inbound-media-local.js";
6
+ const XgImAccountConfigSchema = z.object({
7
+ robotKey: z.string().min(1).optional(),
8
+ appKey: z.string().min(1).optional(),
9
+ agentId: z.string().optional().default("main"),
10
+ name: z.string().optional(),
11
+ groupPolicy: z.enum(["open", "mention"]).optional().default("mention"),
12
+ fileUploadFormField: z.string().min(1).optional(),
13
+ maxAttachmentBytes: z.number().int().positive().optional(),
14
+ inboundMediaWorkspaceSubdir: z.string().optional(),
15
+ inboundMediaOpenClawPath: z.enum(["workspaceRelative", "absoluteFileUrl"]).optional(),
16
+ inboundMediaSandboxRootPrefix: z.string().optional(),
17
+ systemPrompt: z.string().optional(),
18
+ maxPendingMessages: z.number().int().min(0).optional(),
19
+ syncServiceBaseUrl: z.string().url("syncServiceBaseUrl must be a valid URL").optional(),
20
+ projectPromptMaxChars: z.number().int().positive().optional(),
21
+ });
22
+ export const XgImConfigSchema = z
23
+ .object({
24
+ robotKey: z.string().optional(),
25
+ appKey: z.string().optional(),
26
+ agentId: z.string().optional().default("main"),
27
+ baseUrl: z.string().url("baseUrl must be a valid URL"),
28
+ wsBaseUrl: z.string().url("wsBaseUrl must be a valid URL").optional(),
29
+ enabled: z.boolean().optional().default(true),
30
+ name: z.string().optional(),
31
+ groupPolicy: z.enum(["open", "mention"]).optional().default("mention"),
32
+ allowFrom: z.array(z.string()).optional().default([]),
33
+ debug: z.boolean().optional().default(false),
34
+ maxConnectionAttempts: z.number().int().positive().optional().default(10),
35
+ initialReconnectDelay: z.number().int().positive().optional().default(1_000),
36
+ maxReconnectDelay: z.number().int().positive().optional().default(60_000),
37
+ reconnectJitter: z.number().min(0).max(1).optional().default(0.3),
38
+ fileUploadFormField: z.string().min(1).optional(),
39
+ maxAttachmentBytes: z.number().int().positive().optional(),
40
+ inboundMediaWorkspaceSubdir: z.string().optional(),
41
+ inboundMediaOpenClawPath: z.enum(["workspaceRelative", "absoluteFileUrl"]).optional(),
42
+ inboundMediaSandboxRootPrefix: z.string().optional(),
43
+ systemPrompt: z.string().optional(),
44
+ maxPendingMessages: z.number().int().min(0).optional().default(5),
45
+ syncServiceBaseUrl: z.string().url("syncServiceBaseUrl must be a valid URL").optional(),
46
+ projectPromptMaxChars: z.number().int().positive().optional(),
47
+ accounts: z.record(z.string(), XgImAccountConfigSchema).optional(),
48
+ })
49
+ .superRefine((val, ctx) => {
50
+ const badSubdir = (s) => typeof s === "string" && s.trim().length > 0 && normalizeInboundWorkspaceSubdir(s) == null;
51
+ if (badSubdir(val.inboundMediaWorkspaceSubdir)) {
52
+ ctx.addIssue({
53
+ code: z.ZodIssueCode.custom,
54
+ path: ["inboundMediaWorkspaceSubdir"],
55
+ message: "inboundMediaWorkspaceSubdir must be a relative path under workspace (no .., no absolute path)",
56
+ });
57
+ }
58
+ const badSandboxPrefix = (s) => typeof s === "string" && s.trim().length > 0 && !s.trim().startsWith("/");
59
+ if (badSandboxPrefix(val.inboundMediaSandboxRootPrefix)) {
60
+ ctx.addIssue({
61
+ code: z.ZodIssueCode.custom,
62
+ path: ["inboundMediaSandboxRootPrefix"],
63
+ message: "inboundMediaSandboxRootPrefix must be empty or an absolute path such as /workspace",
64
+ });
65
+ }
66
+ const accounts = val.accounts;
67
+ if (!accounts)
68
+ return;
69
+ for (const [key, acc] of Object.entries(accounts)) {
70
+ if (key === "default")
71
+ continue;
72
+ if (!acc || typeof acc !== "object")
73
+ continue;
74
+ if (!acc.robotKey && !acc.appKey) {
75
+ ctx.addIssue({
76
+ code: z.ZodIssueCode.custom,
77
+ path: ["accounts", key, "robotKey"],
78
+ message: "robotKey (or appKey) is required for account entries (except accounts.default)",
79
+ });
80
+ }
81
+ if (badSubdir(acc.inboundMediaWorkspaceSubdir)) {
82
+ ctx.addIssue({
83
+ code: z.ZodIssueCode.custom,
84
+ path: ["accounts", key, "inboundMediaWorkspaceSubdir"],
85
+ message: "inboundMediaWorkspaceSubdir must be a relative path under workspace (no .., no absolute path)",
86
+ });
87
+ }
88
+ if (badSandboxPrefix(acc.inboundMediaSandboxRootPrefix)) {
89
+ ctx.addIssue({
90
+ code: z.ZodIssueCode.custom,
91
+ path: ["accounts", key, "inboundMediaSandboxRootPrefix"],
92
+ message: "inboundMediaSandboxRootPrefix must be empty or an absolute path such as /workspace",
93
+ });
94
+ }
95
+ }
96
+ });
97
+ /** 将 `robotKey`(推荐)或旧字段 `appKey` 归一为鉴权可用的密钥(两字段同步为同一非空值)。 */
98
+ export function normalizeRobotKey(config) {
99
+ const resolved = (config.robotKey ?? config.appKey)?.trim();
100
+ if (!resolved)
101
+ return config;
102
+ return { ...config, appKey: resolved, robotKey: resolved };
103
+ }
104
+ /** 从顶层 cfg 中取出 XgImConfig,支持多账户(README:channels.xg_cwork_im) */
105
+ export function getXgImConfig(cfg, accountId) {
106
+ const raw = cfg?.channels?.xg_cwork_im;
107
+ if (!raw)
108
+ throw new Error("[cwork_im] channels.xg_cwork_im config not found");
109
+ const accounts = raw.accounts;
110
+ const accountMap = accounts && typeof accounts === "object" && !Array.isArray(accounts)
111
+ ? accounts
112
+ : undefined;
113
+ const defaults = accountMap?.default ? { ...accountMap.default } : undefined;
114
+ if (accountId && accountId !== "default" && accountMap) {
115
+ const sub = accountMap[accountId];
116
+ if (sub)
117
+ return normalizeRobotKey({ ...raw, ...(defaults ?? {}), ...sub });
118
+ }
119
+ if (accountMap && !raw.appKey && !raw.robotKey) {
120
+ const firstKey = Object.keys(accountMap).find((k) => k !== "default");
121
+ const first = firstKey ? accountMap[firstKey] : undefined;
122
+ if (first)
123
+ return normalizeRobotKey({ ...raw, ...(defaults ?? {}), ...first });
124
+ }
125
+ return normalizeRobotKey(raw);
126
+ }
127
+ /**
128
+ * 合并 `channels.xg_cwork_im` 顶层、`accounts.default`、以及 `accounts.<accountId>` 后的 `systemPrompt`,
129
+ * 写入 OpenClaw 入站 `GroupSystemPrompt`。
130
+ */
131
+ export function resolveXgImGroupSystemPrompt(cfg, accountId) {
132
+ try {
133
+ const raw = cfg?.channels?.xg_cwork_im;
134
+ if (!raw)
135
+ return undefined;
136
+ const accountMap = raw.accounts && typeof raw.accounts === "object" && !Array.isArray(raw.accounts)
137
+ ? raw.accounts
138
+ : undefined;
139
+ const defaults = accountMap?.default ? { ...accountMap.default } : {};
140
+ const base = { ...raw, ...defaults };
141
+ let merged = base;
142
+ if (accountId && accountId !== "default" && accountMap?.[accountId]) {
143
+ merged = { ...base, ...accountMap[accountId] };
144
+ }
145
+ const t = merged.systemPrompt?.trim();
146
+ return t || undefined;
147
+ }
148
+ catch {
149
+ return undefined;
150
+ }
151
+ }
152
+ export function isConfigured(cfg) {
153
+ try {
154
+ const c = getXgImConfig(cfg);
155
+ return Boolean(c?.appKey && c?.baseUrl);
156
+ }
157
+ catch {
158
+ return false;
159
+ }
160
+ }
161
+ function isSenderInXgImAllowFrom(config, senderId) {
162
+ const allow = config.allowFrom ?? [];
163
+ if (allow.length === 0)
164
+ return true;
165
+ const id = senderId?.trim();
166
+ if (!id)
167
+ return false;
168
+ return allow.includes(id);
169
+ }
170
+ export function resolveInboundCommandAuthorized(rt, cfg, p) {
171
+ const r = rt;
172
+ const fn = r?.channel?.commands?.resolveControlCommandGate;
173
+ if (typeof fn === "function") {
174
+ try {
175
+ const out = fn({
176
+ cfg,
177
+ channel: "xg_cwork_im",
178
+ accountId: p.accountId,
179
+ senderId: p.senderId ?? "",
180
+ chatType: "group",
181
+ });
182
+ if (typeof out === "boolean")
183
+ return out;
184
+ if (out && typeof out === "object" && "commandAuthorized" in out) {
185
+ return Boolean(out.commandAuthorized);
186
+ }
187
+ }
188
+ catch {
189
+ /* 回退到 allowFrom */
190
+ }
191
+ }
192
+ return isSenderInXgImAllowFrom(p.config, p.senderId);
193
+ }
194
+ //# sourceMappingURL=channel-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-config.js","sourceRoot":"","sources":["../../src/channel-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Channel 统一日志适配器:兼容 ChannelLogSink 与带 `log` 方法的 sink。
3
+ */
4
+ export interface Logger {
5
+ info: (msg: string) => void;
6
+ warn: (msg: string) => void;
7
+ error: (msg: string) => void;
8
+ debug?: (msg: string) => void;
9
+ }
10
+ /** ChannelLogSink 的 info/warn/error 方法接受单个 string */
11
+ export declare function toLogger(sink: {
12
+ info?: (msg: string) => void;
13
+ warn?: (msg: string) => void;
14
+ error?: (msg: string) => void;
15
+ debug?: (msg: string) => void;
16
+ } | undefined): Logger;
17
+ //# sourceMappingURL=channel-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-log.d.ts","sourceRoot":"","sources":["../../src/channel-log.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,MAAM;IACnB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,qDAAqD;AACrD,wBAAgB,QAAQ,CACpB,IAAI,EACE;IAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAC5H,SAAS,GAChB,MAAM,CAyCR"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Channel 统一日志适配器:兼容 ChannelLogSink 与带 `log` 方法的 sink。
3
+ */
4
+ /** ChannelLogSink 的 info/warn/error 方法接受单个 string */
5
+ export function toLogger(sink) {
6
+ const prefix = "[xg_cwork_im]";
7
+ const s = sink;
8
+ const emitInfo = (msg) => {
9
+ if (typeof s?.info === "function") {
10
+ s.info(msg);
11
+ return;
12
+ }
13
+ if (typeof s?.log === "function") {
14
+ s.log(msg);
15
+ return;
16
+ }
17
+ console.log(`${prefix} ${msg}`);
18
+ };
19
+ const emitWarn = (msg) => {
20
+ if (typeof sink?.warn === "function") {
21
+ sink.warn(msg);
22
+ return;
23
+ }
24
+ console.warn(`${prefix} ${msg}`);
25
+ };
26
+ const emitError = (msg) => {
27
+ if (typeof sink?.error === "function") {
28
+ sink.error(msg);
29
+ return;
30
+ }
31
+ console.error(`${prefix} ${msg}`);
32
+ };
33
+ return {
34
+ info: emitInfo,
35
+ warn: emitWarn,
36
+ error: emitError,
37
+ debug: (msg) => {
38
+ if (typeof sink?.debug === "function")
39
+ sink.debug(msg);
40
+ else
41
+ emitInfo(msg);
42
+ },
43
+ };
44
+ }
45
+ //# sourceMappingURL=channel-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-log.js","sourceRoot":"","sources":["../../src/channel-log.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,qDAAqD;AACrD,MAAM,UAAU,QAAQ,CACpB,IAEe;IAEf,MAAM,MAAM,GAAG,eAAe,CAAC;IAC/B,MAAM,CAAC,GAAG,IAAiF,CAAC;IAE5F,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAQ,EAAE;QACnC,IAAI,OAAO,CAAC,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,OAAO;QACX,CAAC;QACD,IAAI,OAAO,CAAC,EAAE,GAAG,KAAK,UAAU,EAAE,CAAC;YAC/B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACX,OAAO;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAQ,EAAE;QACnC,IAAI,OAAO,IAAI,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,OAAO;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,GAAW,EAAQ,EAAE;QACpC,IAAI,OAAO,IAAI,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO;QACX,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,OAAO;QACH,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,IAAI,OAAO,IAAI,EAAE,KAAK,KAAK,UAAU;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;gBAClD,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1,13 +1,10 @@
1
1
  /**
2
- * XG-IM Channel Plugin — 核心定义
2
+ * XG-IM Channel Plugin — 组装层
3
3
  *
4
- * 遵循 OpenClaw Channel Plugin 架构(参考 openclaw-channel-dingtalk):
5
- * - config : 账户解析
6
- * - outbound : AI 回复发送
7
- * - gateway : 启动 WebSocket 长连接,接收 robotMention 消息后通过
8
- * PluginRuntime 路由给 OpenClaw 处理
4
+ * 配置与解析见 channel-config.ts;入站正文见 inbound-display.ts;
5
+ * 排队调度见 gateway-session-queue.ts;@ 后派发见 dispatch-mentioned-reply.ts。
9
6
  */
10
- import { type PluginRuntime, type XgImChannelPlugin } from "./types.js";
7
+ import type { PluginRuntime, XgImChannelPlugin } from "./types.js";
11
8
  export declare function setXgImRuntime(rt: PluginRuntime): void;
12
9
  export declare const xgCworkImChannelPlugin: XgImChannelPlugin;
13
10
  //# sourceMappingURL=channel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,OAAO,EAKH,KAAK,aAAa,EAKlB,KAAK,iBAAiB,EAEzB,MAAM,YAAY,CAAC;AAMpB,wBAAgB,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAEtD;AA4oBD,eAAO,MAAM,sBAAsB,EAAE,iBAsepC,CAAC"}
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8BH,OAAO,KAAK,EAER,aAAa,EAGb,iBAAiB,EAEpB,MAAM,YAAY,CAAC;AAMpB,wBAAgB,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAEtD;AASD,eAAO,MAAM,sBAAsB,EAAE,iBAmapC,CAAC"}