@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 +1 -1
- package/dist/{channel-C-P2GolT.js → channel-DVkIYl85.js} +44 -44
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel-runtime-CLTE89ol.js → channel-runtime-DQUHlrj4.js} +7 -5
- package/dist/{config-schema-BPKZaah-.js → config-schema-nFnbvojz.js} +9 -8
- package/dist/doctor-contract-api.js +16 -0
- package/dist/secret-contract-PJHaoTSe.js +41 -0
- package/dist/secret-contract-api.js +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/openclaw.plugin.json +72 -48
- package/package.json +4 -4
- package/dist/secret-contract-DdKIs_mx.js +0 -82
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
800
|
-
const groups = params.groups ?? {};
|
|
801
|
-
const
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
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
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
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:
|
|
828
|
-
|
|
821
|
+
allowed: Boolean(groupConfig ?? wildcardConfig),
|
|
822
|
+
groupConfig,
|
|
823
|
+
wildcardConfig,
|
|
824
|
+
hasConfiguredGroups: Object.keys(params.groups ?? {}).length > 0
|
|
829
825
|
};
|
|
830
826
|
}
|
|
831
|
-
function
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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-
|
|
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-
|
|
1
|
+
import { t as ircPlugin } from "./channel-DVkIYl85.js";
|
|
2
2
|
export { ircPlugin };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { a as
|
|
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 ?
|
|
163
|
-
|
|
164
|
-
|
|
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
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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-
|
|
1
|
+
import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./secret-contract-PJHaoTSe.js";
|
|
2
2
|
export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -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
|
}
|
package/openclaw.plugin.json
CHANGED
|
@@ -296,33 +296,45 @@
|
|
|
296
296
|
"exclusiveMinimum": 0,
|
|
297
297
|
"maximum": 9007199254740991
|
|
298
298
|
},
|
|
299
|
-
"
|
|
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
|
-
"
|
|
313
|
-
"type": "
|
|
314
|
-
"
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
"type": "integer",
|
|
319
|
-
"exclusiveMinimum": 0,
|
|
320
|
-
"maximum": 9007199254740991
|
|
302
|
+
"chunkMode": {
|
|
303
|
+
"type": "string",
|
|
304
|
+
"enum": [
|
|
305
|
+
"length",
|
|
306
|
+
"newline"
|
|
307
|
+
]
|
|
321
308
|
},
|
|
322
|
-
"
|
|
323
|
-
"type": "
|
|
324
|
-
"
|
|
325
|
-
|
|
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
|
-
"
|
|
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
|
-
"
|
|
624
|
-
"type": "
|
|
625
|
-
"
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
"type": "integer",
|
|
630
|
-
"exclusiveMinimum": 0,
|
|
631
|
-
"maximum": 9007199254740991
|
|
625
|
+
"chunkMode": {
|
|
626
|
+
"type": "string",
|
|
627
|
+
"enum": [
|
|
628
|
+
"length",
|
|
629
|
+
"newline"
|
|
630
|
+
]
|
|
632
631
|
},
|
|
633
|
-
"
|
|
634
|
-
"type": "
|
|
635
|
-
"
|
|
636
|
-
|
|
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 };
|