fix: sync Codex app-server protocol (#77578)

* fix: sync codex app-server protocol

* docs: add codex protocol changelog

* fix: refresh codex protocol schemas
This commit is contained in:
Peter Steinberger
2026-05-05 00:43:07 +01:00
committed by GitHub
parent 0677a4f8b3
commit d522a18971
115 changed files with 3604 additions and 2594 deletions

View File

@@ -1,58 +1,29 @@
import fs from "node:fs/promises";
import path from "node:path";
import { resolveCodexAppServerProtocolSource } from "./lib/codex-app-server-protocol-source.js";
import {
generateExperimentalCodexAppServerProtocolSource,
selectedCodexAppServerJsonSchemas,
} from "./lib/codex-app-server-protocol-source.js";
const { sourceRoot } = await resolveCodexAppServerProtocolSource(process.cwd());
const targetRoot = path.resolve(
process.cwd(),
"extensions/codex/src/app-server/protocol-generated",
);
const selectedJsonSchemas = [
"DynamicToolCallParams.json",
"v2/ErrorNotification.json",
"v2/GetAccountResponse.json",
"v2/ModelListResponse.json",
"v2/ThreadResumeResponse.json",
"v2/ThreadStartResponse.json",
"v2/TurnCompletedNotification.json",
"v2/TurnStartResponse.json",
] as const;
const source = await generateExperimentalCodexAppServerProtocolSource();
try {
await fs.rm(targetRoot, { recursive: true, force: true });
await fs.mkdir(targetRoot, { recursive: true });
await fs.cp(source.typescriptRoot, path.join(targetRoot, "typescript"), {
recursive: true,
});
await fs.rm(targetRoot, { recursive: true, force: true });
await fs.mkdir(targetRoot, { recursive: true });
await fs.cp(path.join(sourceRoot, "typescript"), path.join(targetRoot, "typescript"), {
recursive: true,
});
await rewriteTypeScriptImports(path.join(targetRoot, "typescript"));
for (const schema of selectedJsonSchemas) {
await fs.mkdir(path.dirname(path.join(targetRoot, "json", schema)), { recursive: true });
await fs.copyFile(path.join(sourceRoot, "json", schema), path.join(targetRoot, "json", schema));
for (const schema of selectedCodexAppServerJsonSchemas) {
await fs.mkdir(path.dirname(path.join(targetRoot, "json", schema)), { recursive: true });
await fs.copyFile(path.join(source.jsonRoot, schema), path.join(targetRoot, "json", schema));
}
} finally {
await source.cleanup();
}
console.log(`Synced Codex app-server generated protocol from ${sourceRoot}`);
async function rewriteTypeScriptImports(root: string): Promise<void> {
const entries = await fs.readdir(root, { withFileTypes: true });
await Promise.all(
entries.map(async (entry) => {
const fullPath = path.join(root, entry.name);
if (entry.isDirectory()) {
await rewriteTypeScriptImports(fullPath);
return;
}
if (!entry.isFile() || !entry.name.endsWith(".ts")) {
return;
}
const text = await fs.readFile(fullPath, "utf8");
await fs.writeFile(
fullPath,
text
.replace(/(from\s+["'])(\.{1,2}\/[^"']+?)(\.js)?(["'])/g, "$1$2.js$4")
.replace('export * as v2 from "./v2.js";', 'export * as v2 from "./v2/index.js";')
.replaceAll("| null | null", "| null"),
);
}),
);
}
console.log(`Synced Codex app-server generated protocol from ${source.codexRepo}`);