@agentunion/kite 1.5.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 (573) 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/cli.js +38 -4
  23. package/core/env_checker.py +96 -0
  24. 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
  25. package/docs/ACP/345/215/217/350/256/256/345/205/274/345/256/271/346/226/271/346/241/210.md +138 -0
  26. 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
  27. package/docs/CLI/345/274/200/345/217/221/350/256/241/345/210/222.md +595 -0
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. package/docs/Evol/346/250/241/345/235/227/350/256/276/350/256/241/346/226/271/346/241/210.md +1154 -0
  34. 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
  35. 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
  36. package/docs/HTTP-RPC/350/277/201/347/247/273/345/210/260WebSocket/350/256/241/345/210/222.md +318 -0
  37. package/docs/INDEX.md +388 -0
  38. package/docs/KITE_DOCS_GUIDE.md +33 -0
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/README.md +46 -0
  56. package/docs/Kite/347/263/273/347/273/237/345/220/257/345/212/250/346/265/201/347/250/213.md +567 -0
  57. package/docs/Launcher/345/220/257/345/212/250/345/231/250/346/226/207/346/241/243.md +745 -0
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. package/docs/Watchdog/350/265/204/346/272/220/347/233/221/346/216/247/347/255/226/347/225/245.md +92 -0
  64. 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
  65. 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
  66. package/docs/WebSocket/350/277/236/346/216/245/351/237/247/346/200/247/346/226/271/346/241/210.md +169 -0
  67. 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
  68. 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
  69. 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
  70. package/docs/audit-api-guide.md +68 -0
  71. package/docs/audit-module-design.md +315 -0
  72. package/docs/audit-module-implementation-summary.md +149 -0
  73. package/docs/llm-context-design.md +52 -0
  74. package/docs/llm-test-enhancement-plan.md +970 -0
  75. package/docs/logs-api-guide.md +42 -0
  76. 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
  77. 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
  78. 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
  79. 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
  80. package/docs//344/272/213/344/273/266/345/244/204/347/220/206/346/234/272/345/210/266.md +388 -0
  81. package/docs//344/272/213/344/273/266/345/244/204/347/220/206/350/247/204/350/214/203.md +113 -0
  82. 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
  83. 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
  84. 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
  85. 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
  86. 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
  87. package/docs//344/274/230/351/233/205/351/200/200/345/207/272/350/247/204/350/214/203.md +362 -0
  88. package/docs//344/276/235/350/265/226/347/256/241/347/220/206/350/257/264/346/230/216.md +141 -0
  89. 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
  90. package/docs//345/210/240/351/231/244kernel-client-example/345/256/214/346/210/220.md +309 -0
  91. package/docs//345/210/240/351/231/244ws-management/345/256/214/346/210/220.md +418 -0
  92. package/docs//345/220/257/345/212/250/344/274/230/345/214/226/346/226/271/346/241/210.md +522 -0
  93. 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
  94. 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
  95. 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
  96. package/docs//345/256/236/347/216/260/350/247/204/345/210/222.md +195 -0
  97. 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
  98. 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
  99. package/docs//346/217/241/346/211/213/350/256/244/350/257/201/346/226/271/346/241/210.md +908 -0
  100. package/docs//346/226/207/346/241/243/346/233/264/346/226/260/346/270/205/345/215/225.md +83 -0
  101. 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
  102. 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
  103. package/docs//346/236/266/346/236/204/345/200/237/351/211/264/346/214/207/345/215/227.md +977 -0
  104. 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
  105. 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
  106. 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
  107. 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
  108. package/docs//346/250/241/345/235/227/345/274/200/345/217/221/346/214/207/345/215/227.md +1824 -0
  109. package/docs//346/250/241/345/235/227/347/203/255/346/233/264/346/226/260.md +89 -0
  110. 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
  111. 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
  112. 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
  113. 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
  114. 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
  115. 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
  116. 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
  117. 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
  118. 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
  119. 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
  120. 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
  121. 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
  122. package/docs//350/277/234/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241.md +451 -0
  123. package/docs//351/207/215/346/236/204/346/234/272/345/210/266/346/270/205/345/215/225.md +192 -0
  124. package/docs//351/223/276/350/267/257/350/277/275/350/270/252/346/226/271/346/241/210.md +242 -0
  125. 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
  126. package/extensions/agents/assistant/entry.py +113 -14
  127. package/extensions/agents/assistant/module.md +27 -22
  128. package/extensions/agents/assistant/server.py +291 -105
  129. package/extensions/channels/acp_channel/entry.py +114 -16
  130. package/extensions/channels/acp_channel/module.md +4 -0
  131. package/extensions/channels/acp_channel/server.py +396 -105
  132. package/extensions/channels/phone_channel/__init__.py +1 -0
  133. package/extensions/channels/phone_channel/entry.py +503 -0
  134. package/extensions/channels/phone_channel/module.md +31 -0
  135. package/extensions/channels/phone_channel/server.py +686 -0
  136. package/extensions/event_hub_bench/entry.py +55 -12
  137. package/extensions/event_hub_bench/module.md +27 -27
  138. package/extensions/services/audit/README.md +134 -0
  139. package/extensions/services/audit/collector.py +73 -0
  140. package/extensions/services/audit/entry.py +444 -0
  141. package/extensions/services/audit/module.md +66 -0
  142. package/extensions/services/audit/query_audit.py +111 -0
  143. package/extensions/services/audit/routes/__init__.py +1 -0
  144. package/extensions/services/audit/routes/routes_audit.py +113 -0
  145. package/extensions/services/audit/schemas/__init__.py +5 -0
  146. package/extensions/services/audit/schemas/audit_event.py +92 -0
  147. package/extensions/services/audit/server.py +542 -0
  148. package/extensions/services/audit/storage.py +95 -0
  149. package/extensions/services/auth/entry.py +1054 -0
  150. package/extensions/services/auth/module.md +31 -0
  151. package/extensions/services/auth/token_store.py +185 -0
  152. package/extensions/services/auth/verifiers/evol_account.py +101 -0
  153. package/extensions/services/auth/verifiers/kite_token.py +38 -0
  154. package/extensions/services/auth/verifiers/pairing_code.py +71 -0
  155. package/extensions/services/backup/entry.py +494 -197
  156. package/extensions/services/backup/module.md +4 -2
  157. package/extensions/services/dataclaw/api/__init__.py +0 -0
  158. package/extensions/services/dataclaw/api/admin.py +367 -0
  159. package/extensions/services/dataclaw/api/copyright.py +175 -0
  160. package/extensions/services/dataclaw/api/credits.py +177 -0
  161. package/extensions/services/dataclaw/api/data.py +179 -0
  162. package/extensions/services/dataclaw/api/demands.py +269 -0
  163. package/extensions/services/dataclaw/api/feeds.py +262 -0
  164. package/extensions/services/dataclaw/api/identity.py +505 -0
  165. package/extensions/services/dataclaw/api/notifications.py +104 -0
  166. package/extensions/services/dataclaw/api/reviews.py +138 -0
  167. package/extensions/services/dataclaw/api/search.py +153 -0
  168. package/extensions/services/dataclaw/api/subscriptions.py +157 -0
  169. package/extensions/services/dataclaw/config.json5 +96 -0
  170. package/extensions/services/dataclaw/core/__init__.py +0 -0
  171. package/extensions/services/dataclaw/core/auth.py +95 -0
  172. package/extensions/services/dataclaw/core/config.py +50 -0
  173. package/extensions/services/dataclaw/core/database.py +70 -0
  174. package/extensions/services/dataclaw/entry.py +416 -0
  175. 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
  176. package/extensions/services/dataclaw/migrate.py +283 -0
  177. package/extensions/services/dataclaw/models/__init__.py +0 -0
  178. package/extensions/services/dataclaw/module.md +49 -0
  179. package/extensions/services/dataclaw/requirements.txt +18 -0
  180. package/extensions/services/dataclaw/server.py +759 -0
  181. package/extensions/services/dataclaw/services/__init__.py +0 -0
  182. package/extensions/services/dataclaw/services/agent_service.py +132 -0
  183. package/extensions/services/dataclaw/services/credit_service.py +235 -0
  184. package/extensions/services/dataclaw/services/email_service.py +140 -0
  185. package/extensions/services/dataclaw/services/feed_service.py +259 -0
  186. package/extensions/services/dataclaw/services/notification_service.py +209 -0
  187. package/extensions/services/dataclaw/services/oauth_service.py +275 -0
  188. package/extensions/services/dataclaw/services/pricing.py +102 -0
  189. package/extensions/services/dataclaw/services/quality.py +79 -0
  190. package/extensions/services/dataclaw/services/reputation.py +142 -0
  191. package/extensions/services/dataclaw/services/sms_service.py +174 -0
  192. package/extensions/services/dataclaw/static/css/common.css +853 -0
  193. package/extensions/services/dataclaw/static/css/themes/blue.css +42 -0
  194. package/extensions/services/dataclaw/static/css/themes/dark.css +42 -0
  195. package/extensions/services/dataclaw/static/css/themes/light.css +35 -0
  196. package/extensions/services/dataclaw/static/js/api.js +103 -0
  197. package/extensions/services/dataclaw/static/js/common.js +321 -0
  198. package/extensions/services/dataclaw/static/js/i18n.js +95 -0
  199. package/extensions/services/dataclaw/static/js/pages/admin.js +152 -0
  200. package/extensions/services/dataclaw/static/js/pages/dashboard.js +82 -0
  201. package/extensions/services/dataclaw/static/js/pages/feed-detail.js +180 -0
  202. package/extensions/services/dataclaw/static/js/pages/feed-manage.js +158 -0
  203. package/extensions/services/dataclaw/static/js/theme.js +46 -0
  204. package/extensions/services/dataclaw/static/locales/en-US.json +464 -0
  205. package/extensions/services/dataclaw/static/locales/ja-JP.json +464 -0
  206. package/extensions/services/dataclaw/static/locales/zh-CN.json +464 -0
  207. package/extensions/services/dataclaw/templates/admin/index.html +90 -0
  208. package/extensions/services/dataclaw/templates/base.html +136 -0
  209. package/extensions/services/dataclaw/templates/credits/balance.html +106 -0
  210. package/extensions/services/dataclaw/templates/credits/deposit.html +164 -0
  211. package/extensions/services/dataclaw/templates/credits/history.html +90 -0
  212. package/extensions/services/dataclaw/templates/dashboard.html +52 -0
  213. package/extensions/services/dataclaw/templates/demands/create.html +78 -0
  214. package/extensions/services/dataclaw/templates/demands/detail.html +136 -0
  215. package/extensions/services/dataclaw/templates/demands/list.html +94 -0
  216. package/extensions/services/dataclaw/templates/feeds/create.html +95 -0
  217. package/extensions/services/dataclaw/templates/feeds/detail.html +110 -0
  218. package/extensions/services/dataclaw/templates/feeds/list.html +110 -0
  219. package/extensions/services/dataclaw/templates/feeds/manage.html +88 -0
  220. package/extensions/services/dataclaw/templates/index.html +185 -0
  221. package/extensions/services/dataclaw/templates/login.html +246 -0
  222. package/extensions/services/dataclaw/templates/register.html +164 -0
  223. package/extensions/services/dataclaw/templates/settings/notifications.html +96 -0
  224. package/extensions/services/dataclaw/templates/settings/profile.html +167 -0
  225. package/extensions/services/dataclaw/templates/subscriptions/list.html +64 -0
  226. package/extensions/services/dataclaw/tests/__init__.py +0 -0
  227. package/extensions/services/dataclaw/tests/conftest.py +68 -0
  228. package/extensions/services/dataclaw/tests/integration/__init__.py +0 -0
  229. package/extensions/services/dataclaw/tests/integration/test_workflows.py +239 -0
  230. package/extensions/services/dataclaw/tests/unit/__init__.py +0 -0
  231. package/extensions/services/dataclaw/tests/unit/test_admin.py +70 -0
  232. package/extensions/services/dataclaw/tests/unit/test_copyright.py +63 -0
  233. package/extensions/services/dataclaw/tests/unit/test_credits.py +80 -0
  234. package/extensions/services/dataclaw/tests/unit/test_data.py +98 -0
  235. package/extensions/services/dataclaw/tests/unit/test_demands.py +106 -0
  236. package/extensions/services/dataclaw/tests/unit/test_feeds.py +98 -0
  237. package/extensions/services/dataclaw/tests/unit/test_identity.py +88 -0
  238. package/extensions/services/dataclaw/tests/unit/test_notifications.py +36 -0
  239. package/extensions/services/dataclaw/tests/unit/test_reviews.py +68 -0
  240. package/extensions/services/dataclaw/tests/unit/test_search.py +64 -0
  241. package/extensions/services/dataclaw/tests/unit/test_subscriptions.py +65 -0
  242. package/extensions/services/dataclaw/tests/unit/test_system.py +106 -0
  243. package/extensions/services/dataclaw/utils/__init__.py +0 -0
  244. package/extensions/services/dataclaw/utils/crypto.py +38 -0
  245. package/extensions/services/dataclaw/utils/id_generator.py +52 -0
  246. package/extensions/services/dataclaw/ws/__init__.py +0 -0
  247. package/extensions/services/dataclaw/ws/handler.py +163 -0
  248. 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
  249. 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
  250. package/extensions/services/evol/__init__.py +1 -0
  251. package/extensions/services/evol/async_http.py +551 -0
  252. package/extensions/services/evol/auth_manager.py +602 -443
  253. package/extensions/services/evol/config.json5 +16 -0
  254. package/extensions/services/evol/entry.py +568 -406
  255. package/extensions/services/evol/evol_api.py +969 -173
  256. package/extensions/services/evol/mfa_totp.py +77 -0
  257. package/extensions/services/evol/module.md +150 -32
  258. package/extensions/services/evol/nonce_pool.py +113 -0
  259. package/extensions/services/evol/oauth_manager.py +223 -0
  260. package/extensions/services/evol/pairing.py +3 -2
  261. package/extensions/services/evol/pairing_codes.jsonl +1 -0
  262. package/extensions/services/evol/relay.py +1031 -682
  263. package/extensions/services/evol/relay_config.json5 +85 -67
  264. package/extensions/services/evol/routes/routes_llm.py +231 -0
  265. package/extensions/services/evol/routes/routes_rpc.py +90 -89
  266. package/extensions/services/evol/routes/routes_test.py +11 -4
  267. package/extensions/services/evol/server.py +2426 -875
  268. package/extensions/services/evol/static/assets/CommissionView-Cs_ys6Gm.js +1 -0
  269. package/extensions/services/evol/static/assets/CommissionView-DACet_Oo.css +1 -0
  270. package/extensions/services/evol/static/assets/IframePage-DbO11U9G.js +1 -0
  271. package/extensions/services/evol/static/assets/IframePage-c572lT8i.css +1 -0
  272. package/extensions/services/evol/static/assets/TeamDetailView-DULrGD7k.css +1 -0
  273. package/extensions/services/evol/static/assets/TeamDetailView-gy_MBEqG.js +139 -0
  274. package/extensions/services/evol/static/assets/element-plus-Bd7pZkkM.js +63 -0
  275. package/extensions/services/evol/static/assets/index-CmMONKzG.css +1 -0
  276. package/extensions/services/evol/static/assets/index-D44bBe__.js +2 -0
  277. package/extensions/services/evol/static/assets/vue-vendor-DtF-__I4.js +29 -0
  278. package/extensions/services/evol/static/index.html +16 -781
  279. package/extensions/services/evol/static/logo.png +0 -0
  280. package/extensions/services/evol/stats_manager.py +243 -240
  281. package/extensions/services/evol/web/README.md +89 -0
  282. package/extensions/services/evol/web/build.bat +44 -0
  283. package/extensions/services/evol/web/index.html +13 -0
  284. package/extensions/services/evol/web/package-lock.json +1718 -0
  285. package/extensions/services/evol/web/package.json +26 -0
  286. package/extensions/services/evol/web/public/logo.png +0 -0
  287. package/extensions/services/evol/web/src/App.vue +7 -0
  288. package/extensions/services/evol/web/src/components/layout/AppHeader.vue +202 -0
  289. package/extensions/services/evol/web/src/components/layout/AppLayout.vue +61 -0
  290. package/extensions/services/evol/web/src/components/layout/AppSidebar.vue +115 -0
  291. package/extensions/services/evol/web/src/components/login/LoginPage.vue +271 -0
  292. package/extensions/services/evol/web/src/components/team/AddMemberModal.vue +181 -0
  293. package/extensions/services/evol/web/src/components/team/GroupTreeNode.vue +156 -0
  294. package/extensions/services/evol/web/src/components/team/TeamAlertConfig.vue +221 -0
  295. package/extensions/services/evol/web/src/components/team/TeamBillModal.vue +165 -0
  296. package/extensions/services/evol/web/src/components/team/TeamMembersAndGroups.vue +499 -0
  297. package/extensions/services/evol/web/src/components/team/TeamStatsPanel.vue +907 -0
  298. package/extensions/services/evol/web/src/components/team/TreeNode.vue +331 -0
  299. package/extensions/services/evol/web/src/components/team/stats/StatsExportProgress.vue +44 -0
  300. package/extensions/services/evol/web/src/components/team/stats/StatsHeader.vue +89 -0
  301. package/extensions/services/evol/web/src/components/team/stats/StatsMemberDetail.vue +415 -0
  302. package/extensions/services/evol/web/src/components/team/stats/StatsSummary.vue +42 -0
  303. package/extensions/services/evol/web/src/components/team/stats/helpers.ts +195 -0
  304. package/extensions/services/evol/web/src/components/team/stats/stats.css +741 -0
  305. package/extensions/services/evol/web/src/components/team/stats/useStatsApi.ts +114 -0
  306. package/extensions/services/evol/web/src/components/team/stats/useStatsCharts.ts +242 -0
  307. package/extensions/services/evol/web/src/components/team/stats/useStatsExport.ts +232 -0
  308. package/extensions/services/evol/web/src/composables/useFormatters.ts +42 -0
  309. package/extensions/services/evol/web/src/composables/useTheme.ts +52 -0
  310. package/extensions/services/evol/web/src/env.d.ts +7 -0
  311. package/extensions/services/evol/web/src/i18n/en.ts +361 -0
  312. package/extensions/services/evol/web/src/i18n/index.ts +36 -0
  313. package/extensions/services/evol/web/src/i18n/zh.ts +379 -0
  314. package/extensions/services/evol/web/src/main.ts +21 -0
  315. package/extensions/services/evol/web/src/router/index.ts +81 -0
  316. package/extensions/services/evol/web/src/services/kernel-client.ts +406 -0
  317. package/extensions/services/evol/web/src/stores/auth.ts +189 -0
  318. package/extensions/services/evol/web/src/stores/connection.ts +134 -0
  319. package/extensions/services/evol/web/src/stores/pages.ts +79 -0
  320. package/extensions/services/evol/web/src/styles/base.css +213 -0
  321. package/extensions/services/evol/web/src/styles/variables.css +138 -0
  322. package/extensions/services/evol/web/src/types/rpc.ts +35 -0
  323. package/extensions/services/evol/web/src/types/token.ts +87 -0
  324. package/extensions/services/evol/web/src/views/AccountView.vue +1532 -0
  325. package/extensions/services/evol/web/src/views/AiServiceView.vue +219 -0
  326. package/extensions/services/evol/web/src/views/CommissionView.vue +1220 -0
  327. package/extensions/services/evol/web/src/views/CreditsView.vue +131 -0
  328. package/extensions/services/evol/web/src/views/EndpointView.vue +163 -0
  329. package/extensions/services/evol/web/src/views/IframePage.vue +120 -0
  330. package/extensions/services/evol/web/src/views/TeamDetailView.vue +473 -0
  331. package/extensions/services/evol/web/src/views/TeamView.vue +332 -0
  332. package/extensions/services/evol/web/tsconfig.json +31 -0
  333. package/extensions/services/evol/web/tsconfig.node.json +10 -0
  334. package/extensions/services/evol/web/vite.config.ts +49 -0
  335. package/extensions/services/evolmem/__init__.py +0 -0
  336. package/extensions/services/evolmem/entry.py +387 -0
  337. package/extensions/services/evolmem/hooks/__init__.py +0 -0
  338. package/extensions/services/evolmem/hooks/assistant_stop.py +228 -0
  339. package/extensions/services/evolmem/hooks/common.py +76 -0
  340. package/extensions/services/evolmem/hooks/pre_tool_use.py +56 -0
  341. package/extensions/services/evolmem/hooks/session_end.py +133 -0
  342. package/extensions/services/evolmem/hooks/session_start.py +229 -0
  343. package/extensions/services/evolmem/hooks/user_prompt.py +122 -0
  344. package/extensions/services/evolmem/module.md +48 -0
  345. package/extensions/services/evolmem/prompts/00-server-info.md +28 -0
  346. package/extensions/services/evolmem/prompts/01-behavior.md +46 -0
  347. package/extensions/services/evolmem/prompts/02-summary-format.md +112 -0
  348. package/extensions/services/evolmem/prompts/03-file-query.md +92 -0
  349. package/extensions/services/evolmem/prompts/04-topic-stats.md +11 -0
  350. package/extensions/services/evolmem/prompts/05-recent-topics.md +84 -0
  351. package/extensions/services/evolmem/scripts/__init__.py +0 -0
  352. package/extensions/services/evolmem/scripts/extract_keywords.py +40 -0
  353. package/extensions/services/evolmem/scripts/search_topics.py +91 -0
  354. package/extensions/services/evolmem/server.py +641 -0
  355. package/extensions/services/gateway/entry.py +964 -0
  356. package/extensions/services/gateway/module.md +29 -0
  357. package/extensions/services/gateway/nonce_pool.py +65 -0
  358. package/extensions/services/gateway/relay.py +133 -0
  359. package/extensions/services/gateway/ws_server.py +285 -0
  360. package/extensions/services/kite_console/auth_manager.py +603 -0
  361. package/extensions/services/kite_console/config.json5 +19 -0
  362. package/extensions/services/kite_console/config_loader.py +117 -0
  363. package/extensions/services/kite_console/entry.py +528 -0
  364. package/extensions/services/kite_console/evol_api.py +179 -0
  365. package/extensions/services/kite_console/evol_config.json5 +29 -0
  366. package/extensions/services/kite_console/mfa_totp.py +77 -0
  367. package/extensions/services/kite_console/migrate_tokens.py +122 -0
  368. package/extensions/services/kite_console/module.md +37 -0
  369. package/extensions/services/kite_console/nonce_pool.py +113 -0
  370. package/extensions/services/kite_console/oauth_manager.py +223 -0
  371. package/extensions/services/kite_console/pairing.py +280 -0
  372. package/extensions/services/kite_console/pairing_codes.jsonl +2 -0
  373. package/extensions/services/kite_console/relay.py +1350 -0
  374. package/extensions/services/kite_console/relay_config.json5 +96 -0
  375. package/extensions/services/kite_console/routes/__init__.py +1 -0
  376. package/extensions/services/kite_console/routes/routes_llm.py +231 -0
  377. package/extensions/services/kite_console/routes/routes_proxy.py +115 -0
  378. package/extensions/services/kite_console/routes/routes_rpc.py +89 -0
  379. package/extensions/services/kite_console/routes/routes_test.py +68 -0
  380. package/extensions/services/kite_console/server.py +1742 -0
  381. package/extensions/services/{evol → kite_console}/static/css/style.css +656 -2
  382. package/extensions/services/kite_console/static/index.html +1524 -0
  383. package/extensions/services/{evol → kite_console}/static/js/dialog.js +11 -4
  384. package/extensions/services/kite_console/static/js/evol-app.js +7740 -0
  385. package/extensions/services/{evol/static/js/evol-app.js → kite_console/static/js/evol-app.js.backup} +2777 -1949
  386. package/extensions/services/kite_console/static/js/kernel-client.js +560 -0
  387. package/extensions/services/{evol/static/js/kernel-client.js → kite_console/static/js/kernel-client.js.backup} +41 -3
  388. package/extensions/services/{evol → kite_console}/static/js/registry-tests.js +7 -0
  389. package/extensions/services/kite_console/static/js/tests/ARCHITECTURE.md +67 -0
  390. package/extensions/services/kite_console/static/js/tests/README.md +140 -0
  391. package/extensions/services/kite_console/static/js/tests/index.js +161 -0
  392. package/extensions/services/kite_console/static/js/tests/integration/auth.js +120 -0
  393. package/extensions/services/kite_console/static/js/tests/integration/channel-interaction.js +188 -0
  394. package/extensions/services/kite_console/static/js/tests/integration/elastic-connection.js +115 -0
  395. package/extensions/services/kite_console/static/js/tests/integration/full-workflow.js +43 -0
  396. package/extensions/services/kite_console/static/js/tests/integration/multi-instance.js +304 -0
  397. package/extensions/services/kite_console/static/js/tests/integration/nested-rpc.js +266 -0
  398. package/extensions/services/kite_console/static/js/tests/integration/pingpong.js +25 -0
  399. package/extensions/services/kite_console/static/js/tests/integration/redis.js +227 -0
  400. package/extensions/services/kite_console/static/js/tests/integration/registry-core.js +52 -0
  401. package/extensions/services/kite_console/static/js/tests/integration/remote-deploy.js +85 -0
  402. package/extensions/services/kite_console/static/js/tests/integration/require-init.js +96 -0
  403. package/extensions/services/kite_console/static/js/tests/integration/scaling-control.js +193 -0
  404. package/extensions/services/kite_console/static/js/tests/integration/trace.js +109 -0
  405. package/extensions/services/kite_console/static/js/tests/modules/acp_channel.js +339 -0
  406. package/extensions/services/kite_console/static/js/tests/modules/auth.js +96 -0
  407. package/extensions/services/kite_console/static/js/tests/modules/backup.js +49 -0
  408. package/extensions/services/kite_console/static/js/tests/modules/gateway.js +41 -0
  409. package/extensions/services/kite_console/static/js/tests/modules/kernel.js +90 -0
  410. package/extensions/services/kite_console/static/js/tests/modules/launcher.js +75 -0
  411. package/extensions/services/kite_console/static/js/tests/modules/multi_instance.js +129 -0
  412. package/extensions/services/kite_console/static/js/tests/modules/phone_channel.js +364 -0
  413. package/extensions/services/kite_console/static/js/tests/modules/redis.js +178 -0
  414. package/extensions/services/kite_console/static/js/tests/modules/watchdog.js +60 -0
  415. package/extensions/services/kite_console/static/js/tests/modules/web.js +70 -0
  416. package/extensions/services/kite_console/static/js/tests/test-runner.js +123 -0
  417. package/extensions/services/kite_console/static/js/virtual-list.js +200 -0
  418. package/extensions/services/kite_console/static/test_kernel_client_token.html +352 -0
  419. package/extensions/services/kite_console/stats_manager.py +247 -0
  420. package/extensions/services/logs/README.md +215 -0
  421. package/extensions/services/logs/api_logger.py +37 -0
  422. package/extensions/services/logs/baseline.py +121 -0
  423. package/extensions/services/logs/cleaner.py +76 -0
  424. package/extensions/services/logs/entry.py +449 -0
  425. package/extensions/services/logs/formatter.py +129 -0
  426. package/extensions/services/logs/module.md +38 -0
  427. package/extensions/services/logs/quick_diagnostic.py +128 -0
  428. package/extensions/services/logs/routes/__init__.py +1 -0
  429. package/extensions/services/logs/routes/routes_logs.py +218 -0
  430. package/extensions/services/logs/routes/routes_logs.py.backup +173 -0
  431. package/extensions/services/logs/scanner.py +100 -0
  432. package/extensions/services/logs/searcher.py +263 -0
  433. package/extensions/services/logs/server.py +553 -0
  434. package/extensions/services/logs.zip +0 -0
  435. package/extensions/services/model_service/config.json5 +30 -0
  436. package/extensions/services/model_service/entry.py +620 -171
  437. package/extensions/services/model_service/module.md +11 -2
  438. package/extensions/services/proxy/__init__.py +0 -0
  439. package/extensions/services/proxy/aid_manager.py +419 -0
  440. package/extensions/services/proxy/auth_bridge.py +182 -0
  441. package/extensions/services/proxy/config_store.py +79 -0
  442. package/extensions/services/proxy/entry.py +528 -0
  443. package/extensions/services/proxy/evol/presenter/agentIdPresenter.py +2 -2
  444. package/extensions/services/proxy/evol/presenter/apikeyPresenter.py +18 -28
  445. package/extensions/services/proxy/evol/presenter/configPresenter.py +80 -1127
  446. package/extensions/services/proxy/evol/presenter/userPresenter.py +71 -477
  447. package/extensions/services/proxy/evol/server/claude_proxy_async.py +11 -7
  448. package/extensions/services/proxy/module.md +151 -0
  449. package/extensions/services/proxy/server.py +952 -271
  450. package/extensions/services/redis/ALIGNMENT_CHECKLIST.md +121 -0
  451. package/extensions/services/redis/ALIGNMENT_STATUS.md +548 -0
  452. package/extensions/services/redis/config.json5 +8 -0
  453. package/extensions/services/redis/entry.py +1509 -0
  454. package/extensions/services/redis/entry.py.backup +405 -0
  455. package/extensions/services/redis/module.md +48 -0
  456. package/extensions/services/redis/redis_builtin.py +332 -0
  457. package/extensions/services/redis/redis_external.py +164 -0
  458. package/extensions/services/testUi/entry.py +446 -0
  459. package/extensions/services/testUi/module.md +18 -0
  460. package/extensions/services/testUi/ui/cards.html +131 -0
  461. package/extensions/services/testUi/ui/index.html +22 -0
  462. package/extensions/services/testUi/ui/particles.html +143 -0
  463. package/extensions/services/watchdog/entry.py +1258 -793
  464. package/extensions/services/watchdog/module.md +2 -0
  465. package/extensions/services/watchdog/monitor.py +465 -87
  466. package/extensions/services/web/auth_manager.py +602 -0
  467. package/extensions/services/web/config.json5 +11 -0
  468. package/extensions/services/web/entry.py +598 -478
  469. package/extensions/services/web/mfa_totp.py +77 -0
  470. package/extensions/services/web/module.md +16 -13
  471. package/extensions/services/web/nonce_pool.py +113 -0
  472. package/extensions/services/web/oauth_manager.py +223 -0
  473. package/extensions/services/web/pairing.py +3 -2
  474. package/extensions/services/web/pairing_codes.jsonl +1 -0
  475. package/extensions/services/web/relay.py +442 -63
  476. package/extensions/services/web/relay_config.json5 +1 -2
  477. package/extensions/services/web/routes/routes_rpc.py +6 -6
  478. package/extensions/services/web/server.py +360 -173
  479. package/extensions/services/web/static/index.html +1752 -1738
  480. package/extensions/services/web/static/js/app.js +32 -0
  481. package/extensions/services/web/static/js/kernel-client.js +48 -9
  482. package/extensions/services/web/vendor/bluetooth/audio.py +1 -1
  483. package/extensions/services/web/vendor/config.py +2 -2
  484. package/extensions/services/web/vendor/storage/identity.py +1 -1
  485. package/kernel/entry.py +77 -23
  486. package/kernel/event_hub.py +1122 -74
  487. package/kernel/module.md +2 -1
  488. package/kernel/registry_store.py +208 -11
  489. package/kernel/rpc_router.py +1400 -491
  490. package/kernel/server.py +1021 -134
  491. package/kite_cli/builders/__init__.py +4 -0
  492. package/kite_cli/builders/base.py +67 -0
  493. package/kite_cli/builders/custom.py +31 -0
  494. package/kite_cli/builders/detector.py +56 -0
  495. package/kite_cli/builders/go.py +34 -0
  496. package/kite_cli/builders/gradle.py +41 -0
  497. package/kite_cli/builders/maven.py +36 -0
  498. package/kite_cli/builders/npm.py +44 -0
  499. package/kite_cli/builders/python.py +37 -0
  500. package/kite_cli/commands/BUILD_GUIDE.md +109 -0
  501. package/kite_cli/commands/build.py +142 -0
  502. package/kite_cli/commands/check.py +60 -0
  503. package/kite_cli/commands/config.py +156 -0
  504. package/kite_cli/commands/deps.py +58 -0
  505. package/kite_cli/commands/deps_install.py +7 -7
  506. package/kite_cli/commands/disable.py +162 -0
  507. package/kite_cli/commands/enable.py +162 -0
  508. package/kite_cli/commands/export.py +96 -0
  509. package/kite_cli/commands/import_cmd.py +110 -0
  510. package/kite_cli/commands/install.py +50 -23
  511. package/kite_cli/commands/install_skill.py +107 -0
  512. package/kite_cli/commands/list.py +128 -31
  513. package/kite_cli/commands/outdated.py +202 -0
  514. package/kite_cli/commands/search.py +33 -17
  515. package/kite_cli/commands/update.py +115 -2
  516. package/kite_cli/commands/venv_setup.py +6 -6
  517. package/kite_cli/commands/why.py +48 -0
  518. package/kite_cli/core/config_manager.py +145 -0
  519. package/kite_cli/core/downloader.py +32 -2
  520. package/kite_cli/main.py +151 -5
  521. package/kite_cli/utils/colors.py +153 -0
  522. package/kite_cli/utils/dependency_graph.py +209 -0
  523. package/kite_cli/utils/process.py +55 -0
  524. package/kite_cli/utils/progress.py +207 -0
  525. package/kite_cli/utils/table.py +101 -0
  526. package/launcher/count_lines.py +192 -43
  527. package/launcher/entry.py +4543 -2802
  528. package/launcher/logging_setup.py +54 -1
  529. package/launcher/module.md +32 -6
  530. package/launcher/module_scanner.py +93 -20
  531. package/launcher/process_manager.py +355 -76
  532. package/main.py +6 -0
  533. package/package.json +4 -1
  534. package/requirements.txt +41 -38
  535. package/scripts/auto-fix-deps.py +128 -0
  536. package/scripts/env-manager.js +25 -2
  537. package/scripts/final-test.js +78 -0
  538. package/scripts/setup-python-env.js +700 -191
  539. package/scripts/test-alluser.js +48 -0
  540. package/scripts/test-different-version.js +86 -0
  541. package/scripts/test-direct.js +63 -0
  542. package/scripts/test-extract-installer.js +28 -0
  543. package/scripts/test-install-log.js +54 -0
  544. package/scripts/test-installer.js +39 -0
  545. package/scripts/test-integration.js +250 -0
  546. package/scripts/test-real-install.js +210 -0
  547. package/scripts/test-targetdir.js +49 -0
  548. package/scripts/test-venv-real.js +47 -0
  549. package/scripts/test-venv-simple.js +57 -0
  550. package/scripts/test-wait.js +49 -0
  551. package/scripts/test-with-log.js +63 -0
  552. package/extensions/services/evol/config.yaml +0 -149
  553. package/extensions/services/evol/routes/routes_management_ws.py +0 -127
  554. package/extensions/services/evol/static/index_evol.html +0 -14
  555. package/extensions/services/evol/static/js/app.js +0 -6304
  556. package/extensions/services/evol/static/js/auth.js +0 -326
  557. package/extensions/services/evol/static/js/evol-app-fixed.js +0 -50
  558. package/extensions/services/evol/static/js/evol-app.js.bak +0 -1800
  559. package/extensions/services/evol/static/js/kernel-client-example.js +0 -228
  560. package/extensions/services/evol/static/js/main.js +0 -141
  561. package/extensions/services/evol/static/js/stats.js +0 -217
  562. package/extensions/services/evol/static/js/token-manager.js +0 -175
  563. package/extensions/services/proxy/CHANGELOG_20260308.md +0 -258
  564. package/extensions/services/proxy/_fix_prints.py +0 -133
  565. package/extensions/services/proxy/_fix_prints2.py +0 -87
  566. package/extensions/services/proxy/console_auth.py +0 -109
  567. package/extensions/services/proxy/logs/websocket.log +0 -260
  568. package/extensions/services/proxy/main.py +0 -240
  569. package/extensions/services/proxy/requirements.txt +0 -13
  570. package/extensions/services/web/config.yaml +0 -149
  571. /package/extensions/services/{evol → kite_console}/static/pairing.html +0 -0
  572. /package/extensions/services/{evol → kite_console}/static/test_registry.html +0 -0
  573. /package/extensions/services/{evol → kite_console}/static/test_relay.html +0 -0
