@agentunion/kite 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (718) hide show
  1. package/.claude/skills/kite/checklists/feature-checklist.md +496 -0
  2. package/.claude/skills/kite/references/event-patterns.md +180 -0
  3. package/.claude/skills/kite/references/health-check.md +202 -0
  4. package/.claude/skills/kite/references/http-service.md +199 -0
  5. package/.claude/skills/kite/references/module-md-spec.md +172 -0
  6. package/.claude/skills/kite/references/multi-connection.md +147 -0
  7. package/.claude/skills/kite/references/rpc-patterns.md +199 -0
  8. package/.claude/skills/kite/references/shutdown-sequence.md +146 -0
  9. package/.claude/skills/kite/references/stdin-protocol.md +147 -0
  10. package/.claude/skills/kite/references/test-center-integration.md +178 -0
  11. package/.claude/skills/kite/references/ws-lifecycle.md +301 -0
  12. package/.claude/skills/kite/skill.md +272 -0
  13. package/.claude/skills/kite/templates/go/README.md +20 -0
  14. package/.claude/skills/kite/templates/node/entry.js +134 -0
  15. package/.claude/skills/kite/templates/node/module.md +16 -0
  16. package/.claude/skills/kite/templates/node/server.js +351 -0
  17. package/.claude/skills/kite/templates/node/server_http.js +90 -0
  18. package/.claude/skills/kite/templates/python/entry.py +425 -0
  19. package/.claude/skills/kite/templates/python/module.md +26 -0
  20. package/.claude/skills/kite/templates/python/server.py +447 -0
  21. package/.claude/skills/kite/templates/python/server_http.py +433 -0
  22. package/CHANGELOG.md +102 -0
  23. package/cli.js +78 -5
  24. package/core/dependency_checker.py +250 -0
  25. package/core/env_checker.py +586 -0
  26. package/dependencies_lock.json +128 -0
  27. package/docs/05-/347/237/255/344/277/241/350/256/244/350/257/201/344/270/216/347/224/250/346/210/267/344/277/241/346/201/257/346/216/245/345/217/243/346/226/207/346/241/243.md +507 -0
  28. package/docs/ACP/345/215/217/350/256/256/345/205/274/345/256/271/346/226/271/346/241/210.md +138 -0
  29. package/docs/CI/344/270/216AI/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/346/226/271/346/241/210.md +75 -0
  30. package/docs/CLI/345/274/200/345/217/221/350/256/241/345/210/222.md +595 -0
  31. package/docs/ClaudeCode/350/277/234/347/250/213/345/215/217/344/275/234/347/263/273/347/273/237-/346/212/200/346/234/257/350/257/204/344/274/260.md +535 -0
  32. package/docs/ClaudeCode/350/277/234/347/250/213/345/215/217/344/275/234/347/263/273/347/273/237/350/256/276/350/256/241.md +631 -0
  33. package/docs/Evol-App/344/275/277/347/224/250KernelClient/346/224/271/351/200/240/345/256/214/346/210/220.md +342 -0
  34. package/docs/Evol/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/346/246/202/350/246/201.md +604 -0
  35. package/docs/Evol/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/350/256/276/350/256/241.md +1708 -0
  36. package/docs/Evol/346/250/241/345/235/227/350/256/276/350/256/241/346/226/271/346/241/210.md +1154 -0
  37. package/docs/Evol/351/241/265/351/235/242/346/217/222/344/273/266/345/214/226-Evol/346/250/241/345/235/227/345/256/236/346/226/275/346/214/207/345/215/227.md +403 -0
  38. package/docs/Evol/351/241/265/351/235/242/346/217/222/344/273/266/345/214/226-/345/244/226/351/203/250/346/250/241/345/235/227/346/216/245/345/205/245/346/214/207/345/215/227.md +468 -0
  39. package/docs/HTTP-RPC/350/277/201/347/247/273/345/210/260WebSocket/350/256/241/345/210/222.md +318 -0
  40. package/docs/INDEX.md +388 -0
  41. package/docs/KITE_DOCS_GUIDE.md +33 -0
  42. package/docs/Kernel-Client-Kite-Token/346/224/257/346/214/201/345/256/236/346/226/275/345/256/214/346/210/220.md +330 -0
  43. package/docs/Kernel/344/270/273/345/212/250Ping/346/234/272/345/210/266-/346/255/243/347/241/256/345/256/236/347/216/260.md +235 -0
  44. package/docs/Kernel/344/270/273/345/212/250Ping/346/234/272/345/210/266/345/256/236/346/226/275/346/200/273/347/273/223.md +204 -0
  45. package/docs/Kite/345/256/211/350/243/205/351/227/256/351/242/230/350/247/243/345/206/263/346/226/271/346/241/210.md +362 -0
  46. package/docs/Kite/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/350/256/276/350/256/241-/347/273/210/346/236/201/347/233/256/346/240/207.md +721 -0
  47. package/docs/Kite/346/216/247/345/210/266/345/217/260/347/273/237/344/270/200WebSocket/346/224/271/351/200/240/346/226/271/346/241/210.md +821 -0
  48. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/01-/346/241/206/346/236/266/345/256/232/344/275/215.md +12 -0
  49. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/02-/346/240/270/345/277/203/346/246/202/345/277/265.md +341 -0
  50. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/03-/347/263/273/347/273/237/346/236/266/346/236/204.md +257 -0
  51. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/04-/346/250/241/345/235/227/350/247/204/350/214/203.md +263 -0
  52. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/05-/346/240/270/345/277/203/346/265/201/347/250/213-/346/226/260/347/211/210.md +267 -0
  53. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/05-/346/240/270/345/277/203/346/265/201/347/250/213.md +149 -0
  54. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/06-/347/233/256/345/275/225/347/273/223/346/236/204.md +231 -0
  55. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/07-/346/225/260/346/215/256/346/250/241/345/236/213.md +68 -0
  56. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/08-/346/211/251/345/261/225/346/200/247.md +34 -0
  57. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/09-/344/270/216/345/205/267/344/275/223/345/272/224/347/224/250/347/232/204/345/205/263/347/263/273.md +22 -0
  58. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/README.md +46 -0
  59. package/docs/Kite/347/263/273/347/273/237/345/220/257/345/212/250/346/265/201/347/250/213.md +567 -0
  60. package/docs/Launcher/345/220/257/345/212/250/345/231/250/346/226/207/346/241/243.md +745 -0
  61. package/docs/Polyglot/350/277/220/350/241/214/346/227/266/344/270/216Clawdbot/345/205/274/345/256/271/346/200/247/350/256/276/350/256/241.md +321 -0
  62. package/docs/Redis/344/270/216/346/250/241/345/235/227/345/244/232/345/256/236/344/276/213/346/226/271/346/241/210.md +438 -0
  63. package/docs/Relay-Kite-Token/350/256/244/350/257/201/345/256/236/346/226/275/345/256/214/346/210/220.md +178 -0
  64. package/docs/Relay-Token/346/235/203/351/231/220/351/205/215/347/275/256/351/252/214/350/257/201.md +113 -0
  65. package/docs/Watchdog/345/201/245/345/272/267/346/243/200/346/237/245/344/270/216WebSocket-Ping/346/234/272/345/210/266/345/210/206/346/236/220.md +367 -0
  66. package/docs/Watchdog/350/265/204/346/272/220/347/233/221/346/216/247/347/255/226/347/225/245.md +92 -0
  67. package/docs/WebSocket/346/216/245/346/224/266/345/276/252/347/216/257/346/255/273/351/224/201/351/230/262/350/214/203/350/247/204/350/214/203.md +357 -0
  68. package/docs/WebSocket/350/277/236/346/216/245/351/237/247/346/200/247/344/270/216/351/207/215/350/277/236/346/234/272/345/210/266/345/256/214/346/225/264/346/226/271/346/241/210.md +531 -0
  69. package/docs/WebSocket/350/277/236/346/216/245/351/237/247/346/200/247/346/226/271/346/241/210.md +169 -0
  70. package/docs/WebSocket/351/207/215/350/277/236/346/234/272/345/210/266/346/265/213/350/257/225/346/212/245/345/221/212.md +169 -0
  71. package/docs/WebSocket/351/207/215/350/277/236/351/200/200/351/201/277/346/234/272/345/210/266/346/226/271/346/241/210.md +394 -0
  72. package/docs/Web/346/250/241/345/235/227/344/270/216Evol/346/250/241/345/235/227/351/207/215/346/236/204/345/210/206/346/236/220.md +521 -0
  73. package/docs/audit-api-guide.md +68 -0
  74. package/docs/audit-module-design.md +315 -0
  75. package/docs/audit-module-implementation-summary.md +149 -0
  76. package/docs/llm-context-design.md +52 -0
  77. package/docs/llm-test-enhancement-plan.md +970 -0
  78. package/docs/logs-api-guide.md +42 -0
  79. package/docs/npm/345/214/205Python/347/216/257/345/242/203/347/256/241/347/220/206/346/226/271/346/241/210.md +302 -0
  80. package/docs/npm/345/217/221/345/270/203/344/270/216CLI/344/275/277/347/224/250/346/214/207/345/215/227.md +245 -0
  81. package/docs/stdio/344/270/216/347/253/257/345/217/243/345/217/221/347/216/260/351/207/215/346/236/204.md +480 -0
  82. package/docs/web/346/250/241/345/235/227/344/270/255/350/275/254/346/234/215/345/212/241/350/256/276/350/256/241/346/226/271/346/241/210.md +449 -0
  83. package/docs//344/272/213/344/273/266/345/244/204/347/220/206/346/234/272/345/210/266.md +388 -0
  84. package/docs//344/272/213/344/273/266/345/244/204/347/220/206/350/247/204/350/214/203.md +113 -0
  85. package/docs//344/272/213/344/273/266/350/256/242/351/230/205/351/200/232/351/205/215/347/254/246/350/247/204/350/214/203.md +256 -0
  86. package/docs//344/272/213/344/273/266/351/230/237/345/210/227/345/274/271/346/200/247/347/256/241/347/220/206.md +449 -0
  87. package/docs//344/272/244/344/272/222/345/274/217/347/273/210/347/253/257/346/216/247/345/210/266/346/226/271/346/241/210.md +301 -0
  88. package/docs//344/273/243/347/220/206/345/220/257/345/212/250/345/231/250/344/270/216/345/256/271/345/231/250/345/214/226.md +140 -0
  89. package/docs//344/273/243/347/240/201/347/273/237/350/256/241/345/267/245/345/205/267/344/275/277/347/224/250/350/257/264/346/230/216.md +217 -0
  90. package/docs//344/274/230/351/233/205/351/200/200/345/207/272/350/247/204/350/214/203.md +362 -0
  91. package/docs//344/276/235/350/265/226/347/256/241/347/220/206/350/257/264/346/230/216.md +141 -0
  92. package/docs//344/277/256/345/244/215/346/235/203/351/231/220/351/227/256/351/242/230-evol-RPC/346/235/203/351/231/220.md +268 -0
  93. package/docs//345/210/240/351/231/244kernel-client-example/345/256/214/346/210/220.md +309 -0
  94. package/docs//345/210/240/351/231/244ws-management/345/256/214/346/210/220.md +418 -0
  95. package/docs//345/220/257/345/212/250/344/274/230/345/214/226/346/226/271/346/241/210.md +522 -0
  96. package/docs//345/220/257/345/212/250/344/276/235/350/265/226/344/270/216/346/216/222/345/272/217.md +105 -0
  97. package/docs//345/256/211/350/243/205/350/204/232/346/234/254/345/274/200/345/217/221/346/226/207/346/241/243.md +643 -0
  98. package/docs//345/256/214/346/225/264/345/220/257/345/212/250/346/265/201/347/250/213/350/256/276/350/256/241.md +452 -0
  99. package/docs//345/256/236/347/216/260/350/247/204/345/210/222.md +195 -0
  100. package/docs//345/277/203/350/267/263/346/234/272/345/210/266/351/207/215/346/236/204/346/200/273/347/273/223.md +166 -0
  101. package/docs//346/217/241/346/211/213/350/256/244/350/257/201/346/226/271/346/241/210-/345/256/211/345/205/250/345/256/241/346/237/245.md +176 -0
  102. package/docs//346/217/241/346/211/213/350/256/244/350/257/201/346/226/271/346/241/210.md +908 -0
  103. package/docs//346/226/207/346/241/243/346/233/264/346/226/260/346/270/205/345/215/225.md +83 -0
  104. package/docs//346/227/245/345/277/227/344/270/216/345/274/202/345/270/270/345/244/204/347/220/206/350/247/204/350/214/203.md +829 -0
  105. package/docs//346/227/245/345/277/227/350/260/203/350/257/225/345/256/236/346/210/230/346/214/207/345/215/227.md +25 -0
  106. package/docs//346/236/266/346/236/204/345/200/237/351/211/264/346/214/207/345/215/227.md +977 -0
  107. package/docs//346/236/266/346/236/204/346/224/271/351/200/240-/345/256/214/346/210/220/346/200/273/347/273/223.md +440 -0
  108. package/docs//346/236/266/346/236/204/347/216/260/347/212/266/344/270/216/347/273/210/346/236/201/347/233/256/346/240/207/345/257/271/346/257/224/345/210/206/346/236/220.md +508 -0
  109. package/docs//346/250/241/345/235/227/345/244/232/350/277/236/346/216/245/346/216/247/345/210/266/347/255/226/347/225/245.md +220 -0
  110. package/docs//346/250/241/345/235/227/345/256/211/350/243/205/346/234/272/345/210/266/350/256/276/350/256/241.md +500 -0
  111. package/docs//346/250/241/345/235/227/345/274/200/345/217/221/346/214/207/345/215/227.md +1824 -0
  112. package/docs//346/250/241/345/235/227/347/203/255/346/233/264/346/226/260.md +89 -0
  113. package/docs//346/250/241/345/235/227/350/277/234/347/250/213/351/203/250/347/275/262/345/274/200/345/217/221/350/247/204/350/214/203.md +460 -0
  114. package/docs//346/250/241/345/235/227/351/200/200/345/207/272/346/234/272/345/210/266/345/256/214/346/225/264/346/226/271/346/241/210.md +303 -0
  115. package/docs//346/250/241/345/235/227/351/205/215/347/275/256/345/212/240/350/275/275/344/270/216/347/203/255/351/207/215/350/275/275/350/247/204/350/214/203.md +369 -0
  116. package/docs//346/265/213/350/257/225/344/270/255/345/277/203/346/267/273/345/212/240/346/250/241/345/235/227/346/265/213/350/257/225/346/214/207/345/215/227.md +147 -0
  117. package/docs//347/211/210/346/234/254/351/224/201/345/256/232/347/216/257/345/242/203/347/256/241/347/220/206/346/226/271/346/241/210.md +331 -0
  118. package/docs//347/216/257/345/242/203/345/217/230/351/207/217/344/270/216/350/277/220/350/241/214/346/227/266/347/233/256/345/275/225/350/256/276/350/256/241.md +499 -0
  119. package/docs//347/216/257/345/242/203/347/256/241/347/220/206/345/256/214/346/225/264/346/226/271/346/241/210.md +334 -0
  120. package/docs//350/231/232/346/213/237/346/250/241/345/235/227/344/270/255/350/275/254/346/234/215/345/212/241/345/256/214/346/225/264/350/256/276/350/256/241.md +1496 -0
  121. package/docs//350/231/232/346/213/237/347/216/257/345/242/203/345/267/245/344/275/234/345/216/237/347/220/206.md +163 -0
  122. package/docs//350/256/241/345/210/222/347/256/241/347/220/206/345/231/250/344/275/277/347/224/250/346/214/207/345/215/227.md +196 -0
  123. package/docs//350/256/244/350/257/201/346/250/241/345/235/227/344/270/216Gateway/350/256/276/350/256/241/346/226/271/346/241/210.md +765 -0
  124. package/docs//350/277/234/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/346/227/247/347/211/210.md +1117 -0
  125. package/docs//350/277/234/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241.md +451 -0
  126. package/docs//351/207/215/346/236/204/346/234/272/345/210/266/346/270/205/345/215/225.md +192 -0
  127. package/docs//351/223/276/350/267/257/350/277/275/350/270/252/346/226/271/346/241/210.md +242 -0
  128. package/docs//351/231/215/347/272/247/347/255/226/347/225/245/350/256/276/350/256/241/346/226/271/346/241/210.md +618 -0
  129. package/extensions/agents/assistant/entry.py +113 -14
  130. package/extensions/agents/assistant/module.md +27 -22
  131. package/extensions/agents/assistant/server.py +308 -106
  132. package/extensions/channels/acp_channel/entry.py +114 -16
  133. package/extensions/channels/acp_channel/module.md +4 -0
  134. package/extensions/channels/acp_channel/server.py +412 -105
  135. package/extensions/channels/phone_channel/__init__.py +1 -0
  136. package/extensions/channels/phone_channel/entry.py +503 -0
  137. package/extensions/channels/phone_channel/module.md +31 -0
  138. package/extensions/channels/phone_channel/server.py +686 -0
  139. package/extensions/event_hub_bench/entry.py +55 -12
  140. package/extensions/event_hub_bench/module.md +27 -27
  141. package/extensions/services/audit/README.md +134 -0
  142. package/extensions/services/audit/collector.py +73 -0
  143. package/extensions/services/audit/entry.py +444 -0
  144. package/extensions/services/audit/module.md +66 -0
  145. package/extensions/services/audit/query_audit.py +111 -0
  146. package/extensions/services/audit/routes/__init__.py +1 -0
  147. package/extensions/services/audit/routes/routes_audit.py +113 -0
  148. package/extensions/services/audit/schemas/__init__.py +5 -0
  149. package/extensions/services/audit/schemas/audit_event.py +92 -0
  150. package/extensions/services/audit/server.py +542 -0
  151. package/extensions/services/audit/storage.py +95 -0
  152. package/extensions/services/auth/entry.py +1054 -0
  153. package/extensions/services/auth/module.md +31 -0
  154. package/extensions/services/auth/token_store.py +185 -0
  155. package/extensions/services/auth/verifiers/evol_account.py +101 -0
  156. package/extensions/services/auth/verifiers/kite_token.py +38 -0
  157. package/extensions/services/auth/verifiers/pairing_code.py +71 -0
  158. package/extensions/services/backup/entry.py +505 -201
  159. package/extensions/services/backup/module.md +4 -2
  160. package/extensions/services/dataclaw/api/__init__.py +0 -0
  161. package/extensions/services/dataclaw/api/admin.py +367 -0
  162. package/extensions/services/dataclaw/api/copyright.py +175 -0
  163. package/extensions/services/dataclaw/api/credits.py +177 -0
  164. package/extensions/services/dataclaw/api/data.py +179 -0
  165. package/extensions/services/dataclaw/api/demands.py +269 -0
  166. package/extensions/services/dataclaw/api/feeds.py +262 -0
  167. package/extensions/services/dataclaw/api/identity.py +505 -0
  168. package/extensions/services/dataclaw/api/notifications.py +104 -0
  169. package/extensions/services/dataclaw/api/reviews.py +138 -0
  170. package/extensions/services/dataclaw/api/search.py +153 -0
  171. package/extensions/services/dataclaw/api/subscriptions.py +157 -0
  172. package/extensions/services/dataclaw/config.json5 +96 -0
  173. package/extensions/services/dataclaw/core/__init__.py +0 -0
  174. package/extensions/services/dataclaw/core/auth.py +95 -0
  175. package/extensions/services/dataclaw/core/config.py +50 -0
  176. package/extensions/services/dataclaw/core/database.py +70 -0
  177. package/extensions/services/dataclaw/entry.py +416 -0
  178. package/extensions/services/dataclaw/gofeed/351/241/271/347/233/256/346/211/200/346/234/211/346/235/203/350/275/254/347/247/273/346/265/201/347/250/213/350/257/264/346/230/216.md +309 -0
  179. package/extensions/services/dataclaw/migrate.py +283 -0
  180. package/extensions/services/dataclaw/models/__init__.py +0 -0
  181. package/extensions/services/dataclaw/module.md +49 -0
  182. package/extensions/services/dataclaw/requirements.txt +18 -0
  183. package/extensions/services/dataclaw/server.py +759 -0
  184. package/extensions/services/dataclaw/services/__init__.py +0 -0
  185. package/extensions/services/dataclaw/services/agent_service.py +132 -0
  186. package/extensions/services/dataclaw/services/credit_service.py +235 -0
  187. package/extensions/services/dataclaw/services/email_service.py +140 -0
  188. package/extensions/services/dataclaw/services/feed_service.py +259 -0
  189. package/extensions/services/dataclaw/services/notification_service.py +209 -0
  190. package/extensions/services/dataclaw/services/oauth_service.py +275 -0
  191. package/extensions/services/dataclaw/services/pricing.py +102 -0
  192. package/extensions/services/dataclaw/services/quality.py +79 -0
  193. package/extensions/services/dataclaw/services/reputation.py +142 -0
  194. package/extensions/services/dataclaw/services/sms_service.py +174 -0
  195. package/extensions/services/dataclaw/static/css/common.css +853 -0
  196. package/extensions/services/dataclaw/static/css/themes/blue.css +42 -0
  197. package/extensions/services/dataclaw/static/css/themes/dark.css +42 -0
  198. package/extensions/services/dataclaw/static/css/themes/light.css +35 -0
  199. package/extensions/services/dataclaw/static/js/api.js +103 -0
  200. package/extensions/services/dataclaw/static/js/common.js +321 -0
  201. package/extensions/services/dataclaw/static/js/i18n.js +95 -0
  202. package/extensions/services/dataclaw/static/js/pages/admin.js +152 -0
  203. package/extensions/services/dataclaw/static/js/pages/dashboard.js +82 -0
  204. package/extensions/services/dataclaw/static/js/pages/feed-detail.js +180 -0
  205. package/extensions/services/dataclaw/static/js/pages/feed-manage.js +158 -0
  206. package/extensions/services/dataclaw/static/js/theme.js +46 -0
  207. package/extensions/services/dataclaw/static/locales/en-US.json +464 -0
  208. package/extensions/services/dataclaw/static/locales/ja-JP.json +464 -0
  209. package/extensions/services/dataclaw/static/locales/zh-CN.json +464 -0
  210. package/extensions/services/dataclaw/templates/admin/index.html +90 -0
  211. package/extensions/services/dataclaw/templates/base.html +136 -0
  212. package/extensions/services/dataclaw/templates/credits/balance.html +106 -0
  213. package/extensions/services/dataclaw/templates/credits/deposit.html +164 -0
  214. package/extensions/services/dataclaw/templates/credits/history.html +90 -0
  215. package/extensions/services/dataclaw/templates/dashboard.html +52 -0
  216. package/extensions/services/dataclaw/templates/demands/create.html +78 -0
  217. package/extensions/services/dataclaw/templates/demands/detail.html +136 -0
  218. package/extensions/services/dataclaw/templates/demands/list.html +94 -0
  219. package/extensions/services/dataclaw/templates/feeds/create.html +95 -0
  220. package/extensions/services/dataclaw/templates/feeds/detail.html +110 -0
  221. package/extensions/services/dataclaw/templates/feeds/list.html +110 -0
  222. package/extensions/services/dataclaw/templates/feeds/manage.html +88 -0
  223. package/extensions/services/dataclaw/templates/index.html +185 -0
  224. package/extensions/services/dataclaw/templates/login.html +246 -0
  225. package/extensions/services/dataclaw/templates/register.html +164 -0
  226. package/extensions/services/dataclaw/templates/settings/notifications.html +96 -0
  227. package/extensions/services/dataclaw/templates/settings/profile.html +167 -0
  228. package/extensions/services/dataclaw/templates/subscriptions/list.html +64 -0
  229. package/extensions/services/dataclaw/tests/__init__.py +0 -0
  230. package/extensions/services/dataclaw/tests/conftest.py +68 -0
  231. package/extensions/services/dataclaw/tests/integration/__init__.py +0 -0
  232. package/extensions/services/dataclaw/tests/integration/test_workflows.py +239 -0
  233. package/extensions/services/dataclaw/tests/unit/__init__.py +0 -0
  234. package/extensions/services/dataclaw/tests/unit/test_admin.py +70 -0
  235. package/extensions/services/dataclaw/tests/unit/test_copyright.py +63 -0
  236. package/extensions/services/dataclaw/tests/unit/test_credits.py +80 -0
  237. package/extensions/services/dataclaw/tests/unit/test_data.py +98 -0
  238. package/extensions/services/dataclaw/tests/unit/test_demands.py +106 -0
  239. package/extensions/services/dataclaw/tests/unit/test_feeds.py +98 -0
  240. package/extensions/services/dataclaw/tests/unit/test_identity.py +88 -0
  241. package/extensions/services/dataclaw/tests/unit/test_notifications.py +36 -0
  242. package/extensions/services/dataclaw/tests/unit/test_reviews.py +68 -0
  243. package/extensions/services/dataclaw/tests/unit/test_search.py +64 -0
  244. package/extensions/services/dataclaw/tests/unit/test_subscriptions.py +65 -0
  245. package/extensions/services/dataclaw/tests/unit/test_system.py +106 -0
  246. package/extensions/services/dataclaw/utils/__init__.py +0 -0
  247. package/extensions/services/dataclaw/utils/crypto.py +38 -0
  248. package/extensions/services/dataclaw/utils/id_generator.py +52 -0
  249. package/extensions/services/dataclaw/ws/__init__.py +0 -0
  250. package/extensions/services/dataclaw/ws/handler.py +163 -0
  251. package/extensions/services/dataclaw//345/215/217/350/256/2561-/351/241/271/347/233/256/346/235/241/344/273/266/346/216/210/346/235/203/344/270/216/350/202/241/346/235/203/345/257/271/344/273/267/345/215/217/350/256/256.md +243 -0
  252. package/extensions/services/dataclaw//345/215/217/350/256/2562-/351/241/271/347/233/256/350/264/255/344/271/260/346/235/203/344/270/216/345/244/226/345/214/205/345/247/224/346/211/230/345/274/200/345/217/221/345/215/217/350/256/256.md +434 -0
  253. package/extensions/services/evol/__init__.py +1 -0
  254. package/extensions/services/evol/async_http.py +551 -0
  255. package/extensions/services/evol/auth_manager.py +602 -0
  256. package/extensions/services/evol/config.json5 +16 -0
  257. package/extensions/services/evol/config_loader.py +117 -0
  258. package/extensions/services/evol/entry.py +568 -0
  259. package/extensions/services/evol/evol_api.py +969 -0
  260. package/extensions/services/evol/evol_config.json5 +29 -0
  261. package/extensions/services/evol/mfa_totp.py +77 -0
  262. package/extensions/services/evol/migrate_tokens.py +122 -0
  263. package/extensions/services/evol/module.md +150 -0
  264. package/extensions/services/evol/nonce_pool.py +113 -0
  265. package/extensions/services/evol/oauth_manager.py +223 -0
  266. package/extensions/services/evol/pairing.py +251 -0
  267. package/extensions/services/evol/pairing_codes.jsonl +2 -0
  268. package/extensions/services/evol/relay.py +1031 -0
  269. package/extensions/services/evol/relay_config.json5 +85 -0
  270. package/extensions/services/evol/routes/__init__.py +1 -0
  271. package/extensions/services/evol/routes/routes_llm.py +231 -0
  272. package/extensions/services/evol/routes/routes_rpc.py +90 -0
  273. package/extensions/services/evol/routes/routes_test.py +68 -0
  274. package/extensions/services/evol/server.py +2426 -0
  275. package/extensions/services/evol/static/assets/CommissionView-Cs_ys6Gm.js +1 -0
  276. package/extensions/services/evol/static/assets/CommissionView-DACet_Oo.css +1 -0
  277. package/extensions/services/evol/static/assets/IframePage-DbO11U9G.js +1 -0
  278. package/extensions/services/evol/static/assets/IframePage-c572lT8i.css +1 -0
  279. package/extensions/services/evol/static/assets/TeamDetailView-DULrGD7k.css +1 -0
  280. package/extensions/services/evol/static/assets/TeamDetailView-gy_MBEqG.js +139 -0
  281. package/extensions/services/evol/static/assets/element-plus-Bd7pZkkM.js +63 -0
  282. package/extensions/services/evol/static/assets/index-CmMONKzG.css +1 -0
  283. package/extensions/services/evol/static/assets/index-D44bBe__.js +2 -0
  284. package/extensions/services/evol/static/assets/vue-vendor-DtF-__I4.js +29 -0
  285. package/extensions/services/evol/static/index.html +16 -0
  286. package/extensions/services/evol/static/logo.png +0 -0
  287. package/extensions/services/evol/stats_manager.py +243 -0
  288. package/extensions/services/evol/web/README.md +89 -0
  289. package/extensions/services/evol/web/build.bat +44 -0
  290. package/extensions/services/evol/web/index.html +13 -0
  291. package/extensions/services/evol/web/package-lock.json +1718 -0
  292. package/extensions/services/evol/web/package.json +26 -0
  293. package/extensions/services/evol/web/public/logo.png +0 -0
  294. package/extensions/services/evol/web/src/App.vue +7 -0
  295. package/extensions/services/evol/web/src/components/layout/AppHeader.vue +202 -0
  296. package/extensions/services/evol/web/src/components/layout/AppLayout.vue +61 -0
  297. package/extensions/services/evol/web/src/components/layout/AppSidebar.vue +115 -0
  298. package/extensions/services/evol/web/src/components/login/LoginPage.vue +271 -0
  299. package/extensions/services/evol/web/src/components/team/AddMemberModal.vue +181 -0
  300. package/extensions/services/evol/web/src/components/team/GroupTreeNode.vue +156 -0
  301. package/extensions/services/evol/web/src/components/team/TeamAlertConfig.vue +221 -0
  302. package/extensions/services/evol/web/src/components/team/TeamBillModal.vue +165 -0
  303. package/extensions/services/evol/web/src/components/team/TeamMembersAndGroups.vue +499 -0
  304. package/extensions/services/evol/web/src/components/team/TeamStatsPanel.vue +907 -0
  305. package/extensions/services/evol/web/src/components/team/TreeNode.vue +331 -0
  306. package/extensions/services/evol/web/src/components/team/stats/StatsExportProgress.vue +44 -0
  307. package/extensions/services/evol/web/src/components/team/stats/StatsHeader.vue +89 -0
  308. package/extensions/services/evol/web/src/components/team/stats/StatsMemberDetail.vue +415 -0
  309. package/extensions/services/evol/web/src/components/team/stats/StatsSummary.vue +42 -0
  310. package/extensions/services/evol/web/src/components/team/stats/helpers.ts +195 -0
  311. package/extensions/services/evol/web/src/components/team/stats/stats.css +741 -0
  312. package/extensions/services/evol/web/src/components/team/stats/useStatsApi.ts +114 -0
  313. package/extensions/services/evol/web/src/components/team/stats/useStatsCharts.ts +242 -0
  314. package/extensions/services/evol/web/src/components/team/stats/useStatsExport.ts +232 -0
  315. package/extensions/services/evol/web/src/composables/useFormatters.ts +42 -0
  316. package/extensions/services/evol/web/src/composables/useTheme.ts +52 -0
  317. package/extensions/services/evol/web/src/env.d.ts +7 -0
  318. package/extensions/services/evol/web/src/i18n/en.ts +361 -0
  319. package/extensions/services/evol/web/src/i18n/index.ts +36 -0
  320. package/extensions/services/evol/web/src/i18n/zh.ts +379 -0
  321. package/extensions/services/evol/web/src/main.ts +21 -0
  322. package/extensions/services/evol/web/src/router/index.ts +81 -0
  323. package/extensions/services/evol/web/src/services/kernel-client.ts +406 -0
  324. package/extensions/services/evol/web/src/stores/auth.ts +189 -0
  325. package/extensions/services/evol/web/src/stores/connection.ts +134 -0
  326. package/extensions/services/evol/web/src/stores/pages.ts +79 -0
  327. package/extensions/services/evol/web/src/styles/base.css +213 -0
  328. package/extensions/services/evol/web/src/styles/variables.css +138 -0
  329. package/extensions/services/evol/web/src/types/rpc.ts +35 -0
  330. package/extensions/services/evol/web/src/types/token.ts +87 -0
  331. package/extensions/services/evol/web/src/views/AccountView.vue +1532 -0
  332. package/extensions/services/evol/web/src/views/AiServiceView.vue +219 -0
  333. package/extensions/services/evol/web/src/views/CommissionView.vue +1220 -0
  334. package/extensions/services/evol/web/src/views/CreditsView.vue +131 -0
  335. package/extensions/services/evol/web/src/views/EndpointView.vue +163 -0
  336. package/extensions/services/evol/web/src/views/IframePage.vue +120 -0
  337. package/extensions/services/evol/web/src/views/TeamDetailView.vue +473 -0
  338. package/extensions/services/evol/web/src/views/TeamView.vue +332 -0
  339. package/extensions/services/evol/web/tsconfig.json +31 -0
  340. package/extensions/services/evol/web/tsconfig.node.json +10 -0
  341. package/extensions/services/evol/web/vite.config.ts +49 -0
  342. package/extensions/services/evolmem/__init__.py +0 -0
  343. package/extensions/services/evolmem/entry.py +387 -0
  344. package/extensions/services/evolmem/hooks/__init__.py +0 -0
  345. package/extensions/services/evolmem/hooks/assistant_stop.py +228 -0
  346. package/extensions/services/evolmem/hooks/common.py +76 -0
  347. package/extensions/services/evolmem/hooks/pre_tool_use.py +56 -0
  348. package/extensions/services/evolmem/hooks/session_end.py +133 -0
  349. package/extensions/services/evolmem/hooks/session_start.py +229 -0
  350. package/extensions/services/evolmem/hooks/user_prompt.py +122 -0
  351. package/extensions/services/evolmem/module.md +48 -0
  352. package/extensions/services/evolmem/prompts/00-server-info.md +28 -0
  353. package/extensions/services/evolmem/prompts/01-behavior.md +46 -0
  354. package/extensions/services/evolmem/prompts/02-summary-format.md +112 -0
  355. package/extensions/services/evolmem/prompts/03-file-query.md +92 -0
  356. package/extensions/services/evolmem/prompts/04-topic-stats.md +11 -0
  357. package/extensions/services/evolmem/prompts/05-recent-topics.md +84 -0
  358. package/extensions/services/evolmem/scripts/__init__.py +0 -0
  359. package/extensions/services/evolmem/scripts/extract_keywords.py +40 -0
  360. package/extensions/services/evolmem/scripts/search_topics.py +91 -0
  361. package/extensions/services/evolmem/server.py +641 -0
  362. package/extensions/services/gateway/entry.py +964 -0
  363. package/extensions/services/gateway/module.md +29 -0
  364. package/extensions/services/gateway/nonce_pool.py +65 -0
  365. package/extensions/services/gateway/relay.py +133 -0
  366. package/extensions/services/gateway/ws_server.py +285 -0
  367. package/extensions/services/kite_console/auth_manager.py +603 -0
  368. package/extensions/services/kite_console/config.json5 +19 -0
  369. package/extensions/services/kite_console/config_loader.py +117 -0
  370. package/extensions/services/kite_console/entry.py +528 -0
  371. package/extensions/services/kite_console/evol_api.py +179 -0
  372. package/extensions/services/kite_console/evol_config.json5 +29 -0
  373. package/extensions/services/kite_console/mfa_totp.py +77 -0
  374. package/extensions/services/kite_console/migrate_tokens.py +122 -0
  375. package/extensions/services/kite_console/module.md +37 -0
  376. package/extensions/services/kite_console/nonce_pool.py +113 -0
  377. package/extensions/services/kite_console/oauth_manager.py +223 -0
  378. package/extensions/services/kite_console/pairing.py +280 -0
  379. package/extensions/services/kite_console/pairing_codes.jsonl +2 -0
  380. package/extensions/services/kite_console/relay.py +1350 -0
  381. package/extensions/services/kite_console/relay_config.json5 +96 -0
  382. package/extensions/services/kite_console/routes/__init__.py +1 -0
  383. package/extensions/services/kite_console/routes/routes_llm.py +231 -0
  384. package/extensions/services/kite_console/routes/routes_proxy.py +115 -0
  385. package/extensions/services/kite_console/routes/routes_rpc.py +89 -0
  386. package/extensions/services/kite_console/routes/routes_test.py +68 -0
  387. package/extensions/services/kite_console/server.py +1742 -0
  388. package/extensions/services/kite_console/static/css/style.css +1854 -0
  389. package/extensions/services/kite_console/static/index.html +1524 -0
  390. package/extensions/services/kite_console/static/js/dialog.js +292 -0
  391. package/extensions/services/kite_console/static/js/evol-app.js +7740 -0
  392. package/extensions/services/kite_console/static/js/evol-app.js.backup +2777 -0
  393. package/extensions/services/kite_console/static/js/kernel-client.js +560 -0
  394. package/extensions/services/kite_console/static/js/kernel-client.js.backup +434 -0
  395. package/extensions/services/kite_console/static/js/registry-tests.js +592 -0
  396. package/extensions/services/kite_console/static/js/tests/ARCHITECTURE.md +67 -0
  397. package/extensions/services/kite_console/static/js/tests/README.md +140 -0
  398. package/extensions/services/kite_console/static/js/tests/index.js +161 -0
  399. package/extensions/services/kite_console/static/js/tests/integration/auth.js +120 -0
  400. package/extensions/services/kite_console/static/js/tests/integration/channel-interaction.js +188 -0
  401. package/extensions/services/kite_console/static/js/tests/integration/elastic-connection.js +115 -0
  402. package/extensions/services/kite_console/static/js/tests/integration/full-workflow.js +43 -0
  403. package/extensions/services/kite_console/static/js/tests/integration/multi-instance.js +304 -0
  404. package/extensions/services/kite_console/static/js/tests/integration/nested-rpc.js +266 -0
  405. package/extensions/services/kite_console/static/js/tests/integration/pingpong.js +25 -0
  406. package/extensions/services/kite_console/static/js/tests/integration/redis.js +227 -0
  407. package/extensions/services/kite_console/static/js/tests/integration/registry-core.js +52 -0
  408. package/extensions/services/kite_console/static/js/tests/integration/remote-deploy.js +85 -0
  409. package/extensions/services/kite_console/static/js/tests/integration/require-init.js +96 -0
  410. package/extensions/services/kite_console/static/js/tests/integration/scaling-control.js +193 -0
  411. package/extensions/services/kite_console/static/js/tests/integration/trace.js +109 -0
  412. package/extensions/services/kite_console/static/js/tests/modules/acp_channel.js +339 -0
  413. package/extensions/services/kite_console/static/js/tests/modules/auth.js +96 -0
  414. package/extensions/services/kite_console/static/js/tests/modules/backup.js +49 -0
  415. package/extensions/services/kite_console/static/js/tests/modules/gateway.js +41 -0
  416. package/extensions/services/kite_console/static/js/tests/modules/kernel.js +90 -0
  417. package/extensions/services/kite_console/static/js/tests/modules/launcher.js +75 -0
  418. package/extensions/services/kite_console/static/js/tests/modules/multi_instance.js +129 -0
  419. package/extensions/services/kite_console/static/js/tests/modules/phone_channel.js +364 -0
  420. package/extensions/services/kite_console/static/js/tests/modules/redis.js +178 -0
  421. package/extensions/services/kite_console/static/js/tests/modules/watchdog.js +60 -0
  422. package/extensions/services/kite_console/static/js/tests/modules/web.js +70 -0
  423. package/extensions/services/kite_console/static/js/tests/test-runner.js +123 -0
  424. package/extensions/services/kite_console/static/js/virtual-list.js +200 -0
  425. package/extensions/services/kite_console/static/pairing.html +248 -0
  426. package/extensions/services/kite_console/static/test_kernel_client_token.html +352 -0
  427. package/extensions/services/kite_console/static/test_registry.html +262 -0
  428. package/extensions/services/kite_console/static/test_relay.html +462 -0
  429. package/extensions/services/kite_console/stats_manager.py +247 -0
  430. package/extensions/services/logs/README.md +215 -0
  431. package/extensions/services/logs/api_logger.py +37 -0
  432. package/extensions/services/logs/baseline.py +121 -0
  433. package/extensions/services/logs/cleaner.py +76 -0
  434. package/extensions/services/logs/entry.py +449 -0
  435. package/extensions/services/logs/formatter.py +129 -0
  436. package/extensions/services/logs/module.md +38 -0
  437. package/extensions/services/logs/quick_diagnostic.py +128 -0
  438. package/extensions/services/logs/routes/__init__.py +1 -0
  439. package/extensions/services/logs/routes/routes_logs.py +218 -0
  440. package/extensions/services/logs/routes/routes_logs.py.backup +173 -0
  441. package/extensions/services/logs/scanner.py +100 -0
  442. package/extensions/services/logs/searcher.py +263 -0
  443. package/extensions/services/logs/server.py +553 -0
  444. package/extensions/services/logs.zip +0 -0
  445. package/extensions/services/model_service/config.json5 +30 -0
  446. package/extensions/services/model_service/entry.py +633 -162
  447. package/extensions/services/model_service/module.md +11 -2
  448. package/extensions/services/proxy/.claude/settings.local.json +13 -0
  449. package/extensions/services/proxy/__init__.py +0 -0
  450. package/extensions/services/proxy/agentcp/LICENCE +178 -0
  451. package/extensions/services/proxy/agentcp/README copy.md +85 -0
  452. package/extensions/services/proxy/agentcp/README.md +260 -0
  453. package/extensions/services/proxy/agentcp/__init__.py +16 -0
  454. package/extensions/services/proxy/agentcp/agent.py +4 -0
  455. package/extensions/services/proxy/agentcp/agentcp.py +2494 -0
  456. package/extensions/services/proxy/agentcp/agentprofile.json +89 -0
  457. package/extensions/services/proxy/agentcp/ap/__init__.py +16 -0
  458. package/extensions/services/proxy/agentcp/ap/ap_client.py +316 -0
  459. package/extensions/services/proxy/agentcp/assets/images/wechat_qr.png +0 -0
  460. package/extensions/services/proxy/agentcp/backup/metrics.json +31 -0
  461. package/extensions/services/proxy/agentcp/base/__init__.py +20 -0
  462. package/extensions/services/proxy/agentcp/base/auth_client.py +257 -0
  463. package/extensions/services/proxy/agentcp/base/client.py +112 -0
  464. package/extensions/services/proxy/agentcp/base/env.py +34 -0
  465. package/extensions/services/proxy/agentcp/base/html_util.py +336 -0
  466. package/extensions/services/proxy/agentcp/base/log.py +98 -0
  467. package/extensions/services/proxy/agentcp/ca/__init__.py +17 -0
  468. package/extensions/services/proxy/agentcp/ca/ca_client.py +414 -0
  469. package/extensions/services/proxy/agentcp/ca/ca_root.py +74 -0
  470. package/extensions/services/proxy/agentcp/context/__init__.py +20 -0
  471. package/extensions/services/proxy/agentcp/context/context.py +73 -0
  472. package/extensions/services/proxy/agentcp/context/exceptions.py +114 -0
  473. package/extensions/services/proxy/agentcp/create_profile.py +125 -0
  474. package/extensions/services/proxy/agentcp/create_profile_weather.py +125 -0
  475. package/extensions/services/proxy/agentcp/db/__init__.py +15 -0
  476. package/extensions/services/proxy/agentcp/db/db_mananger.py +550 -0
  477. package/extensions/services/proxy/agentcp/docs/UDP_HEARTBEAT_FIX_REPORT.md +265 -0
  478. package/extensions/services/proxy/agentcp/docs/heartbeat_issue_analysis.md +291 -0
  479. package/extensions/services/proxy/agentcp/file/__init__.py +16 -0
  480. package/extensions/services/proxy/agentcp/file/file_client.py +141 -0
  481. package/extensions/services/proxy/agentcp/file/wss_binary_message.py +137 -0
  482. package/extensions/services/proxy/agentcp/hcp.py +299 -0
  483. package/extensions/services/proxy/agentcp/heartbeat/__init__.py +16 -0
  484. package/extensions/services/proxy/agentcp/heartbeat/heartbeat_client.py +360 -0
  485. package/extensions/services/proxy/agentcp/improved_scheduler.py +498 -0
  486. package/extensions/services/proxy/agentcp/llm_agent_utils.py +249 -0
  487. package/extensions/services/proxy/agentcp/llm_server.py +172 -0
  488. package/extensions/services/proxy/agentcp/mermaid.py +210 -0
  489. package/extensions/services/proxy/agentcp/message.py +149 -0
  490. package/extensions/services/proxy/agentcp/metrics.py +256 -0
  491. package/extensions/services/proxy/agentcp/monitoring/__init__.py +20 -0
  492. package/extensions/services/proxy/agentcp/monitoring/global_monitor.py +27 -0
  493. package/extensions/services/proxy/agentcp/monitoring/metrics_store.py +325 -0
  494. package/extensions/services/proxy/agentcp/monitoring/monitoring_service.py +269 -0
  495. package/extensions/services/proxy/agentcp/monitoring/sliding_window.py +222 -0
  496. package/extensions/services/proxy/agentcp/monitoring/standalone_reader.py +224 -0
  497. package/extensions/services/proxy/agentcp/msg/__init__.py +21 -0
  498. package/extensions/services/proxy/agentcp/msg/connection_manager.py +456 -0
  499. package/extensions/services/proxy/agentcp/msg/message_client.py +2058 -0
  500. package/extensions/services/proxy/agentcp/msg/message_serialize.py +263 -0
  501. package/extensions/services/proxy/agentcp/msg/open_ai_message.py +88 -0
  502. package/extensions/services/proxy/agentcp/msg/session_manager.py +1062 -0
  503. package/extensions/services/proxy/agentcp/msg/stream_client.py +267 -0
  504. package/extensions/services/proxy/agentcp/msg/websocket_file_receiver.py +89 -0
  505. package/extensions/services/proxy/agentcp/msg/ws_logger.py +685 -0
  506. package/extensions/services/proxy/agentcp/msg/wss_binary_message.py +137 -0
  507. package/extensions/services/proxy/agentcp/requirements.txt +7 -0
  508. package/extensions/services/proxy/agentcp/samples/agent_graph/README.md +37 -0
  509. package/extensions/services/proxy/agentcp/samples/agent_graph/agentprofile.json +89 -0
  510. package/extensions/services/proxy/agentcp/samples/agent_graph/create_profile.py +138 -0
  511. package/extensions/services/proxy/agentcp/samples/agent_graph/main.py +164 -0
  512. package/extensions/services/proxy/agentcp/samples/agent_use/create_profile.py +123 -0
  513. package/extensions/services/proxy/agentcp/samples/agent_use/llm/create_profile.py +129 -0
  514. package/extensions/services/proxy/agentcp/samples/agent_use/llm/env.json +5 -0
  515. package/extensions/services/proxy/agentcp/samples/agent_use/llm/main.py +146 -0
  516. package/extensions/services/proxy/agentcp/samples/agent_use/main.py +123 -0
  517. package/extensions/services/proxy/agentcp/samples/agent_use/readme.md +379 -0
  518. package/extensions/services/proxy/agentcp/samples/agent_use/search/create_profile.py +129 -0
  519. package/extensions/services/proxy/agentcp/samples/agent_use/search/main.py +28 -0
  520. package/extensions/services/proxy/agentcp/samples/agent_use/tool/create_profile.py +129 -0
  521. package/extensions/services/proxy/agentcp/samples/agent_use/tool/main.py +20 -0
  522. package/extensions/services/proxy/agentcp/samples/ali_amap/README.md +97 -0
  523. package/extensions/services/proxy/agentcp/samples/ali_amap/amap_agent.py +88 -0
  524. package/extensions/services/proxy/agentcp/samples/ali_amap/create_profile.py +125 -0
  525. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/powershell.py +228 -0
  526. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/software.py +63 -0
  527. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/tools.py +36 -0
  528. package/extensions/services/proxy/agentcp/samples/compute_agent/browser_user.py +41 -0
  529. package/extensions/services/proxy/agentcp/samples/deepseek/README.md +79 -0
  530. package/extensions/services/proxy/agentcp/samples/deepseek/create_profile.py +126 -0
  531. package/extensions/services/proxy/agentcp/samples/deepseek/deepseek.py +42 -0
  532. package/extensions/services/proxy/agentcp/samples/dify_chat/README.md +78 -0
  533. package/extensions/services/proxy/agentcp/samples/dify_chat/create_profile.py +126 -0
  534. package/extensions/services/proxy/agentcp/samples/dify_chat/dify_chat.py +47 -0
  535. package/extensions/services/proxy/agentcp/samples/dify_workflow/README.md +78 -0
  536. package/extensions/services/proxy/agentcp/samples/dify_workflow/create_profile.py +126 -0
  537. package/extensions/services/proxy/agentcp/samples/dify_workflow/dify_workflow.py +46 -0
  538. package/extensions/services/proxy/agentcp/samples/executor/README.md +44 -0
  539. package/extensions/services/proxy/agentcp/samples/executor/agentprofile.json +89 -0
  540. package/extensions/services/proxy/agentcp/samples/executor/create_profile.py +139 -0
  541. package/extensions/services/proxy/agentcp/samples/executor/main.py +160 -0
  542. package/extensions/services/proxy/agentcp/samples/filereader/README.md +45 -0
  543. package/extensions/services/proxy/agentcp/samples/filereader/agentprofile.json +90 -0
  544. package/extensions/services/proxy/agentcp/samples/filereader/create_profile.py +137 -0
  545. package/extensions/services/proxy/agentcp/samples/filereader/main.py +253 -0
  546. package/extensions/services/proxy/agentcp/samples/filewriter/README.md +38 -0
  547. package/extensions/services/proxy/agentcp/samples/filewriter/agentprofile.json +91 -0
  548. package/extensions/services/proxy/agentcp/samples/filewriter/create_profile.py +138 -0
  549. package/extensions/services/proxy/agentcp/samples/filewriter/main.py +289 -0
  550. package/extensions/services/proxy/agentcp/samples/hcp/README.md +85 -0
  551. package/extensions/services/proxy/agentcp/samples/hcp/acp_weather_agent.zip +0 -0
  552. package/extensions/services/proxy/agentcp/samples/hcp/create_profile.py +125 -0
  553. package/extensions/services/proxy/agentcp/samples/hcp/hcp.py +237 -0
  554. package/extensions/services/proxy/agentcp/samples/helloworld/README.md +68 -0
  555. package/extensions/services/proxy/agentcp/samples/helloworld/hello_world.py +40 -0
  556. package/extensions/services/proxy/agentcp/samples/llm_agent/MEADME.md +117 -0
  557. package/extensions/services/proxy/agentcp/samples/llm_agent/create_profile.py +125 -0
  558. package/extensions/services/proxy/agentcp/samples/llm_agent/qwen_agent.py +136 -0
  559. package/extensions/services/proxy/agentcp/samples/local_llm_agent/README.md +90 -0
  560. package/extensions/services/proxy/agentcp/samples/local_llm_agent/create_profile.py +125 -0
  561. package/extensions/services/proxy/agentcp/samples/local_llm_agent/main.py +49 -0
  562. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/README.md +55 -0
  563. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/create_profile.py +125 -0
  564. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/main.py +23 -0
  565. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/README.md +103 -0
  566. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/create_profile.py +125 -0
  567. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/main.py +69 -0
  568. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/README.md +58 -0
  569. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/create_profile.py +125 -0
  570. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/main.py +25 -0
  571. package/extensions/services/proxy/agentcp/samples/qwen3/README.md +71 -0
  572. package/extensions/services/proxy/agentcp/samples/qwen3/create_profile.py +126 -0
  573. package/extensions/services/proxy/agentcp/samples/qwen3/qwen3.py +37 -0
  574. package/extensions/services/proxy/agentcp/samples/qwen3_tools/README.md +133 -0
  575. package/extensions/services/proxy/agentcp/samples/qwen3_tools/create_profile.py +126 -0
  576. package/extensions/services/proxy/agentcp/samples/qwen3_tools/qwen3_tools.py +98 -0
  577. package/extensions/services/proxy/agentcp/samples/search/create_profile_qwen.py +125 -0
  578. package/extensions/services/proxy/agentcp/samples/search/create_profile_search.py +125 -0
  579. package/extensions/services/proxy/agentcp/samples/search/qwen_agent.py +136 -0
  580. package/extensions/services/proxy/agentcp/samples/search/search_agent.py +170 -0
  581. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/README.md +89 -0
  582. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/create_profile.py +125 -0
  583. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/main.py +44 -0
  584. package/extensions/services/proxy/agentcp/utils/__init__.py +15 -0
  585. package/extensions/services/proxy/agentcp/utils/file_util.py +117 -0
  586. package/extensions/services/proxy/agentcp/utils/proxy_bypass.py +99 -0
  587. package/extensions/services/proxy/agentcp/workflow.py +203 -0
  588. package/extensions/services/proxy/aid_manager.py +419 -0
  589. package/extensions/services/proxy/auth_bridge.py +182 -0
  590. package/extensions/services/proxy/config_store.py +79 -0
  591. package/extensions/services/proxy/entry.py +528 -0
  592. package/extensions/services/proxy/evol/__init__.py +1 -0
  593. package/extensions/services/proxy/evol/config.py +37 -0
  594. package/extensions/services/proxy/evol/http/__init__.py +1 -0
  595. package/extensions/services/proxy/evol/http/async_http.py +551 -0
  596. package/extensions/services/proxy/evol/log.py +28 -0
  597. package/extensions/services/proxy/evol/presenter/__init__.py +2 -0
  598. package/extensions/services/proxy/evol/presenter/agentIdPresenter.py +1031 -0
  599. package/extensions/services/proxy/evol/presenter/apikeyPresenter.py +96 -0
  600. package/extensions/services/proxy/evol/presenter/configPresenter.py +234 -0
  601. package/extensions/services/proxy/evol/presenter/userPresenter.py +71 -0
  602. package/extensions/services/proxy/evol/server/__init__.py +1 -0
  603. package/extensions/services/proxy/evol/server/claude_proxy_async.py +3434 -0
  604. package/extensions/services/proxy/evol/server/openclaw_proxy.py +1861 -0
  605. package/extensions/services/proxy/evol/server/proxy_config.py +15 -0
  606. package/extensions/services/proxy/evol/server/proxy_engine.py +501 -0
  607. package/extensions/services/proxy/evol/version.py +24 -0
  608. package/extensions/services/proxy/module.md +151 -0
  609. package/extensions/services/proxy/server.py +952 -0
  610. package/extensions/services/redis/ALIGNMENT_CHECKLIST.md +121 -0
  611. package/extensions/services/redis/ALIGNMENT_STATUS.md +548 -0
  612. package/extensions/services/redis/config.json5 +8 -0
  613. package/extensions/services/redis/entry.py +1509 -0
  614. package/extensions/services/redis/entry.py.backup +405 -0
  615. package/extensions/services/redis/module.md +48 -0
  616. package/extensions/services/redis/redis_builtin.py +332 -0
  617. package/extensions/services/redis/redis_external.py +164 -0
  618. package/extensions/services/testUi/entry.py +446 -0
  619. package/extensions/services/testUi/module.md +18 -0
  620. package/extensions/services/testUi/ui/cards.html +131 -0
  621. package/extensions/services/testUi/ui/index.html +22 -0
  622. package/extensions/services/testUi/ui/particles.html +143 -0
  623. package/extensions/services/watchdog/entry.py +1258 -767
  624. package/extensions/services/watchdog/module.md +3 -0
  625. package/extensions/services/watchdog/monitor.py +483 -75
  626. package/extensions/services/web/auth_manager.py +602 -0
  627. package/extensions/services/web/config.json5 +11 -0
  628. package/extensions/services/web/entry.py +598 -478
  629. package/extensions/services/web/mfa_totp.py +77 -0
  630. package/extensions/services/web/module.md +17 -14
  631. package/extensions/services/web/nonce_pool.py +113 -0
  632. package/extensions/services/web/oauth_manager.py +223 -0
  633. package/extensions/services/web/pairing.py +3 -2
  634. package/extensions/services/web/pairing_codes.jsonl +1 -0
  635. package/extensions/services/web/relay.py +442 -63
  636. package/extensions/services/web/relay_config.json5 +1 -2
  637. package/extensions/services/web/routes/routes_rpc.py +6 -6
  638. package/extensions/services/web/server.py +380 -181
  639. package/extensions/services/web/static/index.html +1752 -1738
  640. package/extensions/services/web/static/js/app.js +32 -0
  641. package/extensions/services/web/static/js/kernel-client.js +48 -9
  642. package/extensions/services/web/static/js/token-manager.js +10 -10
  643. package/extensions/services/web/vendor/bluetooth/audio.py +1 -1
  644. package/extensions/services/web/vendor/config.py +2 -2
  645. package/extensions/services/web/vendor/storage/identity.py +1 -1
  646. package/kernel/entry.py +77 -23
  647. package/kernel/event_hub.py +1122 -74
  648. package/kernel/module.md +26 -1
  649. package/kernel/registry_store.py +209 -36
  650. package/kernel/rpc_router.py +1400 -465
  651. package/kernel/server.py +1084 -108
  652. package/kite_cli/builders/__init__.py +4 -0
  653. package/kite_cli/builders/base.py +67 -0
  654. package/kite_cli/builders/custom.py +31 -0
  655. package/kite_cli/builders/detector.py +56 -0
  656. package/kite_cli/builders/go.py +34 -0
  657. package/kite_cli/builders/gradle.py +41 -0
  658. package/kite_cli/builders/maven.py +36 -0
  659. package/kite_cli/builders/npm.py +44 -0
  660. package/kite_cli/builders/python.py +37 -0
  661. package/kite_cli/commands/BUILD_GUIDE.md +109 -0
  662. package/kite_cli/commands/build.py +142 -0
  663. package/kite_cli/commands/check.py +60 -0
  664. package/kite_cli/commands/config.py +156 -0
  665. package/kite_cli/commands/deps.py +58 -0
  666. package/kite_cli/commands/deps_install.py +67 -0
  667. package/kite_cli/commands/disable.py +162 -0
  668. package/kite_cli/commands/enable.py +162 -0
  669. package/kite_cli/commands/env_check.py +45 -0
  670. package/kite_cli/commands/export.py +96 -0
  671. package/kite_cli/commands/import_cmd.py +110 -0
  672. package/kite_cli/commands/install.py +50 -23
  673. package/kite_cli/commands/install_skill.py +107 -0
  674. package/kite_cli/commands/list.py +128 -31
  675. package/kite_cli/commands/outdated.py +202 -0
  676. package/kite_cli/commands/prepare.py +49 -0
  677. package/kite_cli/commands/search.py +33 -17
  678. package/kite_cli/commands/update.py +115 -2
  679. package/kite_cli/commands/venv_setup.py +56 -0
  680. package/kite_cli/commands/why.py +48 -0
  681. package/kite_cli/core/config_manager.py +145 -0
  682. package/kite_cli/core/downloader.py +32 -2
  683. package/kite_cli/main.py +179 -5
  684. package/kite_cli/utils/colors.py +153 -0
  685. package/kite_cli/utils/dependency_graph.py +209 -0
  686. package/kite_cli/utils/process.py +55 -0
  687. package/kite_cli/utils/progress.py +207 -0
  688. package/kite_cli/utils/table.py +101 -0
  689. package/launcher/count_lines.py +192 -43
  690. package/launcher/entry.py +4543 -2517
  691. package/launcher/logging_setup.py +54 -1
  692. package/launcher/module.md +37 -2
  693. package/launcher/module_scanner.py +103 -20
  694. package/launcher/process_manager.py +355 -76
  695. package/main.py +10 -1
  696. package/package.json +11 -1
  697. package/python_version.json +4 -0
  698. package/requirements.txt +41 -0
  699. package/scripts/auto-fix-deps.py +128 -0
  700. package/scripts/env-manager.js +351 -0
  701. package/scripts/final-test.js +78 -0
  702. package/scripts/python-env.js +79 -0
  703. package/scripts/scan_dependencies.py +461 -0
  704. package/scripts/setup-python-env.js +700 -0
  705. package/scripts/test-alluser.js +48 -0
  706. package/scripts/test-different-version.js +86 -0
  707. package/scripts/test-direct.js +63 -0
  708. package/scripts/test-extract-installer.js +28 -0
  709. package/scripts/test-install-log.js +54 -0
  710. package/scripts/test-installer.js +39 -0
  711. package/scripts/test-integration.js +250 -0
  712. package/scripts/test-real-install.js +210 -0
  713. package/scripts/test-targetdir.js +49 -0
  714. package/scripts/test-venv-real.js +47 -0
  715. package/scripts/test-venv-simple.js +57 -0
  716. package/scripts/test-wait.js +49 -0
  717. package/scripts/test-with-log.js +63 -0
  718. package/extensions/services/web/config.yaml +0 -149
