@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.
- package/CHANGELOG.md +302 -0
- package/cli.js +119 -4
- package/core/dependency_checker.py +250 -0
- package/core/env_checker.py +490 -0
- package/dependencies_lock.json +128 -0
- package/extensions/agents/assistant/entry.py +111 -1
- package/extensions/agents/assistant/server.py +279 -215
- package/extensions/channels/acp_channel/entry.py +111 -1
- package/extensions/channels/acp_channel/module.md +23 -22
- package/extensions/channels/acp_channel/server.py +279 -215
- package/extensions/event_hub_bench/entry.py +107 -1
- package/extensions/services/backup/entry.py +306 -21
- package/extensions/services/backup/module.md +24 -22
- 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 +167 -19
- package/extensions/services/model_service/module.md +21 -22
- 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 +215 -26
- package/extensions/services/watchdog/module.md +1 -0
- package/extensions/services/watchdog/monitor.py +178 -38
- package/extensions/services/web/WEBSOCKET_STATUS.md +143 -0
- package/extensions/services/web/config_example.py +35 -0
- package/extensions/services/web/config_loader.py +110 -0
- package/extensions/services/web/entry.py +114 -26
- package/extensions/services/web/module.md +35 -24
- package/extensions/services/web/pairing.py +250 -0
- package/extensions/services/web/pairing_codes.jsonl +16 -0
- package/extensions/services/web/relay.py +643 -0
- package/extensions/services/web/relay_config.json5 +67 -0
- package/extensions/services/web/routes/routes_management_ws.py +127 -0
- package/extensions/services/web/routes/routes_rpc.py +89 -0
- package/extensions/services/web/routes/routes_test.py +61 -0
- package/extensions/services/web/routes/schemas.py +0 -22
- package/extensions/services/web/server.py +434 -99
- package/extensions/services/web/static/css/style.css +67 -28
- package/extensions/services/web/static/index.html +234 -44
- package/extensions/services/web/static/js/app.js +1335 -48
- package/extensions/services/web/static/js/kernel-client-example.js +161 -0
- package/extensions/services/web/static/js/kernel-client.js +383 -0
- package/extensions/services/web/static/js/registry-tests.js +558 -0
- package/extensions/services/web/static/js/token-manager.js +175 -0
- package/extensions/services/web/static/pairing.html +248 -0
- package/extensions/services/web/static/test_registry.html +262 -0
- package/extensions/services/web/web_config.json5 +29 -0
- package/kernel/entry.py +120 -32
- package/kernel/event_hub.py +141 -16
- package/kernel/module.md +60 -33
- package/kernel/registry_store.py +45 -36
- package/kernel/rpc_router.py +152 -59
- package/kernel/server.py +322 -26
- package/kite_cli/__init__.py +3 -0
- package/kite_cli/__main__.py +5 -0
- package/kite_cli/commands/__init__.py +1 -0
- package/kite_cli/commands/clean.py +101 -0
- package/kite_cli/commands/deps_install.py +67 -0
- package/kite_cli/commands/doctor.py +35 -0
- package/kite_cli/commands/env_check.py +45 -0
- package/kite_cli/commands/history.py +111 -0
- package/kite_cli/commands/info.py +96 -0
- package/kite_cli/commands/install.py +313 -0
- package/kite_cli/commands/list.py +143 -0
- package/kite_cli/commands/log.py +81 -0
- package/kite_cli/commands/prepare.py +49 -0
- package/kite_cli/commands/rollback.py +88 -0
- package/kite_cli/commands/search.py +73 -0
- package/kite_cli/commands/uninstall.py +85 -0
- package/kite_cli/commands/update.py +118 -0
- package/kite_cli/commands/venv_setup.py +56 -0
- package/kite_cli/core/__init__.py +1 -0
- package/kite_cli/core/checker.py +142 -0
- package/kite_cli/core/dependency.py +229 -0
- package/kite_cli/core/downloader.py +209 -0
- package/kite_cli/core/install_info.py +40 -0
- package/kite_cli/core/tool_installer.py +397 -0
- package/kite_cli/core/validator.py +78 -0
- package/kite_cli/main.py +317 -0
- package/kite_cli/utils/__init__.py +1 -0
- package/kite_cli/utils/i18n.py +252 -0
- package/kite_cli/utils/interactive.py +63 -0
- package/kite_cli/utils/operation_log.py +77 -0
- package/kite_cli/utils/paths.py +34 -0
- package/kite_cli/utils/version.py +308 -0
- package/launcher/entry.py +1124 -178
- package/launcher/logging_setup.py +104 -0
- package/launcher/module.md +46 -37
- package/launcher/module_scanner.py +11 -1
- package/main.py +4 -1
- package/package.json +9 -1
- package/python_version.json +4 -0
- package/requirements.txt +38 -0
- package/scripts/env-manager.js +328 -0
- package/scripts/plan_manager.py +315 -0
- package/scripts/python-env.js +79 -0
- package/scripts/scan_dependencies.py +461 -0
- package/scripts/setup-python-env.js +191 -0
- package/extensions/services/web/routes/routes_modules.py +0 -249
|
@@ -0,0 +1,550 @@
|
|
|
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 sqlite3
|
|
16
|
+
import os
|
|
17
|
+
from agentcp.base.log import log_debug, log_error, log_exception, log_info
|
|
18
|
+
class DBManager:
|
|
19
|
+
|
|
20
|
+
def __init__(self,aid_path,aid):
|
|
21
|
+
db_path = os.path.join(aid_path,"data")
|
|
22
|
+
os.path.exists(db_path) or os.makedirs(db_path)
|
|
23
|
+
db_file_path = os.path.join(db_path, "agentid_data.db")
|
|
24
|
+
|
|
25
|
+
self.conn = sqlite3.connect(db_file_path, check_same_thread=False)
|
|
26
|
+
self.aid = aid
|
|
27
|
+
self.create_table()
|
|
28
|
+
|
|
29
|
+
def add_friend_agent(self,friend_aid,name,avaUrl,description):
|
|
30
|
+
try:
|
|
31
|
+
friend_table = f"friend"
|
|
32
|
+
cursor = self.conn.cursor()
|
|
33
|
+
# 使用INSERT OR REPLACE来实现upsert功能
|
|
34
|
+
# 如果aid存在就更新,不存在就插入
|
|
35
|
+
cursor.execute(f'''INSERT OR REPLACE INTO {friend_table} (aid, name, avaurl, description) VALUES (?, ?, ?, ?)''',
|
|
36
|
+
(friend_aid, name, avaUrl, description))
|
|
37
|
+
self.conn.commit()
|
|
38
|
+
result = cursor.rowcount > 0
|
|
39
|
+
cursor.close() # 关闭cursor对象
|
|
40
|
+
return result
|
|
41
|
+
except sqlite3.Error as e:
|
|
42
|
+
log_error(f"add_friend_agent数据库操作失败: {str(e)}")
|
|
43
|
+
return False
|
|
44
|
+
|
|
45
|
+
def set_friend_agent(self,friend_aid,name):
|
|
46
|
+
try:
|
|
47
|
+
friend_table = f"friend"
|
|
48
|
+
cursor = self.conn.cursor()
|
|
49
|
+
|
|
50
|
+
# 首先检查aid是否存在
|
|
51
|
+
cursor.execute(f'''SELECT avaurl, description FROM {friend_table} WHERE aid = ?''', (friend_aid,))
|
|
52
|
+
existing_record = cursor.fetchone()
|
|
53
|
+
|
|
54
|
+
if existing_record:
|
|
55
|
+
# 如果存在,只更新name,保持avaurl和description不变
|
|
56
|
+
cursor.execute(f'''UPDATE {friend_table} SET name = ? WHERE aid = ?''',
|
|
57
|
+
(name, friend_aid))
|
|
58
|
+
else:
|
|
59
|
+
# 如果不存在,插入新记录,avaurl和description设为空或默认值
|
|
60
|
+
cursor.execute(f'''INSERT INTO {friend_table} (aid, name, avaurl, description) VALUES (?, ?, ?, ?)''',
|
|
61
|
+
(friend_aid, name, '', ''))
|
|
62
|
+
|
|
63
|
+
self.conn.commit()
|
|
64
|
+
result = cursor.rowcount > 0
|
|
65
|
+
cursor.close() # 关闭cursor对象
|
|
66
|
+
return result
|
|
67
|
+
except sqlite3.Error as e:
|
|
68
|
+
log_error(f"set_friend_agent数据库操作失败: {str(e)}")
|
|
69
|
+
return False
|
|
70
|
+
|
|
71
|
+
def delete_friend_agent(self,friend_aid):
|
|
72
|
+
try:
|
|
73
|
+
friend_table = f"friend"
|
|
74
|
+
# 修改为使用动态生成的friend_table表名
|
|
75
|
+
cursor = self.conn.cursor()
|
|
76
|
+
cursor.execute(f'''DELETE FROM {friend_table} WHERE aid = ?''', (friend_aid,))
|
|
77
|
+
self.conn.commit()
|
|
78
|
+
result = cursor.rowcount > 0
|
|
79
|
+
cursor.close() # 关闭cursor对象
|
|
80
|
+
return result
|
|
81
|
+
except sqlite3.Error as e:
|
|
82
|
+
log_error(f"delete_friend_agent数据库操作失败: {str(e)}")
|
|
83
|
+
return False
|
|
84
|
+
|
|
85
|
+
def delete_session(self,session_id):
|
|
86
|
+
try:
|
|
87
|
+
conversation_table = f"conversation"
|
|
88
|
+
messages_table = f"messages"
|
|
89
|
+
chat_config_table = f"chat_config"
|
|
90
|
+
# 修改为使用动态生成的friend_table表名
|
|
91
|
+
cursor = self.conn.cursor()
|
|
92
|
+
cursor.execute(f'''DELETE FROM {conversation_table} WHERE session_id = ?''', (str(session_id),))
|
|
93
|
+
self.conn.commit()
|
|
94
|
+
cursor.execute(f'''DELETE FROM {messages_table} WHERE session_id =?''', (session_id,))
|
|
95
|
+
self.conn.commit()
|
|
96
|
+
cursor.execute(f'''DELETE FROM {chat_config_table} WHERE session_id =?''', (session_id,))
|
|
97
|
+
self.conn.commit()
|
|
98
|
+
result = cursor.rowcount > 0
|
|
99
|
+
cursor.close() # 关闭cursor对象
|
|
100
|
+
return result
|
|
101
|
+
except sqlite3.Error as e:
|
|
102
|
+
log_error(f"delete_session数据库操作失败: {str(e)}")
|
|
103
|
+
return False
|
|
104
|
+
|
|
105
|
+
def get_friend_agent_list(self,aid):
|
|
106
|
+
try:
|
|
107
|
+
friend_table = f"friend"
|
|
108
|
+
# 修改为使用动态生成的friend_table表名
|
|
109
|
+
cursor = self.conn.cursor()
|
|
110
|
+
cursor.execute(f'''SELECT * FROM {friend_table}''')
|
|
111
|
+
#columns = [column[0] for column in cursor.description] # 获取列名
|
|
112
|
+
rows = cursor.fetchall()
|
|
113
|
+
result = []
|
|
114
|
+
for row in rows:
|
|
115
|
+
row_dict = {
|
|
116
|
+
"id":row[0],
|
|
117
|
+
"aid":row[1],
|
|
118
|
+
"name":row[2],
|
|
119
|
+
"avaurl":row[3],
|
|
120
|
+
"description":row[4]
|
|
121
|
+
}
|
|
122
|
+
result.append(row_dict)
|
|
123
|
+
cursor.close()
|
|
124
|
+
return result
|
|
125
|
+
except sqlite3.Error as e:
|
|
126
|
+
log_error(f"get_friend_agent_list数据库操作失败: {str(e)}")
|
|
127
|
+
return []
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def _create_table(self):
|
|
131
|
+
# 身份表,TODO 需考虑加密..
|
|
132
|
+
# cursor.execute("""DELETE FROM agentids""")
|
|
133
|
+
cursor = self.conn.cursor()
|
|
134
|
+
cursor.execute('''CREATE TABLE IF NOT EXISTS agentids (
|
|
135
|
+
aid TEXT PRIMARY KEY,
|
|
136
|
+
ep_aid TEXT,
|
|
137
|
+
ep_url TEXT,
|
|
138
|
+
avaUrl TEXT,
|
|
139
|
+
name TEXT,
|
|
140
|
+
description TEXT)
|
|
141
|
+
''')
|
|
142
|
+
|
|
143
|
+
self.conn.commit()
|
|
144
|
+
cursor.close()
|
|
145
|
+
|
|
146
|
+
def create_table(self):
|
|
147
|
+
# 生成aid的MD5哈希作为表名前缀
|
|
148
|
+
cursor = self.conn.cursor()
|
|
149
|
+
conversation_table = f"conversation"
|
|
150
|
+
messages_table = f"messages"
|
|
151
|
+
friend_table = f"friend"
|
|
152
|
+
chat_config_table = f"chat_config"
|
|
153
|
+
# cursor.execute(f"DROP TABLE IF EXISTS {conversation_table}")
|
|
154
|
+
|
|
155
|
+
cursor.execute(f'''CREATE TABLE IF NOT EXISTS {conversation_table} (
|
|
156
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
157
|
+
session_id TEXT NOT NULL,
|
|
158
|
+
identifying_code TEXT NOT NULL,
|
|
159
|
+
main_aid TEXT NOT NULL,
|
|
160
|
+
name TEXT NOT NULL,
|
|
161
|
+
type TEXT NOT NULL,
|
|
162
|
+
timestamp DATETIME DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime'))
|
|
163
|
+
)''')
|
|
164
|
+
|
|
165
|
+
#cursor.execute(f"DROP TABLE IF EXISTS {messages_table}")
|
|
166
|
+
|
|
167
|
+
cursor.execute(f'''CREATE TABLE IF NOT EXISTS {messages_table} (
|
|
168
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
169
|
+
message_id TEXT, -- 消息id, 用于去重
|
|
170
|
+
session_id INTEGER, -- 关联到对话表的id
|
|
171
|
+
role TEXT NOT NULL, -- 消息发送者,
|
|
172
|
+
message_aid TEXT NOT NULL,
|
|
173
|
+
parent_message_id INTEGER, -- 关联到父消息的id
|
|
174
|
+
to_aids TEXT NOT NULL, -- 消息发送者,
|
|
175
|
+
content TEXT NOT NULL, -- 消息内容,
|
|
176
|
+
instruction Text, -- 指令,
|
|
177
|
+
type TEXT NOT NULL, -- 消息状态,如"sent", "received",
|
|
178
|
+
status TEXT NOT NULL, -- 消息状态,如"error", "success",
|
|
179
|
+
timestamp DATETIME DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime'))
|
|
180
|
+
)''')
|
|
181
|
+
|
|
182
|
+
cursor.execute(f'''CREATE TABLE IF NOT EXISTS {chat_config_table} (
|
|
183
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
184
|
+
session_id INTEGER NOT NULL,
|
|
185
|
+
aid TEXT NOT NULL,
|
|
186
|
+
avaurl TEXT,
|
|
187
|
+
description TEXT,
|
|
188
|
+
post_data TEXT
|
|
189
|
+
)''')
|
|
190
|
+
|
|
191
|
+
cursor.execute(f'''CREATE TABLE IF NOT EXISTS {friend_table} (
|
|
192
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
193
|
+
aid TEXT NOT NULL,
|
|
194
|
+
name TEXT,
|
|
195
|
+
avaurl TEXT,
|
|
196
|
+
description TEXT
|
|
197
|
+
)''')
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
cursor.execute(f'''CREATE TABLE IF NOT EXISTS session_server (
|
|
201
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
202
|
+
session_id TEXT NOT NULL,
|
|
203
|
+
session_server TEXT
|
|
204
|
+
)''')
|
|
205
|
+
|
|
206
|
+
self.conn.commit()
|
|
207
|
+
cursor.close()
|
|
208
|
+
|
|
209
|
+
def insert_session_server(self, session_id, session_server):
|
|
210
|
+
try:
|
|
211
|
+
cursor = self.conn.cursor()
|
|
212
|
+
cursor.execute('''INSERT INTO session_server (session_id, session_server)
|
|
213
|
+
VALUES (?, ?)''',
|
|
214
|
+
(session_id, session_server))
|
|
215
|
+
self.conn.commit()
|
|
216
|
+
result = cursor.lastrowid
|
|
217
|
+
cursor.close()
|
|
218
|
+
return result
|
|
219
|
+
except sqlite3.Error as e:
|
|
220
|
+
log_error(f"insert_session_server数据库操作失败: {str(e)}")
|
|
221
|
+
return None
|
|
222
|
+
|
|
223
|
+
def get_session_server(self, session_id):
|
|
224
|
+
try:
|
|
225
|
+
cursor = self.conn.cursor()
|
|
226
|
+
cursor.execute('''SELECT session_server FROM session_server
|
|
227
|
+
WHERE session_id = ?''',
|
|
228
|
+
(session_id,))
|
|
229
|
+
result = cursor.fetchone()
|
|
230
|
+
cursor.close()
|
|
231
|
+
return result[0] if result else None
|
|
232
|
+
except sqlite3.Error as e:
|
|
233
|
+
log_error(f"get_session_server数据库操作失败: {str(e)}")
|
|
234
|
+
return None
|
|
235
|
+
|
|
236
|
+
def load_session_history(self, session_id):
|
|
237
|
+
try:
|
|
238
|
+
cursor = self.conn.cursor()
|
|
239
|
+
sesion_table = f"conversation"
|
|
240
|
+
cursor.execute(f'''SELECT * FROM {sesion_table} WHERE session_id =?''', (session_id,))
|
|
241
|
+
columns = ['id','session_id','identifying_code','main_aid','name','type','timestamp']
|
|
242
|
+
results = [dict(zip(columns, row)) for row in cursor.fetchall()]
|
|
243
|
+
cursor.close()
|
|
244
|
+
return results
|
|
245
|
+
except sqlite3.Error as e:
|
|
246
|
+
log_error(f"load_session_history数据库操作失败: {str(e)}")
|
|
247
|
+
return None
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def update_aid_info(self, aid, avaUrl, name, description):
|
|
251
|
+
try:
|
|
252
|
+
# cursor = self.conn.cursor()
|
|
253
|
+
# cursor.execute('''UPDATE agentids SET avaUrl =?, name =?, description =? WHERE aid =?''', (avaUrl, name, description, aid))
|
|
254
|
+
# self.conn.commit()
|
|
255
|
+
# result = cursor.rowcount > 0
|
|
256
|
+
# cursor.close() # 关闭cursor对象
|
|
257
|
+
return 1
|
|
258
|
+
except sqlite3.Error as e:
|
|
259
|
+
log_error(f"update_aid_info数据库操作失败: {str(e)}")
|
|
260
|
+
return False
|
|
261
|
+
|
|
262
|
+
def create_session(self, aid,session_id,identifying_code,name, type):
|
|
263
|
+
try:
|
|
264
|
+
# cursor = self.conn.cursor()
|
|
265
|
+
# conversation_table = f"conversation"
|
|
266
|
+
# # 修正参数数量,确保5个值对应5个占位符
|
|
267
|
+
# cursor.execute(f'''INSERT INTO {conversation_table} (session_id,identifying_code,main_aid,name,type) VALUES (?,?,?,?,?)''',
|
|
268
|
+
# (session_id, identifying_code, "", name, type))
|
|
269
|
+
# self.conn.commit()
|
|
270
|
+
# result = cursor.lastrowid
|
|
271
|
+
# cursor.close() # 关闭cursor对象
|
|
272
|
+
return 1
|
|
273
|
+
except sqlite3.Error as e:
|
|
274
|
+
log_error(f"create_conversation数据库操作失败: {str(e)}")
|
|
275
|
+
|
|
276
|
+
def invite_member(self, aid, session_id, invite_aid:str):
|
|
277
|
+
try:
|
|
278
|
+
# cursor = self.conn.cursor()
|
|
279
|
+
# chat_config_table = f"chat_config"
|
|
280
|
+
# cursor.execute(f'''INSERT INTO {chat_config_table} (session_id,aid,avaurl,description, post_data) VALUES (?,?,?,?,?)''',
|
|
281
|
+
# (session_id,invite_aid,"","",""))
|
|
282
|
+
# self.conn.commit()
|
|
283
|
+
# result = cursor.lastrowid
|
|
284
|
+
# cursor.close() # 关闭cursor对象
|
|
285
|
+
return 1
|
|
286
|
+
except sqlite3.Error as e:
|
|
287
|
+
log_error(f"invite_member数据库操作失败: {str(e)}")
|
|
288
|
+
return False
|
|
289
|
+
except Exception as e:
|
|
290
|
+
log_error(f"invite_member数据库操作失败: {str(e)}")
|
|
291
|
+
return False
|
|
292
|
+
|
|
293
|
+
def get_message_by_id(self, aid, session_id,message_id):
|
|
294
|
+
try:
|
|
295
|
+
# cursor = self.conn.cursor()
|
|
296
|
+
# messages_table = f"messages"
|
|
297
|
+
# cursor.execute(f'''SELECT * FROM {messages_table} WHERE session_id =? AND message_id =?''', (session_id,message_id))
|
|
298
|
+
# columns = ['id','session_id','message_id','role','message_aid', 'parent_message_id', 'to_aids', 'content', 'type', 'status', 'timestamp']
|
|
299
|
+
# results = [dict(zip(columns, row)) for row in cursor.fetchall()]
|
|
300
|
+
# cursor.close() # 关闭cursor对象
|
|
301
|
+
# 返回JSON格式字符串
|
|
302
|
+
return []
|
|
303
|
+
except sqlite3.Error as e:
|
|
304
|
+
log_error(f"get_message_by_id数据库操作失败: {str(e)}")
|
|
305
|
+
return []
|
|
306
|
+
|
|
307
|
+
def save_message(message):
|
|
308
|
+
try:
|
|
309
|
+
# cursor = self.conn.cursor()
|
|
310
|
+
# cursor.execute('''INSERT INTO messages (session_id, role, message_id, parent_message_id, to_aids, content, type, status) VALUES (?,?,?,?,?,?,?,?)''', (message.session_id, message.role, message.message_id, message.parent_message_id, message.to_aids, message.content, message.type, message.status))
|
|
311
|
+
# self.conn.commit()
|
|
312
|
+
# result = cursor.lastrowid
|
|
313
|
+
# cursor.close() # 关闭cursor对象
|
|
314
|
+
return 1
|
|
315
|
+
except sqlite3.Error as e:
|
|
316
|
+
log_error(f"save_message数据库操作失败: {str(e)}")
|
|
317
|
+
return None
|
|
318
|
+
|
|
319
|
+
def update_message(self, message):
|
|
320
|
+
try:
|
|
321
|
+
# cursor = self.conn.cursor()
|
|
322
|
+
# import json
|
|
323
|
+
# messages_table = f"messages"
|
|
324
|
+
# content_str = message["content"]
|
|
325
|
+
# if message["content"] is not None:
|
|
326
|
+
# # 添加类型判断,仅转换字典和列表类型
|
|
327
|
+
# if isinstance(message["content"], (dict, list)):
|
|
328
|
+
# content_str = json.dumps(message["content"])
|
|
329
|
+
# else: # 保留原始字符串类型
|
|
330
|
+
# content_str = str(message["content"])
|
|
331
|
+
# cursor.execute(f'''UPDATE {messages_table} SET content =?,status =? WHERE id =?''', (content_str, message["status"], message["id"]))
|
|
332
|
+
# self.conn.commit()
|
|
333
|
+
# result = cursor.rowcount > 0
|
|
334
|
+
# cursor.close() # 关闭cursor对象
|
|
335
|
+
return 1
|
|
336
|
+
except sqlite3.Error as e:
|
|
337
|
+
log_error(f"update_message数据库操作失败: {str(e)}")
|
|
338
|
+
return False
|
|
339
|
+
|
|
340
|
+
def insert_message(self, role,aid,conversation_id, message_aid, parent_message_id, to_aids, instruction,content, type, status,message_id=''):
|
|
341
|
+
try:
|
|
342
|
+
# cursor = self.conn.cursor()
|
|
343
|
+
# messages_table = f"messages"
|
|
344
|
+
# # 将json.dump改为json.dumps
|
|
345
|
+
# cursor.execute(f'''INSERT INTO {messages_table} (session_id, role,message_id,message_aid, parent_message_id, to_aids, instruction,content, type, status) VALUES (?,?,?,?,?,?,?,?,?,?)''',
|
|
346
|
+
# (conversation_id, role,message_id,message_aid, parent_message_id, to_aids, instruction,content, type, status))
|
|
347
|
+
# self.conn.commit()
|
|
348
|
+
# result = cursor.lastrowid
|
|
349
|
+
# cursor.close() # 关闭cursor对象
|
|
350
|
+
return 1
|
|
351
|
+
except sqlite3.Error as e:
|
|
352
|
+
log_error(f"insert_message数据库操作失败: {str(e)}")
|
|
353
|
+
|
|
354
|
+
def load_aid(self, aid):
|
|
355
|
+
try:
|
|
356
|
+
cursor = self.conn.cursor()
|
|
357
|
+
cursor.execute('''SELECT ep_aid, ep_url,avaUrl,name,description FROM agentids WHERE aid = ?''', (aid,))
|
|
358
|
+
result = cursor.fetchone()
|
|
359
|
+
cursor.close() # 关闭cursor对象
|
|
360
|
+
if result:
|
|
361
|
+
return result[0], result[1],result[2],result[3],result[4]
|
|
362
|
+
else:
|
|
363
|
+
return None, None,None,None,None
|
|
364
|
+
except sqlite3.Error as e:
|
|
365
|
+
log_error(f"load_aid数据库操作失败: {str(e)}")
|
|
366
|
+
return None, None,None,None,None
|
|
367
|
+
|
|
368
|
+
def create_aid(self, aid,ep_aid = "",ep_url = "",avaUrl = "",name = "",description=""):
|
|
369
|
+
try:
|
|
370
|
+
cursor = self.conn.cursor()
|
|
371
|
+
# 将私钥和CSR序列化为PEM格式字符串
|
|
372
|
+
cursor.execute('''INSERT INTO agentids (aid, ep_aid, ep_url,avaUrl,name,description)
|
|
373
|
+
VALUES (?,?,?,?,?,?)''',
|
|
374
|
+
(aid, ep_aid , ep_url,avaUrl,name,description))
|
|
375
|
+
self.conn.commit()
|
|
376
|
+
cursor.close() # 关闭cursor对象
|
|
377
|
+
return ""
|
|
378
|
+
except sqlite3.Error as e:
|
|
379
|
+
log_error(f"save_aid数据库操作失败: {str(e)}")
|
|
380
|
+
raise RuntimeError(f"save_aid数据库操作失败: {str(e)}")
|
|
381
|
+
|
|
382
|
+
def update_aid(self, aid, ep_aid, ep_url):
|
|
383
|
+
try:
|
|
384
|
+
cursor = self.conn.cursor()
|
|
385
|
+
cursor.execute('''UPDATE agentids SET ep_aid =?, ep_url =? WHERE aid =?''', (ep_aid, ep_url, aid))
|
|
386
|
+
self.conn.commit()
|
|
387
|
+
result = cursor.rowcount > 0
|
|
388
|
+
cursor.close() # 关闭cursor对象
|
|
389
|
+
return result
|
|
390
|
+
except sqlite3.Error as e:
|
|
391
|
+
log_error(f"update_aid数据库操作失败: {str(e)}")
|
|
392
|
+
return False
|
|
393
|
+
|
|
394
|
+
def get_agentid_list(self):
|
|
395
|
+
try:
|
|
396
|
+
cursor = self.conn.cursor()
|
|
397
|
+
cursor.execute('''SELECT aid FROM agentids''')
|
|
398
|
+
result = [row[0] for row in cursor.fetchall()] # 提取每个元组的第一个元素
|
|
399
|
+
cursor.close() # 关闭cursor对象
|
|
400
|
+
return result
|
|
401
|
+
except sqlite3.Error as e:
|
|
402
|
+
log_error(f"get_agentid_list数据库操作失败: {str(e)}")
|
|
403
|
+
return []
|
|
404
|
+
|
|
405
|
+
def get_conversation_by_id(self, aid, conversation_id):
|
|
406
|
+
try:
|
|
407
|
+
cursor = self.conn.cursor()
|
|
408
|
+
conversation_table = f"conversation"
|
|
409
|
+
cursor.execute(f'''SELECT id, session_id,identifying_code,main_aid,name,type FROM {conversation_table} WHERE id =?''', (conversation_id,))
|
|
410
|
+
result = cursor.fetchone()
|
|
411
|
+
cursor.close() # 关闭cursor对象
|
|
412
|
+
if result:
|
|
413
|
+
return {
|
|
414
|
+
'id': result[0],
|
|
415
|
+
'session_id': result[1],
|
|
416
|
+
'identifying_code': result[2],
|
|
417
|
+
'main_aid': result[3],
|
|
418
|
+
'name': result[4],
|
|
419
|
+
'type': result[5]
|
|
420
|
+
}
|
|
421
|
+
else:
|
|
422
|
+
return None
|
|
423
|
+
except sqlite3.Error as e:
|
|
424
|
+
log_error(f"get_conversation_by_id数据库操作失败: {str(e)}")
|
|
425
|
+
return None
|
|
426
|
+
|
|
427
|
+
def get_conversation_list(self, aid, main_aid, page=1, page_size=10):
|
|
428
|
+
try:
|
|
429
|
+
offset = (page - 1) * page_size
|
|
430
|
+
cursor = self.conn.cursor()
|
|
431
|
+
conversation_table = f"conversation"
|
|
432
|
+
if main_aid == "" or main_aid == None:
|
|
433
|
+
cursor.execute(
|
|
434
|
+
f'''SELECT id, session_id, identifying_code, name, type, timestamp
|
|
435
|
+
FROM {conversation_table}
|
|
436
|
+
ORDER BY timestamp DESC
|
|
437
|
+
LIMIT? OFFSET?''',
|
|
438
|
+
(page_size, offset)
|
|
439
|
+
)
|
|
440
|
+
else:
|
|
441
|
+
cursor.execute(
|
|
442
|
+
f'''SELECT id, session_id, identifying_code, name, type, timestamp
|
|
443
|
+
FROM {conversation_table}
|
|
444
|
+
WHERE main_aid = ?
|
|
445
|
+
ORDER BY timestamp DESC
|
|
446
|
+
LIMIT ? OFFSET ?''',
|
|
447
|
+
(main_aid, page_size, offset))
|
|
448
|
+
|
|
449
|
+
# 将查询结果转换为字典列表
|
|
450
|
+
columns = ['id', 'session_id', 'identifying_code', 'name', 'type', 'timestamp']
|
|
451
|
+
results = [dict(zip(columns, row)) for row in cursor.fetchall()]
|
|
452
|
+
cursor.close() # 关闭cursor对象
|
|
453
|
+
# 返回JSON格式字符串
|
|
454
|
+
return results
|
|
455
|
+
|
|
456
|
+
except sqlite3.Error as e:
|
|
457
|
+
log_error(f"get_conversation_list数据库操作失败: {str(e)}")
|
|
458
|
+
return []
|
|
459
|
+
|
|
460
|
+
def get_conversation_messages(self, conversation_id):
|
|
461
|
+
try:
|
|
462
|
+
cursor = self.conn.cursor()
|
|
463
|
+
cursor.execute('''SELECT id, aid, content, timestamp FROM messages WHERE conversation_id =? ORDER BY timestamp ASC''', (conversation_id,))
|
|
464
|
+
result = cursor.fetchall()
|
|
465
|
+
cursor.close() # 关闭cursor对象
|
|
466
|
+
return result
|
|
467
|
+
except sqlite3.Error as e:
|
|
468
|
+
log_error(f"get_conversation_messages数据库操作失败: {str(e)}")
|
|
469
|
+
return []
|
|
470
|
+
|
|
471
|
+
def get_conversation_config(self, conversation_id):
|
|
472
|
+
try:
|
|
473
|
+
cursor = self.conn.cursor()
|
|
474
|
+
cursor.execute('''SELECT id, aid, avaurl, description, post_data FROM chat_config WHERE conversation_id =?''', (conversation_id,))
|
|
475
|
+
result = cursor.fetchall()
|
|
476
|
+
cursor.close() # 关闭cursor对象
|
|
477
|
+
return result
|
|
478
|
+
except sqlite3.Error as e:
|
|
479
|
+
log_error(f"get_conversation_config数据库操作失败: {str(e)}")
|
|
480
|
+
return []
|
|
481
|
+
|
|
482
|
+
def add_conversation_config(self, conversation_id, aid, avaurl, description, post_data):
|
|
483
|
+
try:
|
|
484
|
+
cursor = self.conn.cursor()
|
|
485
|
+
cursor.execute('''INSERT INTO chat_config (conversation_id, aid, avaurl, description, post_data) VALUES (?,?,?,?,?)''', (conversation_id, aid, avaurl, description, post_data))
|
|
486
|
+
self.conn.commit()
|
|
487
|
+
result = cursor.lastrowid
|
|
488
|
+
cursor.close() # 关闭cursor对象
|
|
489
|
+
return result
|
|
490
|
+
except sqlite3.Error as e:
|
|
491
|
+
log_error(f"add_conversation_config数据库操作失败: {str(e)}")
|
|
492
|
+
return None
|
|
493
|
+
|
|
494
|
+
def update_conversation_config(self, config_id, avaurl, description, post_data):
|
|
495
|
+
try:
|
|
496
|
+
cursor = self.conn.cursor()
|
|
497
|
+
cursor.execute('''UPDATE chat_config SET avaurl = ?, description = ?, post_data = ? WHERE id = ?''', (avaurl, description, post_data, config_id))
|
|
498
|
+
self.conn.commit()
|
|
499
|
+
result = cursor.rowcount > 0
|
|
500
|
+
cursor.close() # 关闭cursor对象
|
|
501
|
+
return result
|
|
502
|
+
except sqlite3.Error as e:
|
|
503
|
+
log_error(f"update_conversation_config数据库操作失败: {str(e)}")
|
|
504
|
+
return False
|
|
505
|
+
|
|
506
|
+
def get_message_list(self, aid, session_id, page=1, page_size=10):
|
|
507
|
+
try:
|
|
508
|
+
page_size = 100
|
|
509
|
+
offset = (page - 1) * page_size
|
|
510
|
+
cursor = self.conn.cursor()
|
|
511
|
+
messages_table = f"messages"
|
|
512
|
+
|
|
513
|
+
# 修正SQL语句,移除多余的括号
|
|
514
|
+
cursor.execute(
|
|
515
|
+
f'''SELECT id, session_id,message_id,role,message_aid, parent_message_id, to_aids,instruction, content, type, status, timestamp
|
|
516
|
+
FROM {messages_table}
|
|
517
|
+
WHERE session_id = ?
|
|
518
|
+
ORDER BY timestamp ASC LIMIT ? OFFSET ?''',
|
|
519
|
+
(session_id, page_size, offset))
|
|
520
|
+
|
|
521
|
+
# 将查询结果转换为字典列表
|
|
522
|
+
columns = ['id','session_id','message_id','role','message_aid', 'parent_message_id', 'to_aids', 'instruction','content', 'type', 'status', 'timestamp']
|
|
523
|
+
results = [dict(zip(columns, row)) for row in cursor.fetchall()]
|
|
524
|
+
cursor.close() # 关闭cursor对象
|
|
525
|
+
# 返回JSON格式字符串
|
|
526
|
+
return results
|
|
527
|
+
except sqlite3.Error as e:
|
|
528
|
+
log_error(f"get_message_list数据库操作失败: {str(e)}")
|
|
529
|
+
return []
|
|
530
|
+
# return [dict(row) for row in cursor.fetchall(
|
|
531
|
+
|
|
532
|
+
def get_session_member_list(self,session_id):
|
|
533
|
+
try:
|
|
534
|
+
cursor = self.conn.cursor()
|
|
535
|
+
chat_config_table = f"chat_config"
|
|
536
|
+
cursor.execute(f'''SELECT * FROM {chat_config_table} WHERE session_id =?''', (session_id,))
|
|
537
|
+
columns = [column[0] for column in cursor.description] # 获取列名
|
|
538
|
+
rows = cursor.fetchall()
|
|
539
|
+
result = []
|
|
540
|
+
for row in rows:
|
|
541
|
+
if len(row) != len(columns): # 添加长度校验
|
|
542
|
+
continue
|
|
543
|
+
row_dict = {columns[i]: row[i] for i in range(len(columns))}
|
|
544
|
+
result.append(row_dict)
|
|
545
|
+
cursor.close()
|
|
546
|
+
return result
|
|
547
|
+
except sqlite3.Error as e:
|
|
548
|
+
log_error(f"get_session_member_list数据库操作失败: {str(e)}")
|
|
549
|
+
return []
|
|
550
|
+
|