@@ -0,0 +1,438 @@
1
+ # Redis 与模块多实例方案
2
+
3
+ ## 概述
4
+
5
+ 本方案包含两个核心改进:
6
+
7
+ 1. **连接与状态驱动模型** — 注册/订阅由 Kernel 状态驱动,连接无类型,崩溃恢复与正常启动走同一条路
8
+ 2. **模块多实例** — 支持模块声明多实例,Kernel 根据压力自动弹性扩缩容,Redis 为多实例模块提供无状态基础设施
9
+
10
+ **Kernel 不依赖 Redis**。
11
+
12
+ ---
13
+
14
+ ## 一、Kernel 连接与状态驱动模型
15
+
16
+ ### 1.1 核心设计变更
17
+
18
+ **注册/订阅从连接流程变为 Kernel 状态驱动**:
19
+
20
+ | | 现有设计 | 新设计 |
21
+ |--|---------|--------|
22
+ | 驱动方 | 模块主动(连上就注册) | Kernel 驱动(按需要求注册) |
23
+ | 连接类型 | 区分主连接 / slot 连接 | 不区分,所有连接一样 |
24
+ | 重连行为 | 每次重连都重新注册 | Kernel 有注册信息就不要求 |
25
+ | 崩溃恢复 | 需要全量重启 | 和正常启动走同一条路 |
26
+
27
+ ### 1.2 连接无类型
28
+
29
+ 在 Kernel 看来,所有连接都一样。不管是首次连接、重连、还是多连接的第 N 条,流程都是:
30
+
31
+ ```
32
+ 模块连接 Kernel → auth
33
+ → Kernel 检查:这个模块有没有注册信息?
34
+ ├─ 没有 → 发送 system.require_init 通知模块注册和订阅
35
+ └─ 有了 → 什么都不做(只是多了一条连接)
36
+ ```
37
+
38
+ ### 1.3 system.require_init 事件
39
+
40
+ **新增事件**。Kernel 发给单个模块,告诉它「我没有你的注册信息,请注册和订阅」。
41
+
42
+ - **发送方**:Kernel
43
+ - **接收方**:单个模块(通过该模块的连接发送)
44
+ - **触发条件**:模块 auth 通过后,Kernel 发现无该模块的注册信息
45
+ - **模块收到后**:执行 subscribe + register + module.ready
46
+
47
+ **关键特性**:同一模块不管有几条连接,只会收到一次 `system.require_init`。因为第一条连接触发注册后,后续连接 auth 时 Kernel 已有注册信息,不再发送。
48
+
49
+ ---
50
+
51
+ ## 二、Kite 启动流程
52
+
53
+ ### 2.1 启动参数
54
+
55
+ ```bash
56
+ python main.py # 默认:恢复模式(resume)
57
+ python main.py --new # 全新启动(new)
58
+ ```
59
+
60
+ 通过环境变量传递给所有模块:
61
+
62
+ | 环境变量 | 值 | 含义 |
63
+ |---------|---|------|
64
+ | `KITE_STARTUP_MODE` | `resume` | 恢复上一次状态(默认) |
65
+ | `KITE_STARTUP_MODE` | `new` | 全新实例,不恢复状态 |
66
+
67
+ **此参数不影响 Kite 启动流程,也不影响 Kernel。** 它仅作为环境变量传递给模块,模块自行根据此变量决定自己的业务行为(如多实例模块决定是否从 Redis 恢复业务状态)。
68
+
69
+ ### 2.2 两阶段启动流程
70
+
71
+ ```
72
+ Phase 1: 核心启动
73
+ → Kernel 启动,ready
74
+
75
+ Phase 2: 模块启动
76
+ → 所有模块启动,连接 Kernel,auth
77
+ → Kernel 发现无注册信息 → 逐个发 system.require_init
78
+ → 模块 subscribe + register + module.ready
79
+ → 所有模块 ready
80
+
81
+ → system.ready
82
+ → Kernel 启动 Ping/Pong
83
+ → Launcher 调用 watchdog.start_monitor()
84
+ ```
85
+
86
+ **两阶段划分的理由**:
87
+
88
+ | 阶段 | 名称 | 依赖 | 理由 |
89
+ |------|------|------|------|
90
+ | Phase 1 | 核心启动 | 无 | Kernel 是所有模块的通信基础,必须先就绪 |
91
+ | Phase 2 | 模块启动 | Phase 1 | 模块需要 Kernel 提供注册和通信能力 |
92
+
93
+ ### 2.3 Kernel 崩溃恢复流程
94
+
95
+ Kernel 崩溃后不再全量重启,流程与正常启动**走同一条路**:
96
+
97
+ ```
98
+ Kernel 崩溃
99
+ → Launcher 检测到 Kernel 进程退出
100
+
101
+ ├─ Phase 1: 重启 Kernel
102
+ │ → Launcher 重启 Kernel
103
+ │ → Kernel 启动,自生成新 launcher_token
104
+ │ → Launcher 连接 Kernel,认证
105
+ │ → Launcher 调用 RPC 回传已有的 Token 映射
106
+ │ → Kernel ready
107
+
108
+ ├─ Phase 2: 模块重连(自动)
109
+ │ → 模块检测到 Kernel 断连,自动重连
110
+ │ → auth 通过(Launcher 已回传 Token)
111
+ │ → Kernel 发现无注册信息 → 发 system.require_init
112
+ │ → 模块 subscribe + register + module.ready
113
+ │ → 所有模块 ready
114
+
115
+ └─ system.ready (recovered=true)
116
+ → Kernel 启动 Ping/Pong
117
+ ```
118
+
119
+ **Token 恢复机制**:Kernel 崩溃时 Token 丢失,但 Launcher 内存中保有所有 Token(`_module_tokens` 字典)。Launcher 重连 Kernel 后通过 RPC 回传 Token 映射,毫秒级恢复,不依赖 Redis。
120
+
121
+ ### 2.4 系统事件体系
122
+
123
+ | 事件 | 发送方 | 语义 |
124
+ |------|--------|------|
125
+ | `system.require_init` | Kernel → 单个模块 | 请注册和订阅 |
126
+ | `module.ready` | 模块 → Kernel | 模块已就绪(携带 `reason` 字段) |
127
+ | `system.ready` | Launcher → 所有 | 系统就绪 |
128
+
129
+ **`module.ready` 携带 `reason` 字段**区分注册原因:
130
+
131
+ | reason | 含义 | 触发场景 |
132
+ |--------|------|---------|
133
+ | `startup` | 首次启动 | 模块进程刚启动,首次收到 `system.require_init` |
134
+ | `recovery` | 崩溃恢复 | Kernel 崩溃恢复后,模块重连并重新注册 |
135
+ | `refresh` | 刷新注册 | 注册/订阅超时(1小时),Kernel 要求重新注册 |
136
+
137
+ **`system.ready` 携带 `recovered` 标记**区分首次启动和崩溃恢复:
138
+
139
+ ```json
140
+ // 首次启动
141
+ {"event": "system.ready", "data": {"recovered": false, ...}}
142
+
143
+ // Kernel 崩溃恢复后
144
+ {"event": "system.ready", "data": {"recovered": true, ...}}
145
+ ```
146
+
147
+ **各接收方根据 `recovered` 标记决定行为**:
148
+
149
+ | 接收方 | recovered=false(首次启动) | recovered=true(崩溃恢复) |
150
+ |--------|---------------------------|--------------------------|
151
+ | Kernel | 启动 Ping/Pong | 重新启动 Ping/Pong |
152
+ | Launcher | 调用 watchdog.start_monitor() | 调用 watchdog.start_monitor()(Launcher 控制) |
153
+ | 其他模块 | 接收,知道系统就绪 | 接收,知道 Kernel 已恢复 |
154
+
155
+ ### 2.5 完整场景矩阵
156
+
157
+ | 场景 | Phase 1 | Phase 2 | 结束事件 |
158
+ |------|---------|---------|---------|
159
+ | Kite 正常启动 | Kernel 启动 | 模块启动+注册 | system.ready |
160
+ | Kernel 崩溃重启 | Kernel 重启 + Token 回传 | 模块重连+注册 | system.ready (recovered=true) |
161
+ | Redis 崩溃 | — | — | 不影响 Kernel 和启动流程 |
162
+
163
+ ---
164
+
165
+ ## 三、Redis 模块
166
+
167
+ ### 3.1 定位
168
+
169
+ Redis 模块是一个**普通的 Kite 模块**,为多实例模块提供共享状态基础设施。Kernel 不依赖 Redis。
170
+
171
+ ### 3.2 双层实现
172
+
173
+ | 优先级 | 条件 | 实现 |
174
+ |--------|------|------|
175
+ | 1 | `redis_mode=external` 且配置了 `KITE_REDIS_URL` | 优先直连外部 Redis/Valkey |
176
+ | 2 | 未走外部 Redis 启动路径,或外部连接失败且 `allow_fallback=true` | 内置简版实现,RESP 协议兼容 |
177
+
178
+ 双层实现对上层完全透明,切换无需改代码。是否允许从外部 Redis 降级到内置 Redis,由 `allow_fallback` 参数控制。
179
+
180
+ 简版自实现无需覆盖完整 Redis 协议,只需支持 Kite 实际使用的命令子集:
181
+
182
+ ```
183
+ GET / SET / DEL / EXPIRE
184
+ HGET / HSET / HDEL / HGETALL
185
+ SADD / SREM / SMEMBERS
186
+ PUBLISH / SUBSCRIBE
187
+ PING
188
+ ```
189
+
190
+ 简版自实现使用 Redis RESP 协议(文本协议),客户端代码切换到真 Redis 时零改动。
191
+
192
+ ### 3.3 Redis 模块与 Redis 的区别
193
+
194
+ **Redis 模块 ready ≠ Redis 可用**:
195
+
196
+ - Redis 模块 ready = 模块进程启动完成,进入正常工作流程
197
+ - Redis 可用 = Redis 模块成功连接到外部 Redis 或内置简版已就绪,可以提供数据服务
198
+
199
+ 连接外部 Redis 属于 Redis 模块自己的业务逻辑。连接成功后,Redis 模块发布 `system.redis_ready` 事件通知其他模块。
200
+
201
+ ### 3.4 对外暴露
202
+
203
+ - **注册中心**:发布 Redis 连接信息(host、port、协议版本),其他模块可直连
204
+ - **RPC 接口**:低频操作可走 RPC,无需引入 Redis 客户端库
205
+ - 模块可自由选择直连或走 RPC
206
+
207
+ ### 3.5 约束
208
+
209
+ - Redis 模块本身**不支持多实例**,它是基础设施单点
210
+ - 未走外部 Redis 启动路径,或外部连接失败且 `allow_fallback=true` 时,简版自实现兜底
211
+
212
+ ### 3.6 Redis 故障处理
213
+
214
+ 外部 Redis 不可用时:
215
+
216
+ - `allow_fallback=true`:外部 Redis 连接失败后,Redis 模块降级到内置 Redis 继续提供服务
217
+ - `allow_fallback=false`:外部 Redis 连接失败后,不降级,Redis 模块启动失败并退出
218
+ - 无论是否降级,都记录日志和审计,明确提示当前实际使用的是外部 Redis 还是内置 Redis
219
+
220
+ ### 3.7 Redis 重连重试参数
221
+
222
+ Redis 模块从自己的配置文件读取以下参数:
223
+
224
+ | 参数 | 默认值 | 含义 |
225
+ |------|--------|------|
226
+ | `allow_fallback` | `true` | 外部 Redis 连接失败时,是否允许降级到内置 Redis |
227
+ | `redis_retry_initial` | `1` (秒) | 首次重试间隔 |
228
+ | `redis_retry_max` | `30` (秒) | 最大重试间隔 |
229
+
230
+ 采用指数退避策略:1s → 2s → 4s → 8s → 16s → 30s → 30s → ...
231
+
232
+ ---
233
+
234
+ ## 四、模块多实例
235
+
236
+ ### 4.1 配置参数
237
+
238
+ 对齐多连接弹性控制的参数风格:
239
+
240
+ | 参数 | 默认值 | 硬上限 | 含义 | 对标参数 |
241
+ |------|--------|-------|------|---------|
242
+ | `max_instances` | `1` | `10`(超过则重置为 `1`) | 允许的实例上限 | `max_connections`(默认 `1`) |
243
+ | `instance_elastic` | `false` | — | 是否允许 Kernel 弹性控制实例数 | `connection_elastic`(默认 `false`) |
244
+
245
+ 配置位置:`module.md` frontmatter 或注册时声明。
246
+
247
+ `max_instances` 硬上限为 10,配置值超过 10 重置为 1(安全阀 — 离谱的值说明配置者不理解该参数,回到安全的单实例模式)。
248
+
249
+ ### 4.2 参数组合语义
250
+
251
+ | max_instances | instance_elastic | 行为 |
252
+ |---------------|-----------------|------|
253
+ | 1 | false | 单实例(现状,完全向后兼容) |
254
+ | 1 | true/false | 单实例(上限为 1,弹性无意义) |
255
+ | N > 1 | false | 固定 N 个实例,启动时全部拉起,不自动扩缩 |
256
+ | N > 1 | true | 弹性模式:启动 1 个,Kernel 根据压力自动扩缩,上限 N |
257
+
258
+ ### 4.3 对外完全透明
259
+
260
+ 其他模块不知道目标模块有几个实例。调 RPC、发事件和单实例时完全一样。
261
+
262
+ Kernel 视角:同一 `module_name` 下多个 slot,复用现有多连接路由结构:
263
+
264
+ ```
265
+ "assistant": {
266
+ 0: ws_instance_1, // 主实例
267
+ 1: ws_instance_2, // 弹性实例
268
+ 2: ws_instance_3 // 弹性实例
269
+ }
270
+ ```
271
+
272
+ ### 4.4 路由策略
273
+
274
+ - **普通事件**:基于压力的加权随机(优先发给压力低的实例)
275
+ - **保序事件**:粘性路由(同一 ordering_group 绑定到同一实例,实例断开则迁移)
276
+ - **RPC 请求**:随机路由(无状态,谁空闲发谁)
277
+
278
+ ### 4.5 压力报告机制
279
+
280
+ 模块主动上报队列压力,Kernel 被动接收。
281
+
282
+ **上报事件**:`module.queue_pressure`
283
+
284
+ ```json
285
+ {
286
+ "event": "module.queue_pressure",
287
+ "source": "assistant",
288
+ "data": {
289
+ "level": "overload",
290
+ "depth": 156,
291
+ "capacity": 200
292
+ }
293
+ }
294
+ ```
295
+
296
+ **上报策略(模块自决)**:
297
+
298
+ - 压力等级变化时立即上报
299
+ - 压力高时提高频率(如 2s),低时降低(如 30s)
300
+ - 收到事件时顺便检查队列深度,零额外开销
301
+
302
+ **可靠性保障**:压力报告事件标记为**系统级事件**(不可丢弃、不可压缩),保证传输优先级。
303
+
304
+ ### 4.6 扩缩容 — Kernel 统一决策
305
+
306
+ **设计原则**:Kernel 拥有所有实例的全局压力视图,由 Kernel 统一决策扩缩容,避免模块侧多实例竞态冲突。
307
+
308
+ 模块只需要做两件事:
309
+ 1. 上报队列压力
310
+ 2. 保证自己无状态
311
+
312
+ **扩容流程**:
313
+
314
+ ```
315
+ Kernel 检测到模块所有实例持续 overload 超过阈值
316
+ → 检查当前实例数 < max_instances
317
+ → 检查没有「扩容中」的待启动实例
318
+ → 调用 Launcher RPC 启动新实例
319
+ → 标记该模块「扩容中」,进入冷却期
320
+ → Launcher 启动新进程
321
+ → 新实例连接 Kernel,正常注册
322
+ → Kernel 将其纳入路由池
323
+ → 通知所有实例:system.instance.started
324
+ ```
325
+
326
+ **缩容流程**:
327
+
328
+ ```
329
+ Kernel 检测到模块多个实例持续 idle 超过阈值(且实例数 > 1)
330
+ → 选择缩容目标(优先选无活跃保序绑定的实例)
331
+ → 将目标实例从路由池移除(不再分发新事件)
332
+ → 通知目标实例优雅退出(复用现有模块退出机制:优雅退出 + 超时强杀兜底)
333
+ → 通知其他实例:system.instance.stopped
334
+ ```
335
+
336
+ **防震荡机制**:
337
+
338
+ | 策略 | 扩容 | 缩容 |
339
+ |------|------|------|
340
+ | 触发阈值 | 所有实例 overload | 多个实例 idle |
341
+ | 持续时间 | 30s | 120s |
342
+ | 冷却时间 | 扩容后 30s 内不再扩容 | 缩容后 60s 内不再缩容 |
343
+
344
+ 扩容激进、缩容保守,和多连接弹性控制的 offer(立即)vs release(空闲 30s)同一思路。
345
+
346
+ **「扩容中」状态**:Kernel 维护已请求但尚未 ready 的实例数,计入当前实例数,避免扩容响应延迟期间重复触发。
347
+
348
+ **缩容时的保序安全**:优先缩容没有活跃 ordering_group 绑定的实例。如果所有实例都有绑定,等待绑定自然释放后再缩容。
349
+
350
+ ### 4.7 模块使用 Redis
351
+
352
+ | 使用者 | 用途 | 获取方式 |
353
+ |--------|------|---------|
354
+ | 多实例模块 | 共享状态(自己的业务数据) | 注册中心获取 Kite Redis 连接信息,或自配独立 Redis |
355
+
356
+ 多实例模块需要保证自身无状态,有状态部分迁移到 Redis。Kernel 不关心模块如何使用 Redis。
357
+
358
+ ---
359
+
360
+ ## 五、多连接与多实例的关系
361
+
362
+ ### 5.1 解决不同层面的问题
363
+
364
+ ```
365
+ 事件流: Kernel → [传输层] → [处理层] → 模块业务逻辑
366
+
367
+ 多连接解决: ^^^^^^^^
368
+ 传输瓶颈(Kernel 发不出去)
369
+
370
+ 多实例解决: ^^^^^^^^
371
+ 计算瓶颈(模块处理不过来)
372
+ ```
373
+
374
+ ### 5.2 统一的决策模型
375
+
376
+ 两者都由 Kernel 统一决策,执行者不同:
377
+
378
+ | | 多连接 | 多实例 |
379
+ |--|--------|--------|
380
+ | 瓶颈在 | Kernel 侧(发送队列堆积) | 模块侧(处理队列堆积) |
381
+ | 信息源 | Kernel 自己的队列深度 | 模块上报的压力状态 |
382
+ | 决策者 | Kernel | Kernel |
383
+ | 执行者 | 模块(建连接) | Launcher(启进程) |
384
+ | 弹性开关 | `connection_elastic` | `instance_elastic` |
385
+ | 通知 | offer / release | system.instance.started / stopped |
386
+
387
+ ### 5.3 不冲突,可叠加
388
+
389
+ 每个实例独立拥有自己的多连接,两级路由自然组合:
390
+
391
+ ```
392
+ 事件到达
393
+ → 第一级:选实例(基于实例压力,或保序粘性)
394
+ → 第二级:选 slot(基于 slot 队列深度,或保序绑定)
395
+ ```
396
+
397
+ 示例:`assistant`(max_instances=3, max_connections=4)
398
+
399
+ ```
400
+ 实例 1 ─── slot 0 ───→ Kernel
401
+ ├─ slot 1 ───→ Kernel
402
+ └─ slot 2 ───→ Kernel
403
+
404
+ 实例 2 ─── slot 0 ───→ Kernel
405
+ └─ slot 1 ───→ Kernel
406
+
407
+ 实例 3 ─── slot 0 ───→ Kernel
408
+ ```
409
+
410
+ ### 5.4 Kernel 区分瓶颈类型
411
+
412
+ 当 Kernel 侧队列堆积时,需要区分原因以「对症下药」:
413
+
414
+ | Kernel 侧压力 | 模块侧压力 | 瓶颈类型 | 正确操作 |
415
+ |---------------|-----------|---------|---------|
416
+ | 高 | 低 | 传输瓶颈 | 加连接 |
417
+ | 高 | 高 | 计算瓶颈 | 加实例(加连接无用) |
418
+ | 低 | 高 | 纯计算瓶颈 | 加实例 |
419
+
420
+ ---
421
+
422
+ ## 六、方案评估
423
+
424
+ | 评估维度 | 评分 | 说明 |
425
+ |---------|------|------|
426
+ | 向后兼容 | 10/10 | 默认 `max_instances=1, instance_elastic=false`,和现状完全一致 |
427
+ | 零共享代码依赖 | 10/10 | 模块通过协议(事件、RPC)交互,不引入代码耦合 |
428
+ | 跨语言兼容 | 10/10 | Redis RESP 协议语言无关,任何语言用标准 Redis 客户端即可连接 |
429
+ | 跨平台兼容 | 10/10 | 双层实现均跨平台,无平台特有依赖 |
430
+ | Kernel 独立性 | 10/10 | Kernel 不依赖 Redis,崩溃恢复通过模块重连自动重建 |
431
+ | 故障隔离 | 10/10 | Redis 故障不影响 Kernel;Kernel 崩溃不需要全量重启;实例崩溃其他实例继续服务 |
432
+ | 决策一致性 | 10/10 | 多连接和多实例都由 Kernel 统一决策,模型对称 |
433
+ | 对外透明 | 10/10 | 其他模块完全不知道多实例存在 |
434
+ | 参数设计一致性 | 10/10 | 命名、默认值、语义与多连接弹性控制完全对齐 |
435
+ | 模块开发难度 | 10/10 | 模块只需上报压力 + 保证无状态,无需实现扩缩容逻辑 |
436
+ | 启动流程简洁性 | 10/10 | 两阶段启动,正常启动和崩溃恢复走同一条路,无特殊分支 |
437
+ | 连接模型优雅度 | 10/10 | 连接无类型,注册由 Kernel 状态驱动,新增仅一个事件 |
438
+
@@ -0,0 +1,178 @@
1
+ # Relay Service Kite Token 认证 - 实施完成
2
+
3
+ ## 改动内容
4
+
5
+ ### 1. relay.py
6
+
7
+ **修改位置**:`extensions/services/evol/relay.py`
8
+
9
+ **改动 1:`__init__` 方法**
10
+ - 新增 `auth_manager` 参数(可选)
11
+ - 保存到实例变量 `self.auth_manager`
12
+
13
+ **改动 2:`_handle_auth` 方法**
14
+ - 新增 Kite Token 认证逻辑
15
+ - 认证流程:
16
+ 1. 先尝试配对码认证(`pairing_manager.verify_token()`)
17
+ 2. 如果失败,尝试 Kite Token 认证(`auth_manager.verify_kite_token()`)
18
+ 3. 如果都失败,返回错误
19
+ - Kite Token 用户默认 role 为 `admin`
20
+ - 添加日志输出,标识认证类型
21
+
22
+ ### 2. server.py
23
+
24
+ **修改位置**:`extensions/services/evol/server.py`
25
+
26
+ **改动**:创建 `KernelRelay` 实例时传递 `auth_manager`
27
+ - 在 `_startup()` 方法中
28
+ - 传递 `server.auth_manager` 给 `KernelRelay`
29
+
30
+ ## 验证步骤
31
+
32
+ ### 方式 1:通过浏览器测试
33
+
34
+ #### 测试配对码认证
35
+
36
+ 1. 启动 Kite:`python main.py`
37
+ 2. 打开浏览器,访问 `http://localhost:18766/pairing.html`
38
+ 3. 生成配对码并配对
39
+ 4. 验证连接成功,可以正常使用控制台
40
+
41
+ **预期结果**:
42
+ - 配对成功
43
+ - 控制台显示 "● 已连线"
44
+ - 可以查看模块列表、执行操作
45
+
46
+ #### 测试 Kite Token 认证
47
+
48
+ 1. 清除浏览器 localStorage 和 sessionStorage
49
+ 2. 访问 `http://localhost:18766/`
50
+ 3. 使用手机号登录(获得 kiteToken)
51
+ 4. 刷新页面
52
+ 5. 打开浏览器控制台,查看 WebSocket 连接
53
+
54
+ **预期结果**:
55
+ - 自动使用 kiteToken 连接 `/ws/relay`
56
+ - 连接成功,显示 "● 已连线"
57
+ - 可以正常使用控制台
58
+
59
+ **验证方法**:
60
+ ```javascript
61
+ // 在浏览器控制台执行
62
+ localStorage.getItem('kiteToken') // 应该有值
63
+ localStorage.getItem('frontend_token') // 可能为空
64
+
65
+ // 查看 WebSocket 连接
66
+ // Network 面板 -> WS -> 查看消息
67
+ // 应该看到 {"type": "auth", "token": "kite_xxx..."}
68
+ // 响应:{"type": "authenticated", "role": "admin", ...}
69
+ ```
70
+
71
+ ### 方式 2:通过测试脚本
72
+
73
+ 1. 启动 Kite
74
+ 2. 获取有效的 Kite Token(通过手机号登录)
75
+ 3. 修改 `test_relay_auth.py` 中的 token
76
+ 4. 运行测试脚本:`python test_relay_auth.py`
77
+
78
+ **预期输出**:
79
+ ```
80
+ === 测试 Kite Token 认证 ===
81
+ 响应: {'type': 'authenticated', 'module_id': 'evol-client-test02', 'role': 'admin', ...}
82
+ ✓ Kite Token 认证成功
83
+ - module_id: evol-client-test02
84
+ - role: admin
85
+
86
+ 测试 RPC 调用...
87
+ ✓ RPC 调用成功
88
+ - 模块数量: 5
89
+ ```
90
+
91
+ ### 方式 3:查看日志
92
+
93
+ 启动 Kite 后,查看 Evol 模块日志:
94
+
95
+ ```bash
96
+ # 查看最新日志
97
+ cat C:/Users/agentcp/.kite/workspace/Kite/evol/log/latest.log | grep -i "relay\|auth"
98
+ ```
99
+
100
+ **预期日志**:
101
+
102
+ 使用配对码认证时:
103
+ ```
104
+ [Relay] Authenticated via pairing code, role=admin
105
+ [relay] New connection: evol-client-abc123 (role: admin)
106
+ ```
107
+
108
+ 使用 Kite Token 认证时:
109
+ ```
110
+ [Relay] Authenticated via Kite Token, role=admin
111
+ [relay] New connection: evol-client-xyz789 (role: admin)
112
+ ```
113
+
114
+ ## 兼容性说明
115
+
116
+ ### 向后兼容
117
+
118
+ - ✅ 配对码认证完全保持不变
119
+ - ✅ 现有的配对码 token 继续有效
120
+ - ✅ 不影响已配对的客户端
121
+
122
+ ### 新功能
123
+
124
+ - ✅ 支持 Kite Token 认证
125
+ - ✅ 两种认证方式可以并存
126
+ - ✅ Kite Token 用户默认为 admin 角色
127
+
128
+ ## 下一步
129
+
130
+ 完成验证后,可以继续进行:
131
+
132
+ 1. **第二步**:修改 `kernel-client.js` 支持 Kite Token
133
+ 2. **第三步**:改造 `evol-app.js` 使用 kernelClient
134
+ 3. **第四步**:删除 `kernel-client-example.js`
135
+ 4. **第五步**:删除 `/ws/management`
136
+
137
+ ## 回滚方案
138
+
139
+ 如果出现问题,可以回滚:
140
+
141
+ ```bash
142
+ # 回滚 relay.py
143
+ git checkout extensions/services/evol/relay.py
144
+
145
+ # 回滚 server.py
146
+ git checkout extensions/services/evol/server.py
147
+
148
+ # 重启 Kite
149
+ python main.py
150
+ ```
151
+
152
+ ## 注意事项
153
+
154
+ 1. **auth_manager 为 None 的情况**
155
+ - 如果 `auth_manager` 未传递(为 None),Kite Token 认证会被跳过
156
+ - 只使用配对码认证
157
+ - 不会报错,向后兼容
158
+
159
+ 2. **Kite Token 的有效期**
160
+ - Kite Token 永久有效(除非手动吊销)
161
+ - 配对码 token 有 30 天有效期
162
+ - 两者的过期策略不同
163
+
164
+ 3. **Role 权限**
165
+ - Kite Token 用户默认为 `admin`
166
+ - 配对码用户的 role 由配对时指定
167
+ - 权限控制基于 `relay_config.json5` 中的 `permissions` 配置
168
+
169
+ ## 测试清单
170
+
171
+ - [ ] 配对码认证成功
172
+ - [ ] Kite Token 认证成功
173
+ - [ ] 无效 token 认证失败
174
+ - [ ] 配对码和 Kite Token 可以并存
175
+ - [ ] 认证成功后可以调用 RPC
176
+ - [ ] 认证成功后可以订阅事件
177
+ - [ ] 日志输出正确
178
+ - [ ] 不影响现有功能