@@ -0,0 +1,1524 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Kite 控制台</title>
7
+ <link rel="icon" href="data:,">
8
+ <link rel="stylesheet" href="css/style.css?v=7">
9
+ <script>
10
+ // 在 DOM 加载前判断 token,避免闪烁
11
+ (function() {
12
+ function getCookie(name) {
13
+ const value = `; ${document.cookie}`;
14
+ const parts = value.split(`; ${name}=`);
15
+ if (parts.length === 2) return parts.pop().split(';').shift();
16
+ return null;
17
+ }
18
+
19
+ const hasToken = localStorage.getItem('kiteToken') || getCookie('kiteToken');
20
+ if (hasToken) {
21
+ // 有 token,默认显示主页面
22
+ document.documentElement.classList.add('has-token');
23
+ }
24
+ })();
25
+ </script>
26
+ <style>
27
+ /* 页面显示控制 */
28
+ html.has-token #login-page { display: none !important; }
29
+ html.has-token #main-app { display: block !important; }
30
+ html:not(.has-token) #login-page { display: flex !important; }
31
+ html:not(.has-token) #main-app { display: none !important; }
32
+
33
+ /* 登录页面样式方案切换 - 在 body 添加 data-login-theme 属性 */
34
+ /* 方案 1: 极简商务风 - theme-minimal */
35
+ /* 方案 2: 现代扁平风 - theme-flat */
36
+ /* 方案 3: 传统表单风 - theme-classic */
37
+
38
+ /* === 方案 1: 极简商务风 === */
39
+ body[data-login-theme="theme-minimal"] #login-page .login-container {
40
+ display: flex;
41
+ justify-content: center;
42
+ align-items: center;
43
+ min-height: 100vh;
44
+ background: #f5f5f5;
45
+ }
46
+ body[data-login-theme="theme-minimal"] #login-page .login-box {
47
+ background: white;
48
+ padding: 48px 40px;
49
+ border-radius: 2px;
50
+ box-shadow: 0 2px 8px rgba(0,0,0,0.08);
51
+ width: 100%;
52
+ max-width: 360px;
53
+ border-top: 3px solid #333;
54
+ }
55
+ body[data-login-theme="theme-minimal"] #login-page .login-title {
56
+ font-size: 24px;
57
+ font-weight: 400;
58
+ margin-bottom: 32px;
59
+ color: #333;
60
+ letter-spacing: 0.5px;
61
+ }
62
+ body[data-login-theme="theme-minimal"] #login-page .form-label {
63
+ display: block;
64
+ margin-bottom: 8px;
65
+ font-weight: 400;
66
+ color: #666;
67
+ font-size: 13px;
68
+ }
69
+ body[data-login-theme="theme-minimal"] #login-page .form-input {
70
+ width: 100%;
71
+ padding: 10px 12px;
72
+ border: 1px solid #ddd;
73
+ border-radius: 2px;
74
+ font-size: 14px;
75
+ box-sizing: border-box;
76
+ transition: border-color 0.2s;
77
+ }
78
+ body[data-login-theme="theme-minimal"] #login-page .form-input:focus {
79
+ outline: none;
80
+ border-color: #333;
81
+ }
82
+ body[data-login-theme="theme-minimal"] #login-page .btn-primary {
83
+ width: 100%;
84
+ padding: 11px;
85
+ background: #333;
86
+ color: white;
87
+ border: none;
88
+ border-radius: 2px;
89
+ font-size: 14px;
90
+ font-weight: 400;
91
+ cursor: pointer;
92
+ transition: background 0.2s;
93
+ }
94
+ body[data-login-theme="theme-minimal"] #login-page .btn-primary:hover {
95
+ background: #000;
96
+ }
97
+ body[data-login-theme="theme-minimal"] #login-page .btn-primary:disabled {
98
+ background: #ccc;
99
+ cursor: not-allowed;
100
+ }
101
+
102
+ /* === 方案 2: 现代扁平风 === */
103
+ body[data-login-theme="theme-flat"] #login-page .login-container {
104
+ display: flex;
105
+ justify-content: center;
106
+ align-items: center;
107
+ min-height: 100vh;
108
+ background: #fafafa;
109
+ }
110
+ body[data-login-theme="theme-flat"] #login-page .login-box {
111
+ background: white;
112
+ padding: 40px;
113
+ border-radius: 8px;
114
+ box-shadow: 0 1px 3px rgba(0,0,0,0.06);
115
+ width: 100%;
116
+ max-width: 380px;
117
+ border: 1px solid #e8e8e8;
118
+ }
119
+ body[data-login-theme="theme-flat"] #login-page .login-title {
120
+ font-size: 22px;
121
+ font-weight: 500;
122
+ margin-bottom: 28px;
123
+ color: #1a1a1a;
124
+ }
125
+ body[data-login-theme="theme-flat"] #login-page .form-label {
126
+ display: block;
127
+ margin-bottom: 6px;
128
+ font-weight: 500;
129
+ color: #4a4a4a;
130
+ font-size: 13px;
131
+ }
132
+ body[data-login-theme="theme-flat"] #login-page .form-input {
133
+ width: 100%;
134
+ padding: 11px 14px;
135
+ border: 1px solid #e0e0e0;
136
+ border-radius: 4px;
137
+ font-size: 14px;
138
+ box-sizing: border-box;
139
+ background: #fafafa;
140
+ transition: all 0.2s;
141
+ }
142
+ body[data-login-theme="theme-flat"] #login-page .form-input:focus {
143
+ outline: none;
144
+ border-color: #4a90e2;
145
+ background: white;
146
+ }
147
+ body[data-login-theme="theme-flat"] #login-page .btn-primary {
148
+ width: 100%;
149
+ padding: 12px;
150
+ background: #4a90e2;
151
+ color: white;
152
+ border: none;
153
+ border-radius: 4px;
154
+ font-size: 14px;
155
+ font-weight: 500;
156
+ cursor: pointer;
157
+ transition: background 0.2s;
158
+ }
159
+ body[data-login-theme="theme-flat"] #login-page .btn-primary:hover {
160
+ background: #357abd;
161
+ }
162
+ body[data-login-theme="theme-flat"] #login-page .btn-primary:disabled {
163
+ background: #d0d0d0;
164
+ cursor: not-allowed;
165
+ }
166
+
167
+ /* === 方案 3: 传统表单风 === */
168
+ body[data-login-theme="theme-classic"] #login-page .login-container {
169
+ display: flex;
170
+ justify-content: center;
171
+ align-items: center;
172
+ min-height: 100vh;
173
+ background: #e9ecef;
174
+ }
175
+ body[data-login-theme="theme-classic"] #login-page .login-box {
176
+ background: white;
177
+ padding: 36px 32px;
178
+ border-radius: 4px;
179
+ box-shadow: 0 0 10px rgba(0,0,0,0.1);
180
+ width: 100%;
181
+ max-width: 400px;
182
+ }
183
+ body[data-login-theme="theme-classic"] #login-page .login-title {
184
+ font-size: 20px;
185
+ font-weight: 600;
186
+ margin-bottom: 24px;
187
+ color: #212529;
188
+ text-align: center;
189
+ border-bottom: 2px solid #dee2e6;
190
+ padding-bottom: 12px;
191
+ }
192
+ body[data-login-theme="theme-classic"] #login-page .form-label {
193
+ display: block;
194
+ margin-bottom: 6px;
195
+ font-weight: 600;
196
+ color: #495057;
197
+ font-size: 13px;
198
+ }
199
+ body[data-login-theme="theme-classic"] #login-page .form-input {
200
+ width: 100%;
201
+ padding: 10px 12px;
202
+ border: 1px solid #ced4da;
203
+ border-radius: 3px;
204
+ font-size: 14px;
205
+ box-sizing: border-box;
206
+ transition: border-color 0.15s;
207
+ }
208
+ body[data-login-theme="theme-classic"] #login-page .form-input:focus {
209
+ outline: none;
210
+ border-color: #80bdff;
211
+ box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
212
+ }
213
+ body[data-login-theme="theme-classic"] #login-page .btn-primary {
214
+ width: 100%;
215
+ padding: 10px;
216
+ background: #007bff;
217
+ color: white;
218
+ border: none;
219
+ border-radius: 3px;
220
+ font-size: 14px;
221
+ font-weight: 600;
222
+ cursor: pointer;
223
+ transition: background 0.15s;
224
+ }
225
+ body[data-login-theme="theme-classic"] #login-page .btn-primary:hover {
226
+ background: #0056b3;
227
+ }
228
+ body[data-login-theme="theme-classic"] #login-page .btn-primary:disabled {
229
+ background: #6c757d;
230
+ cursor: not-allowed;
231
+ }
232
+
233
+ /* 通用样式 */
234
+ .form-group {
235
+ margin-bottom: 20px;
236
+ }
237
+ .error-msg {
238
+ color: #e74c3c;
239
+ font-size: 14px;
240
+ margin-top: 10px;
241
+ text-align: center;
242
+ }
243
+ .success-msg {
244
+ color: #27ae60;
245
+ font-size: 14px;
246
+ margin-top: 10px;
247
+ text-align: center;
248
+ }
249
+ .hidden {
250
+ display: none !important;
251
+ }
252
+
253
+ /* 标签页样式 */
254
+ .tabs {
255
+ display: flex;
256
+ gap: 2px;
257
+ margin-bottom: 20px;
258
+ border-bottom: 2px solid #e0e0e0;
259
+ }
260
+ .tab {
261
+ padding: 10px 20px;
262
+ background: transparent;
263
+ border: none;
264
+ border-bottom: 2px solid transparent;
265
+ margin-bottom: -2px;
266
+ cursor: pointer;
267
+ font-size: 14px;
268
+ color: #666;
269
+ transition: all 0.2s;
270
+ }
271
+ .tab:hover {
272
+ color: #333;
273
+ background: #f5f5f5;
274
+ }
275
+ .tab.active {
276
+ color: #007bff;
277
+ border-bottom-color: #007bff;
278
+ font-weight: 600;
279
+ }
280
+ .tab-content {
281
+ display: none;
282
+ }
283
+ .tab-content.active {
284
+ display: block;
285
+ }
286
+
287
+
288
+ /* 默认使用方案 1 */
289
+ body:not([data-login-theme]) {
290
+ --login-theme: theme-minimal;
291
+ }
292
+ body:not([data-login-theme]) #login-page .login-container {
293
+ display: flex;
294
+ justify-content: center;
295
+ align-items: center;
296
+ min-height: 100vh;
297
+ background: #f5f5f5;
298
+ }
299
+ body:not([data-login-theme]) #login-page .login-box {
300
+ background: white;
301
+ padding: 48px 40px;
302
+ border-radius: 2px;
303
+ box-shadow: 0 2px 8px rgba(0,0,0,0.08);
304
+ width: 100%;
305
+ max-width: 360px;
306
+ border-top: 3px solid #333;
307
+ }
308
+ body:not([data-login-theme]) #login-page .login-title {
309
+ font-size: 24px;
310
+ font-weight: 400;
311
+ margin-bottom: 32px;
312
+ color: #333;
313
+ letter-spacing: 0.5px;
314
+ }
315
+ body:not([data-login-theme]) #login-page .form-label {
316
+ display: block;
317
+ margin-bottom: 8px;
318
+ font-weight: 400;
319
+ color: #666;
320
+ font-size: 13px;
321
+ }
322
+ body:not([data-login-theme]) #login-page .form-input {
323
+ width: 100%;
324
+ padding: 10px 12px;
325
+ border: 1px solid #ddd;
326
+ border-radius: 2px;
327
+ font-size: 14px;
328
+ box-sizing: border-box;
329
+ transition: border-color 0.2s;
330
+ }
331
+ body:not([data-login-theme]) #login-page .form-input:focus {
332
+ outline: none;
333
+ border-color: #333;
334
+ }
335
+ body:not([data-login-theme]) #login-page .btn-primary {
336
+ width: 100%;
337
+ padding: 11px;
338
+ background: #333;
339
+ color: white;
340
+ border: none;
341
+ border-radius: 2px;
342
+ font-size: 14px;
343
+ font-weight: 400;
344
+ cursor: pointer;
345
+ transition: background 0.2s;
346
+ }
347
+ body:not([data-login-theme]) #login-page .btn-primary:hover {
348
+ background: #000;
349
+ }
350
+ body:not([data-login-theme]) #login-page .btn-primary:disabled {
351
+ background: #ccc;
352
+ cursor: not-allowed;
353
+ }
354
+ </style>
355
+ </head>
356
+ <body>
357
+ <!--
358
+ 登录页面样式方案切换:
359
+ 方案 1(默认): 极简商务风 - 不设置或 data-login-theme="theme-minimal"
360
+ 方案 2: 现代扁平风 - data-login-theme="theme-flat"
361
+ 方案 3: 传统表单风 - data-login-theme="theme-classic"
362
+
363
+ 切换方法:在 <body> 标签添加 data-login-theme 属性
364
+ 例如:<body data-login-theme="theme-flat">
365
+ -->
366
+
367
+ <!-- Login Page -->
368
+ <div id="login-page" class="login-container">
369
+ <!-- 样式切换按钮 -->
370
+ <div style="position:absolute;top:20px;right:20px;display:flex;gap:8px;z-index:10;">
371
+ <button onclick="document.body.removeAttribute('data-login-theme')" style="padding:8px 16px;border:1px solid #ddd;background:white;border-radius:4px;cursor:pointer;font-size:13px;transition:all 0.2s;" onmouseover="this.style.background='#f5f5f5'" onmouseout="this.style.background='white'">极简商务</button>
372
+ <button onclick="document.body.setAttribute('data-login-theme','theme-flat')" style="padding:8px 16px;border:1px solid #ddd;background:white;border-radius:4px;cursor:pointer;font-size:13px;transition:all 0.2s;" onmouseover="this.style.background='#f5f5f5'" onmouseout="this.style.background='white'">现代扁平</button>
373
+ <button onclick="document.body.setAttribute('data-login-theme','theme-classic')" style="padding:8px 16px;border:1px solid #ddd;background:white;border-radius:4px;cursor:pointer;font-size:13px;transition:all 0.2s;" onmouseover="this.style.background='#f5f5f5'" onmouseout="this.style.background='white'">传统表单</button>
374
+ </div>
375
+
376
+ <div class="login-box">
377
+ <h1 class="login-title">Kite 控制台登录</h1>
378
+ <div class="form-group">
379
+ <label class="form-label">手机号</label>
380
+ <input type="tel" id="login-phone" class="form-input" placeholder="请输入手机号" maxlength="11">
381
+ </div>
382
+ <div class="form-group">
383
+ <label class="form-label">验证码</label>
384
+ <div style="display: flex; gap: 10px;">
385
+ <input type="text" id="login-code" class="form-input" placeholder="请输入验证码" maxlength="6" style="flex: 1;" onkeypress="if(event.key==='Enter' && this.value.length===6) document.getElementById('btn-login').click()">
386
+ <button id="btn-send-code" class="btn-primary" style="width: auto; padding: 12px 20px;">发送验证码</button>
387
+ </div>
388
+ </div>
389
+ <button id="btn-login" class="btn-primary">登录</button>
390
+ <div id="login-message"></div>
391
+ </div>
392
+ </div>
393
+
394
+ <!-- Main App -->
395
+ <div id="main-app">
396
+ <header id="app-header">
397
+ <div class="header-left">
398
+ <button id="sidebar-toggle" class="icon-btn">&#9776;</button>
399
+ <h1 class="header-title">Kite 控制台</h1>
400
+ <span id="system-info" style="margin-left:12px;font-size:12px;color:#999;font-weight:normal;"></span>
401
+ </div>
402
+ <div class="header-right">
403
+ <!-- WebSocket 连接状态 + 重连次数 + 流量统计 -->
404
+ <div id="ws-status-container" style="display:flex;align-items:center;gap:12px;margin-right:16px;font-size:13px;">
405
+ <!-- 流量统计(最左侧,固定宽度) -->
406
+ <span id="ws-traffic"
407
+ style="color:#999;cursor:default;position:relative;display:inline-block;min-width:110px;text-align:left;font-family:monospace;font-size:12px;">
408
+ ↑0 B/s ↓0 B/s
409
+ </span>
410
+ <!-- 最后消息时间 -->
411
+ <span id="ws-last-msg-time" style="color:#999;font-size:12px;font-family:monospace;display:none;"></span>
412
+ <!-- 重连次数 -->
413
+ <span id="ws-reconnect-count" style="color:#999;display:none;min-width:55px;">重连: 0</span>
414
+ <!-- 连接状态(最右侧) -->
415
+ <span id="ws-indicator" style="color:#999;">○ 未连接</span>
416
+ </div>
417
+
418
+ <!-- 流量统计 Tooltip -->
419
+ <div id="traffic-tooltip" style="display:none;position:fixed;background:rgba(255,255,255,0.98);color:#333;border:1px solid #ddd;border-radius:8px;padding:14px;z-index:10000;pointer-events:none;font-size:13px;line-height:1.8;width:240px;box-shadow:0 4px 16px rgba(0,0,0,0.15);">
420
+ <div style="display:flex;justify-content:space-between;margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid #eee;">
421
+ <span style="color:#666;font-weight:500;">总接收</span>
422
+ <span id="tooltip-rx-total" style="color:#27ae60;font-weight:600;font-family:monospace;min-width:70px;text-align:right;">0 B</span>
423
+ </div>
424
+ <div style="display:flex;justify-content:space-between;margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid #eee;">
425
+ <span style="color:#666;font-weight:500;">总发送</span>
426
+ <span id="tooltip-tx-total" style="color:#3498db;font-weight:600;font-family:monospace;min-width:70px;text-align:right;">0 B</span>
427
+ </div>
428
+ <div style="display:flex;justify-content:space-between;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid #eee;">
429
+ <span style="color:#666;font-weight:500;">实时速率</span>
430
+ <span id="tooltip-rate" style="color:#e67e22;font-weight:600;font-family:monospace;min-width:70px;text-align:right;">0 B/s</span>
431
+ </div>
432
+ <div style="height:100px;background:#f8f9fa;border-radius:4px;padding:8px;">
433
+ <canvas id="tooltip-chart" width="208" height="84"></canvas>
434
+ </div>
435
+ </div>
436
+
437
+ <!-- 未登录状态 -->
438
+ <a id="login-btn" href="javascript:void(0)" class="hidden" style="color:#667eea;text-decoration:none;font-size:14px;">登录</a>
439
+
440
+ <!-- 已登录状态 -->
441
+ <div id="user-info-area" class="hidden" style="align-items:center;gap:12px;font-size:14px;">
442
+ <span class="user-name" style="color:#333;font-weight:500;"></span>
443
+ <span class="user-credits" style="color:#666;font-size:13px;"></span>
444
+ <span style="color:#ddd;">|</span>
445
+ <a id="btn-logout" href="javascript:void(0)" style="color:#999;text-decoration:none;" onmouseover="this.style.color='#667eea'" onmouseout="this.style.color='#999'">退出</a>
446
+ </div>
447
+ </div>
448
+ </header>
449
+
450
+ <div id="app-layout">
451
+ <nav id="sidebar">
452
+ <ul class="nav-list">
453
+ <li class="nav-item active" data-page="account">
454
+ <span class="nav-label">账户信息</span>
455
+ <span class="nav-sublabel">Account</span>
456
+ </li>
457
+ <li class="nav-item" data-page="credits">
458
+ <span class="nav-label">积分统计</span>
459
+ <span class="nav-sublabel">Credits</span>
460
+ </li>
461
+ <li class="nav-item" data-page="modules">
462
+ <span class="nav-label">模块管理</span>
463
+ <span class="nav-sublabel">Modules</span>
464
+ </li>
465
+ <li class="nav-item" data-page="tokens">
466
+ <span class="nav-label">Token管理</span>
467
+ <span class="nav-sublabel">Tokens</span>
468
+ </li>
469
+ <li class="nav-item" data-page="llm-test">
470
+ <span class="nav-label">模型测试</span>
471
+ <span class="nav-sublabel">LLM Test</span>
472
+ </li>
473
+ <li class="nav-divider"></li>
474
+ <li class="nav-item" data-page="registry">
475
+ <span class="nav-label">注册中心</span>
476
+ <span class="nav-sublabel">Registry</span>
477
+ </li>
478
+ <li class="nav-item" data-page="events">
479
+ <span class="nav-label">事件中心</span>
480
+ <span class="nav-sublabel">Events</span>
481
+ </li>
482
+ <li class="nav-item" data-page="logs">
483
+ <span class="nav-label">日志</span>
484
+ <span class="nav-sublabel">Logs</span>
485
+ </li>
486
+ <li class="nav-item" data-page="terminal">
487
+ <span class="nav-label">终端</span>
488
+ <span class="nav-sublabel">Terminal</span>
489
+ </li>
490
+ <li class="nav-item" data-page="tests">
491
+ <span class="nav-label">测试中心</span>
492
+ <span class="nav-sublabel">Tests</span>
493
+ </li>
494
+ <li class="nav-item" data-page="audit">
495
+ <span class="nav-label">审计</span>
496
+ <span class="nav-sublabel">Audit</span>
497
+ </li>
498
+ <li class="nav-item" data-page="health">
499
+ <span class="nav-label">健康检查</span>
500
+ <span class="nav-sublabel">Health</span>
501
+ </li>
502
+ <li class="nav-item" data-page="api-ref">
503
+ <span class="nav-label">接口大全</span>
504
+ <span class="nav-sublabel">API Reference</span>
505
+ </li>
506
+ </ul>
507
+ </nav>
508
+
509
+ <main id="main-content">
510
+ <!-- Account Info -->
511
+ <section id="page-account" class="page active">
512
+ <h2 class="page-title">账户信息</h2>
513
+ <div class="panel">
514
+ <div id="account-info">加载中...</div>
515
+ </div>
516
+ </section>
517
+
518
+ <!-- Credits Stats -->
519
+ <section id="page-credits" class="page">
520
+ <h2 class="page-title">积分统计</h2>
521
+ <div class="panel">
522
+ <div id="credits-stats">加载中...</div>
523
+ </div>
524
+ </section>
525
+
526
+ <!-- Modules Management -->
527
+ <section id="page-modules" class="page">
528
+ <div id="modules-list-header" style="display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;">
529
+ <div style="display:flex;align-items:center;gap:12px;">
530
+ <h2 class="page-title" style="margin-bottom:0;">模块管理</h2>
531
+ <span id="module-save-status" class="config-save-status"></span>
532
+ </div>
533
+ <div style="display:flex;align-items:center;gap:16px;">
534
+ <button class="btn btn-sm btn-secondary" id="btn-toggle-console">
535
+ <span id="console-toggle-text">展开控制台</span>
536
+ </button>
537
+ <button class="btn btn-warning" id="btn-restart-kite" style="display:flex;align-items:center;gap:6px;">
538
+ <span>重启 Kite</span>
539
+ </button>
540
+ </div>
541
+ </div>
542
+
543
+ <!-- Real-time Console (collapsible) -->
544
+ <div id="realtime-console" class="panel" style="display:none;margin-bottom:20px;">
545
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;">
546
+ <h3 style="margin:0;font-size:14px;font-weight:600;">实时事件日志</h3>
547
+ </div>
548
+
549
+ <!-- 筛选器 -->
550
+ <div style="display:grid;grid-template-columns:1fr 1fr 1fr 1fr 1fr;gap:10px;margin-bottom:10px;padding:12px;background:#f5f5f5;border-radius:4px;">
551
+ <div>
552
+ <label style="display:block;margin-bottom:4px;font-size:12px;color:#666;">事件分类</label>
553
+ <select id="filter-category" style="width:100%;padding:6px;border:1px solid #ddd;border-radius:3px;font-size:12px;">
554
+ <option value="">全部</option>
555
+ <option value="rpc">RPC 调用</option>
556
+ <option value="event">事件</option>
557
+ </select>
558
+ </div>
559
+ <div>
560
+ <label style="display:block;margin-bottom:4px;font-size:12px;color:#666;">模块</label>
561
+ <select id="filter-module" style="width:100%;padding:6px;border:1px solid #ddd;border-radius:3px;font-size:12px;">
562
+ <option value="">全部模块</option>
563
+ </select>
564
+ </div>
565
+ <div>
566
+ <label style="display:block;margin-bottom:4px;font-size:12px;color:#666;">事件类型</label>
567
+ <select id="filter-event" style="width:100%;padding:6px;border:1px solid #ddd;border-radius:3px;font-size:12px;">
568
+ <option value="">全部事件</option>
569
+ </select>
570
+ </div>
571
+ <div>
572
+ <label style="display:block;margin-bottom:4px;font-size:12px;color:#666;">关键词 (glob)</label>
573
+ <input type="text" id="filter-keyword" placeholder="例: *error*" style="width:100%;padding:6px;border:1px solid #ddd;border-radius:3px;font-size:12px;">
574
+ </div>
575
+ <div>
576
+ <label style="display:block;margin-bottom:4px;font-size:12px;color:#666;">时间范围</label>
577
+ <select id="filter-time" style="width:100%;padding:6px;border:1px solid #ddd;border-radius:3px;font-size:12px;">
578
+ <option value="0">全部时间</option>
579
+ <option value="300">最近5分钟</option>
580
+ <option value="1800">最近30分钟</option>
581
+ <option value="3600">最近1小时</option>
582
+ <option value="21600">最近6小时</option>
583
+ <option value="86400" selected>最近24小时</option>
584
+ </select>
585
+ </div>
586
+ </div>
587
+
588
+ <!-- 虚拟列表容器 -->
589
+ <div id="event-list-container" style="background:#1e1e1e;border-radius:4px;height:500px;overflow-y:auto;position:relative;">
590
+ <!-- 虚拟列表内容 -->
591
+ <div id="event-list-content" style="position:relative;"></div>
592
+ <!-- 空状态提示 -->
593
+ <div id="event-list-empty" style="display:none;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#858585;text-align:center;">
594
+ <div style="font-size:48px;margin-bottom:12px;">📭</div>
595
+ <div style="font-size:14px;">暂无事件日志</div>
596
+ </div>
597
+ </div>
598
+
599
+ <!-- 控制栏 -->
600
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-top:8px;">
601
+ <div style="display:flex;align-items:center;gap:12px;">
602
+ <label style="display:flex;align-items:center;gap:6px;font-size:13px;cursor:pointer;">
603
+ <input type="checkbox" id="pause-updates" style="cursor:pointer;">
604
+ <span>停止接收</span>
605
+ </label>
606
+ <button class="btn btn-sm btn-secondary" id="btn-scroll-top">↑ 顶部</button>
607
+ <button class="btn btn-sm btn-secondary" id="btn-scroll-bottom">↓ 底部</button>
608
+ <button class="btn btn-sm btn-secondary" id="btn-clear-console">清空</button>
609
+ </div>
610
+ <div style="font-size:12px;color:#999;" id="event-count-label">共 0 条</div>
611
+ </div>
612
+ </div>
613
+
614
+ <!-- Statistics Panel -->
615
+ <div class="panel" style="margin-bottom:20px;" id="statistics-panel">
616
+ <div class="stats-grid">
617
+ <div class="stat-item" data-stat-type="uptime">
618
+ <div class="stat-label">运行时长</div>
619
+ <div class="stat-value" id="stat-uptime">--</div>
620
+ </div>
621
+ <div class="stat-item" data-stat-type="modules">
622
+ <div class="stat-label">模块数量</div>
623
+ <div class="stat-value" id="stat-modules">--</div>
624
+ </div>
625
+ <div class="stat-item" data-stat-type="registry">
626
+ <div class="stat-label">注册记录</div>
627
+ <div class="stat-value" id="stat-registry">--</div>
628
+ </div>
629
+ <div class="stat-item" data-stat-type="rpc">
630
+ <div class="stat-label">RPC 方法</div>
631
+ <div class="stat-value" id="stat-rpc">--</div>
632
+ </div>
633
+ <div class="stat-item" data-stat-type="hooks">
634
+ <div class="stat-label">Hook 数量</div>
635
+ <div class="stat-value" id="stat-hooks">--</div>
636
+ </div>
637
+ <div class="stat-item" data-stat-type="api">
638
+ <div class="stat-label">API 端点</div>
639
+ <div class="stat-value" id="stat-api">--</div>
640
+ </div>
641
+ <div class="stat-item" data-stat-type="events">
642
+ <div class="stat-label">事件处理</div>
643
+ <div class="stat-value" id="stat-events">--</div>
644
+ </div>
645
+ <div class="stat-item" data-stat-type="rpc-calls">
646
+ <div class="stat-label">RPC 调用</div>
647
+ <div class="stat-value" id="stat-rpc-calls">--</div>
648
+ </div>
649
+ </div>
650
+ <!-- 状态提示区 -->
651
+ <div id="stats-status" class="stats-status" style="margin-top:12px;padding:8px 12px;border-radius:4px;font-size:13px;line-height:1.5;"></div>
652
+ </div>
653
+
654
+ <!-- Tooltip for statistics -->
655
+ <div id="stat-tooltip" class="stat-tooltip"></div>
656
+
657
+ <!-- Module List Tabs -->
658
+ <div style="display:flex;gap:8px;margin-bottom:0;border-bottom:1px solid #333;">
659
+ <button class="test-tab active" id="tab-local-modules" data-module-tab="local">本地模块</button>
660
+ <button class="test-tab" id="tab-remote-modules" data-module-tab="remote">远程模块</button>
661
+ </div>
662
+
663
+ <!-- Local Module List Table -->
664
+ <div class="panel" id="local-modules-panel">
665
+ <div class="table-wrapper">
666
+ <table class="data-table" id="modules-table">
667
+ <thead>
668
+ <tr>
669
+ <th style="width:40px;"></th>
670
+ <th style="width:120px;">模块</th>
671
+ <th>类型</th>
672
+ <th>版本</th>
673
+ <th>端口</th>
674
+ <th>连接数</th>
675
+ <th>实例数</th>
676
+ <th>进程ID</th>
677
+ <th>启动耗时</th>
678
+ <th>运行时长</th>
679
+ <th>启动次数</th>
680
+ <th>Ping</th>
681
+ <th>运行状态</th>
682
+ <th>默认状态</th>
683
+ <th style="width:100px;">操作</th>
684
+ </tr>
685
+ </thead>
686
+ <tbody id="modules-tbody">
687
+ <tr><td colspan="15" class="text-muted" style="text-align:center;padding:40px;">加载中...</td></tr>
688
+ </tbody>
689
+ </table>
690
+ </div>
691
+ </div>
692
+
693
+ <!-- Remote Module List Table -->
694
+ <div class="panel" id="remote-modules-panel" style="display:none;">
695
+ <div class="table-wrapper">
696
+ <table class="data-table" id="remote-modules-table">
697
+ <thead>
698
+ <tr>
699
+ <th style="width:40px;"></th>
700
+ <th>模块 ID</th>
701
+ <th>来源 Relay</th>
702
+ <th>注册状态</th>
703
+ <th>注册时间</th>
704
+ <th>在线时长</th>
705
+ <th style="width:80px;">操作</th>
706
+ </tr>
707
+ </thead>
708
+ <tbody id="remote-modules-tbody">
709
+ <tr><td colspan="7" class="text-muted" style="text-align:center;padding:40px;">点击「远程模块」标签加载</td></tr>
710
+ </tbody>
711
+ </table>
712
+ </div>
713
+ </div>
714
+
715
+ <!-- Module Detail Panel (hidden by default) -->
716
+ <div id="module-detail" class="hidden">
717
+ <!-- 头部 -->
718
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;width:100%;">
719
+ <!-- 左侧:返回 + 标题 -->
720
+ <div style="display:flex;align-items:center;">
721
+ <button id="btn-module-back" style="background:none;border:none;cursor:pointer;padding:4px 0;font-size:14px;color:var(--primary);">&lt; 返回</button>
722
+ <h3 id="module-detail-name" style="font-size:18px;font-weight:600;color:#333;margin:0 0 0 20px;"></h3>
723
+ </div>
724
+ <!-- 右侧:运行状态 + 操作按钮 -->
725
+ <div style="display:flex;align-items:center;gap:12px;">
726
+ <div style="display:flex;align-items:center;gap:6px;">
727
+ <span id="module-detail-status-dot" class="module-state-dot" style="width:8px;height:8px;border-radius:50%;display:inline-block;"></span>
728
+ <span id="module-detail-run-status" style="font-size:13px;"></span>
729
+ </div>
730
+ <button class="btn btn-sm" id="btn-detail-action" style="min-width:82px;"></button>
731
+ <button class="btn btn-sm btn-secondary" id="btn-reset-defaults">恢复默认值</button>
732
+ </div>
733
+ </div>
734
+
735
+ <!-- 【区块1:模块标识】 -->
736
+ <div class="form-section" style="background:#f9f9f9;padding:16px;border-radius:6px;margin-bottom:16px;">
737
+ <h4 style="margin:0 0 12px 0;font-size:14px;font-weight:600;color:#666;">模块标识</h4>
738
+
739
+ <!-- 模块路径 -->
740
+ <div style="margin-bottom:12px;display:flex;align-items:center;">
741
+ <label style="width:140px;font-size:13px;color:#666;flex-shrink:0;">模块路径 <span style="font-size:11px;color:#999;">(source_path)</span></label>
742
+ <input type="text" id="mod-source-path" disabled style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;background:#e9ecef;cursor:not-allowed;font-size:12px;font-family:monospace;">
743
+ </div>
744
+
745
+ <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px;">
746
+ <div style="display:flex;align-items:center;">
747
+ <label style="width:140px;font-size:13px;color:#666;flex-shrink:0;">模块名 <span style="font-size:11px;color:#999;">(name)</span></label>
748
+ <input type="text" id="mod-meta-name" disabled style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;background:#e9ecef;cursor:not-allowed;">
749
+ </div>
750
+ <div style="display:flex;align-items:center;">
751
+ <label style="width:140px;font-size:13px;color:#666;flex-shrink:0;">模块类型 <span style="font-size:11px;color:#999;">(type)</span></label>
752
+ <input type="text" id="mod-meta-type" disabled style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;background:#e9ecef;cursor:not-allowed;">
753
+ </div>
754
+ </div>
755
+
756
+ <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px;">
757
+ <div style="display:flex;align-items:center;">
758
+ <label style="width:140px;font-size:13px;color:#666;flex-shrink:0;">运行时 <span style="font-size:11px;color:#999;">(runtime)</span></label>
759
+ <input type="text" id="mod-meta-runtime" disabled style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;background:#e9ecef;cursor:not-allowed;">
760
+ </div>
761
+ <div style="display:flex;align-items:center;">
762
+ <label style="width:140px;font-size:13px;color:#666;flex-shrink:0;">入口文件 <span style="font-size:11px;color:#999;">(entry)</span></label>
763
+ <input type="text" id="mod-meta-entry" disabled style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;background:#e9ecef;cursor:not-allowed;">
764
+ </div>
765
+ </div>
766
+
767
+ <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
768
+ <div style="display:flex;align-items:center;">
769
+ <label style="width:140px;font-size:13px;color:#666;flex-shrink:0;">版本 <span style="font-size:11px;color:#999;">(version)</span></label>
770
+ <input type="text" id="mod-meta-version" disabled style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;background:#e9ecef;cursor:not-allowed;">
771
+ </div>
772
+ <div style="display:flex;align-items:center;">
773
+ <label style="width:140px;font-size:13px;color:#666;flex-shrink:0;">显示名称 <span style="font-size:11px;color:#999;">(display_name)</span></label>
774
+ <input type="text" id="mod-meta-display-name" data-field="display_name" style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;">
775
+ </div>
776
+ </div>
777
+ </div>
778
+
779
+ <!-- 【区块2:启动配置】 -->
780
+ <div class="form-section" style="background:#f9f9f9;padding:16px;border-radius:6px;margin-bottom:16px;">
781
+ <h4 style="margin:0 0 12px 0;font-size:14px;font-weight:600;color:#666;">启动配置</h4>
782
+
783
+ <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
784
+ <div style="display:flex;align-items:center;">
785
+ <label style="width:200px;font-size:13px;color:#666;flex-shrink:0;">默认状态 <span style="font-size:11px;color:#999;">(state)</span></label>
786
+ <select id="mod-meta-state" data-field="state" style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;">
787
+ <option value="enabled">enabled - 自动启动</option>
788
+ <option value="manual">manual - 手动启动</option>
789
+ <option value="disabled">disabled - 禁用</option>
790
+ </select>
791
+ </div>
792
+ <div style="display:flex;align-items:center;">
793
+ <label style="width:200px;font-size:13px;color:#666;flex-shrink:0;">监控 <span style="font-size:11px;color:#999;">(monitor)</span></label>
794
+ <select id="mod-meta-monitor" data-field="monitor" style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;">
795
+ <option value="true">启用监控 (默认)</option>
796
+ <option value="false">禁用监控</option>
797
+ </select>
798
+ </div>
799
+ </div>
800
+ </div>
801
+
802
+ <!-- 【区块3:网络配置】 -->
803
+ <div class="form-section" style="background:#f9f9f9;padding:16px;border-radius:6px;margin-bottom:16px;">
804
+ <h4 style="margin:0 0 12px 0;font-size:14px;font-weight:600;color:#666;">网络配置</h4>
805
+
806
+ <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
807
+ <div style="display:flex;align-items:center;">
808
+ <label style="width:200px;font-size:13px;color:#666;flex-shrink:0;">首选端口 <span style="font-size:11px;color:#999;">(preferred_port)</span></label>
809
+ <input type="number" id="mod-meta-port" data-field="preferred_port" placeholder="(无)" style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;">
810
+ </div>
811
+ <div style="display:flex;align-items:center;">
812
+ <label style="width:200px;font-size:13px;color:#666;flex-shrink:0;">监听地址 <span style="font-size:11px;color:#999;">(advertise_ip)</span></label>
813
+ <select id="mod-meta-ip" data-field="advertise_ip" style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;">
814
+ <option value="127.0.0.1">127.0.0.1 - 仅本地</option>
815
+ <option value="0.0.0.0">0.0.0.0 - 允许远程</option>
816
+ </select>
817
+ </div>
818
+ </div>
819
+ </div>
820
+
821
+ <!-- 【区块3.2:多连接 / 多实例】 -->
822
+ <div class="form-section" style="background:#f9f9f9;padding:16px;border-radius:6px;margin-bottom:16px;">
823
+ <h4 style="margin:0 0 12px 0;font-size:14px;font-weight:600;color:#666;">多连接 / 多实例</h4>
824
+
825
+ <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px;">
826
+ <div style="display:flex;align-items:center;">
827
+ <label style="width:200px;font-size:13px;color:#666;flex-shrink:0;">最大连接数 <span style="font-size:11px;color:#999;">(max_connections)</span></label>
828
+ <select id="mod-meta-max-connections" data-field="max_connections" style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;">
829
+ <option value="1">1</option><option value="2">2</option><option value="3">3</option>
830
+ <option value="4">4</option><option value="5">5</option><option value="6">6</option>
831
+ <option value="7">7</option><option value="8">8</option><option value="9">9</option>
832
+ <option value="10">10</option>
833
+ </select>
834
+ </div>
835
+ <div style="display:flex;align-items:center;">
836
+ <label style="width:200px;font-size:13px;color:#666;flex-shrink:0;">弹性连接 <span style="font-size:11px;color:#999;">(connection_elastic)</span></label>
837
+ <select id="mod-meta-connection-elastic" data-field="connection_elastic" style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;">
838
+ <option value="false">不支持</option>
839
+ <option value="true">支持</option>
840
+ </select>
841
+ </div>
842
+ </div>
843
+
844
+ <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;">
845
+ <div style="display:flex;align-items:center;">
846
+ <label style="width:200px;font-size:13px;color:#666;flex-shrink:0;">最大实例数 <span style="font-size:11px;color:#999;">(max_instances)</span></label>
847
+ <select id="mod-meta-max-instances" data-field="max_instances" style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;">
848
+ <option value="1">1</option><option value="2">2</option><option value="3">3</option>
849
+ <option value="4">4</option><option value="5">5</option><option value="6">6</option>
850
+ <option value="7">7</option><option value="8">8</option><option value="9">9</option>
851
+ <option value="10">10</option>
852
+ </select>
853
+ </div>
854
+ <div style="display:flex;align-items:center;">
855
+ <label style="width:200px;font-size:13px;color:#666;flex-shrink:0;">弹性实例 <span style="font-size:11px;color:#999;">(instance_elastic)</span></label>
856
+ <select id="mod-meta-instance-elastic" data-field="instance_elastic" style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;">
857
+ <option value="false">不支持</option>
858
+ <option value="true">支持</option>
859
+ </select>
860
+ </div>
861
+ </div>
862
+
863
+ <!-- 操作按钮 -->
864
+ <div style="display:flex;gap:12px;align-items:center;border-top:1px solid #eee;padding-top:12px;">
865
+ <button type="button" id="btn-apply-multi-config" class="btn btn-sm btn-primary" style="padding:6px 16px;" onclick="app.applyMultiConfig()">应用</button>
866
+ <button type="button" id="btn-test-add-connection" class="btn btn-sm" style="padding:6px 16px;" onclick="app.testAddConnection()">增加连接</button>
867
+ <button type="button" id="btn-test-add-instance" class="btn btn-sm" style="padding:6px 16px;" onclick="app.testAddInstance()">增加实例</button>
868
+ <span id="multi-test-status" style="font-size:12px;color:#999;margin-left:8px;"></span>
869
+ </div>
870
+ </div>
871
+
872
+ <!-- 【区块3.5:扫描目录管理】(仅 launcher 显示) -->
873
+ <div class="form-section hidden" id="module-scan-dirs-section" style="background:#f9f9f9;padding:16px;border-radius:6px;margin-bottom:16px;">
874
+ <h4 style="margin:0 0 12px 0;font-size:14px;font-weight:600;color:#666;">扫描目录管理</h4>
875
+ <div id="scan-dirs-list" style="margin-bottom:12px;">
876
+ <!-- 动态生成目录列表 -->
877
+ </div>
878
+ <div style="display:flex;gap:8px;">
879
+ <input type="text" id="new-scan-dir" placeholder="输入新目录路径" style="flex:1;padding:8px;border:1px solid #ddd;border-radius:4px;">
880
+ <button type="button" id="btn-add-scan-dir" class="btn btn-sm btn-success" style="padding:8px 16px;">添加</button>
881
+ </div>
882
+ </div>
883
+
884
+ <!-- 【区块4:模块配置文件】 -->
885
+ <div class="form-section hidden" id="module-config-section" style="background:#f9f9f9;padding:16px;border-radius:6px;">
886
+ <h4 style="margin:0 0 12px 0;font-size:14px;font-weight:600;color:#666;">业务参数配置</h4>
887
+ <div id="business-selector" class="hidden" style="margin-bottom:12px;">
888
+ <select id="business-select" style="padding:4px 8px;border:1px solid #ddd;border-radius:4px;font-size:13px;"></select>
889
+ </div>
890
+ <div id="module-config-tree"></div>
891
+ </div>
892
+
893
+ <!-- 【区块5:事件信息】 -->
894
+ <div class="form-section" id="module-events-section" style="background:#f9f9f9;padding:16px;border-radius:6px;margin-top:16px;">
895
+ <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;">
896
+ <h4 style="margin:0;font-size:14px;font-weight:600;color:#666;">事件信息</h4>
897
+ <button type="button" id="btn-refresh-events" class="btn btn-sm" style="padding:4px 12px;font-size:12px;">刷新</button>
898
+ </div>
899
+ <div id="module-events-content">
900
+ <div style="text-align:center;padding:20px;color:#999;">加载中...</div>
901
+ </div>
902
+ </div>
903
+ </div>
904
+ </section>
905
+
906
+ <!-- Token Management -->
907
+ <section id="page-tokens" class="page">
908
+ <h2 style="margin:0 0 20px 0;font-size:20px;font-weight:600;">Token 管理</h2>
909
+
910
+ <!-- 标签页导航 -->
911
+ <div class="tabs">
912
+ <button class="tab active" data-tab="kite">Kite Token</button>
913
+ <button class="tab" data-tab="evol">Evol Token</button>
914
+ <button class="tab" data-tab="auth">远程接入 Token</button>
915
+ </div>
916
+
917
+ <!-- Kite Token 标签页 -->
918
+ <div class="tab-content active" id="tab-kite">
919
+ <div class="panel">
920
+ <div class="table-wrapper">
921
+ <table class="data-table" id="kite-tokens-table">
922
+ <thead>
923
+ <tr>
924
+ <th style="width:140px;">Token</th>
925
+ <th style="width:180px;">设备</th>
926
+ <th style="width:120px;">绑定手机号</th>
927
+ <th style="width:150px;">创建时间</th>
928
+ <th style="width:150px;">最后使用</th>
929
+ <th style="width:150px;">过期时间</th>
930
+ <th style="width:100px;">剩余有效期</th>
931
+ <th style="width:80px;">状态</th>
932
+ <th style="width:100px;">操作</th>
933
+ </tr>
934
+ </thead>
935
+ <tbody id="kite-tokens-tbody">
936
+ <tr><td colspan="9" class="text-muted" style="text-align:center;padding:40px;">加载中...</td></tr>
937
+ </tbody>
938
+ </table>
939
+ </div>
940
+ </div>
941
+ </div>
942
+
943
+ <!-- Evol Token 标签页 -->
944
+ <div class="tab-content" id="tab-evol">
945
+ <div class="panel">
946
+ <div class="table-wrapper">
947
+ <table class="data-table" id="evol-tokens-table">
948
+ <thead>
949
+ <tr>
950
+ <th style="width:140px;">Token</th>
951
+ <th style="width:120px;">手机号</th>
952
+ <th style="width:120px;">昵称</th>
953
+ <th style="width:100px;">积分</th>
954
+ <th style="width:100px;">VIP</th>
955
+ <th style="width:150px;">获取时间</th>
956
+ <th style="width:150px;">最后使用</th>
957
+ <th style="width:150px;">过期时间</th>
958
+ <th style="width:100px;">操作</th>
959
+ </tr>
960
+ </thead>
961
+ <tbody id="evol-tokens-tbody">
962
+ <tr><td colspan="9" class="text-muted" style="text-align:center;padding:40px;">加载中...</td></tr>
963
+ </tbody>
964
+ </table>
965
+ </div>
966
+ </div>
967
+ </div>
968
+
969
+ <!-- 远程接入 Token 标签页(Auth 模块管理的 Token:配对码 + Evol 账号) -->
970
+ <div class="tab-content" id="tab-auth">
971
+ <div class="panel">
972
+ <p style="margin:0 0 12px 0;color:#888;font-size:13px;">通过 Gateway 远程接入产生的 Token(配对码登录、Evol 手机号登录),由 Auth 模块统一管理。</p>
973
+ <div class="table-wrapper">
974
+ <table class="data-table" id="auth-tokens-table">
975
+ <thead>
976
+ <tr>
977
+ <th style="width:140px;">Token</th>
978
+ <th style="width:100px;">认证方式</th>
979
+ <th style="width:180px;">设备</th>
980
+ <th style="width:120px;">手机号</th>
981
+ <th style="width:80px;">角色</th>
982
+ <th style="width:80px;">信任等级</th>
983
+ <th style="width:140px;">创建时间</th>
984
+ <th style="width:140px;">最后使用</th>
985
+ <th style="width:100px;">剩余有效期</th>
986
+ <th style="width:100px;">操作</th>
987
+ </tr>
988
+ </thead>
989
+ <tbody id="auth-tokens-tbody">
990
+ <tr><td colspan="10" class="text-muted" style="text-align:center;padding:40px;">加载中...</td></tr>
991
+ </tbody>
992
+ </table>
993
+ </div>
994
+ </div>
995
+ </div>
996
+ </section>
997
+
998
+ <!-- LLM Test -->
999
+ <section id="page-llm-test" class="page">
1000
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;">
1001
+ <h2 class="page-title" style="margin-bottom:0;">模型测试</h2>
1002
+ <button class="btn btn-sm btn-secondary" id="llm-test-toggle-config">配置 &#9654;</button>
1003
+ </div>
1004
+
1005
+ <div class="panel" id="llm-test-config-panel" style="display:none;">
1006
+ <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:16px;">
1007
+ <div>
1008
+ <label style="display:block;margin-bottom:6px;font-size:13px;font-weight:500;">提供商</label>
1009
+ <select id="llm-test-provider" style="width:100%;padding:8px;border:1px solid #ddd;border-radius:4px;font-size:13px;">
1010
+ <option value="openai">OpenAI</option>
1011
+ <option value="claude">Claude</option>
1012
+ <option value="gemini">Gemini</option>
1013
+ </select>
1014
+ </div>
1015
+
1016
+ <div>
1017
+ <label style="display:block;margin-bottom:6px;font-size:13px;font-weight:500;">Base URL</label>
1018
+ <input type="url" id="llm-test-base-url" placeholder="https://api.openai.com/v1" style="width:100%;padding:8px;border:1px solid #ddd;border-radius:4px;font-size:13px;">
1019
+ </div>
1020
+
1021
+ <div>
1022
+ <label style="display:block;margin-bottom:6px;font-size:13px;font-weight:500;">API Key</label>
1023
+ <form autocomplete="off" onsubmit="return false;" style="margin:0;">
1024
+ <input type="password" id="llm-test-api-key" placeholder="sk-..." style="width:100%;padding:8px;border:1px solid #ddd;border-radius:4px;font-size:13px;">
1025
+ </form>
1026
+ </div>
1027
+ </div>
1028
+
1029
+ <div style="display:grid;grid-template-columns:1fr 1fr;gap:16px;">
1030
+ <div>
1031
+ <label style="display:block;margin-bottom:6px;font-size:13px;font-weight:500;">Temperature</label>
1032
+ <input type="number" id="llm-test-temperature" value="0.7" min="0" max="2" step="0.1" style="width:100%;padding:8px;border:1px solid #ddd;border-radius:4px;font-size:13px;">
1033
+ </div>
1034
+
1035
+ <div>
1036
+ <label style="display:block;margin-bottom:6px;font-size:13px;font-weight:500;">Max Tokens</label>
1037
+ <input type="number" id="llm-test-max-tokens" value="1024" min="1" max="32000" step="1" style="width:100%;padding:8px;border:1px solid #ddd;border-radius:4px;font-size:13px;">
1038
+ </div>
1039
+ </div>
1040
+ </div>
1041
+
1042
+ <div class="panel" style="display:flex;gap:0;padding:0;overflow:hidden;">
1043
+ <div style="flex:1;min-width:0;padding:20px;">
1044
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;">
1045
+ <h3 style="margin:0;font-size:16px;font-weight:600;">对话测试</h3>
1046
+ <button id="llm-test-clear" class="btn btn-sm btn-secondary">清空对话</button>
1047
+ </div>
1048
+
1049
+ <div id="llm-test-messages" style="min-height:400px;max-height:600px;overflow-y:auto;padding:16px;background:#ebebeb;border:1px solid #e0e0e0;border-radius:4px;margin-bottom:16px;">
1050
+ <div style="text-align:center;color:#999;padding:40px 0;">选择模型后开始对话</div>
1051
+ </div>
1052
+
1053
+ <div class="llm-test-footer">
1054
+ <textarea id="llm-test-input" class="llm-test-input" placeholder="输入消息... (Enter 发送,Shift+Enter 换行)" rows="3"></textarea>
1055
+ <div class="llm-test-footer-bar">
1056
+ <button id="llm-test-inspect" class="btn btn-sm btn-secondary" title="查看完整请求内容">{ }</button>
1057
+ <select id="llm-test-model" class="llm-test-model-select">
1058
+ <option value="">请先填入 API Key</option>
1059
+ </select>
1060
+ <div id="llm-test-stats" class="llm-test-stats" style="display:none;">
1061
+ <span class="stat-item" title="消息数量"><span class="stat-label">消息:</span> <span id="stat-messages">0</span></span>
1062
+ <span class="stat-item" title="工具调用次数"><span class="stat-label">工具:</span> <span id="stat-tools">0</span></span>
1063
+ <span class="stat-item" title="上下文占用" style="cursor:pointer;" id="stat-context-toggle"><span class="stat-label">上下文:</span> <span id="stat-context">0</span> tokens</span>
1064
+ </div>
1065
+ <button id="llm-test-send" class="btn btn-primary">发送</button>
1066
+ </div>
1067
+ </div>
1068
+ </div>
1069
+
1070
+ <div class="llm-test-sidebar">
1071
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;">
1072
+ <h3 style="margin:0;font-size:14px;font-weight:600;color:#666;">会话</h3>
1073
+ <button id="llm-test-new-session" class="btn btn-sm btn-secondary">+ 新建</button>
1074
+ </div>
1075
+ <div id="llm-test-sessions" class="llm-test-session-list"></div>
1076
+ </div>
1077
+ </div>
1078
+
1079
+ <!-- 请求内容查看弹窗 -->
1080
+ <div id="llm-inspect-modal" class="modal-overlay hidden">
1081
+ <div class="modal" style="max-width:900px;height:80vh;width:90%;">
1082
+ <div class="modal-header">
1083
+ <h3 class="modal-title">请求内容</h3>
1084
+ <button class="modal-close" id="llm-inspect-close">&times;</button>
1085
+ </div>
1086
+ <div class="modal-body" style="padding:0;display:flex;flex:1;min-height:0;overflow:hidden;">
1087
+ <div id="llm-inspect-tree" class="inspect-tree"></div>
1088
+ <div id="llm-inspect-detail" class="inspect-detail">
1089
+ <div style="color:#999;padding:20px;">点击左侧节点查看内容</div>
1090
+ </div>
1091
+ </div>
1092
+ </div>
1093
+ </div>
1094
+ </section>
1095
+
1096
+ <!-- Registry Center -->
1097
+ <section id="page-registry" class="page">
1098
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;">
1099
+ <h2 class="page-title" style="margin-bottom:0;">注册中心</h2>
1100
+ <div style="display:flex;align-items:center;gap:8px;">
1101
+ <input type="text" id="registry-search" placeholder="搜索路径或值..." style="padding:6px 12px;border:1px solid var(--gray-300);border-radius:4px;font-size:13px;width:240px;">
1102
+ <div class="btn-group" id="registry-view-toggle">
1103
+ <button class="btn btn-sm btn-secondary active" data-view="tree">树形</button>
1104
+ <button class="btn btn-sm btn-secondary" data-view="table">表格</button>
1105
+ </div>
1106
+ <button class="btn btn-sm btn-secondary" id="registry-refresh" title="刷新">刷新</button>
1107
+ </div>
1108
+ </div>
1109
+ <div class="panel" id="registry-stats" style="display:flex;gap:24px;padding:12px 20px;margin-bottom:16px;font-size:13px;color:var(--gray-600);">
1110
+ <span>模块: <strong id="registry-stat-modules">-</strong></span>
1111
+ <span>记录: <strong id="registry-stat-records">-</strong></span>
1112
+ <span>最后更新: <strong id="registry-stat-time">-</strong></span>
1113
+ </div>
1114
+ <div class="panel" id="registry-content" style="min-height:400px;padding:0;">
1115
+ <div id="registry-tree" style="padding:16px;"></div>
1116
+ <div id="registry-table" style="display:none;"></div>
1117
+ <div id="registry-loading" style="text-align:center;padding:60px 0;color:var(--gray-400);">加载中...</div>
1118
+ </div>
1119
+ </section>
1120
+
1121
+ <!-- Events Center -->
1122
+ <section id="page-events" class="page">
1123
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;">
1124
+ <h2 class="page-title" style="margin-bottom:0;">事件中心</h2>
1125
+ <div style="display:flex;align-items:center;gap:8px;">
1126
+ <div class="btn-group" id="events-mode-toggle">
1127
+ <button class="btn btn-sm btn-secondary active" data-mode="realtime">实时</button>
1128
+ <button class="btn btn-sm btn-secondary" data-mode="history">历史</button>
1129
+ </div>
1130
+ <button class="btn btn-sm btn-secondary" id="events-pause">暂停</button>
1131
+ <button class="btn btn-sm btn-secondary" id="events-clear">清空</button>
1132
+ <span id="events-count" style="font-size:12px;color:var(--gray-500);">0 条</span>
1133
+ <span id="events-rate" style="font-size:12px;color:var(--gray-500);">0 evt/s</span>
1134
+ </div>
1135
+ </div>
1136
+ <div style="display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;">
1137
+ <select id="events-filter-module" style="padding:4px 8px;border:1px solid var(--gray-300);border-radius:4px;font-size:12px;">
1138
+ <option value="">全部模块</option>
1139
+ </select>
1140
+ <select id="events-filter-type" style="padding:4px 8px;border:1px solid var(--gray-300);border-radius:4px;font-size:12px;">
1141
+ <option value="">全部类型</option>
1142
+ <option value="rpc">RPC</option>
1143
+ <option value="event">事件</option>
1144
+ </select>
1145
+ <input type="text" id="events-filter-keyword" placeholder="关键词..." style="padding:4px 8px;border:1px solid var(--gray-300);border-radius:4px;font-size:12px;width:180px;">
1146
+ </div>
1147
+ <div class="panel" style="padding:0;background:#1e1e1e;color:#d4d4d4;min-height:500px;max-height:70vh;overflow-y:auto;position:relative;" id="events-list-container">
1148
+ <div id="events-list-content" style="position:relative;"></div>
1149
+ <div id="events-list-empty" style="text-align:center;padding:60px 0;color:#666;">
1150
+ 等待事件...
1151
+ </div>
1152
+ </div>
1153
+ </section>
1154
+
1155
+ <!-- API Reference -->
1156
+ <!-- Logs Center -->
1157
+ <section id="page-logs" class="page">
1158
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;">
1159
+ <h2 class="page-title" style="margin-bottom:0;">日志</h2>
1160
+ <div style="display:flex;align-items:center;gap:8px;">
1161
+ <button class="btn btn-sm btn-secondary" id="logs-refresh" title="刷新">刷新</button>
1162
+ </div>
1163
+ </div>
1164
+ <!-- 统计卡片 -->
1165
+ <div class="panel logs-stats" style="display:flex;gap:24px;padding:12px 20px;margin-bottom:16px;font-size:13px;color:var(--gray-600);">
1166
+ <span>模块: <strong id="logs-stat-modules">-</strong></span>
1167
+ <span>文件: <strong id="logs-stat-files">-</strong></span>
1168
+ <span>变更: <strong id="logs-stat-changes">-</strong></span>
1169
+ </div>
1170
+ <!-- Tab 切换 -->
1171
+ <div style="display:flex;align-items:center;gap:12px;margin-bottom:16px;">
1172
+ <div class="btn-group" id="logs-tab-toggle">
1173
+ <button class="btn btn-sm btn-secondary active" data-tab="files">文件浏览</button>
1174
+ <button class="btn btn-sm btn-secondary" data-tab="search">日志搜索</button>
1175
+ <button class="btn btn-sm btn-secondary" data-tab="changes">变更追踪</button>
1176
+ </div>
1177
+ </div>
1178
+ <!-- 文件浏览 Tab -->
1179
+ <div id="logs-tab-files" class="logs-tab-content">
1180
+ <div class="panel" style="min-height:400px;padding:0;">
1181
+ <div id="logs-files-list" style="padding:16px;">
1182
+ <div style="text-align:center;padding:60px 0;color:var(--gray-400);">加载中...</div>
1183
+ </div>
1184
+ </div>
1185
+ </div>
1186
+ <!-- 日志搜索 Tab -->
1187
+ <div id="logs-tab-search" class="logs-tab-content" style="display:none;">
1188
+ <div class="panel" style="padding:16px;margin-bottom:12px;">
1189
+ <div style="display:flex;gap:8px;align-items:center;flex-wrap:wrap;">
1190
+ <select id="logs-search-module" style="padding:6px 10px;border:1px solid var(--gray-300);border-radius:4px;font-size:13px;">
1191
+ <option value="">全部模块</option>
1192
+ </select>
1193
+ <input type="text" id="logs-search-keyword" placeholder="关键词或正则..." style="padding:6px 12px;border:1px solid var(--gray-300);border-radius:4px;font-size:13px;flex:1;min-width:200px;">
1194
+ <input type="text" id="logs-search-from" placeholder="开始时间 HH:MM" style="padding:6px 10px;border:1px solid var(--gray-300);border-radius:4px;font-size:13px;width:130px;">
1195
+ <input type="text" id="logs-search-to" placeholder="结束时间 HH:MM" style="padding:6px 10px;border:1px solid var(--gray-300);border-radius:4px;font-size:13px;width:130px;">
1196
+ <label style="font-size:12px;display:flex;align-items:center;gap:4px;"><input type="checkbox" id="logs-search-archive"> 含归档</label>
1197
+ <button class="btn btn-sm btn-primary" id="logs-search-btn">搜索</button>
1198
+ </div>
1199
+ </div>
1200
+ <div class="panel" style="min-height:300px;padding:0;">
1201
+ <div id="logs-search-results" style="padding:16px;">
1202
+ <div style="text-align:center;padding:60px 0;color:var(--gray-400);">输入条件后点击搜索</div>
1203
+ </div>
1204
+ </div>
1205
+ </div>
1206
+ <!-- 变更追踪 Tab -->
1207
+ <div id="logs-tab-changes" class="logs-tab-content" style="display:none;">
1208
+ <div class="panel" style="min-height:400px;padding:0;">
1209
+ <div id="logs-changes-list" style="padding:16px;">
1210
+ <div style="text-align:center;padding:60px 0;color:var(--gray-400);">加载中...</div>
1211
+ </div>
1212
+ </div>
1213
+ </div>
1214
+ </section>
1215
+
1216
+ <!-- Audit Center -->
1217
+ <section id="page-audit" class="page">
1218
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;">
1219
+ <h2 class="page-title" style="margin-bottom:0;">审计</h2>
1220
+ <div style="display:flex;align-items:center;gap:8px;">
1221
+ <button class="btn btn-sm btn-secondary" id="audit-refresh" title="刷新">刷新</button>
1222
+ </div>
1223
+ </div>
1224
+ <!-- 统计卡片 -->
1225
+ <div class="panel audit-stats" style="display:flex;gap:24px;padding:12px 20px;margin-bottom:16px;font-size:13px;color:var(--gray-600);">
1226
+ <span>事件总数: <strong id="audit-stat-total">-</strong></span>
1227
+ <span>成功: <strong id="audit-stat-success" style="color:var(--success);">-</strong></span>
1228
+ <span>失败: <strong id="audit-stat-failure" style="color:var(--danger,#e74c3c);">-</strong></span>
1229
+ <span>存储: <strong id="audit-stat-storage">-</strong></span>
1230
+ </div>
1231
+ <!-- 筛选器 -->
1232
+ <div class="panel" style="padding:12px 16px;margin-bottom:12px;">
1233
+ <div style="display:flex;gap:8px;align-items:center;flex-wrap:wrap;">
1234
+ <select id="audit-filter-action" style="padding:6px 10px;border:1px solid var(--gray-300);border-radius:4px;font-size:13px;">
1235
+ <option value="">全部操作</option>
1236
+ <option value="module.started">module.started</option>
1237
+ <option value="module.stopped">module.stopped</option>
1238
+ <option value="module.crashed">module.crashed</option>
1239
+ <option value="module.registered">module.registered</option>
1240
+ <option value="module.unregistered">module.unregistered</option>
1241
+ <option value="module.offline">module.offline</option>
1242
+ <option value="module.ready">module.ready</option>
1243
+ <option value="module.degraded">module.degraded</option>
1244
+ <option value="module.recovered">module.recovered</option>
1245
+ <option value="registry.updated">registry.updated</option>
1246
+ <option value="watchdog.module.restarted">watchdog.module.restarted</option>
1247
+ <option value="watchdog.module.resource_warning">watchdog.module.resource_warning</option>
1248
+ <option value="watchdog.module.degraded_timeout">watchdog.module.degraded_timeout</option>
1249
+ </select>
1250
+ <select id="audit-filter-result" style="padding:6px 10px;border:1px solid var(--gray-300);border-radius:4px;font-size:13px;">
1251
+ <option value="">全部结果</option>
1252
+ <option value="success">成功</option>
1253
+ <option value="failure">失败</option>
1254
+ </select>
1255
+ <input type="text" id="audit-filter-actor" placeholder="操作者 ID..." style="padding:6px 10px;border:1px solid var(--gray-300);border-radius:4px;font-size:13px;width:150px;">
1256
+ <input type="text" id="audit-filter-resource" placeholder="资源 ID..." style="padding:6px 10px;border:1px solid var(--gray-300);border-radius:4px;font-size:13px;width:150px;">
1257
+ <button class="btn btn-sm btn-primary" id="audit-filter-btn">查询</button>
1258
+ <button class="btn btn-sm btn-secondary" id="audit-filter-reset">重置</button>
1259
+ </div>
1260
+ </div>
1261
+ <!-- 事件列表 -->
1262
+ <div class="panel" style="min-height:400px;padding:0;">
1263
+ <div id="audit-events-list" style="padding:0;">
1264
+ <div id="audit-loading" style="text-align:center;padding:60px 0;color:var(--gray-400);">加载中...</div>
1265
+ </div>
1266
+ </div>
1267
+ <!-- 分页 -->
1268
+ <div id="audit-pagination" style="display:flex;justify-content:space-between;align-items:center;padding:12px 0;font-size:13px;color:var(--gray-500);">
1269
+ <span id="audit-page-info"></span>
1270
+ <div style="display:flex;gap:6px;">
1271
+ <button class="btn btn-sm btn-secondary" id="audit-prev-page" disabled>上一页</button>
1272
+ <button class="btn btn-sm btn-secondary" id="audit-next-page" disabled>下一页</button>
1273
+ </div>
1274
+ </div>
1275
+ </section>
1276
+
1277
+ <!-- Terminal Panel -->
1278
+ <section id="page-terminal" class="page">
1279
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;flex-shrink:0;">
1280
+ <h2 class="page-title" style="margin-bottom:0;">终端</h2>
1281
+ <div style="display:flex;align-items:center;gap:8px;">
1282
+ <button class="btn btn-sm btn-secondary" id="terminal-clear-btn">清空</button>
1283
+ <button class="btn btn-sm btn-secondary" id="terminal-scroll-bottom-btn">↓ 底部</button>
1284
+ </div>
1285
+ </div>
1286
+ <div id="terminal-container" style="background:#0d1117;border-radius:6px;padding:12px 16px;height:calc(100vh - 260px);overflow-y:auto;font-family:'Cascadia Code','Fira Code','Consolas',monospace;font-size:12.5px;line-height:1.5;color:#c9d1d9;">
1287
+ <div id="terminal-lines"></div>
1288
+ <div id="terminal-empty" style="color:var(--gray-500);text-align:center;padding-top:40px;">等待输出...</div>
1289
+ </div>
1290
+ <div style="display:flex;align-items:center;gap:8px;margin-top:6px;font-size:12px;color:var(--gray-400);flex-shrink:0;">
1291
+ <span id="terminal-status">未连接</span>
1292
+ <span style="margin-left:auto;">共 <strong id="terminal-line-count">0</strong> 行 / <strong id="terminal-byte-count">0 B</strong></span>
1293
+ </div>
1294
+ <div id="terminal-tabs" style="display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;flex-shrink:0;padding:6px 0;min-height:36px;"></div>
1295
+ </section>
1296
+
1297
+ <!-- Test Center -->
1298
+ <section id="page-tests" class="page">
1299
+ <h2 class="page-title" style="margin-bottom:20px;">测试中心</h2>
1300
+
1301
+ <!-- Test Type Tabs -->
1302
+ <div style="display:flex;gap:8px;margin-bottom:20px;border-bottom:1px solid #333;">
1303
+ <button class="test-tab active" data-tab="module">模块测试</button>
1304
+ <button class="test-tab" data-tab="integration">集成测试</button>
1305
+ <button class="test-tab" data-tab="full">完整测试</button>
1306
+ </div>
1307
+
1308
+ <!-- Module Test Panel -->
1309
+ <div id="module-test-panel" class="test-panel">
1310
+ <div class="test-controls">
1311
+ <label>选择模块:</label>
1312
+ <select id="test-module-select">
1313
+ <option value="kernel">Kernel</option>
1314
+ <option value="launcher">Launcher</option>
1315
+ <option value="watchdog">Watchdog</option>
1316
+ <option value="web">Web</option>
1317
+ <option value="backup">Backup</option>
1318
+ <option value="auth">Auth</option>
1319
+ <option value="gateway">Gateway</option>
1320
+ <option value="redis">Redis</option>
1321
+ </select>
1322
+ <button class="btn btn-sm btn-primary" id="btn-run-module-test">运行测试</button>
1323
+ <button class="btn btn-sm btn-secondary" id="btn-clear-test-output">清空输出</button>
1324
+ <button class="btn btn-sm btn-secondary" id="btn-copy-test-output">复制输出</button>
1325
+ </div>
1326
+ </div>
1327
+
1328
+ <!-- Integration Test Panel -->
1329
+ <div id="integration-test-panel" class="test-panel" style="display:none;">
1330
+ <div class="test-controls">
1331
+ <label>选择测试:</label>
1332
+ <select id="test-integration-select">
1333
+ <option value="registry-core">注册中心核心功能</option>
1334
+ <option value="pingpong">Ping-Pong 机制</option>
1335
+ <option value="auth">认证机制</option>
1336
+ <option value="full-workflow">完整流程</option>
1337
+ <option value="channel-interaction">Channel 交互测试</option>
1338
+ <option value="nested-rpc">嵌套 RPC 调用</option>
1339
+ <option value="elastic-connection">弹性多连接控制</option>
1340
+ <option value="trace">链路追踪</option>
1341
+ <option value="remote-deploy">远程部署与双模式启动</option>
1342
+ <option value="require-init">system.require_init 流程</option>
1343
+ <option value="redis">Redis 集成测试</option>
1344
+ <option value="multi-instance">模块多实例机制</option>
1345
+ <option value="scaling-control">扩缩容控制面</option>
1346
+ </select>
1347
+ <button class="btn btn-sm btn-primary" id="btn-run-integration-test">运行测试</button>
1348
+ <button class="btn btn-sm btn-secondary" id="btn-clear-integration-output">清空输出</button>
1349
+ <button class="btn btn-sm btn-secondary" id="btn-copy-integration-output">复制输出</button>
1350
+ </div>
1351
+ </div>
1352
+
1353
+ <!-- Full Test Panel -->
1354
+ <div id="full-test-panel" class="test-panel" style="display:none;">
1355
+ <div class="test-controls">
1356
+ <button class="btn btn-sm btn-primary" id="btn-run-full-test">运行完整测试</button>
1357
+ <button class="btn btn-sm btn-secondary" id="btn-clear-full-output">清空输出</button>
1358
+ <button class="btn btn-sm btn-secondary" id="btn-copy-full-output">复制输出</button>
1359
+ <button class="btn btn-sm btn-secondary" id="btn-download-report">下载报告</button>
1360
+ </div>
1361
+ </div>
1362
+
1363
+ <!-- Test Output -->
1364
+ <div class="panel">
1365
+ <div id="test-output" style="background:#1e1e1e;color:#d4d4d4;padding:15px;border-radius:4px;font-family:monospace;font-size:13px;max-height:600px;overflow-y:auto;white-space:pre-wrap;"></div>
1366
+ </div>
1367
+ </section>
1368
+
1369
+ <!-- Health Panel -->
1370
+ <section id="page-health" class="page">
1371
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;">
1372
+ <h2 class="page-title" style="margin-bottom:0;">健康检查</h2>
1373
+ <div style="display:flex;align-items:center;gap:8px;">
1374
+ <span id="health-last-update" style="font-size:12px;color:var(--gray-400);"></span>
1375
+ <button class="btn btn-sm btn-secondary" id="health-refresh">刷新</button>
1376
+ </div>
1377
+ </div>
1378
+ <!-- 系统概览条 -->
1379
+ <div class="panel" id="health-overview" style="display:flex;gap:24px;padding:14px 20px;margin-bottom:16px;font-size:13px;color:var(--gray-600);flex-wrap:wrap;">
1380
+ <span>运行时长: <strong id="health-uptime">-</strong></span>
1381
+ <span>模块总数: <strong id="health-module-count">-</strong></span>
1382
+ <span>在线: <strong id="health-online-count" style="color:var(--success);">-</strong></span>
1383
+ <span>降级: <strong id="health-degraded-count" style="color:var(--warning,#f39c12);">-</strong></span>
1384
+ <span>不健康: <strong id="health-unhealthy-count" style="color:var(--danger,#e74c3c);">-</strong></span>
1385
+ <span>总重启: <strong id="health-restart-count">-</strong></span>
1386
+ </div>
1387
+ <!-- 系统资源曲线 -->
1388
+ <div style="display:flex;gap:16px;margin-bottom:16px;">
1389
+ <div style="flex:1;border:1px solid var(--gray-200);border-radius:4px;padding:12px 16px;background:#fff;">
1390
+ <div style="display:flex;align-items:baseline;justify-content:space-between;margin-bottom:8px;">
1391
+ <span style="font-size:13px;font-weight:600;color:var(--gray-600);">CPU 使用率</span>
1392
+ <span id="health-cpu-current" style="font-size:18px;font-weight:700;color:#3498db;">-%</span>
1393
+ </div>
1394
+ <canvas id="health-cpu-chart" width="480" height="100" style="width:100%;height:100px;"></canvas>
1395
+ </div>
1396
+ <div style="flex:1;border:1px solid var(--gray-200);border-radius:4px;padding:12px 16px;background:#fff;">
1397
+ <div style="display:flex;align-items:baseline;justify-content:space-between;margin-bottom:8px;">
1398
+ <span style="font-size:13px;font-weight:600;color:var(--gray-600);">内存使用</span>
1399
+ <span id="health-mem-current" style="font-size:18px;font-weight:700;color:#27ae60;">-MB</span>
1400
+ </div>
1401
+ <canvas id="health-mem-chart" width="480" height="100" style="width:100%;height:100px;"></canvas>
1402
+ </div>
1403
+ </div>
1404
+ <!-- 模块卡片区 + 事件时间线 -->
1405
+ <div style="display:flex;gap:16px;">
1406
+ <!-- 模块健康卡片 -->
1407
+ <div style="flex:1;min-width:0;">
1408
+ <div id="health-module-cards" style="display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;">
1409
+ <div style="text-align:center;padding:40px 0;color:var(--gray-400);grid-column:1/-1;">加载中...</div>
1410
+ </div>
1411
+ </div>
1412
+ <!-- 事件时间线 -->
1413
+ <div style="width:340px;flex-shrink:0;">
1414
+ <div style="border:1px solid var(--gray-200);border-radius:4px;padding:12px 16px;background:#fff;">
1415
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;">
1416
+ <strong style="font-size:13px;">事件时间线</strong>
1417
+ <button class="btn btn-sm btn-secondary" id="health-events-more" style="font-size:11px;padding:2px 8px;">加载更多</button>
1418
+ </div>
1419
+ <div id="health-timeline" style="max-height:600px;overflow-y:auto;font-size:12px;">
1420
+ <div style="text-align:center;padding:20px 0;color:var(--gray-400);">加载中...</div>
1421
+ </div>
1422
+ </div>
1423
+ </div>
1424
+ </div>
1425
+ <!-- 模块详情展开区 -->
1426
+ <div id="health-module-detail" style="display:none;margin-top:16px;padding:16px;border:1px solid var(--gray-200);border-radius:4px;background:#fff;">
1427
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;">
1428
+ <strong id="health-detail-title" style="font-size:14px;"></strong>
1429
+ <button class="btn btn-sm btn-secondary" id="health-detail-close">关闭</button>
1430
+ </div>
1431
+ <div id="health-detail-content"></div>
1432
+ </div>
1433
+ </section>
1434
+
1435
+ <section id="page-api-ref" class="page">
1436
+ <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;">
1437
+ <h2 class="page-title" style="margin-bottom:0;">接口大全</h2>
1438
+ <div style="display:flex;align-items:center;gap:12px;">
1439
+ <span id="apiref-summary" style="font-size:13px;color:var(--gray-500);"></span>
1440
+ <input type="text" id="apiref-search" placeholder="搜索方法名、事件名..." style="padding:6px 12px;border:1px solid var(--gray-300);border-radius:4px;font-size:13px;width:280px;">
1441
+ </div>
1442
+ </div>
1443
+ <div id="apiref-module-chips" style="display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap;"></div>
1444
+ <div style="display:flex;align-items:center;gap:12px;margin-bottom:16px;">
1445
+ <div class="btn-group" id="apiref-tab-toggle">
1446
+ <button class="btn btn-sm btn-secondary active" data-tab="rpc">RPC 方法</button>
1447
+ <button class="btn btn-sm btn-secondary" data-tab="events">事件</button>
1448
+ </div>
1449
+ <div class="btn-group" id="apiref-group-toggle">
1450
+ <button class="btn btn-sm btn-secondary active" data-group="module">按模块</button>
1451
+ <button class="btn btn-sm btn-secondary" data-group="namespace">按命名空间</button>
1452
+ </div>
1453
+ </div>
1454
+ <div id="apiref-content" style="min-height:400px;">
1455
+ <div id="apiref-rpc"></div>
1456
+ <div id="apiref-events" style="display:none;"></div>
1457
+ <div id="apiref-loading" style="text-align:center;padding:60px 0;color:var(--gray-400);">加载中...</div>
1458
+ </div>
1459
+ </section>
1460
+ </div>
1461
+ </div>
1462
+
1463
+ <!-- 恢复默认值确认弹窗 -->
1464
+ <div id="reset-defaults-modal" class="modal-overlay hidden">
1465
+ <div class="modal" style="max-width:600px;">
1466
+ <div class="modal-header">
1467
+ <h3 class="modal-title">恢复默认值</h3>
1468
+ <button class="modal-close" id="reset-defaults-close">&times;</button>
1469
+ </div>
1470
+ <div class="modal-body">
1471
+ <p style="margin-bottom:16px;color:var(--gray-600);">以下配置将被恢复为默认值:</p>
1472
+ <table style="width:100%;border-collapse:collapse;">
1473
+ <thead>
1474
+ <tr style="background:var(--gray-100);border-bottom:1px solid var(--gray-300);">
1475
+ <th style="padding:8px;text-align:left;font-weight:600;">字段</th>
1476
+ <th style="padding:8px;text-align:left;font-weight:600;">当前值</th>
1477
+ <th style="padding:8px;text-align:left;font-weight:600;">默认值</th>
1478
+ </tr>
1479
+ </thead>
1480
+ <tbody id="reset-defaults-comparison">
1481
+ <!-- Dynamic content -->
1482
+ </tbody>
1483
+ </table>
1484
+ </div>
1485
+ <div class="modal-footer">
1486
+ <button class="btn btn-secondary" id="reset-defaults-cancel">取消</button>
1487
+ <button class="btn btn-primary" id="reset-defaults-confirm">确认恢复</button>
1488
+ </div>
1489
+ </div>
1490
+ </div>
1491
+
1492
+ <script src="js/dialog.js"></script>
1493
+ <script src="js/kernel-client.js?v=3"></script>
1494
+ <!-- Test Framework -->
1495
+ <script src="js/tests/test-runner.js"></script>
1496
+ <script src="js/tests/modules/kernel.js"></script>
1497
+ <script src="js/tests/modules/launcher.js"></script>
1498
+ <script src="js/tests/modules/watchdog.js"></script>
1499
+ <script src="js/tests/modules/web.js"></script>
1500
+ <script src="js/tests/modules/backup.js"></script>
1501
+ <script src="js/tests/modules/acp_channel.js"></script>
1502
+ <script src="js/tests/modules/phone_channel.js"></script>
1503
+ <script src="js/tests/modules/auth.js"></script>
1504
+ <script src="js/tests/modules/gateway.js"></script>
1505
+ <script src="js/tests/modules/redis.js"></script>
1506
+ <script src="js/tests/integration/registry-core.js"></script>
1507
+ <script src="js/tests/integration/pingpong.js"></script>
1508
+ <script src="js/tests/integration/auth.js"></script>
1509
+ <script src="js/tests/integration/full-workflow.js"></script>
1510
+ <script src="js/tests/integration/channel-interaction.js"></script>
1511
+ <script src="js/tests/integration/nested-rpc.js"></script>
1512
+ <script src="js/tests/integration/elastic-connection.js"></script>
1513
+ <script src="js/tests/integration/trace.js"></script>
1514
+ <script src="js/tests/integration/remote-deploy.js"></script>
1515
+ <script src="js/tests/integration/require-init.js"></script>
1516
+ <script src="js/tests/integration/redis.js"></script>
1517
+ <script src="js/tests/modules/multi_instance.js"></script>
1518
+ <script src="js/tests/integration/multi-instance.js"></script>
1519
+ <script src="js/tests/integration/scaling-control.js"></script>
1520
+ <script src="js/tests/index.js"></script>
1521
+ <script src="js/virtual-list.js"></script>
1522
+ <script src="js/evol-app.js?v=12"></script>
1523
+ </body>
1524
+ </html>