@tencent-weixin/openclaw-weixin 2.4.4 → 2.4.6
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.
- package/CHANGELOG.md +34 -0
- package/CHANGELOG.zh_CN.md +34 -0
- package/dist/src/api/api.js +35 -1
- package/dist/src/api/api.js.map +1 -1
- package/dist/src/api/session-guard.js +3 -3
- package/dist/src/api/session-guard.js.map +1 -1
- package/dist/src/api/types.js.map +1 -1
- package/dist/src/cdn/cdn-upload.js +3 -2
- package/dist/src/cdn/cdn-upload.js.map +1 -1
- package/dist/src/cdn/upload.js +12 -3
- package/dist/src/cdn/upload.js.map +1 -1
- package/dist/src/monitor/monitor.js +8 -8
- package/dist/src/monitor/monitor.js.map +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +6 -5
- package/src/api/api.ts +50 -1
- package/src/api/session-guard.ts +3 -3
- package/src/api/types.ts +2 -1
- package/src/cdn/cdn-upload.ts +8 -2
- package/src/cdn/upload.ts +14 -3
- package/src/monitor/monitor.ts +9 -11
- package/dist/src/media/voice-outbound.js +0 -274
- package/dist/src/media/voice-outbound.js.map +0 -1
- package/dist/src/messaging/abort-fence.js +0 -70
- package/dist/src/messaging/abort-fence.js.map +0 -1
- package/dist/src/messaging/batch-session.js +0 -271
- package/dist/src/messaging/batch-session.js.map +0 -1
- package/dist/src/messaging/buttons.js +0 -117
- package/dist/src/messaging/buttons.js.map +0 -1
- package/dist/src/messaging/lane-key.js +0 -66
- package/dist/src/messaging/lane-key.js.map +0 -1
- package/dist/src/messaging/merged-record.js +0 -149
- package/dist/src/messaging/merged-record.js.map +0 -1
- package/dist/src/messaging/model-buttons.js +0 -182
- package/dist/src/messaging/model-buttons.js.map +0 -1
- package/dist/src/messaging/model-callback-handler.js +0 -133
- package/dist/src/messaging/model-callback-handler.js.map +0 -1
- package/dist/src/messaging/run-context.js +0 -9
- package/dist/src/messaging/run-context.js.map +0 -1
- package/dist/src/messaging/run-report-session.js +0 -123
- package/dist/src/messaging/run-report-session.js.map +0 -1
- package/dist/src/monitor/lane-scheduler.js +0 -46
- package/dist/src/monitor/lane-scheduler.js.map +0 -1
- package/dist/src/runtime.js +0 -54
- package/dist/src/runtime.js.map +0 -1
- package/dist/src/streaming/batch-session.js +0 -271
- package/dist/src/streaming/batch-session.js.map +0 -1
- package/dist/src/streaming/stream-piece.js +0 -54
- package/dist/src/streaming/stream-piece.js.map +0 -1
- package/dist/src/streaming/stream-pipeline.js +0 -431
- package/dist/src/streaming/stream-pipeline.js.map +0 -1
- package/dist/src/streaming/stream-session.js +0 -260
- package/dist/src/streaming/stream-session.js.map +0 -1
- package/dist/src/streaming/stream.js +0 -239
- package/dist/src/streaming/stream.js.map +0 -1
- package/dist/src/util/markdown-fences.js +0 -54
- package/dist/src/util/markdown-fences.js.map +0 -1
|
@@ -1,182 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-buttons.js","sourceRoot":"","sources":["../../../src/messaging/model-buttons.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,133 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-callback-handler.js","sourceRoot":"","sources":["../../../src/messaging/model-callback-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
-
const turnContextStorage = new AsyncLocalStorage();
|
|
3
|
-
export function withWeixinTurnContext(ctx, run) {
|
|
4
|
-
return turnContextStorage.run(ctx, run);
|
|
5
|
-
}
|
|
6
|
-
export function getCurrentWeixinTurnContext() {
|
|
7
|
-
return turnContextStorage.getStore();
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=run-context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-context.js","sourceRoot":"","sources":["../../../src/messaging/run-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMrD,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,EAAqB,CAAC;AAEtE,MAAM,UAAU,qBAAqB,CACnC,GAAsB,EACtB,GAAqB;IAErB,OAAO,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO,kBAAkB,CAAC,QAAQ,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { MessageItemType } from "../api/types.js";
|
|
2
|
-
import { logger } from "../util/logger.js";
|
|
3
|
-
import { sendMessageItemWeixin } from "./send.js";
|
|
4
|
-
function normalizeToolStatus(status) {
|
|
5
|
-
if (status === "completed")
|
|
6
|
-
return "completed";
|
|
7
|
-
if (status === "failed")
|
|
8
|
-
return "failed";
|
|
9
|
-
if (status === "blocked")
|
|
10
|
-
return "blocked";
|
|
11
|
-
return "unknown";
|
|
12
|
-
}
|
|
13
|
-
export class RunReportSession {
|
|
14
|
-
runId;
|
|
15
|
-
to;
|
|
16
|
-
accountId;
|
|
17
|
-
opts;
|
|
18
|
-
thinkingText = "";
|
|
19
|
-
thinkingSent = false;
|
|
20
|
-
finalized = false;
|
|
21
|
-
sendChain = Promise.resolve();
|
|
22
|
-
constructor(deps) {
|
|
23
|
-
this.runId = deps.runId;
|
|
24
|
-
this.to = deps.to;
|
|
25
|
-
this.accountId = deps.accountId;
|
|
26
|
-
this.opts = { ...deps.opts, runId: deps.runId };
|
|
27
|
-
}
|
|
28
|
-
get replyOptions() {
|
|
29
|
-
return {
|
|
30
|
-
runId: this.runId,
|
|
31
|
-
suppressDefaultToolProgressMessages: true,
|
|
32
|
-
onReasoningStream: (payload) => this.handleReasoningStream(payload),
|
|
33
|
-
onReasoningEnd: () => this.handleReasoningEnd(),
|
|
34
|
-
onItemEvent: (payload) => this.handleToolItemEvent(payload),
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
enqueueSend(item, label) {
|
|
38
|
-
if (this.finalized)
|
|
39
|
-
return;
|
|
40
|
-
this.sendChain = this.sendChain
|
|
41
|
-
.then(async () => {
|
|
42
|
-
await sendMessageItemWeixin({
|
|
43
|
-
to: this.to,
|
|
44
|
-
item,
|
|
45
|
-
opts: this.opts,
|
|
46
|
-
label,
|
|
47
|
-
});
|
|
48
|
-
})
|
|
49
|
-
.catch((err) => {
|
|
50
|
-
logger.warn(`${label}: failed to=${this.to} accountId=${this.accountId} runId=${this.runId} err=${String(err)}`);
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
handleReasoningStream(payload) {
|
|
54
|
-
if (this.finalized)
|
|
55
|
-
return;
|
|
56
|
-
const text = typeof payload.text === "string" ? payload.text : "";
|
|
57
|
-
if (text) {
|
|
58
|
-
this.thinkingText = text;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
handleReasoningEnd() {
|
|
62
|
-
this.sendThinkingIfNeeded();
|
|
63
|
-
}
|
|
64
|
-
sendThinkingIfNeeded() {
|
|
65
|
-
if (this.finalized || this.thinkingSent)
|
|
66
|
-
return;
|
|
67
|
-
const text = this.thinkingText.trim();
|
|
68
|
-
if (!text)
|
|
69
|
-
return;
|
|
70
|
-
this.thinkingSent = true;
|
|
71
|
-
this.enqueueSend({
|
|
72
|
-
type: MessageItemType.THINKING,
|
|
73
|
-
is_completed: true,
|
|
74
|
-
thinking_item: { text },
|
|
75
|
-
}, "sendThinkingReport");
|
|
76
|
-
}
|
|
77
|
-
handleToolItemEvent(payload) {
|
|
78
|
-
if (this.finalized)
|
|
79
|
-
return;
|
|
80
|
-
if (payload.kind !== "tool")
|
|
81
|
-
return;
|
|
82
|
-
if (payload.phase !== "start" && payload.phase !== "end")
|
|
83
|
-
return;
|
|
84
|
-
const now = Date.now();
|
|
85
|
-
const toolName = payload.name?.trim() || payload.title?.trim() || "tool";
|
|
86
|
-
const toolCallId = payload.itemId?.trim() || undefined;
|
|
87
|
-
if (payload.phase === "start") {
|
|
88
|
-
this.enqueueSend({
|
|
89
|
-
type: MessageItemType.TOOL_CALL_START,
|
|
90
|
-
create_time_ms: now,
|
|
91
|
-
is_completed: false,
|
|
92
|
-
tool_call_start_item: {
|
|
93
|
-
tool_name: toolName,
|
|
94
|
-
tool_call_id: toolCallId,
|
|
95
|
-
},
|
|
96
|
-
}, "sendToolCallStartReport");
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
this.enqueueSend({
|
|
100
|
-
type: MessageItemType.TOOL_CALL_RESULT,
|
|
101
|
-
create_time_ms: now,
|
|
102
|
-
is_completed: true,
|
|
103
|
-
tool_call_result_item: {
|
|
104
|
-
tool_name: toolName,
|
|
105
|
-
tool_call_id: toolCallId,
|
|
106
|
-
status: normalizeToolStatus(payload.status),
|
|
107
|
-
},
|
|
108
|
-
}, "sendToolCallResultReport");
|
|
109
|
-
}
|
|
110
|
-
async finalize() {
|
|
111
|
-
if (this.finalized)
|
|
112
|
-
return;
|
|
113
|
-
this.sendThinkingIfNeeded();
|
|
114
|
-
this.finalized = true;
|
|
115
|
-
try {
|
|
116
|
-
await this.sendChain;
|
|
117
|
-
}
|
|
118
|
-
catch (err) {
|
|
119
|
-
logger.warn(`RunReportSession.finalize: send drain failed runId=${this.runId} err=${String(err)}`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=run-report-session.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-report-session.js","sourceRoot":"","sources":["../../../src/messaging/run-report-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,46 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/src/runtime.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { logger } from "./util/logger.js";
|
|
2
|
-
let pluginRuntime = null;
|
|
3
|
-
/**
|
|
4
|
-
* Sets the global Weixin runtime (called from plugin register).
|
|
5
|
-
*/
|
|
6
|
-
export function setWeixinRuntime(next) {
|
|
7
|
-
pluginRuntime = next;
|
|
8
|
-
logger.info(`[runtime] setWeixinRuntime called, runtime set successfully`);
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Gets the global Weixin runtime (throws if not initialized).
|
|
12
|
-
*/
|
|
13
|
-
export function getWeixinRuntime() {
|
|
14
|
-
if (!pluginRuntime) {
|
|
15
|
-
throw new Error("Weixin runtime not initialized");
|
|
16
|
-
}
|
|
17
|
-
return pluginRuntime;
|
|
18
|
-
}
|
|
19
|
-
const WAIT_INTERVAL_MS = 100;
|
|
20
|
-
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
21
|
-
/**
|
|
22
|
-
* Waits for the Weixin runtime to be initialized (async polling).
|
|
23
|
-
*/
|
|
24
|
-
export async function waitForWeixinRuntime(timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
25
|
-
const start = Date.now();
|
|
26
|
-
while (!pluginRuntime) {
|
|
27
|
-
if (Date.now() - start > timeoutMs) {
|
|
28
|
-
throw new Error("Weixin runtime initialization timeout");
|
|
29
|
-
}
|
|
30
|
-
await new Promise((resolve) => setTimeout(resolve, WAIT_INTERVAL_MS));
|
|
31
|
-
}
|
|
32
|
-
return pluginRuntime;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Resolves `PluginRuntime["channel"]` for the long-poll monitor.
|
|
36
|
-
*
|
|
37
|
-
* Prefer the gateway-injected `channelRuntime` on `ChannelGatewayContext` when present (avoids
|
|
38
|
-
* races with the module-global from `register()`). Fall back to the global set by `setWeixinRuntime()`,
|
|
39
|
-
* then to a short wait for legacy hosts.
|
|
40
|
-
*/
|
|
41
|
-
export async function resolveWeixinChannelRuntime(params) {
|
|
42
|
-
if (params.channelRuntime) {
|
|
43
|
-
logger.debug("[runtime] channelRuntime from gateway context");
|
|
44
|
-
return params.channelRuntime;
|
|
45
|
-
}
|
|
46
|
-
if (pluginRuntime) {
|
|
47
|
-
logger.debug("[runtime] channelRuntime from register() global");
|
|
48
|
-
return pluginRuntime.channel;
|
|
49
|
-
}
|
|
50
|
-
logger.warn("[runtime] no channelRuntime on ctx and no global runtime yet; waiting for register()");
|
|
51
|
-
const pr = await waitForWeixinRuntime(params.waitTimeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
52
|
-
return pr.channel;
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=runtime.js.map
|
package/dist/src/runtime.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,IAAI,aAAa,GAAyB,IAAI,CAAC;AAI/C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IAClD,aAAa,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAS,GAAG,kBAAkB;IAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO,CAAC,aAAa,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,MAGjD;IACC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,cAAc,CAAC;IAC/B,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAChE,OAAO,aAAa,CAAC,OAAO,CAAC;IAC/B,CAAC;IACD,MAAM,CAAC,IAAI,CACT,sFAAsF,CACvF,CAAC;IACF,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,aAAa,IAAI,kBAAkB,CAAC,CAAC;IAClF,OAAO,EAAE,CAAC,OAAO,CAAC;AACpB,CAAC"}
|