feat: uwf thread resume command

- New CLI: uwf thread resume <thread-id> [-p "supplement"]
- Validates thread is suspended, reads suspendedRole/suspendMessage
- Executes step as suspendedRole with resume prompt
- Clears suspend metadata on success
- Refactored cmdThreadStepOnce into composable helpers
- Tests: 5 cases including error, idle transition, prompt injection, cycles

Closes #590
This commit is contained in:
2026-06-02 04:47:47 +00:00
parent 10b478640d
commit 8e7aa3362a
3 changed files with 645 additions and 43 deletions
+22
View File
@@ -30,6 +30,7 @@ import {
cmdThreadExec,
cmdThreadList,
cmdThreadRead,
cmdThreadResume,
cmdThreadShow,
cmdThreadStart,
cmdThreadStop,
@@ -280,6 +281,27 @@ thread
},
);
thread
.command("resume")
.description("Resume a suspended thread and re-run the suspended role")
.argument("<thread-id>", "Thread ULID")
.option("-p, --prompt <text>", "Supplementary info to append to the resume prompt")
.option("--agent <cmd>", "Override agent command")
.action((threadId: string, opts: { prompt: string | undefined; agent: string | undefined }) => {
const storageRoot = resolveStorageRoot();
runAction(async () => {
const supplement = opts.prompt ?? null;
const agentOverride = opts.agent ?? null;
const result = await cmdThreadResume(
storageRoot,
threadId as ThreadId,
supplement,
agentOverride,
);
writeOutput(result);
});
});
thread
.command("stop")
.description("Stop background execution of a thread (keep thread active)")