feat: add codex stdio code agent session gate

This commit is contained in:
Code Queue Review
2026-05-23 13:29:22 +00:00
parent ad1383ecf7
commit f42d8d121d
20 changed files with 2105 additions and 322 deletions
+12 -11
View File
@@ -117,9 +117,9 @@ async function runLocalContractSmoke() {
assert.match(failed.error.message, /Codex CLI command is not available/);
assert.deepEqual(failed.error.missingCommands, ["codex"]);
assert.ok(failed.error.missingEnv.includes("OPENAI_API_KEY"));
assert.equal(failed.availability.status, "available");
assert.equal(failed.availability.blocker, null);
assert.equal(failed.availability.reason, null);
assert.equal(failed.availability.status, "partial");
assert.match(failed.availability.blocker, /Codex stdio|long-lived/u);
assert.equal(failed.availability.reason, "codex_stdio_supervisor_disabled");
assert.equal(failed.availability.runner.ready, true);
assert.match(failed.availability.summary, /受控只读 runner/u);
assert.match(failed.availability.summary, /hwlab-code-agent-provider\/openai-api-key/u);
@@ -198,14 +198,14 @@ async function runLocalContractSmoke() {
assert.equal(runnerPwd.codexStdioFeasibility.status, "blocked");
assert.equal(runnerPwd.longLivedSessionGate.status, "blocked");
assert.equal(runnerPwd.longLivedSessionGate.pass, false);
assert.ok(runnerPwd.longLivedSessionGate.blockers.some((blocker) => blocker.code === "stdio_protocol_not_wired"));
assert.ok(runnerPwd.longLivedSessionGate.blockers.some((blocker) => blocker.code === "controlled_readonly_not_long_lived_stdio"));
assert.equal(runnerPwd.toolCalls[0].name, "pwd");
assert.equal(runnerPwd.toolCalls[0].status, "completed");
const runnerCapability = classifyCodexRunnerCapability(runnerPwd, { httpStatus: 200 });
assert.equal(runnerCapability.status, "pass");
assert.equal(runnerCapability.capabilityPass, true);
assert.equal(runnerCapability.longLivedSession, false);
logOk("read-only runner pwd capability");
assert.equal(runnerCapability.status, "blocked");
assert.equal(runnerCapability.capabilityPass, false);
assert.equal(runnerCapability.blocker, "controlled-readonly-not-long-lived");
logOk("read-only runner pwd remains partial capability");
const runnerSecondTurn = await handleCodeAgentChat(
{
@@ -429,9 +429,10 @@ async function runLocalContractSmoke() {
logOk("M3 Skill CLI routes through HWLAB API only");
const completedHttp200Readiness = classifyCodeAgentChatReadiness(completedLivePayload, { realDevLive: true, httpStatus: 200 });
assert.equal(completedHttp200Readiness.status, "pass");
assert.equal(completedHttp200Readiness.devLiveReplyPass, true);
logOk("HTTP 200 completion-looking payload can pass");
assert.equal(completedHttp200Readiness.status, "blocked");
assert.equal(completedHttp200Readiness.devLiveReplyPass, false);
assert.equal(completedHttp200Readiness.blocker, "untrusted-completion");
logOk("HTTP 200 OpenAI fallback completion is not full Code Agent pass");
for (const status of [400, 401, 403, 429, 500, 502, 503, 504]) {
const readiness = classifyCodeAgentChatReadiness(completedLivePayload, { realDevLive: true, httpStatus: status });