@openclaw/irc 2026.7.1 → 2026.7.2-beta.1

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/api.js CHANGED
@@ -1,3 +1,3 @@
1
- import { g as resolveIrcAccount, h as resolveDefaultIrcAccountId, m as listIrcAccountIds, n as ircSetupWizard, p as listEnabledIrcAccounts, r as ircSetupAdapter, t as ircPlugin } from "./channel-C-P2GolT.js";
1
+ import { g as resolveIrcAccount, h as resolveDefaultIrcAccountId, m as listIrcAccountIds, n as ircSetupWizard, p as listEnabledIrcAccounts, r as ircSetupAdapter, t as ircPlugin } from "./channel-DVkIYl85.js";
2
2
  import { n as setIrcRuntime } from "./runtime-DZfYm3vY.js";
3
3
  export { ircPlugin, ircSetupAdapter, ircSetupWizard, listEnabledIrcAccounts, listIrcAccountIds, resolveDefaultIrcAccountId, resolveIrcAccount, setIrcRuntime };
@@ -1,11 +1,11 @@
1
- import { t as IrcChannelConfigSchema } from "./config-schema-BPKZaah-.js";
1
+ import { t as IrcChannelConfigSchema } from "./config-schema-nFnbvojz.js";
2
2
  import { t as getIrcRuntime } from "./runtime-DZfYm3vY.js";
3
- import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-DdKIs_mx.js";
3
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-PJHaoTSe.js";
4
4
  import { createAccountListHelpers, describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
5
5
  import { formatNormalizedAllowFromEntries } from "openclaw/plugin-sdk/allow-from";
6
6
  import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter, createScopedDmSecurityResolver } from "openclaw/plugin-sdk/channel-config-helpers";
7
7
  import { buildChannelOutboundSessionRoute, createChatChannelPlugin, parseOptionalDelimitedEntries, tryReadSecretFileSync } from "openclaw/plugin-sdk/channel-core";
8
- import { composeAccountWarningCollectors, createAllowlistProviderOpenWarningCollector, createDangerousNameMatchingMutableAllowlistWarningCollector } from "openclaw/plugin-sdk/channel-policy";
8
+ import { composeAccountWarningCollectors, createAllowlistProviderOpenWarningCollector, createDangerousNameMatchingMutableAllowlistWarningCollector, resolveScopeKeyCaseInsensitive, resolveScopeRequireMention, resolveScopeToolsPolicy } from "openclaw/plugin-sdk/channel-policy";
9
9
  import { createChannelDirectoryAdapter, createResolvedDirectoryEntriesLister } from "openclaw/plugin-sdk/directory-runtime";
10
10
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
11
11
  import { buildBaseChannelStatusSummary, createComputedAccountStatusAdapter, createDefaultChannelRuntimeState } from "openclaw/plugin-sdk/status-helpers";
@@ -197,7 +197,7 @@ const collectIrcMutableAllowlistWarnings = createDangerousNameMatchingMutableAll
197
197
  });
198
198
  //#endregion
199
199
  //#region extensions/irc/src/gateway.ts
