@arbidocs/blocks 0.4.77 → 0.4.79
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/dist/agents/index.cjs +287 -275
- package/dist/agents/index.js +3 -3
- package/dist/agents/tasks/WorkflowThreadStrip.d.ts +9 -4
- package/dist/agents/workflows/StepBarFrame.d.ts +75 -0
- package/dist/agents/workflows/WorkflowRunner.d.ts +5 -1
- package/dist/agents/workflows/WorkflowStepBar.d.ts +9 -11
- package/dist/agents/workflows/index.d.ts +2 -0
- package/dist/agents/workflows/stepWindow.d.ts +59 -0
- package/dist/chat/ChatPage.d.ts +1 -1
- package/dist/chat/chat-page-types.d.ts +5 -0
- package/dist/chat/index.cjs +124 -124
- package/dist/chat/index.js +2 -2
- package/dist/{chunk-JFUN4D7D.cjs → chunk-3YET6D5E.cjs} +150 -146
- package/dist/chunk-3YET6D5E.cjs.map +1 -0
- package/dist/{chunk-B3WCKBJ7.cjs → chunk-5XVWGJ2H.cjs} +3 -3
- package/dist/{chunk-B3WCKBJ7.cjs.map → chunk-5XVWGJ2H.cjs.map} +1 -1
- package/dist/{chunk-34UW6XUQ.js → chunk-6GXF62XN.js} +566 -171
- package/dist/chunk-6GXF62XN.js.map +1 -0
- package/dist/{chunk-HEVVT6IT.js → chunk-BMOL5DN6.js} +126 -122
- package/dist/chunk-BMOL5DN6.js.map +1 -0
- package/dist/chunk-CWAZNXC5.js +441 -0
- package/dist/chunk-CWAZNXC5.js.map +1 -0
- package/dist/{chunk-NIP5BOP7.js → chunk-EWSEQEPL.js} +5 -4
- package/dist/chunk-EWSEQEPL.js.map +1 -0
- package/dist/{chunk-UEU23PTW.js → chunk-ICBAFX5B.js} +3 -3
- package/dist/{chunk-UEU23PTW.js.map → chunk-ICBAFX5B.js.map} +1 -1
- package/dist/{chunk-EKIUMNCN.cjs → chunk-IF6VAYIA.cjs} +5 -5
- package/dist/{chunk-EKIUMNCN.cjs.map → chunk-IF6VAYIA.cjs.map} +1 -1
- package/dist/chunk-MLAHDAN5.cjs +450 -0
- package/dist/chunk-MLAHDAN5.cjs.map +1 -0
- package/dist/{chunk-HOD6OM7L.cjs → chunk-MP6FK43E.cjs} +5 -4
- package/dist/chunk-MP6FK43E.cjs.map +1 -0
- package/dist/{chunk-GJV2G4FC.js → chunk-O35LRB3P.js} +3 -3
- package/dist/{chunk-GJV2G4FC.js.map → chunk-O35LRB3P.js.map} +1 -1
- package/dist/{chunk-GTXOV7IJ.cjs → chunk-XMBYDLZQ.cjs} +4 -4
- package/dist/{chunk-GTXOV7IJ.cjs.map → chunk-XMBYDLZQ.cjs.map} +1 -1
- package/dist/{chunk-OEM5ARVM.js → chunk-XQDM6T6C.js} +3 -3
- package/dist/{chunk-OEM5ARVM.js.map → chunk-XQDM6T6C.js.map} +1 -1
- package/dist/{chunk-3XR3IEGU.cjs → chunk-YGUKTFKW.cjs} +572 -167
- package/dist/chunk-YGUKTFKW.cjs.map +1 -0
- package/dist/connect/index.cjs +233 -77
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +2 -0
- package/dist/connect/index.js +191 -37
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedTagMatrix.d.ts +20 -0
- package/dist/connection/ConnectedWorkflowRunner.d.ts +13 -1
- package/dist/connection/WorkflowRunThread.d.ts +21 -0
- package/dist/databases/ColumnConfigFields.d.ts +68 -0
- package/dist/databases/DatabaseColumnDialog.d.ts +27 -2
- package/dist/databases/DatabaseTable.d.ts +8 -1
- package/dist/databases/PickCellEditor.d.ts +21 -0
- package/dist/databases/column-types.d.ts +73 -9
- package/dist/databases/databaseColumns.d.ts +4 -0
- package/dist/databases/index.cjs +758 -27
- package/dist/databases/index.cjs.map +1 -1
- package/dist/databases/index.d.ts +4 -1
- package/dist/databases/index.js +745 -31
- package/dist/databases/index.js.map +1 -1
- package/dist/databases/linkCells.d.ts +48 -0
- package/dist/files/index.cjs +2 -2
- package/dist/files/index.js +2 -2
- package/dist/index.cjs +624 -579
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +9 -8
- package/dist/index.js.map +1 -1
- package/dist/settings/index.cjs +35 -35
- package/dist/settings/index.js +3 -3
- package/dist/studio/index.cjs +3 -3
- package/dist/studio/index.js +2 -2
- package/dist/tags/TagMatrix.d.ts +64 -0
- package/dist/tags/index.d.ts +3 -0
- package/dist/tags/tagMatrixModel.d.ts +39 -0
- package/dist/workflow-canvas/index.cjs +46 -46
- package/dist/workflow-canvas/index.js +3 -3
- package/dist/workspaces/index.cjs +1 -1
- package/dist/workspaces/index.js +1 -1
- package/package.json +4 -4
- package/dist/chunk-34UW6XUQ.js.map +0 -1
- package/dist/chunk-3XR3IEGU.cjs.map +0 -1
- package/dist/chunk-HEVVT6IT.js.map +0 -1
- package/dist/chunk-HOD6OM7L.cjs.map +0 -1
- package/dist/chunk-JFUN4D7D.cjs.map +0 -1
- package/dist/chunk-NIP5BOP7.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/agents/workflows/types.ts","../src/agents/workflows/workflow.ts","../src/agents/workflows/SchemaForm.tsx","../src/agents/workflows/run.ts","../src/agents/workflows/planSteps.ts","../src/agents/workflows/useWorkflowView.ts","../src/agents/workflows/StepParts.tsx","../src/agents/workflows/WorkflowStepBar.tsx","../src/agents/workflows/WorkflowRunner.tsx"],"names":["jsx","Input","Textarea","Switch","jsxs","prefixedTestId","cn","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Label","Fragment","useState","testIdOr","FoldSection","str","before","waiting","finished","compact","FIELD_TYPES","useRef","useEffect","useCallback","act","useMemo","FileText","UserRound","CornerUpLeft","Button","ShieldCheck","MessageSquare","Loader2","Check","Hourglass","Clock","PenLine","X","ExternalLink","Mail","Table2","AlertTriangle","MinusCircle","useElementSize","useLayoutEffect","Card","CheckCircle2","UploadDropzone","ArrowLeft","ArrowRight","RotateCw","GitBranch"],"mappings":"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","file":"chunk-3XR3IEGU.cjs","sourcesContent":["/**\n * The one workflow model: a skill with a declared input schema. Everything launchable (a quick\n * action, a slash skill, a task body, an agent's job) is a `WorkflowDefinition`.\n *\n * The shape maps 1:1 onto future SKILL.md frontmatter (`inputs:` etc., snake_case on disk; see\n * `workflowFromFrontmatter`), so the backend can adopt it without a UI change. Blocks hold no\n * domain wording: titles, labels and prompt text are data supplied by the host.\n */\n\nexport type WorkflowFieldType =\n | 'text'\n | 'longtext'\n | 'boolean'\n | 'select'\n | 'number'\n | 'date'\n | 'scope'\n | 'documents'\n /** A workspace member (`usr-…` / `agt-…`): what a step's assignee or a signer can name. */\n | 'person'\n\n/**\n * What a launching surface can hand a workflow without asking the user: the files it is looking at\n * (`documents`), the text the user selected (`selection`), or the image on screen (`image`, a file\n * id). A field binds to one with `context`; a surface offers a workflow when it can supply one of\n * the kinds the workflow declares (`workflowAccepts`).\n */\nexport type WorkflowContextKind = 'documents' | 'selection' | 'image'\n\n/** Where the user ends up after launching. `current-chat` sends into the chat already on screen. */\nexport type WorkflowLanding = 'chat' | 'current-chat' | 'files'\n\n/** Which files a run is limited to. Empty folders and labels = every file. */\nexport interface WorkflowScope {\n /** Folder paths; `''` is the unfiled bucket. */\n folders: string[]\n /** Label (tag) ids. */\n labels: string[]\n /** Exactly these files (ids). When present it wins over folders and labels: a `documents` field or a context launch. */\n documents?: string[]\n}\n\nexport const EMPTY_WORKFLOW_SCOPE: WorkflowScope = { folders: [], labels: [] }\n\nexport type WorkflowInputValue = string | number | boolean | WorkflowScope\n\nexport interface WorkflowFieldOption {\n value: string\n label: string\n description?: string\n /** Prompt fragment substituted for `{{name}}` when chosen (falls back to the label). */\n text?: string\n /** Key into the host's icon map. */\n icon?: string\n}\n\nexport interface WorkflowField {\n /** Key in `inputs`; also the `{{placeholder}}` in the prompt template. */\n name: string\n type: WorkflowFieldType\n label: string\n description?: string\n placeholder?: string\n required?: boolean\n default?: WorkflowInputValue\n /** `select` only. */\n options?: WorkflowFieldOption[]\n /** `number` only. */\n min?: number\n max?: number\n /** `boolean`: prompt fragments substituted for `{{name}}`. */\n trueText?: string\n falseText?: string\n /** Fold behind a disclosure: advanced wording the common run does not need. */\n advanced?: boolean\n /** `scope` only: which dimensions are offered. Default both. */\n by?: Array<'folders' | 'labels'>\n /** `documents` only: what kind of file is offered; `max` is how many may be picked (default 1). */\n accept?: 'image'\n /** Prefilled by a launching surface that supplies this kind of context (see `WorkflowContextKind`). */\n context?: WorkflowContextKind\n}\n\nexport type WorkflowRun =\n /** Compose a message from `promptTemplate` and send it. */\n | { kind: 'prompt'; promptTemplate: string }\n /** The host performs it (bound by workflow id), e.g. create a label then generate. */\n | { kind: 'operation' }\n /**\n * A guided run of named steps that form a graph. A run is a work thread on the server: the\n * thread's plan carries the steps (`toPlanSteps`), its activity log records each step's progress,\n * and the work runner starts each agent step as a turn in the thread. A person does the form,\n * upload and review steps (`useWorkflowThread` / `WorkflowRunner`). Not schedulable from a single\n * form: a workflow (automation) carries the steps and its trigger (`WorkflowBuilder`).\n */\n | {\n kind: 'steps'\n /** The run thread's title, a template over the run's inputs; defaults to the workflow's. */\n threadTitle?: string\n /** In dependency order: a step only waits for steps listed before it (`orderSteps`). */\n steps: WorkflowStep[]\n completion?: WorkflowCompletion\n /** Where each step sits on the builder's canvas, by step id. */\n layout?: Record<string, { x: number; y: number }>\n }\n\n/* ------------------------------- steps ------------------------------- */\n\n/**\n * When a step's signal is raised, tested against the step's outcome once it is done (a skipped or\n * failed step never signals): a form field equals a value (case-insensitive text), the agent's\n * answer contains a phrase or matches a regex, or a review is approved. Absent = whenever it is done.\n */\nexport type WorkflowSignalWhen =\n | { field: string; equals: string | number | boolean }\n | { contains: string }\n | { matches: string }\n | { approved: true }\n\n/**\n * A named signal a step raises when it is done and its condition holds. Another workflow starts on\n * it (\"When a step signals\") as its own thread linked to this one, so the if/then between\n * workflows lives in the link and each workflow stays short.\n */\nexport interface WorkflowSignal {\n /** A slug (`[a-z0-9][a-z0-9_.-]*`), e.g. `risk-high`: what a linked workflow listens for. */\n name: string\n when?: WorkflowSignalWhen\n}\n\ninterface WorkflowStepBase {\n /** Unique within the workflow (`[a-z][a-z0-9_-]*`): the thread's progress is keyed by it. */\n id: string\n /** The step's name: the stepper and the thread's top bar show it. */\n title: string\n /** One line under the step's heading. */\n description?: string\n /** Key into the host's icon map. */\n icon?: string\n /**\n * The host commits this step before the run moves on (`commit[id]`), e.g. creates the record\n * later steps work in. Once committed the step's inputs are locked.\n */\n commit?: boolean\n /** Primary button text while on this step (until it is committed); defaults to \"Continue\". */\n nextLabel?: string\n /**\n * The steps this one waits for. Absent: the step before it in the list, so a plain list is a\n * sequence. `[]`: it starts with the run. A step waiting for several waits for them all.\n */\n after?: string[]\n /** Signals the step raises when it is done and their condition holds. */\n signals?: WorkflowSignal[]\n /**\n * Who the step is for (a person step, or a signature or email step): they are told when it is\n * ready, and only they (or the run's owner) can do it. Absent: whoever is on the run.\n */\n assignee?: WorkflowAssignee\n /** A person step left this many hours is announced again (once). */\n remindAfterHours?: number\n}\n\n/**\n * Who a step is for: a named member (`usr-…` / `agt-…`), whoever started the run, the person a\n * form's `person` field names (`input`: its name), or the project's lead.\n */\nexport type WorkflowAssignee =\n { user: string } | { runOwner: true } | { input: string } | { projectLead: true }\n\n/**\n * A document a step works on, named by where it comes from: what an earlier step produced or was\n * given (an upload's files, an agent's draft, a signed copy, an edited version), what a run input\n * names (a document pick), or one document by id (`doc-…`, optionally `@v<n>`).\n */\nexport type WorkflowDocumentRef = { step: string } | { input: string } | { id: string }\n\n/** Ask people to e-sign a document. The step waits until every signer has signed. */\nexport interface WorkflowSignAction {\n type: 'sign'\n document?: WorkflowDocumentRef\n signers: WorkflowAssignee[]\n /** Shown to the signers. */\n message?: string\n /** Unsigned this long after it starts, the step fails. */\n expiresAfterHours?: number\n}\n\n/**\n * Prepare an email in native mail, never sent by itself: its person sends it, and the step is done\n * when they say so (or send it). Every text is a template over the run (`{{field}}`,\n * `{{step.answer}}`).\n */\nexport interface WorkflowEmailDraftAction {\n type: 'email_draft'\n to: string[]\n cc?: string[]\n subject: string\n body: string\n attachments?: WorkflowDocumentRef[]\n}\n\n/** Run review columns (labels with instructions) over documents, then open the grid. */\nexport interface WorkflowTabularReviewAction {\n type: 'tabular_review'\n /** Label (tag) ids: the columns. */\n tags: string[]\n /** Every file the run's uploads took, every document of the workspace, or these documents. */\n documents: 'run_uploads' | 'workspace' | WorkflowDocumentRef[]\n /** Fill cells that already have a value again. */\n overwrite?: boolean\n}\n\nexport type WorkflowAction =\n WorkflowSignAction | WorkflowEmailDraftAction | WorkflowTabularReviewAction\nexport type WorkflowActionType = WorkflowAction['type']\n\n/** Ask for inputs. Every step's fields share the run's one input namespace (`{{name}}`). */\nexport interface WorkflowFormStep extends WorkflowStepBase {\n kind: 'form'\n inputs: WorkflowField[]\n}\n\n/** Add files to the run's workspace. Skippable unless `required`. */\nexport interface WorkflowUploadStep extends WorkflowStepBase {\n kind: 'upload'\n required?: boolean\n /** `accept` of the file picker, e.g. `.pdf,.docx`. */\n accept?: string\n /** Small muted line under the drop target. */\n hint?: string\n}\n\n/**\n * A turn the assistant takes in the run's thread. It runs a skill or another workflow\n * (`workflow`, its inputs filled from `with`) or its own `run`. It continues the thread's main\n * line, so it sees everything before it; a `branch` step runs off the main line instead and\n * delivers only its result back to it.\n */\nexport interface WorkflowAgentStep extends WorkflowStepBase {\n kind: 'agent'\n /** Id of the skill or workflow this step runs; its inputs come from `with`. */\n workflow?: string\n /**\n * The named workflow's inputs, each a template over the run's inputs: `{{client}}`, with\n * `{{a || b}}` falling back to `b` when `a` is blank. A bare `{{name}}` passes the value as is.\n */\n with?: Record<string, string>\n /** Used when no `workflow` is named. `operation`: the host composes the prompt (`compose`). */\n run?: Extract<WorkflowRun, { kind: 'prompt' } | { kind: 'operation' }>\n /** What the step shows: the answer (default) or the drafted document. */\n output?: 'answer' | 'artifact'\n /** Runs off the thread's main line and delivers only its result to it. */\n branch?: boolean\n /**\n * Edit this Word document with tracked changes (the instruction says what to change); the\n * edited copy is its next version, to accept or reject change by change. Main line only.\n */\n editDocument?: WorkflowDocumentRef\n}\n\n/** A person's review or approval: whoever completes it on the thread approves it. */\nexport interface WorkflowReviewStep extends WorkflowStepBase {\n kind: 'review'\n /** What to review, a template over the run's inputs. */\n instructions?: string\n /** What the approver fills in when approving (e.g. a rating): they join the run's inputs. */\n fields?: WorkflowField[]\n}\n\n/**\n * A step that uses a platform feature rather than producing text: an e-signature, an email draft\n * or a tabular review. It starts by itself; a signature and an email then wait for their people.\n */\nexport interface WorkflowActionStep extends WorkflowStepBase {\n kind: 'action'\n action: WorkflowAction\n}\n\nexport type WorkflowStep =\n | WorkflowFormStep\n | WorkflowUploadStep\n | WorkflowAgentStep\n | WorkflowReviewStep\n | WorkflowActionStep\n\n/** The finish screen of a stepped run. */\nexport interface WorkflowCompletion {\n title: string\n description?: string\n icon?: string\n}\n\n/**\n * Where a step of a run is, as the thread records it: not reached yet (`pending`), `running`,\n * `waiting` (an action step waiting on its signers or on its email being sent), `done`,\n * `skipped`, or `failed` (it can be retried or skipped).\n */\nexport type WorkflowStepStatus = 'pending' | 'running' | 'waiting' | 'done' | 'skipped' | 'failed'\n\n/** What an action step waits on (ids only), as its latest event says. */\nexport interface WorkflowActionWaiting {\n /** A signature: the document and version to sign, who signs, who has signed. */\n doc_ext_id?: string\n version?: number\n signers?: string[]\n signed?: string[]\n expires_at?: string\n /** An email: the draft in native mail and whose mailbox it is in. */\n draft_id?: string\n mailbox?: string\n [key: string]: unknown\n}\n\n/** What a review recorded it approved: each step it waited for, as it stood then. */\nexport interface WorkflowApprovalEvidence {\n step: string\n status: string\n /** That step's answer (a message in the thread). */\n response_id?: string\n /** The document versions it had (`doc-…@v<n>`). */\n documents?: string[]\n output?: Record<string, unknown>\n}\n\nexport interface WorkflowStepState {\n status: WorkflowStepStatus\n /** The step's answer in the thread (an agent step), or the result a branch delivered. */\n responseId?: string | null\n /** The answer's text, once read. */\n text?: string\n error?: string | null\n /** When it started running (ISO), for the elapsed time while it runs. */\n startedAt?: string\n /** An action step's type, once it has started. */\n action?: WorkflowActionType\n /** What a `waiting` action step waits on. */\n waiting?: WorkflowActionWaiting\n /** What a done action step produced (ids: the signed version, the draft, the reviewed labels). */\n output?: Record<string, unknown>\n /** The document versions the step produced or was given (`doc-…@v<n>`). */\n documents?: string[]\n /** Reopened by a send-back to this step and not touched since (`hasNote`: with a note). */\n sentBack?: boolean\n hasNote?: boolean\n /** Who was told the step is ready (`usr-…` / `agt-…`), since it last changed. */\n announcedTo?: string | null\n /** Who finished it (completed, approved, skipped, declined). */\n by?: string | null\n /** When it finished (ISO). */\n at?: string\n /** A review: what it approved. */\n approved?: WorkflowApprovalEvidence[]\n /** A declined signature: who declined. */\n declinedBy?: string\n}\n\nexport interface WorkflowDefinition {\n /** Execute a document operation directly, without creating a chat. */\n documentAction?: 'annotate_documents' | 'email_documents'\n\n /** The skill slug. */\n id: string\n title: string\n /** One line: the tile text and the task picker's hint. */\n description: string\n /** Longer explanation shown in the dialog header; defaults to `description`. */\n details?: string\n /** Key into the host's icon map. */\n icon?: string\n /** Primary button text; defaults to the dialog's generic \"Start\". */\n startLabel?: string\n /** Shipped with the app/deployment (pinned, not deletable, forkable into the user's own skills). */\n builtin?: boolean\n /** Backed by a server skill (its slug): a task runs it as a skill rather than as a prompt. */\n skill?: string\n inputs: WorkflowField[]\n run: WorkflowRun\n /** Where the user ends up after launching by default; a launch may override it. */\n landing: WorkflowLanding\n /** A model this run asks for (a run option the host applies, e.g. a stronger one for summaries). */\n model?: string\n /** Only offered by this host (e.g. `'word'`); absent = offered everywhere. */\n host?: string\n /** Needs workspace files to make sense: the dialog offers the host's add-files slot when none. */\n requiresFiles?: boolean\n /** Default agent; absent = the user's own assistant. */\n defaultAgentId?: string\n /** A free-form entry (\"my own instruction\", \"remind me\"), not a named skill: it does not name the dialog. */\n generic?: boolean\n /** Can be the body of a task (unattended). `action` workflows are not. */\n schedulable?: boolean\n /** Run options the form offers (all shown by default). */\n options?: { agent?: boolean }\n}\n\n/** What `onLaunch` receives. The host performs the launch (chat, scoping, send). */\nexport interface WorkflowLaunch {\n workflow: WorkflowDefinition\n inputs: Record<string, WorkflowInputValue>\n /** The first `scope` field's value, hoisted: the host scopes documents with it. */\n scope: WorkflowScope\n /** `undefined` = the user's own assistant, in this chat. */\n agentId?: string\n /** Overrides `workflow.landing` for this launch (the empty chat sends in place). */\n landing?: WorkflowLanding\n}\n\nexport type OnWorkflowLaunch = (launch: WorkflowLaunch) => void | Promise<void>\n\nexport type WorkflowInputs = Record<string, WorkflowInputValue>\n\n/** Validation problem of one field: the dialog maps the code to a label. */\nexport type WorkflowFieldError = 'required' | 'min' | 'max' | 'number'\nexport type WorkflowErrors = Record<string, WorkflowFieldError>\n","import {\n EMPTY_WORKFLOW_SCOPE,\n type WorkflowDefinition,\n type WorkflowErrors,\n type WorkflowField,\n type WorkflowFieldOption,\n type WorkflowContextKind,\n type WorkflowFieldType,\n type WorkflowInputs,\n type WorkflowInputValue,\n type WorkflowLaunch,\n type WorkflowScope,\n} from './types'\n\nexport const isWorkflowScope = (value: unknown): value is WorkflowScope =>\n typeof value === 'object' &&\n value !== null &&\n Array.isArray((value as WorkflowScope).folders) &&\n Array.isArray((value as WorkflowScope).labels)\n\nexport const isEmptyWorkflowScope = (scope: WorkflowScope): boolean =>\n scope.folders.length === 0 && scope.labels.length === 0 && !scope.documents?.length\n\n/** A field that selects files: a folder/label scope or an explicit pick. */\nconst isFileField = (field: WorkflowField): boolean =>\n field.type === 'scope' || field.type === 'documents'\n\nfunction emptyValue(field: WorkflowField): WorkflowInputValue {\n switch (field.type) {\n case 'boolean':\n return false\n case 'scope':\n return { folders: [], labels: [] }\n case 'documents':\n return { folders: [], labels: [], documents: [] }\n default:\n return ''\n }\n}\n\n/** The inputs a fresh form starts with: each field's default, else an empty value of its type. */\nexport function defaultInputs(workflow: WorkflowDefinition): WorkflowInputs {\n const inputs: WorkflowInputs = {}\n for (const field of workflow.inputs) {\n const d = field.default\n inputs[field.name] =\n d === undefined\n ? emptyValue(field)\n : isWorkflowScope(d)\n ? { ...d }\n : (d as WorkflowInputValue)\n }\n return inputs\n}\n\n/** Required-field and range problems, keyed by field name. Empty object = launchable. */\nexport function validateInputs(\n workflow: WorkflowDefinition,\n inputs: WorkflowInputs\n): WorkflowErrors {\n const errors: WorkflowErrors = {}\n for (const field of workflow.inputs) {\n const value = inputs[field.name]\n if (field.type === 'number') {\n const blank = value === '' || value === undefined\n if (blank) {\n if (field.required) errors[field.name] = 'required'\n continue\n }\n const n = Number(value)\n if (Number.isNaN(n)) errors[field.name] = 'number'\n else if (field.min !== undefined && n < field.min) errors[field.name] = 'min'\n else if (field.max !== undefined && n > field.max) errors[field.name] = 'max'\n continue\n }\n if (!field.required) continue\n if (field.type === 'documents') {\n if (!isWorkflowScope(value) || !value.documents?.length) errors[field.name] = 'required'\n continue\n }\n if (field.type === 'boolean' || field.type === 'scope') continue\n if (typeof value !== 'string' || value.trim() === '') errors[field.name] = 'required'\n }\n return errors\n}\n\n/**\n * The field that holds what the user asks for: the first common (not folded away) free-text field.\n * Text typed after a slash pre-fills it; the form puts the cursor in it when it comes first.\n */\nexport function promptFieldName(workflow: WorkflowDefinition): string | undefined {\n return workflow.inputs.find((f) => !f.advanced && (f.type === 'text' || f.type === 'longtext'))\n ?.name\n}\n\n/** What the host knows that the inputs alone do not: file ids resolved to names for the wording. */\nexport interface WorkflowComposeContext {\n documentTitles?: Record<string, string>\n}\n\nconst quoteList = (names: string[]): string => {\n const quoted = names.map((n) => `\"${n}\"`)\n return quoted.length <= 1\n ? (quoted[0] ?? '')\n : `${quoted.slice(0, -1).join(', ')} and ${quoted[quoted.length - 1]}`\n}\n\nfunction fragment(\n field: WorkflowField,\n value: WorkflowInputValue | undefined,\n ctx: WorkflowComposeContext | undefined\n): string {\n switch (field.type) {\n case 'documents': {\n // The quoted file name(s): \"the document <name>\" reads the same whichever file was picked.\n const ids = isWorkflowScope(value) ? (value.documents ?? []) : []\n const names = ids.flatMap((id) => {\n const title = ctx?.documentTitles?.[id]\n return title ? [title] : []\n })\n return quoteList(names)\n }\n case 'boolean':\n return value ? (field.trueText ?? 'yes') : (field.falseText ?? 'no')\n case 'select': {\n const option = field.options?.find((o) => o.value === value)\n return option ? (option.text ?? option.label) : String(value ?? '')\n }\n case 'scope':\n // The scope decides WHICH files the run is given; naming it in the wording only churns it.\n return ''\n default:\n return typeof value === 'string' ? value.trim() : String(value ?? '')\n }\n}\n\n/**\n * The single place a prompt string is composed from (workflow, inputs): `{{name}}` placeholders in\n * the template are replaced by each field's text. Whitespace left by empty fragments is tidied.\n */\nexport function composeWorkflowPrompt(\n workflow: WorkflowDefinition,\n inputs: WorkflowInputs,\n ctx?: WorkflowComposeContext\n): string {\n if (workflow.run.kind !== 'prompt') return ''\n const byName = new Map(workflow.inputs.map((f) => [f.name, f]))\n const template = workflow.run.promptTemplate\n // Whitespace left by empty fragments is tidied in the template's own text only: what the user\n // typed or selected (tabs, runs of spaces) reaches the prompt exactly as it was.\n let out = ''\n let last = 0\n const append = (text: string, isValue: boolean) => {\n let t = text\n if (!isValue) {\n t = t.replace(/[ \\t]{2,}/g, ' ')\n if (/[ \\t]$/.test(out)) t = t.replace(/^[ \\t]+/, '')\n }\n out += t\n }\n for (const m of template.matchAll(/\\{\\{\\s*([a-z][a-z0-9_]*)\\s*\\}\\}/gi)) {\n append(template.slice(last, m.index), false)\n const field = byName.get(m[1])\n append(field ? fragment(field, inputs[m[1]], ctx) : '', true)\n last = m.index + m[0].length\n }\n append(template.slice(last), false)\n return out.trim()\n}\n\n/** Assemble the launch the host receives: inputs, the hoisted scope and the chosen agent. */\nexport function buildLaunch(\n workflow: WorkflowDefinition,\n inputs: WorkflowInputs,\n agentId?: string\n): WorkflowLaunch {\n const scopeField = workflow.inputs.find(isFileField)\n const raw = scopeField ? inputs[scopeField.name] : undefined\n const scope = isWorkflowScope(raw) ? raw : { ...EMPTY_WORKFLOW_SCOPE }\n return { workflow, inputs, scope, agentId: agentId || workflow.defaultAgentId || undefined }\n}\n\n/* --------------------------- context launch --------------------------- */\n\n/** What a surface hands a workflow: the files in view, the selected text, the image on screen. */\nexport interface WorkflowContext {\n documents?: string[]\n selection?: string\n /** A file id. */\n image?: string\n}\n\n/** The kinds of context a workflow declares it can be started from. */\nexport function workflowAccepts(workflow: WorkflowDefinition): WorkflowContextKind[] {\n const kinds = new Set<WorkflowContextKind>()\n for (const field of workflow.inputs) if (field.context) kinds.add(field.context)\n return [...kinds]\n}\n\n/** Workflows a surface can offer: those that accept at least one kind of context it supplies. */\nexport function workflowsAccepting(\n workflows: WorkflowDefinition[],\n supplied: WorkflowContextKind[]\n): WorkflowDefinition[] {\n return workflows.filter((w) => workflowAccepts(w).some((k) => supplied.includes(k)))\n}\n\n/** Workflows a host offers: its own plus every one that is not tied to another host. */\nexport function workflowsForHost(\n workflows: WorkflowDefinition[],\n host: string\n): WorkflowDefinition[] {\n return workflows.filter((w) => !w.host || w.host === host)\n}\n\n/**\n * The inputs a context pre-fills: each field bound to a kind the surface supplied. Fields it does\n * not supply are left to the form's defaults, so the dialog still asks for them.\n */\nexport function inputsFromContext(\n workflow: WorkflowDefinition,\n context: WorkflowContext\n): WorkflowInputs {\n const inputs: WorkflowInputs = {}\n for (const field of workflow.inputs) {\n if (!field.context) continue\n if (field.context === 'selection') {\n if (context.selection) inputs[field.name] = context.selection\n continue\n }\n const ids =\n field.context === 'image' ? (context.image ? [context.image] : []) : context.documents\n if (ids?.length && isFileField(field)) {\n inputs[field.name] = { folders: [], labels: [], documents: ids.slice(0, field.max ?? 1) }\n }\n }\n return inputs\n}\n\n/* ------------------------------ skills ------------------------------- */\n\n/** The slice of a skill listing row the model needs (`SkillSummaryResponse`). */\nexport interface SkillLike {\n name: string\n slug: string\n description?: string\n arg_hint?: string\n}\n\n/** The prompt field's label when a skill brings none of its own. */\nexport const SKILL_PROMPT_LABEL = 'What should it work on?'\nexport const SKILL_PROMPT_FALLBACK_PLACEHOLDER = 'Describe what you want'\n\n/** `<prompt>` / `[topic]` becomes `prompt` / `topic`: a hint reads as a placeholder, not syntax. */\nconst plainHint = (hint: string): string => hint.replace(/^[<[]\\s*|\\s*[>\\]]$/g, '').trim()\n\n/**\n * A skill is run WITH a prompt, so it always gets a one-field form: a required free-text field\n * (`args`) whose placeholder is the skill's `arg_hint` (brackets removed). Starting one with\n * nothing is never offered; text typed after the slash pre-fills the field.\n */\nexport function skillToWorkflow(skill: SkillLike): WorkflowDefinition {\n const hint = plainHint((skill.arg_hint ?? '').trim())\n const inputs: WorkflowField[] = [\n {\n name: 'args',\n type: 'longtext',\n label: SKILL_PROMPT_LABEL,\n placeholder: hint || SKILL_PROMPT_FALLBACK_PLACEHOLDER,\n required: true,\n },\n ]\n return {\n id: skill.slug,\n skill: skill.slug,\n title: skill.name || skill.slug,\n description: skill.description ?? '',\n inputs,\n run: { kind: 'prompt', promptTemplate: `/${skill.slug} {{args}}` },\n landing: 'chat',\n schedulable: true,\n }\n}\n\nconst FIELD_TYPES: WorkflowFieldType[] = [\n 'text',\n 'longtext',\n 'boolean',\n 'select',\n 'number',\n 'date',\n 'scope',\n 'documents',\n]\n\nconst str = (v: unknown): string | undefined => (typeof v === 'string' ? v : undefined)\nconst num = (v: unknown): number | undefined => (typeof v === 'number' ? v : undefined)\nconst bool = (v: unknown): boolean | undefined => (typeof v === 'boolean' ? v : undefined)\n\nfunction fieldFromFrontmatter(raw: unknown): WorkflowField | null {\n if (typeof raw !== 'object' || raw === null) return null\n const r = raw as Record<string, unknown>\n const name = str(r.name)\n const type = FIELD_TYPES.find((t) => t === r.type)\n if (!name || !/^[a-z][a-z0-9_]*$/.test(name) || !type) return null\n const options = Array.isArray(r.options)\n ? r.options.flatMap((o): WorkflowFieldOption[] => {\n const ro = o as Record<string, unknown>\n const value = str(ro?.value)\n const label = str(ro?.label)\n return value && label\n ? [\n {\n value,\n label,\n description: str(ro.description),\n text: str(ro.text),\n icon: str(ro.icon),\n },\n ]\n : []\n })\n : undefined\n return {\n name,\n type,\n label: str(r.label) ?? name,\n description: str(r.description),\n placeholder: str(r.placeholder),\n required: bool(r.required),\n default: r.default as WorkflowInputValue | undefined,\n options,\n min: num(r.min),\n max: num(r.max),\n trueText: str(r.true_text),\n falseText: str(r.false_text),\n advanced: bool(r.advanced),\n accept: r.accept === 'image' ? 'image' : undefined,\n context:\n r.context === 'documents' || r.context === 'selection' || r.context === 'image'\n ? r.context\n : undefined,\n by: Array.isArray(r.by)\n ? (r.by.filter((b) => b === 'folders' || b === 'labels') as Array<'folders' | 'labels'>)\n : undefined,\n }\n}\n\n/**\n * Build a workflow from parsed SKILL.md frontmatter (snake_case keys) and its body (the prompt\n * template). The inverse of what the backend will publish; seeded workflows use the same shape.\n */\nexport function workflowFromFrontmatter(\n id: string,\n frontmatter: Record<string, unknown>,\n body: string\n): WorkflowDefinition {\n const inputs = Array.isArray(frontmatter.inputs)\n ? frontmatter.inputs.flatMap((f) => {\n const field = fieldFromFrontmatter(f)\n return field ? [field] : []\n })\n : []\n return {\n id,\n title: str(frontmatter.name) ?? id,\n description: str(frontmatter.description) ?? '',\n icon: str(frontmatter.icon),\n inputs,\n run: { kind: 'prompt', promptTemplate: body.trim() },\n landing: frontmatter.landing === 'files' ? 'files' : 'chat',\n requiresFiles: bool(frontmatter.requires_files),\n schedulable: bool(frontmatter.schedulable) ?? true,\n }\n}\n\n/** snake_case keys of the on-disk form of a field (what `workflowFromFrontmatter` reads). */\nexport function fieldToFrontmatter(field: WorkflowField): Record<string, unknown> {\n return compact({\n name: field.name,\n type: field.type,\n label: field.label,\n description: field.description,\n placeholder: field.placeholder,\n required: field.required,\n default: field.default,\n options: field.options?.map((o) =>\n compact({\n value: o.value,\n label: o.label,\n description: o.description,\n text: o.text,\n icon: o.icon,\n })\n ),\n min: field.min,\n max: field.max,\n true_text: field.trueText,\n false_text: field.falseText,\n advanced: field.advanced,\n by: field.by,\n accept: field.accept,\n context: field.context,\n })\n}\n\nconst compact = (o: Record<string, unknown>): Record<string, unknown> =>\n Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined))\n","import { useState, type ReactNode } from 'react'\nimport {\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { prefixedTestId, testIdOr } from '../../chat/test-id'\nimport { FoldSection } from '../../home/FoldSection'\nimport { isWorkflowScope } from './workflow'\nimport type {\n WorkflowErrors,\n WorkflowField,\n WorkflowFieldError,\n WorkflowInputs,\n WorkflowInputValue,\n WorkflowScope,\n} from './types'\n\nexport interface SchemaFormLabels {\n /** Appended to the label of an optional field. */\n optional: string\n /** Heading of the folded block that holds `advanced` fields. */\n advanced: string\n errors: Record<WorkflowFieldError, string>\n}\n\nexport const DEFAULT_SCHEMA_FORM_LABELS: SchemaFormLabels = {\n optional: '(optional)',\n advanced: 'More options',\n errors: {\n required: 'This is needed to continue',\n min: 'Too small',\n max: 'Too large',\n number: 'Enter a number',\n },\n}\n\nexport interface SchemaFormProps {\n fields: WorkflowField[]\n values: WorkflowInputs\n onChange: (name: string, value: WorkflowInputValue) => void\n /** Per-field problems to show (the dialog passes them once a launch was attempted). */\n errors?: WorkflowErrors\n /** Renders a `scope` field: the host owns the file data behind the picker. */\n renderScope?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** Renders a `documents` field (an explicit file pick): the host owns the file list. */\n renderDocuments?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** Maps an option's `icon` key to a mark. */\n renderIcon?: (key: string) => ReactNode\n /** Who a `person` field offers (the workspace's members); without them it takes an id. */\n people?: ReadonlyArray<{ value: string; label: string }>\n /**\n * Plain Enter in a multi-line field submits the form (Shift+Enter inserts the newline), the\n * chat's own convention. Single-line fields submit natively.\n */\n onEnterSubmit?: () => void\n /** Prefix of field ids: `<prefix>-<field name>`; default `workflow-field`. */\n testIdPrefix?: string\n labels?: Partial<SchemaFormLabels>\n className?: string\n}\n\n/** Selects with at most this many options render as tiles; more fall back to a dropdown. */\nconst TILE_MAX = 4\n\ninterface FieldProps {\n field: WorkflowField\n value: WorkflowInputValue | undefined\n error?: WorkflowFieldError\n onChange: (value: WorkflowInputValue) => void\n l: SchemaFormLabels\n idFor: (suffix?: string) => string\n renderScope: SchemaFormProps['renderScope']\n renderDocuments: SchemaFormProps['renderDocuments']\n renderIcon: SchemaFormProps['renderIcon']\n onEnterSubmit: SchemaFormProps['onEnterSubmit']\n people?: SchemaFormProps['people']\n}\n\nfunction FieldControl({\n field,\n value,\n error,\n onChange,\n l,\n idFor,\n renderScope,\n renderDocuments,\n renderIcon,\n onEnterSubmit,\n people,\n}: FieldProps) {\n const id = `${idFor()}-control`\n const testId = idFor()\n switch (field.type) {\n case 'text':\n return (\n <Input\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n case 'longtext':\n return (\n <Textarea\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n className=\"min-h-[96px]\"\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={(e) => {\n if (onEnterSubmit && e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing) {\n e.preventDefault()\n onEnterSubmit()\n }\n }}\n />\n )\n case 'number':\n return (\n <Input\n id={id}\n data-testid={testId}\n type=\"number\"\n inputMode=\"decimal\"\n min={field.min}\n max={field.max}\n value={value === undefined ? '' : String(value)}\n placeholder={field.placeholder}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value === '' ? '' : Number(e.target.value))}\n />\n )\n case 'date':\n return (\n <Input\n id={id}\n data-testid={testId}\n type=\"date\"\n value={String(value ?? '')}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n case 'boolean':\n return (\n <Switch\n id={id}\n data-testid={testId}\n checked={Boolean(value)}\n onCheckedChange={(checked) => onChange(checked)}\n />\n )\n case 'select': {\n const options = field.options ?? []\n if (options.length > 0 && options.length <= TILE_MAX) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={field.label}\n className=\"grid grid-cols-2 gap-2 sm:grid-cols-4\"\n data-testid={testId}\n >\n {options.map((option) => {\n const selected = value === option.value\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n data-testid={prefixedTestId(testId, option.value, {\n testId: `workflow-field-${field.name}-${option.value}`,\n })}\n onClick={() => {\n onChange(option.value)\n }}\n className={cn(\n 'flex min-h-24 flex-col items-center justify-center gap-1.5 rounded-lg border p-3 text-center transition-colors pointer-coarse:min-h-28 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected\n ? 'border-primary bg-primary/10'\n : 'border-border bg-card [&:hover]:border-primary [&:hover]:bg-muted'\n )}\n >\n {option.icon && renderIcon && (\n <span className=\"text-muted-foreground\">{renderIcon(option.icon)}</span>\n )}\n <span className=\"text-sm font-medium text-foreground\">{option.label}</span>\n {option.description && (\n <span className=\"text-xs text-muted-foreground\">{option.description}</span>\n )}\n </button>\n )\n })}\n </div>\n )\n }\n return (\n <Select value={String(value ?? '')} onValueChange={(v) => onChange(v)}>\n <SelectTrigger id={id} data-testid={testId} className=\"pointer-coarse:min-h-11\">\n <SelectValue placeholder={field.placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n case 'scope': {\n const scope = isWorkflowScope(value) ? value : { folders: [], labels: [] }\n return <div data-testid={testId}>{renderScope?.(field, scope, onChange)}</div>\n }\n case 'documents': {\n const picked = isWorkflowScope(value) ? value : { folders: [], labels: [], documents: [] }\n return <div data-testid={testId}>{renderDocuments?.(field, picked, onChange)}</div>\n }\n case 'person':\n return people?.length ? (\n <select\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n onChange={(e) => onChange(e.target.value)}\n className=\"flex h-9 w-full rounded-md border border-input bg-background px-2 text-sm shadow-sm\"\n >\n <option value=\"\">{field.placeholder ?? ''}</option>\n {people.map((p) => (\n <option key={p.value} value={p.value}>\n {p.label}\n </option>\n ))}\n </select>\n ) : (\n <Input\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder ?? 'usr-…'}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n }\n}\n\nfunction FormField(props: FieldProps) {\n const { field, error, l, idFor } = props\n const isBoolean = field.type === 'boolean'\n const showOptional = !field.required && field.type !== 'boolean' && field.type !== 'scope'\n const label = (\n <Label\n htmlFor={`${idFor()}-control`}\n className={isBoolean ? 'cursor-pointer font-normal' : undefined}\n >\n {field.label}\n {showOptional && (\n <>\n {' '}\n <span className=\"font-normal text-muted-foreground\">{l.optional}</span>\n </>\n )}\n </Label>\n )\n return (\n <div className=\"flex flex-col gap-1.5\" data-slot=\"schema-field\" data-field={field.name}>\n {isBoolean ? (\n <div className=\"flex items-center gap-2.5 pointer-coarse:min-h-11\">\n <FieldControl {...props} />\n {label}\n </div>\n ) : (\n <>\n {field.type !== 'scope' && label}\n <FieldControl {...props} />\n </>\n )}\n {field.description && <p className=\"text-xs text-muted-foreground\">{field.description}</p>}\n {error && (\n <p\n id={idFor('error')}\n role=\"alert\"\n className=\"text-xs text-destructive\"\n data-testid={idFor('error')}\n >\n {l.errors[error]}\n </p>\n )}\n </div>\n )\n}\n\n/**\n * Renders a workflow's declared inputs as a form. Controlled: the caller owns `values` (see\n * `defaultInputs`) and decides when to validate (`validateInputs`) and show `errors`.\n */\nexport function SchemaForm({\n fields,\n values,\n onChange,\n errors,\n renderScope,\n renderDocuments,\n renderIcon,\n onEnterSubmit,\n people,\n testIdPrefix,\n labels,\n className,\n}: SchemaFormProps) {\n const l: SchemaFormLabels = {\n ...DEFAULT_SCHEMA_FORM_LABELS,\n ...labels,\n errors: { ...DEFAULT_SCHEMA_FORM_LABELS.errors, ...labels?.errors },\n }\n const [advancedOpen, setAdvancedOpen] = useState(false)\n const common = fields.filter((f) => !f.advanced)\n const advanced = fields.filter((f) => f.advanced)\n\n const render = (field: WorkflowField) => (\n <FormField\n key={field.name}\n field={field}\n value={values[field.name]}\n error={errors?.[field.name]}\n onChange={(v) => onChange(field.name, v)}\n l={l}\n idFor={(suffix) =>\n suffix\n ? `${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-${field.name}-${suffix}`\n : `${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-${field.name}`\n }\n renderScope={renderScope}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n onEnterSubmit={onEnterSubmit}\n people={people}\n />\n )\n\n return (\n <div className={cn('flex flex-col gap-4', className)} data-slot=\"schema-form\">\n {common.map(render)}\n {advanced.length > 0 && (\n <FoldSection\n label={l.advanced}\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n testId={`${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-advanced-toggle`}\n >\n <div className=\"flex flex-col gap-4\">{advanced.map(render)}</div>\n </FoldSection>\n )}\n </div>\n )\n}\n","/**\n * The model of a stepped workflow (`run: { kind: 'steps' }`): the steps form a graph (each waits\n * for the steps in its `after`), and a run's progress is each step's `WorkflowStepState`, as the\n * run's thread records it (`stepStatesFromActivity`). Pure functions, shared by the thread runner\n * (`useWorkflowThread`), the builder's preview and the thread's top bar.\n */\n\nimport type {\n WorkflowActionStep,\n WorkflowActionType,\n WorkflowAgentStep,\n WorkflowAssignee,\n WorkflowDocumentRef,\n WorkflowField,\n WorkflowDefinition,\n WorkflowErrors,\n WorkflowInputs,\n WorkflowInputValue,\n WorkflowReviewStep,\n WorkflowStep,\n WorkflowStepState,\n WorkflowStepStatus,\n} from './types'\nimport { composeWorkflowPrompt, defaultInputs, validateInputs } from './workflow'\n\n/** A stepped workflow's steps; empty for a single-run one. */\nexport function workflowSteps(workflow: WorkflowDefinition): WorkflowStep[] {\n return workflow.run.kind === 'steps' ? workflow.run.steps : []\n}\n\nexport const isSteppedWorkflow = (workflow: WorkflowDefinition): boolean =>\n workflow.run.kind === 'steps'\n\n/* ------------------------------- graph ------------------------------- */\n\n/** What a step waits for: its `after`, else the step before it in the list (a sequence). */\nexport function stepDependencies(steps: WorkflowStep[], id: string): string[] {\n const i = steps.findIndex((s) => s.id === id)\n if (i < 0) return []\n return steps[i].after ?? (i > 0 ? [steps[i - 1].id] : [])\n}\n\n/** `a` waits for `b`, directly or through other steps. */\nexport function dependsOn(steps: WorkflowStep[], a: string, b: string): boolean {\n const seen = new Set<string>()\n const stack = [...stepDependencies(steps, a)]\n while (stack.length) {\n const id = stack.pop() as string\n if (id === b) return true\n if (seen.has(id)) continue\n seen.add(id)\n stack.push(...stepDependencies(steps, id))\n }\n return false\n}\n\n/**\n * The steps in dependency order, keeping the given order wherever the graph allows (a stable\n * topological sort). Every implicit dependency is written out as `after` first, so reordering\n * never changes what a step waits for. Steps in a cycle keep their place at the end; validation\n * reports them.\n */\nexport function orderSteps(steps: WorkflowStep[]): WorkflowStep[] {\n const explicit = steps.map((s) => ({ ...s, after: stepDependencies(steps, s.id) }))\n const known = new Set(explicit.map((s) => s.id))\n const placed = new Set<string>()\n const out: WorkflowStep[] = []\n let progress = true\n while (out.length < explicit.length && progress) {\n progress = false\n for (const s of explicit) {\n if (placed.has(s.id)) continue\n if (s.after.every((d) => placed.has(d) || !known.has(d))) {\n out.push(s)\n placed.add(s.id)\n progress = true\n break\n }\n }\n }\n return [...out, ...explicit.filter((s) => !placed.has(s.id))]\n}\n\nexport type WorkflowGraphProblem =\n | { code: 'duplicate'; step: string }\n | { code: 'unknown'; step: string; dependency: string }\n | { code: 'cycle'; step: string }\n | { code: 'order'; step: string; dependency: string }\n\n/** What makes a stepped workflow unrunnable. Empty = valid. */\nexport function validateWorkflowGraph(steps: WorkflowStep[]): WorkflowGraphProblem[] {\n const problems: WorkflowGraphProblem[] = []\n const ids = new Set<string>()\n for (const s of steps) {\n if (ids.has(s.id)) problems.push({ code: 'duplicate', step: s.id })\n ids.add(s.id)\n }\n steps.forEach((s, i) => {\n for (const d of stepDependencies(steps, s.id)) {\n if (!ids.has(d)) problems.push({ code: 'unknown', step: s.id, dependency: d })\n else if (d === s.id || dependsOn(steps, d, s.id)) problems.push({ code: 'cycle', step: s.id })\n else if (steps.findIndex((x) => x.id === d) > i)\n problems.push({ code: 'order', step: s.id, dependency: d })\n }\n })\n return problems\n}\n\n/**\n * The steps by depth (the longest chain before each): what the stepper shows side by side.\n * A sequence is one step per level.\n */\nexport function stepLevels(steps: WorkflowStep[]): WorkflowStep[][] {\n const depth = new Map<string, number>()\n for (const s of steps) {\n const deps = stepDependencies(steps, s.id).filter((d) => depth.has(d))\n depth.set(s.id, deps.length ? Math.max(...deps.map((d) => depth.get(d) as number)) + 1 : 0)\n }\n const levels: WorkflowStep[][] = []\n for (const s of steps) (levels[depth.get(s.id) as number] ??= []).push(s)\n return levels.filter(Boolean)\n}\n\n/* ----------------------------- progress ----------------------------- */\n\n/** One entry of a thread's activity log, as far as steps are concerned. */\nexport interface WorkflowActivityEvent {\n kind: string\n detail?: Record<string, unknown> | null\n actor_ext_id?: string | null\n created_at?: string\n}\n\nconst STEP_EVENTS: Record<string, WorkflowStepStatus> = {\n step_started: 'running',\n step_waiting: 'waiting',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n}\n\nconst str = (v: unknown): string | undefined => (typeof v === 'string' && v ? v : undefined)\nconst ACTION_TYPES: readonly WorkflowActionType[] = ['sign', 'email_draft', 'tabular_review']\nconst asAction = (v: unknown): WorkflowActionType | undefined =>\n ACTION_TYPES.includes(v as WorkflowActionType) ? (v as WorkflowActionType) : undefined\nconst asRecord = (v: unknown): Record<string, unknown> | undefined =>\n v && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, unknown>) : undefined\nconst asStrings = (v: unknown): string[] | undefined =>\n Array.isArray(v) ? v.filter((x): x is string => typeof x === 'string') : undefined\n\n/** The steps a `step_sent_back` reopens: its `reopened` list, else the one it went `to`. */\nfunction reopenedBy(detail: Record<string, unknown>): string[] {\n const to = str(detail.to)\n return asStrings(detail.reopened) ?? (to ? [to] : [])\n}\n\n/**\n * Each step's state from the thread's activity log (oldest first): its latest step event wins.\n * A send-back reopens the steps it lists as pending (only the one it went `to` is `sentBack`); a\n * `step_ready` records who was told and a `step_progress` what a waiting step now waits on, until\n * the step's next change. Mirrors the server (`workflow_steps.progress`).\n */\nexport function stepStatesFromActivity(\n events: WorkflowActivityEvent[]\n): Record<string, WorkflowStepState> {\n const states: Record<string, WorkflowStepState> = {}\n for (const e of events) {\n const detail = e.detail ?? {}\n const step = str(detail.step)\n if (!step) continue\n if (e.kind === 'step_sent_back') {\n const to = str(detail.to)\n for (const id of reopenedBy(detail))\n states[id] =\n id === to\n ? {\n status: 'pending',\n sentBack: true,\n hasNote: typeof detail.note_encrypted === 'string',\n }\n : { status: 'pending' }\n continue\n }\n if (e.kind === 'step_ready') {\n states[step] = { ...(states[step] ?? { status: 'pending' }), announcedTo: str(detail.to) }\n continue\n }\n if (e.kind === 'step_progress') {\n const before = states[step]\n const waiting = asRecord(detail.waiting)\n if (before?.status === 'waiting' && waiting) states[step] = { ...before, waiting }\n continue\n }\n const status = STEP_EVENTS[e.kind]\n if (!status) continue\n const before = states[step]\n const responseId = str(detail.response_id) ?? before?.responseId ?? null\n const startedAt = status === 'running' ? e.created_at : before?.startedAt\n const action = asAction(detail.action) ?? before?.action\n const documents = asStrings(detail.documents) ?? before?.documents\n const waiting = status === 'waiting' ? asRecord(detail.waiting) : undefined\n const output = status === 'done' ? asRecord(detail.output) : undefined\n const approved = Array.isArray(detail.approved)\n ? (detail.approved.filter(asRecord) as WorkflowStepState['approved'])\n : undefined\n const finished = status === 'done' || status === 'skipped' || status === 'failed'\n const declinedBy = str(detail.declined_by)\n states[step] = {\n status,\n responseId,\n error: str(detail.error) ?? null,\n ...(startedAt ? { startedAt } : {}),\n ...(action ? { action } : {}),\n ...(documents?.length ? { documents } : {}),\n ...(waiting ? { waiting } : {}),\n ...(output ? { output } : {}),\n ...(approved ? { approved } : {}),\n ...(finished ? { by: e.actor_ext_id ?? null } : {}),\n ...(finished && e.created_at ? { at: e.created_at } : {}),\n ...(declinedBy ? { declinedBy } : {}),\n }\n }\n return states\n}\n\n/** The fields a person fills in on a step: a form's inputs, a review's fields. */\nexport function stepFields(step: WorkflowStep): WorkflowField[] {\n return step.kind === 'form' ? step.inputs : step.kind === 'review' ? (step.fields ?? []) : []\n}\n\n/** The fields the steps ask for (forms and reviews), in plan order. */\nexport const runFieldsOf = (steps: WorkflowStep[]): WorkflowField[] => steps.flatMap(stepFields)\n\n/** Every field the run asks for: the launch form's, then each form's and review's. */\nexport function runFields(workflow: WorkflowDefinition): WorkflowField[] {\n return [...workflow.inputs, ...workflowSteps(workflow).flatMap(stepFields)]\n}\n\n/** A fresh run's inputs: every field at its default, then the prefills. */\nexport function initialRunInputs(\n workflow: WorkflowDefinition,\n inputs: WorkflowInputs = {}\n): WorkflowInputs {\n return { ...defaultInputs({ ...workflow, inputs: runFields(workflow) }), ...inputs }\n}\n\nconst finished = (s: WorkflowStepState | undefined): boolean =>\n s?.status === 'done' || s?.status === 'skipped'\n\n/**\n * Where a step stands: `blocked` until everything it waits for has finished (done or skipped),\n * then `ready`, then its own status (`waiting`: an action step waiting on its people).\n */\nexport type WorkflowStepPhase =\n 'blocked' | 'ready' | 'running' | 'waiting' | 'done' | 'skipped' | 'failed'\n\nexport function stepPhase(\n steps: WorkflowStep[],\n states: Record<string, WorkflowStepState>,\n id: string\n): WorkflowStepPhase {\n const s = states[id]\n if (s && s.status !== 'pending') return s.status\n return stepDependencies(steps, id).every((d) => finished(states[d])) ? 'ready' : 'blocked'\n}\n\nexport const isRunFinished = (\n steps: WorkflowStep[],\n states: Record<string, WorkflowStepState>\n): boolean => steps.length > 0 && steps.every((s) => finished(states[s.id]))\n\n/** A step a person does (form, upload, review); agent and action steps start by themselves. */\nexport const isPersonStep = (step: WorkflowStep): boolean =>\n step.kind !== 'agent' && step.kind !== 'action'\n\n/** An action step whose waiting phase is a person's: signing, sending the email. */\nexport const isPersonAction = (step: WorkflowStep): step is WorkflowActionStep =>\n step.kind === 'action' && (step.action.type === 'sign' || step.action.type === 'email_draft')\n\n/** A step that can have an assignee and a reminder: a person step, or a signature or email. */\nexport const canAssign = (step: WorkflowStep): boolean => isPersonStep(step) || isPersonAction(step)\n\n/**\n * What the primary button does on the step in view:\n * - `complete`: finish this form, upload or review (approve) and move on;\n * - `move`: view the next step: this one is finished, or the next does not wait for it;\n * - `skip`: give up on this agent step (it failed) so what waits for it can go on;\n * - `finish`: show the completion (every step has finished);\n * - `wait`: nothing yet (this step is under way and the next waits for it, or it is blocked).\n */\nexport type WorkflowNextAction = 'complete' | 'move' | 'skip' | 'finish' | 'wait'\n\nexport function nextAction(\n steps: WorkflowStep[],\n states: Record<string, WorkflowStepState>,\n current: string | null\n): WorkflowNextAction {\n const i = steps.findIndex((s) => s.id === current)\n const step = steps[i]\n if (!step) return 'wait'\n const phase = stepPhase(steps, states, step.id)\n if (phase === 'blocked') return 'wait'\n const following = steps[i + 1]\n const independentNext = !!following && !dependsOn(steps, following.id, step.id)\n if (phase === 'done' || phase === 'skipped') {\n if (following) return 'move'\n return isRunFinished(steps, states) ? 'finish' : 'wait'\n }\n if (isPersonStep(step)) return 'complete'\n // An email draft is done when its person says it is sent; a signature, when its signers sign.\n if (phase === 'waiting' && step.kind === 'action' && step.action.type === 'email_draft')\n return 'complete'\n // An agent step on its way (about to start, or running): look ahead if nothing there waits for it.\n if (phase !== 'failed') return independentNext ? 'move' : 'wait'\n const waitedFor = steps.slice(i + 1).some((s) => dependsOn(steps, s.id, step.id))\n return waitedFor || !following ? 'skip' : 'move'\n}\n\n/** A form's or a fielded review's problems (empty = it can move on); other steps have none. */\nexport function validateStep(step: WorkflowStep, inputs: WorkflowInputs): WorkflowErrors {\n const fields = stepFields(step)\n if (!fields.length) return {}\n return validateInputs(\n {\n id: step.id,\n title: step.title,\n description: '',\n inputs: fields,\n run: { kind: 'operation' },\n landing: 'chat',\n },\n inputs\n )\n}\n\n/* --------------------------- people and documents --------------------------- */\n\n/** Every step `id` waits for, directly or through others, in plan order. */\nexport function upstreamSteps(steps: WorkflowStep[], id: string): WorkflowStep[] {\n return steps.filter((s) => s.id !== id && dependsOn(steps, id, s.id))\n}\n\n/**\n * Where a ready step can send the work back to: an earlier step it waits for that has something\n * to redo (done, skipped or failed), nearest first.\n */\nexport function sendBackTargets(\n steps: WorkflowStep[],\n states: Record<string, WorkflowStepState>,\n id: string\n): WorkflowStep[] {\n return upstreamSteps(steps, id)\n .filter((s) => ['done', 'skipped', 'failed'].includes(states[s.id]?.status ?? 'pending'))\n .reverse()\n}\n\n/** Something a step still needs before it can run, for the builder to point out. */\nexport interface WorkflowStepProblem {\n step: string\n missing: 'document' | 'signers' | 'recipients' | 'tags' | 'documents'\n}\n\nconst isBlankRef = (ref: WorkflowDocumentRef): boolean =>\n 'step' in ref ? !ref.step : 'input' in ref ? !ref.input : !ref.id.trim()\n\n/** What the steps still need before they can run: an action's document, signers, … */\nexport function stepConfigProblems(steps: WorkflowStep[]): WorkflowStepProblem[] {\n const out: WorkflowStepProblem[] = []\n for (const s of steps) {\n if (s.kind === 'action') {\n const a = s.action\n if (a.type === 'sign') {\n if (!a.document || isBlankRef(a.document)) out.push({ step: s.id, missing: 'document' })\n if (!a.signers.length) out.push({ step: s.id, missing: 'signers' })\n } else if (a.type === 'email_draft') {\n if (!a.to.some((t) => t.trim())) out.push({ step: s.id, missing: 'recipients' })\n } else {\n if (!a.tags.length) out.push({ step: s.id, missing: 'tags' })\n if (Array.isArray(a.documents) && !a.documents.length)\n out.push({ step: s.id, missing: 'documents' })\n }\n }\n if (s.kind === 'agent' && s.editDocument && isBlankRef(s.editDocument))\n out.push({ step: s.id, missing: 'document' })\n }\n return out\n}\n\n/** A document version id (`doc-…@v3`) split into the document and its version. */\nexport function splitDocRef(ref: string): { id: string; version?: number } {\n const m = /^(doc-[A-Za-z0-9]+)(?:@v(\\d+))?$/.exec(ref)\n return m ? { id: m[1], ...(m[2] ? { version: Number(m[2]) } : {}) } : { id: ref }\n}\n\n/** How an assignee that names no one directly is described. */\nexport interface AssigneeWording {\n runOwner: string\n projectLead: string\n /** `{field}`: the person field's label. */\n input: string\n}\n\nexport const DEFAULT_ASSIGNEE_WORDING: AssigneeWording = {\n runOwner: 'whoever started the run',\n projectLead: 'the project lead',\n input: 'the person in “{field}”',\n}\n\n/**\n * Who a step is for, in words: the person it was announced to, the member it names, the person a\n * form field holds (each through `nameOf`), else its role. Undefined when it names no one.\n */\nexport function assigneeName(\n assignee: WorkflowAssignee | undefined,\n options: {\n nameOf?: (id: string) => string | undefined\n inputs?: WorkflowInputs\n fields?: WorkflowField[]\n /** Who the server told (the assignee resolved): wins over a role. */\n announcedTo?: string | null\n wording?: Partial<AssigneeWording>\n } = {}\n): string | undefined {\n const w = { ...DEFAULT_ASSIGNEE_WORDING, ...options.wording }\n const name = (id: string) => options.nameOf?.(id) ?? id\n const told = options.announcedTo ? options.nameOf?.(options.announcedTo) : undefined\n if (told) return told\n if (!assignee) return undefined\n if ('user' in assignee) return name(assignee.user)\n if ('input' in assignee) {\n const value = options.inputs?.[assignee.input]\n if (typeof value === 'string' && value) return name(value)\n const label = options.fields?.find((f) => f.name === assignee.input)?.label ?? assignee.input\n return w.input.replace('{field}', label)\n }\n if ('runOwner' in assignee) return w.runOwner\n return w.projectLead\n}\n\n/* ----------------------------- composing ----------------------------- */\n\nconst asText = (value: WorkflowInputValue | undefined): string =>\n typeof value === 'string' ? value.trim() : typeof value === 'number' ? String(value) : ''\n\n/**\n * Fill a step's `with` templates from the run's inputs: `{{a}}`, `{{a || b}}` (first non-blank).\n * A template that is exactly one bare reference passes the value through untouched.\n */\nexport function fillStepInputs(\n templates: Record<string, string> | undefined,\n inputs: WorkflowInputs\n): WorkflowInputs {\n const out: WorkflowInputs = {}\n for (const [name, template] of Object.entries(templates ?? {})) {\n const bare = /^\\{\\{\\s*([a-z][a-z0-9_]*)\\s*\\}\\}$/i.exec(template)\n if (bare) {\n out[name] = inputs[bare[1]] ?? ''\n continue\n }\n out[name] = fillRunText(template, inputs)\n }\n return out\n}\n\n/** A template over the run's inputs, as text (`{{a}}`, `{{a || b}}`). */\nexport function fillRunText(template: string, inputs: WorkflowInputs): string {\n return template\n .replace(/\\{\\{([^}]*)\\}\\}/g, (_, expr: string) => {\n for (const ref of expr.split('||')) {\n const text = asText(inputs[ref.trim()])\n if (text) return text\n }\n return ''\n })\n .trim()\n}\n\n/** The run thread's title: the workflow's `threadTitle` template, else its title. */\nexport function runThreadTitle(workflow: WorkflowDefinition, inputs: WorkflowInputs): string {\n const template = workflow.run.kind === 'steps' ? workflow.run.threadTitle : undefined\n return (template && fillRunText(template, inputs)) || workflow.title\n}\n\n/** What a review asks for: its instructions filled from the run, else its title. */\nexport function reviewInstructions(step: WorkflowReviewStep, inputs: WorkflowInputs): string {\n return (step.instructions && fillRunText(step.instructions, inputs)) || step.title\n}\n\nexport interface StepComposeOptions {\n /** Looks up the workflow a step names (`step.workflow`). */\n resolveWorkflow?: (id: string) => WorkflowDefinition | undefined\n /**\n * The host's wording for `operation` runs: the named workflow's id (or the step's own id when it\n * runs inline), its filled inputs, and the whole run's inputs (e.g. to ground it in the record).\n */\n compose?: (id: string, inputs: WorkflowInputs, runInputs: WorkflowInputs) => string | undefined\n}\n\n/** The prompt an agent step of `workflow` sends; '' when nothing could compose it (no binding). */\nexport function composeStepPrompt(\n workflow: WorkflowDefinition,\n step: WorkflowAgentStep,\n runInputs: WorkflowInputs,\n { resolveWorkflow, compose }: StepComposeOptions = {}\n): string {\n if (step.workflow) {\n const target = resolveWorkflow?.(step.workflow)\n if (!target) return ''\n const inputs = { ...defaultInputs(target), ...fillStepInputs(step.with, runInputs) }\n return target.run.kind === 'prompt'\n ? composeWorkflowPrompt(target, inputs)\n : (compose?.(target.id, inputs, runInputs) ?? '')\n }\n if (step.run?.kind === 'prompt') {\n return composeWorkflowPrompt(\n { ...workflow, inputs: runFields(workflow), run: step.run },\n runInputs\n )\n }\n return compose?.(step.id, runInputs, runInputs) ?? ''\n}\n","/**\n * A stepped workflow as the plan a run thread carries (`TaskPlan.steps`) and back. The server reads\n * the structure to start each step: an agent step runs a skill (`skill` + `inputs` templates) or a\n * prompt (filled from the run's inputs as it starts); everything only a client shows (form fields,\n * icon, canvas position, which workflow a step names) rides along in `ui`.\n */\n\nimport type { components } from '@arbidocs/client'\nimport {\n canAssign,\n composeStepPrompt,\n runFields,\n workflowSteps,\n type StepComposeOptions,\n} from './run'\nimport type {\n WorkflowAction,\n WorkflowAgentStep,\n WorkflowAssignee,\n WorkflowDefinition,\n WorkflowDocumentRef,\n WorkflowField,\n WorkflowInputs,\n WorkflowSignal,\n WorkflowSignalWhen,\n WorkflowStep,\n} from './types'\n\nexport type TaskPlanStep = components['schemas']['TaskPlanStep']\n/** A step's signal as the plan carries it (plaintext config, like the step's prompt). */\ntype StepSignal = components['schemas']['StepSignal']\ntype StepAssignee = components['schemas']['StepAssignee']\ntype StepField = components['schemas']['StepField']\ntype PlanDocumentRef = string | components['schemas']['StepDocumentRef']\ntype PlanAction = NonNullable<TaskPlanStep['action']>\nexport type TaskPlan = components['schemas']['TaskPlan']\n\n/* ------------------------- people, documents, actions ------------------------- */\n\nexport function toPlanAssignee(a: WorkflowAssignee): StepAssignee {\n if ('user' in a) return { user: a.user }\n if ('input' in a) return { input: a.input }\n if ('runOwner' in a) return { run_owner: true }\n return { project_lead: true }\n}\n\nexport function fromPlanAssignee(a: StepAssignee | null | undefined): WorkflowAssignee | undefined {\n if (!a) return undefined\n if (a.user) return { user: a.user }\n if (a.input) return { input: a.input }\n if (a.run_owner) return { runOwner: true }\n if (a.project_lead) return { projectLead: true }\n return undefined\n}\n\nexport function toPlanDocumentRef(ref: WorkflowDocumentRef): PlanDocumentRef {\n if ('step' in ref) return { step: ref.step }\n if ('input' in ref) return { input: ref.input }\n return ref.id.trim()\n}\n\nexport function fromPlanDocumentRef(\n ref: PlanDocumentRef | null | undefined\n): WorkflowDocumentRef | undefined {\n if (!ref) return undefined\n if (typeof ref === 'string') return { id: ref }\n if (ref.step) return { step: ref.step }\n if (ref.input) return { input: ref.input }\n return undefined\n}\n\nconst docRefs = (refs: WorkflowDocumentRef[] | undefined): PlanDocumentRef[] =>\n (refs ?? []).map(toPlanDocumentRef)\nconst fromDocRefs = (refs: PlanDocumentRef[] | null | undefined): WorkflowDocumentRef[] =>\n (refs ?? []).flatMap((r) => {\n const ref = fromPlanDocumentRef(r)\n return ref ? [ref] : []\n })\n\nfunction toPlanAction(a: WorkflowAction): PlanAction {\n switch (a.type) {\n case 'sign':\n return {\n type: 'sign',\n // The builder may hold a signature step whose document is not chosen yet: the server\n // refuses it, and the builder says so before saving (`stepConfigProblems`).\n document: a.document ? toPlanDocumentRef(a.document) : '',\n signers: a.signers.map(toPlanAssignee),\n ...(a.message?.trim() ? { message: a.message.trim() } : {}),\n ...(a.expiresAfterHours ? { expires_after_hours: a.expiresAfterHours } : {}),\n }\n case 'email_draft':\n return {\n type: 'email_draft',\n to: a.to.map((t) => t.trim()).filter(Boolean),\n cc: (a.cc ?? []).map((t) => t.trim()).filter(Boolean),\n subject: a.subject,\n body_template: a.body,\n attachments: docRefs(a.attachments),\n }\n case 'tabular_review':\n return {\n type: 'tabular_review',\n tags: a.tags,\n documents: Array.isArray(a.documents) ? docRefs(a.documents) : a.documents,\n overwrite: !!a.overwrite,\n }\n }\n}\n\nfunction fromPlanAction(a: PlanAction | null | undefined): WorkflowAction {\n switch (a?.type) {\n case 'sign':\n return {\n type: 'sign',\n document: fromPlanDocumentRef(a.document),\n signers: (a.signers ?? []).flatMap((s) => {\n const one = fromPlanAssignee(s)\n return one ? [one] : []\n }),\n ...(a.message ? { message: a.message } : {}),\n ...(a.expires_after_hours ? { expiresAfterHours: a.expires_after_hours } : {}),\n }\n case 'email_draft':\n return {\n type: 'email_draft',\n to: a.to ?? [],\n ...(a.cc?.length ? { cc: a.cc } : {}),\n subject: a.subject ?? '',\n body: a.body_template ?? '',\n ...(a.attachments?.length ? { attachments: fromDocRefs(a.attachments) } : {}),\n }\n case 'tabular_review':\n return {\n type: 'tabular_review',\n tags: a.tags ?? [],\n documents: Array.isArray(a.documents)\n ? fromDocRefs(a.documents)\n : (a.documents ?? 'run_uploads'),\n ...(a.overwrite ? { overwrite: true } : {}),\n }\n default:\n // A plan from a newer server with an action this client does not know: shown as a review.\n return { type: 'tabular_review', tags: [], documents: 'run_uploads' }\n }\n}\n\n/** A field as a step's `fields` carries it (what completing the step is checked against). */\nfunction toStepField(f: WorkflowField): StepField {\n return {\n name: f.name,\n type: f.type,\n label: f.label,\n required: !!f.required,\n ...(f.options ? { options: f.options.map((o) => ({ value: o.value, label: o.label })) } : {}),\n ...(f.min !== undefined ? { min: f.min } : {}),\n ...(f.max !== undefined ? { max: f.max } : {}),\n } as StepField\n}\n\n/** What a step keeps for clients only (the server stores it as plain data). */\ninterface StepUi {\n description?: string\n icon?: string\n commit?: boolean\n next_label?: string\n fields?: WorkflowField[]\n required?: boolean\n accept?: string\n hint?: string\n output?: 'answer' | 'artifact'\n instructions?: string\n /** The skill or workflow an agent step names, and its input templates (the builder edits these). */\n workflow?: string\n with?: Record<string, string>\n prompt_template?: string\n position?: { x: number; y: number }\n}\n\nconst compact = <T extends object>(o: T): T =>\n Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined && v !== '')) as T\n\nexport interface ToPlanOptions extends StepComposeOptions {\n /**\n * The run's inputs when it starts: prompts are composed with them. Fields not given yet (or\n * absent altogether, saving a workflow to run later) keep `{{field}}` placeholders, which the\n * server fills from the run's inputs.\n */\n inputs?: WorkflowInputs\n}\n\n/** Each run field as its own `{{name}}` placeholder: composing with these keeps the template. */\nfunction placeholders(workflow: WorkflowDefinition): WorkflowInputs {\n return Object.fromEntries(runFields(workflow).map((f) => [f.name, `{{${f.name}}}`]))\n}\n\nfunction agentStep(\n workflow: WorkflowDefinition,\n step: WorkflowAgentStep,\n options: ToPlanOptions\n): Pick<TaskPlanStep, 'skill' | 'inputs' | 'prompt'> {\n const target = step.workflow ? options.resolveWorkflow?.(step.workflow) : undefined\n // A server skill: the server runs the skill itself with the step's inputs.\n if (target?.skill) return { skill: target.skill, inputs: step.with ?? {}, prompt: null }\n // A field still blank when the run starts (a later form fills it) keeps its placeholder, so the\n // server fills it from the run's inputs as the step starts.\n const given = Object.entries(options.inputs ?? {}).filter(\n ([, v]) => v !== undefined && v !== null && v !== ''\n )\n const inputs = { ...placeholders(workflow), ...Object.fromEntries(given) }\n return { skill: null, inputs: null, prompt: composeStepPrompt(workflow, step, inputs, options) }\n}\n\n/** The plan steps a run thread (or a saved workflow) carries for `workflow`. */\nexport function toPlanSteps(\n workflow: WorkflowDefinition,\n options: ToPlanOptions = {}\n): TaskPlanStep[] {\n const layout = workflow.run.kind === 'steps' ? workflow.run.layout : undefined\n return workflowSteps(workflow).map((step) => {\n const ui: StepUi = compact({\n description: step.description,\n icon: step.icon,\n commit: step.commit,\n next_label: step.nextLabel,\n position: layout?.[step.id],\n ...(step.kind === 'form' ? { fields: step.inputs } : {}),\n ...(step.kind === 'upload'\n ? { required: step.required, accept: step.accept, hint: step.hint }\n : {}),\n ...(step.kind === 'review'\n ? { instructions: step.instructions, fields: step.fields?.length ? step.fields : undefined }\n : {}),\n ...(step.kind === 'agent'\n ? {\n output: step.output,\n workflow: step.workflow,\n with: step.with,\n prompt_template: step.run?.kind === 'prompt' ? step.run.promptTemplate : undefined,\n }\n : {}),\n })\n return {\n id: step.id,\n title: step.title,\n kind: step.kind,\n after: step.after ?? null,\n branch: step.kind === 'agent' && !!step.branch,\n requires_files: false,\n ui: ui as Record<string, unknown>,\n // An unfinished signal (still being typed) is not saved: the server would refuse it.\n ...(step.signals?.some((s) => !isIncompleteSignal(s))\n ? { signals: step.signals.filter((s) => !isIncompleteSignal(s)).map(toPlanSignal) }\n : {}),\n ...(step.assignee && canAssign(step) ? { assignee: toPlanAssignee(step.assignee) } : {}),\n ...(step.remindAfterHours && canAssign(step)\n ? { remind_after_hours: step.remindAfterHours }\n : {}),\n // A review's fields are what approving it is checked against (the server's `fields`).\n ...(step.kind === 'review' && step.fields?.length\n ? { fields: step.fields.map(toStepField) }\n : {}),\n ...(step.kind === 'action' ? { action: toPlanAction(step.action) } : {}),\n ...(step.kind === 'agent' && step.editDocument && !step.branch\n ? { edit_document: toPlanDocumentRef(step.editDocument) }\n : {}),\n ...(step.kind === 'agent'\n ? agentStep(workflow, step, options)\n : { skill: null, inputs: null, prompt: null }),\n }\n })\n}\n\nfunction toPlanSignal(signal: WorkflowSignal): StepSignal {\n return signal.when ? { name: signal.name, when: signal.when } : { name: signal.name }\n}\n\n/** A signal the builder holds that is not finished yet: no name, or a condition with nothing in it. */\nexport function isIncompleteSignal(signal: WorkflowSignal): boolean {\n const when = signal.when\n if (!signal.name.trim()) return true\n if (!when) return false\n if ('field' in when) return !when.field || String(when.equals).trim() === ''\n if ('contains' in when) return !when.contains.trim()\n if ('matches' in when) return !when.matches.trim()\n return false\n}\n\n/** A plan's signal back as the builder's: exactly one condition shape, or none. */\nfunction fromPlanSignal(signal: StepSignal): WorkflowSignal {\n const w = signal.when\n const when: WorkflowSignalWhen | undefined =\n w?.field != null && w.equals != null\n ? { field: w.field, equals: w.equals }\n : w?.contains != null\n ? { contains: w.contains }\n : w?.matches != null\n ? { matches: w.matches }\n : w?.approved\n ? { approved: true }\n : undefined\n return when ? { name: signal.name, when } : { name: signal.name }\n}\n\n/** Steps from a run's (or a saved workflow's) plan: what the runner, the builder and the top bar show. */\nexport function fromPlanSteps(steps: TaskPlanStep[] | null | undefined): WorkflowStep[] {\n return (steps ?? []).map((p): WorkflowStep => {\n const ui = (p.ui ?? {}) as StepUi\n const base = {\n id: p.id,\n title: p.title,\n description: ui.description,\n icon: ui.icon,\n commit: ui.commit,\n nextLabel: ui.next_label,\n ...(p.after != null ? { after: p.after } : {}),\n ...(p.signals?.length ? { signals: p.signals.map(fromPlanSignal) } : {}),\n ...(fromPlanAssignee(p.assignee) ? { assignee: fromPlanAssignee(p.assignee) } : {}),\n ...(p.remind_after_hours ? { remindAfterHours: p.remind_after_hours } : {}),\n }\n switch (p.kind) {\n case 'form':\n return { ...base, kind: 'form', inputs: ui.fields ?? [] }\n case 'upload':\n return { ...base, kind: 'upload', required: ui.required, accept: ui.accept, hint: ui.hint }\n case 'review':\n return {\n ...base,\n kind: 'review',\n instructions: ui.instructions,\n // The client's copy of the fields (labels, options) when it kept one, else the plan's.\n ...(ui.fields?.length\n ? { fields: ui.fields }\n : p.fields?.length\n ? { fields: p.fields.map(fromStepField) }\n : {}),\n }\n case 'action':\n return { ...base, kind: 'action', action: fromPlanAction(p.action) }\n default: {\n const promptTemplate = ui.prompt_template ?? p.prompt ?? undefined\n return {\n ...base,\n kind: 'agent',\n workflow: ui.workflow ?? p.skill ?? undefined,\n with: ui.with ?? (p.inputs as Record<string, string> | null) ?? undefined,\n run:\n !ui.workflow && !p.skill && promptTemplate\n ? { kind: 'prompt', promptTemplate }\n : undefined,\n output: ui.output,\n branch: p.branch || undefined,\n ...(fromPlanDocumentRef(p.edit_document)\n ? { editDocument: fromPlanDocumentRef(p.edit_document) }\n : {}),\n }\n }\n }\n })\n}\n\n/** Where each step sits on the builder's canvas, as the plan keeps it. */\nexport function layoutFromPlanSteps(\n steps: TaskPlanStep[] | null | undefined\n): Record<string, { x: number; y: number }> | undefined {\n const entries = (steps ?? []).flatMap((p) => {\n const position = (p.ui as StepUi | null | undefined)?.position\n return position ? [[p.id, position] as const] : []\n })\n return entries.length ? Object.fromEntries(entries) : undefined\n}\n\nconst FIELD_TYPES = new Set<string>([\n 'text',\n 'longtext',\n 'boolean',\n 'select',\n 'number',\n 'date',\n 'scope',\n 'documents',\n 'person',\n])\n\nfunction fromStepField(f: StepField): WorkflowField {\n return {\n name: f.name,\n type: (FIELD_TYPES.has(f.type) ? f.type : 'text') as WorkflowField['type'],\n label: f.label ?? f.name,\n ...(f.required ? { required: true } : {}),\n ...(f.options?.length\n ? { options: f.options.map((o) => ({ value: o.value, label: o.label ?? o.value })) }\n : {}),\n ...(f.min != null ? { min: f.min } : {}),\n ...(f.max != null ? { max: f.max } : {}),\n }\n}\n","/**\n * The screen side of a stepped run: which step is in view, form problems, and what the primary\n * button does. The run itself happens elsewhere (the thread on the server, `useWorkflowThread`, or\n * the builder's preview): this hook gets each step's state and the host's actions, so every host\n * shows a run the same way (`WorkflowRunner`).\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n assigneeName,\n canAssign,\n isRunFinished,\n nextAction,\n runFieldsOf,\n stepPhase,\n validateStep,\n type WorkflowNextAction,\n type WorkflowStepPhase,\n} from './run'\nimport type {\n WorkflowErrors,\n WorkflowInputValue,\n WorkflowInputs,\n WorkflowStep,\n WorkflowStepState,\n} from './types'\n\nexport interface UseWorkflowViewOptions {\n steps: WorkflowStep[]\n /** Each step's state (missing = pending). */\n states: Record<string, WorkflowStepState>\n inputs: WorkflowInputs\n setInput: (name: string, value: WorkflowInputValue) => void\n /** Finish a person's step (a form, an upload, a review's approval). A throw keeps the user on it. */\n complete: (step: WorkflowStep) => Promise<void>\n /** Give up on a step so what waits for it can go on. */\n skip: (stepId: string) => Promise<void>\n /** Run a failed agent step again. */\n retry?: (stepId: string) => Promise<void>\n /** A form step whose inputs can no longer change (committed, or recorded on the thread). */\n isLocked?: (stepId: string) => boolean\n /**\n * Whether `states` are known yet (a run opened later: its thread's log has arrived). Until then\n * the view waits to open the run where it is, instead of at its first step. Default true.\n */\n loaded?: boolean\n /** Send the work back from a ready step to an earlier one, with a note. */\n sendBack?: (stepId: string, to: string, note?: string) => Promise<void>\n /** A signer refuses a signature step, with a note. */\n decline?: (stepId: string, note?: string) => Promise<void>\n /** A member's name by id (`usr-…` / `agt-…`): assignees and signers are shown by name. */\n nameOf?: (id: string) => string | undefined\n}\n\n/** What `WorkflowRunner` shows and does. */\nexport interface WorkflowRunView {\n steps: WorkflowStep[]\n /** The step in view; `undefined` once the run's completion is shown. */\n step: WorkflowStep | undefined\n current: string | null\n isComplete: boolean\n inputs: WorkflowInputs\n setInput: (name: string, value: WorkflowInputValue) => void\n stateOf: (stepId: string) => WorkflowStepState | undefined\n phaseOf: (stepId: string) => WorkflowStepPhase\n isLocked: (stepId: string) => boolean\n /** The form step in view's problems, shown once moving on was attempted. */\n errors: WorkflowErrors\n /** An action is under way (completing, skipping). */\n busy: boolean\n actionError: string | null\n /** Some agent step is running. */\n isRunning: boolean\n action: WorkflowNextAction\n canBack: boolean\n next: () => Promise<void>\n back: () => void\n /** View a step (one further down the plan too: it can be skipped from there). */\n goTo: (stepId: string) => void\n skip: (stepId: string) => Promise<void>\n retry?: (stepId: string) => Promise<void>\n /** Send the work back from `stepId` to `to` (it is then in view). Absent = not offered. */\n sendBack?: (stepId: string, to: string, note?: string) => Promise<void>\n /** Decline a signature step. Absent = not offered. */\n decline?: (stepId: string, note?: string) => Promise<void>\n /** A member's name by id. */\n nameOf?: (id: string) => string | undefined\n /** Who a step is for, in words (a person step, a signature, an email), if anyone. */\n assigneeOf: (stepId: string) => string | undefined\n /** Show the run from the start again (a host that starts a new run resets its own state). */\n restart: () => void\n}\n\nconst errorMessage = (e: unknown): string =>\n e instanceof Error ? e.message : typeof e === 'string' ? e : 'Something went wrong.'\n\n/** The first step that is not finished yet: where a run opens. */\nfunction firstOpen(\n steps: WorkflowStep[],\n states: Record<string, WorkflowStepState>\n): string | null {\n const open = steps.find((s) => !['done', 'skipped'].includes(states[s.id]?.status ?? 'pending'))\n return open?.id ?? (steps.length && isRunFinished(steps, states) ? null : (steps[0]?.id ?? null))\n}\n\nexport function useWorkflowView(options: UseWorkflowViewOptions): WorkflowRunView {\n const { steps, states, inputs, setInput, loaded = true } = options\n const [current, setCurrent] = useState<string | null>(() => firstOpen(steps, states))\n const [showErrors, setShowErrors] = useState(false)\n const [busy, setBusy] = useState(false)\n const [actionError, setActionError] = useState<string | null>(null)\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n // A run loaded after the first render (its steps or its thread's log arrived) opens where it is:\n // its current step, or its completion when every step has finished.\n const placed = useRef(steps.length > 0 && loaded)\n useEffect(() => {\n if (placed.current || steps.length === 0 || !loaded) return\n placed.current = true\n setCurrent(firstOpen(steps, states))\n }, [steps, states, loaded])\n\n const step = steps.find((s) => s.id === current)\n const following = useCallback(\n (id: string | null): string | null => {\n const i = steps.findIndex((s) => s.id === id)\n return steps[i + 1]?.id ?? null\n },\n [steps]\n )\n // Where to go once the step in view is finished (completed or skipped): the next one still to\n // do, else simply the next one. The step just finished counts as finished whatever the states\n // say yet (they may not have caught up).\n const onward = useCallback(\n (id: string): string | null => {\n const { steps: s, states: st } = optionsRef.current\n const i = s.findIndex((x) => x.id === id)\n const open = s\n .slice(i + 1)\n .find((x) => !['done', 'skipped'].includes(st[x.id]?.status ?? 'pending'))\n return open?.id ?? following(id)\n },\n [following]\n )\n const action: WorkflowNextAction = busy ? 'wait' : nextAction(steps, states, current)\n\n const next = useCallback(async () => {\n const { steps: s, states: st, inputs: values } = optionsRef.current\n const at = s.find((x) => x.id === current)\n const act = nextAction(s, st, current)\n if (!at || act === 'wait' || busy) return\n setActionError(null)\n if (act === 'finish') return setCurrent(null)\n if (act === 'move') return setCurrent(following(current))\n setBusy(true)\n try {\n if (act === 'skip') {\n await optionsRef.current.skip(at.id)\n } else {\n if (Object.keys(validateStep(at, values)).length > 0) {\n setShowErrors(true)\n return\n }\n await optionsRef.current.complete(at)\n }\n setShowErrors(false)\n setCurrent(onward(at.id) ?? current)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }, [current, busy, following, onward])\n\n const goTo = useCallback((stepId: string) => {\n setShowErrors(false)\n setActionError(null)\n setCurrent(stepId)\n }, [])\n\n const index = steps.findIndex((s) => s.id === current)\n const back = useCallback(() => {\n const i = steps.findIndex((s) => s.id === current)\n const to = i < 0 ? steps[steps.length - 1] : steps[i - 1]\n if (to) goTo(to.id)\n }, [steps, current, goTo])\n\n const act = useCallback(\n (fn: ((id: string) => Promise<void>) | undefined) =>\n fn &&\n (async (stepId: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await fn(stepId)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }),\n []\n )\n // A skip moves the view on the way completing does (when it was the step in view).\n const currentRef = useRef(current)\n currentRef.current = current\n const skip = useMemo(\n () =>\n act(async (id) => {\n await optionsRef.current.skip(id)\n if (currentRef.current !== id) return\n setShowErrors(false)\n setCurrent(onward(id) ?? id)\n }) as (id: string) => Promise<void>,\n [act, onward]\n )\n const retry = useMemo(\n () =>\n options.retry ? act((id) => optionsRef.current.retry?.(id) ?? Promise.resolve()) : undefined,\n // Only whether the host offers retry matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [act, !!options.retry]\n )\n\n const sendBack = useMemo(\n () =>\n options.sendBack\n ? async (stepId: string, to: string, note?: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await optionsRef.current.sendBack?.(stepId, to, note)\n setShowErrors(false)\n setCurrent(to)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }\n : undefined,\n // Only whether the host offers it matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [!!options.sendBack]\n )\n const declineWithNote = useMemo(\n () =>\n options.decline\n ? async (stepId: string, note?: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await optionsRef.current.decline?.(stepId, note)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }\n : undefined,\n // Only whether the host offers it matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [!!options.decline]\n )\n\n const isLocked = useCallback(\n (stepId: string) => optionsRef.current.isLocked?.(stepId) ?? false,\n []\n )\n\n return {\n steps,\n step,\n current,\n isComplete: current === null,\n inputs,\n setInput,\n stateOf: (id) => states[id],\n phaseOf: (id) => stepPhase(steps, states, id),\n isLocked,\n errors: showErrors && step && !isLocked(step.id) ? validateStep(step, inputs) : {},\n busy,\n actionError,\n isRunning: Object.values(states).some((s) => s.status === 'running'),\n action,\n canBack: (current === null || index > 0) && !busy,\n next,\n back,\n goTo,\n skip,\n retry,\n sendBack,\n decline: declineWithNote,\n nameOf: options.nameOf,\n assigneeOf: (id) => {\n const s = steps.find((x) => x.id === id)\n if (!s || !canAssign(s)) return undefined\n return assigneeName(s.assignee, {\n nameOf: options.nameOf,\n inputs,\n fields: runFieldsOf(steps),\n announcedTo: states[id]?.announcedTo,\n })\n },\n restart: () => {\n setShowErrors(false)\n setActionError(null)\n setCurrent(steps[0]?.id ?? null)\n },\n }\n}\n","/**\n * The runner's step parts beyond a form, an upload and an agent's answer: an action step (a\n * signature, an email draft, a tabular review), a review's fields, its send-back and what it\n * approved, the \"Waiting for <person>\" line, and \"Open in Word\" for a tracked-changes version.\n * Everything that leaves the runner (opening a document, mail, a grid, the sign flow) goes through\n * the host's `WorkflowRunnerActions`.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport {\n Check,\n Clock,\n CornerUpLeft,\n ExternalLink,\n FileText,\n Hourglass,\n Loader2,\n Mail,\n MessageSquare,\n PenLine,\n ShieldCheck,\n Table2,\n UserRound,\n X,\n} from 'lucide-react'\nimport { Button, Textarea, cn } from '@arbidocs/react/ui'\nimport { sendBackTargets, splitDocRef } from './run'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type {\n WorkflowActionStep,\n WorkflowAgentStep,\n WorkflowField,\n WorkflowReviewStep,\n WorkflowStepState,\n} from './types'\n\n/** Where the runner hands off to the host. Each is optional: absent, its button is not shown. */\nexport interface WorkflowRunnerActions {\n /** Open a document, or one version of it (`doc-…@v3`). */\n openDocument?: (ref: string) => void\n /** Open the document of a signature step to sign it (the signer's turn). */\n sign?: (step: WorkflowActionStep, state: WorkflowStepState) => void\n /** Open an email step's draft in native mail. */\n openDraft?: (draftId: string, mailbox?: string) => void\n /** Open a finished tabular review's grid: its columns (labels) over its documents. */\n openReview?: (tags: string[], documents: string[]) => void\n /** Open a tracked-changes version in the Word editor, to accept or reject the changes. */\n openRedline?: (ref: string) => void\n /** Show a step's answer where it is in the thread. */\n openMessage?: (messageId: string) => void\n /** The person on screen (`usr-…`): a signature offers \"Open and sign\" to its signers only. */\n me?: string\n}\n\nexport interface WorkflowStepPartsLabels {\n waitingFor: string\n sendBack: string\n sendBackTo: string\n sendBackNote: string\n cancel: string\n sentBackHere: string\n approvedBy: string\n approvedAt: string\n approvedWhat: string\n viewAnswer: string\n fieldsHeading: string\n signers: string\n signed: string\n notSigned: string\n openAndSign: string\n decline: string\n declineNote: string\n declineConfirm: string\n declined: string\n signedVersion: string\n preparingSign: string\n expires: string\n preparingDraft: string\n draftReady: string\n openDraft: string\n emailSent: string\n reviewRunning: string\n reviewDone: string\n openReview: string\n openInWord: string\n redlineHint: string\n someone: string\n}\n\nexport const DEFAULT_WORKFLOW_STEP_PARTS_LABELS: WorkflowStepPartsLabels = {\n waitingFor: 'Waiting for {name}',\n sendBack: 'Send back',\n sendBackTo: 'Send back to',\n sendBackNote: 'What needs to change? (optional)',\n cancel: 'Cancel',\n sentBackHere: 'This step was sent back to be done again.',\n approvedBy: 'Approved by {name}',\n approvedAt: '{date}',\n approvedWhat: 'What was approved',\n viewAnswer: 'View the answer',\n fieldsHeading: 'Recorded with the approval',\n signers: 'Signers',\n signed: 'Signed',\n notSigned: 'Not signed yet',\n openAndSign: 'Open and sign',\n decline: 'Decline',\n declineNote: 'Why are you declining? (optional)',\n declineConfirm: 'Decline to sign',\n declined: 'Declined by {name}.',\n signedVersion: 'Open the signed version',\n preparingSign: 'Preparing the signature request…',\n expires: 'Expires {date}',\n preparingDraft: 'Preparing the draft…',\n draftReady: 'The draft is ready in native mail. Check it, send it, then mark it as sent.',\n openDraft: 'Open draft',\n emailSent: 'Sent.',\n reviewRunning: 'Reviewing the documents…',\n reviewDone: 'Reviewed {docs} documents in {cols} columns.',\n openReview: 'Open the review',\n openInWord: 'Open in Word',\n redlineHint: 'The edits are tracked changes: accept or reject each one in Word.',\n someone: 'someone',\n}\n\nconst formatDate = (iso: string | undefined): string => {\n const t = iso ? Date.parse(iso) : NaN\n return Number.isNaN(t)\n ? ''\n : new Date(t).toLocaleString(undefined, { dateStyle: 'medium', timeStyle: 'short' })\n}\n\nconst docName = (ref: string, nameOfDoc?: (id: string) => string | undefined) => {\n const { id, version } = splitDocRef(ref)\n const name = nameOfDoc?.(id) ?? id\n return version ? `${name} · v${version}` : name\n}\n\n/** A document version as a chip, opening it when the host can. */\nfunction DocChip({\n docRef,\n actions,\n nameOfDoc,\n testId,\n}: {\n docRef: string\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n testId?: string\n}) {\n const label = docName(docRef, nameOfDoc)\n const cls =\n 'inline-flex max-w-full items-center gap-1 rounded-md border border-border px-1.5 py-0.5 text-xs'\n return actions?.openDocument ? (\n <button\n type=\"button\"\n onClick={() => actions.openDocument?.(docRef)}\n className={cn(cls, 'hover:border-primary/40 hover:text-primary')}\n title={docRef}\n data-testid={testId}\n >\n <FileText className=\"size-3 shrink-0\" /> <span className=\"truncate\">{label}</span>\n </button>\n ) : (\n <span className={cls} title={docRef} data-testid={testId}>\n <FileText className=\"size-3 shrink-0\" /> <span className=\"truncate\">{label}</span>\n </span>\n )\n}\n\n/** \"Waiting for Sophie Lindqvist\" on a step a person has to do. */\nexport function AssigneeLine({\n run,\n stepId,\n l,\n testId,\n}: {\n run: WorkflowRunView\n stepId: string\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const name = run.assigneeOf(stepId)\n const phase = run.phaseOf(stepId)\n if (!name || !['ready', 'waiting', 'blocked'].includes(phase)) return null\n return (\n <p\n className=\"flex items-center gap-1.5 text-xs text-muted-foreground\"\n data-testid={`${testId}-assignee`}\n >\n <UserRound className=\"size-3.5\" /> {l.waitingFor.replace('{name}', name)}\n </p>\n )\n}\n\n/** A step reopened by a send-back says so. */\nexport function SentBackNote({\n state,\n l,\n testId,\n}: {\n state: WorkflowStepState | undefined\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n if (!state?.sentBack) return null\n return (\n <p\n className=\"flex items-center gap-1.5 rounded-md bg-amber-500/10 px-2 py-1 text-xs text-amber-700 dark:text-amber-300\"\n data-testid={`${testId}-sent-back`}\n >\n <CornerUpLeft className=\"size-3.5\" /> {l.sentBackHere}\n </p>\n )\n}\n\n/** \"Send back\" on a ready step: pick the earlier step to redo and say what needs to change. */\nexport function SendBackControl({\n run,\n step,\n l,\n testId,\n}: {\n run: WorkflowRunView\n step: WorkflowReviewStep\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const states = Object.fromEntries(\n run.steps.map((s) => [s.id, run.stateOf(s.id) ?? { status: 'pending' as const }])\n )\n const targets = sendBackTargets(run.steps, states, step.id)\n const [open, setOpen] = useState(false)\n const [to, setTo] = useState(targets[0]?.id ?? '')\n const [note, setNote] = useState('')\n if (!run.sendBack || run.phaseOf(step.id) !== 'ready' || targets.length === 0) return null\n if (!open)\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setOpen(true)}\n disabled={run.busy}\n data-testid={`${testId}-send-back`}\n >\n <CornerUpLeft className=\"size-4\" /> {l.sendBack}\n </Button>\n )\n const target = targets.some((t) => t.id === to) ? to : targets[0].id\n return (\n <div\n className=\"space-y-2 rounded-md border border-border p-3\"\n data-testid={`${testId}-send-back-form`}\n >\n <label className=\"block space-y-1 text-xs font-medium\">\n {l.sendBackTo}\n <select\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-2 text-sm\"\n value={target}\n onChange={(e) => setTo(e.target.value)}\n data-testid={`${testId}-send-back-to`}\n >\n {targets.map((t) => (\n <option key={t.id} value={t.id}>\n {t.title}\n </option>\n ))}\n </select>\n </label>\n <Textarea\n rows={3}\n value={note}\n placeholder={l.sendBackNote}\n aria-label={l.sendBackNote}\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${testId}-send-back-note`}\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setOpen(false)}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n disabled={run.busy}\n onClick={() => void run.sendBack?.(step.id, target, note.trim() || undefined)}\n data-testid={`${testId}-send-back-confirm`}\n >\n <CornerUpLeft className=\"size-4\" /> {l.sendBack}\n </Button>\n </div>\n </div>\n )\n}\n\nconst shownValue = (\n v: unknown,\n field: WorkflowField,\n nameOf?: (id: string) => string | undefined\n) => {\n if (v === undefined || v === null || v === '') return '—'\n if (typeof v === 'boolean') return v ? '✓' : '✗'\n if (field.type === 'person' && typeof v === 'string') return nameOf?.(v) ?? v\n if (field.type === 'select') return field.options?.find((o) => o.value === v)?.label ?? String(v)\n return typeof v === 'object' ? JSON.stringify(v) : String(v)\n}\n\n/** What a completed review recorded: who approved, the answers and versions, the fields. */\nexport function ApprovalEvidence({\n run,\n step,\n actions,\n nameOfDoc,\n l,\n testId,\n}: {\n run: WorkflowRunView\n step: WorkflowReviewStep\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const state = run.stateOf(step.id)\n if (state?.status !== 'done') return null\n const approver = state.by ? (run.nameOf?.(state.by) ?? l.someone) : undefined\n const evidence = state.approved ?? []\n const titleOf = (id: string) => run.steps.find((s) => s.id === id)?.title ?? id\n return (\n <div className=\"space-y-2 rounded-md bg-muted/40 p-3\" data-testid={`${testId}-evidence`}>\n <p className=\"flex flex-wrap items-center gap-1.5 text-sm font-medium\">\n <ShieldCheck className=\"size-4 text-primary\" />\n {approver ? l.approvedBy.replace('{name}', approver) : null}\n {state.at && (\n <span className=\"text-xs font-normal text-muted-foreground\">\n {l.approvedAt.replace('{date}', formatDate(state.at))}\n </span>\n )}\n </p>\n {evidence.length > 0 && (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {l.approvedWhat}\n </p>\n {evidence.map((e) => (\n <div\n key={e.step}\n className=\"flex flex-wrap items-center gap-1.5 text-xs\"\n data-testid={`${testId}-evidence-${e.step}`}\n >\n <span className=\"font-medium\">{titleOf(e.step)}</span>\n {e.response_id &&\n (actions?.openMessage ? (\n <button\n type=\"button\"\n onClick={() => actions.openMessage?.(e.response_id as string)}\n className=\"inline-flex items-center gap-1 text-primary hover:underline\"\n data-testid={`${testId}-evidence-${e.step}-answer`}\n >\n <MessageSquare className=\"size-3\" /> {l.viewAnswer}\n </button>\n ) : null)}\n {(e.documents ?? []).map((d) => (\n <DocChip key={d} docRef={d} actions={actions} nameOfDoc={nameOfDoc} />\n ))}\n </div>\n ))}\n </div>\n )}\n {(step.fields ?? []).length > 0 && (\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 text-xs\">\n {(step.fields ?? []).map((f) => (\n <div key={f.name} className=\"contents\">\n <dt className=\"text-muted-foreground\">{f.label}</dt>\n <dd data-testid={`${testId}-evidence-field-${f.name}`}>\n {shownValue(run.inputs[f.name], f, run.nameOf)}\n </dd>\n </div>\n ))}\n </dl>\n )}\n </div>\n )\n}\n\n/** \"Open in Word\" for an agent step that edited a document with tracked changes. */\nexport function RedlineOpen({\n step,\n state,\n actions,\n l,\n testId,\n}: {\n step: WorkflowAgentStep\n state: WorkflowStepState | undefined\n actions?: WorkflowRunnerActions\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const version = state?.status === 'done' ? state.documents?.[0] : undefined\n if (!step.editDocument || !version || !actions?.openRedline) return null\n return (\n <div className=\"flex flex-wrap items-center gap-2\" data-testid={`${testId}-redline`}>\n <Button\n size=\"sm\"\n onClick={() => actions.openRedline?.(version)}\n data-testid={`${testId}-open-word`}\n >\n <FileText className=\"size-4\" /> {l.openInWord}\n </Button>\n <span className=\"text-xs text-muted-foreground\">{l.redlineHint}</span>\n </div>\n )\n}\n\n/** A platform action step: where it is, and what its person can do now. */\nexport function ActionStepBody({\n step,\n run,\n actions,\n nameOfDoc,\n heading,\n l,\n testId,\n}: {\n step: WorkflowActionStep\n run: WorkflowRunView\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n heading: ReactNode\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const state = run.stateOf(step.id)\n const phase = run.phaseOf(step.id)\n const name = (id: string) => run.nameOf?.(id) ?? id\n const [declining, setDeclining] = useState(false)\n const [note, setNote] = useState('')\n const a = step.action\n const working = (text: string) => (\n <p\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-testid={`${testId}-working`}\n >\n <Loader2 className=\"size-4 animate-spin\" /> {text}\n </p>\n )\n\n let body: ReactNode = null\n if (a.type === 'sign') {\n const waiting = state?.waiting\n const signers = waiting?.signers ?? []\n const signed = new Set(waiting?.signed ?? [])\n const mine = !actions?.me || (signers.includes(actions.me) && !signed.has(actions.me))\n const signedRef = state?.status === 'done' ? state.documents?.[0] : undefined\n body = (\n <>\n {(phase === 'ready' || phase === 'running') && working(l.preparingSign)}\n {phase === 'waiting' && waiting?.doc_ext_id && (\n <DocChip\n docRef={`${waiting.doc_ext_id}${waiting.version ? `@v${waiting.version}` : ''}`}\n actions={actions}\n nameOfDoc={nameOfDoc}\n testId={`${testId}-document`}\n />\n )}\n {signers.length > 0 && (\n <div className=\"space-y-1\" data-testid={`${testId}-signers`}>\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {l.signers}\n </p>\n {signers.map((id) => (\n <p\n key={id}\n className=\"flex items-center gap-2 text-sm\"\n data-signed={signed.has(id) || undefined}\n data-testid={`${testId}-signer-${id}`}\n >\n {signed.has(id) ? (\n <Check className=\"size-3.5 text-primary\" />\n ) : (\n <Hourglass className=\"size-3.5 text-muted-foreground\" />\n )}\n <span className=\"font-medium\">{name(id)}</span>\n <span className=\"text-xs text-muted-foreground\">\n {signed.has(id) ? l.signed : l.notSigned}\n </span>\n </p>\n ))}\n </div>\n )}\n {waiting?.expires_at && phase === 'waiting' && (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Clock className=\"size-3.5\" />{' '}\n {l.expires.replace('{date}', formatDate(waiting.expires_at))}\n </p>\n )}\n {phase === 'waiting' && mine && !declining && (\n <div className=\"flex flex-wrap gap-2\">\n {actions?.sign && state && (\n <Button\n size=\"sm\"\n onClick={() => actions.sign?.(step, state)}\n data-testid={`${testId}-open-sign`}\n >\n <PenLine className=\"size-4\" /> {l.openAndSign}\n </Button>\n )}\n {run.decline && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setDeclining(true)}\n data-testid={`${testId}-decline`}\n >\n <X className=\"size-4\" /> {l.decline}\n </Button>\n )}\n </div>\n )}\n {declining && (\n <div className=\"space-y-2\" data-testid={`${testId}-decline-form`}>\n <Textarea\n rows={2}\n value={note}\n placeholder={l.declineNote}\n aria-label={l.declineNote}\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${testId}-decline-note`}\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setDeclining(false)}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n variant=\"destructive\"\n disabled={run.busy}\n onClick={async () => {\n await run.decline?.(step.id, note.trim() || undefined)\n setDeclining(false)\n }}\n data-testid={`${testId}-decline-confirm`}\n >\n {l.declineConfirm}\n </Button>\n </div>\n </div>\n )}\n {phase === 'failed' && state?.declinedBy && (\n <p className=\"text-sm text-destructive\" data-testid={`${testId}-declined`}>\n {l.declined.replace('{name}', name(state.declinedBy))}\n </p>\n )}\n {signedRef && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {actions?.openDocument ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => actions.openDocument?.(signedRef)}\n data-testid={`${testId}-signed-version`}\n >\n <ExternalLink className=\"size-4\" /> {l.signedVersion}\n </Button>\n ) : (\n <DocChip docRef={signedRef} nameOfDoc={nameOfDoc} />\n )}\n </div>\n )}\n </>\n )\n } else if (a.type === 'email_draft') {\n const draftId =\n state?.waiting?.draft_id ??\n (typeof state?.output?.draft_id === 'string' ? state.output.draft_id : undefined)\n body = (\n <>\n {(phase === 'ready' || phase === 'running') && working(l.preparingDraft)}\n {phase === 'waiting' && <p className=\"text-sm text-muted-foreground\">{l.draftReady}</p>}\n {phase === 'done' && (\n <p className=\"flex items-center gap-1.5 text-sm\" data-testid={`${testId}-sent`}>\n <Check className=\"size-4 text-primary\" /> {l.emailSent}\n </p>\n )}\n {draftId && actions?.openDraft && phase !== 'done' && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => actions.openDraft?.(draftId, state?.waiting?.mailbox)}\n data-testid={`${testId}-open-draft`}\n >\n <Mail className=\"size-4\" /> {l.openDraft}\n </Button>\n )}\n </>\n )\n } else {\n const tags = (state?.output?.tag_ext_ids as string[] | undefined) ?? a.tags\n const docs = (state?.output?.doc_ext_ids as string[] | undefined) ?? []\n body = (\n <>\n {(phase === 'ready' || phase === 'running') && working(l.reviewRunning)}\n {phase === 'done' && (\n <>\n <p className=\"text-sm text-muted-foreground\" data-testid={`${testId}-reviewed`}>\n {l.reviewDone\n .replace('{docs}', String(docs.length))\n .replace('{cols}', String(tags.length))}\n </p>\n {actions?.openReview && (\n <Button\n size=\"sm\"\n onClick={() => actions.openReview?.(tags, docs)}\n data-testid={`${testId}-open-review`}\n >\n <Table2 className=\"size-4\" /> {l.openReview}\n </Button>\n )}\n </>\n )}\n </>\n )\n }\n\n return (\n <div className=\"space-y-3\">\n {heading}\n <SentBackNote state={state} l={l} testId={testId} />\n <AssigneeLine run={run} stepId={step.id} l={l} testId={testId} />\n {body}\n {phase === 'failed' && !state?.declinedBy && (\n <p className=\"text-sm text-destructive\" data-testid={`${testId}-failed`}>\n {state?.error || ''}\n </p>\n )}\n </div>\n )\n}\n","/**\n * The run's stepper: the graph by depth (a sequence is one row, steps side by side stack in a\n * column). It shows every label while they fit the width it has; when they do not, only the step\n * in view keeps its label and the rest are icons (named on hover and to assistive technology).\n * Labels never run past their pill: a long title is cut with an ellipsis, in full in `title`.\n */\n\nimport { useLayoutEffect, useRef, useState, type ReactNode } from 'react'\nimport { AlertTriangle, Check, Hourglass, Loader2, MinusCircle } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { useElementSize } from '../../lib/useElementSize'\nimport type { WorkflowStepPhase } from './run'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type { WorkflowStep } from './types'\n\nexport function PhaseMark({ phase, icon }: { phase: WorkflowStepPhase; icon?: ReactNode }) {\n if (phase === 'done') return <Check className=\"size-3.5 shrink-0\" />\n if (phase === 'running') return <Loader2 className=\"size-3.5 shrink-0 animate-spin\" />\n if (phase === 'waiting') return <Hourglass className=\"size-3.5 shrink-0\" />\n if (phase === 'failed') return <AlertTriangle className=\"size-3.5 shrink-0\" />\n if (phase === 'skipped') return <MinusCircle className=\"size-3.5 shrink-0\" />\n return icon ? (\n <span className=\"flex size-3.5 shrink-0 items-center justify-center [&_svg]:size-3.5\">\n {icon}\n </span>\n ) : null\n}\n\nconst PILL =\n 'flex min-w-0 max-w-full shrink-0 items-center gap-2 whitespace-nowrap rounded-full border px-2.5 py-1.5 text-xs font-medium'\n/** The longest a label gets, compact or not: about 30 characters of text-xs. */\nconst LABEL = 'min-w-0 max-w-[12rem] truncate'\n\nexport interface WorkflowStepBarProps {\n run: WorkflowRunView\n levels: WorkflowStep[][]\n doneTitle: string\n doneIcon?: ReactNode\n icon: (key?: string) => ReactNode\n tid: (suffix: string) => string\n}\n\nexport function WorkflowStepBar({\n run,\n levels,\n doneTitle,\n doneIcon,\n icon,\n tid,\n}: WorkflowStepBarProps) {\n const box = useRef<HTMLDivElement>(null)\n const measure = useRef<HTMLDivElement>(null)\n const row = useRef<HTMLOListElement>(null)\n const { width } = useElementSize(box)\n const [compact, setCompact] = useState(false)\n const titles = levels.map((l) => l.map((s) => s.title).join('\\u0000')).join('\\u0001') + doneTitle\n\n // What every label would need, from an invisible copy laid out at its natural width.\n useLayoutEffect(() => {\n const needed = measure.current?.scrollWidth ?? 0\n setCompact(width > 0 && needed > width)\n }, [width, titles])\n\n // A compact row may still be wider than its box (a very long run): keep the step in view on it.\n useLayoutEffect(() => {\n if (!compact) return\n const el = row.current?.querySelector<HTMLElement>('[aria-current=\"step\"]')\n el?.scrollIntoView?.({ block: 'nearest', inline: 'nearest' })\n }, [compact, run.current])\n\n const pill = (s: WorkflowStep) => {\n const phase = run.phaseOf(s.id)\n const current = s.id === run.current\n // Who it waits for, on a step that is theirs to do now.\n const assignee = ['ready', 'waiting'].includes(phase) ? run.assigneeOf(s.id) : undefined\n const title = assignee ? `${s.title} · ${assignee}` : s.title\n return (\n <button\n key={s.id}\n type=\"button\"\n onClick={() => run.goTo(s.id)}\n disabled={run.busy}\n className={cn(\n PILL,\n 'transition-colors disabled:cursor-default',\n current\n ? 'border-primary bg-primary/10 text-primary'\n : phase === 'failed'\n ? 'border-destructive/40 text-destructive'\n : phase === 'done' ||\n phase === 'skipped' ||\n phase === 'running' ||\n phase === 'waiting'\n ? 'border-primary/30 bg-primary/5 text-primary'\n : 'border-border text-muted-foreground'\n )}\n aria-current={current ? 'step' : undefined}\n aria-label={title}\n title={title}\n data-phase={phase}\n data-testid={tid(`step-${s.id}`)}\n >\n <PhaseMark phase={phase} icon={icon(s.icon)} />\n {(current || !compact) && (\n <span className={LABEL} data-testid={tid(`step-${s.id}-label`)}>\n {s.title}\n </span>\n )}\n {assignee && !compact && (\n <span\n className=\"min-w-0 max-w-[8rem] truncate font-normal opacity-75\"\n data-testid={tid(`step-${s.id}-assignee`)}\n >\n · {assignee}\n </span>\n )}\n </button>\n )\n }\n\n const done = run.isComplete\n return (\n <div ref={box} className=\"relative min-w-0\">\n {/* The measure: every label at full width. Its text is CSS content, so it is not read out or\n found by text, and it takes no room. */}\n <div\n ref={measure}\n aria-hidden\n className=\"pointer-events-none invisible absolute left-0 top-0 flex w-max items-center gap-1.5\"\n >\n {[...levels, [{ id: '__done', title: doneTitle } as WorkflowStep]].map((level, i) => (\n <div key={i} className=\"flex items-center gap-1.5\">\n <div className=\"flex flex-col items-start gap-1\">\n {level.map((s) => (\n <div key={s.id} className={PILL}>\n <span className=\"size-3.5 shrink-0\" />\n <span\n className={cn(LABEL, 'before:content-[attr(data-label)]')}\n data-label={s.title}\n />\n </div>\n ))}\n </div>\n {i < levels.length && <div className=\"w-2\" />}\n </div>\n ))}\n </div>\n <ol\n ref={row}\n className={cn('flex w-full items-center gap-1.5', compact && 'overflow-x-auto pb-1')}\n data-compact={compact || undefined}\n data-testid={tid('steps')}\n >\n {[...levels, null].map((level, i) => (\n <li\n key={level ? level.map((s) => s.id).join('+') : 'done'}\n className={cn(\n 'flex min-w-0 items-center gap-1.5',\n i < levels.length && !compact && 'flex-1',\n compact && 'flex-none'\n )}\n >\n {level ? (\n <div className=\"flex min-w-0 flex-col items-start gap-1\">{level.map(pill)}</div>\n ) : (\n <div\n className={cn(\n PILL,\n done\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border text-muted-foreground'\n )}\n aria-current={done ? 'step' : undefined}\n aria-label={doneTitle}\n title={doneTitle}\n data-testid={tid('step-done')}\n >\n <PhaseMark phase=\"ready\" icon={doneIcon} />\n {(done || !compact) && <span className={LABEL}>{doneTitle}</span>}\n </div>\n )}\n {i < levels.length && (\n <div\n className={cn(\n 'h-px',\n compact ? 'w-3 flex-none' : 'min-w-2 flex-1',\n level?.every((s) => ['done', 'skipped'].includes(run.phaseOf(s.id)))\n ? 'bg-primary/40'\n : 'bg-border'\n )}\n />\n )}\n </li>\n ))}\n </ol>\n </div>\n )\n}\n","/**\n * A stepped workflow run, end to end: the stepper, the step in view (a form, an upload, an agent\n * step or a review) and moving on. The stepper lays the graph out by depth: a sequence is one row,\n * steps side by side stack in a column. The run comes from `useWorkflowThread` (a thread on the\n * server) or `useWorkflowPreview`; wording and the agent output's rendering come from the host.\n */\n\nimport { useEffect, useRef, useState, type ReactNode } from 'react'\nimport {\n AlertTriangle,\n ArrowLeft,\n ArrowRight,\n Check,\n CheckCircle2,\n FileText,\n GitBranch,\n Loader2,\n RotateCw,\n} from 'lucide-react'\nimport { Button, Card, cn } from '@arbidocs/react/ui'\nimport { UploadDropzone } from '../../files/UploadDropzone'\nimport { SchemaForm, type SchemaFormProps } from './SchemaForm'\nimport { reviewInstructions, stepDependencies, stepLevels } from './run'\nimport { WorkflowStepBar } from './WorkflowStepBar'\nimport {\n ActionStepBody,\n ApprovalEvidence,\n AssigneeLine,\n DEFAULT_WORKFLOW_STEP_PARTS_LABELS,\n RedlineOpen,\n SendBackControl,\n SentBackNote,\n type WorkflowRunnerActions,\n type WorkflowStepPartsLabels,\n} from './StepParts'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type {\n WorkflowAgentStep,\n WorkflowDefinition,\n WorkflowReviewStep,\n WorkflowStep,\n WorkflowStepState,\n WorkflowUploadStep,\n} from './types'\n\nexport interface WorkflowRunnerLabels {\n back: string\n next: string\n skip: string\n /** Skips the step in view (any unfinished step: the plan guides the thread, it does not hold it). */\n skipStep: string\n finish: string\n approve: string\n working: string\n /** An agent step under way: `{step}` is its title, `{elapsed}` how long it has run (m:ss). */\n stepWorking: string\n /** An agent step about to start (the run will pick it up). */\n starting: string\n retry: string\n failed: string\n /** A step whose dependencies have not finished; `{steps}` is replaced with their titles. */\n blocked: string\n awaitingReview: string\n approved: string\n skipped: string\n /** An agent step that runs off the main line and delivers its result to it. */\n branch: string\n /** The default finish heading (the workflow's `completion.title` wins). */\n complete: string\n restart: string\n /** The upload step's list of what else the workspace holds (folded); `{count}` is replaced. */\n filesHeading: string\n /** The upload step's list of the files added on it in this run; `{count}` is replaced. */\n addedHeading: string\n noFiles: string\n /** A file's processing status on the upload step. */\n fileReading: string\n fileReady: string\n fileFailed: string\n /** Continue on an upload step while its files are read; `{current}` and `{count}` are replaced. */\n readingFiles: string\n /** The primary button on an email step waiting to be sent. */\n markSent: string\n}\n\nexport const DEFAULT_WORKFLOW_RUNNER_LABELS: WorkflowRunnerLabels = {\n back: 'Back',\n next: 'Continue',\n skip: 'Skip',\n skipStep: 'Skip this step',\n finish: 'Finish',\n approve: 'Approve',\n working: 'Working…',\n stepWorking: '{step}… {elapsed}',\n starting: 'Starting…',\n retry: 'Retry',\n failed: 'This step did not finish.',\n blocked: 'Starts after {steps}.',\n awaitingReview: 'Waiting for approval.',\n approved: 'Approved.',\n skipped: 'Skipped.',\n branch: 'Runs alongside; its result joins the thread',\n complete: 'Done',\n restart: 'Start again',\n filesHeading: 'Already in the workspace ({count})',\n addedHeading: 'Added for this step ({count})',\n noFiles: 'No files yet.',\n fileReading: 'Reading…',\n fileReady: 'Ready',\n fileFailed: 'Could not be read',\n readingFiles: 'Reading {current} of {count} files…',\n markSent: 'Mark as sent',\n}\n\n/** A file the upload step lists (what is in the run's workspace). */\nexport interface WorkflowRunnerFile {\n id: string\n name: string\n /** Where its processing is; absent = not known (shown as is). */\n status?: 'processing' | 'ready' | 'failed'\n /** The upload step it was added on in this run (listed first there, and holds it while read). */\n addedFor?: string\n}\n\nexport interface WorkflowRunnerProps extends Pick<\n SchemaFormProps,\n 'renderScope' | 'renderDocuments' | 'renderIcon' | 'people'\n> {\n workflow: WorkflowDefinition\n run: WorkflowRunView\n /** An agent step's output (its answer, a drafted document). */\n renderAgentOutput: (step: WorkflowAgentStep, state: WorkflowStepState | undefined) => ReactNode\n /** A review's extras while it waits (e.g. who to ask). */\n renderReview?: (step: WorkflowReviewStep) => ReactNode\n /** Upload step: the host performs the upload into the run's workspace. */\n onUpload?: (files: File[], step: WorkflowUploadStep) => void | Promise<void>\n uploading?: boolean\n /** What the run's workspace holds, listed on the upload step. */\n files?: WorkflowRunnerFile[]\n /** Replaces an upload step's body. */\n renderUpload?: (step: WorkflowUploadStep) => ReactNode\n /** Extra content under a step's body (e.g. what a commit created). */\n renderStepNote?: (step: WorkflowStep, run: WorkflowRunView) => ReactNode\n /** Replaces the finish screen. */\n renderComplete?: (run: WorkflowRunView) => ReactNode\n /** Where the runner hands off to the host: documents, the sign flow, mail, a review grid. */\n actions?: WorkflowRunnerActions\n /** A document's name by id (chips show it instead of the id). */\n nameOfDoc?: (id: string) => string | undefined\n labels?: Partial<WorkflowRunnerLabels>\n /** The wording of action steps, assignees, send-backs and approvals. */\n partsLabels?: Partial<WorkflowStepPartsLabels>\n /**\n * Test ids: `<prefix>-step-<id>` (pill), `<prefix>-<id>` (body), `<prefix>-field-<name>`,\n * `<prefix>-next` / `-back`, `<prefix>-done`.\n */\n testIdPrefix?: string\n className?: string\n}\n\nexport function WorkflowRunner({\n workflow,\n run,\n renderAgentOutput,\n renderReview,\n onUpload,\n uploading = false,\n files,\n renderUpload,\n renderStepNote,\n renderComplete,\n renderScope,\n renderDocuments,\n renderIcon,\n people,\n actions,\n nameOfDoc,\n labels,\n partsLabels,\n testIdPrefix = 'workflow-run',\n className,\n}: WorkflowRunnerProps) {\n const l = { ...DEFAULT_WORKFLOW_RUNNER_LABELS, ...labels }\n const pl = { ...DEFAULT_WORKFLOW_STEP_PARTS_LABELS, ...partsLabels }\n const { steps, step, isComplete, action } = run\n const completion = workflow.run.kind === 'steps' ? workflow.run.completion : undefined\n const tid = (suffix: string) => `${testIdPrefix}-${suffix}`\n const levels = stepLevels(steps)\n const icon = (key?: string) => (key && renderIcon ? renderIcon(key) : undefined)\n\n // An upload step's files are read before the run goes on (it can still be skipped).\n const added = step?.kind === 'upload' ? (files ?? []).filter((f) => f.addedFor === step.id) : []\n const unread = added.filter((f) => f.status === 'processing').length\n const reading = action === 'complete' && unread > 0\n\n const nextLabel = reading\n ? l.readingFiles\n .replace('{current}', String(Math.min(added.length - unread + 1, added.length)))\n .replace('{count}', String(added.length))\n : action === 'skip'\n ? l.skip\n : action === 'finish'\n ? l.finish\n : action === 'complete' && step?.kind === 'review'\n ? l.approve\n : action === 'complete' && step?.kind === 'action'\n ? l.markSent\n : action === 'wait' && (run.isRunning || run.busy)\n ? l.working\n : ((step && !run.isLocked(step.id) ? step.nextLabel : undefined) ?? l.next)\n\n return (\n <div className={cn('space-y-6', className)} data-testid={testIdPrefix}>\n <WorkflowStepBar\n run={run}\n levels={levels}\n doneTitle={completion?.title ?? l.complete}\n doneIcon={icon(completion?.icon)}\n icon={icon}\n tid={tid}\n />\n\n {isComplete ? (\n (renderComplete?.(run) ?? (\n <Card className=\"mx-auto max-w-lg p-8 text-center\" data-testid={tid('done')}>\n <CheckCircle2 className=\"mx-auto size-12 text-primary\" />\n <h2 className=\"mt-4 text-xl font-semibold\">{completion?.title ?? l.complete}</h2>\n {completion?.description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{completion.description}</p>\n )}\n <Button\n variant=\"outline\"\n className=\"mt-6\"\n onClick={run.restart}\n data-testid={tid('restart')}\n >\n {l.restart}\n </Button>\n </Card>\n ))\n ) : step ? (\n <div key={step.id} className=\"space-y-3\">\n {run.phaseOf(step.id) === 'blocked' ? (\n <Card className=\"max-w-2xl p-6\" data-testid={tid(step.id)}>\n <p className=\"text-sm text-muted-foreground\" data-testid={tid(`${step.id}-blocked`)}>\n {l.blocked.replace(\n '{steps}',\n stepDependencies(steps, step.id)\n .map((d) => steps.find((s) => s.id === d)?.title ?? d)\n .join(', ')\n )}\n </p>\n </Card>\n ) : step.kind === 'form' ? (\n <Card className=\"max-w-2xl space-y-4 p-6\" data-testid={tid(step.id)}>\n <StepHeading step={step} icon={icon(step.icon)} testId={tid(`${step.id}-title`)} />\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n <fieldset disabled={run.isLocked(step.id)} className=\"contents\">\n <SchemaForm\n fields={step.inputs}\n values={run.inputs}\n onChange={run.setInput}\n errors={run.errors}\n renderScope={renderScope}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n people={people}\n onEnterSubmit={() => void run.next()}\n testIdPrefix={tid('field')}\n />\n </fieldset>\n {run.actionError && (\n <p className=\"text-sm text-destructive\" data-testid={tid('action-error')}>\n {run.actionError}\n </p>\n )}\n {renderStepNote?.(step, run)}\n </Card>\n ) : step.kind === 'upload' ? (\n <Card className=\"max-w-2xl space-y-4 p-6\" data-testid={tid(step.id)}>\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n {renderUpload?.(step) ?? (\n <>\n <UploadDropzone\n onFiles={(picked) => void onUpload?.(picked, step)}\n uploading={uploading}\n disabled={!onUpload}\n accept={step.accept}\n title={step.title}\n description={step.description}\n hint={step.hint}\n testId={tid(`${step.id}-drop`)}\n />\n {files && (\n <UploadFiles\n added={added}\n others={files.filter((f) => f.addedFor !== step.id)}\n l={l}\n testId={tid(`${step.id}-files`)}\n />\n )}\n </>\n )}\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n {renderStepNote?.(step, run)}\n </Card>\n ) : step.kind === 'review' ? (\n <Card className=\"max-w-2xl space-y-4 p-6\" data-testid={tid(step.id)}>\n <StepHeading step={step} icon={icon(step.icon)} />\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <p className=\"whitespace-pre-line text-sm text-muted-foreground\">\n {reviewInstructions(step, run.inputs)}\n </p>\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n {/* A recorded approval says who approved below; without one, the status says it. */}\n {!(run.phaseOf(step.id) === 'done' && run.stateOf(step.id)?.by) && (\n <p className=\"text-sm\" data-testid={tid(`${step.id}-status`)}>\n {run.phaseOf(step.id) === 'done'\n ? l.approved\n : run.phaseOf(step.id) === 'skipped'\n ? l.skipped\n : l.awaitingReview}\n </p>\n )}\n {(step.fields ?? []).length > 0 && run.phaseOf(step.id) === 'ready' && (\n <SchemaForm\n fields={step.fields ?? []}\n values={run.inputs}\n onChange={run.setInput}\n errors={run.errors}\n renderScope={renderScope}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n people={people}\n testIdPrefix={tid('field')}\n />\n )}\n <ApprovalEvidence\n run={run}\n step={step}\n actions={actions}\n nameOfDoc={nameOfDoc}\n l={pl}\n testId={tid(step.id)}\n />\n {run.phaseOf(step.id) === 'ready' && renderReview?.(step)}\n <SendBackControl run={run} step={step} l={pl} testId={tid(step.id)} />\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n {renderStepNote?.(step, run)}\n </Card>\n ) : step.kind === 'action' ? (\n <Card className=\"max-w-2xl space-y-4 p-6\" data-testid={tid(step.id)}>\n <ActionStepBody\n step={step}\n run={run}\n actions={actions}\n nameOfDoc={nameOfDoc}\n heading={<StepHeading step={step} icon={icon(step.icon)} />}\n l={pl}\n testId={tid(step.id)}\n />\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n {renderStepNote?.(step, run)}\n </Card>\n ) : (\n <AgentStepBody\n step={step}\n run={run}\n renderAgentOutput={renderAgentOutput}\n icon={icon(step.icon)}\n renderStepNote={renderStepNote}\n extra={\n <>\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <RedlineOpen\n step={step}\n state={run.stateOf(step.id)}\n actions={actions}\n l={pl}\n testId={tid(step.id)}\n />\n </>\n }\n l={l}\n tid={tid}\n />\n )}\n </div>\n ) : null}\n\n {!isComplete && (\n <div className=\"flex items-center justify-between border-t border-border pt-4\">\n <Button\n variant=\"ghost\"\n onClick={run.back}\n disabled={!run.canBack}\n data-testid={tid('back')}\n >\n <ArrowLeft className=\"size-4\" /> {l.back}\n </Button>\n <div className=\"flex items-center gap-2\">\n {step &&\n action !== 'skip' &&\n // A step that commits (creates the matter, starts the thread) is what the run stands on.\n !step.commit &&\n ['ready', 'blocked', 'failed'].includes(run.phaseOf(step.id)) && (\n <Button\n variant=\"ghost\"\n onClick={() => void run.skip(step.id)}\n disabled={run.busy}\n data-testid={tid('skip-step')}\n >\n {l.skipStep}\n </Button>\n )}\n <Button\n onClick={() => void run.next()}\n disabled={action === 'wait' || reading}\n data-testid={tid('next')}\n >\n {nextLabel}\n {reading || (action === 'wait' && (run.isRunning || run.busy)) ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <ArrowRight className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/** What the upload step lists: this step's files first, with their status; the rest folded. */\nfunction UploadFiles({\n added,\n others,\n l,\n testId,\n}: {\n added: WorkflowRunnerFile[]\n others: WorkflowRunnerFile[]\n l: WorkflowRunnerLabels\n testId: string\n}) {\n const heading = 'text-xs font-semibold uppercase tracking-wide text-muted-foreground'\n const row = (f: WorkflowRunnerFile) => (\n <div\n key={f.id}\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-status={f.status}\n data-testid={`${testId}-file-${f.id}`}\n >\n <FileText className=\"size-3.5 shrink-0 text-primary\" />\n <span className=\"min-w-0 flex-1 truncate\" title={f.name}>\n {f.name}\n </span>\n {f.status === 'processing' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs\">\n <Loader2 className=\"size-3 animate-spin\" /> {l.fileReading}\n </span>\n )}\n {f.status === 'ready' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-primary\">\n <Check className=\"size-3\" /> {l.fileReady}\n </span>\n )}\n {f.status === 'failed' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-destructive\">\n <AlertTriangle className=\"size-3\" /> {l.fileFailed}\n </span>\n )}\n </div>\n )\n return (\n <div className=\"space-y-3\" data-testid={testId}>\n {added.length > 0 && (\n <div className=\"space-y-1\" data-testid={`${testId}-added`}>\n <p className={heading}>{l.addedHeading.replace('{count}', String(added.length))}</p>\n {added.map(row)}\n </div>\n )}\n {added.length === 0 && others.length === 0 && (\n <p className=\"text-sm text-muted-foreground\">{l.noFiles}</p>\n )}\n {others.length > 0 && (\n <details className=\"space-y-1\" data-testid={`${testId}-others`}>\n <summary className={cn(heading, 'cursor-pointer select-none')}>\n {l.filesHeading.replace('{count}', String(others.length))}\n </summary>\n <div className=\"mt-1 max-h-48 space-y-1 overflow-y-auto\">{others.map(row)}</div>\n </details>\n )}\n </div>\n )\n}\n\nfunction StepHeading({\n step,\n icon,\n testId,\n}: {\n step: WorkflowStep\n icon?: ReactNode\n testId?: string\n}) {\n return (\n <div className=\"min-w-0\">\n <p className=\"flex items-center gap-2 text-sm font-medium\" data-testid={testId}>\n {icon && (\n <span className=\"flex size-4 items-center justify-center text-primary [&_svg]:size-4\">\n {icon}\n </span>\n )}\n {step.title}\n </p>\n {step.description && <p className=\"mt-1 text-xs text-muted-foreground\">{step.description}</p>}\n </div>\n )\n}\n\n/** m:ss (h:mm:ss past an hour). */\nexport function formatElapsed(ms: number): string {\n const total = Math.max(0, Math.floor(ms / 1000))\n const h = Math.floor(total / 3600)\n const m = Math.floor((total % 3600) / 60)\n const sec = String(total % 60).padStart(2, '0')\n return h ? `${h}:${String(m).padStart(2, '0')}:${sec}` : `${m}:${sec}`\n}\n\n/** \"<title>… 0:42\": the running step and how long it has run, ticking. */\nfunction StepWorking({ title, since, label }: { title: string; since?: string; label: string }) {\n // Without the server's start time, from when this screen first saw it running.\n const seen = useRef(Date.now())\n const start = (since && Date.parse(since)) || seen.current\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n const t = setInterval(() => setNow(Date.now()), 1000)\n return () => clearInterval(t)\n }, [])\n return (\n <span>{label.replace('{step}', title).replace('{elapsed}', formatElapsed(now - start))}</span>\n )\n}\n\nfunction AgentStepBody({\n step,\n run,\n renderAgentOutput,\n icon,\n renderStepNote,\n extra,\n l,\n tid,\n}: {\n step: WorkflowAgentStep\n run: WorkflowRunView\n renderAgentOutput: WorkflowRunnerProps['renderAgentOutput']\n icon?: ReactNode\n renderStepNote?: WorkflowRunnerProps['renderStepNote']\n /** Under the status: a send-back note, \"Open in Word\". */\n extra?: ReactNode\n l: WorkflowRunnerLabels\n tid: (suffix: string) => string\n}) {\n const state = run.stateOf(step.id)\n const phase = run.phaseOf(step.id)\n const header = (\n <div className=\"flex items-start justify-between gap-3\">\n <StepHeading step={step} icon={icon} />\n {phase === 'failed' && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {run.retry && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => void run.retry?.(step.id)}\n disabled={run.busy}\n data-testid={tid(`${step.id}-retry`)}\n >\n <RotateCw className=\"size-4\" /> {l.retry}\n </Button>\n )}\n </div>\n )}\n </div>\n )\n const status = (\n <div className=\"space-y-1\">\n {step.branch && (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <GitBranch className=\"size-3.5\" /> {l.branch}\n </p>\n )}\n {(phase === 'ready' || phase === 'running') && !state?.text && (\n <p\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-testid={tid(`${step.id}-working`)}\n >\n <Loader2 className=\"size-4 animate-spin\" />{' '}\n {phase === 'ready' ? (\n l.starting\n ) : (\n <StepWorking title={step.title} since={state?.startedAt} label={l.stepWorking} />\n )}\n </p>\n )}\n {phase === 'failed' && (\n <p className=\"text-sm text-destructive\" data-testid={tid(`${step.id}-failed`)}>\n {state?.error || l.failed}\n </p>\n )}\n {phase === 'skipped' && <p className=\"text-sm text-muted-foreground\">{l.skipped}</p>}\n {extra}\n </div>\n )\n\n if (step.output === 'artifact') {\n return (\n <div\n className=\"grid gap-4 lg:grid-cols-[minmax(0,18rem)_minmax(0,1fr)]\"\n data-testid={tid(step.id)}\n >\n <Card className=\"h-fit space-y-3 p-5\">\n {header}\n {status}\n {renderStepNote?.(step, run)}\n </Card>\n <div className=\"min-w-0\">{renderAgentOutput(step, state)}</div>\n </div>\n )\n }\n return (\n <Card className=\"space-y-3 p-6\" data-testid={tid(step.id)}>\n {header}\n {status}\n {renderAgentOutput(step, state)}\n {renderStepNote?.(step, run)}\n </Card>\n )\n}\n"]}
|