diff --git a/_deploy/console-server/server.js b/_deploy/console-server/server.js index c84979e..6c1d84a 100644 --- a/_deploy/console-server/server.js +++ b/_deploy/console-server/server.js @@ -184,7 +184,7 @@ app.post('/api/exec', async (req, res) => { } }); -// ========== MCP 终端会话 (v2.0) ========== +// ========== MCP 终端会话 (v3.0) ========== const terminalSessions = {}; @@ -216,7 +216,9 @@ app.post('/api/terminal/open', (req, res) => { request_id: requestId, status: 'awaiting_auth', temp_key: null, - created_at: new Date().toISOString() + created_at: new Date().toISOString(), + operation_stage: '敲门中', + human_readable: '铸渊正在连接 ' + srv.name + ',请求操作权限...' }; res.json({ @@ -240,8 +242,12 @@ app.get('/api/terminal/status/:session_id', (req, res) => { if (entry.status === 'approved') { session.status = 'ready'; session.temp_key = entry.temp_key; + session.operation_stage = '已授权'; + session.human_readable = '冰朔已确认信任,铸渊获得操作权限,准备执行操作...'; } else if (entry.status === 'rejected') { session.status = 'rejected'; + session.operation_stage = '已拒绝'; + session.human_readable = '冰朔未确认此操作,铸渊等待新的指令。'; } } } @@ -252,6 +258,8 @@ app.get('/api/terminal/status/:session_id', (req, res) => { status: session.status, server: session.server, server_name: session.server_name, + operation_stage: session.operation_stage, + human_readable: session.human_readable, created_at: session.created_at }); }); @@ -265,6 +273,9 @@ app.post('/api/terminal/exec', async (req, res) => { if (!session) return res.status(404).json({ error: '会话不存在' }); if (session.status !== 'ready') return res.status(400).json({ error: '会话尚未就绪,等待冰朔授权中' }); + session.operation_stage = '执行中'; + session.human_readable = '铸渊正在 ' + session.server_name + ' 上执行操作...'; + const srv = SERVERS.find(s => s.code === session.server); if (!srv) return res.status(404).json({ error: '未找到服务器' }); @@ -298,6 +309,8 @@ app.post('/api/terminal/exec', async (req, res) => { }); const elapsed = Date.now() - startTime; + session.operation_stage = '完成'; + session.human_readable = '操作已完成,铸渊已返回结果到对话。耗时 ' + elapsed + 'ms。'; res.json({ ok: true, cmd: cmd, @@ -310,20 +323,32 @@ app.post('/api/terminal/exec', async (req, res) => { } }); -// 11. 关闭终端会话 +// 11. 更新终端会话操作状态(铸渊从对话中推送) +app.post('/api/terminal/update-status/:session_id', (req, res) => { + const session = terminalSessions[req.params.session_id]; + if (!session) return res.status(404).json({ error: '会话不存在' }); + const { operation_stage, human_readable } = req.body; + if (operation_stage) session.operation_stage = operation_stage; + if (human_readable) session.human_readable = human_readable; + res.json({ ok: true, operation_stage: session.operation_stage, human_readable: session.human_readable }); +}); + +// 12. 关闭终端会话 app.post('/api/terminal/close/:session_id', (req, res) => { const session = terminalSessions[req.params.session_id]; if (session) delete terminalSessions[req.params.session_id]; res.json({ ok: true }); }); -// 12. 获取所有活跃终端会话 +// 13. 获取所有活跃终端会话 app.get('/api/terminal/sessions', (req, res) => { const sessions = Object.entries(terminalSessions).map(([id, s]) => ({ session_id: id, server: s.server, server_name: s.server_name, status: s.status, + operation_stage: s.operation_stage, + human_readable: s.human_readable, created_at: s.created_at, age_seconds: Math.floor((Date.now() - new Date(s.created_at).getTime()) / 1000) })); @@ -332,7 +357,7 @@ app.get('/api/terminal/sessions', (req, res) => { const PORT = process.env.CONSOLE_PORT || 3920; app.listen(PORT, '127.0.0.1', () => { - console.log(`光湖服务器主控台 API v2.0`); + console.log(`光湖服务器主控台 API v3.0 — 操作回执系统`); console.log(` 监听: 127.0.0.1:${PORT}`); console.log(` 服务器: ${SERVERS.length} 台`); console.log(` MCP终端: 已启用`);