@arbidocs/blocks 0.4.74 → 0.4.76
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 +2 -1
- package/dist/agents/index.cjs +267 -254
- package/dist/agents/index.js +5 -4
- package/dist/agents/tasks/TaskActivityTimeline.d.ts +1 -1
- package/dist/agents/tasks/WorkflowThreadStrip.d.ts +38 -1
- package/dist/agents/tasks/index.d.ts +2 -1
- package/dist/agents/tasks/linkedRuns.d.ts +31 -0
- package/dist/agents/workflows/index.d.ts +1 -1
- package/dist/agents/workflows/planSteps.d.ts +3 -1
- package/dist/agents/workflows/types.d.ts +27 -0
- package/dist/{chunk-YWYVIQ7T.js → chunk-22P5KNIM.js} +24 -4
- package/dist/chunk-22P5KNIM.js.map +1 -0
- package/dist/{chunk-5LP54CWR.cjs → chunk-7FKARMA3.cjs} +175 -69
- package/dist/chunk-7FKARMA3.cjs.map +1 -0
- package/dist/{chunk-IA7RTPT3.cjs → chunk-IXALYQT7.cjs} +2 -200
- package/dist/chunk-IXALYQT7.cjs.map +1 -0
- package/dist/chunk-NUNKSZKU.js +203 -0
- package/dist/chunk-NUNKSZKU.js.map +1 -0
- package/dist/{chunk-6OL5S7MJ.cjs → chunk-NYBIKDWI.cjs} +5 -2
- package/dist/chunk-NYBIKDWI.cjs.map +1 -0
- package/dist/{chunk-D46ZAPEE.js → chunk-R3PDNQYT.js} +5 -2
- package/dist/chunk-R3PDNQYT.js.map +1 -0
- package/dist/{chunk-KOSGX3UK.js → chunk-TKB7TVMW.js} +134 -30
- package/dist/chunk-TKB7TVMW.js.map +1 -0
- package/dist/chunk-V4ISCZJ7.cjs +207 -0
- package/dist/chunk-V4ISCZJ7.cjs.map +1 -0
- package/dist/{chunk-P2RBE3FD.cjs → chunk-VYRKO3XU.cjs} +24 -3
- package/dist/chunk-VYRKO3XU.cjs.map +1 -0
- package/dist/{chunk-BUHKUKKB.js → chunk-ZPLG7QYF.js} +4 -199
- package/dist/chunk-ZPLG7QYF.js.map +1 -0
- package/dist/connect/index.cjs +9 -9
- package/dist/connect/index.js +2 -2
- package/dist/databases/DatabaseColumnDialog.d.ts +43 -0
- package/dist/databases/DatabaseList.d.ts +28 -0
- package/dist/databases/DatabaseTable.d.ts +38 -0
- package/dist/databases/DatabaseToolbar.d.ts +38 -0
- package/dist/databases/NewDatabaseDialog.d.ts +25 -0
- package/dist/databases/SelectCellEditor.d.ts +6 -0
- package/dist/databases/SelectChip.d.ts +4 -0
- package/dist/databases/column-types.d.ts +58 -0
- package/dist/databases/databaseColumns.d.ts +28 -0
- package/dist/databases/index.cjs +1081 -0
- package/dist/databases/index.cjs.map +1 -0
- package/dist/databases/index.d.ts +13 -0
- package/dist/databases/index.js +1055 -0
- package/dist/databases/index.js.map +1 -0
- package/dist/facts/index.cjs +8 -7
- package/dist/facts/index.cjs.map +1 -1
- package/dist/facts/index.js +4 -3
- package/dist/facts/index.js.map +1 -1
- package/dist/files/index.cjs +15 -14
- package/dist/files/index.cjs.map +1 -1
- package/dist/files/index.js +5 -3
- package/dist/files/index.js.map +1 -1
- package/dist/home/index.cjs +1 -1
- package/dist/home/index.js +1 -1
- package/dist/index.cjs +508 -495
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +9 -8
- package/dist/index.js.map +1 -1
- package/dist/shell/ActionCluster.d.ts +3 -1
- package/dist/shell/index.cjs +46 -46
- package/dist/shell/index.js +2 -2
- package/dist/studio/index.cjs +1 -1
- package/dist/studio/index.js +1 -1
- package/dist/workflow-canvas/SignalsEditor.d.ts +41 -0
- package/dist/workflow-canvas/StepInspector.d.ts +4 -1
- package/dist/workflow-canvas/TriggerInspector.d.ts +11 -2
- package/dist/workflow-canvas/WorkflowBuilder.d.ts +7 -2
- package/dist/workflow-canvas/index.cjs +445 -150
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.d.ts +2 -1
- package/dist/workflow-canvas/index.js +412 -124
- package/dist/workflow-canvas/index.js.map +1 -1
- package/dist/workflow-canvas/trigger.d.ts +20 -1
- package/package.json +9 -4
- package/dist/chunk-5LP54CWR.cjs.map +0 -1
- package/dist/chunk-6OL5S7MJ.cjs.map +0 -1
- package/dist/chunk-BUHKUKKB.js.map +0 -1
- package/dist/chunk-D46ZAPEE.js.map +0 -1
- package/dist/chunk-IA7RTPT3.cjs.map +0 -1
- package/dist/chunk-KOSGX3UK.js.map +0 -1
- package/dist/chunk-P2RBE3FD.cjs.map +0 -1
- package/dist/chunk-YWYVIQ7T.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workflow-canvas/edit.ts","../../src/workflow-canvas/StepInspector.tsx","../../src/workflow-canvas/TriggerInspector.tsx","../../src/workflow-canvas/viewport.ts","../../src/workflow-canvas/WorkflowCanvas.tsx","../../src/workflow-canvas/WorkflowBuilder.tsx","../../src/workflow-canvas/trigger.ts","../../src/connection/ConnectedWorkflowBuilder.tsx"],"names":["selectClass","jsxs","jsx","Label","cn","Input","Plus","KINDS","useState","useMemo","Button","Fragment","Popover","PopoverTrigger","PopoverContent","X","useEffect","saved","Loader2"],"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 WorkflowDefinition,\n type WorkflowStep,\n} from '../agents'\n\ntype Steps = Extract<WorkflowDefinition['run'], { kind: 'steps' }>\nexport type WorkflowLayout = NonNullable<Steps['layout']>\nexport type WorkflowStepKind = WorkflowStep['kind']\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}\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 }\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 }\n if (s.kind === 'review' && s.instructions)\n return { ...s, instructions: renameIn(s.instructions, from, to) }\n return s\n })\n return withSteps(workflow, steps)\n}\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 * 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 type { ReactNode } from 'react'\nimport { Plus, Trash2, X } from 'lucide-react'\nimport { Button, Checkbox, Input, Label, Textarea, cn } from '@arbidocs/react/ui'\nimport {\n runFields,\n stepDependencies,\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'\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 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 deleteStep: 'Delete step',\n}\n\nconst FIELD_TYPES: WorkflowFieldType[] = ['text', 'longtext', 'boolean', 'number', 'date', 'scope']\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 labels?: Partial<StepInspectorLabels>\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\nfunction Field({ label, children, hint }: { label: string; children: ReactNode; hint?: string }) {\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\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 labels,\n testId = 'step-inspector',\n}: StepInspectorProps) {\n const l = { ...DEFAULT_STEP_INSPECTOR_LABELS, ...labels }\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 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={steps\n .flatMap((s) => (s.kind === 'form' && s.id !== step.id ? s.inputs : []))\n .map((f) => f.name)}\n onChange={(inputs) => {\n // A field whose code followed its label: the steps reading it follow too.\n const renamed = step.inputs.flatMap((f, i) =>\n inputs[i] && inputs[i].name !== f.name ? [[f.name, inputs[i].name] as const] : []\n )\n onChange(\n renamed.reduce(\n (w, [from, to]) => renameInput(w, from, to),\n updateStep(workflow, step.id, { inputs })\n )\n )\n }}\n l={l}\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 <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 )}\n\n {step.kind === 'review' && (\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 )}\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\nfunction FormFields({\n fields,\n taken,\n onChange,\n l,\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: StepInspectorLabels\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}>\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 {FIELD_TYPES.map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\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 </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 */\nexport function 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 * 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 type { WorkflowStart, WorkflowTrigger } 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 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 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 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 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 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 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 })}\n data-testid={`${testId}-event`}\n >\n <option value=\"\">{l.eventPlaceholder}</option>\n {eventKinds.map((k) => (\n <option key={k.value} value={k.value}>\n {k.label}\n </option>\n ))}\n </select>\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 * 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 Bot,\n Check,\n ClipboardCheck,\n FileInput,\n GitBranch,\n Loader2,\n Maximize,\n MinusCircle,\n Plus,\n Upload,\n Zap,\n} from 'lucide-react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport {\n stepDependencies,\n workflowSteps,\n type WorkflowDefinition,\n type WorkflowStep,\n type WorkflowStepPhase,\n} from '../agents'\nimport {\n connectSteps,\n disconnectSteps,\n layoutWithDefaults,\n moveStep,\n removeStep,\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 /** 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 emptyTitle: string\n emptyHint: string\n fitView: string\n}\n\nexport const DEFAULT_WORKFLOW_CANVAS_LABELS: WorkflowCanvasLabels = {\n form: 'Form',\n upload: 'Upload',\n agent: 'AI step',\n review: 'Approval',\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 },\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 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 /**\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\nexport const STEP_KIND_ICONS = {\n form: FileInput,\n upload: Upload,\n agent: Bot,\n review: ClipboardCheck,\n} as const\n\nconst KINDS: WorkflowStepKind[] = ['form', 'upload', 'agent', 'review']\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 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 === '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, icon, l, onAdd, testId } = data\n const KindIcon = STEP_KIND_ICONS[step.kind]\n return (\n <div\n className={cn(\n 'wf-node w-64 py-3 pl-4 pr-3 text-left',\n `wf-kind-${step.kind}`,\n phase && `wf-phase-${phase}`\n )}\n data-testid={`${testId}-node-${step.id}`}\n data-phase={phase}\n >\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[step.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 {step.kind === 'agent' && step.branch && (\n <span className=\"mt-1.5 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 </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 <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 }\n}\n\nexport function WorkflowCanvas({\n workflow,\n onChange,\n selected = null,\n onSelect,\n focus,\n onAddAfter,\n phases,\n workflowTitle,\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 icon: step.icon && renderIcon ? renderIcon(step.icon) : undefined,\n l,\n onAdd: onAddAfter,\n testId,\n },\n })),\n ]\n }, [workflow, selected, phases, workflowTitle, trigger, renderIcon, l, onAddAfter, testId])\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 // Fit the whole flow, or, when that would shrink the cards past reading, the readable zoom on\n // the selection (centred) or the start (at the left). Opening the canvas and its fit button\n // both do this.\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) => {\n await flow.fitView({\n padding: { top: '48px', bottom: '48px', left: '48px', right: `${reserveRight + 48}px` },\n maxZoom: 1,\n })\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, 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 useWorkflowPreview,\n validateWorkflowGraph,\n workflowSteps,\n type AgentOption,\n type StepComposeOptions,\n type WorkflowDefinition,\n type WorkflowGraphProblem,\n} from '../agents'\nimport { addStep, autoLayout, layoutWithDefaults, type WorkflowStepKind } from './edit'\nimport { StepInspector, type StepInspectorLabels } from './StepInspector'\nimport { TriggerInspector, triggerSummary, type TriggerInspectorLabels } from './TriggerInspector'\nimport type { WorkflowBuilderValue } from './trigger'\nimport {\n DEFAULT_WORKFLOW_CANVAS_LABELS,\n STEP_KIND_ICONS,\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}\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}\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 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: WorkflowStepKind[] = ['form', 'upload', 'agent', 'review']\n\nexport function WorkflowBuilder({\n value,\n onChange,\n workflows = [],\n agents = [],\n eventKinds = [],\n tasks = [],\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 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 > 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 </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 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 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 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 * 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/**\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 /** `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 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' | '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 (trigger.start === 'task' && !trigger.afterTaskId) return 'task'\n return null\n}\n\nfunction triggerFields(trigger: WorkflowTrigger, clearOthers: boolean) {\n const none = clearOthers ? null : undefined\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 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 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 * The workflow builder bound to the connection: it loads a saved workflow (or starts from the\n * host's value), offers the workspace's skills as steps an agent can run, its agents, the events\n * and tasks a workflow can start on, and saves the workflow (its trigger and its steps) or runs it\n * now. Every run is a work thread that runs the steps. 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 useConversations,\n useCreateWorkflow,\n useRunWorkflow,\n useSkills,\n useUpdateWorkflow,\n useWorkflows,\n} from '@arbidocs/react'\nimport { Button } from '@arbidocs/react/ui'\nimport { Loader2, Play, Save } from 'lucide-react'\nimport { skillToWorkflow, type StepComposeOptions, type WorkflowDefinition } from '../agents'\nimport { validateWorkflowGraph, workflowSteps } from '../agents/workflows/run'\nimport { WorkflowBuilder, type WorkflowBuilderProps } from '../workflow-canvas/WorkflowBuilder'\nimport {\n builderToWorkflowRequest,\n builderToWorkflowUpdate,\n triggerProblem,\n workflowRecordToBuilder,\n type WorkflowBuilderValue,\n} from '../workflow-canvas/trigger'\nimport { useConnection } from './ConnectionProvider'\n\nexport interface ConnectedWorkflowBuilderLabels {\n save: string\n saving: string\n runNow: string\n saved: string\n needTrigger: string\n}\n\nexport const DEFAULT_CONNECTED_WORKFLOW_BUILDER_LABELS: ConnectedWorkflowBuilderLabels = {\n save: 'Save',\n saving: 'Saving…',\n runNow: 'Run now',\n saved: 'Saved.',\n needTrigger: 'Finish setting when it starts.',\n}\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_failed', label: 'Another workflow fails' },\n]\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). */\n initial: WorkflowBuilderValue\n /** Host workflows agent steps can run besides the workspace's skills (e.g. its own wording). */\n workflows?: WorkflowDefinition[]\n eventKinds?: Array<{ value: string; label: string }>\n /** Saved (created or updated): its id. */\n onSaved?: (workflowId: string) => void\n /** A run started: its thread. */\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,\n workflows: hostWorkflows = [],\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 { workspaceId } = useConnection()\n const saved = useWorkflows()\n const skills = useSkills()\n const agentsQuery = useAgents()\n const conversations = useConversations(workspaceId ?? undefined)\n const create = useCreateWorkflow()\n const update = useUpdateWorkflow()\n const run = useRunWorkflow()\n const [id, setId] = useState(workflowId)\n const [value, setValue] = useState<WorkflowBuilderValue>(initial)\n const [message, setMessage] = useState<string | null>(null)\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 () => [\n ...hostWorkflows,\n ...(skills.data ?? []).map((s) =>\n skillToWorkflow({\n name: s.name,\n slug: s.slug,\n description: s.description,\n arg_hint: s.arg_hint,\n })\n ),\n ],\n [hostWorkflows, skills.data]\n )\n const agents = (agentsQuery.data ?? []).map((a) => ({\n id: a.external_id,\n label: a.given_name || a.email,\n }))\n const tasks = (conversations.data ?? [])\n .filter((c) => c.status && c.status !== 'done')\n .map((c) => ({ value: c.external_id, label: c.title || c.external_id }))\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 ? 'graph' : null)\n const busy = create.isPending || update.isPending || run.isPending\n\n const save = async (): Promise<string | undefined> => {\n if (!workspaceId) return undefined\n setMessage(null)\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 setMessage(l.saved)\n onSaved?.(result.external_id)\n return result.external_id\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 compose={compose}\n testId={testId}\n actions={\n <>\n {actions}\n {message && <span className=\"text-xs text-muted-foreground\">{message}</span>}\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={async () => {\n const saved = await save()\n if (!saved) return\n const started = await run.mutateAsync(saved)\n onRun?.(started.conversation_ext_id ?? undefined)\n }}\n data-testid={`${testId}-run`}\n >\n <Play className=\"size-4\" /> {l.runNow}\n </Button>\n <Button\n size=\"sm\"\n disabled={!!problem || busy || !workspaceId}\n onClick={() => void save()}\n data-testid={`${testId}-save`}\n >\n {create.isPending || update.isPending ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Save className=\"size-4\" />\n )}\n {create.isPending || update.isPending ? l.saving : l.save}\n </Button>\n </>\n }\n />\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/workflow-canvas/edit.ts","../../src/workflow-canvas/SignalsEditor.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"],"names":["selectClass","jsxs","jsx","Label","Input","X","Button","cn","Plus","KINDS","useState","useMemo","Fragment","Popover","PopoverTrigger","PopoverContent","useEffect","saved","Loader2"],"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 WorkflowDefinition,\n type WorkflowStep,\n} from '../agents'\n\ntype Steps = Extract<WorkflowDefinition['run'], { kind: 'steps' }>\nexport type WorkflowLayout = NonNullable<Steps['layout']>\nexport type WorkflowStepKind = WorkflowStep['kind']\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}\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 }\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 }\n if (s.kind === 'review' && s.instructions)\n return { ...s, instructions: renameIn(s.instructions, from, to) }\n return s\n })\n return withSteps(workflow, steps)\n}\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\nexport function 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 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 type { ReactNode } from 'react'\nimport { Plus, Trash2, X } from 'lucide-react'\nimport { Button, Checkbox, Input, Label, Textarea, cn } from '@arbidocs/react/ui'\nimport {\n runFields,\n stepDependencies,\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'\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 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 deleteStep: 'Delete step',\n}\n\nconst FIELD_TYPES: WorkflowFieldType[] = ['text', 'longtext', 'boolean', 'number', 'date', 'scope']\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 labels?: Partial<StepInspectorLabels>\n /** The \"When done, signal…\" editor's wording. */\n signalLabels?: Partial<SignalsEditorLabels>\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\nfunction Field({ label, children, hint }: { label: string; children: ReactNode; hint?: string }) {\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\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 labels,\n signalLabels,\n testId = 'step-inspector',\n}: StepInspectorProps) {\n const l = { ...DEFAULT_STEP_INSPECTOR_LABELS, ...labels }\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 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={steps\n .flatMap((s) => (s.kind === 'form' && s.id !== step.id ? s.inputs : []))\n .map((f) => f.name)}\n onChange={(inputs) => {\n // A field whose code followed its label: the steps reading it follow too.\n const renamed = step.inputs.flatMap((f, i) =>\n inputs[i] && inputs[i].name !== f.name ? [[f.name, inputs[i].name] as const] : []\n )\n onChange(\n renamed.reduce(\n (w, [from, to]) => renameInput(w, from, to),\n updateStep(workflow, step.id, { inputs })\n )\n )\n }}\n l={l}\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 <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 )}\n\n {step.kind === 'review' && (\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 )}\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\nfunction FormFields({\n fields,\n taken,\n onChange,\n l,\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: StepInspectorLabels\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}>\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 {FIELD_TYPES.map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\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 </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 */\nexport function 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 * 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 Bot,\n Check,\n ClipboardCheck,\n FileInput,\n GitBranch,\n Loader2,\n Maximize,\n MinusCircle,\n Plus,\n Upload,\n Zap,\n} from 'lucide-react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport {\n stepDependencies,\n workflowSteps,\n type WorkflowDefinition,\n type WorkflowStep,\n type WorkflowStepPhase,\n} from '../agents'\nimport {\n connectSteps,\n disconnectSteps,\n layoutWithDefaults,\n moveStep,\n removeStep,\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 /** 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 emptyTitle: string\n emptyHint: string\n fitView: string\n}\n\nexport const DEFAULT_WORKFLOW_CANVAS_LABELS: WorkflowCanvasLabels = {\n form: 'Form',\n upload: 'Upload',\n agent: 'AI step',\n review: 'Approval',\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 },\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 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 /**\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\nexport const STEP_KIND_ICONS = {\n form: FileInput,\n upload: Upload,\n agent: Bot,\n review: ClipboardCheck,\n} as const\n\nconst KINDS: WorkflowStepKind[] = ['form', 'upload', 'agent', 'review']\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 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 === '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, icon, l, onAdd, testId } = data\n const KindIcon = STEP_KIND_ICONS[step.kind]\n return (\n <div\n className={cn(\n 'wf-node w-64 py-3 pl-4 pr-3 text-left',\n `wf-kind-${step.kind}`,\n phase && `wf-phase-${phase}`\n )}\n data-testid={`${testId}-node-${step.id}`}\n data-phase={phase}\n >\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[step.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 {step.kind === 'agent' && step.branch && (\n <span className=\"mt-1.5 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 </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 <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 }\n}\n\nexport function WorkflowCanvas({\n workflow,\n onChange,\n selected = null,\n onSelect,\n focus,\n onAddAfter,\n phases,\n workflowTitle,\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 icon: step.icon && renderIcon ? renderIcon(step.icon) : undefined,\n l,\n onAdd: onAddAfter,\n testId,\n },\n })),\n ]\n }, [workflow, selected, phases, workflowTitle, trigger, renderIcon, l, onAddAfter, testId])\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 // Fit the whole flow, or, when that would shrink the cards past reading, the readable zoom on\n // the selection (centred) or the start (at the left). Opening the canvas and its fit button\n // both do this.\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) => {\n await flow.fitView({\n padding: { top: '48px', bottom: '48px', left: '48px', right: `${reserveRight + 48}px` },\n maxZoom: 1,\n })\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, 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 useWorkflowPreview,\n validateWorkflowGraph,\n workflowSteps,\n type AgentOption,\n type StepComposeOptions,\n type WorkflowDefinition,\n type WorkflowGraphProblem,\n} from '../agents'\nimport { addStep, autoLayout, layoutWithDefaults, type WorkflowStepKind } from './edit'\nimport { StepInspector, type StepInspectorLabels } from './StepInspector'\nimport { TriggerInspector, triggerSummary, type TriggerInspectorLabels } from './TriggerInspector'\nimport { declaredSignals, type DeclaredSignal, type WorkflowBuilderValue } from './trigger'\nimport {\n DEFAULT_WORKFLOW_CANVAS_LABELS,\n STEP_KIND_ICONS,\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}\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}\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 /**\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: WorkflowStepKind[] = ['form', 'upload', 'agent', 'review']\n\nexport function WorkflowBuilder({\n value,\n onChange,\n workflows = [],\n agents = [],\n eventKinds = [],\n tasks = [],\n signals = [],\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 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 > 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 </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 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 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 workspace's skills as steps an agent can run, its agents, the events\n * and tasks a workflow can start on, and saves the workflow (its trigger and its steps) or runs it\n * now. Every run is a work thread that runs the steps. 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 useConversations,\n useCreateWorkflow,\n useRunWorkflow,\n useSkills,\n useUpdateWorkflow,\n useWorkflows,\n} from '@arbidocs/react'\nimport { Button } from '@arbidocs/react/ui'\nimport { Loader2, Play, Save } from 'lucide-react'\nimport { skillToWorkflow, type StepComposeOptions, type WorkflowDefinition } from '../agents'\nimport { validateWorkflowGraph, workflowSteps } from '../agents/workflows/run'\nimport { WorkflowBuilder, type WorkflowBuilderProps } from '../workflow-canvas/WorkflowBuilder'\nimport {\n builderToWorkflowRequest,\n builderToWorkflowUpdate,\n declaredSignals,\n triggerProblem,\n workflowRecordToBuilder,\n type WorkflowBuilderValue,\n} from '../workflow-canvas/trigger'\nimport { useConnection } from './ConnectionProvider'\n\nexport interface ConnectedWorkflowBuilderLabels {\n save: string\n saving: string\n runNow: string\n saved: string\n needTrigger: string\n}\n\nexport const DEFAULT_CONNECTED_WORKFLOW_BUILDER_LABELS: ConnectedWorkflowBuilderLabels = {\n save: 'Save',\n saving: 'Saving…',\n runNow: 'Run now',\n saved: 'Saved.',\n needTrigger: 'Finish setting when it starts.',\n}\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_failed', label: 'Another workflow fails' },\n { value: 'workflow_signal', label: 'When a step signals' },\n]\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). */\n initial: WorkflowBuilderValue\n /** Host workflows agent steps can run besides the workspace's skills (e.g. its own wording). */\n workflows?: WorkflowDefinition[]\n eventKinds?: Array<{ value: string; label: string }>\n /** Saved (created or updated): its id. */\n onSaved?: (workflowId: string) => void\n /** A run started: its thread. */\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,\n workflows: hostWorkflows = [],\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 { workspaceId } = useConnection()\n const saved = useWorkflows()\n const skills = useSkills()\n const agentsQuery = useAgents()\n const conversations = useConversations(workspaceId ?? undefined)\n const create = useCreateWorkflow()\n const update = useUpdateWorkflow()\n const run = useRunWorkflow()\n const [id, setId] = useState(workflowId)\n const [value, setValue] = useState<WorkflowBuilderValue>(initial)\n const [message, setMessage] = useState<string | null>(null)\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 () => [\n ...hostWorkflows,\n ...(skills.data ?? []).map((s) =>\n skillToWorkflow({\n name: s.name,\n slug: s.slug,\n description: s.description,\n arg_hint: s.arg_hint,\n })\n ),\n ],\n [hostWorkflows, skills.data]\n )\n const agents = (agentsQuery.data ?? []).map((a) => ({\n id: a.external_id,\n label: a.given_name || a.email,\n }))\n const tasks = (conversations.data ?? [])\n .filter((c) => c.status && c.status !== 'done')\n .map((c) => ({ value: c.external_id, label: c.title || c.external_id }))\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 ? 'graph' : null)\n const busy = create.isPending || update.isPending || run.isPending\n\n const save = async (): Promise<string | undefined> => {\n if (!workspaceId) return undefined\n setMessage(null)\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 setMessage(l.saved)\n onSaved?.(result.external_id)\n return result.external_id\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 signals={declaredSignals(saved.data ?? [])}\n compose={compose}\n testId={testId}\n actions={\n <>\n {actions}\n {message && <span className=\"text-xs text-muted-foreground\">{message}</span>}\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={async () => {\n const saved = await save()\n if (!saved) return\n const started = await run.mutateAsync(saved)\n onRun?.(started.conversation_ext_id ?? undefined)\n }}\n data-testid={`${testId}-run`}\n >\n <Play className=\"size-4\" /> {l.runNow}\n </Button>\n <Button\n size=\"sm\"\n disabled={!!problem || busy || !workspaceId}\n onClick={() => void save()}\n data-testid={`${testId}-save`}\n >\n {create.isPending || update.isPending ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Save className=\"size-4\" />\n )}\n {create.isPending || update.isPending ? l.saving : l.save}\n </Button>\n </>\n }\n />\n )\n}\n"]}
|