@sumeai/sumeclaw 1.0.20 → 1.0.21

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/index.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @sumeai/sumeclaw — 修复版(可连接)
3
+ */
1
4
  declare const _default: any;
2
5
  export default _default;
3
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAOA,wBAgDG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAMH,wBAyDG"}
package/dist/index.js CHANGED
@@ -1,46 +1,55 @@
1
+ "use strict";
1
2
  /**
2
- * @sumeai/sumeclaw — 友虾名片 OpenClaw Channel 插件(诊断强化版 v1.0.21)
3
+ * @sumeai/sumeclaw — 修复版(可连接)
3
4
  */
4
- import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
5
- import { sumeclawPlugin } from "./src/channel.js";
6
- import { connectSumeclaw, disconnectSumeclaw } from "./src/gateway.js";
7
- export default defineChannelPluginEntry({
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const channel_core_1 = require("openclaw/plugin-sdk/channel-core");
7
+ const channel_js_1 = require("./src/channel.js");
8
+ const gateway_js_1 = require("./src/gateway.js");
9
+ exports.default = (0, channel_core_1.defineChannelPluginEntry)({
8
10
  id: "sumeclaw",
9
11
  name: "友虾名片",
10
- description: " OpenClaw 连接到友虾名片平台,通过 AI 名片为客户提供服务。",
11
- plugin: sumeclawPlugin,
12
- registerFull(api) {
13
- console.log("[sumeclaw] 🚀 registerFull 执行 (v1.0.21)");
14
- // 强制注册(增加防护)
15
- try {
16
- const connectHandler = async (params = {}) => {
17
- console.log(`[sumeclaw] connect handler 被调用,params:`, JSON.stringify(params, null, 2));
18
- const accountId = params.accountId || "default";
19
- const cfg = params.cfg || params.config || {};
20
- const account = cfg?.channels?.sumeclaw?.accounts?.[accountId];
21
- if (!account?.registrationToken) {
22
- console.error("❌ [sumeclaw] 缺少 registrationToken,请检查配置!");
23
- return { success: false, error: "missing_token" };
24
- }
25
- console.log(`[sumeclaw] 使用 Token: ${account.registrationToken.substring(0, 8)}...`);
26
- await connectSumeclaw(api, account);
27
- console.log("✅ [sumeclaw] WebSocket 连接启动成功!");
28
- return { success: true };
29
- };
30
- api.registerGatewayMethod("sumeclaw.connect", connectHandler);
31
- console.log("✅ [sumeclaw] 已注册 Gateway 方法: sumeclaw.connect");
32
- // disconnect 同理
33
- api.registerGatewayMethod("sumeclaw.disconnect", async (params = {}) => {
34
- await disconnectSumeclaw(params.accountId || "default");
35
- console.log("✅ [sumeclaw] 已断开连接");
36
- return { success: true };
37
- });
38
- console.log("✅ [sumeclaw] 已注册 Gateway 方法: sumeclaw.disconnect");
12
+ description: "友虾名片 Channel",
13
+ plugin: channel_js_1.sumeclawPlugin,
14
+ /**
15
+ * 核心:插件启动自动连接
16
+ */
17
+ async onStart(ctx) {
18
+ const { api, cfg } = ctx;
19
+ console.log("[sumeclaw] 🚀 插件启动");
20
+ const accounts = cfg?.channels?.sumeclaw?.accounts || {};
21
+ if (Object.keys(accounts).length === 0) {
22
+ console.warn("[sumeclaw] ⚠️ 没有配置 accounts");
23
+ return;
39
24
  }
40
- catch (err) {
41
- console.error("❌ [sumeclaw] 注册 Gateway 方法失败:", err.message);
25
+ for (const accountId of Object.keys(accounts)) {
26
+ const account = accounts[accountId];
27
+ if (!account?.registrationToken) {
28
+ console.error(`[sumeclaw] ❌ account ${accountId} 缺少 token`);
29
+ continue;
30
+ }
31
+ console.log(`[sumeclaw] 🔗 正在连接 account: ${accountId}`);
32
+ try {
33
+ await (0, gateway_js_1.connectSumeclaw)(api, {
34
+ ...account,
35
+ accountId
36
+ });
37
+ console.log(`[sumeclaw] ✅ 已连接: ${accountId}`);
38
+ }
39
+ catch (err) {
40
+ console.error(`[sumeclaw] ❌ 连接失败: ${accountId}`, err.message);
41
+ }
42
42
  }
43
- console.log("📋 尝试命令: openclaw gateway call sumeclaw.connect");
44
43
  },
44
+ /**
45
+ * 🔥 Agent 回复 → 回传 WS
46
+ */
47
+ async onChannelMessage({ event }) {
48
+ const { reply, accountId } = event;
49
+ (0, gateway_js_1.sendToClient)(accountId, {
50
+ type: "reply",
51
+ content: reply
52
+ });
53
+ }
45
54
  });
46
55
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,eAAe,wBAAwB,CAAC;IACtC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,uCAAuC;IAEpD,MAAM,EAAE,cAAc;IAEtB,YAAY,CAAC,GAAQ;QACnB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QAEvD,aAAa;QACb,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,KAAK,EAAE,SAAc,EAAE,EAAE,EAAE;gBAChD,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEvF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC;gBAChD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;gBAE9C,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC;gBAE/D,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC;oBAChC,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;oBAC1D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;gBACpD,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBACpF,MAAM,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;gBAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3B,CAAC,CAAC;YAEF,GAAG,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAE7D,gBAAgB;YAChB,GAAG,CAAC,qBAAqB,CAAC,qBAAqB,EAAE,KAAK,EAAE,SAAc,EAAE,EAAE,EAAE;gBAC1E,MAAM,kBAAkB,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;gBAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAElE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IACjE,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,mEAA4E;AAC5E,iDAAkD;AAClD,iDAAiE;AAEjE,kBAAe,IAAA,uCAAwB,EAAC;IACtC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,cAAc;IAE3B,MAAM,EAAE,2BAAc;IAEtB;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,GAAQ;QACpB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;QAEzB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAElC,MAAM,QAAQ,GAAG,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC;QAEzD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEpC,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,wBAAwB,SAAS,WAAW,CAAC,CAAC;gBAC5D,SAAS;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;YAExD,IAAI,CAAC;gBACH,MAAM,IAAA,4BAAe,EAAC,GAAG,EAAE;oBACzB,GAAG,OAAO;oBACV,SAAS;iBACV,CAAC,CAAC;gBAEH,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,EAAE,CAAC,CAAC;YAEhD,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,sBAAsB,SAAS,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE;QAC9B,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAEnC,IAAA,yBAAY,EAAC,SAAS,EAAE;YACtB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
@@ -1,10 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
1
3
  /**
2
4
  * 友虾名片 Channel 插件 — 轻量设置入口
3
5
  *
4
6
  * 此入口在 openclaw plugins install 阶段加载,
5
7
  * 用于展示配置向导和验证 Token 有效性。
6
8
  */
7
- import { defineSetupPluginEntry } from "openclaw/plugin-sdk/channel-core";
8
- import { sumeclawPlugin } from "./src/channel.js";
9
- export default defineSetupPluginEntry(sumeclawPlugin);
9
+ const channel_core_1 = require("openclaw/plugin-sdk/channel-core");
10
+ const channel_js_1 = require("./src/channel.js");
11
+ exports.default = (0, channel_core_1.defineSetupPluginEntry)(channel_js_1.sumeclawPlugin);
10
12
  //# sourceMappingURL=setup-entry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup-entry.js","sourceRoot":"","sources":["../setup-entry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,eAAe,sBAAsB,CAAC,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"setup-entry.js","sourceRoot":"","sources":["../setup-entry.ts"],"names":[],"mappings":";;AAAA;;;;;GAKG;AACH,mEAA0E;AAC1E,iDAAkD;AAElD,kBAAe,IAAA,qCAAsB,EAAC,2BAAc,CAAC,CAAC"}
@@ -1,10 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sumeclawPlugin = void 0;
1
4
  /**
2
5
  * 友虾名片 ChannelPlugin 核心定义
3
6
  *
4
7
  * 基于新版 plugin-sdk(2026.3.22+)的 createChatChannelPlugin API。
5
8
  */
6
- import { createChatChannelPlugin, createChannelPluginBase, } from "openclaw/plugin-sdk/channel-core";
7
- import { getWebSocket } from "./gateway.js";
9
+ const channel_core_1 = require("openclaw/plugin-sdk/channel-core");
10
+ const gateway_js_1 = require("./gateway.js");
8
11
  /**
9
12
  * 安装/配置向导 — 交互式提示用户输入 registrationToken
10
13
  */
@@ -39,8 +42,8 @@ const setupWizard = {
39
42
  },
40
43
  ],
41
44
  };
42
- export const sumeclawPlugin = createChatChannelPlugin({
43
- base: createChannelPluginBase({
45
+ exports.sumeclawPlugin = (0, channel_core_1.createChatChannelPlugin)({
46
+ base: (0, channel_core_1.createChannelPluginBase)({
44
47
  id: channelKey,
45
48
  setupWizard,
46
49
  setup: {
@@ -97,7 +100,7 @@ export const sumeclawPlugin = createChatChannelPlugin({
97
100
  outbound: {
98
101
  attachedResults: {
99
102
  sendText: async ({ text, to, accountId }) => {
100
- const ws = getWebSocket(accountId ?? "default");
103
+ const ws = (0, gateway_js_1.getWebSocket)(accountId ?? "default");
101
104
  if (!ws || ws.readyState !== 1) {
102
105
  throw new Error("WebSocket 未连接到友虾名片平台");
103
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,6 @@
9
9
  * - Agent 回复通过 WS 推回平台
10
10
  */
11
11
  import WebSocket from "ws";
12
- import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
13
12
  export declare function getWebSocket(accountId: string): WebSocket | undefined;
14
13
  export interface MinicardAccount {
15
14
  registrationToken?: string;
@@ -17,12 +16,11 @@ export interface MinicardAccount {
17
16
  enabled?: boolean;
18
17
  }
19
18
  /**
20
- * 建立到友虾名片平台的 WebSocket 连接。
21
- * 由 index.ts 中的 registerGatewayMethod("sumeclaw.connect") 调用。
19
+ * 建立连接
22
20
  */
23
- export declare function connectSumeclaw(api: OpenClawPluginApi, account: MinicardAccount): Promise<void>;
21
+ export declare function connectSumeclaw(api: any, account: any): Promise<void>;
24
22
  /**
25
- * 断开到友虾名片平台的 WebSocket 连接。
23
+ * 回传消息给前端(Agent 名片)
26
24
  */
27
- export declare function disconnectSumeclaw(accountId: string): Promise<void>;
25
+ export declare function sendToClient(accountId: string, payload: any): void;
28
26
  //# sourceMappingURL=gateway.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAqB7D,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAErE;AAID,MAAM,WAAW,eAAe;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,iBAAiB,EACtB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAkIf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE"}
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,SAAS,MAAM,IAAI,CAAC;AA4B3B,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAErE;AAID,MAAM,WAAW,eAAe;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAGD;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,iBA8D3D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAmB3D"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * 友虾名片 OpenClaw Channel 插件 — Gateway 层
3
4
  *
@@ -8,13 +9,21 @@
8
9
  * - 平台下发的消息注入 OpenClaw Agent
9
10
  * - Agent 回复通过 WS 推回平台
10
11
  */
11
- import WebSocket from "ws";
12
- import { readFileSync } from "fs";
13
- import { fileURLToPath } from "url";
14
- import { dirname, join } from "path";
15
- const __filename = fileURLToPath(import.meta.url);
16
- const __dirname = dirname(__filename);
17
- const pkg = JSON.parse(readFileSync(join(__dirname, "..", "..", "package.json"), "utf-8"));
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.getWebSocket = getWebSocket;
17
+ exports.connectSumeclaw = connectSumeclaw;
18
+ exports.sendToClient = sendToClient;
19
+ const ws_1 = __importDefault(require("ws"));
20
+ /**
21
+ * 全局 WS 管理
22
+ */
23
+ const wsMap = {};
24
+ // const __filename = fileURLToPath(import.meta.url);
25
+ // const __dirname = dirname(__filename);
26
+ // const pkg = JSON.parse(readFileSync(join(__dirname, "..", "..", "package.json"), "utf-8"));
18
27
  // ─── 配置常量 ────────────────────────────────────────────────────────────────
19
28
  const DEFAULT_PLATFORM_URL = "wss://api.gixin.cc";
20
29
  const HEARTBEAT_MS = 30_000;
@@ -23,133 +32,83 @@ const BASE_BACKOFF_MS = 1_000;
23
32
  // ─── 连接池 ──────────────────────────────────────────────────────────────────
24
33
  /** key: accountId → WebSocket */
25
34
  const connections = new Map();
26
- export function getWebSocket(accountId) {
35
+ function getWebSocket(accountId) {
27
36
  return connections.get(accountId);
28
37
  }
29
38
  /**
30
- * 建立到友虾名片平台的 WebSocket 连接。
31
- * 由 index.ts 中的 registerGatewayMethod("sumeclaw.connect") 调用。
39
+ * 建立连接
32
40
  */
33
- export async function connectSumeclaw(api, account) {
34
- const token = account.registrationToken;
35
- if (!token) {
36
- throw new Error("缺少 registrationToken,请在友虾小程序中创建 OpenClaw 智能体获取 Token");
41
+ async function connectSumeclaw(api, account) {
42
+ const { accountId, platformUrl, registrationToken } = account;
43
+ if (!platformUrl || !registrationToken) {
44
+ console.error("[sumeclaw] 缺少 platformUrl token");
45
+ return;
37
46
  }
38
- const baseUrl = account.platformUrl ?? DEFAULT_PLATFORM_URL;
39
- const wsUrl = `${baseUrl}/api/channel/${token}`;
40
- const accountId = "default";
41
- console.log(`[sumeclaw] 正在连接友虾名片平台: ${wsUrl.replace(token, "***")}`);
42
- const connect = () => {
43
- const ws = new WebSocket(wsUrl);
44
- let heartbeat = null;
45
- let reconnectTimer = null;
46
- let attempt = 0;
47
- const scheduleReconnect = () => {
48
- attempt++;
49
- const backoff = Math.min(BASE_BACKOFF_MS * 2 ** attempt, MAX_RECONNECT_MS);
50
- console.warn(`[sumeclaw] ${backoff / 1000}s 后重连(第 ${attempt} 次)`);
51
- reconnectTimer = setTimeout(() => connect(), backoff);
52
- };
53
- ws.on("open", () => {
54
- attempt = 0;
55
- connections.set(accountId, ws);
56
- console.log("[sumeclaw] ✅ 已连接到友虾名片平台");
57
- // 上报插件注册信息
58
- ws.send(JSON.stringify({
59
- type: "register_info",
60
- agentId: "auto",
61
- pluginVersion: pkg.version,
62
- }));
63
- // 启动心跳
64
- heartbeat = setInterval(() => {
65
- if (ws.readyState === WebSocket.OPEN) {
66
- ws.send(JSON.stringify({ type: "heartbeat" }));
67
- }
68
- }, HEARTBEAT_MS);
69
- });
70
- ws.on("message", async (raw) => {
71
- try {
72
- const msg = JSON.parse(raw.toString());
73
- // 心跳 ack — 无需处理
74
- if (msg.type === "heartbeat_ack")
75
- return;
76
- // 平台下发的用户消息 → 注入 OpenClaw Agent
77
- if (msg.type === "hooks_agent") {
78
- const { payload } = msg;
79
- const sessionKey = payload.sessionKey ?? `${Date.now()}`;
80
- const message = payload.message ?? "";
81
- const meta = payload.meta ?? {};
82
- console.log(`[sumeclaw] 收到用户消息: sessionKey=${sessionKey}`);
83
- // 使用新版 channel-message pipeline 分发入站消息
84
- try {
85
- const { dispatchChannelMessageReplyWithBase } = await import("openclaw/plugin-sdk/channel-message");
86
- await dispatchChannelMessageReplyWithBase({
87
- channel: "sumeclaw",
88
- accountId,
89
- chatType: "direct",
90
- chatId: sessionKey,
91
- messageId: `${Date.now()}`,
92
- text: message,
93
- from: meta?.user_id ?? "unknown",
94
- timestamp: Date.now(),
95
- deliver: async (replyPayload) => {
96
- // Agent 回复 → 通过 WS 推回平台
97
- if (ws.readyState === WebSocket.OPEN) {
98
- ws.send(JSON.stringify({
99
- type: "agent_reply",
100
- userId: meta?.user_id,
101
- agentId: meta?.agent_id,
102
- text: replyPayload.text,
103
- sessionKey,
104
- }));
105
- }
106
- },
107
- });
108
- }
109
- catch (err) {
110
- // 如果 channel-message 模块不可用,回退到直接 dispatch
111
- console.warn(`[sumeclaw] channel-message 不可用,尝试降级: ${err.message}`);
112
- // 降级:通过标准 outbound.sendText 回复
113
- if (ws.readyState === WebSocket.OPEN) {
114
- ws.send(JSON.stringify({
115
- type: "agent_reply",
116
- userId: meta?.user_id,
117
- agentId: meta?.agent_id,
118
- text: "[系统] 收到您的消息,正在处理中...",
119
- sessionKey,
120
- }));
121
- }
122
- }
123
- }
124
- }
125
- catch (err) {
126
- console.error(`[sumeclaw] 消息处理失败: ${err.message}`);
127
- }
128
- });
129
- ws.on("close", (code, reason) => {
130
- if (heartbeat)
131
- clearInterval(heartbeat);
132
- connections.delete(accountId);
133
- console.warn(`[sumeclaw] 连接断开 (code=${code}), 准备重连`);
134
- scheduleReconnect();
135
- });
136
- ws.on("error", (err) => {
137
- if (heartbeat)
138
- clearInterval(heartbeat);
139
- console.error(`[sumeclaw] WebSocket 错误: ${err.message}`);
140
- // ws.on("close") 会触发重连
141
- });
142
- };
143
- connect();
47
+ const url = `${platformUrl}/api/channel/${registrationToken}`;
48
+ console.log("[sumeclaw] 🔗 connecting:", url);
49
+ const ws = new ws_1.default(url);
50
+ wsMap[accountId] = ws;
51
+ /**
52
+ * 连接成功
53
+ */
54
+ ws.on("open", () => {
55
+ console.log(`[sumeclaw] connected: ${accountId}`);
56
+ });
57
+ /**
58
+ * 收到消息(来自你的名片系统)
59
+ */
60
+ ws.on("message", async (raw) => {
61
+ try {
62
+ const text = raw.toString();
63
+ console.log("[sumeclaw] 📩 recv:", text);
64
+ const msg = JSON.parse(text);
65
+ /**
66
+ * 🔥 核心:注入 OpenClaw
67
+ */
68
+ await api.dispatchChannelMessage({
69
+ channel: "sumeclaw",
70
+ accountId,
71
+ senderId: msg.userId || "anonymous",
72
+ text: msg.content || "",
73
+ raw: msg
74
+ });
75
+ }
76
+ catch (err) {
77
+ console.error("[sumeclaw] ❌ message parse error:", err.message);
78
+ }
79
+ });
80
+ /**
81
+ * 连接关闭
82
+ */
83
+ ws.on("close", () => {
84
+ console.warn(`[sumeclaw] ⚠️ disconnected: ${accountId}`);
85
+ });
86
+ /**
87
+ * 错误
88
+ */
89
+ ws.on("error", (err) => {
90
+ console.error("[sumeclaw] ws error:", err);
91
+ });
144
92
  }
145
93
  /**
146
- * 断开到友虾名片平台的 WebSocket 连接。
94
+ * 回传消息给前端(Agent 名片)
147
95
  */
148
- export async function disconnectSumeclaw(accountId) {
149
- const ws = connections.get(accountId);
150
- if (ws) {
151
- connections.delete(accountId);
152
- ws.close(1000, "用户主动断开");
96
+ function sendToClient(accountId, payload) {
97
+ const ws = wsMap[accountId];
98
+ if (!ws) {
99
+ console.error("[sumeclaw] ❌ ws not found:", accountId);
100
+ return;
101
+ }
102
+ if (ws.readyState !== ws_1.default.OPEN) {
103
+ console.error("[sumeclaw] ❌ ws not open:", accountId);
104
+ return;
105
+ }
106
+ try {
107
+ ws.send(JSON.stringify(payload));
108
+ console.log("[sumeclaw] 📤 send:", payload);
109
+ }
110
+ catch (err) {
111
+ console.error("[sumeclaw] ❌ send error:", err.message);
153
112
  }
154
113
  }
155
114
  //# sourceMappingURL=gateway.js.map
@@ -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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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@sumeai/sumeclaw",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "友虾名片 OpenClaw Channel 插件 — 将 OpenClaw 连接到友虾名片平台,通过 AI 名片为客户提供服务",
5
- "type": "module",
5
+ "type": "commonjs",
6
6
  "main": "dist/index.js",
7
7
  "scripts": {
8
8
  "build": "tsc",
9
- "dev": "tsc --watch"
9
+ "prepublishOnly": "npm run build"
10
10
  },
11
11
  "openclaw": {
12
12
  "extensions": [
package/Archive.zip DELETED
Binary file