From b65a006d45342f7d3fbc3de21d9df39d3f1fd53b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=98=9F=E6=9C=88?=
Date: Fri, 15 May 2026 09:27:03 +0800
Subject: [PATCH] feat(dashboard): show system prompt per role in workflow
detail
- Add systemPrompt to WorkflowRoleDescriptor (protocol)
- Propagate systemPrompt through buildDescriptor and validateWorkflowDescriptor
- Display system prompt as collapsible in RoleCard
---
packages/workflow-dashboard/src/api.ts | 1 +
.../src/components/workflow-detail.tsx | 22 +++++++++++++++++++
packages/workflow-protocol/src/types.ts | 1 +
.../src/bundle/build-descriptor.ts | 3 ++-
.../src/bundle/workflow-descriptor.ts | 2 ++
5 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/packages/workflow-dashboard/src/api.ts b/packages/workflow-dashboard/src/api.ts
index c82ea67..ea00bcf 100644
--- a/packages/workflow-dashboard/src/api.ts
+++ b/packages/workflow-dashboard/src/api.ts
@@ -122,6 +122,7 @@ export type WorkflowGraph = {
export type WorkflowRoleDescriptor = {
description: string;
+ systemPrompt: string;
schema: Record;
};
diff --git a/packages/workflow-dashboard/src/components/workflow-detail.tsx b/packages/workflow-dashboard/src/components/workflow-detail.tsx
index a5f2b6a..8c59230 100644
--- a/packages/workflow-dashboard/src/components/workflow-detail.tsx
+++ b/packages/workflow-dashboard/src/components/workflow-detail.tsx
@@ -179,6 +179,28 @@ function RoleCard({ roleName, role }: { roleName: string; role: WorkflowRoleDesc
{role.description}
)}
+ {role.systemPrompt !== "" && (
+
+
+ System Prompt
+
+
+ {role.systemPrompt}
+
+
+ )}
{rows.length > 0 && (
;
export type WorkflowRoleDescriptor = {
description: string;
+ systemPrompt: string;
schema: WorkflowRoleSchema;
};
diff --git a/packages/workflow-register/src/bundle/build-descriptor.ts b/packages/workflow-register/src/bundle/build-descriptor.ts
index 1d04a80..d8aad98 100644
--- a/packages/workflow-register/src/bundle/build-descriptor.ts
+++ b/packages/workflow-register/src/bundle/build-descriptor.ts
@@ -35,11 +35,12 @@ export function buildDescriptor(
): WorkflowDescriptor {
const roles: WorkflowDescriptor["roles"] = {};
for (const [key, roleDef] of Object.entries(def.roles) as Array<
- [string, { description: string; schema: z.ZodType }]
+ [string, { description: string; systemPrompt: string; schema: z.ZodType }]
>) {
const rawJsonSchema = z.toJSONSchema(roleDef.schema) as Record;
roles[key] = {
description: roleDef.description,
+ systemPrompt: roleDef.systemPrompt,
schema: stripJsonSchemaMeta(rawJsonSchema),
};
}
diff --git a/packages/workflow-register/src/bundle/workflow-descriptor.ts b/packages/workflow-register/src/bundle/workflow-descriptor.ts
index fc62c62..e8cebbc 100644
--- a/packages/workflow-register/src/bundle/workflow-descriptor.ts
+++ b/packages/workflow-register/src/bundle/workflow-descriptor.ts
@@ -88,8 +88,10 @@ export function validateWorkflowDescriptor(value: unknown): Result