fix: use stable yaml parser for aipod specs

This commit is contained in:
Codex
2026-06-10 18:31:02 +08:00
parent fee4001e3b
commit 391a4ce68f
5 changed files with 24 additions and 6 deletions
+3 -4
View File
@@ -1,12 +1,11 @@
import { mkdir, readdir, readFile, rm, stat, writeFile } from "node:fs/promises";
import path from "node:path";
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
import { AgentRunError } from "./errors.js";
import type { AipodSpec, AipodSpecRecord, BackendProfile, CreateQueueTaskInput, ExecutionPolicy, JsonRecord, JsonValue, RenderAipodInput, RenderedAipodQueueTask, ResourceBundleRef, SessionRef, WorkspaceRef } from "./types.js";
import { backendProfileSpec, isBackendProfile } from "./backend-profiles.js";
import { asRecord, stableHash, validateCreateQueueTask, validateExecutionPolicy, validateResourceBundleRef, validateSessionRef } from "./validation.js";
declare const Bun: { YAML: { parse(text: string): unknown; stringify(value: unknown): string } };
const aipodApiVersion = "agentrun.pikastech.local/v0.1";
const aipodKind = "AipodSpec";
@@ -39,7 +38,7 @@ export async function applyAipodSpec(input: unknown, dir = aipodSpecDirectory())
const spec = aipodSpecFromInput(input, "api");
await mkdir(dir, { recursive: true });
const file = path.join(dir, `${fileSafeAipodName(spec.metadata.name)}.yaml`);
await writeFile(file, Bun.YAML.stringify(spec), "utf8");
await writeFile(file, stringifyYaml(spec), "utf8");
const record = await loadAipodSpecFile(file);
return { action: "aipod-spec-apply", mutation: true, item: summarizeAipodSpecRecord(record), valuesPrinted: false };
}
@@ -53,7 +52,7 @@ export async function deleteAipodSpec(name: string, dir = aipodSpecDirectory()):
export function parseAipodSpecYaml(text: string, source = "stdin"): AipodSpec {
let parsed: unknown;
try {
parsed = Bun.YAML.parse(text);
parsed = parseYaml(text);
} catch (error) {
throw new AgentRunError("schema-invalid", `aipod-spec YAML parse failed: ${error instanceof Error ? error.message : String(error)}`, { httpStatus: 400, details: { source, valuesPrinted: false } });
}