@openclaw/nextcloud-talk 2026.10.10-beta.5 → 2026.10.10
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/api-BgnUYkO3.mjs +2 -0
- package/dist/.setup/{channel-B8-CvvK1.mjs → channel-D9tHRtkv.mjs} +34 -65
- package/dist/.setup/{doctor-contract-DwH950tH.mjs → doctor-contract-CkWQa5uZ.mjs} +6 -12
- package/dist/.setup/{runtime-api-DVkVOUSo.mjs → runtime-api-DSz4xBAm.mjs} +1 -2
- package/dist/.setup/{secret-contract-Bvm0PmP3.mjs → secret-contract-BHyPrmz3.mjs} +1 -2
- package/dist/.setup/{secret-contract-api-DoyAH9bS.mjs → secret-contract-api-CKCDZ3m8.mjs} +1 -1
- package/dist/.source-module-urls/3332e832383d54fca83a3cfe8961ecdecf361c1eec0972c99f00a876d9481d98.json +1 -1
- package/dist/api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/configured-state.js +1 -2
- package/dist/doctor-contract-api.js +1 -1
- package/dist/index.js +1 -2
- package/dist/runtime-api.js +1 -1
- package/dist/secret-contract-api.js +1 -1
- package/dist/setup-entry.js +3 -4
- package/package.json +4 -4
- package/dist/.setup/api-BmNQoi-o.mjs +0 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { a as __exportAll, n as legacyConfigRules, o as __reExport, r as normalizeCompatibilityConfig } from "./doctor-contract-
|
|
1
|
+
import { a as __exportAll, n as legacyConfigRules, o as __reExport, r as normalizeCompatibilityConfig } from "./doctor-contract-CkWQa5uZ.mjs";
|
|
2
2
|
import { listNextcloudTalkAccountIds, mergeNextcloudTalkAccountConfig, resolveDefaultNextcloudTalkAccountId } from "../configured-state.js";
|
|
3
|
-
import { a as logInboundDrop, c as warnMissingProviderGroupPolicyFallbackOnce, i as fetchWithSsrFGuard, l as getNextcloudTalkRuntime, n as createChannelPairingController, o as resolveAllowlistProviderRuntimeGroupPolicy, r as deliverFormattedTextWithAttachments, s as resolveDefaultGroupPolicy, t as GROUP_POLICY_BLOCKED_LABEL, u as getOptionalNextcloudTalkRuntime } from "./runtime-api-
|
|
4
|
-
import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-
|
|
3
|
+
import { a as logInboundDrop, c as warnMissingProviderGroupPolicyFallbackOnce, i as fetchWithSsrFGuard, l as getNextcloudTalkRuntime, n as createChannelPairingController, o as resolveAllowlistProviderRuntimeGroupPolicy, r as deliverFormattedTextWithAttachments, s as resolveDefaultGroupPolicy, t as GROUP_POLICY_BLOCKED_LABEL, u as getOptionalNextcloudTalkRuntime } from "./runtime-api-DSz4xBAm.mjs";
|
|
4
|
+
import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-BHyPrmz3.mjs";
|
|
5
5
|
import { describeWebhookAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
|
|
6
6
|
import { buildChannelOutboundSessionRoute, createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
|
|
7
7
|
import { createLoggedPairingApprovalNotifier, createPairingPrefixStripper } from "openclaw/plugin-sdk/channel-pairing";
|
|
@@ -52,7 +52,7 @@ import { defineChannelSetupContract } from "openclaw/plugin-sdk/channel-setup";
|
|
|
52
52
|
import { applyAccountNameToChannelSection, baseUrlTextInput, createPromptParsedAllowFromForAccount, createSetupTranslator, createStandardChannelSetupStatus, defineTokenCredential, formatDocsLink, patchScopedAccountConfig, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
|
|
53
53
|
import { createSetupInputPresenceValidator, createSetupTranslator as createSetupTranslator$1, mergeAllowFromEntries } from "openclaw/plugin-sdk/setup-runtime";
|
|
54
54
|
import { formatDocsLink as formatDocsLink$1 } from "openclaw/plugin-sdk/setup-tools";
|
|
55
|
-
|
|
55
|
+
// extensions/nextcloud-talk/src/api-credentials.ts
|
|
56
56
|
function resolveNextcloudTalkApiCredentialsResult(params) {
|
|
57
57
|
const apiUser = params.apiUser?.trim();
|
|
58
58
|
if (!apiUser) return { status: "missing" };
|
|
@@ -84,8 +84,7 @@ function resolveNextcloudTalkApiCredentials(params) {
|
|
|
84
84
|
const result = resolveNextcloudTalkApiCredentialsResult(params);
|
|
85
85
|
return result.status === "available" ? result.value : void 0;
|
|
86
86
|
}
|
|
87
|
-
|
|
88
|
-
//#region extensions/nextcloud-talk/src/accounts.ts
|
|
87
|
+
// extensions/nextcloud-talk/src/accounts.ts
|
|
89
88
|
function resolveNextcloudTalkSecret(accountId, merged) {
|
|
90
89
|
const configuredSecret = resolveSecretInputString({
|
|
91
90
|
value: merged.botSecret,
|
|
@@ -178,8 +177,7 @@ function inspectNextcloudTalkAccount(params) {
|
|
|
178
177
|
function isNextcloudTalkAccountConfigured(account) {
|
|
179
178
|
return Boolean(account.tokenStatus !== "missing" && account.baseUrl?.trim());
|
|
180
179
|
}
|
|
181
|
-
|
|
182
|
-
//#region extensions/nextcloud-talk/src/approval-auth.ts
|
|
180
|
+
// extensions/nextcloud-talk/src/approval-auth.ts
|
|
183
181
|
function normalizeNextcloudTalkApproverId(value) {
|
|
184
182
|
return normalizeOptionalLowercaseString(String(value).trim().replace(/^(nextcloud-talk|nc-talk|nc):/i, ""));
|
|
185
183
|
}
|
|
@@ -193,8 +191,7 @@ const nextcloudTalkApprovalAuth = createChannelApprovalAuth({
|
|
|
193
191
|
},
|
|
194
192
|
normalizeApprover: normalizeNextcloudTalkApproverId
|
|
195
193
|
}).approvalAuth;
|
|
196
|
-
|
|
197
|
-
//#region extensions/nextcloud-talk/src/guarded-response.ts
|
|
194
|
+
// extensions/nextcloud-talk/src/guarded-response.ts
|
|
198
195
|
async function readNextcloudTalkErrorBody(response, ...credentials) {
|
|
199
196
|
try {
|
|
200
197
|
let body = await readProviderTextResponse(response, "Nextcloud Talk error", {
|
|
@@ -207,8 +204,7 @@ async function readNextcloudTalkErrorBody(response, ...credentials) {
|
|
|
207
204
|
return "";
|
|
208
205
|
}
|
|
209
206
|
}
|
|
210
|
-
|
|
211
|
-
//#region extensions/nextcloud-talk/src/signature.ts
|
|
207
|
+
// extensions/nextcloud-talk/src/signature.ts
|
|
212
208
|
const SIGNATURE_HEADER = "x-nextcloud-talk-signature";
|
|
213
209
|
const RANDOM_HEADER = "x-nextcloud-talk-random";
|
|
214
210
|
const BACKEND_HEADER = "x-nextcloud-talk-backend";
|
|
@@ -245,8 +241,7 @@ function generateNextcloudTalkSignature(params) {
|
|
|
245
241
|
signature: createHmac("sha256", secret).update(random + body).digest("hex")
|
|
246
242
|
};
|
|
247
243
|
}
|
|
248
|
-
|
|
249
|
-
//#region extensions/nextcloud-talk/src/bot-preflight.ts
|
|
244
|
+
// extensions/nextcloud-talk/src/bot-preflight.ts
|
|
250
245
|
const BOT_FEATURE_RESPONSE = 2;
|
|
251
246
|
function normalizeUrlForMatch(value) {
|
|
252
247
|
const trimmed = value?.trim() ?? "";
|
|
@@ -347,8 +342,7 @@ async function probeNextcloudTalkBotResponseFeature(params) {
|
|
|
347
342
|
};
|
|
348
343
|
}
|
|
349
344
|
}
|
|
350
|
-
|
|
351
|
-
//#region extensions/nextcloud-talk/src/channel.adapters.ts
|
|
345
|
+
// extensions/nextcloud-talk/src/channel.adapters.ts
|
|
352
346
|
const nextcloudTalkConfigAdapter = createScopedChannelConfigAdapter({
|
|
353
347
|
sectionKey: "nextcloud-talk",
|
|
354
348
|
listAccountIds: listNextcloudTalkAccountIds,
|
|
@@ -388,8 +382,7 @@ const nextcloudTalkPairingTextAdapter = {
|
|
|
388
382
|
message: "OpenClaw: your access has been approved.",
|
|
389
383
|
normalizeAllowEntry: createPairingPrefixStripper(/^(nextcloud-talk|nc-talk|nc):/i, (entry) => normalizeLowercaseStringOrEmpty(entry))
|
|
390
384
|
};
|
|
391
|
-
|
|
392
|
-
//#region extensions/nextcloud-talk/src/config-schema.ts
|
|
385
|
+
// extensions/nextcloud-talk/src/config-schema.ts
|
|
393
386
|
const NextcloudTalkRoomSchema = buildGroupEntrySchema({ allowFrom: z.array(z.string()).optional() }).omit({ toolsBySender: true });
|
|
394
387
|
const NextcloudTalkNetworkSchema = z.object({
|
|
395
388
|
/** Dangerous opt-in for self-hosted Nextcloud Talk on trusted private/internal hosts. */
|
|
@@ -433,8 +426,7 @@ const NextcloudTalkConfigSchema = buildMultiAccountChannelSchema(NextcloudTalkAc
|
|
|
433
426
|
});
|
|
434
427
|
}
|
|
435
428
|
});
|
|
436
|
-
|
|
437
|
-
//#region src/gateway/gateway-http-route-contracts.ts
|
|
429
|
+
// src/gateway/gateway-http-route-contracts.ts
|
|
438
430
|
const GATEWAY_PROBE_ROUTES = /* @__PURE__ */ new Map([
|
|
439
431
|
["/health", "live"],
|
|
440
432
|
["/healthz", "live"],
|
|
@@ -450,8 +442,7 @@ function classifyGatewayProbePath(pathname) {
|
|
|
450
442
|
}
|
|
451
443
|
return "outside";
|
|
452
444
|
}
|
|
453
|
-
|
|
454
|
-
//#region packages/normalization-core/src/string-coerce.ts
|
|
445
|
+
// packages/normalization-core/src/string-coerce.ts
|
|
455
446
|
/** Trims string input and returns null for non-strings or empty strings. */
|
|
456
447
|
function normalizeNullableString(value) {
|
|
457
448
|
if (typeof value !== "string") return null;
|
|
@@ -470,13 +461,11 @@ function normalizeOptionalLowercaseString$1(value) {
|
|
|
470
461
|
function normalizeLowercaseStringOrEmpty$1(value) {
|
|
471
462
|
return normalizeOptionalLowercaseString$1(value) ?? "";
|
|
472
463
|
}
|
|
473
|
-
|
|
474
|
-
//#region src/plugins/http-path-prefix.ts
|
|
464
|
+
// src/plugins/http-path-prefix.ts
|
|
475
465
|
function prefixMatchPath(pathname, prefix) {
|
|
476
466
|
return pathname === prefix || pathname.startsWith(`${prefix}/`) || pathname.startsWith(`${prefix}%`);
|
|
477
467
|
}
|
|
478
|
-
|
|
479
|
-
//#region src/gateway/security-path.ts
|
|
468
|
+
// src/gateway/security-path.ts
|
|
480
469
|
const MAX_PATH_DECODE_PASSES = 32;
|
|
481
470
|
function normalizePathSeparators(pathname) {
|
|
482
471
|
const collapsed = pathname.replace(/\/{2,}/g, "/");
|
|
@@ -529,8 +518,7 @@ function canonicalizePathForSecurity(pathname) {
|
|
|
529
518
|
};
|
|
530
519
|
}
|
|
531
520
|
const PROTECTED_PLUGIN_ROUTE_PREFIXES = ["/api/channels"];
|
|
532
|
-
|
|
533
|
-
//#region src/gateway/server/plugins-http/path-context.ts
|
|
521
|
+
// src/gateway/server/plugins-http/path-context.ts
|
|
534
522
|
function normalizeProtectedPrefix(prefix) {
|
|
535
523
|
const collapsed = normalizeLowercaseStringOrEmpty$1(prefix).replace(/\/{2,}/g, "/");
|
|
536
524
|
if (collapsed.length <= 1) return collapsed || "/";
|
|
@@ -556,8 +544,7 @@ function resolvePluginRoutePathContext(pathname) {
|
|
|
556
544
|
rawNormalizedPath: canonical.rawNormalizedPath
|
|
557
545
|
};
|
|
558
546
|
}
|
|
559
|
-
|
|
560
|
-
//#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/gateway-config-runtime
|
|
547
|
+
// \0openclaw:bundled-sdk:openclaw/plugin-sdk/gateway-config-runtime
|
|
561
548
|
var gateway_config_runtime_exports = /* @__PURE__ */ __exportAll({
|
|
562
549
|
classifyGatewayProbePath: () => classifyGatewayProbePath,
|
|
563
550
|
isProtectedPluginRoutePathFromContext: () => isProtectedPluginRoutePathFromContext,
|
|
@@ -565,8 +552,7 @@ var gateway_config_runtime_exports = /* @__PURE__ */ __exportAll({
|
|
|
565
552
|
});
|
|
566
553
|
import * as import_openclaw_plugin_sdk_gateway_config_runtime from "openclaw/plugin-sdk/gateway-config-runtime";
|
|
567
554
|
__reExport(gateway_config_runtime_exports, import_openclaw_plugin_sdk_gateway_config_runtime);
|
|
568
|
-
|
|
569
|
-
//#region extensions/nextcloud-talk/src/webhook-route.ts
|
|
555
|
+
// extensions/nextcloud-talk/src/webhook-route.ts
|
|
570
556
|
const DEFAULT_NEXTCLOUD_TALK_WEBHOOK_PATH = "/nextcloud-talk-webhook";
|
|
571
557
|
function resolveNextcloudTalkLegacyWebhook(config) {
|
|
572
558
|
const listener = config.legacyWebhook;
|
|
@@ -582,8 +568,7 @@ function describeNextcloudTalkWebhookRouteConflict(path, gatewayPort) {
|
|
|
582
568
|
if (!reason) return;
|
|
583
569
|
return `Webhook path "${path}" ${reason} and cannot receive Nextcloud callbacks on the Gateway port. Set webhookPath to "${DEFAULT_NEXTCLOUD_TALK_WEBHOOK_PATH}" and update the Nextcloud bot callback and reverse-proxy upstream to Gateway port ${gatewayPort}${DEFAULT_NEXTCLOUD_TALK_WEBHOOK_PATH}.`;
|
|
584
570
|
}
|
|
585
|
-
|
|
586
|
-
//#region extensions/nextcloud-talk/src/doctor.ts
|
|
571
|
+
// extensions/nextcloud-talk/src/doctor.ts
|
|
587
572
|
function sanitizeLegacyReplaySegment(value) {
|
|
588
573
|
const trimmed = value.trim();
|
|
589
574
|
if (!trimmed) return "default";
|
|
@@ -646,8 +631,7 @@ const nextcloudTalkDoctor = {
|
|
|
646
631
|
};
|
|
647
632
|
}
|
|
648
633
|
};
|
|
649
|
-
|
|
650
|
-
//#region extensions/nextcloud-talk/src/policy.ts
|
|
634
|
+
// extensions/nextcloud-talk/src/policy.ts
|
|
651
635
|
function normalizeNextcloudTalkAllowEntry(raw) {
|
|
652
636
|
return raw.trim().replace(/^(nextcloud-talk|nc-talk|nc):/i, "").toLowerCase();
|
|
653
637
|
}
|
|
@@ -726,8 +710,7 @@ function resolveNextcloudTalkGroupRequireMention(params) {
|
|
|
726
710
|
path: exactPath
|
|
727
711
|
});
|
|
728
712
|
}
|
|
729
|
-
|
|
730
|
-
//#region extensions/nextcloud-talk/src/room-info.ts
|
|
713
|
+
// extensions/nextcloud-talk/src/room-info.ts
|
|
731
714
|
const ROOM_CACHE_TTL_MS = 3e5;
|
|
732
715
|
const ROOM_CACHE_ERROR_TTL_MS = 3e4;
|
|
733
716
|
const ROOM_CACHE_MAX_ENTRIES = 1e3;
|
|
@@ -805,8 +788,7 @@ async function resolveNextcloudTalkRoomKind(params) {
|
|
|
805
788
|
await release();
|
|
806
789
|
}
|
|
807
790
|
}
|
|
808
|
-
|
|
809
|
-
//#region extensions/nextcloud-talk/src/normalize.ts
|
|
791
|
+
// extensions/nextcloud-talk/src/normalize.ts
|
|
810
792
|
function stripNextcloudTalkTargetPrefix(raw) {
|
|
811
793
|
return raw.trim().replace(/^(nextcloud-talk|nc-talk|nc):/i, "").trim().replace(/^room:/i, "").trim() || void 0;
|
|
812
794
|
}
|
|
@@ -820,8 +802,7 @@ function looksLikeNextcloudTalkTargetId(raw) {
|
|
|
820
802
|
if (/^(nextcloud-talk|nc-talk|nc|room):/i.test(trimmed)) return true;
|
|
821
803
|
return /^[a-z0-9]{8,}$/i.test(trimmed);
|
|
822
804
|
}
|
|
823
|
-
|
|
824
|
-
//#region extensions/nextcloud-talk/src/send.ts
|
|
805
|
+
// extensions/nextcloud-talk/src/send.ts
|
|
825
806
|
const NEXTCLOUD_TALK_ERROR_SNIPPET_MAX_CHARS = 200;
|
|
826
807
|
const NEXTCLOUD_TALK_SEND_TIMEOUT_MS = 3e4;
|
|
827
808
|
/** Collapses and caps an already-redacted error body for display. */
|
|
@@ -967,8 +948,7 @@ async function sendReactionNextcloudTalk(roomToken, messageId, reaction, opts) {
|
|
|
967
948
|
await release();
|
|
968
949
|
}
|
|
969
950
|
}
|
|
970
|
-
|
|
971
|
-
//#region extensions/nextcloud-talk/src/inbound.ts
|
|
951
|
+
// extensions/nextcloud-talk/src/inbound.ts
|
|
972
952
|
const CHANNEL_ID = "nextcloud-talk";
|
|
973
953
|
function hasAllowEntries(entries) {
|
|
974
954
|
return normalizeNextcloudTalkAllowlist(entries).length > 0;
|
|
@@ -1332,8 +1312,7 @@ async function migrateNextcloudTalkLegacyReplayState(params) {
|
|
|
1332
1312
|
await params.store.clear();
|
|
1333
1313
|
return migrated;
|
|
1334
1314
|
}
|
|
1335
|
-
|
|
1336
|
-
//#region extensions/nextcloud-talk/src/monitor.ts
|
|
1315
|
+
// extensions/nextcloud-talk/src/monitor.ts
|
|
1337
1316
|
const PREAUTH_WEBHOOK_MAX_BODY_BYTES = 65536;
|
|
1338
1317
|
const NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_HEADER = "x-openclaw-delivery-accepted";
|
|
1339
1318
|
const NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_VALUE = "durable";
|
|
@@ -1555,8 +1534,7 @@ function registerNextcloudTalkWebhook(target) {
|
|
|
1555
1534
|
throw error;
|
|
1556
1535
|
}
|
|
1557
1536
|
}
|
|
1558
|
-
|
|
1559
|
-
//#region extensions/nextcloud-talk/src/webhook-spool.ts
|
|
1537
|
+
// extensions/nextcloud-talk/src/webhook-spool.ts
|
|
1560
1538
|
const NEXTCLOUD_TALK_INGRESS_POLL_INTERVAL_MS = 500;
|
|
1561
1539
|
function describeIgnoredWebhookEvent(rawEvent) {
|
|
1562
1540
|
const envelope = parseRawObject(rawEvent);
|
|
@@ -1713,8 +1691,7 @@ function createNextcloudTalkWebhookSpool(options) {
|
|
|
1713
1691
|
}
|
|
1714
1692
|
};
|
|
1715
1693
|
}
|
|
1716
|
-
|
|
1717
|
-
//#region extensions/nextcloud-talk/src/monitor-runtime.ts
|
|
1694
|
+
// extensions/nextcloud-talk/src/monitor-runtime.ts
|
|
1718
1695
|
function normalizeOrigin(value) {
|
|
1719
1696
|
return URL.parse(value)?.origin.toLowerCase() ?? null;
|
|
1720
1697
|
}
|
|
@@ -1808,8 +1785,7 @@ async function monitorNextcloudTalkProvider(opts) {
|
|
|
1808
1785
|
if (legacyListener) logger.info(`[nextcloud-talk:${account.accountId}] legacy webhook listener ${legacyListener.host}:${legacyListener.port} forwards to the Gateway route. After verifying the callback or proxy upstream uses the Gateway port, remove the legacyWebhook pin; use legacyWebhook: false to override an inherited endpoint.`);
|
|
1809
1786
|
return { stop };
|
|
1810
1787
|
}
|
|
1811
|
-
|
|
1812
|
-
//#region extensions/nextcloud-talk/src/gateway.ts
|
|
1788
|
+
// extensions/nextcloud-talk/src/gateway.ts
|
|
1813
1789
|
const nextcloudTalkGatewayAdapter = {
|
|
1814
1790
|
startAccount: async (ctx) => {
|
|
1815
1791
|
const account = ctx.account;
|
|
@@ -1855,8 +1831,7 @@ const nextcloudTalkGatewayAdapter = {
|
|
|
1855
1831
|
};
|
|
1856
1832
|
}
|
|
1857
1833
|
};
|
|
1858
|
-
|
|
1859
|
-
//#region extensions/nextcloud-talk/src/message-actions.ts
|
|
1834
|
+
// extensions/nextcloud-talk/src/message-actions.ts
|
|
1860
1835
|
const providerId = "nextcloud-talk";
|
|
1861
1836
|
function isAccountConfigured(account) {
|
|
1862
1837
|
return Boolean(account.enabled && account.secret?.trim() && account.baseUrl?.trim());
|
|
@@ -1909,8 +1884,7 @@ const nextcloudTalkMessageActions = {
|
|
|
1909
1884
|
throw new Error(`Action ${action} not supported for ${providerId}.`);
|
|
1910
1885
|
}
|
|
1911
1886
|
};
|
|
1912
|
-
|
|
1913
|
-
//#region extensions/nextcloud-talk/src/message-adapter.ts
|
|
1887
|
+
// extensions/nextcloud-talk/src/message-adapter.ts
|
|
1914
1888
|
function sendNextcloudTalkMessage(ctx, text = ctx.text) {
|
|
1915
1889
|
return sendMessageNextcloudTalk(ctx.to, text, {
|
|
1916
1890
|
accountId: ctx.accountId ?? void 0,
|
|
@@ -1932,8 +1906,7 @@ const nextcloudTalkMessageAdapter = defineChannelMessageAdapter({
|
|
|
1932
1906
|
media: (ctx) => sendNextcloudTalkMessage(ctx, ctx.mediaUrl ? `${ctx.text}\n\nAttachment: ${ctx.mediaUrl}` : ctx.text)
|
|
1933
1907
|
}
|
|
1934
1908
|
});
|
|
1935
|
-
|
|
1936
|
-
//#region extensions/nextcloud-talk/src/session-route.ts
|
|
1909
|
+
// extensions/nextcloud-talk/src/session-route.ts
|
|
1937
1910
|
function resolveNextcloudTalkOutboundSessionRoute(params) {
|
|
1938
1911
|
const roomId = stripNextcloudTalkTargetPrefix(params.target);
|
|
1939
1912
|
if (!roomId) return null;
|
|
@@ -1952,8 +1925,7 @@ function resolveNextcloudTalkOutboundSessionRoute(params) {
|
|
|
1952
1925
|
to: `nextcloud-talk:${roomId}`
|
|
1953
1926
|
});
|
|
1954
1927
|
}
|
|
1955
|
-
|
|
1956
|
-
//#region extensions/nextcloud-talk/src/setup-core.ts
|
|
1928
|
+
// extensions/nextcloud-talk/src/setup-core.ts
|
|
1957
1929
|
const t$1 = createSetupTranslator$1();
|
|
1958
1930
|
const channel$1 = "nextcloud-talk";
|
|
1959
1931
|
function normalizeNextcloudTalkBaseUrl(value) {
|
|
@@ -2114,8 +2086,7 @@ const nextcloudTalkSetupContract = defineChannelSetupContract({
|
|
|
2114
2086
|
},
|
|
2115
2087
|
legacyAdapter: nextcloudTalkSetupAdapter
|
|
2116
2088
|
});
|
|
2117
|
-
|
|
2118
|
-
//#region extensions/nextcloud-talk/src/setup-surface.ts
|
|
2089
|
+
// extensions/nextcloud-talk/src/setup-surface.ts
|
|
2119
2090
|
const t = createSetupTranslator();
|
|
2120
2091
|
const channel = "nextcloud-talk";
|
|
2121
2092
|
const CONFIGURE_API_FLAG = "__nextcloudTalkConfigureApiCredentials";
|
|
@@ -2243,8 +2214,7 @@ const nextcloudTalkSetupWizard = {
|
|
|
2243
2214
|
dmPolicy: nextcloudTalkDmPolicy,
|
|
2244
2215
|
disable: (cfg) => setSetupChannelEnabled(cfg, channel, false)
|
|
2245
2216
|
};
|
|
2246
|
-
|
|
2247
|
-
//#region extensions/nextcloud-talk/src/channel.ts
|
|
2217
|
+
// extensions/nextcloud-talk/src/channel.ts
|
|
2248
2218
|
const meta = {
|
|
2249
2219
|
id: "nextcloud-talk",
|
|
2250
2220
|
label: "Nextcloud Talk",
|
|
@@ -2397,5 +2367,4 @@ const nextcloudTalkPlugin = createChatChannelPlugin({
|
|
|
2397
2367
|
}
|
|
2398
2368
|
}
|
|
2399
2369
|
});
|
|
2400
|
-
//#endregion
|
|
2401
2370
|
export { nextcloudTalkPlugin as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { hasConfiguredNextcloudTalkChannelState, listNextcloudTalkAccountIds, mergeNextcloudTalkAccountConfig } from "../configured-state.js";
|
|
2
|
-
|
|
2
|
+
// \0rolldown/runtime.js
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -24,8 +24,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
24
24
|
return to;
|
|
25
25
|
};
|
|
26
26
|
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
27
|
-
|
|
28
|
-
//#region packages/normalization-core/src/record-coerce.ts
|
|
27
|
+
// packages/normalization-core/src/record-coerce.ts
|
|
29
28
|
/** Type guard for non-array object records at browser-safe boundaries. */
|
|
30
29
|
function isRecord(value) {
|
|
31
30
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
@@ -34,8 +33,7 @@ function isRecord(value) {
|
|
|
34
33
|
function asNullableRecord(value) {
|
|
35
34
|
return isRecord(value) ? value : null;
|
|
36
35
|
}
|
|
37
|
-
|
|
38
|
-
//#region src/config/channel-config-normalization.ts
|
|
36
|
+
// src/config/channel-config-normalization.ts
|
|
39
37
|
/** Applies one channel-specific doctor migration to every object-shaped account. */
|
|
40
38
|
function normalizeChannelAccounts(params) {
|
|
41
39
|
const rawAccounts = asNullableRecord(params.entry.accounts);
|
|
@@ -111,8 +109,7 @@ function normalizeChannelConfigEntries(params) {
|
|
|
111
109
|
changes
|
|
112
110
|
};
|
|
113
111
|
}
|
|
114
|
-
|
|
115
|
-
//#region src/plugin-sdk/legacy-webhook-listener-migration.ts
|
|
112
|
+
// src/plugin-sdk/legacy-webhook-listener-migration.ts
|
|
116
113
|
/** Preserve explicitly configured webhook listeners while moving ingress onto Gateway routes. */
|
|
117
114
|
function createLegacyWebhookListenerDoctorContract(params) {
|
|
118
115
|
const portKey = params.portKey ?? "webhookPort";
|
|
@@ -182,13 +179,11 @@ function createLegacyWebhookListenerDoctorContract(params) {
|
|
|
182
179
|
}
|
|
183
180
|
};
|
|
184
181
|
}
|
|
185
|
-
|
|
186
|
-
//#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
|
|
182
|
+
// \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
|
|
187
183
|
var runtime_doctor_migrations_exports = /* @__PURE__ */ __exportAll({ createLegacyWebhookListenerDoctorContract: () => createLegacyWebhookListenerDoctorContract });
|
|
188
184
|
import * as import_openclaw_plugin_sdk_runtime_doctor_migrations from "openclaw/plugin-sdk/runtime-doctor-migrations";
|
|
189
185
|
__reExport(runtime_doctor_migrations_exports, import_openclaw_plugin_sdk_runtime_doctor_migrations);
|
|
190
|
-
|
|
191
|
-
//#region extensions/nextcloud-talk/src/doctor-contract.ts
|
|
186
|
+
// extensions/nextcloud-talk/src/doctor-contract.ts
|
|
192
187
|
const webhookContract = createLegacyWebhookListenerDoctorContract({
|
|
193
188
|
channelKey: "nextcloud-talk",
|
|
194
189
|
defaultHost: "0.0.0.0",
|
|
@@ -220,5 +215,4 @@ function normalizeCompatibilityConfig({ cfg }) {
|
|
|
220
215
|
historicalWebhookAccountIds: webhook.historicalWebhookAccountIds
|
|
221
216
|
};
|
|
222
217
|
}
|
|
223
|
-
//#endregion
|
|
224
218
|
export { __exportAll as a, normalizeHistoricalWebhookConfig as i, legacyConfigRules as n, __reExport as o, normalizeCompatibilityConfig as r, historicalWebhookListener as t };
|
|
@@ -4,10 +4,9 @@ import { GROUP_POLICY_BLOCKED_LABEL, resolveAllowlistProviderRuntimeGroupPolicy,
|
|
|
4
4
|
import { deliverFormattedTextWithAttachments } from "openclaw/plugin-sdk/reply-payload";
|
|
5
5
|
import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/ssrf-runtime";
|
|
6
6
|
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
|
|
7
|
-
|
|
7
|
+
// extensions/nextcloud-talk/src/runtime.ts
|
|
8
8
|
const { setRuntime: setNextcloudTalkRuntime, getRuntime: getNextcloudTalkRuntime, tryGetRuntime: getOptionalNextcloudTalkRuntime } = createPluginRuntimeStore({
|
|
9
9
|
pluginId: "nextcloud-talk",
|
|
10
10
|
errorMessage: "Nextcloud Talk runtime not initialized"
|
|
11
11
|
});
|
|
12
|
-
//#endregion
|
|
13
12
|
export { logInboundDrop as a, warnMissingProviderGroupPolicyFallbackOnce as c, setNextcloudTalkRuntime as d, fetchWithSsrFGuard as i, getNextcloudTalkRuntime as l, createChannelPairingController as n, resolveAllowlistProviderRuntimeGroupPolicy as o, deliverFormattedTextWithAttachments as r, resolveDefaultGroupPolicy as s, GROUP_POLICY_BLOCKED_LABEL as t, getOptionalNextcloudTalkRuntime as u };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createSimpleChannelSecretContract } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
|
|
2
|
-
|
|
2
|
+
// extensions/nextcloud-talk/src/secret-contract.ts
|
|
3
3
|
const channelSecrets = createSimpleChannelSecretContract({
|
|
4
4
|
channelKey: "nextcloud-talk",
|
|
5
5
|
label: "Nextcloud Talk",
|
|
@@ -11,5 +11,4 @@ const channelSecrets = createSimpleChannelSecretContract({
|
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
13
|
const { secretTargetRegistryEntries, collectRuntimeConfigAssignments } = channelSecrets;
|
|
14
|
-
//#endregion
|
|
15
14
|
export { collectRuntimeConfigAssignments as n, secretTargetRegistryEntries as r, channelSecrets as t };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { t as channelSecrets, n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-
|
|
1
|
+
export { t as channelSecrets, n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-BHyPrmz3.mjs";
|
|
2
2
|
import "../secret-contract-api.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"entries":[{"output":"api.js","source":"extensions/nextcloud-talk/api.ts"},{"output":"channel-plugin-api.js","source":"extensions/nextcloud-talk/channel-plugin-api.ts"},{"output":"configured-state.js","source":"extensions/nextcloud-talk/configured-state.ts"},{"output":"doctor-contract-api.js","source":"extensions/nextcloud-talk/doctor-contract-api.ts"},{"output":"index.js","source":"extensions/nextcloud-talk/index.ts"},{"output":"runtime-api.js","source":"extensions/nextcloud-talk/runtime-api.ts"},{"output":"secret-contract-api.js","source":"extensions/nextcloud-talk/secret-contract-api.ts"},{"output":"setup-entry.js","source":"extensions/nextcloud-talk/setup-entry.ts"}],"chunks":[{"output":".setup/api-
|
|
1
|
+
{"version":3,"entries":[{"output":"api.js","source":"extensions/nextcloud-talk/api.ts"},{"output":"channel-plugin-api.js","source":"extensions/nextcloud-talk/channel-plugin-api.ts"},{"output":"configured-state.js","source":"extensions/nextcloud-talk/configured-state.ts"},{"output":"doctor-contract-api.js","source":"extensions/nextcloud-talk/doctor-contract-api.ts"},{"output":"index.js","source":"extensions/nextcloud-talk/index.ts"},{"output":"runtime-api.js","source":"extensions/nextcloud-talk/runtime-api.ts"},{"output":"secret-contract-api.js","source":"extensions/nextcloud-talk/secret-contract-api.ts"},{"output":"setup-entry.js","source":"extensions/nextcloud-talk/setup-entry.ts"}],"chunks":[{"output":".setup/api-BgnUYkO3.mjs","sha256":"945cc048854654a4ada1853cc1aed051db4abccd2daabf3096f074f9e81fd970","facadeSource":"extensions/nextcloud-talk/api.ts","sources":[]},{"output":".setup/channel-D9tHRtkv.mjs","sha256":"899d4001d61c145d8eb353d4b5e91260c9c3ef8f1f4cc885c76486dd6e73d5d0","facadeSource":null,"sources":["extensions/nextcloud-talk/src/accounts.ts","extensions/nextcloud-talk/src/api-credentials.ts","extensions/nextcloud-talk/src/approval-auth.ts","extensions/nextcloud-talk/src/bot-preflight.ts","extensions/nextcloud-talk/src/channel.adapters.ts","extensions/nextcloud-talk/src/channel.ts","extensions/nextcloud-talk/src/config-schema.ts","extensions/nextcloud-talk/src/doctor.ts","extensions/nextcloud-talk/src/gateway.ts","extensions/nextcloud-talk/src/guarded-response.ts","extensions/nextcloud-talk/src/inbound.ts","extensions/nextcloud-talk/src/message-actions.ts","extensions/nextcloud-talk/src/message-adapter.ts","extensions/nextcloud-talk/src/monitor-runtime.ts","extensions/nextcloud-talk/src/monitor.ts","extensions/nextcloud-talk/src/normalize.ts","extensions/nextcloud-talk/src/policy.ts","extensions/nextcloud-talk/src/replay-migration-contract.ts","extensions/nextcloud-talk/src/room-info.ts","extensions/nextcloud-talk/src/send.ts","extensions/nextcloud-talk/src/session-route.ts","extensions/nextcloud-talk/src/setup-core.ts","extensions/nextcloud-talk/src/setup-surface.ts","extensions/nextcloud-talk/src/signature.ts","extensions/nextcloud-talk/src/webhook-route.ts","extensions/nextcloud-talk/src/webhook-spool-state.ts","extensions/nextcloud-talk/src/webhook-spool.ts","packages/normalization-core/src/string-coerce.ts","src/gateway/gateway-http-route-contracts.ts","src/gateway/security-path.ts","src/gateway/server/plugins-http/path-context.ts","src/plugins/http-path-prefix.ts"]},{"output":".setup/doctor-contract-CkWQa5uZ.mjs","sha256":"b580887eb445ab10c67ee1a057982cd3be79d68e2c3440b3f2a46f2a8852c55b","facadeSource":null,"sources":["extensions/nextcloud-talk/src/doctor-contract.ts","packages/normalization-core/src/record-coerce.ts","src/config/channel-config-normalization.ts","src/plugin-sdk/legacy-webhook-listener-migration.ts"]},{"output":".setup/runtime-api-DSz4xBAm.mjs","sha256":"79e7b7e7515c5d1f25e7b68e5414e33205303525bab418b7c6dc5e213fd0720c","facadeSource":null,"sources":["extensions/nextcloud-talk/src/runtime.ts"]},{"output":".setup/secret-contract-api-CKCDZ3m8.mjs","sha256":"933a73cbc5f8e153d60c80ea144877ff4103c0c6b5f4d2fb06597a1cb8714297","facadeSource":"extensions/nextcloud-talk/secret-contract-api.ts","sources":[]},{"output":".setup/secret-contract-BHyPrmz3.mjs","sha256":"5f6db1b8c1dca4ba0353e9ab2c801f210de8e341d9d4b766f0dfda338024bd71","facadeSource":null,"sources":["extensions/nextcloud-talk/src/secret-contract.ts"]},{"output":"api.js","sha256":"62e2b17453728f9567dc0394c6ae4b5bba68a906a7f4f63071ad317d2c9d8c5c","facadeSource":"extensions/nextcloud-talk/api.ts","sources":[]},{"output":"channel-plugin-api.js","sha256":"62e2b17453728f9567dc0394c6ae4b5bba68a906a7f4f63071ad317d2c9d8c5c","facadeSource":"extensions/nextcloud-talk/channel-plugin-api.ts","sources":[]},{"output":"configured-state.js","sha256":"6b5a8e74636ef9d9248d993b87f8fc2086b5407fb6bd94e02be183293db99a2d","facadeSource":"extensions/nextcloud-talk/configured-state.ts","sources":["extensions/nextcloud-talk/configured-state.ts"]},{"output":"doctor-contract-api.js","sha256":"71237fb5c510be1302851b9fb7b264dd4e0d0095be206e50ffce4b5890ace54f","facadeSource":"extensions/nextcloud-talk/doctor-contract-api.ts","sources":[]},{"output":"index.js","sha256":"16bcc875626f7dd3bc4c1195210f856deaa9c3757abe5cea2a1d90cb2877cd22","facadeSource":"extensions/nextcloud-talk/index.ts","sources":["extensions/nextcloud-talk/index.ts"]},{"output":"runtime-api.js","sha256":"9dc767e1c55c58a1e7abbefa444b966bd60321a9bd0d23a8707d49dbdd847aee","facadeSource":"extensions/nextcloud-talk/runtime-api.ts","sources":[]},{"output":"secret-contract-api.js","sha256":"79a0a9fc59d00a3c7d8a9ccdd12ae4d7679ef97821b50bd5e40cbdb0de7a814a","facadeSource":"extensions/nextcloud-talk/secret-contract-api.ts","sources":[]},{"output":"setup-entry.js","sha256":"e8dae8c12575ca86353d6476dd9a685d4befa32fe948d12a69a89f970d1329d8","facadeSource":"extensions/nextcloud-talk/setup-entry.ts","sources":["extensions/nextcloud-talk/setup-entry.ts"]}],"unrenderedSources":["extensions/nextcloud-talk/api.ts","extensions/nextcloud-talk/channel-plugin-api.ts","extensions/nextcloud-talk/config-doctor-api.ts","extensions/nextcloud-talk/doctor-contract-api.ts","extensions/nextcloud-talk/runtime-api.ts","extensions/nextcloud-talk/secret-contract-api.ts","extensions/nextcloud-talk/src/channel-api.ts","extensions/nextcloud-talk/src/send.runtime.ts"]}
|
package/dist/api.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as nextcloudTalkPlugin } from "./.setup/channel-
|
|
1
|
+
export { t as nextcloudTalkPlugin } from "./.setup/channel-D9tHRtkv.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as nextcloudTalkPlugin } from "./.setup/channel-
|
|
1
|
+
export { t as nextcloudTalkPlugin } from "./.setup/channel-D9tHRtkv.mjs";
|
package/dist/configured-state.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DEFAULT_ACCOUNT_ID, createAccountListHelpers, hasConfiguredAccountValue, normalizeAccountId } from "openclaw/plugin-sdk/account-core";
|
|
2
|
-
|
|
2
|
+
// extensions/nextcloud-talk/configured-state.ts
|
|
3
3
|
const { listAccountIds: listNextcloudTalkAccountIds, resolveDefaultAccountId: resolveDefaultNextcloudTalkAccountId, resolveAccountConfig: mergeNextcloudTalkAccountConfig } = createAccountListHelpers("nextcloud-talk", {
|
|
4
4
|
normalizeAccountId,
|
|
5
5
|
omitKeys: ["defaultAccount"],
|
|
@@ -20,5 +20,4 @@ function hasConfiguredNextcloudTalkChannelState(params) {
|
|
|
20
20
|
}
|
|
21
21
|
return Object.entries(channel?.accounts ?? {}).some(([accountId, account]) => accountId !== DEFAULT_ACCOUNT_ID && account.enabled !== false && hasConfiguredNextcloudAccount(mergeNextcloudTalkAccountConfig(params.cfg, accountId), {}));
|
|
22
22
|
}
|
|
23
|
-
//#endregion
|
|
24
23
|
export { hasConfiguredNextcloudTalkChannelState, listNextcloudTalkAccountIds, mergeNextcloudTalkAccountConfig, resolveDefaultNextcloudTalkAccountId };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as historicalWebhookListener, n as legacyConfigRules, r as normalizeCompatibilityConfig, i as normalizeHistoricalWebhookConfig } from "./.setup/doctor-contract-
|
|
1
|
+
export { t as historicalWebhookListener, n as legacyConfigRules, r as normalizeCompatibilityConfig, i as normalizeHistoricalWebhookConfig } from "./.setup/doctor-contract-CkWQa5uZ.mjs";
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineBundledChannelEntry } from "openclaw/plugin-sdk/channel-entry-contract";
|
|
2
|
-
|
|
2
|
+
// extensions/nextcloud-talk/index.ts
|
|
3
3
|
var nextcloud_talk_default = defineBundledChannelEntry({
|
|
4
4
|
id: "nextcloud-talk",
|
|
5
5
|
name: "Nextcloud Talk",
|
|
@@ -18,5 +18,4 @@ var nextcloud_talk_default = defineBundledChannelEntry({
|
|
|
18
18
|
exportName: "setNextcloudTalkRuntime"
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
|
-
//#endregion
|
|
22
21
|
export { nextcloud_talk_default as default };
|
package/dist/runtime-api.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as GROUP_POLICY_BLOCKED_LABEL, n as createChannelPairingController, r as deliverFormattedTextWithAttachments, i as fetchWithSsrFGuard, a as logInboundDrop, o as resolveAllowlistProviderRuntimeGroupPolicy, s as resolveDefaultGroupPolicy, d as setNextcloudTalkRuntime, c as warnMissingProviderGroupPolicyFallbackOnce } from "./.setup/runtime-api-
|
|
1
|
+
export { t as GROUP_POLICY_BLOCKED_LABEL, n as createChannelPairingController, r as deliverFormattedTextWithAttachments, i as fetchWithSsrFGuard, a as logInboundDrop, o as resolveAllowlistProviderRuntimeGroupPolicy, s as resolveDefaultGroupPolicy, d as setNextcloudTalkRuntime, c as warnMissingProviderGroupPolicyFallbackOnce } from "./.setup/runtime-api-DSz4xBAm.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as channelSecrets, n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./.setup/secret-contract-
|
|
1
|
+
export { t as channelSecrets, n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./.setup/secret-contract-BHyPrmz3.mjs";
|
package/dist/setup-entry.js
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { defineBundledChannelSetupEntry } from "openclaw/plugin-sdk/channel-entry-contract";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
|
|
3
|
+
// extensions/nextcloud-talk/setup-entry.ts
|
|
4
4
|
var setup_entry_default = defineBundledChannelSetupEntry({
|
|
5
5
|
importMetaUrl: import.meta.url,
|
|
6
6
|
plugin: {
|
|
7
|
-
specifier: fileURLToPath(new URL(".setup/api-
|
|
7
|
+
specifier: fileURLToPath(new URL(".setup/api-BgnUYkO3.mjs", import.meta.url).href),
|
|
8
8
|
exportName: "nextcloudTalkPlugin"
|
|
9
9
|
},
|
|
10
10
|
secrets: {
|
|
11
|
-
specifier: fileURLToPath(new URL(".setup/secret-contract-api-
|
|
11
|
+
specifier: fileURLToPath(new URL(".setup/secret-contract-api-CKCDZ3m8.mjs", import.meta.url).href),
|
|
12
12
|
exportName: "channelSecrets"
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
|
-
//#endregion
|
|
16
15
|
export { setup_entry_default as default };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/nextcloud-talk",
|
|
3
|
-
"version": "2026.10.10
|
|
3
|
+
"version": "2026.10.10",
|
|
4
4
|
"description": "OpenClaw Nextcloud Talk channel plugin for conversations.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"type": "module",
|
|
10
10
|
"peerDependencies": {
|
|
11
|
-
"openclaw": ">=2026.10.10
|
|
11
|
+
"openclaw": ">=2026.10.10"
|
|
12
12
|
},
|
|
13
13
|
"peerDependenciesMeta": {
|
|
14
14
|
"openclaw": {
|
|
@@ -130,10 +130,10 @@
|
|
|
130
130
|
"minHostVersion": ">=2026.4.10"
|
|
131
131
|
},
|
|
132
132
|
"compat": {
|
|
133
|
-
"pluginApi": ">=2026.10.10
|
|
133
|
+
"pluginApi": ">=2026.10.10"
|
|
134
134
|
},
|
|
135
135
|
"build": {
|
|
136
|
-
"openclawVersion": "2026.10.10
|
|
136
|
+
"openclawVersion": "2026.10.10"
|
|
137
137
|
},
|
|
138
138
|
"release": {
|
|
139
139
|
"publishToClawHub": true,
|