@f2a/openclaw-adapter 0.1.0

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 (51) hide show
  1. package/README.md +510 -0
  2. package/dist/announcement-queue.d.ts +71 -0
  3. package/dist/announcement-queue.d.ts.map +1 -0
  4. package/dist/announcement-queue.js +181 -0
  5. package/dist/announcement-queue.js.map +1 -0
  6. package/dist/capability-detector.d.ts +21 -0
  7. package/dist/capability-detector.d.ts.map +1 -0
  8. package/dist/capability-detector.js +177 -0
  9. package/dist/capability-detector.js.map +1 -0
  10. package/dist/connector.d.ts +62 -0
  11. package/dist/connector.d.ts.map +1 -0
  12. package/dist/connector.js +1063 -0
  13. package/dist/connector.js.map +1 -0
  14. package/dist/index.d.ts +16 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +44 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/network-client.d.ts +48 -0
  19. package/dist/network-client.d.ts.map +1 -0
  20. package/dist/network-client.js +104 -0
  21. package/dist/network-client.js.map +1 -0
  22. package/dist/node-manager.d.ts +50 -0
  23. package/dist/node-manager.d.ts.map +1 -0
  24. package/dist/node-manager.js +187 -0
  25. package/dist/node-manager.js.map +1 -0
  26. package/dist/plugin.d.ts +16 -0
  27. package/dist/plugin.d.ts.map +1 -0
  28. package/dist/plugin.js +116 -0
  29. package/dist/plugin.js.map +1 -0
  30. package/dist/reputation.d.ts +72 -0
  31. package/dist/reputation.d.ts.map +1 -0
  32. package/dist/reputation.js +215 -0
  33. package/dist/reputation.js.map +1 -0
  34. package/dist/task-guard.d.ts +77 -0
  35. package/dist/task-guard.d.ts.map +1 -0
  36. package/dist/task-guard.js +330 -0
  37. package/dist/task-guard.js.map +1 -0
  38. package/dist/task-queue.d.ts +71 -0
  39. package/dist/task-queue.d.ts.map +1 -0
  40. package/dist/task-queue.js +126 -0
  41. package/dist/task-queue.js.map +1 -0
  42. package/dist/types.d.ts +248 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +6 -0
  45. package/dist/types.js.map +1 -0
  46. package/dist/webhook-server.d.ts +44 -0
  47. package/dist/webhook-server.d.ts.map +1 -0
  48. package/dist/webhook-server.js +119 -0
  49. package/dist/webhook-server.js.map +1 -0
  50. package/openclaw.plugin.json +106 -0
  51. package/package.json +40 -0
