@tencent-weixin/openclaw-weixin 2.4.1 → 2.4.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.
Files changed (46) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/CHANGELOG.zh_CN.md +45 -0
  3. package/dist/index.js +0 -4
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/api/api.js +41 -7
  6. package/dist/src/api/api.js.map +1 -1
  7. package/dist/src/auth/accounts.js.map +1 -1
  8. package/dist/src/auth/login-qr.js +1 -0
  9. package/dist/src/auth/login-qr.js.map +1 -1
  10. package/dist/src/channel.js +19 -0
  11. package/dist/src/channel.js.map +1 -1
  12. package/dist/src/media/voice-outbound.js +177 -0
  13. package/dist/src/media/voice-outbound.js.map +1 -0
  14. package/dist/src/messaging/abort-fence.js +70 -0
  15. package/dist/src/messaging/abort-fence.js.map +1 -0
  16. package/dist/src/messaging/buttons.js +117 -0
  17. package/dist/src/messaging/buttons.js.map +1 -0
  18. package/dist/src/messaging/lane-key.js +66 -0
  19. package/dist/src/messaging/lane-key.js.map +1 -0
  20. package/dist/src/messaging/merged-record.js +149 -0
  21. package/dist/src/messaging/merged-record.js.map +1 -0
  22. package/dist/src/messaging/model-buttons.js +182 -0
  23. package/dist/src/messaging/model-buttons.js.map +1 -0
  24. package/dist/src/messaging/model-callback-handler.js +133 -0
  25. package/dist/src/messaging/model-callback-handler.js.map +1 -0
  26. package/dist/src/monitor/lane-scheduler.js +46 -0
  27. package/dist/src/monitor/lane-scheduler.js.map +1 -0
  28. package/dist/src/monitor/monitor.js +5 -12
  29. package/dist/src/monitor/monitor.js.map +1 -1
  30. package/dist/src/streaming/stream-pipeline.js +431 -0
  31. package/dist/src/streaming/stream-pipeline.js.map +1 -0
  32. package/dist/src/streaming/stream-session.js +260 -0
  33. package/dist/src/streaming/stream-session.js.map +1 -0
  34. package/dist/src/streaming/stream.js +239 -0
  35. package/dist/src/streaming/stream.js.map +1 -0
  36. package/dist/src/util/markdown-fences.js +54 -0
  37. package/dist/src/util/markdown-fences.js.map +1 -0
  38. package/index.ts +0 -5
  39. package/openclaw.plugin.json +1 -1
  40. package/package.json +1 -1
  41. package/src/api/api.ts +42 -8
  42. package/src/auth/accounts.ts +0 -1
  43. package/src/auth/login-qr.ts +8 -0
  44. package/src/channel.ts +22 -1
  45. package/src/monitor/monitor.ts +11 -10
  46. package/src/runtime.ts +0 -70
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Model selection buttons for Weixin.
3
+ *
4
+ * Reuses the same mdl_* callback_data format as Telegram so that core
5
+ * helpers (buildModelsProviderData, formatModelsAvailableHeader) can be
6
+ * shared directly.
7
+ *
8
+ * Callback data patterns:
9
+ * - mdl_prov - show providers list
10
+ * - mdl_list_{prov}_{pg} - show models for provider (page N, 1-indexed)
11
+ * - mdl_sel_{provider/id} - select model
12
+ * - mdl_back - back to providers list
13
+ */
14
+ const MODELS_PAGE_SIZE = 8;
15
+ // ---------------------------------------------------------------------------
16
+ // Callback data parsing
17
+ // ---------------------------------------------------------------------------
18
+ export function parseModelCallbackData(data) {
19
+ const trimmed = data.trim();
20
+ if (!trimmed.startsWith("mdl_"))
21
+ return null;
22
+ if (trimmed === "mdl_prov" || trimmed === "mdl_back") {
23
+ return { type: trimmed === "mdl_prov" ? "providers" : "back" };
24
+ }
25
+ const listMatch = trimmed.match(/^mdl_list_([a-z0-9_-]+)_(\d+)$/i);
26
+ if (listMatch) {
27
+ const [, provider, pageStr] = listMatch;
28
+ const page = Number.parseInt(pageStr ?? "1", 10);
29
+ if (provider && Number.isFinite(page) && page >= 1) {
30
+ return { type: "list", provider, page };
31
+ }
32
+ }
33
+ const selMatch = trimmed.match(/^mdl_sel_(.+)$/);
34
+ if (selMatch) {
35
+ const modelRef = selMatch[1];
36
+ if (modelRef) {
37
+ const slashIndex = modelRef.indexOf("/");
38
+ if (slashIndex > 0 && slashIndex < modelRef.length - 1) {
39
+ return {
40
+ type: "select",
41
+ provider: modelRef.slice(0, slashIndex),
42
+ model: modelRef.slice(slashIndex + 1),
43
+ };
44
+ }
45
+ return { type: "select", model: modelRef };
46
+ }
47
+ }
48
+ return null;
49
+ }
50
+ // ---------------------------------------------------------------------------
51
+ // Keyboard builders
52
+ // ---------------------------------------------------------------------------
53
+ export function buildProviderKeyboard(providers) {
54
+ if (providers.length === 0)
55
+ return [];
56
+ const rows = [];
57
+ let currentRow = [];
58
+ for (const provider of providers) {
59
+ currentRow.push({
60
+ text: `${provider.id} (${provider.count})`,
61
+ callback_data: `mdl_list_${provider.id}_1`,
62
+ });
63
+ if (currentRow.length === 2) {
64
+ rows.push(currentRow);
65
+ currentRow = [];
66
+ }
67
+ }
68
+ if (currentRow.length > 0)
69
+ rows.push(currentRow);
70
+ return rows;
71
+ }
72
+ function truncateModelId(modelId, maxLen) {
73
+ if (modelId.length <= maxLen)
74
+ return modelId;
75
+ return `…${modelId.slice(-(maxLen - 1))}`;
76
+ }
77
+ export function buildModelsKeyboard(params) {
78
+ const { provider, models, currentModel, currentPage, totalPages, modelNames } = params;
79
+ const pageSize = params.pageSize ?? MODELS_PAGE_SIZE;
80
+ if (models.length === 0) {
81
+ return [[{ text: "<< Back", callback_data: "mdl_back" }]];
82
+ }
83
+ const rows = [];
84
+ const startIndex = (currentPage - 1) * pageSize;
85
+ const endIndex = Math.min(startIndex + pageSize, models.length);
86
+ const pageModels = models.slice(startIndex, endIndex);
87
+ for (const model of pageModels) {
88
+ const callbackData = `mdl_sel_${provider}/${model}`;
89
+ const isCurrentModel = currentModel
90
+ ? currentModel.includes("/")
91
+ ? currentModel === `${provider}/${model}`
92
+ : currentModel === model
93
+ : false;
94
+ const displayLabel = modelNames?.get(`${provider}/${model}`) ?? model;
95
+ const displayText = truncateModelId(displayLabel, 38);
96
+ const text = isCurrentModel ? `${displayText} ✓` : displayText;
97
+ rows.push([{ text, callback_data: callbackData }]);
98
+ }
99
+ if (totalPages > 1) {
100
+ const paginationRow = [];
101
+ if (currentPage > 1) {
102
+ paginationRow.push({
103
+ text: "◀ Prev",
104
+ callback_data: `mdl_list_${provider}_${currentPage - 1}`,
105
+ });
106
+ }
107
+ paginationRow.push({
108
+ text: `${currentPage}/${totalPages}`,
109
+ callback_data: `mdl_list_${provider}_${currentPage}`,
110
+ });
111
+ if (currentPage < totalPages) {
112
+ paginationRow.push({
113
+ text: "Next ▶",
114
+ callback_data: `mdl_list_${provider}_${currentPage + 1}`,
115
+ });
116
+ }
117
+ rows.push(paginationRow);
118
+ }
119
+ rows.push([{ text: "<< Back", callback_data: "mdl_back" }]);
120
+ return rows;
121
+ }
122
+ export function buildBrowseProvidersButton() {
123
+ return [[{ text: "Browse providers", callback_data: "mdl_prov" }]];
124
+ }
125
+ export function getModelsPageSize() {
126
+ return MODELS_PAGE_SIZE;
127
+ }
128
+ export function calculateTotalPages(totalModels, pageSize) {
129
+ const size = pageSize ?? MODELS_PAGE_SIZE;
130
+ return size > 0 ? Math.ceil(totalModels / size) : 1;
131
+ }
132
+ // ---------------------------------------------------------------------------
133
+ // channelData builders (used by plugin.commands adapter)
134
+ // ---------------------------------------------------------------------------
135
+ export function buildWeixinModelsProviderChannelData(params) {
136
+ if (params.providers.length === 0)
137
+ return null;
138
+ return { "openclaw-weixin": { buttons: buildProviderKeyboard(params.providers) } };
139
+ }
140
+ export function buildWeixinModelsListChannelData(params) {
141
+ return { "openclaw-weixin": { buttons: buildModelsKeyboard(params) } };
142
+ }
143
+ export function buildWeixinModelBrowseChannelData() {
144
+ return { "openclaw-weixin": { buttons: buildBrowseProvidersButton() } };
145
+ }
146
+ export function buildWeixinCommandsListChannelData(params) {
147
+ if (params.totalPages <= 1)
148
+ return null;
149
+ const buttons = [];
150
+ const suffix = params.agentId ? `:${params.agentId}` : "";
151
+ if (params.currentPage > 1) {
152
+ buttons.push({
153
+ text: "◀ Prev",
154
+ callback_data: `commands_page_${params.currentPage - 1}${suffix}`,
155
+ });
156
+ }
157
+ buttons.push({
158
+ text: `${params.currentPage}/${params.totalPages}`,
159
+ callback_data: `commands_page_noop${suffix}`,
160
+ });
161
+ if (params.currentPage < params.totalPages) {
162
+ buttons.push({
163
+ text: "Next ▶",
164
+ callback_data: `commands_page_${params.currentPage + 1}${suffix}`,
165
+ });
166
+ }
167
+ return { "openclaw-weixin": { buttons: [buttons] } };
168
+ }
169
+ // ---------------------------------------------------------------------------
170
+ // Model selection resolution (when provider is ambiguous)
171
+ // ---------------------------------------------------------------------------
172
+ export function resolveModelSelection(params) {
173
+ if (params.callback.provider) {
174
+ return { kind: "resolved", provider: params.callback.provider, model: params.callback.model };
175
+ }
176
+ const matchingProviders = params.providers.filter((id) => params.byProvider.get(id)?.has(params.callback.model));
177
+ if (matchingProviders.length === 1) {
178
+ return { kind: "resolved", provider: matchingProviders[0], model: params.callback.model };
179
+ }
180
+ return { kind: "ambiguous", model: params.callback.model, matchingProviders };
181
+ }
182
+ //# sourceMappingURL=model-buttons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-buttons.js","sourceRoot":"","sources":["../../../src/messaging/model-buttons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAcH,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7C,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QACrD,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACnE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACjD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvD,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;oBACvC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;iBACtC,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,UAAU,qBAAqB,CAAC,SAAyB;IAC7D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,IAAI,UAAU,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,KAAK,GAAG;YAC1C,aAAa,EAAE,YAAY,QAAQ,CAAC,EAAE,IAAI;SAC3C,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtB,UAAU,GAAG,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,MAAc;IACtD,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,OAAO,CAAC;IAC7C,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAQnC;IACC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IACvF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IAErD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEtD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,WAAW,QAAQ,IAAI,KAAK,EAAE,CAAC;QACpD,MAAM,cAAc,GAAG,YAAY;YACjC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC1B,CAAC,CAAC,YAAY,KAAK,GAAG,QAAQ,IAAI,KAAK,EAAE;gBACzC,CAAC,CAAC,YAAY,KAAK,KAAK;YAC1B,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,YAAY,GAAG,UAAU,EAAE,GAAG,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC;QACtE,MAAM,WAAW,GAAG,eAAe,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,aAAa,GAAc,EAAE,CAAC;QACpC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,QAAQ;gBACd,aAAa,EAAE,YAAY,QAAQ,IAAI,WAAW,GAAG,CAAC,EAAE;aACzD,CAAC,CAAC;QACL,CAAC;QACD,aAAa,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,GAAG,WAAW,IAAI,UAAU,EAAE;YACpC,aAAa,EAAE,YAAY,QAAQ,IAAI,WAAW,EAAE;SACrD,CAAC,CAAC;QACH,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,QAAQ;gBACd,aAAa,EAAE,YAAY,QAAQ,IAAI,WAAW,GAAG,CAAC,EAAE;aACzD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,QAAiB;IACxE,MAAM,IAAI,GAAG,QAAQ,IAAI,gBAAgB,CAAC;IAC1C,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,8EAA8E;AAC9E,yDAAyD;AACzD,8EAA8E;AAE9E,MAAM,UAAU,oCAAoC,CAAC,MAEpD;IACC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,MAQhD;IACC,OAAO,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,iCAAiC;IAC/C,OAAO,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,MAIlD;IACC,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,iBAAiB,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG,MAAM,EAAE;SAClE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE;QAClD,aAAa,EAAE,qBAAqB,MAAM,EAAE;KAC7C,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,iBAAiB,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG,MAAM,EAAE;SAClE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;AACvD,CAAC;AAED,8EAA8E;AAC9E,0DAA0D;AAC1D,8EAA8E;AAE9E,MAAM,UAAU,qBAAqB,CAAC,MAIrC;IACC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAChG,CAAC;IACD,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CACvD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtD,CAAC;IACF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAC;AAChF,CAAC"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Handle mdl_* button callbacks for /model interactive flow.
3
+ *
4
+ * When a user taps a model-selection button, the BUTTON_CALLBACK arrives
5
+ * as an inbound message with call_back_data = "mdl_...". We intercept
6
+ * it here, build the next response (provider list / model list / confirmation),
7
+ * and send a NEW message (no editing).
8
+ */
9
+ import { buildModelsProviderData, formatModelsAvailableHeader } from "openclaw/plugin-sdk/models-provider-runtime";
10
+ import { resolveAgentDir, resolveDefaultModelForAgent } from "openclaw/plugin-sdk/agent-runtime";
11
+ import { applyModelOverrideToSessionEntry, updateSessionStore, resolveStorePath, } from "openclaw/plugin-sdk/config-runtime";
12
+ import { logger } from "../util/logger.js";
13
+ import { sendMessageWeixin } from "./send.js";
14
+ import { getContextToken } from "./inbound.js";
15
+ import { parseModelCallbackData, buildProviderKeyboard, buildModelsKeyboard, calculateTotalPages, getModelsPageSize, resolveModelSelection, } from "./model-buttons.js";
16
+ /**
17
+ * Try to handle an inbound message as a model callback.
18
+ * Returns true if the callback was handled, false otherwise.
19
+ */
20
+ export async function handleModelCallback(callbackData, deps) {
21
+ const parsed = parseModelCallbackData(callbackData);
22
+ if (!parsed)
23
+ return false;
24
+ const contextToken = getContextToken(deps.accountId, deps.to);
25
+ const sendOpts = { baseUrl: deps.baseUrl, token: deps.token, contextToken };
26
+ const modelData = await buildModelsProviderData(deps.cfg, deps.agentId);
27
+ const { byProvider, providers } = modelData;
28
+ const sendWithButtons = async (text, buttons) => {
29
+ await sendMessageWeixin({
30
+ to: deps.to,
31
+ text,
32
+ opts: sendOpts,
33
+ buttons: buttons.length > 0 ? buttons : undefined,
34
+ });
35
+ };
36
+ if (parsed.type === "providers" || parsed.type === "back") {
37
+ if (providers.length === 0) {
38
+ await sendWithButtons("No providers available.", []);
39
+ return true;
40
+ }
41
+ const providerInfos = providers.map((p) => ({
42
+ id: p,
43
+ count: byProvider.get(p)?.size ?? 0,
44
+ }));
45
+ await sendWithButtons("Select a provider:", buildProviderKeyboard(providerInfos));
46
+ return true;
47
+ }
48
+ if (parsed.type === "list") {
49
+ const { provider, page } = parsed;
50
+ const modelSet = byProvider.get(provider);
51
+ if (!modelSet || modelSet.size === 0) {
52
+ const providerInfos = providers.map((p) => ({
53
+ id: p,
54
+ count: byProvider.get(p)?.size ?? 0,
55
+ }));
56
+ await sendWithButtons(`Unknown provider: ${provider}\n\nSelect a provider:`, buildProviderKeyboard(providerInfos));
57
+ return true;
58
+ }
59
+ const models = [...modelSet].toSorted();
60
+ const pageSize = getModelsPageSize();
61
+ const totalPages = calculateTotalPages(models.length, pageSize);
62
+ const safePage = Math.max(1, Math.min(page, totalPages));
63
+ const currentModel = undefined; // TODO: resolve from session if needed
64
+ const buttons = buildModelsKeyboard({
65
+ provider,
66
+ models,
67
+ currentModel,
68
+ currentPage: safePage,
69
+ totalPages,
70
+ pageSize,
71
+ modelNames: modelData.modelNames,
72
+ });
73
+ const text = formatModelsAvailableHeader({
74
+ provider,
75
+ total: models.length,
76
+ cfg: deps.cfg,
77
+ agentDir: deps.agentId ? resolveAgentDir(deps.cfg, deps.agentId) : undefined,
78
+ });
79
+ await sendWithButtons(text, buttons);
80
+ return true;
81
+ }
82
+ if (parsed.type === "select") {
83
+ const selection = resolveModelSelection({
84
+ callback: parsed,
85
+ providers,
86
+ byProvider,
87
+ });
88
+ if (selection.kind !== "resolved") {
89
+ const providerInfos = providers.map((p) => ({
90
+ id: p,
91
+ count: byProvider.get(p)?.size ?? 0,
92
+ }));
93
+ await sendWithButtons(`Could not resolve model "${selection.model}".\n\nSelect a provider:`, buildProviderKeyboard(providerInfos));
94
+ return true;
95
+ }
96
+ const modelSet = byProvider.get(selection.provider);
97
+ if (!modelSet?.has(selection.model)) {
98
+ await sendWithButtons(`❌ Model "${selection.provider}/${selection.model}" is not allowed.`, []);
99
+ return true;
100
+ }
101
+ try {
102
+ const storePath = resolveStorePath(deps.cfg.session?.store, { agentId: deps.agentId }) ?? "";
103
+ const resolvedDefault = resolveDefaultModelForAgent({ cfg: deps.cfg, agentId: deps.agentId });
104
+ const isDefaultSelection = selection.provider === resolvedDefault.provider &&
105
+ selection.model === resolvedDefault.model;
106
+ await updateSessionStore(storePath, (store) => {
107
+ if (!deps.sessionKey)
108
+ return;
109
+ const entry = store[deps.sessionKey] ?? {};
110
+ store[deps.sessionKey] = entry;
111
+ applyModelOverrideToSessionEntry({
112
+ entry,
113
+ selection: {
114
+ provider: selection.provider,
115
+ model: selection.model,
116
+ isDefault: isDefaultSelection,
117
+ },
118
+ });
119
+ });
120
+ const actionText = isDefaultSelection
121
+ ? "reset to default"
122
+ : `changed to ${selection.provider}/${selection.model}`;
123
+ await sendWithButtons(`✅ Model ${actionText}\n\nThis model will be used for your next message.`, []);
124
+ }
125
+ catch (err) {
126
+ logger.error(`handleModelCallback: failed to set model: ${String(err)}`);
127
+ await sendWithButtons(`❌ Failed to set model: ${String(err)}`, []);
128
+ }
129
+ return true;
130
+ }
131
+ return false;
132
+ }
133
+ //# sourceMappingURL=model-callback-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-callback-handler.js","sourceRoot":"","sources":["../../../src/messaging/model-callback-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ export function createLaneScheduler() {
2
+ /**
3
+ * laneKey -> tail promise of the lane's in-flight chain. The chain is built
4
+ * with internal `try/catch` so failures of earlier tasks do not poison later
5
+ * tasks on the same lane. Entries are pruned when the lane goes idle.
6
+ */
7
+ const lanes = new Map();
8
+ function enqueue(key, task) {
9
+ const previousTail = lanes.get(key) ?? Promise.resolve();
10
+ let resolveResult;
11
+ let rejectResult;
12
+ const result = new Promise((resolve, reject) => {
13
+ resolveResult = resolve;
14
+ rejectResult = reject;
15
+ });
16
+ const nextTail = previousTail.then(async () => {
17
+ try {
18
+ const value = await task();
19
+ resolveResult(value);
20
+ }
21
+ catch (err) {
22
+ rejectResult(err);
23
+ }
24
+ });
25
+ lanes.set(key, nextTail);
26
+ void nextTail.finally(() => {
27
+ // Only prune if no one queued behind us in the meantime; otherwise the
28
+ // newer enqueue() owns the slot.
29
+ if (lanes.get(key) === nextTail) {
30
+ lanes.delete(key);
31
+ }
32
+ });
33
+ return result;
34
+ }
35
+ function size() {
36
+ return lanes.size;
37
+ }
38
+ async function drain() {
39
+ while (lanes.size > 0) {
40
+ const tails = [...lanes.values()];
41
+ await Promise.allSettled(tails);
42
+ }
43
+ }
44
+ return { enqueue, size, drain };
45
+ }
46
+ //# sourceMappingURL=lane-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lane-scheduler.js","sourceRoot":"","sources":["../../../src/monitor/lane-scheduler.ts"],"names":[],"mappings":"AA8BA,MAAM,UAAU,mBAAmB;IACjC;;;;OAIG;IACH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE/C,SAAS,OAAO,CAAI,GAAW,EAAE,IAAsB;QACrD,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACzD,IAAI,aAAmD,CAAC;QACxD,IAAI,YAAyC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChD,aAAa,GAAG,OAAO,CAAC;YACxB,YAAY,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC5C,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;gBAC3B,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,YAAY,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzB,KAAK,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE;YACzB,uEAAuE;YACvE,iCAAiC;YACjC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,IAAI;QACX,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,UAAU,KAAK;QAClB,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAClC,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC"}
@@ -2,7 +2,6 @@ import { getUpdates } from "../api/api.js";
2
2
  import { WeixinConfigManager } from "../api/config-cache.js";
