@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.
- package/README.md +510 -0
- package/dist/announcement-queue.d.ts +71 -0
- package/dist/announcement-queue.d.ts.map +1 -0
- package/dist/announcement-queue.js +181 -0
- package/dist/announcement-queue.js.map +1 -0
- package/dist/capability-detector.d.ts +21 -0
- package/dist/capability-detector.d.ts.map +1 -0
- package/dist/capability-detector.js +177 -0
- package/dist/capability-detector.js.map +1 -0
- package/dist/connector.d.ts +62 -0
- package/dist/connector.d.ts.map +1 -0
- package/dist/connector.js +1063 -0
- package/dist/connector.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/network-client.d.ts +48 -0
- package/dist/network-client.d.ts.map +1 -0
- package/dist/network-client.js +104 -0
- package/dist/network-client.js.map +1 -0
- package/dist/node-manager.d.ts +50 -0
- package/dist/node-manager.d.ts.map +1 -0
- package/dist/node-manager.js +187 -0
- package/dist/node-manager.js.map +1 -0
- package/dist/plugin.d.ts +16 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +116 -0
- package/dist/plugin.js.map +1 -0
- package/dist/reputation.d.ts +72 -0
- package/dist/reputation.d.ts.map +1 -0
- package/dist/reputation.js +215 -0
- package/dist/reputation.js.map +1 -0
- package/dist/task-guard.d.ts +77 -0
- package/dist/task-guard.d.ts.map +1 -0
- package/dist/task-guard.js +330 -0
- package/dist/task-guard.js.map +1 -0
- package/dist/task-queue.d.ts +71 -0
- package/dist/task-queue.d.ts.map +1 -0
- package/dist/task-queue.js +126 -0
- package/dist/task-queue.js.map +1 -0
- package/dist/types.d.ts +248 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/webhook-server.d.ts +44 -0
- package/dist/webhook-server.d.ts.map +1 -0
- package/dist/webhook-server.js +119 -0
- package/dist/webhook-server.js.map +1 -0
- package/openclaw.plugin.json +106 -0
- package/package.json +40 -0
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|