@agentunion/kite 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (573) hide show
  1. package/.claude/skills/kite/checklists/feature-checklist.md +496 -0
  2. package/.claude/skills/kite/references/event-patterns.md +180 -0
  3. package/.claude/skills/kite/references/health-check.md +202 -0
  4. package/.claude/skills/kite/references/http-service.md +199 -0
  5. package/.claude/skills/kite/references/module-md-spec.md +172 -0
  6. package/.claude/skills/kite/references/multi-connection.md +147 -0
  7. package/.claude/skills/kite/references/rpc-patterns.md +199 -0
  8. package/.claude/skills/kite/references/shutdown-sequence.md +146 -0
  9. package/.claude/skills/kite/references/stdin-protocol.md +147 -0
  10. package/.claude/skills/kite/references/test-center-integration.md +178 -0
  11. package/.claude/skills/kite/references/ws-lifecycle.md +301 -0
  12. package/.claude/skills/kite/skill.md +272 -0
  13. package/.claude/skills/kite/templates/go/README.md +20 -0
  14. package/.claude/skills/kite/templates/node/entry.js +134 -0
  15. package/.claude/skills/kite/templates/node/module.md +16 -0
  16. package/.claude/skills/kite/templates/node/server.js +351 -0
  17. package/.claude/skills/kite/templates/node/server_http.js +90 -0
  18. package/.claude/skills/kite/templates/python/entry.py +425 -0
  19. package/.claude/skills/kite/templates/python/module.md +26 -0
  20. package/.claude/skills/kite/templates/python/server.py +447 -0
  21. package/.claude/skills/kite/templates/python/server_http.py +433 -0
  22. package/cli.js +38 -4
  23. package/core/env_checker.py +96 -0
  24. package/docs/05-/347/237/255/344/277/241/350/256/244/350/257/201/344/270/216/347/224/250/346/210/267/344/277/241/346/201/257/346/216/245/345/217/243/346/226/207/346/241/243.md +507 -0
  25. package/docs/ACP/345/215/217/350/256/256/345/205/274/345/256/271/346/226/271/346/241/210.md +138 -0
  26. package/docs/CI/344/270/216AI/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/346/226/271/346/241/210.md +75 -0
  27. package/docs/CLI/345/274/200/345/217/221/350/256/241/345/210/222.md +595 -0
  28. package/docs/ClaudeCode/350/277/234/347/250/213/345/215/217/344/275/234/347/263/273/347/273/237-/346/212/200/346/234/257/350/257/204/344/274/260.md +535 -0
  29. package/docs/ClaudeCode/350/277/234/347/250/213/345/215/217/344/275/234/347/263/273/347/273/237/350/256/276/350/256/241.md +631 -0
  30. package/docs/Evol-App/344/275/277/347/224/250KernelClient/346/224/271/351/200/240/345/256/214/346/210/220.md +342 -0
  31. package/docs/Evol/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/346/246/202/350/246/201.md +604 -0
  32. package/docs/Evol/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/350/256/276/350/256/241.md +1708 -0
  33. package/docs/Evol/346/250/241/345/235/227/350/256/276/350/256/241/346/226/271/346/241/210.md +1154 -0
  34. package/docs/Evol/351/241/265/351/235/242/346/217/222/344/273/266/345/214/226-Evol/346/250/241/345/235/227/345/256/236/346/226/275/346/214/207/345/215/227.md +403 -0
  35. package/docs/Evol/351/241/265/351/235/242/346/217/222/344/273/266/345/214/226-/345/244/226/351/203/250/346/250/241/345/235/227/346/216/245/345/205/245/346/214/207/345/215/227.md +468 -0
  36. package/docs/HTTP-RPC/350/277/201/347/247/273/345/210/260WebSocket/350/256/241/345/210/222.md +318 -0
  37. package/docs/INDEX.md +388 -0
  38. package/docs/KITE_DOCS_GUIDE.md +33 -0
  39. package/docs/Kernel-Client-Kite-Token/346/224/257/346/214/201/345/256/236/346/226/275/345/256/214/346/210/220.md +330 -0
  40. package/docs/Kernel/344/270/273/345/212/250Ping/346/234/272/345/210/266-/346/255/243/347/241/256/345/256/236/347/216/260.md +235 -0
  41. package/docs/Kernel/344/270/273/345/212/250Ping/346/234/272/345/210/266/345/256/236/346/226/275/346/200/273/347/273/223.md +204 -0
  42. package/docs/Kite/345/256/211/350/243/205/351/227/256/351/242/230/350/247/243/345/206/263/346/226/271/346/241/210.md +362 -0
  43. package/docs/Kite/346/216/247/345/210/266/345/217/260/346/217/222/344/273/266/345/214/226/346/236/266/346/236/204/350/256/276/350/256/241-/347/273/210/346/236/201/347/233/256/346/240/207.md +721 -0
  44. package/docs/Kite/346/216/247/345/210/266/345/217/260/347/273/237/344/270/200WebSocket/346/224/271/351/200/240/346/226/271/346/241/210.md +821 -0
  45. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/01-/346/241/206/346/236/266/345/256/232/344/275/215.md +12 -0
  46. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/02-/346/240/270/345/277/203/346/246/202/345/277/265.md +341 -0
  47. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/03-/347/263/273/347/273/237/346/236/266/346/236/204.md +257 -0
  48. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/04-/346/250/241/345/235/227/350/247/204/350/214/203.md +263 -0
  49. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/05-/346/240/270/345/277/203/346/265/201/347/250/213-/346/226/260/347/211/210.md +267 -0
  50. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/05-/346/240/270/345/277/203/346/265/201/347/250/213.md +149 -0
  51. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/06-/347/233/256/345/275/225/347/273/223/346/236/204.md +231 -0
  52. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/07-/346/225/260/346/215/256/346/250/241/345/236/213.md +68 -0
  53. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/08-/346/211/251/345/261/225/346/200/247.md +34 -0
  54. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/09-/344/270/216/345/205/267/344/275/223/345/272/224/347/224/250/347/232/204/345/205/263/347/263/273.md +22 -0
  55. package/docs/Kite/346/241/206/346/236/266/350/256/276/350/256/241/README.md +46 -0
  56. package/docs/Kite/347/263/273/347/273/237/345/220/257/345/212/250/346/265/201/347/250/213.md +567 -0
  57. package/docs/Launcher/345/220/257/345/212/250/345/231/250/346/226/207/346/241/243.md +745 -0
  58. package/docs/Polyglot/350/277/220/350/241/214/346/227/266/344/270/216Clawdbot/345/205/274/345/256/271/346/200/247/350/256/276/350/256/241.md +321 -0
  59. package/docs/Redis/344/270/216/346/250/241/345/235/227/345/244/232/345/256/236/344/276/213/346/226/271/346/241/210.md +438 -0
  60. package/docs/Relay-Kite-Token/350/256/244/350/257/201/345/256/236/346/226/275/345/256/214/346/210/220.md +178 -0
  61. package/docs/Relay-Token/346/235/203/351/231/220/351/205/215/347/275/256/351/252/214/350/257/201.md +113 -0
  62. package/docs/Watchdog/345/201/245/345/272/267/346/243/200/346/237/245/344/270/216WebSocket-Ping/346/234/272/345/210/266/345/210/206/346/236/220.md +367 -0
  63. package/docs/Watchdog/350/265/204/346/272/220/347/233/221/346/216/247/347/255/226/347/225/245.md +92 -0
  64. package/docs/WebSocket/346/216/245/346/224/266/345/276/252/347/216/257/346/255/273/351/224/201/351/230/262/350/214/203/350/247/204/350/214/203.md +357 -0
  65. package/docs/WebSocket/350/277/236/346/216/245/351/237/247/346/200/247/344/270/216/351/207/215/350/277/236/346/234/272/345/210/266/345/256/214/346/225/264/346/226/271/346/241/210.md +531 -0
  66. package/docs/WebSocket/350/277/236/346/216/245/351/237/247/346/200/247/346/226/271/346/241/210.md +169 -0
  67. package/docs/WebSocket/351/207/215/350/277/236/346/234/272/345/210/266/346/265/213/350/257/225/346/212/245/345/221/212.md +169 -0
  68. package/docs/WebSocket/351/207/215/350/277/236/351/200/200/351/201/277/346/234/272/345/210/266/346/226/271/346/241/210.md +394 -0
  69. package/docs/Web/346/250/241/345/235/227/344/270/216Evol/346/250/241/345/235/227/351/207/215/346/236/204/345/210/206/346/236/220.md +521 -0
  70. package/docs/audit-api-guide.md +68 -0
  71. package/docs/audit-module-design.md +315 -0
  72. package/docs/audit-module-implementation-summary.md +149 -0
  73. package/docs/llm-context-design.md +52 -0
  74. package/docs/llm-test-enhancement-plan.md +970 -0
  75. package/docs/logs-api-guide.md +42 -0
  76. package/docs/npm/345/214/205Python/347/216/257/345/242/203/347/256/241/347/220/206/346/226/271/346/241/210.md +302 -0
  77. package/docs/npm/345/217/221/345/270/203/344/270/216CLI/344/275/277/347/224/250/346/214/207/345/215/227.md +245 -0
  78. package/docs/stdio/344/270/216/347/253/257/345/217/243/345/217/221/347/216/260/351/207/215/346/236/204.md +480 -0
  79. package/docs/web/346/250/241/345/235/227/344/270/255/350/275/254/346/234/215/345/212/241/350/256/276/350/256/241/346/226/271/346/241/210.md +449 -0
  80. package/docs//344/272/213/344/273/266/345/244/204/347/220/206/346/234/272/345/210/266.md +388 -0
  81. package/docs//344/272/213/344/273/266/345/244/204/347/220/206/350/247/204/350/214/203.md +113 -0
  82. package/docs//344/272/213/344/273/266/350/256/242/351/230/205/351/200/232/351/205/215/347/254/246/350/247/204/350/214/203.md +256 -0
  83. package/docs//344/272/213/344/273/266/351/230/237/345/210/227/345/274/271/346/200/247/347/256/241/347/220/206.md +449 -0
  84. package/docs//344/272/244/344/272/222/345/274/217/347/273/210/347/253/257/346/216/247/345/210/266/346/226/271/346/241/210.md +301 -0
  85. package/docs//344/273/243/347/220/206/345/220/257/345/212/250/345/231/250/344/270/216/345/256/271/345/231/250/345/214/226.md +140 -0
  86. package/docs//344/273/243/347/240/201/347/273/237/350/256/241/345/267/245/345/205/267/344/275/277/347/224/250/350/257/264/346/230/216.md +217 -0
  87. package/docs//344/274/230/351/233/205/351/200/200/345/207/272/350/247/204/350/214/203.md +362 -0
  88. package/docs//344/276/235/350/265/226/347/256/241/347/220/206/350/257/264/346/230/216.md +141 -0
  89. package/docs//344/277/256/345/244/215/346/235/203/351/231/220/351/227/256/351/242/230-evol-RPC/346/235/203/351/231/220.md +268 -0
  90. package/docs//345/210/240/351/231/244kernel-client-example/345/256/214/346/210/220.md +309 -0
  91. package/docs//345/210/240/351/231/244ws-management/345/256/214/346/210/220.md +418 -0
  92. package/docs//345/220/257/345/212/250/344/274/230/345/214/226/346/226/271/346/241/210.md +522 -0
  93. package/docs//345/220/257/345/212/250/344/276/235/350/265/226/344/270/216/346/216/222/345/272/217.md +105 -0
  94. package/docs//345/256/211/350/243/205/350/204/232/346/234/254/345/274/200/345/217/221/346/226/207/346/241/243.md +643 -0
  95. package/docs//345/256/214/346/225/264/345/220/257/345/212/250/346/265/201/347/250/213/350/256/276/350/256/241.md +452 -0
  96. package/docs//345/256/236/347/216/260/350/247/204/345/210/222.md +195 -0
  97. package/docs//345/277/203/350/267/263/346/234/272/345/210/266/351/207/215/346/236/204/346/200/273/347/273/223.md +166 -0
  98. package/docs//346/217/241/346/211/213/350/256/244/350/257/201/346/226/271/346/241/210-/345/256/211/345/205/250/345/256/241/346/237/245.md +176 -0
  99. package/docs//346/217/241/346/211/213/350/256/244/350/257/201/346/226/271/346/241/210.md +908 -0
  100. package/docs//346/226/207/346/241/243/346/233/264/346/226/260/346/270/205/345/215/225.md +83 -0
  101. package/docs//346/227/245/345/277/227/344/270/216/345/274/202/345/270/270/345/244/204/347/220/206/350/247/204/350/214/203.md +829 -0
  102. package/docs//346/227/245/345/277/227/350/260/203/350/257/225/345/256/236/346/210/230/346/214/207/345/215/227.md +25 -0
  103. package/docs//346/236/266/346/236/204/345/200/237/351/211/264/346/214/207/345/215/227.md +977 -0
  104. package/docs//346/236/266/346/236/204/346/224/271/351/200/240-/345/256/214/346/210/220/346/200/273/347/273/223.md +440 -0
  105. package/docs//346/236/266/346/236/204/347/216/260/347/212/266/344/270/216/347/273/210/346/236/201/347/233/256/346/240/207/345/257/271/346/257/224/345/210/206/346/236/220.md +508 -0
  106. package/docs//346/250/241/345/235/227/345/244/232/350/277/236/346/216/245/346/216/247/345/210/266/347/255/226/347/225/245.md +220 -0
  107. package/docs//346/250/241/345/235/227/345/256/211/350/243/205/346/234/272/345/210/266/350/256/276/350/256/241.md +500 -0
  108. package/docs//346/250/241/345/235/227/345/274/200/345/217/221/346/214/207/345/215/227.md +1824 -0
  109. package/docs//346/250/241/345/235/227/347/203/255/346/233/264/346/226/260.md +89 -0
  110. package/docs//346/250/241/345/235/227/350/277/234/347/250/213/351/203/250/347/275/262/345/274/200/345/217/221/350/247/204/350/214/203.md +460 -0
  111. package/docs//346/250/241/345/235/227/351/200/200/345/207/272/346/234/272/345/210/266/345/256/214/346/225/264/346/226/271/346/241/210.md +303 -0
  112. package/docs//346/250/241/345/235/227/351/205/215/347/275/256/345/212/240/350/275/275/344/270/216/347/203/255/351/207/215/350/275/275/350/247/204/350/214/203.md +369 -0
  113. package/docs//346/265/213/350/257/225/344/270/255/345/277/203/346/267/273/345/212/240/346/250/241/345/235/227/346/265/213/350/257/225/346/214/207/345/215/227.md +147 -0
  114. package/docs//347/211/210/346/234/254/351/224/201/345/256/232/347/216/257/345/242/203/347/256/241/347/220/206/346/226/271/346/241/210.md +331 -0
  115. package/docs//347/216/257/345/242/203/345/217/230/351/207/217/344/270/216/350/277/220/350/241/214/346/227/266/347/233/256/345/275/225/350/256/276/350/256/241.md +499 -0
  116. package/docs//347/216/257/345/242/203/347/256/241/347/220/206/345/256/214/346/225/264/346/226/271/346/241/210.md +334 -0
  117. package/docs//350/231/232/346/213/237/346/250/241/345/235/227/344/270/255/350/275/254/346/234/215/345/212/241/345/256/214/346/225/264/350/256/276/350/256/241.md +1496 -0
  118. package/docs//350/231/232/346/213/237/347/216/257/345/242/203/345/267/245/344/275/234/345/216/237/347/220/206.md +163 -0
  119. package/docs//350/256/241/345/210/222/347/256/241/347/220/206/345/231/250/344/275/277/347/224/250/346/214/207/345/215/227.md +196 -0
  120. package/docs//350/256/244/350/257/201/346/250/241/345/235/227/344/270/216Gateway/350/256/276/350/256/241/346/226/271/346/241/210.md +765 -0
  121. package/docs//350/277/234/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/346/227/247/347/211/210.md +1117 -0
  122. package/docs//350/277/234/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241.md +451 -0
  123. package/docs//351/207/215/346/236/204/346/234/272/345/210/266/346/270/205/345/215/225.md +192 -0
  124. package/docs//351/223/276/350/267/257/350/277/275/350/270/252/346/226/271/346/241/210.md +242 -0
  125. package/docs//351/231/215/347/272/247/347/255/226/347/225/245/350/256/276/350/256/241/346/226/271/346/241/210.md +618 -0
  126. package/extensions/agents/assistant/entry.py +113 -14
  127. package/extensions/agents/assistant/module.md +27 -22
  128. package/extensions/agents/assistant/server.py +291 -105
  129. package/extensions/channels/acp_channel/entry.py +114 -16
  130. package/extensions/channels/acp_channel/module.md +4 -0
  131. package/extensions/channels/acp_channel/server.py +396 -105
  132. package/extensions/channels/phone_channel/__init__.py +1 -0
  133. package/extensions/channels/phone_channel/entry.py +503 -0
  134. package/extensions/channels/phone_channel/module.md +31 -0
  135. package/extensions/channels/phone_channel/server.py +686 -0
  136. package/extensions/event_hub_bench/entry.py +55 -12
  137. package/extensions/event_hub_bench/module.md +27 -27
  138. package/extensions/services/audit/README.md +134 -0
  139. package/extensions/services/audit/collector.py +73 -0
  140. package/extensions/services/audit/entry.py +444 -0
  141. package/extensions/services/audit/module.md +66 -0
  142. package/extensions/services/audit/query_audit.py +111 -0
  143. package/extensions/services/audit/routes/__init__.py +1 -0
  144. package/extensions/services/audit/routes/routes_audit.py +113 -0
  145. package/extensions/services/audit/schemas/__init__.py +5 -0
  146. package/extensions/services/audit/schemas/audit_event.py +92 -0
  147. package/extensions/services/audit/server.py +542 -0
  148. package/extensions/services/audit/storage.py +95 -0
  149. package/extensions/services/auth/entry.py +1054 -0
  150. package/extensions/services/auth/module.md +31 -0
  151. package/extensions/services/auth/token_store.py +185 -0
  152. package/extensions/services/auth/verifiers/evol_account.py +101 -0
  153. package/extensions/services/auth/verifiers/kite_token.py +38 -0
  154. package/extensions/services/auth/verifiers/pairing_code.py +71 -0
  155. package/extensions/services/backup/entry.py +494 -197
  156. package/extensions/services/backup/module.md +4 -2
  157. package/extensions/services/dataclaw/api/__init__.py +0 -0
  158. package/extensions/services/dataclaw/api/admin.py +367 -0
  159. package/extensions/services/dataclaw/api/copyright.py +175 -0
  160. package/extensions/services/dataclaw/api/credits.py +177 -0
  161. package/extensions/services/dataclaw/api/data.py +179 -0
  162. package/extensions/services/dataclaw/api/demands.py +269 -0
  163. package/extensions/services/dataclaw/api/feeds.py +262 -0
  164. package/extensions/services/dataclaw/api/identity.py +505 -0
  165. package/extensions/services/dataclaw/api/notifications.py +104 -0
  166. package/extensions/services/dataclaw/api/reviews.py +138 -0
  167. package/extensions/services/dataclaw/api/search.py +153 -0
  168. package/extensions/services/dataclaw/api/subscriptions.py +157 -0
  169. package/extensions/services/dataclaw/config.json5 +96 -0
  170. package/extensions/services/dataclaw/core/__init__.py +0 -0
  171. package/extensions/services/dataclaw/core/auth.py +95 -0
  172. package/extensions/services/dataclaw/core/config.py +50 -0
  173. package/extensions/services/dataclaw/core/database.py +70 -0
  174. package/extensions/services/dataclaw/entry.py +416 -0
  175. package/extensions/services/dataclaw/gofeed/351/241/271/347/233/256/346/211/200/346/234/211/346/235/203/350/275/254/347/247/273/346/265/201/347/250/213/350/257/264/346/230/216.md +309 -0
  176. package/extensions/services/dataclaw/migrate.py +283 -0
  177. package/extensions/services/dataclaw/models/__init__.py +0 -0
  178. package/extensions/services/dataclaw/module.md +49 -0
  179. package/extensions/services/dataclaw/requirements.txt +18 -0
  180. package/extensions/services/dataclaw/server.py +759 -0
  181. package/extensions/services/dataclaw/services/__init__.py +0 -0
  182. package/extensions/services/dataclaw/services/agent_service.py +132 -0
  183. package/extensions/services/dataclaw/services/credit_service.py +235 -0
  184. package/extensions/services/dataclaw/services/email_service.py +140 -0
  185. package/extensions/services/dataclaw/services/feed_service.py +259 -0
  186. package/extensions/services/dataclaw/services/notification_service.py +209 -0
  187. package/extensions/services/dataclaw/services/oauth_service.py +275 -0
  188. package/extensions/services/dataclaw/services/pricing.py +102 -0
  189. package/extensions/services/dataclaw/services/quality.py +79 -0
  190. package/extensions/services/dataclaw/services/reputation.py +142 -0
  191. package/extensions/services/dataclaw/services/sms_service.py +174 -0
  192. package/extensions/services/dataclaw/static/css/common.css +853 -0
  193. package/extensions/services/dataclaw/static/css/themes/blue.css +42 -0
  194. package/extensions/services/dataclaw/static/css/themes/dark.css +42 -0
  195. package/extensions/services/dataclaw/static/css/themes/light.css +35 -0
  196. package/extensions/services/dataclaw/static/js/api.js +103 -0
  197. package/extensions/services/dataclaw/static/js/common.js +321 -0
  198. package/extensions/services/dataclaw/static/js/i18n.js +95 -0
  199. package/extensions/services/dataclaw/static/js/pages/admin.js +152 -0
  200. package/extensions/services/dataclaw/static/js/pages/dashboard.js +82 -0
  201. package/extensions/services/dataclaw/static/js/pages/feed-detail.js +180 -0
  202. package/extensions/services/dataclaw/static/js/pages/feed-manage.js +158 -0
  203. package/extensions/services/dataclaw/static/js/theme.js +46 -0
  204. package/extensions/services/dataclaw/static/locales/en-US.json +464 -0
  205. package/extensions/services/dataclaw/static/locales/ja-JP.json +464 -0
  206. package/extensions/services/dataclaw/static/locales/zh-CN.json +464 -0
  207. package/extensions/services/dataclaw/templates/admin/index.html +90 -0
  208. package/extensions/services/dataclaw/templates/base.html +136 -0
  209. package/extensions/services/dataclaw/templates/credits/balance.html +106 -0
  210. package/extensions/services/dataclaw/templates/credits/deposit.html +164 -0
  211. package/extensions/services/dataclaw/templates/credits/history.html +90 -0
  212. package/extensions/services/dataclaw/templates/dashboard.html +52 -0
  213. package/extensions/services/dataclaw/templates/demands/create.html +78 -0
  214. package/extensions/services/dataclaw/templates/demands/detail.html +136 -0
  215. package/extensions/services/dataclaw/templates/demands/list.html +94 -0
  216. package/extensions/services/dataclaw/templates/feeds/create.html +95 -0
  217. package/extensions/services/dataclaw/templates/feeds/detail.html +110 -0
  218. package/extensions/services/dataclaw/templates/feeds/list.html +110 -0
  219. package/extensions/services/dataclaw/templates/feeds/manage.html +88 -0
  220. package/extensions/services/dataclaw/templates/index.html +185 -0
  221. package/extensions/services/dataclaw/templates/login.html +246 -0
  222. package/extensions/services/dataclaw/templates/register.html +164 -0
  223. package/extensions/services/dataclaw/templates/settings/notifications.html +96 -0
  224. package/extensions/services/dataclaw/templates/settings/profile.html +167 -0
  225. package/extensions/services/dataclaw/templates/subscriptions/list.html +64 -0
  226. package/extensions/services/dataclaw/tests/__init__.py +0 -0
  227. package/extensions/services/dataclaw/tests/conftest.py +68 -0
  228. package/extensions/services/dataclaw/tests/integration/__init__.py +0 -0
  229. package/extensions/services/dataclaw/tests/integration/test_workflows.py +239 -0
  230. package/extensions/services/dataclaw/tests/unit/__init__.py +0 -0
  231. package/extensions/services/dataclaw/tests/unit/test_admin.py +70 -0
  232. package/extensions/services/dataclaw/tests/unit/test_copyright.py +63 -0
  233. package/extensions/services/dataclaw/tests/unit/test_credits.py +80 -0
  234. package/extensions/services/dataclaw/tests/unit/test_data.py +98 -0
  235. package/extensions/services/dataclaw/tests/unit/test_demands.py +106 -0
  236. package/extensions/services/dataclaw/tests/unit/test_feeds.py +98 -0
  237. package/extensions/services/dataclaw/tests/unit/test_identity.py +88 -0
  238. package/extensions/services/dataclaw/tests/unit/test_notifications.py +36 -0
  239. package/extensions/services/dataclaw/tests/unit/test_reviews.py +68 -0
  240. package/extensions/services/dataclaw/tests/unit/test_search.py +64 -0
  241. package/extensions/services/dataclaw/tests/unit/test_subscriptions.py +65 -0
  242. package/extensions/services/dataclaw/tests/unit/test_system.py +106 -0
  243. package/extensions/services/dataclaw/utils/__init__.py +0 -0
  244. package/extensions/services/dataclaw/utils/crypto.py +38 -0
  245. package/extensions/services/dataclaw/utils/id_generator.py +52 -0
  246. package/extensions/services/dataclaw/ws/__init__.py +0 -0
  247. package/extensions/services/dataclaw/ws/handler.py +163 -0
  248. package/extensions/services/dataclaw//345/215/217/350/256/2561-/351/241/271/347/233/256/346/235/241/344/273/266/346/216/210/346/235/203/344/270/216/350/202/241/346/235/203/345/257/271/344/273/267/345/215/217/350/256/256.md +243 -0
  249. package/extensions/services/dataclaw//345/215/217/350/256/2562-/351/241/271/347/233/256/350/264/255/344/271/260/346/235/203/344/270/216/345/244/226/345/214/205/345/247/224/346/211/230/345/274/200/345/217/221/345/215/217/350/256/256.md +434 -0
  250. package/extensions/services/evol/__init__.py +1 -0
  251. package/extensions/services/evol/async_http.py +551 -0
  252. package/extensions/services/evol/auth_manager.py +602 -443
  253. package/extensions/services/evol/config.json5 +16 -0
  254. package/extensions/services/evol/entry.py +568 -406
  255. package/extensions/services/evol/evol_api.py +969 -173
  256. package/extensions/services/evol/mfa_totp.py +77 -0
  257. package/extensions/services/evol/module.md +150 -32
  258. package/extensions/services/evol/nonce_pool.py +113 -0
  259. package/extensions/services/evol/oauth_manager.py +223 -0
  260. package/extensions/services/evol/pairing.py +3 -2
  261. package/extensions/services/evol/pairing_codes.jsonl +1 -0
  262. package/extensions/services/evol/relay.py +1031 -682
  263. package/extensions/services/evol/relay_config.json5 +85 -67
  264. package/extensions/services/evol/routes/routes_llm.py +231 -0
  265. package/extensions/services/evol/routes/routes_rpc.py +90 -89
  266. package/extensions/services/evol/routes/routes_test.py +11 -4
  267. package/extensions/services/evol/server.py +2426 -875
  268. package/extensions/services/evol/static/assets/CommissionView-Cs_ys6Gm.js +1 -0
  269. package/extensions/services/evol/static/assets/CommissionView-DACet_Oo.css +1 -0
  270. package/extensions/services/evol/static/assets/IframePage-DbO11U9G.js +1 -0
  271. package/extensions/services/evol/static/assets/IframePage-c572lT8i.css +1 -0
  272. package/extensions/services/evol/static/assets/TeamDetailView-DULrGD7k.css +1 -0
  273. package/extensions/services/evol/static/assets/TeamDetailView-gy_MBEqG.js +139 -0
  274. package/extensions/services/evol/static/assets/element-plus-Bd7pZkkM.js +63 -0
  275. package/extensions/services/evol/static/assets/index-CmMONKzG.css +1 -0
  276. package/extensions/services/evol/static/assets/index-D44bBe__.js +2 -0
  277. package/extensions/services/evol/static/assets/vue-vendor-DtF-__I4.js +29 -0
  278. package/extensions/services/evol/static/index.html +16 -781
  279. package/extensions/services/evol/static/logo.png +0 -0
  280. package/extensions/services/evol/stats_manager.py +243 -240
  281. package/extensions/services/evol/web/README.md +89 -0
  282. package/extensions/services/evol/web/build.bat +44 -0
  283. package/extensions/services/evol/web/index.html +13 -0
  284. package/extensions/services/evol/web/package-lock.json +1718 -0
  285. package/extensions/services/evol/web/package.json +26 -0
  286. package/extensions/services/evol/web/public/logo.png +0 -0
  287. package/extensions/services/evol/web/src/App.vue +7 -0
  288. package/extensions/services/evol/web/src/components/layout/AppHeader.vue +202 -0
  289. package/extensions/services/evol/web/src/components/layout/AppLayout.vue +61 -0
  290. package/extensions/services/evol/web/src/components/layout/AppSidebar.vue +115 -0
  291. package/extensions/services/evol/web/src/components/login/LoginPage.vue +271 -0
  292. package/extensions/services/evol/web/src/components/team/AddMemberModal.vue +181 -0
  293. package/extensions/services/evol/web/src/components/team/GroupTreeNode.vue +156 -0
  294. package/extensions/services/evol/web/src/components/team/TeamAlertConfig.vue +221 -0
  295. package/extensions/services/evol/web/src/components/team/TeamBillModal.vue +165 -0
  296. package/extensions/services/evol/web/src/components/team/TeamMembersAndGroups.vue +499 -0
  297. package/extensions/services/evol/web/src/components/team/TeamStatsPanel.vue +907 -0
  298. package/extensions/services/evol/web/src/components/team/TreeNode.vue +331 -0
  299. package/extensions/services/evol/web/src/components/team/stats/StatsExportProgress.vue +44 -0
  300. package/extensions/services/evol/web/src/components/team/stats/StatsHeader.vue +89 -0
  301. package/extensions/services/evol/web/src/components/team/stats/StatsMemberDetail.vue +415 -0
  302. package/extensions/services/evol/web/src/components/team/stats/StatsSummary.vue +42 -0
  303. package/extensions/services/evol/web/src/components/team/stats/helpers.ts +195 -0
  304. package/extensions/services/evol/web/src/components/team/stats/stats.css +741 -0
  305. package/extensions/services/evol/web/src/components/team/stats/useStatsApi.ts +114 -0
  306. package/extensions/services/evol/web/src/components/team/stats/useStatsCharts.ts +242 -0
  307. package/extensions/services/evol/web/src/components/team/stats/useStatsExport.ts +232 -0
  308. package/extensions/services/evol/web/src/composables/useFormatters.ts +42 -0
  309. package/extensions/services/evol/web/src/composables/useTheme.ts +52 -0
  310. package/extensions/services/evol/web/src/env.d.ts +7 -0
  311. package/extensions/services/evol/web/src/i18n/en.ts +361 -0
  312. package/extensions/services/evol/web/src/i18n/index.ts +36 -0
  313. package/extensions/services/evol/web/src/i18n/zh.ts +379 -0
  314. package/extensions/services/evol/web/src/main.ts +21 -0
  315. package/extensions/services/evol/web/src/router/index.ts +81 -0
  316. package/extensions/services/evol/web/src/services/kernel-client.ts +406 -0
  317. package/extensions/services/evol/web/src/stores/auth.ts +189 -0
  318. package/extensions/services/evol/web/src/stores/connection.ts +134 -0
  319. package/extensions/services/evol/web/src/stores/pages.ts +79 -0
  320. package/extensions/services/evol/web/src/styles/base.css +213 -0
  321. package/extensions/services/evol/web/src/styles/variables.css +138 -0
  322. package/extensions/services/evol/web/src/types/rpc.ts +35 -0
  323. package/extensions/services/evol/web/src/types/token.ts +87 -0
  324. package/extensions/services/evol/web/src/views/AccountView.vue +1532 -0
  325. package/extensions/services/evol/web/src/views/AiServiceView.vue +219 -0
  326. package/extensions/services/evol/web/src/views/CommissionView.vue +1220 -0
  327. package/extensions/services/evol/web/src/views/CreditsView.vue +131 -0
  328. package/extensions/services/evol/web/src/views/EndpointView.vue +163 -0
  329. package/extensions/services/evol/web/src/views/IframePage.vue +120 -0
  330. package/extensions/services/evol/web/src/views/TeamDetailView.vue +473 -0
  331. package/extensions/services/evol/web/src/views/TeamView.vue +332 -0
  332. package/extensions/services/evol/web/tsconfig.json +31 -0
  333. package/extensions/services/evol/web/tsconfig.node.json +10 -0
  334. package/extensions/services/evol/web/vite.config.ts +49 -0
  335. package/extensions/services/evolmem/__init__.py +0 -0
  336. package/extensions/services/evolmem/entry.py +387 -0
  337. package/extensions/services/evolmem/hooks/__init__.py +0 -0
  338. package/extensions/services/evolmem/hooks/assistant_stop.py +228 -0
  339. package/extensions/services/evolmem/hooks/common.py +76 -0
  340. package/extensions/services/evolmem/hooks/pre_tool_use.py +56 -0
  341. package/extensions/services/evolmem/hooks/session_end.py +133 -0
  342. package/extensions/services/evolmem/hooks/session_start.py +229 -0
  343. package/extensions/services/evolmem/hooks/user_prompt.py +122 -0
  344. package/extensions/services/evolmem/module.md +48 -0
  345. package/extensions/services/evolmem/prompts/00-server-info.md +28 -0
  346. package/extensions/services/evolmem/prompts/01-behavior.md +46 -0
  347. package/extensions/services/evolmem/prompts/02-summary-format.md +112 -0
  348. package/extensions/services/evolmem/prompts/03-file-query.md +92 -0
  349. package/extensions/services/evolmem/prompts/04-topic-stats.md +11 -0
  350. package/extensions/services/evolmem/prompts/05-recent-topics.md +84 -0
  351. package/extensions/services/evolmem/scripts/__init__.py +0 -0
  352. package/extensions/services/evolmem/scripts/extract_keywords.py +40 -0
  353. package/extensions/services/evolmem/scripts/search_topics.py +91 -0
  354. package/extensions/services/evolmem/server.py +641 -0
  355. package/extensions/services/gateway/entry.py +964 -0
  356. package/extensions/services/gateway/module.md +29 -0
  357. package/extensions/services/gateway/nonce_pool.py +65 -0
  358. package/extensions/services/gateway/relay.py +133 -0
  359. package/extensions/services/gateway/ws_server.py +285 -0
  360. package/extensions/services/kite_console/auth_manager.py +603 -0
  361. package/extensions/services/kite_console/config.json5 +19 -0
  362. package/extensions/services/kite_console/config_loader.py +117 -0
  363. package/extensions/services/kite_console/entry.py +528 -0
  364. package/extensions/services/kite_console/evol_api.py +179 -0
  365. package/extensions/services/kite_console/evol_config.json5 +29 -0
  366. package/extensions/services/kite_console/mfa_totp.py +77 -0
  367. package/extensions/services/kite_console/migrate_tokens.py +122 -0
  368. package/extensions/services/kite_console/module.md +37 -0
  369. package/extensions/services/kite_console/nonce_pool.py +113 -0
  370. package/extensions/services/kite_console/oauth_manager.py +223 -0
  371. package/extensions/services/kite_console/pairing.py +280 -0
  372. package/extensions/services/kite_console/pairing_codes.jsonl +2 -0
  373. package/extensions/services/kite_console/relay.py +1350 -0
  374. package/extensions/services/kite_console/relay_config.json5 +96 -0
  375. package/extensions/services/kite_console/routes/__init__.py +1 -0
  376. package/extensions/services/kite_console/routes/routes_llm.py +231 -0
  377. package/extensions/services/kite_console/routes/routes_proxy.py +115 -0
  378. package/extensions/services/kite_console/routes/routes_rpc.py +89 -0
  379. package/extensions/services/kite_console/routes/routes_test.py +68 -0
  380. package/extensions/services/kite_console/server.py +1742 -0
  381. package/extensions/services/{evol → kite_console}/static/css/style.css +656 -2
  382. package/extensions/services/kite_console/static/index.html +1524 -0
  383. package/extensions/services/{evol → kite_console}/static/js/dialog.js +11 -4
  384. package/extensions/services/kite_console/static/js/evol-app.js +7740 -0
  385. package/extensions/services/{evol/static/js/evol-app.js → kite_console/static/js/evol-app.js.backup} +2777 -1949
  386. package/extensions/services/kite_console/static/js/kernel-client.js +560 -0
  387. package/extensions/services/{evol/static/js/kernel-client.js → kite_console/static/js/kernel-client.js.backup} +41 -3
  388. package/extensions/services/{evol → kite_console}/static/js/registry-tests.js +7 -0
  389. package/extensions/services/kite_console/static/js/tests/ARCHITECTURE.md +67 -0
  390. package/extensions/services/kite_console/static/js/tests/README.md +140 -0
  391. package/extensions/services/kite_console/static/js/tests/index.js +161 -0
  392. package/extensions/services/kite_console/static/js/tests/integration/auth.js +120 -0
  393. package/extensions/services/kite_console/static/js/tests/integration/channel-interaction.js +188 -0
  394. package/extensions/services/kite_console/static/js/tests/integration/elastic-connection.js +115 -0
  395. package/extensions/services/kite_console/static/js/tests/integration/full-workflow.js +43 -0
  396. package/extensions/services/kite_console/static/js/tests/integration/multi-instance.js +304 -0
  397. package/extensions/services/kite_console/static/js/tests/integration/nested-rpc.js +266 -0
  398. package/extensions/services/kite_console/static/js/tests/integration/pingpong.js +25 -0
  399. package/extensions/services/kite_console/static/js/tests/integration/redis.js +227 -0
  400. package/extensions/services/kite_console/static/js/tests/integration/registry-core.js +52 -0
  401. package/extensions/services/kite_console/static/js/tests/integration/remote-deploy.js +85 -0
  402. package/extensions/services/kite_console/static/js/tests/integration/require-init.js +96 -0
  403. package/extensions/services/kite_console/static/js/tests/integration/scaling-control.js +193 -0
  404. package/extensions/services/kite_console/static/js/tests/integration/trace.js +109 -0
  405. package/extensions/services/kite_console/static/js/tests/modules/acp_channel.js +339 -0
  406. package/extensions/services/kite_console/static/js/tests/modules/auth.js +96 -0
  407. package/extensions/services/kite_console/static/js/tests/modules/backup.js +49 -0
  408. package/extensions/services/kite_console/static/js/tests/modules/gateway.js +41 -0
  409. package/extensions/services/kite_console/static/js/tests/modules/kernel.js +90 -0
  410. package/extensions/services/kite_console/static/js/tests/modules/launcher.js +75 -0
  411. package/extensions/services/kite_console/static/js/tests/modules/multi_instance.js +129 -0
  412. package/extensions/services/kite_console/static/js/tests/modules/phone_channel.js +364 -0
  413. package/extensions/services/kite_console/static/js/tests/modules/redis.js +178 -0
  414. package/extensions/services/kite_console/static/js/tests/modules/watchdog.js +60 -0
  415. package/extensions/services/kite_console/static/js/tests/modules/web.js +70 -0
  416. package/extensions/services/kite_console/static/js/tests/test-runner.js +123 -0
  417. package/extensions/services/kite_console/static/js/virtual-list.js +200 -0
  418. package/extensions/services/kite_console/static/test_kernel_client_token.html +352 -0
  419. package/extensions/services/kite_console/stats_manager.py +247 -0
  420. package/extensions/services/logs/README.md +215 -0
  421. package/extensions/services/logs/api_logger.py +37 -0
  422. package/extensions/services/logs/baseline.py +121 -0
  423. package/extensions/services/logs/cleaner.py +76 -0
  424. package/extensions/services/logs/entry.py +449 -0
  425. package/extensions/services/logs/formatter.py +129 -0
  426. package/extensions/services/logs/module.md +38 -0
  427. package/extensions/services/logs/quick_diagnostic.py +128 -0
  428. package/extensions/services/logs/routes/__init__.py +1 -0
  429. package/extensions/services/logs/routes/routes_logs.py +218 -0
  430. package/extensions/services/logs/routes/routes_logs.py.backup +173 -0
  431. package/extensions/services/logs/scanner.py +100 -0
  432. package/extensions/services/logs/searcher.py +263 -0
  433. package/extensions/services/logs/server.py +553 -0
  434. package/extensions/services/logs.zip +0 -0
  435. package/extensions/services/model_service/config.json5 +30 -0
  436. package/extensions/services/model_service/entry.py +620 -171
  437. package/extensions/services/model_service/module.md +11 -2
  438. package/extensions/services/proxy/__init__.py +0 -0
  439. package/extensions/services/proxy/aid_manager.py +419 -0
  440. package/extensions/services/proxy/auth_bridge.py +182 -0
  441. package/extensions/services/proxy/config_store.py +79 -0
  442. package/extensions/services/proxy/entry.py +528 -0
  443. package/extensions/services/proxy/evol/presenter/agentIdPresenter.py +2 -2
  444. package/extensions/services/proxy/evol/presenter/apikeyPresenter.py +18 -28
  445. package/extensions/services/proxy/evol/presenter/configPresenter.py +80 -1127
  446. package/extensions/services/proxy/evol/presenter/userPresenter.py +71 -477
  447. package/extensions/services/proxy/evol/server/claude_proxy_async.py +11 -7
  448. package/extensions/services/proxy/module.md +151 -0
  449. package/extensions/services/proxy/server.py +952 -271
  450. package/extensions/services/redis/ALIGNMENT_CHECKLIST.md +121 -0
  451. package/extensions/services/redis/ALIGNMENT_STATUS.md +548 -0
  452. package/extensions/services/redis/config.json5 +8 -0
  453. package/extensions/services/redis/entry.py +1509 -0
  454. package/extensions/services/redis/entry.py.backup +405 -0
  455. package/extensions/services/redis/module.md +48 -0
  456. package/extensions/services/redis/redis_builtin.py +332 -0
  457. package/extensions/services/redis/redis_external.py +164 -0
  458. package/extensions/services/testUi/entry.py +446 -0
  459. package/extensions/services/testUi/module.md +18 -0
  460. package/extensions/services/testUi/ui/cards.html +131 -0
  461. package/extensions/services/testUi/ui/index.html +22 -0
  462. package/extensions/services/testUi/ui/particles.html +143 -0
  463. package/extensions/services/watchdog/entry.py +1258 -793
  464. package/extensions/services/watchdog/module.md +2 -0
  465. package/extensions/services/watchdog/monitor.py +465 -87
  466. package/extensions/services/web/auth_manager.py +602 -0
  467. package/extensions/services/web/config.json5 +11 -0
  468. package/extensions/services/web/entry.py +598 -478
  469. package/extensions/services/web/mfa_totp.py +77 -0
  470. package/extensions/services/web/module.md +16 -13
  471. package/extensions/services/web/nonce_pool.py +113 -0
  472. package/extensions/services/web/oauth_manager.py +223 -0
  473. package/extensions/services/web/pairing.py +3 -2
  474. package/extensions/services/web/pairing_codes.jsonl +1 -0
  475. package/extensions/services/web/relay.py +442 -63
  476. package/extensions/services/web/relay_config.json5 +1 -2
  477. package/extensions/services/web/routes/routes_rpc.py +6 -6
  478. package/extensions/services/web/server.py +360 -173
  479. package/extensions/services/web/static/index.html +1752 -1738
  480. package/extensions/services/web/static/js/app.js +32 -0
  481. package/extensions/services/web/static/js/kernel-client.js +48 -9
  482. package/extensions/services/web/vendor/bluetooth/audio.py +1 -1
  483. package/extensions/services/web/vendor/config.py +2 -2
  484. package/extensions/services/web/vendor/storage/identity.py +1 -1
  485. package/kernel/entry.py +77 -23
  486. package/kernel/event_hub.py +1122 -74
  487. package/kernel/module.md +2 -1
  488. package/kernel/registry_store.py +208 -11
  489. package/kernel/rpc_router.py +1400 -491
  490. package/kernel/server.py +1021 -134
  491. package/kite_cli/builders/__init__.py +4 -0
  492. package/kite_cli/builders/base.py +67 -0
  493. package/kite_cli/builders/custom.py +31 -0
  494. package/kite_cli/builders/detector.py +56 -0
  495. package/kite_cli/builders/go.py +34 -0
  496. package/kite_cli/builders/gradle.py +41 -0
  497. package/kite_cli/builders/maven.py +36 -0
  498. package/kite_cli/builders/npm.py +44 -0
  499. package/kite_cli/builders/python.py +37 -0
  500. package/kite_cli/commands/BUILD_GUIDE.md +109 -0
  501. package/kite_cli/commands/build.py +142 -0
  502. package/kite_cli/commands/check.py +60 -0
  503. package/kite_cli/commands/config.py +156 -0
  504. package/kite_cli/commands/deps.py +58 -0
  505. package/kite_cli/commands/deps_install.py +7 -7
  506. package/kite_cli/commands/disable.py +162 -0
  507. package/kite_cli/commands/enable.py +162 -0
  508. package/kite_cli/commands/export.py +96 -0
  509. package/kite_cli/commands/import_cmd.py +110 -0
  510. package/kite_cli/commands/install.py +50 -23
  511. package/kite_cli/commands/install_skill.py +107 -0
  512. package/kite_cli/commands/list.py +128 -31
  513. package/kite_cli/commands/outdated.py +202 -0
  514. package/kite_cli/commands/search.py +33 -17
  515. package/kite_cli/commands/update.py +115 -2
  516. package/kite_cli/commands/venv_setup.py +6 -6
  517. package/kite_cli/commands/why.py +48 -0
  518. package/kite_cli/core/config_manager.py +145 -0
  519. package/kite_cli/core/downloader.py +32 -2
  520. package/kite_cli/main.py +151 -5
  521. package/kite_cli/utils/colors.py +153 -0
  522. package/kite_cli/utils/dependency_graph.py +209 -0
  523. package/kite_cli/utils/process.py +55 -0
  524. package/kite_cli/utils/progress.py +207 -0
  525. package/kite_cli/utils/table.py +101 -0
  526. package/launcher/count_lines.py +192 -43
  527. package/launcher/entry.py +4543 -2802
  528. package/launcher/logging_setup.py +54 -1
  529. package/launcher/module.md +32 -6
  530. package/launcher/module_scanner.py +93 -20
  531. package/launcher/process_manager.py +355 -76
  532. package/main.py +6 -0
  533. package/package.json +4 -1
  534. package/requirements.txt +41 -38
  535. package/scripts/auto-fix-deps.py +128 -0
  536. package/scripts/env-manager.js +25 -2
  537. package/scripts/final-test.js +78 -0
  538. package/scripts/setup-python-env.js +700 -191
  539. package/scripts/test-alluser.js +48 -0
  540. package/scripts/test-different-version.js +86 -0
  541. package/scripts/test-direct.js +63 -0
  542. package/scripts/test-extract-installer.js +28 -0
  543. package/scripts/test-install-log.js +54 -0
  544. package/scripts/test-installer.js +39 -0
  545. package/scripts/test-integration.js +250 -0
  546. package/scripts/test-real-install.js +210 -0
  547. package/scripts/test-targetdir.js +49 -0
  548. package/scripts/test-venv-real.js +47 -0
  549. package/scripts/test-venv-simple.js +57 -0
  550. package/scripts/test-wait.js +49 -0
  551. package/scripts/test-with-log.js +63 -0
  552. package/extensions/services/evol/config.yaml +0 -149
  553. package/extensions/services/evol/routes/routes_management_ws.py +0 -127
  554. package/extensions/services/evol/static/index_evol.html +0 -14
  555. package/extensions/services/evol/static/js/app.js +0 -6304
  556. package/extensions/services/evol/static/js/auth.js +0 -326
  557. package/extensions/services/evol/static/js/evol-app-fixed.js +0 -50
  558. package/extensions/services/evol/static/js/evol-app.js.bak +0 -1800
  559. package/extensions/services/evol/static/js/kernel-client-example.js +0 -228
  560. package/extensions/services/evol/static/js/main.js +0 -141
  561. package/extensions/services/evol/static/js/stats.js +0 -217
  562. package/extensions/services/evol/static/js/token-manager.js +0 -175
  563. package/extensions/services/proxy/CHANGELOG_20260308.md +0 -258
  564. package/extensions/services/proxy/_fix_prints.py +0 -133
  565. package/extensions/services/proxy/_fix_prints2.py +0 -87
  566. package/extensions/services/proxy/console_auth.py +0 -109
  567. package/extensions/services/proxy/logs/websocket.log +0 -260
  568. package/extensions/services/proxy/main.py +0 -240
  569. package/extensions/services/proxy/requirements.txt +0 -13
  570. package/extensions/services/web/config.yaml +0 -149
  571. /package/extensions/services/{evol → kite_console}/static/pairing.html +0 -0
  572. /package/extensions/services/{evol → kite_console}/static/test_registry.html +0 -0
  573. /package/extensions/services/{evol → kite_console}/static/test_relay.html +0 -0
