@archipelagolab/lobi 1.0.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.
Files changed (315) hide show
  1. package/CHANGELOG.md +164 -0
  2. package/ENDOFFILE +0 -0
  3. package/EOF +0 -0
  4. package/LICENSE +21 -0
  5. package/SPEC-SUPPORT.md +116 -0
  6. package/YAMLEND +0 -0
  7. package/api.ts +18 -0
  8. package/archipelagolab-lobi-1.0.0.tgz +0 -0
  9. package/auth-presence.ts +56 -0
  10. package/channel-plugin-api.ts +3 -0
  11. package/cli-metadata.ts +11 -0
  12. package/contract-api.ts +17 -0
  13. package/docs/CHECKLIST.md +83 -0
  14. package/docs/FORK_SDK_GUIDE.md +279 -0
  15. package/helper-api.ts +3 -0
  16. package/index.test.ts +61 -0
  17. package/index.ts +65 -0
  18. package/openclaw.plugin.json +23 -0
  19. package/package.json +52 -0
  20. package/plugin-entry.handlers.runtime.ts +1 -0
  21. package/runtime-api.ts +54 -0
  22. package/runtime-heavy-api.ts +1 -0
  23. package/scripts/migrate-to-lobi.sh +72 -0
  24. package/secret-contract-api.ts +5 -0
  25. package/setup-entry.ts +13 -0
  26. package/src/account-selection.test.ts +124 -0
  27. package/src/account-selection.ts +226 -0
  28. package/src/actions.account-propagation.test.ts +251 -0
  29. package/src/actions.test.ts +251 -0
  30. package/src/actions.ts +336 -0
  31. package/src/approval-auth.test.ts +23 -0
  32. package/src/approval-auth.ts +25 -0
  33. package/src/approval-handler.runtime.test.ts +46 -0
  34. package/src/approval-handler.runtime.ts +400 -0
  35. package/src/approval-ids.ts +6 -0
  36. package/src/approval-native.test.ts +329 -0
  37. package/src/approval-native.ts +336 -0
  38. package/src/approval-reactions.test.ts +107 -0
  39. package/src/approval-reactions.ts +158 -0
  40. package/src/auth-precedence.ts +61 -0
  41. package/src/channel-account-paths.ts +92 -0
  42. package/src/channel.account-paths.test.ts +102 -0
  43. package/src/channel.directory.test.ts +601 -0
  44. package/src/channel.resolve.test.ts +38 -0
  45. package/src/channel.runtime.ts +16 -0
  46. package/src/channel.setup.test.ts +269 -0
  47. package/src/channel.ts +570 -0
  48. package/src/cli-metadata.ts +19 -0
  49. package/src/cli.test.ts +1015 -0
  50. package/src/cli.ts +1198 -0
  51. package/src/config-adapter.ts +41 -0
  52. package/src/config-schema.test.ts +90 -0
  53. package/src/config-schema.ts +114 -0
  54. package/src/directory-live.test.ts +200 -0
  55. package/src/directory-live.ts +238 -0
  56. package/src/doctor-contract.ts +287 -0
  57. package/src/doctor.test.ts +440 -0
  58. package/src/doctor.ts +262 -0
  59. package/src/env-vars.ts +92 -0
  60. package/src/exec-approval-resolver.test.ts +68 -0
  61. package/src/exec-approval-resolver.ts +23 -0
  62. package/src/exec-approvals.test.ts +483 -0
  63. package/src/exec-approvals.ts +290 -0
  64. package/src/group-mentions.ts +41 -0
  65. package/src/legacy-crypto-inspector-availability.test.ts +81 -0
  66. package/src/legacy-crypto-inspector-availability.ts +60 -0
  67. package/src/legacy-crypto.test.ts +234 -0
  68. package/src/legacy-crypto.ts +549 -0
  69. package/src/legacy-state.test.ts +86 -0
  70. package/src/legacy-state.ts +156 -0
  71. package/src/matrix/account-config.ts +150 -0
  72. package/src/matrix/accounts.readiness.test.ts +27 -0
  73. package/src/matrix/accounts.test.ts +757 -0
  74. package/src/matrix/accounts.ts +194 -0
  75. package/src/matrix/actions/client.test.ts +215 -0
  76. package/src/matrix/actions/client.ts +31 -0
  77. package/src/matrix/actions/devices.test.ts +114 -0
  78. package/src/matrix/actions/devices.ts +34 -0
  79. package/src/matrix/actions/limits.test.ts +15 -0
  80. package/src/matrix/actions/limits.ts +6 -0
  81. package/src/matrix/actions/messages.test.ts +289 -0
  82. package/src/matrix/actions/messages.ts +123 -0
  83. package/src/matrix/actions/pins.test.ts +74 -0
  84. package/src/matrix/actions/pins.ts +64 -0
  85. package/src/matrix/actions/polls.test.ts +71 -0
  86. package/src/matrix/actions/polls.ts +109 -0
  87. package/src/matrix/actions/profile.test.ts +109 -0
  88. package/src/matrix/actions/profile.ts +37 -0
  89. package/src/matrix/actions/reactions.test.ts +135 -0
  90. package/src/matrix/actions/reactions.ts +59 -0
  91. package/src/matrix/actions/room.test.ts +79 -0
  92. package/src/matrix/actions/room.ts +71 -0
  93. package/src/matrix/actions/summary.test.ts +87 -0
  94. package/src/matrix/actions/summary.ts +88 -0
  95. package/src/matrix/actions/types.ts +82 -0
  96. package/src/matrix/actions/verification.test.ts +105 -0
  97. package/src/matrix/actions/verification.ts +237 -0
  98. package/src/matrix/actions.ts +37 -0
  99. package/src/matrix/active-client.ts +26 -0
  100. package/src/matrix/async-lock.ts +18 -0
  101. package/src/matrix/backup-health.ts +115 -0
  102. package/src/matrix/client/config-runtime-api.ts +14 -0
  103. package/src/matrix/client/config-secret-input.runtime.ts +1 -0
  104. package/src/matrix/client/config.ts +982 -0
  105. package/src/matrix/client/create-client.test.ts +115 -0
  106. package/src/matrix/client/create-client.ts +101 -0
  107. package/src/matrix/client/env-auth.ts +6 -0
  108. package/src/matrix/client/file-sync-store.test.ts +265 -0
  109. package/src/matrix/client/file-sync-store.ts +289 -0
  110. package/src/matrix/client/logging.ts +123 -0
  111. package/src/matrix/client/migration-snapshot.runtime.ts +1 -0
  112. package/src/matrix/client/private-network-host.ts +56 -0
  113. package/src/matrix/client/runtime.ts +4 -0
  114. package/src/matrix/client/shared.test.ts +344 -0
  115. package/src/matrix/client/shared.ts +306 -0
  116. package/src/matrix/client/storage.test.ts +634 -0
  117. package/src/matrix/client/storage.ts +544 -0
  118. package/src/matrix/client/types.ts +50 -0
  119. package/src/matrix/client-bootstrap.test.ts +84 -0
  120. package/src/matrix/client-bootstrap.ts +164 -0
  121. package/src/matrix/client-resolver.test-helpers.ts +147 -0
  122. package/src/matrix/client.test.ts +1521 -0
  123. package/src/matrix/client.ts +23 -0
  124. package/src/matrix/config-paths.ts +31 -0
  125. package/src/matrix/config-update.test.ts +237 -0
  126. package/src/matrix/config-update.ts +291 -0
  127. package/src/matrix/credentials-read.ts +206 -0
  128. package/src/matrix/credentials-write.runtime.ts +26 -0
  129. package/src/matrix/credentials.test.ts +501 -0
  130. package/src/matrix/credentials.ts +95 -0
  131. package/src/matrix/deps.test.ts +74 -0
  132. package/src/matrix/deps.ts +225 -0
  133. package/src/matrix/device-health.test.ts +45 -0
  134. package/src/matrix/device-health.ts +31 -0
  135. package/src/matrix/direct-management.test.ts +350 -0
  136. package/src/matrix/direct-management.ts +347 -0
  137. package/src/matrix/direct-room.test.ts +61 -0
  138. package/src/matrix/direct-room.ts +128 -0
  139. package/src/matrix/draft-stream.test.ts +406 -0
  140. package/src/matrix/draft-stream.ts +216 -0
  141. package/src/matrix/encryption-guidance.ts +27 -0
  142. package/src/matrix/errors.ts +21 -0
  143. package/src/matrix/format.test.ts +340 -0
  144. package/src/matrix/format.ts +428 -0
  145. package/src/matrix/legacy-crypto-inspector.ts +95 -0
  146. package/src/matrix/media-errors.ts +20 -0
  147. package/src/matrix/media-text.ts +169 -0
  148. package/src/matrix/monitor/access-state.test.ts +45 -0
  149. package/src/matrix/monitor/access-state.ts +77 -0
  150. package/src/matrix/monitor/ack-config.test.ts +57 -0
  151. package/src/matrix/monitor/ack-config.ts +26 -0
  152. package/src/matrix/monitor/allowlist.test.ts +45 -0
  153. package/src/matrix/monitor/allowlist.ts +94 -0
  154. package/src/matrix/monitor/auto-join.test.ts +203 -0
  155. package/src/matrix/monitor/auto-join.ts +86 -0
  156. package/src/matrix/monitor/config.test.ts +197 -0
  157. package/src/matrix/monitor/config.ts +303 -0
  158. package/src/matrix/monitor/context-summary.ts +43 -0
  159. package/src/matrix/monitor/direct.test.ts +529 -0
  160. package/src/matrix/monitor/direct.ts +270 -0
  161. package/src/matrix/monitor/events.test.ts +1524 -0
  162. package/src/matrix/monitor/events.ts +213 -0
  163. package/src/matrix/monitor/handler.body-for-agent.test.ts +396 -0
  164. package/src/matrix/monitor/handler.group-history.test.ts +648 -0
  165. package/src/matrix/monitor/handler.media-failure.test.ts +267 -0
  166. package/src/matrix/monitor/handler.test-helpers.ts +308 -0
  167. package/src/matrix/monitor/handler.test.ts +2952 -0
  168. package/src/matrix/monitor/handler.thread-root-media.test.ts +82 -0
  169. package/src/matrix/monitor/handler.ts +1679 -0
  170. package/src/matrix/monitor/inbound-dedupe.test.ts +146 -0
  171. package/src/matrix/monitor/inbound-dedupe.ts +267 -0
  172. package/src/matrix/monitor/index.test.ts +920 -0
  173. package/src/matrix/monitor/index.ts +434 -0
  174. package/src/matrix/monitor/legacy-crypto-restore.test.ts +206 -0
  175. package/src/matrix/monitor/legacy-crypto-restore.ts +139 -0
  176. package/src/matrix/monitor/location.ts +100 -0
  177. package/src/matrix/monitor/media.test.ts +159 -0
  178. package/src/matrix/monitor/media.ts +119 -0
  179. package/src/matrix/monitor/mentions.test.ts +289 -0
  180. package/src/matrix/monitor/mentions.ts +177 -0
  181. package/src/matrix/monitor/reaction-events.test.ts +326 -0
  182. package/src/matrix/monitor/reaction-events.ts +187 -0
  183. package/src/matrix/monitor/recent-invite.test.ts +92 -0
  184. package/src/matrix/monitor/recent-invite.ts +30 -0
  185. package/src/matrix/monitor/replies.test.ts +265 -0
  186. package/src/matrix/monitor/replies.ts +136 -0
  187. package/src/matrix/monitor/reply-context.test.ts +276 -0
  188. package/src/matrix/monitor/reply-context.ts +92 -0
  189. package/src/matrix/monitor/room-history.test.ts +258 -0
  190. package/src/matrix/monitor/room-history.ts +301 -0
  191. package/src/matrix/monitor/room-info.test.ts +201 -0
  192. package/src/matrix/monitor/room-info.ts +126 -0
  193. package/src/matrix/monitor/rooms.test.ts +121 -0
  194. package/src/matrix/monitor/rooms.ts +52 -0
  195. package/src/matrix/monitor/route.test.ts +255 -0
  196. package/src/matrix/monitor/route.ts +178 -0
  197. package/src/matrix/monitor/runtime-api.ts +31 -0
  198. package/src/matrix/monitor/startup-verification.test.ts +294 -0
  199. package/src/matrix/monitor/startup-verification.ts +237 -0
  200. package/src/matrix/monitor/startup.test.ts +257 -0
  201. package/src/matrix/monitor/startup.ts +218 -0
  202. package/src/matrix/monitor/status.ts +111 -0
  203. package/src/matrix/monitor/sync-lifecycle.test.ts +224 -0
  204. package/src/matrix/monitor/sync-lifecycle.ts +91 -0
  205. package/src/matrix/monitor/task-runner.ts +38 -0
  206. package/src/matrix/monitor/thread-context.test.ts +149 -0
  207. package/src/matrix/monitor/thread-context.ts +108 -0
  208. package/src/matrix/monitor/threads.test.ts +68 -0
  209. package/src/matrix/monitor/threads.ts +85 -0
  210. package/src/matrix/monitor/types.ts +30 -0
  211. package/src/matrix/monitor/verification-events.ts +627 -0
  212. package/src/matrix/monitor/verification-utils.test.ts +47 -0
  213. package/src/matrix/monitor/verification-utils.ts +46 -0
  214. package/src/matrix/outbound-media-runtime.ts +1 -0
  215. package/src/matrix/poll-summary.ts +110 -0
  216. package/src/matrix/poll-types.test.ts +205 -0
  217. package/src/matrix/poll-types.ts +433 -0
  218. package/src/matrix/probe.runtime.ts +4 -0
  219. package/src/matrix/probe.test.ts +154 -0
  220. package/src/matrix/probe.ts +96 -0
  221. package/src/matrix/profile.test.ts +154 -0
  222. package/src/matrix/profile.ts +184 -0
  223. package/src/matrix/reaction-common.test.ts +96 -0
  224. package/src/matrix/reaction-common.ts +147 -0
  225. package/src/matrix/sdk/crypto-bootstrap.test.ts +505 -0
  226. package/src/matrix/sdk/crypto-bootstrap.ts +341 -0
  227. package/src/matrix/sdk/crypto-facade.test.ts +197 -0
  228. package/src/matrix/sdk/crypto-facade.ts +207 -0
  229. package/src/matrix/sdk/crypto-node.runtime.test.ts +27 -0
  230. package/src/matrix/sdk/crypto-node.runtime.ts +9 -0
  231. package/src/matrix/sdk/crypto-runtime.ts +11 -0
  232. package/src/matrix/sdk/decrypt-bridge.ts +356 -0
  233. package/src/matrix/sdk/event-helpers.test.ts +60 -0
  234. package/src/matrix/sdk/event-helpers.ts +71 -0
  235. package/src/matrix/sdk/http-client.test.ts +134 -0
  236. package/src/matrix/sdk/http-client.ts +87 -0
  237. package/src/matrix/sdk/idb-persistence-lock.ts +51 -0
  238. package/src/matrix/sdk/idb-persistence.lock-order.test.ts +108 -0
  239. package/src/matrix/sdk/idb-persistence.test-helpers.ts +88 -0
  240. package/src/matrix/sdk/idb-persistence.test.ts +149 -0
  241. package/src/matrix/sdk/idb-persistence.ts +283 -0
  242. package/src/matrix/sdk/logger.test.ts +25 -0
  243. package/src/matrix/sdk/logger.ts +108 -0
  244. package/src/matrix/sdk/read-response-with-limit.ts +19 -0
  245. package/src/matrix/sdk/recovery-key-store.test.ts +385 -0
  246. package/src/matrix/sdk/recovery-key-store.ts +430 -0
  247. package/src/matrix/sdk/transport.test.ts +161 -0
  248. package/src/matrix/sdk/transport.ts +344 -0
  249. package/src/matrix/sdk/types.ts +236 -0
  250. package/src/matrix/sdk/verification-manager.test.ts +509 -0
  251. package/src/matrix/sdk/verification-manager.ts +694 -0
  252. package/src/matrix/sdk/verification-status.ts +23 -0
  253. package/src/matrix/sdk.test.ts +2568 -0
  254. package/src/matrix/sdk.ts +1789 -0
  255. package/src/matrix/send/client.test.ts +174 -0
  256. package/src/matrix/send/client.ts +90 -0
  257. package/src/matrix/send/formatting.ts +189 -0
  258. package/src/matrix/send/media.ts +244 -0
  259. package/src/matrix/send/targets.test.ts +254 -0
  260. package/src/matrix/send/targets.ts +104 -0
  261. package/src/matrix/send/types.ts +134 -0
  262. package/src/matrix/send.test.ts +958 -0
  263. package/src/matrix/send.ts +609 -0
  264. package/src/matrix/session-store-metadata.ts +108 -0
  265. package/src/matrix/startup-abort.ts +44 -0
  266. package/src/matrix/sync-state.ts +27 -0
  267. package/src/matrix/target-ids.ts +102 -0
  268. package/src/matrix/thread-bindings-shared.ts +201 -0
  269. package/src/matrix/thread-bindings.test.ts +673 -0
  270. package/src/matrix/thread-bindings.ts +577 -0
  271. package/src/matrix-migration.runtime.ts +9 -0
  272. package/src/migration-config.test.ts +228 -0
  273. package/src/migration-config.ts +243 -0
  274. package/src/migration-snapshot-backup.ts +117 -0
  275. package/src/migration-snapshot.test.ts +184 -0
  276. package/src/migration-snapshot.ts +55 -0
  277. package/src/onboarding.resolve.test.ts +55 -0
  278. package/src/onboarding.test-harness.ts +158 -0
  279. package/src/onboarding.test.ts +665 -0
  280. package/src/onboarding.ts +773 -0
  281. package/src/outbound.test.ts +173 -0
  282. package/src/outbound.ts +78 -0
  283. package/src/plugin-entry.runtime.js +159 -0
  284. package/src/plugin-entry.runtime.test.ts +108 -0
  285. package/src/plugin-entry.runtime.ts +68 -0
  286. package/src/profile-update.ts +68 -0
  287. package/src/record-shared.ts +3 -0
  288. package/src/resolve-targets.test.ts +178 -0
  289. package/src/resolve-targets.ts +175 -0
  290. package/src/resolver.ts +21 -0
  291. package/src/runtime-api.ts +144 -0
  292. package/src/runtime.ts +7 -0
  293. package/src/secret-contract.ts +174 -0
  294. package/src/session-route.test.ts +315 -0
  295. package/src/session-route.ts +113 -0
  296. package/src/setup-bootstrap.ts +94 -0
  297. package/src/setup-config.ts +222 -0
  298. package/src/setup-contract.ts +89 -0
  299. package/src/setup-core.test.ts +326 -0
  300. package/src/setup-core.ts +50 -0
  301. package/src/setup-surface.ts +4 -0
  302. package/src/startup-maintenance.test.ts +227 -0
  303. package/src/startup-maintenance.ts +114 -0
  304. package/src/storage-paths.ts +92 -0
  305. package/src/test-helpers.ts +42 -0
  306. package/src/test-mocks.ts +55 -0
  307. package/src/test-runtime.ts +72 -0
  308. package/src/test-support/monitor-route-test-support.ts +8 -0
  309. package/src/tool-actions.runtime.ts +1 -0
  310. package/src/tool-actions.test.ts +422 -0
  311. package/src/tool-actions.ts +498 -0
  312. package/src/types.ts +230 -0
  313. package/test-api.ts +2 -0
  314. package/thread-bindings-runtime.ts +4 -0
  315. package/tsconfig.json +16 -0
