⚙️ CmdCode-Solo 运行逻辑架构

ui.html (1956行) + proxy.php (2005行) + config.enc.php — 完整数据流与功能映射

🌐 浏览器 — ui.html (1956行) 📄 HTML/DOM 层 chatContainer · userInput · sendBtn mudStatusBar · fmOverlay · ivOverlay mudImageToggle · mudVoiceToggle mudVisionToggle · mudThinkingToggle 行 1-440 CSS · 行 440-470 DOM元素 🎨 CSS 样式层 暗色主题 · 聊天气泡 · MUD状态条 文件管理器 · 图片查看器 登录弹窗 · 工具调用动画 行 1-440 📦 JS 全局状态 PROXY_URL · accessToken · currentUser · mudActive · showMudImage/Voice/Vision · abortController · commandQueue 行 446-542 🧠 Agent Loop 核心 runAgentLoop(userMessage) ├─ MUD命令拦截 (纯机械: save/load) ├─ 记忆注入 (fetchMemoryContext) ├─ 构建系统提示 (buildSystemPrompt) ├─ LLM 调用循环 (MAX_LOOPS=10) ├─ 工具执行 (tool_calls) ├─ MUD配图/语音消费 └─ 记忆提取 (triggerMemoryExtraction) 行 1326-1485 📝 系统提示词引擎 buildSystemPrompt() ├─ 用户身份判断 (登录/访客) ├─ 文件系统规则注入 ├─ 工具列表说明 ├─ MUD叙事规则 ├─ MUD开关状态注入 (动态) └─ EDIT_PRIORITY + DRIFT_GUARD 行 1292-1325 🔧 工具系统 (ALL_TOOLS) web_search ──→ proxy → MiniMax /chat vision_recognition ──→ proxy → MiniMax image_generation ──→ proxy → /image_generation video_generation ──→ proxy → /video_submit+poll music_generation ──→ proxy → /music_generation text_to_speech ──→ proxy → /t2a_v2 read/write/edit ──→ proxy → 文件系统 web_fetch ──→ proxy → curl 抓取 mud_action ──→ proxy → GameEngine AskUserQuestion ──→ 等待用户输入 行 975-1005 定义 · 行 1007-1233 处理器 📡 通信层 apiCall(action, params) → POST proxy.php {_action:...} 处理: register/login/file_ops/memory proxyRequest(provider, path, body) → POST proxy.php {_provider:..., _path:..., _token:..., ...body} 处理: LLM调用/图片/视频/音乐/TTS 🔒 _token 验证 → ACCESS_TOKEN 行 992-1006 proxyRequest 🧩 前端辅助模块 记忆系统: fetchMemoryContext · triggerMemoryExtraction · startPeriodicMemoryExtraction (10min) Token管理: TokenEstimator · compactContext (上下文压缩) MUD状态: parseMudResponse · updateMudStatusBar · buildMudStateContext UI管理: File Manager · Image Viewer · Session Health · 命令队列 行 843-970 记忆+Token · 行 1486-1740 文件/图片 · 行 1743-1956 事件绑定+Init 🎮 MUD 游戏前端逻辑 激活: "开始泥巴游戏" → mud_action(init) → mudActive=true 切换: MUD模式用 MiniMax-M2.7 · 普通模式用 deepseek-v4-flash 配图: _mudPendingImage → addImageMessage | 语音: _mudPendingVoice 行 532-630 状态 · 行 1302-1325 提示 · 行 1447-1470 消费 🖥️ 服务器 — proxy.php (2005行) 🚪 请求路由入口 ① CORS 白名单校验 (40+域名) ② JSON body 解析 ③ config.enc.php 加载 ④ _action 存在? → 用户系统路由 | 否则 → API 代理路由 (需要 _token) 行 240-600 👤 用户系统 (20个action) register · login · logout · session get_proxy_token · quota file_read · file_write · file_edit file_delete · list_files · file_rename file_save_from_url · file_download generate_share_link · image_proxy web_fetch · bash · memory mud_action → GameEngine 🔒 Token: register/login/session 豁免 行 594-1130 switch/case 路由 行 388-590 用户文件系统 🎮 GameEngine 类 initNewGame() · dispatchCommand() updateState() · getStateBlock() 行 1131-1155 🧠 记忆系统 (memory) search — 语义搜索记忆 get_persona — 用户画像 get_scene — 场景上下文 enqueue_extract — 批量提取 update_persona — 画像更新 switch_scene · get_all_scenes AES-256-GCM 加密存储 MySQL PDO + JSONL 文件 行 32-300 加密/DB/LLM 行 925-1130 路由 行 1699-1845 后台提取 🔄 API 代理核心 (多密钥轮换) ① 验证 _token → ACCESS_TOKEN ② 解析 _provider + _path → PROVIDERS[name] ③ 选择 API Key (轮换起点 + cooldown) ④ curl 转发到供应商 (带 Authorization) ⑤ 429 → 自动切换下一个 Key → 重试 ⑥ 超时处理: 音乐异步(60s) · 视频轮询 · 其他90s providers: minimax(3key) · opencode-go(5key) · deepseek 行 1162-1225 Token+Key管理 · 行 1225-1700 代理转发 · 行 1919-2005 轮询重试 行 1175-1225 超时+轮换+cooldown 🔐 config.enc.php AES 加密: API Keys · DB密码 ACCESS_TOKEN · MySQL 凭据 .htaccess 禁止直访 📁 文件系统 users/{username}/ (100MB配额) project/ · tmp/ · images/ · mud/ guest/ (访客共享) 🗄️ MySQL (XinCache) memory_facts · memory_personas memory_scenes · memory_fts (全文索引) ☁️ 外部 API 供应商 MiniMax · OpenCode-Go · DeepSeek chat/image/video/music/tts/vision POST curl 图例: 前端 后端 存储 安全 MUD 外部 工具

