@f2a/network 0.1.2 → 0.1.3

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 (136) hide show
  1. package/package.json +8 -1
  2. package/.github/workflows/ci.yml +0 -113
  3. package/.github/workflows/publish.yml +0 -60
  4. package/MONOREPO.md +0 -58
  5. package/SKILL.md +0 -137
  6. package/dist/adapters/openclaw.d.ts +0 -103
  7. package/dist/adapters/openclaw.d.ts.map +0 -1
  8. package/dist/adapters/openclaw.js +0 -297
  9. package/dist/adapters/openclaw.js.map +0 -1
  10. package/dist/core/connection-manager.d.ts +0 -80
  11. package/dist/core/connection-manager.d.ts.map +0 -1
  12. package/dist/core/connection-manager.js +0 -235
  13. package/dist/core/connection-manager.js.map +0 -1
  14. package/dist/core/connection-manager.test.d.ts +0 -2
  15. package/dist/core/connection-manager.test.d.ts.map +0 -1
  16. package/dist/core/connection-manager.test.js +0 -52
  17. package/dist/core/connection-manager.test.js.map +0 -1
  18. package/dist/core/identity.d.ts +0 -47
  19. package/dist/core/identity.d.ts.map +0 -1
  20. package/dist/core/identity.js +0 -130
  21. package/dist/core/identity.js.map +0 -1
  22. package/dist/core/identity.test.d.ts +0 -2
  23. package/dist/core/identity.test.d.ts.map +0 -1
  24. package/dist/core/identity.test.js +0 -43
  25. package/dist/core/identity.test.js.map +0 -1
  26. package/dist/core/serverless.d.ts +0 -155
  27. package/dist/core/serverless.d.ts.map +0 -1
  28. package/dist/core/serverless.js +0 -615
  29. package/dist/core/serverless.js.map +0 -1
  30. package/dist/daemon/webhook.test.d.ts +0 -2
  31. package/dist/daemon/webhook.test.d.ts.map +0 -1
  32. package/dist/daemon/webhook.test.js +0 -24
  33. package/dist/daemon/webhook.test.js.map +0 -1
  34. package/dist/protocol/messages.d.ts +0 -739
  35. package/dist/protocol/messages.d.ts.map +0 -1
  36. package/dist/protocol/messages.js +0 -188
  37. package/dist/protocol/messages.js.map +0 -1
  38. package/dist/protocol/messages.test.d.ts +0 -2
  39. package/dist/protocol/messages.test.d.ts.map +0 -1
  40. package/dist/protocol/messages.test.js +0 -55
  41. package/dist/protocol/messages.test.js.map +0 -1
  42. package/docs/F2A-PROTOCOL.md +0 -61
  43. package/docs/MOBILE_BOOTSTRAP_DESIGN.md +0 -126
  44. package/docs/a2a-lessons.md +0 -316
  45. package/docs/middleware-guide.md +0 -448
  46. package/docs/readme-update-checklist.md +0 -90
  47. package/docs/reputation-guide.md +0 -396
  48. package/docs/rfcs/001-reputation-system.md +0 -712
  49. package/docs/security-design.md +0 -247
  50. package/install.sh +0 -231
  51. package/packages/openclaw-adapter/README.md +0 -510
  52. package/packages/openclaw-adapter/openclaw.plugin.json +0 -106
  53. package/packages/openclaw-adapter/package.json +0 -40
  54. package/packages/openclaw-adapter/src/announcement-queue.test.ts +0 -449
  55. package/packages/openclaw-adapter/src/announcement-queue.ts +0 -403
  56. package/packages/openclaw-adapter/src/capability-detector.test.ts +0 -99
  57. package/packages/openclaw-adapter/src/capability-detector.ts +0 -183
  58. package/packages/openclaw-adapter/src/claim-handlers.test.ts +0 -974
  59. package/packages/openclaw-adapter/src/claim-handlers.ts +0 -482
  60. package/packages/openclaw-adapter/src/connector.business.test.ts +0 -583
  61. package/packages/openclaw-adapter/src/connector.ts +0 -795
  62. package/packages/openclaw-adapter/src/index.test.ts +0 -82
  63. package/packages/openclaw-adapter/src/index.ts +0 -18
  64. package/packages/openclaw-adapter/src/integration.e2e.test.ts +0 -829
  65. package/packages/openclaw-adapter/src/logger.ts +0 -51
  66. package/packages/openclaw-adapter/src/network-client.test.ts +0 -266
  67. package/packages/openclaw-adapter/src/network-client.ts +0 -251
  68. package/packages/openclaw-adapter/src/network-recovery.test.ts +0 -465
  69. package/packages/openclaw-adapter/src/node-manager.test.ts +0 -136
  70. package/packages/openclaw-adapter/src/node-manager.ts +0 -429
  71. package/packages/openclaw-adapter/src/plugin.test.ts +0 -439
  72. package/packages/openclaw-adapter/src/plugin.ts +0 -104
  73. package/packages/openclaw-adapter/src/reputation.test.ts +0 -221
  74. package/packages/openclaw-adapter/src/reputation.ts +0 -368
  75. package/packages/openclaw-adapter/src/task-guard.test.ts +0 -502
  76. package/packages/openclaw-adapter/src/task-guard.ts +0 -860
  77. package/packages/openclaw-adapter/src/task-queue.concurrency.test.ts +0 -462
  78. package/packages/openclaw-adapter/src/task-queue.edge-cases.test.ts +0 -284
  79. package/packages/openclaw-adapter/src/task-queue.persistence.test.ts +0 -408
  80. package/packages/openclaw-adapter/src/task-queue.ts +0 -668
  81. package/packages/openclaw-adapter/src/tool-handlers.test.ts +0 -906
  82. package/packages/openclaw-adapter/src/tool-handlers.ts +0 -574
  83. package/packages/openclaw-adapter/src/types.ts +0 -361
  84. package/packages/openclaw-adapter/src/webhook-pusher.test.ts +0 -188
  85. package/packages/openclaw-adapter/src/webhook-pusher.ts +0 -220
  86. package/packages/openclaw-adapter/src/webhook-server.test.ts +0 -580
  87. package/packages/openclaw-adapter/src/webhook-server.ts +0 -202
  88. package/packages/openclaw-adapter/tsconfig.json +0 -20
  89. package/src/cli/commands.test.ts +0 -157
  90. package/src/cli/commands.ts +0 -129
  91. package/src/cli/index.test.ts +0 -77
  92. package/src/cli/index.ts +0 -234
  93. package/src/core/autonomous-economy.test.ts +0 -291
  94. package/src/core/autonomous-economy.ts +0 -428
  95. package/src/core/e2ee-crypto.test.ts +0 -125
  96. package/src/core/e2ee-crypto.ts +0 -246
  97. package/src/core/f2a.test.ts +0 -269
  98. package/src/core/f2a.ts +0 -618
  99. package/src/core/p2p-network.test.ts +0 -199
  100. package/src/core/p2p-network.ts +0 -1432
  101. package/src/core/reputation-security.test.ts +0 -403
  102. package/src/core/reputation-security.ts +0 -562
  103. package/src/core/reputation.test.ts +0 -260
  104. package/src/core/reputation.ts +0 -576
  105. package/src/core/review-committee.test.ts +0 -380
  106. package/src/core/review-committee.ts +0 -401
  107. package/src/core/token-manager.test.ts +0 -133
  108. package/src/core/token-manager.ts +0 -140
  109. package/src/daemon/control-server.test.ts +0 -216
  110. package/src/daemon/control-server.ts +0 -292
  111. package/src/daemon/index.test.ts +0 -85
  112. package/src/daemon/index.ts +0 -89
  113. package/src/daemon/main.ts +0 -44
  114. package/src/daemon/start.ts +0 -29
  115. package/src/daemon/webhook.test.ts +0 -68
  116. package/src/daemon/webhook.ts +0 -105
  117. package/src/index.test.ts +0 -436
  118. package/src/index.ts +0 -72
  119. package/src/types/index.test.ts +0 -87
  120. package/src/types/index.ts +0 -341
  121. package/src/types/result.ts +0 -68
  122. package/src/utils/benchmark.ts +0 -237
  123. package/src/utils/logger.ts +0 -331
  124. package/src/utils/middleware.ts +0 -229
  125. package/src/utils/rate-limiter.ts +0 -207
  126. package/src/utils/signature.ts +0 -136
  127. package/src/utils/validation.ts +0 -186
  128. package/tests/docker/Dockerfile.node +0 -23
  129. package/tests/docker/Dockerfile.runner +0 -18
  130. package/tests/docker/docker-compose.test.yml +0 -73
  131. package/tests/integration/message-passing.test.ts +0 -109
  132. package/tests/integration/multi-node.test.ts +0 -92
  133. package/tests/integration/p2p-connection.test.ts +0 -83
  134. package/tests/integration/test-config.ts +0 -32
  135. package/tsconfig.json +0 -21
  136. package/vitest.config.ts +0 -26
