@f2a/network 0.1.2

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 (234) hide show
  1. package/.github/workflows/ci.yml +113 -0
  2. package/.github/workflows/publish.yml +60 -0
  3. package/LICENSE +21 -0
  4. package/MONOREPO.md +58 -0
  5. package/README.md +280 -0
  6. package/SKILL.md +137 -0
  7. package/dist/adapters/openclaw.d.ts +103 -0
  8. package/dist/adapters/openclaw.d.ts.map +1 -0
  9. package/dist/adapters/openclaw.js +297 -0
  10. package/dist/adapters/openclaw.js.map +1 -0
  11. package/dist/cli/commands.d.ts +17 -0
  12. package/dist/cli/commands.d.ts.map +1 -0
  13. package/dist/cli/commands.js +107 -0
  14. package/dist/cli/commands.js.map +1 -0
  15. package/dist/cli/index.d.ts +6 -0
  16. package/dist/cli/index.d.ts.map +1 -0
  17. package/dist/cli/index.js +203 -0
  18. package/dist/cli/index.js.map +1 -0
  19. package/dist/core/autonomous-economy.d.ts +136 -0
  20. package/dist/core/autonomous-economy.d.ts.map +1 -0
  21. package/dist/core/autonomous-economy.js +255 -0
  22. package/dist/core/autonomous-economy.js.map +1 -0
  23. package/dist/core/connection-manager.d.ts +80 -0
  24. package/dist/core/connection-manager.d.ts.map +1 -0
  25. package/dist/core/connection-manager.js +235 -0
  26. package/dist/core/connection-manager.js.map +1 -0
  27. package/dist/core/connection-manager.test.d.ts +2 -0
  28. package/dist/core/connection-manager.test.d.ts.map +1 -0
  29. package/dist/core/connection-manager.test.js +52 -0
  30. package/dist/core/connection-manager.test.js.map +1 -0
  31. package/dist/core/e2ee-crypto.d.ts +90 -0
  32. package/dist/core/e2ee-crypto.d.ts.map +1 -0
  33. package/dist/core/e2ee-crypto.js +190 -0
  34. package/dist/core/e2ee-crypto.js.map +1 -0
  35. package/dist/core/f2a.d.ts +126 -0
  36. package/dist/core/f2a.d.ts.map +1 -0
  37. package/dist/core/f2a.js +425 -0
  38. package/dist/core/f2a.js.map +1 -0
  39. package/dist/core/identity.d.ts +47 -0
  40. package/dist/core/identity.d.ts.map +1 -0
  41. package/dist/core/identity.js +130 -0
  42. package/dist/core/identity.js.map +1 -0
  43. package/dist/core/identity.test.d.ts +2 -0
  44. package/dist/core/identity.test.d.ts.map +1 -0
  45. package/dist/core/identity.test.js +43 -0
  46. package/dist/core/identity.test.js.map +1 -0
  47. package/dist/core/p2p-network.d.ts +242 -0
  48. package/dist/core/p2p-network.d.ts.map +1 -0
  49. package/dist/core/p2p-network.js +1182 -0
  50. package/dist/core/p2p-network.js.map +1 -0
  51. package/dist/core/reputation-security.d.ts +168 -0
  52. package/dist/core/reputation-security.d.ts.map +1 -0
  53. package/dist/core/reputation-security.js +369 -0
  54. package/dist/core/reputation-security.js.map +1 -0
  55. package/dist/core/reputation.d.ts +179 -0
  56. package/dist/core/reputation.d.ts.map +1 -0
  57. package/dist/core/reputation.js +472 -0
  58. package/dist/core/reputation.js.map +1 -0
  59. package/dist/core/review-committee.d.ts +130 -0
  60. package/dist/core/review-committee.d.ts.map +1 -0
  61. package/dist/core/review-committee.js +251 -0
  62. package/dist/core/review-committee.js.map +1 -0
  63. package/dist/core/serverless.d.ts +155 -0
  64. package/dist/core/serverless.d.ts.map +1 -0
  65. package/dist/core/serverless.js +615 -0
  66. package/dist/core/serverless.js.map +1 -0
  67. package/dist/core/token-manager.d.ts +42 -0
  68. package/dist/core/token-manager.d.ts.map +1 -0
  69. package/dist/core/token-manager.js +122 -0
  70. package/dist/core/token-manager.js.map +1 -0
  71. package/dist/daemon/control-server.d.ts +55 -0
  72. package/dist/daemon/control-server.d.ts.map +1 -0
  73. package/dist/daemon/control-server.js +262 -0
  74. package/dist/daemon/control-server.js.map +1 -0
  75. package/dist/daemon/index.d.ts +35 -0
  76. package/dist/daemon/index.d.ts.map +1 -0
  77. package/dist/daemon/index.js +69 -0
  78. package/dist/daemon/index.js.map +1 -0
  79. package/dist/daemon/main.d.ts +6 -0
  80. package/dist/daemon/main.d.ts.map +1 -0
  81. package/dist/daemon/main.js +38 -0
  82. package/dist/daemon/main.js.map +1 -0
  83. package/dist/daemon/start.d.ts +6 -0
  84. package/dist/daemon/start.d.ts.map +1 -0
  85. package/dist/daemon/start.js +25 -0
  86. package/dist/daemon/start.js.map +1 -0
  87. package/dist/daemon/webhook.d.ts +30 -0
  88. package/dist/daemon/webhook.d.ts.map +1 -0
  89. package/dist/daemon/webhook.js +86 -0
  90. package/dist/daemon/webhook.js.map +1 -0
  91. package/dist/daemon/webhook.test.d.ts +2 -0
  92. package/dist/daemon/webhook.test.d.ts.map +1 -0
  93. package/dist/daemon/webhook.test.js +24 -0
  94. package/dist/daemon/webhook.test.js.map +1 -0
  95. package/dist/index.d.ts +24 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +25 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/protocol/messages.d.ts +739 -0
  100. package/dist/protocol/messages.d.ts.map +1 -0
  101. package/dist/protocol/messages.js +188 -0
  102. package/dist/protocol/messages.js.map +1 -0
  103. package/dist/protocol/messages.test.d.ts +2 -0
  104. package/dist/protocol/messages.test.d.ts.map +1 -0
  105. package/dist/protocol/messages.test.js +55 -0
  106. package/dist/protocol/messages.test.js.map +1 -0
  107. package/dist/types/index.d.ts +247 -0
  108. package/dist/types/index.d.ts.map +1 -0
  109. package/dist/types/index.js +10 -0
  110. package/dist/types/index.js.map +1 -0
  111. package/dist/types/result.d.ts +28 -0
  112. package/dist/types/result.d.ts.map +1 -0
  113. package/dist/types/result.js +16 -0
  114. package/dist/types/result.js.map +1 -0
  115. package/dist/utils/benchmark.d.ts +67 -0
  116. package/dist/utils/benchmark.d.ts.map +1 -0
  117. package/dist/utils/benchmark.js +179 -0
  118. package/dist/utils/benchmark.js.map +1 -0
  119. package/dist/utils/logger.d.ts +105 -0
  120. package/dist/utils/logger.d.ts.map +1 -0
  121. package/dist/utils/logger.js +275 -0
  122. package/dist/utils/logger.js.map +1 -0
  123. package/dist/utils/middleware.d.ts +85 -0
  124. package/dist/utils/middleware.d.ts.map +1 -0
  125. package/dist/utils/middleware.js +173 -0
  126. package/dist/utils/middleware.js.map +1 -0
  127. package/dist/utils/rate-limiter.d.ts +71 -0
  128. package/dist/utils/rate-limiter.d.ts.map +1 -0
  129. package/dist/utils/rate-limiter.js +160 -0
  130. package/dist/utils/rate-limiter.js.map +1 -0
  131. package/dist/utils/signature.d.ts +57 -0
  132. package/dist/utils/signature.d.ts.map +1 -0
  133. package/dist/utils/signature.js +102 -0
  134. package/dist/utils/signature.js.map +1 -0
  135. package/dist/utils/validation.d.ts +504 -0
  136. package/dist/utils/validation.d.ts.map +1 -0
  137. package/dist/utils/validation.js +159 -0
  138. package/dist/utils/validation.js.map +1 -0
  139. package/docs/F2A-PROTOCOL.md +61 -0
  140. package/docs/MOBILE_BOOTSTRAP_DESIGN.md +126 -0
  141. package/docs/a2a-lessons.md +316 -0
  142. package/docs/middleware-guide.md +448 -0
  143. package/docs/readme-update-checklist.md +90 -0
  144. package/docs/reputation-guide.md +396 -0
  145. package/docs/rfcs/001-reputation-system.md +712 -0
  146. package/docs/security-design.md +247 -0
  147. package/install.sh +231 -0
  148. package/package.json +64 -0
  149. package/packages/openclaw-adapter/README.md +510 -0
  150. package/packages/openclaw-adapter/openclaw.plugin.json +106 -0
  151. package/packages/openclaw-adapter/package.json +40 -0
  152. package/packages/openclaw-adapter/src/announcement-queue.test.ts +449 -0
  153. package/packages/openclaw-adapter/src/announcement-queue.ts +403 -0
  154. package/packages/openclaw-adapter/src/capability-detector.test.ts +99 -0
  155. package/packages/openclaw-adapter/src/capability-detector.ts +183 -0
  156. package/packages/openclaw-adapter/src/claim-handlers.test.ts +974 -0
  157. package/packages/openclaw-adapter/src/claim-handlers.ts +482 -0
  158. package/packages/openclaw-adapter/src/connector.business.test.ts +583 -0
  159. package/packages/openclaw-adapter/src/connector.ts +795 -0
  160. package/packages/openclaw-adapter/src/index.test.ts +82 -0
  161. package/packages/openclaw-adapter/src/index.ts +18 -0
  162. package/packages/openclaw-adapter/src/integration.e2e.test.ts +829 -0
  163. package/packages/openclaw-adapter/src/logger.ts +51 -0
  164. package/packages/openclaw-adapter/src/network-client.test.ts +266 -0
  165. package/packages/openclaw-adapter/src/network-client.ts +251 -0
  166. package/packages/openclaw-adapter/src/network-recovery.test.ts +465 -0
  167. package/packages/openclaw-adapter/src/node-manager.test.ts +136 -0
  168. package/packages/openclaw-adapter/src/node-manager.ts +429 -0
  169. package/packages/openclaw-adapter/src/plugin.test.ts +439 -0
  170. package/packages/openclaw-adapter/src/plugin.ts +104 -0
  171. package/packages/openclaw-adapter/src/reputation.test.ts +221 -0
  172. package/packages/openclaw-adapter/src/reputation.ts +368 -0
  173. package/packages/openclaw-adapter/src/task-guard.test.ts +502 -0
  174. package/packages/openclaw-adapter/src/task-guard.ts +860 -0
  175. package/packages/openclaw-adapter/src/task-queue.concurrency.test.ts +462 -0
  176. package/packages/openclaw-adapter/src/task-queue.edge-cases.test.ts +284 -0
  177. package/packages/openclaw-adapter/src/task-queue.persistence.test.ts +408 -0
  178. package/packages/openclaw-adapter/src/task-queue.ts +668 -0
  179. package/packages/openclaw-adapter/src/tool-handlers.test.ts +906 -0
  180. package/packages/openclaw-adapter/src/tool-handlers.ts +574 -0
  181. package/packages/openclaw-adapter/src/types.ts +361 -0
  182. package/packages/openclaw-adapter/src/webhook-pusher.test.ts +188 -0
  183. package/packages/openclaw-adapter/src/webhook-pusher.ts +220 -0
  184. package/packages/openclaw-adapter/src/webhook-server.test.ts +580 -0
  185. package/packages/openclaw-adapter/src/webhook-server.ts +202 -0
  186. package/packages/openclaw-adapter/tsconfig.json +20 -0
  187. package/src/cli/commands.test.ts +157 -0
  188. package/src/cli/commands.ts +129 -0
  189. package/src/cli/index.test.ts +77 -0
  190. package/src/cli/index.ts +234 -0
  191. package/src/core/autonomous-economy.test.ts +291 -0
  192. package/src/core/autonomous-economy.ts +428 -0
  193. package/src/core/e2ee-crypto.test.ts +125 -0
  194. package/src/core/e2ee-crypto.ts +246 -0
  195. package/src/core/f2a.test.ts +269 -0
  196. package/src/core/f2a.ts +618 -0
  197. package/src/core/p2p-network.test.ts +199 -0
  198. package/src/core/p2p-network.ts +1432 -0
  199. package/src/core/reputation-security.test.ts +403 -0
  200. package/src/core/reputation-security.ts +562 -0
  201. package/src/core/reputation.test.ts +260 -0
  202. package/src/core/reputation.ts +576 -0
  203. package/src/core/review-committee.test.ts +380 -0
  204. package/src/core/review-committee.ts +401 -0
  205. package/src/core/token-manager.test.ts +133 -0
  206. package/src/core/token-manager.ts +140 -0
  207. package/src/daemon/control-server.test.ts +216 -0
  208. package/src/daemon/control-server.ts +292 -0
  209. package/src/daemon/index.test.ts +85 -0
  210. package/src/daemon/index.ts +89 -0
  211. package/src/daemon/main.ts +44 -0
  212. package/src/daemon/start.ts +29 -0
  213. package/src/daemon/webhook.test.ts +68 -0
  214. package/src/daemon/webhook.ts +105 -0
  215. package/src/index.test.ts +436 -0
  216. package/src/index.ts +72 -0
  217. package/src/types/index.test.ts +87 -0
  218. package/src/types/index.ts +341 -0
  219. package/src/types/result.ts +68 -0
  220. package/src/utils/benchmark.ts +237 -0
  221. package/src/utils/logger.ts +331 -0
  222. package/src/utils/middleware.ts +229 -0
  223. package/src/utils/rate-limiter.ts +207 -0
  224. package/src/utils/signature.ts +136 -0
  225. package/src/utils/validation.ts +186 -0
  226. package/tests/docker/Dockerfile.node +23 -0
  227. package/tests/docker/Dockerfile.runner +18 -0
  228. package/tests/docker/docker-compose.test.yml +73 -0
  229. package/tests/integration/message-passing.test.ts +109 -0
  230. package/tests/integration/multi-node.test.ts +92 -0
  231. package/tests/integration/p2p-connection.test.ts +83 -0
  232. package/tests/integration/test-config.ts +32 -0
  233. package/tsconfig.json +21 -0
  234. package/vitest.config.ts +26 -0
