@agentunion/kite 1.4.0 → 1.6.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 (718) hide show
  1. package/.claude/skills/kite/checklists/feature-checklist.md +496 -0
  2. package/.claude/skills/kite/references/event-patterns.md +180 -0
  3. package/.claude/skills/kite/references/health-check.md +202 -0
  4. package/.claude/skills/kite/references/http-service.md +199 -0
  5. package/.claude/skills/kite/references/module-md-spec.md +172 -0
  6. package/.claude/skills/kite/references/multi-connection.md +147 -0
  7. package/.claude/skills/kite/references/rpc-patterns.md +199 -0
  8. package/.claude/skills/kite/references/shutdown-sequence.md +146 -0
  9. package/.claude/skills/kite/references/stdin-protocol.md +147 -0
  10. package/.claude/skills/kite/references/test-center-integration.md +178 -0
  11. package/.claude/skills/kite/references/ws-lifecycle.md +301 -0
  12. package/.claude/skills/kite/skill.md +272 -0
  13. package/.claude/skills/kite/templates/go/README.md +20 -0
  14. package/.claude/skills/kite/templates/node/entry.js +134 -0
  15. package/.claude/skills/kite/templates/node/module.md +16 -0
  16. package/.claude/skills/kite/templates/node/server.js +351 -0
  17. package/.claude/skills/kite/templates/node/server_http.js +90 -0
  18. package/.claude/skills/kite/templates/python/entry.py +425 -0
  19. package/.claude/skills/kite/templates/python/module.md +26 -0
  20. package/.claude/skills/kite/templates/python/server.py +447 -0
  21. package/.claude/skills/kite/templates/python/server_http.py +433 -0
  22. package/CHANGELOG.md +102 -0
  23. package/cli.js +78 -5
  24. package/core/dependency_checker.py +250 -0
  25. package/core/env_checker.py +586 -0
  26. package/dependencies_lock.json +128 -0
  27. package/docs/05-/347/237/255/344/277/241/350/256/244/350/257/201/344/270/216/347/224/250/346/210/267/344/277/241/346/201/257/346/216/245/345/217/243/346/226/207/346/241/243.md +507 -0
  28. package/docs/ACP/345/215/217/350/256/256/345/205/274/345/256/271/346/226/271/346/241/210.md +138 -0
  29. package/docs/CI/344/270/216AI/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/346/226/271/346/241/210.md +75 -0
  30. package/docs/CLI/345/274/200/345/217/221/350/256/241/345/210/222.md +595 -0
  31. package/docs/ClaudeCode/350/277/234/347/250/213/345/215/217/344/275/234/347/263/273/347/273/237-/346/212/200/346/234/257/350/257/204/344/274/260.md +535 -0
  32. package/docs/ClaudeCode/350/277/234/347/250/213/345/215/217/344/275/234/347/263/273/347/273/237/350/256/276/350/256/241.md +631 -0
  33. package/docs/Evol-App/344/275/277/347/224/250KernelClient/346/224/271/351/200/240/345/256/214/346/210/220.md +342 -0
  34. package/docs/Evol/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/346/246/202/350/246/201.md +604 -0
  35. package/docs/Evol/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/350/256/276/350/256/241.md +1708 -0
  36. package/docs/Evol/346/250/241/345/235/227/350/256/276/350/256/241/346/226/271/346/241/210.md +1154 -0
  37. package/docs/Evol/351/241/265/351/235/242/346/217/222/344/273/266/345/214/226-Evol/346/250/241/345/235/227/345/256/236/346/226/275/346/214/207/345/215/227.md +403 -0
  38. package/docs/Evol/351/241/265/351/235/242/346/217/222/344/273/266/345/214/226-/345/244/226/351/203/250/346/250/241/345/235/227/346/216/245/345/205/245/346/214/207/345/215/227.md +468 -0
  39. package/docs/HTTP-RPC/350/277/201/347/247/273/345/210/260WebSocket/350/256/241/345/210/222.md +318 -0
  40. package/docs/INDEX.md +388 -0
  41. package/docs/KITE_DOCS_GUIDE.md +33 -0
  42. package/docs/Kernel-Client-Kite-Token/346/224/257/346/214/201/345/256/236/346/226/275/345/256/214/346/210/220.md +330 -0
  43. package/docs/Kernel/344/270/273/345/212/250Ping/346/234/272/345/210/266-/346/255/243/347/241/256/345/256/236/347/216/260.md +235 -0
  44. package/docs/Kernel/344/270/273/345/212/250Ping/346/234/272/345/210/266/345/256/236/346/226/275/346/200/273/347/273/223.md +204 -0
  45. package/docs/Kite/345/256/211/350/243/205/351/227/256/351/242/230/350/247/243/345/206/263/346/226/271/346/241/210.md +362 -0
  46. package/docs/Kite/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/350/256/276/350/256/241-/347/273/210/346/236/201/347/233/256/346/240/207.md +721 -0
  47. package/docs/Kite/346/216/247/345/210/266/345/217/260/347/273/237/344/270/200WebSocket/346/224/271/351/200/240/346/226/271/346/241/210.md +821 -0
  48. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/01-/346/241/206/346/236/266/345/256/232/344/275/215.md +12 -0
  49. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/02-/346/240/270/345/277/203/346/246/202/345/277/265.md +341 -0
  50. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/03-/347/263/273/347/273/237/346/236/266/346/236/204.md +257 -0
  51. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/04-/346/250/241/345/235/227/350/247/204/350/214/203.md +263 -0
  52. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/05-/346/240/270/345/277/203/346/265/201/347/250/213-/346/226/260/347/211/210.md +267 -0
  53. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/05-/346/240/270/345/277/203/346/265/201/347/250/213.md +149 -0
  54. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/06-/347/233/256/345/275/225/347/273/223/346/236/204.md +231 -0
  55. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/07-/346/225/260/346/215/256/346/250/241/345/236/213.md +68 -0
  56. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/08-/346/211/251/345/261/225/346/200/247.md +34 -0
  57. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/09-/344/270/216/345/205/267/344/275/223/345/272/224/347/224/250/347/232/204/345/205/263/347/263/273.md +22 -0
  58. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/README.md +46 -0
  59. package/docs/Kite/347/263/273/347/273/237/345/220/257/345/212/250/346/265/201/347/250/213.md +567 -0
  60. package/docs/Launcher/345/220/257/345/212/250/345/231/250/346/226/207/346/241/243.md +745 -0
  61. package/docs/Polyglot/350/277/220/350/241/214/346/227/266/344/270/216Clawdbot/345/205/274/345/256/271/346/200/247/350/256/276/350/256/241.md +321 -0
  62. package/docs/Redis/344/270/216/346/250/241/345/235/227/345/244/232/345/256/236/344/276/213/346/226/271/346/241/210.md +438 -0
  63. package/docs/Relay-Kite-Token/350/256/244/350/257/201/345/256/236/346/226/275/345/256/214/346/210/220.md +178 -0
  64. package/docs/Relay-Token/346/235/203/351/231/220/351/205/215/347/275/256/351/252/214/350/257/201.md +113 -0
  65. package/docs/Watchdog/345/201/245/345/272/267/346/243/200/346/237/245/344/270/216WebSocket-Ping/346/234/272/345/210/266/345/210/206/346/236/220.md +367 -0
  66. package/docs/Watchdog/350/265/204/346/272/220/347/233/221/346/216/247/347/255/226/347/225/245.md +92 -0
  67. package/docs/WebSocket/346/216/245/346/224/266/345/276/252/347/216/257/346/255/273/351/224/201/351/230/262/350/214/203/350/247/204/350/214/203.md +357 -0
  68. package/docs/WebSocket/350/277/236/346/216/245/351/237/247/346/200/247/344/270/216/351/207/215/350/277/236/346/234/272/345/210/266/345/256/214/346/225/264/346/226/271/346/241/210.md +531 -0
  69. package/docs/WebSocket/350/277/236/346/216/245/351/237/247/346/200/247/346/226/271/346/241/210.md +169 -0
  70. package/docs/WebSocket/351/207/215/350/277/236/346/234/272/345/210/266/346/265/213/350/257/225/346/212/245/345/221/212.md +169 -0
  71. package/docs/WebSocket/351/207/215/350/277/236/351/200/200/351/201/277/346/234/272/345/210/266/346/226/271/346/241/210.md +394 -0
  72. package/docs/Web/346/250/241/345/235/227/344/270/216Evol/346/250/241/345/235/227/351/207/215/346/236/204/345/210/206/346/236/220.md +521 -0
  73. package/docs/audit-api-guide.md +68 -0
  74. package/docs/audit-module-design.md +315 -0
  75. package/docs/audit-module-implementation-summary.md +149 -0
  76. package/docs/llm-context-design.md +52 -0
  77. package/docs/llm-test-enhancement-plan.md +970 -0
  78. package/docs/logs-api-guide.md +42 -0
  79. package/docs/npm/345/214/205Python/347/216/257/345/242/203/347/256/241/347/220/206/346/226/271/346/241/210.md +302 -0
  80. package/docs/npm/345/217/221/345/270/203/344/270/216CLI/344/275/277/347/224/250/346/214/207/345/215/227.md +245 -0
  81. package/docs/stdio/344/270/216/347/253/257/345/217/243/345/217/221/347/216/260/351/207/215/346/236/204.md +480 -0
  82. package/docs/web/346/250/241/345/235/227/344/270/255/350/275/254/346/234/215/345/212/241/350/256/276/350/256/241/346/226/271/346/241/210.md +449 -0
  83. package/docs//344/272/213/344/273/266/345/244/204/347/220/206/346/234/272/345/210/266.md +388 -0
  84. package/docs//344/272/213/344/273/266/345/244/204/347/220/206/350/247/204/350/214/203.md +113 -0
  85. package/docs//344/272/213/344/273/266/350/256/242/351/230/205/351/200/232/351/205/215/347/254/246/350/247/204/350/214/203.md +256 -0
  86. package/docs//344/272/213/344/273/266/351/230/237/345/210/227/345/274/271/346/200/247/347/256/241/347/220/206.md +449 -0
  87. package/docs//344/272/244/344/272/222/345/274/217/347/273/210/347/253/257/346/216/247/345/210/266/346/226/271/346/241/210.md +301 -0
  88. package/docs//344/273/243/347/220/206/345/220/257/345/212/250/345/231/250/344/270/216/345/256/271/345/231/250/345/214/226.md +140 -0
  89. package/docs//344/273/243/347/240/201/347/273/237/350/256/241/345/267/245/345/205/267/344/275/277/347/224/250/350/257/264/346/230/216.md +217 -0
  90. package/docs//344/274/230/351/233/205/351/200/200/345/207/272/350/247/204/350/214/203.md +362 -0
  91. package/docs//344/276/235/350/265/226/347/256/241/347/220/206/350/257/264/346/230/216.md +141 -0
  92. package/docs//344/277/256/345/244/215/346/235/203/351/231/220/351/227/256/351/242/230-evol-RPC/346/235/203/351/231/220.md +268 -0
  93. package/docs//345/210/240/351/231/244kernel-client-example/345/256/214/346/210/220.md +309 -0
  94. package/docs//345/210/240/351/231/244ws-management/345/256/214/346/210/220.md +418 -0
  95. package/docs//345/220/257/345/212/250/344/274/230/345/214/226/346/226/271/346/241/210.md +522 -0
  96. package/docs//345/220/257/345/212/250/344/276/235/350/265/226/344/270/216/346/216/222/345/272/217.md +105 -0
  97. package/docs//345/256/211/350/243/205/350/204/232/346/234/254/345/274/200/345/217/221/346/226/207/346/241/243.md +643 -0
  98. package/docs//345/256/214/346/225/264/345/220/257/345/212/250/346/265/201/347/250/213/350/256/276/350/256/241.md +452 -0
  99. package/docs//345/256/236/347/216/260/350/247/204/345/210/222.md +195 -0
  100. package/docs//345/277/203/350/267/263/346/234/272/345/210/266/351/207/215/346/236/204/346/200/273/347/273/223.md +166 -0
  101. package/docs//346/217/241/346/211/213/350/256/244/350/257/201/346/226/271/346/241/210-/345/256/211/345/205/250/345/256/241/346/237/245.md +176 -0
  102. package/docs//346/217/241/346/211/213/350/256/244/350/257/201/346/226/271/346/241/210.md +908 -0
  103. package/docs//346/226/207/346/241/243/346/233/264/346/226/260/346/270/205/345/215/225.md +83 -0
  104. package/docs//346/227/245/345/277/227/344/270/216/345/274/202/345/270/270/345/244/204/347/220/206/350/247/204/350/214/203.md +829 -0
  105. package/docs//346/227/245/345/277/227/350/260/203/350/257/225/345/256/236/346/210/230/346/214/207/345/215/227.md +25 -0
  106. package/docs//346/236/266/346/236/204/345/200/237/351/211/264/346/214/207/345/215/227.md +977 -0
  107. package/docs//346/236/266/346/236/204/346/224/271/351/200/240-/345/256/214/346/210/220/346/200/273/347/273/223.md +440 -0
  108. package/docs//346/236/266/346/236/204/347/216/260/347/212/266/344/270/216/347/273/210/346/236/201/347/233/256/346/240/207/345/257/271/346/257/224/345/210/206/346/236/220.md +508 -0
  109. package/docs//346/250/241/345/235/227/345/244/232/350/277/236/346/216/245/346/216/247/345/210/266/347/255/226/347/225/245.md +220 -0
  110. package/docs//346/250/241/345/235/227/345/256/211/350/243/205/346/234/272/345/210/266/350/256/276/350/256/241.md +500 -0
  111. package/docs//346/250/241/345/235/227/345/274/200/345/217/221/346/214/207/345/215/227.md +1824 -0
  112. package/docs//346/250/241/345/235/227/347/203/255/346/233/264/346/226/260.md +89 -0
  113. package/docs//346/250/241/345/235/227/350/277/234/347/250/213/351/203/250/347/275/262/345/274/200/345/217/221/350/247/204/350/214/203.md +460 -0
  114. package/docs//346/250/241/345/235/227/351/200/200/345/207/272/346/234/272/345/210/266/345/256/214/346/225/264/346/226/271/346/241/210.md +303 -0
  115. package/docs//346/250/241/345/235/227/351/205/215/347/275/256/345/212/240/350/275/275/344/270/216/347/203/255/351/207/215/350/275/275/350/247/204/350/214/203.md +369 -0
  116. package/docs//346/265/213/350/257/225/344/270/255/345/277/203/346/267/273/345/212/240/346/250/241/345/235/227/346/265/213/350/257/225/346/214/207/345/215/227.md +147 -0
  117. package/docs//347/211/210/346/234/254/351/224/201/345/256/232/347/216/257/345/242/203/347/256/241/347/220/206/346/226/271/346/241/210.md +331 -0
  118. package/docs//347/216/257/345/242/203/345/217/230/351/207/217/344/270/216/350/277/220/350/241/214/346/227/266/347/233/256/345/275/225/350/256/276/350/256/241.md +499 -0
  119. package/docs//347/216/257/345/242/203/347/256/241/347/220/206/345/256/214/346/225/264/346/226/271/346/241/210.md +334 -0
  120. package/docs//350/231/232/346/213/237/346/250/241/345/235/227/344/270/255/350/275/254/346/234/215/345/212/241/345/256/214/346/225/264/350/256/276/350/256/241.md +1496 -0
  121. package/docs//350/231/232/346/213/237/347/216/257/345/242/203/345/267/245/344/275/234/345/216/237/347/220/206.md +163 -0
  122. package/docs//350/256/241/345/210/222/347/256/241/347/220/206/345/231/250/344/275/277/347/224/250/346/214/207/345/215/227.md +196 -0
  123. package/docs//350/256/244/350/257/201/346/250/241/345/235/227/344/270/216Gateway/350/256/276/350/256/241/346/226/271/346/241/210.md +765 -0
  124. package/docs//350/277/234/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/346/227/247/347/211/210.md +1117 -0
  125. package/docs//350/277/234/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241.md +451 -0
  126. package/docs//351/207/215/346/236/204/346/234/272/345/210/266/346/270/205/345/215/225.md +192 -0
  127. package/docs//351/223/276/350/267/257/350/277/275/350/270/252/346/226/271/346/241/210.md +242 -0
  128. package/docs//351/231/215/347/272/247/347/255/226/347/225/245/350/256/276/350/256/241/346/226/271/346/241/210.md +618 -0
  129. package/extensions/agents/assistant/entry.py +113 -14
  130. package/extensions/agents/assistant/module.md +27 -22
  131. package/extensions/agents/assistant/server.py +308 -106
  132. package/extensions/channels/acp_channel/entry.py +114 -16
  133. package/extensions/channels/acp_channel/module.md +4 -0
  134. package/extensions/channels/acp_channel/server.py +412 -105
  135. package/extensions/channels/phone_channel/__init__.py +1 -0
  136. package/extensions/channels/phone_channel/entry.py +503 -0
  137. package/extensions/channels/phone_channel/module.md +31 -0
  138. package/extensions/channels/phone_channel/server.py +686 -0
  139. package/extensions/event_hub_bench/entry.py +55 -12
  140. package/extensions/event_hub_bench/module.md +27 -27
  141. package/extensions/services/audit/README.md +134 -0
  142. package/extensions/services/audit/collector.py +73 -0
  143. package/extensions/services/audit/entry.py +444 -0
  144. package/extensions/services/audit/module.md +66 -0
  145. package/extensions/services/audit/query_audit.py +111 -0
  146. package/extensions/services/audit/routes/__init__.py +1 -0
  147. package/extensions/services/audit/routes/routes_audit.py +113 -0
  148. package/extensions/services/audit/schemas/__init__.py +5 -0
  149. package/extensions/services/audit/schemas/audit_event.py +92 -0
  150. package/extensions/services/audit/server.py +542 -0
  151. package/extensions/services/audit/storage.py +95 -0
  152. package/extensions/services/auth/entry.py +1054 -0
  153. package/extensions/services/auth/module.md +31 -0
  154. package/extensions/services/auth/token_store.py +185 -0
  155. package/extensions/services/auth/verifiers/evol_account.py +101 -0
  156. package/extensions/services/auth/verifiers/kite_token.py +38 -0
  157. package/extensions/services/auth/verifiers/pairing_code.py +71 -0
  158. package/extensions/services/backup/entry.py +505 -201
  159. package/extensions/services/backup/module.md +4 -2
  160. package/extensions/services/dataclaw/api/__init__.py +0 -0
  161. package/extensions/services/dataclaw/api/admin.py +367 -0
  162. package/extensions/services/dataclaw/api/copyright.py +175 -0
  163. package/extensions/services/dataclaw/api/credits.py +177 -0
  164. package/extensions/services/dataclaw/api/data.py +179 -0
  165. package/extensions/services/dataclaw/api/demands.py +269 -0
  166. package/extensions/services/dataclaw/api/feeds.py +262 -0
  167. package/extensions/services/dataclaw/api/identity.py +505 -0
  168. package/extensions/services/dataclaw/api/notifications.py +104 -0
  169. package/extensions/services/dataclaw/api/reviews.py +138 -0
  170. package/extensions/services/dataclaw/api/search.py +153 -0
  171. package/extensions/services/dataclaw/api/subscriptions.py +157 -0
  172. package/extensions/services/dataclaw/config.json5 +96 -0
  173. package/extensions/services/dataclaw/core/__init__.py +0 -0
  174. package/extensions/services/dataclaw/core/auth.py +95 -0
  175. package/extensions/services/dataclaw/core/config.py +50 -0
  176. package/extensions/services/dataclaw/core/database.py +70 -0
  177. package/extensions/services/dataclaw/entry.py +416 -0
  178. package/extensions/services/dataclaw/gofeed/351/241/271/347/233/256/346/211/200/346/234/211/346/235/203/350/275/254/347/247/273/346/265/201/347/250/213/350/257/264/346/230/216.md +309 -0
  179. package/extensions/services/dataclaw/migrate.py +283 -0
  180. package/extensions/services/dataclaw/models/__init__.py +0 -0
  181. package/extensions/services/dataclaw/module.md +49 -0
  182. package/extensions/services/dataclaw/requirements.txt +18 -0
  183. package/extensions/services/dataclaw/server.py +759 -0
  184. package/extensions/services/dataclaw/services/__init__.py +0 -0
  185. package/extensions/services/dataclaw/services/agent_service.py +132 -0
  186. package/extensions/services/dataclaw/services/credit_service.py +235 -0
  187. package/extensions/services/dataclaw/services/email_service.py +140 -0
  188. package/extensions/services/dataclaw/services/feed_service.py +259 -0
  189. package/extensions/services/dataclaw/services/notification_service.py +209 -0
  190. package/extensions/services/dataclaw/services/oauth_service.py +275 -0
  191. package/extensions/services/dataclaw/services/pricing.py +102 -0
  192. package/extensions/services/dataclaw/services/quality.py +79 -0
  193. package/extensions/services/dataclaw/services/reputation.py +142 -0
  194. package/extensions/services/dataclaw/services/sms_service.py +174 -0
  195. package/extensions/services/dataclaw/static/css/common.css +853 -0
  196. package/extensions/services/dataclaw/static/css/themes/blue.css +42 -0
  197. package/extensions/services/dataclaw/static/css/themes/dark.css +42 -0
  198. package/extensions/services/dataclaw/static/css/themes/light.css +35 -0
  199. package/extensions/services/dataclaw/static/js/api.js +103 -0
  200. package/extensions/services/dataclaw/static/js/common.js +321 -0
  201. package/extensions/services/dataclaw/static/js/i18n.js +95 -0
  202. package/extensions/services/dataclaw/static/js/pages/admin.js +152 -0
  203. package/extensions/services/dataclaw/static/js/pages/dashboard.js +82 -0
  204. package/extensions/services/dataclaw/static/js/pages/feed-detail.js +180 -0
  205. package/extensions/services/dataclaw/static/js/pages/feed-manage.js +158 -0
  206. package/extensions/services/dataclaw/static/js/theme.js +46 -0
  207. package/extensions/services/dataclaw/static/locales/en-US.json +464 -0
  208. package/extensions/services/dataclaw/static/locales/ja-JP.json +464 -0
  209. package/extensions/services/dataclaw/static/locales/zh-CN.json +464 -0
  210. package/extensions/services/dataclaw/templates/admin/index.html +90 -0
  211. package/extensions/services/dataclaw/templates/base.html +136 -0
  212. package/extensions/services/dataclaw/templates/credits/balance.html +106 -0
  213. package/extensions/services/dataclaw/templates/credits/deposit.html +164 -0
  214. package/extensions/services/dataclaw/templates/credits/history.html +90 -0
  215. package/extensions/services/dataclaw/templates/dashboard.html +52 -0
  216. package/extensions/services/dataclaw/templates/demands/create.html +78 -0
  217. package/extensions/services/dataclaw/templates/demands/detail.html +136 -0
  218. package/extensions/services/dataclaw/templates/demands/list.html +94 -0
  219. package/extensions/services/dataclaw/templates/feeds/create.html +95 -0
  220. package/extensions/services/dataclaw/templates/feeds/detail.html +110 -0
  221. package/extensions/services/dataclaw/templates/feeds/list.html +110 -0
  222. package/extensions/services/dataclaw/templates/feeds/manage.html +88 -0
  223. package/extensions/services/dataclaw/templates/index.html +185 -0
  224. package/extensions/services/dataclaw/templates/login.html +246 -0
  225. package/extensions/services/dataclaw/templates/register.html +164 -0
  226. package/extensions/services/dataclaw/templates/settings/notifications.html +96 -0
  227. package/extensions/services/dataclaw/templates/settings/profile.html +167 -0
  228. package/extensions/services/dataclaw/templates/subscriptions/list.html +64 -0
  229. package/extensions/services/dataclaw/tests/__init__.py +0 -0
  230. package/extensions/services/dataclaw/tests/conftest.py +68 -0
  231. package/extensions/services/dataclaw/tests/integration/__init__.py +0 -0
  232. package/extensions/services/dataclaw/tests/integration/test_workflows.py +239 -0
  233. package/extensions/services/dataclaw/tests/unit/__init__.py +0 -0
  234. package/extensions/services/dataclaw/tests/unit/test_admin.py +70 -0
  235. package/extensions/services/dataclaw/tests/unit/test_copyright.py +63 -0
  236. package/extensions/services/dataclaw/tests/unit/test_credits.py +80 -0
  237. package/extensions/services/dataclaw/tests/unit/test_data.py +98 -0
  238. package/extensions/services/dataclaw/tests/unit/test_demands.py +106 -0
  239. package/extensions/services/dataclaw/tests/unit/test_feeds.py +98 -0
  240. package/extensions/services/dataclaw/tests/unit/test_identity.py +88 -0
  241. package/extensions/services/dataclaw/tests/unit/test_notifications.py +36 -0
  242. package/extensions/services/dataclaw/tests/unit/test_reviews.py +68 -0
  243. package/extensions/services/dataclaw/tests/unit/test_search.py +64 -0
  244. package/extensions/services/dataclaw/tests/unit/test_subscriptions.py +65 -0
  245. package/extensions/services/dataclaw/tests/unit/test_system.py +106 -0
  246. package/extensions/services/dataclaw/utils/__init__.py +0 -0
  247. package/extensions/services/dataclaw/utils/crypto.py +38 -0
  248. package/extensions/services/dataclaw/utils/id_generator.py +52 -0
  249. package/extensions/services/dataclaw/ws/__init__.py +0 -0
  250. package/extensions/services/dataclaw/ws/handler.py +163 -0
  251. package/extensions/services/dataclaw//345/215/217/350/256/2561-/351/241/271/347/233/256/346/235/241/344/273/266/346/216/210/346/235/203/344/270/216/350/202/241/346/235/203/345/257/271/344/273/267/345/215/217/350/256/256.md +243 -0
  252. package/extensions/services/dataclaw//345/215/217/350/256/2562-/351/241/271/347/233/256/350/264/255/344/271/260/346/235/203/344/270/216/345/244/226/345/214/205/345/247/224/346/211/230/345/274/200/345/217/221/345/215/217/350/256/256.md +434 -0
  253. package/extensions/services/evol/__init__.py +1 -0
  254. package/extensions/services/evol/async_http.py +551 -0
  255. package/extensions/services/evol/auth_manager.py +602 -0
  256. package/extensions/services/evol/config.json5 +16 -0
  257. package/extensions/services/evol/config_loader.py +117 -0
  258. package/extensions/services/evol/entry.py +568 -0
  259. package/extensions/services/evol/evol_api.py +969 -0
  260. package/extensions/services/evol/evol_config.json5 +29 -0
  261. package/extensions/services/evol/mfa_totp.py +77 -0
  262. package/extensions/services/evol/migrate_tokens.py +122 -0
  263. package/extensions/services/evol/module.md +150 -0
  264. package/extensions/services/evol/nonce_pool.py +113 -0
  265. package/extensions/services/evol/oauth_manager.py +223 -0
  266. package/extensions/services/evol/pairing.py +251 -0
  267. package/extensions/services/evol/pairing_codes.jsonl +2 -0
  268. package/extensions/services/evol/relay.py +1031 -0
  269. package/extensions/services/evol/relay_config.json5 +85 -0
  270. package/extensions/services/evol/routes/__init__.py +1 -0
  271. package/extensions/services/evol/routes/routes_llm.py +231 -0
  272. package/extensions/services/evol/routes/routes_rpc.py +90 -0
  273. package/extensions/services/evol/routes/routes_test.py +68 -0
  274. package/extensions/services/evol/server.py +2426 -0
  275. package/extensions/services/evol/static/assets/CommissionView-Cs_ys6Gm.js +1 -0
  276. package/extensions/services/evol/static/assets/CommissionView-DACet_Oo.css +1 -0
  277. package/extensions/services/evol/static/assets/IframePage-DbO11U9G.js +1 -0
  278. package/extensions/services/evol/static/assets/IframePage-c572lT8i.css +1 -0
  279. package/extensions/services/evol/static/assets/TeamDetailView-DULrGD7k.css +1 -0
  280. package/extensions/services/evol/static/assets/TeamDetailView-gy_MBEqG.js +139 -0
  281. package/extensions/services/evol/static/assets/element-plus-Bd7pZkkM.js +63 -0
  282. package/extensions/services/evol/static/assets/index-CmMONKzG.css +1 -0
  283. package/extensions/services/evol/static/assets/index-D44bBe__.js +2 -0
  284. package/extensions/services/evol/static/assets/vue-vendor-DtF-__I4.js +29 -0
  285. package/extensions/services/evol/static/index.html +16 -0
  286. package/extensions/services/evol/static/logo.png +0 -0
  287. package/extensions/services/evol/stats_manager.py +243 -0
  288. package/extensions/services/evol/web/README.md +89 -0
  289. package/extensions/services/evol/web/build.bat +44 -0
  290. package/extensions/services/evol/web/index.html +13 -0
  291. package/extensions/services/evol/web/package-lock.json +1718 -0
  292. package/extensions/services/evol/web/package.json +26 -0
  293. package/extensions/services/evol/web/public/logo.png +0 -0
  294. package/extensions/services/evol/web/src/App.vue +7 -0
  295. package/extensions/services/evol/web/src/components/layout/AppHeader.vue +202 -0
  296. package/extensions/services/evol/web/src/components/layout/AppLayout.vue +61 -0
  297. package/extensions/services/evol/web/src/components/layout/AppSidebar.vue +115 -0
  298. package/extensions/services/evol/web/src/components/login/LoginPage.vue +271 -0
  299. package/extensions/services/evol/web/src/components/team/AddMemberModal.vue +181 -0
  300. package/extensions/services/evol/web/src/components/team/GroupTreeNode.vue +156 -0
  301. package/extensions/services/evol/web/src/components/team/TeamAlertConfig.vue +221 -0
  302. package/extensions/services/evol/web/src/components/team/TeamBillModal.vue +165 -0
  303. package/extensions/services/evol/web/src/components/team/TeamMembersAndGroups.vue +499 -0
  304. package/extensions/services/evol/web/src/components/team/TeamStatsPanel.vue +907 -0
  305. package/extensions/services/evol/web/src/components/team/TreeNode.vue +331 -0
  306. package/extensions/services/evol/web/src/components/team/stats/StatsExportProgress.vue +44 -0
  307. package/extensions/services/evol/web/src/components/team/stats/StatsHeader.vue +89 -0
  308. package/extensions/services/evol/web/src/components/team/stats/StatsMemberDetail.vue +415 -0
  309. package/extensions/services/evol/web/src/components/team/stats/StatsSummary.vue +42 -0
  310. package/extensions/services/evol/web/src/components/team/stats/helpers.ts +195 -0
  311. package/extensions/services/evol/web/src/components/team/stats/stats.css +741 -0
  312. package/extensions/services/evol/web/src/components/team/stats/useStatsApi.ts +114 -0
  313. package/extensions/services/evol/web/src/components/team/stats/useStatsCharts.ts +242 -0
  314. package/extensions/services/evol/web/src/components/team/stats/useStatsExport.ts +232 -0
  315. package/extensions/services/evol/web/src/composables/useFormatters.ts +42 -0
  316. package/extensions/services/evol/web/src/composables/useTheme.ts +52 -0
  317. package/extensions/services/evol/web/src/env.d.ts +7 -0
  318. package/extensions/services/evol/web/src/i18n/en.ts +361 -0
  319. package/extensions/services/evol/web/src/i18n/index.ts +36 -0
  320. package/extensions/services/evol/web/src/i18n/zh.ts +379 -0
  321. package/extensions/services/evol/web/src/main.ts +21 -0
  322. package/extensions/services/evol/web/src/router/index.ts +81 -0
  323. package/extensions/services/evol/web/src/services/kernel-client.ts +406 -0
  324. package/extensions/services/evol/web/src/stores/auth.ts +189 -0
  325. package/extensions/services/evol/web/src/stores/connection.ts +134 -0
  326. package/extensions/services/evol/web/src/stores/pages.ts +79 -0
  327. package/extensions/services/evol/web/src/styles/base.css +213 -0
  328. package/extensions/services/evol/web/src/styles/variables.css +138 -0
  329. package/extensions/services/evol/web/src/types/rpc.ts +35 -0
  330. package/extensions/services/evol/web/src/types/token.ts +87 -0
  331. package/extensions/services/evol/web/src/views/AccountView.vue +1532 -0
  332. package/extensions/services/evol/web/src/views/AiServiceView.vue +219 -0
  333. package/extensions/services/evol/web/src/views/CommissionView.vue +1220 -0
  334. package/extensions/services/evol/web/src/views/CreditsView.vue +131 -0
  335. package/extensions/services/evol/web/src/views/EndpointView.vue +163 -0
  336. package/extensions/services/evol/web/src/views/IframePage.vue +120 -0
  337. package/extensions/services/evol/web/src/views/TeamDetailView.vue +473 -0
  338. package/extensions/services/evol/web/src/views/TeamView.vue +332 -0
  339. package/extensions/services/evol/web/tsconfig.json +31 -0
  340. package/extensions/services/evol/web/tsconfig.node.json +10 -0
  341. package/extensions/services/evol/web/vite.config.ts +49 -0
  342. package/extensions/services/evolmem/__init__.py +0 -0
  343. package/extensions/services/evolmem/entry.py +387 -0
  344. package/extensions/services/evolmem/hooks/__init__.py +0 -0
  345. package/extensions/services/evolmem/hooks/assistant_stop.py +228 -0
  346. package/extensions/services/evolmem/hooks/common.py +76 -0
  347. package/extensions/services/evolmem/hooks/pre_tool_use.py +56 -0
  348. package/extensions/services/evolmem/hooks/session_end.py +133 -0
  349. package/extensions/services/evolmem/hooks/session_start.py +229 -0
  350. package/extensions/services/evolmem/hooks/user_prompt.py +122 -0
  351. package/extensions/services/evolmem/module.md +48 -0
  352. package/extensions/services/evolmem/prompts/00-server-info.md +28 -0
  353. package/extensions/services/evolmem/prompts/01-behavior.md +46 -0
  354. package/extensions/services/evolmem/prompts/02-summary-format.md +112 -0
  355. package/extensions/services/evolmem/prompts/03-file-query.md +92 -0
  356. package/extensions/services/evolmem/prompts/04-topic-stats.md +11 -0
  357. package/extensions/services/evolmem/prompts/05-recent-topics.md +84 -0
  358. package/extensions/services/evolmem/scripts/__init__.py +0 -0
  359. package/extensions/services/evolmem/scripts/extract_keywords.py +40 -0
  360. package/extensions/services/evolmem/scripts/search_topics.py +91 -0
  361. package/extensions/services/evolmem/server.py +641 -0
  362. package/extensions/services/gateway/entry.py +964 -0
  363. package/extensions/services/gateway/module.md +29 -0
  364. package/extensions/services/gateway/nonce_pool.py +65 -0
  365. package/extensions/services/gateway/relay.py +133 -0
  366. package/extensions/services/gateway/ws_server.py +285 -0
  367. package/extensions/services/kite_console/auth_manager.py +603 -0
  368. package/extensions/services/kite_console/config.json5 +19 -0
  369. package/extensions/services/kite_console/config_loader.py +117 -0
  370. package/extensions/services/kite_console/entry.py +528 -0
  371. package/extensions/services/kite_console/evol_api.py +179 -0
  372. package/extensions/services/kite_console/evol_config.json5 +29 -0
  373. package/extensions/services/kite_console/mfa_totp.py +77 -0
  374. package/extensions/services/kite_console/migrate_tokens.py +122 -0
  375. package/extensions/services/kite_console/module.md +37 -0
  376. package/extensions/services/kite_console/nonce_pool.py +113 -0
  377. package/extensions/services/kite_console/oauth_manager.py +223 -0
  378. package/extensions/services/kite_console/pairing.py +280 -0
  379. package/extensions/services/kite_console/pairing_codes.jsonl +2 -0
  380. package/extensions/services/kite_console/relay.py +1350 -0
  381. package/extensions/services/kite_console/relay_config.json5 +96 -0
  382. package/extensions/services/kite_console/routes/__init__.py +1 -0
  383. package/extensions/services/kite_console/routes/routes_llm.py +231 -0
  384. package/extensions/services/kite_console/routes/routes_proxy.py +115 -0
  385. package/extensions/services/kite_console/routes/routes_rpc.py +89 -0
  386. package/extensions/services/kite_console/routes/routes_test.py +68 -0
  387. package/extensions/services/kite_console/server.py +1742 -0
  388. package/extensions/services/kite_console/static/css/style.css +1854 -0
  389. package/extensions/services/kite_console/static/index.html +1524 -0
  390. package/extensions/services/kite_console/static/js/dialog.js +292 -0
  391. package/extensions/services/kite_console/static/js/evol-app.js +7740 -0
  392. package/extensions/services/kite_console/static/js/evol-app.js.backup +2777 -0
  393. package/extensions/services/kite_console/static/js/kernel-client.js +560 -0
  394. package/extensions/services/kite_console/static/js/kernel-client.js.backup +434 -0
  395. package/extensions/services/kite_console/static/js/registry-tests.js +592 -0
  396. package/extensions/services/kite_console/static/js/tests/ARCHITECTURE.md +67 -0
  397. package/extensions/services/kite_console/static/js/tests/README.md +140 -0
  398. package/extensions/services/kite_console/static/js/tests/index.js +161 -0
  399. package/extensions/services/kite_console/static/js/tests/integration/auth.js +120 -0
  400. package/extensions/services/kite_console/static/js/tests/integration/channel-interaction.js +188 -0
  401. package/extensions/services/kite_console/static/js/tests/integration/elastic-connection.js +115 -0
  402. package/extensions/services/kite_console/static/js/tests/integration/full-workflow.js +43 -0
  403. package/extensions/services/kite_console/static/js/tests/integration/multi-instance.js +304 -0
  404. package/extensions/services/kite_console/static/js/tests/integration/nested-rpc.js +266 -0
  405. package/extensions/services/kite_console/static/js/tests/integration/pingpong.js +25 -0
  406. package/extensions/services/kite_console/static/js/tests/integration/redis.js +227 -0
  407. package/extensions/services/kite_console/static/js/tests/integration/registry-core.js +52 -0
  408. package/extensions/services/kite_console/static/js/tests/integration/remote-deploy.js +85 -0
  409. package/extensions/services/kite_console/static/js/tests/integration/require-init.js +96 -0
  410. package/extensions/services/kite_console/static/js/tests/integration/scaling-control.js +193 -0
  411. package/extensions/services/kite_console/static/js/tests/integration/trace.js +109 -0
  412. package/extensions/services/kite_console/static/js/tests/modules/acp_channel.js +339 -0
  413. package/extensions/services/kite_console/static/js/tests/modules/auth.js +96 -0
  414. package/extensions/services/kite_console/static/js/tests/modules/backup.js +49 -0
  415. package/extensions/services/kite_console/static/js/tests/modules/gateway.js +41 -0
  416. package/extensions/services/kite_console/static/js/tests/modules/kernel.js +90 -0
  417. package/extensions/services/kite_console/static/js/tests/modules/launcher.js +75 -0
  418. package/extensions/services/kite_console/static/js/tests/modules/multi_instance.js +129 -0
  419. package/extensions/services/kite_console/static/js/tests/modules/phone_channel.js +364 -0
  420. package/extensions/services/kite_console/static/js/tests/modules/redis.js +178 -0
  421. package/extensions/services/kite_console/static/js/tests/modules/watchdog.js +60 -0
  422. package/extensions/services/kite_console/static/js/tests/modules/web.js +70 -0
  423. package/extensions/services/kite_console/static/js/tests/test-runner.js +123 -0
  424. package/extensions/services/kite_console/static/js/virtual-list.js +200 -0
  425. package/extensions/services/kite_console/static/pairing.html +248 -0
  426. package/extensions/services/kite_console/static/test_kernel_client_token.html +352 -0
  427. package/extensions/services/kite_console/static/test_registry.html +262 -0
  428. package/extensions/services/kite_console/static/test_relay.html +462 -0
  429. package/extensions/services/kite_console/stats_manager.py +247 -0
  430. package/extensions/services/logs/README.md +215 -0
  431. package/extensions/services/logs/api_logger.py +37 -0
  432. package/extensions/services/logs/baseline.py +121 -0
  433. package/extensions/services/logs/cleaner.py +76 -0
  434. package/extensions/services/logs/entry.py +449 -0
  435. package/extensions/services/logs/formatter.py +129 -0
  436. package/extensions/services/logs/module.md +38 -0
  437. package/extensions/services/logs/quick_diagnostic.py +128 -0
  438. package/extensions/services/logs/routes/__init__.py +1 -0
  439. package/extensions/services/logs/routes/routes_logs.py +218 -0
  440. package/extensions/services/logs/routes/routes_logs.py.backup +173 -0
  441. package/extensions/services/logs/scanner.py +100 -0
  442. package/extensions/services/logs/searcher.py +263 -0
  443. package/extensions/services/logs/server.py +553 -0
  444. package/extensions/services/logs.zip +0 -0
  445. package/extensions/services/model_service/config.json5 +30 -0
  446. package/extensions/services/model_service/entry.py +633 -162
  447. package/extensions/services/model_service/module.md +11 -2
  448. package/extensions/services/proxy/.claude/settings.local.json +13 -0
  449. package/extensions/services/proxy/__init__.py +0 -0
  450. package/extensions/services/proxy/agentcp/LICENCE +178 -0
  451. package/extensions/services/proxy/agentcp/README copy.md +85 -0
  452. package/extensions/services/proxy/agentcp/README.md +260 -0
  453. package/extensions/services/proxy/agentcp/__init__.py +16 -0
  454. package/extensions/services/proxy/agentcp/agent.py +4 -0
  455. package/extensions/services/proxy/agentcp/agentcp.py +2494 -0
  456. package/extensions/services/proxy/agentcp/agentprofile.json +89 -0
  457. package/extensions/services/proxy/agentcp/ap/__init__.py +16 -0
  458. package/extensions/services/proxy/agentcp/ap/ap_client.py +316 -0
  459. package/extensions/services/proxy/agentcp/assets/images/wechat_qr.png +0 -0
  460. package/extensions/services/proxy/agentcp/backup/metrics.json +31 -0
  461. package/extensions/services/proxy/agentcp/base/__init__.py +20 -0
  462. package/extensions/services/proxy/agentcp/base/auth_client.py +257 -0
  463. package/extensions/services/proxy/agentcp/base/client.py +112 -0
  464. package/extensions/services/proxy/agentcp/base/env.py +34 -0
  465. package/extensions/services/proxy/agentcp/base/html_util.py +336 -0
  466. package/extensions/services/proxy/agentcp/base/log.py +98 -0
  467. package/extensions/services/proxy/agentcp/ca/__init__.py +17 -0
  468. package/extensions/services/proxy/agentcp/ca/ca_client.py +414 -0
  469. package/extensions/services/proxy/agentcp/ca/ca_root.py +74 -0
  470. package/extensions/services/proxy/agentcp/context/__init__.py +20 -0
  471. package/extensions/services/proxy/agentcp/context/context.py +73 -0
  472. package/extensions/services/proxy/agentcp/context/exceptions.py +114 -0
  473. package/extensions/services/proxy/agentcp/create_profile.py +125 -0
  474. package/extensions/services/proxy/agentcp/create_profile_weather.py +125 -0
  475. package/extensions/services/proxy/agentcp/db/__init__.py +15 -0
  476. package/extensions/services/proxy/agentcp/db/db_mananger.py +550 -0
  477. package/extensions/services/proxy/agentcp/docs/UDP_HEARTBEAT_FIX_REPORT.md +265 -0
  478. package/extensions/services/proxy/agentcp/docs/heartbeat_issue_analysis.md +291 -0
  479. package/extensions/services/proxy/agentcp/file/__init__.py +16 -0
  480. package/extensions/services/proxy/agentcp/file/file_client.py +141 -0
  481. package/extensions/services/proxy/agentcp/file/wss_binary_message.py +137 -0
  482. package/extensions/services/proxy/agentcp/hcp.py +299 -0
  483. package/extensions/services/proxy/agentcp/heartbeat/__init__.py +16 -0
  484. package/extensions/services/proxy/agentcp/heartbeat/heartbeat_client.py +360 -0
  485. package/extensions/services/proxy/agentcp/improved_scheduler.py +498 -0
  486. package/extensions/services/proxy/agentcp/llm_agent_utils.py +249 -0
  487. package/extensions/services/proxy/agentcp/llm_server.py +172 -0
  488. package/extensions/services/proxy/agentcp/mermaid.py +210 -0
  489. package/extensions/services/proxy/agentcp/message.py +149 -0
  490. package/extensions/services/proxy/agentcp/metrics.py +256 -0
  491. package/extensions/services/proxy/agentcp/monitoring/__init__.py +20 -0
  492. package/extensions/services/proxy/agentcp/monitoring/global_monitor.py +27 -0
  493. package/extensions/services/proxy/agentcp/monitoring/metrics_store.py +325 -0
  494. package/extensions/services/proxy/agentcp/monitoring/monitoring_service.py +269 -0
  495. package/extensions/services/proxy/agentcp/monitoring/sliding_window.py +222 -0
  496. package/extensions/services/proxy/agentcp/monitoring/standalone_reader.py +224 -0
  497. package/extensions/services/proxy/agentcp/msg/__init__.py +21 -0
  498. package/extensions/services/proxy/agentcp/msg/connection_manager.py +456 -0
  499. package/extensions/services/proxy/agentcp/msg/message_client.py +2058 -0
  500. package/extensions/services/proxy/agentcp/msg/message_serialize.py +263 -0
  501. package/extensions/services/proxy/agentcp/msg/open_ai_message.py +88 -0
  502. package/extensions/services/proxy/agentcp/msg/session_manager.py +1062 -0
  503. package/extensions/services/proxy/agentcp/msg/stream_client.py +267 -0
  504. package/extensions/services/proxy/agentcp/msg/websocket_file_receiver.py +89 -0
  505. package/extensions/services/proxy/agentcp/msg/ws_logger.py +685 -0
  506. package/extensions/services/proxy/agentcp/msg/wss_binary_message.py +137 -0
  507. package/extensions/services/proxy/agentcp/requirements.txt +7 -0
  508. package/extensions/services/proxy/agentcp/samples/agent_graph/README.md +37 -0
  509. package/extensions/services/proxy/agentcp/samples/agent_graph/agentprofile.json +89 -0
  510. package/extensions/services/proxy/agentcp/samples/agent_graph/create_profile.py +138 -0
  511. package/extensions/services/proxy/agentcp/samples/agent_graph/main.py +164 -0
  512. package/extensions/services/proxy/agentcp/samples/agent_use/create_profile.py +123 -0
  513. package/extensions/services/proxy/agentcp/samples/agent_use/llm/create_profile.py +129 -0
  514. package/extensions/services/proxy/agentcp/samples/agent_use/llm/env.json +5 -0
  515. package/extensions/services/proxy/agentcp/samples/agent_use/llm/main.py +146 -0
  516. package/extensions/services/proxy/agentcp/samples/agent_use/main.py +123 -0
  517. package/extensions/services/proxy/agentcp/samples/agent_use/readme.md +379 -0
  518. package/extensions/services/proxy/agentcp/samples/agent_use/search/create_profile.py +129 -0
  519. package/extensions/services/proxy/agentcp/samples/agent_use/search/main.py +28 -0
  520. package/extensions/services/proxy/agentcp/samples/agent_use/tool/create_profile.py +129 -0
  521. package/extensions/services/proxy/agentcp/samples/agent_use/tool/main.py +20 -0
  522. package/extensions/services/proxy/agentcp/samples/ali_amap/README.md +97 -0
  523. package/extensions/services/proxy/agentcp/samples/ali_amap/amap_agent.py +88 -0
  524. package/extensions/services/proxy/agentcp/samples/ali_amap/create_profile.py +125 -0
  525. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/powershell.py +228 -0
  526. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/software.py +63 -0
  527. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/tools.py +36 -0
  528. package/extensions/services/proxy/agentcp/samples/compute_agent/browser_user.py +41 -0
  529. package/extensions/services/proxy/agentcp/samples/deepseek/README.md +79 -0
  530. package/extensions/services/proxy/agentcp/samples/deepseek/create_profile.py +126 -0
  531. package/extensions/services/proxy/agentcp/samples/deepseek/deepseek.py +42 -0
  532. package/extensions/services/proxy/agentcp/samples/dify_chat/README.md +78 -0
  533. package/extensions/services/proxy/agentcp/samples/dify_chat/create_profile.py +126 -0
  534. package/extensions/services/proxy/agentcp/samples/dify_chat/dify_chat.py +47 -0
  535. package/extensions/services/proxy/agentcp/samples/dify_workflow/README.md +78 -0
  536. package/extensions/services/proxy/agentcp/samples/dify_workflow/create_profile.py +126 -0
  537. package/extensions/services/proxy/agentcp/samples/dify_workflow/dify_workflow.py +46 -0
  538. package/extensions/services/proxy/agentcp/samples/executor/README.md +44 -0
  539. package/extensions/services/proxy/agentcp/samples/executor/agentprofile.json +89 -0
  540. package/extensions/services/proxy/agentcp/samples/executor/create_profile.py +139 -0
  541. package/extensions/services/proxy/agentcp/samples/executor/main.py +160 -0
  542. package/extensions/services/proxy/agentcp/samples/filereader/README.md +45 -0
  543. package/extensions/services/proxy/agentcp/samples/filereader/agentprofile.json +90 -0
  544. package/extensions/services/proxy/agentcp/samples/filereader/create_profile.py +137 -0
  545. package/extensions/services/proxy/agentcp/samples/filereader/main.py +253 -0
  546. package/extensions/services/proxy/agentcp/samples/filewriter/README.md +38 -0
  547. package/extensions/services/proxy/agentcp/samples/filewriter/agentprofile.json +91 -0
  548. package/extensions/services/proxy/agentcp/samples/filewriter/create_profile.py +138 -0
  549. package/extensions/services/proxy/agentcp/samples/filewriter/main.py +289 -0
  550. package/extensions/services/proxy/agentcp/samples/hcp/README.md +85 -0
  551. package/extensions/services/proxy/agentcp/samples/hcp/acp_weather_agent.zip +0 -0
  552. package/extensions/services/proxy/agentcp/samples/hcp/create_profile.py +125 -0
  553. package/extensions/services/proxy/agentcp/samples/hcp/hcp.py +237 -0
  554. package/extensions/services/proxy/agentcp/samples/helloworld/README.md +68 -0
  555. package/extensions/services/proxy/agentcp/samples/helloworld/hello_world.py +40 -0
  556. package/extensions/services/proxy/agentcp/samples/llm_agent/MEADME.md +117 -0
  557. package/extensions/services/proxy/agentcp/samples/llm_agent/create_profile.py +125 -0
  558. package/extensions/services/proxy/agentcp/samples/llm_agent/qwen_agent.py +136 -0
  559. package/extensions/services/proxy/agentcp/samples/local_llm_agent/README.md +90 -0
  560. package/extensions/services/proxy/agentcp/samples/local_llm_agent/create_profile.py +125 -0
  561. package/extensions/services/proxy/agentcp/samples/local_llm_agent/main.py +49 -0
  562. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/README.md +55 -0
  563. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/create_profile.py +125 -0
  564. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/main.py +23 -0
  565. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/README.md +103 -0
  566. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/create_profile.py +125 -0
  567. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/main.py +69 -0
  568. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/README.md +58 -0
  569. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/create_profile.py +125 -0
  570. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/main.py +25 -0
  571. package/extensions/services/proxy/agentcp/samples/qwen3/README.md +71 -0
  572. package/extensions/services/proxy/agentcp/samples/qwen3/create_profile.py +126 -0
  573. package/extensions/services/proxy/agentcp/samples/qwen3/qwen3.py +37 -0
  574. package/extensions/services/proxy/agentcp/samples/qwen3_tools/README.md +133 -0
  575. package/extensions/services/proxy/agentcp/samples/qwen3_tools/create_profile.py +126 -0
  576. package/extensions/services/proxy/agentcp/samples/qwen3_tools/qwen3_tools.py +98 -0
  577. package/extensions/services/proxy/agentcp/samples/search/create_profile_qwen.py +125 -0
  578. package/extensions/services/proxy/agentcp/samples/search/create_profile_search.py +125 -0
  579. package/extensions/services/proxy/agentcp/samples/search/qwen_agent.py +136 -0
  580. package/extensions/services/proxy/agentcp/samples/search/search_agent.py +170 -0
  581. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/README.md +89 -0
  582. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/create_profile.py +125 -0
  583. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/main.py +44 -0
  584. package/extensions/services/proxy/agentcp/utils/__init__.py +15 -0
  585. package/extensions/services/proxy/agentcp/utils/file_util.py +117 -0
  586. package/extensions/services/proxy/agentcp/utils/proxy_bypass.py +99 -0
  587. package/extensions/services/proxy/agentcp/workflow.py +203 -0
  588. package/extensions/services/proxy/aid_manager.py +419 -0
  589. package/extensions/services/proxy/auth_bridge.py +182 -0
  590. package/extensions/services/proxy/config_store.py +79 -0
  591. package/extensions/services/proxy/entry.py +528 -0
  592. package/extensions/services/proxy/evol/__init__.py +1 -0
  593. package/extensions/services/proxy/evol/config.py +37 -0
  594. package/extensions/services/proxy/evol/http/__init__.py +1 -0
  595. package/extensions/services/proxy/evol/http/async_http.py +551 -0
  596. package/extensions/services/proxy/evol/log.py +28 -0
  597. package/extensions/services/proxy/evol/presenter/__init__.py +2 -0
  598. package/extensions/services/proxy/evol/presenter/agentIdPresenter.py +1031 -0
  599. package/extensions/services/proxy/evol/presenter/apikeyPresenter.py +96 -0
  600. package/extensions/services/proxy/evol/presenter/configPresenter.py +234 -0
  601. package/extensions/services/proxy/evol/presenter/userPresenter.py +71 -0
  602. package/extensions/services/proxy/evol/server/__init__.py +1 -0
  603. package/extensions/services/proxy/evol/server/claude_proxy_async.py +3434 -0
  604. package/extensions/services/proxy/evol/server/openclaw_proxy.py +1861 -0
  605. package/extensions/services/proxy/evol/server/proxy_config.py +15 -0
  606. package/extensions/services/proxy/evol/server/proxy_engine.py +501 -0
  607. package/extensions/services/proxy/evol/version.py +24 -0
  608. package/extensions/services/proxy/module.md +151 -0
  609. package/extensions/services/proxy/server.py +952 -0
  610. package/extensions/services/redis/ALIGNMENT_CHECKLIST.md +121 -0
  611. package/extensions/services/redis/ALIGNMENT_STATUS.md +548 -0
  612. package/extensions/services/redis/config.json5 +8 -0
  613. package/extensions/services/redis/entry.py +1509 -0
  614. package/extensions/services/redis/entry.py.backup +405 -0
  615. package/extensions/services/redis/module.md +48 -0
  616. package/extensions/services/redis/redis_builtin.py +332 -0
  617. package/extensions/services/redis/redis_external.py +164 -0
  618. package/extensions/services/testUi/entry.py +446 -0
  619. package/extensions/services/testUi/module.md +18 -0
  620. package/extensions/services/testUi/ui/cards.html +131 -0
  621. package/extensions/services/testUi/ui/index.html +22 -0
  622. package/extensions/services/testUi/ui/particles.html +143 -0
  623. package/extensions/services/watchdog/entry.py +1258 -767
  624. package/extensions/services/watchdog/module.md +3 -0
  625. package/extensions/services/watchdog/monitor.py +483 -75
  626. package/extensions/services/web/auth_manager.py +602 -0
  627. package/extensions/services/web/config.json5 +11 -0
  628. package/extensions/services/web/entry.py +598 -478
  629. package/extensions/services/web/mfa_totp.py +77 -0
  630. package/extensions/services/web/module.md +17 -14
  631. package/extensions/services/web/nonce_pool.py +113 -0
  632. package/extensions/services/web/oauth_manager.py +223 -0
  633. package/extensions/services/web/pairing.py +3 -2
  634. package/extensions/services/web/pairing_codes.jsonl +1 -0
  635. package/extensions/services/web/relay.py +442 -63
  636. package/extensions/services/web/relay_config.json5 +1 -2
  637. package/extensions/services/web/routes/routes_rpc.py +6 -6
  638. package/extensions/services/web/server.py +380 -181
  639. package/extensions/services/web/static/index.html +1752 -1738
  640. package/extensions/services/web/static/js/app.js +32 -0
  641. package/extensions/services/web/static/js/kernel-client.js +48 -9
  642. package/extensions/services/web/static/js/token-manager.js +10 -10
  643. package/extensions/services/web/vendor/bluetooth/audio.py +1 -1
  644. package/extensions/services/web/vendor/config.py +2 -2
  645. package/extensions/services/web/vendor/storage/identity.py +1 -1
  646. package/kernel/entry.py +77 -23
  647. package/kernel/event_hub.py +1122 -74
  648. package/kernel/module.md +26 -1
  649. package/kernel/registry_store.py +209 -36
  650. package/kernel/rpc_router.py +1400 -465
  651. package/kernel/server.py +1084 -108
  652. package/kite_cli/builders/__init__.py +4 -0
  653. package/kite_cli/builders/base.py +67 -0
  654. package/kite_cli/builders/custom.py +31 -0
  655. package/kite_cli/builders/detector.py +56 -0
  656. package/kite_cli/builders/go.py +34 -0
  657. package/kite_cli/builders/gradle.py +41 -0
  658. package/kite_cli/builders/maven.py +36 -0
  659. package/kite_cli/builders/npm.py +44 -0
  660. package/kite_cli/builders/python.py +37 -0
  661. package/kite_cli/commands/BUILD_GUIDE.md +109 -0
  662. package/kite_cli/commands/build.py +142 -0
  663. package/kite_cli/commands/check.py +60 -0
  664. package/kite_cli/commands/config.py +156 -0
  665. package/kite_cli/commands/deps.py +58 -0
  666. package/kite_cli/commands/deps_install.py +67 -0
  667. package/kite_cli/commands/disable.py +162 -0
  668. package/kite_cli/commands/enable.py +162 -0
  669. package/kite_cli/commands/env_check.py +45 -0
  670. package/kite_cli/commands/export.py +96 -0
  671. package/kite_cli/commands/import_cmd.py +110 -0
  672. package/kite_cli/commands/install.py +50 -23
  673. package/kite_cli/commands/install_skill.py +107 -0
  674. package/kite_cli/commands/list.py +128 -31
  675. package/kite_cli/commands/outdated.py +202 -0
  676. package/kite_cli/commands/prepare.py +49 -0
  677. package/kite_cli/commands/search.py +33 -17
  678. package/kite_cli/commands/update.py +115 -2
  679. package/kite_cli/commands/venv_setup.py +56 -0
  680. package/kite_cli/commands/why.py +48 -0
  681. package/kite_cli/core/config_manager.py +145 -0
  682. package/kite_cli/core/downloader.py +32 -2
  683. package/kite_cli/main.py +179 -5
  684. package/kite_cli/utils/colors.py +153 -0
  685. package/kite_cli/utils/dependency_graph.py +209 -0
  686. package/kite_cli/utils/process.py +55 -0
  687. package/kite_cli/utils/progress.py +207 -0
  688. package/kite_cli/utils/table.py +101 -0
  689. package/launcher/count_lines.py +192 -43
  690. package/launcher/entry.py +4543 -2517
  691. package/launcher/logging_setup.py +54 -1
  692. package/launcher/module.md +37 -2
  693. package/launcher/module_scanner.py +103 -20
  694. package/launcher/process_manager.py +355 -76
  695. package/main.py +10 -1
  696. package/package.json +11 -1
  697. package/python_version.json +4 -0
  698. package/requirements.txt +41 -0
  699. package/scripts/auto-fix-deps.py +128 -0
  700. package/scripts/env-manager.js +351 -0
  701. package/scripts/final-test.js +78 -0
  702. package/scripts/python-env.js +79 -0
  703. package/scripts/scan_dependencies.py +461 -0
  704. package/scripts/setup-python-env.js +700 -0
  705. package/scripts/test-alluser.js +48 -0
  706. package/scripts/test-different-version.js +86 -0
  707. package/scripts/test-direct.js +63 -0
  708. package/scripts/test-extract-installer.js +28 -0
  709. package/scripts/test-install-log.js +54 -0
  710. package/scripts/test-installer.js +39 -0
  711. package/scripts/test-integration.js +250 -0
  712. package/scripts/test-real-install.js +210 -0
  713. package/scripts/test-targetdir.js +49 -0
  714. package/scripts/test-venv-real.js +47 -0
  715. package/scripts/test-venv-simple.js +57 -0
  716. package/scripts/test-wait.js +49 -0
  717. package/scripts/test-with-log.js +63 -0
  718. package/extensions/services/web/config.yaml +0 -149
