@bowong/clawshow-gateway 2026.3.13 → 2026.3.16-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.
Files changed (46) hide show
  1. package/README.md +9 -9
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +6 -6
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/config.d.ts +2 -2
  7. package/dist/src/config.d.ts.map +1 -1
  8. package/dist/src/config.js +19 -10
  9. package/dist/src/config.js.map +1 -1
  10. package/dist/src/gateway.d.ts +3 -3
  11. package/dist/src/gateway.d.ts.map +1 -1
  12. package/dist/src/gateway.js +75 -42
  13. package/dist/src/gateway.js.map +1 -1
  14. package/dist/src/index.d.ts +4 -4
  15. package/dist/src/index.d.ts.map +1 -1
  16. package/dist/src/index.js +3 -3
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/outbound.d.ts +1 -1
  19. package/dist/src/outbound.d.ts.map +1 -1
  20. package/dist/src/outbound.js +7 -7
  21. package/dist/src/outbound.js.map +1 -1
  22. package/dist/src/plugin.d.ts +2 -2
  23. package/dist/src/plugin.d.ts.map +1 -1
  24. package/dist/src/plugin.js +14 -14
  25. package/dist/src/plugin.js.map +1 -1
  26. package/dist/src/protocol.d.ts +15 -13
  27. package/dist/src/protocol.d.ts.map +1 -1
  28. package/dist/src/protocol.js +99 -3
  29. package/dist/src/protocol.js.map +1 -1
  30. package/dist/src/runtime.d.ts +6 -3
  31. package/dist/src/runtime.d.ts.map +1 -1
  32. package/dist/src/runtime.js +13 -3
  33. package/dist/src/runtime.js.map +1 -1
  34. package/dist/src/security.d.ts +2 -2
  35. package/dist/src/security.d.ts.map +1 -1
  36. package/dist/src/security.js +4 -4
  37. package/dist/src/security.js.map +1 -1
  38. package/dist/src/setup.d.ts +1 -1
  39. package/dist/src/setup.d.ts.map +1 -1
  40. package/dist/src/setup.js +10 -8
  41. package/dist/src/setup.js.map +1 -1
  42. package/dist/src/types.d.ts +1 -1
  43. package/dist/src/types.d.ts.map +1 -1
  44. package/openclaw.plugin.json +2 -2
  45. package/package.json +8 -9
  46. package/index.ts +0 -17
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # @sker-pro/openclaw-channel-web
1
+ # @bowong/clawshow-gateway
2
2
 
3
- OpenClaw Web 频道插件 —— 通过 WebSocket 中继服务器实现浏览器端聊天。
3
+ OpenClaw Clawshow 频道插件 —— 通过 WebSocket 中继服务器实现浏览器端聊天。
4
4
 
5
5
  ## 安装到 OpenClaw
6
6
 
@@ -39,14 +39,14 @@ openclaw plugins install ./packages/openclaw-channel-web
39
39
 
40
40
  ### 配置频道
41
41
 
42
- 这个插件是 channel plugin,配置写在 `channels.web`,不是 `plugins.entries.web.config`。
42
+ 这个插件是 channel plugin,配置写在 `channels.clawshow`,不是 `plugins.entries.clawshow-gateway.config`。
43
43
 
44
44
  编辑 `~/.openclaw/openclaw.json`,添加:
45
45
 
46
46
  ```json5
47
47
  {
48
48
  channels: {
49
- web: {
49
+ clawshow: {
50
50
  enabled: true,
51
51
  relayUrl: "wss://your-relay-server.example.com",
52
52
  authToken: "your-secret-token",
@@ -71,7 +71,7 @@ openclaw plugins install ./packages/openclaw-channel-web
71
71
  WEB_RELAY_AUTH_TOKEN=your-secret-token
72
72
  ```
73
73
 
74
- 对应代码里会优先读取 `channels.web.authToken`,否则回退到 `WEB_RELAY_AUTH_TOKEN`。
74
+ 对应代码里会优先读取 `channels.clawshow.authToken`,否则回退到 `WEB_RELAY_AUTH_TOKEN`。
75
75
 
76
76
  ### 本地 relay 联调示例
77
77
 
@@ -87,7 +87,7 @@ npm run dev
87
87
  ```json5
88
88
  {
89
89
  channels: {
90
- web: {
90
+ clawshow: {
91
91
  enabled: true,
92
92
  relayUrl: "ws://192.168.0.117:8787",
93
93
  authToken: "your-secret-token",
@@ -117,7 +117,7 @@ node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
117
117
 
118
118
  然后把同一个值配置到:
119
119
 
120
- - `channels.web.authToken` 或 `WEB_RELAY_AUTH_TOKEN`
120
+ - `channels.clawshow.authToken` 或 `WEB_RELAY_AUTH_TOKEN`
121
121
  - `apps/web-relay` 的 `OPENCLAW_AUTH_TOKEN`
122
122
 
123
123
  ### 多账户配置
@@ -125,7 +125,7 @@ node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
125
125
  ```json5
