@openclaw/msteams 2026.11.1 → 2026.11.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/.setup/{adapter.runtime-BMvpm7sS.cjs → adapter.runtime-B-6Q3nMI.cjs} +5 -3
- package/dist/.setup/{approval-card-Bo8kHYbj.cjs → approval-card-DWPDItvq.cjs} +4 -2
- package/dist/.setup/{approval-handler.runtime-BS3avHFu.cjs → approval-handler.runtime-CJtz8aNI.cjs} +6 -5
- package/dist/.setup/{bot-framework-service-url-CgVuKiIR.cjs → bot-framework-service-url-B3FWn2SV.cjs} +4 -2
- package/dist/.setup/{channel-CdCSk3Rg.cjs → channel-DMWQSTtQ.cjs} +75 -38
- package/dist/.setup/{channel.runtime--ZjTYgkY.cjs → channel.runtime-CthqKb5j.cjs} +26 -17
- package/dist/.setup/{channel.setup-nSTtK77J.cjs → channel.setup-BN3uhq3r.cjs} +17 -11
- package/dist/.setup/{config-schema-Bm15lF-j.cjs → config-schema-CkKdphSp.cjs} +8 -5
- package/dist/.setup/{conversation-store-state-NJU9osd-.cjs → conversation-store-state-B-4g4uq5.cjs} +40 -23
- package/dist/.setup/{delegated-state-CbMd3rIh.cjs → delegated-state-Bv5cWuec.cjs} +6 -4
- package/dist/.setup/{monitor-BxLDs5fk.cjs → monitor-CNa939Lg.cjs} +101 -49
- package/dist/.setup/{oauth-B-Y5pNM4.cjs → oauth-BBUQCwmq.cjs} +5 -3
- package/dist/.setup/{reaction-types-BaL1EVBS.cjs → reaction-types-CwP5RVQB.cjs} +5 -3
- package/dist/.setup/{resolve-allowlist-CqNzS9bZ.cjs → resolve-allowlist-gI34MnpE.cjs} +34 -19
- package/dist/.setup/{rolldown-runtime-CiKaZLfC.cjs → rolldown-runtime-BloeesfJ.cjs} +2 -1
- package/dist/.setup/{runtime-CbKazLGv.cjs → runtime-gZTAuFux.cjs} +2 -1
- package/dist/.setup/{secret-contract-api-5aH1Fl_c.cjs → secret-contract-api-YY3v6MP8.cjs} +1 -1
- package/dist/.setup/{secret-contract-api-BOzdWSn9.cjs → secret-contract-api-wAyY5UHv.cjs} +2 -1
- package/dist/.setup/{send-BXjI3ufq.cjs → send-D48Qmug3.cjs} +11 -9
- package/dist/.setup/{setup-plugin-api-lPpin6Gg.cjs → setup-plugin-api-B-NYBLkF.cjs} +1 -1
- package/dist/.setup/{thread-session-DZMoCsSR.cjs → thread-session-BWVCoYza.cjs} +5 -3
- package/dist/.setup/{token-config-DTZ00Ibq.cjs → token-config-bEpua_Q7.cjs} +2 -1
- package/dist/api.cjs +2 -2
- package/dist/channel-config-api.cjs +1 -1
- package/dist/channel-plugin-api.cjs +1 -1
- package/dist/configured-state.cjs +2 -1
- package/dist/directory-contract-api.cjs +2 -1
- package/dist/doctor-backup-resources.cjs +3 -2
- package/dist/doctor-contract-api.cjs +15 -9
- package/dist/index.cjs +2 -1
- package/dist/qa-runner-api.cjs +5 -3
- package/dist/runtime-api.cjs +1 -1
- package/dist/secret-contract-api.cjs +1 -1
- package/dist/setup-entry.cjs +4 -3
- package/dist/setup-plugin-api.cjs +1 -1
- package/package.json +4 -4
- package/dist/.source-module-urls/7e43ee3ae4faab430a47269c8217f8d99ec60ecd85233f40e81d03efeb543068.json +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const require_resolve_allowlist = require("./resolve-allowlist-
|
|
1
|
+
const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
|
|
2
2
|
let openclaw_plugin_sdk_provider_auth = require("openclaw/plugin-sdk/provider-auth");
|
|
3
3
|
let openclaw_plugin_sdk_provider_auth_runtime = require("openclaw/plugin-sdk/provider-auth-runtime");
|
|
4
|
-
|
|
4
|
+
//#region extensions/msteams/src/oauth.flow.ts
|
|
5
5
|
function buildMSTeamsAuthUrl(params) {
|
|
6
6
|
const scopes = params.scopes ?? require_resolve_allowlist.MSTEAMS_DEFAULT_DELEGATED_SCOPES;
|
|
7
7
|
return `${require_resolve_allowlist.buildMSTeamsAuthEndpoint(params.tenantId)}?${new URLSearchParams({
|
|
@@ -15,7 +15,8 @@ function buildMSTeamsAuthUrl(params) {
|
|
|
15
15
|
prompt: "consent"
|
|
16
16
|
}).toString()}`;
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region extensions/msteams/src/oauth.ts
|
|
19
20
|
async function loginMSTeamsDelegated(ctx, params) {
|
|
20
21
|
await ctx.note([
|
|
21
22
|
"You are running in a remote/VPS environment.",
|
|
@@ -50,4 +51,5 @@ async function loginMSTeamsDelegated(ctx, params) {
|
|
|
50
51
|
verifier
|
|
51
52
|
});
|
|
52
53
|
}
|
|
54
|
+
//#endregion
|
|
53
55
|
exports.loginMSTeamsDelegated = loginMSTeamsDelegated;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const require_resolve_allowlist = require("./resolve-allowlist-
|
|
2
|
-
|
|
1
|
+
const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
|
|
2
|
+
//#region extensions/msteams/src/graph-thread.ts
|
|
3
3
|
/** Keep inbound thread enrichment bounded while still reaching recent replies. */
|
|
4
4
|
const MAX_REPLY_PAGES = 50;
|
|
5
5
|
function compareThreadMessagesChronologically(a, b) {
|
|
@@ -88,7 +88,8 @@ function buildThreadContext(messages, currentMessageId) {
|
|
|
88
88
|
}
|
|
89
89
|
return context;
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
//#endregion
|
|
92
|
+
//#region extensions/msteams/src/reaction-types.ts
|
|
92
93
|
const TEAMS_REACTION_EMOJI = {
|
|
93
94
|
like: "👍",
|
|
94
95
|
heart: "❤️",
|
|
@@ -107,6 +108,7 @@ function resolveMSTeamsReactionEmoji(raw) {
|
|
|
107
108
|
if (!normalized) throw new Error(`Reaction type is required. Common types: ${TEAMS_REACTION_TYPES.join(", ")}`);
|
|
108
109
|
return getMSTeamsReactionEmoji(normalized) ?? normalized;
|
|
109
110
|
}
|
|
111
|
+
//#endregion
|
|
110
112
|
Object.defineProperty(exports, "buildThreadContext", {
|
|
111
113
|
enumerable: true,
|
|
112
114
|
get: function() {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const require_bot_framework_service_url = require("./bot-framework-service-url-
|
|
2
|
-
const require_token_config = require("./token-config-
|
|
3
|
-
const require_runtime = require("./runtime-
|
|
1
|
+
const require_bot_framework_service_url = require("./bot-framework-service-url-B3FWn2SV.cjs");
|
|
2
|
+
const require_token_config = require("./token-config-bEpua_Q7.cjs");
|
|
3
|
+
const require_runtime = require("./runtime-gZTAuFux.cjs");
|
|
4
4
|
require("../runtime-api.cjs");
|
|
5
|
-
const require_delegated_state = require("./delegated-state-
|
|
5
|
+
const require_delegated_state = require("./delegated-state-Bv5cWuec.cjs");
|
|
6
6
|
let openclaw_plugin_sdk_lazy_runtime = require("openclaw/plugin-sdk/lazy-runtime");
|
|
7
7
|
let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
|
|
8
8
|
let openclaw_plugin_sdk_account_helpers = require("openclaw/plugin-sdk/account-helpers");
|
|
@@ -22,7 +22,7 @@ let openclaw_plugin_sdk_secret_file = require("openclaw/plugin-sdk/secret-file")
|
|
|
22
22
|
let openclaw_plugin_sdk_error_runtime = require("openclaw/plugin-sdk/error-runtime");
|
|
23
23
|
let node_module = require("node:module");
|
|
24
24
|
let openclaw_plugin_sdk_html_entity_runtime = require("openclaw/plugin-sdk/html-entity-runtime");
|
|
25
|
-
|
|
25
|
+
//#region extensions/msteams/src/accounts.ts
|
|
26
26
|
const { listAccountIds, resolveDefaultAccountId } = (0, openclaw_plugin_sdk_account_helpers.createAccountListHelpers)("msteams", {
|
|
27
27
|
normalizeAccountId: openclaw_plugin_sdk_account_id.normalizeAccountId,
|
|
28
28
|
hasImplicitDefaultAccount: (cfg) => require_token_config.hasConfiguredMSTeamsCredentials(cfg.channels?.msteams)
|
|
@@ -169,7 +169,8 @@ function inspectMSTeamsAccount(params) {
|
|
|
169
169
|
path: account.config.webhook?.path ?? "/api/messages"
|
|
170
170
|
};
|
|
171
171
|
}
|
|
172
|
-
|
|
172
|
+
//#endregion
|
|
173
|
+
//#region extensions/msteams/src/request-timeout.ts
|
|
173
174
|
const MSTEAMS_REQUEST_TIMEOUT_MS = 3e4;
|
|
174
175
|
const MSTEAMS_SHAREPOINT_UPLOAD_BASE_TIMEOUT_MS = 3e5;
|
|
175
176
|
const MSTEAMS_SHAREPOINT_UPLOAD_MIN_BYTES_PER_SECOND = 262144;
|
|
@@ -219,7 +220,8 @@ async function withMSTeamsAbortableRequestTimeout(params) {
|
|
|
219
220
|
throw error;
|
|
220
221
|
}
|
|
221
222
|
}
|
|
222
|
-
|
|
223
|
+
//#endregion
|
|
224
|
+
//#region extensions/msteams/src/attachments/shared.ts
|
|
223
225
|
const IMAGE_EXT_RE = /\.(avif|bmp|gif|heic|heif|jpe?g|png|tiff?|webp)$/i;
|
|
224
226
|
/**
|
|
225
227
|
* Values of `attr` on each `<tag ...>` in document order, matching the captures of
|
|
@@ -501,7 +503,8 @@ async function safeFetchWithPolicy(params) {
|
|
|
501
503
|
});
|
|
502
504
|
return (0, openclaw_plugin_sdk_fetch_runtime.responseWithRelease)(guarded.response, guarded.release);
|
|
503
505
|
}
|
|
504
|
-
|
|
506
|
+
//#endregion
|
|
507
|
+
//#region extensions/msteams/src/cloud.ts
|
|
505
508
|
const DEFAULT_MSTEAMS_CLOUD = "Public";
|
|
506
509
|
const PUBLIC_MSTEAMS_SERVICE_HOST = "smba.trafficmanager.net";
|
|
507
510
|
const CHINA_BOT_FRAMEWORK_SERVICE_HOST = "botframework.azure.cn";
|
|
@@ -547,7 +550,8 @@ function validateMSTeamsProactiveServiceUrlBoundary(params) {
|
|
|
547
550
|
if (isChinaBotFrameworkServiceHost(stored.host)) throw new Error(`msteams proactive send blocked for ${params.conversationId}: stored conversation serviceUrl (${stored.value}) requires channels.msteams.cloud=China.`);
|
|
548
551
|
if (stored.host !== PUBLIC_MSTEAMS_SERVICE_HOST) throw new Error(`msteams proactive send blocked for ${params.conversationId}: stored conversation serviceUrl (${stored.value}) is not a Microsoft Teams public-cloud Bot Connector endpoint. Set channels.msteams.cloud and channels.msteams.serviceUrl for the supported Teams cloud that owns this conversation.`);
|
|
549
552
|
}
|
|
550
|
-
|
|
553
|
+
//#endregion
|
|
554
|
+
//#region extensions/msteams/src/send-handoff.ts
|
|
551
555
|
const connectorHandoff = new node_async_hooks.AsyncLocalStorage();
|
|
552
556
|
function notDispatched(error) {
|
|
553
557
|
return error instanceof openclaw_plugin_sdk_error_runtime.PlatformMessageNotDispatchedError ? error : new openclaw_plugin_sdk_error_runtime.PlatformMessageNotDispatchedError(error instanceof Error ? error.message : "Teams delivery authority closed", {
|
|
@@ -595,7 +599,8 @@ const msteamsConnectorHandoffInterceptor = { request: async ({ config }) => {
|
|
|
595
599
|
};
|
|
596
600
|
return config;
|
|
597
601
|
} };
|
|
598
|
-
|
|
602
|
+
//#endregion
|
|
603
|
+
//#region extensions/msteams/src/qa/private-runtime.ts
|
|
599
604
|
const PRIVATE_QA_BUILD_ENV = "OPENCLAW_BUILD_PRIVATE_QA";
|
|
600
605
|
const PRIVATE_QA_NONCE_HEADER = "x-openclaw-msteams-qa-nonce";
|
|
601
606
|
const PRIVATE_QA_RUNTIME_SYMBOL = Symbol.for("openclaw.msteams.privateQaRuntime");
|
|
@@ -655,7 +660,8 @@ function resolveMSTeamsPrivateQaRuntime(env = process.env, bootstrap = globalThi
|
|
|
655
660
|
token: async () => botToken
|
|
656
661
|
};
|
|
657
662
|
}
|
|
658
|
-
|
|
663
|
+
//#endregion
|
|
664
|
+
//#region extensions/msteams/src/user-agent.ts
|
|
659
665
|
let cachedUserAgent;
|
|
660
666
|
function resolveTeamsSdkVersion() {
|
|
661
667
|
try {
|
|
@@ -702,7 +708,8 @@ function ensureUserAgentHeader(headers) {
|
|
|
702
708
|
if (!nextHeaders.has("User-Agent")) nextHeaders.set("User-Agent", buildUserAgent());
|
|
703
709
|
return nextHeaders;
|
|
704
710
|
}
|
|
705
|
-
|
|
711
|
+
//#endregion
|
|
712
|
+
//#region extensions/msteams/src/sdk.ts
|
|
706
713
|
const AZURE_IDENTITY_MODULE = "@azure/identity";
|
|
707
714
|
const loadAzureIdentity = (0, openclaw_plugin_sdk_lazy_runtime.createLazyRuntimeModule)(() => import(AZURE_IDENTITY_MODULE));
|
|
708
715
|
const loadSdkModules = (0, openclaw_plugin_sdk_lazy_runtime.createLazyRuntimeModule)(() => Promise.all([import("@microsoft/teams.apps"), import("@microsoft/teams.api")]).then(([apps, api]) => ({
|
|
@@ -771,7 +778,8 @@ function createMSTeamsTokenProvider(app) {
|
|
|
771
778
|
return (await app.tokenProvider.getAppToken(app.cloud?.botScope ?? "https://api.botframework.com/.default"))?.toString() ?? "";
|
|
772
779
|
} };
|
|
773
780
|
}
|
|
774
|
-
|
|
781
|
+
//#endregion
|
|
782
|
+
//#region extensions/msteams/src/oauth.shared.ts
|
|
775
783
|
const MSTEAMS_OAUTH_REDIRECT_URI = "http://localhost:8086/oauth2callback";
|
|
776
784
|
const MSTEAMS_DEFAULT_TOKEN_FETCH_TIMEOUT_MS = 1e4;
|
|
777
785
|
const MSTEAMS_DEFAULT_DELEGATED_SCOPES = [
|
|
@@ -786,7 +794,8 @@ function buildMSTeamsAuthEndpoint(tenantId) {
|
|
|
786
794
|
function buildMSTeamsTokenEndpoint(tenantId) {
|
|
787
795
|
return `https://login.microsoftonline.com/${encodeURIComponent(tenantId)}/oauth2/v2.0/token`;
|
|
788
796
|
}
|
|
789
|
-
|
|
797
|
+
//#endregion
|
|
798
|
+
//#region extensions/msteams/src/oauth.token.ts
|
|
790
799
|
/** Five-minute buffer subtracted from token expiry to avoid edge-case clock drift. */
|
|
791
800
|
const EXPIRY_BUFFER_MS = 3e5;
|
|
792
801
|
function parseMSTeamsTokenResponse(data, failureLabel) {
|
|
@@ -876,7 +885,8 @@ async function refreshMSTeamsDelegatedTokens(params) {
|
|
|
876
885
|
resolveRefreshToken: (data) => data.refresh_token ?? params.refreshToken
|
|
877
886
|
});
|
|
878
887
|
}
|
|
879
|
-
|
|
888
|
+
//#endregion
|
|
889
|
+
//#region extensions/msteams/src/token.ts
|
|
880
890
|
async function resolveDelegatedAccessToken(params) {
|
|
881
891
|
const tokens = await require_delegated_state.loadMSTeamsDelegatedTokens(params.accountId);
|
|
882
892
|
if (!tokens) return;
|
|
@@ -895,7 +905,8 @@ async function resolveDelegatedAccessToken(params) {
|
|
|
895
905
|
return;
|
|
896
906
|
}
|
|
897
907
|
}
|
|
898
|
-
|
|
908
|
+
//#endregion
|
|
909
|
+
//#region extensions/msteams/src/graph.ts
|
|
899
910
|
const GRAPH_BETA = "https://graph.microsoft.com/beta";
|
|
900
911
|
const graphRequestCurrentness = new node_async_hooks.AsyncLocalStorage();
|
|
901
912
|
function runWithMSTeamsGraphRequestCurrentness(assertCurrent, work) {
|
|
@@ -1080,7 +1091,8 @@ async function listChannelsForTeamWithPageInfo(token, teamId) {
|
|
|
1080
1091
|
path: `/teams/${encodeURIComponent(teamId)}/channels?$select=id,displayName`
|
|
1081
1092
|
});
|
|
1082
1093
|
}
|
|
1083
|
-
|
|
1094
|
+
//#endregion
|
|
1095
|
+
//#region extensions/msteams/src/graph-users.ts
|
|
1084
1096
|
async function searchGraphUsers(params) {
|
|
1085
1097
|
const query = params.query.trim();
|
|
1086
1098
|
if (!query) return [];
|
|
@@ -1115,7 +1127,8 @@ async function findGraphUsersByExactIdentity(params) {
|
|
|
1115
1127
|
path
|
|
1116
1128
|
});
|
|
1117
1129
|
}
|
|
1118
|
-
|
|
1130
|
+
//#endregion
|
|
1131
|
+
//#region extensions/msteams/src/inbound.ts
|
|
1119
1132
|
function htmlToPlainText(html) {
|
|
1120
1133
|
return (0, openclaw_plugin_sdk_html_entity_runtime.decodeHtmlEntities)(html.replace(/<[^>]*>/g, " ")).replaceAll("\xA0", " ").replace(/\s+/g, " ").trim();
|
|
1121
1134
|
}
|
|
@@ -1195,7 +1208,8 @@ function wasMSTeamsBotMentioned(activity) {
|
|
|
1195
1208
|
if (!botId) return false;
|
|
1196
1209
|
return (activity.entities ?? []).some((e) => e.type === "mention" && e.mentioned?.id === botId);
|
|
1197
1210
|
}
|
|
1198
|
-
|
|
1211
|
+
//#endregion
|
|
1212
|
+
//#region extensions/msteams/src/resolve-allowlist.ts
|
|
1199
1213
|
const MSTEAMS_GROUP_CONVERSATION_ID = /^19:.+@thread\.(?:tacv2|skype|v2)$/i;
|
|
1200
1214
|
const MSTEAMS_UNMATCHABLE_THREAD_ID = "19:openclaw-unresolved-allowlist@thread.unresolved";
|
|
1201
1215
|
/** Keeps a configured but fully unresolvable sender allowlist configured and matching nothing. */
|
|
@@ -1650,6 +1664,7 @@ async function resolveMSTeamsUserAllowlist(params) {
|
|
|
1650
1664
|
}
|
|
1651
1665
|
});
|
|
1652
1666
|
}
|
|
1667
|
+
//#endregion
|
|
1653
1668
|
Object.defineProperty(exports, "GRAPH_ROOT", {
|
|
1654
1669
|
enumerable: true,
|
|
1655
1670
|
get: function() {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
2
|
var __create = Object.create;
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -29,6 +29,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
29
29
|
value: mod,
|
|
30
30
|
enumerable: true
|
|
31
31
|
}) : target, mod));
|
|
32
|
+
//#endregion
|
|
32
33
|
Object.defineProperty(exports, "__exportAll", {
|
|
33
34
|
enumerable: true,
|
|
34
35
|
get: function() {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
//#region extensions/msteams/src/runtime.ts
|
|
2
2
|
const { setRuntime: setMSTeamsRuntime, getRuntime: getMSTeamsRuntime, tryGetRuntime: getOptionalMSTeamsRuntime } = (0, require("openclaw/plugin-sdk/runtime-store").createPluginRuntimeStore)({
|
|
3
3
|
pluginId: "msteams",
|
|
4
4
|
errorMessage: "MSTeams runtime not initialized"
|
|
5
5
|
});
|
|
6
|
+
//#endregion
|
|
6
7
|
Object.defineProperty(exports, "getMSTeamsRuntime", {
|
|
7
8
|
enumerable: true,
|
|
8
9
|
get: function() {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_secret_contract_api = require("./secret-contract-api-
|
|
1
|
+
const require_secret_contract_api = require("./secret-contract-api-wAyY5UHv.cjs");
|
|
2
2
|
exports.channelSecrets = require_secret_contract_api.channelSecrets;
|
|
3
3
|
exports.collectRuntimeConfigAssignments = require_secret_contract_api.collectRuntimeConfigAssignments;
|
|
4
4
|
exports.secretTargetRegistryEntries = require_secret_contract_api.secretTargetRegistryEntries;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
let openclaw_plugin_sdk_setup = require("openclaw/plugin-sdk/setup");
|
|
2
2
|
let openclaw_plugin_sdk_channel_secret_basic_runtime = require("openclaw/plugin-sdk/channel-secret-basic-runtime");
|
|
3
|
-
|
|
3
|
+
//#region extensions/msteams/src/secret-contract.ts
|
|
4
4
|
const secretTargetRegistryEntries = (0, openclaw_plugin_sdk_channel_secret_basic_runtime.createChannelSecretTargetRegistryEntries)({
|
|
5
5
|
channelKey: "msteams",
|
|
6
6
|
account: ["appPassword"],
|
|
@@ -64,6 +64,7 @@ const channelSecrets = {
|
|
|
64
64
|
secretTargetRegistryEntries,
|
|
65
65
|
collectRuntimeConfigAssignments
|
|
66
66
|
};
|
|
67
|
+
//#endregion
|
|
67
68
|
Object.defineProperty(exports, "channelSecrets", {
|
|
68
69
|
enumerable: true,
|
|
69
70
|
get: function() {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
const require_bot_framework_service_url = require("./bot-framework-service-url-
|
|
2
|
-
const require_token_config = require("./token-config-
|
|
3
|
-
const require_resolve_allowlist = require("./resolve-allowlist-
|
|
4
|
-
const require_runtime = require("./runtime-
|
|
1
|
+
const require_bot_framework_service_url = require("./bot-framework-service-url-B3FWn2SV.cjs");
|
|
2
|
+
const require_token_config = require("./token-config-bEpua_Q7.cjs");
|
|
3
|
+
const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
|
|
4
|
+
const require_runtime = require("./runtime-gZTAuFux.cjs");
|
|
5
5
|
require("../runtime-api.cjs");
|
|
6
|
-
const require_channel = require("./channel-
|
|
7
|
-
const require_channel_setup = require("./channel.setup-
|
|
8
|
-
const require_conversation_store_state = require("./conversation-store-state-
|
|
6
|
+
const require_channel = require("./channel-DMWQSTtQ.cjs");
|
|
7
|
+
const require_channel_setup = require("./channel.setup-BN3uhq3r.cjs");
|
|
8
|
+
const require_conversation_store_state = require("./conversation-store-state-B-4g4uq5.cjs");
|
|
9
9
|
let openclaw_plugin_sdk_channel_outbound = require("openclaw/plugin-sdk/channel-outbound");
|
|
10
10
|
let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
|
|
11
11
|
let openclaw_plugin_sdk_account_id = require("openclaw/plugin-sdk/account-id");
|
|
@@ -14,7 +14,7 @@ let openclaw_plugin_sdk_channel_inbound = require("openclaw/plugin-sdk/channel-i
|
|
|
14
14
|
let openclaw_plugin_sdk_markdown_table_runtime = require("openclaw/plugin-sdk/markdown-table-runtime");
|
|
15
15
|
let openclaw_plugin_sdk_account_helpers = require("openclaw/plugin-sdk/account-helpers");
|
|
16
16
|
let openclaw_plugin_sdk_outbound_media = require("openclaw/plugin-sdk/outbound-media");
|
|
17
|
-
|
|
17
|
+
//#region extensions/msteams/src/send-context.ts
|
|
18
18
|
function resolveMSTeamsProactiveReplyTarget(params) {
|
|
19
19
|
const threadRootId = params.ref.threadId ?? params.ref.activityId;
|
|
20
20
|
if (params.conversationType !== "channel" || !threadRootId) return { replyStyle: "top-level" };
|
|
@@ -168,7 +168,8 @@ async function resolveMSTeamsSendContext(params) {
|
|
|
168
168
|
mediaMaxBytes
|
|
169
169
|
};
|
|
170
170
|
}
|
|
171
|
-
|
|
171
|
+
//#endregion
|
|
172
|
+
//#region extensions/msteams/src/send.ts
|
|
172
173
|
function createMSTeamsSendError(errorPrefix, error) {
|
|
173
174
|
if (error instanceof Error && (error instanceof openclaw_plugin_sdk_error_runtime.PlatformMessageNotDispatchedError || (0, openclaw_plugin_sdk_channel_inbound.isChannelPartialDeliveryError)(error))) return error;
|
|
174
175
|
const classification = require_channel_setup.classifyMSTeamsSendError(error);
|
|
@@ -578,6 +579,7 @@ async function mutateMSTeamsMessageActivity(params) {
|
|
|
578
579
|
});
|
|
579
580
|
return { conversationId };
|
|
580
581
|
}
|
|
582
|
+
//#endregion
|
|
581
583
|
Object.defineProperty(exports, "deleteMessageMSTeams", {
|
|
582
584
|
enumerable: true,
|
|
583
585
|
get: function() {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const require_resolve_allowlist = require("./resolve-allowlist-
|
|
1
|
+
const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
|
|
2
2
|
let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
|
|
3
3
|
let openclaw_plugin_sdk_approval_auth_runtime = require("openclaw/plugin-sdk/approval-auth-runtime");
|
|
4
4
|
let openclaw_plugin_sdk_routing = require("openclaw/plugin-sdk/routing");
|
|
5
|
-
|
|
5
|
+
//#region extensions/msteams/src/approval-auth.ts
|
|
6
6
|
const MSTEAMS_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
7
7
|
function normalizeMSTeamsApproverId(value) {
|
|
8
8
|
const normalized = require_resolve_allowlist.normalizeMSTeamsMessagingTarget(String(value));
|
|
@@ -34,7 +34,8 @@ const msTeamsApprovalAuth = { authorizeActorAction(params) {
|
|
|
34
34
|
};
|
|
35
35
|
return msTeamsApproval.approvalAuth.authorizeActorAction(params);
|
|
36
36
|
} };
|
|
37
|
-
|
|
37
|
+
//#endregion
|
|
38
|
+
//#region extensions/msteams/src/monitor-handler/thread-session.ts
|
|
38
39
|
const TRAILING_THREAD_SUFFIX = /(?::thread:[^:]+)+$/;
|
|
39
40
|
function resolveMSTeamsRouteSessionKey(params) {
|
|
40
41
|
const channelThreadId = params.isChannel ? params.conversationMessageId ?? params.replyToId ?? void 0 : void 0;
|
|
@@ -45,6 +46,7 @@ function resolveMSTeamsRouteSessionKey(params) {
|
|
|
45
46
|
parentSessionKey: channelThreadId ? cleanBase : void 0
|
|
46
47
|
}).sessionKey;
|
|
47
48
|
}
|
|
49
|
+
//#endregion
|
|
48
50
|
Object.defineProperty(exports, "getMSTeamsApprovalApprovers", {
|
|
49
51
|
enumerable: true,
|
|
50
52
|
get: function() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
|
|
2
2
|
let openclaw_plugin_sdk_secret_input = require("openclaw/plugin-sdk/secret-input");
|
|
3
|
-
|
|
3
|
+
//#region extensions/msteams/src/token-config.ts
|
|
4
4
|
function resolveAuthType(cfg, options) {
|
|
5
5
|
const fromCfg = cfg?.authType;
|
|
6
6
|
if (fromCfg === "secret" || fromCfg === "federated") return fromCfg;
|
|
@@ -72,6 +72,7 @@ function inspectMSTeamsCredentials(cfg, options) {
|
|
|
72
72
|
if ((0, openclaw_plugin_sdk_secret_input.hasConfiguredSecretInput)(cfg?.appPassword)) return { status: "configured_unavailable" };
|
|
73
73
|
return (allowEnvFallback ? (0, openclaw_plugin_sdk_secret_input.normalizeSecretInputString)(process.env.MSTEAMS_APP_PASSWORD) : void 0) ? { status: "available" } : { status: "missing" };
|
|
74
74
|
}
|
|
75
|
+
//#endregion
|
|
75
76
|
Object.defineProperty(exports, "hasConfiguredMSTeamsCredentials", {
|
|
76
77
|
enumerable: true,
|
|
77
78
|
get: function() {
|
package/dist/api.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_channel = require("./.setup/channel-
|
|
3
|
-
const require_channel_setup = require("./.setup/channel.setup-
|
|
2
|
+
const require_channel = require("./.setup/channel-DMWQSTtQ.cjs");
|
|
3
|
+
const require_channel_setup = require("./.setup/channel.setup-BN3uhq3r.cjs");
|
|
4
4
|
exports.createMSTeamsSetupWizardBase = require_channel_setup.createMSTeamsSetupWizardBase;
|
|
5
5
|
exports.msteamsPlugin = require_channel.msteamsPlugin;
|
|
6
6
|
exports.msteamsSetupAdapter = require_channel_setup.msteamsSetupAdapter;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_config_schema = require("./.setup/config-schema-
|
|
2
|
+
const require_config_schema = require("./.setup/config-schema-CkKdphSp.cjs");
|
|
3
3
|
exports.MSTeamsChannelConfigSchema = require_config_schema.MSTeamsChannelConfigSchema;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
let openclaw_plugin_sdk_secret_input = require("openclaw/plugin-sdk/secret-input");
|
|
3
|
-
|
|
3
|
+
//#region extensions/msteams/configured-state.ts
|
|
4
4
|
/** Mirror Teams auth-mode requirements without loading the Azure SDK or full channel. */
|
|
5
5
|
function hasConfiguredMSTeamsChannelState(params) {
|
|
6
6
|
const config = params.cfg.channels?.msteams;
|
|
@@ -15,4 +15,5 @@ function hasConfiguredMSTeamsChannelState(params) {
|
|
|
15
15
|
}
|
|
16
16
|
return config && Object.hasOwn(config, "appPassword") ? (0, openclaw_plugin_sdk_secret_input.hasConfiguredSecretInput)(config.appPassword) : Boolean((0, openclaw_plugin_sdk_secret_input.normalizeSecretInputString)(env.MSTEAMS_APP_PASSWORD));
|
|
17
17
|
}
|
|
18
|
+
//#endregion
|
|
18
19
|
exports.hasConfiguredMSTeamsChannelState = hasConfiguredMSTeamsChannelState;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_resolve_allowlist = require("./.setup/resolve-allowlist-
|
|
2
|
+
const require_resolve_allowlist = require("./.setup/resolve-allowlist-gI34MnpE.cjs");
|
|
3
3
|
let openclaw_plugin_sdk_directory_runtime = require("openclaw/plugin-sdk/directory-runtime");
|
|
4
4
|
const msteamsDirectoryContractPlugin = {
|
|
5
5
|
id: "msteams",
|
|
@@ -41,4 +41,5 @@ const msteamsDirectoryContractPlugin = {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
};
|
|
44
|
+
//#endregion
|
|
44
45
|
exports.msteamsDirectoryContractPlugin = msteamsDirectoryContractPlugin;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_rolldown_runtime = require("./.setup/rolldown-runtime-
|
|
2
|
+
const require_rolldown_runtime = require("./.setup/rolldown-runtime-BloeesfJ.cjs");
|
|
3
3
|
let node_path = require("node:path");
|
|
4
4
|
node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
|
5
|
-
|
|
5
|
+
//#region extensions/msteams/doctor-backup-resources.ts
|
|
6
6
|
function stateFileArchiveDirectory(filePath) {
|
|
7
7
|
return `${filePath}.archives`;
|
|
8
8
|
}
|
|
@@ -16,5 +16,6 @@ function stateFileBackupResources(stateDir, filename) {
|
|
|
16
16
|
kind: "directory"
|
|
17
17
|
}];
|
|
18
18
|
}
|
|
19
|
+
//#endregion
|
|
19
20
|
exports.stateFileArchiveDirectory = stateFileArchiveDirectory;
|
|
20
21
|
exports.stateFileBackupResources = stateFileBackupResources;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_rolldown_runtime = require("./.setup/rolldown-runtime-
|
|
3
|
-
const require_token_config = require("./.setup/token-config-
|
|
4
|
-
const require_delegated_state = require("./.setup/delegated-state-
|
|
2
|
+
const require_rolldown_runtime = require("./.setup/rolldown-runtime-BloeesfJ.cjs");
|
|
3
|
+
const require_token_config = require("./.setup/token-config-bEpua_Q7.cjs");
|
|
4
|
+
const require_delegated_state = require("./.setup/delegated-state-Bv5cWuec.cjs");
|
|
5
5
|
const require_doctor_backup_resources = require("./doctor-backup-resources.cjs");
|
|
6
6
|
let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
|
|
7
7
|
let openclaw_plugin_sdk_error_runtime = require("openclaw/plugin-sdk/error-runtime");
|
|
@@ -10,7 +10,7 @@ node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
|
|
10
10
|
let node_fs_promises = require("node:fs/promises");
|
|
11
11
|
node_fs_promises = require_rolldown_runtime.__toESM(node_fs_promises, 1);
|
|
12
12
|
let openclaw_plugin_sdk_session_store_paths = require("openclaw/plugin-sdk/session-store-paths");
|
|
13
|
-
|
|
13
|
+
//#region packages/normalization-core/src/record-coerce.ts
|
|
14
14
|
/** Type guard for non-array object records at browser-safe boundaries. */
|
|
15
15
|
function isRecord$1(value) {
|
|
16
16
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
@@ -19,7 +19,8 @@ function isRecord$1(value) {
|
|
|
19
19
|
function asNullableRecord(value) {
|
|
20
20
|
return isRecord$1(value) ? value : null;
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/config/channel-config-normalization.ts
|
|
23
24
|
/** Applies one channel-specific doctor migration to every object-shaped account. */
|
|
24
25
|
function normalizeChannelAccounts(params) {
|
|
25
26
|
const rawAccounts = asNullableRecord(params.entry.accounts);
|
|
@@ -95,7 +96,8 @@ function normalizeChannelConfigEntries(params) {
|
|
|
95
96
|
changes
|
|
96
97
|
};
|
|
97
98
|
}
|
|
98
|
-
|
|
99
|
+
//#endregion
|
|
100
|
+
//#region src/plugin-sdk/legacy-webhook-listener-migration.ts
|
|
99
101
|
/** Preserve explicitly configured webhook listeners while moving ingress onto Gateway routes. */
|
|
100
102
|
function createLegacyWebhookListenerDoctorContract(params) {
|
|
101
103
|
const portKey = params.portKey ?? "webhookPort";
|
|
@@ -165,10 +167,12 @@ function createLegacyWebhookListenerDoctorContract(params) {
|
|
|
165
167
|
}
|
|
166
168
|
};
|
|
167
169
|
}
|
|
168
|
-
|
|
170
|
+
//#endregion
|
|
171
|
+
//#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
|
|
169
172
|
var runtime_doctor_migrations_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({ createLegacyWebhookListenerDoctorContract: () => createLegacyWebhookListenerDoctorContract });
|
|
170
173
|
require_rolldown_runtime.__reExport(runtime_doctor_migrations_exports, require("openclaw/plugin-sdk/runtime-doctor-migrations"));
|
|
171
|
-
|
|
174
|
+
//#endregion
|
|
175
|
+
//#region extensions/msteams/config-doctor-api.ts
|
|
172
176
|
const webhookMigration = createLegacyWebhookListenerDoctorContract({
|
|
173
177
|
channelKey: "msteams",
|
|
174
178
|
defaultPort: 3978,
|
|
@@ -199,7 +203,8 @@ function normalizeCompatibilityConfig({ cfg }) {
|
|
|
199
203
|
historicalWebhookAccountIds: webhook.historicalWebhookAccountIds
|
|
200
204
|
};
|
|
201
205
|
}
|
|
202
|
-
|
|
206
|
+
//#endregion
|
|
207
|
+
//#region extensions/msteams/doctor-contract-api.ts
|
|
203
208
|
const MSTEAMS_PLUGIN_ID = "Microsoft Teams";
|
|
204
209
|
function listAgentIds(config) {
|
|
205
210
|
const ids = /* @__PURE__ */ new Set(["main"]);
|
|
@@ -341,6 +346,7 @@ const stateMigrations = [
|
|
|
341
346
|
},
|
|
342
347
|
retiredJsonMigration("feedback-learnings", "feedback learnings", hasRetiredLearnings)
|
|
343
348
|
];
|
|
349
|
+
//#endregion
|
|
344
350
|
exports.historicalWebhookListener = historicalWebhookListener;
|
|
345
351
|
exports.legacyConfigRules = legacyConfigRules;
|
|
346
352
|
exports.normalizeCompatibilityConfig = normalizeCompatibilityConfig;
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
//#region extensions/msteams/index.ts
|
|
2
2
|
var msteams_default = (0, require("openclaw/plugin-sdk/channel-entry-contract").defineBundledChannelEntry)({
|
|
3
3
|
id: "msteams",
|
|
4
4
|
name: "Microsoft Teams",
|
|
@@ -17,4 +17,5 @@ var msteams_default = (0, require("openclaw/plugin-sdk/channel-entry-contract").
|
|
|
17
17
|
exportName: "setMSTeamsRuntime"
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
|
+
//#endregion
|
|
20
21
|
module.exports = msteams_default;
|
package/dist/qa-runner-api.cjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
let openclaw_plugin_sdk_qa_runner_runtime = require("openclaw/plugin-sdk/qa-runner-runtime");
|
|
3
|
-
|
|
3
|
+
//#region extensions/msteams/src/qa/cli.ts
|
|
4
4
|
const DEFAULT_MSTEAMS_QA_SCENARIOS = ["channel-canary"];
|
|
5
|
-
const loadMSTeamsQaAdapterRuntime = (0, openclaw_plugin_sdk_qa_runner_runtime.createLazyCliRuntimeLoader)(() => Promise.resolve().then(() => require("./.setup/adapter.runtime-
|
|
6
|
-
|
|
5
|
+
const loadMSTeamsQaAdapterRuntime = (0, openclaw_plugin_sdk_qa_runner_runtime.createLazyCliRuntimeLoader)(() => Promise.resolve().then(() => require("./.setup/adapter.runtime-B-6Q3nMI.cjs")));
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region extensions/msteams/qa-runner-api.ts
|
|
7
8
|
const qaRunnerCliRegistrations = [(0, openclaw_plugin_sdk_qa_runner_runtime.createLiveTransportQaCliRegistration)({
|
|
8
9
|
commandName: "msteams",
|
|
9
10
|
adapterFactory: {
|
|
@@ -30,4 +31,5 @@ const qaRunnerCliRegistrations = [(0, openclaw_plugin_sdk_qa_runner_runtime.crea
|
|
|
30
31
|
});
|
|
31
32
|
}
|
|
32
33
|
})];
|
|
34
|
+
//#endregion
|
|
33
35
|
exports.qaRunnerCliRegistrations = qaRunnerCliRegistrations;
|
package/dist/runtime-api.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_runtime = require("./.setup/runtime-
|
|
2
|
+
const require_runtime = require("./.setup/runtime-gZTAuFux.cjs");
|
|
3
3
|
let openclaw_plugin_sdk_channel_outbound = require("openclaw/plugin-sdk/channel-outbound");
|
|
4
4
|
let openclaw_plugin_sdk_channel_pairing = require("openclaw/plugin-sdk/channel-pairing");
|
|
5
5
|
let openclaw_plugin_sdk_account_helpers = require("openclaw/plugin-sdk/account-helpers");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_secret_contract_api = require("./.setup/secret-contract-api-
|
|
2
|
+
const require_secret_contract_api = require("./.setup/secret-contract-api-wAyY5UHv.cjs");
|
|
3
3
|
exports.channelSecrets = require_secret_contract_api.channelSecrets;
|
|
4
4
|
exports.collectRuntimeConfigAssignments = require_secret_contract_api.collectRuntimeConfigAssignments;
|
|
5
5
|
exports.secretTargetRegistryEntries = require_secret_contract_api.secretTargetRegistryEntries;
|
package/dist/setup-entry.cjs
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
let openclaw_plugin_sdk_channel_entry_contract = require("openclaw/plugin-sdk/channel-entry-contract");
|
|
2
2
|
let node_url = require("node:url");
|
|
3
|
-
|
|
3
|
+
//#region extensions/msteams/setup-entry.ts
|
|
4
4
|
var setup_entry_default = (0, openclaw_plugin_sdk_channel_entry_contract.defineBundledChannelSetupEntry)({
|
|
5
5
|
importMetaUrl: require("url").pathToFileURL(__filename).href,
|
|
6
6
|
plugin: {
|
|
7
|
-
specifier: (0, node_url.fileURLToPath)(new URL(".setup/setup-plugin-api-
|
|
7
|
+
specifier: (0, node_url.fileURLToPath)(new URL(".setup/setup-plugin-api-B-NYBLkF.cjs", require("url").pathToFileURL(__filename).href).href),
|
|
8
8
|
exportName: "msteamsSetupPlugin"
|
|
9
9
|
},
|
|
10
10
|
secrets: {
|
|
11
|
-
specifier: (0, node_url.fileURLToPath)(new URL(".setup/secret-contract-api-
|
|
11
|
+
specifier: (0, node_url.fileURLToPath)(new URL(".setup/secret-contract-api-YY3v6MP8.cjs", require("url").pathToFileURL(__filename).href).href),
|
|
12
12
|
exportName: "channelSecrets"
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
|
+
//#endregion
|
|
15
16
|
module.exports = setup_entry_default;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_channel_setup = require("./.setup/channel.setup-
|
|
2
|
+
const require_channel_setup = require("./.setup/channel.setup-BN3uhq3r.cjs");
|
|
3
3
|
exports.msteamsSetupPlugin = require_channel_setup.msteamsSetupPlugin;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/msteams",
|
|
3
|
-
"version": "2026.11.
|
|
3
|
+
"version": "2026.11.2",
|
|
4
4
|
"description": "OpenClaw Microsoft Teams channel plugin for bot conversations.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"openclaw": "workspace:*"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"openclaw": ">=2026.11.
|
|
25
|
+
"openclaw": ">=2026.11.2"
|
|
26
26
|
},
|
|
27
27
|
"peerDependenciesMeta": {
|
|
28
28
|
"openclaw": {
|
|
@@ -124,10 +124,10 @@
|
|
|
124
124
|
"minHostVersion": ">=2026.4.10"
|
|
125
125
|
},
|
|
126
126
|
"compat": {
|
|
127
|
-
"pluginApi": ">=2026.11.
|
|
127
|
+
"pluginApi": ">=2026.11.2"
|
|
128
128
|
},
|
|
129
129
|
"build": {
|
|
130
|
-
"openclawVersion": "2026.11.
|
|
130
|
+
"openclawVersion": "2026.11.2",
|
|
131
131
|
"runtimeFormat": "cjs"
|
|
132
132
|
},
|
|
133
133
|
"release": {
|