@openclaw/nextcloud-talk 2026.7.2-beta.4 → 2026.7.2-beta.7

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/README.md CHANGED
@@ -5,7 +5,7 @@ Official OpenClaw channel plugin for Nextcloud Talk conversations.
5
5
  Install from OpenClaw:
6
6
 
7
7
  ```bash
8
- openclaw plugin add @openclaw/nextcloud-talk
8
+ openclaw plugins install @openclaw/nextcloud-talk
9
9
  ```
10
10
 
11
11
  Configure the Nextcloud server and Talk credentials in OpenClaw, then enable the conversations where agents should receive and send messages.
package/dist/api.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as nextcloudTalkPlugin } from "./channel-DtnECxVM.js";
1
+ import { t as nextcloudTalkPlugin } from "./channel-B9yquEb1.js";
2
2
  export { nextcloudTalkPlugin };
@@ -1,15 +1,16 @@
1
1
  import { a as fetchWithSsrFGuard, c as resolveDefaultGroupPolicy, i as deliverFormattedTextWithAttachments, l as warnMissingProviderGroupPolicyFallbackOnce, o as logInboundDrop, r as createChannelPairingController, s as resolveAllowlistProviderRuntimeGroupPolicy, t as GROUP_POLICY_BLOCKED_LABEL, u as getNextcloudTalkRuntime } from "./runtime-api-BKsxTw4J.js";
2
2
  import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-fNhK1wag.js";
3
3
  import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-DGgvfVqm.js";
