@agentunion/kite 1.5.0 → 1.6.1

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 (574) 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/__init__.py +9 -1
  492. package/kite_cli/builders/__init__.py +4 -0
  493. package/kite_cli/builders/base.py +67 -0
  494. package/kite_cli/builders/custom.py +31 -0
  495. package/kite_cli/builders/detector.py +56 -0
  496. package/kite_cli/builders/go.py +34 -0
  497. package/kite_cli/builders/gradle.py +41 -0
  498. package/kite_cli/builders/maven.py +36 -0
  499. package/kite_cli/builders/npm.py +44 -0
  500. package/kite_cli/builders/python.py +37 -0
  501. package/kite_cli/commands/BUILD_GUIDE.md +109 -0
  502. package/kite_cli/commands/build.py +142 -0
  503. package/kite_cli/commands/check.py +60 -0
  504. package/kite_cli/commands/config.py +156 -0
  505. package/kite_cli/commands/deps.py +58 -0
  506. package/kite_cli/commands/deps_install.py +7 -7
  507. package/kite_cli/commands/disable.py +162 -0
  508. package/kite_cli/commands/enable.py +162 -0
  509. package/kite_cli/commands/export.py +96 -0
  510. package/kite_cli/commands/import_cmd.py +110 -0
  511. package/kite_cli/commands/install.py +50 -23
  512. package/kite_cli/commands/install_skill.py +107 -0
  513. package/kite_cli/commands/list.py +128 -31
  514. package/kite_cli/commands/outdated.py +202 -0
  515. package/kite_cli/commands/search.py +33 -17
  516. package/kite_cli/commands/update.py +115 -2
  517. package/kite_cli/commands/venv_setup.py +6 -6
  518. package/kite_cli/commands/why.py +48 -0
  519. package/kite_cli/core/config_manager.py +145 -0
  520. package/kite_cli/core/downloader.py +32 -2
  521. package/kite_cli/main.py +153 -7
  522. package/kite_cli/utils/colors.py +153 -0
  523. package/kite_cli/utils/dependency_graph.py +209 -0
  524. package/kite_cli/utils/process.py +55 -0
  525. package/kite_cli/utils/progress.py +207 -0
  526. package/kite_cli/utils/table.py +101 -0
  527. package/launcher/count_lines.py +192 -43
  528. package/launcher/entry.py +4543 -2802
  529. package/launcher/logging_setup.py +54 -1
  530. package/launcher/module.md +32 -6
  531. package/launcher/module_scanner.py +93 -20
  532. package/launcher/process_manager.py +355 -76
  533. package/main.py +6 -0
  534. package/package.json +4 -1
  535. package/requirements.txt +41 -38
  536. package/scripts/auto-fix-deps.py +128 -0
  537. package/scripts/env-manager.js +25 -2
  538. package/scripts/final-test.js +78 -0
  539. package/scripts/setup-python-env.js +700 -191
  540. package/scripts/test-alluser.js +48 -0
  541. package/scripts/test-different-version.js +86 -0
  542. package/scripts/test-direct.js +63 -0
  543. package/scripts/test-extract-installer.js +28 -0
  544. package/scripts/test-install-log.js +54 -0
  545. package/scripts/test-installer.js +39 -0
  546. package/scripts/test-integration.js +250 -0
  547. package/scripts/test-real-install.js +210 -0
  548. package/scripts/test-targetdir.js +49 -0
  549. package/scripts/test-venv-real.js +47 -0
  550. package/scripts/test-venv-simple.js +57 -0
  551. package/scripts/test-wait.js +49 -0
  552. package/scripts/test-with-log.js +63 -0
  553. package/extensions/services/evol/config.yaml +0 -149
  554. package/extensions/services/evol/routes/routes_management_ws.py +0 -127
  555. package/extensions/services/evol/static/index_evol.html +0 -14
  556. package/extensions/services/evol/static/js/app.js +0 -6304
  557. package/extensions/services/evol/static/js/auth.js +0 -326
  558. package/extensions/services/evol/static/js/evol-app-fixed.js +0 -50
  559. package/extensions/services/evol/static/js/evol-app.js.bak +0 -1800
  560. package/extensions/services/evol/static/js/kernel-client-example.js +0 -228
  561. package/extensions/services/evol/static/js/main.js +0 -141
  562. package/extensions/services/evol/static/js/stats.js +0 -217
  563. package/extensions/services/evol/static/js/token-manager.js +0 -175
  564. package/extensions/services/proxy/CHANGELOG_20260308.md +0 -258
  565. package/extensions/services/proxy/_fix_prints.py +0 -133
  566. package/extensions/services/proxy/_fix_prints2.py +0 -87
  567. package/extensions/services/proxy/console_auth.py +0 -109
  568. package/extensions/services/proxy/logs/websocket.log +0 -260
  569. package/extensions/services/proxy/main.py +0 -240
  570. package/extensions/services/proxy/requirements.txt +0 -13
  571. package/extensions/services/web/config.yaml +0 -149
  572. /package/extensions/services/{evol → kite_console}/static/pairing.html +0 -0
  573. /package/extensions/services/{evol → kite_console}/static/test_registry.html +0 -0
  574. /package/extensions/services/{evol → kite_console}/static/test_relay.html +0 -0
