@f2a/openclaw-f2a 0.3.1 → 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.
Files changed (120) hide show
  1. package/dist/F2AComponentRegistry.d.ts +195 -0
  2. package/dist/F2AComponentRegistry.d.ts.map +1 -0
  3. package/dist/F2AComponentRegistry.js +385 -0
  4. package/dist/F2AComponentRegistry.js.map +1 -0
  5. package/dist/F2ACore.d.ts +227 -0
  6. package/dist/F2ACore.d.ts.map +1 -0
  7. package/dist/F2ACore.js +648 -0
  8. package/dist/F2ACore.js.map +1 -0
  9. package/dist/F2AMessageRouter.d.ts +108 -0
  10. package/dist/F2AMessageRouter.d.ts.map +1 -0
  11. package/dist/F2AMessageRouter.js +157 -0
  12. package/dist/F2AMessageRouter.js.map +1 -0
  13. package/dist/F2AToolRegistry.d.ts +45 -0
  14. package/dist/F2AToolRegistry.d.ts.map +1 -0
  15. package/dist/F2AToolRegistry.js +79 -0
  16. package/dist/F2AToolRegistry.js.map +1 -0
  17. package/dist/F2AWebhookManager.d.ts +79 -0
  18. package/dist/F2AWebhookManager.d.ts.map +1 -0
  19. package/dist/F2AWebhookManager.js +241 -0
  20. package/dist/F2AWebhookManager.js.map +1 -0
  21. package/dist/agent-manager.js +6 -6
  22. package/dist/agent-manager.js.map +1 -1
  23. package/dist/announcement-queue.d.ts +1 -8
  24. package/dist/announcement-queue.d.ts.map +1 -1
  25. package/dist/announcement-queue.js +19 -19
  26. package/dist/announcement-queue.js.map +1 -1
  27. package/dist/claim-handlers.d.ts +13 -4
  28. package/dist/claim-handlers.d.ts.map +1 -1
  29. package/dist/claim-handlers.js +42 -13
  30. package/dist/claim-handlers.js.map +1 -1
  31. package/dist/connector-helpers.d.ts +143 -0
  32. package/dist/connector-helpers.d.ts.map +1 -0
  33. package/dist/connector-helpers.js +398 -0
  34. package/dist/connector-helpers.js.map +1 -0
  35. package/dist/connector.d.ts +87 -265
  36. package/dist/connector.d.ts.map +1 -1
  37. package/dist/connector.js +334 -2037
  38. package/dist/connector.js.map +1 -1
  39. package/dist/contact-manager.d.ts +1 -1
  40. package/dist/contact-manager.d.ts.map +1 -1
  41. package/dist/contact-manager.js +12 -5
  42. package/dist/contact-manager.js.map +1 -1
  43. package/dist/contact-tool-handlers.d.ts +72 -0
  44. package/dist/contact-tool-handlers.d.ts.map +1 -0
  45. package/dist/contact-tool-handlers.js +413 -0
  46. package/dist/contact-tool-handlers.js.map +1 -0
  47. package/dist/f2a-client.d.ts +168 -0
  48. package/dist/f2a-client.d.ts.map +1 -0
  49. package/dist/f2a-client.js +425 -0
  50. package/dist/f2a-client.js.map +1 -0
  51. package/dist/handshake-protocol.d.ts +3 -2
  52. package/dist/handshake-protocol.d.ts.map +1 -1
  53. package/dist/handshake-protocol.js +15 -6
  54. package/dist/handshake-protocol.js.map +1 -1
  55. package/dist/index.d.ts +12 -16
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +13 -45
  58. package/dist/index.js.map +1 -1
  59. package/dist/logger.d.ts +31 -9
  60. package/dist/logger.d.ts.map +1 -1
  61. package/dist/logger.js +268 -12
  62. package/dist/logger.js.map +1 -1
  63. package/dist/network-client.d.ts +1 -8
  64. package/dist/network-client.d.ts.map +1 -1
  65. package/dist/network-client.js.map +1 -1
  66. package/dist/node-manager.d.ts +8 -8
  67. package/dist/node-manager.d.ts.map +1 -1
  68. package/dist/node-manager.js +100 -36
  69. package/dist/node-manager.js.map +1 -1
  70. package/dist/plugin.d.ts +2 -2
  71. package/dist/plugin.d.ts.map +1 -1
  72. package/dist/plugin.js +43 -23
  73. package/dist/plugin.js.map +1 -1
  74. package/dist/task-guard.d.ts.map +1 -1
  75. package/dist/task-guard.js +44 -38
  76. package/dist/task-guard.js.map +1 -1
  77. package/dist/task-queue.d.ts +2 -8
  78. package/dist/task-queue.d.ts.map +1 -1
  79. package/dist/task-queue.js +144 -119
  80. package/dist/task-queue.js.map +1 -1
  81. package/dist/tool-handlers.d.ts +15 -3
  82. package/dist/tool-handlers.d.ts.map +1 -1
  83. package/dist/tool-handlers.js +85 -54
  84. package/dist/tool-handlers.js.map +1 -1
  85. package/dist/tools/contact-tools.d.ts +18 -0
  86. package/dist/tools/contact-tools.d.ts.map +1 -0
  87. package/dist/tools/contact-tools.js +176 -0
  88. package/dist/tools/contact-tools.js.map +1 -0
  89. package/dist/tools/index.d.ts +9 -0
  90. package/dist/tools/index.d.ts.map +1 -0
  91. package/dist/tools/index.js +15 -0
  92. package/dist/tools/index.js.map +1 -0
  93. package/dist/tools/network-tools.d.ts +17 -0
  94. package/dist/tools/network-tools.d.ts.map +1 -0
  95. package/dist/tools/network-tools.js +106 -0
  96. package/dist/tools/network-tools.js.map +1 -0
  97. package/dist/tools/task-tools.d.ts +25 -0
  98. package/dist/tools/task-tools.d.ts.map +1 -0
  99. package/dist/tools/task-tools.js +275 -0
  100. package/dist/tools/task-tools.js.map +1 -0
  101. package/dist/types.d.ts +376 -12
  102. package/dist/types.d.ts.map +1 -1
  103. package/dist/types.js.map +1 -1
  104. package/dist/webhook-handlers.d.ts +50 -0
  105. package/dist/webhook-handlers.d.ts.map +1 -0
  106. package/dist/webhook-handlers.js +183 -0
  107. package/dist/webhook-handlers.js.map +1 -0
  108. package/dist/webhook-pusher.d.ts +1 -8
  109. package/dist/webhook-pusher.d.ts.map +1 -1
  110. package/dist/webhook-pusher.js.map +1 -1
  111. package/dist/webhook-server.d.ts +3 -8
  112. package/dist/webhook-server.d.ts.map +1 -1
  113. package/dist/webhook-server.js +21 -4
  114. package/dist/webhook-server.js.map +1 -1
  115. package/openclaw.plugin.json +1 -1
  116. package/package.json +7 -4
  117. package/dist/reputation.d.ts +0 -156
  118. package/dist/reputation.d.ts.map +0 -1
  119. package/dist/reputation.js +0 -432
  120. package/dist/reputation.js.map +0 -1
