@openclaw/irc 2026.10.10 → 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.
@@ -1,6 +1,6 @@
1
- import { t as IrcChannelConfigSchema } from "./config-schema-DFqPW9AB.mjs";
2
- import { n as getOptionalIrcRuntime } from "./runtime-CsdAoZex.mjs";
3
- import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-0Ccz8X9F.mjs";
1
+ import { t as IrcChannelConfigSchema } from "./config-schema-Cy9tItsu.mjs";
2
+ import { n as getOptionalIrcRuntime } from "./runtime-C_V9tmpk.mjs";
3
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-C5i-29Hz.mjs";
4
4
  import { createAccountListHelpers, describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
5
5
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
6
6
  import { formatNormalizedAllowFromEntries } from "openclaw/plugin-sdk/allow-from";
@@ -34,7 +34,7 @@ import { assertSecretOwnerAvailable } from "openclaw/plugin-sdk/channel-secret-o
34
34
  import { defineChannelSetupContract } from "openclaw/plugin-sdk/channel-setup";
35
35
  import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1, normalizeAccountId as normalizeAccountId$1 } from "openclaw/plugin-sdk/routing";
36
36
  import { applyAccountNameToChannelSection, createAllowFromSection, createPromptParsedAllowFromForAccount, createSetupInputPresenceValidator, createSetupTranslator, createStandardChannelSetupStatus, createTopLevelChannelAllowFromSetter, createTopLevelChannelDmPolicySetter, formatDocsLink, patchScopedAccountConfig, setSetupChannelEnabled, splitSetupEntries } from "openclaw/plugin-sdk/setup";
37
- // extensions/irc/src/accounts.ts
37
+ //#region extensions/irc/src/accounts.ts
38
38
  const { listAccountIds: listIrcAccountIds, resolveDefaultAccountId: resolveDefaultIrcAccountId, resolveAccountConfig: mergeIrcAccountConfig } = createAccountListHelpers("irc", {
39
39
  normalizeAccountId,
40
40
  omitKeys: ["defaultAccount"],
@@ -186,7 +186,8 @@ function listEnabledIrcAccounts(cfg) {
186
186
  accountId
187
187
  })).filter((account) => account.enabled);
188
188
  }
189
- // extensions/irc/src/doctor.ts
189
+ //#endregion
190
+ //#region extensions/irc/src/doctor.ts
190
191
  const isIrcMutableAllowEntry = buildMutableAllowEntryDetector({ stableIdPattern: /^(?:(?:irc|user):)*[^@]*@/i });
191
192
  const collectIrcMutableAllowlistWarnings = createDangerousNameMatchingMutableAllowlistWarningCollector({
192
193
  channel: "irc",
@@ -196,7 +197,8 @@ const collectIrcMutableAllowlistWarnings = createDangerousNameMatchingMutableAll
196
197
  groupField: "allowFrom"
197
198
  })
198
199
  });