4
- import { describeWebhookAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
4
+ import { createAccountListHelpers, describeWebhookAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
5
5
  import { createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
6
6
  import { createLoggedPairingApprovalNotifier, createPairingPrefixStripper } from "openclaw/plugin-sdk/channel-pairing";
7
7
  import { createAllowlistProviderRouteAllowlistWarningCollector, resolveScopeRequireMention, resolveScopeToolsPolicy } from "openclaw/plugin-sdk/channel-policy";
8
8
  import { buildWebhookChannelStatusSummary, createComputedAccountStatusAdapter, createDefaultChannelRuntimeState } from "openclaw/plugin-sdk/status-helpers";
9
- import { convertMarkdownTables, renderMarkdownWithMarkers, sanitizeAssistantVisibleText } from "openclaw/plugin-sdk/text-chunking";
9
+ import { FormatCapabilityProfile, convertMarkdownTables, renderMarkdownWithMarkers, sanitizeAssistantVisibleText } from "openclaw/plugin-sdk/text-chunking";
10
10
  import { createChannelApprovalAuth } from "openclaw/plugin-sdk/approval-auth-runtime";
11
11
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
12
- import { DEFAULT_ACCOUNT_ID, createAccountListHelpers, hasConfiguredAccountValue, normalizeAccountId, resolveAccountWithDefaultFallback, resolveMergedAccountConfig } from "openclaw/plugin-sdk/account-core";
12
+ import { DEFAULT_ACCOUNT_ID, hasConfiguredAccountValue, normalizeAccountId, resolveAccountWithDefaultFallback } from "openclaw/plugin-sdk/account-core";
13
+ import { isTruthyEnvValue } from "openclaw/plugin-sdk/runtime-env";
13
14
  import { tryReadSecretFileSync } from "openclaw/plugin-sdk/secret-file-runtime";
14
15
  import { buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
15
16
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
@@ -39,8 +40,10 @@ import { pruneMapToMaxSize } from "openclaw/plugin-sdk/collection-runtime";
39
40
  import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
40
41
  import { createServer } from "node:http";
41
42
  import { WEBHOOK_RATE_LIMIT_DEFAULTS, createAuthRateLimiter, isRequestBodyLimitError, readRequestBodyWithLimit, requestBodyErrorToText } from "openclaw/plugin-sdk/webhook-ingress";
43
+ import { isRecord } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
42
44
  import { jsonResult, readStringParam, resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
43
45
  import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1, buildOutboundBaseSessionKey, normalizeAccountId as normalizeAccountId$1 } from "openclaw/plugin-sdk/routing";
46
+ import { createChannelDmPolicy } from "openclaw/plugin-sdk/channel-dm-policy";
44
47
  import { defineChannelSetupContract } from "openclaw/plugin-sdk/channel-setup";
45
48
  import { applyAccountNameToChannelSection, baseUrlTextInput, createSetupTranslator, createStandardChannelSetupStatus, defineTokenCredential, formatDocsLink, patchScopedAccountConfig, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
46
49
  import { createSetupInputPresenceValidator, createSetupTranslator as createSetupTranslator$1, mergeAllowFromEntries, promptParsedAllowFromForAccount, resolveSetupAccountId } from "openclaw/plugin-sdk/setup-runtime";
@@ -77,15 +80,12 @@ function resolveNextcloudTalkApiCredentials(params) {
77
80
  }
78
81
  //#endregion
79
82
  //#region extensions/nextcloud-talk/src/accounts.ts
80
- function isTruthyEnvValue(value) {
81
- const normalized = normalizeLowercaseStringOrEmpty(value);
82
- return normalized === "true" || normalized === "1" || normalized === "yes" || normalized === "on";
83
- }
84
83
  const debugAccounts = (...args) => {
85
84
  if (isTruthyEnvValue(process.env.OPENCLAW_DEBUG_NEXTCLOUD_TALK_ACCOUNTS)) console.warn("[nextcloud-talk:accounts]", ...args);
86
85
  };
87
- const { listAccountIds: listNextcloudTalkAccountIdsInternal, resolveDefaultAccountId: resolveDefaultNextcloudTalkAccountId } = createAccountListHelpers("nextcloud-talk", {
86
+ const { listAccountIds: listNextcloudTalkAccountIdsInternal, resolveDefaultAccountId: resolveDefaultNextcloudTalkAccountId, resolveAccountConfig: mergeNextcloudTalkAccountConfig } = createAccountListHelpers("nextcloud-talk", {
88
87
  normalizeAccountId,
88
+ omitKeys: ["defaultAccount"],
89
89
  hasImplicitDefaultAccount: (cfg) => {
90
90
  const channel = cfg.channels?.["nextcloud-talk"];
91
91
  return Boolean(channel?.baseUrl?.trim() && (hasConfiguredAccountValue(channel.botSecret) || channel.botSecretFile?.trim() || process.env.NEXTCLOUD_TALK_BOT_SECRET?.trim()));
@@ -96,15 +96,6 @@ function listNextcloudTalkAccountIds(cfg) {
96
96
  debugAccounts("listNextcloudTalkAccountIds", ids);
97
97
  return ids;
98
98
  }
99
- function mergeNextcloudTalkAccountConfig(cfg, accountId) {
100
- return resolveMergedAccountConfig({
101
- channelConfig: cfg.channels?.["nextcloud-talk"],
102
- accounts: cfg.channels?.["nextcloud-talk"]?.accounts,
103
- accountId,
104
- omitKeys: ["defaultAccount"],
105
- normalizeAccountId
106
- });
107
- }
108
99
  function resolveNextcloudTalkSecret(cfg, opts) {
109
100
  const resolvedAccountId = opts.accountId ?? resolveDefaultNextcloudTalkAccountId(cfg);
110
101
  const merged = mergeNextcloudTalkAccountConfig(cfg, resolvedAccountId);
@@ -706,33 +697,14 @@ function looksLikeNextcloudTalkTargetId(raw) {
706
697
  const NEXTCLOUD_TALK_ERROR_SNIPPET_MAX_BYTES = 8 * 1024;
707
698
  const NEXTCLOUD_TALK_ERROR_SNIPPET_MAX_CHARS = 200;
708
699
  const NEXTCLOUD_TALK_SEND_TIMEOUT_MS = 3e4;
709
- const NEXTCLOUD_TALK_FORMAT_PROFILE = {
700
+ const NEXTCLOUD_TALK_FORMAT_PROFILE = FormatCapabilityProfile.define({
710
701
  mechanism: "markdown",
711
- constructs: {
712
- bold: "native",
713
- italic: "native",
714
- underline: "native",
715
- strikethrough: "native",
716
- spoiler: "native",
717
- codeInline: "native",
718
- codeBlock: "native",
719
- codeLanguage: "native",
720
- linkLabel: "native",
721
- heading: "native",
722
- bulletList: "native",
723
- orderedList: "native",
724
- taskList: "native",
725
- table: "native",
726
- blockquote: "native",
727
- image: "native",
728
- mention: "native"
729
- },
730
702
  chunk: {
731
703
  limit: 4e3,
732
704
  unit: "chars",
733
705
  hardCap: 32e3
734
706
  }
735
- };
707
+ });
736
708
  function renderNextcloudTalkMarkdown(markdown) {
737
709
  return renderMarkdownWithMarkers({
738
710
  text: markdown,
@@ -1228,9 +1200,6 @@ var NextcloudTalkWebhookPayloadError = class extends Error {
1228
1200
  this.name = "NextcloudTalkWebhookPayloadError";
1229
1201
  }
1230
1202
  };
1231
- function isRecord(value) {
1232
- return typeof value === "object" && value !== null && !Array.isArray(value);
1233
- }
1234
1203
  function parseRawObject(rawEvent) {
1235
1204
  let parsed;
1236
1205
  try {
@@ -1294,6 +1263,8 @@ async function migrateNextcloudTalkLegacyReplayState(params) {
1294
1263
  //#region extensions/nextcloud-talk/src/monitor.ts
1295
1264
  const DEFAULT_WEBHOOK_MAX_BODY_BYTES = 1024 * 1024;
1296
1265
  const PREAUTH_WEBHOOK_MAX_BODY_BYTES = 64 * 1024;
1266
+ const NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_HEADER = "x-openclaw-delivery-accepted";
1267
+ const NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_VALUE = "durable";
1297
1268
  const PREAUTH_WEBHOOK_BODY_TIMEOUT_MS = 5e3;
1298
1269
  const HEALTH_PATH = "/healthz";
1299
1270
  const WEBHOOK_AUTH_RATE_LIMIT_SCOPE = "nextcloud-talk-webhook-auth";
@@ -1402,7 +1373,7 @@ function createNextcloudTalkWebhookServer(opts) {
1402
1373
  clientIp,
1403
1374
  authRateLimiter: webhookAuthRateLimiter
1404
1375
  })) return;
1405
- await onWebhook(body);
1376
+ if (await onWebhook(body) === "accepted") res.setHeader(NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_HEADER, NEXTCLOUD_TALK_WEBHOOK_ACCEPTED_VALUE);
1406
1377
  writeJsonResponse(res, 200);
1407
1378
  } catch (err) {
1408
1379
  if (isRequestBodyLimitError(err, "PAYLOAD_TOO_LARGE")) {
@@ -1464,11 +1435,6 @@ function createNextcloudTalkWebhookServer(opts) {
1464
1435
  //#endregion
1465
1436
  //#region extensions/nextcloud-talk/src/webhook-spool.ts
1466
1437
  const NEXTCLOUD_TALK_INGRESS_POLL_INTERVAL_MS = 500;
1467
- const NEXTCLOUD_TALK_INGRESS_PRUNE_INTERVAL_MS = 3600 * 1e3;
1468
- const NEXTCLOUD_TALK_INGRESS_COMPLETED_TTL_MS = 720 * 60 * 60 * 1e3;
1469
- const NEXTCLOUD_TALK_INGRESS_COMPLETED_MAX_ENTRIES = 1e4;
1470
- const NEXTCLOUD_TALK_INGRESS_FAILED_TTL_MS = 720 * 60 * 60 * 1e3;
1471
- const NEXTCLOUD_TALK_INGRESS_FAILED_MAX_ENTRIES = 1e4;
1472
1438
  const NextcloudTalkWebhookPayloadSchema = z.object({
1473
1439
  type: z.enum([
1474
1440
  "Create",
@@ -1572,11 +1538,8 @@ function createNextcloudTalkWebhookSpool(options) {
1572
1538
  pollIntervalMs: options.pollIntervalMs ?? NEXTCLOUD_TALK_INGRESS_POLL_INTERVAL_MS,
1573
1539
  waitForDeliveryIdleBeforeRepump: true,
1574
1540
  retention: {
1575
- pruneIntervalMs: NEXTCLOUD_TALK_INGRESS_PRUNE_INTERVAL_MS,
1576
- completedTtlMs: NEXTCLOUD_TALK_INGRESS_COMPLETED_TTL_MS,
1577
- completedMaxEntries: NEXTCLOUD_TALK_INGRESS_COMPLETED_MAX_ENTRIES,
1578
- failedTtlMs: NEXTCLOUD_TALK_INGRESS_FAILED_TTL_MS,
1579
- failedMaxEntries: NEXTCLOUD_TALK_INGRESS_FAILED_MAX_ENTRIES
1541
+ completedMaxEntries: 1e4,
1542
+ failedMaxEntries: 1e4
1580
1543
  },
1581
1544
  drain: {
1582
1545
  resolveNonRetryableFailure,
@@ -1811,6 +1774,11 @@ const nextcloudTalkMessageActions = {
1811
1774
  handleAction: async ({ action, params, cfg, accountId, toolContext }) => {
1812
1775
  if (action === "send") throw new Error("Send should be handled by outbound, not actions handler.");
1813
1776
  if (action === "react") {
1777
+ const account = resolveNextcloudTalkAccount({
1778
+ cfg,
1779
+ accountId
1780
+ });
1781
+ if (!isAccountConfigured(account)) throw new Error(`Nextcloud Talk account "${account.accountId}" is disabled or not configured.`);
1814
1782
  const target = readStringParam(params, "to", {
1815
1783
  required: true,
1816
1784
  label: "to (room token)"
@@ -1892,9 +1860,6 @@ const channel$1 = "nextcloud-talk";
1892
1860
  function readOptionalString(value) {
1893
1861
  return typeof value === "string" && value.length > 0 ? value : void 0;
1894
1862
  }
1895
- function addWildcardAllowFrom(allowFrom) {
1896
- return mergeAllowFromEntries(allowFrom, ["*"]);
1897
- }
1898
1863
  function normalizeNextcloudTalkBaseUrl(value) {
1899
1864
  return value?.trim().replace(/\/+$/, "") ?? "";
1900
1865
  }
@@ -1902,46 +1867,15 @@ function validateNextcloudTalkBaseUrl(value) {
1902
1867
  if (!value) return "Required";
1903
1868
  if (!value.startsWith("http://") && !value.startsWith("https://")) return "URL must start with http:// or https://";
1904
1869
  }
1905
- function setNextcloudTalkAccountConfig(cfg, accountId, updates) {
1870
+ function setNextcloudTalkAccountConfig(cfg, accountId, updates, clearFields) {
1906
1871
  return patchScopedAccountConfig({
1907
1872
  cfg,
1908
1873
  channelKey: channel$1,
1909
1874
  accountId,
1910
- patch: updates
1875
+ patch: updates,
1876
+ ...clearFields ? { clearFields } : {}
1911
1877
  });
1912
1878
  }
1913
- function clearNextcloudTalkAccountFields(cfg, accountId, fields) {
1914
- const section = cfg.channels?.["nextcloud-talk"];
1915
- if (!section) return cfg;
1916
- if (accountId === DEFAULT_ACCOUNT_ID$1) {
1917
- const nextSection = { ...section };
1918
- for (const field of fields) delete nextSection[field];
1919
- return {
1920
- ...cfg,
1921
- channels: {
1922
- ...cfg.channels,
1923
- "nextcloud-talk": nextSection
1924
- }
1925
- };
1926
- }
1927
- const currentAccount = section.accounts?.[accountId];
1928
- if (!currentAccount) return cfg;
1929
- const nextAccount = { ...currentAccount };
1930
- for (const field of fields) delete nextAccount[field];
1931
- return {
1932
- ...cfg,
1933
- channels: {
1934
- ...cfg.channels,
1935
- "nextcloud-talk": {
1936
- ...section,
1937
- accounts: {
1938
- ...section.accounts,
1939
- [accountId]: nextAccount
1940
- }
1941
- }
1942
- }
1943
- };
1944
- }
1945
1879
  async function promptNextcloudTalkAllowFrom(params) {
1946
1880
  return await promptParsedAllowFromForAccount({
1947
1881
  cfg: params.cfg,
@@ -1980,35 +1914,16 @@ async function promptNextcloudTalkAllowFromForAccount(params) {
1980
1914
  accountId
1981
1915
  });
1982
1916
  }
1983
- const nextcloudTalkDmPolicy = {
1917
+ const nextcloudTalkDmPolicy = createChannelDmPolicy({
1984
1918
  label: "Nextcloud Talk",
1985
1919
  channel: channel$1,
1986
- policyKey: "channels.nextcloud-talk.dmPolicy",
1987
- allowFromKey: "channels.nextcloud-talk.allowFrom",
1988
- resolveConfigKeys: (cfg, accountId) => (accountId ?? resolveDefaultNextcloudTalkAccountId(cfg)) !== DEFAULT_ACCOUNT_ID$1 ? {
1989
- policyKey: `channels.nextcloud-talk.accounts.${accountId ?? resolveDefaultNextcloudTalkAccountId(cfg)}.dmPolicy`,
1990
- allowFromKey: `channels.nextcloud-talk.accounts.${accountId ?? resolveDefaultNextcloudTalkAccountId(cfg)}.allowFrom`
1991
- } : {
1992
- policyKey: "channels.nextcloud-talk.dmPolicy",
1993
- allowFromKey: "channels.nextcloud-talk.allowFrom"
1994
- },
1995
- getCurrent: (cfg, accountId) => resolveNextcloudTalkAccount({
1920
+ resolveAccount: (cfg, accountId) => resolveNextcloudTalkAccount({
1996
1921
  cfg,
1997
1922
  accountId: accountId ?? resolveDefaultNextcloudTalkAccountId(cfg)
1998
- }).config.dmPolicy ?? "pairing",
1999
- setPolicy: (cfg, policy, accountId) => {
2000
- const resolvedAccountId = accountId ?? resolveDefaultNextcloudTalkAccountId(cfg);
2001
- const resolved = resolveNextcloudTalkAccount({
2002
- cfg,
2003
- accountId: resolvedAccountId
2004
- });
2005
- return setNextcloudTalkAccountConfig(cfg, resolvedAccountId, {
2006
- dmPolicy: policy,
2007
- ...policy === "open" ? { allowFrom: addWildcardAllowFrom(resolved.config.allowFrom) } : {}
2008
- });
2009
- },
1923
+ }),
1924
+ applyPatch: ({ cfg, account, patch }) => setNextcloudTalkAccountConfig(cfg, account.accountId, patch),
2010
1925
  promptAllowFrom: promptNextcloudTalkAllowFromForAccount
2011
- };
1926
+ });
2012
1927
  const nextcloudTalkSetupAdapter = {
2013
1928
  singleAccountKeysToMove: ["rooms"],
2014
1929
  resolveAccountId: ({ accountId }) => normalizeAccountId$1(accountId),
@@ -2038,16 +1953,15 @@ const nextcloudTalkSetupAdapter = {
2038
1953
  }),
2039
1954
  applyAccountConfig: ({ cfg, accountId, input }) => {
2040
1955
  const setupInput = input;
2041
- const namedConfig = applyAccountNameToChannelSection({
1956
+ return setNextcloudTalkAccountConfig(applyAccountNameToChannelSection({
2042
1957
  cfg,
2043
1958
  channelKey: channel$1,
2044
1959
  accountId,
2045
1960
  name: setupInput.name
2046
- });
2047
- return setNextcloudTalkAccountConfig(setupInput.useEnv ? clearNextcloudTalkAccountFields(namedConfig, accountId, ["botSecret", "botSecretFile"]) : namedConfig, accountId, {
1961
+ }), accountId, {
2048
1962
  baseUrl: normalizeNextcloudTalkBaseUrl(setupInput.baseUrl),
2049
1963
  ...setupInput.useEnv ? {} : setupInput.secretFile ? { botSecretFile: setupInput.secretFile } : setupInput.secret ? { botSecret: setupInput.secret } : {}
2050
- });
1964
+ }, setupInput.useEnv ? ["botSecret", "botSecretFile"] : void 0);
2051
1965
  }
2052
1966
  };
2053
1967
  const nextcloudTalkSetupContract = defineChannelSetupContract({
@@ -2192,9 +2106,7 @@ const nextcloudTalkSetupWizard = {
2192
2106
  hasConfiguredValue: (account) => Boolean(hasConfiguredSecretInput(account.config.botSecret) || account.config.botSecretFile),
2193
2107
  resolvedValue: (account) => account.secret || void 0,
2194
2108
  envValue: ({ accountId }) => accountId === DEFAULT_ACCOUNT_ID$1 ? normalizeOptionalString(process.env.NEXTCLOUD_TALK_BOT_SECRET) : void 0,
2195
- patchAccount: ({ cfg, accountId, patch, clearFields }) => {
2196
- return setNextcloudTalkAccountConfig(clearNextcloudTalkAccountFields(cfg, accountId, clearFields), accountId, patch);
2197
- },
2109
+ patchAccount: ({ cfg, accountId, patch, clearFields }) => setNextcloudTalkAccountConfig(cfg, accountId, patch, clearFields),
2198
2110
  useEnv: {
2199
2111
  clearFields: ["botSecret", "botSecretFile"],
2200
2112
  patch: (account) => ({ baseUrl: account.baseUrl })
@@ -2217,7 +2129,7 @@ const nextcloudTalkSetupWizard = {
2217
2129
  accountConfigured: (account) => Boolean(account.config.apiUser?.trim() && (hasConfiguredSecretInput(account.config.apiPassword) || account.config.apiPasswordFile)),
2218
2130
  hasConfiguredValue: (account) => Boolean(hasConfiguredSecretInput(account.config.apiPassword) || account.config.apiPasswordFile),
2219
2131
  shouldPrompt: ({ credentialValues }) => credentialValues[CONFIGURE_API_FLAG] === "1",
2220
- patchAccount: ({ cfg, accountId, patch, clearFields }) => setNextcloudTalkAccountConfig(clearNextcloudTalkAccountFields(cfg, accountId, clearFields), accountId, patch),
2132
+ patchAccount: ({ cfg, accountId, patch, clearFields }) => setNextcloudTalkAccountConfig(cfg, accountId, patch, clearFields),
2221
2133
  set: { clearFields: ["apiPassword", "apiPasswordFile"] }
2222
2134
  })],
2223
2135
  textInputs: [baseUrlTextInput({
@@ -1,2 +1,2 @@
1
- import { t as nextcloudTalkPlugin } from "./channel-DtnECxVM.js";
1
+ import { t as nextcloudTalkPlugin } from "./channel-B9yquEb1.js";
2
2
  export { nextcloudTalkPlugin };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/nextcloud-talk",
3
- "version": "2026.7.2-beta.4",
3
+ "version": "2026.7.2-beta.7",
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.7.2-beta.4"
11
+ "openclaw": ">=2026.7.2-beta.7"
12
12
  },
13
13
  "peerDependenciesMeta": {
14
14
  "openclaw": {
@@ -124,10 +124,10 @@
124
124
  "minHostVersion": ">=2026.4.10"
125
125
  },
126
126
  "compat": {
127
- "pluginApi": ">=2026.7.2-beta.4"
127
+ "pluginApi": ">=2026.7.2-beta.7"
128
128
  },
129
129
  "build": {
130
- "openclawVersion": "2026.7.2-beta.4"
130
+ "openclawVersion": "2026.7.2-beta.7"
131
131
  },
132
132
  "release": {
133
133
  "publishToClawHub": true,
@@ -144,7 +144,6 @@
144
144
  "files": [
145
145
  "dist/**",
146
146
  "openclaw.plugin.json",
147
- "npm-shrinkwrap.json",
148
147
  "README.md"
149
148
  ],
150
149
  "bundledDependencies": [
@@ -1,32 +0,0 @@
1
- {
2
- "name": "@openclaw/nextcloud-talk",
3
- "version": "2026.7.2-beta.4",
4
- "lockfileVersion": 3,
5
- "requires": true,
6
- "packages": {
7
- "": {
8
- "name": "@openclaw/nextcloud-talk",
9
- "version": "2026.7.2-beta.4",
10
- "dependencies": {
11
- "zod": "4.4.3"
12
- },
13
- "peerDependencies": {
14
- "openclaw": ">=2026.7.2-beta.4"
15
- },
16
- "peerDependenciesMeta": {
17
- "openclaw": {
18
- "optional": true
19
- }
20
- }
21
- },
22
- "node_modules/zod": {
23
- "version": "4.4.3",
24
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
25
- "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
26
- "license": "MIT",
27
- "funding": {
28
- "url": "https://github.com/sponsors/colinhacks"
29
- }
30
- }
31
- }
32
- }