@openclaw/irc 2026.7.2-beta.7 → 2026.7.34

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
1
  import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
2
2
  //#region extensions/irc/src/runtime.ts
3
- const { setRuntime: setIrcRuntime, getRuntime: getIrcRuntime } = createPluginRuntimeStore({
3
+ const { setRuntime: setIrcRuntime, clearRuntime: clearStoredIrcRuntime, getRuntime: getIrcRuntime } = createPluginRuntimeStore({
4
4
  pluginId: "irc",
5
5
  errorMessage: "IRC runtime not initialized"
6
6
  });
@@ -0,0 +1,82 @@
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 };
@@ -0,0 +1,3 @@
1
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./secret-contract-DdKIs_mx.mjs";
2
+ import "../secret-contract-api.js";
3
+ export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
package/dist/api.js CHANGED
@@ -1,3 +1,3 @@
1
- import { _ as resolveDefaultIrcAccountId, g as listIrcAccountIds, h as listEnabledIrcAccounts, n as ircSetupWizard, r as ircSetupAdapter, t as ircPlugin, v as resolveIrcAccount } from "./channel-DoavT7vs.js";
2
- import { n as setIrcRuntime } from "./runtime-xy-FcjJC.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 "./.setup/channel-SaGThQQW.mjs";
2
+ import { n as setIrcRuntime } from "./.setup/runtime-DZfYm3vY.mjs";
3
3
  export { ircPlugin, ircSetupAdapter, ircSetupWizard, listEnabledIrcAccounts, listIrcAccountIds, resolveDefaultIrcAccountId, resolveIrcAccount, setIrcRuntime };
@@ -1,2 +1,2 @@
1
- import { t as IrcChannelConfigSchema } from "./config-schema-BPoye3--.js";
1
+ import { t as IrcChannelConfigSchema } from "./.setup/config-schema-BQXbFpTD.mjs";
2
2
  export { IrcChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as ircPlugin } from "./channel-DoavT7vs.js";
1
+ import { t as ircPlugin } from "./.setup/channel-SaGThQQW.mjs";
2
2
  export { ircPlugin };
@@ -0,0 +1,6 @@
1
+ //#region extensions/irc/configured-state.ts
2
+ function hasIrcConfiguredState(params) {
3
+ return typeof params.env?.IRC_HOST === "string" && params.env.IRC_HOST.trim().length > 0 && typeof params.env?.IRC_NICK === "string" && params.env.IRC_NICK.trim().length > 0;
4
+ }
5
+ //#endregion
6
+ export { hasIrcConfiguredState };
@@ -1,2 +1,2 @@
1
- import { n as setIrcRuntime } from "./runtime-xy-FcjJC.js";
1
+ import { n as setIrcRuntime } from "./.setup/runtime-DZfYm3vY.mjs";
2
2
  export { setIrcRuntime };
@@ -1,2 +1,2 @@
1
- import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./secret-contract-D_DC3YWj.js";
1
+ import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./.setup/secret-contract-DdKIs_mx.mjs";
2
2
  export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
@@ -1,13 +1,14 @@
1
1
  import { defineBundledChannelSetupEntry } from "openclaw/plugin-sdk/channel-entry-contract";
2
+ import { fileURLToPath } from "node:url";
2
3
  //#region extensions/irc/setup-entry.ts
3
4
  var setup_entry_default = defineBundledChannelSetupEntry({
4
5
  importMetaUrl: import.meta.url,
5
6
  plugin: {
6
- specifier: "./channel-plugin-api.js",
7
+ specifier: fileURLToPath(new URL(".setup/channel-plugin-api-04wlnIps.mjs", import.meta.url).href),
7
8
  exportName: "ircPlugin"
8
9
  },
9
10
  secrets: {
10
- specifier: "./secret-contract-api.js",
11
+ specifier: fileURLToPath(new URL(".setup/secret-contract-api-CmA70kMR.mjs", import.meta.url).href),
11
12
  exportName: "channelSecrets"
12
13
  }
13
14
  });
@@ -6,6 +6,20 @@
6
6
  "channels": [
7
7
  "irc"
8
8
  ],
9
+ "channelEnvVars": {
10
+ "irc": [
11
+ "IRC_HOST",
12
+ "IRC_PORT",
13
+ "IRC_TLS",
14
+ "IRC_NICK",
15
+ "IRC_USERNAME",
16
+ "IRC_REALNAME",
17
+ "IRC_PASSWORD",
18
+ "IRC_CHANNELS",
19
+ "IRC_NICKSERV_PASSWORD",
20
+ "IRC_NICKSERV_REGISTER_EMAIL"
21
+ ]
22
+ },
9
23
  "configSchema": {
10
24
  "type": "object",
11
25
  "additionalProperties": false,
@@ -282,45 +296,33 @@
282
296
  "exclusiveMinimum": 0,
283
297
  "maximum": 9007199254740991
284
298
  },
285
- "streaming": {
299
+ "chunkMode": {
300
+ "type": "string",
301
+ "enum": [
302
+ "length",
303
+ "newline"
304
+ ]
305
+ },
306
+ "blockStreaming": {
307
+ "type": "boolean"
308
+ },
309
+ "blockStreamingCoalesce": {
286
310
  "type": "object",
287
311
  "properties": {
288
- "chunkMode": {
289
- "type": "string",
290
- "enum": [
291
- "length",
292
- "newline"
293
- ]
312
+ "minChars": {
313
+ "type": "integer",
314
+ "exclusiveMinimum": 0,
315
+ "maximum": 9007199254740991
294
316
  },
295
- "block": {
296
- "type": "object",
297
- "properties": {
298
- "enabled": {
299
- "type": "boolean"
300
- },
301
- "coalesce": {
302
- "type": "object",
303
- "properties": {
304
- "minChars": {
305
- "type": "integer",
306
- "exclusiveMinimum": 0,
307
- "maximum": 9007199254740991
308
- },
309
- "maxChars": {
310
- "type": "integer",
311
- "exclusiveMinimum": 0,
312
- "maximum": 9007199254740991
313
- },
314
- "idleMs": {
315
- "type": "integer",
316
- "minimum": 0,
317
- "maximum": 9007199254740991
318
- }
319
- },
320
- "additionalProperties": false
321
- }
322
- },
323
- "additionalProperties": false
317
+ "maxChars": {
318
+ "type": "integer",
319
+ "exclusiveMinimum": 0,
320
+ "maximum": 9007199254740991
321
+ },
322
+ "idleMs": {
323
+ "type": "integer",
324
+ "minimum": 0,
325
+ "maximum": 9007199254740991
324
326
  }
325
327
  },
326
328
  "additionalProperties": false
@@ -605,45 +607,33 @@
605
607
  "exclusiveMinimum": 0,
606
608
  "maximum": 9007199254740991
607
609
  },
608
- "streaming": {
610
+ "chunkMode": {
611
+ "type": "string",
612
+ "enum": [
613
+ "length",
614
+ "newline"
615
+ ]
616
+ },
617
+ "blockStreaming": {
618
+ "type": "boolean"
619
+ },
620
+ "blockStreamingCoalesce": {
609
621
  "type": "object",
610
622
  "properties": {
611
- "chunkMode": {
612
- "type": "string",
613
- "enum": [
614
- "length",
615
- "newline"
616
- ]
623
+ "minChars": {
624
+ "type": "integer",
625
+ "exclusiveMinimum": 0,
626
+ "maximum": 9007199254740991
617
627
  },
618
- "block": {
619
- "type": "object",
620
- "properties": {
621
- "enabled": {
622
- "type": "boolean"
623
- },
624
- "coalesce": {
625
- "type": "object",
626
- "properties": {
627
- "minChars": {
628
- "type": "integer",
629
- "exclusiveMinimum": 0,
630
- "maximum": 9007199254740991
631
- },
632
- "maxChars": {
633
- "type": "integer",
634
- "exclusiveMinimum": 0,
635
- "maximum": 9007199254740991
636
- },
637
- "idleMs": {
638
- "type": "integer",
639
- "minimum": 0,
640
- "maximum": 9007199254740991
641
- }
642
- },
643
- "additionalProperties": false
644
- }
645
- },
646
- "additionalProperties": false
628
+ "maxChars": {
629
+ "type": "integer",
630
+ "exclusiveMinimum": 0,
631
+ "maximum": 9007199254740991
632
+ },
633
+ "idleMs": {
634
+ "type": "integer",
635
+ "minimum": 0,
636
+ "maximum": 9007199254740991
647
637
  }
648
638
  },
649
639
  "additionalProperties": false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/irc",
3
- "version": "2026.7.2-beta.7",
3
+ "version": "2026.7.34",
4
4
  "description": "OpenClaw IRC channel plugin",
5
5
  "type": "module",
6
6
  "openclaw": {
@@ -15,19 +15,8 @@
15
15
  "allowInvalidConfigRecovery": true
16
16
  },
17
17
  "setupEntry": "./dist/setup-entry.js",
18
- "setupFeatures": {
19
- "configPromotion": true
20
- },
21
18
  "channel": {
22
19
  "id": "irc",
23
- "configuredState": {
24
- "env": {
25
- "allOf": [
26
- "IRC_HOST",
27
- "IRC_NICK"
28
- ]
29
- }
30
- },
31
20
  "label": "IRC",
32
21
  "selectionLabel": "IRC (Server + Nick)",
33
22
  "detailLabel": "IRC",
@@ -38,89 +27,22 @@
38
27
  "internet-relay-chat"
39
28
  ],
40
29
  "systemImage": "network",
41
- "setup": {
42
- "fields": [
43
- {
44
- "key": "host",
45
- "kind": "string",
46
- "cli": {
47
- "flags": "--host <host>",
48
- "description": "IRC server host"
49
- }
50
- },
51
- {
52
- "key": "port",
53
- "kind": "string",
54
- "cli": {
55
- "flags": "--port <port>",
56
- "description": "IRC server port"
57
- }
58
- },
59
- {
60
- "key": "tls",
61
- "kind": "boolean",
62
- "cli": {
63
- "flags": "--tls",
64
- "description": "Use TLS for IRC"
65
- }
66
- },
67
- {
68
- "key": "nick",
69
- "kind": "string",
70
- "cli": {
71
- "flags": "--nick <nick>",
72
- "description": "IRC nickname"
73
- }
74
- },
75
- {
76
- "key": "username",
77
- "kind": "string",
78
- "cli": {
79
- "flags": "--username <name>",
80
- "description": "IRC username"
81
- }
82
- },
83
- {
84
- "key": "realname",
85
- "kind": "string",
86
- "cli": {
87
- "flags": "--realname <name>",
88
- "description": "IRC real name"
89
- }
90
- },
91
- {
92
- "key": "channels",
93
- "kind": "string-list",
94
- "cli": {
95
- "flags": "--channels <names>",
96
- "description": "IRC channels"
97
- }
98
- },
99
- {
100
- "key": "password",
101
- "kind": "string",
102
- "sensitive": true,
103
- "cli": {
104
- "flags": "--password <password>",
105
- "description": "IRC server password"
106
- }
107
- },
108
- {
109
- "key": "useEnv",
110
- "kind": "boolean",
111
- "cli": {
112
- "flags": "--use-env",
113
- "description": "Use IRC environment configuration"
114
- }
115
- }
116
- ]
30
+ "configuredState": {
31
+ "env": {
32
+ "allOf": [
33
+ "IRC_HOST",
34
+ "IRC_NICK"
35
+ ]
36
+ },
37
+ "specifier": "./dist/configured-state.js",
38
+ "exportName": "hasIrcConfiguredState"
117
39
  }
118
40
  },
119
41
  "compat": {
120
- "pluginApi": ">=2026.7.2-beta.7"
42
+ "pluginApi": ">=2026.7.34"
121
43
  },
122
44
  "build": {
123
- "openclawVersion": "2026.7.2-beta.7",
45
+ "openclawVersion": "2026.7.34",
124
46
  "bundledDist": false
125
47
  },
126
48
  "release": {
@@ -145,7 +67,7 @@
145
67
  "README.md"
146
68
  ],
147
69
  "peerDependencies": {
148
- "openclaw": ">=2026.7.2-beta.7"
70
+ "openclaw": ">=2026.7.34"
149
71
  },
150
72
  "peerDependenciesMeta": {
151
73
  "openclaw": {
@@ -1,16 +0,0 @@
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 };
@@ -1,42 +0,0 @@
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
- topLevelInheritedAccountActive: ({ account, enabled }) => enabled && !Object.hasOwn(account, "nickserv") && isEnabledFlag(irc.nickserv),
32
- topInactiveReason: "no enabled account inherits this top-level IRC nickserv config or NickServ is disabled.",
33
- accountActive: ({ account, enabled }) => enabled && isRecord(account.nickserv) && isEnabledFlag(account.nickserv),
34
- accountInactiveReason: "IRC account is disabled or NickServ is disabled for this account."
35
- });
36
- }
37
- const channelSecrets = {
38
- secretTargetRegistryEntries,
39
- collectRuntimeConfigAssignments
40
- };
41
- //#endregion
42
- export { collectRuntimeConfigAssignments as n, secretTargetRegistryEntries as r, channelSecrets as t };