feat: add codex stdio code agent session gate
This commit is contained in:
@@ -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 });
|
||||
|
||||
Reference in New Issue
Block a user