199
- // extensions/irc/src/gateway.ts
200
+ //#endregion
201
+ //#region extensions/irc/src/gateway.ts
200
202
  async function startIrcGatewayAccount(ctx) {
201
203
  const account = ctx.account;
202
204
  const statusSink = createAccountStatusSink({
@@ -205,7 +207,7 @@ async function startIrcGatewayAccount(ctx) {
205
207
  });
206
208
  if (!account.configured) throw new Error(`IRC is not configured for account "${account.accountId}" (need host and nick in channels.irc).`);
207
209
  ctx.log?.info?.(`[${account.accountId}] starting IRC provider (${account.host}:${account.port}${account.tls ? " tls" : ""})`);
208
- const { monitorIrcProvider } = await import("./channel-runtime-exb5AWhn.mjs");
210
+ const { monitorIrcProvider } = await import("./channel-runtime-B4OMtNnX.mjs");
209
211
  await runPassiveAccountLifecycle({
210
212
  abortSignal: ctx.abortSignal,
211
213
  start: async () => await monitorIrcProvider({
@@ -220,7 +222,8 @@ async function startIrcGatewayAccount(ctx) {
220
222
  }
221
223
  });
222
224
  }
223
- // extensions/irc/src/control-chars.ts
225
+ //#endregion
226
+ //#region extensions/irc/src/control-chars.ts
224
227
  function isIrcControlChar(charCode) {
225
228
  return charCode <= 31 || charCode === 127;
226
229
  }
@@ -229,7 +232,8 @@ function stripIrcControlChars(value) {
229
232
  for (const char of value) if (!isIrcControlChar(char.charCodeAt(0))) out += char;
230
233
  return out;
231
234
  }
232
- // extensions/irc/src/normalize.ts
235
+ //#endregion
236
+ //#region extensions/irc/src/normalize.ts
233
237
  const IRC_TARGET_PATTERN$1 = /^[^\s:]+$/u;
234
238
  function isChannelTarget(target) {
235
239
  return target.startsWith("#") || target.startsWith("&");
@@ -366,7 +370,8 @@ function createIrcIngressSubject(message) {
366
370
  }
367
371
  };
368
372
  }
369
- // extensions/irc/src/outbound-base.ts
373
+ //#endregion
374
+ //#region extensions/irc/src/outbound-base.ts
370
375
  function sanitizeIrcAssistantText(text) {
371
376
  return sanitizeForPlainText(sanitizeAssistantVisibleText(text));
372
377
  }
@@ -377,7 +382,8 @@ const ircOutboundBaseAdapter = {
377
382
  textChunkLimit: 350,
378
383
  sanitizeText: ({ text }) => sanitizeIrcAssistantText(text)
379
384
  };
380
- // packages/normalization-core/src/utf16-slice.ts
385
+ //#endregion
386
+ //#region packages/normalization-core/src/utf16-slice.ts
381
387
  function isHighSurrogate(codeUnit) {
382
388
  return codeUnit >= 55296 && codeUnit <= 56319;
383
389
  }
@@ -390,7 +396,8 @@ function avoidTrailingHighSurrogateBreak(text, start, end) {
390
396
  const adjusted = end - 1;
391
397
  return adjusted > start ? adjusted : end + 1;
392
398
  }
393
- // packages/normalization-core/src/grapheme.ts
399
+ //#endregion
400
+ //#region packages/normalization-core/src/grapheme.ts
394
401
  let graphemeSegmenter;
395
402
  function getGraphemeSegmenter() {
396
403
  graphemeSegmenter ??= new Intl.Segmenter(void 0, { granularity: "grapheme" });
@@ -414,7 +421,8 @@ function findGraphemeChunkEnd(text, start, maxEnd, preferredEnd = maxEnd, allowP
414
421
  if (end <= start && preferred < hardEnd) end = hardEnd === text.length ? hardEnd : segments.containing(hardEnd)?.index ?? hardEnd;
415
422
  return end > start ? end : allowPartial ? avoidTrailingHighSurrogateBreak(text, start, hardEnd) : start;
416
423
  }
417
- // extensions/irc/src/protocol.ts
424
+ //#endregion
425
+ //#region extensions/irc/src/protocol.ts
418
426
  const IRC_TARGET_PATTERN = /^[^\s:]+$/u;
419
427
  function parseIrcLine(line) {
420
428
  const raw = line.replace(/[\r\n]+/g, "").trim();
@@ -487,7 +495,8 @@ function sanitizeIrcTarget(raw) {
487
495
  if (raw !== raw.trim() || hasIrcControlChars(raw) || !IRC_TARGET_PATTERN.test(raw)) throw new Error(`Invalid IRC target: ${raw}`);
488
496
  return raw;
489
497
  }
490
- // extensions/irc/src/client.ts
498
+ //#endregion
499
+ //#region extensions/irc/src/client.ts
491
500
  const IRC_ERROR_CODES = /* @__PURE__ */ new Set([
492
501
  "432",
493
502
  "464",
@@ -809,7 +818,8 @@ async function connectIrcClient(options) {
809
818
  close
810
819
  };
811
820
  }
812
- // extensions/irc/src/connect-options.ts
821
+ //#endregion
822
+ //#region extensions/irc/src/connect-options.ts
813
823
  function buildIrcConnectOptions(account, overrides = {}) {
814
824
  assertSecretOwnerAvailable("account", `irc:${account.accountId}`);
815
825
  if (account.tokenStatus === "configured_unavailable") throw new Error(`IRC credentials for account "${account.accountId}" are configured but unavailable.`);
@@ -831,7 +841,8 @@ function buildIrcConnectOptions(account, overrides = {}) {
831
841
  ...overrides
832
842
  };
833
843
  }
834
- // extensions/irc/src/send.ts
844
+ //#endregion
845
+ //#region extensions/irc/src/send.ts
835
846
  async function sendIrcMessages(to, text, opts, planMessages = (preparedText) => [{
836
847
  text: preparedText,
837
848
  replyTo: opts.replyTo
@@ -928,7 +939,8 @@ async function sendMessageIrc(to, text, opts) {
928
939
  if (!result) throw new Error("Message must be non-empty for IRC sends");
929
940
  return result;
930
941
  }
931
- // extensions/irc/src/message-adapter.ts
942
+ //#endregion
943
+ //#region extensions/irc/src/message-adapter.ts
932
944
  function toIrcMessageResult({ target, ...result }) {
933
945
  return {
934
946
  ...result,
@@ -977,7 +989,8 @@ const ircMessageAdapter = defineChannelMessageAdapter({
977
989
  media: (ctx) => sendIrcMessage(ctx, ctx.mediaUrl ? `${ctx.text}\n\nAttachment: ${ctx.mediaUrl}` : ctx.text)
978
990
  }
979
991
  });
980
- // extensions/irc/src/policy.ts
992
+ //#endregion
993
+ //#region extensions/irc/src/policy.ts
981
994
  function resolveIrcGroupScope(params) {
982
995
  const { "*": wildcard, ...groups } = params.groups ?? {};
983
996
  const project = (entry) => ({
@@ -1020,7 +1033,8 @@ function resolveIrcGroupToolPolicy(params) {
1020
1033
  path
1021
1034
  });
1022
1035
  }
1023
- // extensions/irc/src/probe.ts
1036
+ //#endregion
1037
+ //#region extensions/irc/src/probe.ts
1024
1038
  function formatError(err) {
1025
1039
  if (err instanceof Error) return err.message;
1026
1040
  return typeof err === "string" ? err : JSON.stringify(err);
@@ -1058,7 +1072,8 @@ async function probeIrc(cfg, opts) {
1058
1072
  };
1059
1073
  }
1060
1074
  }
1061
- // extensions/irc/src/setup-core.ts
1075
+ //#endregion
1076
+ //#region extensions/irc/src/setup-core.ts
1062
1077
  const channel$1 = "irc";
1063
1078
  const setIrcDmPolicy = createTopLevelChannelDmPolicySetter({ channel: channel$1 });
1064
1079
  const setIrcAllowFrom = createTopLevelChannelAllowFromSetter({ channel: channel$1 });
@@ -1207,7 +1222,8 @@ const ircSetupContract = defineChannelSetupContract({
1207
1222
  },
1208
1223
  legacyAdapter: ircSetupAdapter
1209
1224
  });
1210
- // extensions/irc/src/setup-surface.ts
1225
+ //#endregion
1226
+ //#region extensions/irc/src/setup-surface.ts
1211
1227
  const t = createSetupTranslator();
1212
1228
  const channel = "irc";
1213
1229
  const USE_ENV_FLAG = "__ircUseEnv";
@@ -1525,7 +1541,8 @@ const ircSetupWizard = {
1525
1541
  dmPolicy: ircDmPolicy,
1526
1542
  disable: (cfg) => setSetupChannelEnabled(cfg, channel, false)
1527
1543
  };
1528
- // extensions/irc/src/channel.ts
1544
+ //#endregion
1545
+ //#region extensions/irc/src/channel.ts
1529
1546
  const meta = {
1530
1547
  id: "irc",
1531
1548
  label: "IRC",
@@ -1773,7 +1790,7 @@ const ircPlugin = createChatChannelPlugin({
1773
1790
  notify: async ({ cfg, id, message, accountId }) => {
1774
1791
  const target = normalizePairingTarget(id);
1775
1792
  if (!target) throw new Error(`invalid IRC pairing id: ${id}`);
1776
- const { sendMessageIrc } = await import("./channel-runtime-exb5AWhn.mjs");
1793
+ const { sendMessageIrc } = await import("./channel-runtime-B4OMtNnX.mjs");
1777
1794
  await sendMessageIrc(target, message, {
1778
1795
  cfg,
1779
1796
  accountId
@@ -1799,4 +1816,5 @@ const ircPlugin = createChatChannelPlugin({
1799
1816
  }
1800
1817
  }
1801
1818
  });
1819
+ //#endregion
1802
1820
  export { listIrcAccountIds as _, resolveIrcGroupRequireMention as a, connectIrcClient as c, sanitizeIrcAssistantText as d, createIrcIngressSubject as f, listEnabledIrcAccounts as g, normalizeIrcAllowEntry as h, resolveIrcGroupMatch as i, parseIrcLine as l, isChannelTarget as m, ircSetupWizard as n, sendMessageIrc as o, ircIngressIdentity as p, ircSetupAdapter as r, buildIrcConnectOptions as s, ircPlugin as t, parseIrcPrefix as u, resolveDefaultIrcAccountId as v, resolveIrcAccount as y };
@@ -0,0 +1,3 @@
1
+ import { t as ircPlugin } from "./channel-Bi4lj8N2.mjs";
2
+ import "../channel-plugin-api.js";
3
+ export { ircPlugin };
@@ -1,5 +1,5 @@
1
- import { a as resolveIrcGroupRequireMention, c as connectIrcClient, d as sanitizeIrcAssistantText, f as createIrcIngressSubject, h as normalizeIrcAllowEntry, i as resolveIrcGroupMatch, l as parseIrcLine, m as isChannelTarget, o as sendMessageIrc, p as ircIngressIdentity, s as buildIrcConnectOptions, u as parseIrcPrefix, y as resolveIrcAccount } from "./channel-t-k-A5n4.mjs";
2
- import { t as getIrcRuntime } from "./runtime-CsdAoZex.mjs";
1
+ import { a as resolveIrcGroupRequireMention, c as connectIrcClient, d as sanitizeIrcAssistantText, f as createIrcIngressSubject, h as normalizeIrcAllowEntry, i as resolveIrcGroupMatch, l as parseIrcLine, m as isChannelTarget, o as sendMessageIrc, p as ircIngressIdentity, s as buildIrcConnectOptions, u as parseIrcPrefix, y as resolveIrcAccount } from "./channel-Bi4lj8N2.mjs";
2
+ import { t as getIrcRuntime } from "./runtime-C_V9tmpk.mjs";
3
3
  import { channelIngressRoutes } from "openclaw/plugin-sdk/channel-ingress-runtime";
4
4
  import { computeBackoff } from "openclaw/plugin-sdk/runtime-env";
5
5
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -14,7 +14,7 @@ import { isDangerousNameMatchingEnabled } from "openclaw/plugin-sdk/dangerous-na
14
14
  import { deliverFormattedTextWithAttachments } from "openclaw/plugin-sdk/reply-payload";
15
15
  import { GROUP_POLICY_BLOCKED_LABEL, resolveAllowlistProviderRuntimeGroupPolicy, resolveDefaultGroupPolicy, warnMissingProviderGroupPolicyFallbackOnce } from "openclaw/plugin-sdk/runtime-group-policy";
16
16
  import { escapeRegExp } from "openclaw/plugin-sdk/text-utility-runtime";
17
- // extensions/irc/src/inbound.ts
17
+ //#region extensions/irc/src/inbound.ts
18
18
  const CHANNEL_ID = "irc";
19
19
  const IRC_NICK_CHARACTER = String.raw`[A-Za-z0-9_\-\[\]\\\x60^{}|~]`;
20
20
  const IRC_RFC1459_CASE_EQUIVALENTS = /* @__PURE__ */ new Map([
@@ -335,7 +335,8 @@ async function handleIrcInbound(params) {
335
335
  }
336
336
  return ingressState.handoff === "deferred" || ingressState.handoff === "abandoned" ? { kind: "deferred" } : { kind: "completed" };
337
337
  }
338
- // extensions/irc/src/irc-ingress.ts
338
+ //#endregion
339
+ //#region extensions/irc/src/irc-ingress.ts
339
340
  const IRC_INGRESS_PAYLOAD_VERSION = 1;
340
341
  const IRC_INGRESS_POLL_INTERVAL_MS = 1e3;
341
342
  const IrcIngressPayloadError = createChannelIngressError("IrcIngressPayloadError");
@@ -468,7 +469,8 @@ function createIrcIngressMonitor(options) {
468
469
  waitForIdle: monitor.waitForIdle
469
470
  };
470
471
  }
471
- // extensions/irc/src/reconnect-backoff.ts
472
+ //#endregion
473
+ //#region extensions/irc/src/reconnect-backoff.ts
472
474
  const IRC_RECONNECT_BACKOFF = {
473
475
  initialMs: 1e3,
474
476
  maxMs: 3e4,
@@ -491,7 +493,8 @@ function createIrcReconnectBackoff(now = Date.now) {
491
493
  }
492
494
  };
493
495
  }
494
- // extensions/irc/src/monitor.ts
496
+ //#endregion
497
+ //#region extensions/irc/src/monitor.ts
495
498
  async function monitorIrcProvider(opts) {
496
499
  const core = getIrcRuntime();
497
500
  const cfg = opts.config ?? core.config.current();
@@ -645,4 +648,5 @@ async function monitorIrcProvider(opts) {
645
648
  return stopTask;
646
649
  } };
647
650
  }
651
+ //#endregion
648
652
  export { monitorIrcProvider, sendMessageIrc };
@@ -1,7 +1,7 @@
1
1
  import { createChannelConfigUiHints } from "openclaw/plugin-sdk/channel-core";
2
2
  import { ChannelGroupEntrySchema, DmPolicySchema, GroupPolicySchema, MarkdownConfigSchema, ReplyRuntimeConfigSchemaShape, ReplyToModeSchema, buildChannelConfigSchema, buildMultiAccountChannelSchema, requireOpenAllowFrom } from "openclaw/plugin-sdk/channel-config-schema";
3
3
  import { z } from "zod";
4
- // extensions/irc/src/config-ui-hints.ts
4
+ //#region extensions/irc/src/config-ui-hints.ts
5
5
  const ircChannelConfigUiHints = {
6
6
  "": {
7
7
  label: "IRC",
@@ -40,7 +40,8 @@ const ircChannelConfigUiHints = {
40
40
  configWrites: true
41
41
  })
42
42
  };
43
- // extensions/irc/src/config-schema.ts
43
+ //#endregion
44
+ //#region extensions/irc/src/config-schema.ts
44
45
  const IrcNickServSchema = z.object({
45
46
  enabled: z.boolean().optional(),
46
47
  service: z.string().optional(),
@@ -94,4 +95,5 @@ const IrcConfigSchema = buildMultiAccountChannelSchema(IrcAccountSchemaBase, {
94
95
  }
95
96
  });
96
97
  const IrcChannelConfigSchema = buildChannelConfigSchema(IrcConfigSchema, { uiHints: ircChannelConfigUiHints });
98
+ //#endregion
97
99
  export { IrcChannelConfigSchema as t };
@@ -1,7 +1,8 @@
1
1
  import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
2
- // extensions/irc/src/runtime.ts
2
+ //#region extensions/irc/src/runtime.ts
3
3
  const { setRuntime: setIrcRuntime, getRuntime: getIrcRuntime, tryGetRuntime: getOptionalIrcRuntime } = createPluginRuntimeStore({
4
4
  pluginId: "irc",
5
5
  errorMessage: "IRC runtime not initialized"
6
6
  });
7
+ //#endregion
7
8
  export { getOptionalIrcRuntime as n, setIrcRuntime as r, getIrcRuntime as t };
@@ -1,5 +1,5 @@
1
1
  import { collectNestedChannelFieldAssignments, collectSimpleChannelFieldAssignments, createChannelSecretContract, isBaseFieldActiveForChannelSurface, isEnabledFlag, isRecord } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
2
- // extensions/irc/src/secret-contract.ts
2
+ //#region extensions/irc/src/secret-contract.ts
3
3
  const channelSecrets = createChannelSecretContract({
4
4
  channelKey: "irc",
5
5
  account: ["nickserv.password", "password"],
@@ -25,4 +25,5 @@ const channelSecrets = createChannelSecretContract({
25
25
  }
26
26
  });
27
27
  const { secretTargetRegistryEntries, collectRuntimeConfigAssignments } = channelSecrets;
28
+ //#endregion
28
29
  export { collectRuntimeConfigAssignments as n, secretTargetRegistryEntries as r, channelSecrets as t };
@@ -0,0 +1,3 @@
1
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./secret-contract-C5i-29Hz.mjs";
2
+ import "../secret-contract-api.js";
3
+ export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
package/dist/api.js CHANGED
@@ -1,3 +1,3 @@
1
- import { _ as listIrcAccountIds, g as listEnabledIrcAccounts, n as ircSetupWizard, r as ircSetupAdapter, t as ircPlugin, v as resolveDefaultIrcAccountId, y as resolveIrcAccount } from "./.setup/channel-t-k-A5n4.mjs";
2
- import { r as setIrcRuntime } from "./.setup/runtime-CsdAoZex.mjs";
1
+ import { _ as listIrcAccountIds, g as listEnabledIrcAccounts, n as ircSetupWizard, r as ircSetupAdapter, t as ircPlugin, v as resolveDefaultIrcAccountId, y as resolveIrcAccount } from "./.setup/channel-Bi4lj8N2.mjs";
2
+ import { r as setIrcRuntime } from "./.setup/runtime-C_V9tmpk.mjs";
3
3
  export { ircPlugin, ircSetupAdapter, ircSetupWizard, listEnabledIrcAccounts, listIrcAccountIds, resolveDefaultIrcAccountId, resolveIrcAccount, setIrcRuntime };
@@ -1 +1,2 @@
1
- export { t as IrcChannelConfigSchema } from "./.setup/config-schema-DFqPW9AB.mjs";
1
+ import { t as IrcChannelConfigSchema } from "./.setup/config-schema-Cy9tItsu.mjs";
2
+ export { IrcChannelConfigSchema };
@@ -1 +1,2 @@
1
- export { t as ircPlugin } from "./.setup/channel-t-k-A5n4.mjs";
1
+ import { t as ircPlugin } from "./.setup/channel-Bi4lj8N2.mjs";
2
+ export { ircPlugin };
@@ -1,4 +1,4 @@
1
- // \0rolldown/runtime.js
1
+ //#region \0rolldown/runtime.js
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -23,7 +23,8 @@ var __copyProps = (to, from, except, desc) => {
23
23
  return to;
24
24
  };
25
25
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
26
- // packages/normalization-core/src/record-coerce.ts
26
+ //#endregion
27
+ //#region packages/normalization-core/src/record-coerce.ts
27
28
  /** Type guard for non-array object records at browser-safe boundaries. */
28
29
  function isRecord(value) {
29
30
  return value !== null && typeof value === "object" && !Array.isArray(value);
@@ -32,7 +33,8 @@ function isRecord(value) {
32
33
  function asNullableRecord(value) {
33
34
  return isRecord(value) ? value : null;
34
35
  }
35
- // src/config/channel-config-normalization.ts
36
+ //#endregion
37
+ //#region src/config/channel-config-normalization.ts
36
38
  /** Applies one channel-specific doctor migration to every object-shaped account. */
37
39
  function normalizeChannelAccounts(params) {
38
40
  const rawAccounts = asNullableRecord(params.entry.accounts);
@@ -108,7 +110,8 @@ function normalizeChannelConfigEntries(params) {
108
110
  changes
109
111
  };
110
112
  }
111
- // src/plugin-sdk/legacy-webhook-listener-migration.ts
113
+ //#endregion
114
+ //#region src/plugin-sdk/legacy-webhook-listener-migration.ts
112
115
  /** Preserve explicitly configured webhook listeners while moving ingress onto Gateway routes. */
113
116
  function createLegacyWebhookListenerDoctorContract(params) {
114
117
  const portKey = params.portKey ?? "webhookPort";
@@ -178,11 +181,13 @@ function createLegacyWebhookListenerDoctorContract(params) {
178
181
  }
179
182
  };
180
183
  }
181
- // \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
184
+ //#endregion
185
+ //#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
182
186
  var runtime_doctor_migrations_exports = /* @__PURE__ */ __exportAll({ createLegacyWebhookListenerDoctorContract: () => createLegacyWebhookListenerDoctorContract });
183
187
  import * as import_openclaw_plugin_sdk_runtime_doctor_migrations from "openclaw/plugin-sdk/runtime-doctor-migrations";
184
188
  __reExport(runtime_doctor_migrations_exports, import_openclaw_plugin_sdk_runtime_doctor_migrations);
185
- // extensions/irc/config-doctor-api.ts
189
+ //#endregion
190
+ //#region extensions/irc/config-doctor-api.ts
186
191
  const streamingAliasMigration = (0, runtime_doctor_migrations_exports.defineChannelAliasMigration)({
187
192
  channelId: "irc",
188
193
  streaming: {
@@ -225,4 +230,5 @@ function normalizeCompatibilityConfig({ cfg }) {
225
230
  changes
226
231
  };
227
232
  }
233
+ //#endregion
228
234
  export { legacyConfigRules, normalizeCompatibilityConfig };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { defineBundledChannelEntry } from "openclaw/plugin-sdk/channel-entry-contract";
2
- // extensions/irc/index.ts
2
+ //#region extensions/irc/index.ts
3
3
  var irc_default = defineBundledChannelEntry({
4
4
  id: "irc",
5
5
  name: "IRC",
@@ -18,4 +18,5 @@ var irc_default = defineBundledChannelEntry({
18
18
  exportName: "setIrcRuntime"
19
19
  }
20
20
  });
21
+ //#endregion
21
22
  export { irc_default as default };
@@ -1 +1,2 @@
1
- export { r as setIrcRuntime } from "./.setup/runtime-CsdAoZex.mjs";
1
+ import { r as setIrcRuntime } from "./.setup/runtime-C_V9tmpk.mjs";
2
+ export { setIrcRuntime };
@@ -1 +1,2 @@
1
- export { t as channelSecrets, n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./.setup/secret-contract-0Ccz8X9F.mjs";
1
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./.setup/secret-contract-C5i-29Hz.mjs";
2
+ export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
@@ -1,15 +1,16 @@
1
1
  import { defineBundledChannelSetupEntry } from "openclaw/plugin-sdk/channel-entry-contract";
2
2
  import { fileURLToPath } from "node:url";
3
- // extensions/irc/setup-entry.ts
3
+ //#region extensions/irc/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/channel-plugin-api-DRR9Fg5C.mjs", import.meta.url).href),
7
+ specifier: fileURLToPath(new URL(".setup/channel-plugin-api-U3Pg1KLp.mjs", import.meta.url).href),
8
8
  exportName: "ircPlugin"
9
9
  },
10
10
  secrets: {
11
- specifier: fileURLToPath(new URL(".setup/secret-contract-api-BabNUhhB.mjs", import.meta.url).href),
11
+ specifier: fileURLToPath(new URL(".setup/secret-contract-api-ClqD0Rpm.mjs", import.meta.url).href),
12
12
  exportName: "channelSecrets"
13
13
  }
14
14
  });
15
+ //#endregion
15
16
  export { setup_entry_default as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/irc",
3
- "version": "2026.10.10",
3
+ "version": "2026.11.2",
4
4
  "description": "OpenClaw IRC channel plugin",
5
5
  "type": "module",
6
6
  "openclaw": {
@@ -121,10 +121,10 @@
121
121
  }
122
122
  },
123
123
  "compat": {
124
- "pluginApi": ">=2026.10.10"
124
+ "pluginApi": ">=2026.11.2"
125
125
  },
126
126
  "build": {
127
- "openclawVersion": "2026.10.10",
127
+ "openclawVersion": "2026.11.2",
128
128
  "bundledDist": false
129
129
  },
130
130
  "release": {
@@ -151,7 +151,7 @@
151
151
  "assets/activity.svg"
152
152
  ],
153
153
  "peerDependencies": {
154
- "openclaw": ">=2026.10.10"
154
+ "openclaw": ">=2026.11.2"
155
155
  },
156
156
  "peerDependenciesMeta": {
157
157
  "openclaw": {
@@ -1,2 +0,0 @@
1
- export { t as ircPlugin } from "./channel-t-k-A5n4.mjs";
2
- import "../channel-plugin-api.js";
@@ -1,2 +0,0 @@
1
- export { t as channelSecrets, n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-0Ccz8X9F.mjs";
2
- import "../secret-contract-api.js";
@@ -1 +0,0 @@
1
- {"version":3,"entries":[{"output":"api.js","source":"extensions/irc/api.ts"},{"output":"channel-config-api.js","source":"extensions/irc/channel-config-api.ts"},{"output":"channel-plugin-api.js","source":"extensions/irc/channel-plugin-api.ts"},{"output":"doctor-contract-api.js","source":"extensions/irc/doctor-contract-api.ts"},{"output":"index.js","source":"extensions/irc/index.ts"},{"output":"runtime-api.js","source":"extensions/irc/runtime-api.ts"},{"output":"secret-contract-api.js","source":"extensions/irc/secret-contract-api.ts"},{"output":"setup-entry.js","source":"extensions/irc/setup-entry.ts"}],"chunks":[{"output":".setup/channel-plugin-api-DRR9Fg5C.mjs","sha256":"595f8cb5fadb89d6916c3b2ee4461442252a6bcc3e734c0f20afb0e5476b1f12","facadeSource":"extensions/irc/channel-plugin-api.ts","sources":[]},{"output":".setup/channel-runtime-exb5AWhn.mjs","sha256":"481aebc6ffcb9c6ac70f148f7c8e8087633f5a2ed47a35512e9ba1296354b867","facadeSource":"extensions/irc/src/channel-runtime.ts","sources":["extensions/irc/src/inbound.ts","extensions/irc/src/irc-ingress.ts","extensions/irc/src/monitor.ts","extensions/irc/src/reconnect-backoff.ts"]},{"output":".setup/channel-t-k-A5n4.mjs","sha256":"235bad2d1ca030fec268f94da263a398f8045a2e15648e5065e7dbfcf84f57ce","facadeSource":null,"sources":["extensions/irc/src/accounts.ts","extensions/irc/src/channel.ts","extensions/irc/src/client.ts","extensions/irc/src/connect-options.ts","extensions/irc/src/control-chars.ts","extensions/irc/src/doctor.ts","extensions/irc/src/gateway.ts","extensions/irc/src/ingress-identity.ts","extensions/irc/src/message-adapter.ts","extensions/irc/src/normalize.ts","extensions/irc/src/outbound-base.ts","extensions/irc/src/policy.ts","extensions/irc/src/probe.ts","extensions/irc/src/protocol.ts","extensions/irc/src/send.ts","extensions/irc/src/setup-core.ts","extensions/irc/src/setup-surface.ts","packages/normalization-core/src/grapheme.ts","packages/normalization-core/src/utf16-slice.ts"]},{"output":".setup/config-schema-DFqPW9AB.mjs","sha256":"6d746ae292f6e0eb8f2955d4f0420e2b7e7ae1d38b70f0be5ca9bc58a58a3abc","facadeSource":null,"sources":["extensions/irc/src/config-schema.ts","extensions/irc/src/config-ui-hints.ts"]},{"output":".setup/runtime-CsdAoZex.mjs","sha256":"b482d973b5d4bf23cc5ec66bdc228ee7151794a36eec497e57ad9e9e27aa48b0","facadeSource":null,"sources":["extensions/irc/src/runtime.ts"]},{"output":".setup/secret-contract-0Ccz8X9F.mjs","sha256":"a2107dd2d2a2f07298fa31d9228fba57db3af18a0cf3f2e8039db0f6cbe9de15","facadeSource":null,"sources":["extensions/irc/src/secret-contract.ts"]},{"output":".setup/secret-contract-api-BabNUhhB.mjs","sha256":"f6810408d2a21938d4e2b0e823f443859ca71d84723d877f9497b6a7221c5c0d","facadeSource":"extensions/irc/secret-contract-api.ts","sources":[]},{"output":"api.js","sha256":"c1b630eb59bd96e7beac2dc42b7248139950c923e47d0f2975d82df84aa26b63","facadeSource":"extensions/irc/api.ts","sources":[]},{"output":"channel-config-api.js","sha256":"32df3451c98b492d9a4c77d3617b5511e3f21b938bb3e1e5cc3e7742fffcebd6","facadeSource":"extensions/irc/channel-config-api.ts","sources":[]},{"output":"channel-plugin-api.js","sha256":"814b49bb90e10a19f0c585e6bab086f98eb3de619e86a8ef140628e702b69c2a","facadeSource":"extensions/irc/channel-plugin-api.ts","sources":[]},{"output":"doctor-contract-api.js","sha256":"8b0484eda902108365f4548d42566303c6dcbb3ccfc89ba0e06a8633a6864819","facadeSource":"extensions/irc/doctor-contract-api.ts","sources":["extensions/irc/config-doctor-api.ts","packages/normalization-core/src/record-coerce.ts","src/config/channel-config-normalization.ts","src/plugin-sdk/legacy-webhook-listener-migration.ts"]},{"output":"index.js","sha256":"c399885749c923bf11c27c34eb67cc4f07def79ee3610b899d92db1a75e944f6","facadeSource":"extensions/irc/index.ts","sources":["extensions/irc/index.ts"]},{"output":"runtime-api.js","sha256":"71a18976cee49bc28f82b6e930e758f6efe6ea5527dff725f7cac5a823600190","facadeSource":"extensions/irc/runtime-api.ts","sources":[]},{"output":"secret-contract-api.js","sha256":"01ed5e83bd4b44f756a0591ab306fb1f569fe95d78d19671a9c41e48a0a4857d","facadeSource":"extensions/irc/secret-contract-api.ts","sources":[]},{"output":"setup-entry.js","sha256":"6c7a77c5764106ad3b98d108a762e1026bd5def3ae83b43a2013a3c8e0d084de","facadeSource":"extensions/irc/setup-entry.ts","sources":["extensions/irc/setup-entry.ts"]}],"unrenderedSources":["extensions/irc/api.ts","extensions/irc/channel-config-api.ts","extensions/irc/channel-plugin-api.ts","extensions/irc/doctor-contract-api.ts","extensions/irc/runtime-api.ts","extensions/irc/secret-contract-api.ts","extensions/irc/src/channel-runtime.ts","src/plugin-sdk/text-grapheme.ts"]}