@openclaw/clickclack 2026.9.8 → 2026.10.1-beta.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.
- package/dist/.setup/{channel-Bcwtohk7.mjs → channel-DI3hKiSg.mjs} +42 -142
- package/dist/.setup/{resolve-BHGLohni.mjs → resolve-DPtjHQHt.mjs} +43 -74
- package/dist/.setup/{runtime-api-BvP8DrPQ.mjs → runtime-api-Dm_MQHNq.mjs} +127 -189
- package/dist/.setup/secret-contract-CF7TKtkU.mjs +26 -0
- package/dist/.setup/{secret-contract-api-C1QwGlzF.mjs → secret-contract-api-CBcsgIYZ.mjs} +1 -1
- package/dist/.setup/{setup-claim-Cx8knvXs.mjs → setup-claim-Cfv5ikVH.mjs} +1 -1
- package/dist/.setup/{setup-plugin-api-BH_nw-AP.mjs → setup-plugin-api-BXhjNJRg.mjs} +1 -1
- package/dist/.setup/{setup-plugin-api-C9QcBJuW.mjs → setup-plugin-api-CqfAb-CU.mjs} +1 -1
- package/dist/.setup/{setup-surface-BW1Q06w5.mjs → setup-surface-DcF_7-VV.mjs} +6 -21
- package/dist/.setup/{setup-verify-Msgd70_M.mjs → setup-verify-POQZk8SG.mjs} +5 -14
- package/dist/api.js +3 -3
- package/dist/channel-plugin-api.js +1 -1
- package/dist/doctor-contract-api.js +6 -0
- package/dist/index.js +1 -1
- package/dist/runtime-api.js +4 -4
- package/dist/secret-contract-api.js +1 -1
- package/dist/setup-entry.js +2 -2
- package/dist/setup-plugin-api.js +1 -1
- package/package.json +5 -5
- package/dist/.setup/secret-contract-BKkzzjBA.mjs +0 -35
|
@@ -16,10 +16,6 @@ import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1, applyAccountNameToChannelSe
|
|
|
16
16
|
import { createSetupInputPresenceValidator } from "openclaw/plugin-sdk/setup-runtime";
|
|
17
17
|
import net from "node:net";
|
|
18
18
|
//#region extensions/clickclack/src/accounts.ts
|
|
19
|
-
/**
|
|
20
|
-
* Resolves ClickClack account configuration from root channel config, named
|
|
21
|
-
* account overrides, and secret-provider references.
|
|
22
|
-
*/
|
|
23
19
|
const DEFAULT_RECONNECT_MS = 1500;
|
|
24
20
|
const MIN_RECONNECT_MS = 100;
|
|
25
21
|
const MAX_RECONNECT_MS = 6e4;
|
|
@@ -150,10 +146,6 @@ function resolveClickClackToken(params) {
|
|
|
150
146
|
tokenStatus: "available"
|
|
151
147
|
};
|
|
152
148
|
}
|
|
153
|
-
/**
|
|
154
|
-
* Builds the normalized account snapshot used by gateway, outbound delivery,
|
|
155
|
-
* status reporting, and channel routing.
|
|
156
|
-
*/
|
|
157
149
|
function resolveClickClackAccount(params) {
|
|
158
150
|
const accountId = normalizeAccountId(params.accountId);
|
|
159
151
|
const merged = resolveClickClackAccountConfig(params.cfg, accountId);
|
|
@@ -211,10 +203,6 @@ function resolveClickClackAccount(params) {
|
|
|
211
203
|
apiEndpoint
|
|
212
204
|
};
|
|
213
205
|
}
|
|
214
|
-
/**
|
|
215
|
-
* Returns all enabled accounts, including the implicit default account when
|
|
216
|
-
* legacy top-level ClickClack config is present.
|
|
217
|
-
*/
|
|
218
206
|
function listEnabledClickClackAccounts(cfg) {
|
|
219
207
|
return listClickClackAccountIds(cfg).map((accountId) => resolveClickClackAccount({
|
|
220
208
|
cfg,
|
|
@@ -474,8 +462,7 @@ function applyClickClackCredentialConfig(params) {
|
|
|
474
462
|
}
|
|
475
463
|
const clickClackSetupAdapter = {
|
|
476
464
|
resolveAccountId: ({ accountId }) => normalizeAccountId(accountId),
|
|
477
|
-
prepareAccountConfigInput: async ({ cfg, accountId, input }) => {
|
|
478
|
-
const setupInput = input;
|
|
465
|
+
prepareAccountConfigInput: async ({ cfg, accountId, input: setupInput }) => {
|
|
479
466
|
if (!setupInput.code?.trim()) return setupInput;
|
|
480
467
|
if (setupInput.token?.trim() || setupInput.tokenFile?.trim() || setupInput.useEnv) throw new Error(SETUP_CODE_CONFLICT_ERROR);
|
|
481
468
|
const setup = parseClickClackSetupCodeInput({
|
|
@@ -486,7 +473,7 @@ const clickClackSetupAdapter = {
|
|
|
486
473
|
const claimUrl = setup.exactClaimUrl && !privateApiBaseUrl ? setup.exactClaimUrl : buildClickClackSetupClaimUrl(privateApiBaseUrl ?? setup.baseUrl);
|
|
487
474
|
let claim;
|
|
488
475
|
try {
|
|
489
|
-
const { claimClickClackSetupCode } = await import("./setup-claim-
|
|
476
|
+
const { claimClickClackSetupCode } = await import("./setup-claim-Cfv5ikVH.mjs");
|
|
490
477
|
claim = await claimClickClackSetupCode({
|
|
491
478
|
claimUrl,
|
|
492
479
|
code: setup.code,
|
|
@@ -528,8 +515,7 @@ const clickClackSetupAdapter = {
|
|
|
528
515
|
message: REQUIRED_INPUT_ERROR
|
|
529
516
|
}
|
|
530
517
|
],
|
|
531
|
-
validate: ({ cfg, accountId, input }) => {
|
|
532
|
-
const setupInput = input;
|
|
518
|
+
validate: ({ cfg, accountId, input: setupInput }) => {
|
|
533
519
|
const baseUrl = normalizeClickClackBaseUrl(setupInput.baseUrl);
|
|
534
520
|
if (setupInput.baseUrl && !baseUrl) return INVALID_BASE_URL_ERROR;
|
|
535
521
|
if (!setupInput.useEnv) return null;
|
|
@@ -541,8 +527,7 @@ const clickClackSetupAdapter = {
|
|
|
541
527
|
return null;
|
|
542
528
|
}
|
|
543
529
|
}),
|
|
544
|
-
applyAccountConfig: ({ cfg, accountId, input }) => {
|
|
545
|
-
const setupInput = input;
|
|
530
|
+
applyAccountConfig: ({ cfg, accountId, input: setupInput }) => {
|
|
546
531
|
const existing = setupInput.useEnv ? resolveClickClackAccountConfig(cfg, accountId) : void 0;
|
|
547
532
|
const baseUrl = normalizeClickClackBaseUrl(setupInput.baseUrl ?? existing?.baseUrl);
|
|
548
533
|
const workspace = setupInput.workspace?.trim() || existing?.workspace?.trim();
|
|
@@ -568,7 +553,7 @@ const clickClackSetupAdapter = {
|
|
|
568
553
|
});
|
|
569
554
|
},
|
|
570
555
|
afterAccountConfigWritten: async ({ cfg, accountId, runtime }) => {
|
|
571
|
-
const { verifyClickClackAccountAfterSetup } = await import("./setup-verify-
|
|
556
|
+
const { verifyClickClackAccountAfterSetup } = await import("./setup-verify-POQZk8SG.mjs");
|
|
572
557
|
await verifyClickClackAccountAfterSetup({
|
|
573
558
|
cfg,
|
|
574
559
|
accountId,
|
|
@@ -750,7 +735,7 @@ const clickClackSetupWizard = {
|
|
|
750
735
|
})
|
|
751
736
|
}],
|
|
752
737
|
finalize: async ({ cfg, accountId, credentialValues, prompter }) => {
|
|
753
|
-
const { checkClickClackSetupConnection } = await import("./setup-verify-
|
|
738
|
+
const { checkClickClackSetupConnection } = await import("./setup-verify-POQZk8SG.mjs");
|
|
754
739
|
const result = await checkClickClackSetupConnection({
|
|
755
740
|
cfg,
|
|
756
741
|
accountId,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h as resolveClickClackAccount } from "./setup-surface-
|
|
2
|
-
import {
|
|
1
|
+
import { h as resolveClickClackAccount } from "./setup-surface-DcF_7-VV.mjs";
|
|
2
|
+
import { a as createClickClackClient, r as resolveWorkspaceId } from "./resolve-DPtjHQHt.mjs";
|
|
3
3
|
import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-id";
|
|
4
4
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
5
5
|
import { hasConfiguredSecretInput } from "openclaw/plugin-sdk/setup";
|
|
@@ -67,9 +67,9 @@ async function probeClickClackGatewayStatus() {
|
|
|
67
67
|
expectFinal: false,
|
|
68
68
|
progress: false
|
|
69
69
|
});
|
|
70
|
-
return
|
|
70
|
+
return GATEWAY_RUNNING_MESSAGE;
|
|
71
71
|
} catch (error) {
|
|
72
|
-
return isGatewayNotRunningError(error) ?
|
|
72
|
+
return isGatewayNotRunningError(error) ? GATEWAY_NOT_RUNNING_MESSAGE : GATEWAY_UNKNOWN_MESSAGE;
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
function formatClickClackConnectionLog(result) {
|
|
@@ -82,14 +82,6 @@ function formatClickClackConnectionLog(result) {
|
|
|
82
82
|
case "skipped-unconfigured": return;
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
-
function formatClickClackGatewayLog(status) {
|
|
86
|
-
switch (status) {
|
|
87
|
-
case "running": return GATEWAY_RUNNING_MESSAGE;
|
|
88
|
-
case "not-running": return GATEWAY_NOT_RUNNING_MESSAGE;
|
|
89
|
-
case "unavailable": return GATEWAY_UNKNOWN_MESSAGE;
|
|
90
|
-
}
|
|
91
|
-
return GATEWAY_UNKNOWN_MESSAGE;
|
|
92
|
-
}
|
|
93
85
|
async function verifyClickClackAccountAfterSetup(params) {
|
|
94
86
|
try {
|
|
95
87
|
const message = formatClickClackConnectionLog(await checkClickClackSetupConnection({
|
|
@@ -101,8 +93,7 @@ async function verifyClickClackAccountAfterSetup(params) {
|
|
|
101
93
|
params.runtime.log(`Connection check failed: ${formatErrorMessage(error)}. Setup was saved; fix the connection and rerun setup.`);
|
|
102
94
|
}
|
|
103
95
|
try {
|
|
104
|
-
|
|
105
|
-
params.runtime.log(formatClickClackGatewayLog(status));
|
|
96
|
+
params.runtime.log(await probeClickClackGatewayStatus());
|
|
106
97
|
} catch {
|
|
107
98
|
params.runtime.log(GATEWAY_UNKNOWN_MESSAGE);
|
|
108
99
|
}
|
package/dist/api.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as resolveDefaultClickClackAccountId, d as DEFAULT_ACCOUNT_ID, h as resolveClickClackAccount, m as listEnabledClickClackAccounts, p as listClickClackAccountIds, s as clickClackConfigSchema } from "./.setup/setup-surface-
|
|
2
|
-
import { a as setClickClackRuntime, i as getClickClackRuntime, n as buildClickClackTarget, r as parseClickClackTarget, t as clickClackPlugin } from "./.setup/channel-
|
|
3
|
-
import {
|
|
1
|
+
import { _ as resolveDefaultClickClackAccountId, d as DEFAULT_ACCOUNT_ID, h as resolveClickClackAccount, m as listEnabledClickClackAccounts, p as listClickClackAccountIds, s as clickClackConfigSchema } from "./.setup/setup-surface-DcF_7-VV.mjs";
|
|
2
|
+
import { a as setClickClackRuntime, i as getClickClackRuntime, n as buildClickClackTarget, r as parseClickClackTarget, t as clickClackPlugin } from "./.setup/channel-DI3hKiSg.mjs";
|
|
3
|
+
import { a as createClickClackClient } from "./.setup/resolve-DPtjHQHt.mjs";
|
|
4
4
|
export { DEFAULT_ACCOUNT_ID, buildClickClackTarget, clickClackConfigSchema, clickClackPlugin, createClickClackClient, getClickClackRuntime, listClickClackAccountIds, listEnabledClickClackAccounts, parseClickClackTarget, resolveClickClackAccount, resolveDefaultClickClackAccountId, setClickClackRuntime };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as clickClackPlugin } from "./.setup/channel-
|
|
1
|
+
import { t as clickClackPlugin } from "./.setup/channel-DI3hKiSg.mjs";
|
|
2
2
|
export { clickClackPlugin };
|
|
@@ -99,6 +99,12 @@ function createLegacyWebhookListenerDoctorContract(params) {
|
|
|
99
99
|
};
|
|
100
100
|
const prefix = `channels.${params.channelKey}`;
|
|
101
101
|
return {
|
|
102
|
+
historicalWebhookListener: {
|
|
103
|
+
channelId: params.channelKey,
|
|
104
|
+
port: params.defaultPort,
|
|
105
|
+
preserveAuthoredActivation: params.preserveAuthoredActivation,
|
|
106
|
+
...params.defaultHost === void 0 ? {} : { host: params.defaultHost }
|
|
107
|
+
},
|
|
102
108
|
legacyConfigRules: [{
|
|
103
109
|
path: ["channels", params.channelKey],
|
|
104
110
|
message: `${prefix} webhook listeners moved to Gateway routes. Run "openclaw doctor --fix" to preserve explicitly configured listener settings as legacyWebhook.`,
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as registerClickClackDiscussions } from "./.setup/runtime-api-
|
|
1
|
+
import { t as registerClickClackDiscussions } from "./.setup/runtime-api-Dm_MQHNq.mjs";
|
|
2
2
|
import { defineBundledChannelEntry } from "openclaw/plugin-sdk/channel-entry-contract";
|
|
3
3
|
//#region extensions/clickclack/index.ts
|
|
4
4
|
/**
|
package/dist/runtime-api.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h as resolveClickClackAccount } from "./.setup/setup-surface-
|
|
2
|
-
import { a as setClickClackRuntime, r as parseClickClackTarget } from "./.setup/channel-
|
|
3
|
-
import {
|
|
4
|
-
import { t as registerClickClackDiscussions } from "./.setup/runtime-api-
|
|
1
|
+
import { h as resolveClickClackAccount } from "./.setup/setup-surface-DcF_7-VV.mjs";
|
|
2
|
+
import { a as setClickClackRuntime, r as parseClickClackTarget } from "./.setup/channel-DI3hKiSg.mjs";
|
|
3
|
+
import { a as createClickClackClient } from "./.setup/resolve-DPtjHQHt.mjs";
|
|
4
|
+
import { t as registerClickClackDiscussions } from "./.setup/runtime-api-Dm_MQHNq.mjs";
|
|
5
5
|
export { createClickClackClient, parseClickClackTarget, registerClickClackDiscussions, resolveClickClackAccount, setClickClackRuntime };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./.setup/secret-contract-
|
|
1
|
+
import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries, t as channelSecrets } from "./.setup/secret-contract-CF7TKtkU.mjs";
|
|
2
2
|
export { channelSecrets, collectRuntimeConfigAssignments, secretTargetRegistryEntries };
|
package/dist/setup-entry.js
CHANGED
|
@@ -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/setup-plugin-api-
|
|
7
|
+
specifier: fileURLToPath(new URL(".setup/setup-plugin-api-BXhjNJRg.mjs", import.meta.url).href),
|
|
8
8
|
exportName: "clickClackSetupPlugin"
|
|
9
9
|
},
|
|
10
10
|
secrets: {
|
|
11
|
-
specifier: fileURLToPath(new URL(".setup/secret-contract-api-
|
|
11
|
+
specifier: fileURLToPath(new URL(".setup/secret-contract-api-CBcsgIYZ.mjs", import.meta.url).href),
|
|
12
12
|
exportName: "channelSecrets"
|
|
13
13
|
}
|
|
14
14
|
});
|
package/dist/setup-plugin-api.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as clickClackSetupPlugin } from "./.setup/setup-plugin-api-
|
|
1
|
+
import { t as clickClackSetupPlugin } from "./.setup/setup-plugin-api-CqfAb-CU.mjs";
|
|
2
2
|
export { clickClackSetupPlugin };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/clickclack",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.10.1-beta.2",
|
|
4
4
|
"description": "OpenClaw ClickClack channel plugin",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"zod": "4.6.5"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"openclaw": ">=2026.
|
|
16
|
+
"openclaw": ">=2026.10.1-beta.2"
|
|
17
17
|
},
|
|
18
18
|
"peerDependenciesMeta": {
|
|
19
19
|
"openclaw": {
|
|
@@ -135,14 +135,14 @@
|
|
|
135
135
|
"clawhubSpec": "clawhub:@openclaw/clickclack",
|
|
136
136
|
"npmSpec": "@openclaw/clickclack",
|
|
137
137
|
"defaultChoice": "npm",
|
|
138
|
-
"minHostVersion": ">=2026.
|
|
138
|
+
"minHostVersion": ">=2026.9.8",
|
|
139
139
|
"allowInvalidConfigRecovery": true
|
|
140
140
|
},
|
|
141
141
|
"compat": {
|
|
142
|
-
"pluginApi": ">=2026.
|
|
142
|
+
"pluginApi": ">=2026.10.1-beta.2"
|
|
143
143
|
},
|
|
144
144
|
"build": {
|
|
145
|
-
"openclawVersion": "2026.
|
|
145
|
+
"openclawVersion": "2026.10.1-beta.2",
|
|
146
146
|
"bundledDist": false
|
|
147
147
|
},
|
|
148
148
|
"release": {
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
2
|
-
import { collectConditionalChannelFieldAssignments, createChannelSecretTargetRegistryEntries, getChannelSurface, hasConfiguredSecretInputValue } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
|
|
3
|
-
//#region extensions/clickclack/src/secret-contract.ts
|
|
4
|
-
const secretTargetRegistryEntries = createChannelSecretTargetRegistryEntries({
|
|
5
|
-
channelKey: "clickclack",
|
|
6
|
-
account: ["token"],
|
|
7
|
-
channel: ["token"]
|
|
8
|
-
});
|
|
9
|
-
function collectRuntimeConfigAssignments(params) {
|
|
10
|
-
const resolved = getChannelSurface(params.config, "clickclack");
|
|
11
|
-
if (!resolved) return;
|
|
12
|
-
const { channel: clickclack, surface } = resolved;
|
|
13
|
-
const baseTokenFile = normalizeOptionalString(clickclack.tokenFile) ?? "";
|
|
14
|
-
const accountTokenFile = (account) => normalizeOptionalString(account.tokenFile) ?? "";
|
|
15
|
-
const hasImplicitDefault = Boolean(normalizeOptionalString(clickclack.baseUrl)) && Boolean(normalizeOptionalString(clickclack.workspace));
|
|
16
|
-
collectConditionalChannelFieldAssignments({
|
|
17
|
-
channelKey: "clickclack",
|
|
18
|
-
field: "token",
|
|
19
|
-
channel: clickclack,
|
|
20
|
-
surface,
|
|
21
|
-
defaults: params.defaults,
|
|
22
|
-
context: params.context,
|
|
23
|
-
topLevelActiveWithoutAccounts: baseTokenFile.length === 0,
|
|
24
|
-
topLevelInheritedAccountActive: ({ account, enabled }) => hasImplicitDefault && baseTokenFile.length === 0 || enabled && baseTokenFile.length === 0 && accountTokenFile(account).length === 0 && !hasConfiguredSecretInputValue(account.token, params.defaults),
|
|
25
|
-
accountActive: ({ account, enabled }) => enabled && accountTokenFile(account).length === 0,
|
|
26
|
-
topInactiveReason: "no enabled ClickClack account inherits this top-level token (tokenFile is configured).",
|
|
27
|
-
accountInactiveReason: "ClickClack account is disabled or tokenFile is configured."
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
const channelSecrets = {
|
|
31
|
-
secretTargetRegistryEntries,
|
|
32
|
-
collectRuntimeConfigAssignments
|
|
33
|
-
};
|
|
34
|
-
//#endregion
|
|
35
|
-
export { collectRuntimeConfigAssignments as n, secretTargetRegistryEntries as r, channelSecrets as t };
|