From dacebe1841dc05e1c24241b7513f9ca2ce3659e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Tue, 19 May 2026 03:23:50 +0000 Subject: [PATCH] feat(thread-read): show role system prompt in each step Each step block now includes a '### Prompt' section showing the role's systemPrompt from the workflow definition. Refs #349 --- packages/cli-uwf/src/commands/thread.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/cli-uwf/src/commands/thread.ts b/packages/cli-uwf/src/commands/thread.ts index f15ead4..d5c9e3a 100644 --- a/packages/cli-uwf/src/commands/thread.ts +++ b/packages/cli-uwf/src/commands/thread.ts @@ -390,12 +390,13 @@ function formatThreadReadMarkdown(options: { prompt: string; ordered: OrderedStepItem[]; uwf: UwfStore; + workflow: WorkflowPayload; quota: number; before: CasRef | null; showStart: boolean; showDetail: boolean; }): string { - const { ordered, uwf, quota, before, showStart, showDetail } = options; + const { ordered, uwf, workflow, quota, before, showStart, showDetail } = options; // Determine which steps to consider let candidates = ordered; @@ -459,11 +460,19 @@ function formatThreadReadMarkdown(options: { const stepLines = [ `## Step ${stepNum}: ${item.payload.role} \`${item.hash}\``, `**Agent:** ${item.payload.agent} | **Time:** ${ts}`, + ]; + const roleDef = workflow.roles[item.payload.role]; + if (roleDef) { + stepLines.push("", "### Prompt", "", roleDef.systemPrompt); + } + stepLines.push( + "", + "### Output", "", "```yaml", outputYaml, "```", - ]; + ); if (showDetail && item.payload.detail) { const detailExpanded = expandDeep(uwf.store, item.payload.detail); const detailYaml = formatYaml(detailExpanded); @@ -725,6 +734,7 @@ export async function cmdThreadRead( prompt: chain.start.prompt, ordered, uwf, + workflow, quota, before, showStart,