@@ -0,0 +1,1220 @@
1
+ <template>
2
+ <div class="commission-view">
3
+ <h2 class="page-title">{{ t('commission.title') }}</h2>
4
+
5
+ <!-- 结算账户概览 -->
6
+ <div class="account-overview">
7
+ <div class="account-card">
8
+ <div class="account-label">{{ t('commission.commissionBalance') }}</div>
9
+ <div class="account-value primary">{{ formatCredits(account.commissionBalance) }}</div>
10
+ </div>
11
+ <div class="account-card">
12
+ <div class="account-label">{{ t('commission.totalCommission') }}</div>
13
+ <div class="account-value">{{ formatCredits(account.totalCommission) }}</div>
14
+ </div>
15
+ <div class="account-card">
16
+ <div class="account-label">{{ t('commission.totalWithdrawn') }}</div>
17
+ <div class="account-value">{{ formatCredits(account.totalWithdrawn) }}</div>
18
+ </div>
19
+ <div class="account-card" v-if="account.withdrawEnabled !== undefined">
20
+ <div class="account-label">{{ t('commission.exchangeRate') }}</div>
21
+ <div class="account-value small">{{ t('commission.exchangeRateDesc', { n: account.exchangeRate || '-' }) }}</div>
22
+ </div>
23
+ </div>
24
+
25
+ <!-- Tab 切换 -->
26
+ <div class="commission-tabs">
27
+ <div class="tab-item" :class="{ active: activeTab === 'activity' }" @click="activeTab = 'activity'">
28
+ {{ t('commission.currentActivity') }}
29
+ </div>
30
+ <div class="tab-item" :class="{ active: activeTab === 'summary' }" @click="activeTab = 'summary'">
31
+ {{ t('commission.summary') }}
32
+ </div>
33
+ <div class="tab-item" :class="{ active: activeTab === 'records' }" @click="activeTab = 'records'">
34
+ {{ t('commission.records') }}
35
+ </div>
36
+ <div class="tab-item" :class="{ active: activeTab === 'withdraw' }" @click="activeTab = 'withdraw'">
37
+ {{ t('commission.transfer') }} / {{ t('commission.withdraw') }}
38
+ </div>
39
+ <div class="tab-item" :class="{ active: activeTab === 'withdrawals' }" @click="activeTab = 'withdrawals'">
40
+ {{ t('commission.withdrawals') }}
41
+ </div>
42
+ </div>
43
+
44
+ <!-- Tab 内容 -->
45
+ <div class="tab-content">
46
+
47
+ <!-- 活动参与 -->
48
+ <div v-if="activeTab === 'activity'" class="tab-panel">
49
+ <!-- 当前参与状态 -->
50
+ <div v-if="participation" class="current-participation">
51
+ <div class="section-title">{{ t('commission.currentActivity') }}</div>
52
+ <div class="participation-card">
53
+ <div class="participation-info">
54
+ <div class="participation-name">{{ getActivityName(participation.activityId) }}</div>
55
+ <div class="participation-meta">
56
+ {{ t('commission.joinTime') }}: {{ formatTime(participation.joinTime) }}
57
+ </div>
58
+ </div>
59
+ <button class="btn btn-danger" @click="handleQuit">{{ t('commission.quitActivity') }}</button>
60
+ </div>
61
+ </div>
62
+ <div v-else class="empty-state">
63
+ <div class="empty-text">{{ t('commission.notJoined') }}</div>
64
+ </div>
65
+
66
+ <!-- 活动列表 -->
67
+ <div class="section-title" style="margin-top: 24px">{{ t('commission.activities') }}</div>
68
+ <div v-if="loadingActivities" class="loading">{{ t('common.loading') }}</div>
69
+ <div v-else-if="activities.length === 0" class="empty">{{ t('commission.noActivities') }}</div>
70
+ <div v-else class="activities-list">
71
+ <div v-for="act in activities" :key="act.id" class="activity-card">
72
+ <div class="activity-header">
73
+ <div class="activity-name">{{ act.activityName }}</div>
74
+ <span class="activity-badge" :class="'badge-' + (act.visibility || '').toLowerCase()">
75
+ {{ getVisibilityLabel(act.visibility) }}
76
+ </span>
77
+ </div>
78
+ <div class="activity-desc">{{ act.activityDesc }}</div>
79
+ <div class="activity-details">
80
+ <div class="detail-item">
81
+ <span class="detail-label">{{ t('commission.commissionMode') }}</span>
82
+ <span class="detail-value">
83
+ {{ act.commissionMode === 'FIXED' ? t('commission.modeFixed') : t('commission.modeLadder') }}
84
+ <template v-if="act.commissionMode === 'FIXED' && act.fixedRate">
85
+ ({{ act.fixedRate }}%)
86
+ </template>
87
+ </span>
88
+ </div>
89
+ <div class="detail-item" v-if="act.startTime">
90
+ <span class="detail-label">{{ t('commission.activityTime') }}</span>
91
+ <span class="detail-value">{{ formatDate(act.startTime) }} ~ {{ formatDate(act.endTime) }}</span>
92
+ </div>
93
+ <div class="detail-item">
94
+ <span class="detail-label">{{ t('commission.maxCommission') }}</span>
95
+ <span class="detail-value">
96
+ {{ act.maxCommissionPerInviter ? formatCredits(act.maxCommissionPerInviter) : t('commission.noLimit') }}
97
+ </span>
98
+ </div>
99
+ <!-- 阶梯规则 -->
100
+ <div v-if="act.commissionMode === 'LADDER' && act.ladderRules" class="ladder-rules">
101
+ <div class="detail-label">{{ t('commission.modeLadder') }}</div>
102
+ <div class="ladder-table">
103
+ <div v-for="(rule, idx) in parseLadderRules(act.ladderRules)" :key="idx" class="ladder-row">
104
+ <span>{{ formatCredits(rule.min) }} ~ {{ rule.max ? formatCredits(rule.max) : '∞' }}</span>
105
+ <span class="ladder-rate">{{ rule.rate }}%</span>
106
+ </div>
107
+ </div>
108
+ </div>
109
+ </div>
110
+ <div class="activity-actions">
111
+ <!-- 邀请码输入(INVITE_ONLY) -->
112
+ <div v-if="act.visibility === 'INVITE_ONLY' && !participation" class="invite-code-input">
113
+ <input
114
+ v-model="inviteCodeMap[act.id]"
115
+ :placeholder="t('commission.inviteCodePlaceholder')"
116
+ class="input-field"
117
+ />
118
+ </div>
119
+ <button
120
+ v-if="!participation || participation.activityId !== act.id"
121
+ class="btn btn-primary"
122
+ :disabled="!!participation"
123
+ @click="handleJoin(act)"
124
+ >
125
+ {{ t('commission.joinActivity') }}
126
+ </button>
127
+ <span v-else class="joined-badge">{{ t('commission.currentActivity') }}</span>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ </div>
132
+
133
+ <!-- 分润汇总 -->
134
+ <div v-if="activeTab === 'summary'" class="tab-panel">
135
+ <div v-if="summaryList.length === 0" class="empty">{{ t('commission.noSummary') }}</div>
136
+ <div v-else class="summary-list">
137
+ <div v-for="item in summaryList" :key="item.activityId" class="summary-card">
138
+ <div class="summary-header">{{ getActivityName(item.activityId) }}</div>
139
+ <div class="summary-grid">
140
+ <div class="summary-item">
141
+ <div class="summary-label">{{ t('commission.commissionCredits') }}</div>
142
+ <div class="summary-value primary">{{ formatCredits(item.totalCommissionCredits) }}</div>
143
+ </div>
144
+ <div class="summary-item">
145
+ <div class="summary-label">{{ t('commission.totalConsumed') }}</div>
146
+ <div class="summary-value">{{ formatCredits(item.totalConsumedCredits) }}</div>
147
+ </div>
148
+ <div class="summary-item">
149
+ <div class="summary-label">{{ t('commission.totalInvitees') }}</div>
150
+ <div class="summary-value">{{ item.totalInviteeCount }}</div>
151
+ </div>
152
+ <div class="summary-item">
153
+ <div class="summary-label">{{ t('commission.totalSettles') }}</div>
154
+ <div class="summary-value">{{ item.totalSettleCount }}</div>
155
+ </div>
156
+ <div class="summary-item" v-if="item.lastSettleDate">
157
+ <div class="summary-label">{{ t('commission.lastSettle') }}</div>
158
+ <div class="summary-value">{{ item.lastSettleDate }}</div>
159
+ </div>
160
+ </div>
161
+ </div>
162
+ </div>
163
+ </div>
164
+
165
+ <!-- 分润明细 -->
166
+ <div v-if="activeTab === 'records'" class="tab-panel">
167
+ <div class="filter-bar">
168
+ <input type="date" v-model="recordStartDate" class="input-field" />
169
+ <input type="date" v-model="recordEndDate" class="input-field" />
170
+ <button class="btn btn-ghost" @click="loadRecords">{{ t('common.confirm') }}</button>
171
+ </div>
172
+ <div v-if="loadingRecords" class="loading">{{ t('common.loading') }}</div>
173
+ <div v-else-if="records.length === 0" class="empty">{{ t('commission.noRecords') }}</div>
174
+ <div v-else class="records-list">
175
+ <div v-for="rec in records" :key="rec.id" class="record-card">
176
+ <div class="record-header">
177
+ <span class="record-date">{{ rec.settleDate }}</span>
178
+ <span class="record-status" :class="'status-' + rec.status">{{ getSettleStatus(rec.status) }}</span>
179
+ </div>
180
+ <div class="record-details">
181
+ <div class="record-row">
182
+ <span class="record-label">{{ t('commission.consumeSource') }}</span>
183
+ <span>{{ rec.consumeSource === 'PERSONAL' ? t('commission.sourcePersonal') : t('commission.sourceTeam') }}</span>
184
+ </div>
185
+ <div class="record-row">
186
+ <span class="record-label">{{ t('commission.consumedCredits') }}</span>
187
+ <span class="mono">{{ formatCredits(rec.consumedCredits) }}</span>
188
+ </div>
189
+ <div class="record-row">
190
+ <span class="record-label">{{ t('commission.commissionRate') }}</span>
191
+ <span>{{ rec.commissionRate }}%</span>
192
+ </div>
193
+ <div class="record-row">
194
+ <span class="record-label">{{ t('commission.commissionCredits') }}</span>
195
+ <span class="mono primary-text">+{{ formatCredits(rec.commissionCredits) }}</span>
196
+ </div>
197
+ <div class="record-row" v-if="rec.grantTime">
198
+ <span class="record-label">{{ t('commission.grantTime') }}</span>
199
+ <span>{{ formatTime(rec.grantTime) }}</span>
200
+ </div>
201
+ <div class="record-row" v-if="rec.failReason">
202
+ <span class="record-label">{{ t('commission.statusFailed') }}</span>
203
+ <span class="error-text">{{ rec.failReason }}</span>
204
+ </div>
205
+ </div>
206
+ </div>
207
+ </div>
208
+ </div>
209
+
210
+ <!-- 划转 / 提现 -->
211
+ <div v-if="activeTab === 'withdraw'" class="tab-panel">
212
+ <div class="withdraw-section">
213
+ <!-- 划转 -->
214
+ <div class="withdraw-card">
215
+ <div class="withdraw-title">{{ t('commission.transfer') }}</div>
216
+ <div class="withdraw-desc">{{ t('commission.transferDesc') }}</div>
217
+ <div class="withdraw-form">
218
+ <input
219
+ v-model.number="transferAmount"
220
+ type="number"
221
+ :placeholder="t('commission.creditsAmountPlaceholder')"
222
+ class="input-field"
223
+ min="1"
224
+ />
225
+ <button class="btn btn-primary" @click="handleTransfer" :disabled="!transferAmount || transferAmount <= 0">
226
+ {{ t('commission.transfer') }}
227
+ </button>
228
+ </div>
229
+ </div>
230
+
231
+ <!-- 提现 -->
232
+ <div class="withdraw-card">
233
+ <div class="withdraw-title">{{ t('commission.withdraw') }}</div>
234
+ <div class="withdraw-desc">{{ t('commission.withdrawDesc') }}</div>
235
+ <div v-if="!account.withdrawEnabled" class="withdraw-disabled">
236
+ {{ t('commission.withdrawDisabled') }}
237
+ </div>
238
+ <template v-else>
239
+ <div class="withdraw-info">
240
+ <span>{{ t('commission.minWithdraw') }}: {{ formatCredits(Number(account.minWithdrawCredits) || 0) }}</span>
241
+ <span>{{ t('commission.exchangeRate') }}: {{ t('commission.exchangeRateDesc', { n: account.exchangeRate || '-' }) }}</span>
242
+ </div>
243
+ <div class="withdraw-form">
244
+ <input
245
+ v-model.number="withdrawAmount"
246
+ type="number"
247
+ :placeholder="t('commission.creditsAmountPlaceholder')"
248
+ class="input-field"
249
+ min="1"
250
+ />
251
+ <div v-if="withdrawAmount > 0 && account.exchangeRate" class="cash-preview">
252
+ ≈ ¥{{ (withdrawAmount / Number(account.exchangeRate)).toFixed(2) }}
253
+ </div>
254
+ <button class="btn btn-primary" @click="handleWithdraw" :disabled="!withdrawAmount || withdrawAmount <= 0">
255
+ {{ t('commission.withdraw') }}
256
+ </button>
257
+ </div>
258
+ </template>
259
+ </div>
260
+ </div>
261
+ </div>
262
+
263
+ <!-- 提现/划转记录 -->
264
+ <div v-if="activeTab === 'withdrawals'" class="tab-panel">
265
+ <div class="filter-bar">
266
+ <input type="date" v-model="withdrawalStartDate" class="input-field" />
267
+ <input type="date" v-model="withdrawalEndDate" class="input-field" />
268
+ <button class="btn btn-ghost" @click="loadWithdrawals">{{ t('common.confirm') }}</button>
269
+ </div>
270
+ <div v-if="loadingWithdrawals" class="loading">{{ t('common.loading') }}</div>
271
+ <div v-else-if="withdrawals.length === 0" class="empty">{{ t('commission.noWithdrawals') }}</div>
272
+ <div v-else class="records-list">
273
+ <div v-for="w in withdrawals" :key="w.id" class="record-card">
274
+ <div class="record-header">
275
+ <span class="record-date">{{ formatTime(w.createTime) }}</span>
276
+ <span class="record-status" :class="'status-' + w.status">{{ getWithdrawStatus(w.status) }}</span>
277
+ </div>
278
+ <div class="record-details">
279
+ <div class="record-row">
280
+ <span class="record-label">{{ t('commission.withdrawType') }}</span>
281
+ <span>{{ w.withdrawType === 'TRANSFER' ? t('commission.typeTransfer') : t('commission.typeCash') }}</span>
282
+ </div>
283
+ <div class="record-row">
284
+ <span class="record-label">{{ t('commission.creditsAmount') }}</span>
285
+ <span class="mono">{{ formatCredits(w.creditsAmount) }}</span>
286
+ </div>
287
+ <div class="record-row" v-if="w.withdrawType === 'CASH' && w.cashAmount != null">
288
+ <span class="record-label">{{ t('commission.cashAmount') }}</span>
289
+ <span class="mono">¥{{ Number(w.cashAmount).toFixed(2) }}</span>
290
+ </div>
291
+ <div class="record-row">
292
+ <span class="record-label">{{ t('commission.balanceBefore') }}</span>
293
+ <span class="mono">{{ formatCredits(w.balanceBefore) }}</span>
294
+ </div>
295
+ <div class="record-row">
296
+ <span class="record-label">{{ t('commission.balanceAfter') }}</span>
297
+ <span class="mono">{{ formatCredits(w.balanceAfter) }}</span>
298
+ </div>
299
+ <div class="record-row" v-if="w.failReason">
300
+ <span class="record-label">{{ t('commission.statusFailure') }}</span>
301
+ <span class="error-text">{{ w.failReason }}</span>
302
+ </div>
303
+ </div>
304
+ </div>
305
+ </div>
306
+ </div>
307
+ </div>
308
+ </div>
309
+ </template>
310
+
311
+ <script setup lang="ts">
312
+ import { ref, reactive, computed, onMounted, watch } from 'vue'
313
+ import { useAuthStore } from '@/stores/auth'
314
+ import { useConnectionStore } from '@/stores/connection'
315
+ import { useI18n } from '@/i18n'
316
+ import { ElMessage, ElMessageBox } from 'element-plus'
317
+
318
+ const authStore = useAuthStore()
319
+ const connectionStore = useConnectionStore()
320
+ const { t } = useI18n()
321
+
322
+ const activeTab = ref('activity')
323
+
324
+ // 活动相关
325
+ const activities = ref<any[]>([])
326
+ const loadingActivities = ref(false)
327
+ const participation = ref<any>(null)
328
+ const inviteCodeMap = reactive<Record<number, string>>({})
329
+
330
+ // 结算账户
331
+ const account = reactive({
332
+ commissionBalance: 0,
333
+ totalCommission: 0,
334
+ totalWithdrawn: 0,
335
+ exchangeRate: '',
336
+ minWithdrawCredits: '',
337
+ withdrawEnabled: false,
338
+ })
339
+
340
+ // 汇总
341
+ const summaryList = ref<any[]>([])
342
+
343
+ // 明细
344
+ const records = ref<any[]>([])
345
+ const loadingRecords = ref(false)
346
+ const recordStartDate = ref('')
347
+ const recordEndDate = ref('')
348
+
349
+ // 划转/提现
350
+ const transferAmount = ref<number | null>(null)
351
+ const withdrawAmount = ref<number | null>(null)
352
+
353
+ // 提现记录
354
+ const withdrawals = ref<any[]>([])
355
+ const loadingWithdrawals = ref(false)
356
+ const withdrawalStartDate = ref('')
357
+ const withdrawalEndDate = ref('')
358
+
359
+ // === 工具方法 ===
360
+
361
+ function formatCredits(val: number | null | undefined): string {
362
+ if (val == null) return '0'
363
+ return val.toLocaleString()
364
+ }
365
+
366
+ function formatTime(time: string): string {
367
+ if (!time) return ''
368
+ return new Date(time).toLocaleString()
369
+ }
370
+
371
+ function formatDate(time: string): string {
372
+ if (!time) return ''
373
+ return time.split(' ')[0]
374
+ }
375
+
376
+ function getVisibilityLabel(v: string): string {
377
+ const map: Record<string, string> = {
378
+ PUBLIC: t('commission.visibilityPublic'),
379
+ VIP: t('commission.visibilityVip'),
380
+ INVITE_ONLY: t('commission.visibilityInviteOnly'),
381
+ }
382
+ return map[v] || v
383
+ }
384
+
385
+ function getSettleStatus(s: number): string {
386
+ const map: Record<number, string> = {
387
+ 0: t('commission.statusPending'),
388
+ 1: t('commission.statusGranted'),
389
+ 2: t('commission.statusFailed'),
390
+ 3: t('commission.statusCancelled'),
391
+ }
392
+ return map[s] || String(s)
393
+ }
394
+
395
+ function getWithdrawStatus(s: number): string {
396
+ const map: Record<number, string> = {
397
+ 0: t('commission.statusProcessing'),
398
+ 1: t('commission.statusSuccess'),
399
+ 2: t('commission.statusFailure'),
400
+ 3: t('commission.statusCancelled'),
401
+ }
402
+ return map[s] || String(s)
403
+ }
404
+
405
+ function getActivityName(activityId: number): string {
406
+ const act = activities.value.find(a => a.id === activityId)
407
+ return act?.activityName || `Activity #${activityId}`
408
+ }
409
+
410
+ function parseLadderRules(rulesStr: string): any[] {
411
+ try {
412
+ return JSON.parse(rulesStr)
413
+ } catch {
414
+ return []
415
+ }
416
+ }
417
+
418
+ // === API 调用 ===
419
+
420
+ async function callRpc(method: string, params: Record<string, any> = {}) {
421
+ return await connectionStore.callRpc<any>(method, {
422
+ kiteToken: authStore.kiteToken,
423
+ ...params,
424
+ })
425
+ }
426
+
427
+ async function loadActivities() {
428
+ loadingActivities.value = true
429
+ try {
430
+ const result = await callRpc('evol.commission.get_activities')
431
+ if (result.success) {
432
+ activities.value = result.data || []
433
+ }
434
+ } catch (e: any) {
435
+ console.error('Load activities failed:', e)
436
+ } finally {
437
+ loadingActivities.value = false
438
+ }
439
+ }
440
+
441
+ async function loadParticipation() {
442
+ try {
443
+ const result = await callRpc('evol.commission.get_participation')
444
+ if (result.success) {
445
+ participation.value = result.data || null
446
+ }
447
+ } catch (e: any) {
448
+ console.error('Load participation failed:', e)
449
+ }
450
+ }
451
+
452
+ async function loadAccount() {
453
+ try {
454
+ const result = await callRpc('evol.commission.get_account')
455
+ if (result.success && result.data) {
456
+ Object.assign(account, result.data)
457
+ }
458
+ } catch (e: any) {
459
+ console.error('Load account failed:', e)
460
+ }
461
+ }
462
+
463
+ async function loadSummary() {
464
+ try {
465
+ const result = await callRpc('evol.commission.get_summary')
466
+ if (result.success) {
467
+ summaryList.value = result.data || []
468
+ }
469
+ } catch (e: any) {
470
+ console.error('Load summary failed:', e)
471
+ }
472
+ }
473
+
474
+ async function loadRecords() {
475
+ loadingRecords.value = true
476
+ try {
477
+ const params: Record<string, any> = {}
478
+ if (recordStartDate.value) params.startDate = recordStartDate.value
479
+ if (recordEndDate.value) params.endDate = recordEndDate.value
480
+ const result = await callRpc('evol.commission.get_records', params)
481
+ if (result.success) {
482
+ records.value = result.data || []
483
+ }
484
+ } catch (e: any) {
485
+ console.error('Load records failed:', e)
486
+ } finally {
487
+ loadingRecords.value = false
488
+ }
489
+ }
490
+
491
+ async function loadWithdrawals() {
492
+ loadingWithdrawals.value = true
493
+ try {
494
+ const params: Record<string, any> = {}
495
+ if (withdrawalStartDate.value) params.startDate = withdrawalStartDate.value
496
+ if (withdrawalEndDate.value) params.endDate = withdrawalEndDate.value
497
+ const result = await callRpc('evol.commission.get_withdrawals', params)
498
+ if (result.success) {
499
+ withdrawals.value = result.data || []
500
+ }
501
+ } catch (e: any) {
502
+ console.error('Load withdrawals failed:', e)
503
+ } finally {
504
+ loadingWithdrawals.value = false
505
+ }
506
+ }
507
+
508
+ // === 操作 ===
509
+
510
+ async function handleJoin(act: any) {
511
+ try {
512
+ const params: Record<string, any> = { activityId: act.id }
513
+ if (act.visibility === 'INVITE_ONLY') {
514
+ const code = inviteCodeMap[act.id]
515
+ if (!code) {
516
+ ElMessage.warning(t('commission.inviteCodePlaceholder'))
517
+ return
518
+ }
519
+ params.inviteCode = code
520
+ }
521
+ const result = await callRpc('evol.commission.join', params)
522
+ if (result.success) {
523
+ ElMessage.success(result.msg || t('commission.joinSuccess'))
524
+ await loadParticipation()
525
+ } else {
526
+ ElMessage.error(result.msg || t('common.error'))
527
+ }
528
+ } catch (e: any) {
529
+ ElMessage.error(e.message || t('common.error'))
530
+ }
531
+ }
532
+
533
+ async function handleQuit() {
534
+ try {
535
+ await ElMessageBox.confirm(t('commission.confirmQuit'), t('common.confirm'), {
536
+ confirmButtonText: t('common.confirm'),
537
+ cancelButtonText: t('common.cancel'),
538
+ type: 'warning',
539
+ })
540
+ } catch {
541
+ return
542
+ }
543
+
544
+ try {
545
+ const result = await callRpc('evol.commission.quit')
546
+ if (result.success) {
547
+ ElMessage.success(result.msg || t('commission.quitSuccess'))
548
+ participation.value = null
549
+ } else {
550
+ ElMessage.error(result.msg || t('common.error'))
551
+ }
552
+ } catch (e: any) {
553
+ ElMessage.error(e.message || t('common.error'))
554
+ }
555
+ }
556
+
557
+ async function handleTransfer() {
558
+ if (!transferAmount.value || transferAmount.value <= 0) return
559
+ try {
560
+ const result = await callRpc('evol.commission.transfer', { creditsAmount: transferAmount.value })
561
+ if (result.success) {
562
+ ElMessage.success(result.msg || t('commission.transferSuccess'))
563
+ transferAmount.value = null
564
+ await loadAccount()
565
+ } else {
566
+ ElMessage.error(result.msg || t('common.error'))
567
+ }
568
+ } catch (e: any) {
569
+ ElMessage.error(e.message || t('common.error'))
570
+ }
571
+ }
572
+
573
+ async function handleWithdraw() {
574
+ if (!withdrawAmount.value || withdrawAmount.value <= 0) return
575
+ try {
576
+ const result = await callRpc('evol.commission.withdraw', { creditsAmount: withdrawAmount.value })
577
+ if (result.success) {
578
+ ElMessage.success(result.msg || t('commission.withdrawSuccess'))
579
+ withdrawAmount.value = null
580
+ await loadAccount()
581
+ } else {
582
+ ElMessage.error(result.msg || t('common.error'))
583
+ }
584
+ } catch (e: any) {
585
+ ElMessage.error(e.message || t('common.error'))
586
+ }
587
+ }
588
+
589
+ // === 初始化 ===
590
+
591
+ async function loadAll() {
592
+ if (!authStore.kiteToken || connectionStore.status !== 'connected') return
593
+ await Promise.all([
594
+ loadActivities(),
595
+ loadParticipation(),
596
+ loadAccount(),
597
+ loadSummary(),
598
+ ])
599
+ }
600
+
601
+ onMounted(() => {
602
+ loadAll()
603
+ })
604
+
605
+ watch(() => connectionStore.status, (s) => {
606
+ if (s === 'connected') setTimeout(loadAll, 500)
607
+ })
608
+
609
+ watch(activeTab, (tab) => {
610
+ if (tab === 'records' && records.value.length === 0) loadRecords()
611
+ else if (tab === 'withdrawals' && withdrawals.value.length === 0) loadWithdrawals()
612
+ })
613
+ </script>
614
+
615
+ <style scoped>
616
+ .commission-view {
617
+ max-width: 1000px;
618
+ margin: 0 auto;
619
+ }
620
+
621
+ /* 结算账户概览 */
622
+ .account-overview {
623
+ display: grid;
624
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
625
+ gap: 16px;
626
+ margin-bottom: 24px;
627
+ }
628
+
629
+ .account-card {
630
+ background: var(--panel-bg);
631
+ backdrop-filter: var(--panel-blur);
632
+ -webkit-backdrop-filter: var(--panel-blur);
633
+ border-radius: var(--radius-lg);
634
+ padding: 24px;
635
+ box-shadow: var(--panel-shadow);
636
+ border: 1px solid var(--border-color);
637
+ text-align: center;
638
+ }
639
+
640
+ .account-label {
641
+ font-size: 12px;
642
+ font-weight: 600;
643
+ color: var(--text-muted);
644
+ text-transform: uppercase;
645
+ letter-spacing: 0.06em;
646
+ margin-bottom: 8px;
647
+ }
648
+
649
+ .account-value {
650
+ font-size: 28px;
651
+ font-weight: 700;
652
+ font-family: 'Spline Sans Mono', monospace;
653
+ color: var(--text-primary);
654
+ }
655
+
656
+ .account-value.primary {
657
+ color: var(--primary);
658
+ }
659
+
660
+ .account-value.small {
661
+ font-size: 16px;
662
+ }
663
+
664
+ /* Tab 切换 */
665
+ .commission-tabs {
666
+ display: flex;
667
+ gap: 8px;
668
+ border-bottom: 1px solid var(--border-color);
669
+ padding: 0;
670
+ overflow-x: auto;
671
+ -webkit-overflow-scrolling: touch;
672
+ scrollbar-width: none;
673
+ }
674
+
675
+ .commission-tabs::-webkit-scrollbar {
676
+ display: none;
677
+ }
678
+
679
+ .tab-item {
680
+ padding: 12px 20px;
681
+ text-align: center;
682
+ font-size: 15px;
683
+ font-weight: 600;
684
+ white-space: nowrap;
685
+ flex-shrink: 0;
686
+ color: var(--text-muted);
687
+ cursor: pointer;
688
+ transition: all 0.2s;
689
+ border-bottom: 2px solid transparent;
690
+ position: relative;
691
+ bottom: -1px;
692
+ background: transparent;
693
+ }
694
+
695
+ .tab-item:hover {
696
+ color: var(--text-primary);
697
+ }
698
+
699
+ .tab-item.active {
700
+ color: var(--primary);
701
+ border-bottom-color: var(--primary);
702
+ }
703
+
704
+ /* Tab 内容 */
705
+ .tab-content {
706
+ background: var(--panel-bg);
707
+ backdrop-filter: var(--panel-blur);
708
+ -webkit-backdrop-filter: var(--panel-blur);
709
+ border-radius: var(--radius-lg);
710
+ padding: 32px;
711
+ box-shadow: var(--panel-shadow);
712
+ border: 1px solid var(--border-color);
713
+ min-height: 400px;
714
+ }
715
+
716
+ .tab-panel {
717
+ animation: fadeIn 0.3s;
718
+ }
719
+
720
+ @keyframes fadeIn {
721
+ from { opacity: 0; transform: translateY(8px); }
722
+ to { opacity: 1; transform: translateY(0); }
723
+ }
724
+
725
+ .section-title {
726
+ font-size: 16px;
727
+ font-weight: 700;
728
+ color: var(--text-primary);
729
+ margin-bottom: 16px;
730
+ }
731
+
732
+ /* 活动卡片 */
733
+ .activities-list {
734
+ display: flex;
735
+ flex-direction: column;
736
+ gap: 16px;
737
+ }
738
+
739
+ .activity-card {
740
+ background: var(--btn-ghost-bg);
741
+ border-radius: var(--radius);
742
+ border: 1px solid var(--border-color);
743
+ padding: 24px;
744
+ transition: background 0.2s;
745
+ }
746
+
747
+ .activity-card:hover {
748
+ background: var(--border-color);
749
+ }
750
+
751
+ .activity-header {
752
+ display: flex;
753
+ align-items: center;
754
+ justify-content: space-between;
755
+ margin-bottom: 8px;
756
+ }
757
+
758
+ .activity-name {
759
+ font-size: 17px;
760
+ font-weight: 700;
761
+ color: var(--text-primary);
762
+ }
763
+
764
+ .activity-badge {
765
+ padding: 4px 12px;
766
+ border-radius: var(--radius-pill);
767
+ font-size: 12px;
768
+ font-weight: 600;
769
+ letter-spacing: 0.04em;
770
+ }
771
+
772
+ .badge-public {
773
+ background: rgba(34, 197, 94, 0.15);
774
+ color: #22c55e;
775
+ }
776
+
777
+ .badge-vip {
778
+ background: linear-gradient(135deg, #fbbf24, #f59e0b);
779
+ color: #422006;
780
+ }
781
+
782
+ .badge-invite_only {
783
+ background: rgba(139, 92, 246, 0.15);
784
+ color: #8b5cf6;
785
+ }
786
+
787
+ .activity-desc {
788
+ font-size: 14px;
789
+ color: var(--text-secondary);
790
+ margin-bottom: 16px;
791
+ line-height: 1.5;
792
+ }
793
+
794
+ .activity-details {
795
+ display: flex;
796
+ flex-direction: column;
797
+ gap: 8px;
798
+ margin-bottom: 16px;
799
+ }
800
+
801
+ .detail-item {
802
+ display: flex;
803
+ justify-content: space-between;
804
+ align-items: center;
805
+ font-size: 14px;
806
+ }
807
+
808
+ .detail-label {
809
+ color: var(--text-muted);
810
+ font-weight: 600;
811
+ font-size: 13px;
812
+ }
813
+
814
+ .detail-value {
815
+ color: var(--text-primary);
816
+ font-weight: 500;
817
+ }
818
+
819
+ .ladder-rules {
820
+ margin-top: 8px;
821
+ }
822
+
823
+ .ladder-table {
824
+ margin-top: 8px;
825
+ display: flex;
826
+ flex-direction: column;
827
+ gap: 4px;
828
+ }
829
+
830
+ .ladder-row {
831
+ display: flex;
832
+ justify-content: space-between;
833
+ padding: 6px 12px;
834
+ background: var(--panel-bg);
835
+ border-radius: 6px;
836
+ font-size: 13px;
837
+ font-family: 'Spline Sans Mono', monospace;
838
+ }
839
+
840
+ .ladder-rate {
841
+ color: var(--primary);
842
+ font-weight: 700;
843
+ }
844
+
845
+ .activity-actions {
846
+ display: flex;
847
+ align-items: center;
848
+ gap: 12px;
849
+ margin-top: 8px;
850
+ }
851
+
852
+ .invite-code-input {
853
+ flex: 1;
854
+ max-width: 240px;
855
+ }
856
+
857
+ .joined-badge {
858
+ padding: 8px 20px;
859
+ border-radius: var(--radius-pill);
860
+ background: rgba(34, 197, 94, 0.15);
861
+ color: #22c55e;
862
+ font-size: 14px;
863
+ font-weight: 600;
864
+ }
865
+
866
+ /* 当前参与 */
867
+ .current-participation {
868
+ margin-bottom: 16px;
869
+ }
870
+
871
+ .participation-card {
872
+ display: flex;
873
+ align-items: center;
874
+ justify-content: space-between;
875
+ padding: 20px 24px;
876
+ background: rgba(34, 197, 94, 0.08);
877
+ border: 1px solid rgba(34, 197, 94, 0.2);
878
+ border-radius: var(--radius);
879
+ }
880
+
881
+ .participation-name {
882
+ font-size: 16px;
883
+ font-weight: 700;
884
+ color: var(--text-primary);
885
+ }
886
+
887
+ .participation-meta {
888
+ font-size: 13px;
889
+ color: var(--text-secondary);
890
+ margin-top: 4px;
891
+ }
892
+
893
+ .empty-state {
894
+ text-align: center;
895
+ padding: 32px;
896
+ margin-bottom: 16px;
897
+ }
898
+
899
+ .empty-text {
900
+ color: var(--text-muted);
901
+ font-size: 15px;
902
+ }
903
+
904
+ /* 汇总 */
905
+ .summary-list {
906
+ display: flex;
907
+ flex-direction: column;
908
+ gap: 16px;
909
+ }
910
+
911
+ .summary-card {
912
+ background: var(--btn-ghost-bg);
913
+ border-radius: var(--radius);
914
+ border: 1px solid var(--border-color);
915
+ padding: 24px;
916
+ }
917
+
918
+ .summary-header {
919
+ font-size: 16px;
920
+ font-weight: 700;
921
+ color: var(--text-primary);
922
+ margin-bottom: 16px;
923
+ }
924
+
925
+ .summary-grid {
926
+ display: grid;
927
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
928
+ gap: 16px;
929
+ }
930
+
931
+ .summary-item {
932
+ text-align: center;
933
+ }
934
+
935
+ .summary-label {
936
+ font-size: 12px;
937
+ font-weight: 600;
938
+ color: var(--text-muted);
939
+ text-transform: uppercase;
940
+ letter-spacing: 0.04em;
941
+ margin-bottom: 4px;
942
+ }
943
+
944
+ .summary-value {
945
+ font-size: 20px;
946
+ font-weight: 700;
947
+ font-family: 'Spline Sans Mono', monospace;
948
+ color: var(--text-primary);
949
+ }
950
+
951
+ .summary-value.primary {
952
+ color: var(--primary);
953
+ }
954
+
955
+ /* 筛选栏 */
956
+ .filter-bar {
957
+ display: flex;
958
+ gap: 12px;
959
+ margin-bottom: 20px;
960
+ align-items: center;
961
+ flex-wrap: wrap;
962
+ }
963
+
964
+ /* 明细记录 */
965
+ .records-list {
966
+ display: flex;
967
+ flex-direction: column;
968
+ gap: 12px;
969
+ }
970
+
971
+ .record-card {
972
+ background: var(--btn-ghost-bg);
973
+ border-radius: var(--radius);
974
+ border: 1px solid var(--border-color);
975
+ padding: 18px 22px;
976
+ }
977
+
978
+ .record-header {
979
+ display: flex;
980
+ justify-content: space-between;
981
+ align-items: center;
982
+ margin-bottom: 12px;
983
+ }
984
+
985
+ .record-date {
986
+ font-size: 15px;
987
+ font-weight: 600;
988
+ color: var(--text-primary);
989
+ font-family: 'Spline Sans Mono', monospace;
990
+ }
991
+
992
+ .record-status {
993
+ padding: 3px 10px;
994
+ border-radius: var(--radius-pill);
995
+ font-size: 12px;
996
+ font-weight: 600;
997
+ }
998
+
999
+ .status-0 {
1000
+ background: rgba(234, 179, 8, 0.15);
1001
+ color: #eab308;
1002
+ }
1003
+
1004
+ .status-1 {
1005
+ background: rgba(34, 197, 94, 0.15);
1006
+ color: #22c55e;
1007
+ }
1008
+
1009
+ .status-2 {
1010
+ background: rgba(239, 68, 68, 0.15);
1011
+ color: #ef4444;
1012
+ }
1013
+
1014
+ .status-3 {
1015
+ background: rgba(156, 163, 175, 0.15);
1016
+ color: #9ca3af;
1017
+ }
1018
+
1019
+ .record-details {
1020
+ display: flex;
1021
+ flex-direction: column;
1022
+ gap: 6px;
1023
+ }
1024
+
1025
+ .record-row {
1026
+ display: flex;
1027
+ justify-content: space-between;
1028
+ align-items: center;
1029
+ font-size: 14px;
1030
+ }
1031
+
1032
+ .record-label {
1033
+ color: var(--text-muted);
1034
+ font-weight: 600;
1035
+ font-size: 13px;
1036
+ }
1037
+
1038
+ .mono {
1039
+ font-family: 'Spline Sans Mono', monospace;
1040
+ }
1041
+
1042
+ .primary-text {
1043
+ color: var(--primary);
1044
+ font-weight: 700;
1045
+ }
1046
+
1047
+ .error-text {
1048
+ color: var(--error, #ef4444);
1049
+ }
1050
+
1051
+ /* 划转/提现 */
1052
+ .withdraw-section {
1053
+ display: flex;
1054
+ flex-direction: column;
1055
+ gap: 24px;
1056
+ }
1057
+
1058
+ .withdraw-card {
1059
+ background: var(--btn-ghost-bg);
1060
+ border-radius: var(--radius);
1061
+ border: 1px solid var(--border-color);
1062
+ padding: 28px;
1063
+ }
1064
+
1065
+ .withdraw-title {
1066
+ font-size: 17px;
1067
+ font-weight: 700;
1068
+ color: var(--text-primary);
1069
+ margin-bottom: 8px;
1070
+ }
1071
+
1072
+ .withdraw-desc {
1073
+ font-size: 14px;
1074
+ color: var(--text-secondary);
1075
+ margin-bottom: 20px;
1076
+ line-height: 1.5;
1077
+ }
1078
+
1079
+ .withdraw-disabled {
1080
+ padding: 16px;
1081
+ text-align: center;
1082
+ color: var(--text-muted);
1083
+ font-size: 14px;
1084
+ background: var(--panel-bg);
1085
+ border-radius: 8px;
1086
+ }
1087
+
1088
+ .withdraw-info {
1089
+ display: flex;
1090
+ gap: 24px;
1091
+ margin-bottom: 16px;
1092
+ font-size: 13px;
1093
+ color: var(--text-secondary);
1094
+ }
1095
+
1096
+ .withdraw-form {
1097
+ display: flex;
1098
+ align-items: center;
1099
+ gap: 12px;
1100
+ flex-wrap: wrap;
1101
+ }
1102
+
1103
+ .cash-preview {
1104
+ font-size: 16px;
1105
+ font-weight: 700;
1106
+ color: var(--primary);
1107
+ font-family: 'Spline Sans Mono', monospace;
1108
+ }
1109
+
1110
+ /* 通用元素 */
1111
+ .input-field {
1112
+ padding: 10px 16px;
1113
+ border-radius: 10px;
1114
+ border: 1px solid var(--border-color);
1115
+ background: var(--panel-bg);
1116
+ color: var(--text-primary);
1117
+ font-size: 14px;
1118
+ font-family: inherit;
1119
+ outline: none;
1120
+ transition: border-color 0.2s;
1121
+ }
1122
+
1123
+ .input-field:focus {
1124
+ border-color: var(--primary);
1125
+ }
1126
+
1127
+ .btn {
1128
+ display: inline-flex;
1129
+ align-items: center;
1130
+ justify-content: center;
1131
+ gap: 8px;
1132
+ padding: 10px 22px;
1133
+ border-radius: var(--radius-pill);
1134
+ font-size: 14px;
1135
+ font-weight: 600;
1136
+ cursor: pointer;
1137
+ transition: all 0.2s;
1138
+ border: 1px solid transparent;
1139
+ font-family: inherit;
1140
+ white-space: nowrap;
1141
+ }
1142
+
1143
+ .btn:disabled {
1144
+ opacity: 0.5;
1145
+ cursor: not-allowed;
1146
+ }
1147
+
1148
+ .btn-primary {
1149
+ background: var(--primary);
1150
+ color: #fff;
1151
+ border-color: var(--primary);
1152
+ }
1153
+
1154
+ .btn-primary:hover:not(:disabled) {
1155
+ filter: brightness(1.1);
1156
+ transform: translateY(-1px);
1157
+ }
1158
+
1159
+ .btn-danger {
1160
+ background: rgba(239, 68, 68, 0.1);
1161
+ color: #ef4444;
1162
+ border-color: rgba(239, 68, 68, 0.3);
1163
+ }
1164
+
1165
+ .btn-danger:hover:not(:disabled) {
1166
+ background: rgba(239, 68, 68, 0.2);
1167
+ }
1168
+
1169
+ .btn-ghost {
1170
+ background: var(--btn-ghost-bg);
1171
+ color: var(--btn-ghost-text);
1172
+ border-color: var(--border-color);
1173
+ }
1174
+
1175
+ .btn-ghost:hover:not(:disabled) {
1176
+ background: var(--border-color);
1177
+ }
1178
+
1179
+ .loading, .empty {
1180
+ text-align: center;
1181
+ padding: 40px;
1182
+ color: var(--text-muted);
1183
+ }
1184
+
1185
+ @media (max-width: 768px) {
1186
+ .account-overview {
1187
+ grid-template-columns: repeat(2, 1fr);
1188
+ }
1189
+
1190
+ .tab-content {
1191
+ padding: 24px 16px;
1192
+ }
1193
+
1194
+ .activity-header {
1195
+ flex-direction: column;
1196
+ align-items: flex-start;
1197
+ gap: 8px;
1198
+ }
1199
+
1200
+ .participation-card {
1201
+ flex-direction: column;
1202
+ gap: 16px;
1203
+ align-items: flex-start;
1204
+ }
1205
+
1206
+ .filter-bar {
1207
+ flex-direction: column;
1208
+ }
1209
+
1210
+ .withdraw-form {
1211
+ flex-direction: column;
1212
+ align-items: stretch;
1213
+ }
1214
+
1215
+ .withdraw-info {
1216
+ flex-direction: column;
1217
+ gap: 8px;
1218
+ }
1219
+ }
1220
+ </style>