feat: adapt codex app-server protocol updates
This commit is contained in:
148
tests/fixtures/codex-app-server-runtime.mjs
vendored
148
tests/fixtures/codex-app-server-runtime.mjs
vendored
@@ -4,6 +4,8 @@ import readline from "node:readline";
|
||||
|
||||
const rl = readline.createInterface({ input: process.stdin });
|
||||
const received = [];
|
||||
let injectedItems = [];
|
||||
let overloadedTurnStartEmitted = false;
|
||||
|
||||
function send(message) {
|
||||
process.stdout.write(`${JSON.stringify(message)}\n`);
|
||||
@@ -42,6 +44,42 @@ rl.on("line", (line) => {
|
||||
return;
|
||||
}
|
||||
|
||||
if (message.method === "thread/read") {
|
||||
send({
|
||||
id: message.id,
|
||||
result: {
|
||||
thread: {
|
||||
id: message.params?.threadId,
|
||||
name: "源线程",
|
||||
},
|
||||
items: [
|
||||
{
|
||||
type: "message",
|
||||
role: "assistant",
|
||||
content: [
|
||||
{
|
||||
type: "output_text",
|
||||
text: "源线程最近结论:优先使用 app-server 协议。",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (message.method === "thread/inject_items") {
|
||||
injectedItems = message.params?.items ?? [];
|
||||
send({
|
||||
id: message.id,
|
||||
result: {
|
||||
injected: injectedItems.length,
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (message.method === "thread/start") {
|
||||
send({
|
||||
id: message.id,
|
||||
@@ -56,6 +94,20 @@ rl.on("line", (line) => {
|
||||
}
|
||||
|
||||
if (message.method === "turn/start") {
|
||||
if (
|
||||
process.env.BOSS_CODEX_APP_SERVER_FIXTURE_OVERLOAD_ON_TURN_START === "1" &&
|
||||
!overloadedTurnStartEmitted
|
||||
) {
|
||||
overloadedTurnStartEmitted = true;
|
||||
send({
|
||||
id: message.id,
|
||||
error: {
|
||||
code: -32001,
|
||||
message: "Server overloaded; retry later.",
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
const text = message.params?.input?.find?.((item) => item?.type === "text")?.text ?? "";
|
||||
send({
|
||||
id: message.id,
|
||||
@@ -69,12 +121,70 @@ rl.on("line", (line) => {
|
||||
if (process.env.BOSS_CODEX_APP_SERVER_FIXTURE_EXIT_AFTER_TURN_START === "1") {
|
||||
process.exit(0);
|
||||
}
|
||||
if (process.env.BOSS_CODEX_APP_SERVER_FIXTURE_EMIT_PROGRESS === "1") {
|
||||
send({
|
||||
method: "turn/plan/updated",
|
||||
params: {
|
||||
threadId: message.params?.threadId,
|
||||
turnId: "turn-fixture",
|
||||
plan: [
|
||||
{ text: "读取 Codex 官方 app-server 协议", status: "completed" },
|
||||
{ text: "执行 targeted/full test", status: "in_progress" },
|
||||
],
|
||||
},
|
||||
});
|
||||
send({
|
||||
method: "turn/diff/updated",
|
||||
params: {
|
||||
threadId: message.params?.threadId,
|
||||
turnId: "turn-fixture",
|
||||
diff: {
|
||||
changedFiles: 3,
|
||||
additions: 181,
|
||||
deletions: 52,
|
||||
},
|
||||
},
|
||||
});
|
||||
send({
|
||||
method: "item/completed",
|
||||
params: {
|
||||
threadId: message.params?.threadId,
|
||||
turnId: "turn-fixture",
|
||||
item: {
|
||||
type: "fileChange",
|
||||
id: "file-change-1",
|
||||
changes: [
|
||||
{ path: "docs/protocol-snapshots/codex-app-server/codex-app-server-protocol-0.135.0.json" },
|
||||
],
|
||||
},
|
||||
},
|
||||
});
|
||||
send({
|
||||
method: "thread/started",
|
||||
params: {
|
||||
thread: {
|
||||
id: "subagent-thread",
|
||||
source: {
|
||||
subAgent: {
|
||||
thread_spawn: {
|
||||
agent_nickname: "Mendel",
|
||||
agent_role: "explorer",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
send({
|
||||
method: "item/agentMessage/delta",
|
||||
params: {
|
||||
threadId: message.params?.threadId,
|
||||
turnId: "turn-fixture",
|
||||
delta: `APP_SERVER_REPLY:${text}`,
|
||||
delta:
|
||||
process.env.BOSS_CODEX_APP_SERVER_FIXTURE_INTER_THREAD === "1"
|
||||
? `INTER_THREAD_INJECTED:${JSON.stringify(injectedItems)}`
|
||||
: `APP_SERVER_REPLY:${text}`,
|
||||
},
|
||||
});
|
||||
send({
|
||||
@@ -91,6 +201,42 @@ rl.on("line", (line) => {
|
||||
return;
|
||||
}
|
||||
|
||||
if (message.method === "turn/steer") {
|
||||
const text = message.params?.input?.find?.((item) => item?.type === "text")?.text ?? "";
|
||||
send({
|
||||
id: message.id,
|
||||
result: {
|
||||
turn: {
|
||||
id: message.params?.expectedTurnId,
|
||||
threadId: message.params?.threadId,
|
||||
},
|
||||
},
|
||||
});
|
||||
send({
|
||||
method: "item/agentMessage/delta",
|
||||
params: {
|
||||
threadId: message.params?.threadId,
|
||||
turnId: message.params?.expectedTurnId,
|
||||
delta:
|
||||
process.env.BOSS_CODEX_APP_SERVER_FIXTURE_STEER === "1"
|
||||
? `STEERED:${text}`
|
||||
: `APP_SERVER_STEERED:${text}`,
|
||||
},
|
||||
});
|
||||
send({
|
||||
method: "turn/completed",
|
||||
params: {
|
||||
threadId: message.params?.threadId,
|
||||
turn: {
|
||||
id: message.params?.expectedTurnId,
|
||||
status: "completed",
|
||||
},
|
||||
},
|
||||
});
|
||||
process.stderr.write(`${JSON.stringify({ received })}\n`);
|
||||
return;
|
||||
}
|
||||
|
||||
send({
|
||||
id: message.id,
|
||||
error: {
|
||||
|
||||
Reference in New Issue
Block a user