@@ -0,0 +1,108 @@
1
+ /**
2
+ * F2A 消息路由器
3
+ *
4
+ * 负责消息的去重、分发和路由。
5
+ * 从 connector.ts 拆分(Issue #106),遵循单一职责原则。
6
+ *
7
+ * @module F2AMessageRouter
8
+ */
9
+ import type { ApiLogger, F2APublicInterface } from './types.js';
10
+ /**
11
+ * 消息事件结构
12
+ */
13
+ export interface F2AMessageEvent {
14
+ from: string;
15
+ content: string;
16
+ metadata?: Record<string, unknown>;
17
+ messageId: string;
18
+ }
19
+ /**
20
+ * 消息路由器配置
21
+ */
22
+ export interface MessageRouterConfig {
23
+ /** 最大缓存大小 */
24
+ maxCacheSize: number;
25
+ /** 缓存 TTL(毫秒) */
26
+ cacheTtlMs: number;
27
+ /** 启用哈希去重的消息长度阈值 */
28
+ hashThreshold: number;
29
+ }
30
+ /** 默认配置 */
31
+ export declare const DEFAULT_ROUTER_CONFIG: MessageRouterConfig;
32
+ /**
33
+ * 消息路由器依赖
34
+ */
35
+ export interface MessageRouterDeps {
36
+ /** F2A 实例(用于获取 peerId) */
37
+ f2a?: F2APublicInterface;
38
+ /** Logger */
39
+ logger?: ApiLogger;
40
+ }
41
+ /**
42
+ * F2A 消息路由器
43
+ *
44
+ * 功能:
45
+ * 1. 消息去重(基于 metadata 标记 + 内容哈希)
46
+ * 2. 回声消息检测(防止循环)
47
+ * 3. 消息哈希缓存管理
48
+ */
49
+ export declare class F2AMessageRouter {
50
+ private deps;
51
+ private config;
52
+ /** 已处理消息哈希缓存 */
53
+ private processedHashes;
54
+ constructor(deps: MessageRouterDeps, config?: MessageRouterConfig);
55
+ /**
56
+ * 检测是否为回声消息(避免循环)
57
+ *
58
+ * 使用多层验证策略:
59
+ * 1. 检查 metadata 中的特定标记
60
+ * 2. 检查消息内容中的特殊标记
61
+ * 3. 检查消息来源是否为自己的 peerId
62
+ * 4. 基于消息内容哈希的去重机制
63
+ *
64
+ * @param msg - 接收到的消息
65
+ * @returns 是否为应该跳过的回声消息
66
+ */
67
+ isEchoMessage(msg: F2AMessageEvent): boolean;
68
+ /**
69
+ * 计算消息内容哈希
70
+ *
71
+ * 使用 SHA256 算法生成安全的哈希值。
72
+ *
73
+ * @param from - 发送者 peerId
74
+ * @param content - 消息内容
75
+ * @returns 哈希标识符
76
+ */
77
+ private computeHash;
78
+ /**
79
+ * 清理过期的消息哈希缓存
80
+ *
81
+ * @param now - 当前时间戳
82
+ */
83
+ private cleanupCache;
84
+ /**
85
+ * 更新 F2A 实例(运行时更新)
86
+ *
87
+ * @param f2a - 新的 F2A 实例
88
+ */
89
+ updateF2A(f2a: F2APublicInterface | undefined): void;
90
+ /**
91
+ * 更新 Logger(运行时更新)
92
+ *
93
+ * @param logger - 新的 Logger
94
+ */
95
+ updateLogger(logger: ApiLogger | undefined): void;
96
+ /**
97
+ * 清空缓存(用于测试或重置)
98
+ */
99
+ clearCache(): void;
100
+ /**
101
+ * 获取缓存统计信息
102
+ */
103
+ getCacheStats(): {
104
+ size: number;
105
+ maxAge: number;
106
+ };
107
+ }
108
+ //# sourceMappingURL=F2AMessageRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"F2AMessageRouter.d.ts","sourceRoot":"","sources":["../src/F2AMessageRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,aAAa;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,WAAW;AACX,eAAO,MAAM,qBAAqB,EAAE,mBAInC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,GAAG,CAAC,EAAE,kBAAkB,CAAC;IACzB,aAAa;IACb,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,MAAM,CAAsB;IAEpC,gBAAgB;IAChB,OAAO,CAAC,eAAe,CAAkC;gBAE7C,IAAI,EAAE,iBAAiB,EAAE,MAAM,GAAE,mBAA2C;IAKxF;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO;IA2D5C;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAQpB;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,kBAAkB,GAAG,SAAS,GAAG,IAAI;IAIpD;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAIjD;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAQlD"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ /**
3
+ * F2A 消息路由器
4
+ *
5
+ * 负责消息的去重、分发和路由。
6
+ * 从 connector.ts 拆分(Issue #106),遵循单一职责原则。
7
+ *
8
+ * @module F2AMessageRouter
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.F2AMessageRouter = exports.DEFAULT_ROUTER_CONFIG = void 0;
12
+ const crypto_1 = require("crypto");
13
+ /** 默认配置 */
14
+ exports.DEFAULT_ROUTER_CONFIG = {
15
+ maxCacheSize: 10000,
16
+ cacheTtlMs: 5 * 60 * 1000, // 5 分钟
17
+ hashThreshold: 100,
18
+ };
19
+ /**
20
+ * F2A 消息路由器
21
+ *
22
+ * 功能:
23
+ * 1. 消息去重(基于 metadata 标记 + 内容哈希)
24
+ * 2. 回声消息检测(防止循环)
25
+ * 3. 消息哈希缓存管理
26
+ */
27
+ class F2AMessageRouter {
28
+ deps;
29
+ config;
30
+ /** 已处理消息哈希缓存 */
31
+ processedHashes = new Map();
32
+ constructor(deps, config = exports.DEFAULT_ROUTER_CONFIG) {
33
+ this.deps = deps;
34
+ this.config = config;
35
+ }
36
+ /**
37
+ * 检测是否为回声消息(避免循环)
38
+ *
39
+ * 使用多层验证策略:
40
+ * 1. 检查 metadata 中的特定标记
41
+ * 2. 检查消息内容中的特殊标记
42
+ * 3. 检查消息来源是否为自己的 peerId
43
+ * 4. 基于消息内容哈希的去重机制
44
+ *
45
+ * @param msg - 接收到的消息
46
+ * @returns 是否为应该跳过的回声消息
47
+ */
48
+ isEchoMessage(msg) {
49
+ const { metadata, content, from } = msg;
50
+ // 层1: 检查 metadata 中的标记
51
+ if (metadata) {
52
+ // 检查是否是回复消息标记
53
+ if (metadata.type === 'reply' && metadata.replyTo) {
54
+ return true;
55
+ }
56
+ // 检查显式的跳过标记
57
+ if (metadata._f2a_skip_echo === true || metadata['x-openclaw-skip'] === true) {
58
+ return true;
59
+ }
60
+ }
61
+ // 层2: 检查消息内容中的特殊标记
62
+ if (content) {
63
+ if (content.includes('[[F2A:REPLY:') || content.includes('[[reply_to_current]]')) {
64
+ return true;
65
+ }
66
+ if (content.startsWith('NO_REPLY:') || content.startsWith('[NO_REPLY]')) {
67
+ return true;
68
+ }
69
+ }
70
+ // 层3: 检查消息来源是否是我们自己的 peerId(防止自循环)
71
+ if (this.deps.f2a && from === this.deps.f2a.peerId) {
72
+ return true;
73
+ }
74
+ // 层4: 基于消息内容哈希的去重机制(仅对长消息启用)
75
+ if (content && content.length > this.config.hashThreshold) {
76
+ const messageHash = this.computeHash(from, content);
77
+ const now = Date.now();
78
+ // 检查是否已处理过相同的消息内容
79
+ if (this.processedHashes.has(messageHash)) {
80
+ const processedTime = this.processedHashes.get(messageHash);
81
+ // 如果在 TTL 内,认为是重复消息
82
+ if (now - processedTime < this.config.cacheTtlMs) {
83
+ this.deps.logger?.debug?.(`[F2A] 检测到重复消息(哈希去重): ${messageHash.slice(0, 16)}...`);
84
+ return true;
85
+ }
86
+ }
87
+ // 记录此消息哈希
88
+ this.processedHashes.set(messageHash, now);
89
+ // 清理过期的条目(防止内存泄漏)
90
+ if (this.processedHashes.size > this.config.maxCacheSize) {
91
+ this.cleanupCache(now);
92
+ }
93
+ }
94
+ return false;
95
+ }
96
+ /**
97
+ * 计算消息内容哈希
98
+ *
99
+ * 使用 SHA256 算法生成安全的哈希值。
100
+ *
101
+ * @param from - 发送者 peerId
102
+ * @param content - 消息内容
103
+ * @returns 哈希标识符
104
+ */
105
+ computeHash(from, content) {
106
+ const data = `${from}:${content}`;
107
+ const hash = (0, crypto_1.createHash)('sha256').update(data).digest('hex');
108
+ return `msg-${hash.slice(0, 32)}-${data.length}`;
109
+ }
110
+ /**
111
+ * 清理过期的消息哈希缓存
112
+ *
113
+ * @param now - 当前时间戳
114
+ */
115
+ cleanupCache(now) {
116
+ for (const [hash, timestamp] of this.processedHashes.entries()) {
117
+ if (now - timestamp > this.config.cacheTtlMs) {
118
+ this.processedHashes.delete(hash);
119
+ }
120
+ }
121
+ }
122
+ /**
123
+ * 更新 F2A 实例(运行时更新)
124
+ *
125
+ * @param f2a - 新的 F2A 实例
126
+ */
127
+ updateF2A(f2a) {
128
+ this.deps.f2a = f2a;
129
+ }
130
+ /**
131
+ * 更新 Logger(运行时更新)
132
+ *
133
+ * @param logger - 新的 Logger
134
+ */
135
+ updateLogger(logger) {
136
+ this.deps.logger = logger;
137
+ }
138
+ /**
139
+ * 清空缓存(用于测试或重置)
140
+ */
141
+ clearCache() {
142
+ this.processedHashes.clear();
143
+ }
144
+ /**
145
+ * 获取缓存统计信息
146
+ */
147
+ getCacheStats() {
148
+ let maxAge = 0;
149
+ const now = Date.now();
150
+ for (const timestamp of this.processedHashes.values()) {
151
+ maxAge = Math.max(maxAge, now - timestamp);
152
+ }
153
+ return { size: this.processedHashes.size, maxAge };
154
+ }
155
+ }
156
+ exports.F2AMessageRouter = F2AMessageRouter;
157
+ //# sourceMappingURL=F2AMessageRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"F2AMessageRouter.js","sourceRoot":"","sources":["../src/F2AMessageRouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * F2A 工具注册器
3
+ *
4
+ * 负责 F2A 工具的注册和组装。
5
+ * 从 connector.ts 拆分(Issue #106),遵循单一职责原则。
6
+ *
7
+ * @module F2AToolRegistry
8
+ */
9
+ import type { Tool } from './types.js';
10
+ import type { ToolHandlers } from './tool-handlers.js';
11
+ import type { ClaimHandlers } from './claim-handlers.js';
12
+ import type { ContactToolHandlers } from './contact-tool-handlers.js';
13
+ /**
14
+ * 工具注册器依赖
15
+ */
16
+ export interface ToolRegistryDeps {
17
+ /** 工具处理器 */
18
+ toolHandlers: ToolHandlers;
19
+ /** 认领处理器 */
20
+ claimHandlers: ClaimHandlers;
21
+ /** 通讯录工具处理器 */
22
+ contactToolHandlers: ContactToolHandlers;
23
+ }
24
+ /**
25
+ * F2A 工具注册器
26
+ *
27
+ * 负责组装所有 F2A 工具(网络工具、任务工具、通讯录工具)。
28
+ */
29
+ export declare class F2AToolRegistry {
30
+ private deps;
31
+ constructor(deps: ToolRegistryDeps);
32
+ /**
33
+ * 获取所有 F2A 工具
34
+ *
35
+ * @returns 工具列表
36
+ */
37
+ getTools(): Tool[];
38
+ /**
39
+ * 更新依赖(用于运行时更新处理器)
40
+ *
41
+ * @param deps - 新的依赖
42
+ */
43
+ updateDeps(deps: Partial<ToolRegistryDeps>): void;
44
+ }
45
+ //# sourceMappingURL=F2AToolRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"F2AToolRegistry.d.ts","sourceRoot":"","sources":["../src/F2AToolRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY;IACZ,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY;IACZ,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe;IACf,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAmB;gBAEnB,IAAI,EAAE,gBAAgB;IAIlC;;;;OAIG;IACH,QAAQ,IAAI,IAAI,EAAE;IAwClB;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;CAKlD"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * F2A 工具注册器
4
+ *
5
+ * 负责 F2A 工具的注册和组装。
6
+ * 从 connector.ts 拆分(Issue #106),遵循单一职责原则。
7
+ *
8
+ * @module F2AToolRegistry
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.F2AToolRegistry = void 0;
12
+ const index_js_1 = require("./tools/index.js");
13
+ /**
14
+ * F2A 工具注册器
15
+ *
16
+ * 负责组装所有 F2A 工具(网络工具、任务工具、通讯录工具)。
17
+ */
18
+ class F2AToolRegistry {
19
+ deps;
20
+ constructor(deps) {
21
+ this.deps = deps;
22
+ }
23
+ /**
24
+ * 获取所有 F2A 工具
25
+ *
26
+ * @returns 工具列表
27
+ */
28
+ getTools() {
29
+ // 网络、状态、信誉工具
30
+ const networkTools = (0, index_js_1.getNetworkTools)({
31
+ handleDiscover: this.deps.toolHandlers.handleDiscover.bind(this.deps.toolHandlers),
32
+ handleDelegate: this.deps.toolHandlers.handleDelegate.bind(this.deps.toolHandlers),
33
+ handleBroadcast: this.deps.toolHandlers.handleBroadcast.bind(this.deps.toolHandlers),
34
+ handleStatus: this.deps.toolHandlers.handleStatus.bind(this.deps.toolHandlers),
35
+ handleReputation: this.deps.toolHandlers.handleReputation.bind(this.deps.toolHandlers),
36
+ });
37
+ // 任务工具
38
+ const taskTools = (0, index_js_1.getTaskTools)({
39
+ handlePollTasks: this.deps.toolHandlers.handlePollTasks.bind(this.deps.toolHandlers),
40
+ handleSubmitResult: this.deps.toolHandlers.handleSubmitResult.bind(this.deps.toolHandlers),
41
+ handleTaskStats: this.deps.toolHandlers.handleTaskStats.bind(this.deps.toolHandlers),
42
+ handleAnnounce: this.deps.claimHandlers.handleAnnounce.bind(this.deps.claimHandlers),
43
+ handleListAnnouncements: this.deps.claimHandlers.handleListAnnouncements.bind(this.deps.claimHandlers),
44
+ handleClaim: this.deps.claimHandlers.handleClaim.bind(this.deps.claimHandlers),
45
+ handleManageClaims: this.deps.claimHandlers.handleManageClaims.bind(this.deps.claimHandlers),
46
+ handleMyClaims: this.deps.claimHandlers.handleMyClaims.bind(this.deps.claimHandlers),
47
+ handleAnnouncementStats: this.deps.claimHandlers.handleAnnouncementStats.bind(this.deps.claimHandlers),
48
+ handleEstimateTask: this.deps.toolHandlers.handleEstimateTask.bind(this.deps.toolHandlers),
49
+ handleReviewTask: this.deps.toolHandlers.handleReviewTask.bind(this.deps.toolHandlers),
50
+ handleGetReviews: this.deps.toolHandlers.handleGetReviews.bind(this.deps.toolHandlers),
51
+ handleGetCapabilities: this.deps.toolHandlers.handleGetCapabilities.bind(this.deps.toolHandlers),
52
+ });
53
+ // 通讯录工具
54
+ const contactTools = (0, index_js_1.getContactTools)({
55
+ handleContacts: this.deps.contactToolHandlers.handleContacts.bind(this.deps.contactToolHandlers),
56
+ handleContactGroups: this.deps.contactToolHandlers.handleContactGroups.bind(this.deps.contactToolHandlers),
57
+ handleFriendRequest: this.deps.contactToolHandlers.handleFriendRequest.bind(this.deps.contactToolHandlers),
58
+ handlePendingRequests: this.deps.contactToolHandlers.handlePendingRequests.bind(this.deps.contactToolHandlers),
59
+ handleContactsExport: this.deps.contactToolHandlers.handleContactsExport.bind(this.deps.contactToolHandlers),
60
+ handleContactsImport: this.deps.contactToolHandlers.handleContactsImport.bind(this.deps.contactToolHandlers),
61
+ });
62
+ return [...networkTools, ...taskTools, ...contactTools];
63
+ }
64
+ /**
65
+ * 更新依赖(用于运行时更新处理器)
66
+ *
67
+ * @param deps - 新的依赖
68
+ */
69
+ updateDeps(deps) {
70
+ if (deps.toolHandlers)
71
+ this.deps.toolHandlers = deps.toolHandlers;
72
+ if (deps.claimHandlers)
73
+ this.deps.claimHandlers = deps.claimHandlers;
74
+ if (deps.contactToolHandlers)
75
+ this.deps.contactToolHandlers = deps.contactToolHandlers;
76
+ }
77
+ }
78
+ exports.F2AToolRegistry = F2AToolRegistry;
79
+ //# sourceMappingURL=F2AToolRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"F2AToolRegistry.js","sourceRoot":"","sources":["../src/F2AToolRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * F2A Webhook 管理器
3
+ *
4
+ * 负责管理 Webhook 处理器的创建和配置。
5
+ * 从 connector.ts 拆分(Issue #106),遵循单一职责原则。
6
+ *
7
+ * @module F2AWebhookManager
8
+ */
9
+ import type { AgentCapability, ApiLogger, F2APluginConfig, TaskQueueLike } from './types.js';
10
+ import type { WebhookHandler } from './webhook-server.js';
11
+ import type { WebhookPusher } from './webhook-pusher.js';
12
+ import type { ReputationSystemLike } from './types.js';
13
+ import type { OpenClawPluginApi } from './types.js';
14
+ /**
15
+ * Webhook 管理器依赖
16
+ */
17
+ export interface WebhookManagerDeps {
18
+ /** 插件配置 */
19
+ config: F2APluginConfig;
20
+ /** 能力列表 */
21
+ capabilities: AgentCapability[];
22
+ /** Logger */
23
+ logger?: ApiLogger;
24
+ /** 信誉系统 */
25
+ reputationSystem: ReputationSystemLike;
26
+ /** 任务队列 */
27
+ taskQueue: TaskQueueLike;
28
+ /** Webhook 推送器(可选) */
29
+ webhookPusher?: WebhookPusher;
30
+ /** OpenClaw API */
31
+ api?: OpenClawPluginApi;
32
+ /** 消息处理函数 */
33
+ invokeOpenClawAgent: (from: string, message: string) => Promise<string | undefined>;
34
+ }
35
+ /**
36
+ * F2A Webhook 管理器
37
+ *
38
+ * 功能:
39
+ * 1. 创建和配置 Webhook 处理器
40
+ * 2. 处理 discover、delegate、message、status 等 webhook 事件
41
+ */
42
+ export declare class F2AWebhookManager {
43
+ private deps;
44
+ constructor(deps: WebhookManagerDeps);
45
+ /**
46
+ * 创建 Webhook 处理器
47
+ */
48
+ createHandler(): WebhookHandler;
49
+ /**
50
+ * 处理 discover webhook
51
+ */
52
+ private handleDiscover;
53
+ /**
54
+ * 处理 delegate webhook
55
+ */
56
+ private handleDelegate;
57
+ /**
58
+ * 处理 message webhook
59
+ */
60
+ private handleMessage;
61
+ /**
62
+ * 处理 status webhook
63
+ */
64
+ private handleStatus;
65
+ /**
66
+ * 更新依赖(用于运行时更新)
67
+ */
68
+ updateDeps(deps: Partial<WebhookManagerDeps>): void;
69
+ /**
70
+ * 更新能力列表
71
+ */
72
+ updateCapabilities(capabilities: AgentCapability[]): void;
73
+ /**
74
+ * 更新配置
75
+ */
76
+ updateConfig(config: F2APluginConfig): void;
77
+ }
78
+ export default F2AWebhookManager;
79
+ //# sourceMappingURL=F2AWebhookManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"F2AWebhookManager.d.ts","sourceRoot":"","sources":["../src/F2AWebhookManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAGV,eAAe,EACf,SAAS,EACT,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAQpD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW;IACX,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW;IACX,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,aAAa;IACb,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,WAAW;IACX,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,WAAW;IACX,SAAS,EAAE,aAAa,CAAC;IACzB,sBAAsB;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mBAAmB;IACnB,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,aAAa;IACb,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACrF;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAqB;gBAErB,IAAI,EAAE,kBAAkB;IAIpC;;OAEG;IACH,aAAa,IAAI,cAAc;IAoB/B;;OAEG;YACW,cAAc;IAwB5B;;OAEG;YACW,cAAc;IAuG5B;;OAEG;YACW,aAAa;IAuC3B;;OAEG;YACW,YAAY;IAe1B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAWnD;;OAEG;IACH,kBAAkB,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,IAAI;IAIzD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;CAG5C;AAED,eAAe,iBAAiB,CAAC"}