@@ -1,175 +0,0 @@
1
- /**
2
- * Token Management
3
- * Handles token listing, revocation, and statistics via WebSocket RPC
4
- */
5
-
6
- // Load tokens on page load
7
- async function loadTokens() {
8
- console.log('[evol] loadTokens() called');
9
-
10
- // 立即显示加载中
11
- const tbody = document.getElementById('tokens-tbody');
12
- tbody.innerHTML = `
13
- <tr><td colspan="6" class="text-muted" style="text-align:center;padding:40px;">
14
- 加载中...
15
- </td></tr>
16
- `;
17
-
18
- try {
19
- // Use kernel client to call RPC
20
- if (!kernelClient || !kernelClient.connected) {
21
- console.error('[evol] kernelClient not ready:', { kernelClient, connected: kernelClient?.connected });
22
- throw new Error('WebSocket 未连接');
23
- }
24
-
25
- console.log('[evol] Calling evol.list_tokens...');
26
- const result = await kernelClient.call('evol.list_tokens', {});
27
- console.log('[evol] Got result:', result);
28
- renderTokens(result.tokens || []);
29
- } catch (err) {
30
- console.error('[evol] Failed to load tokens:', err);
31
-
32
- // 根据错误类型显示不同的提示
33
- let errorMsg = err.message;
34
- if (errorMsg.includes('Permission denied')) {
35
- errorMsg = '权限不足:当前用户没有查看 Token 的权限';
36
- } else if (errorMsg.includes('not connected') || errorMsg.includes('未连接')) {
37
- errorMsg = 'WebSocket 未连接,请刷新页面重试';
38
- }
39
-
40
- tbody.innerHTML = `
41
- <tr><td colspan="6" class="text-danger" style="text-align:center;padding:40px;">
42
- 加载失败: ${errorMsg}
43
- </td></tr>
44
- `;
45
- }
46
- }
47
-
48
- // Render tokens table
49
- function renderTokens(tokens) {
50
- const tbody = document.getElementById('tokens-tbody');
51
-
52
- if (tokens.length === 0) {
53
- tbody.innerHTML = `
54
- <tr><td colspan="6" class="text-muted" style="text-align:center;padding:40px;">
55
- 暂无 Token
56
- </td></tr>
57
- `;
58
- return;
59
- }
60
-
61
- tbody.innerHTML = tokens.map(token => {
62
- const isExpired = new Date(token.expires_at) < new Date();
63
- const statusClass = isExpired ? 'text-danger' : 'text-success';
64
- const statusText = isExpired ? '已过期' : '活跃';
65
-
66
- // Mask token for security (show first 8 and last 4 chars)
67
- const maskedToken = token.token.length > 12
68
- ? `${token.token.substring(0, 8)}...${token.token.substring(token.token.length - 4)}`
69
- : token.token;
70
-
71
- return `
72
- <tr>
73
- <td style="font-family:monospace;font-size:12px;" title="${token.token}">${maskedToken}</td>
74
- <td><span class="badge badge-${getRoleBadgeClass(token.role)}">${token.role}</span></td>
75
- <td style="font-size:12px;">${formatDateTime(token.paired_at)}</td>
76
- <td style="font-size:12px;">${formatDateTime(token.expires_at)}</td>
77
- <td><span class="${statusClass}">${statusText}</span></td>
78
- <td>
79
- <button class="btn btn-sm btn-danger" onclick="revokeToken('${token.token}')" ${isExpired ? 'disabled' : ''}>
80
- 吊销
81
- </button>
82
- </td>
83
- </tr>
84
- `;
85
- }).join('');
86
- }
87
-
88
- // Get role badge class
89
- function getRoleBadgeClass(role) {
90
- const classes = {
91
- 'admin': 'primary',
92
- 'operator': 'warning',
93
- 'viewer': 'secondary'
94
- };
95
- return classes[role] || 'secondary';
96
- }
97
-
98
- // Format datetime
99
- function formatDateTime(isoString) {
100
- if (!isoString) return '-';
101
- const date = new Date(isoString);
102
- return date.toLocaleString('zh-CN', {
103
- year: 'numeric',
104
- month: '2-digit',
105
- day: '2-digit',
106
- hour: '2-digit',
107
- minute: '2-digit'
108
- });
109
- }
110
-
111
- // Revoke token
112
- async function revokeToken(token) {
113
- try {
114
- if (!kernelClient || !kernelClient.connected) {
115
- throw new Error('WebSocket 未连接');
116
- }
117
-
118
- // 立即变灰并禁用
119
- const row = event.target.closest('tr');
120
- if (row) {
121
- row.style.opacity = '0.3';
122
- row.style.pointerEvents = 'none';
123
- }
124
-
125
- // 后台调用 RPC 吊销
126
- await kernelClient.call('evol.revoke_token', { token });
127
-
128
- } catch (err) {
129
- console.error('[evol] Failed to revoke token:', err);
130
-
131
- // 失败后恢复该行
132
- const row = event.target.closest('tr');
133
- if (row) {
134
- row.style.opacity = '1';
135
- row.style.pointerEvents = 'auto';
136
- }
137
-
138
- // 显示错误提示
139
- const errorMsg = err.message.includes('Permission denied')
140
- ? '权限不足:无法吊销 Token'
141
- : `吊销失败: ${err.message}`;
142
-
143
- console.error('[evol]', errorMsg);
144
- }
145
- }
146
-
147
- // Refresh tokens
148
- function refreshTokens() {
149
- loadTokens();
150
- }
151
-
152
- // Auto-load tokens when modules page is shown
153
- document.addEventListener('DOMContentLoaded', () => {
154
- // Load tokens when switching to modules page
155
- const modulesNav = document.querySelector('[data-page="modules"]');
156
- if (modulesNav) {
157
- modulesNav.addEventListener('click', () => {
158
- // Wait a bit for page switch, then load tokens
159
- setTimeout(() => {
160
- console.log('[evol] Modules page clicked, loading tokens...');
161
- loadTokens();
162
- }, 100);
163
- });
164
- }
165
-
166
- // Wait for kernelClient to be ready before loading tokens
167
- window.addEventListener('kernelClientReady', () => {
168
- console.log('[evol] kernelClient ready');
169
- // Load tokens if modules page is active on load
170
- if (document.getElementById('page-modules').classList.contains('active')) {
171
- console.log('[evol] Modules page is active, loading tokens...');
172
- loadTokens();
173
- }
174
- });
175
- });
@@ -1,258 +0,0 @@
1
- # Evol Proxy 服务修改说明
2
-
3
- ## 修改日期
4
- 2026-03-08
5
-
6
- ## 修改内容
7
-
8
- ### 1. 端口改为系统自动分配
9
-
10
- **修改文件:**
11
- - `main.py`
12
- - `server.py`
13
-
14
- **改动说明:**
15
-
16
- 原来使用固定端口 12655,容易导致端口冲突。现在改为:
17
- - 使用 `port=0` 让系统自动分配可用端口
18
- - 在启动前先获取一个可用端口
19
- - 启动后显示实际使用的端口号
20
-
21
- **实现方式:**
22
-
23
- ```python
24
- # 获取系统分配的可用端口
25
- import socket
26
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
27
- sock.bind(('', 0))
28
- actual_port = sock.getsockname()[1]
29
- sock.close()
30
-
31
- # 使用该端口启动服务器
32
- await run_server(port=actual_port)
33
- ```
34
-
35
- ### 2. 登录后自动拉取模型列表和用户信息
36
-
37
- **修改文件:**
38
- - `main.py`
39
-
40
- **新增功能:**
41
-
42
- 在 AID 上线成功后,自动执行以下操作:
43
-
44
- 1. **拉取模型列表**
45
- - 调用 `get_models_list()` 获取可用模型
46
- - 显示模型数量和前 5 个模型名称
47
- - 示例输出:
48
- ```
49
- [Models] Found 15 available models:
50
- - gpt-4
51
- - gpt-3.5-turbo
52
- - claude-3-opus
53
- - claude-3-sonnet
54
- - gemini-pro
55
- ... and 10 more
56
- ```
57
-
58
- 2. **获取用户信息**
59
- - 调用 `userPresenter.get_user_info()` 获取用户信息
60
- - 显示手机号和用户 ID
61
- - 示例输出:
62
- ```
63
- [User] Logged in as: 138****1234
64
- [User] User ID: user_abc123
65
- ```
66
-
67
- **代码位置:**
68
-
69
- 在 `async_main()` 函数中,Step 3.6 部分:
70
-
71
- ```python
72
- # Step 3.6: 拉取模型列表和用户信息
73
- print("\n[Info] Fetching models and user info...")
74
- try:
75
- # 拉取模型列表
76
- from evol.server.openclaw_proxy import get_models_list
77
- models_data = get_models_list()
78
- model_count = len(models_data.get("data", []))
79
- print(f"[Models] Found {model_count} available models:")
80
- for model in models_data.get("data", [])[:5]:
81
- print(f" - {model.get('id', 'unknown')}")
82
- if model_count > 5:
83
- print(f" ... and {model_count - 5} more")
84
-
85
- # 获取用户信息
86
- from evol.presenter.userPresenter import userPresenter
87
- user_info = userPresenter.get_user_info()
88
- if user_info:
89
- print(f"[User] Logged in as: {user_info.get('phone', 'unknown')}")
90
- print(f"[User] User ID: {user_info.get('id', 'unknown')}")
91
-
92
- except Exception as e:
93
- print(f"[Info] Warning: 获取信息失败: {e}")
94
- ```
95
-
96
- ## 启动流程变化
97
-
98
- ### 修改前
99
-
100
- ```
101
- 1. 初始化配置目录
102
- 2. 检查本地 token
103
- 3. 若无有效 token → 控制台登录
104
- 4. 同步用户信息 & AID 上线
105
- 5. 获取 Evol 本地密钥
106
- 6. 启动 FastAPI 服务器(固定端口 12655)
107
- ```
108
-
109
- ### 修改后
110
-
111
- ```
112
- 1. 初始化配置目录
113
- 2. 检查本地 token
114
- 3. 若无有效 token → 控制台登录
115
- 4. 同步用户信息 & AID 上线
116
- 5. 获取 Evol 本地密钥
117
- 6. 拉取模型列表和用户信息 ← 新增
118
- 7. 启动 FastAPI 服务器(系统自动分配端口)← 修改
119
- ```
120
-
121
- ## 输出示例
122
-
123
- ### 修改前
124
-
125
- ```
126
- ============================================================
127
- Evol Sample Backend
128
- Port: 12655
129
- ============================================================
130
-
131
- [Init] Config dir: C:\Users\xxx\.evol
132
- [Auth] Token valid, skip login
133
- [AID] Starting AID login...
134
- Evol: aid_xxx is online
135
- [Key] Evol API Key: evol-xxx
136
-
137
- [Server] Starting on port 12655...
138
- [Server] ANTHROPIC_BASE_URL = http://127.0.0.1:12655/claude-proxy
139
- [Server] OPENAI_BASE_URL = http://127.0.0.1:12655/openclaw-proxy/v1
140
- [Server] Health check = http://127.0.0.1:12655/health
141
- [Server] Evol API Key = evol-xxx
142
-
143
- Press Ctrl+C to stop.
144
- ```
145
-
146
- ### 修改后
147
-
148
- ```
149
- ============================================================
150
- Evol Sample Backend
151
- Port: Auto-assigned by system
152
- ============================================================
153
-
154
- [Init] Config dir: C:\Users\xxx\.evol
155
- [Auth] Token valid, skip login
156
- [AID] Starting AID login...
157
- Evol: aid_xxx is online
158
- [Key] Evol API Key: evol-xxx
159
-
160
- [Info] Fetching models and user info...
161
- [Models] Found 15 available models:
162
- - gpt-4
163
- - gpt-3.5-turbo
164
- - claude-3-opus
165
- - claude-3-sonnet
166
- - gemini-pro
167
- ... and 10 more
168
- [User] Logged in as: 138****1234
169
- [User] User ID: user_abc123
170
-
171
- [Server] Starting server...
172
-
173
- [Server] Server will start on port 54321
174
- [Server] ANTHROPIC_BASE_URL = http://127.0.0.1:54321/claude-proxy
175
- [Server] OPENAI_BASE_URL = http://127.0.0.1:54321/openclaw-proxy/v1
176
- [Server] Health check = http://127.0.0.1:54321/health
177
- [Server] Evol API Key = evol-xxx
178
-
179
- Press Ctrl+C to stop.
180
- ```
181
-
182
- ## 优点
183
-
184
- ### 1. 端口自动分配
185
-
186
- - **避免端口冲突** - 不会与其他服务冲突
187
- - **支持多实例** - 可以同时运行多个代理服务
188
- - **更灵活** - 适应不同的部署环境
189
-
190
- ### 2. 自动拉取信息
191
-
192
- - **验证登录状态** - 确认模型列表可以正常获取
193
- - **显示可用模型** - 用户一目了然有哪些模型可用
194
- - **确认用户身份** - 显示当前登录的用户信息
195
- - **便于调试** - 启动时就能发现配置问题
196
-
197
- ## 注意事项
198
-
199
- 1. **端口号变化** - 每次启动端口可能不同,需要从启动日志中获取
200
- 2. **防火墙规则** - 如果需要外部访问,需要动态配置防火墙
201
- 3. **错误处理** - 如果拉取模型列表失败,只会显示警告,不会中断启动
202
-
203
- ## 测试建议
204
-
205
- 1. **基本功能测试**
206
- ```bash
207
- # 启动服务
208
- python main.py
209
-
210
- # 查看启动日志,获取实际端口(假设是 54321)
211
- # 测试健康检查
212
- curl http://127.0.0.1:54321/health
213
-
214
- # 测试模型列表
215
- curl http://127.0.0.1:54321/openclaw-proxy/v1/models \
216
- -H "Authorization: Bearer evol-xxx"
217
- ```
218
-
219
- 2. **多实例测试**
220
- ```bash
221
- # 同时启动多个实例,验证端口不冲突
222
- python main.py &
223
- python main.py &
224
- ```
225
-
226
- 3. **端口冲突测试**
227
- ```bash
228
- # 验证不会出现端口占用错误
229
- # 之前固定端口时可能出现的问题现在应该不会发生
230
- ```
231
-
232
- ## 回滚方案
233
-
234
- 如果需要回滚到固定端口模式,修改 `main.py`:
235
-
236
- ```python
237
- # 改回固定端口
238
- PORT = 12655 # 或其他固定端口
239
-
240
- # 恢复端口清理逻辑
241
- kill_port(PORT)
242
-
243
- # 直接使用固定端口启动
244
- await run_server(port=PORT)
245
- ```
246
-
247
- ## 相关文件
248
-
249
- - `main.py` - 主程序入口
250
- - `server.py` - FastAPI 服务器
251
- - `console_auth.py` - 控制台认证
252
- - `evol/server/openclaw_proxy.py` - OpenClaw 代理实现
253
- - `evol/presenter/userPresenter.py` - 用户信息管理
254
-
255
- ---
256
-
257
- **修改者:** Claude (Kite Assistant)
258
- **审核者:** 待审核
@@ -1,133 +0,0 @@
1
- """
2
- Temporary script to replace print() with logger calls in openclaw_proxy.py and claude_proxy_async.py.
3
- Delete this file after running.
4
- """
5
- import re
6
- import sys
7
-
8
- def classify_message(msg_text):
9
- """Classify a print message into logger level based on content."""
10
- error_keywords = ['❌', '失败', '异常', 'error', 'Error', '严重错误', '错误']
11
- warning_keywords = ['⚠️', '警告']
12
- info_keywords = ['成功', '已初始化', '已启动', '已停止', '已注册', '已禁用', '已清理',
13
- '刷新完成', '加载成功', '上线', '完成']
14
-
15
- for kw in error_keywords:
16
- if kw in msg_text:
17
- return 'error'
18
- for kw in warning_keywords:
19
- if kw in msg_text:
20
- return 'warning'
21
- for kw in info_keywords:
22
- if kw in msg_text:
23
- return 'info'
24
- return 'debug'
25
-
26
-
27
- def remove_emojis(text):
28
- """Remove common emoji characters from text."""
29
- emojis = ['🧹', '🚀', '🛑', '✅', '❌', '⚠️', '✓', '🔧']
30
- for e in emojis:
31
- text = text.replace(e, '')
32
- # Clean up extra spaces left by emoji removal
33
- text = re.sub(r' +', ' ', text)
34
- return text
35
-
36
-
37
- def process_file(filepath):
38
- with open(filepath, 'r', encoding='utf-8') as f:
39
- content = f.read()
40
-
41
- lines = content.split('\n')
42
- new_lines = []
43
- i = 0
44
- replacements = 0
45
-
46
- while i < len(lines):
47
- line = lines[i]
48
- stripped = line.lstrip()
49
- indent = line[:len(line) - len(stripped)]
50
-
51
- # Handle traceback.print_exc()
52
- if 'traceback.print_exc()' in stripped and stripped.strip() == 'traceback.print_exc()':
53
- new_lines.append(f'{indent}logger.debug(traceback.format_exc())')
54
- replacements += 1
55
- i += 1
56
- continue
57
-
58
- # Skip non-print lines
59
- if not stripped.startswith('print(') and not stripped.startswith('print ('):
60
- new_lines.append(line)
61
- i += 1
62
- continue
63
-
64
- # Gather the full print statement (may span multiple lines)
65
- full_print = line
66
- # Count open/close parens to handle multi-line prints
67
- open_count = full_print.count('(') - full_print.count(')')
68
- while open_count > 0 and i + 1 < len(lines):
69
- i += 1
70
- full_print += '\n' + lines[i]
71
- open_count = full_print.count('(') - full_print.count(')')
72
-
73
- # Extract the content inside print(...)
74
- # Find the print( and matching )
75
- full_stripped = full_print.lstrip()
76
-
77
- # Match print(...) - extract inner content
78
- # Simple approach: replace 'print(' with 'logger.X(' and keep everything else
79
-
80
- # Determine the level based on content
81
- level = classify_message(full_stripped)
82
-
83
- # Clean emojis from the content
84
- cleaned = remove_emojis(full_print)
85
- cleaned_stripped = cleaned.lstrip()
86
-
87
- # Handle special case: print("\n" + "=" * 80) and print("=" * 80 + "\n")
88
- # These are separator lines - skip them entirely
89
- if re.match(r'print\(\s*"\\n"\s*\+\s*"="\s*\*\s*\d+\s*\)', cleaned_stripped):
90
- replacements += 1
91
- i += 1
92
- continue
93
- if re.match(r'print\(\s*"="\s*\*\s*\d+\s*\+\s*"\\n"\s*\)', cleaned_stripped):
94
- replacements += 1
95
- i += 1
96
- continue
97
- if re.match(r'print\(\s*"="\s*\*\s*\d+\s*\)', cleaned_stripped):
98
- replacements += 1
99
- i += 1
100
- continue
101
-
102
- # Replace print( with logger.level(
103
- # Handle the indentation properly for multi-line
104
- cleaned_lines = cleaned.split('\n')
105
- first_line = cleaned_lines[0]
106
- first_stripped = first_line.lstrip()
107
- first_indent = first_line[:len(first_line) - len(first_stripped)]
108
-
109
- # Replace print( with logger.level(
110
- new_first = re.sub(r'^print\s*\(', f'logger.{level}(', first_stripped)
111
- cleaned_lines[0] = first_indent + new_first
112
-
113
- for cl in cleaned_lines:
114
- new_lines.append(cl)
115
-
116
- replacements += 1
117
- i += 1
118
- continue
119
-
120
- result = '\n'.join(new_lines)
121
-
122
- with open(filepath, 'w', encoding='utf-8') as f:
123
- f.write(result)
124
-
125
- return replacements
126
-
127
-
128
- # Process both files
129
- r1 = process_file('evol/server/openclaw_proxy.py')
130
- print(f"openclaw_proxy.py: {r1} replacements made")
131
-
132
- r2 = process_file('evol/server/claude_proxy_async.py')
133
- print(f"claude_proxy_async.py: {r2} replacements made")
@@ -1,87 +0,0 @@
1
- """
2
- Fix indentation issues caused by the previous script's emoji removal.
3
- The problem: removing multi-byte emoji chars from lines messes up indentation
4
- when the emoji is at the start of a string, not in the indentation itself.
5
-
6
- Actually, the real issue is simpler: the 'remove_emojis' function was applied to
7
- the ENTIRE line including indentation whitespace, and the `re.sub(r' +', ' ', text)`
8
- collapsed double spaces in the indentation.
9
-
10
- This script fixes the indentation by re-reading the current (broken) files and
11
- fixing any lines where logger.X( has wrong indentation.
12
- """
13
- import re
14
-
15
- def fix_indentation(filepath):
16
- """
17
- The previous script broke indentation because:
18
- 1. Emojis in Chinese text like '✅' '❌' were removed
19
- 2. The cleanup regex `re.sub(r' +', ' ', text)` collapsed ALL multi-spaces,
20
- including indentation whitespace
21
-
22
- Strategy: We can't easily reverse this. Instead, let's look at each logger.X()
23
- line and infer the correct indentation from its surrounding context.
24
- """
25
- with open(filepath, 'r', encoding='utf-8') as f:
26
- lines = f.readlines()
27
-
28
- fixed = 0
29
- new_lines = []
30
-
31
- for i, line in enumerate(lines):
32
- stripped = line.lstrip()
33
- current_indent = len(line) - len(line.lstrip())
34
-
35
- # Check if this is a logger line with potentially wrong indentation
36
- if stripped.startswith('logger.'):
37
- # Look at the previous non-empty line to determine expected indentation
38
- expected_indent = None
39
- for j in range(i - 1, max(0, i - 5), -1):
40
- prev = lines[j]
41
- prev_stripped = prev.lstrip()
42
- if not prev_stripped or prev_stripped.startswith('#'):
43
- continue
44
- prev_indent = len(prev) - len(prev.lstrip())
45
-
46
- # If previous line ends with ':', this line should be indented more
47
- if prev_stripped.rstrip().endswith(':'):
48
- expected_indent = prev_indent + 4
49
- # If previous line is at same block level
50
- elif prev_stripped.startswith(('logger.', 'log_info', 'log_error',
51
- 'return', 'if ', 'elif ', 'else:', 'try:', 'except', 'finally:',
52
- 'for ', 'while ', 'async ', 'await ', 'with ', 'raise',
53
- 'self.', 'del ', 'pass', 'break', 'continue',
54
- 'result', 'response', 'session', 'error', 'cleanup',
55
- 'old_', 'new_', 'first_', 'aid_', 'evol_', 'agentcp_',
56
- 'remaining', 'time_since', 'current_', 'message', 'proxy_',
57
- 'trace_id', 'model', 'request', 'body', 'api_', 'user_',
58
- 'is_', 'async_session', 'openclaw', 'shared_', '_register',
59
- 'full_rebuild', 'rebuild_thread', 'login_result',
60
- 'fetch_result', 'balance', 'credits', 'users_count',
61
- 'inner_data', 'data', 'api_key', 'cached_key', 'success',
62
- 'stale_trace', 'age_', 'content', 'stream_url', 'openai_',
63
- 'response_body', 'http_status', 'error_message',
64
- 'global ', 'import ', '_rebuild', '_last_full', '_agentcp')):
65
- expected_indent = prev_indent
66
- else:
67
- expected_indent = prev_indent
68
- break
69
-
70
- if expected_indent is not None and current_indent != expected_indent:
71
- # Fix the indentation
72
- line = ' ' * expected_indent + stripped
73
- fixed += 1
74
-
75
- new_lines.append(line)
76
-
77
- with open(filepath, 'w', encoding='utf-8') as f:
78
- f.writelines(new_lines)
79
-
80
- return fixed
81
-
82
-
83
- f1 = fix_indentation('evol/server/openclaw_proxy.py')
84
- print(f"openclaw_proxy.py: {f1} lines fixed")
85
-
86
- f2 = fix_indentation('evol/server/claude_proxy_async.py')
87
- print(f"claude_proxy_async.py: {f2} lines fixed")