3
3
  import { SESSION_EXPIRED_ERRCODE, pauseSession, getRemainingPauseMs } from "../api/session-guard.js";
4
4
  import { processOneMessage } from "../messaging/process-message.js";
5
- import { waitForWeixinRuntime } from "../runtime.js";
6
5
  import { getSyncBufFilePath, loadGetUpdatesBuf, saveGetUpdatesBuf } from "../storage/sync-buf.js";
7
6
  import { logger } from "../util/logger.js";
8
7
  import { redactBody } from "../util/redact.js";
@@ -15,20 +14,14 @@ const RETRY_DELAY_MS = 2_000;
15
14
  * Runs until abort.
16
15
  */
17
16
  export async function monitorWeixinProvider(opts) {
18
- const { baseUrl, cdnBaseUrl, token, accountId, config, abortSignal, longPollTimeoutMs, setStatus, } = opts;
17
+ const { baseUrl, cdnBaseUrl, token, accountId, config, channelRuntime, abortSignal, longPollTimeoutMs, setStatus, } = opts;
19
18
  const log = opts.runtime?.log ?? (() => { });
20
19
  const errLog = opts.runtime?.error ?? ((m) => log(m));
21
20
  const aLog = logger.withAccount(accountId);
22
- aLog.info(`waiting for Weixin runtime...`);
23
- let channelRuntime;
24
- try {
25
- const pluginRuntime = await waitForWeixinRuntime();
26
- channelRuntime = pluginRuntime.channel;
27
- aLog.info(`Weixin runtime acquired, channelRuntime type: ${typeof channelRuntime}`);
28
- }
29
- catch (err) {
30
- aLog.error(`waitForWeixinRuntime() failed: ${String(err)}`);
31
- throw err;
21
+ if (!channelRuntime) {
22
+ const msg = "channelRuntime missing on monitor opts; gateway must inject ChannelGatewayContext.channelRuntime";
23
+ aLog.error(msg);
24
+ throw new Error(msg);
32
25
  }
33
26
  log(`weixin monitor started (${baseUrl}, account=${accountId})`);
34
27
  aLog.info(`Monitor started: baseUrl=${baseUrl} timeoutMs=${longPollTimeoutMs ?? DEFAULT_LONG_POLL_TIMEOUT_MS}`);
@@ -1 +1 @@
1
- {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../../src/monitor/monitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../../src/monitor/monitor.ts"],"names":[],"mappings":"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"}