@@ -0,0 +1,1117 @@
1
+ # 远程模块(Remote Module)设计
2
+
3
+ ## 1. 概述
4
+
5
+ 远程模块功能允许一个 Kite 实例(**卫星 Kite**)通过网络接入另一个 Kite 实例(**中心 Kite**),双方的模块可以互相发现、互相调用工具、互相收发事件,如同在同一台机器上运行。
6
+
7
+ **核心场景:** 用户在本地运行中心 Kite,在其他机器或其他目录运行卫星 Kite。在中心 Web 管理后台生成配对串,粘贴到卫星 Web 管理后台,即完成接入。
8
+
9
+ **卫星无需公网 IP。** 卫星主动向中心发起 WebSocket 出站连接,连接建立后双向通信。只要中心 Kite 的 Bridge Server 端口对卫星可达即可(公网、LAN、内网穿透均可)。支持跨域、跨 NAT。
10
+
11
+ ## 2. 架构总览
12
+
13
+ ### 2.1 当前单机架构
14
+
15
+ ```mermaid
16
+ graph TB
17
+ subgraph "单机 Kite"
18
+ L[Launcher<br/>进程管理] --> K[Kernel<br/>127.0.0.1:动态端口]
19
+ L --> M1[模块 A]
20
+ L --> M2[模块 B]
21
+ L --> W[Web<br/>0.0.0.0:18766]
22
+
23
+ M1 -->|WS RPC| K
24
+ M2 -->|WS RPC| K
25
+ W -->|WS RPC| K
26
+ end
27
+ ```
28
+
29
+ ### 2.2 远程模块架构
30
+
31
+ ```mermaid
32
+ graph TB
33
+ subgraph hub["中心 Kite(Hub)"]
34
+ L[Launcher] --> K[Kernel<br/>127.0.0.1]
35
+ L --> M1[本地模块 A]
36
+ L --> M2[本地模块 B]
37
+ L --> W[Web 模块<br/>0.0.0.0:18766]
38
+ L --> BS[Bridge Server<br/>0.0.0.0:固定端口]
39
+
40
+ M1 -->|WS RPC| K
41
+ M2 -->|WS RPC| K
42
+
43
+ BS -->|Kernel 代理| K
44
+
45
+ W -.->|配对管理 RPC| BS
46
+ end
47
+
48
+ subgraph sat["卫星 Kite(Satellite)"]
49
+ SL[Launcher] --> SK[Kernel<br/>127.0.0.1]
50
+ SL --> BC[Bridge Client]
51
+ SL --> SW[Web 模块]
52
+ SL --> SM1[远程模块 X]
53
+ SL --> SM2[远程模块 Y]
54
+
55
+ SM1 -->|WS RPC| SK
56
+ SM2 -->|WS RPC| SK
57
+ SM1 -->|WS RPC| SK
58
+ SM2 -->|WS RPC| SK
59
+
60
+ BC -->|Kernel 代理| SK
61
+ BC -->|Launcher 代理| SL
62
+ end
63
+
64
+ BC ===|"WSS 隧道<br/>wss://hub:端口/ws/bridge<br/>卫星主动出站连接"| BS
65
+
66
+ style BS fill:#f96,stroke:#333
67
+ style BC fill:#f96,stroke:#333
68
+ style W fill:#9cf,stroke:#333
69
+ style SW fill:#9cf,stroke:#333
70
+ ```
71
+
72
+ ### 2.3 三个角色的职责边界
73
+
74
+ | 组件 | 所属 | 职责 |
75
+ |------|------|------|
76
+ | **Web 模块** | 两侧 | 仅负责配对操作(生成/粘贴配对串)、session_token 生命周期管理、卫星使用统计与审计查看 |
77
+ | **Bridge Server** | 中心侧 | 独立模块,固定端口。接受卫星 WSS 连接,代理 Kernel RPC,承载工具调用代理 |
78
+ | **Bridge Client** | 卫星侧 | 独立模块。连接中心 Bridge Server,双向同步 Kernel 注册和事件,代理中心对卫星模块的管理操作 |
79
+
80
+ ### 2.4 设计理念
81
+
82
+ | 原则 | 决策 |
83
+ |------|------|
84
+ | 零侵入 | 不修改 Kernel、Launcher 核心代码 |
85
+ | 模块独立 | Bridge Server 和 Bridge Client 是独立模块,Web 模块保持轻量 |
86
+ | 模块无感知 | 两侧的普通模块无需知道对方的存在,照常连接 Kernel WS |
87
+ | 双向对等 | 两侧模块可互相发现、互相调用工具、互相收发事件 |
88
+ | 隧道复用 | 单条 WebSocket 承载 Registry + Event + Proxy + Control + Manage 五种通道 |
89
+ | 卫星无需公网 | 卫星主动出站连接,穿透 NAT,无需开放任何端口 |
90
+
91
+ ## 3. 核心概念
92
+
93
+ ### 3.1 角色定义
94
+
95
+ | 角色 | 说明 |
96
+ |------|------|
97
+ | **中心 Kite(Hub)** | 运行完整 Kite 实例,Bridge Server 对外暴露固定端口,接受卫星接入 |
98
+ | **卫星 Kite(Satellite)** | 运行完整 Kite 实例,Bridge Client 主动连接中心,双方模块互通 |
99
+ | **Bridge Server** | 中心侧独立模块,固定端口,WSS 端点,隧道的服务端 |
100
+ | **Bridge Client** | 卫星侧独立模块,主动连接中心,隧道的客户端 |
101
+
102
+ ### 3.2 信息流向(双向)
103
+
104
+ ```mermaid
105
+ graph LR
106
+ subgraph "中心 Kite"
107
+ HM[中心模块]
108
+ HK[Kernel]
109
+ BS[Bridge Server]
110
+ end
111
+
112
+ subgraph "卫星 Kite"
113
+ SM[卫星模块]
114
+ SK[Kernel]
115
+ BC[Bridge Client]
116
+ end
117
+
118
+ HM -->|"① 注册到"| HK
119
+ SM -->|"① 注册到"| SK
120
+
121
+ BS -->|"② 同步卫星模块到"| HK
122
+ BC -->|"② 同步中心模块到"| SK
123
+
124
+ HM -->|"③ 发现卫星模块 → 调用工具"| BS
125
+ SM -->|"③ 发现中心模块 → 调用工具"| BC
126
+
127
+ BS <-->|"隧道"| BC
128
+
129
+ HK <-->|"④ 事件双向转发"| BS
130
+ SK <-->|"④ 事件双向转发"| BC
131
+ ```
132
+
133
+ **双向能力说明:**
134
+
135
+ - **中心 → 卫星:** 中心模块通过 Kernel 发现卫星模块 → 通过 Bridge 隧道代理调用卫星工具
136
+ - **卫星 → 中心:** 卫星模块通过 Kernel 发现中心模块 → 通过 Bridge 隧道代理调用中心工具
137
+ - **事件互通:** 两侧 Kernel 的事件通过 Bridge 隧道双向转发
138
+
139
+ ## 4. 连接与认证
140
+
141
+ ### 4.1 配对流程
142
+
143
+ 用户在中心 Web UI 生成一段配对串(包含 Bridge Server 地址 + 一次性配对码),复制后粘贴到卫星 Web UI。
144
+
145
+ ```mermaid
146
+ sequenceDiagram
147
+ participant U as 用户
148
+ participant HW as 中心 Web UI
149
+ participant BS as Bridge Server
150
+ participant BC as Bridge Client
151
+ participant SW as 卫星 Web UI
152
+
153
+ Note over HW: 中心 Kite 正常运行
154
+
155
+ U->>HW: 点击「生成配对码」
156
+ HW->>BS: RPC bridge.generate_pairing
157
+ BS-->>HW: 返回配对 token
158
+ HW-->>U: 显示配对串<br/>如 "kite://192.168.1.1:28766/a3f8x9k2"
159
+
160
+ U->>U: 复制配对串
161
+
162
+ U->>SW: 粘贴配对串
163
+ SW->>BC: 传递配对信息(通过 Kernel 事件)
164
+
165
+ BC->>BS: WSS 连接 + 配对码认证
166
+ BS->>BS: 验证配对码,生成持久 session_token
167
+ BS-->>BC: bridge.welcome(含 session_token)
168
+
169
+ BC->>BC: 持久化 session_token
170
+
171
+ BC-->>SW: 通知配对成功
172
+ SW-->>U: 显示「已连接到 中心Kite」
173
+
174
+ Note over BC,BS: 后续重连自动使用 session_token
175
+ ```
176
+
177
+ ### 4.2 配对串格式
178
+
179
+ ```
180
+ kite://{bridge_server_host}:{bridge_server_port}/{one_time_code}
181
+
182
+ 示例:
183
+ kite://192.168.1.100:28766/a3f8x9k2
184
+ kite://my-server.example.com:28766/b7c2m4p1
185
+ ```
186
+
187
+ - 用户只需复制粘贴,无需手动填写 IP 和端口
188
+ - 一次性码 5 分钟有效,用完即废
189
+ - 配对串可通过任意方式传递(聊天、扫码、口头等)
190
+
191
+ ### 4.3 认证机制
192
+
193
+ | 阶段 | 凭证 | 说明 |
194
+ |------|------|------|
195
+ | 首次配对 | 一次性配对码 | 从中心 Web UI 生成,5 分钟有效 |
196
+ | 正常连接 | session_token | 配对成功后颁发,持久保存 |
197
+ | 断线重连 | session_token | 自动重连,无需用户介入 |
198
+ | 吊销 | 中心主动吊销 | 中心可随时吊销某卫星的 session_token |
199
+
200
+ ### 4.4 网络要求
201
+
202
+ ```mermaid
203
+ graph LR
204
+ subgraph "卫星侧(无需公网 IP)"
205
+ BC[Bridge Client]
206
+ end
207
+
208
+ subgraph "中心侧(需固定端口可达)"
209
+ BS[Bridge Server<br/>0.0.0.0:28766]
210
+ end
211
+
212
+ BC -->|"WSS 出站连接<br/>卫星主动发起"| BS
213
+
214
+ style BC fill:#fbf
215
+ style BS fill:#f96
216
+ ```
217
+
218
+ | 场景 | 中心 | 卫星 | 是否支持 |
219
+ |------|------|------|---------|
220
+ | 同一局域网 | LAN IP | LAN IP | ✅ |
221
+ | 中心有公网 IP | 公网 IP | NAT 内 | ✅ |
222
+ | 中心有域名 | 域名 | 任意 | ✅ |
223
+ | 双方都在 NAT 内 | 需内网穿透 | 任意 | ✅(frp/ngrok 等穿透中心端口即可) |
224
+ | 卫星在公网,中心在 NAT | — | — | ❌ 不支持(中心必须可达) |
225
+
226
+ ## 5. 隧道协议
227
+
228
+ Bridge Server 和 Bridge Client 之间通过单条 WebSocket 连接传输所有消息,分为五个通道。
229
+
230
+ ### 5.1 消息信封
231
+
232
+ ```json
233
+ {
234
+ "id": "消息唯一ID(用于请求-响应配对)",
235
+ "ch": "registry | event | proxy | control | manage",
236
+ "action": "具体动作",
237
+ "data": { ... }
238
+ }
239
+ ```
240
+
241
+ ### 5.2 Registry 通道(`ch: "registry"`)
242
+
243
+ 双向同步模块注册信息。
244
+
245
+ **方向 A:卫星模块 → 中心 Kernel(Bridge Client → Server)**
246
+
247
+ | action | 说明 |
248
+ |--------|------|
249
+ | `register` | 注册卫星模块到中心 |
250
+ | `heartbeat` | 卫星模块心跳 |
251
+ | `deregister` | 注销卫星模块 |
252
+
253
+ **方向 B:中心模块 → 卫星 Kernel(Bridge Server → Client)**
254
+
255
+ | action | 说明 |
256
+ |--------|------|
257
+ | `register` | 注册中心模块到卫星 |
258
+ | `heartbeat` | 中心模块心跳 |
259
+ | `deregister` | 注销中心模块 |
260
+
261
+ **响应(双向):**
262
+
263
+ | action | 说明 |
264
+ |--------|------|
265
+ | `register_ack` | 注册确认 |
266
+ | `heartbeat_ack` | 心跳确认 |
267
+
268
+ **示例(卫星模块注册到中心):**
269
+ ```json
270
+ {
271
+ "id": "msg-001",
272
+ "ch": "registry",
273
+ "action": "register",
274
+ "data": {
275
+ "module_id": "assistant",
276
+ "module_type": "agent",
277
+ "name": "对话助手",
278
+ "tools": { "search_web": { "description": "搜索网页" } },
279
+ "events_publish": { "assistant.response": {} },
280
+ "events_subscribe": { "channel.message.*": {} },
281
+ "metadata": {}
282
+ }
283
+ }
284
+ ```
285
+
286
+ ### 5.3 Event 通道(`ch: "event"`)
287
+
288
+ 双向转发 Kernel 事件。
289
+
290
+ | action | 方向 | 说明 |
291
+ |--------|------|------|
292
+ | `publish` | 双向 | 转发事件 |
293
+ | `subscribe` | 双向 | 订阅同步 |
294
+ | `unsubscribe` | 双向 | 取消订阅 |
295
+ | `ack` | 双向 | 事件确认 |
296
+
297
+ ### 5.4 Proxy 通道(`ch: "proxy"`)
298
+
299
+ 双向代理工具调用(RPC 请求通过隧道转发)。
300
+
301
+ **请求(双向发起):**
302
+ ```json
303
+ {
304
+ "id": "msg-100",
305
+ "ch": "proxy",
306
+ "action": "request",
307
+ "data": {
308
+ "target_module": "assistant",
309
+ "method": "search_web",
310
+ "params": {"query": "kite framework"}
311
+ }
312
+ }
313
+ ```
314
+
315
+ **响应:**
316
+ ```json
317
+ {
318
+ "id": "msg-100",
319
+ "ch": "proxy",
320
+ "action": "response",
321
+ "data": {
322
+ "result": "搜索结果..."
323
+ }
324
+ }
325
+ ```
326
+
327
+ ### 5.5 Control 通道(`ch: "control"`)
328
+
329
+ 桥接管理和状态同步。
330
+
331
+ | action | 方向 | 说明 |
332
+ |--------|------|------|
333
+ | `ping` / `pong` | 双向 | 30s 心跳保活 |
334
+ | `status` | 卫星 → 中心 | 卫星状态上报(模块列表、资源使用等) |
335
+ | `disconnect` | 中心 → 卫星 | 主动断开(如 token 吊销) |
336
+
337
+ ### 5.6 Manage 通道(`ch: "manage"`)
338
+
339
+ 中心远程管理卫星模块生命周期。
340
+
341
+ **模块启停(中心 → 卫星):**
342
+ ```json
343
+ {
344
+ "id": "msg-200",
345
+ "ch": "manage",
346
+ "action": "module_start",
347
+ "data": { "module_name": "model_service" }
348
+ }
349
+ ```
350
+
351
+ ```json
352
+ {
353
+ "id": "msg-201",
354
+ "ch": "manage",
355
+ "action": "module_stop",
356
+ "data": { "module_name": "model_service" }
357
+ }
358
+ ```
359
+
360
+ **模块列表查询(中心 → 卫星):**
361
+ ```json
362
+ {
363
+ "id": "msg-202",
364
+ "ch": "manage",
365
+ "action": "list_modules"
366
+ }
367
+ ```
368
+
369
+ **响应(卫星 → 中心):**
370
+ ```json
371
+ {
372
+ "id": "msg-202",
373
+ "ch": "manage",
374
+ "action": "list_modules_ack",
375
+ "data": {
376
+ "modules": [
377
+ { "name": "assistant", "config_state": "enabled", "desired_state": "running", "actual_state": "running" },
378
+ { "name": "model_service", "config_state": "manual", "desired_state": "stopped", "actual_state": "stopped" }
379
+ ]
380
+ }
381
+ }
382
+ ```
383
+
384
+ **状态变更(中心 → 卫星):**
385
+ ```json
386
+ {
387
+ "id": "msg-203",
388
+ "ch": "manage",
389
+ "action": "module_set_state",
390
+ "data": { "module_name": "model_service", "state": "enabled" }
391
+ }
392
+ ```
393
+
394
+ ## 6. Bridge Server(中心侧独立模块)
395
+
396
+ ### 6.1 模块定义
397
+
398
+ ```yaml
399
+ # extensions/services/bridge_server/module.md
400
+ ---
401
+ name: bridge_server
402
+ display_name: Bridge Server
403
+ version: "1.0"
404
+ type: service
405
+ state: enabled
406
+ runtime: python
407
+ entry: entry.py
408
+ preferred_port: 28766 # 固定端口,对外暴露
409
+ advertise_ip: 0.0.0.0
410
+ depends_on:
411
+ - kernel
412
+ events:
413
+ - bridge.satellite.connected
414
+ - bridge.satellite.disconnected
415
+ - bridge.satellite.module_synced
416
+ subscriptions:
417
+ - module.started
418
+ - module.stopped
419
+ - module.ready
420
+ ---
421
+ ```
422
+
423
+ ### 6.2 职责
424
+
425
+ 1. **接受卫星连接** — `/ws/bridge` WebSocket 端点(WSS,自签名 SSL)
426
+ 2. **认证** — 验证配对码或 session_token(token 数据由 Web 模块管理,Bridge Server 通过 RPC 查询)
427
+ 3. **Kernel 双向代理** — 卫星模块注册到中心 Kernel + 中心模块注册到卫星 Kernel
428
+ 4. **Event 双向代理** — 中心 Kernel ↔ 隧道 ↔ 卫星 Kernel
429
+ 5. **Proxy 双向代理** — RPC 请求通过隧道转发到对端模块
430
+ 6. **Manage 代理** — 中心对卫星模块的远程启停管理
431
+ 7. **统计上报** — 向 Web 模块上报使用数据(事件/调用次数、流量、在线时长等)
432
+
433
+ ### 6.3 架构
434
+
435
+ ```mermaid
436
+ graph TB
437
+ subgraph "Bridge Server 模块"
438
+ EP["/ws/bridge 端点<br/>WSS, 端口 28766"]
439
+ RP[Kernel 代理<br/>双向同步]
440
+ EVP[Event 代理<br/>双向转发]
441
+ PP[Proxy 代理<br/>双向工具调用]
442
+ MP[Manage 代理<br/>远程模块管理]
443
+ SM[卫星管理器<br/>连接/统计跟踪]
444
+ AU[审计记录器<br/>操作日志]
445
+ end
446
+
447
+ SAT1[卫星 A] -->|WSS| EP
448
+ SAT2[卫星 B] -->|WSS| EP
449
+
450
+ RP -->|WS RPC| K[中心 Kernel]
451
+ EVP -->|WS RPC| K
452
+ PP -->|WS RPC| LOCAL[中心本地模块]
453
+
454
+ SM -->|统计数据| W[Web 模块]
455
+ AU -->|审计日志| DISK[持久化存储]
456
+
457
+ style EP fill:#f96
458
+ ```
459
+
460
+ ### 6.4 Kernel 双向代理
461
+
462
+ **卫星模块 → 中心 Kernel:**
463
+
464
+ ```
465
+ 收到卫星的 registry.register
466
+
467
+ ├─① 改写 module_id:添加节点前缀
468
+ │ 原始: "assistant"
469
+ │ 改写: "{satellite_name}@assistant"(如 "office@assistant")
470
+
471
+ ├─② 自适应探测(详见第 8 节):
472
+ │ 探测卫星模块是否可达
473
+ │ 可达 → 直连
474
+ │ 不可达 → 代理
475
+
476
+ └─③ 通过 Kernel WS RPC 注册到中心
477
+ RPC: registry.register
478
+ ```
479
+
480
+ **中心模块 → 卫星 Kernel(通过隧道):**
481
+
482
+ ```
483
+ 监听中心 module.started / module.stopped 事件
484
+
485
+ ├─① 从中心 Kernel 获取模块完整注册信息
486
+ │ RPC: registry.lookup
487
+
488
+ ├─② 改写 module_id:添加节点前缀
489
+ │ 原始: "model_service"
490
+ │ 改写: "main@model_service"
491
+
492
+ ├─③ 通过隧道将中心模块信息发给 Bridge Client
493
+ │ Bridge Client 探测中心模块是否可达
494
+ │ 可达 → 直连
495
+ │ 不可达 → 代理
496
+
497
+ └─④ Bridge Client 通过 RPC 注册到卫星 Kernel
498
+ ```
499
+
500
+ ### 6.5 与 Web 模块的接口
501
+
502
+ Bridge Server 和 Web 模块之间通过 Kernel WS RPC 交互:
503
+
504
+ **Bridge Server 提供的 RPC 方法:**
505
+
506
+ | 方法 | 说明 |
507
+ |------|------|
508
+ | `bridge.generate_pairing` | 生成配对码 |
509
+ | `bridge.revoke_pairing` | 撤销未使用的配对码 |
510
+ | `bridge.list_satellites` | 列出所有卫星(含在线状态) |
511
+ | `bridge.disconnect_satellite` | 吊销卫星 session_token 并断开 |
512
+ | `bridge.list_satellite_modules` | 查看卫星的模块列表 |
513
+ | `bridge.start_satellite_module` | 远程启动卫星模块 |
514
+ | `bridge.stop_satellite_module` | 远程停止卫星模块 |
515
+
516
+ **Web 模块提供的 RPC 方法:**
517
+
518
+ | 方法 | 说明 |
519
+ |------|------|
520
+ | `web.report_bridge_stats` | 接收统计数据上报 |
521
+ | `web.validate_session_token` | 查询 session_token 有效性 |
522
+
523
+ ## 7. Bridge Client(卫星侧独立模块)
524
+
525
+ ### 7.1 模块定义
526
+
527
+ ```yaml
528
+ # extensions/services/bridge_client/module.md
529
+ ---
530
+ name: bridge_client
531
+ display_name: Bridge Client
532
+ version: "1.0"
533
+ type: service
534
+ state: manual # 默认不启动,配对后启用
535
+ runtime: python
536
+ entry: entry.py
537
+ preferred_port: 0 # 动态端口(用于代理中心模块的工具调用)
538
+ depends_on:
539
+ - kernel
540
+ events:
541
+ - bridge.connected
542
+ - bridge.disconnected
543
+ - bridge.module.synced
544
+ subscriptions:
545
+ - module.started
546
+ - module.stopped
547
+ - module.ready
548
+ ---
549
+ ```
550
+
551
+ ### 7.2 职责
552
+
553
+ 1. **连接中心** — 主动出站 WSS 连接到 Bridge Server
554
+ 2. **注册同步(上行)** — 将本地模块注册信息同步到中心 Kernel
555
+ 3. **注册同步(下行)** — 将中心模块注册信息注册到本地 Kernel
556
+ 4. **事件桥接** — 本地 Kernel ↔ 隧道 ↔ 中心 Kernel
557
+ 5. **工具代理(入站)** — 代理中心对卫星模块的工具调用
558
+ 6. **工具代理(出站)** — 代理卫星模块对中心模块的工具调用
559
+ 7. **管理代理** — 接收中心的模块启停指令,转发给本地 Launcher
560
+ 8. **断线重连** — 指数退避自动重连
561
+
562
+ ### 7.3 工作流程
563
+
564
+ ```mermaid
565
+ sequenceDiagram
566
+ participant BC as Bridge Client
567
+ participant LK as 卫星 Kernel
568
+ participant LL as 卫星 Launcher
569
+ participant BS as 中心 Bridge Server
570
+
571
+ Note over BC: 启动
572
+
573
+ BC->>LK: RPC registry.register(注册自身)
574
+ BC->>LK: RPC event.subscribe(订阅 module.*)
575
+
576
+ BC->>BS: WSS 连接(session_token)
577
+ BS-->>BC: bridge.welcome + 中心模块列表
578
+
579
+ Note over BC: 双向同步
580
+
581
+ BC->>LK: RPC registry.lookup(获取所有本地模块)
582
+ loop 每个本地模块(过滤后)
583
+ BC->>BS: registry.register(上行:同步到中心)
584
+ end
585
+
586
+ loop 每个中心模块(从 welcome 获取)
587
+ BC->>LK: RPC registry.register(下行:注册到本地)
588
+ end
589
+
590
+ Note over BC,BS: 持续运行
591
+
592
+ LK-->>BC: 本地事件
593
+ BC->>BS: event.publish(上行转发)
594
+
595
+ BS-->>BC: 中心事件
596
+ BC->>LK: RPC event.publish(下行转发)
597
+
598
+ BS-->>BC: manage.module_stop(远程管理)
599
+ BC->>LL: RPC launcher.stop_module
600
+
601
+ BS-->>BC: proxy.request(中心调卫星工具)
602
+ BC->>LK: RPC 查找目标模块
603
+ BC-->>BS: proxy.response
604
+ ```
605
+
606
+ ### 7.4 模块过滤
607
+
608
+ **默认排除(不同步到对端):**
609
+ - `kernel` — 本地基础设施
610
+ - `launcher` — 本地进程管理
611
+ - `bridge_server` / `bridge_client` — 桥接自身
612
+ - `watchdog` — 本地监控
613
+ - `web` — Web 管理界面(两侧互相注册无意义)
614
+
615
+ **配置文件 `data/config/bridge.yaml`:**
616
+ ```yaml
617
+ bridge:
618
+ hub_url: "" # 配对时自动填充
619
+ session_token: "" # 配对时自动填充
620
+ satellite_name: "办公室的笔记本"
621
+ auto_connect: true # 启动时自动连接
622
+ sync:
623
+ include: [] # 白名单(空=全部)
624
+ exclude: # 黑名单(追加到默认排除列表)
625
+ - backup # 示例:不同步备份模块
626
+ sync_tools: true
627
+ sync_hooks: false
628
+ sync_events: true
629
+ reconnect:
630
+ max_interval: 60 # 最大重连间隔(秒)
631
+ ```
632
+
633
+ ## 8. 双向工具调用(自适应直连/代理)
634
+
635
+ ### 8.1 两种调用路径
636
+
637
+ 工具调用需要网络可达性。Bridge 自动探测最优路径:
638
+
639
+ | 路径 | 说明 | 延迟 | 使用条件 |
640
+ |------|------|------|---------|
641
+ | **直连** | 调用方直接访问对端模块 | 最低 | 网络可达(同 LAN) |
642
+ | **代理** | RPC 请求通过 Bridge WSS 隧道转发 | 多一跳 | 直连不通时自动降级 |
643
+
644
+ **原则:能直连就直连,代理是降级方案。**
645
+
646
+ ### 8.2 自适应探测机制
647
+
648
+ ```mermaid
649
+ sequenceDiagram
650
+ participant BC as Bridge Client
651
+ participant BS as Bridge Server
652
+
653
+ Note over BC,BS: 隧道建立后,交换网络信息
654
+
655
+ BC->>BS: control.status<br/>{satellite_ip: "192.168.1.10",<br/> modules: [{id: "assistant", ...}, ...]}
656
+ BS->>BS: 逐个探测卫星模块端点<br/>RPC {module_id}.health
657
+
658
+ alt 探测成功(直连可达)
659
+ BS->>BS: 标记 assistant → direct
660
+ else 探测失败(直连不通)
661
+ BS->>BS: 标记 assistant → proxy
662
+ end
663
+
664
+ BS->>BS: 注册到中心 Kernel(使用对应模式)
665
+
666
+ Note over BC,BS: 反向同理:BS 告知中心模块信息,BC 探测可达性
667
+ ```
668
+
669
+ **探测流程详细说明:**
670
+
671
+ 1. **信息交换:** 隧道建立后,双方通过 `control.status` 交换各自的模块列表和 IP
672
+ 2. **可达性探测:** 收到对端信息后,逐个尝试 RPC `{module_id}.health`(超时 3s)
673
+ 3. **结果分类:**
674
+ - 探测成功 → 该模块标记为 `direct`,注册时使用对端原始地址
675
+ - 探测失败 → 该模块标记为 `proxy`,注册时使用 Bridge 代理
676
+ 4. **混合模式:** 同一个卫星的不同模块可能有不同结果
677
+ 5. **周期复查:** 每 5 分钟重新探测一次,网络环境变化时自动切换
678
+
679
+ ### 8.3 中心调用卫星工具
680
+
681
+ **直连模式(LAN,自动探测可达):**
682
+
683
+ ```mermaid
684
+ sequenceDiagram
685
+ participant Agent as 中心 Agent
686
+ participant HK as 中心 Kernel
687
+ participant RM as 卫星模块 X
688
+
689
+ Agent->>HK: RPC registry.lookup(tools.search_web)
690
+ HK-->>Agent: module: "office@module_x"
691
+
692
+ Agent->>RM: RPC module_x.search_web
693
+ RM-->>Agent: {"result": "搜索结果"}
694
+
695
+ Note over Agent,RM: 直连,无隧道开销
696
+ ```
697
+
698
+ **代理模式(跨 NAT,自动降级):**
699
+
700
+ ```mermaid
701
+ sequenceDiagram
702
+ participant Agent as 中心 Agent
703
+ participant HK as 中心 Kernel
704
+ participant BS as Bridge Server
705
+ participant BC as Bridge Client
706
+ participant RM as 卫星模块 X
707
+
708
+ Agent->>HK: RPC registry.lookup(tools.search_web)
709
+ HK-->>Agent: module: "office@module_x"<br/>(标记为 proxy)
710
+
711
+ Agent->>BS: RPC office@module_x.search_web
712
+ BS->>BC: 隧道: proxy.request
713
+ BC->>RM: RPC module_x.search_web
714
+ RM-->>BC: {"result": "搜索结果"}
715
+ BC-->>BS: 隧道: proxy.response
716
+ BS-->>Agent: {"result": "搜索结果"}
717
+ ```
718
+
719
+ ### 8.4 卫星调用中心工具
720
+
721
+ **直连模式:**
722
+
723
+ ```mermaid
724
+ sequenceDiagram
725
+ participant SM as 卫星模块 Y
726
+ participant SK as 卫星 Kernel
727
+ participant HM as 中心模块 A
728
+
729
+ SM->>SK: RPC registry.lookup(tools.read_file)
730
+ SK-->>SM: module: "main@kernel"
731
+
732
+ SM->>HM: RPC kernel.read_file
733
+ HM-->>SM: {"content": "文件内容"}
734
+ ```
735
+
736
+ **代理模式:**
737
+
738
+ ```mermaid
739
+ sequenceDiagram
740
+ participant SM as 卫星模块 Y
741
+ participant SK as 卫星 Kernel
742
+ participant BC as Bridge Client
743
+ participant BS as Bridge Server
744
+ participant HM as 中心模块 A
745
+
746
+ SM->>SK: RPC registry.lookup(tools.read_file)
747
+ SK-->>SM: module: "main@kernel"<br/>(标记为 proxy)
748
+
749
+ SM->>BC: RPC main@kernel.read_file
750
+ BC->>BS: 隧道: proxy.request
751
+ BS->>HM: RPC kernel.read_file
752
+ HM-->>BS: {"content": "文件内容"}
753
+ BS-->>BC: 隧道: proxy.response
754
+ BC-->>SM: {"content": "文件内容"}
755
+ ```
756
+
757
+ ## 9. 远程模块管理
758
+
759
+ ### 9.1 中心管理卫星模块
760
+
761
+ 中心可以通过 Web UI 或 RPC 管理卫星上的模块生命周期:
762
+
763
+ ```mermaid
764
+ sequenceDiagram
765
+ participant U as 用户(中心 Web UI)
766
+ participant HW as 中心 Web 模块
767
+ participant BS as Bridge Server
768
+ participant BC as Bridge Client
769
+ participant SL as 卫星 Launcher
770
+
771
+ U->>HW: 点击「启动卫星模块 model_service」
772
+ HW->>BS: RPC bridge.start_satellite_module
773
+ BS->>BC: 隧道: manage.module_start
774
+ BC->>SL: RPC launcher.start_module
775
+ SL-->>BC: {"ok": true}
776
+ BC-->>BS: 隧道: manage.module_start_ack
777
+ BS-->>HW: {"ok": true}
778
+ HW-->>U: 显示「模块已启动」
779
+
780
+ Note over BC: 模块启动后自动同步注册到中心
781
+ ```
782
+
783
+ ### 9.2 管理能力
784
+
785
+ | 操作 | 说明 | 通过 |
786
+ |------|------|------|
787
+ | 查看卫星模块列表 | 含三层状态(config/desired/actual) | manage.list_modules |
788
+ | 启动卫星模块 | 调用卫星 Launcher RPC | manage.module_start |
789
+ | 停止卫星模块 | 调用卫星 Launcher RPC | manage.module_stop |
790
+ | 修改模块 state | 修改卫星 module.md 的 state | manage.module_set_state |
791
+ | 查看卫星模块日志 | 读取卫星模块 latest.log | manage.get_log |
792
+
793
+ ### 9.3 权限控制
794
+
795
+ - 远程管理需要中心侧的 session_token 有效
796
+ - 卫星侧 Bridge Client 可配置允许的管理操作范围:
797
+
798
+ ```yaml
799
+ # data/config/bridge.yaml
800
+ bridge:
801
+ manage:
802
+ allow_start: true # 允许中心启动模块
803
+ allow_stop: true # 允许中心停止模块
804
+ allow_set_state: false # 禁止中心修改模块 state(安全敏感)
805
+ allow_get_log: true # 允许中心查看日志
806
+ ```
807
+
808
+ ## 10. 命名空间与标识规范
809
+
810
+ ### 10.1 分隔符
811
+
812
+ 整个系统只使用两种分隔符:
813
+
814
+ | 分隔符 | 用途 | 示例 |
815
+ |--------|------|------|
816
+ | `@` | 节点边界(节点名 与 模块名 的分界) | `office@assistant` |
817
+ | `.` | Kernel 路径层级 | `office@assistant.tools.search_web` |
818
+
819
+ `@` 分隔"谁的",`.` 分隔"的什么"。**本地模块可省略 `@` 前缀**,保持向后兼容。
820
+
821
+ ### 10.2 FQMN(Fully Qualified Module Name)
822
+
823
+ 远程模块在 Kernel 中注册时,使用完全限定名(FQMN)以区分来源节点:
824
+
825
+ ```
826
+ 格式: {node_name}@{module_id}
827
+
828
+ 示例:
829
+ office@assistant ← 卫星节点 office 的 assistant 模块
830
+ server2@model_service ← 卫星节点 server2 的 model_service 模块
831
+ main@kernel ← 中心节点的 kernel 模块(完整写法)
832
+ kernel ← 中心节点的 kernel 模块(本地简写,等价于 main@kernel)
833
+ ```
834
+
835
+ **与 Kernel `.` 路径无歧义:**
836
+
837
+ ```
838
+ office@assistant.tools.search_web
839
+ └─ node ─┘└ module ┘└ Kernel 字段路径 ┘
840
+ ```
841
+
842
+ 解析规则:看到 `@` → 前面是节点名,后面是 `module_id.field.path`。没有 `@` → 本地模块。**一行代码,零歧义。**
843
+
844
+ ### 10.3 节点命名规则
845
+
846
+ **节点名(node_name):**
847
+
848
+ | 问题 | 回答 |
849
+ |------|------|
850
+ | 谁来命名? | 用户命名。中心固定 `main`;卫星在 `bridge.yaml` 的 `satellite_name` 中配置 |
851
+ | 什么时候命名? | 中心:固定不可改;卫星:配对前由用户在 Web UI 设置 |
852
+ | 可以修改吗? | 卫星可以。修改后下次连接生效。Bridge Server 先清理旧名注册,再用新名重新注册 |
853
+ | 命名规则? | `[a-z0-9_-]+`,1-32 字符。"My Laptop" → `my-laptop`。允许中文(`办公室`) |
854
+ | 保留名? | `main`(中心专用)、`local`。卫星不可使用这些名称 |
855
+ | 冲突怎么办? | Bridge Server 检测到同名卫星已存在时,拒绝连接并返回错误 |
856
+
857
+ **示例:**
858
+ ```
859
+ main → 中心节点(固定名称)
860
+ office → 卫星 "办公室"
861
+ my-laptop → 卫星 "我的笔记本"
862
+ server2 → 卫星 "服务器2"
863
+ ```
864
+
865
+ ### 10.4 工具/事件的完整路径
866
+
867
+ **工具查询:**
868
+
869
+ ```
870
+ # 查询远程节点的工具
871
+ RPC registry.get("office@assistant.tools.search_web")
872
+
873
+ # 查询本地工具(简写,不变)
874
+ RPC registry.get("kernel.tools.read_file")
875
+
876
+ # 跨节点搜索
877
+ RPC registry.lookup(field="tools.read_file")
878
+
879
+ # 返回示例
880
+ [
881
+ {
882
+ "field": "tools.read_file",
883
+ "module": "kernel", ← 本地模块返回简写
884
+ "value": {...}
885
+ },
886
+ {
887
+ "field": "tools.read_file",
888
+ "module": "office@assistant", ← 远程模块返回 FQMN
889
+ "value": {...}
890
+ }
891
+ ]
892
+ ```
893
+
894
+ **glob 查询:**
895
+ ```
896
+ module=office@* → 办公室卫星的所有模块
897
+ module=*@assistant → 所有节点的 assistant 模块
898
+ module=*@model_service → 所有节点的 model_service
899
+ ```
900
+
901
+ **事件订阅:**
902
+ ```
903
+ subscribe: ["session.started"] # 所有节点
904
+ subscribe: ["office@*.session.started"] # 节点级过滤
905
+ ```
906
+
907
+ ### 10.5 工具冲突与优先级
908
+
909
+ 当多个节点提供同名工具时(如 `read_file`),调用方需要选择。
910
+
911
+ **两层优先级:**
912
+
913
+ ```
914
+ 第 1 层:节点优先级(哪个节点优先)
915
+ 第 2 层:模块优先级(同一节点内哪个模块优先)
916
+ ```
917
+
918
+ **节点优先级配置(中心侧 `data/config/runtime.yaml`):**
919
+ ```yaml
920
+ remote_modules:
921
+ node_priority: # 越靠前越优先
922
+ - main # 本地优先(可省略,默认第一位)
923
+ - office # 办公室卫星次之
924
+ - server2 # 服务器卫星最后
925
+ ```
926
+
927
+ **默认行为(无需配置):**
928
+ - 本地优先(无 `@` 的模块排最前)
929
+ - 远程模块按字母序
930
+
931
+ ## 11. 断线与恢复
932
+
933
+ ### 11.1 断线处理
934
+
935
+ **中心侧(Bridge Server 检测到卫星断线):**
936
+
937
+ 1. 从中心 Kernel 注销该卫星的所有远程模块(`{node_name}@*`)
938
+ 2. 清理该卫星在 Kernel 上的聚合订阅
939
+ 3. 保留 session_token(允许重连)
940
+ 4. 记录审计日志 `satellite.disconnected`
941
+ 5. 发布 `bridge.satellite.disconnected` 事件
942
+ 6. 更新统计数据
943
+
944
+ **卫星侧(Bridge Client 检测到与中心断线):**
945
+
946
+ 1. 从卫星 Kernel 注销所有中心模块(`main@*`)
947
+ 2. 清理 Kernel 聚合订阅
948
+ 3. 进入指数退避重连(1s → 2s → 4s → ... → 60s 上限)
949
+ 4. 本地模块继续正常运行
950
+ 5. 事件缓存到 outbox(复用现有 outbox 机制)
951
+
952
+ ### 11.2 重连恢复
953
+
954
+ 重连成功后,双方执行完整的全量同步:
955
+
956
+ 1. Bridge Server 发送 `bridge.welcome`(含中心模块列表快照)
957
+ 2. Bridge Client 发送所有本地模块注册信息(全量,幂等覆盖)
958
+ 3. Bridge Server 将中心模块列表通过隧道同步到卫星
959
+ 4. 双方重新建立事件订阅
960
+ 5. Bridge Client 重放 outbox 中的缓存事件
961
+
962
+ ## 12. 安全模型
963
+
964
+ ### 12.1 威胁分析
965
+
966
+ | 威胁 | 缓解措施 |
967
+ |------|---------|
968
+ | 未授权卫星接入 | 配对码一次性 + session_token 可吊销 |
969
+ | 中间人攻击 | WSS(TLS)加密 |
970
+ | 恶意远程模块 | `{node}@` 前缀隔离,中心侧按节点名设权限 |
971
+ | 隧道滥用 | 每卫星模块数上限(20)、事件限流(100/s)、代理超时(30s) |
972
+ | 远程管理误操作 | 卫星侧可配置允许的管理操作范围 |
973
+ | 核心服务暴露 | Kernel 保持 127.0.0.1,不对外暴露 |
974
+
975
+ ### 12.2 信任边界
976
+
977
+ ```mermaid
978
+ graph TB
979
+ subgraph "信任域 A:中心 Kite"
980
+ K[Kernel<br/>127.0.0.1]
981
+ K --- HM[本地模块]
982
+ BS[Bridge Server<br/>0.0.0.0:28766]
983
+ BS ---|内部信任| K
984
+ end
985
+
986
+ subgraph "信任域 B:卫星 Kite"
987
+ SK[Kernel<br/>127.0.0.1]
988
+ SK --- SM[本地模块]
989
+ BC[Bridge Client]
990
+ BC ---|内部信任| SK
991
+ end
992
+
993
+ BS <-->|"TLS 隧道<br/>session_token 认证<br/>限流 + 审计"| BC
994
+
995
+ style BS fill:#f96
996
+ style BC fill:#f96
997
+ ```
998
+
999
+ ## 13. 配置参考
1000
+
1001
+ ### 13.1 中心侧 Bridge Server 配置
1002
+
1003
+ `extensions/services/bridge_server/module.md`:
1004
+
1005
+ ```yaml
1006
+ bridge_server:
1007
+ port: 28766 # 固定对外端口
1008
+ ssl: true # 启用 TLS(自签名证书自动生成)
1009
+ max_satellites: 10 # 最大卫星数
1010
+ max_modules_per_satellite: 20 # 每卫星最大模块数
1011
+ event_rate_limit: 100 # 事件限流(条/秒/卫星)
1012
+ proxy_timeout: 30 # 工具代理超时(秒)
1013
+ audit_log: true # 启用审计日志
1014
+ ```
1015
+
1016
+ ### 13.2 卫星侧 Bridge Client 配置
1017
+
1018
+ `data/config/bridge.yaml`:
1019
+
1020
+ ```yaml
1021
+ bridge:
1022
+ hub_url: "" # 配对时自动填充(Bridge Server 地址)
1023
+ session_token: "" # 配对时自动填充
1024
+ satellite_name: "办公室的笔记本"
1025
+ auto_connect: true
1026
+ sync:
1027
+ include: []
1028
+ exclude: [] # 追加到默认排除列表
1029
+ sync_tools: true
1030
+ sync_hooks: false
1031
+ sync_events: true
1032
+ manage:
1033
+ allow_start: true
1034
+ allow_stop: true
1035
+ allow_set_state: false
1036
+ allow_get_log: true
1037
+ reconnect:
1038
+ max_interval: 60
1039
+ ```
1040
+
1041
+ ## 14. 改造清单
1042
+
1043
+ ### 14.1 必须改动现有代码
1044
+
1045
+ | 改动 | 涉及文件 | 说明 |
1046
+ |------|---------|------|
1047
+ | Kernel 新增 `bridge` 角色 | `kernel/rpc_router.py` | 允许 Bridge Server 代理注册/心跳/注销任意 module_id(约 15 行) |
1048
+
1049
+ ### 14.2 新增模块
1050
+
1051
+ | 模块 | 位置 | 主要文件 |
1052
+ |------|------|---------|
1053
+ | Bridge Server | `extensions/services/bridge_server/` | `module.md` + `entry.py` + `bridge.py`(隧道协议)+ `proxy.py`(RPC 代理)+ `probe.py`(直连探测)+ `audit.py`(审计) |
1054
+ | Bridge Client | `extensions/services/bridge_client/` | `module.md` + `entry.py` + `bridge.py`(隧道协议)+ `proxy.py`(RPC 代理)+ `probe.py`(直连探测) |
1055
+
1056
+ ### 14.3 Web 模块改动
1057
+
1058
+ | 改动 | 说明 |
1059
+ |------|------|
1060
+ | 中心 Web UI | 配对码生成、卫星列表、统计仪表盘、审计日志查看 |
1061
+ | 卫星 Web UI | 粘贴配对串输入框、连接状态显示 |
1062
+ | 首次配对流程 | 解析配对串 → 写 bridge.yaml → 调 Launcher RPC 启动 Bridge Client |
1063
+
1064
+ ### 14.4 设计要点备忘
1065
+
1066
+ | 要点 | 说明 |
1067
+ |------|------|
1068
+ | 事件环路防护 | Bridge 注入 Kernel 的事件记录 event_id,收到自己注入的事件时丢弃 |
1069
+ | session_token 归属 | 由 Bridge Server 全权管理(生成/存储/验证),持久化到自己的数据目录 |
1070
+ | Bridge Client 首次启动 | Web 模块解析配对串 → 写 bridge.yaml → 调 Launcher RPC 启动 Bridge Client |
1071
+ | 卫星 IP 获取 | 优先从 WSS 连接源 IP 获取 > bridge.yaml 手动配置 > 自动探测网卡 |
1072
+ | 重连时序 | 先交换 IP → 探测直连 → 再注册(用探测结果决定模式) |
1073
+ | Bridge Server 启动清理 | 启动时按节点名清理中心 Kernel 中的残留(`{node_name}@*`) |
1074
+ | 超时语义 | proxy_timeout 是 Bridge 端到端总时间(含隧道),调用方超时应大于此值 |
1075
+ | web 模块排除 | 加入默认排除列表(两侧 Web 模块互相注册无意义) |
1076
+ | 同名工具默认路由 | 按节点优先级选择,默认本地优先 |
1077
+
1078
+ ## 15. 实现分阶段
1079
+
1080
+ ### Phase 1:隧道 + 单向调用(MVP)
1081
+
1082
+ - [ ] Kernel 新增 `bridge` 角色(允许代理注册)
1083
+ - [ ] Bridge Server 模块骨架(固定端口、WSS、SSL)
1084
+ - [ ] Bridge Client 模块骨架(WSS 连接、断线重连)
1085
+ - [ ] 隧道协议(消息信封 + registry/control 通道)
1086
+ - [ ] 配对流程(Web UI 生成配对串 → 粘贴 → 连接)
1087
+ - [ ] FQMN 命名(`{node_name}@{module_id}`)
1088
+ - [ ] Kernel 单向同步(卫星 → 中心)+ 心跳代理
1089
+ - [ ] 自适应直连/代理探测 + 工具调用(中心 → 卫星)
1090
+ - [ ] 事件环路防护(event_id 去重)
1091
+ - [ ] Bridge Server 启动时清理残留
1092
+
1093
+ ### Phase 2:双向互通
1094
+
1095
+ - [ ] Kernel 双向同步(中心 → 卫星,`main@{module_id}`)
1096
+ - [ ] 自适应探测反向(卫星探测中心模块可达性)
1097
+ - [ ] 工具调用双向(卫星 → 中心)
1098
+ - [ ] Event 双向转发 + 事件过滤
1099
+ - [ ] outbox 机制(断线期间事件缓存)
1100
+ - [ ] 周期复查(5 分钟重新探测直连/代理)
1101
+ - [ ] 默认工具选择策略(本地优先)
1102
+
1103
+ ### Phase 3:远程管理 + 统计
1104
+
1105
+ - [ ] Manage 通道(中心启停卫星模块)
1106
+ - [ ] 统计数据收集与上报
1107
+ - [ ] 审计日志
1108
+ - [ ] 中心 Web UI:卫星管理页面 + 统计仪表盘 + 审计日志查看
1109
+ - [ ] 每个远程模块显示当前调用模式(直连/代理)
1110
+
1111
+ ### Phase 4:增强
1112
+
1113
+ - [ ] 可配置节点优先级(`node_priority` 列表)
1114
+ - [ ] 各节点可配置模块优先级
1115
+ - [ ] 卫星健康监控(中心 Watchdog 通过 Bridge 监控远程模块)
1116
+ - [ ] 节点级权限 ACL
1117
+ - [ ] 事件限流与反压