Files
KiloStar/main.py
T

96 lines
3.4 KiB
Python

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()