@agentunion/kite 1.3.2 → 1.5.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 (293) hide show
  1. package/CHANGELOG.md +302 -0
  2. package/cli.js +119 -4
  3. package/core/dependency_checker.py +250 -0
  4. package/core/env_checker.py +490 -0
  5. package/dependencies_lock.json +128 -0
  6. package/extensions/agents/assistant/entry.py +111 -1
  7. package/extensions/agents/assistant/server.py +279 -215
  8. package/extensions/channels/acp_channel/entry.py +111 -1
  9. package/extensions/channels/acp_channel/module.md +23 -22
  10. package/extensions/channels/acp_channel/server.py +279 -215
  11. package/extensions/event_hub_bench/entry.py +107 -1
  12. package/extensions/services/backup/entry.py +306 -21
  13. package/extensions/services/backup/module.md +24 -22
  14. package/extensions/services/evol/auth_manager.py +443 -0
  15. package/extensions/services/evol/config.yaml +149 -0
  16. package/extensions/services/evol/config_loader.py +117 -0
  17. package/extensions/services/evol/entry.py +406 -0
  18. package/extensions/services/evol/evol_api.py +173 -0
  19. package/extensions/services/evol/evol_config.json5 +29 -0
  20. package/extensions/services/evol/migrate_tokens.py +122 -0
  21. package/extensions/services/evol/module.md +32 -0
  22. package/extensions/services/evol/pairing.py +250 -0
  23. package/extensions/services/evol/pairing_codes.jsonl +1 -0
  24. package/extensions/services/evol/relay.py +682 -0
  25. package/extensions/services/evol/relay_config.json5 +67 -0
  26. package/extensions/services/evol/routes/__init__.py +1 -0
  27. package/extensions/services/evol/routes/routes_management_ws.py +127 -0
  28. package/extensions/services/evol/routes/routes_rpc.py +89 -0
  29. package/extensions/services/evol/routes/routes_test.py +61 -0
  30. package/extensions/services/evol/server.py +875 -0
  31. package/extensions/services/evol/static/css/style.css +1200 -0
  32. package/extensions/services/evol/static/index.html +781 -0
  33. package/extensions/services/evol/static/index_evol.html +14 -0
  34. package/extensions/services/evol/static/js/app.js +6304 -0
  35. package/extensions/services/evol/static/js/auth.js +326 -0
  36. package/extensions/services/evol/static/js/dialog.js +285 -0
  37. package/extensions/services/evol/static/js/evol-app-fixed.js +50 -0
  38. package/extensions/services/evol/static/js/evol-app.js +1949 -0
  39. package/extensions/services/evol/static/js/evol-app.js.bak +1800 -0
  40. package/extensions/services/evol/static/js/kernel-client-example.js +228 -0
  41. package/extensions/services/evol/static/js/kernel-client.js +396 -0
  42. package/extensions/services/evol/static/js/main.js +141 -0
  43. package/extensions/services/evol/static/js/registry-tests.js +585 -0
  44. package/extensions/services/evol/static/js/stats.js +217 -0
  45. package/extensions/services/evol/static/js/token-manager.js +175 -0
  46. package/extensions/services/evol/static/pairing.html +248 -0
  47. package/extensions/services/evol/static/test_registry.html +262 -0
  48. package/extensions/services/evol/static/test_relay.html +462 -0
  49. package/extensions/services/evol/stats_manager.py +240 -0
  50. package/extensions/services/model_service/entry.py +167 -19
  51. package/extensions/services/model_service/module.md +21 -22
  52. package/extensions/services/proxy/.claude/settings.local.json +13 -0
  53. package/extensions/services/proxy/CHANGELOG_20260308.md +258 -0
  54. package/extensions/services/proxy/_fix_prints.py +133 -0
  55. package/extensions/services/proxy/_fix_prints2.py +87 -0
  56. package/extensions/services/proxy/agentcp/LICENCE +178 -0
  57. package/extensions/services/proxy/agentcp/README copy.md +85 -0
  58. package/extensions/services/proxy/agentcp/README.md +260 -0
  59. package/extensions/services/proxy/agentcp/__init__.py +16 -0
  60. package/extensions/services/proxy/agentcp/agent.py +4 -0
  61. package/extensions/services/proxy/agentcp/agentcp.py +2494 -0
  62. package/extensions/services/proxy/agentcp/agentprofile.json +89 -0
  63. package/extensions/services/proxy/agentcp/ap/__init__.py +16 -0
  64. package/extensions/services/proxy/agentcp/ap/ap_client.py +316 -0
  65. package/extensions/services/proxy/agentcp/assets/images/wechat_qr.png +0 -0
  66. package/extensions/services/proxy/agentcp/backup/metrics.json +31 -0
  67. package/extensions/services/proxy/agentcp/base/__init__.py +20 -0
  68. package/extensions/services/proxy/agentcp/base/auth_client.py +257 -0
  69. package/extensions/services/proxy/agentcp/base/client.py +112 -0
  70. package/extensions/services/proxy/agentcp/base/env.py +34 -0
  71. package/extensions/services/proxy/agentcp/base/html_util.py +336 -0
  72. package/extensions/services/proxy/agentcp/base/log.py +98 -0
  73. package/extensions/services/proxy/agentcp/ca/__init__.py +17 -0
  74. package/extensions/services/proxy/agentcp/ca/ca_client.py +414 -0
  75. package/extensions/services/proxy/agentcp/ca/ca_root.py +74 -0
  76. package/extensions/services/proxy/agentcp/context/__init__.py +20 -0
  77. package/extensions/services/proxy/agentcp/context/context.py +73 -0
  78. package/extensions/services/proxy/agentcp/context/exceptions.py +114 -0
  79. package/extensions/services/proxy/agentcp/create_profile.py +125 -0
  80. package/extensions/services/proxy/agentcp/create_profile_weather.py +125 -0
  81. package/extensions/services/proxy/agentcp/db/__init__.py +15 -0
  82. package/extensions/services/proxy/agentcp/db/db_mananger.py +550 -0
  83. package/extensions/services/proxy/agentcp/docs/UDP_HEARTBEAT_FIX_REPORT.md +265 -0
  84. package/extensions/services/proxy/agentcp/docs/heartbeat_issue_analysis.md +291 -0
  85. package/extensions/services/proxy/agentcp/file/__init__.py +16 -0
  86. package/extensions/services/proxy/agentcp/file/file_client.py +141 -0
  87. package/extensions/services/proxy/agentcp/file/wss_binary_message.py +137 -0
  88. package/extensions/services/proxy/agentcp/hcp.py +299 -0
  89. package/extensions/services/proxy/agentcp/heartbeat/__init__.py +16 -0
  90. package/extensions/services/proxy/agentcp/heartbeat/heartbeat_client.py +360 -0
  91. package/extensions/services/proxy/agentcp/improved_scheduler.py +498 -0
  92. package/extensions/services/proxy/agentcp/llm_agent_utils.py +249 -0
  93. package/extensions/services/proxy/agentcp/llm_server.py +172 -0
  94. package/extensions/services/proxy/agentcp/mermaid.py +210 -0
  95. package/extensions/services/proxy/agentcp/message.py +149 -0
  96. package/extensions/services/proxy/agentcp/metrics.py +256 -0
  97. package/extensions/services/proxy/agentcp/monitoring/__init__.py +20 -0
  98. package/extensions/services/proxy/agentcp/monitoring/global_monitor.py +27 -0
  99. package/extensions/services/proxy/agentcp/monitoring/metrics_store.py +325 -0
  100. package/extensions/services/proxy/agentcp/monitoring/monitoring_service.py +269 -0
  101. package/extensions/services/proxy/agentcp/monitoring/sliding_window.py +222 -0
  102. package/extensions/services/proxy/agentcp/monitoring/standalone_reader.py +224 -0
  103. package/extensions/services/proxy/agentcp/msg/__init__.py +21 -0
  104. package/extensions/services/proxy/agentcp/msg/connection_manager.py +456 -0
  105. package/extensions/services/proxy/agentcp/msg/message_client.py +2058 -0
  106. package/extensions/services/proxy/agentcp/msg/message_serialize.py +263 -0
  107. package/extensions/services/proxy/agentcp/msg/open_ai_message.py +88 -0
  108. package/extensions/services/proxy/agentcp/msg/session_manager.py +1062 -0
  109. package/extensions/services/proxy/agentcp/msg/stream_client.py +267 -0
  110. package/extensions/services/proxy/agentcp/msg/websocket_file_receiver.py +89 -0
  111. package/extensions/services/proxy/agentcp/msg/ws_logger.py +685 -0
  112. package/extensions/services/proxy/agentcp/msg/wss_binary_message.py +137 -0
  113. package/extensions/services/proxy/agentcp/requirements.txt +7 -0
  114. package/extensions/services/proxy/agentcp/samples/agent_graph/README.md +37 -0
  115. package/extensions/services/proxy/agentcp/samples/agent_graph/agentprofile.json +89 -0
  116. package/extensions/services/proxy/agentcp/samples/agent_graph/create_profile.py +138 -0
  117. package/extensions/services/proxy/agentcp/samples/agent_graph/main.py +164 -0
  118. package/extensions/services/proxy/agentcp/samples/agent_use/create_profile.py +123 -0
  119. package/extensions/services/proxy/agentcp/samples/agent_use/llm/create_profile.py +129 -0
  120. package/extensions/services/proxy/agentcp/samples/agent_use/llm/env.json +5 -0
  121. package/extensions/services/proxy/agentcp/samples/agent_use/llm/main.py +146 -0
  122. package/extensions/services/proxy/agentcp/samples/agent_use/main.py +123 -0
  123. package/extensions/services/proxy/agentcp/samples/agent_use/readme.md +379 -0
  124. package/extensions/services/proxy/agentcp/samples/agent_use/search/create_profile.py +129 -0
  125. package/extensions/services/proxy/agentcp/samples/agent_use/search/main.py +28 -0
  126. package/extensions/services/proxy/agentcp/samples/agent_use/tool/create_profile.py +129 -0
  127. package/extensions/services/proxy/agentcp/samples/agent_use/tool/main.py +20 -0
  128. package/extensions/services/proxy/agentcp/samples/ali_amap/README.md +97 -0
  129. package/extensions/services/proxy/agentcp/samples/ali_amap/amap_agent.py +88 -0
  130. package/extensions/services/proxy/agentcp/samples/ali_amap/create_profile.py +125 -0
  131. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/powershell.py +228 -0
  132. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/software.py +63 -0
  133. package/extensions/services/proxy/agentcp/samples/compute_agent/agent/tools.py +36 -0
  134. package/extensions/services/proxy/agentcp/samples/compute_agent/browser_user.py +41 -0
  135. package/extensions/services/proxy/agentcp/samples/deepseek/README.md +79 -0
  136. package/extensions/services/proxy/agentcp/samples/deepseek/create_profile.py +126 -0
  137. package/extensions/services/proxy/agentcp/samples/deepseek/deepseek.py +42 -0
  138. package/extensions/services/proxy/agentcp/samples/dify_chat/README.md +78 -0
  139. package/extensions/services/proxy/agentcp/samples/dify_chat/create_profile.py +126 -0
  140. package/extensions/services/proxy/agentcp/samples/dify_chat/dify_chat.py +47 -0
  141. package/extensions/services/proxy/agentcp/samples/dify_workflow/README.md +78 -0
  142. package/extensions/services/proxy/agentcp/samples/dify_workflow/create_profile.py +126 -0
  143. package/extensions/services/proxy/agentcp/samples/dify_workflow/dify_workflow.py +46 -0
  144. package/extensions/services/proxy/agentcp/samples/executor/README.md +44 -0
  145. package/extensions/services/proxy/agentcp/samples/executor/agentprofile.json +89 -0
  146. package/extensions/services/proxy/agentcp/samples/executor/create_profile.py +139 -0
  147. package/extensions/services/proxy/agentcp/samples/executor/main.py +160 -0
  148. package/extensions/services/proxy/agentcp/samples/filereader/README.md +45 -0
  149. package/extensions/services/proxy/agentcp/samples/filereader/agentprofile.json +90 -0
  150. package/extensions/services/proxy/agentcp/samples/filereader/create_profile.py +137 -0
  151. package/extensions/services/proxy/agentcp/samples/filereader/main.py +253 -0
  152. package/extensions/services/proxy/agentcp/samples/filewriter/README.md +38 -0
  153. package/extensions/services/proxy/agentcp/samples/filewriter/agentprofile.json +91 -0
  154. package/extensions/services/proxy/agentcp/samples/filewriter/create_profile.py +138 -0
  155. package/extensions/services/proxy/agentcp/samples/filewriter/main.py +289 -0
  156. package/extensions/services/proxy/agentcp/samples/hcp/README.md +85 -0
  157. package/extensions/services/proxy/agentcp/samples/hcp/acp_weather_agent.zip +0 -0
  158. package/extensions/services/proxy/agentcp/samples/hcp/create_profile.py +125 -0
  159. package/extensions/services/proxy/agentcp/samples/hcp/hcp.py +237 -0
  160. package/extensions/services/proxy/agentcp/samples/helloworld/README.md +68 -0
  161. package/extensions/services/proxy/agentcp/samples/helloworld/hello_world.py +40 -0
  162. package/extensions/services/proxy/agentcp/samples/llm_agent/MEADME.md +117 -0
  163. package/extensions/services/proxy/agentcp/samples/llm_agent/create_profile.py +125 -0
  164. package/extensions/services/proxy/agentcp/samples/llm_agent/qwen_agent.py +136 -0
  165. package/extensions/services/proxy/agentcp/samples/local_llm_agent/README.md +90 -0
  166. package/extensions/services/proxy/agentcp/samples/local_llm_agent/create_profile.py +125 -0
  167. package/extensions/services/proxy/agentcp/samples/local_llm_agent/main.py +49 -0
  168. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/README.md +55 -0
  169. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/create_profile.py +125 -0
  170. package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/main.py +23 -0
  171. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/README.md +103 -0
  172. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/create_profile.py +125 -0
  173. package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/main.py +69 -0
  174. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/README.md +58 -0
  175. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/create_profile.py +125 -0
  176. package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/main.py +25 -0
  177. package/extensions/services/proxy/agentcp/samples/qwen3/README.md +71 -0
  178. package/extensions/services/proxy/agentcp/samples/qwen3/create_profile.py +126 -0
  179. package/extensions/services/proxy/agentcp/samples/qwen3/qwen3.py +37 -0
  180. package/extensions/services/proxy/agentcp/samples/qwen3_tools/README.md +133 -0
  181. package/extensions/services/proxy/agentcp/samples/qwen3_tools/create_profile.py +126 -0
  182. package/extensions/services/proxy/agentcp/samples/qwen3_tools/qwen3_tools.py +98 -0
  183. package/extensions/services/proxy/agentcp/samples/search/create_profile_qwen.py +125 -0
  184. package/extensions/services/proxy/agentcp/samples/search/create_profile_search.py +125 -0
  185. package/extensions/services/proxy/agentcp/samples/search/qwen_agent.py +136 -0
  186. package/extensions/services/proxy/agentcp/samples/search/search_agent.py +170 -0
  187. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/README.md +89 -0
  188. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/create_profile.py +125 -0
  189. package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/main.py +44 -0
  190. package/extensions/services/proxy/agentcp/utils/__init__.py +15 -0
  191. package/extensions/services/proxy/agentcp/utils/file_util.py +117 -0
  192. package/extensions/services/proxy/agentcp/utils/proxy_bypass.py +99 -0
  193. package/extensions/services/proxy/agentcp/workflow.py +203 -0
  194. package/extensions/services/proxy/console_auth.py +109 -0
  195. package/extensions/services/proxy/evol/__init__.py +1 -0
  196. package/extensions/services/proxy/evol/config.py +37 -0
  197. package/extensions/services/proxy/evol/http/__init__.py +1 -0
  198. package/extensions/services/proxy/evol/http/async_http.py +551 -0
  199. package/extensions/services/proxy/evol/log.py +28 -0
  200. package/extensions/services/proxy/evol/presenter/__init__.py +2 -0
  201. package/extensions/services/proxy/evol/presenter/agentIdPresenter.py +1031 -0
  202. package/extensions/services/proxy/evol/presenter/apikeyPresenter.py +106 -0
  203. package/extensions/services/proxy/evol/presenter/configPresenter.py +1281 -0
  204. package/extensions/services/proxy/evol/presenter/userPresenter.py +477 -0
  205. package/extensions/services/proxy/evol/server/__init__.py +1 -0
  206. package/extensions/services/proxy/evol/server/claude_proxy_async.py +3430 -0
  207. package/extensions/services/proxy/evol/server/openclaw_proxy.py +1861 -0
  208. package/extensions/services/proxy/evol/server/proxy_config.py +15 -0
  209. package/extensions/services/proxy/evol/server/proxy_engine.py +501 -0
  210. package/extensions/services/proxy/evol/version.py +24 -0
  211. package/extensions/services/proxy/logs/websocket.log +260 -0
  212. package/extensions/services/proxy/main.py +240 -0
  213. package/extensions/services/proxy/requirements.txt +13 -0
  214. package/extensions/services/proxy/server.py +271 -0
  215. package/extensions/services/watchdog/entry.py +215 -26
  216. package/extensions/services/watchdog/module.md +1 -0
  217. package/extensions/services/watchdog/monitor.py +178 -38
  218. package/extensions/services/web/WEBSOCKET_STATUS.md +143 -0
  219. package/extensions/services/web/config_example.py +35 -0
  220. package/extensions/services/web/config_loader.py +110 -0
  221. package/extensions/services/web/entry.py +114 -26
  222. package/extensions/services/web/module.md +35 -24
  223. package/extensions/services/web/pairing.py +250 -0
  224. package/extensions/services/web/pairing_codes.jsonl +16 -0
  225. package/extensions/services/web/relay.py +643 -0
  226. package/extensions/services/web/relay_config.json5 +67 -0
  227. package/extensions/services/web/routes/routes_management_ws.py +127 -0
  228. package/extensions/services/web/routes/routes_rpc.py +89 -0
  229. package/extensions/services/web/routes/routes_test.py +61 -0
  230. package/extensions/services/web/routes/schemas.py +0 -22
  231. package/extensions/services/web/server.py +434 -99
  232. package/extensions/services/web/static/css/style.css +67 -28
  233. package/extensions/services/web/static/index.html +234 -44
  234. package/extensions/services/web/static/js/app.js +1335 -48
  235. package/extensions/services/web/static/js/kernel-client-example.js +161 -0
  236. package/extensions/services/web/static/js/kernel-client.js +383 -0
  237. package/extensions/services/web/static/js/registry-tests.js +558 -0
  238. package/extensions/services/web/static/js/token-manager.js +175 -0
  239. package/extensions/services/web/static/pairing.html +248 -0
  240. package/extensions/services/web/static/test_registry.html +262 -0
  241. package/extensions/services/web/web_config.json5 +29 -0
  242. package/kernel/entry.py +120 -32
  243. package/kernel/event_hub.py +141 -16
  244. package/kernel/module.md +60 -33
  245. package/kernel/registry_store.py +45 -36
  246. package/kernel/rpc_router.py +152 -59
  247. package/kernel/server.py +322 -26
  248. package/kite_cli/__init__.py +3 -0
  249. package/kite_cli/__main__.py +5 -0
  250. package/kite_cli/commands/__init__.py +1 -0
  251. package/kite_cli/commands/clean.py +101 -0
  252. package/kite_cli/commands/deps_install.py +67 -0
  253. package/kite_cli/commands/doctor.py +35 -0
  254. package/kite_cli/commands/env_check.py +45 -0
  255. package/kite_cli/commands/history.py +111 -0
  256. package/kite_cli/commands/info.py +96 -0
  257. package/kite_cli/commands/install.py +313 -0
  258. package/kite_cli/commands/list.py +143 -0
  259. package/kite_cli/commands/log.py +81 -0
  260. package/kite_cli/commands/prepare.py +49 -0
  261. package/kite_cli/commands/rollback.py +88 -0
  262. package/kite_cli/commands/search.py +73 -0
  263. package/kite_cli/commands/uninstall.py +85 -0
  264. package/kite_cli/commands/update.py +118 -0
  265. package/kite_cli/commands/venv_setup.py +56 -0
  266. package/kite_cli/core/__init__.py +1 -0
  267. package/kite_cli/core/checker.py +142 -0
  268. package/kite_cli/core/dependency.py +229 -0
  269. package/kite_cli/core/downloader.py +209 -0
  270. package/kite_cli/core/install_info.py +40 -0
  271. package/kite_cli/core/tool_installer.py +397 -0
  272. package/kite_cli/core/validator.py +78 -0
  273. package/kite_cli/main.py +317 -0
  274. package/kite_cli/utils/__init__.py +1 -0
  275. package/kite_cli/utils/i18n.py +252 -0
  276. package/kite_cli/utils/interactive.py +63 -0
  277. package/kite_cli/utils/operation_log.py +77 -0
  278. package/kite_cli/utils/paths.py +34 -0
  279. package/kite_cli/utils/version.py +308 -0
  280. package/launcher/entry.py +1124 -178
  281. package/launcher/logging_setup.py +104 -0
  282. package/launcher/module.md +46 -37
  283. package/launcher/module_scanner.py +11 -1
  284. package/main.py +4 -1
  285. package/package.json +9 -1
  286. package/python_version.json +4 -0
  287. package/requirements.txt +38 -0
  288. package/scripts/env-manager.js +328 -0
  289. package/scripts/plan_manager.py +315 -0
  290. package/scripts/python-env.js +79 -0
  291. package/scripts/scan_dependencies.py +461 -0
  292. package/scripts/setup-python-env.js +191 -0
  293. package/extensions/services/web/routes/routes_modules.py +0 -249
