chore: remove all dryRun infrastructure

dryRun no longer needed — tests use mock agents + mock fetch instead.
Removes isDryRun from WorkflowFnOptions, dryRun from ExtractConfig,
dryRunMeta from RoleDefinition, --dry-run from CLI, and all related
plumbing in engine/worker/fork/extract.

小橘 <xiaoju@shazhou.work>
This commit is contained in:
2026-05-06 14:25:44 +00:00
parent fa9163e462
commit 2482fb7e62
26 changed files with 184 additions and 102 deletions
@@ -98,7 +98,7 @@ describe("cli fork", () => {
}
const hash = added.value.hash;
const ran = await cmdRun(storageRoot, "solve-issue", "hello", false, 5);
const ran = await cmdRun(storageRoot, "solve-issue", "hello", 5);
expect(ran.ok).toBe(true);
if (!ran.ok) {
return;
@@ -148,7 +148,7 @@ describe("cli fork", () => {
}
const hash = added.value.hash;
const ran = await cmdRun(storageRoot, "solve-issue", "hello", false, 5);
const ran = await cmdRun(storageRoot, "solve-issue", "hello", 5);
expect(ran.ok).toBe(true);
if (!ran.ok) {
return;
@@ -198,7 +198,7 @@ describe("cli fork", () => {
return;
}
const ran = await cmdRun(storageRoot, "solve-issue", "hello", false, 5);
const ran = await cmdRun(storageRoot, "solve-issue", "hello", 5);
expect(ran.ok).toBe(true);
if (!ran.ok) {
return;
@@ -138,7 +138,7 @@ describe("cli thread commands", () => {
return;
}
const ran = await cmdRun(storageRoot, "solve-issue", "hello", false, 5);
const ran = await cmdRun(storageRoot, "solve-issue", "hello", 5);
expect(ran.ok).toBe(true);
if (!ran.ok) {
return;
@@ -199,7 +199,7 @@ describe("cli thread commands", () => {
return;
}
const ran = await cmdRun(storageRoot, "solve-issue", "hello", false, 5);
const ran = await cmdRun(storageRoot, "solve-issue", "hello", 5);
expect(ran.ok).toBe(true);
if (!ran.ok) {
return;
@@ -229,7 +229,7 @@ describe("cli thread commands", () => {
return;
}
const ran = await cmdRun(storageRoot, "solve-issue", "hello", false, 5);
const ran = await cmdRun(storageRoot, "solve-issue", "hello", 5);
expect(ran.ok).toBe(true);
if (!ran.ok) {
return;
@@ -268,7 +268,7 @@ describe("cli thread commands", () => {
return;
}
const ran = await cmdRun(storageRoot, "solve-issue", "hello", false, 5);
const ran = await cmdRun(storageRoot, "solve-issue", "hello", 5);
expect(ran.ok).toBe(true);
if (!ran.ok) {
return;
@@ -309,7 +309,7 @@ describe("cli thread commands", () => {
return;
}
const ran = await cmdRun(storageRoot, "solve-issue", "hello", false, 5);
const ran = await cmdRun(storageRoot, "solve-issue", "hello", 5);
expect(ran.ok).toBe(true);
if (!ran.ok) {
return;
@@ -338,7 +338,7 @@ describe("cli thread commands", () => {
return;
}
const ran = await cmdRun(storageRoot, "solve-issue", "hello", false, 5);
const ran = await cmdRun(storageRoot, "solve-issue", "hello", 5);
expect(ran.ok).toBe(true);
if (!ran.ok) {
return;
+1 -2
View File
@@ -22,7 +22,7 @@ function usage(): string {
" uncaged-workflow list",
" uncaged-workflow show <name>",
" uncaged-workflow remove <name>",
" uncaged-workflow run <name> [--prompt <text>] [--dry-run] [--max-rounds N]",
" uncaged-workflow run <name> [--prompt <text>] [--max-rounds N]",
" uncaged-workflow ps",
" uncaged-workflow kill <thread-id>",
" uncaged-workflow history <name>",
@@ -111,7 +111,6 @@ async function dispatchRun(storageRoot: string, argv: string[]): Promise<number>
storageRoot,
parsed.value.name,
parsed.value.prompt,
parsed.value.dryRun,
parsed.value.maxRounds,
);
if (!result.ok) {
+1 -2
View File
@@ -15,7 +15,6 @@ export async function cmdRun(
storageRoot: string,
name: string,
prompt: string,
isDryRun: boolean,
maxRounds: number,
): Promise<Result<{ threadId: string }, string>> {
const nameOk = validateCliWorkflowName(name);
@@ -47,7 +46,7 @@ export async function cmdRun(
threadId,
workflowName: name,
prompt,
options: { isDryRun, maxRounds },
options: { maxRounds },
},
{ awaitResponseLine: false },
);
+2 -15
View File
@@ -3,20 +3,13 @@ import { err, ok, type Result } from "@uncaged/workflow";
export type ParsedRunArgv = {
name: string;
prompt: string;
dryRun: boolean;
maxRounds: number;
};
type FlagOk =
| { kind: "dry-run" }
| { kind: "prompt"; value: string }
| { kind: "max-rounds"; value: number };
type FlagOk = { kind: "prompt"; value: string } | { kind: "max-rounds"; value: number };
function parseFlagAt(argv: string[], index: number): Result<FlagOk, string> | null {
const flag = argv[index];
if (flag === "--dry-run") {
return ok({ kind: "dry-run" });
}
if (flag === "--prompt") {
const value = argv[index + 1];
if (value === undefined) {
@@ -41,7 +34,6 @@ function parseFlagAt(argv: string[], index: number): Result<FlagOk, string> | nu
export function parseRunArgv(argv: string[]): Result<ParsedRunArgv, string> {
let name: string | undefined;
let prompt = "";
let dryRun = false;
let maxRounds = 5;
let i = 0;
@@ -62,11 +54,6 @@ export function parseRunArgv(argv: string[]): Result<ParsedRunArgv, string> {
}
const flag = parsed.value;
if (flag.kind === "dry-run") {
dryRun = true;
i += 1;
continue;
}
if (flag.kind === "prompt") {
prompt = flag.value;
i += 2;
@@ -80,5 +67,5 @@ export function parseRunArgv(argv: string[]): Result<ParsedRunArgv, string> {
return err("run requires <name>");
}
return ok({ name, prompt, dryRun, maxRounds });
return ok({ name, prompt, maxRounds });
}