@agentunion/kite 1.4.0 → 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.
- package/CHANGELOG.md +102 -0
- package/cli.js +44 -5
- package/core/dependency_checker.py +250 -0
- package/core/env_checker.py +490 -0
- package/dependencies_lock.json +128 -0
- package/extensions/agents/assistant/server.py +33 -17
- package/extensions/channels/acp_channel/server.py +33 -17
- package/extensions/services/backup/entry.py +23 -16
- package/extensions/services/evol/auth_manager.py +443 -0
- package/extensions/services/evol/config.yaml +149 -0
- package/extensions/services/evol/config_loader.py +117 -0
- package/extensions/services/evol/entry.py +406 -0
- package/extensions/services/evol/evol_api.py +173 -0
- package/extensions/services/evol/evol_config.json5 +29 -0
- package/extensions/services/evol/migrate_tokens.py +122 -0
- package/extensions/services/evol/module.md +32 -0
- package/extensions/services/evol/pairing.py +250 -0
- package/extensions/services/evol/pairing_codes.jsonl +1 -0
- package/extensions/services/evol/relay.py +682 -0
- package/extensions/services/evol/relay_config.json5 +67 -0
- package/extensions/services/evol/routes/__init__.py +1 -0
- package/extensions/services/evol/routes/routes_management_ws.py +127 -0
- package/extensions/services/evol/routes/routes_rpc.py +89 -0
- package/extensions/services/evol/routes/routes_test.py +61 -0
- package/extensions/services/evol/server.py +875 -0
- package/extensions/services/evol/static/css/style.css +1200 -0
- package/extensions/services/evol/static/index.html +781 -0
- package/extensions/services/evol/static/index_evol.html +14 -0
- package/extensions/services/evol/static/js/app.js +6304 -0
- package/extensions/services/evol/static/js/auth.js +326 -0
- package/extensions/services/evol/static/js/dialog.js +285 -0
- package/extensions/services/evol/static/js/evol-app-fixed.js +50 -0
- package/extensions/services/evol/static/js/evol-app.js +1949 -0
- package/extensions/services/evol/static/js/evol-app.js.bak +1800 -0
- package/extensions/services/evol/static/js/kernel-client-example.js +228 -0
- package/extensions/services/evol/static/js/kernel-client.js +396 -0
- package/extensions/services/evol/static/js/main.js +141 -0
- package/extensions/services/evol/static/js/registry-tests.js +585 -0
- package/extensions/services/evol/static/js/stats.js +217 -0
- package/extensions/services/evol/static/js/token-manager.js +175 -0
- package/extensions/services/evol/static/pairing.html +248 -0
- package/extensions/services/evol/static/test_registry.html +262 -0
- package/extensions/services/evol/static/test_relay.html +462 -0
- package/extensions/services/evol/stats_manager.py +240 -0
- package/extensions/services/model_service/entry.py +23 -1
- package/extensions/services/proxy/.claude/settings.local.json +13 -0
- package/extensions/services/proxy/CHANGELOG_20260308.md +258 -0
- package/extensions/services/proxy/_fix_prints.py +133 -0
- package/extensions/services/proxy/_fix_prints2.py +87 -0
- package/extensions/services/proxy/agentcp/LICENCE +178 -0
- package/extensions/services/proxy/agentcp/README copy.md +85 -0
- package/extensions/services/proxy/agentcp/README.md +260 -0
- package/extensions/services/proxy/agentcp/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/agent.py +4 -0
- package/extensions/services/proxy/agentcp/agentcp.py +2494 -0
- package/extensions/services/proxy/agentcp/agentprofile.json +89 -0
- package/extensions/services/proxy/agentcp/ap/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/ap/ap_client.py +316 -0
- package/extensions/services/proxy/agentcp/assets/images/wechat_qr.png +0 -0
- package/extensions/services/proxy/agentcp/backup/metrics.json +31 -0
- package/extensions/services/proxy/agentcp/base/__init__.py +20 -0
- package/extensions/services/proxy/agentcp/base/auth_client.py +257 -0
- package/extensions/services/proxy/agentcp/base/client.py +112 -0
- package/extensions/services/proxy/agentcp/base/env.py +34 -0
- package/extensions/services/proxy/agentcp/base/html_util.py +336 -0
- package/extensions/services/proxy/agentcp/base/log.py +98 -0
- package/extensions/services/proxy/agentcp/ca/__init__.py +17 -0
- package/extensions/services/proxy/agentcp/ca/ca_client.py +414 -0
- package/extensions/services/proxy/agentcp/ca/ca_root.py +74 -0
- package/extensions/services/proxy/agentcp/context/__init__.py +20 -0
- package/extensions/services/proxy/agentcp/context/context.py +73 -0
- package/extensions/services/proxy/agentcp/context/exceptions.py +114 -0
- package/extensions/services/proxy/agentcp/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/create_profile_weather.py +125 -0
- package/extensions/services/proxy/agentcp/db/__init__.py +15 -0
- package/extensions/services/proxy/agentcp/db/db_mananger.py +550 -0
- package/extensions/services/proxy/agentcp/docs/UDP_HEARTBEAT_FIX_REPORT.md +265 -0
- package/extensions/services/proxy/agentcp/docs/heartbeat_issue_analysis.md +291 -0
- package/extensions/services/proxy/agentcp/file/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/file/file_client.py +141 -0
- package/extensions/services/proxy/agentcp/file/wss_binary_message.py +137 -0
- package/extensions/services/proxy/agentcp/hcp.py +299 -0
- package/extensions/services/proxy/agentcp/heartbeat/__init__.py +16 -0
- package/extensions/services/proxy/agentcp/heartbeat/heartbeat_client.py +360 -0
- package/extensions/services/proxy/agentcp/improved_scheduler.py +498 -0
- package/extensions/services/proxy/agentcp/llm_agent_utils.py +249 -0
- package/extensions/services/proxy/agentcp/llm_server.py +172 -0
- package/extensions/services/proxy/agentcp/mermaid.py +210 -0
- package/extensions/services/proxy/agentcp/message.py +149 -0
- package/extensions/services/proxy/agentcp/metrics.py +256 -0
- package/extensions/services/proxy/agentcp/monitoring/__init__.py +20 -0
- package/extensions/services/proxy/agentcp/monitoring/global_monitor.py +27 -0
- package/extensions/services/proxy/agentcp/monitoring/metrics_store.py +325 -0
- package/extensions/services/proxy/agentcp/monitoring/monitoring_service.py +269 -0
- package/extensions/services/proxy/agentcp/monitoring/sliding_window.py +222 -0
- package/extensions/services/proxy/agentcp/monitoring/standalone_reader.py +224 -0
- package/extensions/services/proxy/agentcp/msg/__init__.py +21 -0
- package/extensions/services/proxy/agentcp/msg/connection_manager.py +456 -0
- package/extensions/services/proxy/agentcp/msg/message_client.py +2058 -0
- package/extensions/services/proxy/agentcp/msg/message_serialize.py +263 -0
- package/extensions/services/proxy/agentcp/msg/open_ai_message.py +88 -0
- package/extensions/services/proxy/agentcp/msg/session_manager.py +1062 -0
- package/extensions/services/proxy/agentcp/msg/stream_client.py +267 -0
- package/extensions/services/proxy/agentcp/msg/websocket_file_receiver.py +89 -0
- package/extensions/services/proxy/agentcp/msg/ws_logger.py +685 -0
- package/extensions/services/proxy/agentcp/msg/wss_binary_message.py +137 -0
- package/extensions/services/proxy/agentcp/requirements.txt +7 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/README.md +37 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/agentprofile.json +89 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/create_profile.py +138 -0
- package/extensions/services/proxy/agentcp/samples/agent_graph/main.py +164 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/create_profile.py +123 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/llm/create_profile.py +129 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/llm/env.json +5 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/llm/main.py +146 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/main.py +123 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/readme.md +379 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/search/create_profile.py +129 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/search/main.py +28 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/tool/create_profile.py +129 -0
- package/extensions/services/proxy/agentcp/samples/agent_use/tool/main.py +20 -0
- package/extensions/services/proxy/agentcp/samples/ali_amap/README.md +97 -0
- package/extensions/services/proxy/agentcp/samples/ali_amap/amap_agent.py +88 -0
- package/extensions/services/proxy/agentcp/samples/ali_amap/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/agent/powershell.py +228 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/agent/software.py +63 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/agent/tools.py +36 -0
- package/extensions/services/proxy/agentcp/samples/compute_agent/browser_user.py +41 -0
- package/extensions/services/proxy/agentcp/samples/deepseek/README.md +79 -0
- package/extensions/services/proxy/agentcp/samples/deepseek/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/deepseek/deepseek.py +42 -0
- package/extensions/services/proxy/agentcp/samples/dify_chat/README.md +78 -0
- package/extensions/services/proxy/agentcp/samples/dify_chat/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/dify_chat/dify_chat.py +47 -0
- package/extensions/services/proxy/agentcp/samples/dify_workflow/README.md +78 -0
- package/extensions/services/proxy/agentcp/samples/dify_workflow/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/dify_workflow/dify_workflow.py +46 -0
- package/extensions/services/proxy/agentcp/samples/executor/README.md +44 -0
- package/extensions/services/proxy/agentcp/samples/executor/agentprofile.json +89 -0
- package/extensions/services/proxy/agentcp/samples/executor/create_profile.py +139 -0
- package/extensions/services/proxy/agentcp/samples/executor/main.py +160 -0
- package/extensions/services/proxy/agentcp/samples/filereader/README.md +45 -0
- package/extensions/services/proxy/agentcp/samples/filereader/agentprofile.json +90 -0
- package/extensions/services/proxy/agentcp/samples/filereader/create_profile.py +137 -0
- package/extensions/services/proxy/agentcp/samples/filereader/main.py +253 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/README.md +38 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/agentprofile.json +91 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/create_profile.py +138 -0
- package/extensions/services/proxy/agentcp/samples/filewriter/main.py +289 -0
- package/extensions/services/proxy/agentcp/samples/hcp/README.md +85 -0
- package/extensions/services/proxy/agentcp/samples/hcp/acp_weather_agent.zip +0 -0
- package/extensions/services/proxy/agentcp/samples/hcp/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/hcp/hcp.py +237 -0
- package/extensions/services/proxy/agentcp/samples/helloworld/README.md +68 -0
- package/extensions/services/proxy/agentcp/samples/helloworld/hello_world.py +40 -0
- package/extensions/services/proxy/agentcp/samples/llm_agent/MEADME.md +117 -0
- package/extensions/services/proxy/agentcp/samples/llm_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/llm_agent/qwen_agent.py +136 -0
- package/extensions/services/proxy/agentcp/samples/local_llm_agent/README.md +90 -0
- package/extensions/services/proxy/agentcp/samples/local_llm_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/local_llm_agent/main.py +49 -0
- package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/README.md +55 -0
- package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/query_llm_from_agent/main.py +23 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/README.md +103 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_api_agent/main.py +69 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/README.md +58 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/query_weather_from_agent/main.py +25 -0
- package/extensions/services/proxy/agentcp/samples/qwen3/README.md +71 -0
- package/extensions/services/proxy/agentcp/samples/qwen3/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/qwen3/qwen3.py +37 -0
- package/extensions/services/proxy/agentcp/samples/qwen3_tools/README.md +133 -0
- package/extensions/services/proxy/agentcp/samples/qwen3_tools/create_profile.py +126 -0
- package/extensions/services/proxy/agentcp/samples/qwen3_tools/qwen3_tools.py +98 -0
- package/extensions/services/proxy/agentcp/samples/search/create_profile_qwen.py +125 -0
- package/extensions/services/proxy/agentcp/samples/search/create_profile_search.py +125 -0
- package/extensions/services/proxy/agentcp/samples/search/qwen_agent.py +136 -0
- package/extensions/services/proxy/agentcp/samples/search/search_agent.py +170 -0
- package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/README.md +89 -0
- package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/create_profile.py +125 -0
- package/extensions/services/proxy/agentcp/samples/wrapper_agently_to_agent/main.py +44 -0
- package/extensions/services/proxy/agentcp/utils/__init__.py +15 -0
- package/extensions/services/proxy/agentcp/utils/file_util.py +117 -0
- package/extensions/services/proxy/agentcp/utils/proxy_bypass.py +99 -0
- package/extensions/services/proxy/agentcp/workflow.py +203 -0
- package/extensions/services/proxy/console_auth.py +109 -0
- package/extensions/services/proxy/evol/__init__.py +1 -0
- package/extensions/services/proxy/evol/config.py +37 -0
- package/extensions/services/proxy/evol/http/__init__.py +1 -0
- package/extensions/services/proxy/evol/http/async_http.py +551 -0
- package/extensions/services/proxy/evol/log.py +28 -0
- package/extensions/services/proxy/evol/presenter/__init__.py +2 -0
- package/extensions/services/proxy/evol/presenter/agentIdPresenter.py +1031 -0
- package/extensions/services/proxy/evol/presenter/apikeyPresenter.py +106 -0
- package/extensions/services/proxy/evol/presenter/configPresenter.py +1281 -0
- package/extensions/services/proxy/evol/presenter/userPresenter.py +477 -0
- package/extensions/services/proxy/evol/server/__init__.py +1 -0
- package/extensions/services/proxy/evol/server/claude_proxy_async.py +3430 -0
- package/extensions/services/proxy/evol/server/openclaw_proxy.py +1861 -0
- package/extensions/services/proxy/evol/server/proxy_config.py +15 -0
- package/extensions/services/proxy/evol/server/proxy_engine.py +501 -0
- package/extensions/services/proxy/evol/version.py +24 -0
- package/extensions/services/proxy/logs/websocket.log +260 -0
- package/extensions/services/proxy/main.py +240 -0
- package/extensions/services/proxy/requirements.txt +13 -0
- package/extensions/services/proxy/server.py +271 -0
- package/extensions/services/watchdog/entry.py +42 -16
- package/extensions/services/watchdog/module.md +1 -0
- package/extensions/services/watchdog/monitor.py +34 -4
- package/extensions/services/web/module.md +1 -1
- package/extensions/services/web/server.py +30 -18
- package/extensions/services/web/static/js/token-manager.js +10 -10
- package/kernel/entry.py +1 -1
- package/kernel/module.md +25 -1
- package/kernel/registry_store.py +2 -26
- package/kernel/rpc_router.py +36 -10
- package/kernel/server.py +106 -17
- package/kite_cli/commands/deps_install.py +67 -0
- package/kite_cli/commands/env_check.py +45 -0
- package/kite_cli/commands/prepare.py +49 -0
- package/kite_cli/commands/venv_setup.py +56 -0
- package/kite_cli/main.py +29 -1
- package/launcher/entry.py +306 -21
- package/launcher/module.md +9 -0
- package/launcher/module_scanner.py +11 -1
- package/main.py +4 -1
- package/package.json +8 -1
- package/python_version.json +4 -0
- package/requirements.txt +38 -0
- package/scripts/env-manager.js +328 -0
- package/scripts/python-env.js +79 -0
- package/scripts/scan_dependencies.py +461 -0
- package/scripts/setup-python-env.js +191 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
[2026-03-07 23:36:26] [INFO] [CONN ATTEMPT] conn_id=1, reason=new_connection, url=wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signatu...
|
|
2
|
+
[2026-03-07 23:36:26] [INFO] ============================================================
|
|
3
|
+
CONNECTION ESTABLISHED
|
|
4
|
+
============================================================
|
|
5
|
+
Connection ID : 1
|
|
6
|
+
Time : 2026-03-07 23:36:26.649616
|
|
7
|
+
URL : wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signature=eyJhbGciOiJIUzM4N...
|
|
8
|
+
agent_id : evol_1760289753_6.aid.pub
|
|
9
|
+
ping_interval : 3
|
|
10
|
+
has_handler : True
|
|
11
|
+
============================================================
|
|
12
|
+
[2026-03-07 23:36:26] [DEBUG] [THREAD] conn_id=1, thread=cleanup, action=started
|
|
13
|
+
[2026-03-07 23:36:26] [DEBUG] [THREAD] conn_id=1, thread=health_check, action=started
|
|
14
|
+
[2026-03-07 23:36:26] [INFO] [ON_OPEN] conn_id=1, status=SUCCESS, handler=SessionManager
|
|
15
|
+
[2026-03-07 23:45:31] [INFO] [CONN ATTEMPT] conn_id=1, reason=new_connection, url=wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signatu...
|
|
16
|
+
[2026-03-07 23:45:31] [INFO] ============================================================
|
|
17
|
+
CONNECTION ESTABLISHED
|
|
18
|
+
============================================================
|
|
19
|
+
Connection ID : 1
|
|
20
|
+
Time : 2026-03-07 23:45:31.735878
|
|
21
|
+
URL : wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signature=eyJhbGciOiJIUzM4N...
|
|
22
|
+
agent_id : evol_1760289753_6.aid.pub
|
|
23
|
+
ping_interval : 3
|
|
24
|
+
has_handler : True
|
|
25
|
+
============================================================
|
|
26
|
+
[2026-03-07 23:45:31] [DEBUG] [THREAD] conn_id=1, thread=cleanup, action=started
|
|
27
|
+
[2026-03-07 23:45:31] [DEBUG] [THREAD] conn_id=1, thread=health_check, action=started
|
|
28
|
+
[2026-03-07 23:45:31] [INFO] [ON_OPEN] conn_id=1, status=SUCCESS, handler=SessionManager
|
|
29
|
+
[2026-03-07 23:50:04] [INFO] [CONN ATTEMPT] conn_id=1, reason=new_connection, url=wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signatu...
|
|
30
|
+
[2026-03-07 23:50:04] [INFO] ============================================================
|
|
31
|
+
CONNECTION ESTABLISHED
|
|
32
|
+
============================================================
|
|
33
|
+
Connection ID : 1
|
|
34
|
+
Time : 2026-03-07 23:50:04.436579
|
|
35
|
+
URL : wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signature=eyJhbGciOiJIUzM4N...
|
|
36
|
+
agent_id : evol_1760289753_6.aid.pub
|
|
37
|
+
ping_interval : 3
|
|
38
|
+
has_handler : True
|
|
39
|
+
============================================================
|
|
40
|
+
[2026-03-07 23:50:04] [DEBUG] [THREAD] conn_id=1, thread=cleanup, action=started
|
|
41
|
+
[2026-03-07 23:50:04] [DEBUG] [THREAD] conn_id=1, thread=health_check, action=started
|
|
42
|
+
[2026-03-07 23:50:04] [INFO] [ON_OPEN] conn_id=1, status=SUCCESS, handler=SessionManager
|
|
43
|
+
[2026-03-08 00:02:04] [INFO] [CONN ATTEMPT] conn_id=1, reason=new_connection, url=wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signatu...
|
|
44
|
+
[2026-03-08 00:02:04] [INFO] ============================================================
|
|
45
|
+
CONNECTION ESTABLISHED
|
|
46
|
+
============================================================
|
|
47
|
+
Connection ID : 1
|
|
48
|
+
Time : 2026-03-08 00:02:04.873722
|
|
49
|
+
URL : wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signature=eyJhbGciOiJIUzM4N...
|
|
50
|
+
agent_id : evol_1760289753_6.aid.pub
|
|
51
|
+
ping_interval : 3
|
|
52
|
+
has_handler : True
|
|
53
|
+
============================================================
|
|
54
|
+
[2026-03-08 00:02:04] [DEBUG] [THREAD] conn_id=1, thread=cleanup, action=started
|
|
55
|
+
[2026-03-08 00:02:04] [DEBUG] [THREAD] conn_id=1, thread=health_check, action=started
|
|
56
|
+
[2026-03-08 00:02:04] [INFO] [ON_OPEN] conn_id=1, status=SUCCESS, handler=SessionManager
|
|
57
|
+
[2026-03-08 00:03:04] [DEBUG] [MSG RECV] conn_id=1, type=stats, size=0, total_messages=11, interval_seconds=60, loop_duration=60, avg_msg_size_kb=0.5, throughput_kb_s=0, total_bytes_mb=0.0, large_msg_count=0
|
|
58
|
+
[2026-03-08 00:16:08] [INFO] [CONN ATTEMPT] conn_id=1, reason=new_connection, url=wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signatu...
|
|
59
|
+
[2026-03-08 00:16:09] [INFO] ============================================================
|
|
60
|
+
CONNECTION ESTABLISHED
|
|
61
|
+
============================================================
|
|
62
|
+
Connection ID : 1
|
|
63
|
+
Time : 2026-03-08 00:16:09.139611
|
|
64
|
+
URL : wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signature=eyJhbGciOiJIUzM4N...
|
|
65
|
+
agent_id : evol_1760289753_6.aid.pub
|
|
66
|
+
ping_interval : 3
|
|
67
|
+
has_handler : True
|
|
68
|
+
============================================================
|
|
69
|
+
[2026-03-08 00:16:09] [DEBUG] [THREAD] conn_id=1, thread=cleanup, action=started
|
|
70
|
+
[2026-03-08 00:16:09] [DEBUG] [THREAD] conn_id=1, thread=health_check, action=started
|
|
71
|
+
[2026-03-08 00:16:09] [INFO] [ON_OPEN] conn_id=1, status=SUCCESS, handler=SessionManager
|
|
72
|
+
[2026-03-08 00:16:29] [ERROR] XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
73
|
+
CONNECTION CLOSED (DETAILED)
|
|
74
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
75
|
+
Connection ID : 1
|
|
76
|
+
Close Time : 2026-03-08 00:16:29.200332
|
|
77
|
+
Close Code : 1006
|
|
78
|
+
Close Reason : (empty)
|
|
79
|
+
Connection Duration: 20.05s
|
|
80
|
+
Messages Received : 7
|
|
81
|
+
Time Since Pong : 0.54s
|
|
82
|
+
--- Extra Info ---
|
|
83
|
+
ws_url : wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signatu
|
|
84
|
+
agent_id : evol_1760289753_6.aid.pub
|
|
85
|
+
code_meaning : 异常关闭 (Abnormal Closure) - 连接意外断开,未收到关闭帧。常见原因:网络中断、服务器崩溃、防火墙/代理断开、心跳超时
|
|
86
|
+
recent_msg_types : create_session_ack, invite_agent_ack, session_message_ack, system_message, member_list, session_message, leave_session_ack
|
|
87
|
+
max_msg_size_kb : 0.7
|
|
88
|
+
total_bytes_kb : 2.6
|
|
89
|
+
large_msg_count : 0
|
|
90
|
+
exception_type : ConnectionClosedError
|
|
91
|
+
exception_detail : sent 1000 (OK); no close frame received
|
|
92
|
+
--- Diagnosis ---
|
|
93
|
+
Code 1006 表示异常关闭,可能的原因:
|
|
94
|
+
1. 网络中断或不稳定
|
|
95
|
+
2. 服务器主动断开但未发送关闭帧
|
|
96
|
+
3. 心跳超时(检查 ping_interval 和 ping_timeout 配置)
|
|
97
|
+
4. 防火墙/代理/负载均衡器超时断开
|
|
98
|
+
5. 连接仅存活 20.1s,可能是认证失败或服务器拒绝
|
|
99
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
100
|
+
[2026-03-08 00:16:29] [WARNING] ================================================================================
|
|
101
|
+
CONNECTION DISCONNECTED
|
|
102
|
+
================================================================================
|
|
103
|
+
Connection ID : 1
|
|
104
|
+
Disconnect Time : 2026-03-08 00:16:29.201645
|
|
105
|
+
Close Code : 1006
|
|
106
|
+
Reason :
|
|
107
|
+
Pending Requests : 0
|
|
108
|
+
Extra Info : {"agent_id": "evol_1760289753_6.aid.pub", "server_url": "https://msg.aid.pub/api/message", "is_current_connection": true, "current_conn_id": 1}
|
|
109
|
+
================================================================================
|
|
110
|
+
[2026-03-08 00:16:29] [INFO] [FULL RESET] conn_id=1, step=partial_reset_complete, detail=部分重置完成,准备重连
|
|
111
|
+
[2026-03-08 00:19:34] [INFO] [CONN ATTEMPT] conn_id=1, reason=new_connection, url=wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signatu...
|
|
112
|
+
[2026-03-08 00:19:34] [INFO] ============================================================
|
|
113
|
+
CONNECTION ESTABLISHED
|
|
114
|
+
============================================================
|
|
115
|
+
Connection ID : 1
|
|
116
|
+
Time : 2026-03-08 00:19:34.274703
|
|
117
|
+
URL : wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signature=eyJhbGciOiJIUzM4N...
|
|
118
|
+
agent_id : evol_1760289753_6.aid.pub
|
|
119
|
+
ping_interval : 3
|
|
120
|
+
has_handler : True
|
|
121
|
+
============================================================
|
|
122
|
+
[2026-03-08 00:19:34] [DEBUG] [THREAD] conn_id=1, thread=cleanup, action=started
|
|
123
|
+
[2026-03-08 00:19:34] [DEBUG] [THREAD] conn_id=1, thread=health_check, action=started
|
|
124
|
+
[2026-03-08 00:19:34] [INFO] [ON_OPEN] conn_id=1, status=SUCCESS, handler=SessionManager
|
|
125
|
+
[2026-03-08 00:50:55] [INFO] [CONN ATTEMPT] conn_id=1, reason=new_connection, url=wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signatu...
|
|
126
|
+
[2026-03-08 00:50:56] [INFO] ============================================================
|
|
127
|
+
CONNECTION ESTABLISHED
|
|
128
|
+
============================================================
|
|
129
|
+
Connection ID : 1
|
|
130
|
+
Time : 2026-03-08 00:50:56.177923
|
|
131
|
+
URL : wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signature=eyJhbGciOiJIUzM4N...
|
|
132
|
+
agent_id : evol_1760289753_6.aid.pub
|
|
133
|
+
ping_interval : 3
|
|
134
|
+
has_handler : True
|
|
135
|
+
============================================================
|
|
136
|
+
[2026-03-08 00:50:56] [DEBUG] [THREAD] conn_id=1, thread=cleanup, action=started
|
|
137
|
+
[2026-03-08 00:50:56] [DEBUG] [THREAD] conn_id=1, thread=health_check, action=started
|
|
138
|
+
[2026-03-08 00:50:56] [INFO] [ON_OPEN] conn_id=1, status=SUCCESS, handler=SessionManager
|
|
139
|
+
[2026-03-08 00:51:58] [DEBUG] [MSG RECV] conn_id=1, type=stats, size=0, total_messages=8, interval_seconds=62, loop_duration=62, avg_msg_size_kb=0.3, throughput_kb_s=0, total_bytes_mb=0.0, large_msg_count=0
|
|
140
|
+
[2026-03-08 00:53:36] [INFO] [CONN ATTEMPT] conn_id=1, reason=new_connection, url=wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signatu...
|
|
141
|
+
[2026-03-08 00:53:37] [INFO] ============================================================
|
|
142
|
+
CONNECTION ESTABLISHED
|
|
143
|
+
============================================================
|
|
144
|
+
Connection ID : 1
|
|
145
|
+
Time : 2026-03-08 00:53:37.194120
|
|
146
|
+
URL : wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signature=eyJhbGciOiJIUzM4N...
|
|
147
|
+
agent_id : evol_1760289753_6.aid.pub
|
|
148
|
+
ping_interval : 3
|
|
149
|
+
has_handler : True
|
|
150
|
+
============================================================
|
|
151
|
+
[2026-03-08 00:53:37] [DEBUG] [THREAD] conn_id=1, thread=cleanup, action=started
|
|
152
|
+
[2026-03-08 00:53:37] [DEBUG] [THREAD] conn_id=1, thread=health_check, action=started
|
|
153
|
+
[2026-03-08 00:53:37] [INFO] [ON_OPEN] conn_id=1, status=SUCCESS, handler=SessionManager
|
|
154
|
+
[2026-03-08 00:54:02] [ERROR] XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
155
|
+
CONNECTION CLOSED (DETAILED)
|
|
156
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
157
|
+
Connection ID : 1
|
|
158
|
+
Close Time : 2026-03-08 00:54:02.251251
|
|
159
|
+
Close Code : 1006
|
|
160
|
+
Close Reason : (empty)
|
|
161
|
+
Connection Duration: 25.05s
|
|
162
|
+
Messages Received : 7
|
|
163
|
+
Time Since Pong : 0.69s
|
|
164
|
+
--- Extra Info ---
|
|
165
|
+
ws_url : wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signatu
|
|
166
|
+
agent_id : evol_1760289753_6.aid.pub
|
|
167
|
+
code_meaning : 异常关闭 (Abnormal Closure) - 连接意外断开,未收到关闭帧。常见原因:网络中断、服务器崩溃、防火墙/代理断开、心跳超时
|
|
168
|
+
recent_msg_types : create_session_ack, invite_agent_ack, session_message_ack, system_message, member_list, session_message, leave_session_ack
|
|
169
|
+
max_msg_size_kb : 0.7
|
|
170
|
+
total_bytes_kb : 2.6
|
|
171
|
+
large_msg_count : 0
|
|
172
|
+
exception_type : ConnectionClosedError
|
|
173
|
+
exception_detail : sent 1000 (OK); no close frame received
|
|
174
|
+
--- Diagnosis ---
|
|
175
|
+
Code 1006 表示异常关闭,可能的原因:
|
|
176
|
+
1. 网络中断或不稳定
|
|
177
|
+
2. 服务器主动断开但未发送关闭帧
|
|
178
|
+
3. 心跳超时(检查 ping_interval 和 ping_timeout 配置)
|
|
179
|
+
4. 防火墙/代理/负载均衡器超时断开
|
|
180
|
+
5. 连接仅存活 25.1s,可能是认证失败或服务器拒绝
|
|
181
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
182
|
+
[2026-03-08 00:54:02] [WARNING] ================================================================================
|
|
183
|
+
CONNECTION DISCONNECTED
|
|
184
|
+
================================================================================
|
|
185
|
+
Connection ID : 1
|
|
186
|
+
Disconnect Time : 2026-03-08 00:54:02.253080
|
|
187
|
+
Close Code : 1006
|
|
188
|
+
Reason :
|
|
189
|
+
Pending Requests : 0
|
|
190
|
+
Extra Info : {"agent_id": "evol_1760289753_6.aid.pub", "server_url": "https://msg.aid.pub/api/message", "is_current_connection": true, "current_conn_id": 1}
|
|
191
|
+
================================================================================
|
|
192
|
+
[2026-03-08 00:54:02] [INFO] [FULL RESET] conn_id=1, step=partial_reset_complete, detail=部分重置完成,准备重连
|
|
193
|
+
[2026-03-08 01:07:56] [INFO] [CONN ATTEMPT] conn_id=1, reason=new_connection, url=wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signatu...
|
|
194
|
+
[2026-03-08 01:07:56] [INFO] ============================================================
|
|
195
|
+
CONNECTION ESTABLISHED
|
|
196
|
+
============================================================
|
|
197
|
+
Connection ID : 1
|
|
198
|
+
Time : 2026-03-08 01:07:56.501473
|
|
199
|
+
URL : wss://msg.aid.pub/api/message/session?agent_id=evol_1760289753_6.aid.pub&signature=eyJhbGciOiJIUzM4N...
|
|
200
|
+
agent_id : evol_1760289753_6.aid.pub
|
|
201
|
+
ping_interval : 3
|
|
202
|
+
has_handler : True
|
|
203
|
+
============================================================
|
|
204
|
+
[2026-03-08 01:07:56] [DEBUG] [THREAD] conn_id=1, thread=cleanup, action=started
|
|
205
|
+
[2026-03-08 01:07:56] [DEBUG] [THREAD] conn_id=1, thread=health_check, action=started
|
|
206
|
+
[2026-03-08 01:07:56] [INFO] [ON_OPEN] conn_id=1, status=SUCCESS, handler=SessionManager
|
|
207
|
+
[2026-03-08 01:41:44] [INFO] [CONN ATTEMPT] conn_id=1, reason=new_connection, url=wss://msg.aid.pub/api/message/session?agent_id=evol_1772904026_1.aid.pub&signatu...
|
|
208
|
+
[2026-03-08 01:41:45] [INFO] ============================================================
|
|
209
|
+
CONNECTION ESTABLISHED
|
|
210
|
+
============================================================
|
|
211
|
+
Connection ID : 1
|
|
212
|
+
Time : 2026-03-08 01:41:45.128171
|
|
213
|
+
URL : wss://msg.aid.pub/api/message/session?agent_id=evol_1772904026_1.aid.pub&signature=eyJhbGciOiJIUzM4N...
|
|
214
|
+
agent_id : evol_1772904026_1.aid.pub
|
|
215
|
+
ping_interval : 3
|
|
216
|
+
has_handler : True
|
|
217
|
+
============================================================
|
|
218
|
+
[2026-03-08 01:41:45] [DEBUG] [THREAD] conn_id=1, thread=cleanup, action=started
|
|
219
|
+
[2026-03-08 01:41:45] [DEBUG] [THREAD] conn_id=1, thread=health_check, action=started
|
|
220
|
+
[2026-03-08 01:41:45] [INFO] [ON_OPEN] conn_id=1, status=SUCCESS, handler=SessionManager
|
|
221
|
+
[2026-03-08 01:43:20] [DEBUG] [MSG RECV] conn_id=1, type=stats, size=0, total_messages=6, interval_seconds=95, loop_duration=95, avg_msg_size_kb=0.3, throughput_kb_s=0, total_bytes_mb=0.0, large_msg_count=0
|
|
222
|
+
[2026-03-08 08:37:51] [DEBUG] [MSG RECV] conn_id=1, type=stats, size=0, total_messages=17, interval_seconds=24871, loop_duration=24966, avg_msg_size_kb=0.4, throughput_kb_s=0, total_bytes_mb=0.0, large_msg_count=0
|
|
223
|
+
[2026-03-08 08:37:52] [ERROR] XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
224
|
+
CONNECTION CLOSED (DETAILED)
|
|
225
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
226
|
+
Connection ID : 1
|
|
227
|
+
Close Time : 2026-03-08 08:37:52.245927
|
|
228
|
+
Close Code : 1006
|
|
229
|
+
Close Reason : (empty)
|
|
230
|
+
Connection Duration: 24967.10s
|
|
231
|
+
Messages Received : 18
|
|
232
|
+
Time Since Pong : 0.30s
|
|
233
|
+
--- Extra Info ---
|
|
234
|
+
ws_url : wss://msg.aid.pub/api/message/session?agent_id=evol_1772904026_1.aid.pub&signatu
|
|
235
|
+
agent_id : evol_1772904026_1.aid.pub
|
|
236
|
+
code_meaning : 异常关闭 (Abnormal Closure) - 连接意外断开,未收到关闭帧。常见原因:网络中断、服务器崩溃、防火墙/代理断开、心跳超时
|
|
237
|
+
recent_msg_types : member_list, session_message_ack, session_message, invite_agent_ack, session_message_ack, session_message, invite_agent_ack, session_message_ack, leave_session_ack, leave_session_ack
|
|
238
|
+
max_msg_size_kb : 0.7
|
|
239
|
+
total_bytes_kb : 6.7
|
|
240
|
+
large_msg_count : 0
|
|
241
|
+
exception_type : ConnectionClosedError
|
|
242
|
+
exception_detail : sent 1000 (OK); no close frame received
|
|
243
|
+
--- Diagnosis ---
|
|
244
|
+
Code 1006 表示异常关闭,可能的原因:
|
|
245
|
+
1. 网络中断或不稳定
|
|
246
|
+
2. 服务器主动断开但未发送关闭帧
|
|
247
|
+
3. 心跳超时(检查 ping_interval 和 ping_timeout 配置)
|
|
248
|
+
4. 防火墙/代理/负载均衡器超时断开
|
|
249
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
250
|
+
[2026-03-08 08:37:52] [WARNING] ================================================================================
|
|
251
|
+
CONNECTION DISCONNECTED
|
|
252
|
+
================================================================================
|
|
253
|
+
Connection ID : 1
|
|
254
|
+
Disconnect Time : 2026-03-08 08:37:52.250383
|
|
255
|
+
Close Code : 1006
|
|
256
|
+
Reason :
|
|
257
|
+
Pending Requests : 0
|
|
258
|
+
Extra Info : {"agent_id": "evol_1772904026_1.aid.pub", "server_url": "https://msg.aid.pub/api/message", "is_current_connection": true, "current_conn_id": 1}
|
|
259
|
+
================================================================================
|
|
260
|
+
[2026-03-08 08:37:52] [INFO] [FULL RESET] conn_id=1, step=partial_reset_complete, detail=部分重置完成,准备重连
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Evol Sample Backend - 独立控制台程序
|
|
4
|
+
|
|
5
|
+
脱离 Electron 桌面应用,通过控制台交互完成登录,
|
|
6
|
+
然后在端口 12655 上提供与 Evol 完全一致的 4 个代理服务。
|
|
7
|
+
|
|
8
|
+
启动流程:
|
|
9
|
+
1. 初始化配置目录
|
|
10
|
+
2. 检查本地 token(fsss2 文件 < 7天有效)
|
|
11
|
+
3. 若无有效 token → 控制台登录(手机号 + 验证码)
|
|
12
|
+
4. 同步用户信息 & AID 上线
|
|
13
|
+
5. 启动 FastAPI 服务器(端口 12655)
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import asyncio
|
|
17
|
+
import logging
|
|
18
|
+
import os
|
|
19
|
+
import platform
|
|
20
|
+
import socket
|
|
21
|
+
import subprocess
|
|
22
|
+
import sys
|
|
23
|
+
|
|
24
|
+
# 配置日志
|
|
25
|
+
logging.basicConfig(
|
|
26
|
+
level=logging.INFO,
|
|
27
|
+
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
28
|
+
datefmt="%Y-%m-%d %H:%M:%S",
|
|
29
|
+
)
|
|
30
|
+
logger = logging.getLogger("evol_sample")
|
|
31
|
+
|
|
32
|
+
# 抑制 agentid logger 的重复输出(它自带 handler,不需要 root handler 再输出一遍)
|
|
33
|
+
logging.getLogger("agentid").propagate = False
|
|
34
|
+
logging.getLogger("agentid").setLevel(logging.WARNING)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def kill_port(port: int):
|
|
38
|
+
"""如果端口被占用,强制杀掉占用进程"""
|
|
39
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
40
|
+
try:
|
|
41
|
+
sock.bind(("127.0.0.1", port))
|
|
42
|
+
sock.close()
|
|
43
|
+
return # 端口空闲,无需处理
|
|
44
|
+
except OSError:
|
|
45
|
+
sock.close()
|
|
46
|
+
|
|
47
|
+
print(f"[Port] 端口 {port} 被占用,正在清理...")
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
if platform.system() == "Windows":
|
|
51
|
+
# netstat 找到占用端口的 PID
|
|
52
|
+
result = subprocess.run(
|
|
53
|
+
["netstat", "-ano"],
|
|
54
|
+
capture_output=True, text=True, timeout=5
|
|
55
|
+
)
|
|
56
|
+
for line in result.stdout.splitlines():
|
|
57
|
+
if f":{port}" in line and "LISTENING" in line:
|
|
58
|
+
pid = line.strip().split()[-1]
|
|
59
|
+
if pid.isdigit() and int(pid) != os.getpid():
|
|
60
|
+
subprocess.run(["taskkill", "/PID", pid, "/F"],
|
|
61
|
+
capture_output=True, timeout=5)
|
|
62
|
+
print(f"[Port] 已杀掉进程 PID={pid}")
|
|
63
|
+
else:
|
|
64
|
+
# Unix: lsof + kill
|
|
65
|
+
result = subprocess.run(
|
|
66
|
+
["lsof", "-ti", f":{port}"],
|
|
67
|
+
capture_output=True, text=True, timeout=5
|
|
68
|
+
)
|
|
69
|
+
for pid in result.stdout.strip().splitlines():
|
|
70
|
+
if pid.isdigit() and int(pid) != os.getpid():
|
|
71
|
+
os.kill(int(pid), 9)
|
|
72
|
+
print(f"[Port] 已杀掉进程 PID={pid}")
|
|
73
|
+
except Exception as e:
|
|
74
|
+
print(f"[Port] 清理失败: {e},请手动杀掉占用端口 {port} 的进程")
|
|
75
|
+
sys.exit(1)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
async def async_main():
|
|
79
|
+
"""异步主流程"""
|
|
80
|
+
|
|
81
|
+
# 使用系统自动分配端口
|
|
82
|
+
PORT = 0 # 0 表示让系统自动分配可用端口
|
|
83
|
+
|
|
84
|
+
print("\n" + "=" * 60)
|
|
85
|
+
print(" Evol Sample Backend")
|
|
86
|
+
print(" Port: Auto-assigned by system")
|
|
87
|
+
print("=" * 60)
|
|
88
|
+
|
|
89
|
+
# Step 1: 初始化配置目录
|
|
90
|
+
from pathlib import Path
|
|
91
|
+
evol_dir = Path.home() / ".evol"
|
|
92
|
+
evol_dir.mkdir(exist_ok=True)
|
|
93
|
+
(evol_dir / "default").mkdir(exist_ok=True)
|
|
94
|
+
print(f"\n[Init] Config dir: {evol_dir}")
|
|
95
|
+
|
|
96
|
+
# Step 2: 检查本地 token
|
|
97
|
+
from console_auth import check_token_valid, console_login
|
|
98
|
+
|
|
99
|
+
if check_token_valid():
|
|
100
|
+
print("[Auth] Token valid, skip login")
|
|
101
|
+
else:
|
|
102
|
+
print("[Auth] Token invalid or expired, need login")
|
|
103
|
+
await console_login()
|
|
104
|
+
|
|
105
|
+
# Step 3: 同步用户信息 & AID 上线
|
|
106
|
+
print("\n[AID] Starting AID login...")
|
|
107
|
+
from evol.presenter.userPresenter import userPresenter
|
|
108
|
+
|
|
109
|
+
if not userPresenter.is_logged_in():
|
|
110
|
+
print("[AID] Error: User not logged in after auth flow")
|
|
111
|
+
sys.exit(1)
|
|
112
|
+
|
|
113
|
+
aid_result = await userPresenter.user_agent_login()
|
|
114
|
+
|
|
115
|
+
if aid_result.get("status") != "success":
|
|
116
|
+
print(f"[AID] Error: AID login failed: {aid_result.get('error', 'unknown')}")
|
|
117
|
+
sys.exit(1)
|
|
118
|
+
|
|
119
|
+
aid_id = aid_result.get("aid", "unknown")
|
|
120
|
+
print(f"\nEvol: {aid_id} is online")
|
|
121
|
+
|
|
122
|
+
# Step 3.5: 获取 Evol 本地密钥
|
|
123
|
+
evol_api_key = None
|
|
124
|
+
try:
|
|
125
|
+
from evol.presenter.apikeyPresenter import apikeyPresenter
|
|
126
|
+
evol_api_key = await apikeyPresenter.get_first_api_key()
|
|
127
|
+
except Exception as e:
|
|
128
|
+
print(f"[Key] Warning: 获取 Evol 密钥失败: {e}")
|
|
129
|
+
|
|
130
|
+
# Step 3.6: 拉取模型列表和用户信息
|
|
131
|
+
print("\n[Info] Fetching models and user info...")
|
|
132
|
+
try:
|
|
133
|
+
# 拉取模型列表
|
|
134
|
+
from evol.server.openclaw_proxy import get_models_list
|
|
135
|
+
models_data = get_models_list()
|
|
136
|
+
model_count = len(models_data.get("data", []))
|
|
137
|
+
print(f"[Models] Found {model_count} available models:")
|
|
138
|
+
for model in models_data.get("data", [])[:5]: # 只显示前5个
|
|
139
|
+
print(f" - {model.get('id', 'unknown')}")
|
|
140
|
+
if model_count > 5:
|
|
141
|
+
print(f" ... and {model_count - 5} more")
|
|
142
|
+
|
|
143
|
+
# 获取用户信息
|
|
144
|
+
from evol.presenter.userPresenter import userPresenter
|
|
145
|
+
user_info = userPresenter.get_user_info()
|
|
146
|
+
if user_info:
|
|
147
|
+
print(f"[User] Logged in as: {user_info.get('phone', 'unknown')}")
|
|
148
|
+
print(f"[User] User ID: {user_info.get('id', 'unknown')}")
|
|
149
|
+
|
|
150
|
+
except Exception as e:
|
|
151
|
+
print(f"[Info] Warning: 获取信息失败: {e}")
|
|
152
|
+
|
|
153
|
+
# Step 4: 移除 asyncio 事件循环自动安装的信号处理器,防止外部信号触发任务取消
|
|
154
|
+
import signal
|
|
155
|
+
loop = asyncio.get_running_loop()
|
|
156
|
+
if hasattr(loop, 'remove_signal_handler'):
|
|
157
|
+
for sig in (signal.SIGTERM, signal.SIGINT):
|
|
158
|
+
try:
|
|
159
|
+
loop.remove_signal_handler(sig)
|
|
160
|
+
except (NotImplementedError, OSError):
|
|
161
|
+
pass
|
|
162
|
+
|
|
163
|
+
# Step 5: 启动 FastAPI 服务器
|
|
164
|
+
print(f"\n[Server] Starting server...")
|
|
165
|
+
|
|
166
|
+
# 获取一个可用端口
|
|
167
|
+
import socket
|
|
168
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
169
|
+
sock.bind(('', 0))
|
|
170
|
+
actual_port = sock.getsockname()[1]
|
|
171
|
+
sock.close()
|
|
172
|
+
|
|
173
|
+
# 显示服务器信息
|
|
174
|
+
print(f"\n[Server] Server will start on port {actual_port}")
|
|
175
|
+
print(f"[Server] ANTHROPIC_BASE_URL = http://127.0.0.1:{actual_port}/claude-proxy")
|
|
176
|
+
print(f"[Server] OPENAI_BASE_URL = http://127.0.0.1:{actual_port}/openclaw-proxy/v1")
|
|
177
|
+
print(f"[Server] Health check = http://127.0.0.1:{actual_port}/health")
|
|
178
|
+
if evol_api_key:
|
|
179
|
+
print(f"[Server] Evol API Key = {evol_api_key}")
|
|
180
|
+
else:
|
|
181
|
+
print(f"[Server] Evol API Key = (未获取到,请在 Evol 平台创建密钥)")
|
|
182
|
+
print(f"\nPress Ctrl+C to stop.\n")
|
|
183
|
+
|
|
184
|
+
# 启动服务器(阻塞)
|
|
185
|
+
from server import run_server
|
|
186
|
+
await run_server(port=actual_port)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _graceful_shutdown():
|
|
190
|
+
"""执行优雅关闭:下线 AgentID、清理 AgentCP 资源"""
|
|
191
|
+
try:
|
|
192
|
+
from evol.presenter.userPresenter import userPresenter
|
|
193
|
+
# 下线 AgentID
|
|
194
|
+
if userPresenter.agentId is not None:
|
|
195
|
+
aid_id = userPresenter.agentId.id
|
|
196
|
+
try:
|
|
197
|
+
userPresenter.agentId.offline()
|
|
198
|
+
print(f"[Shutdown] AgentID {aid_id} 已下线")
|
|
199
|
+
except Exception as e:
|
|
200
|
+
print(f"[Shutdown] AgentID 下线失败: {e}")
|
|
201
|
+
userPresenter.agentId = None
|
|
202
|
+
# 清理 AgentCP 实例
|
|
203
|
+
acp = userPresenter._agentcp_instance
|
|
204
|
+
if acp is not None:
|
|
205
|
+
try:
|
|
206
|
+
acp.shutdown_flag.set()
|
|
207
|
+
for aid in acp.aid_map.values():
|
|
208
|
+
if hasattr(aid, "offline"):
|
|
209
|
+
aid.offline()
|
|
210
|
+
print("[Shutdown] AgentCP 资源已清理")
|
|
211
|
+
except Exception as e:
|
|
212
|
+
print(f"[Shutdown] AgentCP 清理失败: {e}")
|
|
213
|
+
except Exception as e:
|
|
214
|
+
print(f"[Shutdown] 清理过程异常: {e}")
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def main():
|
|
218
|
+
"""入口函数"""
|
|
219
|
+
import signal
|
|
220
|
+
# 忽略 SIGTERM,防止父进程或系统管理器发送终止信号导致服务器退出
|
|
221
|
+
signal.signal(signal.SIGTERM, signal.SIG_IGN)
|
|
222
|
+
# Windows 上忽略 SIGBREAK(Ctrl+Break)
|
|
223
|
+
if hasattr(signal, 'SIGBREAK'):
|
|
224
|
+
signal.signal(signal.SIGBREAK, signal.SIG_IGN)
|
|
225
|
+
try:
|
|
226
|
+
asyncio.run(async_main())
|
|
227
|
+
except KeyboardInterrupt:
|
|
228
|
+
print("\n\nShutting down...")
|
|
229
|
+
_graceful_shutdown()
|
|
230
|
+
sys.exit(0)
|
|
231
|
+
except SystemExit:
|
|
232
|
+
raise
|
|
233
|
+
except Exception as e:
|
|
234
|
+
logger.error(f"Fatal error: {e}", exc_info=True)
|
|
235
|
+
_graceful_shutdown()
|
|
236
|
+
sys.exit(1)
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
if __name__ == "__main__":
|
|
240
|
+
main()
|