@@ -0,0 +1,336 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright 2025 AgentUnion Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ from requests import get
16
+
17
+
18
+ def parse_html(json_data):
19
+ html_content1 = """
20
+ <!DOCTYPE html>
21
+ <html lang="zh-CN">
22
+ <head>
23
+ <meta charset="UTF-8">
24
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
25
+ <title>智能体描述页面</title>
26
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
27
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
28
+ <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
29
+ <style>
30
+ :root {
31
+ --primary-color: #3498db;
32
+ --secondary-color: #2ecc71;
33
+ --dark-color: #2c3e50;
34
+ --light-color: #ecf0f1;
35
+ }
36
+
37
+ body {
38
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
39
+ background-color: #f8f9fa;
40
+ color: #333;
41
+ }
42
+
43
+ .navbar {
44
+ background: linear-gradient(135deg, var(--primary-color), var(--dark-color));
45
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
46
+ }
47
+
48
+ .hero-section {
49
+ background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
50
+ color: white;
51
+ padding: 4rem 0;
52
+ margin-bottom: 2rem;
53
+ border-radius: 0 0 20px 20px;
54
+ }
55
+
56
+ .card {
57
+ border: none;
58
+ border-radius: 10px;
59
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
60
+ transition: transform 0.3s ease;
61
+ margin-bottom: 20px;
62
+ }
63
+
64
+ .card:hover {
65
+ transform: translateY(-5px);
66
+ }
67
+
68
+ .card-header {
69
+ background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
70
+ color: white;
71
+ border-radius: 10px 10px 0 0 !important;
72
+ font-weight: bold;
73
+ }
74
+
75
+ .feature-icon {
76
+ font-size: 2.5rem;
77
+ color: var(--primary-color);
78
+ margin-bottom: 1rem;
79
+ }
80
+
81
+ .tech-specs {
82
+ background-color: white;
83
+ border-radius: 10px;
84
+ padding: 2rem;
85
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
86
+ }
87
+
88
+ .tech-specs h3 {
89
+ color: var(--primary-color);
90
+ margin-bottom: 1.5rem;
91
+ }
92
+
93
+ .tech-specs table {
94
+ width: 100%;
95
+ }
96
+
97
+ .tech-specs th {
98
+ background-color: var(--light-color);
99
+ padding: 12px;
100
+ text-align: left;
101
+ }
102
+
103
+ .tech-specs td {
104
+ padding: 12px;
105
+ border-bottom: 1px solid #eee;
106
+ }
107
+
108
+ .chart-container {
109
+ background-color: white;
110
+ border-radius: 10px;
111
+ padding: 2rem;
112
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
113
+ margin-bottom: 2rem;
114
+ }
115
+
116
+ footer {
117
+ background-color: var(--dark-color);
118
+ color: white;
119
+ padding: 2rem 0;
120
+ margin-top: 3rem;
121
+ }
122
+
123
+ .badge-custom {
124
+ background-color: var(--secondary-color);
125
+ color: white;
126
+ font-weight: normal;
127
+ padding: 5px 10px;
128
+ border-radius: 20px;
129
+ }
130
+ </style>
131
+ </head>
132
+ """
133
+ html_content3 = """
134
+ <body>
135
+ <!-- 导航栏 -->
136
+ <nav class="navbar navbar-expand-lg navbar-dark">
137
+ <div class="container">
138
+ <a class="navbar-brand" href="#">
139
+ <i class="bi bi-cloud-sun-fill me-2"></i>
140
+ {name}
141
+ </a>
142
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
143
+ <span class="navbar-toggler-icon"></span>
144
+ </button>
145
+ <div class="collapse navbar-collapse" id="navbarNav">
146
+ <ul class="navbar-nav ms-auto">
147
+ <li class="nav-item">
148
+ <a class="nav-link active" href="#overview">概述</a>
149
+ </li>
150
+ <li class="nav-item">
151
+ <a class="nav-link" href="#features">功能</a>
152
+ </li>
153
+ <li class="nav-item">
154
+ <a class="nav-link" href="#tech">技术</a>
155
+ </li>
156
+ </ul>
157
+ </div>
158
+ </div>
159
+ </nav>
160
+
161
+ <!-- 标题区 -->
162
+ <section class="hero-section text-center">
163
+ <div class="container">
164
+ <h1 class="display-4 fw-bold mb-3">{name}</h1>
165
+ <p class="lead mb-4"> {description}</p>
166
+ <span class="badge badge-custom mb-3">版本 1.0.0</span>
167
+ <p class="mb-0">最后更新: {lastUpdated}</p>
168
+ </div>
169
+ </section>
170
+
171
+ <!-- 主要内容区 -->
172
+ <div class="container">
173
+ <!-- 基本信息卡片 -->
174
+ <section id="overview" class="mb-5">
175
+ <div class="row">
176
+ <div class="col-12">
177
+ <div class="card h-100">
178
+ <div class="card-header">
179
+ <h5 class="card-title mb-0"><i class="bi bi-info-circle me-2"></i>系统信息</h5>
180
+ </div>
181
+ <div class="card-body">
182
+ <ul class="list-group list-group-flush">
183
+ <li class="list-group-item d-flex justify-content-between align-items-center">
184
+ <span><i class="bi bi-tag me-2"></i>名称</span>
185
+ <span class="text-muted">{name}</span>
186
+ </li>
187
+ <li class="list-group-item d-flex justify-content-between align-items-center">
188
+ <span><i class="bi bi-card-text me-2"></i>发布者</span>
189
+ <span class="text-muted">{publisherAid}</span>
190
+ </li>
191
+ <li class="list-group-item d-flex justify-content-between align-items-center">
192
+ <span><i class="bi bi-123 me-2"></i>版本</span>
193
+ <span class="text-muted">{version}</span>
194
+ </li>
195
+ <li class="list-group-item d-flex justify-content-between align-items-center">
196
+ <span><i class="bi bi-calendar-check me-2"></i>最后更新</span>
197
+ <span class="text-muted">{lastUpdated}</span>
198
+ </li>
199
+ <li class="list-group-item d-flex justify-content-between align-items-center">
200
+ <span><i class="bi bi-building me-2"></i>认证机构</span>
201
+ <span class="text-muted">{organization}</span>
202
+ </li>
203
+ </ul>
204
+ </div>
205
+ </div>
206
+ </div>
207
+ <div class="col-12 mt-4">
208
+ <div class="card h-100">
209
+ <div class="card-header">
210
+ <h5 class="card-title mb-0"><i class="bi bi-lightning-charge me-2"></i>核心能力</h5>
211
+ </div>
212
+ <div class="card-body">
213
+ <div class="text-center mb-4">
214
+ <i class="bi bi-geo-alt-fill feature-icon"></i>
215
+ <h4>{capabilitiesCore}</h4>
216
+ </div>
217
+ <hr>
218
+ <div class="text-center">
219
+ <i class="bi bi-arrow-repeat feature-icon"></i>
220
+ <h4>异步支持</h4>
221
+ <p class="text-muted">系统支持异步操作,提高响应效率</p>
222
+ </div>
223
+ </div>
224
+ </div>
225
+ </div>
226
+ </div>
227
+ </section>
228
+
229
+ <!-- 功能展示区 -->
230
+ <section id="features" class="mb-5">
231
+ <h2 class="text-center mb-4" style="color: var(--primary-color);"><i class="bi bi-stars me-2"></i>功能特点</h2>
232
+ <div class="row">
233
+ <div class="col-12 mb-4">
234
+ <div class="card h-100">
235
+ <div class="card-body text-center">
236
+ <i class="bi bi-cloud-sun feature-icon"></i>
237
+ <h4>{description}</h4>
238
+ <p class="text-muted">{capabilitiesCore}</p>
239
+ </div>
240
+ </div>
241
+ </div>
242
+ <div class="col-12 mb-4">
243
+ <div class="card h-100">
244
+ <div class="card-body text-center">
245
+ <i class="bi bi-code-slash feature-icon"></i>
246
+ <h4>标准接口</h4>
247
+ <p class="text-muted">采用JSON输入/Markdown输出,标准化接口设计</p>
248
+ </div>
249
+ </div>
250
+ </div>
251
+ <div class="col-12">
252
+ <div class="card h-100">
253
+ <div class="card-body text-center">
254
+ <i class="bi bi-shield-check feature-icon"></i>
255
+ <h4>安全认证</h4>
256
+ <p class="text-muted">通过数字签名认证,确保数据安全可靠</p>
257
+ </div>
258
+ </div>
259
+ </div>
260
+ </div>
261
+ </section>
262
+
263
+ <!-- 技术细节表格 -->
264
+ <section id="tech" class="mb-5">
265
+ <div class="tech-specs">
266
+ <h3 class="text-center"><i class="bi bi-cpu me-2"></i>技术规格</h3>
267
+ <div class="table-responsive">
268
+ <table class="table">
269
+ <thead>
270
+ <tr>
271
+ <th>类别</th>
272
+ <th>项目</th>
273
+ <th>详情</th>
274
+ </tr>
275
+ </thead>
276
+ <tbody>
277
+ <tr>
278
+ <td rowspan="2">输入</td>
279
+ <td>类型</td>
280
+ <td>content</td>
281
+ </tr>
282
+ <tr>
283
+ <td>格式</td>
284
+ <td>JSON</td>
285
+ </tr>
286
+ <tr>
287
+ <td rowspan="2">输出</td>
288
+ <td>类型</td>
289
+ <td>content</td>
290
+ </tr>
291
+ <tr>
292
+ <td>格式</td>
293
+ <td>Markdown</td>
294
+ </tr>
295
+ <tr>
296
+ <td>操作模式</td>
297
+ <td colspan="2">支持异步操作 (support_async: true)</td>
298
+ </tr>
299
+ <tr>
300
+ <td>授权</td>
301
+ <td colspan="2">免费使用 (当前智能体免费使用,无费用)</td>
302
+ </tr>
303
+ <tr>
304
+ <td>认证</td>
305
+ <td colspan="2">{organization}</td>
306
+ </tr>
307
+ </tbody>
308
+ </table>
309
+ </div>
310
+ </div>
311
+ </section>
312
+ </div>
313
+
314
+ <!-- 页脚 -->
315
+ <footer class="text-center">
316
+ <div class="container">
317
+ <p class="mb-2"><i class="bi bi-cloud-sun-fill me-2"></i>{name}</p>
318
+ <p class="mb-0">© 2025 {organization} 版权所有</p>
319
+ </div>
320
+ </footer>
321
+ """.format(
322
+ name=json_data.get("name", "AI Agent"),
323
+ description=json_data.get("description","AI智能体"),
324
+ lastUpdated=json_data.get("lastUpdated","----"),
325
+ version=json_data.get("version","----"),
326
+ publisherAid=json_data.get("publisherInfo",{}).get("publisherAid","未知发布者"),
327
+ organization = json_data.get("publisherInfo",{}).get("organization","未知认证机构"),
328
+ capabilitiesCore = ",".join(json_data.get("capabilities",{}).get("core", [])),
329
+ )
330
+ html_content4="""
331
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
332
+ </body>
333
+ </html>
334
+ """
335
+ return html_content1 + html_content3 +html_content4
336
+
@@ -0,0 +1,98 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright 2025 AgentUnion Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ import logging
16
+
17
+ from agentcp.base.env import Environ
18
+
19
+
20
+ def get_logger(name=__name__, level=Environ.LOG_LEVEL.get(logging.INFO)) -> logging.Logger:
21
+ """
22
+ Set up the log for the agentid module.
23
+ """
24
+ log = logging.getLogger(name)
25
+ log.setLevel(level)
26
+ if not log.handlers:
27
+ console_handler = logging.StreamHandler()
28
+ console_handler.setLevel(level)
29
+ formatter = logging.Formatter(
30
+ "%(asctime)s - %(name)s - %(filename)s:%(lineno)d - %(levelname)s - %(message)s"
31
+ )
32
+ console_handler.setFormatter(formatter)
33
+ log.addHandler(console_handler)
34
+ else:
35
+ for handler in log.handlers:
36
+ try:
37
+ handler.setLevel(level)
38
+ except Exception:
39
+ pass
40
+ return log
41
+
42
+
43
+ logger = None
44
+ log_enabled = True
45
+
46
+
47
+ def _ensure_logger() -> logging.Logger:
48
+ """Ensure module-level logger is initialized to avoid None dereferences."""
49
+ global logger
50
+ if logger is None:
51
+ try:
52
+ logger = get_logger(name="agentid", level=Environ.LOG_LEVEL.get(logging.INFO))
53
+ except Exception:
54
+ logger = logging.getLogger("agentid")
55
+ return logger
56
+
57
+
58
+ def set_log_enabled(enabled: bool, level: int):
59
+ global log_enabled, logger
60
+ log_enabled = enabled
61
+ logger = get_logger(name="agentid", level=Environ.LOG_LEVEL.get(level))
62
+
63
+ def log_exception(e):
64
+ global log_enabled
65
+ if log_enabled:
66
+ _ensure_logger().exception(e)
67
+
68
+ def log_info(content:str):
69
+ global log_enabled
70
+ if log_enabled and _ensure_logger().isEnabledFor(logging.INFO):
71
+ _ensure_logger().info(content)
72
+
73
+ def log_error(content:str):
74
+ global log_enabled
75
+ if log_enabled and _ensure_logger().isEnabledFor(logging.ERROR):
76
+ _ensure_logger().error(content)
77
+
78
+ def log_debug(content:str):
79
+ global log_enabled
80
+ if log_enabled and _ensure_logger().isEnabledFor(logging.DEBUG):
81
+ _ensure_logger().debug(content)
82
+
83
+ def log_warning(content:str):
84
+ global log_enabled
85
+ if log_enabled and _ensure_logger().isEnabledFor(logging.WARNING):
86
+ _ensure_logger().warning(content)
87
+
88
+ # 新增关键日志级别
89
+ def log_critical(content:str):
90
+ global log_enabled
91
+ if log_enabled and _ensure_logger().isEnabledFor(logging.CRITICAL):
92
+ _ensure_logger().critical(content)
93
+
94
+ # 新增详细日志级别
95
+ def log_verbose(content:str):
96
+ global log_enabled
97
+ if log_enabled and _ensure_logger().isEnabledFor(logging.DEBUG - 1):
98
+ _ensure_logger().log(logging.DEBUG - 1, content)
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright 2025 AgentUnion Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ from . import ca_client
17
+ from . import ca_root