200
- const loadIrcChannelRuntime$1 = createLazyRuntimeModule(() => import("./channel-runtime-CLTE89ol.js"));
200
+ const loadIrcChannelRuntime$1 = createLazyRuntimeModule(() => import("./channel-runtime-DQUHlrj4.js"));
201
201
  async function startIrcGatewayAccount(ctx) {
202
202
  const account = ctx.account;
203
203
  const statusSink = createAccountStatusSink({
@@ -796,42 +796,47 @@ const ircOutboundBaseAdapter = {
796
796
  };
797
797
  //#endregion
798
798
  //#region extensions/irc/src/policy.ts
799
- function resolveIrcGroupMatch(params) {
800
- const groups = params.groups ?? {};
801
- const hasConfiguredGroups = Object.keys(groups).length > 0;
802
- const direct = groups[params.target];
803
- if (direct) return {
804
- allowed: true,
805
- groupConfig: direct,
806
- wildcardConfig: groups["*"],
807
- hasConfiguredGroups
799
+ function resolveIrcGroupScope(params) {
800
+ const { "*": wildcard, ...groups } = params.groups ?? {};
801
+ const project = (entry) => ({
802
+ requireMention: entry.requireMention,
803
+ tools: entry.tools
804
+ });
805
+ const tree = {
806
+ defaults: wildcard ? project(wildcard) : void 0,
807
+ scopes: Object.fromEntries(Object.entries(groups).map(([key, entry]) => [key, project(entry)]))
808
808
  };
809
- const targetLower = normalizeLowercaseStringOrEmpty(params.target);
810
- const directKey = Object.keys(groups).find((key) => normalizeLowercaseStringOrEmpty(key) === targetLower);
811
- if (directKey) {
812
- const matched = groups[directKey];
813
- if (matched) return {
814
- allowed: true,
815
- groupConfig: matched,
816
- wildcardConfig: groups["*"],
817
- hasConfiguredGroups
818
- };
819
- }
820
- const wildcard = groups["*"];
821
- if (wildcard) return {
822
- allowed: true,
823
- wildcardConfig: wildcard,
824
- hasConfiguredGroups
809
+ const key = resolveScopeKeyCaseInsensitive(tree, params.target);
810
+ return {
811
+ tree,
812
+ path: key ? [key] : []
825
813
  };
814
+ }
815
+ function resolveIrcGroupMatch(params) {
816
+ const { path } = resolveIrcGroupScope(params);
817
+ const key = path[0];
818
+ const groupConfig = key ? params.groups?.[key] : void 0;
819
+ const wildcardConfig = params.groups?.["*"];
826
820
  return {
827
- allowed: false,
828
- hasConfiguredGroups
821
+ allowed: Boolean(groupConfig ?? wildcardConfig),
822
+ groupConfig,
823
+ wildcardConfig,
824
+ hasConfiguredGroups: Object.keys(params.groups ?? {}).length > 0
829
825
  };
830
826
  }
831
- function resolveIrcRequireMention(params) {
832
- if (params.groupConfig?.requireMention !== void 0) return params.groupConfig.requireMention;
833
- if (params.wildcardConfig?.requireMention !== void 0) return params.wildcardConfig.requireMention;
834
- return true;
827
+ function resolveIrcGroupRequireMention(params) {
828
+ const { tree, path } = resolveIrcGroupScope(params);
829
+ return resolveScopeRequireMention({
830
+ tree,
831
+ path
832
+ });
833
+ }
834
+ function resolveIrcGroupToolPolicy(params) {
835
+ const { tree, path } = resolveIrcGroupScope(params);
836
+ return resolveScopeToolsPolicy({
837
+ tree,
838
+ path
839
+ });
835
840
  }
836
841
  //#endregion
837
842
  //#region extensions/irc/src/probe.ts
@@ -1330,7 +1335,7 @@ const meta = {
1330
1335
  systemImage: "number",
1331
1336
  markdownCapable: true
1332
1337
  };
1333
- const loadIrcChannelRuntime = createLazyRuntimeModule(() => import("./channel-runtime-CLTE89ol.js"));
1338
+ const loadIrcChannelRuntime = createLazyRuntimeModule(() => import("./channel-runtime-DQUHlrj4.js"));
1334
1339
  function normalizePairingTarget(raw) {
1335
1340
  const normalized = normalizeIrcAllowEntry(raw);
1336
1341
  if (!normalized) return "";
@@ -1442,14 +1447,10 @@ const ircPlugin = createChatChannelPlugin({
1442
1447
  accountId
1443
1448
  });
1444
1449
  if (!groupId) return true;
1445
- const match = resolveIrcGroupMatch({
1450
+ return resolveIrcGroupRequireMention({
1446
1451
  groups: account.config.groups,
1447
1452
  target: groupId
1448
1453
  });
1449
- return resolveIrcRequireMention({
1450
- groupConfig: match.groupConfig,
1451
- wildcardConfig: match.wildcardConfig
1452
- });
1453
1454
  },
1454
1455
  resolveToolPolicy: ({ cfg, accountId, groupId }) => {
1455
1456
  const account = resolveIrcAccount({
@@ -1457,11 +1458,10 @@ const ircPlugin = createChatChannelPlugin({
1457
1458
  accountId
1458
1459
  });
1459
1460
  if (!groupId) return;
1460
- const match = resolveIrcGroupMatch({
1461
+ return resolveIrcGroupToolPolicy({
1461
1462
  groups: account.config.groups,
1462
1463
  target: groupId
1463
1464
  });
1464
- return match.groupConfig?.tools ?? match.wildcardConfig?.tools;
1465
1465
  }
1466
1466
  },
1467
1467
  messaging: {
@@ -1583,4 +1583,4 @@ const ircPlugin = createChatChannelPlugin({
1583
1583
  }
1584
1584
  });
1585
1585
  //#endregion
1586
- export { resolveIrcRequireMention as a, isChannelTarget as c, connectIrcClient as d, makeIrcMessageId as f, resolveIrcAccount as g, resolveDefaultIrcAccountId as h, resolveIrcGroupMatch as i, normalizeIrcAllowEntry as l, listIrcAccountIds as m, ircSetupWizard as n, sendMessageIrc as o, listEnabledIrcAccounts as p, ircSetupAdapter as r, buildIrcAllowlistCandidates as s, ircPlugin as t, buildIrcConnectOptions as u };
1586
+ export { resolveIrcGroupRequireMention as a, isChannelTarget as c, connectIrcClient as d, makeIrcMessageId as f, resolveIrcAccount as g, resolveDefaultIrcAccountId as h, resolveIrcGroupMatch as i, normalizeIrcAllowEntry as l, listIrcAccountIds as m, ircSetupWizard as n, sendMessageIrc as o, listEnabledIrcAccounts as p, ircSetupAdapter as r, buildIrcAllowlistCandidates as s, ircPlugin as t, buildIrcConnectOptions as u };
@@ -1,2 +1,2 @@
1
- import { t as IrcChannelConfigSchema } from "./config-schema-BPKZaah-.js";
1
+ import { t as IrcChannelConfigSchema } from "./config-schema-nFnbvojz.js";
2
2
  export { IrcChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as ircPlugin } from "./channel-C-P2GolT.js";
1
+ import { t as ircPlugin } from "./channel-DVkIYl85.js";
2
2
  export { ircPlugin };
@@ -1,6 +1,7 @@
1
- import { a as resolveIrcRequireMention, c as isChannelTarget, d as connectIrcClient, f as makeIrcMessageId, g as resolveIrcAccount, i as resolveIrcGroupMatch, l as normalizeIrcAllowEntry, o as sendMessageIrc, s as buildIrcAllowlistCandidates, u as buildIrcConnectOptions } from "./channel-C-P2GolT.js";
1
+ import { a as resolveIrcGroupRequireMention, c as isChannelTarget, d as connectIrcClient, f as makeIrcMessageId, g as resolveIrcAccount, i as resolveIrcGroupMatch, l as normalizeIrcAllowEntry, o as sendMessageIrc, s as buildIrcAllowlistCandidates, u as buildIrcConnectOptions } from "./channel-DVkIYl85.js";
2
2
  import { t as getIrcRuntime } from "./runtime-DZfYm3vY.js";
3
3
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
4
+ import { resolveChannelStreamingBlockEnabled } from "openclaw/plugin-sdk/channel-outbound";
4
5
  import { resolveLoggerBackedRuntime } from "openclaw/plugin-sdk/extension-shared";
5
6
  import { logInboundDrop } from "openclaw/plugin-sdk/channel-inbound";
6
7
  import { channelIngressRoutes, createChannelIngressResolver, defineStableChannelIngressIdentity } from "openclaw/plugin-sdk/channel-ingress-runtime";
@@ -159,9 +160,9 @@ async function handleIrcInbound(params) {
159
160
  const mentionNick = connectedNick?.trim() || account.nick;
160
161
  const explicitMentionRegex = mentionNick ? new RegExp(`\\b${escapeIrcRegexLiteral(mentionNick)}\\b[:,]?`, "i") : null;
161
162
  const wasMentioned = core.channel.mentions.matchesMentionPatterns(rawBody, mentionRegexes) || (explicitMentionRegex ? explicitMentionRegex.test(rawBody) : false);
162
- const requireMention = message.isGroup ? resolveIrcRequireMention({
163
- groupConfig: groupMatch.groupConfig,
164
- wildcardConfig: groupMatch.wildcardConfig
163
+ const requireMention = message.isGroup ? resolveIrcGroupRequireMention({
164
+ groups: account.config.groups,
165
+ target: message.target
165
166
  }) : false;
166
167
  const routeGroupAllowFrom = normalizeStringEntries(groupMatch.groupConfig?.allowFrom?.length ? groupMatch.groupConfig.allowFrom : groupMatch.wildcardConfig?.allowFrom);
167
168
  const accessGroupPolicy = groupPolicy === "open" && (hasEntries(account.config.groupAllowFrom) || hasEntries(routeGroupAllowFrom)) ? "allowlist" : groupPolicy;
@@ -271,6 +272,7 @@ async function handleIrcInbound(params) {
271
272
  body: rawBody
272
273
  });
273
274
  const groupSystemPrompt = normalizeOptionalString(groupMatch.groupConfig?.systemPrompt);
275
+ const blockStreamingEnabled = resolveChannelStreamingBlockEnabled(account.config);
274
276
  const ctxPayload = core.channel.reply.finalizeInboundContext({
275
277
  Body: body,
276
278
  RawBody: rawBody,
@@ -322,7 +324,7 @@ async function handleIrcInbound(params) {
322
324
  replyPipeline: {},
323
325
  replyOptions: {
324
326
  skillFilter: groupMatch.groupConfig?.skills,
325
- disableBlockStreaming: typeof account.config.blockStreaming === "boolean" ? !account.config.blockStreaming : void 0
327
+ disableBlockStreaming: typeof blockStreamingEnabled === "boolean" ? !blockStreamingEnabled : void 0
326
328
  },
327
329
  record: { onRecordError: (err) => {
328
330
  runtime.error?.(`irc: failed updating session meta: ${String(err)}`);
@@ -1,3 +1,4 @@
1
+ import { createChannelConfigUiHints } from "openclaw/plugin-sdk/channel-core";
1
2
  import { DmPolicySchema, GroupPolicySchema, MarkdownConfigSchema, ReplyRuntimeConfigSchemaShape, ToolPolicySchema, buildChannelConfigSchema, requireOpenAllowFrom } from "openclaw/plugin-sdk/channel-config-schema";
2
3
  import { z } from "zod";
3
4
  //#region extensions/irc/src/config-ui-hints.ts
@@ -6,10 +7,10 @@ const ircChannelConfigUiHints = {
6
7
  label: "IRC",
7
8
  help: "IRC channel provider configuration and compatibility settings for classic IRC transport workflows. Use this section when bridging legacy chat infrastructure into OpenClaw."
8
9
  },
9
- dmPolicy: {
10
- label: "IRC DM Policy",
11
- help: "Direct message access control (\"pairing\" recommended). \"open\" requires channels.irc.allowFrom=[\"*\"]."
12
- },
10
+ ...createChannelConfigUiHints({
11
+ channelLabel: "IRC",
12
+ dmPolicy: { channelKey: "irc" }
13
+ }),
13
14
  "nickserv.enabled": {
14
15
  label: "IRC NickServ Enabled",
15
16
  help: "Enable NickServ identify/register after connect (defaults to enabled when password is configured)."
@@ -34,10 +35,10 @@ const ircChannelConfigUiHints = {
34
35
  label: "IRC NickServ Register Email",
35
36
  help: "Email used with NickServ REGISTER (required when register=true)."
36
37
  },
37
- configWrites: {
38
- label: "IRC Config Writes",
39
- help: "Allow IRC to write config in response to channel events/commands (default: true)."
40
- }
38
+ ...createChannelConfigUiHints({
39
+ channelLabel: "IRC",
40
+ configWrites: true
41
+ })
41
42
  };
42
43
  //#endregion
43
44
  //#region extensions/irc/src/config-schema.ts
@@ -0,0 +1,16 @@
1
+ import { defineChannelAliasMigration } from "openclaw/plugin-sdk/runtime-doctor";
2
+ //#region extensions/irc/doctor-contract-api.ts
3
+ const streamingAliasMigration = defineChannelAliasMigration({
4
+ channelId: "irc",
5
+ streaming: {
6
+ defaultMode: "partial",
7
+ deliveryOnly: true
8
+ },
9
+ accountStreamingReplacesRoot: true
10
+ });
11
+ const legacyConfigRules = streamingAliasMigration.legacyConfigRules;
12
+ function normalizeCompatibilityConfig({ cfg }) {
13
+ return streamingAliasMigration.normalizeChannelConfig({ cfg });
14
+ }
15
+ //#endregion
16
+ export { legacyConfigRules, normalizeCompatibilityConfig };
@@ -0,0 +1,41 @@
1
+ import { collectNestedChannelFieldAssignments, collectSimpleChannelFieldAssignments, createChannelSecretTargetRegistryEntries, getChannelSurface, isBaseFieldActiveForChannelSurface, isEnabledFlag, isRecord } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
2
+ //#region extensions/irc/src/secret-contract.ts
3
+ const secretTargetRegistryEntries = createChannelSecretTargetRegistryEntries({
4
+ channelKey: "irc",
5
+ account: ["nickserv.password", "password"],
6
+ channel: ["nickserv.password", "password"]
7
+ });
8
+ function collectRuntimeConfigAssignments(params) {
9
+ const resolved = getChannelSurface(params.config, "irc");
10
+ if (!resolved) return;
11
+ const { channel: irc, surface } = resolved;
12
+ collectSimpleChannelFieldAssignments({
13
+ channelKey: "irc",
14
+ field: "password",
15
+ channel: irc,
16
+ surface,
17
+ defaults: params.defaults,
18
+ context: params.context,
19
+ topInactiveReason: "no enabled account inherits this top-level IRC password.",
20
+ accountInactiveReason: "IRC account is disabled."
21
+ });
22
+ collectNestedChannelFieldAssignments({
23
+ channelKey: "irc",
24
+ nestedKey: "nickserv",
25
+ field: "password",
26
+ channel: irc,
27
+ surface,
28
+ defaults: params.defaults,
29
+ context: params.context,
30
+ topLevelActive: isBaseFieldActiveForChannelSurface(surface, "nickserv") && isRecord(irc.nickserv) && isEnabledFlag(irc.nickserv),
31
+ topInactiveReason: "no enabled account inherits this top-level IRC nickserv config or NickServ is disabled.",
32
+ accountActive: ({ account, enabled }) => enabled && isRecord(account.nickserv) && isEnabledFlag(account.nickserv),
33
+ accountInactiveReason: "IRC account is disabled or NickServ is disabled for this account."
34
+ });
35
+ }
36
+ const channelSecrets = {
37
+ secretTargetRegistryEntries,
38
+ collectRuntimeConfigAssignments
39
+ };
40
+ //#endregion
41
+ export { collectRuntimeConfigAssignments as n, secretTargetRegistryEntries as r, channelSecrets as t };
@@ -1,2 +1,2 @@
1
- import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./secret-contract-DdKIs_mx.js";
1
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./secret-contract-PJHaoTSe.js";
2
2
  export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@openclaw/irc",
3
- "version": "2026.7.1",
3
+ "version": "2026.7.2-beta.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/irc",
9
- "version": "2026.7.1",
9
+ "version": "2026.7.2-beta.1",
10
10
  "dependencies": {
11
11
  "zod": "4.4.3"
12
12
  }
@@ -296,33 +296,45 @@
296
296
  "exclusiveMinimum": 0,
297
297
  "maximum": 9007199254740991
298
298
  },
299
- "chunkMode": {
300
- "type": "string",
301
- "enum": [
302
- "length",
303
- "newline"
304
- ]
305
- },
306
- "blockStreaming": {
307
- "type": "boolean"
308
- },
309
- "blockStreamingCoalesce": {
299
+ "streaming": {
310
300
  "type": "object",
311
301
  "properties": {
312
- "minChars": {
313
- "type": "integer",
314
- "exclusiveMinimum": 0,
315
- "maximum": 9007199254740991
316
- },
317
- "maxChars": {
318
- "type": "integer",
319
- "exclusiveMinimum": 0,
320
- "maximum": 9007199254740991
302
+ "chunkMode": {
303
+ "type": "string",
304
+ "enum": [
305
+ "length",
306
+ "newline"
307
+ ]
321
308
  },
322
- "idleMs": {
323
- "type": "integer",
324
- "minimum": 0,
325
- "maximum": 9007199254740991
309
+ "block": {
310
+ "type": "object",
311
+ "properties": {
312
+ "enabled": {
313
+ "type": "boolean"
314
+ },
315
+ "coalesce": {
316
+ "type": "object",
317
+ "properties": {
318
+ "minChars": {
319
+ "type": "integer",
320
+ "exclusiveMinimum": 0,
321
+ "maximum": 9007199254740991
322
+ },
323
+ "maxChars": {
324
+ "type": "integer",
325
+ "exclusiveMinimum": 0,
326
+ "maximum": 9007199254740991
327
+ },
328
+ "idleMs": {
329
+ "type": "integer",
330
+ "minimum": 0,
331
+ "maximum": 9007199254740991
332
+ }
333
+ },
334
+ "additionalProperties": false
335
+ }
336
+ },
337
+ "additionalProperties": false
326
338
  }
327
339
  },
328
340
  "additionalProperties": false
@@ -607,33 +619,45 @@
607
619
  "exclusiveMinimum": 0,
608
620
  "maximum": 9007199254740991
609
621
  },
610
- "chunkMode": {
611
- "type": "string",
612
- "enum": [
613
- "length",
614
- "newline"
615
- ]
616
- },
617
- "blockStreaming": {
618
- "type": "boolean"
619
- },
620
- "blockStreamingCoalesce": {
622
+ "streaming": {
621
623
  "type": "object",
622
624
  "properties": {
623
- "minChars": {
624
- "type": "integer",
625
- "exclusiveMinimum": 0,
626
- "maximum": 9007199254740991
627
- },
628
- "maxChars": {
629
- "type": "integer",
630
- "exclusiveMinimum": 0,
631
- "maximum": 9007199254740991
625
+ "chunkMode": {
626
+ "type": "string",
627
+ "enum": [
628
+ "length",
629
+ "newline"
630
+ ]
632
631
  },
633
- "idleMs": {
634
- "type": "integer",
635
- "minimum": 0,
636
- "maximum": 9007199254740991
632
+ "block": {
633
+ "type": "object",
634
+ "properties": {
635
+ "enabled": {
636
+ "type": "boolean"
637
+ },
638
+ "coalesce": {
639
+ "type": "object",
640
+ "properties": {
641
+ "minChars": {
642
+ "type": "integer",
643
+ "exclusiveMinimum": 0,
644
+ "maximum": 9007199254740991
645
+ },
646
+ "maxChars": {
647
+ "type": "integer",
648
+ "exclusiveMinimum": 0,
649
+ "maximum": 9007199254740991
650
+ },
651
+ "idleMs": {
652
+ "type": "integer",
653
+ "minimum": 0,
654
+ "maximum": 9007199254740991
655
+ }
656
+ },
657
+ "additionalProperties": false
658
+ }
659
+ },
660
+ "additionalProperties": false
637
661
  }
638
662
  },
639
663
  "additionalProperties": false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/irc",
3
- "version": "2026.7.1",
3
+ "version": "2026.7.2-beta.1",
4
4
  "description": "OpenClaw IRC channel plugin",
5
5
  "type": "module",
6
6
  "openclaw": {
@@ -39,10 +39,10 @@
39
39
  }
40
40
  },
41
41
  "compat": {
42
- "pluginApi": ">=2026.7.1"
42
+ "pluginApi": ">=2026.7.2-beta.1"
43
43
  },
44
44
  "build": {
45
- "openclawVersion": "2026.7.1",
45
+ "openclawVersion": "2026.7.2-beta.1",
46
46
  "bundledDist": false
47
47
  },
48
48
  "release": {
@@ -68,7 +68,7 @@
68
68
  "README.md"
69
69
  ],
70
70
  "peerDependencies": {
71
- "openclaw": ">=2026.7.1"
71
+ "openclaw": ">=2026.7.2-beta.1"
72
72
  },
73
73
  "peerDependenciesMeta": {
74
74
  "openclaw": {
@@ -1,82 +0,0 @@
1
- import { collectNestedChannelFieldAssignments, collectSimpleChannelFieldAssignments, getChannelSurface, isBaseFieldActiveForChannelSurface, isEnabledFlag, isRecord } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
2
- //#region extensions/irc/src/secret-contract.ts
3
- const secretTargetRegistryEntries = [
4
- {
5
- id: "channels.irc.accounts.*.nickserv.password",
6
- targetType: "channels.irc.accounts.*.nickserv.password",
7
- configFile: "openclaw.json",
8
- pathPattern: "channels.irc.accounts.*.nickserv.password",
9
- secretShape: "secret_input",
10
- expectedResolvedValue: "string",
11
- includeInPlan: true,
12
- includeInConfigure: true,
13
- includeInAudit: true
14
- },
15
- {
16
- id: "channels.irc.accounts.*.password",
17
- targetType: "channels.irc.accounts.*.password",
18
- configFile: "openclaw.json",
19
- pathPattern: "channels.irc.accounts.*.password",
20
- secretShape: "secret_input",
21
- expectedResolvedValue: "string",
22
- includeInPlan: true,
23
- includeInConfigure: true,
24
- includeInAudit: true
25
- },
26
- {
27
- id: "channels.irc.nickserv.password",
28
- targetType: "channels.irc.nickserv.password",
29
- configFile: "openclaw.json",
30
- pathPattern: "channels.irc.nickserv.password",
31
- secretShape: "secret_input",
32
- expectedResolvedValue: "string",
33
- includeInPlan: true,
34
- includeInConfigure: true,
35
- includeInAudit: true
36
- },
37
- {
38
- id: "channels.irc.password",
39
- targetType: "channels.irc.password",
40
- configFile: "openclaw.json",
41
- pathPattern: "channels.irc.password",
42
- secretShape: "secret_input",
43
- expectedResolvedValue: "string",
44
- includeInPlan: true,
45
- includeInConfigure: true,
46
- includeInAudit: true
47
- }
48
- ];
49
- function collectRuntimeConfigAssignments(params) {
50
- const resolved = getChannelSurface(params.config, "irc");
51
- if (!resolved) return;
52
- const { channel: irc, surface } = resolved;
53
- collectSimpleChannelFieldAssignments({
54
- channelKey: "irc",
55
- field: "password",
56
- channel: irc,
57
- surface,
58
- defaults: params.defaults,
59
- context: params.context,
60
- topInactiveReason: "no enabled account inherits this top-level IRC password.",
61
- accountInactiveReason: "IRC account is disabled."
62
- });
63
- collectNestedChannelFieldAssignments({
64
- channelKey: "irc",
65
- nestedKey: "nickserv",
66
- field: "password",
67
- channel: irc,
68
- surface,
69
- defaults: params.defaults,
70
- context: params.context,
71
- topLevelActive: isBaseFieldActiveForChannelSurface(surface, "nickserv") && isRecord(irc.nickserv) && isEnabledFlag(irc.nickserv),
72
- topInactiveReason: "no enabled account inherits this top-level IRC nickserv config or NickServ is disabled.",
73
- accountActive: ({ account, enabled }) => enabled && isRecord(account.nickserv) && isEnabledFlag(account.nickserv),
74
- accountInactiveReason: "IRC account is disabled or NickServ is disabled for this account."
75
- });
76
- }
77
- const channelSecrets = {
78
- secretTargetRegistryEntries,
79
- collectRuntimeConfigAssignments
80
- };
81
- //#endregion
82
- export { collectRuntimeConfigAssignments as n, secretTargetRegistryEntries as r, channelSecrets as t };