@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,266 @@
1
+ /**
2
+ * 嵌套 RPC 调用测试
3
+ * 测试模块间的相互调用和嵌套调用场景
4
+ */
5
+
6
+ async function testNestedRpc() {
7
+ const runner = window.testRunner;
8
+ const client = runner.kernelClient;
9
+
10
+ runner.log('【嵌套 RPC 调用测试】', 'section');
11
+
12
+ // ========== 第一部分:验证模块运行状态 ==========
13
+ runner.log('', 'info');
14
+ runner.log('第一部分:验证模块运行状态', 'subsection');
15
+
16
+ let acpRunning = false;
17
+ let phoneRunning = false;
18
+
19
+ await runner.runTest('检查 acp_channel 和 phone_channel 状态', async () => {
20
+ const result = await client.call('launcher.list_modules', {});
21
+ const acp = result.modules.find(m => m.name === 'acp_channel');
22
+ const phone = result.modules.find(m => m.name === 'phone_channel');
23
+
24
+ if (!acp) throw new Error('acp_channel 不存在');
25
+ if (!phone) throw new Error('phone_channel 不存在');
26
+
27
+ acpRunning = acp.actual_state && acp.actual_state.startsWith('running');
28
+ phoneRunning = phone.actual_state && phone.actual_state.startsWith('running');
29
+
30
+ if (!acpRunning) throw new Error(`acp_channel 未运行: ${acp.actual_state}`);
31
+ if (!phoneRunning) throw new Error(`phone_channel 未运行: ${phone.actual_state}`);
32
+
33
+ runner.log(` acp_channel: ${acp.actual_state}`, 'info');
34
+ runner.log(` phone_channel: ${phone.actual_state}`, 'info');
35
+ });
36
+
37
+ if (!acpRunning || !phoneRunning) {
38
+ runner.log('', 'info');
39
+ runner.log('⚠ 需要两个模块都在运行,跳过后续测试', 'skip');
40
+ return;
41
+ }
42
+
43
+ // ========== 第二部分:单向 RPC 调用测试 ==========
44
+ runner.log('', 'info');
45
+ runner.log('第二部分:单向 RPC 调用测试', 'subsection');
46
+
47
+ await runner.runTest('Evol → acp_channel.echo', async () => {
48
+ const result = await client.call('acp_channel.echo', { message: 'test from evol' });
49
+ if (!result.echo || result.echo !== 'test from evol') {
50
+ throw new Error('调用失败');
51
+ }
52
+ runner.log(` 返回: ${result.echo}`, 'info');
53
+ });
54
+
55
+ await runner.runTest('Evol → phone_channel.echo', async () => {
56
+ const result = await client.call('phone_channel.echo', { message: 'test from evol' });
57
+ if (!result.echo || result.echo !== 'test from evol') {
58
+ throw new Error('调用失败');
59
+ }
60
+ runner.log(` 返回: ${result.echo}`, 'info');
61
+ });
62
+
63
+ // ========== 第三部分:连续双向调用测试 ==========
64
+ runner.log('', 'info');
65
+ runner.log('第三部分:连续双向调用测试', 'subsection');
66
+
67
+ await runner.runTest('Evol → acp_channel → Evol → phone_channel', async () => {
68
+ // 第一步:调用 acp_channel
69
+ const result1 = await client.call('acp_channel.get_status', {});
70
+ if (!result1.module_id || result1.module_id !== 'acp_channel') {
71
+ throw new Error('第一步调用失败');
72
+ }
73
+ runner.log(` 步骤1: acp_channel.get_status 成功`, 'info');
74
+
75
+ // 第二步:调用 phone_channel
76
+ const result2 = await client.call('phone_channel.get_status', {});
77
+ if (!result2.module_id || result2.module_id !== 'phone_channel') {
78
+ throw new Error('第二步调用失败');
79
+ }
80
+ runner.log(` 步骤2: phone_channel.get_status 成功`, 'info');
81
+
82
+ // 第三步:再次调用 acp_channel
83
+ const result3 = await client.call('acp_channel.echo', { message: 'round 2' });
84
+ if (!result3.echo || result3.echo !== 'round 2') {
85
+ throw new Error('第三步调用失败');
86
+ }
87
+ runner.log(` 步骤3: acp_channel.echo 成功`, 'info');
88
+ });
89
+
90
+ // ========== 第四部分:并发双向调用测试 ==========
91
+ runner.log('', 'info');
92
+ runner.log('第四部分:并发双向调用测试', 'subsection');
93
+
94
+ await runner.runTest('并发调用两个模块(各5次)', async () => {
95
+ const promises = [];
96
+
97
+ // 5 个对 acp_channel 的调用
98
+ for (let i = 0; i < 5; i++) {
99
+ promises.push(
100
+ client.call('acp_channel.echo', { message: `acp ${i + 1}` })
101
+ );
102
+ }
103
+
104
+ // 5 个对 phone_channel 的调用
105
+ for (let i = 0; i < 5; i++) {
106
+ promises.push(
107
+ client.call('phone_channel.echo', { message: `phone ${i + 1}` })
108
+ );
109
+ }
110
+
111
+ const results = await Promise.all(promises);
112
+
113
+ // 验证前 5 个结果
114
+ for (let i = 0; i < 5; i++) {
115
+ if (!results[i].echo || results[i].echo !== `acp ${i + 1}`) {
116
+ throw new Error(`acp_channel 调用 ${i + 1} 失败`);
117
+ }
118
+ }
119
+
120
+ // 验证后 5 个结果
121
+ for (let i = 0; i < 5; i++) {
122
+ if (!results[i + 5].echo || results[i + 5].echo !== `phone ${i + 1}`) {
123
+ throw new Error(`phone_channel 调用 ${i + 1} 失败`);
124
+ }
125
+ }
126
+
127
+ runner.log(` 成功完成 10 个并发调用`, 'info');
128
+ });
129
+
130
+ // ========== 第五部分:快速交替调用测试 ==========
131
+ runner.log('', 'info');
132
+ runner.log('第五部分:快速交替调用测试(20次)', 'subsection');
133
+
134
+ await runner.runTest('快速交替调用两个模块', async () => {
135
+ const iterations = 20;
136
+ for (let i = 0; i < iterations; i++) {
137
+ const method = i % 2 === 0 ? 'acp_channel.echo' : 'phone_channel.echo';
138
+ const message = `alternate ${i + 1}`;
139
+
140
+ const result = await client.call(method, { message: message });
141
+
142
+ if (!result.echo || result.echo !== message) {
143
+ throw new Error(`第 ${i + 1} 次调用失败`);
144
+ }
145
+ }
146
+ runner.log(` 成功完成 ${iterations} 次交替调用`, 'info');
147
+ });
148
+
149
+ // ========== 第六部分:调用链超时测试 ==========
150
+ runner.log('', 'info');
151
+ runner.log('第六部分:调用链超时测试', 'subsection');
152
+
153
+ await runner.runTest('验证 RPC 调用不会死锁', async () => {
154
+ // 创建一个超时保护的调用
155
+ const timeoutPromise = new Promise((_, reject) => {
156
+ setTimeout(() => reject(new Error('调用超时(可能死锁)')), 10000);
157
+ });
158
+
159
+ const callPromise = (async () => {
160
+ // 连续调用多次,确保不会死锁
161
+ for (let i = 0; i < 5; i++) {
162
+ await client.call('acp_channel.get_status', {});
163
+
164
+ await client.call('phone_channel.get_status', {});
165
+ }
166
+ })();
167
+
168
+ await Promise.race([callPromise, timeoutPromise]);
169
+ runner.log(` 调用链正常,无死锁`, 'info');
170
+ });
171
+
172
+ // ========== 第七部分:错误恢复测试 ==========
173
+ runner.log('', 'info');
174
+ runner.log('第七部分:错误恢复测试', 'subsection');
175
+
176
+ await runner.runTest('调用失败后继续调用', async () => {
177
+ // 第一步:故意调用不存在的方法
178
+ try {
179
+ await client.call('acp_channel.nonexistent', {});
180
+ throw new Error('应该抛出错误');
181
+ } catch (err) {
182
+ if (err.message.includes('应该抛出错误')) throw err;
183
+ runner.log(` 步骤1: 正确捕获错误`, 'info');
184
+ }
185
+
186
+ // 第二步:验证后续调用仍然正常
187
+ const result = await client.call('acp_channel.echo', { message: 'recovery test' });
188
+
189
+ if (!result.echo || result.echo !== 'recovery test') {
190
+ throw new Error('恢复调用失败');
191
+ }
192
+ runner.log(` 步骤2: 恢复调用成功`, 'info');
193
+ });
194
+
195
+ // ========== 第八部分:真正的嵌套 RPC 调用 ==========
196
+ runner.log('', 'info');
197
+ runner.log('第八部分:嵌套 RPC 调用(A→B→A)', 'subsection');
198
+
199
+ await runner.runTest('acp_channel.nested_call → 内部调用 phone_channel.echo', async () => {
200
+ const result = await client.call('acp_channel.nested_call', { message: 'hello nested' });
201
+
202
+ if (result.module_id !== 'acp_channel') {
203
+ throw new Error(`返回模块不正确: ${result.module_id}`);
204
+ }
205
+ if (result.nested_call_to !== 'phone_channel.echo') {
206
+ throw new Error(`嵌套目标不正确: ${result.nested_call_to}`);
207
+ }
208
+ if (!result.nested_result || result.nested_result.echo !== 'nested from acp: hello nested') {
209
+ throw new Error(`嵌套结果不正确: ${JSON.stringify(result.nested_result)}`);
210
+ }
211
+ runner.log(` acp → phone_channel.echo 嵌套调用成功`, 'info');
212
+ runner.log(` 嵌套返回: ${result.nested_result.echo}`, 'info');
213
+ });
214
+
215
+ await runner.runTest('phone_channel.nested_call → 内部调用 acp_channel.echo', async () => {
216
+ const result = await client.call('phone_channel.nested_call', { message: 'hello nested' });
217
+
218
+ if (result.module_id !== 'phone_channel') {
219
+ throw new Error(`返回模块不正确: ${result.module_id}`);
220
+ }
221
+ if (result.nested_call_to !== 'acp_channel.echo') {
222
+ throw new Error(`嵌套目标不正确: ${result.nested_call_to}`);
223
+ }
224
+ if (!result.nested_result || result.nested_result.echo !== 'nested from phone: hello nested') {
225
+ throw new Error(`嵌套结果不正确: ${JSON.stringify(result.nested_result)}`);
226
+ }
227
+ runner.log(` phone → acp_channel.echo 嵌套调用成功`, 'info');
228
+ runner.log(` 嵌套返回: ${result.nested_result.echo}`, 'info');
229
+ });
230
+
231
+ // ========== 第九部分:并发嵌套调用 ==========
232
+ runner.log('', 'info');
233
+ runner.log('第九部分:并发嵌套调用', 'subsection');
234
+
235
+ await runner.runTest('并发执行两个方向的嵌套调用', async () => {
236
+ const [acpResult, phoneResult] = await Promise.all([
237
+ client.call('acp_channel.nested_call', { message: 'concurrent 1' }),
238
+ client.call('phone_channel.nested_call', { message: 'concurrent 2' })
239
+ ]);
240
+
241
+ if (!acpResult.nested_result || acpResult.nested_result.echo !== 'nested from acp: concurrent 1') {
242
+ throw new Error(`acp 嵌套结果不正确`);
243
+ }
244
+ if (!phoneResult.nested_result || phoneResult.nested_result.echo !== 'nested from phone: concurrent 2') {
245
+ throw new Error(`phone 嵌套结果不正确`);
246
+ }
247
+ runner.log(` 双向并发嵌套调用成功`, 'info');
248
+ });
249
+
250
+ await runner.runTest('连续 5 次嵌套调用', async () => {
251
+ for (let i = 0; i < 5; i++) {
252
+ const method = i % 2 === 0 ? 'acp_channel.nested_call' : 'phone_channel.nested_call';
253
+
254
+ const result = await client.call(method, { message: `loop ${i + 1}` });
255
+
256
+ if (!result.nested_result) {
257
+ throw new Error(`第 ${i + 1} 次嵌套调用失败`);
258
+ }
259
+ }
260
+ runner.log(` 连续 5 次嵌套调用全部成功`, 'info');
261
+ });
262
+
263
+ runner.log('');
264
+ }
265
+
266
+ window.testNestedRpc = testNestedRpc;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 健康检查测试
3
+ */
4
+
5
+ async function testPingPong() {
6
+ const runner = window.testRunner;
7
+ const client = runner.kernelClient;
8
+
9
+ runner.log('【健康检查测试】', 'section');
10
+
11
+ await runner.runTest('Kernel 健康检查', async () => {
12
+ const result = await client.call('kernel.health', {});
13
+ if (!result.event_stats) throw new Error('缺少 event_stats 字段');
14
+ if (typeof result.status !== 'string') throw new Error('缺少 status 字段');
15
+ });
16
+
17
+ await runner.runTest('模块列表获取', async () => {
18
+ const result = await client.call('launcher.list_modules', {});
19
+ if (!result.modules || result.modules.length === 0) throw new Error('模块列表为空');
20
+ });
21
+
22
+ runner.log('');
23
+ }
24
+
25
+ window.testPingPong = testPingPong;
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Redis 集成测试 — 跨模块场景、数据完整性、并发安全
3
+ */
4
+
5
+ async function testRedisIntegration() {
6
+ const runner = window.testRunner;
7
+ const client = runner.kernelClient;
8
+
9
+ runner.log('【Redis 集成测试】', 'section');
10
+
11
+ // ── 生命周期 ──
12
+ runner.log('生命周期验证', 'subsection');
13
+
14
+ await runner.runTest('Redis 模块已就绪', async () => {
15
+ const result = await client.call('redis.status', {});
16
+ if (result.module_id !== 'redis') throw new Error(`模块名错误: ${result.module_id}`);
17
+ if (result.status !== 'running') throw new Error(`状态错误: ${result.status}`);
18
+ });
19
+
20
+ await runner.runTest('system.redis_ready 事件已发布', async () => {
21
+ const result = await client.call('registry.lookup', {
22
+ field: 'events_publish.system.redis_ready',
23
+ module: 'redis'
24
+ });
25
+ if (!result.results || result.results.length === 0) throw new Error('Redis 未注册事件');
26
+ });
27
+
28
+ await runner.runTest('redis.info 返回连接信息', async () => {
29
+ const info = await client.call('redis.info', {});
30
+ if (!info.host || !info.port) throw new Error('连接信息缺失');
31
+ runner.log(` Redis 类型: ${info.type}, 地址: ${info.host}:${info.port}`, 'info');
32
+ });
33
+
34
+ await runner.runTest('注册中心可查询 Redis 连接信息', async () => {
35
+ const result = await client.call('registry.lookup', {
36
+ field: 'services.redis',
37
+ module: 'redis'
38
+ });
39
+ if (!result.results || result.results.length === 0) throw new Error('注册中心无 Redis 连接信息');
40
+ const info = result.results[0].value;
41
+ if (!info.host || !info.port || !info.protocol) throw new Error('连接信息不完整');
42
+ runner.log(` 注册中心: ${info.host}:${info.port} (${info.protocol}, ${info.type})`, 'info');
43
+ });
44
+
45
+ // ── 字符串完整流程 ──
46
+ runner.log('', 'info');
47
+ runner.log('字符串完整流程 (SET → GET → EXPIRE → DEL)', 'subsection');
48
+
49
+ await runner.runTest('字符串 CRUD 完整流程', async () => {
50
+ const key = 'integ:str:' + Date.now();
51
+ // SET
52
+ await client.call('redis.set', { key, value: 'test_value' });
53
+ // GET
54
+ const get1 = await client.call('redis.get', { key });
55
+ if (get1.value !== 'test_value') throw new Error('GET 失败');
56
+ // 覆盖写
57
+ await client.call('redis.set', { key, value: 'new_value' });
58
+ const get2 = await client.call('redis.get', { key });
59
+ if (get2.value !== 'new_value') throw new Error('覆盖写失败');
60
+ // EXPIRE
61
+ await client.call('redis.expire', { key, seconds: 3600 });
62
+ // DEL
63
+ await client.call('redis.del', { key });
64
+ const get3 = await client.call('redis.get', { key });
65
+ if (get3.value !== null && get3.value !== undefined) throw new Error('DEL 后仍能 GET');
66
+ });
67
+
68
+ // ── 哈希完整流程 ──
69
+ runner.log('', 'info');
70
+ runner.log('哈希完整流程 (HSET → HGET → HGETALL → HDEL)', 'subsection');
71
+
72
+ await runner.runTest('哈希 CRUD 完整流程', async () => {
73
+ const key = 'integ:hash:' + Date.now();
74
+ // HSET 多字段
75
+ await client.call('redis.hset', { key, field: 'name', value: 'Kite' });
76
+ await client.call('redis.hset', { key, field: 'version', value: '1.0' });
77
+ await client.call('redis.hset', { key, field: 'type', value: 'service' });
78
+ // HGET
79
+ const name = await client.call('redis.hget', { key, field: 'name' });
80
+ if (name.value !== 'Kite') throw new Error('HGET name 失败');
81
+ // HGETALL
82
+ const all = await client.call('redis.hgetall', { key });
83
+ if (!all.data) throw new Error('HGETALL 缺少 data');
84
+ if (Object.keys(all.data).length !== 3) throw new Error(`期望3个字段, 得到 ${Object.keys(all.data).length}`);
85
+ if (all.data.version !== '1.0') throw new Error('HGETALL version 不匹配');
86
+ // HDEL
87
+ await client.call('redis.hdel', { key, field: 'type' });
88
+ const afterDel = await client.call('redis.hgetall', { key });
89
+ if (afterDel.data.type) throw new Error('HDEL 后 type 仍存在');
90
+ if (Object.keys(afterDel.data).length !== 2) throw new Error('HDEL 后字段数错误');
91
+ // 清理
92
+ await client.call('redis.del', { key });
93
+ });
94
+
95
+ // ── 集合完整流程 ──
96
+ runner.log('', 'info');
97
+ runner.log('集合完整流程 (SADD → SMEMBERS → SREM)', 'subsection');
98
+
99
+ await runner.runTest('集合 CRUD 完整流程', async () => {
100
+ const key = 'integ:set:' + Date.now();
101
+ // SADD
102
+ const add1 = await client.call('redis.sadd', { key, members: ['redis', 'mysql', 'mongo'] });
103
+ if (add1.added !== 3) throw new Error(`期望添加3, 得到 ${add1.added}`);
104
+ // SADD 重复
105
+ const add2 = await client.call('redis.sadd', { key, members: ['redis', 'pg'] });
106
+ if (add2.added !== 1) throw new Error(`重复添加应只加1, 得到 ${add2.added}`);
107
+ // SMEMBERS
108
+ const members = await client.call('redis.smembers', { key });
109
+ if (members.members.length !== 4) throw new Error(`期望4个成员, 得到 ${members.members.length}`);
110
+ // SREM
111
+ const rem = await client.call('redis.srem', { key, members: ['mongo', 'mysql'] });
112
+ if (rem.removed !== 2) throw new Error(`期望移除2, 得到 ${rem.removed}`);
113
+ const after = await client.call('redis.smembers', { key });
114
+ if (after.members.length !== 2) throw new Error(`移除后期望2个, 得到 ${after.members.length}`);
115
+ // 清理
116
+ await client.call('redis.del', { key });
117
+ });
118
+
119
+ // ── PUBLISH 测试 ──
120
+ runner.log('', 'info');
121
+ runner.log('发布测试 (PUBLISH)', 'subsection');
122
+
123
+ await runner.runTest('PUBLISH 命令可执行', async () => {
124
+ const result = await client.call('redis.publish', { channel: 'integ:ch', message: 'hello_kite' });
125
+ if (result.receivers === undefined) throw new Error('缺少 receivers 字段');
126
+ });
127
+
128
+ // ── 跨模块场景 ──
129
+ runner.log('', 'info');
130
+ runner.log('跨模块共享状态场景', 'subsection');
131
+
132
+ await runner.runTest('模拟多模块共享计数器', async () => {
133
+ const key = 'shared:counter';
134
+ // 模块A 写入
135
+ await client.call('redis.set', { key, value: '100' });
136
+ // 模块B 读取
137
+ const read = await client.call('redis.get', { key });
138
+ if (read.value !== '100') throw new Error('共享读取失败');
139
+ // 模块C 覆盖
140
+ await client.call('redis.set', { key, value: '200' });
141
+ // 模块A 再次读取
142
+ const read2 = await client.call('redis.get', { key });
143
+ if (read2.value !== '200') throw new Error('共享覆盖后读取失败');
144
+ await client.call('redis.del', { key });
145
+ });
146
+
147
+ await runner.runTest('模拟多模块共享哈希状态', async () => {
148
+ const key = 'shared:module_status';
149
+ await client.call('redis.hset', { key, field: 'phone_channel', value: 'online' });
150
+ await client.call('redis.hset', { key, field: 'model_service', value: 'online' });
151
+ await client.call('redis.hset', { key, field: 'gateway', value: 'degraded' });
152
+ const all = await client.call('redis.hgetall', { key });
153
+ if (Object.keys(all.data).length !== 3) throw new Error('模块状态数量错误');
154
+ if (all.data.gateway !== 'degraded') throw new Error('gateway 状态错误');
155
+ await client.call('redis.del', { key });
156
+ });
157
+
158
+ // ── 并发安全 ──
159
+ runner.log('', 'info');
160
+ runner.log('并发安全测试', 'subsection');
161
+
162
+ await runner.runTest('并发写入10个不同 key', async () => {
163
+ const promises = [];
164
+ for (let i = 0; i < 10; i++) {
165
+ promises.push(client.call('redis.set', { key: `concurrent:${i}`, value: `val_${i}` }));
166
+ }
167
+ await Promise.all(promises);
168
+ // 验证全部写入成功
169
+ for (let i = 0; i < 10; i++) {
170
+ const r = await client.call('redis.get', { key: `concurrent:${i}` });
171
+ if (r.value !== `val_${i}`) throw new Error(`key concurrent:${i} 值错误`);
172
+ }
173
+ // 清理
174
+ for (let i = 0; i < 10; i++) {
175
+ await client.call('redis.del', { key: `concurrent:${i}` });
176
+ }
177
+ });
178
+
179
+ await runner.runTest('并发操作不同数据类型', async () => {
180
+ const promises = [
181
+ client.call('redis.set', { key: 'mix:str', value: 'hello' }),
182
+ client.call('redis.hset', { key: 'mix:hash', field: 'f', value: 'v' }),
183
+ client.call('redis.sadd', { key: 'mix:set', members: ['a', 'b'] }),
184
+ ];
185
+ await Promise.all(promises);
186
+ const [str, hash, set] = await Promise.all([
187
+ client.call('redis.get', { key: 'mix:str' }),
188
+ client.call('redis.hget', { key: 'mix:hash', field: 'f' }),
189
+ client.call('redis.smembers', { key: 'mix:set' }),
190
+ ]);
191
+ if (str.value !== 'hello') throw new Error('字符串并发写入失败');
192
+ if (hash.value !== 'v') throw new Error('哈希并发写入失败');
193
+ if (set.members.length !== 2) throw new Error('集合并发写入失败');
194
+ // 清理
195
+ await Promise.all([
196
+ client.call('redis.del', { key: 'mix:str' }),
197
+ client.call('redis.del', { key: 'mix:hash' }),
198
+ client.call('redis.del', { key: 'mix:set' }),
199
+ ]);
200
+ });
201
+
202
+ // ── 错误处理 ──
203
+ runner.log('', 'info');
204
+ runner.log('错误处理测试', 'subsection');
205
+
206
+ await runner.runTest('redis.get 缺少 key 参数应报错', async () => {
207
+ try {
208
+ await client.call('redis.get', {});
209
+ throw new Error('应该抛出异常');
210
+ } catch (e) {
211
+ if (e.message === '应该抛出异常') throw e;
212
+ }
213
+ });
214
+
215
+ await runner.runTest('redis.hset 缺少参数应报错', async () => {
216
+ try {
217
+ await client.call('redis.hset', { key: 'test' });
218
+ throw new Error('应该抛出异常');
219
+ } catch (e) {
220
+ if (e.message === '应该抛出异常') throw e;
221
+ }
222
+ });
223
+
224
+ runner.log('');
225
+ }
226
+
227
+ window.testRedisIntegration = testRedisIntegration;
@@ -0,0 +1,52 @@
1
+ /**
2
+ * 注册中心核心功能测试
3
+ */
4
+
5
+ async function testRegistryCore() {
6
+ const runner = window.testRunner;
7
+ const client = runner.kernelClient;
8
+
9
+ runner.log('【注册中心核心功能测试】', 'section');
10
+
11
+ // 1. 测试 registry.lookup 基本功能
12
+ await runner.runTest('registry.lookup 基本调用', async () => {
13
+ const result = await client.call('registry.lookup', {});
14
+ if (!result.results || !Array.isArray(result.results)) throw new Error('返回结果格式错误');
15
+ if (typeof result.last_update_time !== 'number') throw new Error('缺少 last_update_time');
16
+ });
17
+
18
+ // 2. 测试 registry.get 精确查询
19
+ await runner.runTest('registry.get 精确查询', async () => {
20
+ const result = await client.call('registry.get', { path: 'launcher.module_id' });
21
+ if (result.value !== 'launcher') throw new Error('查询结果不正确');
22
+ });
23
+
24
+ // 3. 测试 glob 模式匹配
25
+ await runner.runTest('registry.lookup glob 模式', async () => {
26
+ const result = await client.call('registry.lookup', { field: 'tools.rpc.module.*' });
27
+ if (!result.results || result.results.length === 0) throw new Error('glob 匹配失败');
28
+ });
29
+
30
+ // 4. 测试统计数据
31
+ await runner.runTest('获取 Kernel 统计数据', async () => {
32
+ const result = await client.call('kernel.stats', {});
33
+ if (!result.counters) throw new Error('缺少 counters 字段');
34
+ if (!result.rpc) throw new Error('缺少 rpc 字段');
35
+ });
36
+
37
+ // 5. 测试注册中心统计
38
+ await runner.runTest('获取注册中心统计', async () => {
39
+ const result = await client.call('kernel.get_registry_stats', {});
40
+ if (result.total_records === undefined) throw new Error('缺少 total_records 字段');
41
+ });
42
+
43
+ // 6. 测试模块列表
44
+ await runner.runTest('获取模块列表', async () => {
45
+ const result = await client.call('launcher.list_modules', {});
46
+ if (!result.modules || result.modules.length === 0) throw new Error('模块列表为空');
47
+ });
48
+
49
+ runner.log('');
50
+ }
51
+
52
+ window.testRegistryCore = testRegistryCore;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * 远程部署与双模式启动集成测试
3
+ */
4
+
5
+ async function testRemoteDeploy() {
6
+ const runner = window.testRunner;
7
+ const client = runner.kernelClient;
8
+
9
+ runner.log('【远程部署与双模式启动测试】', 'section');
10
+
11
+ // 测试 1:Gateway 模块是否在线
12
+ await runner.runTest('Gateway 模块状态检查', async () => {
13
+ try {
14
+ const result = await client.call('registry.lookup', { module: 'gateway' });
15
+ if (!result.results || result.results.length === 0) {
16
+ runner.skip('Gateway 模块未启动');
17
+ return;
18
+ }
19
+ } catch (err) {
20
+ runner.skip('Gateway 模块未启动');
21
+ }
22
+ });
23
+
24
+ // 测试 2:Auth 模块远程认证接口
25
+ await runner.runTest('auth.verify 接口可用性', async () => {
26
+ try {
27
+ // 尝试验证一个无效 token(预期失败,但接口应该存在)
28
+ await client.call('auth.verify', { token: 'invalid-token-for-test' });
29
+ } catch (err) {
30
+ // 预期会失败,但不应该是 METHOD_NOT_FOUND
31
+ if (err.message && err.message.includes('Method not found')) {
32
+ throw new Error('auth.verify 方法不存在');
33
+ }
34
+ // 其他错误(如 Invalid token)是正常的
35
+ }
36
+ });
37
+
38
+ // 测试 3:Launcher 申请 client token 接口
39
+ await runner.runTest('launcher.request_client_token 接口', async () => {
40
+ try {
41
+ const result = await client.call('launcher.request_client_token', {
42
+ module_id: 'test_module',
43
+ kite_token: 'test-kite-token'
44
+ });
45
+ // 预期会失败(无效的 kite_token),但接口应该存在
46
+ } catch (err) {
47
+ if (err.message && err.message.includes('Method not found')) {
48
+ throw new Error('launcher.request_client_token 方法不存在');
49
+ }
50
+ // 其他错误是正常的
51
+ }
52
+ });
53
+
54
+ // 测试 4:检查远程模块注册信息
55
+ await runner.runTest('远程模块注册信息检查', async () => {
56
+ const result = await client.call('registry.lookup', {});
57
+
58
+ // 检查是否有模块声明了 gateway_url
59
+ let hasRemoteModule = false;
60
+ for (const item of result.results) {
61
+ if (item.field === 'metadata.gateway_url') {
62
+ hasRemoteModule = true;
63
+ break;
64
+ }
65
+ }
66
+
67
+ if (!hasRemoteModule) {
68
+ runner.skip('当前无远程模块');
69
+ }
70
+ });
71
+
72
+ // 测试 5:多连接 offer/release 事件
73
+ await runner.runTest('system.connection.offer 事件订阅', async () => {
74
+ try {
75
+ await client.subscribe(['system.connection.offer', 'system.connection.release']);
76
+ // 订阅成功
77
+ } catch (err) {
78
+ throw new Error(`事件订阅失败: ${err.message}`);
79
+ }
80
+ });
81
+
82
+ runner.log('');
83
+ }
84
+
85
+ window.testRemoteDeploy = testRemoteDeploy;