From 1d4448ae471025cf153d7d1d9fd4ad1da0b531da Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 14 May 2026 11:40:23 +0000 Subject: [PATCH 1/5] Initial plan From 195e27df312a0d194cc975c55cbe62c2e92ac4eb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 14 May 2026 11:47:05 +0000 Subject: [PATCH 2/5] feat: add journey persona routing dashboard and schema-driven admin upgrades Agent-Logs-Url: https://github.com/MaximumTrainer/Waymark/sessions/00f8e944-1394-4fda-a2ae-4ebdc62423bf Co-authored-by: MaximumTrainer <1376575+MaximumTrainer@users.noreply.github.com> --- docs/journey-json.md | 1 + src/frontend/journey-builder-admin-ui.png | Bin 0 -> 70089 bytes src/frontend/src/App.tsx | 132 ++++++++++++++---- .../src/builder/FlowAuthoringPanel.tsx | 46 +++++- .../src/builder/personaRouting.test.ts | 34 +++++ src/frontend/src/builder/personaRouting.ts | 30 ++++ src/frontend/src/flows/FlowVersionHistory.tsx | 16 ++- .../onboarding/components/StepRenderer.tsx | 49 ++++++- src/frontend/src/onboarding/types/flow.ts | 12 +- .../src/schemas/journey-builder.schema.json | 83 +++++++++++ 10 files changed, 367 insertions(+), 36 deletions(-) create mode 100644 src/frontend/journey-builder-admin-ui.png create mode 100644 src/frontend/src/builder/personaRouting.test.ts create mode 100644 src/frontend/src/builder/personaRouting.ts create mode 100644 src/frontend/src/schemas/journey-builder.schema.json diff --git a/docs/journey-json.md b/docs/journey-json.md index 020b0d4..163fe32 100644 --- a/docs/journey-json.md +++ b/docs/journey-json.md @@ -146,5 +146,6 @@ flowchart LR For a canonical, end-to-end example already in this repository, use: - [`flow-definition.example.json`](../src/frontend/src/schemas/flow-definition.example.json) +- [`journey-builder.schema.json`](../src/frontend/src/schemas/journey-builder.schema.json) as the builder/renderer source-of-truth contract for nodes, edges, lifecycle state, and persona assignments. When posting through the API, ensure each node's `jsonContent` and `complianceRuleJson` are valid JSON strings. diff --git a/src/frontend/journey-builder-admin-ui.png b/src/frontend/journey-builder-admin-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..d8f066dcb9cfb2b583370616bcf82030f071d5c4 GIT binary patch literal 70089 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[0].id) + const [selectedPersona, setSelectedPersona] = useState(PERSONAS[0].key) + const [personaAssignments, setPersonaAssignments] = useState([]) const [visitedNodeIds, setVisitedNodeIds] = useState>(new Set()) const [builderFlowId, setBuilderFlowId] = useState(defaultFlowId) const [selectedSession, setSelectedSession] = useState(null) + const { flow: builderFlow } = useFlow(builderFlowId) + + const effectiveFlowId = resolveFlowIdForPersona(personaAssignments, selectedPersona, selectedFlowId) + const activePersonasByVersion = buildVersionToPersonaMap(personaAssignments) useEffect(() => { - startSession({ flowId: selectedFlowId }) + startSession({ flowId: effectiveFlowId }) .then((result) => { if (result.currentNode?.id) { setVisitedNodeIds(new Set([result.currentNode.id])) @@ -75,13 +94,15 @@ function App() { } }) .catch(() => undefined) - }, [selectedFlowId, startSession]) + }, [effectiveFlowId, startSession]) const selectedJourney = JOURNEYS.find((j) => j.id === selectedFlowId) ?? JOURNEYS[0] + const assignedFlowIdForPersona = resolveFlowIdForPersona(personaAssignments, selectedPersona, selectedFlowId) + const selectedPersonaLabel = PERSONAS.find((persona) => persona.key === selectedPersona)?.label ?? selectedPersona return ( @@ -91,31 +112,92 @@ function App() {

Schema-driven onboarding UI with workflow branching and compliance checks.

-
-

Choose onboarding journey

- - +
+

Journey Dashboard

+
+ + +

{selectedJourney.description}

+
+

+ Active persona route: {selectedPersonaLabel} →{' '} + {assignedFlowIdForPersona} +

+ +
+ {personaAssignments.length > 0 && ( +
    + {personaAssignments.map((assignment) => ( +
  • + {assignment.personaKey} → {assignment.flowId} (live v{assignment.liveVersion ?? 'n/a'}) +
  • + ))} +
+ )}
- + { + setBuilderFlowId(flowId) + }} + /> + + {builderFlowId && ( + undefined} + /> + )}

