73 lines
2.4 KiB
JavaScript
73 lines
2.4 KiB
JavaScript
const fs = require("fs");
|
|
let code = fs.readFileSync("src/agents/coordinator.js", "utf8");
|
|
|
|
// Step 1: Remove old bus.on() registrations from onInit
|
|
code = code.replace(
|
|
/ \/\/ 注册消息处理器\n([\s\S]*?)this\._taskSeq = 0/m,
|
|
' // 消息路由已移至 onMessage()\n\n this._taskSeq = 0'
|
|
);
|
|
|
|
// Step 2: Add onMessage override (insert before onHeartbeat)
|
|
const hbIdx = code.indexOf(" async onHeartbeat() {");
|
|
const onMessage = `
|
|
async onMessage(msg) {
|
|
await super.onMessage(msg)
|
|
switch (msg.type) {
|
|
case MessageType.AGENT_READY: return this._onAgentReady(msg)
|
|
case MessageType.AGENT_DIE: return this._onAgentDie(msg)
|
|
case MessageType.TASK_ASSIGN: return this._onTaskAssign(msg)
|
|
case MessageType.TASK_RESULT: return this._onTaskResult(msg)
|
|
case MessageType.TASK_FAILED: return this._onTaskFailed(msg)
|
|
case MessageType.USER_INPUT: return this._onUserInput(msg)
|
|
case MessageType.REFLECT: return this._onReflect(msg)
|
|
}
|
|
}
|
|
|
|
`;
|
|
code = code.slice(0, hbIdx) + onMessage + code.slice(hbIdx);
|
|
|
|
// Step 3: Add _onTaskAssign handler (insert before _onAgentReady)
|
|
const arIdx = code.indexOf(" /** @private */\n _onAgentReady");
|
|
const taskAssign = ` /** @private */
|
|
_onTaskAssign(msg) {
|
|
const { taskId, action, params, priority } = msg.payload || {}
|
|
console.log(\`[Coordinator] 收到任务 \${taskId || '(no-id)'}: \${action}\`)
|
|
|
|
const target = this._routeTask(action, params || {})
|
|
if (!target) {
|
|
console.log(\`[Coordinator] 无法路由任务 "\${action}",无匹配 Agent\`)
|
|
this.send(MessageType.TASK_FAILED, msg.from, {
|
|
taskId,
|
|
reason: 'no_matching_agent',
|
|
}, { replyTo: msg.id })
|
|
return
|
|
}
|
|
|
|
const realTaskId = taskId || \`task_\${++this._taskSeq}_\${Date.now()}\`
|
|
const task = {
|
|
id: realTaskId,
|
|
action,
|
|
params: params || {},
|
|
assignedTo: target,
|
|
status: 'running',
|
|
createdAt: Date.now(),
|
|
requesterId: msg.from,
|
|
}
|
|
this._tasks.set(realTaskId, task)
|
|
|
|
this.send(MessageType.TASK_ASSIGN, target, {
|
|
taskId: realTaskId,
|
|
action,
|
|
params: params || {},
|
|
priority: priority ?? Priority.NORMAL,
|
|
})
|
|
|
|
console.log(\`[Coordinator] 任务 \${realTaskId} -> \${target}\`)
|
|
}
|
|
|
|
`;
|
|
code = code.slice(0, arIdx) + taskAssign + code.slice(arIdx);
|
|
|
|
fs.writeFileSync("src/agents/coordinator.js", code, "utf8");
|
|
console.log("OK: patched coordinator.js");
|