📋 核心数据流

用户操作前端函数通信方式proxy.php 处理结果
发送消息 runAgentLoop proxyRequest
POST + _token
API代理 → curl → LLM 返回 choices[0].message
若有 tool_calls → 执行工具
开始MUD游戏 runAgentLoop
拦截"开始泥巴游戏"
apiCall
mud_action
GameEngine
initNewGame()
返回 state + game_output
前端设 mudActive=true
MUD 叙事输入 runAgentLoop
不拦截,走LLM
proxyRequest
MiniMax-M2.7
API代理 → MiniMax
+ mud_action tool
LLM叙事 + 配图/语音
GameEngine 更新状态
图片生成 image_generation
tool handler
proxyRequest
/image_generation
API代理 → MiniMax
image-01 模型
返回 image_urls
saveMediaToUser → 用户目录
文件读写 read/write/edit
tool handler
apiCall
file_read/write/edit
文件系统
users/{user}/
直接读写文件
100MB 配额限制
登录/注册 handleAuth apiCall
login/register
用户系统
session + bcrypt
返回 accessToken
后续请求携带 _token
记忆注入 fetchMemoryContext
Agent Loop 前
apiCall
memory/search
MySQL
语义搜索 + 画像
注入 system prompt
增强上下文理解

🔑 关键机制

机制前端 (ui.html)后端 (proxy.php)
API Key 轮换 无感知,proxyRequest 自动重试 3供应商 × 多Key
429 → 自动切换 · cooldown · 日切
Token 认证 accessToken
从 get_proxy_token 获取
ACCESS_TOKEN
config.enc.php 加密存储
上下文压缩 TokenEstimator
超阈值 → compactContext
LLM 摘要
通过 /chat/completions
MUD 模型切换 mudActive → MiniMax-M2.7
!mudActive → deepseek-v4-flash
按 _provider 路由到不同供应商
记忆加密 无感知 AES-256-GCM
用户级密钥派生 · MySQL + JSONL
配额保护 _xxxQuotaExhausted
会话级禁止重复调用
100MB/用户
checkMemoryQuota · dirSize

CmdCode-Solo Architecture · Generated 2026-06-02 · ui.html v1956L · proxy.php v2005L