126
126
  {
127
127
  channels: {
128
- web: {
128
+ clawshow: {
129
129
  enabled: true,
130
130
  relayUrl: "wss://relay-1.example.com",
131
131
  authToken: "token-1",
@@ -155,4 +155,4 @@ openclaw plugins list
155
155
  openclaw plugins info web
156
156
  ```
157
157
 
158
- 如果 `web` 频道显示为已配置并且连接成功,说明安装完成。
158
+ 如果 `clawshow` 频道显示为已配置并且连接成功,说明安装完成。
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { OpenClawPluginApi } from "openclaw/plugin-sdk/core";
1
+ import type { OpenClawPluginApi } from 'openclaw/plugin-sdk';
2
2
  declare const plugin: {
3
3
  id: string;
4
4
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAKlE,QAAA,MAAM,MAAM;;;;;kBAKI,iBAAiB;CAIhC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAK5D,QAAA,MAAM,MAAM;;;;;kBAKI,iBAAiB;CAIhC,CAAA;AAED,eAAe,MAAM,CAAA"}
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
- import { emptyPluginConfigSchema } from "openclaw/plugin-sdk/core";
2
- import { webChannelPlugin } from "./src/plugin.js";
3
- import { setWebRuntime } from "./src/runtime.js";
1
+ import { emptyPluginConfigSchema } from 'openclaw/plugin-sdk';
2
+ import { webChannelPlugin } from './src/plugin.js';
3
+ import { setWebRuntime } from './src/runtime.js';
4
4
  const plugin = {
5
- id: "web",
6
- name: "Web",
7
- description: "Web channel plugin — browser chat via WebSocket relay",
5
+ id: 'clawshow-gateway',
6
+ name: 'clawshow-gateway',
7
+ description: 'Web channel plugin — browser chat via WebSocket relay',
8
8
  configSchema: emptyPluginConfigSchema(),
9
9
  register(api) {
10
10
  setWebRuntime(api.runtime);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,KAAK;IACT,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,uDAAuD;IACpE,YAAY,EAAE,uBAAuB,EAAE;IACvC,QAAQ,CAAC,GAAsB;QAC7B,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,uDAAuD;IACpE,YAAY,EAAE,uBAAuB,EAAE;IACvC,QAAQ,CAAC,GAAsB;QAC7B,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC1B,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAA;IACnD,CAAC;CACF,CAAA;AAED,eAAe,MAAM,CAAA"}
@@ -2,8 +2,8 @@
2
2
  * Web channel configuration adapter.
3
3
  * Resolves account configuration from OpenClaw config.
4
4
  */
5
- import type { ChannelConfigAdapter, OpenClawConfig } from "openclaw/plugin-sdk";
6
- import type { ResolvedWebAccount } from "./types.js";
5
+ import type { ChannelConfigAdapter, OpenClawConfig } from 'openclaw/plugin-sdk';
6
+ import type { ResolvedWebAccount } from './types.js';
7
7
  export declare function listWebAccountIds(cfg: OpenClawConfig): string[];
8
8
  export declare function resolveWebAccount(cfg: OpenClawConfig, accountId?: string | null): ResolvedWebAccount;
9
9
  export declare function isWebConfigured(account: ResolvedWebAccount): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAEV,oBAAoB,EACpB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAoB,MAAM,YAAY,CAAC;AAQvE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CAkB/D;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,cAAc,EACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,kBAAkB,CAwBpB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAET;AAED,eAAO,MAAM,gBAAgB,EAAE,oBAAoB,CAAC,kBAAkB,CAiBrE,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAEV,oBAAoB,EACpB,cAAc,EACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,kBAAkB,EAAoB,MAAM,YAAY,CAAA;AAQtE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CAkB/D;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,cAAc,EACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,kBAAkB,CAgCpB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAEpE;AAED,eAAO,MAAM,gBAAgB,EAAE,oBAAoB,CAAC,kBAAkB,CAuBrE,CAAA"}
@@ -2,9 +2,9 @@
2
2
  * Web channel configuration adapter.
3
3
  * Resolves account configuration from OpenClaw config.
4
4
  */
5
- const DEFAULT_ACCOUNT_ID = "default";
5
+ const DEFAULT_ACCOUNT_ID = 'default';
6
6
  export function listWebAccountIds(cfg) {
7
- const webConfig = cfg.channels?.web;
7
+ const webConfig = cfg.channels?.clawshow;
8
8
  if (!webConfig)
9
9
  return [];
10
10
  const ids = [];
@@ -24,20 +24,29 @@ export function listWebAccountIds(cfg) {
24
24
  }
25
25
  export function resolveWebAccount(cfg, accountId) {
26
26
  const id = accountId ?? DEFAULT_ACCOUNT_ID;
27
- const webConfig = cfg.channels?.web;
27
+ const webConfig = cfg.channels?.clawshow;
28
28
  const accountConfig = id !== DEFAULT_ACCOUNT_ID ? webConfig?.accounts?.[id] : undefined;
29
- const base = webConfig ? { enabled: webConfig.enabled, relayUrl: webConfig.relayUrl, authToken: webConfig.authToken, dmPolicy: webConfig.dmPolicy, allowFrom: webConfig.allowFrom, name: webConfig.name } : {};
29
+ const base = webConfig
30
+ ? {
31
+ enabled: webConfig.enabled,
32
+ relayUrl: webConfig.relayUrl,
33
+ authToken: webConfig.authToken,
34
+ dmPolicy: webConfig.dmPolicy,
35
+ allowFrom: webConfig.allowFrom,
36
+ name: webConfig.name,
37
+ }
38
+ : {};
30
39
  const merged = {
31
- relayUrl: "",
40
+ relayUrl: '',
32
41
  ...base,
33
42
  ...accountConfig,
34
43
  };
35
- const authToken = merged.authToken ?? process.env.WEB_RELAY_AUTH_TOKEN ?? "";
44
+ const authToken = merged.authToken ?? process.env.WEB_RELAY_AUTH_TOKEN ?? '';
36
45
  return {
37
46
  accountId: id,
38
47
  name: merged.name,
39
48
  enabled: merged.enabled !== false,
40
- relayUrl: merged.relayUrl ?? "",
49
+ relayUrl: merged.relayUrl ?? '',
41
50
  authToken,
42
51
  config: merged,
43
52
  };
@@ -53,10 +62,10 @@ export const webConfigAdapter = {
53
62
  isConfigured: (account, _cfg) => isWebConfigured(account),
54
63
  unconfiguredReason: (account, _cfg) => {
55
64
  if (!account.relayUrl)
56
- return "relayUrl not configured";
65
+ return 'relayUrl not configured';
57
66
  if (!account.authToken)
58
- return "authToken not configured (set WEB_RELAY_AUTH_TOKEN or channels.web.authToken)";
59
- return "not configured";
67
+ return 'authToken not configured (set WEB_RELAY_AUTH_TOKEN or channels.clawshow.authToken)';
68
+ return 'not configured';
60
69
  },
61
70
  describeAccount: (account, _cfg) => ({
62
71
  accountId: account.accountId,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -7,9 +7,9 @@
7
7
  * - Auto-reconnects with exponential backoff
8
8
  * - Responds to AbortSignal for graceful shutdown
9
9
  */
10
- import WebSocket from "ws";
11
- import type { ChannelGatewayAdapter, ChannelGatewayContext } from "openclaw/plugin-sdk";
12
- import type { ResolvedWebAccount } from "./types.js";
10
+ import WebSocket from 'ws';
11
+ import type { ChannelGatewayAdapter, ChannelGatewayContext } from 'openclaw/plugin-sdk';
12
+ import type { ResolvedWebAccount } from './types.js';
13
13
  export declare function getActiveWebSocket(accountId?: string): WebSocket | null;
14
14
  export declare function startWebGateway(ctx: ChannelGatewayContext<ResolvedWebAccount>): Promise<void>;
15
15
  export declare function sendTextToSession(sessionId: string, text: string, accountId?: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,KAAK,EAEV,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAUrD,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAOvE;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAkKnG;AA8CD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAe9F;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAarG;AAED,eAAO,MAAM,iBAAiB,EAAE,qBAAqB,CAAC,kBAAkB,CAIvE,CAAC"}
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,KAAK,EAEV,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,qBAAqB,CAAA;AAQ5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAUpD,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAOvE;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,GAC7C,OAAO,CAAC,IAAI,CAAC,CAqLf;AA+FD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAeT;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAaT;AAED,eAAO,MAAM,iBAAiB,EAAE,qBAAqB,CAAC,kBAAkB,CAIvE,CAAA"}
@@ -7,8 +7,8 @@
7
7
  * - Auto-reconnects with exponential backoff
8
8
  * - Responds to AbortSignal for graceful shutdown
9
9
  */
10
- import WebSocket from "ws";
11
- import { generateMessageId, HEARTBEAT_INTERVAL_MS, parseRelayMessage, serializeRelayMessage, } from "./protocol.js";
10
+ import WebSocket from 'ws';
11
+ import { generateMessageId, HEARTBEAT_INTERVAL_MS, parseRelayMessage, serializeRelayMessage, } from './protocol.js';
12
12
  const MAX_RECONNECT_ATTEMPTS = 10;
13
13
  const INITIAL_RECONNECT_MS = 2_000;
14
14
  const MAX_RECONNECT_MS = 60_000;
@@ -34,8 +34,10 @@ export async function startWebGateway(ctx) {
34
34
  resolve();
35
35
  return;
36
36
  }
37
- const baseUrl = account.relayUrl.replace(/\/+$/, "");
38
- const wsUrl = baseUrl.endsWith("/openclaw") ? baseUrl : `${baseUrl}/openclaw`;
37
+ const baseUrl = account.relayUrl.replace(/\/+$/, '');
38
+ const wsUrl = baseUrl.endsWith('/openclaw')
39
+ ? baseUrl
40
+ : `${baseUrl}/openclaw`;
39
41
  log?.info(`[web:${account.accountId}] connecting to relay: ${wsUrl}`);
40
42
  const ws = new WebSocket(wsUrl);
41
43
  let heartbeatTimer = null;
@@ -53,22 +55,22 @@ export async function startWebGateway(ctx) {
53
55
  lastStopAt: Date.now(),
54
56
  });
55
57
  };
56
- ws.on("open", () => {
58
+ ws.on('open', () => {
57
59
  log?.info(`[web:${account.accountId}] connected, authenticating...`);
58
60
  // Send auth handshake
59
61
  ws.send(serializeRelayMessage({
60
- type: "auth",
61
- role: "openclaw",
62
+ type: 'auth',
63
+ role: 'openclaw',
62
64
  token: account.authToken,
63
65
  }));
64
66
  });
65
- ws.on("message", async (data) => {
66
- const raw = typeof data === "string" ? data : data.toString("utf-8");
67
+ ws.on('message', async (data) => {
68
+ const raw = typeof data === 'string' ? data : data.toString('utf-8');
67
69
  const msg = parseRelayMessage(raw);
68
70
  if (!msg)
69
71
  return;
70
72
  switch (msg.type) {
71
- case "auth_result": {
73
+ case 'auth_result': {
72
74
  if (msg.ok) {
73
75
  log?.info(`[web:${account.accountId}] authenticated successfully`);
74
76
  authenticated = true;
@@ -85,28 +87,31 @@ export async function startWebGateway(ctx) {
85
87
  // Start heartbeat
86
88
  heartbeatTimer = setInterval(() => {
87
89
  if (ws.readyState === WebSocket.OPEN) {
88
- ws.send(serializeRelayMessage({ type: "ping", timestamp: Date.now() }));
90
+ ws.send(serializeRelayMessage({
91
+ type: 'ping',
92
+ timestamp: Date.now(),
93
+ }));
89
94
  }
90
95
  }, HEARTBEAT_INTERVAL_MS);
91
96
  }
92
97
  else {
93
98
  log?.error(`[web:${account.accountId}] auth failed: ${msg.error}`);
94
- ws.close(4001, "Authentication failed");
99
+ ws.close(4001, 'Authentication failed');
95
100
  }
96
101
  break;
97
102
  }
98
- case "message": {
103
+ case 'message': {
99
104
  if (!authenticated)
100
105
  break;
101
106
  // Incoming message from browser → dispatch to AI
102
107
  await handleIncomingMessage(ctx, msg);
103
108
  break;
104
109
  }
105
- case "typing": {
110
+ case 'typing': {
106
111
  // Browser typing indicator — can log or pass through
107
112
  break;
108
113
  }
109
- case "pong": {
114
+ case 'pong': {
110
115
  // Heartbeat response — connection is alive
111
116
  break;
112
117
  }
@@ -114,8 +119,8 @@ export async function startWebGateway(ctx) {
114
119
  break;
115
120
  }
116
121
  });
117
- ws.on("close", (code, reason) => {
118
- log?.warn(`[web:${account.accountId}] disconnected (code=${code}, reason=${reason.toString("utf-8")})`);
122
+ ws.on('close', (code, reason) => {
123
+ log?.warn(`[web:${account.accountId}] disconnected (code=${code}, reason=${reason.toString('utf-8')})`);
119
124
  cleanup();
120
125
  if (abortSignal.aborted) {
121
126
  resolve();
@@ -148,7 +153,7 @@ export async function startWebGateway(ctx) {
148
153
  reject(err);
149
154
  }
150
155
  });
151
- ws.on("error", (err) => {
156
+ ws.on('error', err => {
152
157
  log?.error(`[web:${account.accountId}] WebSocket error: ${err.message}`);
153
158
  // Error triggers close event, so reconnect logic runs there
154
159
  });
@@ -156,12 +161,13 @@ export async function startWebGateway(ctx) {
156
161
  const onAbort = () => {
157
162
  log?.info(`[web:${account.accountId}] shutting down (abort signal)`);
158
163
  cleanup();
159
- if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {
160
- ws.close(1000, "Shutting down");
164
+ if (ws.readyState === WebSocket.OPEN ||
165
+ ws.readyState === WebSocket.CONNECTING) {
166
+ ws.close(1000, 'Shutting down');
161
167
  }
162
168
  resolve();
163
169
  };
164
- abortSignal.addEventListener("abort", onAbort, { once: true });
170
+ abortSignal.addEventListener('abort', onAbort, { once: true });
165
171
  });
166
172
  return connect();
167
173
  }
@@ -173,32 +179,59 @@ async function handleIncomingMessage(ctx, msg) {
173
179
  ...ctx.getStatus(),
174
180
  lastInboundAt: Date.now(),
175
181
  });
176
- // channelRuntime is injected by OpenClaw with a dispatch wrapper that accepts
177
- // the inbound message shape. Cast required because the SDK type exposes the
178
- // internal dispatch-from-config signature, not the plugin-facing wrapper.
179
- const dispatch = channelRuntime?.reply
180
- ?.dispatchReplyFromConfig;
181
- if (!dispatch) {
182
+ if (!channelRuntime) {
182
183
  log?.warn(`[web:${ctx.account.accountId}] channelRuntime not available — cannot dispatch AI reply`);
183
- // Send a fallback reply
184
- sendTextToSession(msg.sessionId, "AI is not available at the moment. Please try again later.", ctx.accountId);
184
+ void sendTextToSession(msg.sessionId, 'AI is not available at the moment. Please try again later.', ctx.accountId);
185
185
  return;
186
186
  }
187
+ const core = channelRuntime;
187
188
  try {
188
- await dispatch({
189
+ // 1. Resolve agent routing
190
+ const route = core.routing.resolveAgentRoute({
189
191
  cfg: ctx.cfg,
190
- channel: "web",
191
- chatType: "direct",
192
- from: msg.sessionId,
193
- to: msg.sessionId,
194
- text: msg.text,
192
+ channel: 'clawshow',
195
193
  accountId: ctx.accountId,
196
- messageId: msg.id,
194
+ peer: { kind: 'direct', id: msg.sessionId },
197
195
  });
196
+ log?.info(`[web:${ctx.account.accountId}] route: agent=${route.agentId} session=${route.sessionKey}`);
197
+ // 2. Build MsgContext with PascalCase fields (will be finalized by dispatchInboundMessageWithBufferedDispatcher)
198
+ const ctxPayload = {
199
+ Body: msg.text,
200
+ BodyForAgent: msg.text,
201
+ RawBody: msg.text,
202
+ CommandBody: msg.text,
203
+ From: `web:${msg.sessionId}`,
204
+ To: msg.sessionId,
205
+ SessionKey: route.sessionKey,
206
+ AccountId: ctx.accountId,
207
+ ChatType: 'direct',
208
+ Provider: 'clawshow',
209
+ Surface: 'clawshow',
210
+ MessageSid: msg.id,
211
+ Timestamp: msg.timestamp || Date.now(),
212
+ CommandAuthorized: false,
213
+ };
214
+ // 3. Use the high-level dispatch API that handles all lifecycle internally
215
+ const result = await core.reply.dispatchReplyWithBufferedBlockDispatcher({
216
+ ctx: ctxPayload,
217
+ cfg: ctx.cfg,
218
+ dispatcherOptions: {
219
+ deliver: async (payload, info) => {
220
+ if (payload.text) {
221
+ void sendTextToSession(msg.sessionId, payload.text, ctx.accountId);
222
+ }
223
+ },
224
+ onError: (err, info) => {
225
+ log?.error(`[web:${ctx.account.accountId}] reply delivery error (${info.kind}): ${err}`);
226
+ },
227
+ },
228
+ });
229
+ log?.info(`[web:${ctx.account.accountId}] dispatch complete (queuedFinal=${result.queuedFinal}, replies=${result.counts.final})`);
198
230
  }
199
231
  catch (err) {
200
- log?.error(`[web:${ctx.account.accountId}] dispatch error: ${err}`);
201
- sendTextToSession(msg.sessionId, "An error occurred processing your message.", ctx.accountId);
232
+ const errMsg = err instanceof Error ? `${err.message}\n${err.stack}` : String(err);
233
+ log?.error(`[web:${ctx.account.accountId}] dispatch error: ${errMsg}`);
234
+ void sendTextToSession(msg.sessionId, `[Error] ${errMsg}`, ctx.accountId);
202
235
  }
203
236
  }
204
237
  // ── Outbound Helpers ────────────────────────────────────────────────
@@ -207,10 +240,10 @@ export function sendTextToSession(sessionId, text, accountId) {
207
240
  if (!ws || ws.readyState !== WebSocket.OPEN)
208
241
  return false;
209
242
  const msg = {
210
- type: "message",
243
+ type: 'message',
211
244
  id: generateMessageId(),
212
245
  sessionId,
213
- from: "ai",
246
+ from: 'ai',
214
247
  text,
215
248
  timestamp: Date.now(),
216
249
  };
@@ -222,9 +255,9 @@ export function sendTypingToSession(sessionId, isTyping, accountId) {
222
255
  if (!ws || ws.readyState !== WebSocket.OPEN)
223
256
  return false;
224
257
  ws.send(serializeRelayMessage({
225
- type: "typing",
258
+ type: 'typing',
226
259
  sessionId,
227
- from: "ai",
260
+ from: 'ai',
228
261
  isTyping,
229
262
  }));
230
263
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * OpenClaw ChannelPlugin for browser-based chat via WebSocket relay.
5
5
  */
6
- export { webChannelPlugin } from "./plugin.js";
7
- export type { ResolvedWebAccount, WebAccountConfig } from "./types.js";
8
- export { sendTextToSession, sendTypingToSession, getActiveWebSocket } from "./gateway.js";
9
- export { type RelayMessage, type ChatMessage, type AuthMessage, generateMessageId, parseRelayMessage, serializeRelayMessage, HEARTBEAT_INTERVAL_MS, } from "./protocol.js";
6
+ export { webChannelPlugin } from './plugin.js';
7
+ export type { ResolvedWebAccount, WebAccountConfig } from './types.js';
8
+ export { sendTextToSession, sendTypingToSession, getActiveWebSocket, } from './gateway.js';
9
+ export { type RelayMessage, type ChatMessage, type AuthMessage, generateMessageId, parseRelayMessage, serializeRelayMessage, HEARTBEAT_INTERVAL_MS, } from './protocol.js';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACtE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,eAAe,CAAA"}
package/dist/src/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * OpenClaw ChannelPlugin for browser-based chat via WebSocket relay.
5
5
  */
6
- export { webChannelPlugin } from "./plugin.js";
7
- export { sendTextToSession, sendTypingToSession, getActiveWebSocket } from "./gateway.js";
8
- export { generateMessageId, parseRelayMessage, serializeRelayMessage, HEARTBEAT_INTERVAL_MS, } from "./protocol.js";
6
+ export { webChannelPlugin } from './plugin.js';
7
+ export { sendTextToSession, sendTypingToSession, getActiveWebSocket, } from './gateway.js';
8
+ export { generateMessageId, parseRelayMessage, serializeRelayMessage, HEARTBEAT_INTERVAL_MS, } from './protocol.js';
9
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAIL,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AACrB,OAAO,EAIL,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,eAAe,CAAA"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Web channel outbound adapter — sends messages via the gateway WebSocket.
3
3
  */
4
- import type { ChannelOutboundAdapter } from "openclaw/plugin-sdk";
4
+ import type { ChannelOutboundAdapter } from 'openclaw/plugin-sdk';
5
5
  export declare const webOutboundAdapter: ChannelOutboundAdapter;
6
6
  //# sourceMappingURL=outbound.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"outbound.d.ts","sourceRoot":"","sources":["../../src/outbound.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,qBAAqB,CAAC;AAI7B,eAAO,MAAM,kBAAkB,EAAE,sBAqBhC,CAAC"}
1
+ {"version":3,"file":"outbound.d.ts","sourceRoot":"","sources":["../../src/outbound.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,qBAAqB,CAAA;AAI5B,eAAO,MAAM,kBAAkB,EAAE,sBAqBhC,CAAA"}
@@ -1,16 +1,16 @@
1
1
  /**
2
2
  * Web channel outbound adapter — sends messages via the gateway WebSocket.
3
3
  */
4
- import { generateMessageId } from "./protocol.js";
5
- import { sendTextToSession } from "./gateway.js";
4
+ import { generateMessageId } from './protocol.js';
5
+ import { sendTextToSession } from './gateway.js';
6
6
  export const webOutboundAdapter = {
7
- deliveryMode: "gateway",
7
+ deliveryMode: 'gateway',
8
8
  textChunkLimit: 4000,
9
9
  sendText: async (ctx) => {
10
10
  const ok = sendTextToSession(ctx.to, ctx.text, ctx.accountId ?? undefined);
11
11
  return {
12
- channel: "web",
13
- messageId: ok ? generateMessageId() : "",
12
+ channel: 'clawshow',
13
+ messageId: ok ? generateMessageId() : '',
14
14
  };
15
15
  },
16
16
  sendMedia: async (ctx) => {
@@ -18,8 +18,8 @@ export const webOutboundAdapter = {
18
18
  const text = ctx.mediaUrl ? `${ctx.text}\n\n${ctx.mediaUrl}` : ctx.text;
19
19
  const ok = sendTextToSession(ctx.to, text, ctx.accountId ?? undefined);
20
20
  return {
21
- channel: "web",
22
- messageId: ok ? generateMessageId() : "",
21
+ channel: 'clawshow',
22
+ messageId: ok ? generateMessageId() : '',
23
23
  };
24
24
  },
25
25
  };
@@ -1 +1 @@
1
- {"version":3,"file":"outbound.js","sourceRoot":"","sources":["../../src/outbound.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,YAAY,EAAE,SAAkB;IAChC,cAAc,EAAE,IAAI;IAEpB,QAAQ,EAAE,KAAK,EAAE,GAA2B,EAAE,EAAE;QAC9C,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC;QAC3E,OAAO;YACL,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE;SACzC,CAAC;IACJ,CAAC;IAED,SAAS,EAAE,KAAK,EAAE,GAA2B,EAAE,EAAE;QAC/C,+DAA+D;QAC/D,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QACxE,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE;SACzC,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"outbound.js","sourceRoot":"","sources":["../../src/outbound.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,YAAY,EAAE,SAAkB;IAChC,cAAc,EAAE,IAAI;IAEpB,QAAQ,EAAE,KAAK,EAAE,GAA2B,EAAE,EAAE;QAC9C,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,CAAA;QAC1E,OAAO;YACL,OAAO,EAAE,UAAU;YACnB,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE;SACzC,CAAA;IACH,CAAC;IAED,SAAS,EAAE,KAAK,EAAE,GAA2B,EAAE,EAAE;QAC/C,+DAA+D;QAC/D,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA;QACvE,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,CAAA;QACtE,OAAO;YACL,OAAO,EAAE,UAAU;YACnB,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE;SACzC,CAAA;IACH,CAAC;CACF,CAAA"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Pattern follows Telegram/WhatsApp channel plugins.
5
5
  */
6
- import type { ChannelPlugin } from "openclaw/plugin-sdk";
7
- import type { ResolvedWebAccount } from "./types.js";
6
+ import type { ChannelPlugin } from 'openclaw/plugin-sdk';
7
+ import type { ResolvedWebAccount } from './types.js';
8
8
  export declare const webChannelPlugin: ChannelPlugin<ResolvedWebAccount>;
9
9
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,kBAAkB,CA6B9D,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAMxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,kBAAkB,CA6B9D,CAAA"}
@@ -3,23 +3,23 @@
3
3
  *
4
4
  * Pattern follows Telegram/WhatsApp channel plugins.
5
5
  */
6
- import { webConfigAdapter } from "./config.js";
7
- import { webGatewayAdapter } from "./gateway.js";
8
- import { webOutboundAdapter } from "./outbound.js";
9
- import { webSecurityAdapter } from "./security.js";
10
- import { webSetupAdapter } from "./setup.js";
6
+ import { webConfigAdapter } from './config.js';
7
+ import { webGatewayAdapter } from './gateway.js';
8
+ import { webOutboundAdapter } from './outbound.js';
9
+ import { webSecurityAdapter } from './security.js';
10
+ import { webSetupAdapter } from './setup.js';
11
11
  export const webChannelPlugin = {
12
- id: "web",
12
+ id: 'clawshow',
13
13
  meta: {
14
- id: "web",
15
- label: "Web",
16
- selectionLabel: "Web (browser chat)",
17
- docsPath: "/channels/web",
18
- blurb: "Browser chat via WebSocket relay",
14
+ id: 'clawshow',
15
+ label: 'Clawshow',
16
+ selectionLabel: 'Clawshow (browser chat)',
17
+ docsPath: '/channels/clawshow',
18
+ blurb: 'Browser chat via WebSocket relay',
19
19
  order: 50,
20
20
  },
21
21
  capabilities: {
22
- chatTypes: ["direct"],
22
+ chatTypes: ['direct'],
23
23
  media: false,
24
24
  reactions: false,
25
25
  },
@@ -28,14 +28,14 @@ export const webChannelPlugin = {
28
28
  debounceMs: 500,
29
29
  },
30
30
  },
31
- reload: { configPrefixes: ["channels.web"] },
31
+ reload: { configPrefixes: ['channels.clawshow'] },
32
32
  config: webConfigAdapter,
33
33
  gateway: webGatewayAdapter,
34
34
  outbound: webOutboundAdapter,
35
35
  security: webSecurityAdapter,
36
36
  setup: webSetupAdapter,
37
37
  pairing: {
38
- idLabel: "sessionId",
38
+ idLabel: 'sessionId',
39
39
  },
40
40
  };
41
41
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,CAAC,MAAM,gBAAgB,GAAsC;IACjE,EAAE,EAAE,KAAK;IACT,IAAI,EAAE;QACJ,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,KAAK;QACZ,cAAc,EAAE,oBAAoB;QACpC,QAAQ,EAAE,eAAe;QACzB,KAAK,EAAE,kCAAkC;QACzC,KAAK,EAAE,EAAE;KACV;IACD,YAAY,EAAE;QACZ,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,KAAK;KACjB;IACD,QAAQ,EAAE;QACR,KAAK,EAAE;YACL,UAAU,EAAE,GAAG;SAChB;KACF;IACD,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,cAAc,CAAC,EAAE;IAC5C,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,iBAAiB;IAC1B,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,kBAAkB;IAC5B,KAAK,EAAE,eAAe;IACtB,OAAO,EAAE;QACP,OAAO,EAAE,WAAW;KACrB;CACF,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAG5C,MAAM,CAAC,MAAM,gBAAgB,GAAsC;IACjE,EAAE,EAAE,UAAU;IACd,IAAI,EAAE;QACJ,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,yBAAyB;QACzC,QAAQ,EAAE,oBAAoB;QAC9B,KAAK,EAAE,kCAAkC;QACzC,KAAK,EAAE,EAAE;KACV;IACD,YAAY,EAAE;QACZ,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,KAAK;KACjB;IACD,QAAQ,EAAE;QACR,KAAK,EAAE;YACL,UAAU,EAAE,GAAG;SAChB;KACF;IACD,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,mBAAmB,CAAC,EAAE;IACjD,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,iBAAiB;IAC1B,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,kBAAkB;IAC5B,KAAK,EAAE,eAAe;IACtB,OAAO,EAAE;QACP,OAAO,EAAE,WAAW;KACrB;CACF,CAAA"}
@@ -2,60 +2,62 @@
2
2
  * Shared WebSocket message protocol for Web Channel.
3
3
  * Used by: web-relay (Cloudflare Worker), openclaw-channel-web (plugin), web-chat (frontend).
4
4
  */
5
- export type WebSocketRole = "browser" | "openclaw";
5
+ export type WebSocketRole = 'browser' | 'openclaw';
6
6
  export type AuthMessage = {
7
- type: "auth";
7
+ type: 'auth';
8
8
  role: WebSocketRole;
9
9
  token: string;
10
10
  sessionId?: string;
11
11
  };
12
12
  export type AuthResultMessage = {
13
- type: "auth_result";
13
+ type: 'auth_result';
14
14
  ok: boolean;
15
15
  error?: string;
16
16
  sessionId?: string;
17
+ userId?: string;
18
+ userName?: string;
17
19
  };
18
20
  export type ChatMessage = {
19
- type: "message";
21
+ type: 'message';
20
22
  id: string;
21
23
  sessionId: string;
22
- from: "user" | "ai";
24
+ from: 'user' | 'ai';
23
25
  text: string;
24
26
  timestamp: number;
25
27
  };
26
28
  export type AckMessage = {
27
- type: "ack";
29
+ type: 'ack';
28
30
  messageId: string;
29
31
  sessionId: string;
30
32
  };
31
33
  export type TypingMessage = {
32
- type: "typing";
34
+ type: 'typing';
33
35
  sessionId: string;
34
- from: "user" | "ai";
36
+ from: 'user' | 'ai';
35
37
  isTyping: boolean;
36
38
  };
37
39
  export type HistoryRequestMessage = {
38
- type: "history_request";
40
+ type: 'history_request';
39
41
  sessionId: string;
40
42
  before?: number;
41
43
  limit?: number;
42
44
  };
43
45
  export type HistoryResponseMessage = {
44
- type: "history_response";
46
+ type: 'history_response';
45
47
  sessionId: string;
46
48
  messages: ChatMessage[];
47
49
  hasMore: boolean;
48
50
  };
49
51
  export type PingMessage = {
50
- type: "ping";
52
+ type: 'ping';
51
53
  timestamp: number;
52
54
  };
53
55
  export type PongMessage = {
54
- type: "pong";
56
+ type: 'pong';
55
57
  timestamp: number;
56
58
  };
57
59
  export type ErrorMessage = {
58
- type: "error";
60
+ type: 'error';
59
61
  code: string;
60
62
  message: string;
61
63
  sessionId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,CAAC;AAInD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAIF,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,iBAAiB,GACjB,WAAW,GACX,UAAU,GACV,aAAa,GACb,qBAAqB,GACrB,sBAAsB,GACtB,WAAW,GACX,WAAW,GACX,YAAY,CAAC;AAIjB,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAUlE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE/D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAID,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,qBAAqB,KAAK,CAAC"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,CAAA;AAIlD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,aAAa,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,aAAa,CAAA;IACnB,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,SAAS,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,KAAK,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,QAAQ,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,iBAAiB,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,kBAAkB,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAID,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,iBAAiB,GACjB,WAAW,GACX,UAAU,GACV,aAAa,GACb,qBAAqB,GACrB,sBAAsB,GACtB,WAAW,GACX,WAAW,GACX,YAAY,CAAA;AAIhB,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAoClE;AAwGD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE/D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAID,eAAO,MAAM,qBAAqB,QAAS,CAAA;AAC3C,eAAO,MAAM,uBAAuB,MAAM,CAAA;AAC1C,eAAO,MAAM,qBAAqB,KAAK,CAAA"}
@@ -6,15 +6,111 @@
6
6
  export function parseRelayMessage(raw) {
7
7
  try {
8
8
  const parsed = JSON.parse(raw);
9
- if (typeof parsed === "object" && parsed !== null && "type" in parsed) {
10
- return parsed;
9
+ if (typeof parsed !== 'object' || parsed === null || !('type' in parsed)) {
10
+ return null;
11
+ }
12
+ const msg = parsed;
13
+ switch (msg.type) {
14
+ case 'auth':
15
+ return isValidAuthMessage(parsed) ? parsed : null;
16
+ case 'auth_result':
17
+ return isValidAuthResultMessage(parsed) ? parsed : null;
18
+ case 'message':
19
+ return isValidChatMessage(parsed) ? parsed : null;
20
+ case 'ack':
21
+ return isValidAckMessage(parsed) ? parsed : null;
22
+ case 'typing':
23
+ return isValidTypingMessage(parsed) ? parsed : null;
24
+ case 'history_request':
25
+ return isValidHistoryRequestMessage(parsed) ? parsed : null;
26
+ case 'history_response':
27
+ return isValidHistoryResponseMessage(parsed) ? parsed : null;
28
+ case 'ping':
29
+ return isValidPingMessage(parsed) ? parsed : null;
30
+ case 'pong':
31
+ return isValidPongMessage(parsed) ? parsed : null;
32
+ case 'error':
33
+ return isValidErrorMessage(parsed) ? parsed : null;
34
+ default:
35
+ return null;
11
36
  }
12
- return null;
13
37
  }
14
38
  catch {
15
39
  return null;
16
40
  }
17
41
  }
42
+ // Type guards for each message type
43
+ function isValidAuthMessage(msg) {
44
+ return (typeof msg === 'object' && msg !== null &&
45
+ msg.type === 'auth' &&
46
+ typeof msg.role === 'string' &&
47
+ ['browser', 'openclaw'].includes(msg.role) &&
48
+ typeof msg.token === 'string' &&
49
+ (msg.sessionId === undefined || typeof msg.sessionId === 'string'));
50
+ }
51
+ function isValidAuthResultMessage(msg) {
52
+ return (typeof msg === 'object' && msg !== null &&
53
+ msg.type === 'auth_result' &&
54
+ typeof msg.ok === 'boolean' &&
55
+ (msg.error === undefined || typeof msg.error === 'string') &&
56
+ (msg.sessionId === undefined || typeof msg.sessionId === 'string'));
57
+ }
58
+ function isValidChatMessage(msg) {
59
+ return (typeof msg === 'object' && msg !== null &&
60
+ msg.type === 'message' &&
61
+ typeof msg.id === 'string' &&
62
+ typeof msg.sessionId === 'string' &&
63
+ ['user', 'ai'].includes(msg.from) &&
64
+ typeof msg.text === 'string' &&
65
+ typeof msg.timestamp === 'number');
66
+ }
67
+ function isValidAckMessage(msg) {
68
+ return (typeof msg === 'object' && msg !== null &&
69
+ msg.type === 'ack' &&
70
+ typeof msg.messageId === 'string' &&
71
+ typeof msg.sessionId === 'string');
72
+ }
73
+ function isValidTypingMessage(msg) {
74
+ return (typeof msg === 'object' && msg !== null &&
75
+ msg.type === 'typing' &&
76
+ typeof msg.sessionId === 'string' &&
77
+ ['user', 'ai'].includes(msg.from) &&
78
+ typeof msg.isTyping === 'boolean');
79
+ }
80
+ function isValidHistoryRequestMessage(msg) {
81
+ const m = msg;
82
+ return (typeof msg === 'object' && msg !== null &&
83
+ m.type === 'history_request' &&
84
+ typeof m.sessionId === 'string' &&
85
+ (m.before === undefined || typeof m.before === 'number') &&
86
+ (m.limit === undefined || typeof m.limit === 'number'));
87
+ }
88
+ function isValidHistoryResponseMessage(msg) {
89
+ const m = msg;
90
+ return (typeof msg === 'object' && msg !== null &&
91
+ m.type === 'history_response' &&
92
+ typeof m.sessionId === 'string' &&
93
+ Array.isArray(m.messages) &&
94
+ typeof m.hasMore === 'boolean');
95
+ }
96
+ function isValidPingMessage(msg) {
97
+ return (typeof msg === 'object' && msg !== null &&
98
+ msg.type === 'ping' &&
99
+ typeof msg.timestamp === 'number');
100
+ }
101
+ function isValidPongMessage(msg) {
102
+ return (typeof msg === 'object' && msg !== null &&
103
+ msg.type === 'pong' &&
104
+ typeof msg.timestamp === 'number');
105
+ }
106
+ function isValidErrorMessage(msg) {
107
+ const m = msg;
108
+ return (typeof msg === 'object' && msg !== null &&
109
+ m.type === 'error' &&
110
+ typeof m.code === 'string' &&
111
+ typeof m.message === 'string' &&
112
+ (m.sessionId === undefined || typeof m.sessionId === 'string'));
113
+ }
18
114
  export function serializeRelayMessage(msg) {
19
115
  return JSON.stringify(msg);
20
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyFH,uEAAuE;AAEvE,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;QAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACtE,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAiB;IACrD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,11 @@
2
2
  * Web channel runtime singleton.
3
3
  * Uses the same PluginRuntime type as other channel extensions (WhatsApp, etc.)
4
4
  * for full access to openclaw infrastructure (config, logging, subagent, channel).
5
+ *
6
+ * Inlines the store to stay compatible with openclaw ≥ 2026.3.2
7
+ * (createPluginRuntimeStore was added in 2026.3.12).
5
8
  */
6
- import type { PluginRuntime } from "openclaw/plugin-sdk/core";
7
- declare const setWebRuntime: (next: PluginRuntime) => void, getWebRuntime: () => PluginRuntime;
8
- export { getWebRuntime, setWebRuntime };
9
+ import type { PluginRuntime } from 'openclaw/plugin-sdk';
10
+ export declare function setWebRuntime(next: PluginRuntime): void;
11
+ export declare function getWebRuntime(): PluginRuntime;
9
12
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,QAAA,MAAoB,aAAa,iCAAc,aAAa,qBACoB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAIxD,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAEvD;AAED,wBAAgB,aAAa,IAAI,aAAa,CAK7C"}
@@ -2,8 +2,18 @@
2
2
  * Web channel runtime singleton.
3
3
  * Uses the same PluginRuntime type as other channel extensions (WhatsApp, etc.)
4
4
  * for full access to openclaw infrastructure (config, logging, subagent, channel).
5
+ *
6
+ * Inlines the store to stay compatible with openclaw ≥ 2026.3.2
7
+ * (createPluginRuntimeStore was added in 2026.3.12).
5
8
  */
6
- import { createPluginRuntimeStore } from "openclaw/plugin-sdk/compat";
7
- const { setRuntime: setWebRuntime, getRuntime: getWebRuntime } = createPluginRuntimeStore("Web channel runtime not initialized");
8
- export { getWebRuntime, setWebRuntime };
9
+ let _runtime = null;
10
+ export function setWebRuntime(next) {
11
+ _runtime = next;
12
+ }
13
+ export function getWebRuntime() {
14
+ if (!_runtime) {
15
+ throw new Error('Web channel runtime not initialized');
16
+ }
17
+ return _runtime;
18
+ }
9
19
  //# sourceMappingURL=runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,GAC5D,wBAAwB,CAAgB,qCAAqC,CAAC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,IAAI,QAAQ,GAAyB,IAAI,CAAA;AAEzC,MAAM,UAAU,aAAa,CAAC,IAAmB;IAC/C,QAAQ,GAAG,IAAI,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Web channel DM security adapter.
3
3
  */
4
- import type { ChannelSecurityAdapter } from "openclaw/plugin-sdk";
5
- import type { ResolvedWebAccount } from "./types.js";
4
+ import type { ChannelSecurityAdapter } from 'openclaw/plugin-sdk';
5
+ import type { ResolvedWebAccount } from './types.js';
6
6
  export declare const webSecurityAdapter: ChannelSecurityAdapter<ResolvedWebAccount>;
7
7
  //# sourceMappingURL=security.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/security.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,sBAAsB,EAGvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,eAAO,MAAM,kBAAkB,EAAE,sBAAsB,CAAC,kBAAkB,CAWzE,CAAC"}
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/security.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,sBAAsB,EAGvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,eAAO,MAAM,kBAAkB,EAAE,sBAAsB,CAAC,kBAAkB,CAazE,CAAA"}
@@ -3,13 +3,13 @@
3
3
  */
4
4
  export const webSecurityAdapter = {
5
5
  resolveDmPolicy: (ctx) => {
6
- const policy = ctx.account.config.dmPolicy ?? "open";
6
+ const policy = ctx.account.config.dmPolicy ?? 'open';
7
7
  return {
8
8
  policy,
9
9
  allowFrom: ctx.account.config.allowFrom ?? null,
10
- policyPath: "channels.web.dmPolicy",
11
- allowFromPath: "channels.web.allowFrom",
12
- approveHint: "Add the session ID to channels.web.allowFrom",
10
+ policyPath: 'channels.clawshow.dmPolicy',
11
+ allowFromPath: 'channels.clawshow.allowFrom',
12
+ approveHint: 'Add the session ID to channels.clawshow.allowFrom',
13
13
  };
14
14
  },
15
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/security.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,CAAC,MAAM,kBAAkB,GAA+C;IAC5E,eAAe,EAAE,CAAC,GAA+C,EAA2B,EAAE;QAC5F,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;QACrD,OAAO;YACL,MAAM;YACN,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;YAC/C,UAAU,EAAE,uBAAuB;YACnC,aAAa,EAAE,wBAAwB;YACvC,WAAW,EAAE,8CAA8C;SAC5D,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/security.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,CAAC,MAAM,kBAAkB,GAA+C;IAC5E,eAAe,EAAE,CACf,GAA+C,EACtB,EAAE;QAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAA;QACpD,OAAO;YACL,MAAM;YACN,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;YAC/C,UAAU,EAAE,4BAA4B;YACxC,aAAa,EAAE,6BAA6B;YAC5C,WAAW,EAAE,mDAAmD;SACjE,CAAA;IACH,CAAC;CACF,CAAA"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Web channel setup adapter — applies account configuration.
3
3
  */
4
- import type { ChannelSetupAdapter } from "openclaw/plugin-sdk";
4
+ import type { ChannelSetupAdapter } from 'openclaw/plugin-sdk';
5
5
  export declare const webSetupAdapter: ChannelSetupAdapter;
6
6
  //# sourceMappingURL=setup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAGpB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,eAAe,EAAE,mBA8D7B,CAAC"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAGpB,MAAM,qBAAqB,CAAA;AAE5B,eAAO,MAAM,eAAe,EAAE,mBAkE7B,CAAA"}
package/dist/src/setup.js CHANGED
@@ -4,13 +4,13 @@
4
4
  export const webSetupAdapter = {
5
5
  applyAccountConfig: (params) => {
6
6
  const { cfg, accountId, input } = params;
7
- if (accountId === "default") {
7
+ if (accountId === 'default') {
8
8
  return {
9
9
  ...cfg,
10
10
  channels: {
11
11
  ...cfg.channels,
12
- web: {
13
- ...cfg.channels?.web,
12
+ clawshow: {
13
+ ...cfg.channels?.clawshow,
14
14
  enabled: true,
15
15
  ...(input.url ? { relayUrl: input.url } : {}),
16
16
  ...(input.token ? { authToken: input.token } : {}),
@@ -19,13 +19,13 @@ export const webSetupAdapter = {
19
19
  },
20
20
  };
21
21
  }
22
- const webConfig = cfg.channels?.web ?? {};
22
+ const webConfig = cfg.channels?.clawshow ?? {};
23
23
  const accounts = webConfig.accounts ?? {};
24
24
  return {
25
25
  ...cfg,
26
26
  channels: {
27
27
  ...cfg.channels,
28
- web: {
28
+ clawshow: {
29
29
  ...webConfig,
30
30
  enabled: true,
31
31
  accounts: {
@@ -44,10 +44,12 @@ export const webSetupAdapter = {
44
44
  },
45
45
  validateInput: (params) => {
46
46
  if (!params.input.url && !params.input.useEnv) {
47
- return "Web channel requires relayUrl (--url) or --use-env.";
47
+ return 'Web channel requires relayUrl (--url) or --use-env.';
48
48
  }
49
- if (!params.input.token && !params.input.useEnv && !process.env.WEB_RELAY_AUTH_TOKEN) {
50
- return "Web channel requires authToken (--token), --use-env, or WEB_RELAY_AUTH_TOKEN env var.";
49
+ if (!params.input.token &&
50
+ !params.input.useEnv &&
51
+ !process.env.WEB_RELAY_AUTH_TOKEN) {
52
+ return 'Web channel requires authToken (--token), --use-env, or WEB_RELAY_AUTH_TOKEN env var.';
51
53
  }
52
54
  return null;
53
55
  },
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,CAAC,MAAM,eAAe,GAAwB;IAClD,kBAAkB,EAAE,CAAC,MAIpB,EAAkB,EAAE;QACnB,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QAEzC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO;gBACL,GAAG,GAAG;gBACN,QAAQ,EAAE;oBACR,GAAG,GAAG,CAAC,QAAQ;oBACf,GAAG,EAAE;wBACH,GAAI,GAAG,CAAC,QAAQ,EAAE,GAA2C;wBAC7D,OAAO,EAAE,IAAI;wBACb,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC7C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAClD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC5C;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAI,GAAG,CAAC,QAAQ,EAAE,GAA+B,IAAI,EAAE,CAAC;QACvE,MAAM,QAAQ,GAAI,SAAS,CAAC,QAAoC,IAAI,EAAE,CAAC;QAEvE,OAAO;YACL,GAAG,GAAG;YACN,QAAQ,EAAE;gBACR,GAAG,GAAG,CAAC,QAAQ;gBACf,GAAG,EAAE;oBACH,GAAG,SAAS;oBACZ,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE;wBACR,GAAG,QAAQ;wBACX,CAAC,SAAS,CAAC,EAAE;4BACX,GAAI,QAAQ,CAAC,SAAS,CAAyC;4BAC/D,OAAO,EAAE,IAAI;4BACb,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC7C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAClD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAC5C;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,aAAa,EAAE,CAAC,MAIf,EAAiB,EAAE;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9C,OAAO,qDAAqD,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACrF,OAAO,uFAAuF,CAAC;QACjG,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,CAAC,MAAM,eAAe,GAAwB;IAClD,kBAAkB,EAAE,CAAC,MAIpB,EAAkB,EAAE;QACnB,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;QAExC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO;gBACL,GAAG,GAAG;gBACN,QAAQ,EAAE;oBACR,GAAG,GAAG,CAAC,QAAQ;oBACf,QAAQ,EAAE;wBACR,GAAI,GAAG,CAAC,QAAQ,EAAE,QAAgD;wBAClE,OAAO,EAAE,IAAI;wBACb,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC7C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAClD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC5C;iBACF;aACF,CAAA;QACH,CAAC;QAED,MAAM,SAAS,GAAI,GAAG,CAAC,QAAQ,EAAE,QAAoC,IAAI,EAAE,CAAA;QAC3E,MAAM,QAAQ,GAAI,SAAS,CAAC,QAAoC,IAAI,EAAE,CAAA;QAEtE,OAAO;YACL,GAAG,GAAG;YACN,QAAQ,EAAE;gBACR,GAAG,GAAG,CAAC,QAAQ;gBACf,QAAQ,EAAE;oBACR,GAAG,SAAS;oBACZ,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE;wBACR,GAAG,QAAQ;wBACX,CAAC,SAAS,CAAC,EAAE;4BACX,GAAI,QAAQ,CAAC,SAAS,CAAyC;4BAC/D,OAAO,EAAE,IAAI;4BACb,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC7C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAClD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAC5C;qBACF;iBACF;aACF;SACF,CAAA;IACH,CAAC;IAED,aAAa,EAAE,CAAC,MAIf,EAAiB,EAAE;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9C,OAAO,qDAAqD,CAAA;QAC9D,CAAC;QACD,IACE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;YACnB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;YACpB,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EACjC,CAAC;YACD,OAAO,uFAAuF,CAAA;QAChG,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA"}
@@ -5,7 +5,7 @@ export interface WebAccountConfig {
5
5
  enabled?: boolean;
6
6
  relayUrl: string;
7
7
  authToken?: string;
8
- dmPolicy?: "open" | "allowlist";
8
+ dmPolicy?: 'open' | 'allowlist';
9
9
  allowFrom?: string[];
10
10
  name?: string;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,gBAAgB,CAAA;CACzB"}
@@ -1,6 +1,6 @@
1
1
  {
2
- "id": "web",
3
- "channels": ["web"],
2
+ "id": "clawshow-gateway",
3
+ "channels": ["clawshow"],
4
4
  "configSchema": {
5
5
  "type": "object",
6
6
  "additionalProperties": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bowong/clawshow-gateway",
3
- "version": "2026.3.13",
3
+ "version": "2026.3.16-2",
4
4
  "description": "OpenClaw Web channel plugin — browser-based chat via WebSocket relay",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -19,21 +19,20 @@
19
19
  "dist",
20
20
  "openclaw.plugin.json",
21
21
  "package.json",
22
- "README.md",
23
- "index.ts"
22
+ "README.md"
24
23
  ],
25
24
  "openclaw": {
26
25
  "extensions": [
27
- "./index.ts"
26
+ "./dist/index.js"
28
27
  ]
29
28
  },
30
- "dependencies": {
31
- "ws": "^8.18.0"
32
- },
33
- "devDependencies": {
29
+ "peerDependencies": {
30
+ "ws": "^8.19.0",
34
31
  "@types/ws": "^8.5.13",
35
- "openclaw": "^2026.3.12"
32
+ "openclaw": "^2026.3.2"
36
33
  },
34
+ "dependencies": {},
35
+ "devDependencies": {},
37
36
  "scripts": {
38
37
  "build": "node -e \"require('fs').rmSync('dist',{ recursive: true, force: true })\" && bun x tsc -p tsconfig.build.json",
39
38
  "typecheck": "bun x tsc --noEmit",
package/index.ts DELETED
@@ -1,17 +0,0 @@
1
- import type { OpenClawPluginApi } from "openclaw/plugin-sdk/core";
2
- import { emptyPluginConfigSchema } from "openclaw/plugin-sdk/core";
3
- import { webChannelPlugin } from "./src/plugin.js";
4
- import { setWebRuntime } from "./src/runtime.js";
5
-
6
- const plugin = {
7
- id: "web",
8
- name: "Web",
9
- description: "Web channel plugin — browser chat via WebSocket relay",
10
- configSchema: emptyPluginConfigSchema(),
11
- register(api: OpenClawPluginApi) {
12
- setWebRuntime(api.runtime);
13
- api.registerChannel({ plugin: webChannelPlugin });
14
- },
15
- };
16
-
17
- export default plugin;