@rowger_go/chatu 0.1.3

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 (77) hide show
  1. package/.github/workflows/ci.yml +30 -0
  2. package/.github/workflows/publish.yml +55 -0
  3. package/INSTALL.md +285 -0
  4. package/INSTALL.zh.md +285 -0
  5. package/LICENSE +21 -0
  6. package/README.md +293 -0
  7. package/README.zh.md +293 -0
  8. package/dist/index.d.ts +96 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +1381 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/index.test.d.ts +5 -0
  13. package/dist/index.test.d.ts.map +1 -0
  14. package/dist/index.test.js +334 -0
  15. package/dist/index.test.js.map +1 -0
  16. package/dist/sdk/adapters/cache.d.ts +94 -0
  17. package/dist/sdk/adapters/cache.d.ts.map +1 -0
  18. package/dist/sdk/adapters/cache.js +158 -0
  19. package/dist/sdk/adapters/cache.js.map +1 -0
  20. package/dist/sdk/adapters/cache.test.d.ts +14 -0
  21. package/dist/sdk/adapters/cache.test.d.ts.map +1 -0
  22. package/dist/sdk/adapters/cache.test.js +178 -0
  23. package/dist/sdk/adapters/cache.test.js.map +1 -0
  24. package/dist/sdk/adapters/default.d.ts +24 -0
  25. package/dist/sdk/adapters/default.d.ts.map +1 -0
  26. package/dist/sdk/adapters/default.js +151 -0
  27. package/dist/sdk/adapters/default.js.map +1 -0
  28. package/dist/sdk/adapters/webhub.d.ts +336 -0
  29. package/dist/sdk/adapters/webhub.d.ts.map +1 -0
  30. package/dist/sdk/adapters/webhub.js +663 -0
  31. package/dist/sdk/adapters/webhub.js.map +1 -0
  32. package/dist/sdk/adapters/websocket.d.ts +133 -0
  33. package/dist/sdk/adapters/websocket.d.ts.map +1 -0
  34. package/dist/sdk/adapters/websocket.js +314 -0
  35. package/dist/sdk/adapters/websocket.js.map +1 -0
  36. package/dist/sdk/core/channel.d.ts +104 -0
  37. package/dist/sdk/core/channel.d.ts.map +1 -0
  38. package/dist/sdk/core/channel.js +158 -0
  39. package/dist/sdk/core/channel.js.map +1 -0
  40. package/dist/sdk/index.d.ts +27 -0
  41. package/dist/sdk/index.d.ts.map +1 -0
  42. package/dist/sdk/index.js +33 -0
  43. package/dist/sdk/index.js.map +1 -0
  44. package/dist/sdk/types/adapters.d.ts +128 -0
  45. package/dist/sdk/types/adapters.d.ts.map +1 -0
  46. package/dist/sdk/types/adapters.js +10 -0
  47. package/dist/sdk/types/adapters.js.map +1 -0
  48. package/dist/sdk/types/channel.d.ts +270 -0
  49. package/dist/sdk/types/channel.d.ts.map +1 -0
  50. package/dist/sdk/types/channel.js +36 -0
  51. package/dist/sdk/types/channel.js.map +1 -0
  52. package/docs/channel/01-overview.md +117 -0
  53. package/docs/channel/02-configuration.md +138 -0
  54. package/docs/channel/03-capabilities.md +86 -0
  55. package/docs/channel/04-api-reference.md +394 -0
  56. package/docs/channel/05-message-protocol.md +194 -0
  57. package/docs/channel/06-security.md +83 -0
  58. package/docs/channel/README.md +30 -0
  59. package/docs/sdk/README.md +13 -0
  60. package/docs/sdk/v2026.1.29-v2026.2.19.md +630 -0
  61. package/jest.config.js +19 -0
  62. package/openclaw.plugin.json +113 -0
  63. package/package.json +74 -0
  64. package/run-poll.mjs +209 -0
  65. package/scripts/reload-plugin.sh +78 -0
  66. package/src/index.test.ts +432 -0
  67. package/src/index.ts +1638 -0
  68. package/src/sdk/adapters/cache.test.ts +205 -0
  69. package/src/sdk/adapters/cache.ts +193 -0
  70. package/src/sdk/adapters/default.ts +196 -0
  71. package/src/sdk/adapters/webhub.ts +857 -0
  72. package/src/sdk/adapters/websocket.ts +378 -0
  73. package/src/sdk/core/channel.ts +230 -0
  74. package/src/sdk/index.ts +36 -0
  75. package/src/sdk/types/adapters.ts +169 -0
  76. package/src/sdk/types/channel.ts +346 -0
  77. package/tsconfig.json +31 -0
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ /******************************************************************
3
+ * Channel SDK - Channel Class
4
+ *
5
+ * OpenClaw Channel SDK 的核心 Channel 类
6
+ *
7
+ * @see https://github.com/chatu-ai/openclaw-web-hub-channel
8
+ ******************************************************************/
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.Channel = void 0;
11
+ const channel_1 = require("../types/channel");
12
+ const default_1 = require("../adapters/default");
13
+ /**
14
+ * Channel 类 [Channel SDK 标准]
15
+ *
16
+ * Channel 的核心管理类,处理连接、消息收发等
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const channel = new Channel({
21
+ * config: {
22
+ * channelId: 'wh_ch_xxx',
23
+ * accessToken: 'token_xxx',
24
+ * }
25
+ * });
26
+ *
27
+ * channel.connect();
28
+ * channel.onMessage((msg) => {
29
+ * console.log('收到消息:', msg);
30
+ * });
31
+ * ```
32
+ */
33
+ class Channel {
34
+ /** 是否已连接 [Channel SDK 标准] */
35
+ get isConnected() {
36
+ return this.connectionAdapter.status === 'connected';
37
+ }
38
+ /** 当前状态 [Channel SDK 标准] */
39
+ get status() {
40
+ return this.connectionAdapter.status;
41
+ }
42
+ /**
43
+ * 创建 Channel 实例 [Channel SDK 标准]
44
+ */
45
+ constructor(options) {
46
+ /** 统计信息 [Channel SDK 标准] */
47
+ this._stats = {
48
+ messagesSent: 0,
49
+ messagesReceived: 0,
50
+ connectedDuration: 0,
51
+ lastActiveAt: Date.now(),
52
+ };
53
+ this.config = {
54
+ heartbeatInterval: 30000,
55
+ heartbeatTimeout: 10000,
56
+ maxReconnectAttempts: 3,
57
+ ...options.config,
58
+ };
59
+ this.adapterFactory = options.adapterFactory || (0, default_1.createDefaultFactory)();
60
+ this.connectionAdapter = this.adapterFactory.createConnectionAdapter(this.config);
61
+ this.messageCallbacks = new Set();
62
+ this.statusCallbacks = new Set();
63
+ // 设置回调
64
+ this.connectionAdapter.onMessage((message) => {
65
+ this._stats.messagesReceived++;
66
+ this._stats.lastActiveAt = Date.now();
67
+ this.messageCallbacks.forEach((cb) => cb(message));
68
+ });
69
+ this.connectionAdapter.onStatusChange((status, error) => {
70
+ this.statusCallbacks.forEach((cb) => cb(status, error));
71
+ });
72
+ }
73
+ /**
74
+ * 连接到 Channel 服务 [Channel SDK 标准]
75
+ */
76
+ async connect() {
77
+ await this.connectionAdapter.connect();
78
+ }
79
+ /**
80
+ * 断开连接 [Channel SDK 标准]
81
+ */
82
+ async disconnect() {
83
+ await this.connectionAdapter.disconnect();
84
+ }
85
+ /**
86
+ * 发送消息 [Channel SDK 标准]
87
+ */
88
+ async send(message) {
89
+ const result = await this.connectionAdapter.send(message);
90
+ if (result.success) {
91
+ this._stats.messagesSent++;
92
+ this._stats.lastActiveAt = Date.now();
93
+ }
94
+ return result;
95
+ }
96
+ /**
97
+ * 发送文本消息 [Channel SDK 标准]
98
+ */
99
+ async sendText(targetId, text, options) {
100
+ return this.send({
101
+ target: {
102
+ type: options?.type || channel_1.TargetType.USER,
103
+ id: targetId,
104
+ },
105
+ content: {
106
+ text,
107
+ format: 'plain',
108
+ },
109
+ replyTo: options?.replyTo,
110
+ });
111
+ }
112
+ /**
113
+ * 订阅消息 [Channel SDK 标准]
114
+ */
115
+ onMessage(callback) {
116
+ this.messageCallbacks.add(callback);
117
+ // 返回取消订阅函数
118
+ return () => {
119
+ this.messageCallbacks.delete(callback);
120
+ };
121
+ }
122
+ /**
123
+ * 订阅状态变化 [Channel SDK 标准]
124
+ */
125
+ onStatusChange(callback) {
126
+ this.statusCallbacks.add(callback);
127
+ return () => {
128
+ this.statusCallbacks.delete(callback);
129
+ };
130
+ }
131
+ /**
132
+ * 获取统计信息 [Channel SDK 标准]
133
+ */
134
+ async getStats() {
135
+ const adapterStats = await this.connectionAdapter.getStats();
136
+ return {
137
+ ...this._stats,
138
+ ...adapterStats,
139
+ };
140
+ }
141
+ /**
142
+ * 获取能力 [Channel SDK 标准]
143
+ */
144
+ async getCapabilities() {
145
+ const adapter = this.adapterFactory.createCapabilitiesAdapter();
146
+ return adapter.getCapabilities();
147
+ }
148
+ /**
149
+ * 销毁 Channel [Channel SDK 标准]
150
+ */
151
+ async destroy() {
152
+ await this.disconnect();
153
+ this.messageCallbacks.clear();
154
+ this.statusCallbacks.clear();
155
+ }
156
+ }
157
+ exports.Channel = Channel;
158
+ //# sourceMappingURL=channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../../src/sdk/core/channel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /******************************************************************
2
+ * Channel SDK - Entry Point
3
+ *
4
+ * OpenClaw Channel SDK 入口文件
5
+ *
6
+ * @see https://github.com/chatu-ai/openclaw-web-hub-channel
7
+ ******************************************************************/
8
+ export * from './types/channel';
9
+ export * from './types/adapters';
10
+ export * from './core/channel';
11
+ export * from './adapters/websocket';
12
+ export * from './adapters/default';
13
+ export * from './adapters/webhub';
14
+ /******************************************************************
15
+ * Channel SDK - Message Class (Placeholder)
16
+ ******************************************************************/
17
+ export interface Message {
18
+ id: string;
19
+ content: string;
20
+ }
21
+ /******************************************************************
22
+ * Channel SDK - Connection Class (Placeholder)
23
+ ******************************************************************/
24
+ export interface Connection {
25
+ status: string;
26
+ }
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;oEAMoE;AAGpE,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAElC;;oEAEoE;AAEpE,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;oEAEoE;AAEpE,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /******************************************************************
3
+ * Channel SDK - Entry Point
4
+ *
5
+ * OpenClaw Channel SDK 入口文件
6
+ *
7
+ * @see https://github.com/chatu-ai/openclaw-web-hub-channel
8
+ ******************************************************************/
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ // 导出类型
25
+ __exportStar(require("./types/channel"), exports);
26
+ __exportStar(require("./types/adapters"), exports);
27
+ // 导出核心类
28
+ __exportStar(require("./core/channel"), exports);
29
+ // 导出适配器
30
+ __exportStar(require("./adapters/websocket"), exports);
31
+ __exportStar(require("./adapters/default"), exports);
32
+ __exportStar(require("./adapters/webhub"), exports);
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":";AAAA;;;;;;oEAMoE;;;;;;;;;;;;;;;;AAEpE,OAAO;AACP,kDAAgC;AAChC,mDAAiC;AAEjC,QAAQ;AACR,iDAA+B;AAE/B,QAAQ;AACR,uDAAqC;AACrC,qDAAmC;AACnC,oDAAkC"}
@@ -0,0 +1,128 @@
1
+ /******************************************************************
2
+ * Channel SDK - Adapter Types
3
+ *
4
+ * OpenClaw Channel SDK 的适配器接口定义
5
+ *
6
+ * @see https://github.com/chatu-ai/openclaw-web-hub-channel
7
+ ******************************************************************/
8
+ import type { InboundMessage, OutboundMessage, SendResult, ConnectionConfig, ConnectionStatus, ChannelStats, ChannelCapabilities } from './channel';
9
+ /**
10
+ * 消息回调 [Channel SDK 标准]
11
+ */
12
+ export type MessageCallback = (message: InboundMessage) => void;
13
+ /**
14
+ * 状态回调 [Channel SDK 标准]
15
+ */
16
+ export type StatusCallback = (status: ConnectionStatus, error?: Error) => void;
17
+ /**
18
+ * 连接适配器接口 [Channel SDK 标准]
19
+ *
20
+ * 负责管理与目标服务的连接
21
+ */
22
+ export interface ConnectionAdapter {
23
+ /** 连接配置 [Channel SDK 标准] */
24
+ config: ConnectionConfig;
25
+ /** 当前状态 [Channel SDK 标准] */
26
+ status: ConnectionStatus;
27
+ /** 连接 [Channel SDK 标准] */
28
+ connect(): Promise<void>;
29
+ /** 断开连接 [Channel SDK 标准] */
30
+ disconnect(): Promise<void>;
31
+ /** 发送消息 [Channel SDK 标准] */
32
+ send(message: OutboundMessage): Promise<SendResult>;
33
+ /** 订阅消息 [Channel SDK 标准] */
34
+ onMessage(callback: MessageCallback): void;
35
+ /** 订阅状态变化 [Channel SDK 标准] */
36
+ onStatusChange(callback: StatusCallback): void;
37
+ /** 获取连接统计 [Channel SDK 标准] */
38
+ getStats(): Promise<ChannelStats>;
39
+ }
40
+ /**
41
+ * 消息处理适配器接口 [Channel SDK 标准]
42
+ *
43
+ * 负责消息的解析和格式化
44
+ */
45
+ export interface MessageAdapter {
46
+ /** 解析入站消息 [Channel SDK 标准] */
47
+ parseInbound(raw: unknown): InboundMessage;
48
+ /** 格式化出站消息 [Channel SDK 标准] */
49
+ formatOutbound(message: OutboundMessage): unknown;
50
+ /** 验证消息 [Channel SDK 标准] */
51
+ validate(message: InboundMessage | OutboundMessage): boolean;
52
+ /** 清理消息 [Channel SDK 标准] */
53
+ sanitize(text: string): string;
54
+ }
55
+ /**
56
+ * 心跳适配器接口 [Channel SDK 标准]
57
+ *
58
+ * 负责心跳检测和管理
59
+ */
60
+ export interface HeartbeatAdapter {
61
+ /** 发送心跳 [Channel SDK 标准] */
62
+ send(): Promise<boolean>;
63
+ /** 处理心跳响应 [Channel SDK 标准] */
64
+ handleResponse(): void;
65
+ /** 检查是否超时 [Channel SDK 标准] */
66
+ isTimeout(): boolean;
67
+ /** 获取下次心跳时间 [Channel SDK 标准] */
68
+ getNextHeartbeatTime(): number;
69
+ }
70
+ /**
71
+ * 认证适配器接口 [Channel SDK 标准]
72
+ *
73
+ * 负责身份验证和授权
74
+ */
75
+ export interface AuthAdapter {
76
+ /** 获取认证头 [Channel SDK 标准] */
77
+ getAuthHeaders(): Record<string, string>;
78
+ /** 验证响应 [Channel SDK 标准] */
79
+ validateResponse(response: unknown): boolean;
80
+ /** 刷新令牌 [Channel SDK 标准] */
81
+ refreshToken(): Promise<boolean>;
82
+ }
83
+ /**
84
+ * 能力查询适配器接口 [Channel SDK 标准]
85
+ *
86
+ * 负责查询 Channel 能力
87
+ */
88
+ export interface CapabilitiesAdapter {
89
+ /** 获取能力 [Channel SDK 标准] */
90
+ getCapabilities(): Promise<ChannelCapabilities>;
91
+ /** 检查能力 [Channel SDK 标准] */
92
+ hasCapability(capability: keyof ChannelCapabilities): boolean;
93
+ }
94
+ /**
95
+ * 日志适配器接口 [Channel SDK 标准]
96
+ *
97
+ * 负责日志记录
98
+ */
99
+ export interface LoggerAdapter {
100
+ /** 调试日志 [Channel SDK 标准] */
101
+ debug(message: string, data?: unknown): void;
102
+ /** 信息日志 [Channel SDK 标准] */
103
+ info(message: string, data?: unknown): void;
104
+ /** 警告日志 [Channel SDK 标准] */
105
+ warn(message: string, data?: unknown): void;
106
+ /** 错误日志 [Channel SDK 标准] */
107
+ error(message: string, error?: Error): void;
108
+ }
109
+ /**
110
+ * 适配器工厂接口 [Channel SDK 标准]
111
+ *
112
+ * 负责创建和管理适配器
113
+ */
114
+ export interface AdapterFactory {
115
+ /** 创建连接适配器 [Channel SDK 标准] */
116
+ createConnectionAdapter(config: ConnectionConfig): ConnectionAdapter;
117
+ /** 创建消息适配器 [Channel SDK 标准] */
118
+ createMessageAdapter(): MessageAdapter;
119
+ /** 创建心跳适配器 [Channel SDK 标准] */
120
+ createHeartbeatAdapter(): HeartbeatAdapter;
121
+ /** 创建认证适配器 [Channel SDK 标准] */
122
+ createAuthAdapter(): AuthAdapter;
123
+ /** 创建能力适配器 [Channel SDK 标准] */
124
+ createCapabilitiesAdapter(): CapabilitiesAdapter;
125
+ /** 创建日志适配器 [Channel SDK 标准] */
126
+ createLoggerAdapter(): LoggerAdapter;
127
+ }
128
+ //# sourceMappingURL=adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/sdk/types/adapters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /******************************************************************
3
+ * Channel SDK - Adapter Types
4
+ *
5
+ * OpenClaw Channel SDK 的适配器接口定义
6
+ *
7
+ * @see https://github.com/chatu-ai/openclaw-web-hub-channel
8
+ ******************************************************************/
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/sdk/types/adapters.ts"],"names":[],"mappings":";AAAA;;;;;;oEAMoE"}
@@ -0,0 +1,270 @@
1
+ /******************************************************************
2
+ * Channel SDK - Channel Types
3
+ *
4
+ * OpenClaw Channel SDK 的核心类型定义
5
+ *
6
+ * @see https://github.com/chatu-ai/openclaw-web-hub-channel
7
+ ******************************************************************/
8
+ /**
9
+ * 连接状态 [Channel SDK 标准]
10
+ */
11
+ export type ConnectionStatus = 'connecting' | 'connected' | 'disconnected' | 'error';
12
+ /**
13
+ * 消息类型 [Channel SDK 标准]
14
+ */
15
+ export declare enum MessageType {
16
+ TEXT = "text",
17
+ IMAGE = "image",
18
+ VIDEO = "video",
19
+ AUDIO = "audio",
20
+ FILE = "file",
21
+ LOCATION = "location",
22
+ /** Plugin-Channel Realtime: operation/command type */
23
+ ACTION = "action",
24
+ /** Plugin-Channel Realtime: unrecognised type, frontend renders placeholder */
25
+ UNKNOWN = "unknown"
26
+ }
27
+ /**
28
+ * 目标类型 [Channel SDK 标准]
29
+ */
30
+ export declare enum TargetType {
31
+ USER = "user",
32
+ GROUP = "group",
33
+ CHANNEL = "channel"
34
+ }
35
+ /**
36
+ * 消息发送者 [Channel SDK 标准]
37
+ */
38
+ export interface Sender {
39
+ /** 发送者 ID [Channel SDK 标准] */
40
+ id: string;
41
+ /** 发送者显示名 [Channel SDK 标准] */
42
+ displayName?: string;
43
+ /** 发送者头像 URL [Channel SDK 标准] */
44
+ avatarUrl?: string;
45
+ /** 是否为机器人 [Channel SDK 标准] */
46
+ isBot?: boolean;
47
+ }
48
+ /**
49
+ * 消息目标 [Channel SDK 标准]
50
+ */
51
+ export interface Target {
52
+ /** 目标类型 [Channel SDK 标准] */
53
+ type: TargetType;
54
+ /** 目标 ID [Channel SDK 标准] */
55
+ id: string;
56
+ /** 目标名称 [Channel SDK 标准] */
57
+ name?: string;
58
+ }
59
+ /**
60
+ * 媒体附件 [Channel SDK 标准]
61
+ */
62
+ export interface Media {
63
+ /** 媒体类型 [Channel SDK 标准] */
64
+ type: MessageType;
65
+ /** 媒体 URL [Channel SDK 标准] */
66
+ url: string;
67
+ /** MIME 类型 [Channel SDK 标准] */
68
+ mimeType?: string;
69
+ /** 文件大小(字节)[Channel SDK 标准] */
70
+ size?: number;
71
+ /** 图片/视频宽度 [Channel SDK 标准] */
72
+ width?: number;
73
+ /** 图片/视频高度 [Channel SDK 标准] */
74
+ height?: number;
75
+ /** 音视频时长(秒)[Channel SDK 标准] */
76
+ duration?: number;
77
+ /** 缩略图 URL [Channel SDK 标准] */
78
+ thumbnailUrl?: string;
79
+ }
80
+ /**
81
+ * 消息内容 [Channel SDK 标准]
82
+ */
83
+ export interface MessageContent {
84
+ /** 文本内容 [Channel SDK 标准] */
85
+ text: string;
86
+ /** 文本格式 [Channel SDK 标准] */
87
+ format?: 'plain' | 'markdown' | 'html';
88
+ }
89
+ /**
90
+ * 消息回复 [Channel SDK 标准]
91
+ */
92
+ export interface MessageReply {
93
+ /** 回复的消息 ID [Channel SDK 标准] */
94
+ messageId: string;
95
+ /** 引用的文本 [Channel SDK 标准] */
96
+ quotedText?: string;
97
+ }
98
+ /**
99
+ * 入站消息 [Channel SDK 标准]
100
+ */
101
+ export interface InboundMessage {
102
+ /** 消息 ID [Channel SDK 标准] */
103
+ id: string;
104
+ /** 通道 ID [Channel SDK 标准] */
105
+ channelId: string;
106
+ /** 发送者 [Channel SDK 标准] */
107
+ sender: Sender;
108
+ /** 目标 [Channel SDK 标准] */
109
+ target: Target;
110
+ /** 消息内容 [Channel SDK 标准] */
111
+ content: MessageContent;
112
+ /** 媒体附件 [Channel SDK 标准] */
113
+ media?: Media[];
114
+ /** 回复 [Channel SDK 标准] */
115
+ replyTo?: MessageReply;
116
+ /** 时间戳 [Channel SDK 标准] */
117
+ timestamp: number;
118
+ /** 元数据 [Channel SDK 标准] */
119
+ metadata?: Record<string, unknown>;
120
+ }
121
+ /**
122
+ * 出站消息 [Channel SDK 标准]
123
+ */
124
+ export interface OutboundMessage {
125
+ /** 消息 ID [Channel SDK 标准] */
126
+ messageId?: string;
127
+ /** 目标 [Channel SDK 标准] */
128
+ target: Target;
129
+ /** 消息内容 [Channel SDK 标准] */
130
+ content: MessageContent;
131
+ /** 媒体附件 [Channel SDK 标准] */
132
+ media?: Media[];
133
+ /** 回复 [Channel SDK 标准] */
134
+ replyTo?: string;
135
+ /** 消息标记 [Channel SDK 标准] */
136
+ flags?: {
137
+ /** 静默发送 [Channel SDK 标准] */
138
+ silent?: boolean;
139
+ /** 紧急消息 [Channel SDK 标准] */
140
+ urgent?: boolean;
141
+ };
142
+ /** 元数据 [Channel SDK 标准] */
143
+ metadata?: Record<string, unknown>;
144
+ }
145
+ /**
146
+ * 发送结果 [Channel SDK 标准]
147
+ */
148
+ export interface SendResult {
149
+ /** 消息 ID [Channel SDK 标准] */
150
+ messageId: string;
151
+ /** 是否成功 [Channel SDK 标准] */
152
+ success: boolean;
153
+ /** 时间戳 [Channel SDK 标准] */
154
+ timestamp: number;
155
+ /** 错误信息 [Channel SDK 标准] */
156
+ error?: {
157
+ code: string;
158
+ message: string;
159
+ };
160
+ }
161
+ /**
162
+ * 连接配置 [Channel SDK 标准]
163
+ */
164
+ export interface ConnectionConfig {
165
+ /** Channel ID [Channel SDK 标准] */
166
+ channelId: string;
167
+ /** 访问令牌 [Channel SDK 标准] */
168
+ accessToken: string;
169
+ /** WebHub Backend URL (配置时设置) */
170
+ webhubUrl?: string;
171
+ /** Webhook URL [Channel SDK 标准] */
172
+ webhookUrl?: string;
173
+ /** WebSocket URL [Channel SDK 标准] */
174
+ wsUrl?: string;
175
+ /** 心跳间隔(毫秒)[Channel SDK 标准] */
176
+ heartbeatInterval?: number;
177
+ /** 心跳超时(毫秒)[Channel SDK 标准] */
178
+ heartbeatTimeout?: number;
179
+ /** 最大重连次数 [Channel SDK 标准] */
180
+ maxReconnectAttempts?: number;
181
+ /** Plugin-Channel Realtime: connection mode, 'user' | 'group' (future) */
182
+ mode?: 'user' | 'group';
183
+ }
184
+ /**
185
+ * Channel 统计信息 [Channel SDK 标准]
186
+ */
187
+ export interface ChannelStats {
188
+ /** 发送消息数 [Channel SDK 标准] */
189
+ messagesSent: number;
190
+ /** 接收消息数 [Channel SDK 标准] */
191
+ messagesReceived: number;
192
+ /** 连接时长(秒)[Channel SDK 标准] */
193
+ connectedDuration: number;
194
+ /** 最后活跃时间 [Channel SDK 标准] */
195
+ lastActiveAt: number;
196
+ /** 连接模式 (WebHub 扩展) */
197
+ mode?: string;
198
+ }
199
+ /**
200
+ * Channel 能力 [Channel SDK 标准]
201
+ */
202
+ export interface ChannelCapabilities {
203
+ /** 支持的消息类型 [Channel SDK 标准] */
204
+ messageTypes: MessageType[];
205
+ /** 支持的目标类型 [Channel SDK 标准] */
206
+ targetTypes: TargetType[];
207
+ /** 支持富文本格式 [Channel SDK 标准] */
208
+ richFormats?: ('markdown' | 'html')[];
209
+ /** 支持附件 [Channel SDK 标准] */
210
+ attachments?: boolean;
211
+ /** 支持回复 [Channel SDK 标准] */
212
+ reply?: boolean;
213
+ /** 支持消息编辑 [Channel SDK 标准] */
214
+ edit?: boolean;
215
+ /** 支持消息删除 [Channel SDK 标准] */
216
+ delete?: boolean;
217
+ /** 支持表情反应 [Channel SDK 标准] */
218
+ reactions?: boolean;
219
+ /** 支持投票 [Channel SDK 标准] */
220
+ polls?: boolean;
221
+ /** 支持按钮 [Channel SDK 标准] */
222
+ buttons?: boolean;
223
+ }
224
+ /**
225
+ * T005: Content type for multi-type message rendering (mirrors API MessageContentType).
226
+ */
227
+ export type MessageContentType = 'text' | 'image' | 'file' | 'action' | 'unknown';
228
+ /**
229
+ * T005: Payload for a single streaming chunk, sent to API via POST /api/channel/stream/chunk.
230
+ */
231
+ export interface StreamChunkPayload {
232
+ /** Unique message ID (UUID v4) */
233
+ messageId: string;
234
+ /** Monotonically increasing sequence number (0-based) */
235
+ seq: number;
236
+ /** Incremental text delta from this chunk */
237
+ delta: string;
238
+ }
239
+ /**
240
+ * T005: Payload for the streaming completion frame, POST /api/channel/stream/done.
241
+ */
242
+ export interface StreamDonePayload {
243
+ /** Same messageId as the preceding chunks */
244
+ messageId: string;
245
+ /** Total number of chunks sent (for frontend sequence validation) */
246
+ totalSeq: number;
247
+ }
248
+ /**
249
+ * T005: A single cached message entry on the plugin side.
250
+ */
251
+ export interface PluginCacheEntry {
252
+ /** Message ID (UUID v4) — idempotency key */
253
+ messageId: string;
254
+ /** Serialised outbound message payload */
255
+ payload: string;
256
+ /** Unix ms timestamp when cached */
257
+ cachedAt: number;
258
+ /** Whether the message has been acknowledged by the API */
259
+ acked?: boolean;
260
+ }
261
+ /**
262
+ * T005: Root structure of the plugin-side message cache JSON file
263
+ * (default: ~/.openclaw/chatu/message_cache.json).
264
+ */
265
+ export interface PluginMessageCacheFile {
266
+ version: 1;
267
+ entries: PluginCacheEntry[];
268
+ updatedAt: number;
269
+ }
270
+ //# sourceMappingURL=channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../../src/sdk/types/channel.ts"],"names":[],"mappings":"AAAA;;;;;;oEAMoE;AAEpE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,WAAW,GACX,cAAc,GACd,OAAO,CAAC;AAEZ;;GAEG;AACH,oBAAY,WAAW;IACrB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;IACf,KAAK,UAAU;IACf,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,sDAAsD;IACtD,MAAM,WAAW;IACjB,+EAA+E;IAC/E,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,UAAU;IACpB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IAEX,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,4BAA4B;IAC5B,IAAI,EAAE,UAAU,CAAC;IAEjB,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IAEX,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,4BAA4B;IAC5B,IAAI,EAAE,WAAW,CAAC;IAElB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IAEZ,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IAEb,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IAEX,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAElB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IAEf,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IAEf,4BAA4B;IAC5B,OAAO,EAAE,cAAc,CAAC;IAExB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;IAEhB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAElB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IAEf,4BAA4B;IAC5B,OAAO,EAAE,cAAc,CAAC;IAExB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;IAEhB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,KAAK,CAAC,EAAE;QACN,4BAA4B;QAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,4BAA4B;QAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IAEF,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAElB,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;IAEjB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAElB,4BAA4B;IAC5B,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAElB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IAEpB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,+BAA+B;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,8BAA8B;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IAErB,6BAA6B;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8BAA8B;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IAErB,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,YAAY,EAAE,WAAW,EAAE,CAAC;IAE5B,+BAA+B;IAC/B,WAAW,EAAE,UAAU,EAAE,CAAC;IAE1B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;IAEtC,4BAA4B;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,8BAA8B;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB"}