feat: add controlled codex thread rollback
This commit is contained in:
@@ -62,6 +62,15 @@ function resolvePrompt(task) {
|
||||
return String(task?.executionPrompt || task?.requestText || "").trim();
|
||||
}
|
||||
|
||||
function isThreadRollbackTask(task) {
|
||||
return task?.intentCategory === "thread_rollback" || task?.taskType === "thread_rollback";
|
||||
}
|
||||
|
||||
function resolveRollbackNumTurns(task) {
|
||||
const numeric = Number(task?.rollbackNumTurns ?? 1);
|
||||
return Number.isFinite(numeric) && numeric >= 1 ? Math.floor(numeric) : undefined;
|
||||
}
|
||||
|
||||
function normalizeTimeoutMs(value) {
|
||||
const numeric = Number(value);
|
||||
return Number.isFinite(numeric) && numeric > 0 ? Math.floor(numeric) : 120_000;
|
||||
@@ -3088,6 +3097,28 @@ export async function executeCodexAppServerTask(runnerConfig, task) {
|
||||
if (!threadId) {
|
||||
throw new Error("CODEX_APP_SERVER_THREAD_ID_MISSING");
|
||||
}
|
||||
|
||||
if (isThreadRollbackTask(task)) {
|
||||
const numTurns = resolveRollbackNumTurns(task);
|
||||
if (!numTurns) {
|
||||
throw new Error("CODEX_APP_SERVER_ROLLBACK_NUM_TURNS_INVALID");
|
||||
}
|
||||
await request("thread/rollback", { threadId, numTurns });
|
||||
return {
|
||||
status: "completed",
|
||||
replyBody: `已回滚 Codex 线程最近 ${numTurns} 轮。注意:这只回滚线程历史,不会自动还原本地文件变更。`,
|
||||
threadId,
|
||||
turnControl: "rollback",
|
||||
rollback: {
|
||||
numTurns,
|
||||
},
|
||||
cwd,
|
||||
transport: runnerConfig.transport,
|
||||
executionProgress: progressCollector.snapshot(),
|
||||
canFallbackToCli: false,
|
||||
};
|
||||
}
|
||||
|
||||
const interThreadBroker = await maybeInjectInterThreadContext({
|
||||
request,
|
||||
task,
|
||||
|
||||
Reference in New Issue
Block a user