@@ -0,0 +1,203 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * F2A CLI 入口 - P2P 版本
4
+ */
5
+ import { request } from 'http';
6
+ import { existsSync, readFileSync } from 'fs';
7
+ import { join } from 'path';
8
+ import { homedir } from 'os';
9
+ const CONTROL_PORT = parseInt(process.env.F2A_CONTROL_PORT || '9001');
10
+ /**
11
+ * 获取控制 Token
12
+ * 优先从环境变量读取,其次从默认文件位置读取
13
+ * @returns 控制 Token,如果未找到返回空字符串
14
+ */
15
+ function getControlToken() {
16
+ // 1. 优先使用环境变量
17
+ const envToken = process.env.F2A_CONTROL_TOKEN;
18
+ if (envToken) {
19
+ return envToken;
20
+ }
21
+ // 2. 从默认文件位置读取
22
+ const tokenPath = join(homedir(), '.f2a', 'control-token');
23
+ if (existsSync(tokenPath)) {
24
+ const fileToken = readFileSync(tokenPath, 'utf-8').trim();
25
+ if (fileToken) {
26
+ return fileToken;
27
+ }
28
+ }
29
+ // 3. 如果都没有,返回空字符串(会导致认证失败)
30
+ console.warn('⚠️ Warning: F2A_CONTROL_TOKEN not set and no token file found.');
31
+ console.warn(' Token file location:', tokenPath);
32
+ console.warn(' Please start the F2A daemon first, or set F2A_CONTROL_TOKEN.');
33
+ return '';
34
+ }
35
+ const CONTROL_TOKEN = getControlToken();
36
+ /**
37
+ * 解析命令行参数
38
+ * @returns 解析后的参数对象
39
+ */
40
+ function parseArgs() {
41
+ const args = process.argv.slice(2);
42
+ if (args.length === 0) {
43
+ return { command: 'help' };
44
+ }
45
+ const command = args[0];
46
+ // 解析 ID 或序号
47
+ let idOrIndex;
48
+ if (args[1]) {
49
+ idOrIndex = /^\d+$/.test(args[1]) ? parseInt(args[1]) : args[1];
50
+ }
51
+ // 解析能力过滤
52
+ let capability;
53
+ const capIndex = args.indexOf('--capability');
54
+ if (capIndex !== -1 && args[capIndex + 1]) {
55
+ capability = args[capIndex + 1];
56
+ }
57
+ // 解析原因
58
+ let reason;
59
+ const reasonIndex = args.indexOf('--reason');
60
+ if (reasonIndex !== -1 && args[reasonIndex + 1]) {
61
+ reason = args[reasonIndex + 1];
62
+ }
63
+ return { command, idOrIndex, capability, reason };
64
+ }
65
+ /**
66
+ * 显示帮助信息
67
+ * @returns void
68
+ */
69
+ function showHelp() {
70
+ console.log(`
71
+ F2A CLI - Friend-to-Agent P2P Networking
72
+
73
+ Usage: f2a [command] [options]
74
+
75
+ Commands:
76
+ status 查看节点状态
77
+ peers 查看已连接的 Peers
78
+ discover [options] 发现网络中的 Agents
79
+ pending 查看待确认连接
80
+ confirm [id|index] 确认连接请求
81
+ reject [id|index] 拒绝连接请求
82
+ help 显示帮助
83
+
84
+ Options:
85
+ -c, --capability 按能力过滤 (discover 命令)
86
+ --reason [text] 拒绝原因 (reject 命令)
87
+
88
+ Environment Variables:
89
+ F2A_CONTROL_PORT 控制服务器端口 (默认: 9001)
90
+ F2A_CONTROL_TOKEN 控制服务器认证 Token
91
+ (如果不设置,会读取 ~/.f2a/control-token)
92
+
93
+ Examples:
94
+ f2a status
95
+ f2a peers
96
+ f2a discover
97
+ f2a discover --capability code-generation
98
+ f2a pending
99
+ f2a confirm 1
100
+ f2a reject 2 --reason "unknown"
101
+ `);
102
+ }
103
+ /**
104
+ * 发送控制命令到 F2A Daemon
105
+ * @param action - 命令动作
106
+ * @param params - 命令参数(可选)
107
+ * @returns Promise,命令执行完成后 resolve
108
+ * @throws 当网络请求失败时 reject
109
+ */
110
+ async function sendCommand(action, params) {
111
+ return new Promise((resolve, reject) => {
112
+ const payload = JSON.stringify({ action, ...params });
113
+ const options = {
114
+ hostname: '127.0.0.1',
115
+ port: CONTROL_PORT,
116
+ path: '/control',
117
+ method: 'POST',
118
+ headers: {
119
+ 'Content-Type': 'application/json',
120
+ 'Content-Length': Buffer.byteLength(payload),
121
+ 'X-F2A-Token': CONTROL_TOKEN
122
+ }
123
+ };
124
+ const req = request(options, (res) => {
125
+ let data = '';
126
+ res.on('data', chunk => data += chunk);
127
+ res.on('end', () => {
128
+ try {
129
+ const response = JSON.parse(data);
130
+ if (response.success) {
131
+ console.log(JSON.stringify(response, null, 2));
132
+ }
133
+ else {
134
+ if (res.statusCode === 401) {
135
+ console.error('❌ Authentication failed. Please check your F2A_CONTROL_TOKEN.');
136
+ }
137
+ else {
138
+ console.error('Error:', response.error);
139
+ }
140
+ }
141
+ resolve();
142
+ }
143
+ catch {
144
+ console.log(data);
145
+ resolve();
146
+ }
147
+ });
148
+ });
149
+ req.on('error', (err) => {
150
+ console.error('Failed to connect to F2A daemon:', err.message);
151
+ console.log('Make sure the daemon is running (f2a daemon start)');
152
+ reject(err);
153
+ });
154
+ req.write(payload);
155
+ req.end();
156
+ });
157
+ }
158
+ /**
159
+ * 主函数 - CLI 入口
160
+ * @returns Promise,程序退出时 resolve
161
+ * @throws 当命令执行失败时 reject
162
+ */
163
+ async function main() {
164
+ const args = parseArgs();
165
+ switch (args.command) {
166
+ case 'status':
167
+ await sendCommand('status');
168
+ break;
169
+ case 'peers':
170
+ await sendCommand('peers');
171
+ break;
172
+ case 'discover':
173
+ await sendCommand('discover', { capability: args.capability });
174
+ break;
175
+ case 'pending':
176
+ await sendCommand('pending');
177
+ break;
178
+ case 'confirm':
179
+ if (args.idOrIndex === undefined) {
180
+ console.error('[F2A] 错误: 需要指定 ID 或序号');
181
+ console.error('用法: f2a confirm [id|index]');
182
+ process.exit(1);
183
+ }
184
+ await sendCommand('confirm', { id: args.idOrIndex });
185
+ break;
186
+ case 'reject':
187
+ if (args.idOrIndex === undefined) {
188
+ console.error('[F2A] 错误: 需要指定 ID 或序号');
189
+ console.error('用法: f2a reject [id|index]');
190
+ process.exit(1);
191
+ }
192
+ await sendCommand('reject', { id: args.idOrIndex, reason: args.reason });
193
+ break;
194
+ case 'help':
195
+ default:
196
+ showHelp();
197
+ }
198
+ }
199
+ main().catch(err => {
200
+ console.error('[F2A] 错误:', err);
201
+ process.exit(1);
202
+ });
203
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * F2A 自治经济系统
3
+ * Phase 4: 信誉消耗、评审激励、优先级调度
4
+ */
5
+ import { ReputationManager } from './reputation.js';
6
+ import { ReviewCommittee, ReviewResult } from './review-committee.js';
7
+ /**
8
+ * 任务请求
9
+ */
10
+ export interface TaskRequest {
11
+ taskId: string;
12
+ requesterId: string;
13
+ capability: string;
14
+ description: string;
15
+ parameters?: Record<string, unknown>;
16
+ timeout?: number;
17
+ estimatedComplexity?: number;
18
+ }
19
+ /**
20
+ * 任务成本估算
21
+ */
22
+ export interface TaskCost {
23
+ baseCost: number;
24
+ discount: number;
25
+ finalCost: number;
26
+ priority: number;
27
+ }
28
+ /**
29
+ * 任务奖励
30
+ */
31
+ export interface TaskReward {
32
+ executorReward: number;
33
+ reviewerReward: number;
34
+ requesterRefund: number;
35
+ }
36
+ /**
37
+ * 经济配置
38
+ */
39
+ export interface EconomyConfig {
40
+ /** 基础任务成本 */
41
+ baseTaskCost: number;
42
+ /** 复杂度系数 */
43
+ complexityMultiplier: number;
44
+ /** 执行者奖励比例 */
45
+ executorRewardRate: number;
46
+ /** 评审者奖励比例 */
47
+ reviewerRewardRate: number;
48
+ /** 任务超时惩罚 */
49
+ timeoutPenalty: number;
50
+ /** 拒绝任务惩罚 */
51
+ rejectionPenalty: number;
52
+ }
53
+ /**
54
+ * 优先级队列项
55
+ */
56
+ export interface PriorityQueueItem {
57
+ task: TaskRequest;
58
+ priority: number;
59
+ cost: number;
60
+ deducted: boolean;
61
+ timestamp: number;
62
+ }
63
+ /**
64
+ * 任务执行结果
65
+ */
66
+ export interface TaskExecutionResult {
67
+ taskId: string;
68
+ executorId: string;
69
+ status: 'success' | 'failure' | 'timeout' | 'rejected';
70
+ result?: unknown;
71
+ error?: string;
72
+ reviewResult?: ReviewResult;
73
+ }
74
+ export declare class AutonomousEconomy {
75
+ private config;
76
+ private reputationManager;
77
+ private reviewCommittee;
78
+ private taskQueue;
79
+ private pendingTasks;
80
+ private logger;
81
+ constructor(reputationManager: ReputationManager, reviewCommittee: ReviewCommittee, config?: Partial<EconomyConfig>);
82
+ /**
83
+ * 提交任务(消耗信誉)
84
+ */
85
+ submitTask(task: TaskRequest): {
86
+ success: boolean;
87
+ cost?: TaskCost;
88
+ error?: string;
89
+ };
90
+ /**
91
+ * 计算任务成本
92
+ */
93
+ calculateTaskCost(task: TaskRequest): TaskCost;
94
+ /**
95
+ * 分配任务给执行者
96
+ */
97
+ assignTask(taskId: string, executorId: string): boolean;
98
+ /**
99
+ * 完成任务并结算
100
+ */
101
+ completeTask(result: TaskExecutionResult): TaskReward | null;
102
+ /**
103
+ * 从评审结果计算奖励
104
+ */
105
+ calculateRewardFromReview(task: TaskRequest, executorId: string, reviewResult: ReviewResult): TaskReward;
106
+ /**
107
+ * 获取下一个待处理任务
108
+ */
109
+ getNextTask(): PriorityQueueItem | null;
110
+ /**
111
+ * 获取队列长度
112
+ */
113
+ getQueueLength(): number;
114
+ /**
115
+ * 获取待处理任务
116
+ */
117
+ getPendingTask(taskId: string): PriorityQueueItem | null;
118
+ /**
119
+ * 取消任务(返还部分信誉)
120
+ */
121
+ cancelTask(taskId: string): boolean;
122
+ /**
123
+ * 获取经济统计
124
+ */
125
+ getEconomyStats(): {
126
+ pendingTasks: number;
127
+ queueLength: number;
128
+ totalCostDeducted: number;
129
+ };
130
+ /**
131
+ * 清理过期任务
132
+ */
133
+ cleanupExpiredTasks(maxAge?: number): string[];
134
+ }
135
+ export default AutonomousEconomy;
136
+ //# sourceMappingURL=autonomous-economy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autonomous-economy.d.ts","sourceRoot":"","sources":["../../src/core/autonomous-economy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,255 @@
1
+ /**
2
+ * F2A 自治经济系统
3
+ * Phase 4: 信誉消耗、评审激励、优先级调度
4
+ */
5
+ import { Logger } from '../utils/logger.js';
6
+ // ============================================================================
7
+ // 默认配置
8
+ // ============================================================================
9
+ const DEFAULT_ECONOMY_CONFIG = {
10
+ baseTaskCost: 5,
11
+ complexityMultiplier: 0.1,
12
+ executorRewardRate: 0.5,
13
+ reviewerRewardRate: 0.2,
14
+ timeoutPenalty: 15,
15
+ rejectionPenalty: 5,
16
+ };
17
+ // ============================================================================
18
+ // 自治经济管理器
19
+ // ============================================================================
20
+ export class AutonomousEconomy {
21
+ config;
22
+ reputationManager;
23
+ reviewCommittee;
24
+ taskQueue = [];
25
+ pendingTasks = new Map();
26
+ logger;
27
+ constructor(reputationManager, reviewCommittee, config = {}) {
28
+ this.config = { ...DEFAULT_ECONOMY_CONFIG, ...config };
29
+ this.reputationManager = reputationManager;
30
+ this.reviewCommittee = reviewCommittee;
31
+ this.logger = new Logger({ component: 'AutonomousEconomy' });
32
+ }
33
+ /**
34
+ * 提交任务(消耗信誉)
35
+ */
36
+ submitTask(task) {
37
+ // 检查发布权限
38
+ if (!this.reputationManager.hasPermission(task.requesterId, 'publish')) {
39
+ return { success: false, error: 'No permission to publish tasks' };
40
+ }
41
+ // 计算成本
42
+ const cost = this.calculateTaskCost(task);
43
+ // 检查信誉是否足够
44
+ const reputation = this.reputationManager.getReputation(task.requesterId);
45
+ if (reputation.score < cost.finalCost) {
46
+ return {
47
+ success: false,
48
+ error: `Insufficient reputation: ${reputation.score.toFixed(1)} < ${cost.finalCost.toFixed(1)}`,
49
+ };
50
+ }
51
+ // 预扣信誉
52
+ this.reputationManager.recordFailure(task.requesterId, `task-submit-${task.taskId}`, 'Task submission cost', -cost.finalCost);
53
+ // 加入优先级队列
54
+ const queueItem = {
55
+ task,
56
+ priority: cost.priority,
57
+ cost: cost.finalCost,
58
+ deducted: true,
59
+ timestamp: Date.now(),
60
+ };
61
+ this.taskQueue.push(queueItem);
62
+ this.taskQueue.sort((a, b) => b.priority - a.priority);
63
+ this.pendingTasks.set(task.taskId, queueItem);
64
+ this.logger.info('Task submitted', {
65
+ taskId: task.taskId,
66
+ requesterId: task.requesterId.slice(0, 16),
67
+ cost: cost.finalCost,
68
+ priority: cost.priority,
69
+ });
70
+ return { success: true, cost };
71
+ }
72
+ /**
73
+ * 计算任务成本
74
+ */
75
+ calculateTaskCost(task) {
76
+ const complexity = task.estimatedComplexity || 1;
77
+ const baseCost = this.config.baseTaskCost * complexity;
78
+ // 获取折扣
79
+ const discount = this.reputationManager.getPublishDiscount(task.requesterId);
80
+ const finalCost = Math.floor(baseCost * discount);
81
+ // 获取优先级
82
+ const priority = this.reputationManager.getPublishPriority(task.requesterId);
83
+ return {
84
+ baseCost,
85
+ discount,
86
+ finalCost,
87
+ priority,
88
+ };
89
+ }
90
+ /**
91
+ * 分配任务给执行者
92
+ */
93
+ assignTask(taskId, executorId) {
94
+ const queueItem = this.pendingTasks.get(taskId);
95
+ if (!queueItem)
96
+ return false;
97
+ // 检查执行者权限
98
+ if (!this.reputationManager.hasPermission(executorId, 'execute')) {
99
+ this.logger.warn('Executor lacks permission', { executorId: executorId.slice(0, 16) });
100
+ return false;
101
+ }
102
+ this.logger.info('Task assigned', {
103
+ taskId,
104
+ executorId: executorId.slice(0, 16),
105
+ });
106
+ return true;
107
+ }
108
+ /**
109
+ * 完成任务并结算
110
+ */
111
+ completeTask(result) {
112
+ const queueItem = this.pendingTasks.get(result.taskId);
113
+ if (!queueItem)
114
+ return null;
115
+ const task = queueItem.task;
116
+ let reward = {
117
+ executorReward: 0,
118
+ reviewerReward: 0,
119
+ requesterRefund: 0,
120
+ };
121
+ switch (result.status) {
122
+ case 'success':
123
+ // 任务成功
124
+ if (result.reviewResult) {
125
+ reward = this.calculateRewardFromReview(task, result.executorId, result.reviewResult);
126
+ }
127
+ else {
128
+ // 无评审结果,使用默认奖励
129
+ reward.executorReward = queueItem.cost * this.config.executorRewardRate;
130
+ }
131
+ // 奖励执行者
132
+ this.reputationManager.recordSuccess(result.executorId, result.taskId, reward.executorReward);
133
+ // 部分返还请求者
134
+ if (reward.requesterRefund > 0) {
135
+ this.reputationManager.recordSuccess(task.requesterId, `refund-${result.taskId}`, reward.requesterRefund);
136
+ }
137
+ this.logger.info('Task completed successfully', {
138
+ taskId: result.taskId,
139
+ executorReward: reward.executorReward,
140
+ requesterRefund: reward.requesterRefund,
141
+ });
142
+ break;
143
+ case 'failure':
144
+ // 任务失败
145
+ this.reputationManager.recordFailure(result.executorId, result.taskId, result.error || 'Task failed');
146
+ this.logger.warn('Task failed', { taskId: result.taskId, error: result.error });
147
+ break;
148
+ case 'timeout':
149
+ // 任务超时
150
+ this.reputationManager.recordFailure(result.executorId, result.taskId, 'Task timeout', -this.config.timeoutPenalty);
151
+ this.logger.warn('Task timeout', { taskId: result.taskId });
152
+ break;
153
+ case 'rejected':
154
+ // 任务被拒绝
155
+ this.reputationManager.recordRejection(result.executorId, result.taskId, result.error || 'Task rejected');
156
+ break;
157
+ }
158
+ // 清理
159
+ this.pendingTasks.delete(result.taskId);
160
+ this.taskQueue = this.taskQueue.filter(item => item.task.taskId !== result.taskId);
161
+ return reward;
162
+ }
163
+ /**
164
+ * 从评审结果计算奖励
165
+ */
166
+ calculateRewardFromReview(task, executorId, reviewResult) {
167
+ const { finalWorkload, finalValue } = reviewResult;
168
+ // 执行者奖励 = 工作量 × 价值系数
169
+ const valueFactor = (finalValue + 100) / 200; // 归一化到 0-1
170
+ const executorReward = finalWorkload * valueFactor * this.config.executorRewardRate;
171
+ // 评审者奖励(在 ReviewCommittee 中已处理)
172
+ const reviewerReward = reviewResult.reviews.length * 3;
173
+ // 请求者返还
174
+ let requesterRefund = 0;
175
+ if (finalValue > 0) {
176
+ // 正价值任务,部分返还
177
+ requesterRefund = finalWorkload * 0.1;
178
+ }
179
+ return {
180
+ executorReward,
181
+ reviewerReward,
182
+ requesterRefund,
183
+ };
184
+ }
185
+ /**
186
+ * 获取下一个待处理任务
187
+ */
188
+ getNextTask() {
189
+ return this.taskQueue.length > 0 ? this.taskQueue[0] : null;
190
+ }
191
+ /**
192
+ * 获取队列长度
193
+ */
194
+ getQueueLength() {
195
+ return this.taskQueue.length;
196
+ }
197
+ /**
198
+ * 获取待处理任务
199
+ */
200
+ getPendingTask(taskId) {
201
+ return this.pendingTasks.get(taskId) || null;
202
+ }
203
+ /**
204
+ * 取消任务(返还部分信誉)
205
+ */
206
+ cancelTask(taskId) {
207
+ const queueItem = this.pendingTasks.get(taskId);
208
+ if (!queueItem)
209
+ return false;
210
+ // 返还部分信誉
211
+ const refund = queueItem.cost * 0.5;
212
+ this.reputationManager.recordSuccess(queueItem.task.requesterId, `cancel-${taskId}`, refund);
213
+ // 清理
214
+ this.pendingTasks.delete(taskId);
215
+ this.taskQueue = this.taskQueue.filter(item => item.task.taskId !== taskId);
216
+ this.logger.info('Task cancelled', {
217
+ taskId,
218
+ refund,
219
+ });
220
+ return true;
221
+ }
222
+ /**
223
+ * 获取经济统计
224
+ */
225
+ getEconomyStats() {
226
+ const totalCostDeducted = Array.from(this.pendingTasks.values())
227
+ .filter(item => item.deducted)
228
+ .reduce((sum, item) => sum + item.cost, 0);
229
+ return {
230
+ pendingTasks: this.pendingTasks.size,
231
+ queueLength: this.taskQueue.length,
232
+ totalCostDeducted,
233
+ };
234
+ }
235
+ /**
236
+ * 清理过期任务
237
+ */
238
+ cleanupExpiredTasks(maxAge = 24 * 60 * 60 * 1000) {
239
+ const now = Date.now();
240
+ const expired = [];
241
+ for (const [taskId, item] of this.pendingTasks) {
242
+ if (now - item.timestamp > maxAge) {
243
+ expired.push(taskId);
244
+ this.cancelTask(taskId);
245
+ }
246
+ }
247
+ if (expired.length > 0) {
248
+ this.logger.info('Cleaned up expired tasks', { count: expired.length });
249
+ }
250
+ return expired;
251
+ }
252
+ }
253
+ // 默认导出
254
+ export default AutonomousEconomy;
255
+ //# sourceMappingURL=autonomous-economy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autonomous-economy.js","sourceRoot":"","sources":["../../src/core/autonomous-economy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiF5C,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,sBAAsB,GAAkB;IAC5C,YAAY,EAAE,CAAC;IACf,oBAAoB,EAAE,GAAG;IACzB,kBAAkB,EAAE,GAAG;IACvB,kBAAkB,EAAE,GAAG;IACvB,cAAc,EAAE,EAAE;IAClB,gBAAgB,EAAE,CAAC;CACpB,CAAC;AAEF,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAgB;IACtB,iBAAiB,CAAoB;IACrC,eAAe,CAAkB;IACjC,SAAS,GAAwB,EAAE,CAAC;IACpC,YAAY,GAAmC,IAAI,GAAG,EAAE,CAAC;IACzD,MAAM,CAAS;IAEvB,YACE,iBAAoC,EACpC,eAAgC,EAChC,SAAiC,EAAE;QAEnC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,MAAM,EAAE,CAAC;QACvD,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAiB;QAC1B,SAAS;QACT,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;YACvE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;QACrE,CAAC;QAED,OAAO;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE1C,WAAW;QACX,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1E,IAAI,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,4BAA4B,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;aAChG,CAAC;QACJ,CAAC;QAED,OAAO;QACP,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAClC,IAAI,CAAC,WAAW,EAChB,eAAe,IAAI,CAAC,MAAM,EAAE,EAC5B,sBAAsB,EACtB,CAAC,IAAI,CAAC,SAAS,CAChB,CAAC;QAEF,UAAU;QACV,MAAM,SAAS,GAAsB;YACnC,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,SAAS;YACpB,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC,SAAS;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,IAAiB;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC;QAEvD,OAAO;QACP,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;QAElD,QAAQ;QACR,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE7E,OAAO;YACL,QAAQ;YACR,QAAQ;YACR,SAAS;YACT,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAc,EAAE,UAAkB;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAE7B,UAAU;QACV,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACvF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;YAChC,MAAM;YACN,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACpC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAA2B;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAI,MAAM,GAAe;YACvB,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,CAAC;SACnB,CAAC;QAEF,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,SAAS;gBACZ,OAAO;gBACP,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBACxB,MAAM,GAAG,IAAI,CAAC,yBAAyB,CACrC,IAAI,EACJ,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,YAAY,CACpB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,eAAe;oBACf,MAAM,CAAC,cAAc,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;gBAC1E,CAAC;gBAED,QAAQ;gBACR,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAClC,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,cAAc,CACtB,CAAC;gBAEF,UAAU;gBACV,IAAI,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;oBAC/B,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAClC,IAAI,CAAC,WAAW,EAChB,UAAU,MAAM,CAAC,MAAM,EAAE,EACzB,MAAM,CAAC,eAAe,CACvB,CAAC;gBACJ,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;oBAC9C,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;iBACxC,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,SAAS;gBACZ,OAAO;gBACP,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAClC,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,KAAK,IAAI,aAAa,CAC9B,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBAChF,MAAM;YAER,KAAK,SAAS;gBACZ,OAAO;gBACP,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAClC,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,MAAM,EACb,cAAc,EACd,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAC5B,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5D,MAAM;YAER,KAAK,UAAU;gBACb,QAAQ;gBACR,IAAI,CAAC,iBAAiB,CAAC,eAAe,CACpC,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,KAAK,IAAI,eAAe,CAChC,CAAC;gBACF,MAAM;QACV,CAAC;QAED,KAAK;QACL,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;QAEnF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,yBAAyB,CACvB,IAAiB,EACjB,UAAkB,EAClB,YAA0B;QAE1B,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;QAEnD,qBAAqB;QACrB,MAAM,WAAW,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW;QACzD,MAAM,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAEpF,gCAAgC;QAChC,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvD,QAAQ;QACR,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,aAAa;YACb,eAAe,GAAG,aAAa,GAAG,GAAG,CAAC;QACxC,CAAC;QAED,OAAO;YACL,cAAc;YACd,cAAc;YACd,eAAe;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAc;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAE7B,SAAS;QACT,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC;QACpC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAClC,SAAS,CAAC,IAAI,CAAC,WAAW,EAC1B,UAAU,MAAM,EAAE,EAClB,MAAM,CACP,CAAC;QAEF,KAAK;QACL,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAE5E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACjC,MAAM;YACN,MAAM;SACP,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,eAAe;QAKb,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;aAC7D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC7B,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAE7C,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;YACpC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;YAClC,iBAAiB;SAClB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,SAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/C,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,OAAO;AACP,eAAe,iBAAiB,CAAC"}