@f2a/openclaw-f2a 0.3.3 → 0.3.4
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/F2AComponentRegistry.d.ts +195 -0
- package/dist/F2AComponentRegistry.d.ts.map +1 -0
- package/dist/F2AComponentRegistry.js +385 -0
- package/dist/F2AComponentRegistry.js.map +1 -0
- package/dist/F2ACore.d.ts +227 -0
- package/dist/F2ACore.d.ts.map +1 -0
- package/dist/F2ACore.js +648 -0
- package/dist/F2ACore.js.map +1 -0
- package/dist/F2AMessageRouter.d.ts +108 -0
- package/dist/F2AMessageRouter.d.ts.map +1 -0
- package/dist/F2AMessageRouter.js +157 -0
- package/dist/F2AMessageRouter.js.map +1 -0
- package/dist/F2AToolRegistry.d.ts +45 -0
- package/dist/F2AToolRegistry.d.ts.map +1 -0
- package/dist/F2AToolRegistry.js +79 -0
- package/dist/F2AToolRegistry.js.map +1 -0
- package/dist/F2AWebhookManager.d.ts +79 -0
- package/dist/F2AWebhookManager.d.ts.map +1 -0
- package/dist/F2AWebhookManager.js +241 -0
- package/dist/F2AWebhookManager.js.map +1 -0
- package/dist/agent-manager.js +6 -6
- package/dist/agent-manager.js.map +1 -1
- package/dist/announcement-queue.d.ts +1 -8
- package/dist/announcement-queue.d.ts.map +1 -1
- package/dist/announcement-queue.js +19 -19
- package/dist/announcement-queue.js.map +1 -1
- package/dist/claim-handlers.d.ts +13 -4
- package/dist/claim-handlers.d.ts.map +1 -1
- package/dist/claim-handlers.js +42 -13
- package/dist/claim-handlers.js.map +1 -1
- package/dist/connector-helpers.d.ts +143 -0
- package/dist/connector-helpers.d.ts.map +1 -0
- package/dist/connector-helpers.js +398 -0
- package/dist/connector-helpers.js.map +1 -0
- package/dist/connector.d.ts +87 -265
- package/dist/connector.d.ts.map +1 -1
- package/dist/connector.js +334 -2037
- package/dist/connector.js.map +1 -1
- package/dist/contact-manager.d.ts +1 -1
- package/dist/contact-manager.d.ts.map +1 -1
- package/dist/contact-manager.js +12 -5
- package/dist/contact-manager.js.map +1 -1
- package/dist/contact-tool-handlers.d.ts +72 -0
- package/dist/contact-tool-handlers.d.ts.map +1 -0
- package/dist/contact-tool-handlers.js +413 -0
- package/dist/contact-tool-handlers.js.map +1 -0
- package/dist/f2a-client.d.ts +168 -0
- package/dist/f2a-client.d.ts.map +1 -0
- package/dist/f2a-client.js +425 -0
- package/dist/f2a-client.js.map +1 -0
- package/dist/handshake-protocol.d.ts +3 -2
- package/dist/handshake-protocol.d.ts.map +1 -1
- package/dist/handshake-protocol.js +15 -6
- package/dist/handshake-protocol.js.map +1 -1
- package/dist/index.d.ts +12 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -45
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +31 -9
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +268 -12
- package/dist/logger.js.map +1 -1
- package/dist/network-client.d.ts +1 -8
- package/dist/network-client.d.ts.map +1 -1
- package/dist/network-client.js.map +1 -1
- package/dist/node-manager.d.ts +8 -8
- package/dist/node-manager.d.ts.map +1 -1
- package/dist/node-manager.js +100 -36
- package/dist/node-manager.js.map +1 -1
- package/dist/plugin.d.ts +2 -2
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +43 -23
- package/dist/plugin.js.map +1 -1
- package/dist/task-guard.d.ts.map +1 -1
- package/dist/task-guard.js +44 -38
- package/dist/task-guard.js.map +1 -1
- package/dist/task-queue.d.ts +2 -8
- package/dist/task-queue.d.ts.map +1 -1
- package/dist/task-queue.js +144 -119
- package/dist/task-queue.js.map +1 -1
- package/dist/tool-handlers.d.ts +15 -3
- package/dist/tool-handlers.d.ts.map +1 -1
- package/dist/tool-handlers.js +85 -54
- package/dist/tool-handlers.js.map +1 -1
- package/dist/tools/contact-tools.d.ts +18 -0
- package/dist/tools/contact-tools.d.ts.map +1 -0
- package/dist/tools/contact-tools.js +176 -0
- package/dist/tools/contact-tools.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/network-tools.d.ts +17 -0
- package/dist/tools/network-tools.d.ts.map +1 -0
- package/dist/tools/network-tools.js +106 -0
- package/dist/tools/network-tools.js.map +1 -0
- package/dist/tools/task-tools.d.ts +25 -0
- package/dist/tools/task-tools.d.ts.map +1 -0
- package/dist/tools/task-tools.js +275 -0
- package/dist/tools/task-tools.js.map +1 -0
- package/dist/types.d.ts +376 -12
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/webhook-handlers.d.ts +50 -0
- package/dist/webhook-handlers.d.ts.map +1 -0
- package/dist/webhook-handlers.js +183 -0
- package/dist/webhook-handlers.js.map +1 -0
- package/dist/webhook-pusher.d.ts +1 -8
- package/dist/webhook-pusher.d.ts.map +1 -1
- package/dist/webhook-pusher.js.map +1 -1
- package/dist/webhook-server.d.ts +3 -8
- package/dist/webhook-server.d.ts.map +1 -1
- package/dist/webhook-server.js +21 -4
- package/dist/webhook-server.js.map +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +7 -4
- package/dist/reputation.d.ts +0 -156
- package/dist/reputation.d.ts.map +0 -1
- package/dist/reputation.js +0 -432
- package/dist/reputation.js.map +0 -1
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* F2A 核心生命周期管理
|
|
3
|
+
*
|
|
4
|
+
* 负责 F2A 插件的初始化、启用和关闭。
|
|
5
|
+
* 从 connector.ts 拆分(Issue #106),遵循单一职责原则。
|
|
6
|
+
*
|
|
7
|
+
* Phase 3 扩展:支持 Daemon 模式
|
|
8
|
+
* - embedded: 直接创建 F2A 实例(默认)
|
|
9
|
+
* - daemon: 通过 F2AClient 连接到独立 Daemon
|
|
10
|
+
*
|
|
11
|
+
* @module F2ACore
|
|
12
|
+
*/
|
|
13
|
+
import type { ApiLogger, F2APluginConfig, F2ANodeConfig, OpenClawPluginApi, AgentCapability } from './types.js';
|
|
14
|
+
import { WebhookServer } from './webhook-server.js';
|
|
15
|
+
import { WebhookPusher } from './webhook-pusher.js';
|
|
16
|
+
import { F2A } from '@f2a/network';
|
|
17
|
+
import { F2AClient } from './f2a-client.js';
|
|
18
|
+
import type { F2AComponentRegistry } from './F2AComponentRegistry.js';
|
|
19
|
+
import type { WebhookHandler } from './webhook-server.js';
|
|
20
|
+
/**
|
|
21
|
+
* 运行模式
|
|
22
|
+
*/
|
|
23
|
+
export type F2ARunMode = 'embedded' | 'daemon';
|
|
24
|
+
/**
|
|
25
|
+
* 核心生命周期配置
|
|
26
|
+
*/
|
|
27
|
+
export interface CoreLifecycleConfig {
|
|
28
|
+
/** 插件配置 */
|
|
29
|
+
pluginConfig: F2APluginConfig;
|
|
30
|
+
/** 节点配置 */
|
|
31
|
+
nodeConfig: F2ANodeConfig;
|
|
32
|
+
/** OpenClaw API */
|
|
33
|
+
api?: OpenClawPluginApi;
|
|
34
|
+
/** Logger */
|
|
35
|
+
logger?: ApiLogger;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 核心生命周期状态
|
|
39
|
+
*/
|
|
40
|
+
export interface CoreLifecycleState {
|
|
41
|
+
/** 是否已初始化 */
|
|
42
|
+
initialized: boolean;
|
|
43
|
+
/** F2A 实例 (embedded 模式) */
|
|
44
|
+
f2a?: F2A;
|
|
45
|
+
/** F2A 客户端 (daemon 模式) */
|
|
46
|
+
f2aClient?: F2AClient;
|
|
47
|
+
/** 运行模式 */
|
|
48
|
+
runMode: F2ARunMode;
|
|
49
|
+
/** F2A 启动时间 */
|
|
50
|
+
f2aStartTime?: number;
|
|
51
|
+
/** Webhook 服务器 */
|
|
52
|
+
webhookServer?: WebhookServer;
|
|
53
|
+
/** Webhook 推送器 */
|
|
54
|
+
webhookPusher?: WebhookPusher;
|
|
55
|
+
/** 轮询定时器 */
|
|
56
|
+
pollTimer?: NodeJS.Timeout;
|
|
57
|
+
/** 能力列表 */
|
|
58
|
+
capabilities: AgentCapability[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 消息回调(用于处理 P2P 消息)
|
|
62
|
+
*/
|
|
63
|
+
export interface MessageCallback {
|
|
64
|
+
(msg: {
|
|
65
|
+
from: string;
|
|
66
|
+
content: string;
|
|
67
|
+
metadata?: Record<string, unknown>;
|
|
68
|
+
messageId: string;
|
|
69
|
+
}): Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* F2A 核心生命周期管理器
|
|
73
|
+
*
|
|
74
|
+
* 功能:
|
|
75
|
+
* 1. 初始化配置和基本组件
|
|
76
|
+
* 2. 启动 F2A 实例和 Webhook 服务器
|
|
77
|
+
* 3. 处理清理和关闭
|
|
78
|
+
*/
|
|
79
|
+
export declare class F2ACore {
|
|
80
|
+
private config;
|
|
81
|
+
private nodeConfig;
|
|
82
|
+
private api?;
|
|
83
|
+
private logger?;
|
|
84
|
+
private state;
|
|
85
|
+
private onMessageCallback?;
|
|
86
|
+
private componentRegistry?;
|
|
87
|
+
constructor(config: CoreLifecycleConfig);
|
|
88
|
+
/**
|
|
89
|
+
* 获取插件配置
|
|
90
|
+
*/
|
|
91
|
+
getConfig(): F2APluginConfig;
|
|
92
|
+
/**
|
|
93
|
+
* 获取节点配置
|
|
94
|
+
*/
|
|
95
|
+
getNodeConfig(): F2ANodeConfig;
|
|
96
|
+
/**
|
|
97
|
+
* 获取 OpenClaw API
|
|
98
|
+
*/
|
|
99
|
+
getApi(): OpenClawPluginApi | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* 获取 Logger
|
|
102
|
+
*/
|
|
103
|
+
getLogger(): ApiLogger | undefined;
|
|
104
|
+
/**
|
|
105
|
+
* 更新 Logger
|
|
106
|
+
*/
|
|
107
|
+
updateLogger(logger: ApiLogger | undefined): void;
|
|
108
|
+
/**
|
|
109
|
+
* 设置组件注册器引用
|
|
110
|
+
*/
|
|
111
|
+
setComponentRegistry(registry: F2AComponentRegistry): void;
|
|
112
|
+
/**
|
|
113
|
+
* 检查是否已初始化
|
|
114
|
+
*/
|
|
115
|
+
isInitialized(): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* 获取 F2A 实例
|
|
118
|
+
*/
|
|
119
|
+
getF2A(): F2A | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* 获取 F2A 客户端(daemon 模式)
|
|
122
|
+
*/
|
|
123
|
+
getF2AClient(): F2AClient | undefined;
|
|
124
|
+
/**
|
|
125
|
+
* 获取运行模式
|
|
126
|
+
*/
|
|
127
|
+
getRunMode(): F2ARunMode;
|
|
128
|
+
/**
|
|
129
|
+
* 是否为 Daemon 模式
|
|
130
|
+
*/
|
|
131
|
+
isDaemonMode(): boolean;
|
|
132
|
+
/**
|
|
133
|
+
* 获取 F2A 状态
|
|
134
|
+
*/
|
|
135
|
+
getF2AStatus(): {
|
|
136
|
+
running: boolean;
|
|
137
|
+
peerId?: string;
|
|
138
|
+
uptime?: number;
|
|
139
|
+
mode: F2ARunMode;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* 获取能力列表
|
|
143
|
+
*/
|
|
144
|
+
getCapabilities(): AgentCapability[];
|
|
145
|
+
/**
|
|
146
|
+
* 获取 Webhook 服务器 URL
|
|
147
|
+
*/
|
|
148
|
+
getWebhookUrl(): string | undefined;
|
|
149
|
+
/**
|
|
150
|
+
* 初始化插件(延迟模式)
|
|
151
|
+
*
|
|
152
|
+
* 只保存配置,不打开任何资源。
|
|
153
|
+
* TaskQueue/WebhookServer 在首次访问时才初始化。
|
|
154
|
+
*/
|
|
155
|
+
initialize(rawConfig: Record<string, unknown> & {
|
|
156
|
+
_api?: OpenClawPluginApi;
|
|
157
|
+
}): Promise<void>;
|
|
158
|
+
/**
|
|
159
|
+
* 启用适配器
|
|
160
|
+
*
|
|
161
|
+
* 根据配置选择运行模式:
|
|
162
|
+
* - embedded: 直接创建 F2A 实例(默认)
|
|
163
|
+
* - daemon: 通过 F2AClient 连接到独立 Daemon
|
|
164
|
+
*
|
|
165
|
+
* @param webhookHandler - Webhook 处理器
|
|
166
|
+
* @param onMessage - P2P 消息回调
|
|
167
|
+
*/
|
|
168
|
+
enable(webhookHandler: WebhookHandler, onMessage: MessageCallback): Promise<void>;
|
|
169
|
+
/**
|
|
170
|
+
* 确定运行模式
|
|
171
|
+
*/
|
|
172
|
+
private determineRunMode;
|
|
173
|
+
/**
|
|
174
|
+
* 启动 Daemon 模式
|
|
175
|
+
*/
|
|
176
|
+
private startDaemonMode;
|
|
177
|
+
/**
|
|
178
|
+
* 尝试启动本地 Daemon
|
|
179
|
+
*/
|
|
180
|
+
private tryStartLocalDaemon;
|
|
181
|
+
/**
|
|
182
|
+
* 启动 Daemon 消息轮询
|
|
183
|
+
*/
|
|
184
|
+
private startDaemonMessagePolling;
|
|
185
|
+
/**
|
|
186
|
+
* 启动 Embedded 模式
|
|
187
|
+
*/
|
|
188
|
+
private startEmbeddedMode;
|
|
189
|
+
/**
|
|
190
|
+
* 创建并启动 F2A 实例
|
|
191
|
+
*/
|
|
192
|
+
private startF2AInstance;
|
|
193
|
+
/**
|
|
194
|
+
* 启动 Webhook 服务器
|
|
195
|
+
*/
|
|
196
|
+
private startWebhookServer;
|
|
197
|
+
/**
|
|
198
|
+
* 启动兜底轮询
|
|
199
|
+
*/
|
|
200
|
+
private startFallbackPolling;
|
|
201
|
+
/**
|
|
202
|
+
* 重置超时的 processing 任务
|
|
203
|
+
*/
|
|
204
|
+
private resetTimedOutProcessingTasks;
|
|
205
|
+
/**
|
|
206
|
+
* 注册清理处理器
|
|
207
|
+
*/
|
|
208
|
+
private registerCleanupHandlers;
|
|
209
|
+
/**
|
|
210
|
+
* 关闭所有资源
|
|
211
|
+
*/
|
|
212
|
+
shutdown(): Promise<void>;
|
|
213
|
+
/**
|
|
214
|
+
* 获取数据目录
|
|
215
|
+
*/
|
|
216
|
+
private getDataDir;
|
|
217
|
+
/**
|
|
218
|
+
* 获取 Webhook 推送器
|
|
219
|
+
*/
|
|
220
|
+
getWebhookPusher(): WebhookPusher | undefined;
|
|
221
|
+
/**
|
|
222
|
+
* 触发心跳(用于通知 OpenClaw 有新任务)
|
|
223
|
+
*/
|
|
224
|
+
requestHeartbeat(): void;
|
|
225
|
+
}
|
|
226
|
+
export default F2ACore;
|
|
227
|
+
//# sourceMappingURL=F2ACore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"F2ACore.d.ts","sourceRoot":"","sources":["../src/F2ACore.ts"],"names":[],"mappings":"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"}
|