diff --git a/agent/plugin_hook_loader.py b/agent/plugin_hook_loader.py index 7be815c..9ad8a10 100644 --- a/agent/plugin_hook_loader.py +++ b/agent/plugin_hook_loader.py @@ -165,27 +165,30 @@ async def _execute_command(skill_path: str, command: str, hook_type: str, config """ try: # 设置环境变量,传递给子进程 + # 注意:subprocess 要求所有 env 值必须是 str 类型, + # getattr 可能返回 None(属性存在但值为 None),需要确保转换为 str env = os.environ.copy() - env['ASSISTANT_ID'] = getattr(config, 'bot_id', '') - env['USER_IDENTIFIER'] = getattr(config, 'user_identifier', '') - env['TRACE_ID'] = getattr(config, 'trace_id', '') - env['SESSION_ID'] = getattr(config, 'session_id', '') - env['LANGUAGE'] = getattr(config, 'language', '') + env['ASSISTANT_ID'] = str(getattr(config, 'bot_id', '') or '') + env['USER_IDENTIFIER'] = str(getattr(config, 'user_identifier', '') or '') + env['TRACE_ID'] = str(getattr(config, 'trace_id', '') or '') + env['SESSION_ID'] = str(getattr(config, 'session_id', '') or '') + env['LANGUAGE'] = str(getattr(config, 'language', '') or '') env['HOOK_TYPE'] = hook_type # 合并 config 中的自定义 shell 环境变量 shell_env = getattr(config, 'shell_env', None) if shell_env: - env.update(shell_env) + # 确保所有自定义环境变量值也是字符串 + env.update({k: str(v) if v is not None else '' for k, v in shell_env.items()}) # 对于 PreSave,传递 content if hook_type == 'PreSave': - env['CONTENT'] = kwargs.get('content', '') - env['ROLE'] = kwargs.get('role', '') + env['CONTENT'] = str(kwargs.get('content', '') or '') + env['ROLE'] = str(kwargs.get('role', '') or '') # 对于 PostAgent,传递 response if hook_type == 'PostAgent': - env['RESPONSE'] = kwargs.get('response', '') + env['RESPONSE'] = str(kwargs.get('response', '') or '') metadata = kwargs.get('metadata', {}) env['METADATA'] = json.dumps(metadata) if metadata else '' diff --git a/utils/settings.py b/utils/settings.py index 915cc5a..16af267 100644 --- a/utils/settings.py +++ b/utils/settings.py @@ -57,7 +57,7 @@ CHECKPOINT_DB_URL = os.getenv("CHECKPOINT_DB_URL", "postgresql://moshui:@localho # 连接池大小 # 同时可以持有的最大连接数 CHECKPOINT_POOL_SIZE = int(os.getenv("CHECKPOINT_POOL_SIZE", "20")) -MEM0_POOL_SIZE = int(os.getenv("MEM0_POOL_SIZE", "20")) +MEM0_POOL_SIZE = int(os.getenv("MEM0_POOL_SIZE", "50")) # Checkpoint 自动清理配置 # 是否启用自动清理旧 session