Visual Journey Builder (React Flow)

diff --git a/src/frontend/src/builder/FlowAuthoringPanel.tsx b/src/frontend/src/builder/FlowAuthoringPanel.tsx index aa64339..dff7713 100644 --- a/src/frontend/src/builder/FlowAuthoringPanel.tsx +++ b/src/frontend/src/builder/FlowAuthoringPanel.tsx @@ -13,7 +13,7 @@ const serverBase = (import.meta.env.VITE_API_BASE_URL ?? '').replace(/\/$/, '') const apiKey = import.meta.env.VITE_API_KEY type FlowAuthoringPanelProps = { - onFlowSelected: (flowId: string | null) => void + onFlowSelected: (flowId: string | null, version?: number | null) => void } type StatusState = { @@ -58,6 +58,8 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) const [nodesJson, setNodesJson] = useState(JSON.stringify(createDefaultFlowDraft().nodes, null, 2)) const [connectionsJson, setConnectionsJson] = useState(JSON.stringify(createDefaultFlowDraft().connections, null, 2)) const [currentVersion, setCurrentVersion] = useState(null) + const [lifecycleState, setLifecycleState] = useState<'Draft' | 'Published'>('Draft') + const [personaKeys, setPersonaKeys] = useState('') const [status, setStatus] = useState({ kind: 'idle', message: '' }) const [isBusy, setIsBusy] = useState(false) @@ -119,7 +121,7 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) setDraft(draft) setCurrentVersion(flow.version) setStatus({ kind: 'success', message: `Loaded flow ${flow.id} (version ${flow.version}).` }) - onFlowSelected(flow.id) + onFlowSelected(flow.id, flow.version) } catch (error) { setStatus({ kind: 'error', message: error instanceof Error ? error.message : 'Failed to load flow.' }) } finally { @@ -157,7 +159,14 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) const response = await fetch(url, { method, headers: buildHeaders(true), - body: JSON.stringify(buildFlowWritePayload(draft)), + body: JSON.stringify({ + ...buildFlowWritePayload(draft), + lifecycleState, + personaKeys: personaKeys + .split(',') + .map((value) => value.trim()) + .filter((value) => value.length > 0), + }), }) if (!response.ok) { @@ -176,7 +185,7 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) ? `Created flow ${savedFlow.id} (version ${savedFlow.version}).` : `Saved flow ${savedFlow.id} as version ${savedFlow.version}.`, }) - onFlowSelected(savedFlow.id) + onFlowSelected(savedFlow.id, savedFlow.version) } catch (error) { setStatus({ kind: 'error', message: error instanceof Error ? error.message : 'Failed to save flow.' }) } finally { @@ -208,6 +217,8 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) setDraft(reset) setStatus({ kind: 'success', message: 'Flow deleted.' }) onFlowSelected(null) + setLifecycleState('Draft') + setPersonaKeys('') } catch (error) { setStatus({ kind: 'error', message: error instanceof Error ? error.message : 'Failed to delete flow.' }) } finally { @@ -249,7 +260,7 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) ? 'Reload verification passed: API graph matches the saved graph.' : 'Reload verification failed: API graph differs from the local graph.', }) - onFlowSelected(reloaded.id) + onFlowSelected(reloaded.id, reloaded.version) } catch (error) { setStatus({ kind: 'error', message: error instanceof Error ? error.message : 'Failed to reload flow.' }) } finally { @@ -264,6 +275,8 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) setDraft(draft) setStatus({ kind: 'success', message: 'Started a new draft flow.' }) onFlowSelected(null) + setLifecycleState('Draft') + setPersonaKeys('') } return ( @@ -293,6 +306,29 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) +
+ + +
+
{ + onFlowSelected={(flowId, version) => { setBuilderFlowId(flowId) + setLatestSelectedVersion(version) }} /> diff --git a/src/frontend/src/builder/FlowAuthoringPanel.tsx b/src/frontend/src/builder/FlowAuthoringPanel.tsx index dff7713..e97871f 100644 --- a/src/frontend/src/builder/FlowAuthoringPanel.tsx +++ b/src/frontend/src/builder/FlowAuthoringPanel.tsx @@ -13,7 +13,7 @@ const serverBase = (import.meta.env.VITE_API_BASE_URL ?? '').replace(/\/$/, '') const apiKey = import.meta.env.VITE_API_KEY type FlowAuthoringPanelProps = { - onFlowSelected: (flowId: string | null, version?: number | null) => void + onFlowSelected: (flowId: string | null, version: number | null) => void } type StatusState = { @@ -51,6 +51,13 @@ function toEditorState(draft: FlowDraft) { } } +function parsePersonaKeys(value: string): string[] { + return value + .split(',') + .map((personaKey) => personaKey.trim()) + .filter((personaKey) => personaKey.length > 0) +} + export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) { const [flowIdInput, setFlowIdInput] = useState('') const [name, setName] = useState(createDefaultFlowDraft().name) @@ -162,10 +169,7 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) body: JSON.stringify({ ...buildFlowWritePayload(draft), lifecycleState, - personaKeys: personaKeys - .split(',') - .map((value) => value.trim()) - .filter((value) => value.length > 0), + personaKeys: parsePersonaKeys(personaKeys), }), }) @@ -216,7 +220,7 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) setCurrentVersion(null) setDraft(reset) setStatus({ kind: 'success', message: 'Flow deleted.' }) - onFlowSelected(null) + onFlowSelected(null, null) setLifecycleState('Draft') setPersonaKeys('') } catch (error) { @@ -274,7 +278,7 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) setCurrentVersion(null) setDraft(draft) setStatus({ kind: 'success', message: 'Started a new draft flow.' }) - onFlowSelected(null) + onFlowSelected(null, null) setLifecycleState('Draft') setPersonaKeys('') } diff --git a/src/frontend/src/builder/personaRouting.ts b/src/frontend/src/builder/personaRouting.ts index 952afd5..72e092e 100644 --- a/src/frontend/src/builder/personaRouting.ts +++ b/src/frontend/src/builder/personaRouting.ts @@ -23,8 +23,11 @@ export function upsertPersonaAssignment( export function buildVersionToPersonaMap(assignments: readonly PersonaAssignment[]): Record { return assignments.reduce>((acc, assignment) => { if (assignment.liveVersion === null) return acc - const existing = acc[assignment.liveVersion] ?? [] - acc[assignment.liveVersion] = [...existing, assignment.personaKey] + if (!acc[assignment.liveVersion]) { + acc[assignment.liveVersion] = [] + } + const existing = acc[assignment.liveVersion] + existing.push(assignment.personaKey) return acc }, {}) } diff --git a/src/frontend/src/flows/FlowVersionHistory.tsx b/src/frontend/src/flows/FlowVersionHistory.tsx index 24f0176..ef78dae 100644 --- a/src/frontend/src/flows/FlowVersionHistory.tsx +++ b/src/frontend/src/flows/FlowVersionHistory.tsx @@ -40,7 +40,7 @@ export function FlowVersionHistory({ flowId, apiKey, onRestore, activePersonasBy const handleRestore = useCallback(async (versionNumber: number) => { setRestoring(versionNumber) - setConfirmVersion(null) + setConfirmVersion(null) try { const r = await fetch(`${API_BASE_URL}/api/flows/${flowId}/versions/${versionNumber}/restore`, { method: 'POST', From 63d8d575ff074b3e17d454d80a2d0ead5a1054f1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 14 May 2026 12:29:29 +0000 Subject: [PATCH 4/5] Remove VideoPlayback node type and render case Agent-Logs-Url: https://github.com/MaximumTrainer/Waymark/sessions/e905cd14-0e52-43ff-aabb-14387cc96ee2 Co-authored-by: MaximumTrainer <1376575+MaximumTrainer@users.noreply.github.com> --- .../src/onboarding/components/StepRenderer.tsx | 18 ------------------ src/frontend/src/onboarding/types/flow.ts | 1 - 2 files changed, 19 deletions(-) diff --git a/src/frontend/src/onboarding/components/StepRenderer.tsx b/src/frontend/src/onboarding/components/StepRenderer.tsx index 856f8fe..9351f90 100644 --- a/src/frontend/src/onboarding/components/StepRenderer.tsx +++ b/src/frontend/src/onboarding/components/StepRenderer.tsx @@ -503,24 +503,6 @@ export function StepRenderer({ node, sessionId, nodeId, onSubmit, apiKey }: Step Processing… ) - case 'VideoPlayback': - return ( -
-

{node.title}

-
- ) case 'InformationModal': return (
diff --git a/src/frontend/src/onboarding/types/flow.ts b/src/frontend/src/onboarding/types/flow.ts index e436185..57a7d06 100644 --- a/src/frontend/src/onboarding/types/flow.ts +++ b/src/frontend/src/onboarding/types/flow.ts @@ -4,7 +4,6 @@ export type NodeType = | 'Redirect' | 'Information' | 'Logic' - | 'VideoPlayback' | 'InformationModal' | 'ExternalIntegrationHook' From 7c7a532ef96515b95d3767405699db4a14bae513 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 14 May 2026 12:33:54 +0000 Subject: [PATCH 5/5] Apply review feedback: fix persona map scoping, version reset, remove unsupported node types and API fields Agent-Logs-Url: https://github.com/MaximumTrainer/Waymark/sessions/80389516-c66e-4fd9-b423-4fa35d1ae892 Co-authored-by: MaximumTrainer <1376575+MaximumTrainer@users.noreply.github.com> --- src/frontend/src/App.tsx | 5 +++- .../src/builder/FlowAuthoringPanel.tsx | 13 +------- .../onboarding/components/StepRenderer.tsx | 30 ------------------- src/frontend/src/onboarding/types/flow.ts | 2 -- .../src/schemas/journey-builder.schema.json | 5 +--- 5 files changed, 6 insertions(+), 49 deletions(-) diff --git a/src/frontend/src/App.tsx b/src/frontend/src/App.tsx index 2c22ade..8f02187 100644 --- a/src/frontend/src/App.tsx +++ b/src/frontend/src/App.tsx @@ -83,7 +83,9 @@ function App() { const { flow: builderFlow } = useFlow(builderFlowId) const effectiveFlowId = resolveFlowIdForPersona(personaAssignments, selectedPersona, selectedFlowId) - const activePersonasByVersion = buildVersionToPersonaMap(personaAssignments) + const activePersonasByVersion = buildVersionToPersonaMap( + personaAssignments.filter((a) => a.flowId === builderFlowId), + ) useEffect(() => { startSession({ flowId: effectiveFlowId }) @@ -125,6 +127,7 @@ function App() { const nextFlowId = event.target.value setSelectedFlowId(nextFlowId) setBuilderFlowId(nextFlowId) + setLatestSelectedVersion(null) }} className="mt-1 w-full rounded border border-slate-300 px-3 py-2 text-sm focus:outline-none focus:ring-1 focus:ring-slate-500" > diff --git a/src/frontend/src/builder/FlowAuthoringPanel.tsx b/src/frontend/src/builder/FlowAuthoringPanel.tsx index e97871f..1913bb8 100644 --- a/src/frontend/src/builder/FlowAuthoringPanel.tsx +++ b/src/frontend/src/builder/FlowAuthoringPanel.tsx @@ -51,13 +51,6 @@ function toEditorState(draft: FlowDraft) { } } -function parsePersonaKeys(value: string): string[] { - return value - .split(',') - .map((personaKey) => personaKey.trim()) - .filter((personaKey) => personaKey.length > 0) -} - export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) { const [flowIdInput, setFlowIdInput] = useState('') const [name, setName] = useState(createDefaultFlowDraft().name) @@ -166,11 +159,7 @@ export function FlowAuthoringPanel({ onFlowSelected }: FlowAuthoringPanelProps) const response = await fetch(url, { method, headers: buildHeaders(true), - body: JSON.stringify({ - ...buildFlowWritePayload(draft), - lifecycleState, - personaKeys: parsePersonaKeys(personaKeys), - }), + body: JSON.stringify(buildFlowWritePayload(draft)), }) if (!response.ok) { diff --git a/src/frontend/src/onboarding/components/StepRenderer.tsx b/src/frontend/src/onboarding/components/StepRenderer.tsx index 9351f90..7659869 100644 --- a/src/frontend/src/onboarding/components/StepRenderer.tsx +++ b/src/frontend/src/onboarding/components/StepRenderer.tsx @@ -503,36 +503,6 @@ export function StepRenderer({ node, sessionId, nodeId, onSubmit, apiKey }: Step Processing…
) - case 'InformationModal': - return ( -
-

{node.title}

- {typeof content.message === 'string' ? ( -

{content.message}

- ) : null} - -
- ) - case 'ExternalIntegrationHook': - return ( -
-

{node.title}

-

External integration hooks execute server-side and then continue automatically.

- -
- ) default: return

{node.title}

} diff --git a/src/frontend/src/onboarding/types/flow.ts b/src/frontend/src/onboarding/types/flow.ts index 57a7d06..1b6e3be 100644 --- a/src/frontend/src/onboarding/types/flow.ts +++ b/src/frontend/src/onboarding/types/flow.ts @@ -4,8 +4,6 @@ export type NodeType = | 'Redirect' | 'Information' | 'Logic' - | 'InformationModal' - | 'ExternalIntegrationHook' export interface FlowNode { id: string diff --git a/src/frontend/src/schemas/journey-builder.schema.json b/src/frontend/src/schemas/journey-builder.schema.json index a77cf85..a0102ea 100644 --- a/src/frontend/src/schemas/journey-builder.schema.json +++ b/src/frontend/src/schemas/journey-builder.schema.json @@ -26,10 +26,7 @@ "DocumentUpload", "Redirect", "Information", - "Logic", - "VideoPlayback", - "InformationModal", - "ExternalIntegrationHook" + "Logic" ] }, "title": { "type": "string", "minLength": 1 },