Skip to content

Commit 5df215b

Browse files
committed
feat: add standard agent chat mode
1 parent 7082308 commit 5df215b

22 files changed

Lines changed: 2065 additions & 218 deletions

scripts/agent-chat-harness.mjs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#!/usr/bin/env node
2+
3+
const args = process.argv.slice(2);
4+
5+
if (args.includes("--version") || args.includes("-V")) {
6+
console.log("lovcode-agent-chat-harness 1.0.0");
7+
process.exit(0);
8+
}
9+
10+
const readFlag = (name, fallback = null) => {
11+
const index = args.indexOf(name);
12+
if (index === -1 || index + 1 >= args.length) return fallback;
13+
return args[index + 1];
14+
};
15+
16+
const provider = readFlag("--provider", "claude");
17+
const sessionId = readFlag("--session-id", "dev-session");
18+
const resumeId = readFlag("--resume");
19+
const prompt = args[args.length - 1] && !args[args.length - 1].startsWith("--")
20+
? args[args.length - 1]
21+
: "hello";
22+
23+
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
24+
const writeJson = (value) => process.stdout.write(`${JSON.stringify(value)}\n`);
25+
const writeErrJson = (value) => process.stderr.write(`${JSON.stringify(value)}\n`);
26+
27+
async function runClaude() {
28+
writeJson({ type: "system", subtype: "init", session_id: sessionId, resume_id: resumeId });
29+
await wait(120);
30+
writeJson({
31+
type: "assistant",
32+
message: {
33+
role: "assistant",
34+
content: [{ type: "text", text: "收到," }],
35+
},
36+
});
37+
await wait(120);
38+
writeJson({
39+
type: "assistant",
40+
message: {
41+
role: "assistant",
42+
content: [{ type: "text", text: `我会处理:${prompt}` }],
43+
},
44+
});
45+
await wait(120);
46+
writeJson({ type: "result", result: "已完成模拟执行。" });
47+
}
48+
49+
async function runCodex() {
50+
writeJson({ type: "session.started", id: sessionId, resume_id: resumeId });
51+
for (const text of ["收到,", "我会处理:", prompt, "\n\n已完成模拟执行。"]) {
52+
await wait(100);
53+
writeJson({ type: "agent_message_delta", delta: text });
54+
}
55+
}
56+
57+
if (prompt.includes("harness-error")) {
58+
writeErrJson({ type: "error", message: "Simulated harness error" });
59+
process.exit(2);
60+
}
61+
62+
if (prompt.includes("harness-stderr")) {
63+
process.stderr.write("Simulated stderr line\n");
64+
}
65+
66+
try {
67+
if (provider === "codex") {
68+
await runCodex();
69+
} else {
70+
await runClaude();
71+
}
72+
} catch (error) {
73+
writeErrJson({ type: "error", message: error instanceof Error ? error.message : String(error) });
74+
process.exit(1);
75+
}

0 commit comments

Comments
 (0)