@openclaw/mattermost 2026.6.11 → 2026.7.1-beta.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.
- package/dist/{accounts-DnAHfb5f.js → accounts-Bt60MyHp.js} +10 -12
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel-plugin-runtime-MXClEU4F.js → channel-plugin-runtime-CbFQSpwf.js} +2 -2
- package/dist/channel-plugin-runtime.js +1 -1
- package/dist/{channel.runtime-W-pjr9zL.js → channel.runtime-CnE1CD40.js} +23 -11
- package/dist/runtime-api.js +2 -2
- package/dist/slash-route-api.js +1 -1
- package/dist/{slash-state-I1qleAHM.js → slash-state-D1lza2ZZ.js} +13 -5
- package/npm-shrinkwrap.json +3 -3
- package/package.json +4 -4
|
@@ -6,11 +6,13 @@ import { createAccountListHelpers, hasConfiguredAccountValue } from "openclaw/pl
|
|
|
6
6
|
import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
|
|
7
7
|
import { resolveMergedAccountConfig } from "openclaw/plugin-sdk/account-resolution";
|
|
8
8
|
import { buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
9
|
-
import { readResponseTextLimited } from "openclaw/plugin-sdk/provider-http";
|
|
9
|
+
import { readProviderJsonResponse, readResponseTextLimited } from "openclaw/plugin-sdk/provider-http";
|
|
10
|
+
import { readResponseWithLimit } from "openclaw/plugin-sdk/response-limit-runtime";
|
|
10
11
|
import { sleep } from "openclaw/plugin-sdk/runtime-env";
|
|
11
12
|
import { z } from "zod";
|
|
12
13
|
//#region extensions/mattermost/src/mattermost/client.ts
|
|
13
14
|
const MATTERMOST_ERROR_BODY_LIMIT_BYTES = 8 * 1024;
|
|
15
|
+
const MATTERMOST_TEXT_RESPONSE_LIMIT_BYTES = 64 * 1024;
|
|
14
16
|
const NULL_BODY_STATUSES = new Set([
|
|
15
17
|
101,
|
|
16
18
|
204,
|
|
@@ -38,16 +40,12 @@ function buildMattermostApiUrl(baseUrl, path) {
|
|
|
38
40
|
if (!normalized) throw new Error("Mattermost baseUrl is required");
|
|
39
41
|
return `${normalized}/api/v4${path.startsWith("/") ? path : `/${path}`}`;
|
|
40
42
|
}
|
|
43
|
+
async function readMattermostSuccessText(res, path) {
|
|
44
|
+
const bytes = await readResponseWithLimit(res, MATTERMOST_TEXT_RESPONSE_LIMIT_BYTES, { onOverflow: ({ maxBytes }) => /* @__PURE__ */ new Error(`Mattermost API ${path}: text response exceeds ${maxBytes} bytes`) });
|
|
45
|
+
return new TextDecoder().decode(bytes);
|
|
46
|
+
}
|
|
41
47
|
async function readMattermostError(res) {
|
|
42
48
|
const contentType = res.headers.get("content-type") ?? "";
|
|
43
|
-
if (!res.body) {
|
|
44
|
-
if (contentType.includes("application/json")) {
|
|
45
|
-
const data = await res.json();
|
|
46
|
-
if (data?.message) return data.message;
|
|
47
|
-
return JSON.stringify(data);
|
|
48
|
-
}
|
|
49
|
-
return await res.text();
|
|
50
|
-
}
|
|
51
49
|
const text = await readResponseTextLimited(res, MATTERMOST_ERROR_BODY_LIMIT_BYTES);
|
|
52
50
|
if (contentType.includes("application/json")) try {
|
|
53
51
|
const data = JSON.parse(text);
|
|
@@ -130,8 +128,8 @@ function createMattermostClient(params) {
|
|
|
130
128
|
throw new Error(`Mattermost API ${res.status} ${res.statusText}: ${detail || "unknown error"}`);
|
|
131
129
|
}
|
|
132
130
|
if (res.status === 204) return;
|
|
133
|
-
if ((res.headers.get("content-type") ?? "").includes("application/json")) return await res
|
|
134
|
-
return await res
|
|
131
|
+
if ((res.headers.get("content-type") ?? "").includes("application/json")) return await readProviderJsonResponse(res, `Mattermost API ${path}`);
|
|
132
|
+
return await readMattermostSuccessText(res, path);
|
|
135
133
|
};
|
|
136
134
|
return {
|
|
137
135
|
baseUrl,
|
|
@@ -357,7 +355,7 @@ async function uploadMattermostFile(client, params) {
|
|
|
357
355
|
const detail = await readMattermostError(res);
|
|
358
356
|
throw new Error(`Mattermost API ${res.status} ${res.statusText}: ${detail || "unknown error"}`);
|
|
359
357
|
}
|
|
360
|
-
const info = (await res
|
|
358
|
+
const info = (await readProviderJsonResponse(res, "Mattermost API /files")).file_infos?.[0];
|
|
361
359
|
if (!info?.id) throw new Error("Mattermost file upload failed");
|
|
362
360
|
return info;
|
|
363
361
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as describeMattermostAccount, c as mattermostMeta, i as MattermostChannelConfigSchema, n as mattermostSetupWizard, o as isMattermostConfigured, r as mattermostSetupAdapter, s as mattermostConfigAdapter, t as mattermostPlugin } from "./channel-plugin-runtime-
|
|
1
|
+
import { a as describeMattermostAccount, c as mattermostMeta, i as MattermostChannelConfigSchema, n as mattermostSetupWizard, o as isMattermostConfigured, r as mattermostSetupAdapter, s as mattermostConfigAdapter, t as mattermostPlugin } from "./channel-plugin-runtime-CbFQSpwf.js";
|
|
2
2
|
import { t as resolveMattermostGatewayAuthBypassPaths } from "./gateway-auth-bypass-BHgOAkk8.js";
|
|
3
3
|
//#region extensions/mattermost/src/channel.setup.ts
|
|
4
4
|
const mattermostSetupPlugin = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as hasConfiguredSecretInput, S as buildSecretInputSchema, g as normalizeMattermostBaseUrl, i as resolveMattermostReplyToMode, n as resolveDefaultMattermostAccountId, r as resolveMattermostAccount, t as listMattermostAccountIds } from "./accounts-
|
|
1
|
+
import { C as hasConfiguredSecretInput, S as buildSecretInputSchema, g as normalizeMattermostBaseUrl, i as resolveMattermostReplyToMode, n as resolveDefaultMattermostAccountId, r as resolveMattermostAccount, t as listMattermostAccountIds } from "./accounts-Bt60MyHp.js";
|
|
2
2
|
import { t as resolveMattermostGatewayAuthBypassPaths } from "./gateway-auth-bypass-BHgOAkk8.js";
|
|
3
3
|
import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-ttH0DCuq.js";
|
|
4
4
|
import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-Cx0LUNXy.js";
|
|
@@ -565,7 +565,7 @@ const mattermostSetupWizard = {
|
|
|
565
565
|
};
|
|
566
566
|
//#endregion
|
|
567
567
|
//#region extensions/mattermost/src/channel.ts
|
|
568
|
-
const loadMattermostChannelRuntime = createLazyRuntimeModule(() => import("./channel.runtime-
|
|
568
|
+
const loadMattermostChannelRuntime = createLazyRuntimeModule(() => import("./channel.runtime-CnE1CD40.js"));
|
|
569
569
|
function buildMattermostPresentationButtons(presentation) {
|
|
570
570
|
return presentation.blocks.filter((block) => block.type === "buttons").map((block) => block.buttons.flatMap((button) => {
|
|
571
571
|
if (button.action) return [];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as mattermostPlugin } from "./channel-plugin-runtime-
|
|
1
|
+
import { t as mattermostPlugin } from "./channel-plugin-runtime-CbFQSpwf.js";
|
|
2
2
|
export { mattermostPlugin };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { C as resolveChannelMediaMaxBytes, E as warnMissingProviderGroupPolicyFallbackOnce, S as resolveAllowlistProviderRuntimeGroupPolicy, T as resolveDefaultGroupPolicy, _ as logInboundDrop, c as buildAgentMediaPayload, d as createChannelMessageReplyPipeline, f as createChannelPairingController, h as listSkillCommandsForAgents, i as normalizeMattermostAllowEntry, l as buildModelsProviderData, n as formatMattermostDirectMessageDropLog, o as resolveMattermostMonitorInboundAccess, s as DEFAULT_GROUP_HISTORY_LIMIT, t as authorizeMattermostCommandInvocation, u as createChannelHistoryWindow, v as logTypingFailure, x as registerPluginHttpRoute, y as parseTcpPort } from "./monitor-auth-BiDuyvOc.js";
|
|
2
|
-
import { _ as readMattermostError, a as MattermostPostSchema, b as updateMattermostPost, c as createMattermostPost, f as fetchMattermostMe, g as normalizeMattermostBaseUrl, h as fetchMattermostUserTeams, i as resolveMattermostReplyToMode, l as deleteMattermostPost, o as createMattermostClient, p as fetchMattermostUser, r as resolveMattermostAccount, t as listMattermostAccountIds, u as fetchMattermostChannel, y as sendMattermostTyping } from "./accounts-
|
|
2
|
+
import { _ as readMattermostError, a as MattermostPostSchema, b as updateMattermostPost, c as createMattermostPost, f as fetchMattermostMe, g as normalizeMattermostBaseUrl, h as fetchMattermostUserTeams, i as resolveMattermostReplyToMode, l as deleteMattermostPost, o as createMattermostClient, p as fetchMattermostUser, r as resolveMattermostAccount, t as listMattermostAccountIds, u as fetchMattermostChannel, y as sendMattermostTyping } from "./accounts-Bt60MyHp.js";
|
|
3
3
|
import { n as getOptionalMattermostRuntime, t as getMattermostRuntime } from "./runtime-CNB4YGqJ.js";
|
|
4
|
-
import { C as registerSlashCommands, S as isSlashCommandsEnabled, T as resolveSlashCommandConfig, _ as renderMattermostModelsPickerView, a as sendMessageMattermost, b as DEFAULT_COMMAND_SPECS, c as computeInteractionCallbackUrl, d as setInteractionCallbackUrl, f as setInteractionSecret, g as parseMattermostModelPickerContext, h as buildMattermostAllowedModelRefs, l as createMattermostInteractionHandler, m as deliverMattermostReplyPayload, n as deactivateSlashCommands, o as resolveMattermostOpaqueTarget, p as createMattermostReplyDeliveryBarrier, r as getSlashCommandState, s as buildButtonProps, t as activateSlashCommands, u as resolveInteractionCallbackPath, v as renderMattermostProviderPickerView, w as resolveCallbackUrl, x as cleanupSlashCommands, y as resolveMattermostModelPickerCurrentModel } from "./slash-state-
|
|
4
|
+
import { C as registerSlashCommands, S as isSlashCommandsEnabled, T as resolveSlashCommandConfig, _ as renderMattermostModelsPickerView, a as sendMessageMattermost, b as DEFAULT_COMMAND_SPECS, c as computeInteractionCallbackUrl, d as setInteractionCallbackUrl, f as setInteractionSecret, g as parseMattermostModelPickerContext, h as buildMattermostAllowedModelRefs, l as createMattermostInteractionHandler, m as deliverMattermostReplyPayload, n as deactivateSlashCommands, o as resolveMattermostOpaqueTarget, p as createMattermostReplyDeliveryBarrier, r as getSlashCommandState, s as buildButtonProps, t as activateSlashCommands, u as resolveInteractionCallbackPath, v as renderMattermostProviderPickerView, w as resolveCallbackUrl, x as cleanupSlashCommands, y as resolveMattermostModelPickerCurrentModel } from "./slash-state-D1lza2ZZ.js";
|
|
5
5
|
import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeStringEntries, normalizeTrimmedStringList, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
6
|
import { formatInboundFromLabel } from "openclaw/plugin-sdk/channel-inbound";
|
|
7
7
|
import { buildChannelProgressDraftLineForEntry, createChannelProgressDraftCompositor, createFinalizableDraftLifecycle, defineFinalizableLivePreviewAdapter, deliverWithFinalizableLivePreviewAdapter, resolveChannelStreamingPreviewToolProgress } from "openclaw/plugin-sdk/channel-outbound";
|
|
@@ -10,12 +10,14 @@ import { asDateTimestampMs, resolveExpiresAtMsFromDurationMs, resolveTimerTimeou
|
|
|
10
10
|
import { safeParseJsonWithSchema, safeParseWithSchema } from "openclaw/plugin-sdk/extension-shared";
|
|
11
11
|
import { buildTtsSupplementMediaPayload, countOutboundMedia, getReplyPayloadTtsSupplement, isReasoningReplyPayload } from "openclaw/plugin-sdk/reply-payload";
|
|
12
12
|
import { fetchWithSsrFGuard, isPrivateNetworkOptInEnabled, ssrfPolicyFromPrivateNetworkOptIn } from "openclaw/plugin-sdk/ssrf-runtime";
|
|
13
|
+
import { readProviderJsonResponse } from "openclaw/plugin-sdk/provider-http";
|
|
13
14
|
import { z } from "zod";
|
|
14
15
|
import { resolveInboundLastRouteSessionKey, resolveThreadSessionKeys } from "openclaw/plugin-sdk/routing";
|
|
15
16
|
import { resolvePinnedMainDmOwnerFromAllowlist } from "openclaw/plugin-sdk/security-runtime";
|
|
16
17
|
import { randomUUID } from "node:crypto";
|
|
17
18
|
import { isLoopbackHost } from "openclaw/plugin-sdk/gateway-runtime";
|
|
18
19
|
import { createClaimableDedupe } from "openclaw/plugin-sdk/persistent-dedupe";
|
|
20
|
+
import { sliceUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
19
21
|
import { captureWsEvent, createDebugProxyWebSocketAgent, resolveDebugProxySettings } from "openclaw/plugin-sdk/proxy-capture";
|
|
20
22
|
import WebSocket from "ws";
|
|
21
23
|
import { resolveGlobalDedupeCache } from "openclaw/plugin-sdk/dedupe-runtime";
|
|
@@ -103,7 +105,7 @@ async function listMattermostDirectoryGroups(params) {
|
|
|
103
105
|
* user list (unlike channels where membership varies). Uses the first team
|
|
104
106
|
* returned — multi-team setups will only see members from that team.
|
|
105
107
|
*
|
|
106
|
-
*
|
|
108
|
+
* Uses paginated member listing with per_page=200, the Mattermost API maximum.
|
|
107
109
|
*/
|
|
108
110
|
async function listMattermostDirectoryPeers(params) {
|
|
109
111
|
const clients = buildClients(params);
|
|
@@ -124,12 +126,22 @@ async function listMattermostDirectoryPeers(params) {
|
|
|
124
126
|
})
|
|
125
127
|
});
|
|
126
128
|
else {
|
|
127
|
-
const
|
|
129
|
+
const pageSize = 200;
|
|
130
|
+
const userIds = [];
|
|
131
|
+
for (let page = 0;; page += 1) {
|
|
132
|
+
const pageMembers = await client.request(`/teams/${teamId}/members?page=${page}&per_page=${pageSize}`);
|
|
133
|
+
for (const member of pageMembers) if (member.user_id !== me.id) userIds.push(member.user_id);
|
|
134
|
+
if (pageMembers.length < pageSize) break;
|
|
135
|
+
}
|
|
128
136
|
if (!userIds.length) return [];
|
|
129
|
-
users =
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
137
|
+
users = [];
|
|
138
|
+
for (let index = 0; index < userIds.length; index += pageSize) {
|
|
139
|
+
const userIdBatch = userIds.slice(index, index + pageSize);
|
|
140
|
+
users.push(...await client.request("/users/ids", {
|
|
141
|
+
method: "POST",
|
|
142
|
+
body: JSON.stringify(userIdBatch)
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
133
145
|
}
|
|
134
146
|
const entries = users.filter((u) => u.id !== me.id).map((u) => ({
|
|
135
147
|
kind: "user",
|
|
@@ -151,7 +163,7 @@ function normalizeMattermostDraftText(text, maxChars) {
|
|
|
151
163
|
const trimmed = text.trim();
|
|
152
164
|
if (!trimmed) return "";
|
|
153
165
|
if (trimmed.length <= maxChars) return trimmed;
|
|
154
|
-
return `${trimmed
|
|
166
|
+
return `${sliceUtf16Safe(trimmed, 0, Math.max(0, maxChars - 3)).trimEnd()}...`;
|
|
155
167
|
}
|
|
156
168
|
function createMattermostDraftStream(params) {
|
|
157
169
|
const maxChars = Math.min(params.maxChars ?? MATTERMOST_STREAM_MAX_CHARS, MATTERMOST_STREAM_MAX_CHARS);
|
|
@@ -1776,7 +1788,7 @@ async function monitorMattermostProvider(opts = {}) {
|
|
|
1776
1788
|
cfg,
|
|
1777
1789
|
route: modelSessionRoute,
|
|
1778
1790
|
data,
|
|
1779
|
-
|
|
1791
|
+
readConsistency: "latest"
|
|
1780
1792
|
});
|
|
1781
1793
|
const view = renderMattermostModelsPickerView({
|
|
1782
1794
|
ownerUserId: pickerState.ownerUserId,
|
|
@@ -2563,7 +2575,7 @@ async function probeMattermost(baseUrl, botToken, timeoutMs = 2500, allowPrivate
|
|
|
2563
2575
|
elapsedMs
|
|
2564
2576
|
};
|
|
2565
2577
|
}
|
|
2566
|
-
const bot = await res
|
|
2578
|
+
const bot = await readProviderJsonResponse(res, "Mattermost probe /users/me");
|
|
2567
2579
|
return {
|
|
2568
2580
|
ok: true,
|
|
2569
2581
|
status: res.status,
|
package/dist/runtime-api.js
CHANGED
|
@@ -18,7 +18,7 @@ import { DEFAULT_ACCOUNT_ID, buildChannelConfigSchema, createDedupeCache, isTrus
|
|
|
18
18
|
import { chunkTextForOutbound } from "openclaw/plugin-sdk/text-chunking";
|
|
19
19
|
import { applyAccountNameToChannelSection, applySetupAccountConfigPatch, migrateBaseNameToDefaultAccount } from "openclaw/plugin-sdk/setup";
|
|
20
20
|
import { buildComputedAccountStatusSnapshot } from "openclaw/plugin-sdk/channel-status";
|
|
21
|
-
import {
|
|
21
|
+
import { resolveStorePath } from "openclaw/plugin-sdk/session-store-runtime";
|
|
22
22
|
import { normalizeAccountId, resolveThreadSessionKeys } from "openclaw/plugin-sdk/routing";
|
|
23
23
|
import { normalizeProviderId } from "openclaw/plugin-sdk/provider-model-shared";
|
|
24
|
-
export { DEFAULT_ACCOUNT_ID, DEFAULT_GROUP_HISTORY_LIMIT, GROUP_POLICY_BLOCKED_LABEL, applyAccountNameToChannelSection, applySetupAccountConfigPatch, buildAgentMediaPayload, buildChannelConfigSchema, buildComputedAccountStatusSnapshot, buildModelsProviderData, buildPendingHistoryContextFromMap, chunkTextForOutbound, clearHistoryEntriesIfEnabled, createAccountStatusSink, createChannelHistoryWindow, createChannelMessageReplyPipeline, createChannelPairingController, createDedupeCache, formatInboundFromLabel, getAgentScopedMediaLocalRoots, isDangerousNameMatchingEnabled, isRequestBodyLimitError, isTrustedProxyAddress, listSkillCommandsForAgents, loadOutboundMediaFromUrl,
|
|
24
|
+
export { DEFAULT_ACCOUNT_ID, DEFAULT_GROUP_HISTORY_LIMIT, GROUP_POLICY_BLOCKED_LABEL, applyAccountNameToChannelSection, applySetupAccountConfigPatch, buildAgentMediaPayload, buildChannelConfigSchema, buildComputedAccountStatusSnapshot, buildModelsProviderData, buildPendingHistoryContextFromMap, chunkTextForOutbound, clearHistoryEntriesIfEnabled, createAccountStatusSink, createChannelHistoryWindow, createChannelMessageReplyPipeline, createChannelPairingController, createDedupeCache, formatInboundFromLabel, getAgentScopedMediaLocalRoots, isDangerousNameMatchingEnabled, isRequestBodyLimitError, isTrustedProxyAddress, listSkillCommandsForAgents, loadOutboundMediaFromUrl, logInboundDrop, logTypingFailure, migrateBaseNameToDefaultAccount, normalizeAccountId, normalizeProviderId, parseStrictPositiveInteger, rawDataToString, readRequestBodyWithLimit, recordPendingHistoryEntryIfEnabled, registerPluginHttpRoute, resolveAllowlistMatchSimple, resolveAllowlistProviderRuntimeGroupPolicy, resolveChannelMediaMaxBytes, resolveClientIp, resolveControlCommandGate, resolveDefaultGroupPolicy, resolveStorePath, resolveStoredModelOverride, resolveThreadSessionKeys, setMattermostRuntime, warnMissingProviderGroupPolicyFallbackOnce };
|
package/dist/slash-route-api.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as registerSlashCommandRoute } from "./slash-state-
|
|
1
|
+
import { i as registerSlashCommandRoute } from "./slash-state-D1lza2ZZ.js";
|
|
2
2
|
export { registerSlashCommandRoute };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as normalizeMattermostAllowList, b as readRequestBodyWithLimit, d as createChannelMessageReplyPipeline, g as loadOutboundMediaFromUrl, l as buildModelsProviderData, m as isTrustedProxyAddress, p as isRequestBodyLimitError, t as authorizeMattermostCommandInvocation, v as logTypingFailure, w as resolveClientIp } from "./monitor-auth-BiDuyvOc.js";
|
|
2
|
-
import { b as updateMattermostPost, c as createMattermostPost, d as fetchMattermostChannelByName, f as fetchMattermostMe, g as normalizeMattermostBaseUrl, h as fetchMattermostUserTeams, m as fetchMattermostUserByUsername, o as createMattermostClient, p as fetchMattermostUser, r as resolveMattermostAccount, s as createMattermostDirectChannelWithRetry, u as fetchMattermostChannel, v as resolveMattermostReplyDeliveryBarrierTimeoutMs, x as uploadMattermostFile, y as sendMattermostTyping } from "./accounts-
|
|
2
|
+
import { b as updateMattermostPost, c as createMattermostPost, d as fetchMattermostChannelByName, f as fetchMattermostMe, g as normalizeMattermostBaseUrl, h as fetchMattermostUserTeams, m as fetchMattermostUserByUsername, o as createMattermostClient, p as fetchMattermostUser, r as resolveMattermostAccount, s as createMattermostDirectChannelWithRetry, u as fetchMattermostChannel, v as resolveMattermostReplyDeliveryBarrierTimeoutMs, x as uploadMattermostFile, y as sendMattermostTyping } from "./accounts-Bt60MyHp.js";
|
|
3
3
|
import { t as getMattermostRuntime } from "./runtime-CNB4YGqJ.js";
|
|
4
4
|
import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeStringifiedOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
5
5
|
import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-outbound";
|
|
@@ -9,7 +9,7 @@ import { asDateTimestampMs, parseStrictInteger, resolveExpiresAtMsFromDurationMs
|
|
|
9
9
|
import { deliverTextOrMediaReply, isReasoningReplyPayload, resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload";
|
|
10
10
|
import { isPrivateNetworkOptInEnabled } from "openclaw/plugin-sdk/ssrf-runtime";
|
|
11
11
|
import { convertMarkdownTables } from "openclaw/plugin-sdk/text-chunking";
|
|
12
|
-
import {
|
|
12
|
+
import { getSessionEntry, resolveStorePath } from "openclaw/plugin-sdk/session-store-runtime";
|
|
13
13
|
import { normalizeProviderId } from "openclaw/plugin-sdk/provider-model-shared";
|
|
14
14
|
import { Readable } from "node:stream";
|
|
15
15
|
import { safeEqualSecret } from "openclaw/plugin-sdk/security-runtime";
|
|
@@ -481,12 +481,20 @@ function resolveMattermostModelPickerCurrentModel(params) {
|
|
|
481
481
|
const fallback = `${params.data.resolvedDefault.provider}/${params.data.resolvedDefault.model}`;
|
|
482
482
|
try {
|
|
483
483
|
const storePath = resolveStorePath(params.cfg.session?.store, { agentId: params.route.agentId });
|
|
484
|
-
const
|
|
485
|
-
|
|
484
|
+
const sessionEntry = getSessionEntry({
|
|
485
|
+
storePath,
|
|
486
|
+
sessionKey: params.route.sessionKey,
|
|
487
|
+
...params.readConsistency === "latest" ? { readConsistency: "latest" } : {}
|
|
488
|
+
});
|
|
486
489
|
const override = resolveStoredModelOverride({
|
|
487
490
|
sessionEntry,
|
|
488
|
-
|
|
491
|
+
loadSessionEntry: (sessionKey) => getSessionEntry({
|
|
492
|
+
storePath,
|
|
493
|
+
sessionKey,
|
|
494
|
+
...params.readConsistency === "latest" ? { readConsistency: "latest" } : {}
|
|
495
|
+
}),
|
|
489
496
|
sessionKey: params.route.sessionKey,
|
|
497
|
+
parentSessionKey: sessionEntry?.parentSessionKey,
|
|
490
498
|
defaultProvider: params.data.resolvedDefault.provider
|
|
491
499
|
});
|
|
492
500
|
if (!override?.model) return fallback;
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/mattermost",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.7.1-beta.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@openclaw/mattermost",
|
|
9
|
-
"version": "2026.
|
|
9
|
+
"version": "2026.7.1-beta.2",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"ws": "8.21.0",
|
|
12
12
|
"zod": "4.4.3"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"openclaw": ">=2026.
|
|
15
|
+
"openclaw": ">=2026.7.1-beta.2"
|
|
16
16
|
},
|
|
17
17
|
"peerDependenciesMeta": {
|
|
18
18
|
"openclaw": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/mattermost",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.7.1-beta.2",
|
|
4
4
|
"description": "OpenClaw Mattermost channel plugin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"zod": "4.4.3"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"openclaw": ">=2026.
|
|
15
|
+
"openclaw": ">=2026.7.1-beta.2"
|
|
16
16
|
},
|
|
17
17
|
"peerDependenciesMeta": {
|
|
18
18
|
"openclaw": {
|
|
@@ -41,10 +41,10 @@
|
|
|
41
41
|
"allowInvalidConfigRecovery": true
|
|
42
42
|
},
|
|
43
43
|
"compat": {
|
|
44
|
-
"pluginApi": ">=2026.
|
|
44
|
+
"pluginApi": ">=2026.7.1-beta.2"
|
|
45
45
|
},
|
|
46
46
|
"build": {
|
|
47
|
-
"openclawVersion": "2026.
|
|
47
|
+
"openclawVersion": "2026.7.1-beta.2",
|
|
48
48
|
"bundledDist": false
|
|
49
49
|
},
|
|
50
50
|
"release": {
|