@@ -1,247 +0,0 @@
1
- # F2A 安全设计文档
2
-
3
- **版本**: 0.3.1
4
- **更新日期**: 2026-03-02
5
- **状态**: 已实现
6
-
7
- ---
8
-
9
- ## 概述
10
-
11
- F2A 采用多层安全机制,确保 Agent 间通信的机密性、完整性和身份真实性。
12
-
13
- ## 安全架构
14
-
15
- ```
16
- ┌─────────────────────────────────────────────────────────────┐
17
- │ 应用层 (Application) │
18
- │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
19
- │ │ Messaging│ │ Skills │ │ Files │ │ Groups │ │
20
- │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
21
- ├───────┼─────────────┼─────────────┼─────────────┼──────────┤
22
- │ │ │ │ │ │
23
- │ ┌────┴─────────────┴─────────────┴─────────────┴─────┐ │
24
- │ │ 加密层 (E2E Encryption) │ │
25
- │ │ X25519 密钥交换 + AES-256-GCM │ │
26
- │ └────┬───────────────────────────────────────────────┘ │
27
- ├───────┼────────────────────────────────────────────────────┤
28
- │ │ │
29
- │ ┌────┴───────────────────────────────────────────────┐ │
30
- │ │ 身份层 (Identity) │ │
31
- │ │ Ed25519 签名 + Agent ID 绑定 │ │
32
- │ └────┬───────────────────────────────────────────────┘ │
33
- ├───────┼────────────────────────────────────────────────────┤
34
- │ │ │
35
- │ ┌────┴───────────────────────────────────────────────┐ │
36
- │ │ 传输层 (Transport) │ │
37
- │ │ TCP 直连 / WebRTC / UDP 发现 │ │
38
- │ └────────────────────────────────────────────────────┘ │
39
- └─────────────────────────────────────────────────────────────┘
40
- ```
41
-
42
- ---
43
-
44
- ## 1. 身份验证 (Identity)
45
-
46
- ### 1.1 Agent ID 与密钥绑定
47
-
48
- - Agent ID 由 Ed25519 公钥派生(格式:`f2a-xxxx-xxxx`)
49
- - 身份持久化保存在 `~/.f2a/identity.json`
50
- - 首次启动自动生成密钥对
51
-
52
- ```javascript
53
- // 身份文件结构
54
- {
55
- "agentId": "f2a-78c8-c55b",
56
- "displayName": "CatPuru",
57
- "publicKey": "-----BEGIN PUBLIC KEY-----...",
58
- "privateKey": "-----BEGIN PRIVATE KEY-----...",
59
- "createdAt": "2026-03-01T10:00:00.000Z"
60
- }
61
- ```
62
-
63
- ### 1.2 连接时的身份验证
64
-
65
- ```javascript
66
- // 挑战-响应协议
67
- {
68
- "type": "identity_challenge",
69
- "agentId": "f2a-xxx",
70
- "publicKey": "...",
71
- "challenge": "随机数",
72
- "timestamp": 1709000000000
73
- }
74
-
75
- // 签名响应
76
- {
77
- "type": "identity_response",
78
- "agentId": "f2a-xxx",
79
- "signature": "Ed25519签名(challenge + timestamp)"
80
- }
81
- ```
82
-
83
- ---
84
-
85
- ## 2. 端到端加密 (E2E Encryption)
86
-
87
- ### 2.1 密钥交换
88
-
89
- - 使用 X25519 进行 ECDH 密钥交换
90
- - 每次会话生成新的会话密钥
91
- - 前向保密(Forward Secrecy)
92
-
93
- ### 2.2 消息加密
94
-
95
- - 算法:AES-256-GCM
96
- - 每个消息包含:
97
- - 随机 IV (12 bytes)
98
- - 认证标签 (16 bytes)
99
- - 密文
100
-
101
- ```javascript
102
- // 加密消息格式
103
- {
104
- "type": "encrypted",
105
- "iv": "base64(12字节随机数)",
106
- "ciphertext": "base64(密文)",
107
- "tag": "base64(16字节认证标签)"
108
- }
109
- ```
110
-
111
- ---
112
-
113
- ## 3. 安全等级配置
114
-
115
- ```javascript
116
- const f2a = await F2A.create({
117
- security: {
118
- // low: 仅加密,信任局域网
119
- // medium: 加密 + 白名单(默认)
120
- // high: 加密 + 手动确认 + 签名验证
121
- level: 'medium',
122
-
123
- // 白名单(medium/high 有效)
124
- whitelist: ['f2a-agent-a', 'f2a-agent-b'],
125
-
126
- // 黑名单
127
- blacklist: ['f2a-malicious'],
128
-
129
- // 是否需要手动确认(high 强制 true)
130
- requireConfirmation: true,
131
-
132
- // 是否验证签名
133
- verifySignatures: true,
134
-
135
- // 速率限制
136
- rateLimit: {
137
- maxRequests: 10,
138
- windowMs: 60000 // 1分钟
139
- }
140
- }
141
- });
142
- ```
143
-
144
- ---
145
-
146
- ## 4. 防护措施
147
-
148
- ### 4.1 防重放攻击
149
-
150
- - 每个消息包含唯一 ID (UUID)
151
- - 时间戳有效期:5 分钟
152
- - 已处理消息 ID 缓存(最大 5000 条,LRU 清理)
153
-
154
- ```javascript
155
- // 消息格式
156
- {
157
- "type": "message",
158
- "id": "msg-uuid",
159
- "timestamp": 1709000000000,
160
- "content": "..."
161
- }
162
- ```
163
-
164
- ### 4.2 速率限制
165
-
166
- - 默认:10 请求/分钟
167
- - 超过限制自动断开连接
168
- - 定期清理过期记录
169
-
170
- ### 4.3 消息大小限制
171
-
172
- - 最大消息大小:1MB
173
- - 超过限制的消息直接丢弃
174
-
175
- ### 4.4 输入验证
176
-
177
- - 所有输入参数类型检查
178
- - 路径遍历防护(文件传输)
179
- - JSON 结构验证
180
-
181
- ---
182
-
183
- ## 5. 威胁防护对照表
184
-
185
- | 威胁 | 防护措施 | 实现状态 |
186
- |------|----------|----------|
187
- | 窃听 | AES-256-GCM 加密 | ✅ 已实现 |
188
- | 身份伪造 | Ed25519 签名验证 | ✅ 已实现 |
189
- | 中间人攻击 | ECDH 密钥交换 | ✅ 已实现 |
190
- | 重放攻击 | 消息 ID + 时间戳 | ✅ 已实现 |
191
- | DoS 攻击 | 速率限制 + 消息大小限制 | ✅ 已实现 |
192
- | 恶意连接 | 白名单 + 黑名单 | ✅ 已实现 |
193
- | 未授权访问 | 手动确认机制 | ✅ 已实现 |
194
-
195
- ---
196
-
197
- ## 6. 安全最佳实践
198
-
199
- ### 6.1 生产环境建议
200
-
201
- ```javascript
202
- const f2a = await F2A.create({
203
- security: {
204
- level: 'high',
205
- requireConfirmation: true,
206
- verifySignatures: true,
207
- whitelist: [], // 只接受已配对 Agent
208
- rateLimit: {
209
- maxRequests: 10,
210
- windowMs: 60000
211
- }
212
- }
213
- });
214
- ```
215
-
216
- ### 6.2 敏感操作确认
217
-
218
- - 首次连接需要手动确认
219
- - 文件传输需要接收方确认
220
- - 技能调用可以配置为需要确认
221
-
222
- ### 6.3 日志审计
223
-
224
- - 所有连接/断开事件记录
225
- - 消息发送/接收记录(DEBUG 级别)
226
- - 安全事件记录(WARN/ERROR 级别)
227
-
228
- ---
229
-
230
- ## 7. 已知限制
231
-
232
- 1. **UDP 发现广播**:发现消息未加密(仅包含公开信息)
233
- 2. **WebRTC 依赖**:需要 STUN/TURN 服务器(可配置)
234
- 3. **密钥存储**:私钥以明文存储在文件系统(依赖 OS 权限保护)
235
-
236
- ---
237
-
238
- ## 8. 更新记录
239
-
240
- | 日期 | 版本 | 变更 |
241
- |------|------|------|
242
- | 2026-03-02 | 0.3.1 | 更新文档,添加已实现功能说明 |
243
- | 2026-02-28 | 0.3.0 | 初始安全设计文档 |
244
-
245
- ---
246
-
247
- *文档维护:F2A Team*
package/install.sh DELETED
@@ -1,231 +0,0 @@
1
- #!/bin/bash
2
- #
3
- # F2A 一键安装脚本 (纯 P2P 版本)
4
- #
5
- # 使用方法:
6
- # curl -fsSL https://raw.githubusercontent.com/LuciusCao/F2A/main/install.sh | bash
7
- #
8
- # 或指定安装目录:
9
- # curl -fsSL https://raw.githubusercontent.com/LuciusCao/F2A/main/install.sh | bash -s -- --dir /path/to/install
10
-
11
- set -e
12
-
13
- # 颜色输出
14
- RED='\033[0;31m'
15
- GREEN='\033[0;32m'
16
- YELLOW='\033[1;33m'
17
- BLUE='\033[0;34m'
18
- NC='\033[0m' # No Color
19
-
20
- # 默认配置
21
- INSTALL_DIR="${HOME}/.openclaw/workspace/skills/f2a-network"
22
- REPO_URL="https://github.com/LuciusCao/F2A"
23
- P2P_PORT="9000"
24
-
25
- # 解析参数
26
- while [[ $# -gt 0 ]]; do
27
- case $1 in
28
- --dir)
29
- INSTALL_DIR="$2"
30
- shift 2
31
- ;;
32
- --port)
33
- P2P_PORT="$2"
34
- shift 2
35
- ;;
36
- --help)
37
- echo "F2A 纯 P2P Agent 网络安装脚本"
38
- echo ""
39
- echo "用法:"
40
- echo " curl -fsSL https://raw.githubusercontent.com/LuciusCao/F2A/main/install.sh | bash"
41
- echo ""
42
- echo "选项:"
43
- echo " --dir PATH 指定安装目录 (默认: ~/.openclaw/workspace/skills/f2a-network)"
44
- echo " --port PORT 指定 P2P 端口 (默认: 9000)"
45
- echo " --help 显示帮助"
46
- echo ""
47
- echo "示例:"
48
- echo " # 默认安装"
49
- echo " curl -fsSL https://raw.githubusercontent.com/LuciusCao/F2A/main/install.sh | bash"
50
- echo ""
51
- echo " # 指定端口"
52
- echo " curl -fsSL https://raw.githubusercontent.com/LuciusCao/F2A/main/install.sh | bash -s -- --port 9001"
53
- exit 0
54
- ;;
55
- *)
56
- echo "未知选项: $1"
57
- echo "使用 --help 查看帮助"
58
- exit 1
59
- ;;
60
- esac
61
- done
62
-
63
- echo -e "${BLUE}🚀 F2A 纯 P2P Agent 网络安装程序${NC}"
64
- echo -e "${BLUE} 无需服务器,局域网直连${NC}"
65
- echo ""
66
-
67
- # 检查 Node.js
68
- echo -e "${BLUE}📋 检查环境...${NC}"
69
- if ! command -v node &> /dev/null; then
70
- echo -e "${RED}❌ Node.js 未安装${NC}"
71
- echo ""
72
- echo "请先安装 Node.js 18+:"
73
- echo " https://nodejs.org/"
74
- echo ""
75
- echo "或使用包管理器:"
76
- echo " macOS: brew install node"
77
- echo " Ubuntu: sudo apt install nodejs npm"
78
- echo " CentOS: sudo yum install nodejs npm"
79
- exit 1
80
- fi
81
-
82
- NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
83
- if [ "$NODE_VERSION" -lt 18 ]; then
84
- echo -e "${RED}❌ Node.js 版本过低: $(node --version)${NC}"
85
- echo "需要 Node.js 18+"
86
- exit 1
87
- fi
88
-
89
- echo -e "${GREEN}✅ Node.js $(node --version)${NC}"
90
-
91
- # 检查 npm
92
- if ! command -v npm &> /dev/null; then
93
- echo -e "${RED}❌ npm 未安装${NC}"
94
- exit 1
95
- fi
96
-
97
- echo -e "${GREEN}✅ npm $(npm --version)${NC}"
98
- echo ""
99
-
100
- # 检查 git
101
- if ! command -v git &> /dev/null; then
102
- echo -e "${YELLOW}⚠️ git 未安装,将使用 curl 下载${NC}"
103
- USE_GIT=false
104
- else
105
- echo -e "${GREEN}✅ git $(git --version | cut -d' ' -f3)${NC}"
106
- USE_GIT=true
107
- fi
108
- echo ""
109
-
110
- # 创建安装目录
111
- echo -e "${BLUE}📁 创建安装目录...${NC}"
112
- if [ -d "${INSTALL_DIR}" ]; then
113
- echo -e "${YELLOW}⚠️ 目录已存在,将覆盖安装${NC}"
114
- rm -rf "${INSTALL_DIR}"
115
- fi
116
-
117
- mkdir -p "${INSTALL_DIR}"
118
- cd "${INSTALL_DIR}"
119
- echo -e "${GREEN}✅ 目录: ${INSTALL_DIR}${NC}"
120
- echo ""
121
-
122
- # 下载 F2A
123
- echo -e "${BLUE}⬇️ 下载 F2A...${NC}"
124
-
125
- if [ "$USE_GIT" = true ]; then
126
- # 使用 git clone
127
- git clone --depth 1 "${REPO_URL}.git" temp_clone 2>/dev/null || {
128
- echo -e "${YELLOW}⚠️ git clone 失败,尝试使用 curl...${NC}"
129
- USE_GIT=false
130
- }
131
-
132
- if [ "$USE_GIT" = true ]; then
133
- cp -r temp_clone/skill/* .
134
- rm -rf temp_clone
135
- echo -e "${GREEN}✅ 通过 git 下载成功${NC}"
136
- fi
137
- fi
138
-
139
- if [ "$USE_GIT" = false ]; then
140
- # 使用 curl 下载
141
- echo -e "${BLUE}📦 使用 curl 下载...${NC}"
142
-
143
- # 下载最新 release
144
- LATEST_URL="${REPO_URL}/archive/refs/heads/main.tar.gz"
145
-
146
- if curl -fsSL -o f2a.tar.gz "${LATEST_URL}"; then
147
- tar -xzf f2a.tar.gz --strip-components=2 "F2A-main/skill"
148
- rm -f f2a.tar.gz
149
- echo -e "${GREEN}✅ 通过 curl 下载成功${NC}"
150
- else
151
- echo -e "${RED}❌ 下载失败${NC}"
152
- echo ""
153
- echo "可能原因:"
154
- echo " 1. 无法连接到 GitHub"
155
- echo " 2. 网络不稳定"
156
- echo ""
157
- echo "解决方法:"
158
- echo " 1. 检查网络连接"
159
- echo " 2. 手动下载: git clone ${REPO_URL}"
160
- exit 1
161
- fi
162
- fi
163
-
164
- echo ""
165
-
166
- # 安装依赖
167
- echo -e "${BLUE}📚 安装依赖...${NC}"
168
- npm install --production
169
- echo -e "${GREEN}✅ 依赖安装完成${NC}"
170
- echo ""
171
-
172
- # 创建配置文件
173
- mkdir -p "${INSTALL_DIR}/memory/f2a"
174
- cat > "${INSTALL_DIR}/memory/f2a/config.json" << EOF
175
- {
176
- "p2pPort": ${P2P_PORT},
177
- "security": {
178
- "level": "medium",
179
- "requireConfirmation": true
180
- }
181
- }
182
- EOF
183
-
184
- # 创建启动脚本
185
- cat > "${INSTALL_DIR}/start.sh" << EOF
186
- #!/bin/bash
187
- cd "$(dirname "$0")"
188
- echo "🚀 启动 F2A 纯 P2P 网络..."
189
- echo " 端口: ${P2P_PORT}"
190
- echo ""
191
- node examples/serverless-example.js
192
- EOF
193
- chmod +x "${INSTALL_DIR}/start.sh"
194
-
195
- # 创建快速启动命令
196
- if [ -d "${HOME}/.local/bin" ]; then
197
- cat > "${HOME}/.local/bin/f2a" << EOF
198
- #!/bin/bash
199
- cd "${INSTALL_DIR}"
200
- ./start.sh
201
- EOF
202
- chmod +x "${HOME}/.local/bin/f2a"
203
- echo -e "${GREEN}✅ 已创建快捷命令: f2a${NC}"
204
- fi
205
-
206
- echo -e "${GREEN}🎉 F2A 安装完成!${NC}"
207
- echo ""
208
- echo "═══════════════════════════════════════"
209
- echo ""
210
- echo "📂 安装目录: ${INSTALL_DIR}"
211
- echo "🔌 P2P 端口: ${P2P_PORT}"
212
- echo ""
213
- echo "🚀 启动方式:"
214
- echo " cd ${INSTALL_DIR}"
215
- echo " ./start.sh"
216
- echo ""
217
- echo "或直接使用:"
218
- echo " f2a"
219
- echo ""
220
- echo "📖 使用方法:"
221
- echo " 1. 启动后自动发现局域网内的其他 Agent"
222
- echo " 2. 新连接需要手动确认"
223
- echo " 3. 使用命令行交互发送消息"
224
- echo ""
225
- echo "🔐 安全特性:"
226
- echo " - 端到端加密 (ECDH + AES-256-GCM)"
227
- echo " - Ed25519 身份签名验证"
228
- echo " - 白名单/黑名单机制"
229
- echo " - 速率限制防 DoS"
230
- echo ""
231
- echo "═══════════════════════════════════════"