feat: enable codex stdio code agent runtime

This commit is contained in:
Code Queue Review
2026-05-23 21:13:57 +00:00
parent cb79b9dac7
commit 3c8a146eee
24 changed files with 1279 additions and 135 deletions
+2 -2
View File
@@ -375,7 +375,7 @@ function validateCloudApiDbSource(ctx, env) {
function validateCloudApiCodeAgentSource(ctx, env) {
const contract = DEV_CODE_AGENT_PROVIDER_CONTRACT;
expectEqual(ctx, env.HWLAB_CODE_AGENT_PROVIDER, contract.provider, "$.services.hwlab-cloud-api.env.HWLAB_CODE_AGENT_PROVIDER", "cloud API Code Agent provider");
expectEqual(ctx, env.HWLAB_CODE_AGENT_PROVIDER, contract.codeAgentProvider, "$.services.hwlab-cloud-api.env.HWLAB_CODE_AGENT_PROVIDER", "cloud API Code Agent provider");
expectEqual(ctx, env.HWLAB_CODE_AGENT_MODEL, contract.model, "$.services.hwlab-cloud-api.env.HWLAB_CODE_AGENT_MODEL", "cloud API Code Agent model");
expectEqual(ctx, env.HWLAB_CODE_AGENT_TIMEOUT_MS, "120000", "$.services.hwlab-cloud-api.env.HWLAB_CODE_AGENT_TIMEOUT_MS", "cloud API Code Agent hard timeout budget");
expectEqual(
@@ -551,7 +551,7 @@ function validateCloudApiCodeAgentArtifacts(ctx, workloads) {
const secretRef = contract.secretRefs[0];
const container = mapByServiceId(listItems(workloads)).get("hwlab-cloud-api")?.spec?.template?.spec?.containers?.[0];
const env = new Map((container?.env ?? []).map((entry) => [entry.name, entry]));
expectEqual(ctx, env.get("HWLAB_CODE_AGENT_PROVIDER")?.value, contract.provider, "deploy/k8s/base/workloads.yaml.hwlab-cloud-api.env.HWLAB_CODE_AGENT_PROVIDER", "cloud API workload Code Agent provider");
expectEqual(ctx, env.get("HWLAB_CODE_AGENT_PROVIDER")?.value, contract.codeAgentProvider, "deploy/k8s/base/workloads.yaml.hwlab-cloud-api.env.HWLAB_CODE_AGENT_PROVIDER", "cloud API workload Code Agent provider");
expectEqual(ctx, env.get("HWLAB_CODE_AGENT_MODEL")?.value, contract.model, "deploy/k8s/base/workloads.yaml.hwlab-cloud-api.env.HWLAB_CODE_AGENT_MODEL", "cloud API workload Code Agent model");
expectEqual(ctx, env.get("HWLAB_CODE_AGENT_TIMEOUT_MS")?.value, "120000", "deploy/k8s/base/workloads.yaml.hwlab-cloud-api.env.HWLAB_CODE_AGENT_TIMEOUT_MS", "cloud API workload Code Agent hard timeout budget");
expectEqual(
+1 -1
View File
@@ -293,7 +293,7 @@ function inspectCodeAgentProviderDesiredState(ctx, deployService, workloadRecord
path: "deploy.codeAgentProvider",
message: "hwlab-cloud-api desired state must preserve Code Agent provider Secret ref and DEV egress proxy env",
expected: {
provider: DEV_CODE_AGENT_PROVIDER_CONTRACT.provider,
provider: DEV_CODE_AGENT_PROVIDER_CONTRACT.codeAgentProvider,
secretRef: `${DEV_CODE_AGENT_PROVIDER_CONTRACT.secretRefs[0].secretName}/${DEV_CODE_AGENT_PROVIDER_CONTRACT.secretRefs[0].secretKey}`,
egressTarget: DEV_CODE_AGENT_PROVIDER_CONTRACT.egress.target
},
+5 -2
View File
@@ -28,7 +28,7 @@ function codeAgentDeploy(env = {}) {
{
serviceId: "hwlab-cloud-api",
env: {
HWLAB_CODE_AGENT_PROVIDER: "openai",
HWLAB_CODE_AGENT_PROVIDER: "codex-stdio",
HWLAB_CODE_AGENT_MODEL: "gpt-5.5",
HWLAB_CODE_AGENT_OPENAI_BASE_URL: codeAgentBaseUrl,
OPENAI_API_KEY: "secretRef:hwlab-code-agent-provider/openai-api-key",
@@ -59,7 +59,7 @@ function codeAgentWorkloads(envOverrides = []) {
{
name: "hwlab-cloud-api",
env: [
{ name: "HWLAB_CODE_AGENT_PROVIDER", value: "openai" },
{ name: "HWLAB_CODE_AGENT_PROVIDER", value: "codex-stdio" },
{ name: "HWLAB_CODE_AGENT_MODEL", value: "gpt-5.5" },
{ name: "HWLAB_CODE_AGENT_OPENAI_BASE_URL", value: codeAgentBaseUrl },
{
@@ -305,6 +305,9 @@ test("Code Agent provider desired state preserves Secret ref and egress base URL
assert.equal(inspection.ready, true);
assert.equal(inspection.status, "pass");
assert.equal(inspection.provider, "codex-stdio");
assert.equal(inspection.runtimeProvider, "openai-responses");
assert.equal(inspection.backend, "hwlab-cloud-api/codex-mcp-stdio");
assert.equal(inspection.secretRef.present, true);
assert.equal(inspection.secretMaterialRead, false);
assert.equal(inspection.egress.deployMatchesDevProxy, true);
+5 -3
View File
@@ -1320,10 +1320,10 @@ function inspectCodeAgentProviderStaticContract(deploy, workloads) {
const deployBaseUrl = deployEnv[contract.egress.env];
const workloadBaseUrl = workloadEnv.get(contract.egress.env)?.value;
const egressChecks = [
["deployEnv.HWLAB_CODE_AGENT_PROVIDER", deployEnv.HWLAB_CODE_AGENT_PROVIDER, contract.provider],
["deployEnv.HWLAB_CODE_AGENT_PROVIDER", deployEnv.HWLAB_CODE_AGENT_PROVIDER, contract.codeAgentProvider],
["deployEnv.HWLAB_CODE_AGENT_MODEL", deployEnv.HWLAB_CODE_AGENT_MODEL, contract.model],
["deployEnv.HWLAB_CODE_AGENT_OPENAI_BASE_URL", deployBaseUrl, contract.egress.defaultBaseUrl],
["workloadEnv.HWLAB_CODE_AGENT_PROVIDER", workloadEnv.get("HWLAB_CODE_AGENT_PROVIDER")?.value, contract.provider],
["workloadEnv.HWLAB_CODE_AGENT_PROVIDER", workloadEnv.get("HWLAB_CODE_AGENT_PROVIDER")?.value, contract.codeAgentProvider],
["workloadEnv.HWLAB_CODE_AGENT_MODEL", workloadEnv.get("HWLAB_CODE_AGENT_MODEL")?.value, contract.model],
["workloadEnv.HWLAB_CODE_AGENT_OPENAI_BASE_URL", workloadBaseUrl, contract.egress.defaultBaseUrl]
];
@@ -1340,7 +1340,9 @@ function inspectCodeAgentProviderStaticContract(deploy, workloads) {
return {
contractVersion: contract.contractVersion,
environment: contract.environment,
provider: contract.runtimeProvider,
provider: contract.codeAgentProvider,
runtimeProvider: contract.runtimeProvider,
backend: contract.backend,
model: contract.model,
ready:
missingDeployEnv.length === 0 &&