import { readFileSync } from "node:fs"; import { agentRunHelp } from "./src/agentrun"; import { rootHelp } from "./src/help"; function assertCondition(condition: unknown, message: string, detail: unknown = {}): void { if (!condition) throw new Error(`${message}: ${JSON.stringify(detail)}`); } const agentRunUsage = Array.isArray((agentRunHelp() as { usage?: unknown }).usage) ? ((agentRunHelp() as { usage: unknown[] }).usage).map(String) : []; assertCondition( agentRunUsage.some((line) => line.includes("control-plane cleanup-runs --min-age-minutes 30 --limit 200 --dry-run")) && agentRunUsage.some((line) => line.includes("control-plane cleanup-runs --min-age-minutes 30 --limit 200 --confirm")) && agentRunUsage.some((line) => line.includes("control-plane cleanup-released-pvs --limit 200 --dry-run")) && agentRunUsage.some((line) => line.includes("control-plane cleanup-released-pvs --limit 200 --confirm")), "AgentRun help must expose controlled CI workspace retention commands", agentRunUsage, ); assertCondition( agentRunUsage.some((line) => line.includes("control-plane status --pipeline-run agentrun-v01-ci-")) && agentRunUsage.some((line) => line.includes("control-plane status --source-commit ")), "AgentRun help must expose targeted control-plane status drill-down options", agentRunUsage, ); assertCondition( agentRunUsage.some((line) => line.includes("queue submit --json-stdin --dry-run")) && agentRunUsage.some((line) => line.includes("queue dispatch --json-stdin --dry-run")) && agentRunUsage.some((line) => line.includes("queue commander --reader-id cli --limit 20")), "AgentRun help must expose stdin-first queue dry-run and compact commander usage", agentRunUsage, ); assertCondition( !agentRunUsage.some((line) => line.includes("agentrun v01")), "AgentRun help must hide the v01 lane from user-facing CLI entrypoints", agentRunUsage, ); assertCondition( agentRunUsage.some((line) => line.includes("queue show --full")) && agentRunUsage.some((line) => line.includes("runs show ")) && agentRunUsage.some((line) => line.includes("runs result --command-id ")) && agentRunUsage.some((line) => line.includes("commands show --run-id ")) && agentRunUsage.some((line) => line.includes("runner jobs --run-id --command-id ")) && agentRunUsage.some((line) => line.includes("runner job-status --run-id ")) && !agentRunUsage.some((line) => line.includes("queue lifecycle")), "AgentRun help must expose queue progressive disclosure through existing show/run/command/runner commands without a lifecycle command", agentRunUsage, ); const submitStdinIndex = agentRunUsage.findIndex((line) => line.includes("queue submit --json-stdin")); const submitFileIndex = agentRunUsage.findIndex((line) => line.includes("queue submit --json-file")); const dispatchStdinIndex = agentRunUsage.findIndex((line) => line.includes("queue dispatch --json-stdin")); const dispatchFileIndex = agentRunUsage.findIndex((line) => line.includes("queue dispatch --json-file")); assertCondition( submitStdinIndex >= 0 && dispatchStdinIndex >= 0 && submitFileIndex > submitStdinIndex && dispatchFileIndex > dispatchStdinIndex && !agentRunUsage.some((line) => line.includes("queue submit --json-file --dry-run")) && !agentRunUsage.some((line) => line.includes("queue dispatch --json-file --dry-run")), "AgentRun help must present heredoc/stdin before reusable file fallbacks", agentRunUsage, ); const globalHelp = JSON.stringify(rootHelp()); assertCondition( globalHelp.includes("agentrun aipod-specs|queue|runs|commands|runner|sessions|control-plane|git-mirror"), "global help must index AgentRun v0.1 entrypoints", rootHelp(), ); const agentRunSource = readFileSync("scripts/src/agentrun.ts", "utf8"); const runtimeJsonFallback = "\"node <<'NODE' || printf '{}\\\\n'\""; assertCondition( agentRunSource.includes(runtimeJsonFallback) && agentRunSource.includes("const sourceCommit = params.find((entry) => entry?.name === 'revision')?.value || null;"), "AgentRun control-plane status must degrade empty runtime JSON snippets instead of failing the whole status probe", ); console.log(JSON.stringify({ ok: true, checks: [ "AgentRun command help exposes cleanup-runs and cleanup-released-pvs", "AgentRun command help exposes targeted control-plane status drill-down options", "AgentRun command help exposes queue dry-run and compact commander usage", "AgentRun command help hides the v01 lane from user-facing CLI entrypoints", "AgentRun command help exposes queue progressive disclosure without queue lifecycle", "AgentRun command help presents heredoc/stdin before reusable file fallbacks", "global help indexes AgentRun v0.1 entrypoints", "AgentRun control-plane status degrades empty runtime JSON snippets", ], }));