@openclaw/irc 2026.10.5-beta.3 → 2026.10.5

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.
@@ -207,7 +207,7 @@ async function startIrcGatewayAccount(ctx) {
207
207
  });
208
208
  if (!account.configured) throw new Error(`IRC is not configured for account "${account.accountId}" (need host and nick in channels.irc).`);
209
209
  ctx.log?.info?.(`[${account.accountId}] starting IRC provider (${account.host}:${account.port}${account.tls ? " tls" : ""})`);
210
- const { monitorIrcProvider } = await import("./channel-runtime-FNBqToAo.mjs");
210
+ const { monitorIrcProvider } = await import("./channel-runtime-CD33S4SX.mjs");
211
211
  await runPassiveAccountLifecycle({
212
212
  abortSignal: ctx.abortSignal,
213
213
  start: async () => await monitorIrcProvider({
@@ -513,6 +513,7 @@ const IRC_MAX_LINE_BYTES = 512;
513
513
  const IRC_MAX_RELAY_USER_BYTES = 11;
514
514
  const IRC_MAX_RELAY_HOST_BYTES = 63;
515
515
  const IRC_MAX_INBOUND_LINE_LENGTH = 16384;
516
+ const IRC_LIVENESS_TIMEOUT_MS = 24e4;
516
517
  function takeIrcPrivmsgChunk(text, maxChars, maxBytes) {
517
518
  let end = 0;
518
519
  let bytes = 0;
@@ -652,9 +653,20 @@ async function connectIrcClient(options) {
652
653
  throw error;
653
654
  });
654
655
  };
656
+ let lastReceivedAt = Date.now();
657
+ const livenessTimer = setInterval(() => {
658
+ if (!ready || closed) return;
659
+ const silentMs = Date.now() - lastReceivedAt;
660
+ if (silentMs >= IRC_LIVENESS_TIMEOUT_MS) {
661
+ fail(/* @__PURE__ */ new Error(`IRC server sent nothing for ${Math.round(silentMs / 1e3)}s; reconnecting`));
662
+ socket.destroy();
663
+ } else if (silentMs >= IRC_LIVENESS_TIMEOUT_MS / 2) sendRaw("PING :openclaw");
664
+ }, 3e4);
665
+ livenessTimer.unref();
655
666
  const quit = (reason) => {
656
667
  if (closed) return;
657
668
  closed = true;
669
+ clearInterval(livenessTimer);
658
670
  removeAbortListener?.();
659
671
  removeAbortListener = null;
660
672
  const safeReason = sanitizeIrcOutboundText(reason ?? "bye");
@@ -667,6 +679,7 @@ async function connectIrcClient(options) {
667
679
  const close = () => {
668
680
  if (closed) return;
669
681
  closed = true;
682
+ clearInterval(livenessTimer);
670
683
  removeAbortListener?.();
671
684
  removeAbortListener = null;
672
685
  socket.destroy();
@@ -681,6 +694,7 @@ async function connectIrcClient(options) {
681
694
  };
682
695
  socket.on("data", (chunk) => {
683
696
  if (receiveOverflowed) return;
697
+ lastReceivedAt = Date.now();
684
698
  buffer += chunk;
685
699
  let idx = buffer.indexOf("\n");
686
700
  while (idx !== -1) {
@@ -768,6 +782,7 @@ async function connectIrcClient(options) {
768
782
  fail(err);
769
783
  });
770
784
  socket.once("close", () => {
785
+ clearInterval(livenessTimer);
771
786
  if (!closed) {
772
787
  closed = true;
773
788
  removeAbortListener?.();
@@ -1779,7 +1794,7 @@ const ircPlugin = createChatChannelPlugin({
1779
1794
  notify: async ({ cfg, id, message, accountId }) => {
1780
1795
  const target = normalizePairingTarget(id);
1781
1796
  if (!target) throw new Error(`invalid IRC pairing id: ${id}`);
1782
- const { sendMessageIrc } = await import("./channel-runtime-FNBqToAo.mjs");
1797
+ const { sendMessageIrc } = await import("./channel-runtime-CD33S4SX.mjs");
1783
1798
  await sendMessageIrc(target, message, {
1784
1799
  cfg,
1785
1800
  accountId
@@ -0,0 +1,2 @@
1
+ export { t as ircPlugin } from "./channel-BUxLmWSQ.mjs";
2
+ import "../channel-plugin-api.js";
@@ -1,4 +1,4 @@
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-BXrFfvr6.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-BUxLmWSQ.mjs";
2
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";
@@ -0,0 +1,2 @@
1
+ export { t as channelSecrets, n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-C5i-29Hz.mjs";
2
+ import "../secret-contract-api.js";
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-BXrFfvr6.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-BUxLmWSQ.mjs";
2
2
  import { r as setIrcRuntime } from "./.setup/runtime-C_V9tmpk.mjs";
3
3
  export { ircPlugin, ircSetupAdapter, ircSetupWizard, listEnabledIrcAccounts, listIrcAccountIds, resolveDefaultIrcAccountId, resolveIrcAccount, setIrcRuntime };
@@ -1,2 +1 @@
1
- import { t as IrcChannelConfigSchema } from "./.setup/config-schema-Cy9tItsu.mjs";
2
- export { IrcChannelConfigSchema };
1
+ export { t as IrcChannelConfigSchema } from "./.setup/config-schema-Cy9tItsu.mjs";
@@ -1,2 +1 @@
1
- import { t as ircPlugin } from "./.setup/channel-BXrFfvr6.mjs";
2
- export { ircPlugin };
1
+ export { t as ircPlugin } from "./.setup/channel-BUxLmWSQ.mjs";
@@ -1,2 +1 @@
1
- import { r as setIrcRuntime } from "./.setup/runtime-C_V9tmpk.mjs";
2
- export { setIrcRuntime };
1
+ export { r as setIrcRuntime } from "./.setup/runtime-C_V9tmpk.mjs";
@@ -1,2 +1 @@
1
- import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./.setup/secret-contract-C5i-29Hz.mjs";
2
- export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
1
+ export { t as channelSecrets, n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./.setup/secret-contract-C5i-29Hz.mjs";
@@ -4,11 +4,11 @@ import { fileURLToPath } from "node:url";
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-tb7ep4Ml.mjs", import.meta.url).href),
7
+ specifier: fileURLToPath(new URL(".setup/channel-plugin-api-BVB1wJle.mjs", import.meta.url).href),
8
8
  exportName: "ircPlugin"
9
9
  },
10
10
  secrets: {
11
- specifier: fileURLToPath(new URL(".setup/secret-contract-api-ClqD0Rpm.mjs", import.meta.url).href),
11
+ specifier: fileURLToPath(new URL(".setup/secret-contract-api-4IT9_EK6.mjs", import.meta.url).href),
12
12
  exportName: "channelSecrets"
13
13
  }
14
14
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/irc",
3
- "version": "2026.10.5-beta.3",
3
+ "version": "2026.10.5",
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.5-beta.3"
124
+ "pluginApi": ">=2026.10.5"
125
125
  },
126
126
  "build": {
127
- "openclawVersion": "2026.10.5-beta.3",
127
+ "openclawVersion": "2026.10.5",
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.5-beta.3"
154
+ "openclaw": ">=2026.10.5"
155
155
  },
156
156
  "peerDependenciesMeta": {
157
157
  "openclaw": {
@@ -1,3 +0,0 @@
1
- import { t as ircPlugin } from "./channel-BXrFfvr6.mjs";
2
- import "../channel-plugin-api.js";
3
- export { ircPlugin };
@@ -1,3 +0,0 @@
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 };