feat(cli): step ask — read-only query to historical step sessions
CI / check (pull_request) Successful in 2m46s
CI / check (pull_request) Successful in 2m46s
Adds `uwf step ask <step-hash> -p <prompt>` for asking follow-up questions to a completed step's agent without mutating thread state. - Fork-by-default: creates and caches a fork session per step (cache key `<stepHash>:ask`); subsequent asks reuse it. - `--no-fork` fallback: spawns a fresh session with the step's detail ref injected as context. - `--agent` overrides the recorded agent; otherwise resolves from the step's agent field via config alias. - Updates `packages/cli/README.md` and `packages/util/src/usage-reference.ts` so the new subcommand is discoverable via README and `uwf prompt usage`. Fixes #146
This commit is contained in:
+27
-1
@@ -12,7 +12,7 @@ import {
|
||||
cmdPromptWorkflowAuthoring,
|
||||
} from "./commands/prompt.js";
|
||||
import { cmdSetup, cmdSetupInteractive, resolvePresetBaseUrl } from "./commands/setup.js";
|
||||
import { cmdStepFork, cmdStepList, cmdStepRead, cmdStepShow } from "./commands/step.js";
|
||||
import { cmdStepAsk, cmdStepFork, cmdStepList, cmdStepRead, cmdStepShow } from "./commands/step.js";
|
||||
import {
|
||||
cmdThreadCancel,
|
||||
cmdThreadExec,
|
||||
@@ -390,6 +390,32 @@ step
|
||||
});
|
||||
});
|
||||
|
||||
step
|
||||
.command("ask")
|
||||
.description(
|
||||
"Ask a follow-up question to a historical step's agent (read-only; no thread mutation)",
|
||||
)
|
||||
.argument("<step-hash>", "CAS hash of the StepNode to query")
|
||||
.requiredOption("-p, --prompt <text>", "Question to ask the step's agent")
|
||||
.option("--agent <cmd>", "Override agent command (defaults to the step's recorded agent)")
|
||||
.option(
|
||||
"--no-fork",
|
||||
"Skip session-fork; spawn the agent in a fresh ask session and inject the step's detail ref for context",
|
||||
)
|
||||
.action(
|
||||
(stepHash: string, opts: { prompt: string; agent: string | undefined; fork: boolean }) => {
|
||||
const storageRoot = resolveStorageRoot();
|
||||
runAction(async () => {
|
||||
const stdout = await cmdStepAsk(storageRoot, stepHash as CasRef, {
|
||||
prompt: opts.prompt,
|
||||
agentOverride: opts.agent ?? null,
|
||||
fork: opts.fork !== false,
|
||||
});
|
||||
process.stdout.write(stdout.endsWith("\n") ? stdout : `${stdout}\n`);
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
step
|
||||
.command("read")
|
||||
.description("Read a step's turns as human-readable markdown")
|
||||
|
||||
Reference in New Issue
Block a user