@arbidocs/blocks 0.5.66 → 0.5.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -3
- package/dist/ConnectedCallDock-FFIDDYGH.cjs +1 -1
- package/dist/ConnectedCallDock-VMEBH4LG.js +1 -1
- package/dist/ConnectedCallRoom-2FNSX2VG.js +1 -1
- package/dist/ConnectedCallRoom-HYRLJUIV.cjs +1 -1
- package/dist/{ConnectedDocumentViewer-XFQDHVWM.js → ConnectedDocumentViewer-MEKSE7KG.js} +14 -14
- package/dist/{ConnectedDocumentViewer-XFQDHVWM.js.map → ConnectedDocumentViewer-MEKSE7KG.js.map} +1 -1
- package/dist/{ConnectedDocumentViewer-S6YKCCRN.cjs → ConnectedDocumentViewer-VVYEBNAK.cjs} +15 -15
- package/dist/{ConnectedDocumentViewer-S6YKCCRN.cjs.map → ConnectedDocumentViewer-VVYEBNAK.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-L3R3ROPZ.cjs → ConnectedNativeDocxComparison-MIXCSPQP.cjs} +8 -8
- package/dist/{ConnectedNativeDocxComparison-L3R3ROPZ.cjs.map → ConnectedNativeDocxComparison-MIXCSPQP.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-PSAP3Q7D.js → ConnectedNativeDocxComparison-ZXWLLKCZ.js} +7 -7
- package/dist/{ConnectedNativeDocxComparison-PSAP3Q7D.js.map → ConnectedNativeDocxComparison-ZXWLLKCZ.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-VDBC4XRT.cjs → ConnectedNativeDocxEditor-HDI7OBDA.cjs} +8 -8
- package/dist/{ConnectedNativeDocxEditor-VDBC4XRT.cjs.map → ConnectedNativeDocxEditor-HDI7OBDA.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-PI6QTPXZ.js → ConnectedNativeDocxEditor-IBQ7M3MU.js} +6 -6
- package/dist/{ConnectedNativeDocxEditor-PI6QTPXZ.js.map → ConnectedNativeDocxEditor-IBQ7M3MU.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-V4MTKVNE.js → ConnectedStreamedWordArtifact-S64KJPEJ.js} +7 -7
- package/dist/ConnectedStreamedWordArtifact-S64KJPEJ.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-YSW6D7AG.cjs → ConnectedStreamedWordArtifact-V7WFW5EP.cjs} +8 -8
- package/dist/ConnectedStreamedWordArtifact-V7WFW5EP.cjs.map +1 -0
- package/dist/{DocumentReviewCard-TQQADJ36.js → DocumentReviewCard-5U3TGJZA.js} +6 -6
- package/dist/{DocumentReviewCard-TQQADJ36.js.map → DocumentReviewCard-5U3TGJZA.js.map} +1 -1
- package/dist/{DocumentReviewCard-BQ6ZD5MD.cjs → DocumentReviewCard-VFNMJSK7.cjs} +6 -6
- package/dist/{DocumentReviewCard-BQ6ZD5MD.cjs.map → DocumentReviewCard-VFNMJSK7.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-GKMVTECZ.cjs → WorkspaceTableView-DHMCJRC6.cjs} +6 -6
- package/dist/{WorkspaceTableView-GKMVTECZ.cjs.map → WorkspaceTableView-DHMCJRC6.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-YFLVFRJL.js → WorkspaceTableView-EH5CEB44.js} +4 -4
- package/dist/{WorkspaceTableView-YFLVFRJL.js.map → WorkspaceTableView-EH5CEB44.js.map} +1 -1
- package/dist/agents/index.cjs +283 -283
- package/dist/agents/index.js +5 -5
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/{chunk-TJ7QEGVP.cjs → chunk-35FBVTT6.cjs} +18 -18
- package/dist/{chunk-TJ7QEGVP.cjs.map → chunk-35FBVTT6.cjs.map} +1 -1
- package/dist/{chunk-3SHZPTR2.cjs → chunk-3DQZ7JWL.cjs} +18 -18
- package/dist/{chunk-3SHZPTR2.cjs.map → chunk-3DQZ7JWL.cjs.map} +1 -1
- package/dist/{chunk-EM4KOKE6.js → chunk-5TFZFB5U.js} +3 -3
- package/dist/{chunk-EM4KOKE6.js.map → chunk-5TFZFB5U.js.map} +1 -1
- package/dist/{chunk-PBIFISDD.js → chunk-7P24MJQN.js} +3 -3
- package/dist/{chunk-PBIFISDD.js.map → chunk-7P24MJQN.js.map} +1 -1
- package/dist/{chunk-TCCJ5I6G.js → chunk-B6QTKCDK.js} +5 -5
- package/dist/{chunk-TCCJ5I6G.js.map → chunk-B6QTKCDK.js.map} +1 -1
- package/dist/{chunk-EG3BB32W.cjs → chunk-CCSF7RI4.cjs} +3 -3
- package/dist/{chunk-EG3BB32W.cjs.map → chunk-CCSF7RI4.cjs.map} +1 -1
- package/dist/{chunk-QK546T4C.cjs → chunk-CKNUL4LM.cjs} +3 -3
- package/dist/{chunk-QK546T4C.cjs.map → chunk-CKNUL4LM.cjs.map} +1 -1
- package/dist/{chunk-WBLCPCWR.cjs → chunk-CUSOXCBV.cjs} +7 -7
- package/dist/{chunk-WBLCPCWR.cjs.map → chunk-CUSOXCBV.cjs.map} +1 -1
- package/dist/{chunk-DJE2E7YH.cjs → chunk-EPBFVO4F.cjs} +278 -68
- package/dist/chunk-EPBFVO4F.cjs.map +1 -0
- package/dist/{chunk-K26RLK2Y.cjs → chunk-IH2WZUTL.cjs} +4 -4
- package/dist/{chunk-K26RLK2Y.cjs.map → chunk-IH2WZUTL.cjs.map} +1 -1
- package/dist/{chunk-NDKZ6OR3.cjs → chunk-LEW4GUFW.cjs} +3 -3
- package/dist/{chunk-NDKZ6OR3.cjs.map → chunk-LEW4GUFW.cjs.map} +1 -1
- package/dist/{chunk-VWM3J6ES.js → chunk-LKVOHL6C.js} +3 -3
- package/dist/{chunk-VWM3J6ES.js.map → chunk-LKVOHL6C.js.map} +1 -1
- package/dist/{chunk-CEKOZAGO.js → chunk-LTPOV3W4.js} +4 -4
- package/dist/{chunk-CEKOZAGO.js.map → chunk-LTPOV3W4.js.map} +1 -1
- package/dist/{chunk-DRUNPUDT.cjs → chunk-MM22MFON.cjs} +12 -12
- package/dist/{chunk-DRUNPUDT.cjs.map → chunk-MM22MFON.cjs.map} +1 -1
- package/dist/{chunk-BELZ2WD2.js → chunk-N54OMO6J.js} +281 -71
- package/dist/chunk-N54OMO6J.js.map +1 -0
- package/dist/{chunk-RB54N5I7.cjs → chunk-NBX7WWB6.cjs} +5 -5
- package/dist/{chunk-RB54N5I7.cjs.map → chunk-NBX7WWB6.cjs.map} +1 -1
- package/dist/{chunk-B3CRSCLK.cjs → chunk-NMQVII6H.cjs} +4 -4
- package/dist/{chunk-B3CRSCLK.cjs.map → chunk-NMQVII6H.cjs.map} +1 -1
- package/dist/{chunk-U52KPOXT.js → chunk-NOBSRGFX.js} +3 -3
- package/dist/{chunk-U52KPOXT.js.map → chunk-NOBSRGFX.js.map} +1 -1
- package/dist/{chunk-2LUA7UDE.js → chunk-P2ZQKJXS.js} +7 -7
- package/dist/{chunk-2LUA7UDE.js.map → chunk-P2ZQKJXS.js.map} +1 -1
- package/dist/{chunk-KNOSLLTC.js → chunk-PKDPQS6Z.js} +3 -3
- package/dist/{chunk-KNOSLLTC.js.map → chunk-PKDPQS6Z.js.map} +1 -1
- package/dist/{chunk-J6FRFIVL.js → chunk-RAGITH2N.js} +3 -3
- package/dist/{chunk-J6FRFIVL.js.map → chunk-RAGITH2N.js.map} +1 -1
- package/dist/{chunk-PMWZTVIY.js → chunk-RSVHFZJR.js} +12 -6
- package/dist/chunk-RSVHFZJR.js.map +1 -0
- package/dist/{chunk-IRXPUQFP.js → chunk-SC3GOSJG.js} +3 -3
- package/dist/{chunk-IRXPUQFP.js.map → chunk-SC3GOSJG.js.map} +1 -1
- package/dist/{chunk-SBAM3UZX.js → chunk-SNU3AOCW.js} +3 -3
- package/dist/{chunk-SBAM3UZX.js.map → chunk-SNU3AOCW.js.map} +1 -1
- package/dist/{chunk-BP5KBZLX.cjs → chunk-XXI3EIEO.cjs} +53 -47
- package/dist/chunk-XXI3EIEO.cjs.map +1 -0
- package/dist/{chunk-D27BBGUF.cjs → chunk-ZSP6QSMG.cjs} +4 -4
- package/dist/{chunk-D27BBGUF.cjs.map → chunk-ZSP6QSMG.cjs.map} +1 -1
- package/dist/connect/docx.cjs +12 -12
- package/dist/connect/docx.js +8 -8
- package/dist/connect/index.cjs +1365 -1072
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +915 -630
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +13 -13
- package/dist/connect/viewer.js +12 -12
- package/dist/connection/billing/index.d.ts +1 -0
- package/dist/connection/billing/payment-required.d.ts +45 -0
- package/dist/connection/conversation/ConnectedMessageArea.d.ts +2 -0
- package/dist/connection/conversation/ConnectedMessageList.d.ts +4 -1
- package/dist/connection/embedded/EmbeddedChatPanel.d.ts +3 -1
- package/dist/connection/settings-page/ConnectedModelConnectionsSettings.d.ts +1 -0
- package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +3 -0
- package/dist/connection/settings-page/index.d.ts +2 -1
- package/dist/connection/workflows/useWorkflowsPageState.d.ts +1 -1
- package/dist/document-tools/index.cjs +17 -17
- package/dist/document-tools/index.js +2 -2
- package/dist/embed/index.cjs +18 -10
- package/dist/embed/index.d.ts +2 -0
- package/dist/embed/index.js +7 -7
- package/dist/files/index.cjs +1 -1
- package/dist/files/index.js +1 -1
- package/dist/index.cjs +393 -393
- package/dist/index.js +13 -13
- package/dist/site/index.cjs +17 -17
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +4 -4
- package/dist/studio/index.js +2 -2
- package/dist/workflow-canvas/index.cjs +27 -27
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +12 -12
- package/dist/workflow-canvas/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-V4MTKVNE.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-YSW6D7AG.cjs.map +0 -1
- package/dist/chunk-BELZ2WD2.js.map +0 -1
- package/dist/chunk-BP5KBZLX.cjs.map +0 -1
- package/dist/chunk-DJE2E7YH.cjs.map +0 -1
- package/dist/chunk-PMWZTVIY.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workflow-canvas/edit.ts","../../src/workflow-canvas/SignalsEditor.tsx","../../src/workflow-canvas/StepActionSettings.tsx","../../src/workflow-canvas/FieldOptionsEditor.tsx","../../src/workflow-canvas/StepInspector.tsx","../../src/workflow-canvas/trigger.ts","../../src/workflow-canvas/TriggerInspector.tsx","../../src/workflow-canvas/viewport.ts","../../src/workflow-canvas/WorkflowCanvas.tsx","../../src/workflow-canvas/WorkflowBuilder.tsx","../../src/connection/ConnectedWorkflowBuilder.tsx","../../src/connection/workflows/workflowsPageLabels.ts","../../src/connection/workflows/ConnectedWorkflowsPage.tsx"],"names":["selectClass","jsxs","jsx","Label","Input","cn","X","Button","Plus","Textarea","Fragment","Checkbox","useState","KINDS","useMemo","Popover","PopoverTrigger","PopoverContent","useEffect","Loader2","useCallback","Play","WorkflowIcon"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Editing a stepped workflow as a graph: the designer's operations, pure so they are tested on\n * their own. Every result keeps the steps in dependency order with every edge written out\n * (`after`), so a reordering never changes what a step waits for.\n */\n\nimport {\n dependsOn,\n orderSteps,\n stepDependencies,\n stepLevels,\n workflowSteps,\n type WorkflowAssignee,\n type WorkflowDefinition,\n type WorkflowDocumentRef,\n type WorkflowStep,\n type WorkflowStepKind,\n} from '../agents'\n\ntype Steps = Extract<WorkflowDefinition['run'], { kind: 'steps' }>\nexport type WorkflowLayout = NonNullable<Steps['layout']>\nexport { WORKFLOW_STEP_KINDS, stepKindOf, type WorkflowStepKind } from '../agents'\n\n/** A new, empty stepped workflow. */\nexport function newSteppedWorkflow(id: string, title: string): WorkflowDefinition {\n return {\n id,\n title,\n description: '',\n inputs: [],\n landing: 'chat',\n schedulable: false,\n run: { kind: 'steps', steps: [] },\n }\n}\n\nfunction withSteps(\n workflow: WorkflowDefinition,\n steps: WorkflowStep[],\n layout?: WorkflowLayout\n): WorkflowDefinition {\n const run = workflow.run.kind === 'steps' ? workflow.run : { kind: 'steps' as const, steps: [] }\n return {\n ...workflow,\n run: { ...run, steps: orderSteps(steps), layout: layout ?? run.layout },\n }\n}\n\nconst layoutOf = (workflow: WorkflowDefinition): WorkflowLayout =>\n (workflow.run.kind === 'steps' && workflow.run.layout) || {}\n\n/** Every edge written out, so steps can be reordered freely. */\nconst explicit = (steps: WorkflowStep[]): WorkflowStep[] =>\n steps.map((s) => ({ ...s, after: stepDependencies(steps, s.id) }))\n\n/** A step id from a title: lowercase words joined by hyphens, unique within the workflow. */\nexport function stepIdFor(steps: WorkflowStep[], title: string): string {\n const base =\n title\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .replace(/^[^a-z]+/, '') || 'step'\n const taken = new Set(steps.map((s) => s.id))\n if (!taken.has(base)) return base\n let n = 2\n while (taken.has(`${base}-${n}`)) n++\n return `${base}-${n}`\n}\n\nconst DEFAULT_TITLES: Record<WorkflowStepKind, string> = {\n form: 'Details',\n upload: 'Upload files',\n agent: 'Agent step',\n review: 'Review',\n sign: 'Sign',\n email_draft: 'Email draft',\n tabular_review: 'Tabular review',\n}\n\nfunction blankStep(kind: WorkflowStepKind, id: string, title: string): WorkflowStep {\n switch (kind) {\n case 'form':\n return { id, kind, title, inputs: [] }\n case 'upload':\n return { id, kind, title }\n case 'agent':\n // Nothing chosen yet: the inspector asks for a skill or an instruction.\n return { id, kind, title }\n case 'review':\n return { id, kind, title, instructions: '' }\n case 'sign':\n return { id, kind: 'action', title, action: { type: 'sign', signers: [] } }\n case 'email_draft':\n return {\n id,\n kind: 'action',\n title,\n action: { type: 'email_draft', to: [], subject: '', body: '' },\n }\n case 'tabular_review':\n return {\n id,\n kind: 'action',\n title,\n action: { type: 'tabular_review', tags: [], documents: 'run_uploads' },\n }\n }\n}\n\n/**\n * Add a step. With `after`, it waits for that step (the usual \"add the next step\"); otherwise it\n * starts with the run. Resolves with the workflow and the new step's id.\n */\nexport function addStep(\n workflow: WorkflowDefinition,\n kind: WorkflowStepKind,\n options: { after?: string; title?: string; position?: { x: number; y: number } } = {}\n): { workflow: WorkflowDefinition; id: string } {\n const steps = explicit(workflowSteps(workflow))\n const title = options.title ?? DEFAULT_TITLES[kind]\n const id = stepIdFor(steps, title)\n const step = { ...blankStep(kind, id, title), after: options.after ? [options.after] : [] }\n const layout = { ...layoutOf(workflow) }\n if (options.position) layout[id] = options.position\n return { workflow: withSteps(workflow, [...steps, step], layout), id }\n}\n\n/** Remove a step; what waited for it waits for what it waited for instead (the chain holds). */\nexport function removeStep(workflow: WorkflowDefinition, id: string): WorkflowDefinition {\n const steps = explicit(workflowSteps(workflow))\n const removed = steps.find((s) => s.id === id)\n if (!removed) return workflow\n const bridged = steps\n .filter((s) => s.id !== id)\n .map((s) =>\n s.after?.includes(id)\n ? {\n ...s,\n after: [...new Set([...s.after.filter((d) => d !== id), ...(removed.after ?? [])])],\n }\n : s\n )\n const { [id]: _gone, ...layout } = layoutOf(workflow)\n return withSteps(workflow, bridged, layout)\n}\n\n/** `to` now waits for `from`. Refused (unchanged) when that would make a cycle. */\nexport function connectSteps(\n workflow: WorkflowDefinition,\n from: string,\n to: string\n): WorkflowDefinition {\n const steps = explicit(workflowSteps(workflow))\n if (from === to || !steps.some((s) => s.id === from) || dependsOn(steps, from, to)) {\n return workflow\n }\n return withSteps(\n workflow,\n steps.map((s) =>\n s.id === to && !s.after?.includes(from) ? { ...s, after: [...(s.after ?? []), from] } : s\n )\n )\n}\n\nexport const wouldCycle = (workflow: WorkflowDefinition, from: string, to: string): boolean =>\n from === to || dependsOn(workflowSteps(workflow), from, to)\n\n/** `to` no longer waits for `from`. */\nexport function disconnectSteps(\n workflow: WorkflowDefinition,\n from: string,\n to: string\n): WorkflowDefinition {\n const steps = explicit(workflowSteps(workflow))\n return withSteps(\n workflow,\n steps.map((s) => (s.id === to ? { ...s, after: (s.after ?? []).filter((d) => d !== from) } : s))\n )\n}\n\n/** Change a step's settings (its id and kind stay). */\nexport function updateStep(\n workflow: WorkflowDefinition,\n id: string,\n patch: Partial<WorkflowStep>\n): WorkflowDefinition {\n const steps = explicit(workflowSteps(workflow))\n return withSteps(\n workflow,\n steps.map((s) =>\n s.id === id ? ({ ...s, ...patch, id: s.id, kind: s.kind } as WorkflowStep) : s\n )\n )\n}\n\n/** `{{from}}` → `{{to}}` in one template, fallbacks included (`{{a || from}}`). */\nconst renameIn = (text: string, from: string, to: string): string =>\n text.replace(\n /\\{\\{([^}]*)\\}\\}/g,\n (_, inner: string) =>\n `{{${inner\n .split('||')\n .map((part) => (part.trim() === from ? part.replace(from, to) : part))\n .join('||')}}}`\n )\n\n/**\n * A run input renamed (a form field's code following its label): every step that reads it is\n * updated, so the workflow keeps working.\n */\nexport function renameInput(\n workflow: WorkflowDefinition,\n from: string,\n to: string\n): WorkflowDefinition {\n if (from === to) return workflow\n const steps = workflowSteps(workflow).map((s): WorkflowStep => {\n if (s.kind === 'agent')\n return {\n ...s,\n with: s.with\n ? Object.fromEntries(Object.entries(s.with).map(([k, v]) => [k, renameIn(v, from, to)]))\n : s.with,\n run:\n s.run?.kind === 'prompt'\n ? { ...s.run, promptTemplate: renameIn(s.run.promptTemplate, from, to) }\n : s.run,\n ...(s.editDocument ? { editDocument: renameRef(s.editDocument, from, to) } : {}),\n }\n const assignee = s.assignee && renamePerson(s.assignee, from, to)\n const base = assignee ? { ...s, assignee } : s\n if (base.kind === 'review' && base.instructions)\n return { ...base, instructions: renameIn(base.instructions, from, to) }\n if (base.kind === 'action') {\n const a = base.action\n if (a.type === 'sign')\n return {\n ...base,\n action: {\n ...a,\n document: a.document && renameRef(a.document, from, to),\n signers: a.signers.map((x) => renamePerson(x, from, to)),\n ...(a.message ? { message: renameIn(a.message, from, to) } : {}),\n },\n }\n if (a.type === 'email_draft')\n return {\n ...base,\n action: {\n ...a,\n to: a.to.map((t) => renameIn(t, from, to)),\n ...(a.cc ? { cc: a.cc.map((t) => renameIn(t, from, to)) } : {}),\n subject: renameIn(a.subject, from, to),\n body: renameIn(a.body, from, to),\n ...(a.attachments\n ? { attachments: a.attachments.map((r) => renameRef(r, from, to)) }\n : {}),\n },\n }\n if (Array.isArray(a.documents))\n return {\n ...base,\n action: { ...a, documents: a.documents.map((r) => renameRef(r, from, to)) },\n }\n }\n return base\n })\n return withSteps(workflow, steps)\n}\n\nconst renamePerson = (a: WorkflowAssignee, from: string, to: string): WorkflowAssignee =>\n 'input' in a && a.input === from ? { input: to } : a\nconst renameRef = (r: WorkflowDocumentRef, from: string, to: string): WorkflowDocumentRef =>\n 'input' in r && r.input === from ? { input: to } : r\n\n/** Where a step sits on the canvas. */\nexport function moveStep(\n workflow: WorkflowDefinition,\n id: string,\n position: { x: number; y: number }\n): WorkflowDefinition {\n return withSteps(workflow, workflowSteps(workflow), { ...layoutOf(workflow), [id]: position })\n}\n\nconst COLUMN = 300\nconst ROW = 140\n\n/** Positions by depth: columns left to right, parallel steps stacked. */\nexport function autoLayout(steps: WorkflowStep[]): WorkflowLayout {\n const layout: WorkflowLayout = {}\n stepLevels(steps).forEach((level, x) =>\n level.forEach((s, y) => {\n layout[s.id] = { x: x * COLUMN, y: (y - (level.length - 1) / 2) * ROW }\n })\n )\n return layout\n}\n\n/** The workflow's layout, with any unplaced step placed by depth. */\nexport function layoutWithDefaults(workflow: WorkflowDefinition): WorkflowLayout {\n const auto = autoLayout(workflowSteps(workflow))\n return { ...auto, ...layoutOf(workflow) }\n}\n","/**\n * \"When done, signal…\": the signals a step raises once it is done, each a name and a condition on\n * the step's outcome that fits its kind (a form field's value, the agent's answer, a review's\n * approval). Another workflow starts on a signal (\"When a step signals\"), so the if/then between\n * workflows lives in that link and each workflow stays short.\n */\n\nimport { Plus, X } from 'lucide-react'\nimport { Button, Input, Label, cn } from '@arbidocs/react/ui'\nimport {\n isIncompleteSignal,\n type WorkflowSignal,\n type WorkflowSignalWhen,\n type WorkflowStep,\n} from '../agents'\n\nexport interface SignalsEditorLabels {\n heading: string\n hint: string\n add: string\n name: string\n namePlaceholder: string\n when: string\n always: string\n fieldEquals: string\n answerContains: string\n answerMatches: string\n approved: string\n field: string\n value: string\n phrase: string\n phrasePlaceholder: string\n pattern: string\n remove: string\n}\n\nexport const DEFAULT_SIGNALS_EDITOR_LABELS: SignalsEditorLabels = {\n heading: 'When done, signal…',\n hint: 'Another workflow can start on a signal (“When a step signals”), as its own thread linked to this one.',\n add: 'Add signal',\n name: 'Signal',\n namePlaceholder: 'e.g. risk-high',\n when: 'When',\n always: 'Whenever it is done',\n fieldEquals: 'A field equals',\n answerContains: 'The answer contains',\n answerMatches: 'The answer matches (regex)',\n approved: 'It is approved',\n field: 'Field',\n value: 'Value',\n phrase: 'Phrase',\n phrasePlaceholder: 'e.g. Risk rating: High',\n pattern: 'Pattern',\n remove: 'Remove signal',\n}\n\ntype ConditionKind = 'always' | 'field' | 'contains' | 'matches' | 'approved'\n\n/** The conditions a step of this kind can test. */\nexport function signalConditions(kind: WorkflowStep['kind']): ConditionKind[] {\n switch (kind) {\n case 'form':\n return ['always', 'field']\n case 'agent':\n return ['always', 'contains', 'matches']\n case 'review':\n return ['approved', 'always']\n default:\n return ['always']\n }\n}\n\nfunction conditionOf(when: WorkflowSignalWhen | undefined): ConditionKind {\n if (!when) return 'always'\n if ('field' in when) return 'field'\n if ('contains' in when) return 'contains'\n if ('matches' in when) return 'matches'\n return 'approved'\n}\n\n/** A typed name as a signal slug: lower case, words joined by `-`. */\nexport function signalSlug(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9_.-]+/g, '-')\n .replace(/^[^a-z0-9]+/, '')\n .slice(0, 64)\n}\n\nfunction startCondition(kind: ConditionKind, step: WorkflowStep): WorkflowSignalWhen | undefined {\n switch (kind) {\n case 'field':\n return { field: step.kind === 'form' ? (step.inputs[0]?.name ?? '') : '', equals: '' }\n case 'contains':\n return { contains: '' }\n case 'matches':\n return { matches: '' }\n case 'approved':\n return { approved: true }\n default:\n return undefined\n }\n}\n\n/** A new signal on a step: named after the step, with the condition its kind starts with. */\nfunction newSignal(step: WorkflowStep, taken: string[]): WorkflowSignal {\n const base = signalSlug(step.id) || 'signal'\n let name = `${base}-done`\n let n = 2\n while (taken.includes(name)) name = `${base}-done-${n++}`\n const when = startCondition(signalConditions(step.kind)[0], step)\n return when ? { name, when } : { name }\n}\n\nconst selectClass =\n 'flex h-8 w-full rounded-md border border-input bg-background px-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring'\n\nexport interface SignalsEditorProps {\n step: WorkflowStep\n onChange: (signals: WorkflowSignal[] | undefined) => void\n labels?: Partial<SignalsEditorLabels>\n testId?: string\n}\n\nexport function SignalsEditor({\n step,\n onChange,\n labels,\n testId = 'signals-editor',\n}: SignalsEditorProps) {\n const l = { ...DEFAULT_SIGNALS_EDITOR_LABELS, ...labels }\n const signals = step.signals ?? []\n const conditions = signalConditions(step.kind)\n const conditionLabel: Record<ConditionKind, string> = {\n always: l.always,\n field: l.fieldEquals,\n contains: l.answerContains,\n matches: l.answerMatches,\n approved: l.approved,\n }\n const emit = (next: WorkflowSignal[]) => onChange(next.length ? next : undefined)\n const set = (i: number, signal: WorkflowSignal) =>\n emit(signals.map((s, j) => (j === i ? signal : s)))\n const fields = step.kind === 'form' ? step.inputs : []\n\n return (\n <div className=\"space-y-1.5\" data-testid={testId}>\n <Label className=\"text-xs\">{l.heading}</Label>\n <div className=\"space-y-2\">\n {signals.map((signal, i) => {\n const condition = conditionOf(signal.when)\n const when = signal.when\n return (\n <div\n key={i}\n // Unfinished (no name, or nothing to test yet): not saved until it is filled in.\n className={cn(\n 'space-y-1.5 rounded-md border p-2',\n isIncompleteSignal(signal) ? 'border-destructive/50' : 'border-border'\n )}\n data-incomplete={isIncompleteSignal(signal) || undefined}\n data-testid={`${testId}-${i}`}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n value={signal.name}\n aria-label={l.name}\n placeholder={l.namePlaceholder}\n onChange={(e) => set(i, { ...signal, name: signalSlug(e.target.value) })}\n className=\"h-8 font-mono text-xs\"\n data-testid={`${testId}-${i}-name`}\n />\n <button\n type=\"button\"\n aria-label={l.remove}\n onClick={() => emit(signals.filter((_, j) => j !== i))}\n data-testid={`${testId}-${i}-remove`}\n >\n <X className=\"size-4 text-muted-foreground\" />\n </button>\n </div>\n <select\n aria-label={l.when}\n className={selectClass}\n value={condition}\n onChange={(e) => {\n const nextWhen = startCondition(e.target.value as ConditionKind, step)\n set(i, nextWhen ? { name: signal.name, when: nextWhen } : { name: signal.name })\n }}\n data-testid={`${testId}-${i}-when`}\n >\n {/* A condition saved for another kind of step stays visible until changed. */}\n {[...conditions, ...(conditions.includes(condition) ? [] : [condition])].map(\n (c) => (\n <option key={c} value={c}>\n {conditionLabel[c]}\n </option>\n )\n )}\n </select>\n {when && 'field' in when && (\n <div className=\"flex items-center gap-2\">\n <select\n aria-label={l.field}\n className={cn(selectClass, 'flex-1')}\n value={when.field}\n onChange={(e) =>\n set(i, { ...signal, when: { ...when, field: e.target.value } })\n }\n data-testid={`${testId}-${i}-field`}\n >\n {fields.map((f) => (\n <option key={f.name} value={f.name}>\n {f.label}\n </option>\n ))}\n {!fields.some((f) => f.name === when.field) && (\n <option value={when.field}>{when.field || '—'}</option>\n )}\n </select>\n <Input\n aria-label={l.value}\n placeholder={l.value}\n value={String(when.equals)}\n onChange={(e) =>\n set(i, { ...signal, when: { ...when, equals: e.target.value } })\n }\n className=\"h-8 flex-1\"\n data-testid={`${testId}-${i}-equals`}\n />\n </div>\n )}\n {when && 'contains' in when && (\n <Input\n aria-label={l.phrase}\n placeholder={l.phrasePlaceholder}\n value={when.contains}\n onChange={(e) => set(i, { ...signal, when: { contains: e.target.value } })}\n className=\"h-8\"\n data-testid={`${testId}-${i}-contains`}\n />\n )}\n {when && 'matches' in when && (\n <Input\n aria-label={l.pattern}\n placeholder=\"risk rating:\\s*high\"\n value={when.matches}\n onChange={(e) => set(i, { ...signal, when: { matches: e.target.value } })}\n className=\"h-8 font-mono text-xs\"\n data-testid={`${testId}-${i}-matches`}\n />\n )}\n </div>\n )\n })}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n emit([\n ...signals,\n newSignal(\n step,\n signals.map((s) => s.name)\n ),\n ])\n }\n data-testid={`${testId}-add`}\n >\n <Plus className=\"size-4\" /> {l.add}\n </Button>\n </div>\n <p className=\"text-xs text-muted-foreground\">{l.hint}</p>\n </div>\n )\n}\n","/**\n * The inspector's settings for who a step is for and for the platform actions: the assignee\n * picker and reminder, a document reference picker, and the settings of a signature, an email\n * draft, a tabular review and an agent step that edits a document with tracked changes.\n */\n\nimport type { ReactNode } from 'react'\nimport { Plus, X } from 'lucide-react'\nimport { Button, Checkbox, Input, Label, Textarea, cn, entityNoun } from '@arbidocs/react/ui'\nimport type {\n WorkflowAgentStep,\n WorkflowAssignee,\n WorkflowDocumentRef,\n WorkflowEmailDraftAction,\n WorkflowField,\n WorkflowSignAction,\n WorkflowStep,\n WorkflowTabularReviewAction,\n} from '../agents'\n\n/** A choice the host supplies (a member, a label, a document). */\nexport interface StepInspectorOption {\n value: string\n label: string\n}\n\nexport interface StepActionSettingsLabels {\n assignee: string\n assigneeAnyone: string\n assigneeRunOwner: string\n assigneeProjectLead: string\n /** The group of a run's person fields. */\n assigneeFields: string\n assigneePeople: string\n remind: string\n remindHint: string\n documentFrom: string\n docFromStep: string\n docFromInput: string\n docById: string\n chooseStep: string\n chooseInput: string\n chooseDocument: string\n /** The id box when the host lists no documents. */\n documentIdPlaceholder: string\n signDocument: string\n signers: string\n addSigner: string\n signMessage: string\n expires: string\n expiresHint: string\n emailTo: string\n emailCc: string\n emailSubject: string\n emailBody: string\n /** Under the address fields: separate several with commas. */\n addressesHint: string\n /** Above the variables an email can use (click one to add it to the body). */\n variablesHint: string\n attachments: string\n addAttachment: string\n reviewColumns: string\n noTags: string\n reviewDocuments: string\n reviewRunUploads: string\n reviewWorkspace: string\n reviewChosen: string\n addDocument: string\n overwrite: string\n editDocument: string\n editDocumentHint: string\n}\n\nexport const DEFAULT_STEP_ACTION_SETTINGS_LABELS: StepActionSettingsLabels = {\n assignee: 'Who does it',\n assigneeAnyone: 'Anyone on the run',\n assigneeRunOwner: 'Whoever started the run',\n get assigneeProjectLead() {\n return `The ${entityNoun('PROJECT')} lead`\n },\n assigneeFields: 'The person in a form field',\n assigneePeople: 'A person',\n remind: 'Remind after (hours)',\n remindHint: 'Left that long, they are told again. Blank: no reminder.',\n documentFrom: 'Document',\n docFromStep: 'From an earlier step',\n docFromInput: 'From a run input',\n docById: 'A document',\n chooseStep: 'Choose a step…',\n chooseInput: 'Choose an input…',\n chooseDocument: 'Choose a document…',\n documentIdPlaceholder: 'doc-…',\n signDocument: 'Document to sign',\n signers: 'Signers',\n addSigner: 'Add signer',\n signMessage: 'Message to the signers',\n expires: 'Expires after (hours)',\n expiresHint: 'Unsigned by then, the step fails. Blank: no expiry.',\n emailTo: 'To',\n emailCc: 'Cc',\n emailSubject: 'Subject',\n emailBody: 'Body',\n addressesHint: 'Separate several with commas.',\n variablesHint: 'Variables (click to add to the body):',\n attachments: 'Attachments',\n addAttachment: 'Add attachment',\n reviewColumns: 'Columns (labels)',\n noTags: 'No labels in this workspace yet.',\n reviewDocuments: 'Documents',\n reviewRunUploads: 'The files this run collects',\n reviewWorkspace: 'Every document in the workspace',\n reviewChosen: 'Chosen documents',\n addDocument: 'Add document',\n overwrite: 'Fill cells that already have a value again',\n editDocument: 'Edit this document (tracked changes)',\n editDocumentHint:\n 'The instruction says what to change; the edited copy is saved as its next version, to accept or reject change by change.',\n}\n\nexport const selectClass =\n 'flex h-9 w-full rounded-md border border-input bg-background px-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring'\n\nexport function Field({\n label,\n children,\n hint,\n}: {\n label: string\n children: ReactNode\n hint?: string\n}) {\n return (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{label}</Label>\n {children}\n {hint && <p className=\"text-xs text-muted-foreground\">{hint}</p>}\n </div>\n )\n}\n\n/** What the pickers can offer around the step being edited. */\nexport interface StepContext {\n /** The steps this one comes after (what its documents can come from). */\n earlier: WorkflowStep[]\n /** Every field of the run. */\n fields: WorkflowField[]\n people: StepInspectorOption[]\n tags: StepInspectorOption[]\n documents: StepInspectorOption[]\n}\n\n/* ------------------------------- assignee ------------------------------- */\n\nconst assigneeValue = (a: WorkflowAssignee | undefined): string =>\n !a\n ? ''\n : 'user' in a\n ? `user:${a.user}`\n : 'input' in a\n ? `input:${a.input}`\n : 'runOwner' in a\n ? 'owner'\n : 'lead'\n\nconst parseAssignee = (v: string): WorkflowAssignee | undefined =>\n v === 'owner'\n ? { runOwner: true }\n : v === 'lead'\n ? { projectLead: true }\n : v.startsWith('user:')\n ? { user: v.slice(5) }\n : v.startsWith('input:')\n ? { input: v.slice(6) }\n : undefined\n\nfunction AssigneeSelect({\n value,\n onChange,\n ctx,\n l,\n anyone,\n testId,\n ariaLabel,\n}: {\n value: WorkflowAssignee | undefined\n onChange: (value: WorkflowAssignee | undefined) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n /** The \"anyone\" choice's wording; absent = no such choice. */\n anyone?: string\n testId?: string\n ariaLabel?: string\n}) {\n const personFields = ctx.fields.filter((f) => f.type === 'person')\n const v = assigneeValue(value)\n const known =\n !v.startsWith('user:') || ctx.people.some((p) => `user:${p.value}` === v) ? null : v.slice(5)\n return (\n <select\n className={selectClass}\n value={v}\n aria-label={ariaLabel}\n onChange={(e) => onChange(parseAssignee(e.target.value))}\n data-testid={testId}\n >\n {anyone !== undefined ? <option value=\"\">{anyone}</option> : <option value=\"\" disabled />}\n <option value=\"owner\">{l.assigneeRunOwner}</option>\n <option value=\"lead\">{l.assigneeProjectLead}</option>\n {personFields.length > 0 && (\n <optgroup label={l.assigneeFields}>\n {personFields.map((f) => (\n <option key={f.name} value={`input:${f.name}`}>\n {f.label}\n </option>\n ))}\n </optgroup>\n )}\n {(ctx.people.length > 0 || known) && (\n <optgroup label={l.assigneePeople}>\n {ctx.people.map((p) => (\n <option key={p.value} value={`user:${p.value}`}>\n {p.label}\n </option>\n ))}\n {known && <option value={v}>{known}</option>}\n </optgroup>\n )}\n </select>\n )\n}\n\n/** Who the step is for, and when they are reminded. */\nexport function AssigneeSettings({\n step,\n patch,\n ctx,\n l,\n testId,\n}: {\n step: WorkflowStep\n patch: (p: Partial<WorkflowStep>) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n return (\n <>\n <Field label={l.assignee}>\n <AssigneeSelect\n value={step.assignee}\n onChange={(assignee) => patch({ assignee })}\n ctx={ctx}\n l={l}\n anyone={l.assigneeAnyone}\n testId={`${testId}-assignee`}\n />\n </Field>\n <Field label={l.remind} hint={l.remindHint}>\n <Input\n type=\"number\"\n min={1}\n value={step.remindAfterHours ?? ''}\n onChange={(e) => {\n const n = Number(e.target.value)\n patch({ remindAfterHours: e.target.value && n > 0 ? n : undefined })\n }}\n className=\"w-28\"\n data-testid={`${testId}-remind`}\n />\n </Field>\n </>\n )\n}\n\n/* ------------------------------ documents ------------------------------ */\n\ntype RefMode = 'step' | 'input' | 'id'\nconst modeOf = (ref: WorkflowDocumentRef | undefined): RefMode =>\n !ref ? 'step' : 'step' in ref ? 'step' : 'input' in ref ? 'input' : 'id'\n\n/** Where a document comes from: an earlier step, a run input, or one document. */\nfunction DocumentRefPicker({\n value,\n onChange,\n ctx,\n l,\n testId,\n}: {\n value: WorkflowDocumentRef | undefined\n onChange: (value: WorkflowDocumentRef) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n const mode = modeOf(value)\n const inputs = ctx.fields.filter((f) => f.type === 'documents' || f.type === 'text')\n return (\n <div className=\"space-y-1.5\" data-testid={testId}>\n <select\n className={cn(selectClass, 'h-8')}\n value={mode}\n aria-label={l.documentFrom}\n onChange={(e) => {\n const m = e.target.value as RefMode\n onChange(m === 'step' ? { step: '' } : m === 'input' ? { input: '' } : { id: '' })\n }}\n data-testid={`${testId}-mode`}\n >\n <option value=\"step\">{l.docFromStep}</option>\n <option value=\"input\">{l.docFromInput}</option>\n <option value=\"id\">{l.docById}</option>\n </select>\n {mode === 'step' && (\n <select\n className={cn(selectClass, 'h-8')}\n value={value && 'step' in value ? value.step : ''}\n onChange={(e) => onChange({ step: e.target.value })}\n data-testid={`${testId}-step`}\n >\n <option value=\"\" disabled>\n {l.chooseStep}\n </option>\n {ctx.earlier.map((s) => (\n <option key={s.id} value={s.id}>\n {s.title}\n </option>\n ))}\n </select>\n )}\n {mode === 'input' && (\n <select\n className={cn(selectClass, 'h-8')}\n value={value && 'input' in value ? value.input : ''}\n onChange={(e) => onChange({ input: e.target.value })}\n data-testid={`${testId}-input`}\n >\n <option value=\"\" disabled>\n {l.chooseInput}\n </option>\n {inputs.map((f) => (\n <option key={f.name} value={f.name}>\n {f.label}\n </option>\n ))}\n </select>\n )}\n {mode === 'id' &&\n (ctx.documents.length ? (\n <select\n className={cn(selectClass, 'h-8')}\n value={value && 'id' in value ? value.id : ''}\n onChange={(e) => onChange({ id: e.target.value })}\n data-testid={`${testId}-id`}\n >\n <option value=\"\" disabled>\n {l.chooseDocument}\n </option>\n {ctx.documents.map((d) => (\n <option key={d.value} value={d.value}>\n {d.label}\n </option>\n ))}\n </select>\n ) : (\n <Input\n className=\"h-8\"\n value={value && 'id' in value ? value.id : ''}\n placeholder={l.documentIdPlaceholder}\n onChange={(e) => onChange({ id: e.target.value })}\n data-testid={`${testId}-id`}\n />\n ))}\n </div>\n )\n}\n\n/** A list of document references with add and remove. */\nfunction DocumentRefList({\n value,\n onChange,\n ctx,\n l,\n addLabel,\n testId,\n}: {\n value: WorkflowDocumentRef[]\n onChange: (value: WorkflowDocumentRef[]) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n addLabel: string\n testId: string\n}) {\n return (\n <div className=\"space-y-2\">\n {value.map((ref, i) => (\n <div key={i} className=\"flex items-start gap-1.5\">\n <div className=\"min-w-0 flex-1\">\n <DocumentRefPicker\n value={ref}\n onChange={(next) => onChange(value.map((r, j) => (j === i ? next : r)))}\n ctx={ctx}\n l={l}\n testId={`${testId}-${i}`}\n />\n </div>\n <button\n type=\"button\"\n className=\"mt-2\"\n aria-label={`${addLabel} ×`}\n onClick={() => onChange(value.filter((_, j) => j !== i))}\n >\n <X className=\"size-4 text-muted-foreground\" />\n </button>\n </div>\n ))}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onChange([...value, { step: '' }])}\n data-testid={`${testId}-add`}\n >\n <Plus className=\"size-4\" /> {addLabel}\n </Button>\n </div>\n )\n}\n\n/* -------------------------------- actions -------------------------------- */\n\nconst optionalNumber = (raw: string): number | undefined => {\n const n = Number(raw)\n return raw && n > 0 ? n : undefined\n}\n\nexport function SignSettings({\n action,\n onChange,\n ctx,\n l,\n testId,\n}: {\n action: WorkflowSignAction\n onChange: (action: WorkflowSignAction) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n const set = (p: Partial<WorkflowSignAction>) => onChange({ ...action, ...p })\n return (\n <>\n <Field label={l.signDocument}>\n <DocumentRefPicker\n value={action.document}\n onChange={(document) => set({ document })}\n ctx={ctx}\n l={l}\n testId={`${testId}-document`}\n />\n </Field>\n <Field label={l.signers}>\n <div className=\"space-y-1.5\" data-testid={`${testId}-signers`}>\n {action.signers.map((s, i) => (\n <div key={i} className=\"flex items-center gap-1.5\">\n <AssigneeSelect\n value={s}\n onChange={(next) =>\n set({\n signers: next\n ? action.signers.map((x, j) => (j === i ? next : x))\n : action.signers.filter((_, j) => j !== i),\n })\n }\n ctx={ctx}\n l={l}\n ariaLabel={`${l.signers} ${i + 1}`}\n testId={`${testId}-signer-${i}`}\n />\n <button\n type=\"button\"\n aria-label={`${l.signers} ${i + 1} ×`}\n onClick={() => set({ signers: action.signers.filter((_, j) => j !== i) })}\n >\n <X className=\"size-4 text-muted-foreground\" />\n </button>\n </div>\n ))}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => set({ signers: [...action.signers, { runOwner: true }] })}\n data-testid={`${testId}-add-signer`}\n >\n <Plus className=\"size-4\" /> {l.addSigner}\n </Button>\n </div>\n </Field>\n <Field label={l.signMessage}>\n <Textarea\n rows={3}\n value={action.message ?? ''}\n onChange={(e) => set({ message: e.target.value || undefined })}\n data-testid={`${testId}-message`}\n />\n </Field>\n <Field label={l.expires} hint={l.expiresHint}>\n <Input\n type=\"number\"\n min={1}\n className=\"w-28\"\n value={action.expiresAfterHours ?? ''}\n onChange={(e) => set({ expiresAfterHours: optionalNumber(e.target.value) })}\n data-testid={`${testId}-expires`}\n />\n </Field>\n </>\n )\n}\n\nconst addresses = (list: string[] | undefined) => (list ?? []).join(', ')\nconst parseAddresses = (text: string) => text.split(',').map((t) => t.trim())\n\n/** The variables a template over the run can use: its fields and the earlier steps' answers. */\nfunction templateVariables(ctx: StepContext): string[] {\n return [\n ...ctx.fields.map((f) => `{{${f.name}}}`),\n ...ctx.earlier.filter((s) => s.kind === 'agent').map((s) => `{{${s.id}.answer}}`),\n ]\n}\n\nexport function EmailDraftSettings({\n action,\n onChange,\n ctx,\n l,\n testId,\n}: {\n action: WorkflowEmailDraftAction\n onChange: (action: WorkflowEmailDraftAction) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n const set = (p: Partial<WorkflowEmailDraftAction>) => onChange({ ...action, ...p })\n const vars = templateVariables(ctx)\n return (\n <>\n <Field label={l.emailTo} hint={l.addressesHint}>\n <Input\n value={addresses(action.to)}\n onChange={(e) => set({ to: parseAddresses(e.target.value) })}\n placeholder=\"{{client_email}}\"\n data-testid={`${testId}-to`}\n />\n </Field>\n <Field label={l.emailCc}>\n <Input\n value={addresses(action.cc)}\n onChange={(e) => {\n const cc = parseAddresses(e.target.value)\n set({ cc: cc.some(Boolean) ? cc : undefined })\n }}\n data-testid={`${testId}-cc`}\n />\n </Field>\n <Field label={l.emailSubject}>\n <Input\n value={action.subject}\n onChange={(e) => set({ subject: e.target.value })}\n data-testid={`${testId}-subject`}\n />\n </Field>\n <Field label={l.emailBody}>\n <Textarea\n rows={6}\n value={action.body}\n onChange={(e) => set({ body: e.target.value })}\n data-testid={`${testId}-body`}\n />\n </Field>\n {vars.length > 0 && (\n <div className=\"flex flex-wrap gap-1\" data-testid={`${testId}-variables`}>\n <span className=\"w-full text-xs text-muted-foreground\">{l.variablesHint}</span>\n {vars.map((v) => (\n <button\n key={v}\n type=\"button\"\n onClick={() => set({ body: `${action.body}${action.body ? ' ' : ''}${v}` })}\n className=\"rounded bg-muted px-1.5 py-0.5 font-mono text-[11px] text-muted-foreground hover:text-foreground\"\n title={v}\n >\n {v}\n </button>\n ))}\n </div>\n )}\n <Field label={l.attachments}>\n <DocumentRefList\n value={action.attachments ?? []}\n onChange={(attachments) =>\n set({ attachments: attachments.length ? attachments : undefined })\n }\n ctx={ctx}\n l={l}\n addLabel={l.addAttachment}\n testId={`${testId}-attachments`}\n />\n </Field>\n </>\n )\n}\n\nexport function TabularReviewSettings({\n action,\n onChange,\n ctx,\n l,\n testId,\n}: {\n action: WorkflowTabularReviewAction\n onChange: (action: WorkflowTabularReviewAction) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n const set = (p: Partial<WorkflowTabularReviewAction>) => onChange({ ...action, ...p })\n const mode = Array.isArray(action.documents) ? 'chosen' : action.documents\n const toggle = (id: string) =>\n set({\n tags: action.tags.includes(id) ? action.tags.filter((t) => t !== id) : [...action.tags, id],\n })\n return (\n <>\n <Field label={l.reviewColumns}>\n <div\n className=\"max-h-44 space-y-1 overflow-y-auto rounded-md border border-border p-2\"\n data-testid={`${testId}-tags`}\n >\n {ctx.tags.length === 0 && <p className=\"text-xs text-muted-foreground\">{l.noTags}</p>}\n {ctx.tags.map((t) => (\n <label key={t.value} className=\"flex items-center gap-2 text-sm\">\n <Checkbox\n checked={action.tags.includes(t.value)}\n onCheckedChange={() => toggle(t.value)}\n data-testid={`${testId}-tag-${t.value}`}\n />\n <span className=\"truncate\">{t.label}</span>\n </label>\n ))}\n {action.tags\n .filter((t) => !ctx.tags.some((x) => x.value === t))\n .map((t) => (\n <label key={t} className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Checkbox checked onCheckedChange={() => toggle(t)} />\n <code className=\"text-xs\">{t}</code>\n </label>\n ))}\n </div>\n </Field>\n <Field label={l.reviewDocuments}>\n <select\n className={selectClass}\n value={mode}\n onChange={(e) => {\n const v = e.target.value\n set({ documents: v === 'chosen' ? [] : (v as 'run_uploads' | 'workspace') })\n }}\n data-testid={`${testId}-documents`}\n >\n <option value=\"run_uploads\">{l.reviewRunUploads}</option>\n <option value=\"workspace\">{l.reviewWorkspace}</option>\n <option value=\"chosen\">{l.reviewChosen}</option>\n </select>\n </Field>\n {Array.isArray(action.documents) && (\n <DocumentRefList\n value={action.documents}\n onChange={(documents) => set({ documents })}\n ctx={ctx}\n l={l}\n addLabel={l.addDocument}\n testId={`${testId}-chosen`}\n />\n )}\n <label className=\"flex items-center gap-2 text-sm\">\n <Checkbox\n checked={!!action.overwrite}\n onCheckedChange={(v) => set({ overwrite: v === true || undefined })}\n />\n {l.overwrite}\n </label>\n </>\n )\n}\n\n/** \"Edit this document (tracked changes)\" on an agent step (main line only). */\nexport function EditDocumentSettings({\n step,\n patch,\n ctx,\n l,\n testId,\n}: {\n step: WorkflowAgentStep\n patch: (p: Partial<WorkflowAgentStep>) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n const on = !!step.editDocument\n return (\n <div className=\"space-y-2\">\n <label className=\"flex items-start gap-2 text-sm\">\n <Checkbox\n checked={on}\n disabled={!!step.branch}\n onCheckedChange={(v) => patch({ editDocument: v === true ? { step: '' } : undefined })}\n data-testid={`${testId}-edit-document`}\n />\n <span>\n {l.editDocument}\n <span className=\"block text-xs text-muted-foreground\">{l.editDocumentHint}</span>\n </span>\n </label>\n {on && (\n <DocumentRefPicker\n value={step.editDocument}\n onChange={(editDocument) => patch({ editDocument })}\n ctx={ctx}\n l={l}\n testId={`${testId}-edit-document-ref`}\n />\n )}\n </div>\n )\n}\n","/**\n * The choices of a `select` field in the builder: each option's label and tone. An option's value\n * follows its label (`High risk` → `high_risk`) while the option is new; a saved one keeps its\n * value when relabelled (`{value: high, label: \"High — refer to COLP\"}`), as signals test it.\n */\n\nimport { useState } from 'react'\nimport { Plus, X } from 'lucide-react'\nimport { Button, Input, cn } from '@arbidocs/react/ui'\nimport { TONES, TONE_DOT, isTone, type Tone } from '../components/tones'\nimport type { WorkflowFieldOption } from '../agents'\nimport { selectClass } from './StepActionSettings'\n\nexport interface FieldOptionsEditorLabels {\n options: string\n addOption: string\n optionLabel: string\n optionTone: string\n /** The tone picker's \"no tone\" choice. */\n noTone: string\n tones: Record<Tone, string>\n}\n\nexport const DEFAULT_FIELD_OPTIONS_EDITOR_LABELS: FieldOptionsEditorLabels = {\n options: 'Choices',\n addOption: 'Add choice',\n optionLabel: 'Choice',\n optionTone: 'Colour',\n noTone: 'No colour',\n tones: {\n neutral: 'Grey',\n info: 'Blue',\n success: 'Green',\n warning: 'Amber',\n danger: 'Red',\n accent: 'Purple',\n ai: 'AI',\n },\n}\n\n/** A value from a label: lower case, `_` between words, unique among `taken`. */\nexport const optionValue = (label: string, taken: string[]): string => {\n const base =\n label\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '') || 'option'\n let value = base\n let n = 2\n while (taken.includes(value)) value = `${base}_${n++}`\n return value\n}\n\nexport function FieldOptionsEditor({\n options,\n onChange,\n l,\n testId,\n}: {\n options: WorkflowFieldOption[]\n onChange: (options: WorkflowFieldOption[]) => void\n l: FieldOptionsEditorLabels\n testId: string\n}) {\n // Values of the options added here: they follow their label while it is typed.\n const [fresh, setFresh] = useState<ReadonlySet<string>>(() => new Set())\n const others = (i: number) => options.filter((_, j) => j !== i).map((o) => o.value)\n const set = (i: number, p: Partial<WorkflowFieldOption>) => {\n const before = options[i]?.value\n if (before !== undefined && p.value !== undefined && p.value !== before && fresh.has(before))\n setFresh((s) => new Set([...s].filter((v) => v !== before)).add(p.value as string))\n onChange(options.map((o, j) => (j === i ? { ...o, ...p } : o)))\n }\n return (\n <div className=\"space-y-1.5\" data-testid={`${testId}-options`}>\n <p className=\"text-xs text-muted-foreground\">{l.options}</p>\n {options.map((o, i) => (\n <div key={i} className=\"flex items-center gap-2\" data-testid={`${testId}-option-${i}`}>\n <span\n aria-hidden\n className={cn(\n 'size-2 shrink-0 rounded-full',\n o.tone ? TONE_DOT[o.tone] : 'border border-border'\n )}\n />\n <Input\n value={o.label}\n aria-label={l.optionLabel}\n onChange={(e) =>\n set(i, {\n label: e.target.value,\n // A saved option keeps its value: a signal (`equals: high`) may test it.\n value: fresh.has(o.value) ? optionValue(e.target.value, others(i)) : o.value,\n })\n }\n className=\"h-8 min-w-0 flex-1\"\n />\n <select\n aria-label={l.optionTone}\n className={cn(selectClass, 'h-8 w-28 shrink-0')}\n value={o.tone ?? ''}\n onChange={(e) => set(i, { tone: isTone(e.target.value) ? e.target.value : undefined })}\n data-testid={`${testId}-option-${i}-tone`}\n >\n <option value=\"\">{l.noTone}</option>\n {TONES.map((t) => (\n <option key={t} value={t}>\n {l.tones[t]}\n </option>\n ))}\n </select>\n <button\n type=\"button\"\n aria-label={`${o.label} ×`}\n onClick={() => onChange(options.filter((_, j) => j !== i))}\n >\n <X className=\"size-4 text-muted-foreground\" />\n </button>\n </div>\n ))}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n const label = `${l.optionLabel} ${options.length + 1}`\n const value = optionValue(\n label,\n options.map((o) => o.value)\n )\n setFresh((s) => new Set(s).add(value))\n onChange([...options, { value, label }])\n }}\n data-testid={`${testId}-add-option`}\n >\n <Plus className=\"size-4\" /> {l.addOption}\n </Button>\n </div>\n )\n}\n","/**\n * The designer's side panel: the selected step's settings, or the workflow's own when nothing is\n * selected. Every edit goes through the pure operations in `./edit`.\n */\n\nimport { Plus, Trash2, X } from 'lucide-react'\nimport { Button, Checkbox, Input, Textarea, cn } from '@arbidocs/react/ui'\nimport {\n canAssign,\n runFields,\n stepDependencies,\n upstreamSteps,\n workflowSteps,\n type WorkflowAgentStep,\n type WorkflowDefinition,\n type WorkflowField,\n type WorkflowFieldType,\n type WorkflowStep,\n} from '../agents'\nimport { disconnectSteps, removeStep, renameInput, updateStep } from './edit'\nimport { SignalsEditor, type SignalsEditorLabels } from './SignalsEditor'\nimport {\n DEFAULT_FIELD_OPTIONS_EDITOR_LABELS,\n FieldOptionsEditor,\n type FieldOptionsEditorLabels,\n} from './FieldOptionsEditor'\nimport {\n AssigneeSettings,\n DEFAULT_STEP_ACTION_SETTINGS_LABELS,\n EditDocumentSettings,\n EmailDraftSettings,\n Field,\n SignSettings,\n TabularReviewSettings,\n selectClass,\n type StepActionSettingsLabels,\n type StepContext,\n type StepInspectorOption,\n} from './StepActionSettings'\n\nexport type { StepInspectorOption } from './StepActionSettings'\n\nexport interface StepInspectorLabels {\n workflow: string\n title: string\n description: string\n waitsFor: string\n startsWithRun: string\n fields: string\n addField: string\n fieldLabel: string\n fieldType: string\n required: string\n runs: string\n /** The run picker before anything is chosen. */\n chooseRun: string\n ownPrompt: string\n prompt: string\n promptHint: string\n inputFor: string\n /** Under a skill input no run field matched; `{fields}` lists the codes there are. */\n inputHint: string\n /** The same when the run has no fields yet. */\n inputHintNoFields: string\n thread: string\n threadMain: string\n threadBranch: string\n output: string\n outputAnswer: string\n outputArtifact: string\n uploadRequired: string\n hint: string\n instructions: string\n instructionsHint: string\n /** A review's fields: what the approver fills in. */\n reviewFields: string\n reviewFieldsHint: string\n deleteStep: string\n}\n\nexport const DEFAULT_STEP_INSPECTOR_LABELS: StepInspectorLabels = {\n workflow: 'Workflow',\n title: 'Title',\n description: 'Description',\n waitsFor: 'Waits for',\n startsWithRun: 'Starts with the run',\n fields: 'Fields',\n addField: 'Add field',\n fieldLabel: 'Label',\n fieldType: 'Type',\n required: 'Required',\n runs: 'Runs',\n chooseRun: 'Choose a skill or write an instruction…',\n ownPrompt: 'Its own instruction',\n prompt: 'Instruction',\n promptHint: 'Use {{field}} for an input and {{steps.<id>}} for an earlier step’s answer.',\n inputFor: 'Input',\n inputHint: 'Type a value, or use a field: {fields}',\n inputHintNoFields: 'Type a value, or add a form field to fill it from.',\n thread: 'Where it runs',\n threadMain: 'In the run’s thread (sees the conversation so far)',\n threadBranch: 'On a branch (delivers only its result to the thread)',\n output: 'Shows',\n outputAnswer: 'The answer',\n outputArtifact: 'A drafted document',\n uploadRequired: 'Files are required',\n hint: 'Hint',\n instructions: 'What to review',\n instructionsHint: 'Shown on the review task; {{field}} and {{steps.<id>}} work here.',\n reviewFields: 'Filled in when approving',\n reviewFieldsHint: 'E.g. a rating or a comment; the answers join the run’s inputs.',\n deleteStep: 'Delete step',\n}\n\nconst FIELD_TYPES: WorkflowFieldType[] = [\n 'text',\n 'longtext',\n 'boolean',\n 'select',\n 'number',\n 'date',\n 'scope',\n 'person',\n]\n\nexport interface StepInspectorProps {\n workflow: WorkflowDefinition\n stepId: string | null\n onChange: (workflow: WorkflowDefinition) => void\n /** Deselect (after a delete). */\n onSelect?: (stepId: string | null) => void\n /** What an agent step can run: skills and single-run workflows. */\n workflows?: WorkflowDefinition[]\n /** The workspace's members: who a step is for, who signs. */\n people?: StepInspectorOption[]\n /** The workspace's labels: a tabular review's columns. */\n tags?: StepInspectorOption[]\n /** The workspace's documents: what a step names directly. */\n documents?: StepInspectorOption[]\n labels?: Partial<StepInspectorLabels>\n /** The assignee and action settings' wording. */\n actionLabels?: Partial<StepActionSettingsLabels>\n /** The \"When done, signal…\" editor's wording. */\n signalLabels?: Partial<SignalsEditorLabels>\n /** A select field's choices editor wording. */\n optionLabels?: Partial<FieldOptionsEditorLabels>\n testId?: string\n}\n\nconst fieldName = (label: string, taken: string[]): string => {\n const base =\n label\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '')\n .replace(/^[^a-z]+/, '') || 'field'\n let name = base\n let n = 2\n while (taken.includes(name)) name = `${base}_${n++}`\n return name\n}\n\nexport function StepInspector({\n workflow,\n stepId,\n onChange,\n onSelect,\n workflows = [],\n people = [],\n tags = [],\n documents = [],\n labels,\n actionLabels,\n signalLabels,\n optionLabels,\n testId = 'step-inspector',\n}: StepInspectorProps) {\n const l = { ...DEFAULT_STEP_INSPECTOR_LABELS, ...labels }\n const ol = { ...DEFAULT_FIELD_OPTIONS_EDITOR_LABELS, ...optionLabels }\n const steps = workflowSteps(workflow)\n const step = steps.find((s) => s.id === stepId)\n const run = workflow.run.kind === 'steps' ? workflow.run : undefined\n\n if (!step || !run) {\n return (\n <div className=\"space-y-4\" data-testid={`${testId}-workflow`}>\n <p className=\"text-sm font-semibold\">{l.workflow}</p>\n <Field label={l.title}>\n <Input\n value={workflow.title}\n onChange={(e) => onChange({ ...workflow, title: e.target.value })}\n data-testid={`${testId}-workflow-title`}\n />\n </Field>\n <Field label={l.description}>\n <Textarea\n value={workflow.description}\n rows={2}\n onChange={(e) => onChange({ ...workflow, description: e.target.value })}\n />\n </Field>\n </div>\n )\n }\n\n const patch = (p: Partial<WorkflowStep>) => onChange(updateStep(workflow, step.id, p))\n const al = { ...DEFAULT_STEP_ACTION_SETTINGS_LABELS, ...actionLabels }\n const ctx: StepContext = {\n earlier: upstreamSteps(steps, step.id),\n fields: runFields(workflow),\n people,\n tags,\n documents,\n }\n // Field codes other steps use: a new field's code never collides with them.\n const takenBy = (id: string) =>\n steps\n .flatMap((s) =>\n s.id === id\n ? []\n : s.kind === 'form'\n ? s.inputs\n : s.kind === 'review'\n ? (s.fields ?? [])\n : []\n )\n .map((f) => f.name)\n /** New fields of this step: a code that followed its label renames what reads it. */\n const setFields = (before: WorkflowField[], after: WorkflowField[], key: 'inputs' | 'fields') => {\n const renamed = before.flatMap((f, i) =>\n after[i] && after[i].name !== f.name ? [[f.name, after[i].name] as const] : []\n )\n onChange(\n renamed.reduce(\n (w, [from, to]) => renameInput(w, from, to),\n updateStep(workflow, step.id, {\n [key]: key === 'fields' && !after.length ? undefined : after,\n } as Partial<WorkflowStep>)\n )\n )\n }\n const deps = stepDependencies(steps, step.id)\n const titleOf = (id: string) => steps.find((s) => s.id === id)?.title ?? id\n\n return (\n <div className=\"space-y-4\" data-testid={`${testId}-step`}>\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"truncate text-sm font-semibold\">{step.title}</p>\n <code className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[11px] text-muted-foreground\">\n {step.id}\n </code>\n </div>\n <Field label={l.title}>\n <Input\n value={step.title}\n onChange={(e) => patch({ title: e.target.value })}\n data-testid={`${testId}-title`}\n />\n </Field>\n <Field label={l.description}>\n <Textarea\n value={step.description ?? ''}\n rows={2}\n onChange={(e) => patch({ description: e.target.value || undefined })}\n />\n </Field>\n <Field label={l.waitsFor}>\n <div className=\"flex flex-wrap gap-1.5\" data-testid={`${testId}-waits-for`}>\n {deps.length === 0 && (\n <span className=\"text-xs text-muted-foreground\">{l.startsWithRun}</span>\n )}\n {deps.map((d) => (\n <span\n key={d}\n className=\"inline-flex items-center gap-1 rounded-full border border-border px-2 py-0.5 text-xs\"\n >\n {titleOf(d)}\n <button\n type=\"button\"\n aria-label={`${titleOf(d)} ×`}\n onClick={() => onChange(disconnectSteps(workflow, d, step.id))}\n >\n <X className=\"size-3\" />\n </button>\n </span>\n ))}\n </div>\n </Field>\n\n {step.kind === 'form' && (\n <FormFields\n fields={step.inputs}\n taken={takenBy(step.id)}\n // A field whose code followed its label: the steps reading it follow too.\n onChange={(inputs) => setFields(step.inputs, inputs, 'inputs')}\n l={l}\n optionLabels={ol}\n testId={testId}\n />\n )}\n\n {step.kind === 'upload' && (\n <>\n <label className=\"flex items-center gap-2 text-sm\">\n <Checkbox\n checked={!!step.required}\n onCheckedChange={(v) => patch({ required: v === true || undefined })}\n />\n {l.uploadRequired}\n </label>\n <Field label={l.hint}>\n <Input\n value={step.hint ?? ''}\n onChange={(e) => patch({ hint: e.target.value || undefined })}\n />\n </Field>\n </>\n )}\n\n {step.kind === 'agent' && (\n <>\n <AgentSettings\n step={step}\n workflows={workflows}\n fields={runFields(workflow).map((f) => f.name)}\n patch={patch}\n l={l}\n testId={testId}\n />\n <EditDocumentSettings step={step} patch={patch} ctx={ctx} l={al} testId={testId} />\n </>\n )}\n\n {step.kind === 'review' && (\n <>\n <Field label={l.instructions} hint={l.instructionsHint}>\n <Textarea\n value={step.instructions ?? ''}\n rows={4}\n onChange={(e) => patch({ instructions: e.target.value || undefined })}\n data-testid={`${testId}-instructions`}\n />\n </Field>\n <FormFields\n fields={step.fields ?? []}\n taken={takenBy(step.id)}\n onChange={(fields) => setFields(step.fields ?? [], fields, 'fields')}\n l={{ ...l, fields: l.reviewFields }}\n optionLabels={ol}\n hint={l.reviewFieldsHint}\n testId={`${testId}-review`}\n />\n </>\n )}\n\n {step.kind === 'action' && step.action.type === 'sign' && (\n <SignSettings\n action={step.action}\n onChange={(action) => patch({ action })}\n ctx={ctx}\n l={al}\n testId={`${testId}-sign`}\n />\n )}\n {step.kind === 'action' && step.action.type === 'email_draft' && (\n <EmailDraftSettings\n action={step.action}\n onChange={(action) => patch({ action })}\n ctx={ctx}\n l={al}\n testId={`${testId}-email`}\n />\n )}\n {step.kind === 'action' && step.action.type === 'tabular_review' && (\n <TabularReviewSettings\n action={step.action}\n onChange={(action) => patch({ action })}\n ctx={ctx}\n l={al}\n testId={`${testId}-review-grid`}\n />\n )}\n\n {canAssign(step) && (\n <AssigneeSettings step={step} patch={patch} ctx={ctx} l={al} testId={testId} />\n )}\n\n <SignalsEditor\n step={step}\n onChange={(signals) => patch({ signals })}\n labels={signalLabels}\n testId={`${testId}-signals`}\n />\n\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-destructive\"\n onClick={() => {\n onChange(removeStep(workflow, step.id))\n onSelect?.(null)\n }}\n data-testid={`${testId}-delete`}\n >\n <Trash2 className=\"size-4\" /> {l.deleteStep}\n </Button>\n </div>\n )\n}\n\n/** The fields editor: a form's fields, a review's fields. */\nexport function FormFields({\n fields,\n taken,\n onChange,\n l,\n optionLabels = DEFAULT_FIELD_OPTIONS_EDITOR_LABELS,\n hint,\n testId,\n}: {\n fields: WorkflowField[]\n /** Codes used by other steps' fields: a field's code never collides with them. */\n taken: string[]\n onChange: (fields: WorkflowField[]) => void\n l: Pick<StepInspectorLabels, 'fields' | 'fieldLabel' | 'fieldType' | 'required' | 'addField'>\n optionLabels?: FieldOptionsEditorLabels\n hint?: string\n testId: string\n}) {\n const set = (i: number, p: Partial<WorkflowField>) =>\n onChange(fields.map((f, j) => (j === i ? { ...f, ...p } : f)))\n return (\n <Field label={l.fields} hint={hint}>\n <div className=\"space-y-2\" data-testid={`${testId}-fields`}>\n {fields.map((f, i) => (\n <div key={i} className=\"space-y-1.5 rounded-md border border-border p-2\">\n <div className=\"flex items-center gap-2\">\n <Input\n value={f.label}\n aria-label={l.fieldLabel}\n // The field's code follows its label, so `{{client}}` reads the \"Client\" field.\n onChange={(e) =>\n set(i, {\n label: e.target.value,\n name: fieldName(e.target.value, [\n ...taken,\n ...fields.filter((_, j) => j !== i).map((x) => x.name),\n ]),\n })\n }\n className=\"h-8\"\n />\n <button\n type=\"button\"\n aria-label={`${f.label} ×`}\n onClick={() => onChange(fields.filter((_, j) => j !== i))}\n >\n <X className=\"size-4 text-muted-foreground\" />\n </button>\n </div>\n <div className=\"flex items-center gap-2\">\n <select\n aria-label={l.fieldType}\n className={cn(selectClass, 'h-8')}\n value={f.type}\n onChange={(e) => set(i, { type: e.target.value as WorkflowFieldType })}\n >\n {/* A type set elsewhere (a select from a skill file) is kept and shown. */}\n {(FIELD_TYPES.includes(f.type) ? FIELD_TYPES : [...FIELD_TYPES, f.type]).map(\n (t) => (\n <option key={t} value={t}>\n {t}\n </option>\n )\n )}\n </select>\n <label className=\"flex shrink-0 items-center gap-1.5 text-xs\">\n <Checkbox\n checked={!!f.required}\n onCheckedChange={(v) => set(i, { required: v === true || undefined })}\n />\n {l.required}\n </label>\n <code className=\"shrink-0 text-[11px] text-muted-foreground\">{`{{${f.name}}}`}</code>\n </div>\n {f.type === 'select' && (\n <FieldOptionsEditor\n options={f.options ?? []}\n onChange={(options) => set(i, { options })}\n l={optionLabels}\n testId={`${testId}-field-${i}`}\n />\n )}\n </div>\n ))}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n onChange([\n ...fields,\n {\n name: fieldName('Field', [...taken, ...fields.map((f) => f.name)]),\n type: 'text',\n label: 'Field',\n },\n ])\n }\n data-testid={`${testId}-add-field`}\n >\n <Plus className=\"size-4\" /> {l.addField}\n </Button>\n </div>\n </Field>\n )\n}\n\n/** The run picker's value for \"its own instruction\" (a skill's value is its id). */\nconst OWN_PROMPT = '__prompt'\n\n/**\n * A skill's inputs when it is picked: each one named like a field of the run reads that field\n * (`{{client}}`); the others start empty. What was typed before is kept.\n */\nfunction prefillSkillInputs(\n target: WorkflowDefinition | undefined,\n fields: string[],\n current: Record<string, string> = {}\n): Record<string, string> {\n const out: Record<string, string> = {}\n for (const f of target?.inputs ?? []) {\n const typed = current[f.name]\n if (typed) out[f.name] = typed\n else if (fields.includes(f.name)) out[f.name] = `{{${f.name}}}`\n }\n return out\n}\n\nfunction AgentSettings({\n step,\n workflows,\n fields,\n patch,\n l,\n testId,\n}: {\n step: WorkflowAgentStep\n workflows: WorkflowDefinition[]\n /** The codes of the run's fields, what a skill's inputs can read. */\n fields: string[]\n patch: (p: Partial<WorkflowAgentStep>) => void\n l: StepInspectorLabels\n testId: string\n}) {\n const target = step.workflow ? workflows.find((w) => w.id === step.workflow) : undefined\n const value = step.workflow ?? (step.run ? OWN_PROMPT : '')\n const codes = fields.map((f) => `{{${f}}}`).join(', ')\n return (\n <>\n <Field label={l.runs}>\n <select\n className={selectClass}\n value={value}\n onChange={(e) => {\n const id = e.target.value\n if (id === OWN_PROMPT)\n patch({\n workflow: undefined,\n with: undefined,\n run: { kind: 'prompt', promptTemplate: '' },\n })\n else if (id)\n patch({\n workflow: id,\n run: undefined,\n with: prefillSkillInputs(\n workflows.find((w) => w.id === id),\n fields,\n step.with\n ),\n })\n }}\n data-testid={`${testId}-runs`}\n >\n {!value && (\n <option value=\"\" disabled>\n {l.chooseRun}\n </option>\n )}\n <option value={OWN_PROMPT}>{l.ownPrompt}</option>\n {workflows.map((w) => (\n <option key={w.id} value={w.id}>\n {w.title}\n </option>\n ))}\n {step.workflow && !target && <option value={step.workflow}>{step.workflow}</option>}\n </select>\n </Field>\n\n {step.workflow ? (\n (target?.inputs ?? []).map((f) => (\n <Field\n key={f.name}\n label={`${l.inputFor}: ${f.label}`}\n hint={\n step.with?.[f.name]\n ? undefined\n : codes\n ? l.inputHint.replace('{fields}', codes)\n : l.inputHintNoFields\n }\n >\n <Input\n value={step.with?.[f.name] ?? ''}\n onChange={(e) => patch({ with: { ...step.with, [f.name]: e.target.value } })}\n data-testid={`${testId}-with-${f.name}`}\n />\n </Field>\n ))\n ) : step.run?.kind === 'prompt' ? (\n <Field label={l.prompt} hint={l.promptHint}>\n <Textarea\n value={step.run.promptTemplate}\n rows={5}\n onChange={(e) => patch({ run: { kind: 'prompt', promptTemplate: e.target.value } })}\n data-testid={`${testId}-prompt`}\n />\n </Field>\n ) : null}\n\n <Field label={l.thread}>\n <select\n className={selectClass}\n value={step.branch ? 'branch' : 'main'}\n onChange={(e) => patch({ branch: e.target.value === 'branch' || undefined })}\n data-testid={`${testId}-thread`}\n >\n <option value=\"main\">{l.threadMain}</option>\n <option value=\"branch\">{l.threadBranch}</option>\n </select>\n </Field>\n <Field label={l.output}>\n <select\n className={selectClass}\n value={step.output ?? 'answer'}\n onChange={(e) =>\n patch({ output: e.target.value === 'artifact' ? 'artifact' : undefined })\n }\n >\n <option value=\"answer\">{l.outputAnswer}</option>\n <option value=\"artifact\">{l.outputArtifact}</option>\n </select>\n </Field>\n </>\n )\n}\n","/**\n * What starts a workflow and who runs it: the builder's trigger node, and the mapping between a\n * builder's value (steps + trigger) and a saved workflow (`CreateWorkflowRequest` /\n * `WorkflowResponse`). The steps travel in the workflow's plan (`toPlanSteps`); every firing creates\n * a work thread that runs them.\n */\n\nimport type { components } from '@arbidocs/client'\nimport {\n fromPlanSteps,\n layoutFromPlanSteps,\n toPlanSteps,\n type StepComposeOptions,\n type WorkflowDefinition,\n} from '../agents'\nimport { isoToLocalInput, localInputToIso, workflowWhen } from '../agents'\n\ntype Schemas = components['schemas']\ntype CreateWorkflowRequest = Schemas['CreateWorkflowRequest']\ntype UpdateWorkflowRequest = Schemas['UpdateWorkflowRequest']\ntype WorkflowResponse = Schemas['WorkflowResponse']\n\n/** The event a step's signal raises (`TaskPlanStep.signals`): \"When a step signals\". */\nexport const WORKFLOW_SIGNAL_EVENT = 'workflow_signal'\n\n/**\n * When a workflow starts: `manual` when someone presses Run, `once` at a date, `repeat` on a\n * schedule, `event` when something happens in the workspace, `task` when another task is done.\n */\nexport type WorkflowStart = 'manual' | 'once' | 'repeat' | 'event' | 'task'\n\nexport interface WorkflowTrigger {\n start: WorkflowStart\n /** `once`: a `datetime-local` value. */\n runAt: string\n /** `repeat`: an RFC 5545 rule. */\n rrule: string\n timezone: string\n /** `event`: a notification type. */\n eventKind: string\n /** `event` on `workflow_signal`: the signal name it starts on (its `event_filter.signal`). */\n signal: string\n /** `event` on any other kind: the saved equality filter, kept as it was. */\n eventFilter?: Record<string, string | number | boolean> | null\n /** `task`: the task (`con-…`) it waits on. */\n afterTaskId: string\n /** The agent that runs it (`agt-…`); `''` = the owner's own assistant. */\n agentId: string\n /** Unattended starts: keep standing access, or ask the owner each run. */\n access: 'ask_each_run' | 'standing'\n}\n\nexport const DEFAULT_WORKFLOW_TRIGGER: WorkflowTrigger = {\n start: 'manual',\n runAt: '',\n rrule: '',\n timezone: typeof Intl !== 'undefined' ? Intl.DateTimeFormat().resolvedOptions().timeZone : 'UTC',\n eventKind: '',\n signal: '',\n afterTaskId: '',\n agentId: '',\n access: 'ask_each_run',\n}\n\n/** A builder's whole value: the steps (a stepped workflow) and what starts it. */\nexport interface WorkflowBuilderValue {\n workflow: WorkflowDefinition\n trigger: WorkflowTrigger\n}\n\n/** What is missing before the trigger can be saved; `null` when it can. */\nexport function triggerProblem(\n trigger: WorkflowTrigger\n): 'runAt' | 'rrule' | 'event' | 'signal' | 'task' | null {\n if (trigger.start === 'once' && !trigger.runAt) return 'runAt'\n if (trigger.start === 'repeat' && !trigger.rrule.trim()) return 'rrule'\n if (trigger.start === 'event' && !trigger.eventKind.trim()) return 'event'\n if (isSignalTrigger(trigger) && !trigger.signal.trim()) return 'signal'\n if (trigger.start === 'task' && !trigger.afterTaskId) return 'task'\n return null\n}\n\n/** Does the workflow start when a step (of any workflow) raises a signal? */\nexport const isSignalTrigger = (trigger: WorkflowTrigger): boolean =>\n trigger.start === 'event' && trigger.eventKind.trim() === WORKFLOW_SIGNAL_EVENT\n\nfunction eventFilter(trigger: WorkflowTrigger) {\n if (trigger.start !== 'event') return null\n if (isSignalTrigger(trigger)) return { signal: trigger.signal.trim() }\n return trigger.eventFilter && Object.keys(trigger.eventFilter).length ? trigger.eventFilter : null\n}\n\nfunction triggerFields(trigger: WorkflowTrigger, clearOthers: boolean) {\n const none = clearOthers ? null : undefined\n const filter = eventFilter(trigger)\n return {\n timezone: trigger.timezone,\n rrule: trigger.start === 'repeat' ? trigger.rrule.trim() : none,\n run_at: trigger.start === 'once' ? localInputToIso(trigger.runAt) : none,\n event_kind: trigger.start === 'event' ? trigger.eventKind.trim() : none,\n // A step signal is `workflow_signal` narrowed to one signal name.\n event_filter: filter ?? none,\n after_conversation_ext_id: trigger.start === 'task' ? trigger.afterTaskId : none,\n on_demand: trigger.start === 'manual',\n }\n}\n\nconst authMode = (trigger: WorkflowTrigger) =>\n trigger.start === 'manual'\n ? ('run_now_temp' as const)\n : trigger.access === 'standing'\n ? ('scheduled_permanent' as const)\n : ('scheduled_require_auth' as const)\n\nconst withoutUndefined = <T extends object>(o: T): T =>\n Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined)) as T\n\nfunction plan(value: WorkflowBuilderValue, options: StepComposeOptions) {\n return {\n goal: value.workflow.description,\n criteria: [],\n max_passes: 3,\n documents: [],\n steps: toPlanSteps(value.workflow, options),\n }\n}\n\n/** A new saved workflow: its steps in the plan (prompts keep `{{field}}` for each run to fill). */\nexport function builderToWorkflowRequest(\n value: WorkflowBuilderValue,\n workspaceId: string,\n options: StepComposeOptions = {}\n): CreateWorkflowRequest {\n return withoutUndefined({\n workspace_ext_id: workspaceId,\n name: value.workflow.title,\n description: value.workflow.description,\n active: true,\n shared: true,\n ...triggerFields(value.trigger, false),\n prompt: '',\n skill_ref: null,\n skill_inputs: null,\n agent_ext_id: value.trigger.agentId || null,\n auth_mode: authMode(value.trigger),\n plan: plan(value, options),\n }) as CreateWorkflowRequest\n}\n\n/** An edit of a saved workflow: the steps and the trigger as the builder now has them. */\nexport function builderToWorkflowUpdate(\n value: WorkflowBuilderValue,\n options: StepComposeOptions = {}\n): UpdateWorkflowRequest {\n return withoutUndefined({\n name: value.workflow.title,\n description: value.workflow.description,\n ...triggerFields(value.trigger, true),\n // The steps are what runs (a classic automation's single prompt or skill becomes its one step).\n prompt: '',\n skill_ref: null,\n skill_inputs: null,\n agent_ext_id: value.trigger.agentId || null,\n auth_mode: authMode(value.trigger),\n plan: plan(value, options),\n }) as UpdateWorkflowRequest\n}\n\n/**\n * A saved workflow back in the builder. A classic automation (one prompt or one skill, no steps)\n * opens as a workflow of that one agent step; saving it keeps it as steps.\n */\nexport function workflowRecordToBuilder(record: WorkflowResponse): WorkflowBuilderValue {\n const planned = (record.plan?.steps ?? []) as NonNullable<Parameters<typeof fromPlanSteps>[0]>\n const steps = planned.length\n ? fromPlanSteps(planned)\n : record.prompt || record.skill_ref\n ? [\n {\n id: 'work',\n kind: 'agent' as const,\n title: record.name,\n ...(record.skill_ref\n ? { workflow: record.skill_ref }\n : { run: { kind: 'prompt' as const, promptTemplate: record.prompt } }),\n },\n ]\n : []\n const when = workflowWhen(record)\n return {\n workflow: {\n id: record.external_id,\n title: record.name,\n description: record.description ?? '',\n inputs: [],\n landing: 'chat',\n schedulable: false,\n run: { kind: 'steps', steps, layout: layoutFromPlanSteps(planned ?? []) },\n },\n trigger: {\n ...DEFAULT_WORKFLOW_TRIGGER,\n start: when === 'now' ? 'manual' : when,\n runAt: isoToLocalInput(record.run_at),\n rrule: record.rrule ?? '',\n timezone: record.timezone || DEFAULT_WORKFLOW_TRIGGER.timezone,\n eventKind: record.event_kind ?? '',\n signal:\n record.event_kind === WORKFLOW_SIGNAL_EVENT &&\n typeof record.event_filter?.signal === 'string'\n ? record.event_filter.signal\n : '',\n eventFilter:\n record.event_kind && record.event_kind !== WORKFLOW_SIGNAL_EVENT && record.event_filter\n ? (record.event_filter as WorkflowTrigger['eventFilter'])\n : undefined,\n afterTaskId: record.after_conversation_ext_id ?? '',\n agentId: record.agent_ext_id ?? '',\n access: record.auth_mode === 'scheduled_permanent' ? 'standing' : 'ask_each_run',\n },\n }\n}\n\n/** A signal a firm's workflow declares, as the \"When a step signals\" picker offers it. */\nexport interface DeclaredSignal {\n value: string\n /** Where it is raised: `<workflow> › <step>` (the first place, when several raise it). */\n label: string\n}\n\n/**\n * Every signal the given workflows' steps declare (saved records, plus the one being built), each\n * name once, in the order first seen: the picker's options. Free text stays allowed.\n */\nexport function declaredSignals(\n records: ReadonlyArray<Pick<WorkflowResponse, 'name' | 'plan'>>,\n current?: WorkflowDefinition\n): DeclaredSignal[] {\n const out = new Map<string, DeclaredSignal>()\n const add = (\n workflow: string,\n steps: ReadonlyArray<{ title: string; signals?: Array<{ name: string }> | null }>\n ) => {\n for (const step of steps)\n for (const signal of step.signals ?? [])\n if (signal.name && !out.has(signal.name))\n out.set(signal.name, { value: signal.name, label: `${workflow} › ${step.title}` })\n }\n for (const record of records)\n add(record.name, (record.plan?.steps ?? []) as NonNullable<Parameters<typeof fromPlanSteps>[0]>)\n if (current?.run.kind === 'steps') add(current.title, current.run.steps)\n return [...out.values()]\n}\n","/**\n * The builder's trigger settings: what starts the workflow (someone pressing Run, a date, a\n * schedule, something happening in the workspace, another task being done), who runs its agent\n * steps, and, for a start nobody is there for, how the agent gets access.\n */\n\nimport { Input, Label, cn } from '@arbidocs/react/ui'\nimport { AgentSelect, RecurrenceBuilder, describeRRule, type AgentOption } from '../agents'\nimport {\n WORKFLOW_SIGNAL_EVENT,\n isSignalTrigger,\n type DeclaredSignal,\n type WorkflowStart,\n type WorkflowTrigger,\n} from './trigger'\n\nexport interface TriggerInspectorLabels {\n heading: string\n start: string\n starts: Record<WorkflowStart, string>\n runAt: string\n event: string\n eventPlaceholder: string\n /** The \"When something happens\" option for another workflow's step signal. */\n stepSignals: string\n signal: string\n signalPlaceholder: string\n signalHint: string\n /** The trigger node's line; `{signal}` is replaced. */\n signalSummary: string\n afterTask: string\n afterTaskPlaceholder: string\n agent: string\n access: string\n accessAsk: string\n accessStanding: string\n}\n\nexport const DEFAULT_TRIGGER_INSPECTOR_LABELS: TriggerInspectorLabels = {\n heading: 'Start',\n start: 'Starts',\n starts: {\n manual: 'When someone runs it',\n once: 'Once, at a time',\n repeat: 'On a schedule',\n event: 'When something happens',\n task: 'When a task is done',\n },\n runAt: 'When',\n event: 'Event',\n eventPlaceholder: 'Pick an event',\n stepSignals: 'When a step signals',\n signal: 'Signal',\n signalPlaceholder: 'e.g. risk-high',\n signalHint:\n 'Starts as its own thread, linked to the thread whose step raised it, with that run’s inputs.',\n signalSummary: 'When a step signals “{signal}”',\n afterTask: 'After this task',\n afterTaskPlaceholder: 'Pick a task',\n agent: 'Runs as',\n access: 'Access when nobody is there',\n accessAsk: 'Ask me each run',\n accessStanding: 'Keep access',\n}\n\n/** One line for the trigger node: what starts the workflow. */\nexport function triggerSummary(\n trigger: WorkflowTrigger,\n options: {\n labels?: Partial<TriggerInspectorLabels>\n eventLabel?: (kind: string) => string | undefined\n taskLabel?: (id: string) => string | undefined\n } = {}\n): string {\n const l = { ...DEFAULT_TRIGGER_INSPECTOR_LABELS, ...options.labels }\n switch (trigger.start) {\n case 'once':\n return trigger.runAt ? new Date(trigger.runAt).toLocaleString() : l.starts.once\n case 'repeat':\n return trigger.rrule ? describeRRule(trigger.rrule) : l.starts.repeat\n case 'event':\n if (isSignalTrigger(trigger))\n return trigger.signal ? l.signalSummary.replace('{signal}', trigger.signal) : l.stepSignals\n return (\n (trigger.eventKind && options.eventLabel?.(trigger.eventKind)) ||\n trigger.eventKind ||\n l.starts.event\n )\n case 'task':\n return (trigger.afterTaskId && options.taskLabel?.(trigger.afterTaskId)) || l.starts.task\n default:\n return l.starts.manual\n }\n}\n\nexport interface TriggerInspectorProps {\n trigger: WorkflowTrigger\n onChange: (trigger: WorkflowTrigger) => void\n agents?: AgentOption[]\n /** The workspace events a workflow can start on. */\n eventKinds?: Array<{ value: string; label: string }>\n /** Tasks a workflow can wait on. */\n tasks?: Array<{ value: string; label: string }>\n /** The signals the firm's workflows declare (`declaredSignals`): the signal picker's options. */\n signals?: DeclaredSignal[]\n labels?: Partial<TriggerInspectorLabels>\n testId?: string\n}\n\nconst selectClass =\n 'flex h-9 w-full rounded-md border border-input bg-background px-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring'\n\nconst STARTS: WorkflowStart[] = ['manual', 'once', 'repeat', 'event', 'task']\n\nexport function TriggerInspector({\n trigger,\n onChange,\n agents = [],\n eventKinds = [],\n tasks = [],\n signals = [],\n labels,\n testId = 'trigger-inspector',\n}: TriggerInspectorProps) {\n const l = { ...DEFAULT_TRIGGER_INSPECTOR_LABELS, ...labels }\n const set = (patch: Partial<WorkflowTrigger>) => onChange({ ...trigger, ...patch })\n // A step signal is always offered, whatever events the host lists.\n const events = eventKinds.some((k) => k.value === WORKFLOW_SIGNAL_EVENT)\n ? eventKinds\n : [...eventKinds, { value: WORKFLOW_SIGNAL_EVENT, label: l.stepSignals }]\n return (\n <div className=\"space-y-4\" data-testid={testId}>\n <p className=\"text-sm font-semibold\">{l.heading}</p>\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.start}</Label>\n <div className=\"grid gap-1.5\" role=\"radiogroup\" aria-label={l.start}>\n {STARTS.map((start) => (\n <button\n key={start}\n type=\"button\"\n role=\"radio\"\n aria-checked={trigger.start === start}\n onClick={() => set({ start })}\n className={cn(\n 'rounded-md border px-3 py-2 text-left text-sm transition-colors',\n trigger.start === start\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border hover:bg-muted/50'\n )}\n data-testid={`${testId}-start-${start}`}\n >\n {l.starts[start]}\n </button>\n ))}\n </div>\n </div>\n\n {trigger.start === 'once' && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.runAt}</Label>\n <Input\n type=\"datetime-local\"\n value={trigger.runAt}\n onChange={(e) => set({ runAt: e.target.value })}\n data-testid={`${testId}-run-at`}\n />\n </div>\n )}\n {trigger.start === 'repeat' && (\n <RecurrenceBuilder rrule={trigger.rrule} onChange={(rrule) => set({ rrule })} />\n )}\n {trigger.start === 'event' && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.event}</Label>\n <select\n className={selectClass}\n value={trigger.eventKind}\n onChange={(e) => set({ eventKind: e.target.value, eventFilter: undefined })}\n data-testid={`${testId}-event`}\n >\n <option value=\"\">{l.eventPlaceholder}</option>\n {events.map((k) => (\n <option key={k.value} value={k.value}>\n {k.label}\n </option>\n ))}\n </select>\n </div>\n )}\n {isSignalTrigger(trigger) && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\" htmlFor={`${testId}-signal`}>\n {l.signal}\n </Label>\n {/* The firm's declared signals, or any name typed in (a workflow not built yet). */}\n <Input\n id={`${testId}-signal`}\n list={`${testId}-signal-options`}\n value={trigger.signal}\n placeholder={l.signalPlaceholder}\n onChange={(e) => set({ signal: e.target.value.trim().toLowerCase() })}\n data-testid={`${testId}-signal`}\n />\n <datalist id={`${testId}-signal-options`}>\n {signals.map((s) => (\n <option key={s.value} value={s.value}>\n {s.label}\n </option>\n ))}\n </datalist>\n <p className=\"text-xs text-muted-foreground\">{l.signalHint}</p>\n </div>\n )}\n {trigger.start === 'task' && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.afterTask}</Label>\n <select\n className={selectClass}\n value={trigger.afterTaskId}\n onChange={(e) => set({ afterTaskId: e.target.value })}\n data-testid={`${testId}-after-task`}\n >\n <option value=\"\">{l.afterTaskPlaceholder}</option>\n {tasks.map((t) => (\n <option key={t.value} value={t.value}>\n {t.label}\n </option>\n ))}\n </select>\n </div>\n )}\n\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.agent}</Label>\n <AgentSelect\n agents={agents}\n value={trigger.agentId}\n onValueChange={(agentId) => set({ agentId })}\n hideLabel\n testId={`${testId}-agent`}\n />\n </div>\n {trigger.start !== 'manual' && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.access}</Label>\n <select\n className={selectClass}\n value={trigger.access}\n onChange={(e) =>\n set({ access: e.target.value === 'standing' ? 'standing' : 'ask_each_run' })\n }\n data-testid={`${testId}-access`}\n >\n <option value=\"ask_each_run\">{l.accessAsk}</option>\n <option value=\"standing\">{l.accessStanding}</option>\n </select>\n </div>\n )}\n </div>\n )\n}\n","/**\n * Where the canvas looks: pure geometry over the nodes' positions and sizes, so the opening view,\n * the fit button and \"bring this card into view\" agree, and can be tested without a browser.\n */\n\n/** The smallest zoom a flow is fitted at: cards stay readable; a wider flow is panned. */\nexport const READABLE_ZOOM = 0.7\n\nexport interface ViewNode {\n id: string\n position: { x: number; y: number }\n measured?: { width?: number; height?: number }\n}\n\nexport interface Viewport {\n x: number\n y: number\n zoom: number\n}\n\nconst DEFAULT_W = 256\nconst DEFAULT_H = 80\nconst MARGIN = 48\n\nconst sizeOf = (n: ViewNode) => ({\n w: n.measured?.width ?? DEFAULT_W,\n h: n.measured?.height ?? DEFAULT_H,\n})\n\n/**\n * The view when fitting the whole flow would zoom out past reading (`fittedZoom` below\n * `READABLE_ZOOM`): the readable zoom, anchored on `anchor` — the selection, centred in the\n * visible part, or else the start, at the left edge and centred vertically. `null` = the fit\n * stands. Without the anchor among the nodes, the leftmost node is the start.\n */\nexport function readableViewport(\n nodes: ViewNode[],\n fittedZoom: number,\n frame: { width: number; height: number },\n {\n anchor,\n centre = false,\n reserveRight = 0,\n }: { anchor?: string | null; centre?: boolean; reserveRight?: number } = {}\n): Viewport | null {\n if (fittedZoom >= READABLE_ZOOM || !frame.height || nodes.length === 0) return null\n const z = READABLE_ZOOM\n const at =\n nodes.find((n) => n.id === anchor) ??\n nodes.reduce((a, b) => (b.position.x < a.position.x ? b : a))\n const { w, h } = sizeOf(at)\n const y = frame.height / 2 - (at.position.y + h / 2) * z\n if (centre && at.id === anchor) {\n const visible = Math.max(0, frame.width - reserveRight)\n return { x: visible / 2 - (at.position.x + w / 2) * z, y, zoom: z }\n }\n return { x: MARGIN - at.position.x * z, y, zoom: z }\n}\n\n/**\n * The centre (flow coordinates) that brings `node` into the visible part of the frame at the\n * current zoom, or `null` when it is already there (16px clear of the edges and of the panel).\n */\nexport function revealCenter(\n node: ViewNode,\n view: Viewport,\n frame: { width: number; height: number },\n reserveRight = 0\n): { x: number; y: number } | null {\n const { w, h } = sizeOf(node)\n const { x, y, zoom } = view\n const left = node.position.x * zoom + x\n const top = node.position.y * zoom + y\n const right = frame.width - reserveRight\n if (\n left >= 16 &&\n top >= 16 &&\n left + w * zoom <= right - 16 &&\n top + h * zoom <= frame.height - 16\n )\n return null\n return {\n x: node.position.x + w / 2 + reserveRight / 2 / zoom,\n y: node.position.y + h / 2,\n }\n}\n","/**\n * A workflow as a graph on a canvas: its start, then each step a card, each \"waits for\" an edge.\n * A card is drawn on the steps' chevron (`ChevronShape`, as the step bars' segments): its incoming\n * edges meet the notch on its left, its outgoing ones leave from the point on its right.\n * Build by clicking \"+\" on a card (the next step lands beside it), drag to arrange, draw from a\n * card's right handle to another's left to make it wait, select and press Delete to remove.\n * Read-only with live `phases` it shows a run's progress on the same graph.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport {\n Background,\n BackgroundVariant,\n ControlButton,\n Controls,\n Handle,\n MarkerType,\n MiniMap,\n Position,\n ReactFlow,\n applyNodeChanges,\n type Connection,\n type Edge,\n type Node,\n type NodeChange,\n type NodeProps,\n type ReactFlowInstance,\n} from '@xyflow/react'\nimport {\n AlertTriangle,\n Check,\n FilePenLine,\n GitBranch,\n Hourglass,\n Loader2,\n Maximize,\n MinusCircle,\n Plus,\n UserRound,\n Zap,\n} from 'lucide-react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport {\n ChevronShape,\n DEFAULT_STEP_KIND_LABELS,\n STEP_KIND_ICONS,\n stepDependencies,\n workflowSteps,\n type WorkflowDefinition,\n type WorkflowStep,\n type WorkflowStepPhase,\n} from '../agents'\nimport {\n WORKFLOW_STEP_KINDS,\n connectSteps,\n disconnectSteps,\n layoutWithDefaults,\n moveStep,\n removeStep,\n stepKindOf,\n updateStep,\n wouldCycle,\n type WorkflowStepKind,\n} from './edit'\nimport { readableViewport, revealCenter } from './viewport'\n\nexport interface WorkflowCanvasLabels {\n form: string\n upload: string\n agent: string\n review: string\n sign: string\n email_draft: string\n tabular_review: string\n /** An agent step that edits a Word document with tracked changes. */\n redline: string\n /** An agent step that runs on a branch and delivers its result to the thread. */\n branch: string\n /** What each kind is for, in the \"+\" menu. */\n kindHints: Record<WorkflowStepKind, string>\n addNext: string\n /** Summaries on the cards. */\n runs: string\n /** An agent step with neither a skill nor an instruction written yet. */\n chooseRun: string\n fields: string\n noFields: string\n approvedBy: string\n /** A signature step's summary; `{count}` is the number of signers. */\n signers: string\n /** A signature step without its document yet. */\n chooseDocument: string\n /** An email step's summary; `{to}` is its first recipient. */\n emailTo: string\n /** An email step without a recipient yet. */\n noRecipients: string\n /** A tabular review's summary; `{count}` is the number of columns (labels). */\n reviewColumns: string\n noColumns: string\n /** A step's assignee on its card; `{name}` is replaced. */\n assignee: string\n /** A step that reminds its person; `{hours}` is replaced. */\n remind: string\n emptyTitle: string\n emptyHint: string\n fitView: string\n}\n\nexport const DEFAULT_WORKFLOW_CANVAS_LABELS: WorkflowCanvasLabels = {\n ...DEFAULT_STEP_KIND_LABELS,\n redline: 'Tracked changes',\n branch: 'Branch',\n kindHints: {\n form: 'Ask for details',\n upload: 'Collect files',\n agent: 'Run a skill or an instruction',\n review: 'A person approves',\n sign: 'People e-sign a document',\n email_draft: 'Prepare an email to send',\n tabular_review: 'Review documents in a grid',\n },\n addNext: 'Add the next step',\n runs: 'Runs “{name}”',\n chooseRun: 'Choose a skill or write an instruction',\n fields: '{count} fields',\n noFields: 'No fields yet',\n approvedBy: 'A person approves',\n signers: '{count} signers',\n chooseDocument: 'Choose the document to sign',\n emailTo: 'To {to}',\n noRecipients: 'Add a recipient',\n reviewColumns: '{count} columns',\n noColumns: 'Choose the columns',\n assignee: '{name}',\n remind: 'Reminds after {hours}h',\n emptyTitle: 'Start your workflow',\n emptyHint: 'Add the first step: what should happen when it starts?',\n fitView: 'Fit view',\n}\n\nexport interface WorkflowCanvasProps {\n workflow: WorkflowDefinition\n /** Edits (move, connect, disconnect, delete). Absent = read-only. */\n onChange?: (workflow: WorkflowDefinition) => void\n selected?: string | null\n onSelect?: (stepId: string | null) => void\n /** A card to keep in view (`TRIGGER_NODE` for the start); default: the selected one. */\n focus?: string | null\n /** Add a step after this one (`TRIGGER_NODE`: one that starts with the run). Absent = no \"+\". */\n onAddAfter?: (stepId: string, kind: WorkflowStepKind) => void\n /** A run's progress, by step id: colours the nodes. */\n phases?: Record<string, WorkflowStepPhase>\n /** Names the workflow an agent step runs (its card's summary). */\n workflowTitle?: (id: string) => string | undefined\n /** Who a step is for, in words (its card shows it). */\n assigneeOf?: (step: WorkflowStep) => string | undefined\n /**\n * The workflow's start, drawn as the first node (id `TRIGGER_NODE`): an edge from it into each\n * step that starts with the run. Drawing one from it into a step makes that step start the run.\n */\n trigger?: { title: string; summary: string }\n renderIcon?: (key: string) => ReactNode\n labels?: Partial<WorkflowCanvasLabels>\n className?: string\n /** Pixels on the right covered by a floating panel: the opening view keeps clear of them. */\n reserveRight?: number\n testId?: string\n}\n\n/** The id of the trigger node (selecting it selects the workflow's start). */\nexport const TRIGGER_NODE = '__trigger'\n\nconst KINDS = WORKFLOW_STEP_KINDS\n\n/** The \"+\" beside a card: pick the kind of the next step. */\nfunction AddNext({\n from,\n onAdd,\n l,\n testId,\n}: {\n from: string\n onAdd: (from: string, kind: WorkflowStepKind) => void\n l: WorkflowCanvasLabels\n testId: string\n}) {\n const [open, setOpen] = useState(false)\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"wf-add nodrag nopan flex size-7 items-center justify-center rounded-full border border-border bg-card text-muted-foreground shadow-sm hover:text-foreground\"\n aria-label={l.addNext}\n data-testid={`${testId}-add-after-${from === TRIGGER_NODE ? 'trigger' : from}`}\n >\n <Plus className=\"size-4\" />\n </button>\n </PopoverTrigger>\n <PopoverContent side=\"right\" align=\"start\" className=\"w-60 p-1.5\">\n <p className=\"px-2 pb-1 pt-0.5 text-xs font-medium text-muted-foreground\">{l.addNext}</p>\n {KINDS.map((kind) => {\n const Icon = STEP_KIND_ICONS[kind]\n return (\n <button\n key={kind}\n type=\"button\"\n onClick={(e) => {\n // The menu sits in a portal: React still bubbles the click to the card behind it,\n // which would select that card instead of the new step.\n e.stopPropagation()\n setOpen(false)\n onAdd(from, kind)\n }}\n className={cn(\n `wf-kind-${kind}`,\n 'flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-left hover:bg-muted'\n )}\n data-testid={`${testId}-add-after-${from === TRIGGER_NODE ? 'trigger' : from}-${kind}`}\n >\n <span className=\"wf-badge flex size-7 shrink-0 items-center justify-center rounded-md\">\n <Icon className=\"size-4\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{l[kind]}</span>\n <span className=\"block text-xs text-muted-foreground\">{l.kindHints[kind]}</span>\n </span>\n </button>\n )\n })}\n </PopoverContent>\n </Popover>\n )\n}\n\ninterface StepNodeData extends Record<string, unknown> {\n step: WorkflowStep\n phase?: WorkflowStepPhase\n summary?: string\n /** Who it is for, in words. */\n assignee?: string\n icon?: ReactNode\n l: WorkflowCanvasLabels\n onAdd?: (from: string, kind: WorkflowStepKind) => void\n testId: string\n}\n\nfunction PhaseMark({ phase }: { phase?: WorkflowStepPhase }) {\n if (phase === 'running') return <Loader2 className=\"wf-kind-text size-4 animate-spin\" />\n if (phase === 'waiting') return <Hourglass className=\"wf-kind-text size-4\" />\n if (phase === 'done') return <Check className=\"wf-kind-text size-4\" />\n if (phase === 'failed') return <AlertTriangle className=\"size-4 text-destructive\" />\n if (phase === 'skipped') return <MinusCircle className=\"size-4 text-muted-foreground\" />\n return null\n}\n\nfunction StepNode({ data }: NodeProps<Node<StepNodeData>>) {\n const { step, phase, summary, assignee, icon, l, onAdd, testId } = data\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n const redline = step.kind === 'agent' && !!step.editDocument\n return (\n <div\n className={cn(\n 'wf-node w-64 py-3 pl-4 pr-3 text-left',\n `wf-kind-${kind}`,\n phase && `wf-phase-${phase}`\n )}\n data-testid={`${testId}-node-${step.id}`}\n data-phase={phase}\n >\n <ChevronShape />\n <Handle type=\"target\" position={Position.Left} />\n <div className=\"flex items-start gap-2.5\">\n <span className=\"wf-badge flex size-8 shrink-0 items-center justify-center rounded-lg [&_svg]:size-4\">\n {icon ?? <KindIcon />}\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"wf-kind-text text-[10px] font-semibold uppercase tracking-wider\">\n {l[kind]}\n </span>\n <PhaseMark phase={phase} />\n </div>\n <p className=\"truncate text-sm font-semibold leading-snug\">{step.title}</p>\n {summary && (\n <p className=\"mt-0.5 line-clamp-2 text-xs leading-snug text-muted-foreground\">\n {summary}\n </p>\n )}\n {(redline || (step.kind === 'agent' && step.branch) || assignee) && (\n <div className=\"mt-1.5 flex flex-wrap gap-1\">\n {step.kind === 'agent' && step.branch && (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n <GitBranch className=\"size-3\" /> {l.branch}\n </span>\n )}\n {redline && (\n <span\n className=\"inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\"\n data-testid={`${testId}-node-${step.id}-redline`}\n >\n <FilePenLine className=\"size-3\" /> {l.redline}\n </span>\n )}\n {assignee && (\n <span\n className=\"inline-flex max-w-full items-center gap-1 truncate rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\"\n title={assignee}\n data-testid={`${testId}-node-${step.id}-assignee`}\n >\n <UserRound className=\"size-3 shrink-0\" />\n <span className=\"truncate\">\n {l.assignee.replace(\n '{name}',\n assignee.charAt(0).toUpperCase() + assignee.slice(1)\n )}\n </span>\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Right} />\n {onAdd && <AddNext from={step.id} onAdd={onAdd} l={l} testId={testId} />}\n </div>\n )\n}\n\ninterface TriggerNodeData extends Record<string, unknown> {\n title: string\n summary: string\n l: WorkflowCanvasLabels\n onAdd?: (from: string, kind: WorkflowStepKind) => void\n testId: string\n}\n\nfunction TriggerNode({ data }: NodeProps<Node<TriggerNodeData>>) {\n return (\n <div\n className=\"wf-start wf-kind-start relative w-60 px-4 py-3 text-left\"\n data-testid={`${data.testId}-node-trigger`}\n >\n <ChevronShape />\n <div className=\"flex items-center gap-2.5\">\n <span className=\"wf-badge flex size-8 shrink-0 items-center justify-center rounded-full\">\n <Zap className=\"size-4\" />\n </span>\n <div className=\"min-w-0\">\n <p className=\"wf-kind-text text-[10px] font-semibold uppercase tracking-wider\">\n {data.title}\n </p>\n <p className=\"truncate text-sm font-semibold\">{data.summary}</p>\n </div>\n </div>\n <Handle type=\"source\" position={Position.Right} />\n {data.onAdd && (\n <AddNext from={TRIGGER_NODE} onAdd={data.onAdd} l={data.l} testId={data.testId} />\n )}\n </div>\n )\n}\n\nconst NODE_TYPES = { step: StepNode, trigger: TriggerNode }\n\nconst firstWords = (text: string, n = 14) => {\n const words = text.trim().split(/\\s+/)\n return words.length > n ? `${words.slice(0, n).join(' ')}…` : text.trim()\n}\n\n/** One line on a card: what the step does. */\nfunction summaryOf(\n step: WorkflowStep,\n l: WorkflowCanvasLabels,\n workflowTitle?: (id: string) => string | undefined\n): string | undefined {\n if (step.description) return step.description\n switch (step.kind) {\n case 'agent':\n if (step.workflow)\n return l.runs.replace('{name}', workflowTitle?.(step.workflow) ?? step.workflow)\n if (step.run?.kind === 'operation') return undefined\n return step.run?.kind === 'prompt' && step.run.promptTemplate.trim()\n ? firstWords(step.run.promptTemplate)\n : l.chooseRun\n case 'form':\n return step.inputs.length\n ? step.inputs.length === 1\n ? step.inputs[0].label\n : l.fields.replace('{count}', String(step.inputs.length))\n : l.noFields\n case 'upload':\n return step.hint\n case 'review':\n return step.instructions ? firstWords(step.instructions) : l.approvedBy\n case 'action': {\n const a = step.action\n if (a.type === 'sign')\n return !a.document\n ? l.chooseDocument\n : a.signers.length\n ? l.signers.replace('{count}', String(a.signers.length))\n : undefined\n if (a.type === 'email_draft') {\n const to = a.to.find((t) => t.trim())\n return to ? l.emailTo.replace('{to}', to) : l.noRecipients\n }\n return a.tags.length ? l.reviewColumns.replace('{count}', String(a.tags.length)) : l.noColumns\n }\n }\n}\n\nexport function WorkflowCanvas({\n workflow,\n onChange,\n selected = null,\n onSelect,\n focus,\n onAddAfter,\n phases,\n workflowTitle,\n assigneeOf,\n trigger,\n renderIcon,\n labels,\n className,\n reserveRight = 0,\n testId = 'workflow-canvas',\n}: WorkflowCanvasProps) {\n const l = useMemo(() => ({ ...DEFAULT_WORKFLOW_CANVAS_LABELS, ...labels }), [labels])\n const steps = workflowSteps(workflow)\n const editable = !!onChange\n\n const built = useMemo((): Node[] => {\n const layout = layoutWithDefaults(workflow)\n const all = workflowSteps(workflow)\n const roots = all.filter((s) => stepDependencies(all, s.id).length === 0)\n const triggerNode: Node[] = trigger\n ? [\n {\n id: TRIGGER_NODE,\n type: 'trigger',\n deletable: false,\n selected: selected === TRIGGER_NODE,\n position: layout[TRIGGER_NODE] ?? {\n x: Math.min(0, ...Object.values(layout).map((p) => p.x)) - 320,\n y: roots.length\n ? roots.reduce((sum, s) => sum + (layout[s.id]?.y ?? 0), 0) / roots.length\n : 0,\n },\n data: { title: trigger.title, summary: trigger.summary, l, onAdd: onAddAfter, testId },\n },\n ]\n : []\n return [\n ...triggerNode,\n ...all.map((step): Node<StepNodeData> => ({\n id: step.id,\n type: 'step',\n position: layout[step.id] ?? { x: 0, y: 0 },\n selected: step.id === selected,\n data: {\n step,\n phase: phases?.[step.id],\n summary: summaryOf(step, l, workflowTitle),\n assignee: assigneeOf?.(step),\n icon: step.icon && renderIcon ? renderIcon(step.icon) : undefined,\n l,\n onAdd: onAddAfter,\n testId,\n },\n })),\n ]\n }, [\n workflow,\n selected,\n phases,\n workflowTitle,\n assigneeOf,\n trigger,\n renderIcon,\n l,\n onAddAfter,\n testId,\n ])\n\n // Local nodes so dragging is smooth; the layout is committed when a drag ends.\n const [nodes, setNodes] = useState(built)\n useEffect(() => setNodes(built), [built])\n\n const edges = useMemo(\n (): Edge[] =>\n steps.flatMap((s) => {\n const deps = stepDependencies(steps, s.id)\n const from = deps.length ? deps : trigger ? [TRIGGER_NODE] : []\n return from.map((d) => ({\n id: `${d}->${s.id}`,\n source: d,\n target: s.id,\n type: 'smoothstep',\n deletable: d !== TRIGGER_NODE,\n markerEnd: { type: MarkerType.ArrowClosed, width: 16, height: 16 },\n animated: phases?.[s.id] === 'running',\n }))\n }),\n [steps, phases, trigger]\n )\n\n const onNodesChange = useCallback(\n (changes: NodeChange<Node>[]) => {\n setNodes((ns) => applyNodeChanges(changes, ns))\n if (!onChange) return\n let next = workflow\n for (const c of changes) {\n if (c.type === 'position' && c.dragging === false && c.position && c.id !== TRIGGER_NODE) {\n next = moveStep(next, c.id, c.position)\n }\n }\n if (next !== workflow) onChange(next)\n },\n [workflow, onChange]\n )\n\n const onConnect = useCallback(\n (c: Connection) => {\n if (!onChange || !c.source || !c.target) return\n // From the start: the step starts with the run (it waits for nothing).\n if (c.source === TRIGGER_NODE) onChange(updateStep(workflow, c.target, { after: [] }))\n else onChange(connectSteps(workflow, c.source, c.target))\n },\n [workflow, onChange]\n )\n\n // Opening the canvas fits the whole flow, or, when that would shrink the cards past reading, the\n // readable zoom on the selection (centred) or the start (at the left). The Fit view button always\n // shows the whole flow (down to the canvas's smallest zoom): that is what it says.\n const frame = useRef<HTMLDivElement>(null)\n const flowRef = useRef<ReactFlowInstance | null>(null)\n const hasTrigger = !!trigger\n const selectedRef = useRef(selected)\n selectedRef.current = selected\n const fit = useCallback(\n async (flow: ReactFlowInstance, anchorOnSelection: boolean, whole = false) => {\n await flow.fitView({\n padding: { top: '48px', bottom: '48px', left: '48px', right: `${reserveRight + 48}px` },\n maxZoom: 1,\n })\n if (whole) return\n const box = frame.current\n const picked = anchorOnSelection ? selectedRef.current : null\n const view = readableViewport(\n flow.getNodes(),\n flow.getZoom(),\n { width: box?.clientWidth ?? 0, height: box?.clientHeight ?? 0 },\n {\n anchor: picked ?? (hasTrigger ? TRIGGER_NODE : null),\n centre: !!picked,\n reserveRight,\n }\n )\n if (view) await flow.setViewport(view)\n },\n [reserveRight, hasTrigger]\n )\n const onInit = useCallback(\n async (flow: ReactFlowInstance) => {\n flowRef.current = flow\n await fit(flow, false)\n },\n [fit]\n )\n\n // A card just picked or added (or the one asked for) that sits off screen, or under the\n // floating panel, is brought into view at the same zoom.\n // Once per card (and panel width): moving other cards afterwards does not pull the view back.\n const target = focus ?? selected\n const revealed = useRef<string | null>(null)\n useEffect(() => {\n const flow = flowRef.current\n const box = frame.current\n const node = target ? flow?.getNode(target) : undefined\n const key = `${target}:${reserveRight}`\n if (!target) revealed.current = null\n if (!flow || !box || !node || revealed.current === key) return\n revealed.current = key\n const view = flow.getViewport()\n const centre = revealCenter(\n node,\n view,\n { width: box.clientWidth, height: box.clientHeight },\n reserveRight\n )\n if (centre) void flow.setCenter(centre.x, centre.y, { zoom: view.zoom, duration: 250 })\n }, [target, nodes, reserveRight])\n\n // One callback for a deletion: removed steps (their chain re-joined), then any other edges.\n const onDelete = useCallback(\n ({ nodes: gone, edges: cut }: { nodes: Node[]; edges: Edge[] }) => {\n if (!onChange) return\n const removed = new Set(gone.map((n) => n.id))\n let next = gone.reduce((w, n) => removeStep(w, n.id), workflow)\n for (const e of cut) {\n if (!removed.has(e.source) && !removed.has(e.target)) {\n next = disconnectSteps(next, e.source, e.target)\n }\n }\n onChange(next)\n },\n [workflow, onChange]\n )\n\n return (\n <div\n className={cn(\n 'relative h-[max(560px,calc(100dvh-200px))] w-full overflow-hidden rounded-xl border border-border bg-muted/30',\n className\n )}\n ref={frame}\n data-testid={testId}\n >\n <ReactFlow\n nodes={nodes}\n edges={edges}\n nodeTypes={NODE_TYPES}\n onNodesChange={onNodesChange}\n onConnect={onConnect}\n onDelete={onDelete}\n isValidConnection={(c) =>\n !!c.source && !!c.target && !wouldCycle(workflow, c.source, c.target)\n }\n onNodeClick={(_, node) => onSelect?.(node.id)}\n onPaneClick={() => onSelect?.(null)}\n nodesDraggable={editable}\n nodesConnectable={editable}\n elementsSelectable\n deleteKeyCode={editable ? ['Backspace', 'Delete'] : null}\n onInit={onInit}\n minZoom={0.3}\n proOptions={{ hideAttribution: true }}\n >\n <Background variant={BackgroundVariant.Dots} gap={18} size={1.5} />\n <Controls showInteractive={false} showFitView={false} position=\"bottom-left\">\n <ControlButton\n className=\"react-flow__controls-fitview\"\n onClick={() => flowRef.current && void fit(flowRef.current, false, true)}\n title={l.fitView}\n aria-label={l.fitView}\n data-testid={`${testId}-fit`}\n >\n <Maximize />\n </ControlButton>\n </Controls>\n {steps.length > 3 && (\n <MiniMap\n pannable\n zoomable\n position=\"bottom-right\"\n className=\"wf-minimap !rounded-lg !border !border-border\"\n style={{ width: 168, height: 104 }}\n nodeBorderRadius={8}\n nodeStrokeWidth={0}\n />\n )}\n </ReactFlow>\n {steps.length === 0 && onAddAfter && (\n <div className=\"pointer-events-none absolute inset-x-0 bottom-16 flex justify-center\">\n <div\n className=\"pointer-events-auto rounded-xl border border-dashed border-border bg-card/90 p-5 text-center shadow-sm backdrop-blur\"\n data-testid={`${testId}-empty`}\n >\n <p className=\"text-sm font-semibold\">{l.emptyTitle}</p>\n <p className=\"mt-1 text-xs text-muted-foreground\">{l.emptyHint}</p>\n <div className=\"mt-3 grid grid-cols-2 gap-2\">\n {KINDS.map((kind) => {\n const Icon = STEP_KIND_ICONS[kind]\n return (\n <button\n key={kind}\n type=\"button\"\n onClick={() => onAddAfter(TRIGGER_NODE, kind)}\n className={cn(\n `wf-kind-${kind}`,\n 'flex items-center gap-2 rounded-lg border border-border bg-card px-3 py-2 text-left text-sm hover:bg-muted'\n )}\n data-testid={`${testId}-empty-${kind}`}\n >\n <span className=\"wf-badge flex size-6 items-center justify-center rounded-md\">\n <Icon className=\"size-3.5\" />\n </span>\n {l[kind]}\n </button>\n )\n })}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n","/**\n * Build a workflow visually: what starts it (the trigger node), its named steps (forms, uploads,\n * agent steps running a skill or an instruction, branches, a person's approval), wired on a\n * canvas, each set in the inspector; and a preview of a run (the real runner with a stand-in\n * agent). The value saves as a workflow (`builderToWorkflowRequest`): every firing is a work\n * thread that runs the steps.\n */\n\nimport { useMemo, useState, type ReactNode } from 'react'\nimport { Eye, LayoutGrid, PencilRuler, Plus, Settings2, X } from 'lucide-react'\nimport { Button, Popover, PopoverContent, PopoverTrigger, cn } from '@arbidocs/react/ui'\nimport {\n WorkflowRunner,\n assigneeName,\n canAssign,\n runFields,\n STEP_KIND_ICONS,\n stepConfigProblems,\n useWorkflowPreview,\n validateWorkflowGraph,\n workflowSteps,\n type AgentOption,\n type StepComposeOptions,\n type WorkflowDefinition,\n type WorkflowGraphProblem,\n type WorkflowStep,\n type WorkflowStepProblem,\n} from '../agents'\nimport {\n WORKFLOW_STEP_KINDS,\n addStep,\n autoLayout,\n layoutWithDefaults,\n type WorkflowStepKind,\n} from './edit'\nimport { StepInspector, type StepInspectorLabels, type StepInspectorOption } from './StepInspector'\nimport { TriggerInspector, triggerSummary, type TriggerInspectorLabels } from './TriggerInspector'\nimport { declaredSignals, type DeclaredSignal, type WorkflowBuilderValue } from './trigger'\nimport {\n DEFAULT_WORKFLOW_CANVAS_LABELS,\n TRIGGER_NODE,\n WorkflowCanvas,\n type WorkflowCanvasLabels,\n} from './WorkflowCanvas'\n\nexport interface WorkflowBuilderLabels {\n addStep: string\n tidy: string\n settings: string\n closePanel: string\n design: string\n preview: string\n /** The trigger node's heading. */\n start: string\n /** What the preview's stand-in agent answers; `{prompt}` is replaced. */\n previewAnswer: string\n problems: Record<WorkflowGraphProblem['code'], string>\n /** What a step still needs (`{step}` is its title). */\n missing: Record<WorkflowStepProblem['missing'], string>\n}\n\nexport const DEFAULT_WORKFLOW_BUILDER_LABELS: WorkflowBuilderLabels = {\n addStep: 'Add step',\n tidy: 'Tidy',\n settings: 'Workflow settings',\n closePanel: 'Close panel',\n design: 'Design',\n preview: 'Preview',\n start: 'Start',\n previewAnswer: 'Preview: the agent would be asked —\\n\\n{prompt}',\n problems: {\n duplicate: '“{step}” appears twice.',\n unknown: '“{step}” waits for a step that does not exist.',\n cycle: '“{step}” waits for itself (a loop).',\n order: '“{step}” is listed before a step it waits for.',\n },\n missing: {\n document: '“{step}” needs a document.',\n signers: '“{step}” needs at least one signer.',\n recipients: '“{step}” needs a recipient.',\n tags: '“{step}” needs at least one column.',\n documents: '“{step}” needs documents to review.',\n },\n}\n\nexport interface WorkflowBuilderProps extends Pick<StepComposeOptions, 'compose'> {\n value: WorkflowBuilderValue\n onChange: (value: WorkflowBuilderValue) => void\n /** What agent steps can run (skills and other workflows); the preview composes from them. */\n workflows?: WorkflowDefinition[]\n /** Who can run it. */\n agents?: AgentOption[]\n /** The workspace events it can start on. */\n eventKinds?: Array<{ value: string; label: string }>\n /** Tasks it can wait on. */\n tasks?: Array<{ value: string; label: string }>\n /** The workspace's members: who a step can be for, and who signs. */\n people?: StepInspectorOption[]\n /** The workspace's labels: a tabular review's columns. */\n tags?: StepInspectorOption[]\n /** The workspace's documents: what a step can name directly. */\n documents?: StepInspectorOption[]\n /**\n * The signals the firm's workflows declare (`declaredSignals` over the saved workflows): what\n * \"When a step signals\" offers. The signals of the workflow being built are added.\n */\n signals?: DeclaredSignal[]\n renderIcon?: (key: string) => ReactNode\n /** The host's buttons (save, run). */\n actions?: ReactNode\n labels?: Partial<WorkflowBuilderLabels>\n canvasLabels?: Partial<WorkflowCanvasLabels>\n inspectorLabels?: Partial<StepInspectorLabels>\n triggerLabels?: Partial<TriggerInspectorLabels>\n testId?: string\n className?: string\n}\n\n/** The floating inspector's width plus its margin: the canvas opens clear of it. */\nconst PANEL_WIDTH = 344\n\nconst KINDS = WORKFLOW_STEP_KINDS\n\nexport function WorkflowBuilder({\n value,\n onChange,\n workflows = [],\n agents = [],\n eventKinds = [],\n tasks = [],\n signals = [],\n people = [],\n tags = [],\n documents = [],\n compose,\n renderIcon,\n actions,\n labels,\n canvasLabels,\n inspectorLabels,\n triggerLabels,\n testId = 'workflow-builder',\n className,\n}: WorkflowBuilderProps) {\n const l = { ...DEFAULT_WORKFLOW_BUILDER_LABELS, ...labels }\n const [selected, setSelectedState] = useState<string | null>(null)\n // The inspector floats over the canvas, closed until something is picked so the flow has it all.\n const [panelOpen, setPanelOpen] = useState(false)\n const setSelected = (id: string | null) => {\n setSelectedState(id)\n if (id) setPanelOpen(true)\n }\n const [mode, setMode] = useState<'design' | 'preview'>('design')\n const [adding, setAdding] = useState(false)\n const { workflow, trigger } = value\n const steps = workflowSteps(workflow)\n const problems = validateWorkflowGraph(steps)\n const missing = stepConfigProblems(steps)\n const nameOf = (id: string) => people.find((p) => p.value === id)?.label\n const fields = runFields(workflow)\n const assigneeOf = (step: WorkflowStep) =>\n canAssign(step) ? assigneeName(step.assignee, { nameOf, fields }) : undefined\n const titles = useMemo(() => new Map(workflows.map((w) => [w.id, w.title])), [workflows])\n const setWorkflow = (next: WorkflowDefinition) => onChange({ ...value, workflow: next })\n\n /** A new step after `from` (`TRIGGER_NODE`: starting the run), placed to its right. */\n const addAfter = (from: string | null, kind: WorkflowStepKind) => {\n const layout = layoutWithDefaults(workflow)\n const origin = from && from !== TRIGGER_NODE ? layout[from] : undefined\n const siblings = steps.filter((s) =>\n from && from !== TRIGGER_NODE ? s.after?.includes(from) : s.after?.length === 0\n ).length\n const { workflow: next, id } = addStep(workflow, kind, {\n after: from && from !== TRIGGER_NODE ? from : undefined,\n position: origin\n ? { x: origin.x + 320, y: origin.y + siblings * 150 }\n : {\n x: Math.max(0, ...Object.values(layout).map((p) => p.x)) + (steps.length ? 320 : 0),\n y: siblings * 150,\n },\n })\n setWorkflow(next)\n setSelected(id)\n }\n const add = (kind: WorkflowStepKind) =>\n addAfter(\n selected && selected !== TRIGGER_NODE ? selected : (steps.at(-1)?.id ?? TRIGGER_NODE),\n kind\n )\n\n const summary = triggerSummary(trigger, {\n labels: triggerLabels,\n eventLabel: (k) => eventKinds.find((e) => e.value === k)?.label,\n taskLabel: (id) => tasks.find((t) => t.value === id)?.label,\n })\n\n return (\n <div className={cn('space-y-3', className)} data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n <div className=\"flex rounded-md border border-border p-0.5\">\n <Button\n variant={mode === 'design' ? 'secondary' : 'ghost'}\n size=\"sm\"\n onClick={() => setMode('design')}\n data-testid={`${testId}-mode-design`}\n >\n <PencilRuler className=\"size-4\" /> {l.design}\n </Button>\n <Button\n variant={mode === 'preview' ? 'secondary' : 'ghost'}\n size=\"sm\"\n onClick={() => setMode('preview')}\n disabled={problems.length > 0 || steps.length === 0}\n data-testid={`${testId}-mode-preview`}\n >\n <Eye className=\"size-4\" /> {l.preview}\n </Button>\n </div>\n {mode === 'design' && (\n <>\n <Popover open={adding} onOpenChange={setAdding}>\n <PopoverTrigger asChild>\n <Button size=\"sm\" data-testid={`${testId}-add`}>\n <Plus className=\"size-4\" /> {l.addStep}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-64 p-1.5\">\n {KINDS.map((kind) => {\n const Icon = STEP_KIND_ICONS[kind]\n const cls = { ...DEFAULT_WORKFLOW_CANVAS_LABELS, ...canvasLabels }\n return (\n <button\n key={kind}\n type=\"button\"\n onClick={() => {\n setAdding(false)\n add(kind)\n }}\n className={cn(\n `wf-kind-${kind}`,\n 'flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-left hover:bg-muted'\n )}\n data-testid={`${testId}-add-${kind}`}\n >\n <span className=\"wf-badge flex size-7 shrink-0 items-center justify-center rounded-md\">\n <Icon className=\"size-4\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{cls[kind]}</span>\n <span className=\"block text-xs text-muted-foreground\">\n {cls.kindHints[kind]}\n </span>\n </span>\n </button>\n )\n })}\n </PopoverContent>\n </Popover>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() =>\n workflow.run.kind === 'steps' &&\n setWorkflow({ ...workflow, run: { ...workflow.run, layout: autoLayout(steps) } })\n }\n data-testid={`${testId}-tidy`}\n >\n <LayoutGrid className=\"size-4\" /> {l.tidy}\n </Button>\n </>\n )}\n {actions && <div className=\"ml-auto flex flex-wrap items-center gap-2\">{actions}</div>}\n </div>\n\n {problems.length + missing.length > 0 && (\n <ul className=\"space-y-1 text-sm text-destructive\" data-testid={`${testId}-problems`}>\n {problems.map((p, i) => (\n <li key={i}>\n {l.problems[p.code].replace(\n '{step}',\n steps.find((s) => s.id === p.step)?.title ?? p.step\n )}\n </li>\n ))}\n {missing.map((p, i) => (\n <li key={`m${i}`} data-testid={`${testId}-missing-${p.step}-${p.missing}`}>\n {l.missing[p.missing].replace(\n '{step}',\n steps.find((s) => s.id === p.step)?.title ?? p.step\n )}\n </li>\n ))}\n </ul>\n )}\n\n {mode === 'design' ? (\n <div className=\"relative\">\n <WorkflowCanvas\n workflow={workflow}\n onChange={setWorkflow}\n selected={selected}\n onSelect={setSelected}\n // The workflow's settings are about its start: bring the start card into view.\n focus={selected ?? (panelOpen ? TRIGGER_NODE : null)}\n onAddAfter={addAfter}\n trigger={{ title: l.start, summary }}\n workflowTitle={(id) => titles.get(id)}\n assigneeOf={assigneeOf}\n renderIcon={renderIcon}\n labels={canvasLabels}\n reserveRight={panelOpen ? PANEL_WIDTH : 0}\n testId={`${testId}-canvas`}\n />\n {panelOpen ? (\n <div\n className=\"absolute bottom-3 right-3 top-3 z-10 w-80 max-w-[calc(100%-1.5rem)] overflow-y-auto rounded-xl border border-border bg-card/95 p-4 pt-10 shadow-lg backdrop-blur\"\n data-testid={`${testId}-panel`}\n >\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"absolute right-2 top-2 size-7\"\n onClick={() => setPanelOpen(false)}\n aria-label={l.closePanel}\n data-testid={`${testId}-panel-close`}\n >\n <X className=\"size-4\" />\n </Button>\n {selected === TRIGGER_NODE ? (\n <TriggerInspector\n trigger={trigger}\n onChange={(next) => onChange({ ...value, trigger: next })}\n agents={agents}\n eventKinds={eventKinds}\n tasks={tasks}\n signals={[\n ...signals,\n ...declaredSignals([], workflow).filter(\n (d) => !signals.some((s) => s.value === d.value)\n ),\n ]}\n labels={triggerLabels}\n testId={`${testId}-trigger`}\n />\n ) : (\n <StepInspector\n workflow={workflow}\n stepId={selected}\n onChange={setWorkflow}\n onSelect={setSelected}\n workflows={workflows}\n people={people}\n tags={tags}\n documents={documents}\n labels={inspectorLabels}\n testId={`${testId}-inspector`}\n />\n )}\n </div>\n ) : (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"absolute right-3 top-3 z-10 bg-card shadow-sm\"\n onClick={() => setPanelOpen(true)}\n data-testid={`${testId}-panel-open`}\n >\n <Settings2 className=\"size-4\" /> {l.settings}\n </Button>\n )}\n </div>\n ) : (\n <WorkflowPreview\n key={JSON.stringify(workflow)}\n workflow={workflow}\n workflows={workflows}\n compose={compose}\n answer={l.previewAnswer}\n renderIcon={renderIcon}\n testId={`${testId}-preview`}\n />\n )}\n </div>\n )\n}\n\n/** The real runner with a stand-in agent: each step answers with the prompt it would send. */\nfunction WorkflowPreview({\n workflow,\n workflows,\n compose,\n answer,\n renderIcon,\n testId,\n}: {\n workflow: WorkflowDefinition\n workflows: WorkflowDefinition[]\n compose?: StepComposeOptions['compose']\n answer: string\n renderIcon?: (key: string) => ReactNode\n testId: string\n}) {\n const run = useWorkflowPreview(workflow, {\n resolveWorkflow: (id) => workflows.find((w) => w.id === id),\n compose,\n answer,\n })\n return (\n <WorkflowRunner\n workflow={workflow}\n run={run}\n renderIcon={renderIcon}\n testIdPrefix={testId}\n renderAgentOutput={(step, state) =>\n state?.text ? (\n <pre\n className=\"whitespace-pre-wrap rounded-md bg-muted/40 p-3 text-xs text-muted-foreground\"\n data-testid={`${testId}-${step.id}-answer`}\n >\n {state.text}\n </pre>\n ) : null\n }\n />\n )\n}\n","/**\n * The workflow builder bound to the connection: it loads a saved workflow (or starts from the\n * host's value), offers the host's workflows and the user's skills as steps an agent can run, its\n * agents, the people, labels, documents, events and tasks a workflow can use, and saves the\n * workflow (its trigger and its steps) or runs it now. An unattended workflow that keeps standing\n * access gives its agent the workspace once saved. Every run is a work thread that runs the steps.\n * Saved and failed are told through the environment's `notify`. Exported from\n * `@arbidocs/blocks/workflow-canvas` (it brings the graph library).\n */\n\nimport { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport {\n useAgents,\n useCreateWorkflow,\n useGrantAgentAccess,\n useRunWorkflow,\n useWorkspaceUsers,\n useSkills,\n useUpdateWorkflow,\n useWorkflows,\n} from '@arbidocs/react'\nimport type { components } from '@arbidocs/client'\nimport { Button } from '@arbidocs/react/ui'\nimport { Loader2, Play, Save } from 'lucide-react'\nimport { mergeSkillWorkflows, type StepComposeOptions, type WorkflowDefinition } from '../agents'\nimport { stepConfigProblems, validateWorkflowGraph, workflowSteps } from '../agents/workflows/run'\nimport { WorkflowBuilder, type WorkflowBuilderProps } from '../workflow-canvas/WorkflowBuilder'\nimport {\n DEFAULT_WORKFLOW_TRIGGER,\n builderToWorkflowRequest,\n builderToWorkflowUpdate,\n declaredSignals,\n triggerProblem,\n workflowRecordToBuilder,\n type WorkflowBuilderValue,\n} from '../workflow-canvas/trigger'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedConversations, useConnectedTags, useListedDocuments } from './workspaceData'\n\nconst NO_WORKFLOWS: WorkflowDefinition[] = []\n\nexport interface ConnectedWorkflowBuilderLabels {\n save: string\n saving: string\n runNow: string\n /** The notification once saved. */\n saved: string\n needTrigger: string\n running: string\n /** Notified when saving (or the after-save step) fails without a message. */\n saveFailed: string\n /** Notified when \"Run now\" fails without a message. */\n runFailed: string\n /** A task (to start after) without a title. */\n untitledTask: string\n}\n\nexport const DEFAULT_CONNECTED_WORKFLOW_BUILDER_LABELS: ConnectedWorkflowBuilderLabels = {\n save: 'Save',\n saving: 'Saving…',\n runNow: 'Run now',\n saved: 'Workflow saved',\n needTrigger: 'Finish setting when it starts.',\n running: 'Starting…',\n saveFailed: 'Could not save the workflow',\n runFailed: 'Could not run the workflow',\n untitledTask: 'Untitled thread',\n}\n\n/** Where a new workflow starts: started by hand, one agent step to fill in. */\nexport function newWorkflowBuilderValue(): WorkflowBuilderValue {\n return {\n workflow: {\n id: 'new',\n title: 'New workflow',\n description: '',\n inputs: [],\n landing: 'chat',\n schedulable: false,\n run: {\n kind: 'steps',\n steps: [\n {\n id: 'work',\n kind: 'agent',\n title: 'Do the work',\n run: { kind: 'prompt', promptTemplate: '' },\n },\n ],\n },\n },\n trigger: DEFAULT_WORKFLOW_TRIGGER,\n }\n}\n\n/**\n * A workspace event a workflow can start on: a notification type (what the API's `event_kind` check\n * accepts), except those the workflow engine emits itself, which the API refuses as a trigger (422).\n */\ntype WorkflowEventKind = Exclude<components['schemas']['NotificationType'], 'workflow_failed'>\n\n/** Workspace events a workflow can start on (notification types), in plain words. */\nexport const DEFAULT_WORKFLOW_EVENT_KINDS = [\n { value: 'conversation_done', label: 'A task is marked done' },\n { value: 'conversation_ready', label: 'Work is ready for me' },\n { value: 'mention', label: 'Someone mentions me' },\n { value: 'workflow_completed', label: 'Another workflow finishes' },\n { value: 'workflow_signal', label: 'When a step signals' },\n // Filter on {\"language\": \"other\", \"wp_type\": \"source\"} to act on every non-English upload (e.g. Translate).\n { value: 'document_processed', label: 'A document finishes processing' },\n] satisfies Array<{ value: WorkflowEventKind; label: string }>\n\nexport interface ConnectedWorkflowBuilderProps\n extends\n Pick<StepComposeOptions, 'compose'>,\n Pick<\n WorkflowBuilderProps,\n | 'renderIcon'\n | 'labels'\n | 'canvasLabels'\n | 'inspectorLabels'\n | 'triggerLabels'\n | 'testId'\n | 'className'\n > {\n /** A saved workflow to edit (`wfl-…`). */\n workflowId?: string\n /** Where a new workflow starts (e.g. a built-in journey). Default: one agent step. */\n initial?: WorkflowBuilderValue\n /**\n * Host workflows agent steps can run besides the user's skills (e.g. its built-ins with their own\n * forms); an uploaded skill of the same id is used instead (`mergeSkillWorkflows`).\n */\n workflows?: WorkflowDefinition[]\n eventKinds?: Array<{ value: string; label: string }>\n /**\n * Saved (created or updated, the agent's standing access granted): its id and the value saved.\n * It may return a promise for host setup that must finish first: \"Save\" waits for it before\n * telling saved, and \"Run now\" waits for it before running, and does not run if it rejects.\n */\n onSaved?: (workflowId: string, value: WorkflowBuilderValue) => void | Promise<void>\n /** A run started: its thread. Default: open it (the environment's `openConversation`). */\n onRun?: (conversationId: string | undefined) => void\n /** Extra host buttons. */\n actions?: ReactNode\n connectedLabels?: Partial<ConnectedWorkflowBuilderLabels>\n}\n\nexport function ConnectedWorkflowBuilder({\n workflowId,\n initial = newWorkflowBuilderValue(),\n workflows: hostWorkflows = NO_WORKFLOWS,\n eventKinds = DEFAULT_WORKFLOW_EVENT_KINDS,\n compose,\n onSaved,\n onRun,\n actions,\n connectedLabels,\n testId = 'workflow-builder',\n ...builderProps\n}: ConnectedWorkflowBuilderProps) {\n const l = { ...DEFAULT_CONNECTED_WORKFLOW_BUILDER_LABELS, ...connectedLabels }\n const { notify, openConversation } = useBlocksEnvironment()\n const { workspaceId, live, ensureWorkspaceOpen } = useConnectedWorkspace()\n const members = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const { data: tagList } = useConnectedTags()\n const { data: docList } = useListedDocuments()\n const people = (members.data ?? []).map((m) => ({\n value: m.user.external_id,\n label: [m.user.given_name, m.user.family_name].filter(Boolean).join(' ') || m.user.email,\n }))\n const tagOptions = tagList.map((t) => ({ value: t.external_id, label: t.name }))\n const documentOptions = docList.map((d) => ({\n value: d.external_id,\n label: d.file_name ?? d.external_id,\n }))\n const saved = useWorkflows()\n const skills = useSkills()\n const agentsQuery = useAgents()\n const { data: conversations } = useConnectedConversations()\n const create = useCreateWorkflow()\n const update = useUpdateWorkflow()\n const run = useRunWorkflow()\n const grantAccess = useGrantAgentAccess()\n const [id, setId] = useState(workflowId)\n const [value, setValue] = useState<WorkflowBuilderValue>(initial)\n // Which button is working, and where it is: saving covers the host's after-save step too.\n const [pending, setPending] = useState<{ action: 'save' | 'run'; phase: 'saving' | 'running' }>()\n\n // A saved workflow opens as it was saved.\n const record = saved.data?.find((w) => w.external_id === id)\n const [loaded, setLoaded] = useState<string | undefined>(undefined)\n useEffect(() => {\n if (record && loaded !== record.external_id) {\n setValue(workflowRecordToBuilder(record))\n setLoaded(record.external_id)\n }\n }, [record, loaded])\n\n const workflows = useMemo(() => {\n const merged = mergeSkillWorkflows(hostWorkflows, skills.data ?? [])\n return [...merged.host, ...merged.skills]\n }, [hostWorkflows, skills.data])\n const agents = (agentsQuery.data ?? []).map((a) => ({\n id: a.external_id,\n label: a.given_name || a.email,\n }))\n const tasks = conversations\n .filter((c) => c.status && c.status !== 'done')\n .map((c) => ({ value: c.external_id, label: c.title || l.untitledTask }))\n const options = { resolveWorkflow: (wid: string) => workflows.find((w) => w.id === wid), compose }\n\n const problem =\n triggerProblem(value.trigger) ??\n (validateWorkflowGraph(workflowSteps(value.workflow)).length ||\n stepConfigProblems(workflowSteps(value.workflow)).length\n ? 'graph'\n : null)\n const busy = !!pending || create.isPending || update.isPending || run.isPending\n\n /**\n * Save; then, when unattended starts keep standing access, give the agent (the one picked, else\n * the one the server assigned) the workspace, so a run started next already has it; then the\n * host's after-save step. Throws if any of them fails.\n */\n const save = async (): Promise<string | undefined> => {\n if (!workspaceId) return undefined\n const result = id\n ? await update.mutateAsync({ workflowId: id, patch: builderToWorkflowUpdate(value, options) })\n : await create.mutateAsync(builderToWorkflowRequest(value, workspaceId, options))\n setId(result.external_id)\n setLoaded(result.external_id)\n const { trigger } = value\n const agentId = trigger.agentId || result.agent_ext_id\n const isMember = (members.data ?? []).some((m) => m.user.external_id === agentId)\n if (trigger.start !== 'manual' && trigger.access === 'standing' && agentId && !isMember) {\n await ensureWorkspaceOpen()\n await grantAccess.mutateAsync({ agentExtId: agentId, workspaceId })\n }\n await onSaved?.(result.external_id, value)\n return result.external_id\n }\n\n const attempt = async (andRun: boolean) => {\n setPending({ action: andRun ? 'run' : 'save', phase: 'saving' })\n try {\n const savedId = await save()\n if (!savedId) return\n if (!andRun) {\n notify(l.saved, 'success')\n return\n }\n setPending({ action: 'run', phase: 'running' })\n const started = await run.mutateAsync(savedId)\n if (started.error) throw new Error(started.error)\n const conversationId = started.conversation_ext_id ?? undefined\n if (onRun) onRun(conversationId)\n else if (conversationId) openConversation(conversationId)\n } catch (e) {\n notify(\n e instanceof Error && e.message ? e.message : andRun ? l.runFailed : l.saveFailed,\n 'error'\n )\n } finally {\n setPending(undefined)\n }\n }\n\n return (\n <WorkflowBuilder\n {...builderProps}\n value={value}\n onChange={setValue}\n workflows={workflows}\n agents={agents}\n eventKinds={eventKinds}\n tasks={tasks}\n people={people}\n tags={tagOptions}\n documents={documentOptions}\n signals={declaredSignals(saved.data ?? [])}\n compose={compose}\n testId={testId}\n actions={\n <>\n {actions}\n {problem && problem !== 'graph' && (\n <span className=\"text-xs text-destructive\">{l.needTrigger}</span>\n )}\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={!!problem || busy || !workspaceId}\n onClick={() => void attempt(true)}\n data-testid={`${testId}-run`}\n >\n {pending?.action === 'run' ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Play className=\"size-4\" />\n )}\n {pending?.action === 'run'\n ? pending.phase === 'saving'\n ? l.saving\n : l.running\n : l.runNow}\n </Button>\n <Button\n size=\"sm\"\n disabled={!!problem || busy || !workspaceId}\n onClick={() => void attempt(false)}\n data-testid={`${testId}-save`}\n >\n {pending?.action === 'save' ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Save className=\"size-4\" />\n )}\n {pending?.action === 'save' ? l.saving : l.save}\n </Button>\n </>\n }\n />\n )\n}\n","/** The Workflows page's words (`ConnectedWorkflowsPage`), and its table's. */\nimport type { TaskTriggerChipLabels } from '../../agents/tasks/TaskTriggerChip'\nimport type { WorkflowListLabels } from '../../agents/tasks/workflowTableLabels'\n\nexport interface ConnectedWorkflowsPageLabels {\n newWorkflow: string\n /** Opens the workflow whose history is shown. */\n edit: string\n editAria: string\n /** The builder's way back to the list. */\n back: string\n /** Runs the catalogue entry open in the builder. */\n runTemplate: string\n /** When a workflow with no trigger of its own starts. */\n manualTrigger: string\n}\n\nexport const DEFAULT_CONNECTED_WORKFLOWS_PAGE_LABELS: ConnectedWorkflowsPageLabels = {\n newWorkflow: 'New workflow',\n edit: 'Edit',\n editAria: 'Edit workflow',\n back: 'Workflows',\n runTemplate: 'Run',\n manualTrigger: 'When started manually',\n}\n\n/** The table's words on this page. */\nexport const DEFAULT_WORKFLOWS_PAGE_TABLE_LABELS: Partial<WorkflowListLabels> = {\n colName: 'Workflow',\n colShared: 'Visibility',\n searchLabel: 'Filter workflows',\n searchPlaceholder: 'Filter…',\n emptyTitle: 'No workflows yet',\n emptyMessage:\n 'Build a workflow of steps for people and agents. Start it by hand, on a schedule, when something happens, or after a thread is marked done.',\n openLastRun: 'Open the latest thread',\n runs: 'History',\n run: 'Start now',\n moreActions: 'Workflow options',\n filterWorkflows: 'Workflows',\n}\n\n/** How the trigger chips say an \"after\" or a manual start on this page. */\nexport const WORKFLOWS_PAGE_TRIGGER_CHIP_LABELS: Partial<TaskTriggerChipLabels> = {\n after: (name) => `After “${name}” is marked done`,\n afterUnknown: 'After a thread is marked done',\n onDemand: 'Manual',\n}\n","/**\n * The Workflows page, connected: one composition of the saved workflows' table\n * (`ConnectedWorkflowsTable`), the visual builder (`ConnectedWorkflowBuilder`) and a workflow's\n * history (`ConnectedWorkflowHistory`), on the shared selection lifecycle\n * (`useWorkflowsPageState`).\n *\n * - The table lists the saved workflows; `groupBy=\"category\"` puts the host's catalogue\n * (`workflows.catalogue` in the host configuration) above them, in the host's categories.\n * - A workflow opens in the builder, which takes the page (Back returns to the list). A document\n * action (annotate or email documents), which runs without a thread, keeps its own editor.\n * - A workflow's history opens as a tab of the table, beside the host's own `tabs`.\n * - `openWorkflow(id, { view })` from anywhere opens the workflow's builder or history here; the\n * host only shows the page. `view: 'run'` on a catalogue entry opens its run page here\n * (`ConnectedWorkflowRunner layout=\"page\"`, with the entry's project options), unless the host\n * shows runs on a page of its own (`runHere={false}`).\n *\n * It navigates only through the environment: threads open with `openConversation`, an AI review's\n * result with `openFiles` (offered when the host has it), a catalogue entry runs with\n * `openWorkflow(id, { view: 'run' })`.\n */\n\nimport { useCallback, useMemo, useState, type ReactNode } from 'react'\nimport { ArrowLeft, Pencil, Play, Plus, Workflow as WorkflowIcon } from 'lucide-react'\nimport {\n useInvalidateTagData,\n useRefreshDocuments,\n useTags,\n useWorkflowRuns,\n type WorkflowResponse,\n} from '@arbidocs/react'\nimport { Button, formatFriendlyDate } from '@arbidocs/react/ui'\nimport { PageHeader, type PageHeaderProps } from '../../components/PageHeader'\nimport { describeTrigger } from '../../agents/tasks/taskHelpers'\nimport type { TaskRunsDialogLabels } from '../../agents/tasks/TaskRunsDialog'\nimport type { WorkflowListLabels } from '../../agents/tasks/workflowTableLabels'\nimport { WEB_WORKFLOWS } from '../../agents/workflows/catalogue/registry'\nimport { DEFAULT_WORKFLOW_TRIGGER } from '../../workflow-canvas/trigger'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from './useOpenWorkflow'\nimport { useHost } from '../../provider/host'\nimport { useIntentRequest, workflowOpenRequest } from '../../provider/requests'\nimport {\n ConnectedWorkflowBuilder,\n type ConnectedWorkflowBuilderProps,\n} from '../ConnectedWorkflowBuilder'\nimport { ConnectedWorkflowHistory } from '../ConnectedWorkflowHistory'\nimport { ConnectedWorkflowsTable } from '../ConnectedWorkflowsTable'\nimport { ConnectedWorkflowRunner } from '../ConnectedWorkflowRunner'\nimport { ConnectedTaskComposer } from '../tasks/ConnectedTaskComposer'\nimport { useRenderTaskPerson } from '../tasks/useTaskPeople'\nimport { useAiReviewStore } from '../files/store'\nimport { useWorkflowsPageState } from './useWorkflowsPageState'\nimport {\n DEFAULT_CONNECTED_WORKFLOWS_PAGE_LABELS,\n DEFAULT_WORKFLOWS_PAGE_TABLE_LABELS,\n WORKFLOWS_PAGE_TRIGGER_CHIP_LABELS,\n type ConnectedWorkflowsPageLabels,\n} from './workflowsPageLabels'\n\ntype WorkflowRun = NonNullable<ReturnType<typeof useWorkflowRuns>['data']>[number]\n\n/** A tab of the host's beside the saved workflows (e.g. the agents that run them). */\nexport interface WorkflowsPageTab {\n id: string\n label: string\n icon?: ReactNode\n content: ReactNode\n}\n\n/** The table's own tab (the saved workflows). */\nconst LIST_TAB = 'automations'\n\nexport interface ConnectedWorkflowsPageProps {\n /** `category`: the host's catalogue in its categories above the saved workflows. */\n groupBy?: 'category'\n /** A host deep link to a workflow's history (e.g. a `?workflow=` URL), taken once it loads. */\n historyWorkflowId?: string | null\n onHistoryWorkflowConsumed?: () => void\n /** A title block over the table (eyebrow, title, description). Absent: none. */\n pageHeader?: Omit<PageHeaderProps, 'actions' | 'tabs'>\n /** The host's tabs beside the saved workflows, before any open history. */\n tabs?: WorkflowsPageTab[]\n /**\n * One of the host's `tabs` to show instead of the saved workflows (a host deep link such as\n * `?tab=agents`): on mount, and again whenever it changes to another tab. Unknown ids show the\n * saved workflows.\n */\n initialTabId?: string | null\n /** The builder's words and options. */\n builderProps?: Pick<\n ConnectedWorkflowBuilderProps,\n | 'labels'\n | 'canvasLabels'\n | 'inspectorLabels'\n | 'triggerLabels'\n | 'connectedLabels'\n | 'eventKinds'\n | 'compose'\n >\n labels?: Partial<ConnectedWorkflowsPageLabels>\n tableLabels?: Partial<WorkflowListLabels>\n historyLabels?: Partial<TaskRunsDialogLabels>\n /**\n * A catalogue entry's run (`openWorkflow(id, { view: 'run' })`) opens here, as the runner's\n * page. false: the host shows runs on a page of its own (its route renders\n * `ConnectedWorkflowRunner layout=\"page\"`). Default: true.\n */\n runHere?: boolean\n testId?: string\n}\n\nexport function ConnectedWorkflowsPage({\n groupBy,\n historyWorkflowId,\n onHistoryWorkflowConsumed,\n pageHeader,\n tabs,\n initialTabId,\n builderProps,\n labels,\n tableLabels,\n historyLabels,\n runHere = true,\n testId = 'workflows-page',\n}: ConnectedWorkflowsPageProps) {\n const l = { ...DEFAULT_CONNECTED_WORKFLOWS_PAGE_LABELS, ...labels }\n const host = useHost()\n const config = host.workflows\n const { openConversation, openFiles } = useBlocksEnvironment()\n const openWorkflow = useOpenWorkflow()\n const renderPerson = useRenderTaskPerson()\n const refreshDocuments = useRefreshDocuments()\n const invalidateTags = useInvalidateTagData()\n const { data: tags = [] } = useTags()\n const [editing, setEditing] = useState<WorkflowResponse | null>(null)\n const [editorOpen, setEditorOpen] = useState(false)\n const [hostTabId, setHostTabId] = useState<string | null>(initialTabId ?? null)\n // The host's link is applied again when it names another tab (the page stays mounted when the\n // host's address changes), never over the person's own choice of tab otherwise.\n const [appliedTabId, setAppliedTabId] = useState(initialTabId)\n if (initialTabId !== appliedTabId) {\n setAppliedTabId(initialTabId)\n if (initialTabId) setHostTabId(initialTabId)\n }\n // The catalogue entry being run (`openWorkflow(id, { view: 'run' })`).\n const [runningId, setRunningId] = useState<string | null>(null)\n // A workflow `openWorkflow(id, { view: 'runs' })` asked for, until it has loaded.\n const [requestedHistoryId, setRequestedHistoryId] = useState<string | null>(null)\n const consumeHistory = useCallback(() => {\n if (requestedHistoryId) setRequestedHistoryId(null)\n else onHistoryWorkflowConsumed?.()\n }, [requestedHistoryId, onHistoryWorkflowConsumed])\n const {\n workflows,\n builder,\n builderKey,\n openBuilder,\n closeBuilder,\n builderSaved,\n historyFor: runsFor,\n historyTabs,\n activeHistoryId,\n openHistory,\n closeHistoryTab,\n selectHistoryTab,\n } = useWorkflowsPageState({\n historyWorkflowId: requestedHistoryId ?? historyWorkflowId,\n onHistoryWorkflowConsumed: consumeHistory,\n })\n const listLabels = useMemo(\n () => ({ ...DEFAULT_WORKFLOWS_PAGE_TABLE_LABELS, ...tableLabels }),\n [tableLabels]\n )\n const hostTab = tabs?.find((tab) => tab.id === hostTabId)\n const showHistory = (workflow: WorkflowResponse | null) => {\n setHostTabId(null)\n openHistory(workflow)\n }\n\n useIntentRequest(workflowOpenRequest, ({ workflowId, view }) => {\n if (view === 'run') {\n if (!runHere || !workflowId) return\n closeBuilder()\n setRunningId(workflowId)\n return\n }\n setRunningId(null)\n if (workflowId && view !== 'runs') {\n openBuilder({ kind: 'saved', id: workflowId })\n return\n }\n closeBuilder()\n setHostTabId(null)\n if (workflowId) setRequestedHistoryId(workflowId)\n else selectHistoryTab(null)\n })\n\n const edit = (workflow: WorkflowResponse) => {\n showHistory(workflow)\n // Every workflow opens in the visual builder: stepped ones as their steps, a classic one (a\n // single prompt or skill) as one agent step, a reminder with no steps yet. Only document actions\n // (annotate / email documents), which run without a thread, keep their own editor.\n if (!workflow.action) {\n openBuilder({ kind: 'saved', id: workflow.external_id })\n return\n }\n setEditing(workflow)\n setEditorOpen(true)\n }\n\n // An AI review's result: its documents re-read, Files narrowed to its label, its fields shown.\n const openResult = async (execution: WorkflowRun) => {\n await refreshDocuments(execution.document_ext_ids)\n await invalidateTags()\n const fieldIds =\n (execution.result?.tag_ext_ids as string[] | undefined) ?? runsFor?.action?.tag_ext_ids ?? []\n useAiReviewStore.getState().setRun({\n docIds: execution.document_ext_ids,\n tags: fieldIds.map((fieldId) => ({\n id: fieldId,\n name: tags.find((tag) => tag.external_id === fieldId)?.name ?? 'Review',\n })),\n })\n useAiReviewStore.getState().setOpen(true)\n openFiles(\n execution.label_ext_id ? { filters: { [execution.label_ext_id]: 'include' } } : undefined\n )\n }\n const renderErrorReport = config?.renderErrorReport\n\n const running = runningId\n ? config?.catalogue?.find((entry) => entry.workflow.id === runningId)\n : undefined\n if (running && running.runnable !== false) {\n const stepWorkflows = config?.stepWorkflows ?? WEB_WORKFLOWS\n return (\n <ConnectedWorkflowRunner\n key={running.workflow.id}\n layout=\"page\"\n workflow={running.workflow}\n projectFrom={running.projectFrom}\n inputsFromProject={running.inputsFromProject}\n onProjectCreated={running.onProjectCreated}\n options={{ resolveWorkflow: (id) => stepWorkflows.find((w) => w.id === id) }}\n renderIcon={config?.renderIcon}\n onOpenConversation={(id) => openConversation(id)}\n pageHeader={{\n eyebrow: running.category,\n leading: (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => setRunningId(null)}\n aria-label={l.back}\n title={l.back}\n data-testid=\"workflow-run-back\"\n >\n <ArrowLeft className=\"size-4\" />\n </Button>\n ),\n }}\n testIdPrefix=\"workflow-run\"\n />\n )\n }\n\n if (builder) {\n const template =\n builder.kind === 'template'\n ? config?.catalogue?.find((entry) => entry.workflow.id === builder.id)\n : undefined\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-3 overflow-auto p-4\"\n data-testid=\"workflow-builder\"\n >\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={closeBuilder}\n data-testid=\"workflow-builder-back\"\n >\n <ArrowLeft className=\"size-4\" /> {l.back}\n </Button>\n {template && template.runnable !== false && openWorkflow && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => openWorkflow(template.workflow.id, { view: 'run' })}\n data-testid=\"workflow-builder-run\"\n >\n <Play className=\"size-4\" /> {l.runTemplate}\n </Button>\n )}\n </div>\n <ConnectedWorkflowBuilder\n key={builderKey}\n workflowId={builder.kind === 'saved' ? builder.id : undefined}\n initial={\n template\n ? { workflow: template.workflow, trigger: DEFAULT_WORKFLOW_TRIGGER }\n : undefined\n }\n workflows={config?.stepWorkflows ?? WEB_WORKFLOWS}\n renderIcon={config?.renderIcon}\n onSaved={builderSaved}\n testId=\"workflow-builder-canvas\"\n {...builderProps}\n />\n </div>\n )\n }\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-testid={testId}>\n {pageHeader && <PageHeader {...pageHeader} />}\n <ConnectedWorkflowsTable\n groupBy={groupBy}\n onOpenTemplate={(id) => openBuilder({ kind: 'template', id })}\n tabs={[\n ...(tabs ?? []).map(({ id, label, icon }) => ({ id, label, icon })),\n ...historyTabs.map((workflow) => ({\n id: workflow.external_id,\n label: workflow.name,\n icon: <WorkflowIcon className=\"size-3.5\" />,\n onClose: () => {\n closeHistoryTab(workflow.external_id)\n if (activeHistoryId === workflow.external_id) setEditorOpen(false)\n },\n })),\n ]}\n activeTabId={hostTab?.id ?? activeHistoryId ?? LIST_TAB}\n onTabChange={(id) => {\n if (tabs?.some((tab) => tab.id === id)) {\n setHostTabId(id)\n return\n }\n setHostTabId(null)\n selectHistoryTab(id === LIST_TAB ? null : id)\n if (editorOpen) {\n const workflow = workflows.find((item) => item.external_id === id)\n if (workflow) setEditing(workflow)\n else setEditorOpen(false)\n }\n }}\n content={\n hostTab ? (\n hostTab.content\n ) : runsFor ? (\n <ConnectedWorkflowHistory\n inline\n hideHeader\n workflow={runsFor}\n onOpenChange={(open) => !open && openHistory(null)}\n formatDate={formatFriendlyDate}\n labels={historyLabels}\n renderErrorReport={\n renderErrorReport &&\n ((run) =>\n renderErrorReport(\n JSON.stringify(\n {\n workflow_ext_id: runsFor.external_id,\n run_id: run.id,\n status: run.status,\n error: run.error,\n },\n null,\n 2\n )\n ))\n }\n // Offered where the host shows files (its `openFiles`).\n onOpenResult={host.environment?.openFiles ? openResult : undefined}\n />\n ) : undefined\n }\n automationsOnly\n gridId=\"automations-grid-v1\"\n describeTrigger={(workflow) =>\n workflow.on_demand ? l.manualTrigger : describeTrigger(workflow)\n }\n formatDate={formatFriendlyDate}\n renderPerson={renderPerson}\n onViewRuns={showHistory}\n onOpenRow={edit}\n onEdit={edit}\n triggerChipLabels={WORKFLOWS_PAGE_TRIGGER_CHIP_LABELS}\n labels={listLabels}\n // A narrow row (a phone) keeps the actions' icons, so the host's tabs keep their room.\n header={(isCompact) => (\n <>\n {runsFor && !hostTab && (\n <Button\n variant=\"ghost\"\n onClick={() => edit(runsFor)}\n aria-label={l.editAria}\n title={isCompact ? l.edit : undefined}\n >\n <Pencil className={isCompact ? 'size-4' : 'mr-1.5 size-4'} />\n {!isCompact && l.edit}\n </Button>\n )}\n <Button\n onClick={() => openBuilder({ kind: 'new' })}\n aria-label={isCompact ? l.newWorkflow : undefined}\n title={isCompact ? l.newWorkflow : undefined}\n data-testid=\"new-workflow-button\"\n >\n <Plus className={isCompact ? 'size-4' : 'mr-1.5 size-4'} />\n {!isCompact && l.newWorkflow}\n </Button>\n </>\n )}\n />\n <ConnectedTaskComposer\n kind=\"workflow\"\n saveOnly\n startLater\n open={editorOpen}\n onOpenChange={setEditorOpen}\n workflow={editing}\n />\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/workflow-canvas/edit.ts","../../src/workflow-canvas/SignalsEditor.tsx","../../src/workflow-canvas/StepActionSettings.tsx","../../src/workflow-canvas/FieldOptionsEditor.tsx","../../src/workflow-canvas/StepInspector.tsx","../../src/workflow-canvas/trigger.ts","../../src/workflow-canvas/TriggerInspector.tsx","../../src/workflow-canvas/viewport.ts","../../src/workflow-canvas/WorkflowCanvas.tsx","../../src/workflow-canvas/WorkflowBuilder.tsx","../../src/connection/ConnectedWorkflowBuilder.tsx","../../src/connection/workflows/workflowsPageLabels.ts","../../src/connection/workflows/ConnectedWorkflowsPage.tsx"],"names":["selectClass","jsxs","jsx","Label","Input","cn","X","Button","Plus","Textarea","Fragment","Checkbox","useState","KINDS","useMemo","Popover","PopoverTrigger","PopoverContent","useEffect","Loader2","useCallback","Play","WorkflowIcon"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Editing a stepped workflow as a graph: the designer's operations, pure so they are tested on\n * their own. Every result keeps the steps in dependency order with every edge written out\n * (`after`), so a reordering never changes what a step waits for.\n */\n\nimport {\n dependsOn,\n orderSteps,\n stepDependencies,\n stepLevels,\n workflowSteps,\n type WorkflowAssignee,\n type WorkflowDefinition,\n type WorkflowDocumentRef,\n type WorkflowStep,\n type WorkflowStepKind,\n} from '../agents'\n\ntype Steps = Extract<WorkflowDefinition['run'], { kind: 'steps' }>\nexport type WorkflowLayout = NonNullable<Steps['layout']>\nexport { WORKFLOW_STEP_KINDS, stepKindOf, type WorkflowStepKind } from '../agents'\n\n/** A new, empty stepped workflow. */\nexport function newSteppedWorkflow(id: string, title: string): WorkflowDefinition {\n return {\n id,\n title,\n description: '',\n inputs: [],\n landing: 'chat',\n schedulable: false,\n run: { kind: 'steps', steps: [] },\n }\n}\n\nfunction withSteps(\n workflow: WorkflowDefinition,\n steps: WorkflowStep[],\n layout?: WorkflowLayout\n): WorkflowDefinition {\n const run = workflow.run.kind === 'steps' ? workflow.run : { kind: 'steps' as const, steps: [] }\n return {\n ...workflow,\n run: { ...run, steps: orderSteps(steps), layout: layout ?? run.layout },\n }\n}\n\nconst layoutOf = (workflow: WorkflowDefinition): WorkflowLayout =>\n (workflow.run.kind === 'steps' && workflow.run.layout) || {}\n\n/** Every edge written out, so steps can be reordered freely. */\nconst explicit = (steps: WorkflowStep[]): WorkflowStep[] =>\n steps.map((s) => ({ ...s, after: stepDependencies(steps, s.id) }))\n\n/** A step id from a title: lowercase words joined by hyphens, unique within the workflow. */\nexport function stepIdFor(steps: WorkflowStep[], title: string): string {\n const base =\n title\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .replace(/^[^a-z]+/, '') || 'step'\n const taken = new Set(steps.map((s) => s.id))\n if (!taken.has(base)) return base\n let n = 2\n while (taken.has(`${base}-${n}`)) n++\n return `${base}-${n}`\n}\n\nconst DEFAULT_TITLES: Record<WorkflowStepKind, string> = {\n form: 'Details',\n upload: 'Upload files',\n agent: 'Agent step',\n review: 'Review',\n sign: 'Sign',\n email_draft: 'Email draft',\n tabular_review: 'Tabular review',\n}\n\nfunction blankStep(kind: WorkflowStepKind, id: string, title: string): WorkflowStep {\n switch (kind) {\n case 'form':\n return { id, kind, title, inputs: [] }\n case 'upload':\n return { id, kind, title }\n case 'agent':\n // Nothing chosen yet: the inspector asks for a skill or an instruction.\n return { id, kind, title }\n case 'review':\n return { id, kind, title, instructions: '' }\n case 'sign':\n return { id, kind: 'action', title, action: { type: 'sign', signers: [] } }\n case 'email_draft':\n return {\n id,\n kind: 'action',\n title,\n action: { type: 'email_draft', to: [], subject: '', body: '' },\n }\n case 'tabular_review':\n return {\n id,\n kind: 'action',\n title,\n action: { type: 'tabular_review', tags: [], documents: 'run_uploads' },\n }\n }\n}\n\n/**\n * Add a step. With `after`, it waits for that step (the usual \"add the next step\"); otherwise it\n * starts with the run. Resolves with the workflow and the new step's id.\n */\nexport function addStep(\n workflow: WorkflowDefinition,\n kind: WorkflowStepKind,\n options: { after?: string; title?: string; position?: { x: number; y: number } } = {}\n): { workflow: WorkflowDefinition; id: string } {\n const steps = explicit(workflowSteps(workflow))\n const title = options.title ?? DEFAULT_TITLES[kind]\n const id = stepIdFor(steps, title)\n const step = { ...blankStep(kind, id, title), after: options.after ? [options.after] : [] }\n const layout = { ...layoutOf(workflow) }\n if (options.position) layout[id] = options.position\n return { workflow: withSteps(workflow, [...steps, step], layout), id }\n}\n\n/** Remove a step; what waited for it waits for what it waited for instead (the chain holds). */\nexport function removeStep(workflow: WorkflowDefinition, id: string): WorkflowDefinition {\n const steps = explicit(workflowSteps(workflow))\n const removed = steps.find((s) => s.id === id)\n if (!removed) return workflow\n const bridged = steps\n .filter((s) => s.id !== id)\n .map((s) =>\n s.after?.includes(id)\n ? {\n ...s,\n after: [...new Set([...s.after.filter((d) => d !== id), ...(removed.after ?? [])])],\n }\n : s\n )\n const { [id]: _gone, ...layout } = layoutOf(workflow)\n return withSteps(workflow, bridged, layout)\n}\n\n/** `to` now waits for `from`. Refused (unchanged) when that would make a cycle. */\nexport function connectSteps(\n workflow: WorkflowDefinition,\n from: string,\n to: string\n): WorkflowDefinition {\n const steps = explicit(workflowSteps(workflow))\n if (from === to || !steps.some((s) => s.id === from) || dependsOn(steps, from, to)) {\n return workflow\n }\n return withSteps(\n workflow,\n steps.map((s) =>\n s.id === to && !s.after?.includes(from) ? { ...s, after: [...(s.after ?? []), from] } : s\n )\n )\n}\n\nexport const wouldCycle = (workflow: WorkflowDefinition, from: string, to: string): boolean =>\n from === to || dependsOn(workflowSteps(workflow), from, to)\n\n/** `to` no longer waits for `from`. */\nexport function disconnectSteps(\n workflow: WorkflowDefinition,\n from: string,\n to: string\n): WorkflowDefinition {\n const steps = explicit(workflowSteps(workflow))\n return withSteps(\n workflow,\n steps.map((s) => (s.id === to ? { ...s, after: (s.after ?? []).filter((d) => d !== from) } : s))\n )\n}\n\n/** Change a step's settings (its id and kind stay). */\nexport function updateStep(\n workflow: WorkflowDefinition,\n id: string,\n patch: Partial<WorkflowStep>\n): WorkflowDefinition {\n const steps = explicit(workflowSteps(workflow))\n return withSteps(\n workflow,\n steps.map((s) =>\n s.id === id ? ({ ...s, ...patch, id: s.id, kind: s.kind } as WorkflowStep) : s\n )\n )\n}\n\n/** `{{from}}` → `{{to}}` in one template, fallbacks included (`{{a || from}}`). */\nconst renameIn = (text: string, from: string, to: string): string =>\n text.replace(\n /\\{\\{([^}]*)\\}\\}/g,\n (_, inner: string) =>\n `{{${inner\n .split('||')\n .map((part) => (part.trim() === from ? part.replace(from, to) : part))\n .join('||')}}}`\n )\n\n/**\n * A run input renamed (a form field's code following its label): every step that reads it is\n * updated, so the workflow keeps working.\n */\nexport function renameInput(\n workflow: WorkflowDefinition,\n from: string,\n to: string\n): WorkflowDefinition {\n if (from === to) return workflow\n const steps = workflowSteps(workflow).map((s): WorkflowStep => {\n if (s.kind === 'agent')\n return {\n ...s,\n with: s.with\n ? Object.fromEntries(Object.entries(s.with).map(([k, v]) => [k, renameIn(v, from, to)]))\n : s.with,\n run:\n s.run?.kind === 'prompt'\n ? { ...s.run, promptTemplate: renameIn(s.run.promptTemplate, from, to) }\n : s.run,\n ...(s.editDocument ? { editDocument: renameRef(s.editDocument, from, to) } : {}),\n }\n const assignee = s.assignee && renamePerson(s.assignee, from, to)\n const base = assignee ? { ...s, assignee } : s\n if (base.kind === 'review' && base.instructions)\n return { ...base, instructions: renameIn(base.instructions, from, to) }\n if (base.kind === 'action') {\n const a = base.action\n if (a.type === 'sign')\n return {\n ...base,\n action: {\n ...a,\n document: a.document && renameRef(a.document, from, to),\n signers: a.signers.map((x) => renamePerson(x, from, to)),\n ...(a.message ? { message: renameIn(a.message, from, to) } : {}),\n },\n }\n if (a.type === 'email_draft')\n return {\n ...base,\n action: {\n ...a,\n to: a.to.map((t) => renameIn(t, from, to)),\n ...(a.cc ? { cc: a.cc.map((t) => renameIn(t, from, to)) } : {}),\n subject: renameIn(a.subject, from, to),\n body: renameIn(a.body, from, to),\n ...(a.attachments\n ? { attachments: a.attachments.map((r) => renameRef(r, from, to)) }\n : {}),\n },\n }\n if (Array.isArray(a.documents))\n return {\n ...base,\n action: { ...a, documents: a.documents.map((r) => renameRef(r, from, to)) },\n }\n }\n return base\n })\n return withSteps(workflow, steps)\n}\n\nconst renamePerson = (a: WorkflowAssignee, from: string, to: string): WorkflowAssignee =>\n 'input' in a && a.input === from ? { input: to } : a\nconst renameRef = (r: WorkflowDocumentRef, from: string, to: string): WorkflowDocumentRef =>\n 'input' in r && r.input === from ? { input: to } : r\n\n/** Where a step sits on the canvas. */\nexport function moveStep(\n workflow: WorkflowDefinition,\n id: string,\n position: { x: number; y: number }\n): WorkflowDefinition {\n return withSteps(workflow, workflowSteps(workflow), { ...layoutOf(workflow), [id]: position })\n}\n\nconst COLUMN = 300\nconst ROW = 140\n\n/** Positions by depth: columns left to right, parallel steps stacked. */\nexport function autoLayout(steps: WorkflowStep[]): WorkflowLayout {\n const layout: WorkflowLayout = {}\n stepLevels(steps).forEach((level, x) =>\n level.forEach((s, y) => {\n layout[s.id] = { x: x * COLUMN, y: (y - (level.length - 1) / 2) * ROW }\n })\n )\n return layout\n}\n\n/** The workflow's layout, with any unplaced step placed by depth. */\nexport function layoutWithDefaults(workflow: WorkflowDefinition): WorkflowLayout {\n const auto = autoLayout(workflowSteps(workflow))\n return { ...auto, ...layoutOf(workflow) }\n}\n","/**\n * \"When done, signal…\": the signals a step raises once it is done, each a name and a condition on\n * the step's outcome that fits its kind (a form field's value, the agent's answer, a review's\n * approval). Another workflow starts on a signal (\"When a step signals\"), so the if/then between\n * workflows lives in that link and each workflow stays short.\n */\n\nimport { Plus, X } from 'lucide-react'\nimport { Button, Input, Label, cn } from '@arbidocs/react/ui'\nimport {\n isIncompleteSignal,\n type WorkflowSignal,\n type WorkflowSignalWhen,\n type WorkflowStep,\n} from '../agents'\n\nexport interface SignalsEditorLabels {\n heading: string\n hint: string\n add: string\n name: string\n namePlaceholder: string\n when: string\n always: string\n fieldEquals: string\n answerContains: string\n answerMatches: string\n approved: string\n field: string\n value: string\n phrase: string\n phrasePlaceholder: string\n pattern: string\n remove: string\n}\n\nexport const DEFAULT_SIGNALS_EDITOR_LABELS: SignalsEditorLabels = {\n heading: 'When done, signal…',\n hint: 'Another workflow can start on a signal (“When a step signals”), as its own thread linked to this one.',\n add: 'Add signal',\n name: 'Signal',\n namePlaceholder: 'e.g. risk-high',\n when: 'When',\n always: 'Whenever it is done',\n fieldEquals: 'A field equals',\n answerContains: 'The answer contains',\n answerMatches: 'The answer matches (regex)',\n approved: 'It is approved',\n field: 'Field',\n value: 'Value',\n phrase: 'Phrase',\n phrasePlaceholder: 'e.g. Risk rating: High',\n pattern: 'Pattern',\n remove: 'Remove signal',\n}\n\ntype ConditionKind = 'always' | 'field' | 'contains' | 'matches' | 'approved'\n\n/** The conditions a step of this kind can test. */\nexport function signalConditions(kind: WorkflowStep['kind']): ConditionKind[] {\n switch (kind) {\n case 'form':\n return ['always', 'field']\n case 'agent':\n return ['always', 'contains', 'matches']\n case 'review':\n return ['approved', 'always']\n default:\n return ['always']\n }\n}\n\nfunction conditionOf(when: WorkflowSignalWhen | undefined): ConditionKind {\n if (!when) return 'always'\n if ('field' in when) return 'field'\n if ('contains' in when) return 'contains'\n if ('matches' in when) return 'matches'\n return 'approved'\n}\n\n/** A typed name as a signal slug: lower case, words joined by `-`. */\nexport function signalSlug(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9_.-]+/g, '-')\n .replace(/^[^a-z0-9]+/, '')\n .slice(0, 64)\n}\n\nfunction startCondition(kind: ConditionKind, step: WorkflowStep): WorkflowSignalWhen | undefined {\n switch (kind) {\n case 'field':\n return { field: step.kind === 'form' ? (step.inputs[0]?.name ?? '') : '', equals: '' }\n case 'contains':\n return { contains: '' }\n case 'matches':\n return { matches: '' }\n case 'approved':\n return { approved: true }\n default:\n return undefined\n }\n}\n\n/** A new signal on a step: named after the step, with the condition its kind starts with. */\nfunction newSignal(step: WorkflowStep, taken: string[]): WorkflowSignal {\n const base = signalSlug(step.id) || 'signal'\n let name = `${base}-done`\n let n = 2\n while (taken.includes(name)) name = `${base}-done-${n++}`\n const when = startCondition(signalConditions(step.kind)[0], step)\n return when ? { name, when } : { name }\n}\n\nconst selectClass =\n 'flex h-8 w-full rounded-md border border-input bg-background px-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring'\n\nexport interface SignalsEditorProps {\n step: WorkflowStep\n onChange: (signals: WorkflowSignal[] | undefined) => void\n labels?: Partial<SignalsEditorLabels>\n testId?: string\n}\n\nexport function SignalsEditor({\n step,\n onChange,\n labels,\n testId = 'signals-editor',\n}: SignalsEditorProps) {\n const l = { ...DEFAULT_SIGNALS_EDITOR_LABELS, ...labels }\n const signals = step.signals ?? []\n const conditions = signalConditions(step.kind)\n const conditionLabel: Record<ConditionKind, string> = {\n always: l.always,\n field: l.fieldEquals,\n contains: l.answerContains,\n matches: l.answerMatches,\n approved: l.approved,\n }\n const emit = (next: WorkflowSignal[]) => onChange(next.length ? next : undefined)\n const set = (i: number, signal: WorkflowSignal) =>\n emit(signals.map((s, j) => (j === i ? signal : s)))\n const fields = step.kind === 'form' ? step.inputs : []\n\n return (\n <div className=\"space-y-1.5\" data-testid={testId}>\n <Label className=\"text-xs\">{l.heading}</Label>\n <div className=\"space-y-2\">\n {signals.map((signal, i) => {\n const condition = conditionOf(signal.when)\n const when = signal.when\n return (\n <div\n key={i}\n // Unfinished (no name, or nothing to test yet): not saved until it is filled in.\n className={cn(\n 'space-y-1.5 rounded-md border p-2',\n isIncompleteSignal(signal) ? 'border-destructive/50' : 'border-border'\n )}\n data-incomplete={isIncompleteSignal(signal) || undefined}\n data-testid={`${testId}-${i}`}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n value={signal.name}\n aria-label={l.name}\n placeholder={l.namePlaceholder}\n onChange={(e) => set(i, { ...signal, name: signalSlug(e.target.value) })}\n className=\"h-8 font-mono text-xs\"\n data-testid={`${testId}-${i}-name`}\n />\n <button\n type=\"button\"\n aria-label={l.remove}\n onClick={() => emit(signals.filter((_, j) => j !== i))}\n data-testid={`${testId}-${i}-remove`}\n >\n <X className=\"size-4 text-muted-foreground\" />\n </button>\n </div>\n <select\n aria-label={l.when}\n className={selectClass}\n value={condition}\n onChange={(e) => {\n const nextWhen = startCondition(e.target.value as ConditionKind, step)\n set(i, nextWhen ? { name: signal.name, when: nextWhen } : { name: signal.name })\n }}\n data-testid={`${testId}-${i}-when`}\n >\n {/* A condition saved for another kind of step stays visible until changed. */}\n {[...conditions, ...(conditions.includes(condition) ? [] : [condition])].map(\n (c) => (\n <option key={c} value={c}>\n {conditionLabel[c]}\n </option>\n )\n )}\n </select>\n {when && 'field' in when && (\n <div className=\"flex items-center gap-2\">\n <select\n aria-label={l.field}\n className={cn(selectClass, 'flex-1')}\n value={when.field}\n onChange={(e) =>\n set(i, { ...signal, when: { ...when, field: e.target.value } })\n }\n data-testid={`${testId}-${i}-field`}\n >\n {fields.map((f) => (\n <option key={f.name} value={f.name}>\n {f.label}\n </option>\n ))}\n {!fields.some((f) => f.name === when.field) && (\n <option value={when.field}>{when.field || '—'}</option>\n )}\n </select>\n <Input\n aria-label={l.value}\n placeholder={l.value}\n value={String(when.equals)}\n onChange={(e) =>\n set(i, { ...signal, when: { ...when, equals: e.target.value } })\n }\n className=\"h-8 flex-1\"\n data-testid={`${testId}-${i}-equals`}\n />\n </div>\n )}\n {when && 'contains' in when && (\n <Input\n aria-label={l.phrase}\n placeholder={l.phrasePlaceholder}\n value={when.contains}\n onChange={(e) => set(i, { ...signal, when: { contains: e.target.value } })}\n className=\"h-8\"\n data-testid={`${testId}-${i}-contains`}\n />\n )}\n {when && 'matches' in when && (\n <Input\n aria-label={l.pattern}\n placeholder=\"risk rating:\\s*high\"\n value={when.matches}\n onChange={(e) => set(i, { ...signal, when: { matches: e.target.value } })}\n className=\"h-8 font-mono text-xs\"\n data-testid={`${testId}-${i}-matches`}\n />\n )}\n </div>\n )\n })}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n emit([\n ...signals,\n newSignal(\n step,\n signals.map((s) => s.name)\n ),\n ])\n }\n data-testid={`${testId}-add`}\n >\n <Plus className=\"size-4\" /> {l.add}\n </Button>\n </div>\n <p className=\"text-xs text-muted-foreground\">{l.hint}</p>\n </div>\n )\n}\n","/**\n * The inspector's settings for who a step is for and for the platform actions: the assignee\n * picker and reminder, a document reference picker, and the settings of a signature, an email\n * draft, a tabular review and an agent step that edits a document with tracked changes.\n */\n\nimport type { ReactNode } from 'react'\nimport { Plus, X } from 'lucide-react'\nimport { Button, Checkbox, Input, Label, Textarea, cn, entityNoun } from '@arbidocs/react/ui'\nimport type {\n WorkflowAgentStep,\n WorkflowAssignee,\n WorkflowDocumentRef,\n WorkflowEmailDraftAction,\n WorkflowField,\n WorkflowSignAction,\n WorkflowStep,\n WorkflowTabularReviewAction,\n} from '../agents'\n\n/** A choice the host supplies (a member, a label, a document). */\nexport interface StepInspectorOption {\n value: string\n label: string\n}\n\nexport interface StepActionSettingsLabels {\n assignee: string\n assigneeAnyone: string\n assigneeRunOwner: string\n assigneeProjectLead: string\n /** The group of a run's person fields. */\n assigneeFields: string\n assigneePeople: string\n remind: string\n remindHint: string\n documentFrom: string\n docFromStep: string\n docFromInput: string\n docById: string\n chooseStep: string\n chooseInput: string\n chooseDocument: string\n /** The id box when the host lists no documents. */\n documentIdPlaceholder: string\n signDocument: string\n signers: string\n addSigner: string\n signMessage: string\n expires: string\n expiresHint: string\n emailTo: string\n emailCc: string\n emailSubject: string\n emailBody: string\n /** Under the address fields: separate several with commas. */\n addressesHint: string\n /** Above the variables an email can use (click one to add it to the body). */\n variablesHint: string\n attachments: string\n addAttachment: string\n reviewColumns: string\n noTags: string\n reviewDocuments: string\n reviewRunUploads: string\n reviewWorkspace: string\n reviewChosen: string\n addDocument: string\n overwrite: string\n editDocument: string\n editDocumentHint: string\n}\n\nexport const DEFAULT_STEP_ACTION_SETTINGS_LABELS: StepActionSettingsLabels = {\n assignee: 'Who does it',\n assigneeAnyone: 'Anyone on the run',\n assigneeRunOwner: 'Whoever started the run',\n get assigneeProjectLead() {\n return `The ${entityNoun('PROJECT')} lead`\n },\n assigneeFields: 'The person in a form field',\n assigneePeople: 'A person',\n remind: 'Remind after (hours)',\n remindHint: 'Left that long, they are told again. Blank: no reminder.',\n documentFrom: 'Document',\n docFromStep: 'From an earlier step',\n docFromInput: 'From a run input',\n docById: 'A document',\n chooseStep: 'Choose a step…',\n chooseInput: 'Choose an input…',\n chooseDocument: 'Choose a document…',\n documentIdPlaceholder: 'doc-…',\n signDocument: 'Document to sign',\n signers: 'Signers',\n addSigner: 'Add signer',\n signMessage: 'Message to the signers',\n expires: 'Expires after (hours)',\n expiresHint: 'Unsigned by then, the step fails. Blank: no expiry.',\n emailTo: 'To',\n emailCc: 'Cc',\n emailSubject: 'Subject',\n emailBody: 'Body',\n addressesHint: 'Separate several with commas.',\n variablesHint: 'Variables (click to add to the body):',\n attachments: 'Attachments',\n addAttachment: 'Add attachment',\n reviewColumns: 'Columns (labels)',\n noTags: 'No labels in this workspace yet.',\n reviewDocuments: 'Documents',\n reviewRunUploads: 'The files this run collects',\n reviewWorkspace: 'Every document in the workspace',\n reviewChosen: 'Chosen documents',\n addDocument: 'Add document',\n overwrite: 'Fill cells that already have a value again',\n editDocument: 'Edit this document (tracked changes)',\n editDocumentHint:\n 'The instruction says what to change; the edited copy is saved as its next version, to accept or reject change by change.',\n}\n\nexport const selectClass =\n 'flex h-9 w-full rounded-md border border-input bg-background px-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring'\n\nexport function Field({\n label,\n children,\n hint,\n}: {\n label: string\n children: ReactNode\n hint?: string\n}) {\n return (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{label}</Label>\n {children}\n {hint && <p className=\"text-xs text-muted-foreground\">{hint}</p>}\n </div>\n )\n}\n\n/** What the pickers can offer around the step being edited. */\nexport interface StepContext {\n /** The steps this one comes after (what its documents can come from). */\n earlier: WorkflowStep[]\n /** Every field of the run. */\n fields: WorkflowField[]\n people: StepInspectorOption[]\n tags: StepInspectorOption[]\n documents: StepInspectorOption[]\n}\n\n/* ------------------------------- assignee ------------------------------- */\n\nconst assigneeValue = (a: WorkflowAssignee | undefined): string =>\n !a\n ? ''\n : 'user' in a\n ? `user:${a.user}`\n : 'input' in a\n ? `input:${a.input}`\n : 'runOwner' in a\n ? 'owner'\n : 'lead'\n\nconst parseAssignee = (v: string): WorkflowAssignee | undefined =>\n v === 'owner'\n ? { runOwner: true }\n : v === 'lead'\n ? { projectLead: true }\n : v.startsWith('user:')\n ? { user: v.slice(5) }\n : v.startsWith('input:')\n ? { input: v.slice(6) }\n : undefined\n\nfunction AssigneeSelect({\n value,\n onChange,\n ctx,\n l,\n anyone,\n testId,\n ariaLabel,\n}: {\n value: WorkflowAssignee | undefined\n onChange: (value: WorkflowAssignee | undefined) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n /** The \"anyone\" choice's wording; absent = no such choice. */\n anyone?: string\n testId?: string\n ariaLabel?: string\n}) {\n const personFields = ctx.fields.filter((f) => f.type === 'person')\n const v = assigneeValue(value)\n const known =\n !v.startsWith('user:') || ctx.people.some((p) => `user:${p.value}` === v) ? null : v.slice(5)\n return (\n <select\n className={selectClass}\n value={v}\n aria-label={ariaLabel}\n onChange={(e) => onChange(parseAssignee(e.target.value))}\n data-testid={testId}\n >\n {anyone !== undefined ? <option value=\"\">{anyone}</option> : <option value=\"\" disabled />}\n <option value=\"owner\">{l.assigneeRunOwner}</option>\n <option value=\"lead\">{l.assigneeProjectLead}</option>\n {personFields.length > 0 && (\n <optgroup label={l.assigneeFields}>\n {personFields.map((f) => (\n <option key={f.name} value={`input:${f.name}`}>\n {f.label}\n </option>\n ))}\n </optgroup>\n )}\n {(ctx.people.length > 0 || known) && (\n <optgroup label={l.assigneePeople}>\n {ctx.people.map((p) => (\n <option key={p.value} value={`user:${p.value}`}>\n {p.label}\n </option>\n ))}\n {known && <option value={v}>{known}</option>}\n </optgroup>\n )}\n </select>\n )\n}\n\n/** Who the step is for, and when they are reminded. */\nexport function AssigneeSettings({\n step,\n patch,\n ctx,\n l,\n testId,\n}: {\n step: WorkflowStep\n patch: (p: Partial<WorkflowStep>) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n return (\n <>\n <Field label={l.assignee}>\n <AssigneeSelect\n value={step.assignee}\n onChange={(assignee) => patch({ assignee })}\n ctx={ctx}\n l={l}\n anyone={l.assigneeAnyone}\n testId={`${testId}-assignee`}\n />\n </Field>\n <Field label={l.remind} hint={l.remindHint}>\n <Input\n type=\"number\"\n min={1}\n value={step.remindAfterHours ?? ''}\n onChange={(e) => {\n const n = Number(e.target.value)\n patch({ remindAfterHours: e.target.value && n > 0 ? n : undefined })\n }}\n className=\"w-28\"\n data-testid={`${testId}-remind`}\n />\n </Field>\n </>\n )\n}\n\n/* ------------------------------ documents ------------------------------ */\n\ntype RefMode = 'step' | 'input' | 'id'\nconst modeOf = (ref: WorkflowDocumentRef | undefined): RefMode =>\n !ref ? 'step' : 'step' in ref ? 'step' : 'input' in ref ? 'input' : 'id'\n\n/** Where a document comes from: an earlier step, a run input, or one document. */\nfunction DocumentRefPicker({\n value,\n onChange,\n ctx,\n l,\n testId,\n}: {\n value: WorkflowDocumentRef | undefined\n onChange: (value: WorkflowDocumentRef) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n const mode = modeOf(value)\n const inputs = ctx.fields.filter((f) => f.type === 'documents' || f.type === 'text')\n return (\n <div className=\"space-y-1.5\" data-testid={testId}>\n <select\n className={cn(selectClass, 'h-8')}\n value={mode}\n aria-label={l.documentFrom}\n onChange={(e) => {\n const m = e.target.value as RefMode\n onChange(m === 'step' ? { step: '' } : m === 'input' ? { input: '' } : { id: '' })\n }}\n data-testid={`${testId}-mode`}\n >\n <option value=\"step\">{l.docFromStep}</option>\n <option value=\"input\">{l.docFromInput}</option>\n <option value=\"id\">{l.docById}</option>\n </select>\n {mode === 'step' && (\n <select\n className={cn(selectClass, 'h-8')}\n value={value && 'step' in value ? value.step : ''}\n onChange={(e) => onChange({ step: e.target.value })}\n data-testid={`${testId}-step`}\n >\n <option value=\"\" disabled>\n {l.chooseStep}\n </option>\n {ctx.earlier.map((s) => (\n <option key={s.id} value={s.id}>\n {s.title}\n </option>\n ))}\n </select>\n )}\n {mode === 'input' && (\n <select\n className={cn(selectClass, 'h-8')}\n value={value && 'input' in value ? value.input : ''}\n onChange={(e) => onChange({ input: e.target.value })}\n data-testid={`${testId}-input`}\n >\n <option value=\"\" disabled>\n {l.chooseInput}\n </option>\n {inputs.map((f) => (\n <option key={f.name} value={f.name}>\n {f.label}\n </option>\n ))}\n </select>\n )}\n {mode === 'id' &&\n (ctx.documents.length ? (\n <select\n className={cn(selectClass, 'h-8')}\n value={value && 'id' in value ? value.id : ''}\n onChange={(e) => onChange({ id: e.target.value })}\n data-testid={`${testId}-id`}\n >\n <option value=\"\" disabled>\n {l.chooseDocument}\n </option>\n {ctx.documents.map((d) => (\n <option key={d.value} value={d.value}>\n {d.label}\n </option>\n ))}\n </select>\n ) : (\n <Input\n className=\"h-8\"\n value={value && 'id' in value ? value.id : ''}\n placeholder={l.documentIdPlaceholder}\n onChange={(e) => onChange({ id: e.target.value })}\n data-testid={`${testId}-id`}\n />\n ))}\n </div>\n )\n}\n\n/** A list of document references with add and remove. */\nfunction DocumentRefList({\n value,\n onChange,\n ctx,\n l,\n addLabel,\n testId,\n}: {\n value: WorkflowDocumentRef[]\n onChange: (value: WorkflowDocumentRef[]) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n addLabel: string\n testId: string\n}) {\n return (\n <div className=\"space-y-2\">\n {value.map((ref, i) => (\n <div key={i} className=\"flex items-start gap-1.5\">\n <div className=\"min-w-0 flex-1\">\n <DocumentRefPicker\n value={ref}\n onChange={(next) => onChange(value.map((r, j) => (j === i ? next : r)))}\n ctx={ctx}\n l={l}\n testId={`${testId}-${i}`}\n />\n </div>\n <button\n type=\"button\"\n className=\"mt-2\"\n aria-label={`${addLabel} ×`}\n onClick={() => onChange(value.filter((_, j) => j !== i))}\n >\n <X className=\"size-4 text-muted-foreground\" />\n </button>\n </div>\n ))}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onChange([...value, { step: '' }])}\n data-testid={`${testId}-add`}\n >\n <Plus className=\"size-4\" /> {addLabel}\n </Button>\n </div>\n )\n}\n\n/* -------------------------------- actions -------------------------------- */\n\nconst optionalNumber = (raw: string): number | undefined => {\n const n = Number(raw)\n return raw && n > 0 ? n : undefined\n}\n\nexport function SignSettings({\n action,\n onChange,\n ctx,\n l,\n testId,\n}: {\n action: WorkflowSignAction\n onChange: (action: WorkflowSignAction) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n const set = (p: Partial<WorkflowSignAction>) => onChange({ ...action, ...p })\n return (\n <>\n <Field label={l.signDocument}>\n <DocumentRefPicker\n value={action.document}\n onChange={(document) => set({ document })}\n ctx={ctx}\n l={l}\n testId={`${testId}-document`}\n />\n </Field>\n <Field label={l.signers}>\n <div className=\"space-y-1.5\" data-testid={`${testId}-signers`}>\n {action.signers.map((s, i) => (\n <div key={i} className=\"flex items-center gap-1.5\">\n <AssigneeSelect\n value={s}\n onChange={(next) =>\n set({\n signers: next\n ? action.signers.map((x, j) => (j === i ? next : x))\n : action.signers.filter((_, j) => j !== i),\n })\n }\n ctx={ctx}\n l={l}\n ariaLabel={`${l.signers} ${i + 1}`}\n testId={`${testId}-signer-${i}`}\n />\n <button\n type=\"button\"\n aria-label={`${l.signers} ${i + 1} ×`}\n onClick={() => set({ signers: action.signers.filter((_, j) => j !== i) })}\n >\n <X className=\"size-4 text-muted-foreground\" />\n </button>\n </div>\n ))}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => set({ signers: [...action.signers, { runOwner: true }] })}\n data-testid={`${testId}-add-signer`}\n >\n <Plus className=\"size-4\" /> {l.addSigner}\n </Button>\n </div>\n </Field>\n <Field label={l.signMessage}>\n <Textarea\n rows={3}\n value={action.message ?? ''}\n onChange={(e) => set({ message: e.target.value || undefined })}\n data-testid={`${testId}-message`}\n />\n </Field>\n <Field label={l.expires} hint={l.expiresHint}>\n <Input\n type=\"number\"\n min={1}\n className=\"w-28\"\n value={action.expiresAfterHours ?? ''}\n onChange={(e) => set({ expiresAfterHours: optionalNumber(e.target.value) })}\n data-testid={`${testId}-expires`}\n />\n </Field>\n </>\n )\n}\n\nconst addresses = (list: string[] | undefined) => (list ?? []).join(', ')\nconst parseAddresses = (text: string) => text.split(',').map((t) => t.trim())\n\n/** The variables a template over the run can use: its fields and the earlier steps' answers. */\nfunction templateVariables(ctx: StepContext): string[] {\n return [\n ...ctx.fields.map((f) => `{{${f.name}}}`),\n ...ctx.earlier.filter((s) => s.kind === 'agent').map((s) => `{{${s.id}.answer}}`),\n ]\n}\n\nexport function EmailDraftSettings({\n action,\n onChange,\n ctx,\n l,\n testId,\n}: {\n action: WorkflowEmailDraftAction\n onChange: (action: WorkflowEmailDraftAction) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n const set = (p: Partial<WorkflowEmailDraftAction>) => onChange({ ...action, ...p })\n const vars = templateVariables(ctx)\n return (\n <>\n <Field label={l.emailTo} hint={l.addressesHint}>\n <Input\n value={addresses(action.to)}\n onChange={(e) => set({ to: parseAddresses(e.target.value) })}\n placeholder=\"{{client_email}}\"\n data-testid={`${testId}-to`}\n />\n </Field>\n <Field label={l.emailCc}>\n <Input\n value={addresses(action.cc)}\n onChange={(e) => {\n const cc = parseAddresses(e.target.value)\n set({ cc: cc.some(Boolean) ? cc : undefined })\n }}\n data-testid={`${testId}-cc`}\n />\n </Field>\n <Field label={l.emailSubject}>\n <Input\n value={action.subject}\n onChange={(e) => set({ subject: e.target.value })}\n data-testid={`${testId}-subject`}\n />\n </Field>\n <Field label={l.emailBody}>\n <Textarea\n rows={6}\n value={action.body}\n onChange={(e) => set({ body: e.target.value })}\n data-testid={`${testId}-body`}\n />\n </Field>\n {vars.length > 0 && (\n <div className=\"flex flex-wrap gap-1\" data-testid={`${testId}-variables`}>\n <span className=\"w-full text-xs text-muted-foreground\">{l.variablesHint}</span>\n {vars.map((v) => (\n <button\n key={v}\n type=\"button\"\n onClick={() => set({ body: `${action.body}${action.body ? ' ' : ''}${v}` })}\n className=\"rounded bg-muted px-1.5 py-0.5 font-mono text-[11px] text-muted-foreground hover:text-foreground\"\n title={v}\n >\n {v}\n </button>\n ))}\n </div>\n )}\n <Field label={l.attachments}>\n <DocumentRefList\n value={action.attachments ?? []}\n onChange={(attachments) =>\n set({ attachments: attachments.length ? attachments : undefined })\n }\n ctx={ctx}\n l={l}\n addLabel={l.addAttachment}\n testId={`${testId}-attachments`}\n />\n </Field>\n </>\n )\n}\n\nexport function TabularReviewSettings({\n action,\n onChange,\n ctx,\n l,\n testId,\n}: {\n action: WorkflowTabularReviewAction\n onChange: (action: WorkflowTabularReviewAction) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n const set = (p: Partial<WorkflowTabularReviewAction>) => onChange({ ...action, ...p })\n const mode = Array.isArray(action.documents) ? 'chosen' : action.documents\n const toggle = (id: string) =>\n set({\n tags: action.tags.includes(id) ? action.tags.filter((t) => t !== id) : [...action.tags, id],\n })\n return (\n <>\n <Field label={l.reviewColumns}>\n <div\n className=\"max-h-44 space-y-1 overflow-y-auto rounded-md border border-border p-2\"\n data-testid={`${testId}-tags`}\n >\n {ctx.tags.length === 0 && <p className=\"text-xs text-muted-foreground\">{l.noTags}</p>}\n {ctx.tags.map((t) => (\n <label key={t.value} className=\"flex items-center gap-2 text-sm\">\n <Checkbox\n checked={action.tags.includes(t.value)}\n onCheckedChange={() => toggle(t.value)}\n data-testid={`${testId}-tag-${t.value}`}\n />\n <span className=\"truncate\">{t.label}</span>\n </label>\n ))}\n {action.tags\n .filter((t) => !ctx.tags.some((x) => x.value === t))\n .map((t) => (\n <label key={t} className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Checkbox checked onCheckedChange={() => toggle(t)} />\n <code className=\"text-xs\">{t}</code>\n </label>\n ))}\n </div>\n </Field>\n <Field label={l.reviewDocuments}>\n <select\n className={selectClass}\n value={mode}\n onChange={(e) => {\n const v = e.target.value\n set({ documents: v === 'chosen' ? [] : (v as 'run_uploads' | 'workspace') })\n }}\n data-testid={`${testId}-documents`}\n >\n <option value=\"run_uploads\">{l.reviewRunUploads}</option>\n <option value=\"workspace\">{l.reviewWorkspace}</option>\n <option value=\"chosen\">{l.reviewChosen}</option>\n </select>\n </Field>\n {Array.isArray(action.documents) && (\n <DocumentRefList\n value={action.documents}\n onChange={(documents) => set({ documents })}\n ctx={ctx}\n l={l}\n addLabel={l.addDocument}\n testId={`${testId}-chosen`}\n />\n )}\n <label className=\"flex items-center gap-2 text-sm\">\n <Checkbox\n checked={!!action.overwrite}\n onCheckedChange={(v) => set({ overwrite: v === true || undefined })}\n />\n {l.overwrite}\n </label>\n </>\n )\n}\n\n/** \"Edit this document (tracked changes)\" on an agent step (main line only). */\nexport function EditDocumentSettings({\n step,\n patch,\n ctx,\n l,\n testId,\n}: {\n step: WorkflowAgentStep\n patch: (p: Partial<WorkflowAgentStep>) => void\n ctx: StepContext\n l: StepActionSettingsLabels\n testId: string\n}) {\n const on = !!step.editDocument\n return (\n <div className=\"space-y-2\">\n <label className=\"flex items-start gap-2 text-sm\">\n <Checkbox\n checked={on}\n disabled={!!step.branch}\n onCheckedChange={(v) => patch({ editDocument: v === true ? { step: '' } : undefined })}\n data-testid={`${testId}-edit-document`}\n />\n <span>\n {l.editDocument}\n <span className=\"block text-xs text-muted-foreground\">{l.editDocumentHint}</span>\n </span>\n </label>\n {on && (\n <DocumentRefPicker\n value={step.editDocument}\n onChange={(editDocument) => patch({ editDocument })}\n ctx={ctx}\n l={l}\n testId={`${testId}-edit-document-ref`}\n />\n )}\n </div>\n )\n}\n","/**\n * The choices of a `select` field in the builder: each option's label and tone. An option's value\n * follows its label (`High risk` → `high_risk`) while the option is new; a saved one keeps its\n * value when relabelled (`{value: high, label: \"High — refer to COLP\"}`), as signals test it.\n */\n\nimport { useState } from 'react'\nimport { Plus, X } from 'lucide-react'\nimport { Button, Input, cn } from '@arbidocs/react/ui'\nimport { TONES, TONE_DOT, isTone, type Tone } from '../components/tones'\nimport type { WorkflowFieldOption } from '../agents'\nimport { selectClass } from './StepActionSettings'\n\nexport interface FieldOptionsEditorLabels {\n options: string\n addOption: string\n optionLabel: string\n optionTone: string\n /** The tone picker's \"no tone\" choice. */\n noTone: string\n tones: Record<Tone, string>\n}\n\nexport const DEFAULT_FIELD_OPTIONS_EDITOR_LABELS: FieldOptionsEditorLabels = {\n options: 'Choices',\n addOption: 'Add choice',\n optionLabel: 'Choice',\n optionTone: 'Colour',\n noTone: 'No colour',\n tones: {\n neutral: 'Grey',\n info: 'Blue',\n success: 'Green',\n warning: 'Amber',\n danger: 'Red',\n accent: 'Purple',\n ai: 'AI',\n },\n}\n\n/** A value from a label: lower case, `_` between words, unique among `taken`. */\nexport const optionValue = (label: string, taken: string[]): string => {\n const base =\n label\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '') || 'option'\n let value = base\n let n = 2\n while (taken.includes(value)) value = `${base}_${n++}`\n return value\n}\n\nexport function FieldOptionsEditor({\n options,\n onChange,\n l,\n testId,\n}: {\n options: WorkflowFieldOption[]\n onChange: (options: WorkflowFieldOption[]) => void\n l: FieldOptionsEditorLabels\n testId: string\n}) {\n // Values of the options added here: they follow their label while it is typed.\n const [fresh, setFresh] = useState<ReadonlySet<string>>(() => new Set())\n const others = (i: number) => options.filter((_, j) => j !== i).map((o) => o.value)\n const set = (i: number, p: Partial<WorkflowFieldOption>) => {\n const before = options[i]?.value\n if (before !== undefined && p.value !== undefined && p.value !== before && fresh.has(before))\n setFresh((s) => new Set([...s].filter((v) => v !== before)).add(p.value as string))\n onChange(options.map((o, j) => (j === i ? { ...o, ...p } : o)))\n }\n return (\n <div className=\"space-y-1.5\" data-testid={`${testId}-options`}>\n <p className=\"text-xs text-muted-foreground\">{l.options}</p>\n {options.map((o, i) => (\n <div key={i} className=\"flex items-center gap-2\" data-testid={`${testId}-option-${i}`}>\n <span\n aria-hidden\n className={cn(\n 'size-2 shrink-0 rounded-full',\n o.tone ? TONE_DOT[o.tone] : 'border border-border'\n )}\n />\n <Input\n value={o.label}\n aria-label={l.optionLabel}\n onChange={(e) =>\n set(i, {\n label: e.target.value,\n // A saved option keeps its value: a signal (`equals: high`) may test it.\n value: fresh.has(o.value) ? optionValue(e.target.value, others(i)) : o.value,\n })\n }\n className=\"h-8 min-w-0 flex-1\"\n />\n <select\n aria-label={l.optionTone}\n className={cn(selectClass, 'h-8 w-28 shrink-0')}\n value={o.tone ?? ''}\n onChange={(e) => set(i, { tone: isTone(e.target.value) ? e.target.value : undefined })}\n data-testid={`${testId}-option-${i}-tone`}\n >\n <option value=\"\">{l.noTone}</option>\n {TONES.map((t) => (\n <option key={t} value={t}>\n {l.tones[t]}\n </option>\n ))}\n </select>\n <button\n type=\"button\"\n aria-label={`${o.label} ×`}\n onClick={() => onChange(options.filter((_, j) => j !== i))}\n >\n <X className=\"size-4 text-muted-foreground\" />\n </button>\n </div>\n ))}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n const label = `${l.optionLabel} ${options.length + 1}`\n const value = optionValue(\n label,\n options.map((o) => o.value)\n )\n setFresh((s) => new Set(s).add(value))\n onChange([...options, { value, label }])\n }}\n data-testid={`${testId}-add-option`}\n >\n <Plus className=\"size-4\" /> {l.addOption}\n </Button>\n </div>\n )\n}\n","/**\n * The designer's side panel: the selected step's settings, or the workflow's own when nothing is\n * selected. Every edit goes through the pure operations in `./edit`.\n */\n\nimport { Plus, Trash2, X } from 'lucide-react'\nimport { Button, Checkbox, Input, Textarea, cn } from '@arbidocs/react/ui'\nimport {\n canAssign,\n runFields,\n stepDependencies,\n upstreamSteps,\n workflowSteps,\n type WorkflowAgentStep,\n type WorkflowDefinition,\n type WorkflowField,\n type WorkflowFieldType,\n type WorkflowStep,\n} from '../agents'\nimport { disconnectSteps, removeStep, renameInput, updateStep } from './edit'\nimport { SignalsEditor, type SignalsEditorLabels } from './SignalsEditor'\nimport {\n DEFAULT_FIELD_OPTIONS_EDITOR_LABELS,\n FieldOptionsEditor,\n type FieldOptionsEditorLabels,\n} from './FieldOptionsEditor'\nimport {\n AssigneeSettings,\n DEFAULT_STEP_ACTION_SETTINGS_LABELS,\n EditDocumentSettings,\n EmailDraftSettings,\n Field,\n SignSettings,\n TabularReviewSettings,\n selectClass,\n type StepActionSettingsLabels,\n type StepContext,\n type StepInspectorOption,\n} from './StepActionSettings'\n\nexport type { StepInspectorOption } from './StepActionSettings'\n\nexport interface StepInspectorLabels {\n workflow: string\n title: string\n description: string\n waitsFor: string\n startsWithRun: string\n fields: string\n addField: string\n fieldLabel: string\n fieldType: string\n required: string\n runs: string\n /** The run picker before anything is chosen. */\n chooseRun: string\n ownPrompt: string\n prompt: string\n promptHint: string\n inputFor: string\n /** Under a skill input no run field matched; `{fields}` lists the codes there are. */\n inputHint: string\n /** The same when the run has no fields yet. */\n inputHintNoFields: string\n thread: string\n threadMain: string\n threadBranch: string\n output: string\n outputAnswer: string\n outputArtifact: string\n uploadRequired: string\n hint: string\n instructions: string\n instructionsHint: string\n /** A review's fields: what the approver fills in. */\n reviewFields: string\n reviewFieldsHint: string\n deleteStep: string\n}\n\nexport const DEFAULT_STEP_INSPECTOR_LABELS: StepInspectorLabels = {\n workflow: 'Workflow',\n title: 'Title',\n description: 'Description',\n waitsFor: 'Waits for',\n startsWithRun: 'Starts with the run',\n fields: 'Fields',\n addField: 'Add field',\n fieldLabel: 'Label',\n fieldType: 'Type',\n required: 'Required',\n runs: 'Runs',\n chooseRun: 'Choose a skill or write an instruction…',\n ownPrompt: 'Its own instruction',\n prompt: 'Instruction',\n promptHint: 'Use {{field}} for an input and {{steps.<id>}} for an earlier step’s answer.',\n inputFor: 'Input',\n inputHint: 'Type a value, or use a field: {fields}',\n inputHintNoFields: 'Type a value, or add a form field to fill it from.',\n thread: 'Where it runs',\n threadMain: 'In the run’s thread (sees the conversation so far)',\n threadBranch: 'On a branch (delivers only its result to the thread)',\n output: 'Shows',\n outputAnswer: 'The answer',\n outputArtifact: 'A drafted document',\n uploadRequired: 'Files are required',\n hint: 'Hint',\n instructions: 'What to review',\n instructionsHint: 'Shown on the review task; {{field}} and {{steps.<id>}} work here.',\n reviewFields: 'Filled in when approving',\n reviewFieldsHint: 'E.g. a rating or a comment; the answers join the run’s inputs.',\n deleteStep: 'Delete step',\n}\n\nconst FIELD_TYPES: WorkflowFieldType[] = [\n 'text',\n 'longtext',\n 'boolean',\n 'select',\n 'number',\n 'date',\n 'scope',\n 'person',\n]\n\nexport interface StepInspectorProps {\n workflow: WorkflowDefinition\n stepId: string | null\n onChange: (workflow: WorkflowDefinition) => void\n /** Deselect (after a delete). */\n onSelect?: (stepId: string | null) => void\n /** What an agent step can run: skills and single-run workflows. */\n workflows?: WorkflowDefinition[]\n /** The workspace's members: who a step is for, who signs. */\n people?: StepInspectorOption[]\n /** The workspace's labels: a tabular review's columns. */\n tags?: StepInspectorOption[]\n /** The workspace's documents: what a step names directly. */\n documents?: StepInspectorOption[]\n labels?: Partial<StepInspectorLabels>\n /** The assignee and action settings' wording. */\n actionLabels?: Partial<StepActionSettingsLabels>\n /** The \"When done, signal…\" editor's wording. */\n signalLabels?: Partial<SignalsEditorLabels>\n /** A select field's choices editor wording. */\n optionLabels?: Partial<FieldOptionsEditorLabels>\n testId?: string\n}\n\nconst fieldName = (label: string, taken: string[]): string => {\n const base =\n label\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '')\n .replace(/^[^a-z]+/, '') || 'field'\n let name = base\n let n = 2\n while (taken.includes(name)) name = `${base}_${n++}`\n return name\n}\n\nexport function StepInspector({\n workflow,\n stepId,\n onChange,\n onSelect,\n workflows = [],\n people = [],\n tags = [],\n documents = [],\n labels,\n actionLabels,\n signalLabels,\n optionLabels,\n testId = 'step-inspector',\n}: StepInspectorProps) {\n const l = { ...DEFAULT_STEP_INSPECTOR_LABELS, ...labels }\n const ol = { ...DEFAULT_FIELD_OPTIONS_EDITOR_LABELS, ...optionLabels }\n const steps = workflowSteps(workflow)\n const step = steps.find((s) => s.id === stepId)\n const run = workflow.run.kind === 'steps' ? workflow.run : undefined\n\n if (!step || !run) {\n return (\n <div className=\"space-y-4\" data-testid={`${testId}-workflow`}>\n <p className=\"text-sm font-semibold\">{l.workflow}</p>\n <Field label={l.title}>\n <Input\n value={workflow.title}\n onChange={(e) => onChange({ ...workflow, title: e.target.value })}\n data-testid={`${testId}-workflow-title`}\n />\n </Field>\n <Field label={l.description}>\n <Textarea\n value={workflow.description}\n rows={2}\n onChange={(e) => onChange({ ...workflow, description: e.target.value })}\n />\n </Field>\n </div>\n )\n }\n\n const patch = (p: Partial<WorkflowStep>) => onChange(updateStep(workflow, step.id, p))\n const al = { ...DEFAULT_STEP_ACTION_SETTINGS_LABELS, ...actionLabels }\n const ctx: StepContext = {\n earlier: upstreamSteps(steps, step.id),\n fields: runFields(workflow),\n people,\n tags,\n documents,\n }\n // Field codes other steps use: a new field's code never collides with them.\n const takenBy = (id: string) =>\n steps\n .flatMap((s) =>\n s.id === id\n ? []\n : s.kind === 'form'\n ? s.inputs\n : s.kind === 'review'\n ? (s.fields ?? [])\n : []\n )\n .map((f) => f.name)\n /** New fields of this step: a code that followed its label renames what reads it. */\n const setFields = (before: WorkflowField[], after: WorkflowField[], key: 'inputs' | 'fields') => {\n const renamed = before.flatMap((f, i) =>\n after[i] && after[i].name !== f.name ? [[f.name, after[i].name] as const] : []\n )\n onChange(\n renamed.reduce(\n (w, [from, to]) => renameInput(w, from, to),\n updateStep(workflow, step.id, {\n [key]: key === 'fields' && !after.length ? undefined : after,\n } as Partial<WorkflowStep>)\n )\n )\n }\n const deps = stepDependencies(steps, step.id)\n const titleOf = (id: string) => steps.find((s) => s.id === id)?.title ?? id\n\n return (\n <div className=\"space-y-4\" data-testid={`${testId}-step`}>\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"truncate text-sm font-semibold\">{step.title}</p>\n <code className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[11px] text-muted-foreground\">\n {step.id}\n </code>\n </div>\n <Field label={l.title}>\n <Input\n value={step.title}\n onChange={(e) => patch({ title: e.target.value })}\n data-testid={`${testId}-title`}\n />\n </Field>\n <Field label={l.description}>\n <Textarea\n value={step.description ?? ''}\n rows={2}\n onChange={(e) => patch({ description: e.target.value || undefined })}\n />\n </Field>\n <Field label={l.waitsFor}>\n <div className=\"flex flex-wrap gap-1.5\" data-testid={`${testId}-waits-for`}>\n {deps.length === 0 && (\n <span className=\"text-xs text-muted-foreground\">{l.startsWithRun}</span>\n )}\n {deps.map((d) => (\n <span\n key={d}\n className=\"inline-flex items-center gap-1 rounded-full border border-border px-2 py-0.5 text-xs\"\n >\n {titleOf(d)}\n <button\n type=\"button\"\n aria-label={`${titleOf(d)} ×`}\n onClick={() => onChange(disconnectSteps(workflow, d, step.id))}\n >\n <X className=\"size-3\" />\n </button>\n </span>\n ))}\n </div>\n </Field>\n\n {step.kind === 'form' && (\n <FormFields\n fields={step.inputs}\n taken={takenBy(step.id)}\n // A field whose code followed its label: the steps reading it follow too.\n onChange={(inputs) => setFields(step.inputs, inputs, 'inputs')}\n l={l}\n optionLabels={ol}\n testId={testId}\n />\n )}\n\n {step.kind === 'upload' && (\n <>\n <label className=\"flex items-center gap-2 text-sm\">\n <Checkbox\n checked={!!step.required}\n onCheckedChange={(v) => patch({ required: v === true || undefined })}\n />\n {l.uploadRequired}\n </label>\n <Field label={l.hint}>\n <Input\n value={step.hint ?? ''}\n onChange={(e) => patch({ hint: e.target.value || undefined })}\n />\n </Field>\n </>\n )}\n\n {step.kind === 'agent' && (\n <>\n <AgentSettings\n step={step}\n workflows={workflows}\n fields={runFields(workflow).map((f) => f.name)}\n patch={patch}\n l={l}\n testId={testId}\n />\n <EditDocumentSettings step={step} patch={patch} ctx={ctx} l={al} testId={testId} />\n </>\n )}\n\n {step.kind === 'review' && (\n <>\n <Field label={l.instructions} hint={l.instructionsHint}>\n <Textarea\n value={step.instructions ?? ''}\n rows={4}\n onChange={(e) => patch({ instructions: e.target.value || undefined })}\n data-testid={`${testId}-instructions`}\n />\n </Field>\n <FormFields\n fields={step.fields ?? []}\n taken={takenBy(step.id)}\n onChange={(fields) => setFields(step.fields ?? [], fields, 'fields')}\n l={{ ...l, fields: l.reviewFields }}\n optionLabels={ol}\n hint={l.reviewFieldsHint}\n testId={`${testId}-review`}\n />\n </>\n )}\n\n {step.kind === 'action' && step.action.type === 'sign' && (\n <SignSettings\n action={step.action}\n onChange={(action) => patch({ action })}\n ctx={ctx}\n l={al}\n testId={`${testId}-sign`}\n />\n )}\n {step.kind === 'action' && step.action.type === 'email_draft' && (\n <EmailDraftSettings\n action={step.action}\n onChange={(action) => patch({ action })}\n ctx={ctx}\n l={al}\n testId={`${testId}-email`}\n />\n )}\n {step.kind === 'action' && step.action.type === 'tabular_review' && (\n <TabularReviewSettings\n action={step.action}\n onChange={(action) => patch({ action })}\n ctx={ctx}\n l={al}\n testId={`${testId}-review-grid`}\n />\n )}\n\n {canAssign(step) && (\n <AssigneeSettings step={step} patch={patch} ctx={ctx} l={al} testId={testId} />\n )}\n\n <SignalsEditor\n step={step}\n onChange={(signals) => patch({ signals })}\n labels={signalLabels}\n testId={`${testId}-signals`}\n />\n\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-destructive\"\n onClick={() => {\n onChange(removeStep(workflow, step.id))\n onSelect?.(null)\n }}\n data-testid={`${testId}-delete`}\n >\n <Trash2 className=\"size-4\" /> {l.deleteStep}\n </Button>\n </div>\n )\n}\n\n/** The fields editor: a form's fields, a review's fields. */\nexport function FormFields({\n fields,\n taken,\n onChange,\n l,\n optionLabels = DEFAULT_FIELD_OPTIONS_EDITOR_LABELS,\n hint,\n testId,\n}: {\n fields: WorkflowField[]\n /** Codes used by other steps' fields: a field's code never collides with them. */\n taken: string[]\n onChange: (fields: WorkflowField[]) => void\n l: Pick<StepInspectorLabels, 'fields' | 'fieldLabel' | 'fieldType' | 'required' | 'addField'>\n optionLabels?: FieldOptionsEditorLabels\n hint?: string\n testId: string\n}) {\n const set = (i: number, p: Partial<WorkflowField>) =>\n onChange(fields.map((f, j) => (j === i ? { ...f, ...p } : f)))\n return (\n <Field label={l.fields} hint={hint}>\n <div className=\"space-y-2\" data-testid={`${testId}-fields`}>\n {fields.map((f, i) => (\n <div key={i} className=\"space-y-1.5 rounded-md border border-border p-2\">\n <div className=\"flex items-center gap-2\">\n <Input\n value={f.label}\n aria-label={l.fieldLabel}\n // The field's code follows its label, so `{{client}}` reads the \"Client\" field.\n onChange={(e) =>\n set(i, {\n label: e.target.value,\n name: fieldName(e.target.value, [\n ...taken,\n ...fields.filter((_, j) => j !== i).map((x) => x.name),\n ]),\n })\n }\n className=\"h-8\"\n />\n <button\n type=\"button\"\n aria-label={`${f.label} ×`}\n onClick={() => onChange(fields.filter((_, j) => j !== i))}\n >\n <X className=\"size-4 text-muted-foreground\" />\n </button>\n </div>\n <div className=\"flex items-center gap-2\">\n <select\n aria-label={l.fieldType}\n className={cn(selectClass, 'h-8')}\n value={f.type}\n onChange={(e) => set(i, { type: e.target.value as WorkflowFieldType })}\n >\n {/* A type set elsewhere (a select from a skill file) is kept and shown. */}\n {(FIELD_TYPES.includes(f.type) ? FIELD_TYPES : [...FIELD_TYPES, f.type]).map(\n (t) => (\n <option key={t} value={t}>\n {t}\n </option>\n )\n )}\n </select>\n <label className=\"flex shrink-0 items-center gap-1.5 text-xs\">\n <Checkbox\n checked={!!f.required}\n onCheckedChange={(v) => set(i, { required: v === true || undefined })}\n />\n {l.required}\n </label>\n <code className=\"shrink-0 text-[11px] text-muted-foreground\">{`{{${f.name}}}`}</code>\n </div>\n {f.type === 'select' && (\n <FieldOptionsEditor\n options={f.options ?? []}\n onChange={(options) => set(i, { options })}\n l={optionLabels}\n testId={`${testId}-field-${i}`}\n />\n )}\n </div>\n ))}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() =>\n onChange([\n ...fields,\n {\n name: fieldName('Field', [...taken, ...fields.map((f) => f.name)]),\n type: 'text',\n label: 'Field',\n },\n ])\n }\n data-testid={`${testId}-add-field`}\n >\n <Plus className=\"size-4\" /> {l.addField}\n </Button>\n </div>\n </Field>\n )\n}\n\n/** The run picker's value for \"its own instruction\" (a skill's value is its id). */\nconst OWN_PROMPT = '__prompt'\n\n/**\n * A skill's inputs when it is picked: each one named like a field of the run reads that field\n * (`{{client}}`); the others start empty. What was typed before is kept.\n */\nfunction prefillSkillInputs(\n target: WorkflowDefinition | undefined,\n fields: string[],\n current: Record<string, string> = {}\n): Record<string, string> {\n const out: Record<string, string> = {}\n for (const f of target?.inputs ?? []) {\n const typed = current[f.name]\n if (typed) out[f.name] = typed\n else if (fields.includes(f.name)) out[f.name] = `{{${f.name}}}`\n }\n return out\n}\n\nfunction AgentSettings({\n step,\n workflows,\n fields,\n patch,\n l,\n testId,\n}: {\n step: WorkflowAgentStep\n workflows: WorkflowDefinition[]\n /** The codes of the run's fields, what a skill's inputs can read. */\n fields: string[]\n patch: (p: Partial<WorkflowAgentStep>) => void\n l: StepInspectorLabels\n testId: string\n}) {\n const target = step.workflow ? workflows.find((w) => w.id === step.workflow) : undefined\n const value = step.workflow ?? (step.run ? OWN_PROMPT : '')\n const codes = fields.map((f) => `{{${f}}}`).join(', ')\n return (\n <>\n <Field label={l.runs}>\n <select\n className={selectClass}\n value={value}\n onChange={(e) => {\n const id = e.target.value\n if (id === OWN_PROMPT)\n patch({\n workflow: undefined,\n with: undefined,\n run: { kind: 'prompt', promptTemplate: '' },\n })\n else if (id)\n patch({\n workflow: id,\n run: undefined,\n with: prefillSkillInputs(\n workflows.find((w) => w.id === id),\n fields,\n step.with\n ),\n })\n }}\n data-testid={`${testId}-runs`}\n >\n {!value && (\n <option value=\"\" disabled>\n {l.chooseRun}\n </option>\n )}\n <option value={OWN_PROMPT}>{l.ownPrompt}</option>\n {workflows.map((w) => (\n <option key={w.id} value={w.id}>\n {w.title}\n </option>\n ))}\n {step.workflow && !target && <option value={step.workflow}>{step.workflow}</option>}\n </select>\n </Field>\n\n {step.workflow ? (\n (target?.inputs ?? []).map((f) => (\n <Field\n key={f.name}\n label={`${l.inputFor}: ${f.label}`}\n hint={\n step.with?.[f.name]\n ? undefined\n : codes\n ? l.inputHint.replace('{fields}', codes)\n : l.inputHintNoFields\n }\n >\n <Input\n value={step.with?.[f.name] ?? ''}\n onChange={(e) => patch({ with: { ...step.with, [f.name]: e.target.value } })}\n data-testid={`${testId}-with-${f.name}`}\n />\n </Field>\n ))\n ) : step.run?.kind === 'prompt' ? (\n <Field label={l.prompt} hint={l.promptHint}>\n <Textarea\n value={step.run.promptTemplate}\n rows={5}\n onChange={(e) => patch({ run: { kind: 'prompt', promptTemplate: e.target.value } })}\n data-testid={`${testId}-prompt`}\n />\n </Field>\n ) : null}\n\n <Field label={l.thread}>\n <select\n className={selectClass}\n value={step.branch ? 'branch' : 'main'}\n onChange={(e) => patch({ branch: e.target.value === 'branch' || undefined })}\n data-testid={`${testId}-thread`}\n >\n <option value=\"main\">{l.threadMain}</option>\n <option value=\"branch\">{l.threadBranch}</option>\n </select>\n </Field>\n <Field label={l.output}>\n <select\n className={selectClass}\n value={step.output ?? 'answer'}\n onChange={(e) =>\n patch({ output: e.target.value === 'artifact' ? 'artifact' : undefined })\n }\n >\n <option value=\"answer\">{l.outputAnswer}</option>\n <option value=\"artifact\">{l.outputArtifact}</option>\n </select>\n </Field>\n </>\n )\n}\n","/**\n * What starts a workflow and who runs it: the builder's trigger node, and the mapping between a\n * builder's value (steps + trigger) and a saved workflow (`CreateWorkflowRequest` /\n * `WorkflowResponse`). The steps travel in the workflow's plan (`toPlanSteps`); every firing creates\n * a work thread that runs them.\n */\n\nimport type { components } from '@arbidocs/client'\nimport {\n fromPlanSteps,\n layoutFromPlanSteps,\n toPlanSteps,\n type StepComposeOptions,\n type WorkflowDefinition,\n} from '../agents'\nimport { isoToLocalInput, localInputToIso, workflowWhen } from '../agents'\n\ntype Schemas = components['schemas']\ntype CreateWorkflowRequest = Schemas['CreateWorkflowRequest']\ntype UpdateWorkflowRequest = Schemas['UpdateWorkflowRequest']\ntype WorkflowResponse = Schemas['WorkflowResponse']\n\n/** The event a step's signal raises (`TaskPlanStep.signals`): \"When a step signals\". */\nexport const WORKFLOW_SIGNAL_EVENT = 'workflow_signal'\n\n/**\n * When a workflow starts: `manual` when someone presses Run, `once` at a date, `repeat` on a\n * schedule, `event` when something happens in the workspace, `task` when another task is done.\n */\nexport type WorkflowStart = 'manual' | 'once' | 'repeat' | 'event' | 'task'\n\nexport interface WorkflowTrigger {\n start: WorkflowStart\n /** `once`: a `datetime-local` value. */\n runAt: string\n /** `repeat`: an RFC 5545 rule. */\n rrule: string\n timezone: string\n /** `event`: a notification type. */\n eventKind: string\n /** `event` on `workflow_signal`: the signal name it starts on (its `event_filter.signal`). */\n signal: string\n /** `event` on any other kind: the saved equality filter, kept as it was. */\n eventFilter?: Record<string, string | number | boolean> | null\n /** `task`: the task (`con-…`) it waits on. */\n afterTaskId: string\n /** The agent that runs it (`agt-…`); `''` = the owner's own assistant. */\n agentId: string\n /** Unattended starts: keep standing access, or ask the owner each run. */\n access: 'ask_each_run' | 'standing'\n}\n\nexport const DEFAULT_WORKFLOW_TRIGGER: WorkflowTrigger = {\n start: 'manual',\n runAt: '',\n rrule: '',\n timezone: typeof Intl !== 'undefined' ? Intl.DateTimeFormat().resolvedOptions().timeZone : 'UTC',\n eventKind: '',\n signal: '',\n afterTaskId: '',\n agentId: '',\n access: 'ask_each_run',\n}\n\n/** A builder's whole value: the steps (a stepped workflow) and what starts it. */\nexport interface WorkflowBuilderValue {\n workflow: WorkflowDefinition\n trigger: WorkflowTrigger\n}\n\n/** What is missing before the trigger can be saved; `null` when it can. */\nexport function triggerProblem(\n trigger: WorkflowTrigger\n): 'runAt' | 'rrule' | 'event' | 'signal' | 'task' | null {\n if (trigger.start === 'once' && !trigger.runAt) return 'runAt'\n if (trigger.start === 'repeat' && !trigger.rrule.trim()) return 'rrule'\n if (trigger.start === 'event' && !trigger.eventKind.trim()) return 'event'\n if (isSignalTrigger(trigger) && !trigger.signal.trim()) return 'signal'\n if (trigger.start === 'task' && !trigger.afterTaskId) return 'task'\n return null\n}\n\n/** Does the workflow start when a step (of any workflow) raises a signal? */\nexport const isSignalTrigger = (trigger: WorkflowTrigger): boolean =>\n trigger.start === 'event' && trigger.eventKind.trim() === WORKFLOW_SIGNAL_EVENT\n\nfunction eventFilter(trigger: WorkflowTrigger) {\n if (trigger.start !== 'event') return null\n if (isSignalTrigger(trigger)) return { signal: trigger.signal.trim() }\n return trigger.eventFilter && Object.keys(trigger.eventFilter).length ? trigger.eventFilter : null\n}\n\nfunction triggerFields(trigger: WorkflowTrigger, clearOthers: boolean) {\n const none = clearOthers ? null : undefined\n const filter = eventFilter(trigger)\n return {\n timezone: trigger.timezone,\n rrule: trigger.start === 'repeat' ? trigger.rrule.trim() : none,\n run_at: trigger.start === 'once' ? localInputToIso(trigger.runAt) : none,\n event_kind: trigger.start === 'event' ? trigger.eventKind.trim() : none,\n // A step signal is `workflow_signal` narrowed to one signal name.\n event_filter: filter ?? none,\n after_conversation_ext_id: trigger.start === 'task' ? trigger.afterTaskId : none,\n on_demand: trigger.start === 'manual',\n }\n}\n\nconst authMode = (trigger: WorkflowTrigger) =>\n trigger.start === 'manual'\n ? ('run_now_temp' as const)\n : trigger.access === 'standing'\n ? ('scheduled_permanent' as const)\n : ('scheduled_require_auth' as const)\n\nconst withoutUndefined = <T extends object>(o: T): T =>\n Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined)) as T\n\nfunction plan(value: WorkflowBuilderValue, options: StepComposeOptions) {\n return {\n goal: value.workflow.description,\n criteria: [],\n max_passes: 3,\n documents: [],\n steps: toPlanSteps(value.workflow, options),\n }\n}\n\n/** A new saved workflow: its steps in the plan (prompts keep `{{field}}` for each run to fill). */\nexport function builderToWorkflowRequest(\n value: WorkflowBuilderValue,\n workspaceId: string,\n options: StepComposeOptions = {}\n): CreateWorkflowRequest {\n return withoutUndefined({\n workspace_ext_id: workspaceId,\n name: value.workflow.title,\n description: value.workflow.description,\n active: true,\n shared: true,\n ...triggerFields(value.trigger, false),\n prompt: '',\n skill_ref: null,\n skill_inputs: null,\n agent_ext_id: value.trigger.agentId || null,\n auth_mode: authMode(value.trigger),\n plan: plan(value, options),\n }) as CreateWorkflowRequest\n}\n\n/** An edit of a saved workflow: the steps and the trigger as the builder now has them. */\nexport function builderToWorkflowUpdate(\n value: WorkflowBuilderValue,\n options: StepComposeOptions = {}\n): UpdateWorkflowRequest {\n return withoutUndefined({\n name: value.workflow.title,\n description: value.workflow.description,\n ...triggerFields(value.trigger, true),\n // The steps are what runs (a classic automation's single prompt or skill becomes its one step).\n prompt: '',\n skill_ref: null,\n skill_inputs: null,\n agent_ext_id: value.trigger.agentId || null,\n auth_mode: authMode(value.trigger),\n plan: plan(value, options),\n }) as UpdateWorkflowRequest\n}\n\n/**\n * A saved workflow back in the builder. A classic automation (one prompt or one skill, no steps)\n * opens as a workflow of that one agent step; saving it keeps it as steps.\n */\nexport function workflowRecordToBuilder(record: WorkflowResponse): WorkflowBuilderValue {\n const planned = (record.plan?.steps ?? []) as NonNullable<Parameters<typeof fromPlanSteps>[0]>\n const steps = planned.length\n ? fromPlanSteps(planned)\n : record.prompt || record.skill_ref\n ? [\n {\n id: 'work',\n kind: 'agent' as const,\n title: record.name,\n ...(record.skill_ref\n ? { workflow: record.skill_ref }\n : { run: { kind: 'prompt' as const, promptTemplate: record.prompt } }),\n },\n ]\n : []\n const when = workflowWhen(record)\n return {\n workflow: {\n id: record.external_id,\n title: record.name,\n description: record.description ?? '',\n inputs: [],\n landing: 'chat',\n schedulable: false,\n run: { kind: 'steps', steps, layout: layoutFromPlanSteps(planned ?? []) },\n },\n trigger: {\n ...DEFAULT_WORKFLOW_TRIGGER,\n start: when === 'now' ? 'manual' : when,\n runAt: isoToLocalInput(record.run_at),\n rrule: record.rrule ?? '',\n timezone: record.timezone || DEFAULT_WORKFLOW_TRIGGER.timezone,\n eventKind: record.event_kind ?? '',\n signal:\n record.event_kind === WORKFLOW_SIGNAL_EVENT &&\n typeof record.event_filter?.signal === 'string'\n ? record.event_filter.signal\n : '',\n eventFilter:\n record.event_kind && record.event_kind !== WORKFLOW_SIGNAL_EVENT && record.event_filter\n ? (record.event_filter as WorkflowTrigger['eventFilter'])\n : undefined,\n afterTaskId: record.after_conversation_ext_id ?? '',\n agentId: record.agent_ext_id ?? '',\n access: record.auth_mode === 'scheduled_permanent' ? 'standing' : 'ask_each_run',\n },\n }\n}\n\n/** A signal a firm's workflow declares, as the \"When a step signals\" picker offers it. */\nexport interface DeclaredSignal {\n value: string\n /** Where it is raised: `<workflow> › <step>` (the first place, when several raise it). */\n label: string\n}\n\n/**\n * Every signal the given workflows' steps declare (saved records, plus the one being built), each\n * name once, in the order first seen: the picker's options. Free text stays allowed.\n */\nexport function declaredSignals(\n records: ReadonlyArray<Pick<WorkflowResponse, 'name' | 'plan'>>,\n current?: WorkflowDefinition\n): DeclaredSignal[] {\n const out = new Map<string, DeclaredSignal>()\n const add = (\n workflow: string,\n steps: ReadonlyArray<{ title: string; signals?: Array<{ name: string }> | null }>\n ) => {\n for (const step of steps)\n for (const signal of step.signals ?? [])\n if (signal.name && !out.has(signal.name))\n out.set(signal.name, { value: signal.name, label: `${workflow} › ${step.title}` })\n }\n for (const record of records)\n add(record.name, (record.plan?.steps ?? []) as NonNullable<Parameters<typeof fromPlanSteps>[0]>)\n if (current?.run.kind === 'steps') add(current.title, current.run.steps)\n return [...out.values()]\n}\n","/**\n * The builder's trigger settings: what starts the workflow (someone pressing Run, a date, a\n * schedule, something happening in the workspace, another task being done), who runs its agent\n * steps, and, for a start nobody is there for, how the agent gets access.\n */\n\nimport { Input, Label, cn } from '@arbidocs/react/ui'\nimport { AgentSelect, RecurrenceBuilder, describeRRule, type AgentOption } from '../agents'\nimport {\n WORKFLOW_SIGNAL_EVENT,\n isSignalTrigger,\n type DeclaredSignal,\n type WorkflowStart,\n type WorkflowTrigger,\n} from './trigger'\n\nexport interface TriggerInspectorLabels {\n heading: string\n start: string\n starts: Record<WorkflowStart, string>\n runAt: string\n event: string\n eventPlaceholder: string\n /** The \"When something happens\" option for another workflow's step signal. */\n stepSignals: string\n signal: string\n signalPlaceholder: string\n signalHint: string\n /** The trigger node's line; `{signal}` is replaced. */\n signalSummary: string\n afterTask: string\n afterTaskPlaceholder: string\n agent: string\n access: string\n accessAsk: string\n accessStanding: string\n}\n\nexport const DEFAULT_TRIGGER_INSPECTOR_LABELS: TriggerInspectorLabels = {\n heading: 'Start',\n start: 'Starts',\n starts: {\n manual: 'When someone runs it',\n once: 'Once, at a time',\n repeat: 'On a schedule',\n event: 'When something happens',\n task: 'When a task is done',\n },\n runAt: 'When',\n event: 'Event',\n eventPlaceholder: 'Pick an event',\n stepSignals: 'When a step signals',\n signal: 'Signal',\n signalPlaceholder: 'e.g. risk-high',\n signalHint:\n 'Starts as its own thread, linked to the thread whose step raised it, with that run’s inputs.',\n signalSummary: 'When a step signals “{signal}”',\n afterTask: 'After this task',\n afterTaskPlaceholder: 'Pick a task',\n agent: 'Runs as',\n access: 'Access when nobody is there',\n accessAsk: 'Ask me each run',\n accessStanding: 'Keep access',\n}\n\n/** One line for the trigger node: what starts the workflow. */\nexport function triggerSummary(\n trigger: WorkflowTrigger,\n options: {\n labels?: Partial<TriggerInspectorLabels>\n eventLabel?: (kind: string) => string | undefined\n taskLabel?: (id: string) => string | undefined\n } = {}\n): string {\n const l = { ...DEFAULT_TRIGGER_INSPECTOR_LABELS, ...options.labels }\n switch (trigger.start) {\n case 'once':\n return trigger.runAt ? new Date(trigger.runAt).toLocaleString() : l.starts.once\n case 'repeat':\n return trigger.rrule ? describeRRule(trigger.rrule) : l.starts.repeat\n case 'event':\n if (isSignalTrigger(trigger))\n return trigger.signal ? l.signalSummary.replace('{signal}', trigger.signal) : l.stepSignals\n return (\n (trigger.eventKind && options.eventLabel?.(trigger.eventKind)) ||\n trigger.eventKind ||\n l.starts.event\n )\n case 'task':\n return (trigger.afterTaskId && options.taskLabel?.(trigger.afterTaskId)) || l.starts.task\n default:\n return l.starts.manual\n }\n}\n\nexport interface TriggerInspectorProps {\n trigger: WorkflowTrigger\n onChange: (trigger: WorkflowTrigger) => void\n agents?: AgentOption[]\n /** The workspace events a workflow can start on. */\n eventKinds?: Array<{ value: string; label: string }>\n /** Tasks a workflow can wait on. */\n tasks?: Array<{ value: string; label: string }>\n /** The signals the firm's workflows declare (`declaredSignals`): the signal picker's options. */\n signals?: DeclaredSignal[]\n labels?: Partial<TriggerInspectorLabels>\n testId?: string\n}\n\nconst selectClass =\n 'flex h-9 w-full rounded-md border border-input bg-background px-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring'\n\nconst STARTS: WorkflowStart[] = ['manual', 'once', 'repeat', 'event', 'task']\n\nexport function TriggerInspector({\n trigger,\n onChange,\n agents = [],\n eventKinds = [],\n tasks = [],\n signals = [],\n labels,\n testId = 'trigger-inspector',\n}: TriggerInspectorProps) {\n const l = { ...DEFAULT_TRIGGER_INSPECTOR_LABELS, ...labels }\n const set = (patch: Partial<WorkflowTrigger>) => onChange({ ...trigger, ...patch })\n // A step signal is always offered, whatever events the host lists.\n const events = eventKinds.some((k) => k.value === WORKFLOW_SIGNAL_EVENT)\n ? eventKinds\n : [...eventKinds, { value: WORKFLOW_SIGNAL_EVENT, label: l.stepSignals }]\n return (\n <div className=\"space-y-4\" data-testid={testId}>\n <p className=\"text-sm font-semibold\">{l.heading}</p>\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.start}</Label>\n <div className=\"grid gap-1.5\" role=\"radiogroup\" aria-label={l.start}>\n {STARTS.map((start) => (\n <button\n key={start}\n type=\"button\"\n role=\"radio\"\n aria-checked={trigger.start === start}\n onClick={() => set({ start })}\n className={cn(\n 'rounded-md border px-3 py-2 text-left text-sm transition-colors',\n trigger.start === start\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border hover:bg-muted/50'\n )}\n data-testid={`${testId}-start-${start}`}\n >\n {l.starts[start]}\n </button>\n ))}\n </div>\n </div>\n\n {trigger.start === 'once' && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.runAt}</Label>\n <Input\n type=\"datetime-local\"\n value={trigger.runAt}\n onChange={(e) => set({ runAt: e.target.value })}\n data-testid={`${testId}-run-at`}\n />\n </div>\n )}\n {trigger.start === 'repeat' && (\n <RecurrenceBuilder rrule={trigger.rrule} onChange={(rrule) => set({ rrule })} />\n )}\n {trigger.start === 'event' && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.event}</Label>\n <select\n className={selectClass}\n value={trigger.eventKind}\n onChange={(e) => set({ eventKind: e.target.value, eventFilter: undefined })}\n data-testid={`${testId}-event`}\n >\n <option value=\"\">{l.eventPlaceholder}</option>\n {events.map((k) => (\n <option key={k.value} value={k.value}>\n {k.label}\n </option>\n ))}\n </select>\n </div>\n )}\n {isSignalTrigger(trigger) && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\" htmlFor={`${testId}-signal`}>\n {l.signal}\n </Label>\n {/* The firm's declared signals, or any name typed in (a workflow not built yet). */}\n <Input\n id={`${testId}-signal`}\n list={`${testId}-signal-options`}\n value={trigger.signal}\n placeholder={l.signalPlaceholder}\n onChange={(e) => set({ signal: e.target.value.trim().toLowerCase() })}\n data-testid={`${testId}-signal`}\n />\n <datalist id={`${testId}-signal-options`}>\n {signals.map((s) => (\n <option key={s.value} value={s.value}>\n {s.label}\n </option>\n ))}\n </datalist>\n <p className=\"text-xs text-muted-foreground\">{l.signalHint}</p>\n </div>\n )}\n {trigger.start === 'task' && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.afterTask}</Label>\n <select\n className={selectClass}\n value={trigger.afterTaskId}\n onChange={(e) => set({ afterTaskId: e.target.value })}\n data-testid={`${testId}-after-task`}\n >\n <option value=\"\">{l.afterTaskPlaceholder}</option>\n {tasks.map((t) => (\n <option key={t.value} value={t.value}>\n {t.label}\n </option>\n ))}\n </select>\n </div>\n )}\n\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.agent}</Label>\n <AgentSelect\n agents={agents}\n value={trigger.agentId}\n onValueChange={(agentId) => set({ agentId })}\n hideLabel\n testId={`${testId}-agent`}\n />\n </div>\n {trigger.start !== 'manual' && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">{l.access}</Label>\n <select\n className={selectClass}\n value={trigger.access}\n onChange={(e) =>\n set({ access: e.target.value === 'standing' ? 'standing' : 'ask_each_run' })\n }\n data-testid={`${testId}-access`}\n >\n <option value=\"ask_each_run\">{l.accessAsk}</option>\n <option value=\"standing\">{l.accessStanding}</option>\n </select>\n </div>\n )}\n </div>\n )\n}\n","/**\n * Where the canvas looks: pure geometry over the nodes' positions and sizes, so the opening view,\n * the fit button and \"bring this card into view\" agree, and can be tested without a browser.\n */\n\n/** The smallest zoom a flow is fitted at: cards stay readable; a wider flow is panned. */\nexport const READABLE_ZOOM = 0.7\n\nexport interface ViewNode {\n id: string\n position: { x: number; y: number }\n measured?: { width?: number; height?: number }\n}\n\nexport interface Viewport {\n x: number\n y: number\n zoom: number\n}\n\nconst DEFAULT_W = 256\nconst DEFAULT_H = 80\nconst MARGIN = 48\n\nconst sizeOf = (n: ViewNode) => ({\n w: n.measured?.width ?? DEFAULT_W,\n h: n.measured?.height ?? DEFAULT_H,\n})\n\n/**\n * The view when fitting the whole flow would zoom out past reading (`fittedZoom` below\n * `READABLE_ZOOM`): the readable zoom, anchored on `anchor` — the selection, centred in the\n * visible part, or else the start, at the left edge and centred vertically. `null` = the fit\n * stands. Without the anchor among the nodes, the leftmost node is the start.\n */\nexport function readableViewport(\n nodes: ViewNode[],\n fittedZoom: number,\n frame: { width: number; height: number },\n {\n anchor,\n centre = false,\n reserveRight = 0,\n }: { anchor?: string | null; centre?: boolean; reserveRight?: number } = {}\n): Viewport | null {\n if (fittedZoom >= READABLE_ZOOM || !frame.height || nodes.length === 0) return null\n const z = READABLE_ZOOM\n const at =\n nodes.find((n) => n.id === anchor) ??\n nodes.reduce((a, b) => (b.position.x < a.position.x ? b : a))\n const { w, h } = sizeOf(at)\n const y = frame.height / 2 - (at.position.y + h / 2) * z\n if (centre && at.id === anchor) {\n const visible = Math.max(0, frame.width - reserveRight)\n return { x: visible / 2 - (at.position.x + w / 2) * z, y, zoom: z }\n }\n return { x: MARGIN - at.position.x * z, y, zoom: z }\n}\n\n/**\n * The centre (flow coordinates) that brings `node` into the visible part of the frame at the\n * current zoom, or `null` when it is already there (16px clear of the edges and of the panel).\n */\nexport function revealCenter(\n node: ViewNode,\n view: Viewport,\n frame: { width: number; height: number },\n reserveRight = 0\n): { x: number; y: number } | null {\n const { w, h } = sizeOf(node)\n const { x, y, zoom } = view\n const left = node.position.x * zoom + x\n const top = node.position.y * zoom + y\n const right = frame.width - reserveRight\n if (\n left >= 16 &&\n top >= 16 &&\n left + w * zoom <= right - 16 &&\n top + h * zoom <= frame.height - 16\n )\n return null\n return {\n x: node.position.x + w / 2 + reserveRight / 2 / zoom,\n y: node.position.y + h / 2,\n }\n}\n","/**\n * A workflow as a graph on a canvas: its start, then each step a card, each \"waits for\" an edge.\n * A card is drawn on the steps' chevron (`ChevronShape`, as the step bars' segments): its incoming\n * edges meet the notch on its left, its outgoing ones leave from the point on its right.\n * Build by clicking \"+\" on a card (the next step lands beside it), drag to arrange, draw from a\n * card's right handle to another's left to make it wait, select and press Delete to remove.\n * Read-only with live `phases` it shows a run's progress on the same graph.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport {\n Background,\n BackgroundVariant,\n ControlButton,\n Controls,\n Handle,\n MarkerType,\n MiniMap,\n Position,\n ReactFlow,\n applyNodeChanges,\n type Connection,\n type Edge,\n type Node,\n type NodeChange,\n type NodeProps,\n type ReactFlowInstance,\n} from '@xyflow/react'\nimport {\n AlertTriangle,\n Check,\n FilePenLine,\n GitBranch,\n Hourglass,\n Loader2,\n Maximize,\n MinusCircle,\n Plus,\n UserRound,\n Zap,\n} from 'lucide-react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport {\n ChevronShape,\n DEFAULT_STEP_KIND_LABELS,\n STEP_KIND_ICONS,\n stepDependencies,\n workflowSteps,\n type WorkflowDefinition,\n type WorkflowStep,\n type WorkflowStepPhase,\n} from '../agents'\nimport {\n WORKFLOW_STEP_KINDS,\n connectSteps,\n disconnectSteps,\n layoutWithDefaults,\n moveStep,\n removeStep,\n stepKindOf,\n updateStep,\n wouldCycle,\n type WorkflowStepKind,\n} from './edit'\nimport { readableViewport, revealCenter } from './viewport'\n\nexport interface WorkflowCanvasLabels {\n form: string\n upload: string\n agent: string\n review: string\n sign: string\n email_draft: string\n tabular_review: string\n /** An agent step that edits a Word document with tracked changes. */\n redline: string\n /** An agent step that runs on a branch and delivers its result to the thread. */\n branch: string\n /** What each kind is for, in the \"+\" menu. */\n kindHints: Record<WorkflowStepKind, string>\n addNext: string\n /** Summaries on the cards. */\n runs: string\n /** An agent step with neither a skill nor an instruction written yet. */\n chooseRun: string\n fields: string\n noFields: string\n approvedBy: string\n /** A signature step's summary; `{count}` is the number of signers. */\n signers: string\n /** A signature step without its document yet. */\n chooseDocument: string\n /** An email step's summary; `{to}` is its first recipient. */\n emailTo: string\n /** An email step without a recipient yet. */\n noRecipients: string\n /** A tabular review's summary; `{count}` is the number of columns (labels). */\n reviewColumns: string\n noColumns: string\n /** A step's assignee on its card; `{name}` is replaced. */\n assignee: string\n /** A step that reminds its person; `{hours}` is replaced. */\n remind: string\n emptyTitle: string\n emptyHint: string\n fitView: string\n}\n\nexport const DEFAULT_WORKFLOW_CANVAS_LABELS: WorkflowCanvasLabels = {\n ...DEFAULT_STEP_KIND_LABELS,\n redline: 'Tracked changes',\n branch: 'Branch',\n kindHints: {\n form: 'Ask for details',\n upload: 'Collect files',\n agent: 'Run a skill or an instruction',\n review: 'A person approves',\n sign: 'People e-sign a document',\n email_draft: 'Prepare an email to send',\n tabular_review: 'Review documents in a grid',\n },\n addNext: 'Add the next step',\n runs: 'Runs “{name}”',\n chooseRun: 'Choose a skill or write an instruction',\n fields: '{count} fields',\n noFields: 'No fields yet',\n approvedBy: 'A person approves',\n signers: '{count} signers',\n chooseDocument: 'Choose the document to sign',\n emailTo: 'To {to}',\n noRecipients: 'Add a recipient',\n reviewColumns: '{count} columns',\n noColumns: 'Choose the columns',\n assignee: '{name}',\n remind: 'Reminds after {hours}h',\n emptyTitle: 'Start your workflow',\n emptyHint: 'Add the first step: what should happen when it starts?',\n fitView: 'Fit view',\n}\n\nexport interface WorkflowCanvasProps {\n workflow: WorkflowDefinition\n /** Edits (move, connect, disconnect, delete). Absent = read-only. */\n onChange?: (workflow: WorkflowDefinition) => void\n selected?: string | null\n onSelect?: (stepId: string | null) => void\n /** A card to keep in view (`TRIGGER_NODE` for the start); default: the selected one. */\n focus?: string | null\n /** Add a step after this one (`TRIGGER_NODE`: one that starts with the run). Absent = no \"+\". */\n onAddAfter?: (stepId: string, kind: WorkflowStepKind) => void\n /** A run's progress, by step id: colours the nodes. */\n phases?: Record<string, WorkflowStepPhase>\n /** Names the workflow an agent step runs (its card's summary). */\n workflowTitle?: (id: string) => string | undefined\n /** Who a step is for, in words (its card shows it). */\n assigneeOf?: (step: WorkflowStep) => string | undefined\n /**\n * The workflow's start, drawn as the first node (id `TRIGGER_NODE`): an edge from it into each\n * step that starts with the run. Drawing one from it into a step makes that step start the run.\n */\n trigger?: { title: string; summary: string }\n renderIcon?: (key: string) => ReactNode\n labels?: Partial<WorkflowCanvasLabels>\n className?: string\n /** Pixels on the right covered by a floating panel: the opening view keeps clear of them. */\n reserveRight?: number\n testId?: string\n}\n\n/** The id of the trigger node (selecting it selects the workflow's start). */\nexport const TRIGGER_NODE = '__trigger'\n\nconst KINDS = WORKFLOW_STEP_KINDS\n\n/** The \"+\" beside a card: pick the kind of the next step. */\nfunction AddNext({\n from,\n onAdd,\n l,\n testId,\n}: {\n from: string\n onAdd: (from: string, kind: WorkflowStepKind) => void\n l: WorkflowCanvasLabels\n testId: string\n}) {\n const [open, setOpen] = useState(false)\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"wf-add nodrag nopan flex size-7 items-center justify-center rounded-full border border-border bg-card text-muted-foreground shadow-sm hover:text-foreground\"\n aria-label={l.addNext}\n data-testid={`${testId}-add-after-${from === TRIGGER_NODE ? 'trigger' : from}`}\n >\n <Plus className=\"size-4\" />\n </button>\n </PopoverTrigger>\n <PopoverContent side=\"right\" align=\"start\" className=\"w-60 p-1.5\">\n <p className=\"px-2 pb-1 pt-0.5 text-xs font-medium text-muted-foreground\">{l.addNext}</p>\n {KINDS.map((kind) => {\n const Icon = STEP_KIND_ICONS[kind]\n return (\n <button\n key={kind}\n type=\"button\"\n onClick={(e) => {\n // The menu sits in a portal: React still bubbles the click to the card behind it,\n // which would select that card instead of the new step.\n e.stopPropagation()\n setOpen(false)\n onAdd(from, kind)\n }}\n className={cn(\n `wf-kind-${kind}`,\n 'flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-left hover:bg-muted'\n )}\n data-testid={`${testId}-add-after-${from === TRIGGER_NODE ? 'trigger' : from}-${kind}`}\n >\n <span className=\"wf-badge flex size-7 shrink-0 items-center justify-center rounded-md\">\n <Icon className=\"size-4\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{l[kind]}</span>\n <span className=\"block text-xs text-muted-foreground\">{l.kindHints[kind]}</span>\n </span>\n </button>\n )\n })}\n </PopoverContent>\n </Popover>\n )\n}\n\ninterface StepNodeData extends Record<string, unknown> {\n step: WorkflowStep\n phase?: WorkflowStepPhase\n summary?: string\n /** Who it is for, in words. */\n assignee?: string\n icon?: ReactNode\n l: WorkflowCanvasLabels\n onAdd?: (from: string, kind: WorkflowStepKind) => void\n testId: string\n}\n\nfunction PhaseMark({ phase }: { phase?: WorkflowStepPhase }) {\n if (phase === 'running') return <Loader2 className=\"wf-kind-text size-4 animate-spin\" />\n if (phase === 'waiting') return <Hourglass className=\"wf-kind-text size-4\" />\n if (phase === 'done') return <Check className=\"wf-kind-text size-4\" />\n if (phase === 'failed') return <AlertTriangle className=\"size-4 text-destructive\" />\n if (phase === 'skipped') return <MinusCircle className=\"size-4 text-muted-foreground\" />\n return null\n}\n\nfunction StepNode({ data }: NodeProps<Node<StepNodeData>>) {\n const { step, phase, summary, assignee, icon, l, onAdd, testId } = data\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n const redline = step.kind === 'agent' && !!step.editDocument\n return (\n <div\n className={cn(\n 'wf-node w-64 py-3 pl-4 pr-3 text-left',\n `wf-kind-${kind}`,\n phase && `wf-phase-${phase}`\n )}\n data-testid={`${testId}-node-${step.id}`}\n data-phase={phase}\n >\n <ChevronShape />\n <Handle type=\"target\" position={Position.Left} />\n <div className=\"flex items-start gap-2.5\">\n <span className=\"wf-badge flex size-8 shrink-0 items-center justify-center rounded-lg [&_svg]:size-4\">\n {icon ?? <KindIcon />}\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"wf-kind-text text-[10px] font-semibold uppercase tracking-wider\">\n {l[kind]}\n </span>\n <PhaseMark phase={phase} />\n </div>\n <p className=\"truncate text-sm font-semibold leading-snug\">{step.title}</p>\n {summary && (\n <p className=\"mt-0.5 line-clamp-2 text-xs leading-snug text-muted-foreground\">\n {summary}\n </p>\n )}\n {(redline || (step.kind === 'agent' && step.branch) || assignee) && (\n <div className=\"mt-1.5 flex flex-wrap gap-1\">\n {step.kind === 'agent' && step.branch && (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n <GitBranch className=\"size-3\" /> {l.branch}\n </span>\n )}\n {redline && (\n <span\n className=\"inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\"\n data-testid={`${testId}-node-${step.id}-redline`}\n >\n <FilePenLine className=\"size-3\" /> {l.redline}\n </span>\n )}\n {assignee && (\n <span\n className=\"inline-flex max-w-full items-center gap-1 truncate rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\"\n title={assignee}\n data-testid={`${testId}-node-${step.id}-assignee`}\n >\n <UserRound className=\"size-3 shrink-0\" />\n <span className=\"truncate\">\n {l.assignee.replace(\n '{name}',\n assignee.charAt(0).toUpperCase() + assignee.slice(1)\n )}\n </span>\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Right} />\n {onAdd && <AddNext from={step.id} onAdd={onAdd} l={l} testId={testId} />}\n </div>\n )\n}\n\ninterface TriggerNodeData extends Record<string, unknown> {\n title: string\n summary: string\n l: WorkflowCanvasLabels\n onAdd?: (from: string, kind: WorkflowStepKind) => void\n testId: string\n}\n\nfunction TriggerNode({ data }: NodeProps<Node<TriggerNodeData>>) {\n return (\n <div\n className=\"wf-start wf-kind-start relative w-60 px-4 py-3 text-left\"\n data-testid={`${data.testId}-node-trigger`}\n >\n <ChevronShape />\n <div className=\"flex items-center gap-2.5\">\n <span className=\"wf-badge flex size-8 shrink-0 items-center justify-center rounded-full\">\n <Zap className=\"size-4\" />\n </span>\n <div className=\"min-w-0\">\n <p className=\"wf-kind-text text-[10px] font-semibold uppercase tracking-wider\">\n {data.title}\n </p>\n <p className=\"truncate text-sm font-semibold\">{data.summary}</p>\n </div>\n </div>\n <Handle type=\"source\" position={Position.Right} />\n {data.onAdd && (\n <AddNext from={TRIGGER_NODE} onAdd={data.onAdd} l={data.l} testId={data.testId} />\n )}\n </div>\n )\n}\n\nconst NODE_TYPES = { step: StepNode, trigger: TriggerNode }\n\nconst firstWords = (text: string, n = 14) => {\n const words = text.trim().split(/\\s+/)\n return words.length > n ? `${words.slice(0, n).join(' ')}…` : text.trim()\n}\n\n/** One line on a card: what the step does. */\nfunction summaryOf(\n step: WorkflowStep,\n l: WorkflowCanvasLabels,\n workflowTitle?: (id: string) => string | undefined\n): string | undefined {\n if (step.description) return step.description\n switch (step.kind) {\n case 'agent':\n if (step.workflow)\n return l.runs.replace('{name}', workflowTitle?.(step.workflow) ?? step.workflow)\n if (step.run?.kind === 'operation') return undefined\n return step.run?.kind === 'prompt' && step.run.promptTemplate.trim()\n ? firstWords(step.run.promptTemplate)\n : l.chooseRun\n case 'form':\n return step.inputs.length\n ? step.inputs.length === 1\n ? step.inputs[0].label\n : l.fields.replace('{count}', String(step.inputs.length))\n : l.noFields\n case 'upload':\n return step.hint\n case 'review':\n return step.instructions ? firstWords(step.instructions) : l.approvedBy\n case 'action': {\n const a = step.action\n if (a.type === 'sign')\n return !a.document\n ? l.chooseDocument\n : a.signers.length\n ? l.signers.replace('{count}', String(a.signers.length))\n : undefined\n if (a.type === 'email_draft') {\n const to = a.to.find((t) => t.trim())\n return to ? l.emailTo.replace('{to}', to) : l.noRecipients\n }\n return a.tags.length ? l.reviewColumns.replace('{count}', String(a.tags.length)) : l.noColumns\n }\n }\n}\n\nexport function WorkflowCanvas({\n workflow,\n onChange,\n selected = null,\n onSelect,\n focus,\n onAddAfter,\n phases,\n workflowTitle,\n assigneeOf,\n trigger,\n renderIcon,\n labels,\n className,\n reserveRight = 0,\n testId = 'workflow-canvas',\n}: WorkflowCanvasProps) {\n const l = useMemo(() => ({ ...DEFAULT_WORKFLOW_CANVAS_LABELS, ...labels }), [labels])\n const steps = workflowSteps(workflow)\n const editable = !!onChange\n\n const built = useMemo((): Node[] => {\n const layout = layoutWithDefaults(workflow)\n const all = workflowSteps(workflow)\n const roots = all.filter((s) => stepDependencies(all, s.id).length === 0)\n const triggerNode: Node[] = trigger\n ? [\n {\n id: TRIGGER_NODE,\n type: 'trigger',\n deletable: false,\n selected: selected === TRIGGER_NODE,\n position: layout[TRIGGER_NODE] ?? {\n x: Math.min(0, ...Object.values(layout).map((p) => p.x)) - 320,\n y: roots.length\n ? roots.reduce((sum, s) => sum + (layout[s.id]?.y ?? 0), 0) / roots.length\n : 0,\n },\n data: { title: trigger.title, summary: trigger.summary, l, onAdd: onAddAfter, testId },\n },\n ]\n : []\n return [\n ...triggerNode,\n ...all.map((step): Node<StepNodeData> => ({\n id: step.id,\n type: 'step',\n position: layout[step.id] ?? { x: 0, y: 0 },\n selected: step.id === selected,\n data: {\n step,\n phase: phases?.[step.id],\n summary: summaryOf(step, l, workflowTitle),\n assignee: assigneeOf?.(step),\n icon: step.icon && renderIcon ? renderIcon(step.icon) : undefined,\n l,\n onAdd: onAddAfter,\n testId,\n },\n })),\n ]\n }, [\n workflow,\n selected,\n phases,\n workflowTitle,\n assigneeOf,\n trigger,\n renderIcon,\n l,\n onAddAfter,\n testId,\n ])\n\n // Local nodes so dragging is smooth; the layout is committed when a drag ends.\n const [nodes, setNodes] = useState(built)\n useEffect(() => setNodes(built), [built])\n\n const edges = useMemo(\n (): Edge[] =>\n steps.flatMap((s) => {\n const deps = stepDependencies(steps, s.id)\n const from = deps.length ? deps : trigger ? [TRIGGER_NODE] : []\n return from.map((d) => ({\n id: `${d}->${s.id}`,\n source: d,\n target: s.id,\n type: 'smoothstep',\n deletable: d !== TRIGGER_NODE,\n markerEnd: { type: MarkerType.ArrowClosed, width: 16, height: 16 },\n animated: phases?.[s.id] === 'running',\n }))\n }),\n [steps, phases, trigger]\n )\n\n const onNodesChange = useCallback(\n (changes: NodeChange<Node>[]) => {\n setNodes((ns) => applyNodeChanges(changes, ns))\n if (!onChange) return\n let next = workflow\n for (const c of changes) {\n if (c.type === 'position' && c.dragging === false && c.position && c.id !== TRIGGER_NODE) {\n next = moveStep(next, c.id, c.position)\n }\n }\n if (next !== workflow) onChange(next)\n },\n [workflow, onChange]\n )\n\n const onConnect = useCallback(\n (c: Connection) => {\n if (!onChange || !c.source || !c.target) return\n // From the start: the step starts with the run (it waits for nothing).\n if (c.source === TRIGGER_NODE) onChange(updateStep(workflow, c.target, { after: [] }))\n else onChange(connectSteps(workflow, c.source, c.target))\n },\n [workflow, onChange]\n )\n\n // Opening the canvas fits the whole flow, or, when that would shrink the cards past reading, the\n // readable zoom on the selection (centred) or the start (at the left). The Fit view button always\n // shows the whole flow (down to the canvas's smallest zoom): that is what it says.\n const frame = useRef<HTMLDivElement>(null)\n const flowRef = useRef<ReactFlowInstance | null>(null)\n const hasTrigger = !!trigger\n const selectedRef = useRef(selected)\n selectedRef.current = selected\n const fit = useCallback(\n async (flow: ReactFlowInstance, anchorOnSelection: boolean, whole = false) => {\n await flow.fitView({\n padding: { top: '48px', bottom: '48px', left: '48px', right: `${reserveRight + 48}px` },\n maxZoom: 1,\n })\n if (whole) return\n const box = frame.current\n const picked = anchorOnSelection ? selectedRef.current : null\n const view = readableViewport(\n flow.getNodes(),\n flow.getZoom(),\n { width: box?.clientWidth ?? 0, height: box?.clientHeight ?? 0 },\n {\n anchor: picked ?? (hasTrigger ? TRIGGER_NODE : null),\n centre: !!picked,\n reserveRight,\n }\n )\n if (view) await flow.setViewport(view)\n },\n [reserveRight, hasTrigger]\n )\n const onInit = useCallback(\n async (flow: ReactFlowInstance) => {\n flowRef.current = flow\n await fit(flow, false)\n },\n [fit]\n )\n\n // A card just picked or added (or the one asked for) that sits off screen, or under the\n // floating panel, is brought into view at the same zoom.\n // Once per card (and panel width): moving other cards afterwards does not pull the view back.\n const target = focus ?? selected\n const revealed = useRef<string | null>(null)\n useEffect(() => {\n const flow = flowRef.current\n const box = frame.current\n const node = target ? flow?.getNode(target) : undefined\n const key = `${target}:${reserveRight}`\n if (!target) revealed.current = null\n if (!flow || !box || !node || revealed.current === key) return\n revealed.current = key\n const view = flow.getViewport()\n const centre = revealCenter(\n node,\n view,\n { width: box.clientWidth, height: box.clientHeight },\n reserveRight\n )\n if (centre) void flow.setCenter(centre.x, centre.y, { zoom: view.zoom, duration: 250 })\n }, [target, nodes, reserveRight])\n\n // One callback for a deletion: removed steps (their chain re-joined), then any other edges.\n const onDelete = useCallback(\n ({ nodes: gone, edges: cut }: { nodes: Node[]; edges: Edge[] }) => {\n if (!onChange) return\n const removed = new Set(gone.map((n) => n.id))\n let next = gone.reduce((w, n) => removeStep(w, n.id), workflow)\n for (const e of cut) {\n if (!removed.has(e.source) && !removed.has(e.target)) {\n next = disconnectSteps(next, e.source, e.target)\n }\n }\n onChange(next)\n },\n [workflow, onChange]\n )\n\n return (\n <div\n className={cn(\n 'relative h-[max(560px,calc(100dvh-200px))] w-full overflow-hidden rounded-xl border border-border bg-muted/30',\n className\n )}\n ref={frame}\n data-testid={testId}\n >\n <ReactFlow\n nodes={nodes}\n edges={edges}\n nodeTypes={NODE_TYPES}\n onNodesChange={onNodesChange}\n onConnect={onConnect}\n onDelete={onDelete}\n isValidConnection={(c) =>\n !!c.source && !!c.target && !wouldCycle(workflow, c.source, c.target)\n }\n onNodeClick={(_, node) => onSelect?.(node.id)}\n onPaneClick={() => onSelect?.(null)}\n nodesDraggable={editable}\n nodesConnectable={editable}\n elementsSelectable\n deleteKeyCode={editable ? ['Backspace', 'Delete'] : null}\n onInit={onInit}\n minZoom={0.3}\n proOptions={{ hideAttribution: true }}\n >\n <Background variant={BackgroundVariant.Dots} gap={18} size={1.5} />\n <Controls showInteractive={false} showFitView={false} position=\"bottom-left\">\n <ControlButton\n className=\"react-flow__controls-fitview\"\n onClick={() => flowRef.current && void fit(flowRef.current, false, true)}\n title={l.fitView}\n aria-label={l.fitView}\n data-testid={`${testId}-fit`}\n >\n <Maximize />\n </ControlButton>\n </Controls>\n {steps.length > 3 && (\n <MiniMap\n pannable\n zoomable\n position=\"bottom-right\"\n className=\"wf-minimap !rounded-lg !border !border-border\"\n style={{ width: 168, height: 104 }}\n nodeBorderRadius={8}\n nodeStrokeWidth={0}\n />\n )}\n </ReactFlow>\n {steps.length === 0 && onAddAfter && (\n <div className=\"pointer-events-none absolute inset-x-0 bottom-16 flex justify-center\">\n <div\n className=\"pointer-events-auto rounded-xl border border-dashed border-border bg-card/90 p-5 text-center shadow-sm backdrop-blur\"\n data-testid={`${testId}-empty`}\n >\n <p className=\"text-sm font-semibold\">{l.emptyTitle}</p>\n <p className=\"mt-1 text-xs text-muted-foreground\">{l.emptyHint}</p>\n <div className=\"mt-3 grid grid-cols-2 gap-2\">\n {KINDS.map((kind) => {\n const Icon = STEP_KIND_ICONS[kind]\n return (\n <button\n key={kind}\n type=\"button\"\n onClick={() => onAddAfter(TRIGGER_NODE, kind)}\n className={cn(\n `wf-kind-${kind}`,\n 'flex items-center gap-2 rounded-lg border border-border bg-card px-3 py-2 text-left text-sm hover:bg-muted'\n )}\n data-testid={`${testId}-empty-${kind}`}\n >\n <span className=\"wf-badge flex size-6 items-center justify-center rounded-md\">\n <Icon className=\"size-3.5\" />\n </span>\n {l[kind]}\n </button>\n )\n })}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n","/**\n * Build a workflow visually: what starts it (the trigger node), its named steps (forms, uploads,\n * agent steps running a skill or an instruction, branches, a person's approval), wired on a\n * canvas, each set in the inspector; and a preview of a run (the real runner with a stand-in\n * agent). The value saves as a workflow (`builderToWorkflowRequest`): every firing is a work\n * thread that runs the steps.\n */\n\nimport { useMemo, useState, type ReactNode } from 'react'\nimport { Eye, LayoutGrid, PencilRuler, Plus, Settings2, X } from 'lucide-react'\nimport { Button, Popover, PopoverContent, PopoverTrigger, cn } from '@arbidocs/react/ui'\nimport {\n WorkflowRunner,\n assigneeName,\n canAssign,\n runFields,\n STEP_KIND_ICONS,\n stepConfigProblems,\n useWorkflowPreview,\n validateWorkflowGraph,\n workflowSteps,\n type AgentOption,\n type StepComposeOptions,\n type WorkflowDefinition,\n type WorkflowGraphProblem,\n type WorkflowStep,\n type WorkflowStepProblem,\n} from '../agents'\nimport {\n WORKFLOW_STEP_KINDS,\n addStep,\n autoLayout,\n layoutWithDefaults,\n type WorkflowStepKind,\n} from './edit'\nimport { StepInspector, type StepInspectorLabels, type StepInspectorOption } from './StepInspector'\nimport { TriggerInspector, triggerSummary, type TriggerInspectorLabels } from './TriggerInspector'\nimport { declaredSignals, type DeclaredSignal, type WorkflowBuilderValue } from './trigger'\nimport {\n DEFAULT_WORKFLOW_CANVAS_LABELS,\n TRIGGER_NODE,\n WorkflowCanvas,\n type WorkflowCanvasLabels,\n} from './WorkflowCanvas'\n\nexport interface WorkflowBuilderLabels {\n addStep: string\n tidy: string\n settings: string\n closePanel: string\n design: string\n preview: string\n /** The trigger node's heading. */\n start: string\n /** What the preview's stand-in agent answers; `{prompt}` is replaced. */\n previewAnswer: string\n problems: Record<WorkflowGraphProblem['code'], string>\n /** What a step still needs (`{step}` is its title). */\n missing: Record<WorkflowStepProblem['missing'], string>\n}\n\nexport const DEFAULT_WORKFLOW_BUILDER_LABELS: WorkflowBuilderLabels = {\n addStep: 'Add step',\n tidy: 'Tidy',\n settings: 'Workflow settings',\n closePanel: 'Close panel',\n design: 'Design',\n preview: 'Preview',\n start: 'Start',\n previewAnswer: 'Preview: the agent would be asked —\\n\\n{prompt}',\n problems: {\n duplicate: '“{step}” appears twice.',\n unknown: '“{step}” waits for a step that does not exist.',\n cycle: '“{step}” waits for itself (a loop).',\n order: '“{step}” is listed before a step it waits for.',\n },\n missing: {\n document: '“{step}” needs a document.',\n signers: '“{step}” needs at least one signer.',\n recipients: '“{step}” needs a recipient.',\n tags: '“{step}” needs at least one column.',\n documents: '“{step}” needs documents to review.',\n },\n}\n\nexport interface WorkflowBuilderProps extends Pick<StepComposeOptions, 'compose'> {\n value: WorkflowBuilderValue\n onChange: (value: WorkflowBuilderValue) => void\n /** What agent steps can run (skills and other workflows); the preview composes from them. */\n workflows?: WorkflowDefinition[]\n /** Who can run it. */\n agents?: AgentOption[]\n /** The workspace events it can start on. */\n eventKinds?: Array<{ value: string; label: string }>\n /** Tasks it can wait on. */\n tasks?: Array<{ value: string; label: string }>\n /** The workspace's members: who a step can be for, and who signs. */\n people?: StepInspectorOption[]\n /** The workspace's labels: a tabular review's columns. */\n tags?: StepInspectorOption[]\n /** The workspace's documents: what a step can name directly. */\n documents?: StepInspectorOption[]\n /**\n * The signals the firm's workflows declare (`declaredSignals` over the saved workflows): what\n * \"When a step signals\" offers. The signals of the workflow being built are added.\n */\n signals?: DeclaredSignal[]\n renderIcon?: (key: string) => ReactNode\n /** The host's buttons (save, run). */\n actions?: ReactNode\n labels?: Partial<WorkflowBuilderLabels>\n canvasLabels?: Partial<WorkflowCanvasLabels>\n inspectorLabels?: Partial<StepInspectorLabels>\n triggerLabels?: Partial<TriggerInspectorLabels>\n testId?: string\n className?: string\n}\n\n/** The floating inspector's width plus its margin: the canvas opens clear of it. */\nconst PANEL_WIDTH = 344\n\nconst KINDS = WORKFLOW_STEP_KINDS\n\nexport function WorkflowBuilder({\n value,\n onChange,\n workflows = [],\n agents = [],\n eventKinds = [],\n tasks = [],\n signals = [],\n people = [],\n tags = [],\n documents = [],\n compose,\n renderIcon,\n actions,\n labels,\n canvasLabels,\n inspectorLabels,\n triggerLabels,\n testId = 'workflow-builder',\n className,\n}: WorkflowBuilderProps) {\n const l = { ...DEFAULT_WORKFLOW_BUILDER_LABELS, ...labels }\n const [selected, setSelectedState] = useState<string | null>(null)\n // The inspector floats over the canvas, closed until something is picked so the flow has it all.\n const [panelOpen, setPanelOpen] = useState(false)\n const setSelected = (id: string | null) => {\n setSelectedState(id)\n if (id) setPanelOpen(true)\n }\n const [mode, setMode] = useState<'design' | 'preview'>('design')\n const [adding, setAdding] = useState(false)\n const { workflow, trigger } = value\n const steps = workflowSteps(workflow)\n const problems = validateWorkflowGraph(steps)\n const missing = stepConfigProblems(steps)\n const nameOf = (id: string) => people.find((p) => p.value === id)?.label\n const fields = runFields(workflow)\n const assigneeOf = (step: WorkflowStep) =>\n canAssign(step) ? assigneeName(step.assignee, { nameOf, fields }) : undefined\n const titles = useMemo(() => new Map(workflows.map((w) => [w.id, w.title])), [workflows])\n const setWorkflow = (next: WorkflowDefinition) => onChange({ ...value, workflow: next })\n\n /** A new step after `from` (`TRIGGER_NODE`: starting the run), placed to its right. */\n const addAfter = (from: string | null, kind: WorkflowStepKind) => {\n const layout = layoutWithDefaults(workflow)\n const origin = from && from !== TRIGGER_NODE ? layout[from] : undefined\n const siblings = steps.filter((s) =>\n from && from !== TRIGGER_NODE ? s.after?.includes(from) : s.after?.length === 0\n ).length\n const { workflow: next, id } = addStep(workflow, kind, {\n after: from && from !== TRIGGER_NODE ? from : undefined,\n position: origin\n ? { x: origin.x + 320, y: origin.y + siblings * 150 }\n : {\n x: Math.max(0, ...Object.values(layout).map((p) => p.x)) + (steps.length ? 320 : 0),\n y: siblings * 150,\n },\n })\n setWorkflow(next)\n setSelected(id)\n }\n const add = (kind: WorkflowStepKind) =>\n addAfter(\n selected && selected !== TRIGGER_NODE ? selected : (steps.at(-1)?.id ?? TRIGGER_NODE),\n kind\n )\n\n const summary = triggerSummary(trigger, {\n labels: triggerLabels,\n eventLabel: (k) => eventKinds.find((e) => e.value === k)?.label,\n taskLabel: (id) => tasks.find((t) => t.value === id)?.label,\n })\n\n return (\n <div className={cn('space-y-3', className)} data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n <div className=\"flex rounded-md border border-border p-0.5\">\n <Button\n variant={mode === 'design' ? 'secondary' : 'ghost'}\n size=\"sm\"\n onClick={() => setMode('design')}\n data-testid={`${testId}-mode-design`}\n >\n <PencilRuler className=\"size-4\" /> {l.design}\n </Button>\n <Button\n variant={mode === 'preview' ? 'secondary' : 'ghost'}\n size=\"sm\"\n onClick={() => setMode('preview')}\n disabled={problems.length > 0 || steps.length === 0}\n data-testid={`${testId}-mode-preview`}\n >\n <Eye className=\"size-4\" /> {l.preview}\n </Button>\n </div>\n {mode === 'design' && (\n <>\n <Popover open={adding} onOpenChange={setAdding}>\n <PopoverTrigger asChild>\n <Button size=\"sm\" data-testid={`${testId}-add`}>\n <Plus className=\"size-4\" /> {l.addStep}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-64 p-1.5\">\n {KINDS.map((kind) => {\n const Icon = STEP_KIND_ICONS[kind]\n const cls = { ...DEFAULT_WORKFLOW_CANVAS_LABELS, ...canvasLabels }\n return (\n <button\n key={kind}\n type=\"button\"\n onClick={() => {\n setAdding(false)\n add(kind)\n }}\n className={cn(\n `wf-kind-${kind}`,\n 'flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-left hover:bg-muted'\n )}\n data-testid={`${testId}-add-${kind}`}\n >\n <span className=\"wf-badge flex size-7 shrink-0 items-center justify-center rounded-md\">\n <Icon className=\"size-4\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{cls[kind]}</span>\n <span className=\"block text-xs text-muted-foreground\">\n {cls.kindHints[kind]}\n </span>\n </span>\n </button>\n )\n })}\n </PopoverContent>\n </Popover>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() =>\n workflow.run.kind === 'steps' &&\n setWorkflow({ ...workflow, run: { ...workflow.run, layout: autoLayout(steps) } })\n }\n data-testid={`${testId}-tidy`}\n >\n <LayoutGrid className=\"size-4\" /> {l.tidy}\n </Button>\n </>\n )}\n {actions && <div className=\"ml-auto flex flex-wrap items-center gap-2\">{actions}</div>}\n </div>\n\n {problems.length + missing.length > 0 && (\n <ul className=\"space-y-1 text-sm text-destructive\" data-testid={`${testId}-problems`}>\n {problems.map((p, i) => (\n <li key={i}>\n {l.problems[p.code].replace(\n '{step}',\n steps.find((s) => s.id === p.step)?.title ?? p.step\n )}\n </li>\n ))}\n {missing.map((p, i) => (\n <li key={`m${i}`} data-testid={`${testId}-missing-${p.step}-${p.missing}`}>\n {l.missing[p.missing].replace(\n '{step}',\n steps.find((s) => s.id === p.step)?.title ?? p.step\n )}\n </li>\n ))}\n </ul>\n )}\n\n {mode === 'design' ? (\n <div className=\"relative\">\n <WorkflowCanvas\n workflow={workflow}\n onChange={setWorkflow}\n selected={selected}\n onSelect={setSelected}\n // The workflow's settings are about its start: bring the start card into view.\n focus={selected ?? (panelOpen ? TRIGGER_NODE : null)}\n onAddAfter={addAfter}\n trigger={{ title: l.start, summary }}\n workflowTitle={(id) => titles.get(id)}\n assigneeOf={assigneeOf}\n renderIcon={renderIcon}\n labels={canvasLabels}\n reserveRight={panelOpen ? PANEL_WIDTH : 0}\n testId={`${testId}-canvas`}\n />\n {panelOpen ? (\n <div\n className=\"absolute bottom-3 right-3 top-3 z-10 w-80 max-w-[calc(100%-1.5rem)] overflow-y-auto rounded-xl border border-border bg-card/95 p-4 pt-10 shadow-lg backdrop-blur\"\n data-testid={`${testId}-panel`}\n >\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"absolute right-2 top-2 size-7\"\n onClick={() => setPanelOpen(false)}\n aria-label={l.closePanel}\n data-testid={`${testId}-panel-close`}\n >\n <X className=\"size-4\" />\n </Button>\n {selected === TRIGGER_NODE ? (\n <TriggerInspector\n trigger={trigger}\n onChange={(next) => onChange({ ...value, trigger: next })}\n agents={agents}\n eventKinds={eventKinds}\n tasks={tasks}\n signals={[\n ...signals,\n ...declaredSignals([], workflow).filter(\n (d) => !signals.some((s) => s.value === d.value)\n ),\n ]}\n labels={triggerLabels}\n testId={`${testId}-trigger`}\n />\n ) : (\n <StepInspector\n workflow={workflow}\n stepId={selected}\n onChange={setWorkflow}\n onSelect={setSelected}\n workflows={workflows}\n people={people}\n tags={tags}\n documents={documents}\n labels={inspectorLabels}\n testId={`${testId}-inspector`}\n />\n )}\n </div>\n ) : (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"absolute right-3 top-3 z-10 bg-card shadow-sm\"\n onClick={() => setPanelOpen(true)}\n data-testid={`${testId}-panel-open`}\n >\n <Settings2 className=\"size-4\" /> {l.settings}\n </Button>\n )}\n </div>\n ) : (\n <WorkflowPreview\n key={JSON.stringify(workflow)}\n workflow={workflow}\n workflows={workflows}\n compose={compose}\n answer={l.previewAnswer}\n renderIcon={renderIcon}\n testId={`${testId}-preview`}\n />\n )}\n </div>\n )\n}\n\n/** The real runner with a stand-in agent: each step answers with the prompt it would send. */\nfunction WorkflowPreview({\n workflow,\n workflows,\n compose,\n answer,\n renderIcon,\n testId,\n}: {\n workflow: WorkflowDefinition\n workflows: WorkflowDefinition[]\n compose?: StepComposeOptions['compose']\n answer: string\n renderIcon?: (key: string) => ReactNode\n testId: string\n}) {\n const run = useWorkflowPreview(workflow, {\n resolveWorkflow: (id) => workflows.find((w) => w.id === id),\n compose,\n answer,\n })\n return (\n <WorkflowRunner\n workflow={workflow}\n run={run}\n renderIcon={renderIcon}\n testIdPrefix={testId}\n renderAgentOutput={(step, state) =>\n state?.text ? (\n <pre\n className=\"whitespace-pre-wrap rounded-md bg-muted/40 p-3 text-xs text-muted-foreground\"\n data-testid={`${testId}-${step.id}-answer`}\n >\n {state.text}\n </pre>\n ) : null\n }\n />\n )\n}\n","/**\n * The workflow builder bound to the connection: it loads a saved workflow (or starts from the\n * host's value), offers the host's workflows and the user's skills as steps an agent can run, its\n * agents, the people, labels, documents, events and tasks a workflow can use, and saves the\n * workflow (its trigger and its steps) or runs it now. An unattended workflow that keeps standing\n * access gives its agent the workspace once saved. Every run is a work thread that runs the steps.\n * Saved and failed are told through the environment's `notify`. Exported from\n * `@arbidocs/blocks/workflow-canvas` (it brings the graph library).\n */\n\nimport { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport {\n useAgents,\n useCreateWorkflow,\n useGrantAgentAccess,\n useRunWorkflow,\n useWorkspaceUsers,\n useSkills,\n useUpdateWorkflow,\n useWorkflows,\n} from '@arbidocs/react'\nimport type { components } from '@arbidocs/client'\nimport { Button } from '@arbidocs/react/ui'\nimport { Loader2, Play, Save } from 'lucide-react'\nimport { mergeSkillWorkflows, type StepComposeOptions, type WorkflowDefinition } from '../agents'\nimport { stepConfigProblems, validateWorkflowGraph, workflowSteps } from '../agents/workflows/run'\nimport { WorkflowBuilder, type WorkflowBuilderProps } from '../workflow-canvas/WorkflowBuilder'\nimport {\n DEFAULT_WORKFLOW_TRIGGER,\n builderToWorkflowRequest,\n builderToWorkflowUpdate,\n declaredSignals,\n triggerProblem,\n workflowRecordToBuilder,\n type WorkflowBuilderValue,\n} from '../workflow-canvas/trigger'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedConversations, useConnectedTags, useListedDocuments } from './workspaceData'\n\nconst NO_WORKFLOWS: WorkflowDefinition[] = []\n\nexport interface ConnectedWorkflowBuilderLabels {\n save: string\n saving: string\n runNow: string\n /** The notification once saved. */\n saved: string\n needTrigger: string\n running: string\n /** Notified when saving (or the after-save step) fails without a message. */\n saveFailed: string\n /** Notified when \"Run now\" fails without a message. */\n runFailed: string\n /** A task (to start after) without a title. */\n untitledTask: string\n}\n\nexport const DEFAULT_CONNECTED_WORKFLOW_BUILDER_LABELS: ConnectedWorkflowBuilderLabels = {\n save: 'Save',\n saving: 'Saving…',\n runNow: 'Run now',\n saved: 'Workflow saved',\n needTrigger: 'Finish setting when it starts.',\n running: 'Starting…',\n saveFailed: 'Could not save the workflow',\n runFailed: 'Could not run the workflow',\n untitledTask: 'Untitled thread',\n}\n\n/** Where a new workflow starts: started by hand, one agent step to fill in. */\nexport function newWorkflowBuilderValue(): WorkflowBuilderValue {\n return {\n workflow: {\n id: 'new',\n title: 'New workflow',\n description: '',\n inputs: [],\n landing: 'chat',\n schedulable: false,\n run: {\n kind: 'steps',\n steps: [\n {\n id: 'work',\n kind: 'agent',\n title: 'Do the work',\n run: { kind: 'prompt', promptTemplate: '' },\n },\n ],\n },\n },\n trigger: DEFAULT_WORKFLOW_TRIGGER,\n }\n}\n\n/**\n * A workspace event a workflow can start on: a notification type (what the API's `event_kind` check\n * accepts), except those the workflow engine emits itself, which the API refuses as a trigger (422).\n */\ntype WorkflowEventKind = Exclude<components['schemas']['NotificationType'], 'workflow_failed'>\n\n/** Workspace events a workflow can start on (notification types), in plain words. */\nexport const DEFAULT_WORKFLOW_EVENT_KINDS = [\n { value: 'conversation_done', label: 'A task is marked done' },\n { value: 'conversation_ready', label: 'Work is ready for me' },\n { value: 'mention', label: 'Someone mentions me' },\n { value: 'workflow_completed', label: 'Another workflow finishes' },\n { value: 'workflow_signal', label: 'When a step signals' },\n // Filter on {\"language\": \"other\", \"wp_type\": \"source\"} to act on every non-English upload (e.g. Translate).\n { value: 'document_processed', label: 'A document finishes processing' },\n] satisfies Array<{ value: WorkflowEventKind; label: string }>\n\nexport interface ConnectedWorkflowBuilderProps\n extends\n Pick<StepComposeOptions, 'compose'>,\n Pick<\n WorkflowBuilderProps,\n | 'renderIcon'\n | 'labels'\n | 'canvasLabels'\n | 'inspectorLabels'\n | 'triggerLabels'\n | 'testId'\n | 'className'\n > {\n /** A saved workflow to edit (`wfl-…`). */\n workflowId?: string\n /** Where a new workflow starts (e.g. a built-in journey). Default: one agent step. */\n initial?: WorkflowBuilderValue\n /**\n * Host workflows agent steps can run besides the user's skills (e.g. its built-ins with their own\n * forms); an uploaded skill of the same id is used instead (`mergeSkillWorkflows`).\n */\n workflows?: WorkflowDefinition[]\n eventKinds?: Array<{ value: string; label: string }>\n /**\n * Saved (created or updated, the agent's standing access granted): its id and the value saved.\n * It may return a promise for host setup that must finish first: \"Save\" waits for it before\n * telling saved, and \"Run now\" waits for it before running, and does not run if it rejects.\n */\n onSaved?: (workflowId: string, value: WorkflowBuilderValue) => void | Promise<void>\n /** A run started: its thread. Default: open it (the environment's `openConversation`). */\n onRun?: (conversationId: string | undefined) => void\n /** Extra host buttons. */\n actions?: ReactNode\n connectedLabels?: Partial<ConnectedWorkflowBuilderLabels>\n}\n\nexport function ConnectedWorkflowBuilder({\n workflowId,\n initial = newWorkflowBuilderValue(),\n workflows: hostWorkflows = NO_WORKFLOWS,\n eventKinds = DEFAULT_WORKFLOW_EVENT_KINDS,\n compose,\n onSaved,\n onRun,\n actions,\n connectedLabels,\n testId = 'workflow-builder',\n ...builderProps\n}: ConnectedWorkflowBuilderProps) {\n const l = { ...DEFAULT_CONNECTED_WORKFLOW_BUILDER_LABELS, ...connectedLabels }\n const { notify, openConversation } = useBlocksEnvironment()\n const { workspaceId, live, ensureWorkspaceOpen } = useConnectedWorkspace()\n const members = useWorkspaceUsers(workspaceId ?? undefined, {\n enabled: live && !!workspaceId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const { data: tagList } = useConnectedTags()\n const { data: docList } = useListedDocuments()\n const people = (members.data ?? []).map((m) => ({\n value: m.user.external_id,\n label: [m.user.given_name, m.user.family_name].filter(Boolean).join(' ') || m.user.email,\n }))\n const tagOptions = tagList.map((t) => ({ value: t.external_id, label: t.name }))\n const documentOptions = docList.map((d) => ({\n value: d.external_id,\n label: d.file_name ?? d.external_id,\n }))\n const saved = useWorkflows()\n const skills = useSkills()\n const agentsQuery = useAgents()\n const { data: conversations } = useConnectedConversations()\n const create = useCreateWorkflow()\n const update = useUpdateWorkflow()\n const run = useRunWorkflow()\n const grantAccess = useGrantAgentAccess()\n const [id, setId] = useState(workflowId)\n const [value, setValue] = useState<WorkflowBuilderValue>(initial)\n // Which button is working, and where it is: saving covers the host's after-save step too.\n const [pending, setPending] = useState<{ action: 'save' | 'run'; phase: 'saving' | 'running' }>()\n\n // A saved workflow opens as it was saved.\n const record = saved.data?.find((w) => w.external_id === id)\n const [loaded, setLoaded] = useState<string | undefined>(undefined)\n useEffect(() => {\n if (record && loaded !== record.external_id) {\n setValue(workflowRecordToBuilder(record))\n setLoaded(record.external_id)\n }\n }, [record, loaded])\n\n const workflows = useMemo(() => {\n const merged = mergeSkillWorkflows(hostWorkflows, skills.data ?? [])\n return [...merged.host, ...merged.skills]\n }, [hostWorkflows, skills.data])\n const agents = (agentsQuery.data ?? []).map((a) => ({\n id: a.external_id,\n label: a.given_name || a.email,\n }))\n const tasks = conversations\n .filter((c) => c.status && c.status !== 'done')\n .map((c) => ({ value: c.external_id, label: c.title || l.untitledTask }))\n const options = { resolveWorkflow: (wid: string) => workflows.find((w) => w.id === wid), compose }\n\n const problem =\n triggerProblem(value.trigger) ??\n (validateWorkflowGraph(workflowSteps(value.workflow)).length ||\n stepConfigProblems(workflowSteps(value.workflow)).length\n ? 'graph'\n : null)\n const busy = !!pending || create.isPending || update.isPending || run.isPending\n\n /**\n * Save; then, when unattended starts keep standing access, give the agent (the one picked, else\n * the one the server assigned) the workspace, so a run started next already has it; then the\n * host's after-save step. Throws if any of them fails.\n */\n const save = async (): Promise<string | undefined> => {\n if (!workspaceId) return undefined\n const result = id\n ? await update.mutateAsync({ workflowId: id, patch: builderToWorkflowUpdate(value, options) })\n : await create.mutateAsync(builderToWorkflowRequest(value, workspaceId, options))\n setId(result.external_id)\n setLoaded(result.external_id)\n const { trigger } = value\n const agentId = trigger.agentId || result.agent_ext_id\n const isMember = (members.data ?? []).some((m) => m.user.external_id === agentId)\n if (trigger.start !== 'manual' && trigger.access === 'standing' && agentId && !isMember) {\n await ensureWorkspaceOpen()\n await grantAccess.mutateAsync({ agentExtId: agentId, workspaceId })\n }\n await onSaved?.(result.external_id, value)\n return result.external_id\n }\n\n const attempt = async (andRun: boolean) => {\n setPending({ action: andRun ? 'run' : 'save', phase: 'saving' })\n try {\n const savedId = await save()\n if (!savedId) return\n if (!andRun) {\n notify(l.saved, 'success')\n return\n }\n setPending({ action: 'run', phase: 'running' })\n const started = await run.mutateAsync(savedId)\n if (started.error) throw new Error(started.error)\n const conversationId = started.conversation_ext_id ?? undefined\n if (onRun) onRun(conversationId)\n else if (conversationId) openConversation(conversationId)\n } catch (e) {\n notify(\n e instanceof Error && e.message ? e.message : andRun ? l.runFailed : l.saveFailed,\n 'error'\n )\n } finally {\n setPending(undefined)\n }\n }\n\n return (\n <WorkflowBuilder\n {...builderProps}\n value={value}\n onChange={setValue}\n workflows={workflows}\n agents={agents}\n eventKinds={eventKinds}\n tasks={tasks}\n people={people}\n tags={tagOptions}\n documents={documentOptions}\n signals={declaredSignals(saved.data ?? [])}\n compose={compose}\n testId={testId}\n actions={\n <>\n {actions}\n {problem && problem !== 'graph' && (\n <span className=\"text-xs text-destructive\">{l.needTrigger}</span>\n )}\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={!!problem || busy || !workspaceId}\n onClick={() => void attempt(true)}\n data-testid={`${testId}-run`}\n >\n {pending?.action === 'run' ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Play className=\"size-4\" />\n )}\n {pending?.action === 'run'\n ? pending.phase === 'saving'\n ? l.saving\n : l.running\n : l.runNow}\n </Button>\n <Button\n size=\"sm\"\n disabled={!!problem || busy || !workspaceId}\n onClick={() => void attempt(false)}\n data-testid={`${testId}-save`}\n >\n {pending?.action === 'save' ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Save className=\"size-4\" />\n )}\n {pending?.action === 'save' ? l.saving : l.save}\n </Button>\n </>\n }\n />\n )\n}\n","/** The Workflows page's words (`ConnectedWorkflowsPage`), and its table's. */\nimport type { TaskTriggerChipLabels } from '../../agents/tasks/TaskTriggerChip'\nimport type { WorkflowListLabels } from '../../agents/tasks/workflowTableLabels'\n\nexport interface ConnectedWorkflowsPageLabels {\n newWorkflow: string\n /** Opens the workflow whose history is shown. */\n edit: string\n editAria: string\n /** The builder's way back to the list. */\n back: string\n /** Runs the catalogue entry open in the builder. */\n runTemplate: string\n /** When a workflow with no trigger of its own starts. */\n manualTrigger: string\n}\n\nexport const DEFAULT_CONNECTED_WORKFLOWS_PAGE_LABELS: ConnectedWorkflowsPageLabels = {\n newWorkflow: 'New workflow',\n edit: 'Edit',\n editAria: 'Edit workflow',\n back: 'Workflows',\n runTemplate: 'Run',\n manualTrigger: 'When started manually',\n}\n\n/** The table's words on this page. */\nexport const DEFAULT_WORKFLOWS_PAGE_TABLE_LABELS: Partial<WorkflowListLabels> = {\n colName: 'Workflow',\n colShared: 'Visibility',\n searchLabel: 'Filter workflows',\n searchPlaceholder: 'Filter…',\n emptyTitle: 'No workflows yet',\n emptyMessage:\n 'Build a workflow of steps for people and agents. Start it by hand, on a schedule, when something happens, or after a thread is marked done.',\n openLastRun: 'Open the latest thread',\n runs: 'History',\n run: 'Start now',\n moreActions: 'Workflow options',\n filterWorkflows: 'Workflows',\n}\n\n/** How the trigger chips say an \"after\" or a manual start on this page. */\nexport const WORKFLOWS_PAGE_TRIGGER_CHIP_LABELS: Partial<TaskTriggerChipLabels> = {\n after: (name) => `After “${name}” is marked done`,\n afterUnknown: 'After a thread is marked done',\n onDemand: 'Manual',\n}\n","/**\n * The Workflows page, connected: one composition of the saved workflows' table\n * (`ConnectedWorkflowsTable`), the visual builder (`ConnectedWorkflowBuilder`) and a workflow's\n * history (`ConnectedWorkflowHistory`), on the shared selection lifecycle\n * (`useWorkflowsPageState`).\n *\n * - The table lists the saved workflows; `groupBy=\"category\"` puts the host's catalogue\n * (`workflows.catalogue` in the host configuration) above them, in the host's categories.\n * - A workflow opens in the builder, which takes the page (Back returns to the list). A document\n * action (annotate or email documents), which runs without a thread, keeps its own editor.\n * - A workflow's history opens as a tab of the table, beside the host's own `tabs`.\n * - `openWorkflow(id, { view })` from anywhere opens the workflow's builder or history here; the\n * host only shows the page. `view: 'run'` on a catalogue entry opens its run page here\n * (`ConnectedWorkflowRunner layout=\"page\"`, with the entry's project options), unless the host\n * shows runs on a page of its own (`runHere={false}`).\n *\n * It navigates only through the environment: threads open with `openConversation`, an AI review's\n * result with `openFiles` (offered when the host has it), a catalogue entry runs with\n * `openWorkflow(id, { view: 'run' })`.\n */\n\nimport { useCallback, useMemo, useState, type ReactNode } from 'react'\nimport { ArrowLeft, Pencil, Play, Plus, Workflow as WorkflowIcon } from 'lucide-react'\nimport {\n useInvalidateTagData,\n useRefreshDocuments,\n useTags,\n useWorkflowRuns,\n type WorkflowResponse,\n} from '@arbidocs/react'\nimport { Button, formatFriendlyDate } from '@arbidocs/react/ui'\nimport { PageHeader, type PageHeaderProps } from '../../components/PageHeader'\nimport { describeTrigger } from '../../agents/tasks/taskHelpers'\nimport type { TaskRunsDialogLabels } from '../../agents/tasks/TaskRunsDialog'\nimport type { WorkflowListLabels } from '../../agents/tasks/workflowTableLabels'\nimport { WEB_WORKFLOWS } from '../../agents/workflows/catalogue/registry'\nimport { DEFAULT_WORKFLOW_TRIGGER } from '../../workflow-canvas/trigger'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from './useOpenWorkflow'\nimport { useHost } from '../../provider/host'\nimport { useIntentRequest, workflowOpenRequest } from '../../provider/requests'\nimport {\n ConnectedWorkflowBuilder,\n type ConnectedWorkflowBuilderProps,\n} from '../ConnectedWorkflowBuilder'\nimport { ConnectedWorkflowHistory } from '../ConnectedWorkflowHistory'\nimport { ConnectedWorkflowsTable } from '../ConnectedWorkflowsTable'\nimport { ConnectedWorkflowRunner } from '../ConnectedWorkflowRunner'\nimport { ConnectedTaskComposer } from '../tasks/ConnectedTaskComposer'\nimport { useRenderTaskPerson } from '../tasks/useTaskPeople'\nimport { useAiReviewStore } from '../files/store'\nimport { useWorkflowsPageState } from './useWorkflowsPageState'\nimport {\n DEFAULT_CONNECTED_WORKFLOWS_PAGE_LABELS,\n DEFAULT_WORKFLOWS_PAGE_TABLE_LABELS,\n WORKFLOWS_PAGE_TRIGGER_CHIP_LABELS,\n type ConnectedWorkflowsPageLabels,\n} from './workflowsPageLabels'\n\ntype WorkflowRun = NonNullable<ReturnType<typeof useWorkflowRuns>['data']>[number]\n\n/** A tab of the host's beside the saved workflows (e.g. the agents that run them). */\nexport interface WorkflowsPageTab {\n id: string\n label: string\n icon?: ReactNode\n content: ReactNode\n}\n\n/** The table's own tab (the saved workflows). */\nconst LIST_TAB = 'automations'\n\nexport interface ConnectedWorkflowsPageProps {\n /** `category`: the host's catalogue in its categories above the saved workflows. */\n groupBy?: 'category'\n /** A host deep link to a workflow's history (e.g. a `?workflow=` URL), taken once it loads. */\n historyWorkflowId?: string | null\n onHistoryWorkflowConsumed?: () => void\n /** A title block over the table (eyebrow, title, description). Absent: none. */\n pageHeader?: Omit<PageHeaderProps, 'actions' | 'tabs'>\n /** The host's tabs beside the saved workflows, before any open history. */\n tabs?: WorkflowsPageTab[]\n /**\n * One of the host's `tabs` to show instead of the saved workflows (a host deep link such as\n * `?tab=agents`): on mount, and again whenever it changes to another tab. Unknown ids show the\n * saved workflows.\n */\n initialTabId?: string | null\n /** The builder's words and options. */\n builderProps?: Pick<\n ConnectedWorkflowBuilderProps,\n | 'labels'\n | 'canvasLabels'\n | 'inspectorLabels'\n | 'triggerLabels'\n | 'connectedLabels'\n | 'eventKinds'\n | 'compose'\n >\n labels?: Partial<ConnectedWorkflowsPageLabels>\n tableLabels?: Partial<WorkflowListLabels>\n historyLabels?: Partial<TaskRunsDialogLabels>\n /**\n * A catalogue entry's run (`openWorkflow(id, { view: 'run' })`) opens here, as the runner's\n * page. false: the host shows runs on a page of its own (its route renders\n * `ConnectedWorkflowRunner layout=\"page\"`). Default: true.\n */\n runHere?: boolean\n testId?: string\n}\n\nexport function ConnectedWorkflowsPage({\n groupBy,\n historyWorkflowId,\n onHistoryWorkflowConsumed,\n pageHeader,\n tabs,\n initialTabId,\n builderProps,\n labels,\n tableLabels,\n historyLabels,\n runHere = true,\n testId = 'workflows-page',\n}: ConnectedWorkflowsPageProps) {\n const l = { ...DEFAULT_CONNECTED_WORKFLOWS_PAGE_LABELS, ...labels }\n const host = useHost()\n const config = host.workflows\n const { openConversation, openFiles } = useBlocksEnvironment()\n const openWorkflow = useOpenWorkflow()\n const renderPerson = useRenderTaskPerson()\n const refreshDocuments = useRefreshDocuments()\n const invalidateTags = useInvalidateTagData()\n const { data: tags = [] } = useTags()\n const [editing, setEditing] = useState<WorkflowResponse | null>(null)\n const [editorOpen, setEditorOpen] = useState(false)\n const [hostTabId, setHostTabId] = useState<string | null>(initialTabId ?? null)\n // The host's link is applied again when it names another tab (the page stays mounted when the\n // host's address changes), never over the person's own choice of tab otherwise.\n const [appliedTabId, setAppliedTabId] = useState(initialTabId)\n if (initialTabId !== appliedTabId) {\n setAppliedTabId(initialTabId)\n if (initialTabId) setHostTabId(initialTabId)\n }\n // The catalogue entry being run (`openWorkflow(id, { view: 'run' })`).\n const [runningId, setRunningId] = useState<string | null>(null)\n // A workflow `openWorkflow(id, { view: 'runs' })` asked for, until it has loaded.\n const [requestedHistoryId, setRequestedHistoryId] = useState<string | null>(null)\n const consumeHistory = useCallback(() => {\n if (requestedHistoryId) setRequestedHistoryId(null)\n else onHistoryWorkflowConsumed?.()\n }, [requestedHistoryId, onHistoryWorkflowConsumed])\n const {\n workflows,\n builder,\n builderKey,\n openBuilder,\n closeBuilder,\n builderSaved,\n historyFor: runsFor,\n historyTabs,\n activeHistoryId,\n openHistory,\n closeHistoryTab,\n selectHistoryTab,\n } = useWorkflowsPageState({\n historyWorkflowId: requestedHistoryId ?? historyWorkflowId,\n onHistoryWorkflowConsumed: consumeHistory,\n })\n const listLabels = useMemo(\n () => ({ ...DEFAULT_WORKFLOWS_PAGE_TABLE_LABELS, ...tableLabels }),\n [tableLabels]\n )\n const hostTab = tabs?.find((tab) => tab.id === hostTabId)\n const showHistory = (workflow: WorkflowResponse | null) => {\n setHostTabId(null)\n openHistory(workflow)\n }\n\n useIntentRequest(workflowOpenRequest, ({ workflowId, view }) => {\n if (view === 'run') {\n if (!runHere || !workflowId) return\n closeBuilder()\n setRunningId(workflowId)\n return\n }\n setRunningId(null)\n if (workflowId && view !== 'runs') {\n openBuilder({ kind: 'saved', id: workflowId })\n return\n }\n closeBuilder()\n setHostTabId(null)\n if (workflowId) setRequestedHistoryId(workflowId)\n else selectHistoryTab(null)\n })\n\n const edit = (workflow: WorkflowResponse) => {\n showHistory(workflow)\n // Every workflow opens in the visual builder: stepped ones as their steps, a classic one (a\n // single prompt or skill) as one agent step, a reminder with no steps yet. Only document actions\n // (annotate / email documents), which run without a thread, keep their own editor.\n if (!workflow.action) {\n openBuilder({ kind: 'saved', id: workflow.external_id })\n return\n }\n setEditing(workflow)\n setEditorOpen(true)\n }\n\n // An AI review's result: its documents re-read, Files narrowed to its label, its fields shown.\n const openResult = async (execution: WorkflowRun) => {\n await refreshDocuments(execution.document_ext_ids)\n await invalidateTags()\n const fieldIds =\n (execution.result?.tag_ext_ids as string[] | undefined) ?? runsFor?.action?.tag_ext_ids ?? []\n useAiReviewStore.getState().setRun({\n docIds: execution.document_ext_ids,\n tags: fieldIds.map((fieldId) => ({\n id: fieldId,\n name: tags.find((tag) => tag.external_id === fieldId)?.name ?? 'Review',\n })),\n })\n useAiReviewStore.getState().setOpen(true)\n openFiles(\n execution.label_ext_id ? { filters: { [execution.label_ext_id]: 'include' } } : undefined\n )\n }\n const renderErrorReport = config?.renderErrorReport\n\n const running = runningId\n ? config?.catalogue?.find((entry) => entry.workflow.id === runningId)\n : undefined\n if (running && running.runnable !== false) {\n const stepWorkflows = config?.stepWorkflows ?? WEB_WORKFLOWS\n return (\n <ConnectedWorkflowRunner\n key={running.workflow.id}\n layout=\"page\"\n workflow={running.workflow}\n projectFrom={running.projectFrom}\n inputsFromProject={running.inputsFromProject}\n onProjectCreated={running.onProjectCreated}\n options={{ resolveWorkflow: (id) => stepWorkflows.find((w) => w.id === id) }}\n renderIcon={config?.renderIcon}\n onOpenConversation={(id) => openConversation(id)}\n pageHeader={{\n eyebrow: running.category,\n leading: (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => setRunningId(null)}\n aria-label={l.back}\n title={l.back}\n data-testid=\"workflow-run-back\"\n >\n <ArrowLeft className=\"size-4\" />\n </Button>\n ),\n }}\n testIdPrefix=\"workflow-run\"\n />\n )\n }\n\n if (builder) {\n const template =\n builder.kind === 'template'\n ? config?.catalogue?.find((entry) => entry.workflow.id === builder.id)\n : undefined\n return (\n <div\n className=\"flex h-full min-h-0 flex-col gap-3 overflow-auto p-4\"\n data-testid=\"workflow-builder\"\n >\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={closeBuilder}\n data-testid=\"workflow-builder-back\"\n >\n <ArrowLeft className=\"size-4\" /> {l.back}\n </Button>\n {template && template.runnable !== false && openWorkflow && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => openWorkflow(template.workflow.id, { view: 'run' })}\n data-testid=\"workflow-builder-run\"\n >\n <Play className=\"size-4\" /> {l.runTemplate}\n </Button>\n )}\n </div>\n <ConnectedWorkflowBuilder\n key={builderKey}\n workflowId={builder.kind === 'saved' ? builder.id : undefined}\n initial={\n template\n ? { workflow: template.workflow, trigger: DEFAULT_WORKFLOW_TRIGGER }\n : undefined\n }\n workflows={config?.stepWorkflows ?? WEB_WORKFLOWS}\n renderIcon={config?.renderIcon}\n onSaved={(id) => builderSaved(id, builderKey)}\n testId=\"workflow-builder-canvas\"\n {...builderProps}\n />\n </div>\n )\n }\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-testid={testId}>\n {pageHeader && <PageHeader {...pageHeader} />}\n <ConnectedWorkflowsTable\n groupBy={groupBy}\n onOpenTemplate={(id) => openBuilder({ kind: 'template', id })}\n tabs={[\n ...(tabs ?? []).map(({ id, label, icon }) => ({ id, label, icon })),\n ...historyTabs.map((workflow) => ({\n id: workflow.external_id,\n label: workflow.name,\n icon: <WorkflowIcon className=\"size-3.5\" />,\n onClose: () => {\n closeHistoryTab(workflow.external_id)\n if (activeHistoryId === workflow.external_id) setEditorOpen(false)\n },\n })),\n ]}\n activeTabId={hostTab?.id ?? activeHistoryId ?? LIST_TAB}\n onTabChange={(id) => {\n if (tabs?.some((tab) => tab.id === id)) {\n setHostTabId(id)\n return\n }\n setHostTabId(null)\n selectHistoryTab(id === LIST_TAB ? null : id)\n if (editorOpen) {\n const workflow = workflows.find((item) => item.external_id === id)\n if (workflow) setEditing(workflow)\n else setEditorOpen(false)\n }\n }}\n content={\n hostTab ? (\n hostTab.content\n ) : runsFor ? (\n <ConnectedWorkflowHistory\n inline\n hideHeader\n workflow={runsFor}\n onOpenChange={(open) => !open && openHistory(null)}\n formatDate={formatFriendlyDate}\n labels={historyLabels}\n renderErrorReport={\n renderErrorReport &&\n ((run) =>\n renderErrorReport(\n JSON.stringify(\n {\n workflow_ext_id: runsFor.external_id,\n run_id: run.id,\n status: run.status,\n error: run.error,\n },\n null,\n 2\n )\n ))\n }\n // Offered where the host shows files (its `openFiles`).\n onOpenResult={host.environment?.openFiles ? openResult : undefined}\n />\n ) : undefined\n }\n automationsOnly\n gridId=\"automations-grid-v1\"\n describeTrigger={(workflow) =>\n workflow.on_demand ? l.manualTrigger : describeTrigger(workflow)\n }\n formatDate={formatFriendlyDate}\n renderPerson={renderPerson}\n onViewRuns={showHistory}\n onOpenRow={edit}\n onEdit={edit}\n triggerChipLabels={WORKFLOWS_PAGE_TRIGGER_CHIP_LABELS}\n labels={listLabels}\n // A narrow row (a phone) keeps the actions' icons, so the host's tabs keep their room.\n header={(isCompact) => (\n <>\n {runsFor && !hostTab && (\n <Button\n variant=\"ghost\"\n onClick={() => edit(runsFor)}\n aria-label={l.editAria}\n title={isCompact ? l.edit : undefined}\n >\n <Pencil className={isCompact ? 'size-4' : 'mr-1.5 size-4'} />\n {!isCompact && l.edit}\n </Button>\n )}\n <Button\n onClick={() => openBuilder({ kind: 'new' })}\n aria-label={isCompact ? l.newWorkflow : undefined}\n title={isCompact ? l.newWorkflow : undefined}\n data-testid=\"new-workflow-button\"\n >\n <Plus className={isCompact ? 'size-4' : 'mr-1.5 size-4'} />\n {!isCompact && l.newWorkflow}\n </Button>\n </>\n )}\n />\n <ConnectedTaskComposer\n kind=\"workflow\"\n saveOnly\n startLater\n open={editorOpen}\n onOpenChange={setEditorOpen}\n workflow={editing}\n />\n </div>\n )\n}\n"]}
|