adp-openclaw 0.0.21 → 0.0.22

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/index.ts CHANGED
@@ -9,7 +9,7 @@ const plugin = {
9
9
  description: "ADP channel plugin backed by a Go WebSocket server",
10
10
  configSchema: emptyPluginConfigSchema(),
11
11
  register(api: OpenClawPluginApi) {
12
- console.log("[adp-openclaw] register() called");
12
+ // console.log("[adp-openclaw] register() called");
13
13
  setAdpOpenclawRuntime(api.runtime);
14
14
  api.registerChannel({ plugin: adpOpenclawPlugin });
15
15
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adp-openclaw",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "description": "ADP-OpenClaw demo channel plugin (Go WebSocket backend)",
5
5
  "type": "module",
6
6
  "dependencies": {
package/src/channel.ts CHANGED
@@ -6,6 +6,7 @@ import {
6
6
  type ClawdbotConfig,
7
7
  DEFAULT_ACCOUNT_ID,
8
8
  } from "openclaw/plugin-sdk";
9
+ import { adpOpenclawOnboardingAdapter } from "./onboarding.js";
9
10
 
10
11
  // Default WebSocket URL for ADP OpenClaw
11
12
  const DEFAULT_WS_URL = "wss://wss.lke.cloud.tencent.com/bot/gateway/conn";
@@ -85,6 +86,7 @@ export const adpOpenclawPlugin: ChannelPlugin<ResolvedAdpOpenclawAccount> = {
85
86
  blurb: "ADP channel backed by a Go WebSocket server.",
86
87
  order: 999,
87
88
  },
89
+ onboarding: adpOpenclawOnboardingAdapter,
88
90
  capabilities: {
89
91
  chatTypes: ["direct"],
90
92
  polls: false,
@@ -0,0 +1,144 @@
1
+ // Onboarding adapter for ADP OpenClaw channel plugin
2
+ import type {
3
+ ChannelOnboardingAdapter,
4
+ OpenClawConfig,
5
+ WizardPrompter,
6
+ } from "openclaw/plugin-sdk";
7
+ import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk";
8
+
9
+ const channel = "adp-openclaw" as const;
10
+
11
+ type AdpOpenclawChannelConfig = {
12
+ enabled?: boolean;
13
+ wsUrl?: string;
14
+ clientToken?: string;
15
+ signKey?: string;
16
+ };
17
+
18
+ function getChannelConfig(cfg: OpenClawConfig): AdpOpenclawChannelConfig | undefined {
19
+ return cfg.channels?.["adp-openclaw"] as AdpOpenclawChannelConfig | undefined;
20
+ }
21
+
22
+ function isConfigured(channelCfg?: AdpOpenclawChannelConfig): boolean {
23
+ // clientToken is required for configured status
24
+ const clientToken = channelCfg?.clientToken?.trim() || process.env.ADP_OPENCLAW_CLIENT_TOKEN;
25
+ return Boolean(clientToken);
26
+ }
27
+
28
+ function updateAdpOpenclawConfig(
29
+ cfg: OpenClawConfig,
30
+ updates: { wsUrl?: string; clientToken?: string; signKey?: string; enabled?: boolean },
31
+ ): OpenClawConfig {
32
+ return {
33
+ ...cfg,
34
+ channels: {
35
+ ...cfg.channels,
36
+ "adp-openclaw": {
37
+ ...cfg.channels?.["adp-openclaw"],
38
+ ...updates,
39
+ enabled: updates.enabled ?? true,
40
+ },
41
+ },
42
+ };
43
+ }
44
+
45
+ async function noteAdpOpenclawSetup(prompter: WizardPrompter): Promise<void> {
46
+ await prompter.note(
47
+ [
48
+ "ADP OpenClaw connects to a WebSocket server for real-time messaging.",
49
+ "You need a clientToken to authenticate with the server.",
50
+ "The signKey is used for HMAC signature generation (default: ADPOpenClaw).",
51
+ "WebSocket URL defaults to: wss://wss.lke.cloud.tencent.com/bot/gateway/conn",
52
+ ].join("\n"),
53
+ "ADP OpenClaw setup",
54
+ );
55
+ }
56
+
57
+ export const adpOpenclawOnboardingAdapter: ChannelOnboardingAdapter = {
58
+ channel,
59
+ getStatus: async ({ cfg }) => {
60
+ const channelCfg = getChannelConfig(cfg);
61
+ const configured = isConfigured(channelCfg);
62
+
63
+ return {
64
+ channel,
65
+ configured,
66
+ statusLines: [`ADP OpenClaw: ${configured ? "configured" : "needs clientToken"}`],
67
+ selectionHint: configured ? "configured" : "requires clientToken",
68
+ quickstartScore: configured ? 1 : 10,
69
+ };
70
+ },
71
+ configure: async ({ cfg, prompter }) => {
72
+ let next = cfg;
73
+ const accountId = DEFAULT_ACCOUNT_ID;
74
+
75
+ await noteAdpOpenclawSetup(prompter);
76
+
77
+ const channelCfg = getChannelConfig(next);
78
+ const existingWsUrl = channelCfg?.wsUrl?.trim();
79
+ const existingClientToken = channelCfg?.clientToken?.trim();
80
+ const existingSignKey = channelCfg?.signKey?.trim();
81
+
82
+ // Check for env vars
83
+ const envClientToken = process.env.ADP_OPENCLAW_CLIENT_TOKEN?.trim();
84
+ const envSignKey = process.env.ADP_OPENCLAW_SIGN_KEY?.trim();
85
+ const envWsUrl = process.env.ADP_OPENCLAW_WS_URL?.trim();
86
+
87
+ if (envClientToken) {
88
+ const useEnv = await prompter.confirm({
89
+ message: "ADP_OPENCLAW_CLIENT_TOKEN detected in env. Use environment variables?",
90
+ initialValue: true,
91
+ });
92
+ if (useEnv) {
93
+ next = updateAdpOpenclawConfig(next, { enabled: true });
94
+ return { cfg: next, accountId };
95
+ }
96
+ }
97
+
98
+ // Prompt for WebSocket URL (optional, has default)
99
+ const wsUrlInput = await prompter.text({
100
+ message: "WebSocket URL (press Enter for default)",
101
+ placeholder: "wss://wss.lke.cloud.tencent.com/bot/gateway/conn",
102
+ initialValue: existingWsUrl || envWsUrl || undefined,
103
+ });
104
+ const wsUrl = String(wsUrlInput ?? "").trim() || undefined;
105
+
106
+ // Prompt for clientToken (required)
107
+ const clientTokenInput = await prompter.text({
108
+ message: "Client Token",
109
+ placeholder: "your-client-token",
110
+ initialValue: existingClientToken || undefined,
111
+ validate: (value) => (String(value ?? "").trim() ? undefined : "Required"),
112
+ });
113
+ const clientToken = String(clientTokenInput).trim();
114
+
115
+ // Prompt for signKey (optional, has default)
116
+ const signKeyInput = await prompter.text({
117
+ message: "Sign Key (press Enter for default: ADPOpenClaw)",
118
+ placeholder: "ADPOpenClaw",
119
+ initialValue: existingSignKey || envSignKey || undefined,
120
+ });
121
+ const signKey = String(signKeyInput ?? "").trim() || undefined;
122
+
123
+ next = updateAdpOpenclawConfig(next, {
124
+ ...(wsUrl ? { wsUrl } : {}),
125
+ clientToken,
126
+ ...(signKey ? { signKey } : {}),
127
+ enabled: true,
128
+ });
129
+
130
+ return { cfg: next, accountId };
131
+ },
132
+ disable: (cfg) => {
133
+ return {
134
+ ...cfg,
135
+ channels: {
136
+ ...cfg.channels,
137
+ "adp-openclaw": {
138
+ ...cfg.channels?.["adp-openclaw"],
139
+ enabled: false,
140
+ },
141
+ },
142
+ };
143
+ },
144
+ };