diff --git a/server/routes/agent-chat.js b/server/routes/agent-chat.js index 1c2f668..7ea113e 100644 --- a/server/routes/agent-chat.js +++ b/server/routes/agent-chat.js @@ -30,7 +30,7 @@ const companyService = new CompanyService(); // 交付物归宿只有一份推导(28 §4.4),公司环境上下文与执行链路的运行时坐标共用它 const { companyWorkspaceDir } = require('../src/core/prompt-builder'); const systemConfig = require('../config'); -const { requireAuthOrInternal } = require('../middleware/jwt-auth'); +const { requireAuthOrInternal, INTERNAL_TOKEN, INTERNAL_TOKEN_HEADER } = require('../middleware/jwt-auth'); const router = express.Router(); // 38 号文档 Phase 1:全站要求登录,但这个文件同时承接三处服务端自环调用 @@ -80,10 +80,25 @@ function selfChat(req, agentId, message, conversationId, label = 'SelfChat') { port: req?.socket?.localPort || systemConfig.port, path: `/api/agent/${agentId}/chat`, method: 'POST', - headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(postData) }, + // 本文件顶部 router.use(requireAuthOrInternal) 之后,这条自环 fetch 也要带内部令牌, + // 否则 401——之前漏了这一处,TaskDispatch/TaskCallback/TaskTransition/TaskReject/ + // HumanRequest 全部 7 个调用点静默失败(下面 chatRes 分支之前不看 statusCode, + // 401 也照样打印"✅ 已唤醒",症状跟 claude-cli-session-leak.md 那次一样是静默的)。 + headers: { + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(postData), + [INTERNAL_TOKEN_HEADER]: INTERNAL_TOKEN, + }, }, (chatRes) => { - chatRes.on('data', () => {}); - chatRes.on('end', () => console.log(`[${label}] ✅ 已唤醒 ${agentId} (conv: ${conversationId})`)); + let body = ''; + chatRes.on('data', (c) => { body += c; }); + chatRes.on('end', () => { + if (chatRes.statusCode >= 400) { + console.error(`[${label}] ❌ 唤醒 ${agentId} 失败: HTTP ${chatRes.statusCode} ${body.slice(0, 200)} (conv: ${conversationId})`); + } else { + console.log(`[${label}] ✅ 已唤醒 ${agentId} (conv: ${conversationId})`); + } + }); }); chatReq.on('error', (err) => console.error(`[${label}] ❌ 回调失败: ${err.message}`)); chatReq.write(postData);