import os import secrets import sys _INSECURE_SECRETS = {"secret", "114514", "changethiskey12345"} _secret_key = os.getenv("SECRET_KEY") _is_dev = os.getenv("KILOSTAR_ENV", "production").lower() in ("dev", "development") if not _secret_key or _secret_key in _INSECURE_SECRETS: if _is_dev: _secret_key = secrets.token_urlsafe(32) os.environ["SECRET_KEY"] = _secret_key print( "⚠️ [开发模式] 未提供有效的 SECRET_KEY,已生成临时随机密钥(重启后失效)。" ) else: print( "❌ [致命错误] 未提供有效的 SECRET_KEY 或使用了不安全的默认值。\n" " 请设置环境变量 SECRET_KEY 为一个高熵的随机字符串。\n" " 可使用: python -c \"import secrets; print(secrets.token_urlsafe(32))\"\n" " 若为开发环境,请设置 KILOSTAR_ENV=dev 以允许自动生成临时密钥。" ) sys.exit(1) from kilostar.utils.config_loader import get_app_config try: _app_cfg = get_app_config() except Exception as e: print(f"❌ [致命错误] 配置文件校验失败:{e}") sys.exit(1) import asyncio from kilostar.worker_cluster import WorkerCluster from kilostar.utils.banner import print_banner from kilostar.core.postgres_database import PostgresDatabase from kilostar.core.global_state_machine import GlobalStateMachine from kilostar.core.global_workflow_manager import GlobalWorkflowManager from kilostar.core.individual.regulatory_node import RegulatoryNode from kilostar.core.individual.consciousness_node import ConsciousnessNode from kilostar.plugin_runtime.plugin_manager import GlobalPluginManager async def start() -> None: """启动 KiloStar:单进程 asyncio 单体。 所有核心组件在本进程内实例化,经 ``register_actor`` 登记到进程内 actor 运行时; 业务代码统一通过 ``get_actor(name)`` 拿句柄调用(位置透明,未来可换远程后端)。 """ import uvicorn from kilostar.utils.actor import register_actor, get_actor from kilostar.api import app postgres_database = PostgresDatabase() await postgres_database.init_db() register_actor("postgres_database", postgres_database) # GSM 通过 actor 句柄依赖 postgres:保持"依赖对端不关心其位置"的一致语义 global_state_machine = GlobalStateMachine(get_actor("postgres_database")) await global_state_machine.init_state_machine() register_actor("global_state_machine", global_state_machine) global_workflow_manager = GlobalWorkflowManager() await global_workflow_manager.init_manager() register_actor("global_workflow_manager", global_workflow_manager) register_actor("regulatory_node", RegulatoryNode()) register_actor("consciousness_node", ConsciousnessNode()) worker_cluster = WorkerCluster(node_type="cpu") await worker_cluster.start() register_actor("worker_cluster", worker_cluster) plugin_manager = GlobalPluginManager() await plugin_manager.bootstrap() register_actor("global_plugin_manager", plugin_manager) print("✅ KiloStar 启动完成,监听 0.0.0.0:8000") config = uvicorn.Config(app, host="0.0.0.0", port=8000, log_level="info") server = uvicorn.Server(config) await server.serve() def main(): print_banner() try: asyncio.run(start()) except KeyboardInterrupt: print("系统已退出。") if __name__ == "__main__": main()