96 lines
3.4 KiB
Python
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()
|