@@ -0,0 +1,248 @@
1
+ /**
2
+ * F2A OpenClaw Connector - Core Types
3
+ */
4
+ export interface OpenClawPlugin {
5
+ name: string;
6
+ version: string;
7
+ initialize(config: Record<string, unknown>): Promise<void>;
8
+ getTools(): Tool[];
9
+ shutdown?(): Promise<void>;
10
+ onEvent?(event: string, payload: unknown): Promise<void>;
11
+ }
12
+ export interface OpenClawPluginApi {
13
+ id: string;
14
+ name: string;
15
+ version?: string;
16
+ description?: string;
17
+ source: string;
18
+ config: Record<string, unknown>;
19
+ pluginConfig?: Record<string, unknown>;
20
+ runtime: {
21
+ version: string;
22
+ config: {
23
+ loadConfig: (path?: string) => Promise<Record<string, unknown>>;
24
+ writeConfigFile: (path: string, config: unknown) => Promise<void>;
25
+ };
26
+ system: {
27
+ enqueueSystemEvent: (event: string, payload?: unknown) => void;
28
+ requestHeartbeatNow: () => void;
29
+ runCommandWithTimeout: (command: string, timeoutMs: number) => Promise<{
30
+ stdout: string;
31
+ stderr: string;
32
+ }>;
33
+ };
34
+ media: {
35
+ loadWebMedia: (url: string) => Promise<Buffer>;
36
+ detectMime: (data: Buffer) => string;
37
+ };
38
+ tts: {
39
+ textToSpeechTelephony: (options: {
40
+ text: string;
41
+ cfg: unknown;
42
+ }) => Promise<{
43
+ audio: Buffer;
44
+ sampleRate: number;
45
+ }>;
46
+ };
47
+ stt: {
48
+ transcribeAudioFile: (options: {
49
+ filePath: string;
50
+ cfg: unknown;
51
+ mime?: string;
52
+ }) => Promise<{
53
+ text?: string;
54
+ }>;
55
+ };
56
+ logging: {
57
+ shouldLogVerbose: () => boolean;
58
+ getChildLogger: (bindings?: Record<string, unknown>) => unknown;
59
+ };
60
+ };
61
+ logger: {
62
+ debug?: (message: string) => void;
63
+ info: (message: string) => void;
64
+ warn: (message: string) => void;
65
+ error: (message: string) => void;
66
+ };
67
+ registerTool?: (tool: unknown, opts?: {
68
+ optional?: boolean;
69
+ }) => void;
70
+ registerService?: (service: {
71
+ id: string;
72
+ start: () => void | Promise<void>;
73
+ stop?: () => void | Promise<void>;
74
+ }) => void;
75
+ }
76
+ export interface Tool {
77
+ name: string;
78
+ description: string;
79
+ parameters: Record<string, ParameterSchema>;
80
+ handler: (params: any, context: SessionContext) => Promise<ToolResult>;
81
+ }
82
+ export interface ParameterSchema {
83
+ type: string;
84
+ description: string;
85
+ required?: boolean;
86
+ enum?: string[];
87
+ }
88
+ export interface SessionContext {
89
+ sessionId: string;
90
+ workspace: string;
91
+ toJSON(): Record<string, unknown>;
92
+ }
93
+ export interface ToolResult {
94
+ content: string;
95
+ data?: unknown;
96
+ }
97
+ export interface F2ANodeConfig {
98
+ nodePath: string;
99
+ controlPort: number;
100
+ controlToken: string;
101
+ p2pPort: number;
102
+ enableMDNS: boolean;
103
+ bootstrapPeers: string[];
104
+ }
105
+ export interface F2APluginConfig {
106
+ autoStart: boolean;
107
+ webhookPort: number;
108
+ agentName: string;
109
+ capabilities: string[];
110
+ f2aPath?: string;
111
+ controlPort?: number;
112
+ controlToken?: string;
113
+ p2pPort?: number;
114
+ enableMDNS?: boolean;
115
+ bootstrapPeers?: string[];
116
+ dataDir?: string;
117
+ maxQueuedTasks?: number;
118
+ reputation?: ReputationConfig;
119
+ security?: SecurityConfig;
120
+ }
121
+ export interface ReputationConfig {
122
+ enabled: boolean;
123
+ initialScore: number;
124
+ minScoreForService: number;
125
+ decayRate: number;
126
+ }
127
+ export interface SecurityConfig {
128
+ requireConfirmation: boolean;
129
+ whitelist: string[];
130
+ blacklist: string[];
131
+ maxTasksPerMinute: number;
132
+ }
133
+ export interface AgentInfo {
134
+ peerId: string;
135
+ displayName: string;
136
+ agentType: string;
137
+ version: string;
138
+ capabilities: AgentCapability[];
139
+ multiaddrs: string[];
140
+ lastSeen: number;
141
+ reputation?: number;
142
+ }
143
+ export interface AgentCapability {
144
+ name: string;
145
+ description: string;
146
+ tools?: string[];
147
+ parameters?: Record<string, ParameterSchema>;
148
+ }
149
+ export interface PeerInfo {
150
+ peerId: string;
151
+ agentInfo?: AgentInfo;
152
+ multiaddrs: string[];
153
+ connected: boolean;
154
+ reputation: number;
155
+ lastSeen: number;
156
+ }
157
+ export interface TaskRequest {
158
+ taskId: string;
159
+ taskType: string;
160
+ description: string;
161
+ parameters?: Record<string, unknown>;
162
+ from: string;
163
+ timestamp: number;
164
+ timeout: number;
165
+ }
166
+ export interface TaskResponse {
167
+ taskId: string;
168
+ status: 'success' | 'error' | 'rejected' | 'timeout';
169
+ result?: unknown;
170
+ error?: string;
171
+ latency?: number;
172
+ }
173
+ export interface DelegateOptions {
174
+ peerId: string;
175
+ taskType: string;
176
+ description: string;
177
+ parameters?: Record<string, unknown>;
178
+ timeout?: number;
179
+ }
180
+ export interface WebhookEvent {
181
+ type: 'discover' | 'delegate' | 'status' | 'reputation_update';
182
+ payload: unknown;
183
+ timestamp: number;
184
+ signature?: string;
185
+ }
186
+ export interface DiscoverWebhookPayload {
187
+ query: {
188
+ capability?: string;
189
+ minReputation?: number;
190
+ };
191
+ requester: string;
192
+ }
193
+ export interface DelegateWebhookPayload extends TaskRequest {
194
+ }
195
+ export interface Result<T> {
196
+ success: boolean;
197
+ data?: T;
198
+ error?: string;
199
+ }
200
+ export interface ReputationEntry {
201
+ peerId: string;
202
+ score: number;
203
+ successfulTasks: number;
204
+ failedTasks: number;
205
+ totalTasks: number;
206
+ avgResponseTime: number;
207
+ lastInteraction: number;
208
+ history: ReputationEvent[];
209
+ }
210
+ export interface ReputationEvent {
211
+ type: 'task_success' | 'task_failure' | 'task_rejected' | 'timeout' | 'malicious';
212
+ taskId?: string;
213
+ delta: number;
214
+ timestamp: number;
215
+ reason?: string;
216
+ }
217
+ export interface TaskAnnouncement {
218
+ announcementId: string;
219
+ taskType: string;
220
+ description: string;
221
+ requiredCapabilities?: string[];
222
+ estimatedComplexity?: number;
223
+ reward?: number;
224
+ timeout: number;
225
+ from: string;
226
+ timestamp: number;
227
+ status: 'open' | 'claimed' | 'delegated' | 'expired';
228
+ claims?: TaskClaim[];
229
+ }
230
+ export interface TaskClaim {
231
+ claimId: string;
232
+ announcementId: string;
233
+ claimant: string;
234
+ claimantName?: string;
235
+ estimatedTime?: number;
236
+ confidence?: number;
237
+ timestamp: number;
238
+ status: 'pending' | 'accepted' | 'rejected';
239
+ }
240
+ export interface ClaimWebhookPayload {
241
+ announcementId: string;
242
+ claimId: string;
243
+ claimant: string;
244
+ claimantName?: string;
245
+ estimatedTime?: number;
246
+ confidence?: number;
247
+ }
248
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * F2A OpenClaw Connector - Core Types
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Webhook Server
3
+ * 接收 F2A Node 的事件通知
4
+ */
5
+ import type { DiscoverWebhookPayload, DelegateWebhookPayload, AgentCapability } from './types.js';
6
+ export interface WebhookHandler {
7
+ onDiscover(payload: DiscoverWebhookPayload): Promise<{
8
+ capabilities: AgentCapability[];
9
+ reputation?: number;
10
+ }>;
11
+ onDelegate(payload: DelegateWebhookPayload): Promise<{
12
+ accepted: boolean;
13
+ taskId: string;
14
+ reason?: string;
15
+ }>;
16
+ onStatus(): Promise<{
17
+ status: 'available' | 'busy' | 'offline';
18
+ load?: number;
19
+ }>;
20
+ }
21
+ export declare class WebhookServer {
22
+ private port;
23
+ private handler;
24
+ private server?;
25
+ constructor(port: number, handler: WebhookHandler);
26
+ /**
27
+ * 启动 Webhook 服务器
28
+ */
29
+ start(): Promise<void>;
30
+ /**
31
+ * 停止 Webhook 服务器
32
+ */
33
+ stop(): Promise<void>;
34
+ /**
35
+ * 处理 HTTP 请求
36
+ */
37
+ private handleRequest;
38
+ /**
39
+ * 解析请求体
40
+ */
41
+ private parseBody;
42
+ getUrl(): string;
43
+ }
44
+ //# sourceMappingURL=webhook-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-server.d.ts","sourceRoot":"","sources":["../src/webhook-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAEV,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC;QACnD,YAAY,EAAE,eAAe,EAAE,CAAC;QAChC,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IAEH,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC;QACnD,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IAEH,QAAQ,IAAI,OAAO,CAAC;QAClB,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;QACzC,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAC,CAAkC;gBAErC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;IAKjD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B;;OAEG;YACW,aAAa;IAyD3B;;OAEG;IACH,OAAO,CAAC,SAAS;IAoBjB,MAAM,IAAI,MAAM;CAGjB"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ /**
3
+ * Webhook Server
4
+ * 接收 F2A Node 的事件通知
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.WebhookServer = void 0;
8
+ const http_1 = require("http");
9
+ class WebhookServer {
10
+ port;
11
+ handler;
12
+ server;
13
+ constructor(port, handler) {
14
+ this.port = port;
15
+ this.handler = handler;
16
+ }
17
+ /**
18
+ * 启动 Webhook 服务器
19
+ */
20
+ async start() {
21
+ return new Promise((resolve, reject) => {
22
+ this.server = (0, http_1.createServer)(this.handleRequest.bind(this));
23
+ this.server.listen(this.port, () => {
24
+ console.log(`[F2A Webhook] 服务器启动在端口 ${this.port}`);
25
+ resolve();
26
+ });
27
+ this.server.on('error', (err) => {
28
+ reject(err);
29
+ });
30
+ });
31
+ }
32
+ /**
33
+ * 停止 Webhook 服务器
34
+ */
35
+ async stop() {
36
+ if (this.server) {
37
+ return new Promise((resolve) => {
38
+ this.server?.close(() => {
39
+ console.log('[F2A Webhook] 服务器已停止');
40
+ resolve();
41
+ });
42
+ });
43
+ }
44
+ }
45
+ /**
46
+ * 处理 HTTP 请求
47
+ */
48
+ async handleRequest(req, res) {
49
+ // 设置 CORS
50
+ res.setHeader('Access-Control-Allow-Origin', '*');
51
+ res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
52
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
53
+ if (req.method === 'OPTIONS') {
54
+ res.writeHead(200);
55
+ res.end();
56
+ return;
57
+ }
58
+ if (req.method !== 'POST') {
59
+ res.writeHead(405, { 'Content-Type': 'application/json' });
60
+ res.end(JSON.stringify({ error: 'Method not allowed' }));
61
+ return;
62
+ }
63
+ try {
64
+ const body = await this.parseBody(req);
65
+ const event = body;
66
+ console.log(`[F2A Webhook] 收到事件: ${event.type}`);
67
+ let result;
68
+ switch (event.type) {
69
+ case 'discover':
70
+ result = await this.handler.onDiscover(event.payload);
71
+ break;
72
+ case 'delegate':
73
+ result = await this.handler.onDelegate(event.payload);
74
+ break;
75
+ case 'status':
76
+ result = await this.handler.onStatus();
77
+ break;
78
+ default:
79
+ res.writeHead(400, { 'Content-Type': 'application/json' });
80
+ res.end(JSON.stringify({ error: `Unknown event type: ${event.type}` }));
81
+ return;
82
+ }
83
+ res.writeHead(200, { 'Content-Type': 'application/json' });
84
+ res.end(JSON.stringify(result));
85
+ }
86
+ catch (error) {
87
+ console.error('[F2A Webhook] 处理错误:', error);
88
+ res.writeHead(500, { 'Content-Type': 'application/json' });
89
+ res.end(JSON.stringify({
90
+ error: error instanceof Error ? error.message : 'Internal error'
91
+ }));
92
+ }
93
+ }
94
+ /**
95
+ * 解析请求体
96
+ */
97
+ parseBody(req) {
98
+ return new Promise((resolve, reject) => {
99
+ let body = '';
100
+ req.on('data', (chunk) => {
101
+ body += chunk.toString();
102
+ });
103
+ req.on('end', () => {
104
+ try {
105
+ resolve(JSON.parse(body));
106
+ }
107
+ catch (e) {
108
+ reject(new Error('Invalid JSON'));
109
+ }
110
+ });
111
+ req.on('error', reject);
112
+ });
113
+ }
114
+ getUrl() {
115
+ return `http://localhost:${this.port}/webhook`;
116
+ }
117
+ }
118
+ exports.WebhookServer = WebhookServer;
119
+ //# sourceMappingURL=webhook-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-server.js","sourceRoot":"","sources":["../src/webhook-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ {
2
+ "id": "f2a-openclaw-adapter",
3
+ "name": "F2A OpenClaw Adapter",
4
+ "description": "OpenClaw adapter for F2A P2P Agent network",
5
+ "version": "0.2.0",
6
+ "configSchema": {
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "f2aPath": {
11
+ "type": "string",
12
+ "description": "Path to F2A installation",
13
+ "default": "~/projects/F2A"
14
+ },
15
+ "autoStart": {
16
+ "type": "boolean",
17
+ "description": "Automatically start F2A node",
18
+ "default": true
19
+ },
20
+ "webhookPort": {
21
+ "type": "number",
22
+ "description": "Port for webhook server",
23
+ "default": 9002
24
+ },
25
+ "controlPort": {
26
+ "type": "number",
27
+ "description": "Port for F2A control API",
28
+ "default": 9001
29
+ },
30
+ "controlToken": {
31
+ "type": "string",
32
+ "description": "Auth token for F2A control API (auto-generated if not provided)",
33
+ "sensitive": true
34
+ },
35
+ "p2pPort": {
36
+ "type": "number",
37
+ "description": "Port for P2P network",
38
+ "default": 9000
39
+ },
40
+ "enableMDNS": {
41
+ "type": "boolean",
42
+ "description": "Enable mDNS discovery",
43
+ "default": true
44
+ },
45
+ "bootstrapPeers": {
46
+ "type": "array",
47
+ "items": { "type": "string" },
48
+ "description": "Bootstrap peer addresses",
49
+ "default": []
50
+ },
51
+ "agentName": {
52
+ "type": "string",
53
+ "description": "Display name for this agent",
54
+ "default": "OpenClaw Agent"
55
+ },
56
+ "capabilities": {
57
+ "type": "array",
58
+ "items": { "type": "string" },
59
+ "description": "Custom capabilities to advertise",
60
+ "default": []
61
+ },
62
+ "dataDir": {
63
+ "type": "string",
64
+ "description": "Directory for plugin data",
65
+ "default": "./f2a-data"
66
+ },
67
+ "maxQueuedTasks": {
68
+ "type": "number",
69
+ "description": "Maximum number of tasks to queue",
70
+ "default": 100
71
+ },
72
+ "reputation": {
73
+ "type": "object",
74
+ "properties": {
75
+ "enabled": { "type": "boolean", "default": true },
76
+ "initialScore": { "type": "number", "default": 50 },
77
+ "minScoreForService": { "type": "number", "default": 20 },
78
+ "decayRate": { "type": "number", "default": 0.01 }
79
+ }
80
+ },
81
+ "security": {
82
+ "type": "object",
83
+ "properties": {
84
+ "requireConfirmation": { "type": "boolean", "default": false },
85
+ "whitelist": { "type": "array", "items": { "type": "string" }, "default": [] },
86
+ "blacklist": { "type": "array", "items": { "type": "string" }, "default": [] },
87
+ "maxTasksPerMinute": { "type": "number", "default": 10 }
88
+ }
89
+ }
90
+ }
91
+ },
92
+ "uiHints": {
93
+ "f2aPath": { "label": "F2A Path", "placeholder": "~/projects/F2A" },
94
+ "autoStart": { "label": "Auto Start F2A Node" },
95
+ "webhookPort": { "label": "Webhook Port" },
96
+ "controlPort": { "label": "Control Port" },
97
+ "controlToken": { "label": "Control Token", "sensitive": true },
98
+ "p2pPort": { "label": "P2P Port" },
99
+ "enableMDNS": { "label": "Enable mDNS Discovery" },
100
+ "bootstrapPeers": { "label": "Bootstrap Peers", "placeholder": ["/ip4/..."] },
101
+ "agentName": { "label": "Agent Display Name" },
102
+ "capabilities": { "label": "Custom Capabilities" },
103
+ "dataDir": { "label": "Data Directory" },
104
+ "maxQueuedTasks": { "label": "Max Queued Tasks" }
105
+ }
106
+ }
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@f2a/openclaw-adapter",
3
+ "version": "0.1.0",
4
+ "description": "OpenClaw adapter for F2A P2P Agent network",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "openclaw.plugin.json",
10
+ "README.md"
11
+ ],
12
+ "openclaw": {
13
+ "extensions": ["./dist/plugin.js"]
14
+ },
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "tsc --watch",
18
+ "test": "vitest",
19
+ "lint": "eslint src/**/*.ts"
20
+ },
21
+ "keywords": ["openclaw", "f2a", "p2p", "agent", "plugin"],
22
+ "author": "F2A Team",
23
+ "license": "MIT",
24
+ "dependencies": {
25
+ "@f2a/network": "file:../..",
26
+ "ws": "^8.16.0",
27
+ "node-fetch": "^3.3.2",
28
+ "zod": "^3.22.4",
29
+ "better-sqlite3": "^11.0.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^20.10.0",
33
+ "@types/ws": "^8.5.10",
34
+ "typescript": "^5.3.0",
35
+ "vitest": "^1.0.0"
36
+ },
37
+ "peerDependencies": {
38
+ "openclaw": ">=1.0.0"
39
+ }
40
+ }