@@ -0,0 +1,279 @@
1
+ # Fork matrix-js-sdk 完整指南
2
+
3
+ ## 概述
4
+
5
+ 将 Matrix 插件的 API 路径从 `/_matrix/` 修改为 `/_lobi/`,需要 Fork 官方的 matrix-js-sdk 并修改内部路径。
6
+
7
+ ## 步骤 1: Fork 官方仓库
8
+
9
+ ```bash
10
+ # 在你的 GitHub/GitLab 上 Fork 官方仓库
11
+ # 官方仓库: https://github.com/matrix-org/matrix-js-sdk
12
+
13
+ git clone https://github.com/YOUR_ORG/matrix-js-sdk.git lobi-js-sdk
14
+ cd lobi-js-sdk
15
+ git checkout v41.3.0 # 检出与当前插件兼容的版本
16
+ git checkout -b lobi-fork
17
+ ```
18
+
19
+ ## 步骤 2: 修改 SDK 内部路径
20
+
21
+ ### 2.1 关键文件清单
22
+
23
+ matrix-js-sdk v41.3.0 中需要修改的文件:
24
+
25
+ | 文件路径 | 路径数量 | 说明 |
26
+ |---------|---------|------|
27
+ | `src/client.ts` | ~150+ | MatrixClient 主类,包含 sync, login, register 等 |
28
+ | `src/http-api.ts` | ~20+ | HTTP 请求底层实现 |
29
+ | `src/sync.ts` | ~30+ | 同步相关 API |
30
+ | `src/definitions/*.ts` | ~50+ | API 端点定义(Client-Server API)|
31
+ | `src/crypto/backup.ts` | ~20+ | 密钥备份 API |
32
+ | `src/crypto/index.ts` | ~30+ | 加密相关 API |
33
+ | `src/embedded.ts` | ~10+ | Embedded 模式 API |
34
+ | `src/feature.ts` | ~5+ | 特性检测 API |
35
+ | `src/rust-crypto/*.ts` | ~40+ | Rust 加密实现 |
36
+
37
+ ### 2.2 自动替换脚本
38
+
39
+ 在 fork 的仓库根目录创建并执行:
40
+
41
+ ```bash
42
+ #!/bin/bash
43
+ # sdk-replace-paths.sh
44
+
45
+ echo "开始替换 _matrix 为 _lobi..."
46
+
47
+ # 替换 src 目录下所有 TypeScript 文件
48
+ find src -type f \( -name "*.ts" -o -name "*.js" \) -exec sed -i '' 's/\/_matrix\//\/_lobi\//g' {} +
49
+
50
+ # 替换 lib 目录(如果存在已编译的文件)
51
+ find lib -type f \( -name "*.ts" -o -name "*.js" -o -name "*.d.ts" \) -exec sed -i '' 's/\/_matrix\//\/_lobi\//g' {} + 2>/dev/null || true
52
+
53
+ # 替换 dist 目录(如果存在)
54
+ find dist -type f \( -name "*.ts" -o -name "*.js" -o -name "*.d.ts" \) -exec sed -i '' 's/\/_matrix\//\/_lobi\//g' {} + 2>/dev/null || true
55
+
56
+ echo "替换完成!"
57
+ echo ""
58
+ echo "验证替换结果:"
59
+ grep -r "\/_matrix\/" src --include="*.ts" | head -5 || echo "无残留的 _matrix 路径"
60
+ ```
61
+
62
+ ### 2.3 手动检查关键路径
63
+
64
+ 执行自动替换后,手动检查以下关键 API 路径是否正确替换:
65
+
66
+ ```bash
67
+ # 检查登录相关
68
+ grep -n "client/v3/login" src/client.ts
69
+
70
+ # 检查同步相关
71
+ grep -n "client/v3/sync" src/client.ts src/sync.ts
72
+
73
+ # 检查密钥相关
74
+ grep -n "client/v3/keys" src/crypto/*.ts
75
+
76
+ # 检查房间相关
77
+ grep -n "client/v3/rooms" src/client.ts
78
+
79
+ # 检查媒体相关
80
+ grep -n "media/v3" src/client.ts src/http-api.ts
81
+ ```
82
+
83
+ ## 步骤 3: 修改包名并发布
84
+
85
+ ### 3.1 修改 package.json
86
+
87
+ ```json
88
+ {
89
+ "name": "@your-org/lobi-js-sdk",
90
+ "version": "41.3.0-lobi.1",
91
+ "description": "Lobi SDK - Forked from matrix-js-sdk with modified API paths",
92
+ "repository": {
93
+ "type": "git",
94
+ "url": "https://github.com/YOUR_ORG/lobi-js-sdk.git"
95
+ },
96
+ "publishConfig": {
97
+ "access": "public"
98
+ }
99
+ }
100
+ ```
101
+
102
+ ### 3.2 构建并发布
103
+
104
+ ```bash
105
+ # 安装依赖
106
+ yarn install
107
+
108
+ # 构建 SDK
109
+ yarn build
110
+
111
+ # 运行测试(根据需要)
112
+ yarn test
113
+
114
+ # 发布到 npm
115
+ npm publish --access public
116
+
117
+ # 或使用私有 registry
118
+ npm publish --registry https://your-private-registry.com
119
+ ```
120
+
121
+ ## 步骤 4: 修改 Matrix 插件
122
+
123
+ ### 4.1 修改 package.json
124
+
125
+ ```json
126
+ {
127
+ "dependencies": {
128
+ "@your-org/lobi-js-sdk": "41.3.0-lobi.1",
129
+ "@matrix-org/matrix-sdk-crypto-nodejs": "^0.4.0",
130
+ "@matrix-org/matrix-sdk-crypto-wasm": "18.0.0"
131
+ }
132
+ }
133
+ ```
134
+
135
+ ### 4.2 修改所有导入语句
136
+
137
+ 需要修改的文件列表:
138
+ - `src/matrix/sdk.ts`
139
+ - `src/matrix/client/logging.ts`
140
+ - `src/matrix/client/file-sync-store.ts`
141
+ - `src/matrix/sdk/decrypt-bridge.ts`
142
+ - `src/matrix/sdk/verification-manager.ts`
143
+ - `src/matrix/sdk/crypto-bootstrap.ts`
144
+ - `src/matrix/sdk/recovery-key-store.ts`
145
+ - `src/matrix/sdk/event-helpers.ts`
146
+ - `src/matrix/sdk/crypto-facade.ts`
147
+
148
+ 将:
149
+ ```typescript
150
+ import { ... } from "matrix-js-sdk/lib/...";
151
+ ```
152
+
153
+ 改为:
154
+ ```typescript
155
+ import { ... } from "@your-org/lobi-js-sdk/lib/...";
156
+ ```
157
+
158
+ ### 4.3 修改硬编码路径
159
+
160
+ 即使使用 fork 的 SDK,插件中直接调用 HTTP 的端点仍需修改:
161
+
162
+ ```typescript
163
+ // src/matrix/client/config.ts
164
+ // 修改前
165
+ return (await tempClient.doRequest("GET", "/_matrix/client/v3/account/whoami")) as { ... };
166
+
167
+ // 修改后
168
+ return (await tempClient.doRequest("GET", "/_lobi/client/v3/account/whoami")) as { ... };
169
+ ```
170
+
171
+ 完整文件列表见 [MIGRATION_CHECKLIST.md](./MIGRATION_CHECKLIST.md)
172
+
173
+ ## 步骤 5: 测试验证
174
+
175
+ ### 5.1 安装依赖
176
+
177
+ ```bash
178
+ cd extensions/matrix
179
+ pnpm install
180
+ ```
181
+
182
+ ### 5.2 运行测试
183
+
184
+ ```bash
185
+ # 运行单元测试
186
+ pnpm test
187
+
188
+ # 运行 Matrix 特定测试
189
+ pnpm test src/matrix
190
+ ```
191
+
192
+ ### 5.3 手动验证
193
+
194
+ 1. 配置 Lobi 服务器地址
195
+ 2. 测试登录流程
196
+ 3. 测试消息收发
197
+ 4. 测试加密功能(如果支持)
198
+
199
+ ## 常见问题
200
+
201
+ ### Q: 为什么需要 Fork SDK 而不是在插件层拦截请求?
202
+
203
+ A: matrix-js-sdk 内部有大量硬编码的 `/_matrix/` 路径,分布在 50+ 个文件中。在插件层拦截需要重写 SDK 的 HTTP 层,复杂度与 Fork 相当。
204
+
205
+ ### Q: 如何同步上游更新?
206
+
207
+ A: 在 fork 的仓库中添加 upstream 远程:
208
+
209
+ ```bash
210
+ git remote add upstream https://github.com/matrix-org/matrix-js-sdk.git
211
+
212
+ # 同步更新
213
+ git fetch upstream
214
+ git checkout lobi-fork
215
+ git merge upstream/main
216
+
217
+ # 重新执行替换脚本
218
+ ./sdk-replace-paths.sh
219
+
220
+ # 发布新版本
221
+ npm version patch # 或 minor/major
222
+ npm publish
223
+ ```
224
+
225
+ ### Q: Lobi 协议与 Matrix 协议有何不同?
226
+
227
+ A: 除了 API 路径前缀从 `/_matrix/` 改为 `/_lobi/` 外,还需要确认:
228
+ - 认证方式是否相同(m.login.password)
229
+ - 同步协议是否相同(/sync)
230
+ - 加密协议是否兼容(E2E encryption)
231
+ - 媒体下载端点是否相同(/media/v3/download)
232
+
233
+ ### Q: 如何处理加密模块?
234
+
235
+ A: 加密模块 `@matrix-org/matrix-sdk-crypto-nodejs` 和 `@matrix-org/matrix-sdk-crypto-wasm` 也需要检查:
236
+ - 如果这些模块内部也调用 Matrix API,需要 Fork 并修改
237
+ - 如果仅处理加密逻辑而不直接调用 API,则无需修改
238
+
239
+ ```bash
240
+ # 检查加密模块是否包含硬编码路径
241
+ grep -r "_matrix" node_modules/@matrix-org/matrix-sdk-crypto-nodejs/ 2>/dev/null || echo "未找到 _matrix 路径"
242
+ ```
243
+
244
+ ## 替代方案
245
+
246
+ 如果 Fork SDK 维护成本过高,可以考虑:
247
+
248
+ ### 方案 B: 请求拦截器(部分实现)
249
+
250
+ 在 `src/matrix/sdk/transport.ts` 中添加路径重写:
251
+
252
+ ```typescript
253
+ function rewriteMatrixToLobi(endpoint: string): string {
254
+ return endpoint.replace(/^\/_matrix\//, '/_lobi/');
255
+ }
256
+
257
+ // 在 performMatrixRequest 中调用
258
+ const endpoint = rewriteMatrixToLobi(params.endpoint);
259
+ ```
260
+
261
+ 但此方法无法处理 SDK 内部直接构造的 URL。
262
+
263
+ ### 方案 C: 反向代理
264
+
265
+ 在 Lobi 服务器前部署反向代理,将 `/_matrix/` 路径重写为 `/_lobi/`:
266
+
267
+ ```nginx
268
+ server {
269
+ listen 443;
270
+ server_name lobi.example.com;
271
+
272
+ location /_matrix/ {
273
+ rewrite ^/_matrix/(.*)$ /_lobi/$1 break;
274
+ proxy_pass http://lobi-backend/;
275
+ }
276
+ }
277
+ ```
278
+
279
+ 此方案无需修改代码,但需要额外的运维成本。
package/helper-api.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./src/account-selection.js";
2
+ export * from "./src/env-vars.js";
3
+ export * from "./src/storage-paths.js";
package/index.test.ts ADDED
@@ -0,0 +1,61 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { createTestPluginApi } from "../../test/helpers/plugins/plugin-api.js";
3
+ import { registerMatrixCliMetadata } from "./cli-metadata.js";
4
+ import entry from "./index.js";
5
+
6
+ const cliMocks = vi.hoisted(() => ({
7
+ registerMatrixCli: vi.fn(),
8
+ }));
9
+
10
+ vi.mock("./src/cli.js", async () => {
11
+ const actual = await vi.importActual<typeof import("./src/cli.js")>("./src/cli.js");
12
+ return {
13
+ ...actual,
14
+ registerMatrixCli: cliMocks.registerMatrixCli,
15
+ };
16
+ });
17
+
18
+ describe("lobi plugin", () => {
19
+ it("registers lobi CLI through a descriptor-backed lazy registrar", async () => {
20
+ const registerCli = vi.fn();
21
+ const registerGatewayMethod = vi.fn();
22
+ const api = createTestPluginApi({
23
+ id: "lobi",
24
+ name: "Lobi",
25
+ source: "test",
26
+ config: {},
27
+ runtime: {} as never,
28
+ registrationMode: "cli-metadata",
29
+ registerCli,
30
+ registerGatewayMethod,
31
+ });
32
+
33
+ registerMatrixCliMetadata(api);
34
+
35
+ const registrar = registerCli.mock.calls[0]?.[0];
36
+ expect(registerCli).toHaveBeenCalledWith(expect.any(Function), {
37
+ descriptors: [
38
+ {
39
+ name: "lobi",
40
+ description: "Manage Lobi accounts, verification, devices, and profile state",
41
+ hasSubcommands: true,
42
+ },
43
+ ],
44
+ });
45
+ expect(typeof registrar).toBe("function");
46
+ expect(cliMocks.registerMatrixCli).not.toHaveBeenCalled();
47
+
48
+ const program = { command: vi.fn() };
49
+ const result = registrar?.({ program } as never);
50
+
51
+ await result;
52
+ expect(cliMocks.registerMatrixCli).toHaveBeenCalledWith({ program });
53
+ expect(registerGatewayMethod).not.toHaveBeenCalled();
54
+ });
55
+
56
+ it("keeps runtime bootstrap and CLI metadata out of setup-only registration", () => {
57
+ expect(entry.kind).toBe("bundled-channel-entry");
58
+ expect(entry.id).toBe("lobi");
59
+ expect(entry.name).toBe("Lobi");
60
+ });
61
+ });
package/index.ts ADDED
@@ -0,0 +1,65 @@
1
+ import { defineBundledChannelEntry } from "openclaw/plugin-sdk/channel-entry-contract";
2
+ import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
3
+ import { registerMatrixCliMetadata } from "./cli-metadata.js";
4
+
5
+ export default defineBundledChannelEntry({
6
+ id: "lobi",
7
+ name: "Lobi",
8
+ description: "Lobi - The official A2A (Agent-to-Agent) messaging platform by Lobisland. Designed from the ground up for AI-driven communication, enabling seamless interactions between intelligent agents.",
9
+ importMetaUrl: import.meta.url,
10
+ plugin: {
11
+ specifier: "./channel-plugin-api.js",
12
+ exportName: "matrixPlugin",
13
+ },
14
+ secrets: {
15
+ specifier: "./secret-contract-api.js",
16
+ exportName: "channelSecrets",
17
+ },
18
+ runtime: {
19
+ specifier: "./runtime-api.js",
20
+ exportName: "setMatrixRuntime",
21
+ },
22
+ registerCliMetadata: registerMatrixCliMetadata,
23
+ registerFull(api) {
24
+ // Initialize default Lobi configuration if not exists
25
+ const config = api.config.loadConfig();
26
+ if (!config.channels?.lobi) {
27
+ api.config.updateConfig({
28
+ channels: {
29
+ ...config.channels,
30
+ lobi: {
31
+ homeserver: "https://lobi.lobisland.com/",
32
+ },
33
+ },
34
+ });
35
+ api.logger.info?.("[lobi] Initialized default configuration with Lobisland homeserver.");
36
+ }
37
+
38
+ void import("./plugin-entry.handlers.runtime.js")
39
+ .then(({ ensureMatrixCryptoRuntime }) =>
40
+ ensureMatrixCryptoRuntime({ log: api.logger.info }).catch((err: unknown) => {
41
+ const message = formatErrorMessage(err);
42
+ api.logger.warn?.(`matrix: crypto runtime bootstrap failed: ${message}`);
43
+ }),
44
+ )
45
+ .catch((err: unknown) => {
46
+ const message = formatErrorMessage(err);
47
+ api.logger.warn?.(`matrix: failed loading crypto bootstrap runtime: ${message}`);
48
+ });
49
+
50
+ api.registerGatewayMethod("lobi.verify.recoveryKey", async (ctx) => {
51
+ const { handleVerifyRecoveryKey } = await import("./plugin-entry.handlers.runtime.js");
52
+ await handleVerifyRecoveryKey(ctx);
53
+ });
54
+
55
+ api.registerGatewayMethod("lobi.verify.bootstrap", async (ctx) => {
56
+ const { handleVerificationBootstrap } = await import("./plugin-entry.handlers.runtime.js");
57
+ await handleVerificationBootstrap(ctx);
58
+ });
59
+
60
+ api.registerGatewayMethod("lobi.verify.status", async (ctx) => {
61
+ const { handleVerificationStatus } = await import("./plugin-entry.handlers.runtime.js");
62
+ await handleVerificationStatus(ctx);
63
+ });
64
+ },
65
+ });
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "lobi",
3
+ "channels": ["lobi"],
4
+ "channelEnvVars": {
5
+ "lobi": [
6
+ "LOBI_HOMESERVER",
7
+ "LOBI_USER_ID",
8
+ "LOBI_ACCESS_TOKEN",
9
+ "LOBI_PASSWORD",
10
+ "LOBI_DEVICE_ID",
11
+ "LOBI_DEVICE_NAME",
12
+ "LOBI_OPS_HOMESERVER",
13
+ "LOBI_OPS_ACCESS_TOKEN",
14
+ "LOBI_OPS_DEVICE_ID",
15
+ "LOBI_OPS_DEVICE_NAME"
16
+ ]
17
+ },
18
+ "configSchema": {
19
+ "type": "object",
20
+ "additionalProperties": false,
21
+ "properties": {}
22
+ }
23
+ }
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@archipelagolab/lobi",
3
+ "version": "1.0.0",
4
+ "description": "Lobi - The official A2A (Agent-to-Agent) messaging platform by Lobisland. Built for AI, enabling seamless communication between intelligent agents.",
5
+ "type": "module",
6
+ "dependencies": {
7
+ "@matrix-org/matrix-sdk-crypto-nodejs": "^0.4.0",
8
+ "@matrix-org/matrix-sdk-crypto-wasm": "18.0.0",
9
+ "fake-indexeddb": "^6.2.5",
10
+ "markdown-it": "14.1.1",
11
+ "@archipelagolab/lobi-js-sdk": "1.0.2",
12
+ "music-metadata": "^11.12.3"
13
+ },
14
+ "devDependencies": {
15
+ "@openclaw/plugin-sdk": "*",
16
+ "openclaw": ">=2026.3.13"
17
+ },
18
+ "peerDependencies": {
19
+ "openclaw": ">=2026.3.13"
20
+ },
21
+ "peerDependenciesMeta": {
22
+ "openclaw": {
23
+ "optional": true
24
+ }
25
+ },
26
+ "openclaw": {
27
+ "extensions": [
28
+ "./index.ts"
29
+ ],
30
+ "setupEntry": "./setup-entry.ts",
31
+ "channel": {
32
+ "id": "lobi",
33
+ "label": "Lobi",
34
+ "selectionLabel": "Lobi",
35
+ "docsPath": "/channels/lobi",
36
+ "docsLabel": "lobi",
37
+ "blurb": "Lobi - Lobisland's official A2A messaging platform designed for AI agents. Install to enable intelligent agent communication.",
38
+ "order": 70,
39
+ "quickstartAllowFrom": true,
40
+ "persistedAuthState": {
41
+ "specifier": "./auth-presence",
42
+ "exportName": "hasAnyLobiAuth"
43
+ }
44
+ },
45
+ "install": {
46
+ "npmSpec": "@archipelagolab/lobi",
47
+ "defaultChoice": "npm",
48
+ "minHostVersion": ">=2026.3.13",
49
+ "allowInvalidConfigRecovery": true
50
+ }
51
+ }
52
+ }
@@ -0,0 +1 @@
1
+ export * from "./src/plugin-entry.runtime.ts";
package/runtime-api.ts ADDED
@@ -0,0 +1,54 @@
1
+ // Keep the external runtime API light so Jiti callers can resolve Matrix config
2
+ // helpers without traversing the full plugin-sdk/runtime graph or bootstrapping
3
+ // matrix-js-sdk during plain runtime-api import.
4
+ export * from "./src/auth-precedence.js";
5
+ export {
6
+ requiresExplicitMatrixDefaultAccount,
7
+ resolveMatrixDefaultOrOnlyAccountId,
8
+ } from "./src/account-selection.js";
9
+ export * from "./src/account-selection.js";
10
+ export * from "./src/env-vars.js";
11
+ export * from "./src/storage-paths.js";
12
+ export { ensureMatrixSdkInstalled, isMatrixSdkAvailable } from "./src/matrix/deps.js";
13
+ export {
14
+ assertHttpUrlTargetsPrivateNetwork,
15
+ closeDispatcher,
16
+ createPinnedDispatcher,
17
+ resolvePinnedHostnameWithPolicy,
18
+ ssrfPolicyFromDangerouslyAllowPrivateNetwork,
19
+ ssrfPolicyFromAllowPrivateNetwork,
20
+ type LookupFn,
21
+ type SsrFPolicy,
22
+ } from "openclaw/plugin-sdk/ssrf-runtime";
23
+ export {
24
+ setMatrixThreadBindingIdleTimeoutBySessionKey,
25
+ setMatrixThreadBindingMaxAgeBySessionKey,
26
+ } from "./src/matrix/thread-bindings-shared.js";
27
+ export { setMatrixRuntime } from "./src/runtime.js";
28
+ export { writeJsonFileAtomically } from "openclaw/plugin-sdk/json-store";
29
+ export type {
30
+ ChannelDirectoryEntry,
31
+ ChannelMessageActionContext,
32
+ OpenClawConfig,
33
+ PluginRuntime,
34
+ RuntimeLogger,
35
+ RuntimeEnv,
36
+ WizardPrompter,
37
+ } from "openclaw/plugin-sdk/matrix-runtime-shared";
38
+ export { formatZonedTimestamp } from "openclaw/plugin-sdk/matrix-runtime-shared";
39
+
40
+ export function chunkTextForOutbound(text: string, limit: number): string[] {
41
+ const chunks: string[] = [];
42
+ let remaining = text;
43
+ while (remaining.length > limit) {
44
+ const window = remaining.slice(0, limit);
45
+ const splitAt = Math.max(window.lastIndexOf("\n"), window.lastIndexOf(" "));
46
+ const breakAt = splitAt > 0 ? splitAt : limit;
47
+ chunks.push(remaining.slice(0, breakAt).trimEnd());
48
+ remaining = remaining.slice(breakAt).trimStart();
49
+ }
50
+ if (remaining.length > 0 || text.length === 0) {
51
+ chunks.push(remaining);
52
+ }
53
+ return chunks;
54
+ }
@@ -0,0 +1 @@
1
+ export * from "./src/matrix-migration.runtime.js";
@@ -0,0 +1,72 @@
1
+ #!/bin/bash
2
+ # migrate-to-lobi.sh
3
+ # 将 Matrix 插件从 _matrix 路径迁移到 _lobi 路径
4
+
5
+ set -e
6
+
7
+ echo "=== Matrix to Lobi 迁移脚本 ==="
8
+ echo ""
9
+
10
+ # 颜色输出
11
+ RED='\033[0;31m'
12
+ GREEN='\033[0;32m'
13
+ YELLOW='\033[1;33m'
14
+ NC='\033[0m' # No Color
15
+
16
+ # 检查是否在正确的目录
17
+ if [ ! -f "package.json" ] || [ ! -d "src" ]; then
18
+ echo -e "${RED}错误: 请在 extensions/matrix 目录下运行此脚本${NC}"
19
+ exit 1
20
+ fi
21
+
22
+ echo -e "${YELLOW}步骤 1: 修改 package.json 使用 Fork 的 SDK${NC}"
23
+ # 备份原文件
24
+ cp package.json package.json.backup
25
+ # 替换依赖名称
26
+ sed -i '' 's/"matrix-js-sdk": "41.3.0"/"@your-org\/lobi-js-sdk": "41.3.0-lobi.1"/' package.json
27
+ echo -e "${GREEN}✓ package.json 已修改${NC}"
28
+
29
+ echo ""
30
+ echo -e "${YELLOW}步骤 2: 替换源码中的导入路径${NC}"
31
+ # 替换所有 matrix-js-sdk 导入为 @your-org/lobi-js-sdk
32
+ find src -type f -name "*.ts" ! -name "*.test.ts" -exec sed -i '' 's/from "matrix-js-sdk/from "@your-org\/lobi-js-sdk/g' {} +
33
+ find src -type f -name "*.ts" ! -name "*.test.ts" -exec sed -i '' "s/from 'matrix-js-sdk/from '@your-org\/lobi-js-sdk/g" {} +
34
+ echo -e "${GREEN}✓ 导入路径已替换${NC}"
35
+
36
+ echo ""
37
+ echo -e "${YELLOW}步骤 3: 替换硬编码的 _matrix API 路径${NC}"
38
+ # 替换所有硬编码的 _matrix 路径为 _lobi
39
+ find src -type f -name "*.ts" ! -name "*.test.ts" -exec sed -i '' 's/\/_matrix\//\/_lobi\//g' {} +
40
+ echo -e "${GREEN}✓ API 路径已替换${NC}"
41
+
42
+ echo ""
43
+ echo -e "${YELLOW}步骤 4: 验证修改${NC}"
44
+ echo "检查是否还有残留的 matrix-js-sdk 引用:"
45
+ REMAINING=$(grep -r "matrix-js-sdk" src --include="*.ts" ! --include="*.test.ts" | wc -l)
46
+ if [ "$REMAINING" -gt 0 ]; then
47
+ echo -e "${YELLOW}警告: 发现 $REMAINING 处残留的 matrix-js-sdk 引用:${NC}"
48
+ grep -r "matrix-js-sdk" src --include="*.ts" ! --include="*.test.ts"
49
+ else
50
+ echo -e "${GREEN}✓ 无残留的 matrix-js-sdk 引用${NC}"
51
+ fi
52
+
53
+ echo ""
54
+ echo "检查是否还有残留的 _matrix 路径:"
55
+ REMAINING_MATRIX=$(grep -r "\/_matrix\/" src --include="*.ts" ! --include="*.test.ts" | wc -l)
56
+ if [ "$REMAINING_MATRIX" -gt 0 ]; then
57
+ echo -e "${YELLOW}警告: 发现 $REMAINING_MATRIX 处残留的 _matrix 路径:${NC}"
58
+ grep -r "\/_matrix\/" src --include="*.ts" ! --include="*.test.ts"
59
+ else
60
+ echo -e "${GREEN}✓ 无残留的 _matrix 路径${NC}"
61
+ fi
62
+
63
+ echo ""
64
+ echo -e "${GREEN}=== 迁移完成!===${NC}"
65
+ echo ""
66
+ echo "下一步操作:"
67
+ echo "1. 确保已发布 @your-org/lobi-js-sdk 到 npm"
68
+ echo "2. 运行 pnpm install 安装新依赖"
69
+ echo "3. 运行 pnpm build 构建插件"
70
+ echo "4. 运行测试验证功能"
71
+ echo ""
72
+ echo "如需恢复,请执行: mv package.json.backup package.json"
@@ -0,0 +1,5 @@
1
+ export {
2
+ channelSecrets,
3
+ collectRuntimeConfigAssignments,
4
+ secretTargetRegistryEntries,
5
+ } from "./src/secret-contract.js";
package/setup-entry.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { defineBundledChannelSetupEntry } from "openclaw/plugin-sdk/channel-entry-contract";
2
+
3
+ export default defineBundledChannelSetupEntry({
4
+ importMetaUrl: import.meta.url,
5
+ plugin: {
6
+ specifier: "./channel-plugin-api.js",
7
+ exportName: "matrixPlugin",
8
+ },
9
+ secrets: {
10
+ specifier: "./secret-contract-api.js",
11
+ exportName: "channelSecrets",
12
+ },
13
+ });