@arbidocs/blocks 0.4.32 → 0.4.33
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 +257 -215
- package/dist/agents/index.js +8 -6
- package/dist/agents/tasks/ConversationListView.d.ts +58 -0
- package/dist/agents/tasks/ConversationTurnSpeaker.d.ts +16 -0
- package/dist/agents/tasks/NewThreadDialog.d.ts +1 -1
- package/dist/agents/tasks/TaskActivityTimeline.d.ts +1 -1
- package/dist/agents/tasks/TaskFlow.d.ts +22 -0
- package/dist/agents/tasks/TaskInbox.d.ts +26 -0
- package/dist/agents/tasks/TaskReviewDialog.d.ts +22 -0
- package/dist/agents/tasks/TaskRowMenu.d.ts +10 -2
- package/dist/agents/tasks/TaskRunsDialog.d.ts +8 -3
- package/dist/agents/tasks/TaskStartDialog.d.ts +24 -0
- package/dist/agents/tasks/TaskTable.d.ts +1 -1
- package/dist/agents/tasks/ThreadNotifyDialog.d.ts +11 -0
- package/dist/agents/tasks/WorkflowComposer.d.ts +1 -1
- package/dist/agents/tasks/WorkflowsTable.d.ts +7 -0
- package/dist/agents/tasks/compact-thread-activity.d.ts +8 -0
- package/dist/agents/tasks/index.d.ts +10 -0
- package/dist/agents/tasks/taskComposerTypes.d.ts +16 -1
- package/dist/agents/tasks/taskRequest.d.ts +1 -0
- package/dist/agents/tasks/testGrid.d.ts +24 -0
- package/dist/agents/tasks/workflowColumns.d.ts +2 -1
- package/dist/agents/tasks/workflowRows.d.ts +6 -0
- package/dist/agents/workflows/types.d.ts +2 -0
- package/dist/auth/index.cjs +27 -27
- package/dist/auth/index.js +1 -1
- package/dist/chat/Message.d.ts +8 -2
- package/dist/chat/index.cjs +132 -120
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +2 -2
- package/dist/chat/participant-tints.d.ts +1 -0
- package/dist/chat/useRecipientDraft.d.ts +14 -0
- package/dist/{chunk-KF4EC5XU.js → chunk-24KQJYSB.js} +3 -3
- package/dist/{chunk-KF4EC5XU.js.map → chunk-24KQJYSB.js.map} +1 -1
- package/dist/{chunk-GVQOBJKR.cjs → chunk-2EAE5JP6.cjs} +7 -4
- package/dist/chunk-2EAE5JP6.cjs.map +1 -0
- package/dist/{chunk-S5HZBXZA.cjs → chunk-2QTT2RZE.cjs} +242 -2
- package/dist/chunk-2QTT2RZE.cjs.map +1 -0
- package/dist/chunk-3AFWGEDJ.cjs +53 -0
- package/dist/chunk-3AFWGEDJ.cjs.map +1 -0
- package/dist/{chunk-4XJZ6AAY.js → chunk-4AWS54US.js} +244 -6
- package/dist/chunk-4AWS54US.js.map +1 -0
- package/dist/{chunk-56BUD74K.cjs → chunk-65THHQVB.cjs} +27 -27
- package/dist/{chunk-56BUD74K.cjs.map → chunk-65THHQVB.cjs.map} +1 -1
- package/dist/{chunk-5B4PXAKI.cjs → chunk-6DNYPLCD.cjs} +21 -7
- package/dist/chunk-6DNYPLCD.cjs.map +1 -0
- package/dist/{chunk-TZ4QF7EP.js → chunk-6RXUMBTK.js} +1948 -594
- package/dist/chunk-6RXUMBTK.js.map +1 -0
- package/dist/{chunk-UTYQPVIW.cjs → chunk-7QDX2CO4.cjs} +6 -6
- package/dist/{chunk-UTYQPVIW.cjs.map → chunk-7QDX2CO4.cjs.map} +1 -1
- package/dist/{chunk-FRRDPYBR.cjs → chunk-AZ75JUIH.cjs} +74 -5
- package/dist/chunk-AZ75JUIH.cjs.map +1 -0
- package/dist/{chunk-NUPVHEJW.js → chunk-BUHKUKKB.js} +7 -4
- package/dist/chunk-BUHKUKKB.js.map +1 -0
- package/dist/chunk-C7FGONCM.js +124 -0
- package/dist/chunk-C7FGONCM.js.map +1 -0
- package/dist/{chunk-KXMDOTGW.js → chunk-DLBUFHLY.js} +10 -2
- package/dist/chunk-DLBUFHLY.js.map +1 -0
- package/dist/{chunk-ZHLMDJCO.cjs → chunk-DLVX6R6B.cjs} +62 -26
- package/dist/chunk-DLVX6R6B.cjs.map +1 -0
- package/dist/{chunk-JGZTRLKL.cjs → chunk-IA7RTPT3.cjs} +7 -4
- package/dist/chunk-IA7RTPT3.cjs.map +1 -0
- package/dist/{chunk-NJL4LIXX.js → chunk-LFGJAZ5H.js} +11 -8
- package/dist/chunk-LFGJAZ5H.js.map +1 -0
- package/dist/{chunk-IAKUTBPX.js → chunk-LYUO3E6V.js} +3 -3
- package/dist/{chunk-IAKUTBPX.js.map → chunk-LYUO3E6V.js.map} +1 -1
- package/dist/{chunk-EYPPB5CY.cjs → chunk-M2YGPC5N.cjs} +4 -4
- package/dist/{chunk-EYPPB5CY.cjs.map → chunk-M2YGPC5N.cjs.map} +1 -1
- package/dist/{chunk-5ZBP7TCD.cjs → chunk-MJCCBMM5.cjs} +10 -2
- package/dist/chunk-MJCCBMM5.cjs.map +1 -0
- package/dist/chunk-MZL67U2E.cjs +128 -0
- package/dist/chunk-MZL67U2E.cjs.map +1 -0
- package/dist/{chunk-OJSWQM4G.js → chunk-OZJ5PXA6.js} +29 -4
- package/dist/chunk-OZJ5PXA6.js.map +1 -0
- package/dist/{chunk-UBNVIIBT.js → chunk-PXFJDX2C.js} +21 -7
- package/dist/chunk-PXFJDX2C.js.map +1 -0
- package/dist/{chunk-RGHQFJOL.cjs → chunk-QFUF4A4J.cjs} +28 -2
- package/dist/chunk-QFUF4A4J.cjs.map +1 -0
- package/dist/chunk-RFXJYIDV.js +50 -0
- package/dist/chunk-RFXJYIDV.js.map +1 -0
- package/dist/{chunk-PLGVMLBD.cjs → chunk-SEQWI6E4.cjs} +1975 -610
- package/dist/chunk-SEQWI6E4.cjs.map +1 -0
- package/dist/{chunk-QN42OA5J.js → chunk-SFXVNFES.js} +4 -4
- package/dist/chunk-SFXVNFES.js.map +1 -0
- package/dist/{chunk-3NZR6PAG.js → chunk-V6U5KVAR.js} +70 -4
- package/dist/chunk-V6U5KVAR.js.map +1 -0
- package/dist/{chunk-YVIOCITQ.cjs → chunk-VUEZARW5.cjs} +3 -3
- package/dist/chunk-VUEZARW5.cjs.map +1 -0
- package/dist/{chunk-JLOYWXRB.js → chunk-VZGBCBYB.js} +3 -3
- package/dist/chunk-VZGBCBYB.js.map +1 -0
- package/dist/{chunk-ZVPTFTGV.cjs → chunk-WBDK4PIA.cjs} +11 -8
- package/dist/chunk-WBDK4PIA.cjs.map +1 -0
- package/dist/{chunk-ZORQ5M3W.cjs → chunk-WQFGG2BV.cjs} +4 -4
- package/dist/chunk-WQFGG2BV.cjs.map +1 -0
- package/dist/{chunk-C75S6USL.js → chunk-WYVCXY7R.js} +7 -4
- package/dist/chunk-WYVCXY7R.js.map +1 -0
- package/dist/{chunk-WSJVHSGN.js → chunk-XWEJ5LV2.js} +63 -27
- package/dist/chunk-XWEJ5LV2.js.map +1 -0
- package/dist/{chunk-YMHGF6R5.js → chunk-ZCF2JJFA.js} +3 -3
- package/dist/{chunk-YMHGF6R5.js.map → chunk-ZCF2JJFA.js.map} +1 -1
- package/dist/collaboration/index.cjs +45 -41
- package/dist/collaboration/index.js +1 -1
- package/dist/collaboration/mail/MailMessagePreview.d.ts +11 -0
- package/dist/collaboration/mail/index.d.ts +1 -0
- package/dist/connect/index.cjs +33 -33
- package/dist/connect/index.js +4 -4
- package/dist/facts/FactsFilterInput.d.ts +2 -46
- package/dist/facts/FactsToolbar.d.ts +5 -5
- package/dist/facts/index.cjs +27 -124
- package/dist/facts/index.cjs.map +1 -1
- package/dist/facts/index.js +13 -118
- package/dist/facts/index.js.map +1 -1
- package/dist/files/FilesPage.d.ts +1 -1
- package/dist/files/FilesToolbar.d.ts +1 -1
- package/dist/files/FolderPicker.d.ts +2 -1
- package/dist/files/ViewerChrome.d.ts +1 -1
- package/dist/files/bulk/FolderFilterButton.d.ts +3 -2
- package/dist/files/cells/BulkLabelSelect.d.ts +11 -0
- package/dist/files/cells/LabelMultiSelect.d.ts +2 -1
- package/dist/files/cells/index.d.ts +1 -0
- package/dist/files/index.cjs +109 -166
- package/dist/files/index.cjs.map +1 -1
- package/dist/files/index.js +95 -158
- package/dist/files/index.js.map +1 -1
- package/dist/home/index.cjs +19 -19
- package/dist/home/index.cjs.map +1 -1
- package/dist/home/index.js +4 -4
- package/dist/home/index.js.map +1 -1
- package/dist/index.cjs +787 -764
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +21 -69
- package/dist/index.js.map +1 -1
- package/dist/settings/SettingsPanel.d.ts +1 -1
- package/dist/settings/index.cjs +55 -280
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.js +17 -248
- package/dist/settings/index.js.map +1 -1
- package/dist/shell/FilterInput.d.ts +46 -0
- package/dist/shell/TabHeader.d.ts +5 -1
- package/dist/shell/index.cjs +61 -48
- package/dist/shell/index.d.ts +1 -0
- package/dist/shell/index.js +3 -2
- package/dist/site/index.cjs +62 -62
- package/dist/site/index.js +2 -2
- package/dist/studio/index.cjs +74 -74
- package/dist/studio/index.js +5 -5
- package/dist/workspaces/WorkspaceCard.d.ts +2 -2
- package/dist/workspaces/index.cjs +9 -2
- package/dist/workspaces/index.cjs.map +1 -1
- package/dist/workspaces/index.js +9 -2
- package/dist/workspaces/index.js.map +1 -1
- package/package.json +3 -3
- package/src/blocks.css +4 -0
- package/src/components/grid.css +10 -0
- package/dist/chunk-3NZR6PAG.js.map +0 -1
- package/dist/chunk-4XJZ6AAY.js.map +0 -1
- package/dist/chunk-5B4PXAKI.cjs.map +0 -1
- package/dist/chunk-5ZBP7TCD.cjs.map +0 -1
- package/dist/chunk-C75S6USL.js.map +0 -1
- package/dist/chunk-FRRDPYBR.cjs.map +0 -1
- package/dist/chunk-GVQOBJKR.cjs.map +0 -1
- package/dist/chunk-JGZTRLKL.cjs.map +0 -1
- package/dist/chunk-JLOYWXRB.js.map +0 -1
- package/dist/chunk-KXMDOTGW.js.map +0 -1
- package/dist/chunk-NJL4LIXX.js.map +0 -1
- package/dist/chunk-NUPVHEJW.js.map +0 -1
- package/dist/chunk-OJSWQM4G.js.map +0 -1
- package/dist/chunk-PLGVMLBD.cjs.map +0 -1
- package/dist/chunk-QN42OA5J.js.map +0 -1
- package/dist/chunk-RGHQFJOL.cjs.map +0 -1
- package/dist/chunk-S5HZBXZA.cjs.map +0 -1
- package/dist/chunk-TZ4QF7EP.js.map +0 -1
- package/dist/chunk-UBNVIIBT.js.map +0 -1
- package/dist/chunk-WSJVHSGN.js.map +0 -1
- package/dist/chunk-YVIOCITQ.cjs.map +0 -1
- package/dist/chunk-ZHLMDJCO.cjs.map +0 -1
- package/dist/chunk-ZORQ5M3W.cjs.map +0 -1
- package/dist/chunk-ZVPTFTGV.cjs.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/lib/useControllableState.ts","../src/agents/workflows/AgentSelect.tsx","../src/agents/workflows/WorkflowConfigDialog.tsx","../src/agents/workflows/scopeRender.tsx","../src/agents/workflows/WorkflowLauncher.tsx","../src/agents/workflows/workspaceScope.ts","../src/agents/workflows/WorkflowDocumentsField.tsx","../src/agents/definitions/AgentCard.tsx","../src/agents/definitions/AgentGallery.tsx","../src/agents/definitions/AgentEditorParts.tsx","../src/agents/definitions/AgentCreator.tsx","../src/agents/definitions/persona.ts","../src/agents/skills/SkillParts.tsx","../src/agents/skills/SkillCard.tsx","../src/agents/skills/SkillRow.tsx","../src/agents/skills/SkillForms.tsx","../src/agents/skills/SkillBrowserParts.tsx","../src/agents/tasks/TaskPlan.tsx","../src/agents/tasks/elapsed.ts","../src/agents/tasks/UploadTaskItem.tsx","../src/agents/tasks/UploadTaskList.tsx","../src/agents/tasks/rrule.ts","../src/agents/tasks/RecurrenceBuilder.tsx","../src/agents/tasks/taskLabels.ts","../src/agents/tasks/PersonPill.tsx","../src/agents/tasks/TaskOutputsCell.tsx","../src/agents/tasks/TaskMoveDialog.tsx","../src/agents/tasks/TaskReviewActions.tsx","../src/agents/tasks/taskRows.ts","../src/agents/tasks/TaskRowMenu.tsx","../src/agents/tasks/TaskStatusPill.tsx","../src/agents/tasks/taskColumns.tsx","../src/agents/tasks/gridWidth.ts","../src/agents/tasks/taskTableLabels.ts","../src/agents/tasks/TaskTable.tsx","../src/agents/tasks/DueDateMenu.tsx","../src/agents/tasks/PillSelect.tsx","../src/agents/tasks/taskRequest.ts","../src/agents/tasks/NewThreadDialog.tsx","../src/agents/tasks/TaskTriggerChip.tsx","../src/agents/tasks/workflowRows.ts","../src/agents/tasks/workflowColumns.tsx","../src/agents/tasks/workflowTableLabels.ts","../src/agents/tasks/WorkflowsTable.tsx","../src/agents/tasks/TaskActivityTimeline.tsx","../src/agents/tasks/TaskActivityDialog.tsx","../src/agents/tasks/TaskThreadChip.tsx","../src/agents/tasks/TaskRunsDialog.tsx","../src/agents/tasks/TasksChrome.tsx","../src/agents/tasks/taskComposerTypes.ts","../src/agents/tasks/WorkflowComposer.tsx","../src/agents/tasks/TaskComposer.tsx","../src/agents/config/TupleArrayField.tsx","../src/agents/config/schema-utils.ts","../src/agents/config/ConfigField.tsx","../src/agents/config/ConfigForm.tsx","../src/agents/runs/AgentBar.tsx","../src/agents/runs/AgentSteps.tsx","../src/agents/runs/SubagentRoster.tsx","../src/agents/approvals/ConsentPage.tsx","../src/agents/approvals/ConsentParts.tsx","../src/agents/approvals/AuthorizeAgentParts.tsx"],"names":["useState","jsxs","cn","jsx","Label","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","useRef","Fragment","documents","Button","goalProgress","Loader2","Bot","useMemo","useEffect","Dialog","DialogContent","Textarea","Sparkles","Input","Eye","Pencil","Globe","Lock","Trash2","Wand2","Plus","minutes","X","StatusIcon","time","pad2","DialogHeader","DialogTitle","DialogDescription","Check","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","CornerDownRight","MessageSquare","KeyRound","CheckCheck","Popover","PopoverTrigger","ChevronDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandItem","Switch","VisibilityToggle","UserCheck","EntityPill","cell","ROW_HEIGHT","AlertCircle","Play","MoreHorizontal","History","DropdownMenuSeparator","Workflow","WIDTH_RULES","UserRoundCog","MessageSquareReply","RotateCcw","AlertTriangle","useCallback","ListTodo","GLYPH","WHEN_ORDER","formatDue","id","CalendarClock","value","ChevronRight","memo","AgentBarIconButton","CheckCircle2","TriangleAlert","Tooltip","TooltipTrigger","TooltipContent","Copy"],"mappings":"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","file":"chunk-TZ4QF7EP.js","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' | 'longtext' | 'boolean' | 'select' | 'number' | 'date' | 'scope' | 'documents'\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\nexport interface WorkflowDefinition {\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","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 /**\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}\n\nfunction FieldControl({\n field,\n value,\n error,\n onChange,\n l,\n idFor,\n renderScope,\n renderDocuments,\n renderIcon,\n onEnterSubmit,\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 }\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 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 />\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","import { useCallback, useRef, useState } from 'react'\n\n/**\n * State that is controlled when `value` is passed and uncontrolled (seeded by `defaultValue`)\n * otherwise. `onChange` fires in both modes.\n */\nexport function useControllableState<T>(\n value: T | undefined,\n defaultValue: T,\n onChange?: (next: T) => void\n): [T, (next: T) => void] {\n const [inner, setInner] = useState<T>(defaultValue)\n const isControlled = value !== undefined\n const current = isControlled ? value : inner\n const onChangeRef = useRef(onChange)\n onChangeRef.current = onChange\n const set = useCallback(\n (next: T) => {\n if (!isControlled) setInner(next)\n onChangeRef.current?.(next)\n },\n [isControlled]\n )\n return [current, set]\n}\n","import { useId, type ReactNode } from 'react'\nimport {\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr, prefixedTestId } from '../../chat/test-id'\nimport { useControllableState } from '../../lib/useControllableState'\n\nexport interface AgentOption {\n id: string\n label: string\n /** Small line under the label in the list (e.g. what the agent is for). */\n description?: string\n /** Avatar or mark shown before the name. */\n avatar?: ReactNode\n}\n\nexport interface AgentSelectLabels {\n /** The field label. */\n label: string\n /** The entry that means \"no specific agent\": the user's own assistant. */\n myAssistant: string\n}\n\nexport const DEFAULT_AGENT_SELECT_LABELS: AgentSelectLabels = {\n label: 'Run as',\n myAssistant: 'My assistant',\n}\n\nexport interface AgentSelectProps {\n agents: AgentOption[]\n /** Controlled agent id; `''` = my assistant. Omit to let the select hold its own state. */\n value?: string\n defaultValue?: string\n onValueChange?: (agentId: string) => void\n /** Hide the visible label (still the accessible name). */\n hideLabel?: boolean\n disabled?: boolean\n className?: string\n labels?: Partial<AgentSelectLabels>\n testId?: string\n /** Prefix of option ids (`<prefix>-<agent id>`); default `agent-select-option`. */\n optionTestId?: string\n}\n\nconst ME = '__me__'\n\n/** Pick which agent runs something: the user's own assistant (default) or one of their agents. */\nexport function AgentSelect({\n agents,\n value,\n defaultValue = '',\n onValueChange,\n hideLabel,\n disabled,\n className,\n labels,\n testId,\n optionTestId,\n}: AgentSelectProps) {\n const l = { ...DEFAULT_AGENT_SELECT_LABELS, ...labels }\n const triggerId = useId()\n const [current, setCurrent] = useControllableState(value, defaultValue, onValueChange)\n return (\n <div className={cn('flex flex-col gap-1.5', className)} data-slot=\"agent-select\">\n <Label htmlFor={triggerId} className={hideLabel ? 'sr-only' : undefined}>\n {l.label}\n </Label>\n <Select\n value={current === '' ? ME : current}\n onValueChange={(v) => setCurrent(v === ME ? '' : v)}\n disabled={disabled}\n >\n <SelectTrigger\n id={triggerId}\n data-testid={testIdOr(testId, { testId: 'agent-select' })}\n className=\"pointer-coarse:min-h-11\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem\n value={ME}\n data-testid={prefixedTestId(optionTestId, 'me', {\n testId: 'agent-select-option-me',\n })}\n >\n {l.myAssistant}\n </SelectItem>\n {agents.map((agent) => (\n <SelectItem\n key={agent.id}\n value={agent.id}\n data-testid={prefixedTestId(optionTestId, agent.id, {\n testId: `agent-select-option-${agent.id}`,\n })}\n >\n <span className=\"flex items-center gap-2\">\n {agent.avatar}\n <span>{agent.label}</span>\n {agent.description && (\n <span className=\"text-xs text-muted-foreground\">{agent.description}</span>\n )}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n}\n","import { useEffect, useMemo, useRef, useState, type FormEvent, type ReactNode } from 'react'\nimport { Loader2, Play } from 'lucide-react'\nimport { Button, Dialog, DialogContent } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { AddFilesFirst } from '../../home/AddFilesFirst'\nimport { QuickActionDialogHeader } from '../../home/QuickActionDialogHeader'\nimport { ScopePicker, type ScopeFolder, type ScopeLabel } from '../../home/ScopePicker'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AgentSelect, type AgentOption, type AgentSelectLabels } from './AgentSelect'\nimport { SchemaForm, type SchemaFormLabels } from './SchemaForm'\nimport type {\n OnWorkflowLaunch,\n WorkflowDefinition,\n WorkflowField,\n WorkflowInputs,\n WorkflowInputValue,\n WorkflowScope,\n} from './types'\nimport { buildLaunch, defaultInputs, validateInputs } from './workflow'\n\n/** The workspace's files, as the scope picker needs them. Matching stays with the host. */\nexport interface WorkflowScopeSource {\n folders: ScopeFolder[]\n unfiledCount: number\n labels: ScopeLabel[]\n totalCount: number\n /** How many files a scope selects. */\n countMatching: (scope: WorkflowScope) => number\n /**\n * The ids of the files a scope selects. A run is bound to explicit file ids, so a folder/label pick is\n * resolved here, on the client, before anything is sent.\n */\n resolveDocuments?: (scope: WorkflowScope) => string[]\n}\n\nexport interface WorkflowConfigDialogLabels {\n /** Primary button when the workflow gives no label of its own. */\n start: string\n starting: string\n /** Shown instead of the form when `requiresFiles` and the workspace has none. */\n addFilesReason: string\n agentLabel: string\n}\n\nexport const DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS: WorkflowConfigDialogLabels = {\n start: 'Start',\n starting: 'Starting…',\n addFilesReason: 'This reads your files, and there is nothing to read yet.',\n agentLabel: 'Run as',\n}\n\nexport interface WorkflowConfigDialogProps {\n workflow: WorkflowDefinition\n open: boolean\n onOpenChange: (open: boolean) => void\n onLaunch: OnWorkflowLaunch\n /** Values the form opens with, over each field's default (e.g. text typed after a slash). */\n initialInputs?: Partial<WorkflowInputs>\n /** Controlled inputs; omit to let the dialog hold them. */\n inputs?: WorkflowInputs\n onInputsChange?: (inputs: WorkflowInputs) => void\n /** Files behind `scope` fields. Without it a scope field renders through `renderScope` or not at all. */\n scopeSource?: WorkflowScopeSource\n renderScope?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** Renders a `documents` field: the host owns the file list behind the pick. */\n renderDocuments?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n renderIcon?: (key: string) => ReactNode\n /** The host's own \"Add\" control, shown when the workflow needs files and there are none. */\n addFilesAction?: ReactNode\n /** Agents the user can hand the work to. Empty/omitted hides the \"Run as\" row. */\n agents?: AgentOption[]\n agentId?: string\n onAgentChange?: (agentId: string) => void\n isLaunching?: boolean\n /** Primary button text from the current inputs and matched file count. */\n submitLabel?: (ctx: {\n workflow: WorkflowDefinition\n inputs: WorkflowInputs\n matchedCount: number | null\n }) => string | undefined\n /** Per-field placeholder derived from the inputs (e.g. a name taken from a description). */\n fieldPlaceholder?: (\n field: WorkflowField,\n inputs: WorkflowInputs,\n workflow: WorkflowDefinition\n ) => string | undefined\n /** Anything the host wants to say about the current inputs, above the footer. */\n renderNotice?: (ctx: { workflow: WorkflowDefinition; inputs: WorkflowInputs }) => ReactNode\n labels?: Partial<WorkflowConfigDialogLabels>\n formLabels?: Partial<SchemaFormLabels>\n agentLabels?: Partial<AgentSelectLabels>\n /** Dialog id; fields use `<testId>-field-<name>`. Default `workflow-dialog`. */\n testId?: string\n startTestId?: string\n className?: string\n}\n\n/**\n * One dialog for every workflow: the form comes from the workflow's declared inputs, scope fields\n * use the shared folder/label picker, and the footer says who runs it. Launching hands\n * `{workflow, inputs, scope, agentId}` to `onLaunch`; the host does the rest.\n */\nexport function WorkflowConfigDialog({\n workflow,\n open,\n onOpenChange,\n onLaunch,\n initialInputs,\n inputs: inputsProp,\n onInputsChange,\n scopeSource,\n renderScope,\n renderDocuments,\n renderIcon,\n addFilesAction,\n agents,\n agentId: agentIdProp,\n onAgentChange,\n isLaunching,\n submitLabel,\n fieldPlaceholder,\n renderNotice,\n labels,\n formLabels,\n agentLabels,\n testId,\n startTestId,\n className,\n}: WorkflowConfigDialogProps) {\n const l = { ...DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, ...labels }\n // Keyed by content: a host passing a fresh `initialInputs` object each render must not reset the form.\n const initialKey = JSON.stringify(initialInputs ?? {})\n const seedKey = JSON.stringify({ ...defaultInputs(workflow), ...JSON.parse(initialKey) })\n const seed = useMemo(() => JSON.parse(seedKey) as WorkflowInputs, [seedKey])\n const [inputs, setInputs] = useControllableState<WorkflowInputs>(inputsProp, seed, onInputsChange)\n const [agentId, setAgentId] = useControllableState<string>(\n agentIdProp,\n workflow.defaultAgentId ?? '',\n onAgentChange\n )\n\n // A fresh open starts from the seed again (uncontrolled only).\n useEffect(() => {\n if (open && inputsProp === undefined) setInputs(seed)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, seed])\n\n const setField = (name: string, value: WorkflowInputValue) =>\n setInputs({ ...inputs, [name]: value })\n\n const errors = validateInputs(workflow, inputs)\n const valid = Object.keys(errors).length === 0\n // Required-ness is conveyed by the disabled button; range problems are shown as they happen.\n const visibleErrors = Object.fromEntries(\n Object.entries(errors).filter(([, e]) => e !== 'required')\n )\n\n const scopeField = workflow.inputs.find((f) => f.type === 'scope')\n const rawScope = scopeField ? inputs[scopeField.name] : undefined\n const scopeValue: WorkflowScope =\n rawScope && typeof rawScope === 'object' ? rawScope : { folders: [], labels: [] }\n const matchedCount = scopeSource && scopeField ? scopeSource.countMatching(scopeValue) : null\n const noFiles = Boolean(workflow.requiresFiles && scopeSource && scopeSource.totalCount === 0)\n const blockedByScope =\n matchedCount !== null && matchedCount === 0 && Boolean(workflow.requiresFiles)\n\n const showAgent =\n workflow.run.kind === 'prompt' &&\n workflow.options?.agent !== false &&\n agents !== undefined &&\n agents.length > 0\n\n const launch = (values: WorkflowInputs) => {\n // A failed launch leaves the dialog open so nothing typed is lost; the host reports why.\n Promise.resolve(onLaunch(buildLaunch(workflow, values, agentId))).catch(() => {})\n }\n\n const submit = () => {\n if (!valid || noFiles || blockedByScope || isLaunching) return\n launch(inputs)\n }\n\n const fields = useMemo(\n () =>\n workflow.inputs.map((f) => {\n const placeholder = fieldPlaceholder?.(f, inputs, workflow)\n return placeholder === undefined ? f : { ...f, placeholder }\n }),\n [workflow, fieldPlaceholder, inputs]\n )\n\n const id = testIdOr(testId, { testId: 'workflow-dialog' })\n const formRef = useRef<HTMLFormElement>(null)\n // A form that opens on a text field (the prompt) puts the cursor there, so typing starts at\n // once; a form that opens on a file pick keeps the dialog's own first focus.\n const firstField = workflow.inputs.find((f) => !f.advanced)\n const focusPromptFirst = firstField?.type === 'text' || firstField?.type === 'longtext'\n const defaultScopeRender = scopeSource\n ? (_field: WorkflowField, value: WorkflowScope, onChange: (s: WorkflowScope) => void) => (\n <ScopePicker\n folders={scopeSource.folders}\n unfiledCount={scopeSource.unfiledCount}\n labels={scopeSource.labels}\n totalCount={scopeSource.totalCount}\n matchedCount={scopeSource.countMatching(value)}\n scope={value}\n onScopeChange={onChange}\n />\n )\n : undefined\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className={`max-h-[calc(100dvh-2rem)] overflow-y-auto sm:max-w-xl ${className ?? ''}`}\n data-testid={id}\n data-workflow={workflow.id}\n onOpenAutoFocus={(event) => {\n if (!focusPromptFirst || !firstField) return\n const control = formRef.current?.querySelector<HTMLElement>(\n `[data-testid=\"${id}-field-${firstField.name}\"]`\n )\n if (!control) return\n event.preventDefault()\n control.focus()\n if (control instanceof HTMLInputElement || control instanceof HTMLTextAreaElement) {\n const end = control.value.length\n control.setSelectionRange(end, end)\n }\n }}\n >\n <QuickActionDialogHeader\n icon={workflow.icon && renderIcon ? renderIcon(workflow.icon) : null}\n title={workflow.title}\n description={workflow.details ?? workflow.description}\n descriptionTestId={`${id}-description`}\n />\n <form\n ref={formRef}\n className=\"mt-2 flex flex-col gap-4\"\n onSubmit={(event: FormEvent) => {\n event.preventDefault()\n submit()\n }}\n >\n {noFiles ? (\n <AddFilesFirst\n reason={l.addFilesReason}\n action={addFilesAction}\n testId={`${id}-empty-state`}\n />\n ) : (\n <>\n <SchemaForm\n fields={fields}\n values={inputs}\n onChange={setField}\n errors={visibleErrors}\n renderScope={renderScope ?? defaultScopeRender}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n labels={formLabels}\n onEnterSubmit={submit}\n testIdPrefix={`${id}-field`}\n />\n {renderNotice?.({ workflow, inputs })}\n <div\n className=\"flex flex-col gap-3 border-t border-border pt-3 sm:flex-row sm:items-end sm:justify-between\"\n data-slot=\"workflow-footer\"\n >\n {showAgent ? (\n <AgentSelect\n agents={agents ?? []}\n value={agentId}\n onValueChange={setAgentId}\n labels={{ label: l.agentLabel, ...agentLabels }}\n testId={`${id}-agent`}\n className=\"sm:w-56\"\n />\n ) : (\n <span />\n )}\n <Button\n type=\"submit\"\n className=\"gap-1.5 px-5 pointer-coarse:min-h-11\"\n disabled={!valid || blockedByScope || isLaunching}\n data-testid={testIdOr(startTestId, { testId: 'workflow-start-button' })}\n >\n {isLaunching ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Play className=\"size-4\" />\n )}\n {isLaunching\n ? l.starting\n : (submitLabel?.({ workflow, inputs, matchedCount }) ??\n workflow.startLabel ??\n l.start)}\n </Button>\n </div>\n </>\n )}\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ScopePicker } from '../../home/ScopePicker'\nimport type { WorkflowScopeSource } from './WorkflowConfigDialog'\nimport type { WorkflowDefinition, WorkflowField, WorkflowInputs, WorkflowScope } from './types'\nimport { isWorkflowScope } from './workflow'\n\n/** The folder/label picker over the workspace's files: what a `scope` field renders by default. */\nexport function defaultScopeRenderer(\n scopeSource: WorkflowScopeSource | undefined\n):\n | ((\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode)\n | undefined {\n if (!scopeSource) return undefined\n return function renderScope(_field, value, onChange) {\n return (\n <ScopePicker\n folders={scopeSource.folders}\n unfiledCount={scopeSource.unfiledCount}\n labels={scopeSource.labels}\n totalCount={scopeSource.totalCount}\n matchedCount={scopeSource.countMatching(value)}\n scope={value}\n onScopeChange={onChange}\n />\n )\n }\n}\n\n/**\n * The inputs with every `scope` field resolved to explicit file ids (`documents`), so what is sent says\n * exactly which files a run is bound to. The folders and labels stay, for showing the pick again.\n */\nexport function resolveScopeInputs(\n workflow: Pick<WorkflowDefinition, 'inputs'>,\n inputs: WorkflowInputs,\n scopeSource: Pick<WorkflowScopeSource, 'resolveDocuments'> | undefined\n): WorkflowInputs {\n if (!scopeSource?.resolveDocuments) return inputs\n const next: WorkflowInputs = { ...inputs }\n for (const field of workflow.inputs) {\n if (field.type !== 'scope') continue\n const raw = inputs[field.name]\n const scope: WorkflowScope = isWorkflowScope(raw) ? raw : { folders: [], labels: [] }\n next[field.name] = { ...scope, documents: scopeSource.resolveDocuments(scope) }\n }\n return next\n}\n","import { useState, type ReactNode } from 'react'\nimport { StartTiles, type StartTile } from '../../home/StartTiles'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { WorkflowConfigDialog, type WorkflowConfigDialogProps } from './WorkflowConfigDialog'\nimport type { OnWorkflowLaunch, WorkflowDefinition, WorkflowInputs } from './types'\nimport { buildLaunch, defaultInputs, validateInputs } from './workflow'\n\nexport interface WorkflowLauncherProps extends Omit<\n WorkflowConfigDialogProps,\n 'workflow' | 'open' | 'onOpenChange' | 'onLaunch' | 'isLaunching' | 'initialInputs'\n> {\n workflows: WorkflowDefinition[]\n /** Which of `workflows` get a tile (a filtered or capped view); default all. */\n tileWorkflows?: WorkflowDefinition[]\n /** The host performs the launch (open a chat, scope files, send, land). */\n onLaunch: OnWorkflowLaunch\n /** Render the tile band. Off when something else (the slash menu) opens the dialog. */\n showTiles?: boolean\n caption?: string\n captionTestId?: string\n /** Tile ids: `<prefix>-<workflow id>` unless `tileTestId` returns one. */\n tileTestId?: (workflow: WorkflowDefinition) => string | undefined\n /** A reason the workflow cannot run now (greys its tile out). */\n disabledReason?: (workflow: WorkflowDefinition) => string | undefined\n /** Controlled open workflow (by id); `null` = none. Omit for uncontrolled. */\n activeId?: string | null\n onActiveIdChange?: (id: string | null) => void\n /** Inputs to seed the dialog with when `activeId` opens (slash-typed text etc.). */\n initialInputsFor?: (workflow: WorkflowDefinition) => Partial<WorkflowInputs> | undefined\n /** Extra content inside the tile band's section, after the tiles. */\n /** Plain tiles appended to the band (tier A actions that are not workflows). */\n extraTiles?: StartTile[]\n /** Test id of the tile band. */\n testId?: string\n className?: string\n children?: ReactNode\n}\n\n/**\n * The one place a workflow is launched from: a band of tiles plus the config dialog. Choosing a\n * workflow opens the dialog, which asks what it declares; only an operation with no inputs\n * launches on the click.\n * Also usable headless (`showTiles={false}`) when another surface picks the workflow.\n */\nexport function WorkflowLauncher({\n workflows,\n tileWorkflows,\n onLaunch,\n showTiles = true,\n caption,\n captionTestId,\n tileTestId,\n disabledReason,\n activeId: activeIdProp,\n onActiveIdChange,\n initialInputsFor,\n testId,\n extraTiles = [],\n className,\n children,\n renderIcon,\n ...dialog\n}: WorkflowLauncherProps) {\n const [activeId, setActiveId] = useControllableState<string | null>(\n activeIdProp,\n null,\n onActiveIdChange\n )\n const [isLaunching, setIsLaunching] = useState(false)\n const active = workflows.find((w) => w.id === activeId) ?? null\n\n const run: OnWorkflowLaunch = async (launch) => {\n setIsLaunching(true)\n try {\n await onLaunch(launch)\n setActiveId(null)\n } finally {\n setIsLaunching(false)\n }\n }\n\n const select = (workflow: WorkflowDefinition) => {\n // Only an operation with nothing to ask (tier B) starts on the click. A prompt workflow or a\n // skill is run WITH a prompt, so it always opens the form, however few inputs it declares.\n if (workflow.run.kind === 'operation' && workflow.inputs.length === 0) {\n const inputs = defaultInputs(workflow)\n if (Object.keys(validateInputs(workflow, inputs)).length === 0) {\n Promise.resolve(onLaunch(buildLaunch(workflow, inputs, undefined))).catch(() => {})\n return\n }\n }\n setActiveId(workflow.id)\n }\n\n const tiles: StartTile[] = (tileWorkflows ?? workflows).map((workflow) => {\n const reason = disabledReason?.(workflow)\n return {\n id: workflow.id,\n iconNode: workflow.icon && renderIcon ? renderIcon(workflow.icon) : undefined,\n title: workflow.title,\n description: workflow.description,\n onSelect: () => select(workflow),\n disabled: reason !== undefined,\n disabledReason: reason,\n testId: tileTestId?.(workflow) ?? `workflow-tile-${workflow.id}`,\n }\n })\n\n return (\n <div className={className} data-slot=\"workflow-launcher\">\n {showTiles && (\n <StartTiles\n items={[...tiles, ...extraTiles]}\n caption={caption}\n captionTestId={captionTestId}\n testId={testId}\n />\n )}\n {children}\n {active && (\n <WorkflowConfigDialog\n {...dialog}\n renderIcon={renderIcon}\n workflow={active}\n open\n onOpenChange={(open) => !open && setActiveId(null)}\n onLaunch={run}\n isLaunching={isLaunching}\n initialInputs={initialInputsFor?.(active)}\n />\n )}\n </div>\n )\n}\n","import type { WorkflowScope } from './types'\nimport type { WorkflowScopeSource } from './WorkflowConfigDialog'\n\nexport interface WorkflowScopeDocument {\n external_id: string\n folder?: string | null\n doctags?: Array<{ tag_ext_id: string }>\n}\nexport interface WorkflowScopeLabel {\n external_id: string\n name: string\n color?: string\n}\nconst canonical = (path?: string | null) =>\n (path ?? '')\n .split('/')\n .map((part) => part.trim())\n .filter(Boolean)\n .join('/')\n\n/** Match the same folder/label OR semantics as the document library; explicit file picks win. */\nexport function matchWorkflowScope<T extends WorkflowScopeDocument>(\n docs: T[],\n scope: WorkflowScope\n): T[] {\n if (scope.documents?.length) {\n const ids = new Set(scope.documents)\n return docs.filter((doc) => ids.has(doc.external_id))\n }\n if (!scope.folders.length && !scope.labels.length) return docs\n const folders = scope.folders.map(canonical)\n const labels = new Set(scope.labels)\n return docs.filter((doc) => {\n const folder = canonical(doc.folder)\n return (\n folders.some((path) =>\n path === '' ? folder === '' : folder === path || folder.startsWith(`${path}/`)\n ) || doc.doctags?.some((tag) => labels.has(tag.tag_ext_id))\n )\n })\n}\n\n/** Turn real workspace documents and labels into the shared workflow scope picker model. */\nexport function buildWorkflowScopeSource(\n docs: WorkflowScopeDocument[],\n labels: WorkflowScopeLabel[] = []\n): WorkflowScopeSource {\n const counts = new Map<string, number>()\n for (const doc of docs) {\n const parts = canonical(doc.folder).split('/').filter(Boolean)\n for (let i = 1; i <= parts.length; i++) {\n const path = parts.slice(0, i).join('/')\n counts.set(path, (counts.get(path) ?? 0) + 1)\n }\n }\n return {\n folders: [...counts]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([path, count]) => ({\n path,\n count,\n label: path.split('/').at(-1)!,\n depth: path.split('/').length - 1,\n })),\n unfiledCount: docs.filter((doc) => !canonical(doc.folder)).length,\n labels: labels.map((label) => ({\n id: label.external_id,\n name: label.name,\n color: label.color ?? 'currentColor',\n count: docs.filter((doc) => doc.doctags?.some((tag) => tag.tag_ext_id === label.external_id))\n .length,\n })),\n totalCount: docs.length,\n countMatching: (scope) => matchWorkflowScope(docs, scope).length,\n resolveDocuments: (scope) => matchWorkflowScope(docs, scope).map((doc) => doc.external_id),\n }\n}\n","import type { ReactNode } from 'react'\nimport { Button } from '@arbidocs/react/ui'\nimport { DocumentPicker, type PickerDocument } from '../../settings/DocumentPicker'\nimport type { WorkflowField, WorkflowScope } from './types'\n\nexport interface WorkflowDocumentsFieldProps {\n field: WorkflowField\n value: WorkflowScope\n onChange: (value: WorkflowScope) => void\n documents: PickerDocument[]\n addFilesAction?: ReactNode\n}\n\n/** An explicit workspace-file input, with selection limits and removable choices. */\nexport function WorkflowDocumentsField({\n field,\n value,\n onChange,\n documents,\n addFilesAction,\n}: WorkflowDocumentsFieldProps) {\n const ids = value.documents ?? []\n const max = field.max ?? 1\n const set = (documents: string[]) => onChange({ ...value, documents })\n return (\n <div data-testid={`workflow-documents-${field.name}`} className=\"space-y-2\">\n <DocumentPicker\n groups={[{ id: 'workspace', docs: documents }]}\n value={ids[0] ?? ''}\n selected={documents.find((doc) => doc.id === ids[0])}\n selectedIds={max > 1 ? ids : undefined}\n onValueChange={(id) =>\n set(\n ids.includes(id) ? ids.filter((selected) => selected !== id) : [...ids, id].slice(-max)\n )\n }\n />\n {ids.length > 0 && (\n <div className=\"flex flex-wrap gap-1\">\n {ids.map((id) => (\n <Button\n key={id}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => set(ids.filter((selected) => selected !== id))}\n aria-label={`Remove ${documents.find((doc) => doc.id === id)?.title ?? id}`}\n >\n {documents.find((doc) => doc.id === id)?.title ?? id} ×\n </Button>\n ))}\n </div>\n )}\n {addFilesAction}\n </div>\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { ClipboardList, Copy, Eye, MessageSquare, Pencil, Trash2 } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatCount } from '../../lib/format'\n\nexport interface AgentCardLabels {\n running: string\n /** Pulse indicator aria-label. */\n runningIndicator: string\n /** Chip text; receives the running count. */\n runningCount: (count: number) => string\n /** Chip text; receives the task count (0 -> none yet). */\n taskCount: (count: number) => string\n goalMet: (met: number, total: number) => string\n watch: string\n message: string\n assignTask: string\n edit: string\n copyAddress: string\n deleteAgent: (name: string) => string\n}\n\nexport const DEFAULT_AGENT_CARD_LABELS: AgentCardLabels = {\n running: 'Running',\n runningIndicator: 'Running',\n runningCount: (count) => `${count} running`,\n taskCount: (count) =>\n count > 0 ? formatCount(count, { one: 'task', other: 'tasks' }) : 'no tasks yet',\n goalMet: (met, total) => `✓ ${met}/${total} met`,\n watch: 'Watch',\n message: 'Message',\n assignTask: 'Assign task',\n edit: 'Edit',\n copyAddress: 'Copy address',\n deleteAgent: (name) => `Delete agent ${name}`,\n}\n\nexport interface AgentCardTestIds {\n root: string\n watch: string\n message: string\n assignTask: string\n edit: string\n copyAddress: string\n delete: string\n}\n\nexport interface AgentCardProps {\n /** Display name; also the key in the test ids (`agent-card-{name}`, `agent-edit-{name}`...). */\n name: string\n /** The agent's avatar (the app supplies its entity avatar). */\n avatar: ReactNode\n /** Tasks currently running for this agent; shows a pulse + chip when > 0. */\n runningCount: number\n /** All tasks assigned to this agent. */\n taskCount: number\n /** Extra content under the chips (the app shows what the agent can access). */\n details?: ReactNode\n /** Criteria progress of the agent's most recent goal task. */\n goalProgress?: { met: number; total: number } | null\n /** When set, a Watch action opens the live run. */\n onWatch?: () => void\n /** Each action is optional: the button is omitted when its handler is absent. */\n onMessage?: () => void\n onAssignTask?: () => void\n onEdit?: () => void\n /** When set, a ghost \"Copy address\" action copies the agent's address (it is not shown raw). */\n onCopyAddress?: () => void\n onDelete?: () => void\n /**\n * Destination of the agent; the name becomes a real link. `onSelect` fires on a plain click\n * (modified clicks go to the browser).\n */\n href?: string\n onSelect?: () => void\n labels?: Partial<AgentCardLabels>\n /** Overrides for the default `agent-card-{name}` / `agent-watch-run-{name}` ... ids. */\n testIds?: Partial<AgentCardTestIds>\n testId?: string\n className?: string\n}\n\nconst ACTION = 'h-9 gap-1.5 px-2 text-sm pointer-coarse:h-11'\n\n/** One agent in the gallery: avatar, live task chips, and Watch / Assign task / Edit / Delete. */\nexport function AgentCard({\n name,\n avatar,\n runningCount,\n taskCount,\n goalProgress,\n details,\n onWatch,\n onMessage,\n onAssignTask,\n onEdit,\n onCopyAddress,\n onDelete,\n href,\n onSelect,\n labels,\n testIds,\n testId,\n className,\n ...rest\n}: AgentCardProps & Omit<HTMLAttributes<HTMLDivElement>, keyof AgentCardProps>) {\n const l = { ...DEFAULT_AGENT_CARD_LABELS, ...labels }\n return (\n <div\n {...rest}\n className={cn('rounded-lg bg-muted p-4', className)}\n data-testid={testIdOr(testId ?? testIds?.root, { testId: `agent-card-${name}` })}\n data-slot=\"agent-card\"\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"relative shrink-0\">\n {avatar}\n {runningCount > 0 && (\n <span\n className=\"absolute -right-0.5 -top-0.5 size-2.5 rounded-full bg-ai-ink\"\n role=\"img\"\n aria-label={l.runningIndicator}\n >\n <span className=\"absolute inset-0 animate-ping rounded-full bg-ai-ink opacity-60\" />\n </span>\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n {href ? (\n <ActionLink\n href={href}\n onSelect={onSelect}\n className=\"block max-w-full truncate text-left font-medium hover:underline\"\n >\n {name}\n </ActionLink>\n ) : (\n <p className=\"truncate font-medium\">{name}</p>\n )}\n <div className=\"mt-1.5 flex flex-wrap gap-1 text-xs text-muted-foreground\">\n {runningCount > 0 ? (\n <span className=\"rounded-full bg-ai-soft px-2 py-px text-ai-ink\">\n {l.runningCount(runningCount)}\n </span>\n ) : (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.taskCount(taskCount)}\n </span>\n )}\n {goalProgress && (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.goalMet(goalProgress.met, goalProgress.total)}\n </span>\n )}\n </div>\n {details}\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-center gap-1 pt-1\">\n {onMessage && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onMessage}\n data-testid={testIdOr(testIds?.message, { testId: `agent-message-${name}` })}\n >\n <MessageSquare size={14} /> {l.message}\n </Button>\n )}\n {onWatch && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-ai-ink hover:text-ai-ink')}\n onClick={onWatch}\n data-testid={testIdOr(testIds?.watch, { testId: `agent-watch-run-${name}` })}\n >\n <Eye size={14} /> {l.watch}\n </Button>\n )}\n {onAssignTask && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onAssignTask}\n data-testid={testIdOr(testIds?.assignTask, { testId: `agent-assign-task-${name}` })}\n >\n <ClipboardList size={14} /> {l.assignTask}\n </Button>\n )}\n {onEdit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onEdit}\n data-testid={testIdOr(testIds?.edit, { testId: `agent-edit-${name}` })}\n >\n <Pencil size={14} /> {l.edit}\n </Button>\n )}\n {onCopyAddress && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-muted-foreground')}\n onClick={onCopyAddress}\n data-testid={testIdOr(testIds?.copyAddress, { testId: `agent-copy-address-${name}` })}\n >\n <Copy size={14} /> {l.copyAddress}\n </Button>\n )}\n {onDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'ml-auto text-muted-foreground hover:text-red-text')}\n onClick={onDelete}\n aria-label={l.deleteAgent(name)}\n data-testid={testIdOr(testIds?.delete, { testId: `agent-delete-${name}` })}\n >\n <Trash2 size={14} />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Plus, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { EmptyState } from '../../components/EmptyState'\n\nexport interface AgentGalleryLabels {\n /** Intro line next to the New agent button. */\n description: string\n emptyTitle: string\n emptyDescription: string\n emptyCta: string\n newAgent: string\n}\n\nexport const DEFAULT_AGENT_GALLERY_LABELS: AgentGalleryLabels = {\n description: 'Personas that work for you, on demand.',\n emptyTitle: 'Create your first agent',\n emptyDescription:\n 'Describe a persona, pick its tools, generate an avatar, then hand it work from an agent card and watch it converge.',\n emptyCta: 'Create an agent',\n newAgent: 'New agent',\n}\n\nexport interface AgentGalleryTestIds {\n emptyCta: string\n createButton: string\n gallery: string\n}\n\nexport interface AgentGalleryProps {\n /** Number of agents; 0 shows the first-run empty state instead of the grid. */\n count: number\n onCreate: () => void\n /** The AgentCard children. */\n children?: ReactNode\n /** Intro line next to the New agent button (wins over `labels.description`). */\n description?: string\n labels?: Partial<AgentGalleryLabels>\n testIds?: Partial<AgentGalleryTestIds>\n className?: string\n}\n\n/** Agents grid with an intro row + New agent action, or a first-run empty state. */\nexport function AgentGallery({\n count,\n onCreate,\n children,\n description,\n labels,\n testIds,\n className,\n}: AgentGalleryProps) {\n const l = { ...DEFAULT_AGENT_GALLERY_LABELS, ...labels }\n if (count === 0) {\n return (\n <div className={cn('mt-8', className)}>\n <EmptyState\n className=\"rounded-lg border-0 bg-muted\"\n icon={Bot}\n title={l.emptyTitle}\n description={l.emptyDescription}\n action={\n <Button\n onClick={onCreate}\n className=\"gap-1.5\"\n data-testid={testIdOr(testIds?.emptyCta, { testId: 'agent-empty-cta' })}\n >\n <Sparkles size={16} /> {l.emptyCta}\n </Button>\n }\n />\n </div>\n )\n }\n return (\n <div className={className}>\n <div className=\"mb-4 flex flex-wrap items-center justify-between gap-x-3 gap-y-2\">\n <p className=\"min-w-0 text-sm text-muted-foreground\">{description ?? l.description}</p>\n <Button\n size=\"sm\"\n onClick={onCreate}\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n data-testid={testIdOr(testIds?.createButton, { testId: 'agent-create-button' })}\n >\n <Plus size={16} /> {l.newAgent}\n </Button>\n </div>\n <div\n className=\"grid grid-cols-[repeat(auto-fill,minmax(16rem,1fr))] gap-4\"\n data-testid={testIdOr(testIds?.gallery, { testId: 'agent-gallery' })}\n data-slot=\"agent-gallery\"\n >\n {children}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Loader2, Wand2, type LucideIcon } from 'lucide-react'\nimport { Button, Label, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface CapabilityTileProps {\n label: string\n description: string\n icon: LucideIcon\n selected: boolean\n onToggle: () => void\n testId?: string\n className?: string\n}\n\n/** Toggle tile for one agent capability (tool). Selected = accent tone, `aria-pressed`. */\nexport function CapabilityTile({\n label,\n description,\n icon: Icon,\n selected,\n onToggle,\n testId,\n className,\n}: CapabilityTileProps) {\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n aria-pressed={selected}\n data-testid={testId}\n data-slot=\"capability-tile\"\n className={cn(\n 'flex flex-col items-start gap-1 rounded-lg p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected\n ? 'bg-accent text-accent-foreground ring-1 ring-inset ring-primary/30'\n : 'bg-muted hover:bg-accent/60',\n className\n )}\n >\n <Icon size={16} className={selected ? 'text-accent-foreground' : 'text-muted-foreground'} />\n <span className=\"text-xs font-medium leading-tight\">{label}</span>\n <span className=\"text-xs leading-tight text-muted-foreground\">{description}</span>\n </button>\n )\n}\n\n/** Responsive grid wrapper for CapabilityTile children. */\nexport function CapabilityGrid({\n children,\n testId,\n className,\n}: {\n children: ReactNode\n testId?: string\n className?: string\n}) {\n return (\n <div\n className={cn('grid grid-cols-2 gap-2 sm:grid-cols-4', className)}\n data-testid={testIdOr(testId, { testId: 'agent-capabilities' })}\n >\n {children}\n </div>\n )\n}\n\nexport interface AgentTypeOption<T extends string> {\n value: T\n title: string\n description: string\n}\n\nexport interface AgentTypeSelectorLabels {\n agentType: string\n}\n\nexport const DEFAULT_AGENT_TYPE_SELECTOR_LABELS: AgentTypeSelectorLabels = {\n agentType: 'Agent type',\n}\n\nexport interface AgentTypeSelectorProps<T extends string> {\n value: T\n onChange: (value: T) => void\n options: AgentTypeOption<T>[]\n /** Group label (wins over `labels.agentType`). */\n label?: string\n labels?: Partial<AgentTypeSelectorLabels>\n /** Root id; options use `agent-type-{value}` unless `optionTestId` is given. */\n testId?: string\n optionTestId?: (value: T) => string\n}\n\n/** Radio-style choice cards (e.g. built-in vs external agent). Test ids: `agent-type-{value}`. */\nexport function AgentTypeSelector<T extends string>({\n value,\n onChange,\n options,\n label,\n labels,\n testId,\n optionTestId,\n}: AgentTypeSelectorProps<T>) {\n const l = { ...DEFAULT_AGENT_TYPE_SELECTOR_LABELS, ...labels }\n return (\n <div className=\"space-y-1.5\" data-testid={testIdOr(testId, { testId: 'agent-type-selector' })}>\n <Label>{label ?? l.agentType}</Label>\n <div className=\"grid grid-cols-2 gap-2\">\n {options.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => onChange(opt.value)}\n aria-pressed={value === opt.value}\n data-testid={testIdOr(optionTestId?.(opt.value), { testId: `agent-type-${opt.value}` })}\n className={cn(\n 'rounded-lg p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n value === opt.value\n ? 'bg-accent text-accent-foreground ring-1 ring-inset ring-primary/30'\n : 'bg-muted hover:bg-accent/60'\n )}\n >\n <div className=\"text-sm font-medium\">{opt.title}</div>\n <div className=\"mt-0.5 text-xs text-muted-foreground\">{opt.description}</div>\n </button>\n ))}\n </div>\n </div>\n )\n}\n\nexport interface AgentAvatarFieldLabels {\n painting: string\n generate: string\n regenerate: string\n}\n\nexport const DEFAULT_AGENT_AVATAR_FIELD_LABELS: AgentAvatarFieldLabels = {\n painting: 'Painting…',\n generate: 'Generate avatar',\n regenerate: 'Regenerate',\n}\n\nexport interface AgentAvatarFieldTestIds {\n preview: string\n generate: string\n}\n\nexport interface AgentAvatarFieldProps {\n /** Image URL of the current avatar. */\n picture?: string | null\n isBusy: boolean\n /** Generate is disabled until the agent can exist (e.g. a valid name). */\n canGenerate: boolean\n onGenerate: () => void\n labels?: Partial<AgentAvatarFieldLabels>\n testIds?: Partial<AgentAvatarFieldTestIds>\n}\n\n/** Avatar preview with a deliberate Generate / Regenerate action. */\nexport function AgentAvatarField({\n picture,\n isBusy,\n canGenerate,\n onGenerate,\n labels,\n testIds,\n}: AgentAvatarFieldProps) {\n const l = { ...DEFAULT_AGENT_AVATAR_FIELD_LABELS, ...labels }\n return (\n <div className=\"flex flex-col items-center gap-2\" data-slot=\"agent-avatar-field\">\n <div\n className=\"flex size-24 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted\"\n data-testid={testIdOr(testIds?.preview, { testId: 'agent-avatar-preview' })}\n >\n {isBusy ? (\n <div className=\"flex flex-col items-center gap-1 text-ai-ink\">\n <Loader2 className=\"size-7 animate-spin\" />\n <span className=\"text-xs\">{l.painting}</span>\n </div>\n ) : picture ? (\n <img src={picture} alt=\"\" className=\"size-full object-cover\" />\n ) : (\n <Bot className=\"size-10 text-ai-ink/70\" />\n )}\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 gap-1 px-2 text-xs pointer-coarse:h-11\"\n disabled={isBusy || !canGenerate}\n onClick={onGenerate}\n data-testid={testIdOr(testIds?.generate, { testId: 'agent-avatar-generate' })}\n >\n <Wand2 size={12} /> {picture ? l.regenerate : l.generate}\n </Button>\n </div>\n )\n}\n","import { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport { Loader2, Sparkles, X, type LucideIcon } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { FoldSection } from '../../home/FoldSection'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AgentTypeSelector, CapabilityGrid, CapabilityTile } from './AgentEditorParts'\nimport type { AgentTypeOption } from './AgentEditorParts'\n\n/** One thing an agent can be allowed to do (a tool toggle). */\nexport interface AgentCapability {\n key: string\n label: string\n description: string\n icon: LucideIcon\n}\n\n/** A starting point: a plain description plus the capabilities that go with it. */\nexport interface AgentTemplate {\n id: string\n title: string\n description: string\n /** Becomes the agent's persona text. */\n persona: string\n /** Capability keys switched on. */\n capabilities: string[]\n}\n\nexport interface AgentCreatorValues {\n name: string\n persona: string\n capabilities: Record<string, boolean>\n modelName: string\n type: string\n /** Workspaces the agent may read (ids). Empty = none: isolation is the default. */\n workspaceIds: string[]\n}\n\nexport interface AgentCreatorLabels {\n titleNew: string\n titleEdit: (name: string) => string\n descriptionNew: string\n descriptionEdit: string\n describe: string\n describePlaceholder: string\n describeHint: string\n startFrom: string\n summaryHeading: string\n /** \"Can search the web, run code.\" */\n summaryCan: (list: string) => string\n /** \"Cannot generate images.\" */\n summaryCannot: (list: string) => string\n summaryNone: string\n summaryModel: (model: string) => string\n summaryModelAuto: string\n /** \"Reads workspaces A and B.\" */\n summaryWorkspaces: (list: string) => string\n summaryNoWorkspaces: string\n /** \"Will be called research-assistant.\" */\n summaryName: (name: string) => string\n workspaceAccess: string\n workspaceAccessHint: string\n workspaceAlready: string\n /** Accessible name of the revoke button next to an already-granted workspace. */\n revokeWorkspace: (workspaceName: string) => string\n noWorkspacesToGrant: string\n name: string\n nameHint: string\n nameInvalid: string\n advanced: string\n capabilities: string\n /** One line under the Tools heading. */\n toolsHint: string\n /** Button in the summary that opens Advanced. */\n summaryChange: string\n model: string\n modelAuto: string\n cancel: string\n create: string\n save: string\n saving: string\n}\n\nexport const DEFAULT_AGENT_CREATOR_LABELS: AgentCreatorLabels = {\n titleNew: 'New agent',\n titleEdit: (name) => `Edit ${name}`,\n descriptionNew: 'Say what this agent is for. Everything else follows from that.',\n descriptionEdit: 'Change what this agent is for, or fine-tune it under Advanced.',\n describe: 'What should it do?',\n describePlaceholder: 'e.g. Reads new files each morning and tells me what changed, with sources.',\n describeHint: 'This becomes the agent’s persona and shapes every answer.',\n startFrom: 'Or start from',\n summaryHeading: 'What it can do (its tools)',\n summaryCan: (list) => `Can ${list}.`,\n summaryCannot: (list) => `Cannot ${list}.`,\n summaryNone: 'It can read your files and answer. Nothing else is switched on yet.',\n summaryModel: (model) => `Uses ${model}.`,\n summaryModelAuto: 'Uses the default model.',\n summaryWorkspaces: (list) => `Can read ${list}.`,\n summaryNoWorkspaces: 'Cannot read any workspace yet. Give it access under Advanced.',\n summaryName: (name) => `Will be called ${name}.`,\n workspaceAccess: 'Workspace access',\n workspaceAccessHint:\n 'Each workspace stays separate. The agent can only read the ones you tick here.',\n workspaceAlready: 'Already has access',\n revokeWorkspace: (name) => `Remove access to ${name}`,\n noWorkspacesToGrant: 'You have no workspaces yet.',\n name: 'Name',\n nameHint: 'Letters, digits, - and _ only; must start with a letter or digit.',\n nameInvalid: 'Letters, digits, - and _ only; must start with a letter or digit.',\n advanced: 'Advanced',\n capabilities: 'Tools',\n toolsHint:\n 'Tools are switches on this agent: what it may do on its own, such as search the web or run code. Change them any time.',\n summaryChange: 'Change tools',\n model: 'Model',\n modelAuto: 'Automatic',\n cancel: 'Cancel',\n create: 'Create agent',\n save: 'Save changes',\n saving: 'Saving…',\n}\n\nconst NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/\nconst FILLER = new Set([\n 'a',\n 'an',\n 'the',\n 'who',\n 'that',\n 'which',\n 'to',\n 'for',\n 'and',\n 'of',\n 'i',\n 'my',\n])\n\n/** A valid agent name from the description: its first few meaningful words, dashed. */\nexport function deriveAgentName(description: string): string {\n const words = description\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, ' ')\n .split(/\\s+/)\n .filter((w) => w && !FILLER.has(w))\n .slice(0, 3)\n return words.join('-').slice(0, 64)\n}\n\nexport const isValidAgentName = (name: string): boolean => NAME_RE.test(name) && name.length <= 64\n\nconst joinList = (items: string[]): string =>\n items.length <= 2\n ? items.join(' and ')\n : `${items.slice(0, -1).join(', ')} and ${items[items.length - 1]}`\n\n/** The plain-language \"can / cannot\" sentence for a capability selection. Pure; labels are data. */\nexport function summarizeCapabilities(\n capabilities: AgentCapability[],\n enabled: Record<string, boolean>,\n modelName: string,\n labels: Pick<\n AgentCreatorLabels,\n 'summaryCan' | 'summaryCannot' | 'summaryNone' | 'summaryModel' | 'summaryModelAuto'\n > = DEFAULT_AGENT_CREATOR_LABELS\n): string[] {\n const on = capabilities.filter((c) => enabled[c.key]).map((c) => c.label.toLowerCase())\n const off = capabilities.filter((c) => !enabled[c.key]).map((c) => c.label.toLowerCase())\n const lines: string[] = []\n if (on.length === 0) lines.push(labels.summaryNone)\n else {\n lines.push(labels.summaryCan(joinList(on)))\n if (off.length > 0) lines.push(labels.summaryCannot(joinList(off)))\n }\n lines.push(modelName ? labels.summaryModel(modelName) : labels.summaryModelAuto)\n return lines\n}\n\n/** The full plain-language summary: abilities, model, workspace access and the agent's name. */\nexport function summarizeAgent(\n capabilities: AgentCapability[],\n values: Pick<AgentCreatorValues, 'capabilities' | 'modelName' | 'workspaceIds' | 'name'>,\n workspaces: Array<{ id: string; name: string }>,\n labels: AgentCreatorLabels = DEFAULT_AGENT_CREATOR_LABELS\n): string[] {\n const lines = summarizeCapabilities(capabilities, values.capabilities, values.modelName, labels)\n const names = workspaces.filter((w) => values.workspaceIds.includes(w.id)).map((w) => w.name)\n lines.push(\n names.length > 0 ? labels.summaryWorkspaces(joinList(names)) : labels.summaryNoWorkspaces\n )\n if (values.name) lines.push(labels.summaryName(values.name))\n return lines\n}\n\nexport interface AgentCreatorProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n isEdit?: boolean\n /** Name shown in the edit title. */\n agentName?: string\n capabilities: AgentCapability[]\n templates?: AgentTemplate[]\n models?: string[]\n /** The user's workspaces, for the explicit access list. */\n workspaces?: Array<{ id: string; name: string }>\n /**\n * Workspaces the agent can already read: shown ticked and fixed. Without `onRevokeWorkspace`\n * they cannot be undone here; with it each gets a remove button.\n */\n grantedWorkspaceIds?: string[]\n /** Take back a granted workspace (the host revokes, then refreshes `grantedWorkspaceIds`). */\n onRevokeWorkspace?: (workspaceId: string) => void\n /** The workspace whose revoke is in flight; its button is disabled. */\n revokingWorkspaceId?: string\n /** One-click avatar (or anything that sits beside the name). */\n avatar?: ReactNode | ((values: AgentCreatorValues) => ReactNode)\n types?: AgentTypeOption<string>[]\n /** Controlled values; omit to let the dialog hold them (seeded by `initialValues`). */\n values?: AgentCreatorValues\n initialValues?: Partial<AgentCreatorValues>\n onValuesChange?: (values: AgentCreatorValues) => void\n /** Avatar field, skills/tool pickers or anything else, folded under Advanced. */\n advanced?: ReactNode | ((values: AgentCreatorValues) => ReactNode)\n isSaving?: boolean\n onSubmit: (values: AgentCreatorValues) => void\n labels?: Partial<AgentCreatorLabels>\n testId?: string\n}\n\nconst BLANK: AgentCreatorValues = {\n name: '',\n persona: '',\n capabilities: {},\n modelName: '',\n type: 'builtin',\n workspaceIds: [],\n}\n\n/**\n * Create or edit an agent from a plain description. Templates pre-fill the description and the\n * capabilities, a live sentence says what the agent can and cannot do, and the knobs (capability\n * toggles, model, type, avatar, pickers) are folded under Advanced.\n */\nexport function AgentCreator({\n open,\n onOpenChange,\n isEdit = false,\n agentName,\n capabilities,\n templates = [],\n models = [],\n workspaces = [],\n grantedWorkspaceIds = [],\n onRevokeWorkspace,\n revokingWorkspaceId,\n avatar,\n types,\n values: valuesProp,\n initialValues,\n onValuesChange,\n advanced,\n isSaving,\n onSubmit,\n labels,\n testId,\n}: AgentCreatorProps) {\n const l = { ...DEFAULT_AGENT_CREATOR_LABELS, ...labels }\n const seed = useMemo<AgentCreatorValues>(\n () => ({ ...BLANK, ...initialValues }),\n // Seeded once per open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [open]\n )\n const [values, setValues] = useControllableState<AgentCreatorValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [advancedOpen, setAdvancedOpen] = useState(false)\n // Until the user edits the name it follows the description.\n const [nameTouched, setNameTouched] = useState(false)\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setAdvancedOpen(false)\n setNameTouched(Boolean(seed.name))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const id = testIdOr(testId, { testId: 'agent-creator' })\n const name = values.name\n const nameValid = isValidAgentName(name)\n const canSubmit = (isEdit || nameValid) && !isSaving\n\n const patch = (next: Partial<AgentCreatorValues>) => setValues({ ...values, ...next })\n\n const setPersona = (persona: string) =>\n patch({ persona, ...(!isEdit && !nameTouched ? { name: deriveAgentName(persona) } : {}) })\n\n const applyTemplate = (t: AgentTemplate) =>\n patch({\n persona: t.persona,\n capabilities: Object.fromEntries(\n capabilities.map((c) => [c.key, t.capabilities.includes(c.key)])\n ),\n ...(!isEdit && !nameTouched ? { name: deriveAgentName(t.persona) } : {}),\n })\n\n const summary = summarizeAgent(capabilities, values, workspaces, l)\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"max-h-[calc(100dvh-2rem)] overflow-y-auto sm:max-w-xl\"\n data-testid={id}\n >\n <DialogHeader>\n <DialogTitle>{isEdit ? l.titleEdit(agentName ?? name) : l.titleNew}</DialogTitle>\n <DialogDescription>{isEdit ? l.descriptionEdit : l.descriptionNew}</DialogDescription>\n </DialogHeader>\n\n <form\n className=\"flex flex-col gap-5\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) onSubmit(values)\n }}\n >\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"agent-creator-describe\">{l.describe}</Label>\n <Textarea\n id=\"agent-creator-describe\"\n data-testid={`${id}-describe`}\n value={values.persona}\n placeholder={l.describePlaceholder}\n rows={4}\n autoFocus\n onChange={(e) => setPersona(e.target.value)}\n />\n <p className=\"text-xs text-muted-foreground\">{l.describeHint}</p>\n </div>\n\n {!isEdit && templates.length > 0 && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-templates`}>\n <Label>{l.startFrom}</Label>\n <div className=\"flex flex-wrap gap-2\">\n {templates.map((t) => (\n <button\n key={t.id}\n type=\"button\"\n title={t.description}\n onClick={() => applyTemplate(t)}\n data-testid={`${id}-template-${t.id}`}\n className={cn(\n 'rounded-full border border-border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11 [&:hover]:bg-accent'\n )}\n >\n {t.title}\n </button>\n ))}\n </div>\n </div>\n )}\n\n <div\n className=\"rounded-lg bg-muted p-3 text-sm\"\n data-testid={`${id}-summary`}\n aria-live=\"polite\"\n >\n <div className=\"mb-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <Sparkles className=\"size-4 text-ai-ink\" aria-hidden=\"true\" />\n {l.summaryHeading}\n </div>\n {summary.map((line) => (\n <p key={line}>{line}</p>\n ))}\n <button\n type=\"button\"\n onClick={() => setAdvancedOpen(true)}\n data-testid={`${id}-summary-change`}\n className=\"mt-1 text-xs font-medium text-primary underline-offset-2 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11\"\n >\n {l.summaryChange}\n </button>\n </div>\n\n <div className=\"flex items-end gap-4\">\n {typeof avatar === 'function' ? avatar(values) : avatar}\n {!isEdit && (\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <Label htmlFor=\"agent-creator-name\">{l.name}</Label>\n <Input\n id=\"agent-creator-name\"\n data-testid={`${id}-name`}\n value={name}\n placeholder=\"research-assistant\"\n aria-invalid={name !== '' && !nameValid ? true : undefined}\n onChange={(e) => {\n setNameTouched(true)\n patch({ name: e.target.value })\n }}\n />\n {name !== '' && !nameValid && (\n <p className=\"text-xs text-destructive\">{l.nameInvalid}</p>\n )}\n </div>\n )}\n </div>\n\n <FoldSection\n label={l.advanced}\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n testId={`${id}-advanced-toggle`}\n >\n <div className=\"flex flex-col gap-4\">\n {!isEdit && types && types.length > 0 && (\n <AgentTypeSelector\n value={values.type}\n onChange={(type) => patch({ type })}\n options={types}\n testId={`${id}-type`}\n optionTestId={(value) => `${id}-type-${value}`}\n />\n )}\n <div className=\"flex flex-col gap-2\">\n <Label>{l.capabilities}</Label>\n <p className=\"text-xs text-muted-foreground\">{l.toolsHint}</p>\n <CapabilityGrid testId={`${id}-capabilities`}>\n {capabilities.map((c) => (\n <CapabilityTile\n key={c.key}\n label={c.label}\n description={c.description}\n icon={c.icon}\n selected={Boolean(values.capabilities[c.key])}\n onToggle={() =>\n patch({\n capabilities: {\n ...values.capabilities,\n [c.key]: !values.capabilities[c.key],\n },\n })\n }\n testId={`${id}-cap-${c.key}`}\n />\n ))}\n </CapabilityGrid>\n </div>\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-workspaces`}>\n <Label>{l.workspaceAccess}</Label>\n <p className=\"text-xs text-muted-foreground\">{l.workspaceAccessHint}</p>\n {workspaces.length === 0 ? (\n <p className=\"text-xs text-muted-foreground\">{l.noWorkspacesToGrant}</p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {workspaces.map((w) => {\n const already = grantedWorkspaceIds.includes(w.id)\n const on = already || values.workspaceIds.includes(w.id)\n return (\n <span key={w.id} className=\"inline-flex items-center gap-1\">\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={on}\n disabled={already}\n title={already ? l.workspaceAlready : undefined}\n data-testid={`${id}-workspace-${w.id}`}\n onClick={() =>\n patch({\n workspaceIds: on\n ? values.workspaceIds.filter((x) => x !== w.id)\n : [...values.workspaceIds, w.id],\n })\n }\n className={cn(\n 'rounded-md border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-60 pointer-coarse:min-h-11',\n on\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border [&:hover:not(:disabled)]:bg-accent'\n )}\n >\n {w.name}\n </button>\n {already && onRevokeWorkspace && (\n <button\n type=\"button\"\n aria-label={l.revokeWorkspace(w.name)}\n title={l.revokeWorkspace(w.name)}\n disabled={revokingWorkspaceId === w.id}\n data-testid={`${id}-workspace-${w.id}-revoke`}\n onClick={() => onRevokeWorkspace(w.id)}\n className=\"flex size-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50 pointer-coarse:size-11\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n )}\n </span>\n )\n })}\n </div>\n )}\n </div>\n {models.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <Label>{l.model}</Label>\n <Select\n value={values.modelName || '__auto__'}\n onValueChange={(v) => patch({ modelName: v === '__auto__' ? '' : v })}\n >\n <SelectTrigger data-testid={`${id}-model`} className=\"pointer-coarse:min-h-11\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__auto__\">{l.modelAuto}</SelectItem>\n {models.map((m) => (\n <SelectItem key={m} value={m}>\n {m}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n {typeof advanced === 'function' ? advanced(values) : advanced}\n </div>\n </FoldSection>\n\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border pt-3\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isSaving ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Sparkles className=\"size-4\" />\n )}\n {isSaving ? l.saving : isEdit ? l.save : l.create}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import type { AgentCreatorValues } from './AgentCreator'\n\n/**\n * The saved persona tells the agent its own name: \"You are Reviewer, an AI agent. <description>\".\n * {@link stripPersonaPreamble} takes the preamble off again so the editor shows only what the user wrote.\n */\nexport function composePersona(name: string, description: string): string {\n const body = description.trim()\n const preamble = `You are ${name}, an AI agent.`\n return body ? `${preamble} ${body}` : preamble\n}\n\n/** The description the user wrote, without the preamble {@link composePersona} adds. */\nexport function stripPersonaPreamble(persona: string): string {\n return persona.replace(/^You are .+?, an AI agent\\.\\s*/, '').trim()\n}\n\n/**\n * The `Agents` config section an {@link AgentCreatorValues} form stands for: the persona, the model\n * when one is picked, and one boolean per capability key. Pass it as `sections.Agents` to\n * `useSaveAgentConfig` from `@arbidocs/react`.\n */\nexport function agentCreatorToConfigSection(\n values: Pick<AgentCreatorValues, 'name' | 'persona' | 'modelName' | 'capabilities'>,\n capabilityKeys: string[]\n): Record<string, unknown> {\n return {\n PERSONA: composePersona(values.name, values.persona),\n ...(values.modelName ? { AGENT_MODEL_NAME: values.modelName } : {}),\n ...Object.fromEntries(capabilityKeys.map((k) => [k, !!values.capabilities[k]])),\n }\n}\n\n/** The form values an existing agent's `Agents` config section opens as (edit mode). */\nexport function agentConfigSectionToValues(\n section: Record<string, unknown> | undefined,\n capabilityKeys: string[]\n): Pick<AgentCreatorValues, 'persona' | 'modelName' | 'capabilities'> {\n const s = section ?? {}\n return {\n persona: stripPersonaPreamble(String(s.PERSONA ?? '')),\n modelName: String(s.AGENT_MODEL_NAME ?? ''),\n capabilities: Object.fromEntries(capabilityKeys.map((k) => [k, Boolean(s[k])])),\n }\n}\n","import type { MouseEvent, ReactNode } from 'react'\nimport { Globe } from 'lucide-react'\nimport { Button, Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\n\n/** Small tonal pill showing a non-markdown skill type. */\nexport function SkillTypeBadge({ type, className }: { type: string; className?: string }) {\n return (\n <span\n className={cn(\n 'shrink-0 rounded bg-background px-1.5 py-0.5 text-xs uppercase tracking-wide text-muted-foreground',\n className\n )}\n data-slot=\"skill-type-badge\"\n >\n {type}\n </span>\n )\n}\n\nexport interface SkillGlobalBadgeLabels {\n global: string\n globalTitle: string\n}\n\nexport const DEFAULT_SKILL_GLOBAL_BADGE_LABELS: SkillGlobalBadgeLabels = {\n global: 'Global',\n globalTitle: 'Shared with everyone in the marketplace',\n}\n\n/** \"Global\" marketplace pill. */\nexport function SkillGlobalBadge({\n className,\n labels,\n}: {\n className?: string\n labels?: Partial<SkillGlobalBadgeLabels>\n}) {\n const l = { ...DEFAULT_SKILL_GLOBAL_BADGE_LABELS, ...labels }\n return (\n <span\n className={cn(\n 'inline-flex shrink-0 items-center gap-1 rounded bg-accent px-1.5 py-0.5 text-xs uppercase tracking-wide text-accent-foreground',\n className\n )}\n title={l.globalTitle}\n data-slot=\"skill-global-badge\"\n >\n <Globe className=\"size-3\" />\n {l.global}\n </span>\n )\n}\n\nexport interface SkillActionButtonProps {\n label: string\n /** Tooltip text; defaults to `label`. */\n tooltip?: string\n onClick: (e: MouseEvent<HTMLButtonElement>) => void\n children: ReactNode\n testId?: string\n}\n\n/**\n * Icon action inside a clickable skill row. Stops propagation so the row's invoke handler does\n * not fire, and meets the 44px touch target on coarse pointers.\n */\nexport function SkillActionButton({\n label,\n tooltip,\n onClick,\n children,\n testId,\n}: SkillActionButtonProps) {\n return (\n <Tooltip>\n <TooltipTrigger asChild onFocusCapture={(e) => e.stopPropagation()}>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0 pointer-coarse:size-11\"\n onClick={(e) => {\n e.stopPropagation()\n onClick(e)\n }}\n aria-label={label}\n data-testid={testId}\n >\n {children}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{tooltip ?? label}</p>\n </TooltipContent>\n </Tooltip>\n )\n}\n\n/** Activate a role=\"button\" row with Enter/Space, ignoring keys that bubble from inner controls. */\nexport function activateOnKey(handler: () => void) {\n return (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.target !== e.currentTarget) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handler()\n }\n }\n}\n","import type { HTMLAttributes, MouseEvent, ReactNode } from 'react'\nimport { Download, Eye, Globe, Lock, Pencil } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n SkillActionButton,\n SkillGlobalBadge,\n SkillTypeBadge,\n activateOnKey,\n type SkillGlobalBadgeLabels,\n} from './SkillParts'\n\nexport interface SkillCardLabels extends SkillGlobalBadgeLabels {\n preview: string\n edit: string\n export: string\n makePrivate: string\n makePrivateTooltip: string\n publish: string\n}\n\nexport const DEFAULT_SKILL_CARD_LABELS: SkillCardLabels = {\n global: 'Global',\n globalTitle: 'Shared with everyone in the marketplace',\n preview: 'Preview skill',\n edit: 'Edit skill',\n export: 'Export skill',\n makePrivate: 'Make private',\n makePrivateTooltip: 'Make private (unpublish)',\n publish: 'Publish to marketplace',\n}\n\nexport interface SkillCardTestIds {\n root: string\n preview: string\n edit: string\n export: string\n toggleVisibility: string\n}\n\nexport interface SkillCardProps {\n name: string\n description: string\n /** Skill type; a small badge is shown when not `markdown`. */\n type?: string\n /** `global` shows a badge and drives the publish toggle. */\n visibility?: 'mine' | 'global'\n /** Only owners see the publish toggle. */\n isOwner?: boolean\n /** Leading icon (the app supplies its skill entity icon). */\n icon?: ReactNode\n /** Invoke the skill (row click / Enter / Space). */\n onClick: () => void\n onPreview: (e: MouseEvent) => void\n onEdit: (e: MouseEvent) => void\n onExport: (e: MouseEvent) => void\n /** Publish / unpublish. Owner-only; omit to hide. */\n onToggleVisibility?: (e: MouseEvent) => void\n /** Destination of the skill; the name becomes a real link (modified clicks go to the browser). */\n href?: string\n labels?: Partial<SkillCardLabels>\n testId?: string\n testIds?: Partial<SkillCardTestIds>\n className?: string\n}\n\n/**\n * Horizontal skill row: icon + `/name` + badges + description, with preview / edit / export /\n * publish actions. All actions are always visible (nothing is hover-only).\n */\nexport function SkillCard({\n name,\n description,\n type,\n visibility = 'mine',\n isOwner = true,\n icon,\n onClick,\n onPreview,\n onEdit,\n onExport,\n onToggleVisibility,\n href,\n labels,\n testId,\n testIds,\n className,\n ...rest\n}: SkillCardProps & Omit<HTMLAttributes<HTMLDivElement>, keyof SkillCardProps | 'onClick'>) {\n const l = { ...DEFAULT_SKILL_CARD_LABELS, ...labels }\n const isGlobal = visibility === 'global'\n return (\n <div\n {...rest}\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'flex w-full cursor-pointer flex-wrap items-center gap-x-3 gap-y-1 rounded-lg bg-muted px-4 py-3 transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className\n )}\n onClick={onClick}\n onKeyDown={activateOnKey(onClick)}\n data-skill-name={name}\n data-testid={testIdOr(testId ?? testIds?.root, { testId: 'skill-card' })}\n data-slot=\"skill-card\"\n >\n {icon && <span className=\"shrink-0 text-primary [&>svg]:size-5\">{icon}</span>}\n {href ? (\n // The link owns plain + modified clicks; stop the row handler from double-firing.\n <span onClick={(e) => e.stopPropagation()}>\n <ActionLink\n href={href}\n onSelect={onClick}\n className=\"whitespace-nowrap font-mono text-sm font-medium\"\n >\n /{name}\n </ActionLink>\n </span>\n ) : (\n <span className=\"whitespace-nowrap font-mono text-sm font-medium\">/{name}</span>\n )}\n {type && type !== 'markdown' && <SkillTypeBadge type={type} />}\n {isGlobal && <SkillGlobalBadge labels={l} />}\n <span className=\"min-w-0 text-sm text-muted-foreground max-sm:order-last max-sm:w-full max-sm:line-clamp-2 sm:flex-1 sm:truncate\">\n {description}\n </span>\n <span className=\"ml-auto flex shrink-0 items-center gap-1\" data-slot=\"skill-card-actions\">\n <SkillActionButton\n label={l.preview}\n onClick={onPreview}\n testId={testIdOr(testIds?.preview, { testId: 'preview-skill-button' })}\n >\n <Eye className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n <SkillActionButton\n label={l.edit}\n onClick={onEdit}\n testId={testIdOr(testIds?.edit, { testId: 'edit-skill-button' })}\n >\n <Pencil className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n <SkillActionButton\n label={l.export}\n onClick={onExport}\n testId={testIdOr(testIds?.export, { testId: 'export-skill-button' })}\n >\n <Download className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n {isOwner && onToggleVisibility && (\n <SkillActionButton\n label={isGlobal ? l.makePrivate : l.publish}\n tooltip={isGlobal ? l.makePrivateTooltip : l.publish}\n onClick={onToggleVisibility}\n testId={testIdOr(testIds?.toggleVisibility, {\n testId: 'toggle-skill-visibility-button',\n })}\n >\n {isGlobal ? (\n <Lock className=\"size-4 text-muted-foreground\" />\n ) : (\n <Globe className=\"size-4 text-primary\" />\n )}\n </SkillActionButton>\n )}\n </span>\n </div>\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { Eye, Globe, Lock, Pencil, Trash2 } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n SkillActionButton,\n SkillGlobalBadge,\n SkillTypeBadge,\n activateOnKey,\n type SkillGlobalBadgeLabels,\n} from './SkillParts'\n\nexport interface SkillRowLabels extends SkillGlobalBadgeLabels {\n preview: string\n edit: string\n makePrivate: string\n publish: string\n delete: string\n /** Row tooltip; receives the skill name. */\n insertTitle: (name: string) => string\n}\n\nexport const DEFAULT_SKILL_ROW_LABELS: SkillRowLabels = {\n global: 'Global',\n globalTitle: 'Shared with everyone in the marketplace',\n preview: 'Preview',\n edit: 'Edit',\n makePrivate: 'Make private',\n publish: 'Publish to marketplace',\n delete: 'Delete',\n insertTitle: (name) => `Insert /${name} into the chat`,\n}\n\nexport interface SkillRowProps {\n name: string\n description?: string\n type?: string\n isGlobal?: boolean\n icon?: ReactNode\n /** Invoke the skill (inserts `/name` into the chat). */\n onInvoke: () => void\n onPreview: () => void\n /** Owner-only actions: omit to hide. */\n onEdit?: () => void\n onTogglePublish?: () => void\n onDelete?: () => void\n /** Destination of the skill; the name becomes a real link (modified clicks go to the browser). */\n href?: string\n labels?: Partial<SkillRowLabels>\n /** Overrides the default `skills-panel-row-{name}` id. */\n testId?: string\n className?: string\n}\n\n/** Compact two-line skill row for side panels. Actions are always visible. */\nexport function SkillRow({\n name,\n description,\n type,\n isGlobal = false,\n icon,\n onInvoke,\n onPreview,\n onEdit,\n onTogglePublish,\n onDelete,\n href,\n labels,\n testId,\n className,\n ...rest\n}: SkillRowProps & Omit<HTMLAttributes<HTMLDivElement>, keyof SkillRowProps | 'onClick'>) {\n const l = { ...DEFAULT_SKILL_ROW_LABELS, ...labels }\n return (\n <div\n {...rest}\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'flex cursor-pointer items-center gap-2 px-4 py-2 hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n className\n )}\n onClick={onInvoke}\n onKeyDown={activateOnKey(onInvoke)}\n data-testid={testIdOr(testId, { testId: `skills-panel-row-${name}` })}\n data-slot=\"skill-row\"\n title={l.insertTitle(name)}\n >\n {icon && <span className=\"shrink-0 text-primary [&>svg]:size-4\">{icon}</span>}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-1.5\">\n {href ? (\n // The link owns plain + modified clicks; stop the row handler from double-firing.\n <span className=\"min-w-0\" onClick={(e) => e.stopPropagation()}>\n <ActionLink href={href} onSelect={onInvoke} className=\"truncate font-mono text-sm\">\n /{name}\n </ActionLink>\n </span>\n ) : (\n <span className=\"truncate font-mono text-sm\">/{name}</span>\n )}\n {type && type !== 'markdown' && <SkillTypeBadge type={type} />}\n {isGlobal && <SkillGlobalBadge labels={l} />}\n </div>\n {description && <div className=\"truncate text-xs text-muted-foreground\">{description}</div>}\n </div>\n <div className=\"flex shrink-0 items-center gap-0.5\">\n <SkillActionButton label={l.preview} onClick={() => onPreview()}>\n <Eye className=\"size-4\" />\n </SkillActionButton>\n {onEdit && (\n <SkillActionButton label={l.edit} onClick={() => onEdit()}>\n <Pencil className=\"size-4\" />\n </SkillActionButton>\n )}\n {onTogglePublish && (\n <SkillActionButton\n label={isGlobal ? l.makePrivate : l.publish}\n onClick={() => onTogglePublish()}\n >\n {isGlobal ? <Lock className=\"size-4\" /> : <Globe className=\"size-4 text-primary\" />}\n </SkillActionButton>\n )}\n {onDelete && (\n <SkillActionButton label={l.delete} onClick={() => onDelete()}>\n <Trash2 className=\"size-4 text-destructive\" />\n </SkillActionButton>\n )}\n </div>\n </div>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { Wand2 } from 'lucide-react'\nimport { Button, Input, Label, Textarea } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface SkillGenerateFormLabels {\n title: string\n hint: string\n placeholder: string\n generate: string\n writeManually: string\n}\n\nexport const DEFAULT_SKILL_GENERATE_FORM_LABELS: SkillGenerateFormLabels = {\n title: 'Generate with AI',\n hint: 'Describe what the skill should do. The assistant drafts it in chat, then you can edit it here.',\n placeholder: 'e.g. Summarize a contract into key obligations, dates, and parties',\n generate: 'Generate with AI',\n writeManually: '…or write it manually',\n}\n\nexport interface SkillGenerateFormTestIds {\n description: string\n generate: string\n writeManually: string\n}\n\nexport interface SkillGenerateFormProps {\n /** Describe what the skill should do; the app routes it to the agent. */\n onGenerate: (description: string) => void\n /** Escape hatch to the blank editor. */\n onManual: () => void\n /** Icon on the generate button. */\n icon?: ReactNode\n labels?: Partial<SkillGenerateFormLabels>\n testIds?: Partial<SkillGenerateFormTestIds>\n}\n\n/** AI-first skill creation: describe it, or write it manually. */\nexport function SkillGenerateForm({\n onGenerate,\n onManual,\n icon,\n labels,\n testIds,\n}: SkillGenerateFormProps) {\n const l = { ...DEFAULT_SKILL_GENERATE_FORM_LABELS, ...labels }\n const [desc, setDesc] = useState('')\n return (\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4\" data-slot=\"skill-generate-form\">\n <div className=\"rounded-lg bg-muted p-4\">\n <div className=\"mb-1 flex items-center gap-2\">\n <Wand2 className=\"size-4 text-primary\" />\n <span className=\"text-sm font-medium\">{l.title}</span>\n </div>\n <p className=\"mb-3 text-xs text-muted-foreground\">{l.hint}</p>\n <Textarea\n value={desc}\n onChange={(e) => setDesc(e.target.value)}\n rows={4}\n placeholder={l.placeholder}\n data-testid={testIdOr(testIds?.description, { testId: 'skills-panel-ai-desc' })}\n />\n <div className=\"mt-3 flex justify-end\">\n <Button\n size=\"sm\"\n disabled={!desc.trim()}\n onClick={() => onGenerate(desc.trim())}\n data-testid={testIdOr(testIds?.generate, { testId: 'skills-panel-ai-generate' })}\n >\n {icon && <span className=\"mr-1 [&>svg]:size-4\">{icon}</span>}\n {l.generate}\n </Button>\n </div>\n </div>\n <button\n type=\"button\"\n className=\"self-start text-sm text-muted-foreground underline-offset-2 hover:text-foreground hover:underline pointer-coarse:min-h-11\"\n onClick={onManual}\n data-testid={testIdOr(testIds?.writeManually, { testId: 'skills-panel-write-manually' })}\n >\n {l.writeManually}\n </button>\n </div>\n )\n}\n\nexport interface SkillEditFormLabels {\n name: string\n namePlaceholder: string\n /** Receives the typed name (empty when nothing is typed yet). */\n invokedAs: (name: string) => ReactNode\n description: string\n descriptionPlaceholder: string\n instructions: string\n cancel: string\n saving: string\n saveChanges: string\n create: string\n}\n\nexport const DEFAULT_SKILL_EDIT_FORM_LABELS: SkillEditFormLabels = {\n name: 'Name',\n namePlaceholder: 'contract-summary',\n invokedAs: (name) => (\n <>\n Invoked as <span className=\"font-mono\">/{name || 'skill-name'}</span>\n </>\n ),\n description: 'Description',\n descriptionPlaceholder: 'What it does and when to use it',\n instructions: 'Instructions',\n cancel: 'Cancel',\n saving: 'Saving…',\n saveChanges: 'Save changes',\n create: 'Create skill',\n}\n\nexport interface SkillEditFormTestIds {\n name: string\n description: string\n save: string\n}\n\nexport interface SkillEditFormProps {\n name: string\n onNameChange: (name: string) => void\n /** Existing skills cannot be renamed. */\n isNameLocked?: boolean\n nameError?: string | null\n description: string\n onDescriptionChange: (description: string) => void\n /** The instructions editor (the app supplies its markdown editor). */\n editor: ReactNode\n isSaving?: boolean\n isEditing: boolean\n onSave: () => void\n onCancel: () => void\n labels?: Partial<SkillEditFormLabels>\n testIds?: Partial<SkillEditFormTestIds>\n}\n\nconst FIELD_LABEL = 'text-xs font-semibold uppercase tracking-wide text-muted-foreground'\n\n/** Skill editor chrome: name + description + editor slot + Cancel / Save footer. */\nexport function SkillEditForm({\n name,\n onNameChange,\n isNameLocked,\n nameError,\n description,\n onDescriptionChange,\n editor,\n isSaving,\n isEditing,\n onSave,\n onCancel,\n labels,\n testIds,\n}: SkillEditFormProps) {\n const l = { ...DEFAULT_SKILL_EDIT_FORM_LABELS, ...labels }\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-slot=\"skill-edit-form\">\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto p-4\">\n <div>\n <Label htmlFor=\"sp-name\" className={FIELD_LABEL}>\n {l.name}\n </Label>\n <Input\n id=\"sp-name\"\n value={name}\n disabled={isNameLocked}\n placeholder={l.namePlaceholder}\n onChange={(e) => onNameChange(e.target.value)}\n className=\"mt-1\"\n data-testid={testIdOr(testIds?.name, { testId: 'skills-panel-edit-name' })}\n />\n <p className=\"mt-1 text-xs text-muted-foreground\">{l.invokedAs(name)}</p>\n {nameError && <p className=\"mt-1 text-xs text-destructive\">{nameError}</p>}\n </div>\n <div>\n <Label htmlFor=\"sp-desc\" className={FIELD_LABEL}>\n {l.description}\n </Label>\n <Input\n id=\"sp-desc\"\n value={description}\n placeholder={l.descriptionPlaceholder}\n onChange={(e) => onDescriptionChange(e.target.value)}\n className=\"mt-1\"\n data-testid={testIdOr(testIds?.description, { testId: 'skills-panel-edit-desc' })}\n />\n </div>\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <Label className={`${FIELD_LABEL} mb-1`}>{l.instructions}</Label>\n <div className=\"min-h-[240px] flex-1 overflow-hidden rounded-md border border-border\">\n {editor}\n </div>\n </div>\n </div>\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border px-4 py-3\">\n <Button variant=\"outline\" size=\"sm\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n onClick={onSave}\n disabled={isSaving}\n data-testid={testIdOr(testIds?.save, { testId: 'skills-panel-edit-save' })}\n >\n {isSaving ? l.saving : isEditing ? l.saveChanges : l.create}\n </Button>\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { LayoutGrid, List } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { activateOnKey } from './SkillParts'\n\n/* ------------------------------ filter chips ------------------------------ */\n\nexport interface SkillFilterOption {\n id: string\n label: string\n /** How many skills this filter would show. */\n count?: number\n}\n\nexport interface SkillFilterChipsProps {\n options: SkillFilterOption[]\n value: string\n onChange: (id: string) => void\n /** Accessible name of the group. */\n label: string\n /** Chip ids are `<prefix>-<option id>`. */\n testIdPrefix?: string\n className?: string\n}\n\n/** A single-choice row of filter chips (a radio group): 44px targets on touch, wraps on phones. */\nexport function SkillFilterChips({\n options,\n value,\n onChange,\n label,\n testIdPrefix = 'skills-filter',\n className,\n}: SkillFilterChipsProps) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={label}\n className={cn('flex flex-wrap gap-2', className)}\n data-slot=\"skill-filter-chips\"\n >\n {options.map((option) => {\n const selected = option.id === value\n return (\n <button\n key={option.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n onClick={() => onChange(option.id)}\n data-testid={`${testIdPrefix}-${option.id}`}\n className={cn(\n 'inline-flex min-h-8 items-center gap-1.5 rounded-full border px-3 text-sm transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected\n ? 'border-primary bg-primary/10 text-foreground'\n : 'border-border bg-background text-muted-foreground [&:hover]:bg-muted'\n )}\n >\n {option.label}\n {option.count !== undefined && (\n <span className=\"text-xs text-muted-foreground\">{option.count}</span>\n )}\n </button>\n )\n })}\n </div>\n )\n}\n\n/* ------------------------------- view toggle ------------------------------ */\n\nexport type SkillBrowserView = 'gallery' | 'list'\n\nexport interface SkillViewToggleLabels {\n group: string\n gallery: string\n list: string\n}\n\nexport const DEFAULT_SKILL_VIEW_TOGGLE_LABELS: SkillViewToggleLabels = {\n group: 'View',\n gallery: 'Gallery',\n list: 'List',\n}\n\nexport interface SkillViewToggleProps {\n value: SkillBrowserView\n onChange: (view: SkillBrowserView) => void\n labels?: Partial<SkillViewToggleLabels>\n testId?: string\n}\n\n/** Gallery / list switch. */\nexport function SkillViewToggle({ value, onChange, labels, testId }: SkillViewToggleProps) {\n const l = { ...DEFAULT_SKILL_VIEW_TOGGLE_LABELS, ...labels }\n const item = (view: SkillBrowserView, label: string, icon: ReactNode) => (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={value === view}\n aria-label={label}\n title={label}\n onClick={() => onChange(view)}\n data-testid={`${testId ?? 'skills-view-toggle'}-${view}`}\n className={cn(\n 'flex size-8 items-center justify-center rounded-md pointer-coarse:size-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n value === view ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground'\n )}\n >\n {icon}\n </button>\n )\n return (\n <div\n role=\"radiogroup\"\n aria-label={l.group}\n className=\"inline-flex shrink-0 gap-0.5 rounded-lg bg-muted p-0.5\"\n data-testid={testId ?? 'skills-view-toggle'}\n >\n {item('gallery', l.gallery, <LayoutGrid className=\"size-4\" />)}\n {item('list', l.list, <List className=\"size-4\" />)}\n </div>\n )\n}\n\n/* --------------------------------- tile ----------------------------------- */\n\nexport interface SkillTileProps {\n name: string\n description: string\n /** Where it comes from: \"Built in\", \"Yours\", \"Shared\". */\n sourceLabel: string\n /** Shown as a small pill when it is not plain instructions. */\n type?: string\n icon?: ReactNode\n layout: SkillBrowserView\n selected?: boolean\n onSelect: () => void\n testId?: string\n}\n\n/** One skill in the gallery (a card) or the list (a row). Selecting it opens its detail. */\nexport function SkillTile({\n name,\n description,\n sourceLabel,\n type,\n icon,\n layout,\n selected,\n onSelect,\n testId,\n}: SkillTileProps) {\n const isRow = layout === 'list'\n return (\n <div\n role=\"button\"\n tabIndex={0}\n aria-pressed={selected}\n onClick={onSelect}\n onKeyDown={activateOnKey(onSelect)}\n data-testid={testId ?? `skill-tile-${name}`}\n data-skill-name={name}\n data-slot=\"skill-tile\"\n className={cn(\n 'flex cursor-pointer rounded-lg border p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isRow ? 'items-center gap-3' : 'h-full flex-col gap-2',\n selected ? 'border-primary bg-primary/5' : 'border-transparent bg-muted [&:hover]:bg-accent'\n )}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n {icon && <span className=\"shrink-0 text-ai-ink [&>svg]:size-5\">{icon}</span>}\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">{name}</span>\n </div>\n <p\n className={cn(\n 'min-w-0 text-sm text-muted-foreground',\n isRow ? 'flex-1 truncate max-sm:hidden' : 'line-clamp-3'\n )}\n >\n {description}\n </p>\n <div className={cn('flex shrink-0 items-center gap-1.5', isRow && 'ml-auto')}>\n {type && type !== 'markdown' && (\n <span className=\"rounded bg-background px-1.5 py-0.5 text-xs uppercase tracking-wide text-muted-foreground\">\n {type}\n </span>\n )}\n <span className=\"rounded bg-background px-1.5 py-0.5 text-xs text-muted-foreground\">\n {sourceLabel}\n </span>\n </div>\n </div>\n )\n}\n\n/* -------------------------------- detail ---------------------------------- */\n\nexport interface SkillDetailProps {\n title: string\n sourceLabel: string\n description: string\n icon?: ReactNode\n /** A line under the title (\"Your copy is used instead of the original\"). */\n notice?: ReactNode\n /** Sections: the form it asks for, the instructions. */\n children?: ReactNode\n /** The action buttons, as a toolbar. */\n actions?: ReactNode\n testId?: string\n}\n\n/** The detail pane of one skill: a header, sections and a sticky action bar. */\nexport function SkillDetail({\n title,\n sourceLabel,\n description,\n icon,\n notice,\n children,\n actions,\n testId,\n}: SkillDetailProps) {\n return (\n <section\n className=\"flex min-h-0 flex-1 flex-col\"\n data-testid={testId ?? 'skill-detail'}\n data-slot=\"skill-detail\"\n aria-label={title}\n >\n <div className=\"min-h-0 flex-1 space-y-4 overflow-y-auto p-4\">\n <header className=\"space-y-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n {icon && <span className=\"text-ai-ink [&>svg]:size-5\">{icon}</span>}\n <h3 className=\"text-base font-semibold text-foreground\">{title}</h3>\n <span className=\"rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground\">\n {sourceLabel}\n </span>\n </div>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n {notice && <p className=\"text-sm text-foreground\">{notice}</p>}\n </header>\n {children}\n </div>\n {actions && (\n <div\n className=\"flex flex-wrap gap-2 border-t border-border bg-background p-3\"\n data-slot=\"skill-detail-actions\"\n >\n {actions}\n </div>\n )}\n </section>\n )\n}\n\n/** A titled block inside the detail pane. */\nexport function SkillDetailSection({\n title,\n children,\n testId,\n}: {\n title: string\n children: ReactNode\n testId?: string\n}) {\n return (\n <div className=\"space-y-1.5\" data-testid={testId}>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {title}\n </h4>\n {children}\n </div>\n )\n}\n","import { ListChecks, Loader2, Plus, Sparkles, Trash2 } from 'lucide-react'\nimport { Badge, Button, Label, Slider, Textarea } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskPlanCriterionView {\n id: string\n text: string\n}\n\n/** Reviewable definition-of-done for a goal task. Extra fields on the caller's type are preserved. */\nexport interface TaskPlanView {\n goal: string\n criteria: TaskPlanCriterionView[]\n max_passes: number\n documents: string[]\n}\n\n/** Fixed strings of the goal-plan editor. */\nexport interface TaskPlanLabels {\n emptyTitle: string\n emptyBody: string\n drafting: string\n generate: string\n needWorkspace: string\n needObjective: string\n goalTask: string\n /** \"scoped to {workspace}\" prefix. */\n scopedTo: string\n redraft: string\n removePlan: string\n goal: string\n goalPlaceholder: string\n checklist: string\n /** e.g. \"3 criteria\". */\n criteriaCount: (count: number) => string\n add: string\n noCriteria: string\n criterionPlaceholder: string\n removeCriterion: (n: number) => string\n retryBudget: string\n /** e.g. \"up to 3 passes\". */\n passes: (count: number) => string\n passesHelp: string\n workingDocuments: string\n workingDocumentsHelp: string\n}\n\nexport const DEFAULT_TASK_PLAN_LABELS: TaskPlanLabels = {\n emptyTitle: 'Draft a plan to review',\n emptyBody:\n 'The assistant writes a short checklist of what its work must cover. You can edit it, and it checks its own draft against it before handing it to you.',\n drafting: 'Drafting plan…',\n generate: 'Draft a plan',\n needWorkspace: 'Open a workspace to plan: the checklist is encrypted under its key.',\n needObjective: 'Say what the assistant should do first: the plan is drafted from it.',\n goalTask: 'Drafted for your review',\n scopedTo: 'for',\n redraft: 'Redraft',\n removePlan: 'Remove plan',\n goal: 'Objective',\n goalPlaceholder: 'What should the finished work achieve?',\n checklist: 'The draft must',\n criteriaCount: (count) => `${count} ${count === 1 ? 'criterion' : 'criteria'}`,\n add: 'Add',\n noCriteria: 'Nothing yet. Add at least one thing the draft must cover.',\n criterionPlaceholder: 'Something specific you can check…',\n removeCriterion: (n) => `Remove item ${n}`,\n retryBudget: 'Revision rounds',\n passes: (count) => `up to ${count} ${count === 1 ? 'round' : 'rounds'}`,\n passesHelp: 'How many times the assistant may revise its own draft before it hands it over.',\n workingDocuments: 'Documents it will use',\n workingDocumentsHelp: 'The plan limits the assistant to these documents.',\n}\n\nexport interface TaskPlanTestIds {\n generate: string\n editor: string\n regenerate: string\n remove: string\n goal: string\n addCriterion: string\n criteria: string\n passes: string\n documents: string\n /** Per criterion index (default `task-plan-criterion-{idx}`). */\n criterion: (idx: number) => string\n /** Per criterion index (default `task-plan-remove-criterion-{idx}`). */\n removeCriterionButton: (idx: number) => string\n}\n\nexport interface TaskPlanProps<P extends TaskPlanView> {\n /** The current plan, or null when the task has no plan yet. */\n plan: P | null\n /** Called with the edited plan, or null when the plan is removed. */\n onChange: (plan: P | null) => void\n /** Draft a plan from the objective. */\n onGenerate: () => void\n isGenerating: boolean\n /** The active workspace the plan is scoped to (null: none open, so generating is disabled). */\n workspaceName: string | null\n /** The objective the planner drafts from (the task's prompt). */\n objective: string\n /** Document id → file name, so the plan shows names instead of ids. */\n documentNames?: Record<string, string>\n testIds?: Partial<TaskPlanTestIds>\n labels?: Partial<TaskPlanLabels>\n}\n\n/** Stable, collision-free criterion ids (c1, c2, ...) by high-water mark, independent of order. */\nexport function nextCriterionId(criteria: TaskPlanCriterionView[]): string {\n const max = criteria.reduce((m, c) => {\n const n = Number(/^c(\\d+)$/.exec(c.id)?.[1] ?? 0)\n return Number.isFinite(n) && n > m ? n : m\n }, 0)\n return `c${max + 1}`\n}\n\n/**\n * Goal-plan editor: empty-state pitch with a single Generate action, or (with a plan) goal,\n * acceptance checklist, retry budget and working documents.\n */\nexport function TaskPlan<P extends TaskPlanView>({\n plan,\n onChange,\n onGenerate,\n isGenerating,\n workspaceName,\n objective,\n documentNames,\n testIds,\n labels,\n}: TaskPlanProps<P>) {\n const l = { ...DEFAULT_TASK_PLAN_LABELS, ...labels }\n const canGenerate = !!workspaceName && !!objective.trim() && !isGenerating\n\n if (!plan) {\n return (\n <div\n className=\"flex flex-col gap-3 rounded-lg bg-muted p-4 sm:flex-row sm:items-center sm:justify-between\"\n data-slot=\"task-plan-empty\"\n >\n <div className=\"flex min-w-0 items-start gap-3\">\n <ListChecks className=\"mt-0.5 size-5 shrink-0 text-muted-foreground\" aria-hidden />\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-medium\">{l.emptyTitle}</p>\n <p className=\"max-w-md text-xs text-muted-foreground\">{l.emptyBody}</p>\n {!workspaceName ? (\n <p className=\"text-xs text-muted-foreground\">{l.needWorkspace}</p>\n ) : !objective.trim() ? (\n <p className=\"text-xs text-muted-foreground\">{l.needObjective}</p>\n ) : null}\n </div>\n </div>\n <Button\n type=\"button\"\n onClick={onGenerate}\n disabled={!canGenerate}\n className=\"shrink-0\"\n data-testid={testIdOr(testIds?.generate, { testId: 'task-plan-generate' })}\n >\n {isGenerating ? (\n <>\n <Loader2 className=\"size-4 animate-spin\" />\n {l.drafting}\n </>\n ) : (\n <>\n <Sparkles className=\"size-4\" />\n {l.generate}\n </>\n )}\n </Button>\n </div>\n )\n }\n\n const patch = (fields: Partial<TaskPlanView>) => onChange({ ...plan, ...fields })\n const setCriterion = (idx: number, text: string) =>\n patch({ criteria: plan.criteria.map((c, i) => (i === idx ? { ...c, text } : c)) })\n const addCriterion = () =>\n patch({ criteria: [...plan.criteria, { id: nextCriterionId(plan.criteria), text: '' }] })\n const removeCriterion = (idx: number) =>\n patch({ criteria: plan.criteria.filter((_, i) => i !== idx) })\n\n const count = plan.criteria.length\n return (\n <div\n className=\"space-y-5\"\n data-testid={testIdOr(testIds?.editor, { testId: 'task-plan-editor' })}\n data-slot=\"task-plan\"\n >\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge variant=\"default\" className=\"gap-1\">\n <ListChecks className=\"size-3.5\" />\n {l.goalTask}\n </Badge>\n {workspaceName && (\n <span className=\"truncate text-xs text-muted-foreground\">\n {l.scopedTo} <span className=\"font-medium\">{workspaceName}</span>\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onGenerate}\n disabled={!canGenerate}\n data-testid={testIdOr(testIds?.regenerate, { testId: 'task-plan-regenerate' })}\n >\n {isGenerating ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Sparkles className=\"size-4\" />\n )}\n {l.redraft}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(null)}\n data-testid={testIdOr(testIds?.remove, { testId: 'task-plan-remove' })}\n >\n {l.removePlan}\n </Button>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-plan-goal\">{l.goal}</Label>\n <Textarea\n id=\"task-plan-goal\"\n value={plan.goal}\n onChange={(e) => patch({ goal: e.target.value })}\n placeholder={l.goalPlaceholder}\n rows={2}\n data-testid={testIdOr(testIds?.goal, { testId: 'task-plan-goal' })}\n />\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label>\n {l.checklist}\n <span className=\"ml-1.5 text-xs font-normal text-muted-foreground\">\n {l.criteriaCount(count)}\n </span>\n </Label>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={addCriterion}\n data-testid={testIdOr(testIds?.addCriterion, { testId: 'task-plan-add-criterion' })}\n >\n <Plus className=\"size-4\" />\n {l.add}\n </Button>\n </div>\n\n {count === 0 ? (\n <p className=\"py-2 text-sm text-muted-foreground\">{l.noCriteria}</p>\n ) : (\n <ul\n className=\"space-y-2\"\n data-testid={testIdOr(testIds?.criteria, { testId: 'task-plan-criteria' })}\n >\n {plan.criteria.map((c, idx) => (\n <li key={c.id} className=\"flex items-start gap-2\">\n <span className=\"mt-1.5 flex size-6 shrink-0 select-none items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground\">\n {idx + 1}\n </span>\n <Textarea\n value={c.text}\n rows={2}\n onChange={(e) => setCriterion(idx, e.target.value)}\n placeholder={l.criterionPlaceholder}\n className=\"field-sizing-content min-h-[3.25rem] resize-none\"\n data-testid={testIdOr(testIds?.criterion?.(idx), {\n testId: `task-plan-criterion-${idx}`,\n })}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"mt-0.5 shrink-0 text-muted-foreground hover:text-destructive pointer-coarse:size-11\"\n onClick={() => removeCriterion(idx)}\n aria-label={l.removeCriterion(idx + 1)}\n data-testid={testIdOr(testIds?.removeCriterionButton?.(idx), {\n testId: `task-plan-remove-criterion-${idx}`,\n })}\n >\n <Trash2 className=\"size-4\" />\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-plan-passes\">\n {l.retryBudget}\n <span className=\"ml-1.5 text-xs font-normal text-muted-foreground\">\n {l.passes(plan.max_passes)}\n </span>\n </Label>\n <Slider\n id=\"task-plan-passes\"\n min={1}\n max={8}\n step={1}\n value={[plan.max_passes]}\n onValueChange={([v]) => patch({ max_passes: v })}\n data-testid={testIdOr(testIds?.passes, { testId: 'task-plan-passes' })}\n />\n <p className=\"text-xs text-muted-foreground\">{l.passesHelp}</p>\n </div>\n\n {plan.documents.length > 0 && (\n <div className=\"space-y-2\">\n <Label>{l.workingDocuments}</Label>\n <div\n className=\"flex flex-wrap gap-1.5\"\n data-testid={testIdOr(testIds?.documents, { testId: 'task-plan-documents' })}\n >\n {plan.documents.map((d) => (\n <Badge key={d} variant=\"secondary\" className=\"text-xs\" title={d}>\n {documentNames?.[d] ?? d}\n </Badge>\n ))}\n </div>\n <p className=\"text-xs text-muted-foreground\">{l.workingDocumentsHelp}</p>\n </div>\n )}\n </div>\n )\n}\n","/** Compact elapsed time: 123ms, 5s, 2m 30s, 1h 15m. */\nexport function formatElapsed(startTime: number, endTime?: number): string {\n const elapsedMs = (endTime || Date.now()) - startTime\n if (elapsedMs < 1000) return `${Math.round(elapsedMs)}ms`\n if (elapsedMs < 60000) return `${Math.round(elapsedMs / 1000)}s`\n if (elapsedMs < 3600000) {\n const minutes = Math.floor(elapsedMs / 60000)\n const seconds = Math.round((elapsedMs % 60000) / 1000)\n return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`\n }\n const hours = Math.floor(elapsedMs / 3600000)\n const minutes = Math.round((elapsedMs % 3600000) / 60000)\n return minutes > 0 ? `${hours}h ${minutes}m` : `${hours}h`\n}\n","import { useEffect, useState, type ReactNode } from 'react'\nimport { AlertTriangle, Check, FileX, Loader2, SkipForward, X, type LucideIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\n\nconst ACTIVE_STATUSES = new Set(['parsing', 'encrypting', 'indexing', 'analysing'])\nconst RUNNING_STATUSES = new Set(['queued', ...ACTIVE_STATUSES])\n\ninterface StatusTone {\n text: string\n bar: string\n Icon: LucideIcon\n}\n\nconst TONES: Record<string, StatusTone> = {\n completed: { text: 'text-green-text', bar: 'bg-green-text/90', Icon: Check },\n failed: { text: 'text-red-text', bar: 'bg-red-text/90', Icon: X },\n parsing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n encrypting: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n indexing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n analysing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n queued: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: Loader2 },\n skipped: { text: 'text-gray-text', bar: 'bg-gray-text/90', Icon: SkipForward },\n empty: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: FileX },\n 'low-content': { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: AlertTriangle },\n}\nconst DEFAULT_TONE: StatusTone = { text: 'text-gray-text', bar: 'bg-blue-text/90', Icon: Loader2 }\n\nexport interface UploadTaskItemLabels {\n /** Delete action text (failed rows). */\n delete: string\n /** Delete action tooltip. */\n deleteTitle: string\n /** aria-label of the progress bar. */\n progress: (fileName: string) => string\n /** Status line text; the default capitalises the raw status. */\n status: (status: string, percent: number) => string\n}\n\nexport const DEFAULT_UPLOAD_TASK_ITEM_LABELS: UploadTaskItemLabels = {\n delete: 'Delete',\n deleteTitle: 'Delete file',\n progress: (fileName) => `${fileName} progress`,\n status: (status, percent) => `${status.charAt(0).toUpperCase() + status.slice(1)} - ${percent}%`,\n}\n\n/** Per-row test ids derived from the task id (defaults `task-item-{id}`, ...). */\nexport interface UploadTaskItemTestIds {\n item: (taskId: string) => string\n fileName: (taskId: string) => string\n progressBar: (taskId: string) => string\n status: (taskId: string) => string\n delete: (taskId: string) => string\n}\n\nexport interface UploadTaskItemProps {\n taskId: string\n fileName: string\n /** queued | parsing | encrypting | indexing | analysing | completed | failed | skipped | empty | low-content */\n status: string\n /** 0-1 fraction or 0-100 percentage. */\n progress: number\n startTime?: number\n endTime?: number\n /** File-type icon for the row (the app maps the extension). */\n fileIcon?: ReactNode\n /** Shown as a Delete action on failed tasks. */\n onDelete?: (taskId: string) => void\n testIds?: Partial<UploadTaskItemTestIds>\n labels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\n/** One document-processing row: status icon, file, progress bar, status text + elapsed time. */\nexport function UploadTaskItem({\n taskId,\n fileName,\n status,\n progress,\n startTime,\n endTime,\n fileIcon,\n onDelete,\n testIds,\n labels,\n className,\n}: UploadTaskItemProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_ITEM_LABELS, ...labels }\n const [elapsed, setElapsed] = useState('')\n\n useEffect(() => {\n if (!startTime) {\n setElapsed('')\n return\n }\n if (RUNNING_STATUSES.has(status)) {\n const tick = () => setElapsed(formatElapsed(startTime))\n tick()\n const interval = setInterval(tick, 1000)\n return () => clearInterval(interval)\n }\n setElapsed(formatElapsed(startTime, endTime))\n }, [startTime, endTime, status])\n\n const percent = progress > 1 ? progress : progress * 100\n const tone = TONES[status] ?? DEFAULT_TONE\n const StatusIcon = tone.Icon\n\n return (\n <div\n className={cn(\n 'mb-2 w-full max-w-full overflow-hidden rounded-md bg-muted p-2 box-border',\n className\n )}\n data-testid={testIdOr(testIds?.item?.(taskId), { testId: `task-item-${taskId}` })}\n data-slot=\"upload-task-item\"\n >\n <div className=\"mb-1 flex w-full max-w-full items-center gap-2 overflow-hidden\">\n <div className={cn('shrink-0', tone.text)}>\n <StatusIcon className={cn('size-4', ACTIVE_STATUSES.has(status) && 'animate-spin')} />\n </div>\n {fileIcon && <div className=\"shrink-0\">{fileIcon}</div>}\n <div\n className=\"min-w-0 flex-1 truncate text-sm font-medium\"\n title={fileName}\n data-testid={testIdOr(testIds?.fileName?.(taskId), { testId: `task-filename-${taskId}` })}\n >\n {fileName}\n </div>\n </div>\n\n <div\n className=\"mb-1 h-2 w-full max-w-full overflow-hidden rounded-md bg-background\"\n data-testid={testIdOr(testIds?.progressBar?.(taskId), {\n testId: `task-progress-bar-${taskId}`,\n })}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(percent)}\n aria-label={l.progress(fileName)}\n >\n <div\n className={cn('h-2 rounded-md transition-all duration-300 ease-in-out', tone.bar)}\n style={{ width: `${percent}%` }}\n />\n </div>\n\n <div className=\"flex w-full max-w-full items-center justify-between overflow-hidden text-sm\">\n <span\n className=\"truncate text-gray-text\"\n data-testid={testIdOr(testIds?.status?.(taskId), { testId: `task-status-${taskId}` })}\n >\n {l.status(status, Math.round(percent))}\n {elapsed && <span className=\"ml-2 text-muted-foreground\">({elapsed})</span>}\n </span>\n\n {status === 'failed' && onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(taskId)}\n className=\"shrink-0 text-sm text-red-text hover:text-red-text/80 pointer-coarse:min-h-11 pointer-coarse:px-3\"\n title={l.deleteTitle}\n data-testid={testIdOr(testIds?.delete?.(taskId), { testId: `delete-task-${taskId}` })}\n >\n {l.delete}\n </button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { UploadTaskItem, type UploadTaskItemLabels } from './UploadTaskItem'\n\nexport interface UploadTaskView {\n fileName: string\n status: string\n progress: number\n startTime?: number\n endTime?: number\n}\n\nexport interface UploadTaskListProps {\n tasks: Record<string, UploadTaskView>\n /** Include only matching tasks. */\n filter?: (taskId: string, task: UploadTaskView) => boolean\n title?: string\n onDelete?: (taskId: string) => void\n /** File-type icon per file name. */\n renderFileIcon?: (fileName: string) => ReactNode\n /** Render the \"No documents in this category\" message when empty (default true). */\n showEmptyState?: boolean\n testIds?: Partial<{ root: string; empty: string; title: string }>\n labels?: Partial<UploadTaskListLabels>\n /** Labels forwarded to every row. */\n itemLabels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\nexport interface UploadTaskListLabels {\n title: string\n empty: string\n}\n\nexport const DEFAULT_UPLOAD_TASK_LIST_LABELS: UploadTaskListLabels = {\n title: 'Active Tasks',\n empty: 'No documents in this category',\n}\n\nexport function UploadTaskList({\n tasks,\n filter,\n title,\n onDelete,\n renderFileIcon,\n showEmptyState = true,\n testIds,\n labels,\n itemLabels,\n className,\n}: UploadTaskListProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_LIST_LABELS, ...labels }\n const heading = title ?? l.title\n const safeTasks = typeof tasks === 'object' && tasks !== null ? tasks : {}\n let entries = Object.entries(safeTasks)\n if (filter) entries = entries.filter(([id, task]) => filter(id, task))\n\n if (entries.length === 0) {\n return showEmptyState ? (\n <div\n className=\"text-sm italic text-muted-foreground\"\n data-testid={testIdOr(testIds?.empty, { testId: 'task-list-empty-state' })}\n >\n {l.empty}\n </div>\n ) : null\n }\n\n return (\n <div\n data-testid={testIdOr(testIds?.root, { testId: 'task-status-list' })}\n data-slot=\"upload-task-list\"\n className={cn('box-border w-full max-w-full', className)}\n >\n {heading && (\n <h3\n className=\"mb-2 truncate text-sm font-semibold\"\n data-testid={testIdOr(testIds?.title, { testId: 'task-list-title' })}\n >\n {heading}\n </h3>\n )}\n <div className=\"box-border w-full max-w-full overflow-hidden\">\n {entries.map(([taskId, task]) => (\n <UploadTaskItem\n key={taskId}\n taskId={taskId}\n fileName={task.fileName}\n status={task.status}\n progress={task.progress}\n startTime={task.startTime}\n endTime={task.endTime}\n fileIcon={renderFileIcon?.(task.fileName)}\n onDelete={onDelete}\n labels={itemLabels}\n className=\"box-border max-w-full\"\n />\n ))}\n </div>\n </div>\n )\n}\n","/**\n * Minimal RRULE helpers for the Tasks recurrence builder.\n *\n * We only generate the constrained subset the friendly builder needs\n * (FREQ=DAILY|WEEKLY|MONTHLY with BYDAY / BYMONTHDAY + BYHOUR/BYMINUTE). The\n * backend (dateutil) is the source of truth for validation — these strings are\n * a valid subset of iCal RRULE. Power users can still hand-write any RRULE in\n * the advanced field; `describeRRule` falls back to the raw string for rules\n * outside the builder's subset.\n */\n\nexport type RecurrenceFrequency = 'daily' | 'weekly' | 'monthly'\n\n/** iCal two-letter weekday codes, in display order (Mon-first). */\nexport const WEEKDAYS = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU'] as const\nexport type Weekday = (typeof WEEKDAYS)[number]\n\nconst WEEKDAY_LABELS: Record<Weekday, string> = {\n MO: 'Mon',\n TU: 'Tue',\n WE: 'Wed',\n TH: 'Thu',\n FR: 'Fri',\n SA: 'Sat',\n SU: 'Sun',\n}\n\nexport interface RecurrencePreset {\n frequency: RecurrenceFrequency\n /** Selected weekdays (weekly only). */\n weekdays: Weekday[]\n /** Day of month 1-31 (monthly only). */\n monthDay: number\n /** Hour 0-23. */\n hour: number\n /** Minute 0-59. */\n minute: number\n}\n\nexport const DEFAULT_RECURRENCE: RecurrencePreset = {\n frequency: 'daily',\n weekdays: ['MO'],\n monthDay: 1,\n hour: 9,\n minute: 0,\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, '0')\n\n/** Build an RRULE string from the friendly preset. */\nexport function buildRRule(preset: RecurrencePreset): string {\n const parts: string[] = []\n if (preset.frequency === 'daily') {\n parts.push('FREQ=DAILY')\n } else if (preset.frequency === 'weekly') {\n parts.push('FREQ=WEEKLY')\n const days = preset.weekdays.length > 0 ? preset.weekdays : ['MO']\n parts.push(`BYDAY=${days.join(',')}`)\n } else {\n parts.push('FREQ=MONTHLY')\n parts.push(`BYMONTHDAY=${preset.monthDay}`)\n }\n parts.push(`BYHOUR=${preset.hour}`)\n parts.push(`BYMINUTE=${preset.minute}`)\n return parts.join(';')\n}\n\n/** Parse an RRULE token map (UPPERCASE keys → string values). */\nfunction tokenize(rrule: string): Record<string, string> {\n const out: Record<string, string> = {}\n for (const segment of rrule.split(';')) {\n const [rawKey, rawVal] = segment.split('=')\n if (rawKey && rawVal !== undefined) out[rawKey.trim().toUpperCase()] = rawVal.trim()\n }\n return out\n}\n\n/**\n * Best-effort parse of an RRULE back into the builder's preset. Returns null\n * for rules outside the supported subset (so the editor shows the advanced\n * raw field instead).\n */\nexport function parseRRule(rrule: string | null | undefined): RecurrencePreset | null {\n if (!rrule) return null\n const t = tokenize(rrule)\n const freq = t.FREQ?.toUpperCase()\n if (freq !== 'DAILY' && freq !== 'WEEKLY' && freq !== 'MONTHLY') return null\n\n // Reject anything with modifiers the builder can't represent (INTERVAL>1,\n // COUNT, UNTIL, BYSETPOS, …) so we don't silently drop them on round-trip.\n const allowed = new Set(['FREQ', 'BYDAY', 'BYMONTHDAY', 'BYHOUR', 'BYMINUTE'])\n if (Object.keys(t).some((k) => !allowed.has(k))) return null\n\n const hour = t.BYHOUR !== undefined ? Number(t.BYHOUR) : DEFAULT_RECURRENCE.hour\n const minute = t.BYMINUTE !== undefined ? Number(t.BYMINUTE) : 0\n if (!Number.isInteger(hour) || hour < 0 || hour > 23) return null\n if (!Number.isInteger(minute) || minute < 0 || minute > 59) return null\n\n if (freq === 'DAILY') {\n if (t.BYDAY || t.BYMONTHDAY) return null\n return { ...DEFAULT_RECURRENCE, frequency: 'daily', hour, minute }\n }\n if (freq === 'WEEKLY') {\n if (t.BYMONTHDAY) return null\n const weekdays = (t.BYDAY ? t.BYDAY.split(',') : ['MO'])\n .map((d) => d.trim().toUpperCase())\n .filter((d): d is Weekday => (WEEKDAYS as readonly string[]).includes(d))\n if (weekdays.length === 0) return null\n return { ...DEFAULT_RECURRENCE, frequency: 'weekly', weekdays, hour, minute }\n }\n // MONTHLY\n if (t.BYDAY) return null\n const monthDay = t.BYMONTHDAY !== undefined ? Number(t.BYMONTHDAY) : 1\n if (!Number.isInteger(monthDay) || monthDay < 1 || monthDay > 31) return null\n return { ...DEFAULT_RECURRENCE, frequency: 'monthly', monthDay, hour, minute }\n}\n\nconst ordinal = (n: number): string => {\n const s = ['th', 'st', 'nd', 'rd']\n const v = n % 100\n return n + (s[(v - 20) % 10] || s[v] || s[0])\n}\n\n/** Human-readable summary of an RRULE; falls back to the raw rule when unknown. */\nexport function describeRRule(rrule: string | null | undefined): string {\n if (!rrule) return 'Recurring'\n const preset = parseRRule(rrule)\n if (!preset) return rrule // advanced/raw rule — show as-is\n const time = `${pad2(preset.hour)}:${pad2(preset.minute)}`\n if (preset.frequency === 'daily') return `Daily at ${time}`\n if (preset.frequency === 'weekly') {\n const days = preset.weekdays.map((d) => WEEKDAY_LABELS[d]).join(', ')\n return `Weekly on ${days} at ${time}`\n }\n return `Monthly on the ${ordinal(preset.monthDay)} at ${time}`\n}\n","/**\n * Friendly recurrence builder for a recurring Task. Generates an RRULE from a\n * frequency + time (+ weekdays / day-of-month) and offers a collapsible\n * \"Advanced\" field for hand-writing any RRULE the presets can't express.\n */\nimport { useEffect, useState } from 'react'\nimport {\n Button,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n cn,\n} from '@arbidocs/react/ui'\nimport {\n buildRRule,\n DEFAULT_RECURRENCE,\n parseRRule,\n type RecurrenceFrequency,\n type RecurrencePreset,\n type Weekday,\n WEEKDAYS,\n} from './rrule'\nimport { testIdOr } from '../../chat/test-id'\n\n/** Fixed strings of the recurrence builder. */\nexport interface RecurrenceBuilderLabels {\n rruleLabel: string\n rrulePlaceholder: string\n backToSimple: string\n repeat: string\n daily: string\n weekly: string\n monthly: string\n onDay: string\n at: string\n on: string\n advanced: string\n /** Single-letter weekday chips. */\n weekdayShort: Record<Weekday, string>\n}\n\nexport const DEFAULT_RECURRENCE_BUILDER_LABELS: RecurrenceBuilderLabels = {\n rruleLabel: 'Custom schedule (iCalendar rule)',\n rrulePlaceholder: 'FREQ=WEEKLY;BYDAY=MO;BYHOUR=8',\n backToSimple: '← Back to simple',\n repeat: 'Repeat',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n onDay: 'On day',\n at: 'At',\n on: 'On',\n advanced: 'Custom schedule…',\n weekdayShort: { MO: 'M', TU: 'T', WE: 'W', TH: 'T', FR: 'F', SA: 'S', SU: 'S' },\n}\n\nexport interface RecurrenceBuilderTestIds {\n rruleRaw: string\n simple: string\n builder: string\n frequency: string\n monthDay: string\n time: string\n advanced: string\n /** Per weekday chip (default `task-weekday-{MO..SU}`). */\n weekday: (day: Weekday) => string\n}\n\nexport interface RecurrenceBuilderProps {\n rrule: string\n onChange: (rrule: string) => void\n testIds?: Partial<RecurrenceBuilderTestIds>\n labels?: Partial<RecurrenceBuilderLabels>\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, '0')\n\nexport function RecurrenceBuilder({ rrule, onChange, testIds, labels }: RecurrenceBuilderProps) {\n const l = { ...DEFAULT_RECURRENCE_BUILDER_LABELS, ...labels }\n // Advanced when there's a rule we can't represent in the preset builder.\n const [advanced, setAdvanced] = useState(() => !!rrule && parseRRule(rrule) === null)\n const [preset, setPreset] = useState<RecurrencePreset>(\n () => parseRRule(rrule) ?? DEFAULT_RECURRENCE\n )\n\n // Seed the parent with a valid default rule on first mount when empty.\n useEffect(() => {\n if (!rrule) onChange(buildRRule(DEFAULT_RECURRENCE))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const update = (next: RecurrencePreset) => {\n setPreset(next)\n onChange(buildRRule(next))\n }\n\n const toggleWeekday = (day: Weekday) => {\n const has = preset.weekdays.includes(day)\n const weekdays = has ? preset.weekdays.filter((d) => d !== day) : [...preset.weekdays, day]\n update({ ...preset, weekdays: weekdays.length > 0 ? weekdays : preset.weekdays })\n }\n\n const onTimeChange = (value: string) => {\n const [h, m] = value.split(':').map(Number)\n if (Number.isInteger(h) && Number.isInteger(m)) update({ ...preset, hour: h, minute: m })\n }\n\n if (advanced) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-rrule-raw\">{l.rruleLabel}</Label>\n <Input\n id=\"task-rrule-raw\"\n value={rrule}\n onChange={(e) => onChange(e.target.value)}\n placeholder={l.rrulePlaceholder}\n data-testid={testIdOr(testIds?.rruleRaw, { testId: 'task-rrule-raw' })}\n />\n <button\n type=\"button\"\n className=\"text-sm text-muted-foreground hover:text-foreground\"\n onClick={() => {\n const parsed = parseRRule(rrule)\n setPreset(parsed ?? DEFAULT_RECURRENCE)\n if (!parsed) onChange(buildRRule(DEFAULT_RECURRENCE))\n setAdvanced(false)\n }}\n data-testid={testIdOr(testIds?.simple, { testId: 'task-recurrence-simple' })}\n >\n {l.backToSimple}\n </button>\n </div>\n )\n }\n\n return (\n <div\n className=\"space-y-3\"\n data-testid={testIdOr(testIds?.builder, { testId: 'task-recurrence-builder' })}\n >\n <div className=\"flex items-end gap-3\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-frequency\">{l.repeat}</Label>\n <Select\n value={preset.frequency}\n onValueChange={(v) => update({ ...preset, frequency: v as RecurrenceFrequency })}\n >\n <SelectTrigger\n id=\"task-frequency\"\n className=\"w-[140px]\"\n data-testid={testIdOr(testIds?.frequency, { testId: 'task-frequency' })}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"daily\">{l.daily}</SelectItem>\n <SelectItem value=\"weekly\">{l.weekly}</SelectItem>\n <SelectItem value=\"monthly\">{l.monthly}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {preset.frequency === 'monthly' && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-monthday\">{l.onDay}</Label>\n <Input\n id=\"task-monthday\"\n type=\"number\"\n min={1}\n max={31}\n className=\"w-20\"\n value={preset.monthDay}\n onChange={(e) => {\n const d = Math.min(31, Math.max(1, Number(e.target.value) || 1))\n update({ ...preset, monthDay: d })\n }}\n data-testid={testIdOr(testIds?.monthDay, { testId: 'task-monthday' })}\n />\n </div>\n )}\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-time\">{l.at}</Label>\n <Input\n id=\"task-time\"\n type=\"time\"\n className=\"w-28\"\n value={`${pad2(preset.hour)}:${pad2(preset.minute)}`}\n onChange={(e) => onTimeChange(e.target.value)}\n data-testid={testIdOr(testIds?.time, { testId: 'task-time' })}\n />\n </div>\n </div>\n\n {preset.frequency === 'weekly' && (\n <div className=\"space-y-2\">\n <Label>{l.on}</Label>\n <div className=\"flex gap-1\">\n {WEEKDAYS.map((day) => (\n <Button\n key={day}\n type=\"button\"\n size=\"icon\"\n variant={preset.weekdays.includes(day) ? 'default' : 'outline'}\n className={cn('h-8 w-8 rounded-full text-xs')}\n onClick={() => toggleWeekday(day)}\n data-testid={testIdOr(testIds?.weekday?.(day), { testId: `task-weekday-${day}` })}\n aria-pressed={preset.weekdays.includes(day)}\n >\n {l.weekdayShort[day]}\n </Button>\n ))}\n </div>\n </div>\n )}\n\n <button\n type=\"button\"\n className=\"text-sm text-muted-foreground hover:text-foreground\"\n onClick={() => setAdvanced(true)}\n data-testid={testIdOr(testIds?.advanced, { testId: 'task-recurrence-advanced' })}\n >\n {l.advanced}\n </button>\n </div>\n )\n}\n","import type { Tone } from '../../components/tones'\n\n/**\n * What starts a workflow: a moment (`one_time`), a repeating schedule (`recurring`), a notification\n * (`event`), another conversation finishing (`after`), or nothing but someone pressing Run (`on_demand`).\n */\nexport type WorkflowTriggerType = 'one_time' | 'recurring' | 'event' | 'after' | 'on_demand'\n\n/**\n * Where a task (a conversation with a status) is in the human workflow. Agents prepare work; only a\n * person marks it `done`.\n * - `todo`: nothing automated pending.\n * - `generating`: an agent run is in flight.\n * - `ready_for_review`: prepared, waiting for a person.\n * - `done`: a person accepted it.\n * - `chat`: no status at all: a plain conversation, listed beside the tasks.\n */\nexport type TaskStatusKey = 'todo' | 'generating' | 'ready_for_review' | 'done' | 'chat'\n\nexport const TRIGGER_LABELS: Record<WorkflowTriggerType, string> = {\n one_time: 'One-time',\n recurring: 'Recurring',\n event: 'Event',\n after: 'After a task',\n on_demand: 'On demand',\n}\n\nexport const STATUS_LABELS: Record<TaskStatusKey, string> = {\n todo: 'To do',\n generating: 'Generating',\n ready_for_review: 'Ready for review',\n done: 'Done',\n chat: 'Chat',\n}\n\n/** The order sections appear in the list: what needs a person first, finished work last. */\nexport const STATUS_ORDER: readonly TaskStatusKey[] = [\n 'ready_for_review',\n 'generating',\n 'todo',\n 'done',\n 'chat',\n]\n\nexport const STATUS_TONE: Record<TaskStatusKey, Tone> = {\n todo: 'neutral',\n generating: 'ai',\n ready_for_review: 'warning',\n done: 'success',\n chat: 'neutral',\n}\n\n/**\n * A status string from the API narrowed to the known set. No status is a plain chat; anything else\n * unexpected reads as a to-do.\n */\nexport function asTaskStatus(status: string | null | undefined): TaskStatusKey {\n if (!status) return 'chat'\n return (STATUS_ORDER as readonly string[]).includes(status) ? (status as TaskStatusKey) : 'todo'\n}\n\n/** The goal-state fields the list reads from a goal task's last run. */\nexport interface TaskGoalState {\n done?: boolean\n criteria_met?: number\n criteria_total?: number\n}\n\n/**\n * Goal progress from a goal task's last run (its `/goal` gate verdict), or null when the task\n * has no goal state yet.\n */\nexport function goalProgress(task: { goal_state?: unknown }): {\n met: number\n total: number\n done: boolean\n} | null {\n const gs = task.goal_state as TaskGoalState | null | undefined\n if (!gs || gs.criteria_total == null) return null\n return { met: gs.criteria_met ?? 0, total: gs.criteria_total, done: gs.done === true }\n}\n","import { UserEntity, getEntityColorStyles } from '@arbidocs/react/ui'\nimport { initials } from '../../lib/format'\n\n/** A person (or agent) as the table shows them. */\nexport interface TaskPerson {\n /** The user's external id; absent when the person is not known (the pill then reads as their label). */\n id?: string | null\n label: string\n /** The viewer: shown as \"You\" by the host's pill, and as the label here. */\n isMe?: boolean\n isAgent?: boolean\n}\n\nexport interface PersonPillProps {\n person: TaskPerson\n size?: 'xs' | 'sm' | 'md' | 'lg'\n testId?: string\n}\n\n/**\n * A person as the app's own user pill: the same avatar, initials and tint as everywhere else. This is\n * the default; a host that knows more (presence, a direct-message click, the rich tooltip) hands the\n * table its own `renderPerson` instead.\n */\nexport function PersonPill({ person, size = 'sm', testId }: PersonPillProps) {\n return (\n <span data-testid={testId} className=\"inline-flex min-w-0\">\n <UserEntity\n variant=\"pill\"\n size={size}\n interactive={false}\n showTooltip={false}\n initials={initials(person.label)}\n displayName={person.label}\n avatarStyle={person.id ? getEntityColorStyles(person.id) : undefined}\n isAgent={person.isAgent}\n isMe={person.isMe}\n />\n </span>\n )\n}\n\n/** Just the avatar: the same user avatar and tint, for lists and pills that carry their own name. */\nexport function PersonAvatar({ person, size = 'xs' }: PersonPillProps) {\n return (\n <UserEntity\n variant=\"icon\"\n size={size}\n interactive={false}\n showTooltip={false}\n initials={initials(person.label)}\n displayName={person.label}\n avatarStyle={person.id ? getEntityColorStyles(person.id) : undefined}\n isAgent={person.isAgent}\n />\n )\n}\n","import { FileText } from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** A document a task produced, as the Outputs cell needs it. */\nexport interface TaskOutput {\n id: string\n name: string\n}\n\nexport interface TaskOutputsCellLabels {\n none: string\n /** Menu trigger's accessible name. */\n open: (count: number) => string\n /** \"+2\" next to the first file name. */\n more: (count: number) => string\n}\n\nexport const DEFAULT_TASK_OUTPUTS_CELL_LABELS: TaskOutputsCellLabels = {\n none: '—',\n open: (count) => `${count} ${count === 1 ? 'output' : 'outputs'}`,\n more: (count) => `+${count}`,\n}\n\nexport interface TaskOutputsCellProps {\n /** Task id: keys the test ids (`task-outputs-{id}`, `task-output-{id}-{docId}`). */\n id: string\n outputs?: readonly TaskOutput[]\n onOpen: (documentId: string) => void\n testId?: string\n labels?: Partial<TaskOutputsCellLabels>\n}\n\n/** The documents a task generated: the first file name and a count, with a menu that opens each. */\nexport function TaskOutputsCell({ id, outputs, onOpen, testId, labels }: TaskOutputsCellProps) {\n const l = { ...DEFAULT_TASK_OUTPUTS_CELL_LABELS, ...labels }\n const base = testIdOr(testId, { testId: `task-outputs-${id}` })\n if (!outputs || outputs.length === 0) {\n return (\n <span className=\"text-xs text-muted-foreground\" data-testid={base} data-state=\"none\">\n {l.none}\n </span>\n )\n }\n const [first] = outputs\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 max-w-full gap-1.5 px-2 text-xs\"\n aria-label={l.open(outputs.length)}\n data-testid={base}\n data-count={outputs.length}\n >\n <FileText className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{first.name}</span>\n {outputs.length > 1 && (\n <span className=\"shrink-0 text-muted-foreground\">{l.more(outputs.length - 1)}</span>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {outputs.map((o) => (\n <DropdownMenuItem\n key={o.id}\n onSelect={() => onOpen(o.id)}\n data-testid={`task-output-${id}-${o.id}`}\n >\n <FileText className=\"mr-2 size-4\" aria-hidden />\n <span className=\"truncate\">{o.name}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import { useState } from 'react'\nimport { CornerDownRight } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskMoveOption {\n id: string\n label: string\n}\n\nexport interface TaskMoveDialogLabels {\n title: string\n none: string\n search: string\n empty: string\n cancel: string\n}\n\nexport interface TaskMoveDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Where the task can go (the host excludes the task itself and its descendants). */\n options: TaskMoveOption[]\n /** The task's current parent, marked in the list. */\n currentParentId?: string | null\n /** `null` moves the task to the top level. */\n onPick: (parentId: string | null) => void\n labels: TaskMoveDialogLabels\n testId?: string\n}\n\n/** A parent picker: choose the task another task becomes a sub-task of, or the top level. */\nexport function TaskMoveDialog({\n open,\n onOpenChange,\n options,\n currentParentId,\n onPick,\n labels,\n testId,\n}: TaskMoveDialogProps) {\n const [query, setQuery] = useState('')\n const id = testIdOr(testId, { testId: 'task-move' })\n const q = query.trim().toLowerCase()\n const shown = q ? options.filter((o) => o.label.toLowerCase().includes(q)) : options\n const pick = (parentId: string | null) => {\n onPick(parentId)\n onOpenChange(false)\n }\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (!next) setQuery('')\n onOpenChange(next)\n }}\n >\n <DialogContent presentation=\"sheet\" className=\"max-h-[80dvh] sm:max-w-md\" data-testid={id}>\n <DialogHeader>\n <DialogTitle>{labels.title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{labels.title}</DialogDescription>\n </DialogHeader>\n <Input\n value={query}\n placeholder={labels.search}\n aria-label={labels.search}\n onChange={(e) => setQuery(e.target.value)}\n data-testid={`${id}-search`}\n />\n <ul\n className=\"flex max-h-[50dvh] flex-col gap-1 overflow-y-auto\"\n data-testid={`${id}-list`}\n >\n {!q && (\n <li>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={!currentParentId}\n onClick={() => pick(null)}\n data-testid={`${id}-none`}\n >\n {labels.none}\n </Button>\n </li>\n )}\n {shown.map((o) => (\n <li key={o.id}>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={o.id === currentParentId}\n onClick={() => pick(o.id)}\n data-testid={`${id}-option-${o.id}`}\n >\n <CornerDownRight className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{o.label}</span>\n </Button>\n </li>\n ))}\n {shown.length === 0 && (\n <li className=\"px-2 py-4 text-center text-sm text-muted-foreground\">{labels.empty}</li>\n )}\n </ul>\n <div className=\"flex justify-end\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {labels.cancel}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useState } from 'react'\nimport { Check, MessageSquareReply, UserCheck } from 'lucide-react'\nimport {\n Button,\n Command,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskReviewActionsLabels {\n approve: string\n requestChanges: string\n feedbackLabel: string\n feedbackPlaceholder: string\n send: string\n cancel: string\n askApproval: string\n askApprovalPerson: string\n askApprovalSearch: string\n askApprovalEmpty: string\n askApprovalNote: string\n askApprovalSend: string\n}\n\nexport const DEFAULT_TASK_REVIEW_ACTIONS_LABELS: TaskReviewActionsLabels = {\n approve: 'Approve',\n requestChanges: 'Request changes',\n feedbackLabel: 'What should change?',\n feedbackPlaceholder: 'Tell the agent what to fix. It continues in the same thread.',\n send: 'Send back',\n cancel: 'Cancel',\n askApproval: 'Ask someone to approve',\n askApprovalPerson: 'Who should approve this?',\n askApprovalSearch: 'Search people…',\n askApprovalEmpty: 'No one to ask.',\n askApprovalNote: 'Add a note (optional)',\n askApprovalSend: 'Request approval',\n}\n\nexport interface TaskReviewActionsProps {\n /** Task id: keys the test ids (`task-approve-{id}`, ...). */\n id: string\n /** Disables both actions while a request is in flight. */\n busy?: boolean\n /** Hide \"Request changes\" for work no agent can revise (a plain reminder). */\n canRequestChanges?: boolean\n onApprove: () => void\n onRequestChanges: (feedback: string) => void\n /** Hand sign-off to someone else: they are notified and become the person who can approve. */\n onRequestApproval?: (userId: string, note: string) => void\n /** People who can be asked (humans only). The action shows only when there is someone to ask. */\n people?: { id: string; label: string }[]\n /** Icon-only secondary buttons (for a table cell); they keep their accessible names. */\n compact?: boolean\n /** Whether the viewer is the one who can approve (the sign-off person). Without it Approve is not offered. */\n canApprove?: boolean\n /** Approve as an outline button, for a list where every row has one; the default is the one filled button. */\n quiet?: boolean\n labels?: Partial<TaskReviewActionsLabels>\n}\n\n/**\n * The human half of the workflow: accept prepared work (Approve closes the task), or send it back\n * with feedback so the agent revises it in the task's own thread.\n */\nexport function TaskReviewActions({\n id,\n busy = false,\n canRequestChanges = true,\n onApprove,\n onRequestChanges,\n onRequestApproval,\n people = [],\n compact = false,\n quiet = false,\n canApprove = true,\n labels,\n}: TaskReviewActionsProps) {\n const l = { ...DEFAULT_TASK_REVIEW_ACTIONS_LABELS, ...labels }\n const [open, setOpen] = useState(false)\n const [feedback, setFeedback] = useState('')\n const trimmed = feedback.trim()\n const [askOpen, setAskOpen] = useState(false)\n const [person, setPerson] = useState('')\n const [note, setNote] = useState('')\n const canAsk = !!onRequestApproval && people.length > 0\n\n const ask = () => {\n if (!person || !onRequestApproval) return\n onRequestApproval(person, note.trim())\n setPerson('')\n setNote('')\n setAskOpen(false)\n }\n\n const send = () => {\n if (!trimmed) return\n onRequestChanges(trimmed)\n setFeedback('')\n setOpen(false)\n }\n\n return (\n <div className=\"flex items-center gap-1.5\" data-slot=\"task-review-actions\">\n {canApprove && (\n <Button\n size=\"sm\"\n variant={quiet ? 'outline' : 'default'}\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n disabled={busy}\n onClick={onApprove}\n data-testid={testIdOr(undefined, { testId: `task-approve-${id}` })}\n >\n <Check className=\"size-3.5\" aria-hidden />\n {l.approve}\n </Button>\n )}\n {canRequestChanges && (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n size=\"sm\"\n variant=\"outline\"\n className={cn(\n 'h-8 gap-1.5 pointer-coarse:h-11',\n compact && 'w-8 px-0 pointer-coarse:w-11'\n )}\n disabled={busy}\n aria-label={compact ? l.requestChanges : undefined}\n title={compact ? l.requestChanges : undefined}\n data-testid={`task-request-changes-${id}`}\n >\n <MessageSquareReply className=\"size-3.5\" aria-hidden />\n {!compact && l.requestChanges}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-80 space-y-2\">\n <label htmlFor={`task-feedback-${id}`} className=\"text-sm font-medium\">\n {l.feedbackLabel}\n </label>\n <Textarea\n id={`task-feedback-${id}`}\n value={feedback}\n rows={3}\n placeholder={l.feedbackPlaceholder}\n onChange={(e) => setFeedback(e.target.value)}\n data-testid={`task-feedback-${id}`}\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={!trimmed || busy}\n onClick={send}\n data-testid={`task-send-changes-${id}`}\n >\n {l.send}\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n )}\n {canAsk && (\n <Popover open={askOpen} onOpenChange={setAskOpen}>\n <PopoverTrigger asChild>\n <Button\n size=\"sm\"\n variant=\"outline\"\n className={cn(\n 'h-8 gap-1.5 pointer-coarse:h-11',\n compact && 'w-8 px-0 pointer-coarse:w-11'\n )}\n disabled={busy}\n aria-label={compact ? l.askApproval : undefined}\n title={compact ? l.askApproval : undefined}\n data-testid={`task-ask-approval-${id}`}\n >\n <UserCheck className=\"size-3.5\" aria-hidden />\n {!compact && l.askApproval}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-72 space-y-2 p-2\">\n <p className=\"px-1 text-sm font-medium\">{l.askApprovalPerson}</p>\n <Command className=\"rounded-md border\">\n <CommandInput\n placeholder={l.askApprovalSearch}\n data-testid={`task-ask-approval-search-${id}`}\n />\n <CommandList className=\"max-h-40\">\n <CommandEmpty>{l.askApprovalEmpty}</CommandEmpty>\n {people.map((p) => (\n <CommandItem\n key={p.id}\n value={p.label}\n onSelect={() => setPerson(p.id)}\n data-testid={`task-ask-approval-person-${id}-${p.id}`}\n >\n <span className=\"min-w-0 flex-1 truncate\">{p.label}</span>\n {p.id === person && <Check className=\"ml-2 size-4 shrink-0\" aria-hidden />}\n </CommandItem>\n ))}\n </CommandList>\n </Command>\n <Textarea\n value={note}\n rows={2}\n placeholder={l.askApprovalNote}\n onChange={(e) => setNote(e.target.value)}\n data-testid={`task-ask-approval-note-${id}`}\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setAskOpen(false)}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n disabled={!person || busy}\n onClick={ask}\n data-testid={`task-send-approval-${id}`}\n >\n {l.askApprovalSend}\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n )}\n </div>\n )\n}\n","import { STATUS_ORDER, asTaskStatus, type TaskStatusKey } from './taskLabels'\n\n/**\n * The deepest a task may nest, counting the top-level task as level 1 (a task, its sub-tasks, their\n * sub-tasks, and so on). The table indents no further than the last level, and \"Move to…\" offers\n * only parents that keep the moved subtree within it. The backend is asked to enforce the same cap.\n */\nexport const MAX_TASK_DEPTH = 5\n\n/**\n * The fields of a task the table reads. A task is a conversation with a `status`\n * (`GET /v1/conversation/list`); callers' richer conversation types are accepted as-is, and the\n * host keeps only the rows whose `status` is set (a chat has none).\n */\nexport interface TaskListRow {\n external_id: string\n /** The conversation title; null until a run (which holds the key) names it. */\n title?: string | null\n description?: string | null\n /** `todo | generating | ready_for_review | done`; null for a plain chat. */\n status?: string | null\n in_progress?: boolean | null\n run_started_at?: string | null\n due_at?: string | null\n last_error?: string | null\n /** Set while a run waits for the owner to grant access. */\n pending_auth_request_id?: string | null\n goal_state?: unknown\n /** Shared with the workspace's members (false = private to its owner). */\n is_shared?: boolean | null\n /** False for a teammate's shared task: they can finish it, but not run, edit or delete it. */\n is_owner?: boolean | null\n /** The person who created the task (it is assigned to them when no agent works on it). */\n owner_ext_id?: string | null\n /** The task this is a sub-task of. */\n parent_conversation_ext_id?: string | null\n /** The workflow that created it, if any. */\n workflow_ext_id?: string | null\n /** The agent that prepares the work (none for a plain to-do). */\n agent_ext_id?: string | null\n /** Work for the default assistant need not have a named agent. */\n has_agent_action?: boolean\n skill_ref?: string | null\n /** The person who signs the task off; `can_signoff` is true when that is the viewer. */\n signoff_ext_id?: string | null\n can_signoff?: boolean | null\n /** Who started the thread. */\n created_by_ext_id?: string | null\n message_count?: number | null\n updated_at?: string | null\n}\n\n/**\n * Who has the next step on a task: its sign-off person if there is one, else its creator. They are\n * notified when the previous step finishes, and they approve. Not necessarily the creator, and never\n * the agent that did the work.\n */\nexport const ownerExtId = (task: TaskListRow): string | null =>\n task.signoff_ext_id || task.owner_ext_id || task.created_by_ext_id || null\n\n/** A plain to-do (no agent, no skill): a person marks it done without a review. */\nexport const isPlainTodo = (task: TaskListRow): boolean =>\n !task.agent_ext_id && !task.has_agent_action && !task.skill_ref\n\nexport type TaskFilter = 'all' | TaskStatusKey\n\n/** One line of the table: a task, how deep it sits under its parent and what its children add up to. */\nexport interface TaskGridRow<T extends TaskListRow> {\n external_id: string\n task: T\n depth: number\n /** Present when the task has sub-tasks (all of them, whatever the filter shows). */\n childStats?: { done: number; total: number }\n expanded: boolean\n parentId: string | null\n /** Number of siblings shown at this level, and this row's 1-based place among them. */\n setSize: number\n posInSet: number\n /** Shown only as the ancestor of a match (the filter or search did not select it itself). */\n context: boolean\n}\n\n/** The parent/child index of a task list. A parent that is not in the list (hidden, deleted) is ignored. */\nexport interface TaskTree<T extends TaskListRow> {\n byId: Map<string, T>\n kids: Map<string, T[]>\n parentOf: Map<string, string>\n}\n\nexport function indexTasks<T extends TaskListRow>(tasks: T[]): TaskTree<T> {\n const byId = new Map(tasks.map((t) => [t.external_id, t]))\n const kids = new Map<string, T[]>()\n const parentOf = new Map<string, string>()\n for (const task of tasks) {\n const parent = task.parent_conversation_ext_id\n if (parent && parent !== task.external_id && byId.has(parent)) {\n parentOf.set(task.external_id, parent)\n const list = kids.get(parent)\n if (list) list.push(task)\n else kids.set(parent, [task])\n }\n }\n return { byId, kids, parentOf }\n}\n\n/** Every task below `id`, at any depth (collapsed or filtered out included), without repeats. */\nexport function descendantIds<T extends TaskListRow>(tree: TaskTree<T>, id: string): string[] {\n const out: string[] = []\n const seen = new Set<string>([id])\n const stack = [id]\n while (stack.length) {\n for (const child of tree.kids.get(stack.pop() as string) ?? []) {\n if (seen.has(child.external_id)) continue\n seen.add(child.external_id)\n out.push(child.external_id)\n stack.push(child.external_id)\n }\n }\n return out\n}\n\n/** 1 for a task with no children, 2 for one with children, and so on. */\nfunction subtreeLevels<T extends TaskListRow>(\n tree: TaskTree<T>,\n id: string,\n seen = new Set<string>()\n): number {\n if (seen.has(id)) return 0\n const next = new Set(seen).add(id)\n let deepest = 0\n for (const child of tree.kids.get(id) ?? []) {\n deepest = Math.max(deepest, subtreeLevels(tree, child.external_id, next))\n }\n return 1 + deepest\n}\n\n/** The level of a task: 1 for a top-level task. */\nfunction levelOf<T extends TaskListRow>(tree: TaskTree<T>, id: string): number {\n let level = 1\n const seen = new Set<string>([id])\n for (let at = tree.parentOf.get(id); at && !seen.has(at); at = tree.parentOf.get(at)) {\n seen.add(at)\n level += 1\n }\n return level\n}\n\n/**\n * The tasks `task` can be moved under: any other task that is not one of its own descendants and\n * keeps the moved subtree within {@link MAX_TASK_DEPTH}.\n */\nexport function moveTargets<T extends TaskListRow>(tasks: T[], task: T): T[] {\n const tree = indexTasks(tasks)\n const banned = new Set([task.external_id, ...descendantIds(tree, task.external_id)])\n const height = subtreeLevels(tree, task.external_id)\n return tasks.filter(\n (t) => !banned.has(t.external_id) && levelOf(tree, t.external_id) + height <= MAX_TASK_DEPTH\n )\n}\n\ninterface TreeNode<T extends TaskListRow> {\n task: T\n depth: number\n context: boolean\n children: TreeNode<T>[]\n}\n\nexport interface BuildTaskRowsOptions<T extends TaskListRow> {\n /** Case-insensitive text matched against the title and description. */\n query?: string\n /** The text shown for a task (defaults to its title): what the search reads. */\n titleOf?: (task: T) => string\n /**\n * Rows built last time, by id. A row whose task, depth, place and counts are unchanged is reused\n * (same object), so the grid only refreshes the rows that really changed. Updated in place.\n */\n cache?: Map<string, TaskGridRow<T>>\n}\n\nconst sameStats = (a: TaskGridRow<never>['childStats'], b: TaskGridRow<never>['childStats']) =>\n a === b || (a !== undefined && b !== undefined && a.done === b.done && a.total === b.total)\n\n/**\n * The table's lines, in order. The full view is the sub-task forest grouped by the status of each root\n * (what needs review first, then what an agent is generating, to-dos, and finally what is done). A\n * status filter or a search keeps every match together with its ancestors, which show as `context`\n * rows rather than leaving their children orphaned. A task whose parent is not in the list (not\n * visible, or deleted) is top-level, and a collapsed task hides its sub-tasks.\n *\n * With `compare` (the user sorted a column) tasks are sorted within their own level: roots among roots\n * (no longer grouped by status) and each task's sub-tasks among themselves, so a sub-task never leaves\n * its parent. AG Grid cannot do this itself without its Enterprise tree data.\n */\nexport function buildTaskRows<T extends TaskListRow>(\n tasks: T[],\n filter: TaskFilter,\n collapsed: ReadonlySet<string>,\n compare?: (a: T, b: T) => number,\n options: BuildTaskRowsOptions<T> = {}\n): TaskGridRow<T>[] {\n const tree = indexTasks(tasks)\n const { kids, parentOf } = tree\n const sorted = (list: T[]): T[] => (compare ? [...list].sort(compare) : list)\n const query = options.query?.trim().toLowerCase() ?? ''\n const titleOf = options.titleOf ?? ((t: T) => t.title ?? '')\n\n // With a filter or a search only the matches and their ancestors are shown.\n let included: Set<string> | null = null\n let matched: Set<string> | null = null\n if (filter !== 'all' || query) {\n matched = new Set()\n included = new Set()\n for (const task of tasks) {\n const statusOk = filter === 'all' || asTaskStatus(task.status) === filter\n const textOk =\n !query || `${titleOf(task)} ${task.description ?? ''}`.toLowerCase().includes(query)\n if (!statusOk || !textOk) continue\n matched.add(task.external_id)\n for (\n let at: string | undefined = task.external_id;\n at && !included.has(at);\n at = parentOf.get(at)\n ) {\n included.add(at)\n }\n }\n }\n const shown = (list: T[]): T[] =>\n included ? list.filter((t) => (included as Set<string>).has(t.external_id)) : list\n\n const build = (task: T, depth: number, seen: Set<string>): TreeNode<T> => {\n const nextSeen = new Set(seen).add(task.external_id)\n return {\n task,\n depth,\n context: matched ? !matched.has(task.external_id) : false,\n children: sorted(shown(kids.get(task.external_id) ?? []))\n .filter((child) => !nextSeen.has(child.external_id))\n .map((child) => build(child, depth + 1, nextSeen)),\n }\n }\n\n // Without a sort the sections are the statuses; with one there is a single section in sorted order.\n const sections = new Map<TaskStatusKey | 'sorted', TreeNode<T>[]>([\n ...STATUS_ORDER.map((s) => [s, []] as [TaskStatusKey, TreeNode<T>[]]),\n ['sorted', []],\n ])\n const sectionOf = (task: T): TaskStatusKey | 'sorted' =>\n compare ? 'sorted' : asTaskStatus(task.status)\n const roots = tasks.filter((t) => !parentOf.has(t.external_id))\n for (const task of sorted(shown(roots))) {\n sections.get(sectionOf(task))?.push(build(task, 0, new Set()))\n }\n\n const cache = options.cache\n const used = new Set<string>()\n const rows: TaskGridRow<T>[] = []\n const walk = (node: TreeNode<T>, parentId: string | null, setSize: number, posInSet: number) => {\n const id = node.task.external_id\n const expanded = !collapsed.has(id)\n const all = kids.get(id)\n const childStats = all\n ? { done: all.filter((c) => asTaskStatus(c.status) === 'done').length, total: all.length }\n : undefined\n let row: TaskGridRow<T> = {\n external_id: id,\n task: node.task,\n depth: node.depth,\n childStats,\n expanded,\n parentId,\n setSize,\n posInSet,\n context: node.context,\n }\n const prev = cache?.get(id)\n if (\n prev &&\n prev.task === row.task &&\n prev.depth === row.depth &&\n prev.expanded === row.expanded &&\n prev.parentId === row.parentId &&\n prev.setSize === row.setSize &&\n prev.posInSet === row.posInSet &&\n prev.context === row.context &&\n sameStats(prev.childStats, row.childStats)\n ) {\n row = prev\n }\n used.add(id)\n cache?.set(id, row)\n rows.push(row)\n if (expanded) {\n node.children.forEach((child, i) => walk(child, id, node.children.length, i + 1))\n }\n }\n const ordered = [...STATUS_ORDER, 'sorted' as const].flatMap((s) => sections.get(s) ?? [])\n ordered.forEach((node, i) => walk(node, null, ordered.length, i + 1))\n if (cache) for (const id of [...cache.keys()]) if (!used.has(id)) cache.delete(id)\n return rows\n}\n","import { useState, type ReactNode } from 'react'\nimport {\n CheckCheck,\n KeyRound,\n CornerDownRight,\n UserRoundCog,\n ListPlus,\n MoreHorizontal,\n History,\n Pencil,\n RotateCcw,\n Trash2,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { isPlainTodo, type TaskListRow } from './taskRows'\nimport type { TaskStatusKey } from './taskLabels'\nimport type { TaskListLabels } from './taskTableLabels'\n\nexport interface TaskRowMenuProps {\n task: TaskListRow\n status: TaskStatusKey\n busy: boolean\n /** The viewer owns the task: only they delete it, grant its agent access, or change who sees it. */\n isOwner: boolean\n /** The viewer may change who sees it and delete it: its creator, or an owner of the workspace. */\n canAdmin: boolean\n /** The viewer can edit it: its owner, or an editor of the workspace a shared task sits in. */\n canEdit: boolean\n labels: TaskListLabels\n onMarkDone: () => void\n onReopen: () => void\n onAddSubtask?: () => void\n onEdit: () => void\n onDelete: () => void\n onMoveTo?: () => void\n /** Hand the task to someone else (who then has the next step). Tasks only. */\n onChangeOwner?: () => void\n /** Open the task's activity timeline. */\n onOpenActivity?: () => void\n /** Present only when a run is waiting for access. */\n onGrantAccess?: () => void\n /** Compact review controls shown inside the menu on narrow screens. */\n reviewActions?: ReactNode | ((closeMenu: () => void) => ReactNode)\n}\n\nexport function TaskRowMenu({\n task,\n status,\n busy,\n isOwner,\n canAdmin,\n canEdit,\n labels,\n onMarkDone,\n onReopen,\n onAddSubtask,\n onEdit,\n onDelete,\n onMoveTo,\n onChangeOwner,\n onOpenActivity,\n onGrantAccess,\n reviewActions,\n}: TaskRowMenuProps) {\n const [open, setOpen] = useState(false)\n const id = task.external_id\n // An editor can do everything but delete and grant access (the owner's), and Approve is the sign-off\n // person's. A guest only reads.\n // A plain chat is not run, finished or reopened: it can be renamed, moved and deleted.\n const isChat = status === 'chat'\n const done = status === 'done'\n return (\n <DropdownMenu open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={labels.moreActions}\n data-testid={`task-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {reviewActions && (\n <div className=\"px-2 py-1.5\">\n {typeof reviewActions === 'function'\n ? reviewActions(() => setOpen(false))\n : reviewActions}\n </div>\n )}\n {isOwner && onGrantAccess && task.pending_auth_request_id && (\n <DropdownMenuItem\n onSelect={onGrantAccess}\n data-testid={`task-grant-${id}`}\n className=\"text-destructive\"\n >\n <KeyRound className=\"mr-2 size-4\" aria-hidden />\n {labels.grantAccess}\n </DropdownMenuItem>\n )}\n {isChat || !canEdit ? null : done ? (\n <DropdownMenuItem disabled={busy} onSelect={onReopen} data-testid={`task-reopen-${id}`}>\n <RotateCcw className=\"mr-2 size-4\" aria-hidden />\n {labels.reopen}\n </DropdownMenuItem>\n ) : (\n isPlainTodo(task) && (\n <DropdownMenuItem\n disabled={busy}\n onSelect={onMarkDone}\n data-testid={`task-mark-done-${id}`}\n >\n <CheckCheck className=\"mr-2 size-4\" aria-hidden />\n {labels.markDone}\n </DropdownMenuItem>\n )\n )}\n {!isChat && onOpenActivity && (\n <DropdownMenuItem onSelect={onOpenActivity} data-testid={`task-activity-${id}`}>\n <History className=\"mr-2 size-4\" aria-hidden />\n {labels.activity}\n </DropdownMenuItem>\n )}\n {canEdit && onAddSubtask && (\n <DropdownMenuItem onSelect={onAddSubtask} data-testid={`task-add-subtask-${id}`}>\n <ListPlus className=\"mr-2 size-4\" aria-hidden />\n {labels.addSubtask}\n </DropdownMenuItem>\n )}\n {canEdit && !isChat && onChangeOwner && (\n <DropdownMenuItem onSelect={onChangeOwner} data-testid={`task-change-owner-${id}`}>\n <UserRoundCog className=\"mr-2 size-4\" aria-hidden />\n {labels.changeOwner}\n </DropdownMenuItem>\n )}\n {canEdit && onMoveTo && (\n <DropdownMenuItem onSelect={onMoveTo} data-testid={`task-move-${id}`}>\n <CornerDownRight className=\"mr-2 size-4\" aria-hidden />\n {labels.moveTo}\n </DropdownMenuItem>\n )}\n {canEdit && (\n <DropdownMenuItem onSelect={onEdit} data-testid={`task-edit-${id}`}>\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {isChat ? labels.rename : labels.edit}\n </DropdownMenuItem>\n )}\n {canEdit && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={onDelete}\n title={canAdmin ? undefined : labels.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`task-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {labels.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { AlertCircle, Check, CircleDashed, Eye, Loader2, MessageSquare } from 'lucide-react'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\nimport { STATUS_LABELS, STATUS_TONE, asTaskStatus, type TaskStatusKey } from './taskLabels'\n\nexport interface TaskStatusPillLabels {\n waitingForAccess: string\n lastRunFailed: string\n /** The visible word beside the status when the last run failed. */\n failed: string\n}\n\nexport const DEFAULT_TASK_STATUS_PILL_LABELS: TaskStatusPillLabels = {\n waitingForAccess: 'Waiting for access',\n lastRunFailed: 'Last run failed',\n failed: 'Failed',\n}\n\nexport interface TaskStatusPillProps {\n /** Task id: keys the test id (`task-status-{id}`). */\n id: string\n status: string | null | undefined\n /** When the in-flight run started (ISO); a generating pill shows a live elapsed time. */\n runStartedAt?: string | null\n /** The last run's error, shown as a danger dot with the message on hover. */\n lastError?: string | null\n /** A run is waiting for the owner to grant workspace access. */\n awaitingAccess?: boolean\n testId?: string\n labels?: Partial<TaskStatusPillLabels>\n /** Tooltip with the latest step (\"Ready for review · 2 min ago · for You\"). */\n hint?: string\n}\n\nconst ICON = 'size-3'\n\nfunction StatusIcon({ status }: { status: TaskStatusKey }) {\n switch (status) {\n case 'generating':\n return <Loader2 className={`${ICON} animate-spin`} aria-hidden />\n case 'ready_for_review':\n return <Eye className={ICON} aria-hidden />\n case 'done':\n return <Check className={ICON} aria-hidden />\n case 'chat':\n return <MessageSquare className={ICON} aria-hidden />\n default:\n return <CircleDashed className={ICON} aria-hidden />\n }\n}\n\n/** Ticks once a second while mounted, so a generating pill's elapsed time stays live. */\nfunction useNow(active: boolean): number {\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n if (!active) return\n const timer = setInterval(() => setNow(Date.now()), 1000)\n return () => clearInterval(timer)\n }, [active])\n return now\n}\n\n/** A task's workflow status as one tinted pill: To do, Generating (live), Ready for review, Done. */\nexport function TaskStatusPill({\n id,\n status,\n runStartedAt,\n lastError,\n awaitingAccess = false,\n testId,\n labels,\n hint,\n}: TaskStatusPillProps) {\n const l = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...labels }\n const key = asTaskStatus(status)\n const generating = key === 'generating'\n const now = useNow(generating && Boolean(runStartedAt))\n const started = runStartedAt ? Date.parse(runStartedAt) : NaN\n\n let text: string = STATUS_LABELS[key]\n let tone = STATUS_TONE[key]\n if (awaitingAccess) {\n text = l.waitingForAccess\n tone = 'danger'\n }\n const elapsed = generating && !Number.isNaN(started) ? formatElapsed(started, now) : null\n\n return (\n <span className=\"inline-flex items-center gap-1.5\" data-slot=\"task-status\" title={hint}>\n <ToneBadge\n tone={tone}\n icon={<StatusIcon status={key} />}\n data-status={key}\n data-testid={testIdOr(testId, { testId: `task-status-${id}` })}\n >\n {text}\n {elapsed && <span className=\"tabular-nums opacity-70\">· {elapsed}</span>}\n </ToneBadge>\n {lastError && !generating && (\n <span\n role=\"img\"\n aria-label={l.lastRunFailed}\n title={`${l.lastRunFailed}: ${lastError}`}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-medium text-red-text\"\n data-testid={`task-error-${id}`}\n >\n <AlertCircle className=\"size-3.5\" aria-hidden />\n {l.failed}\n </span>\n )}\n </span>\n )\n}\n","/**\n * Column definitions for the tasks grid. Every column has an\n * explicit `colId` (AG Grid persists column state by id: see CLAUDE.md). The table supplies behaviour and\n * the cells that need it through slots; the structure, widths and headers live here. The slots must be\n * stable functions (the table keeps the latest handlers behind them) so the definitions are built once\n * and the grid never refreshes its columns on a selection or expand.\n *\n * Every conversation is a task: Owner (who has the next step), due, shared, thread link,\n * status, outputs. Rows are `TaskGridRow`s: a task plus where it sits in the sub-task tree, so the\n * order is the tree's. A column's header still shows and reports the sort, but the grid's own sort is\n * a no-op (`keepOrder`): that would tear sub-tasks away from their parent, so the table sorts within\n * each level instead (see `buildTaskRows`).\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport type { TaskGridRow, TaskListRow } from './taskRows'\nimport type { TaskListLabels } from './taskTableLabels'\n\n/** The actions column's width: Approve, ask for changes, ask someone, and the menu (the widest row). */\nexport const ACTIONS_WIDTH = 240\nconst NARROW_ACTIONS_WIDTH = 56\n\nexport const TASK_COLUMN_ORDER = [\n 'name',\n 'owner',\n 'due',\n 'status',\n 'outputs',\n 'shared',\n 'actions',\n] as const\n\nexport type TaskColumnId = (typeof TASK_COLUMN_ORDER)[number]\n\nexport interface CreateTaskColumnsOptions<T extends TaskListRow> {\n labels: TaskListLabels\n renderName: (row: TaskGridRow<T>) => ReactNode\n /** Who has the next step. */\n renderOwner: (row: TaskGridRow<T>) => ReactNode\n renderDue: (row: TaskGridRow<T>) => ReactNode\n renderShared: (row: TaskGridRow<T>) => ReactNode\n /** The documents the task generated. */\n renderOutputs: (row: TaskGridRow<T>) => ReactNode\n /** A phone-width grid: the actions column is just the menu. */\n narrow?: boolean\n /** Whether the Outputs column is shown: only worth the room once some task has outputs. */\n showOutputs?: boolean\n renderStatus: (row: TaskGridRow<T>) => ReactNode\n /** Who is in the thread (Threads view). */\n renderActions: (row: TaskGridRow<T>) => ReactNode\n /** Plain text of the owner cell, for sorting, filters and the clipboard. */\n getOwnerName: (row: TaskGridRow<T>) => string\n}\n\n/** Grid-side comparator that keeps the table's order: the table sorts each level itself. */\nconst keepOrder = () => 0\n\n/** Columns the user can sort by, per view. */\nexport const SORTABLE_TASK_COLUMNS = [\n 'name',\n 'owner',\n 'due',\n 'status',\n 'updated',\n 'messages',\n] as const\nexport type SortableTaskColumn = (typeof SORTABLE_TASK_COLUMNS)[number]\n\n/** The cell renderer for a slot: a missing row (AG Grid's loading shell) renders nothing. */\nfunction cell<T extends TaskListRow>(render: (row: TaskGridRow<T>) => ReactNode) {\n return (params: ICellRendererParams<TaskGridRow<T>>): ReactNode =>\n params.data ? render(params.data) : null\n}\n\nexport function createTaskColumns<T extends TaskListRow>(\n o: CreateTaskColumnsOptions<T>\n): ColDef<TaskGridRow<T>>[] {\n const l = o.labels\n const sortable = {\n sortable: true,\n comparator: keepOrder,\n sortingOrder: ['asc' as const, 'desc' as const, null],\n }\n const base: Partial<ColDef<TaskGridRow<T>>> = {\n sortable: false,\n suppressMovable: true,\n // Keyboard focus lands on the name cell only (arrow keys expand and collapse sub-tasks there).\n suppressNavigable: true,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n const name: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'name',\n ...sortable,\n suppressNavigable: false,\n headerName: l.colTask,\n flex: 3,\n minWidth: 200,\n cellRenderer: cell(o.renderName),\n }\n const shared: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width: 90,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'center' },\n valueGetter: (p) => p.data?.task.is_shared ?? false,\n cellRenderer: cell(o.renderShared),\n }\n const actions = (): ColDef<TaskGridRow<T>> => ({\n ...base,\n colId: 'actions',\n headerName: '',\n // Always in view, even if the rest has to scroll.\n pinned: 'right',\n lockPinned: true,\n width: o.narrow ? NARROW_ACTIONS_WIDTH : ACTIONS_WIDTH,\n minWidth: NARROW_ACTIONS_WIDTH,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end' },\n cellRenderer: cell(o.renderActions),\n })\n\n // Left to right: the title, who has the next step, when, how it stands, then who sees it and the\n // thread link, with the actions (Approve included) last, at the right edge.\n return [\n name,\n {\n ...base,\n colId: 'owner',\n ...sortable,\n headerName: l.colOwner,\n headerTooltip: l.ownerHint,\n flex: 1.4,\n minWidth: 150,\n valueGetter: (p) => (p.data ? o.getOwnerName(p.data) : ''),\n cellRenderer: cell(o.renderOwner),\n },\n {\n ...base,\n colId: 'due',\n ...sortable,\n headerName: l.colDue,\n flex: 1,\n minWidth: 140,\n valueGetter: (p) => p.data?.task.due_at ?? '',\n cellRenderer: cell(o.renderDue),\n },\n {\n ...base,\n colId: 'status',\n ...sortable,\n headerName: l.colStatus,\n // Wide enough for \"Ready for review\" and \"Waiting for access\" in full, with the elapsed time.\n flex: 1.3,\n minWidth: 170,\n valueGetter: (p) => p.data?.task.status ?? '',\n cellRenderer: cell(o.renderStatus),\n },\n ...(o.showOutputs\n ? [\n {\n ...base,\n colId: 'outputs',\n headerName: l.colOutputs,\n flex: 1.2,\n minWidth: 130,\n cellRenderer: cell(o.renderOutputs),\n } as ColDef<TaskGridRow<T>>,\n ]\n : []),\n shared,\n actions(),\n ]\n}\n","/**\n * Drop the least useful columns as a grid gets narrower, so the actions column (Approve, Run, the menu)\n * is never pushed off the edge. Each rule keeps its column while the grid is at least `minWidth` wide.\n */\nimport type { GridApi } from 'ag-grid-community'\n\nexport interface ColumnWidthRule {\n colId: string\n /** The narrowest grid (px) that still shows the column. */\n minWidth: number\n}\n\nexport function applyColumnWidthRules(\n api: Pick<GridApi, 'getColumn' | 'setColumnsVisible'>,\n gridWidth: number,\n rules: readonly ColumnWidthRule[]\n): void {\n for (const rule of rules) {\n if (api.getColumn(rule.colId)) api.setColumnsVisible([rule.colId], gridWidth >= rule.minWidth)\n }\n}\n","import type { TaskStatusKey } from './taskLabels'\n\nexport interface TaskListLabels {\n agent: string\n filterAll: string\n emptyTitle: string\n emptyMessage: string\n noMatches: string\n due: (when: string) => string\n overdue: (when: string) => string\n colTask: string\n colOwner: string\n ownerHint: string\n colOutputs: string\n changeOwner: string\n changeOwnerTitle: (taskName: string) => string\n changeOwnerMe: string\n preparedBy: (agentName: string) => string\n colDue: string\n colStatus: string\n me: string\n someone: string\n noDue: string\n colShared: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n goalMet: (met: number, total: number) => string\n subtasksDone: (done: number, total: number) => string\n expandSubtasks: string\n collapseSubtasks: string\n selectAll: string\n selectTask: (name: string) => string\n markDone: string\n reopen: string\n markDoneMany: string\n markDoneManyHint: string\n deleteMany: string\n approve: string\n moveTo: string\n untitled: string\n fromWorkflow: (workflowName: string) => string\n searchLabel: string\n searchPlaceholder: string\n expandAll: string\n collapseAll: string\n moveToTitle: (taskName: string) => string\n moveToNone: string\n moveToSearch: string\n moveToEmpty: string\n moveToCancel: string\n subtasksSelected: (count: number) => string\n addSubtask: string\n edit: string\n rename: string\n delete: string\n grantAccess: string\n allowAccess: string\n moreActions: string\n activity: string\n /** Status tooltip: the latest step, how long ago, and who it is for. */\n statusHint: (status: string, ago: string, forWho?: string) => string\n status: Partial<Record<TaskStatusKey, string>>\n}\n\nexport const DEFAULT_TASK_LIST_LABELS: TaskListLabels = {\n filterAll: 'All',\n emptyTitle: 'No tasks yet',\n emptyMessage:\n 'Use New to add one: just type what you need, or fill in an owner and a due date. Automations that create tasks live on the Workflows page. You always decide when a task is done.',\n noMatches: 'No tasks match.',\n due: (when) => when,\n overdue: (when) => `${when} · overdue`,\n agent: 'Agent',\n colTask: 'Task',\n colOwner: 'Owner',\n ownerHint: 'Who has the next step. They are notified when the previous step finishes.',\n colOutputs: 'Outputs',\n changeOwner: 'Change owner…',\n changeOwnerTitle: (name) => `Who has the next step on “${name}”?`,\n changeOwnerMe: 'Me',\n preparedBy: (agent) => `Prepared by ${agent}`,\n colDue: 'Due',\n colStatus: 'Status',\n me: 'Me',\n someone: 'Someone',\n noDue: '—',\n colShared: 'Shared',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n goalMet: (met, total) => `${met}/${total} met`,\n subtasksDone: (done, total) => `${done}/${total} sub-tasks done`,\n expandSubtasks: 'Show sub-tasks',\n collapseSubtasks: 'Hide sub-tasks',\n selectAll: 'Select all tasks',\n selectTask: (name) => `Select ${name}`,\n markDone: 'Mark done',\n reopen: 'Reopen',\n markDoneMany: 'Mark done',\n markDoneManyHint: 'Marks your own to-dos done. Agent work is finished by reviewing it.',\n deleteMany: 'Delete',\n approve: 'Approve',\n moveTo: 'Move to…',\n untitled: 'Untitled task',\n fromWorkflow: (name) => `From “${name}”`,\n searchLabel: 'Search tasks',\n searchPlaceholder: 'Search tasks…',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n moveToTitle: (name) => `Move “${name}” to…`,\n moveToNone: 'No parent (top level)',\n moveToSearch: 'Search tasks…',\n moveToEmpty: 'No task to move it under.',\n moveToCancel: 'Cancel',\n subtasksSelected: (count) => `${count} ${count === 1 ? 'sub-task' : 'sub-tasks'} included`,\n addSubtask: 'Add sub-task',\n edit: 'Edit',\n rename: 'Rename',\n delete: 'Delete',\n grantAccess: 'Allow access and continue',\n allowAccess: 'Allow access',\n moreActions: 'More actions',\n activity: 'Activity',\n statusHint: (status, ago, forWho) =>\n [status, ago, forWho && `for ${forWho}`].filter(Boolean).join(' · '),\n status: {},\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { CellKeyDownEvent, GridApi, GridOptions } from 'ag-grid-community'\nimport {\n ChevronDown,\n ChevronRight,\n ChevronsDownUp,\n ChevronsUpDown,\n CheckCheck,\n KeyRound,\n ListTodo,\n Trash2,\n Workflow,\n} from 'lucide-react'\nimport { Button, Input, VisibilityToggle, cn } from '@arbidocs/react/ui'\nimport { EmptyState } from '../../components/EmptyState'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskOutputsCell, type TaskOutput, type TaskOutputsCellLabels } from './TaskOutputsCell'\nimport { TaskMoveDialog } from './TaskMoveDialog'\nimport { TaskReviewActions, type TaskReviewActionsLabels } from './TaskReviewActions'\nimport { TaskRowMenu } from './TaskRowMenu'\nimport {\n DEFAULT_TASK_STATUS_PILL_LABELS,\n TaskStatusPill,\n type TaskStatusPillLabels,\n} from './TaskStatusPill'\nimport type { TaskThreadChipLabels } from './TaskThreadChip'\nimport { createTaskColumns, type SortableTaskColumn } from './taskColumns'\nimport { applyColumnWidthRules, type ColumnWidthRule } from './gridWidth'\nimport { STATUS_LABELS, STATUS_ORDER, asTaskStatus, goalProgress } from './taskLabels'\nimport {\n buildTaskRows,\n ownerExtId,\n descendantIds,\n indexTasks,\n isPlainTodo,\n moveTargets,\n type TaskFilter,\n type TaskGridRow,\n type TaskListRow,\n} from './taskRows'\nimport { DEFAULT_TASK_LIST_LABELS, type TaskListLabels } from './taskTableLabels'\n\nexport interface TaskTableProps<T extends TaskListRow> {\n /** The workspace's tasks: the conversations that have a status (the host drops plain chats). */\n tasks: T[]\n isLoading?: boolean\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Open the task's thread (its conversation). */\n onOpenThread: (conversationId: string, task: T) => void\n /** A person marks a plain to-do done / reopens a finished one / accepts prepared work. */\n onMarkDone: (task: T) => void\n onReopen: (task: T) => void\n onApprove: (task: T) => void\n onRequestChanges: (task: T, feedback: string) => void\n /** Ask another person to sign the task off (shown with `people`). */\n onRequestApproval?: (task: T, userId: string, note: string) => void\n /** People who can be asked to approve (humans only); also names the sign-off column. */\n people?: { id: string; label: string }[]\n /** Agent names by id, for the Assigned to column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Workflow names by id: names a task whose title the run has not generated yet, and its origin chip. */\n workflowNames?: Record<string, string>\n /**\n * How a person appears in the Assigned to and Sign-off columns. Defaults to the app's user pill from\n * `@arbidocs/react`; a host with presence and direct messages passes its own.\n */\n renderPerson?: (person: TaskPerson) => ReactNode\n /** Share a task with the workspace or make it private (the shared/private toggle appears with it). */\n onToggleShared?: (task: T, shouldShare: boolean) => void\n onEdit: (task: T) => void\n onDelete: (task: T) => void\n /** Start a new task that is a child of this one. */\n onAddSubtask?: (task: T) => void\n /** Re-parent a task (`null` = top level). With it, the row menu offers \"Move to…\". */\n onMove?: (task: T, parentId: string | null) => void\n /** Bulk actions on the selected rows (the selection bar shows only the ones provided). */\n onMarkDoneMany?: (tasks: T[]) => void\n onDeleteMany?: (tasks: T[]) => void\n /** When set, a run waiting for access shows a one-click \"allow access\" action. */\n onGrantAccess?: (task: T) => void\n /** Task id with a request in flight: its row disables its actions. */\n busyId?: string | null\n /** Slot above the table (e.g. a live-runs banner). */\n header?: ReactNode\n /**\n * Extra bulk actions for the selection bar (an export, a share): called with the selected tasks, whether\n * the bar is compact, and a function that clears the selection.\n */\n selectionActions?: (selected: T[], isCompact: boolean, clearSelection: () => void) => ReactNode\n /** Text from outside the table (a topbar filter) that narrows the rows like the search box does. */\n filterText?: string\n /**\n * The viewer edits the workspace (owner or collaborator): a row they do not own is always shared, and\n * they may then edit, run, move and add sub-tasks to it. The share toggle, Delete and Allow access stay\n * with the row's owner, and Approve with its sign-off person. A guest leaves this off and only reads.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with a row's creator, the only one who deletes it. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /**\n * Hand a task to someone: its owner (who has the next step) becomes `userId`, and they are notified;\n * `null` hands it back to the viewer. Shown in the row menu as \"Change owner…\" with `people`.\n */\n onChangeOwner?: (task: T, userId: string | null) => void\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n labels?: Partial<TaskListLabels>\n testId?: string\n statusPillLabels?: Partial<TaskStatusPillLabels>\n threadChipLabels?: Partial<TaskThreadChipLabels>\n /** Generated documents per task id (latest versions only); a task with none shows a dash. */\n outputsByTask?: Record<string, readonly TaskOutput[]>\n /** Open one generated document (Tasks view's Outputs column). */\n onOpenOutput?: (documentId: string, task: T) => void\n outputsLabels?: Partial<TaskOutputsCellLabels>\n /** Open a task's activity timeline (row menu: \"Activity\"). */\n onOpenActivity?: (task: T) => void\n /** \"2 min ago\" for the status tooltip; without it the tooltip is left out. */\n formatRelative?: (iso: string) => string\n reviewLabels?: Partial<TaskReviewActionsLabels>\n}\n\nconst ROW_HEIGHT = 56\n/** Taller on a phone, where the status sits under the title. */\nconst NARROW_ROW_HEIGHT = 76\n/** Sub-tasks stop indenting after this depth (the table stays readable at any nesting). */\nconst MAX_INDENT_DEPTH = 4\n/** Above this many rows the grid stops animating row changes. */\nconst ANIMATE_ROWS_UP_TO = 500\n\n/** Below this grid width the table is one column and a menu. */\nconst NARROW_GRID = 640\n\n/** What goes first as the grid narrows (the grid is the page minus the sidebar). */\nconst WIDTH_RULES: readonly ColumnWidthRule[] = [\n { colId: 'shared', minWidth: 1050 },\n { colId: 'due', minWidth: 850 },\n { colId: 'outputs', minWidth: 930 },\n { colId: 'owner', minWidth: 730 },\n { colId: 'status', minWidth: NARROW_GRID },\n]\n\ntype Row<T extends TaskListRow> = TaskGridRow<T>\n\n/** The tooltip on the status pill: the latest step, how long ago, and (for review) who it waits on. */\nfunction statusHint<T extends TaskListRow>(\n task: T,\n ctx: {\n props: TaskTableProps<T>\n l: TaskListLabels\n owner: (task: T) => TaskPerson\n }\n): string | undefined {\n const { props: p, l, owner } = ctx\n if (!p.formatRelative || !task.updated_at) return undefined\n const key = asTaskStatus(task.status)\n const pill = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...p.statusPillLabels }\n const label = task.pending_auth_request_id ? pill.waitingForAccess : STATUS_LABELS[key]\n return l.statusHint(\n label,\n p.formatRelative(task.updated_at),\n key === 'ready_for_review' ? owner(task).label : undefined\n )\n}\n\n/**\n * The tasks of a workspace as a person's work list, in the same grid as every other list in the app:\n * what needs review first, then what an agent is generating, plain to-dos and, last, what is done.\n * Sub-tasks sit indented under their parent. Rows are selected with the grid's checkboxes (shift-click\n * for a range; ticking a parent ticks its sub-tasks) and acted on from the selection bar. Agents prepare\n * work; only a person closes it.\n */\nexport function TaskTable<T extends TaskListRow>(props: TaskTableProps<T>) {\n const { tasks: allTasks, isLoading, busyId, header, testId } = props\n const l: TaskListLabels = {\n ...DEFAULT_TASK_LIST_LABELS,\n ...props.labels,\n status: { ...STATUS_LABELS, ...props.labels?.status },\n }\n const [filter, setFilter] = useState<TaskFilter>('all')\n const [query, setQuery] = useState('')\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set())\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set())\n const [sort, setSort] = useState<{ colId: SortableTaskColumn; dir: 'asc' | 'desc' } | null>(null)\n const [moving, setMoving] = useState<T | null>(null)\n const [handingOff, setHandingOff] = useState<T | null>(null)\n const tasks = allTasks\n const apiRef = useRef<GridApi<Row<T>> | null>(null)\n // A phone-width grid: one column and a menu, the status under the title (see onGridSizeChanged).\n const [narrow, setNarrow] = useState(false)\n const rowCache = useRef(new Map<string, Row<T>>())\n\n const tree = useMemo(() => indexTasks(tasks), [tasks])\n const peopleNames = useMemo(\n () => new Map((props.people ?? []).map((p) => [p.id, p.label])),\n [props.people]\n )\n /** What a task is called: its title, else the workflow that made it, else \"Untitled\". */\n const nameOf = (task: T): string =>\n task.title?.trim() ||\n (task.workflow_ext_id && props.workflowNames?.[task.workflow_ext_id]) ||\n l.untitled\n /** Who has the next step: the sign-off person if there is one, else the creator. */\n const owner = (task: T): TaskPerson => {\n const id = ownerExtId(task)\n const mine = task.signoff_ext_id ? Boolean(task.can_signoff) : task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n /** Who started a thread. */\n const starter = (task: T): TaskPerson => {\n const id = task.created_by_ext_id ?? task.owner_ext_id\n const mine = task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n const renderPerson =\n props.renderPerson ?? ((person: TaskPerson) => <PersonPill person={person} />)\n\n const q = (query.trim() || (props.filterText ?? '').trim()).toLowerCase()\n const counts = useMemo(() => {\n const map = new Map<string, number>(STATUS_ORDER.map((s) => [s, 0]))\n let all = 0\n for (const task of tasks) {\n const text = `${nameOf(task)} ${task.description ?? ''}`.toLowerCase()\n if (q && !text.includes(q)) continue\n all += 1\n const s = asTaskStatus(task.status)\n map.set(s, (map.get(s) ?? 0) + 1)\n }\n map.set('all', all)\n return map\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks, q, props.workflowNames, l.untitled])\n\n const compare = useMemo(() => {\n if (!sort) return undefined\n // A sort key is computed once per task, not once per comparison.\n const keys = new Map<T, string | number>()\n const compute = (t: T): string | number => {\n switch (sort.colId) {\n case 'name':\n return nameOf(t).toLowerCase()\n case 'owner':\n return owner(t).label.toLowerCase()\n case 'updated':\n return t.updated_at ? Date.parse(t.updated_at) : 0\n case 'messages':\n return t.message_count ?? 0\n case 'due':\n return t.due_at ? Date.parse(t.due_at) : Number.POSITIVE_INFINITY\n default:\n return STATUS_ORDER.indexOf(asTaskStatus(t.status))\n }\n }\n const key = (t: T): string | number => {\n let k = keys.get(t)\n if (k === undefined) {\n k = compute(t)\n keys.set(t, k)\n }\n return k\n }\n const sign = sort.dir === 'asc' ? 1 : -1\n return (a: T, b: T) => {\n const [x, y] = [key(a), key(b)]\n if (typeof x === 'number' && typeof y === 'number') return (x - y) * sign\n return String(x).localeCompare(String(y)) * sign\n }\n // The name lookups close over the people, agents and workflows the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n sort,\n peopleNames,\n props.agentNames,\n props.workflowNames,\n l.me,\n l.agent,\n l.someone,\n l.untitled,\n ])\n\n const rows = useMemo(\n () =>\n buildTaskRows(tasks, filter, collapsed, compare, {\n query: query.trim() || props.filterText,\n titleOf: nameOf,\n cache: rowCache.current,\n }),\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [tasks, filter, collapsed, compare, query, props.filterText, props.workflowNames, l.untitled]\n )\n\n // Selection lives here (the grid mirrors it), so a parent can carry its sub-tasks with it, even\n // the collapsed or filtered-out ones the grid does not show.\n const selectedRows = useMemo(\n () => rows.filter((r) => selectedIds.has(r.external_id)),\n [rows, selectedIds]\n )\n const selectedTasks = useMemo(\n () => tasks.filter((t) => selectedIds.has(t.external_id)),\n [tasks, selectedIds]\n )\n const subtasksIncluded = useMemo(\n () =>\n selectedTasks.filter((t) => {\n const parent = tree.parentOf.get(t.external_id)\n return parent !== undefined && selectedIds.has(parent)\n }).length,\n [selectedTasks, selectedIds, tree]\n )\n // Only a task is marked done: a plain chat has no status to finish.\n const markable = selectedTasks.filter(\n (t) =>\n t.status != null &&\n (t.is_owner !== false || props.canEditShared) &&\n isPlainTodo(t) &&\n asTaskStatus(t.status) !== 'done'\n )\n const deletable = selectedTasks.filter((t) => t.is_owner !== false || props.isWorkspaceOwner)\n\n const rowsRef = useRef(rows)\n rowsRef.current = rows\n const handleSelectionChange = (picked: Row<T>[]) => {\n const visible = new Set(rowsRef.current.map((r) => r.external_id))\n const pickedIds = new Set(picked.map((r) => r.external_id))\n setSelectedIds((prev) => {\n const added = [...pickedIds].filter((id) => !prev.has(id))\n const removed = [...prev].filter((id) => visible.has(id) && !pickedIds.has(id))\n if (added.length === 0 && removed.length === 0) return prev\n const next = new Set(prev)\n const nested = true\n for (const id of added) {\n next.add(id)\n if (nested) for (const d of descendantIds(tree, id)) next.add(d)\n }\n for (const id of removed) {\n next.delete(id)\n if (!nested) continue\n for (const d of descendantIds(tree, id)) next.delete(d)\n // A parent is no longer fully selected once one of its sub-tasks is not.\n for (let at = tree.parentOf.get(id); at; at = tree.parentOf.get(at)) next.delete(at)\n }\n return next\n })\n }\n\n const setExpanded = (id: string, expanded: boolean) =>\n setCollapsed((prev) => {\n if (prev.has(id) === !expanded) return prev\n const next = new Set(prev)\n if (expanded) next.delete(id)\n else next.add(id)\n return next\n })\n const expandAll = () => setCollapsed(new Set())\n const collapseAll = () => setCollapsed(new Set(tree.kids.keys()))\n\n // The column definitions are built once. Their cells read the latest props and lookups through\n // this ref, so a selection, a filter or an expand never makes the grid rebuild its columns.\n const latest = useRef({ props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow })\n latest.current = { props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow }\n\n // The Outputs column earns its room once some task has produced something.\n const showOutputs = Object.values(props.outputsByTask ?? {}).some((o) => o.length > 0)\n const columnDefs = useMemo(\n () =>\n createTaskColumns<T>({\n narrow,\n labels: l,\n getOwnerName: (row) => latest.current.owner(row.task).label,\n renderName: (row) => {\n const { l: lb, props: p, nameOf: name } = latest.current\n const { task, depth, childStats, expanded } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const goal = goalProgress(task)\n const workflowName = task.workflow_ext_id ? p.workflowNames?.[task.workflow_ext_id] : null\n return (\n <div\n className=\"flex min-w-0 flex-1 items-center gap-1.5\"\n style={\n depth > 0\n ? { paddingLeft: `${Math.min(depth, MAX_INDENT_DEPTH) * 1.5}rem` }\n : undefined\n }\n data-depth={depth}\n aria-level={depth + 1}\n aria-setsize={row.setSize}\n aria-posinset={row.posInSet}\n data-context={row.context || undefined}\n >\n {childStats ? (\n <button\n type=\"button\"\n onClick={() => latest.current.setExpanded(id, !expanded)}\n aria-expanded={expanded}\n aria-label={expanded ? lb.collapseSubtasks : lb.expandSubtasks}\n className=\"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n data-testid={`task-expand-${id}`}\n >\n {expanded ? (\n <ChevronDown className=\"size-4\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-4\" aria-hidden />\n )}\n </button>\n ) : depth > 0 ? (\n <span className=\"size-5 shrink-0\" aria-hidden />\n ) : null}\n <div className=\"min-w-0 flex-1 leading-tight\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => latest.current.props.onOpenThread(id, task)}\n // The agent that prepared the work is not a column: it is named here, on hover.\n title={\n task.agent_ext_id\n ? lb.preparedBy(p.agentNames?.[task.agent_ext_id] || lb.agent)\n : undefined\n }\n className={cn(\n // The title has priority: it keeps at least 12 characters before it ellipsises.\n 'min-w-[12ch] truncate text-left text-sm font-medium hover:underline focus-visible:underline focus-visible:outline-none',\n status === 'done' && 'text-muted-foreground line-through'\n )}\n data-testid={`task-name-${id}`}\n >\n {name(task)}\n </button>\n {goal && (\n <ToneBadge\n tone={goal.done ? 'success' : 'neutral'}\n data-testid={`task-goal-progress-${id}`}\n >\n {goal.done ? '✓ ' : ''}\n {lb.goalMet(goal.met, goal.total)}\n </ToneBadge>\n )}\n </div>\n {/* A phone has no Status column: the status sits under the title. */}\n {latest.current.narrow && (\n <div className=\"pt-0.5\">\n <TaskStatusPill\n id={id}\n status={status}\n runStartedAt={task.run_started_at}\n lastError={task.last_error}\n awaitingAccess={Boolean(task.pending_auth_request_id)}\n labels={p.statusPillLabels}\n />\n </div>\n )}\n {/* Second line: what it is (or where it came from) and the sub-task count, which never\n squeezes the title above it. */}\n {(task.description || workflowName || childStats) && (\n <div className=\"flex min-w-0 items-center gap-2 text-xs text-muted-foreground\">\n {task.description ? (\n <p className=\"min-w-0 truncate\">{task.description}</p>\n ) : workflowName ? (\n <span\n className=\"inline-flex min-w-0 items-center gap-1.5\"\n data-testid={`task-workflow-${id}`}\n >\n <Workflow className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{lb.fromWorkflow(workflowName)}</span>\n </span>\n ) : null}\n {childStats && (\n <span\n className=\"shrink-0 tabular-nums\"\n data-testid={`task-subtask-progress-${id}`}\n >\n {lb.subtasksDone(childStats.done, childStats.total)}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n )\n },\n // Who has the next step: the person pill, with the \"Me\" treatment. A plain chat is its starter's.\n renderOwner: (row) => (\n <span data-testid={`task-owner-${row.external_id}`} className=\"flex min-w-0\">\n {latest.current.renderPerson(\n row.task.status ? latest.current.owner(row.task) : latest.current.starter(row.task)\n )}\n </span>\n ),\n renderDue: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const dueMs = task.due_at ? Date.parse(task.due_at) : NaN\n const overdue =\n asTaskStatus(task.status) !== 'done' && !Number.isNaN(dueMs) && dueMs < Date.now()\n return (\n <span\n className={cn(\n 'truncate text-sm',\n overdue ? 'font-medium text-red-text' : 'text-muted-foreground'\n )}\n data-testid={`task-due-${task.external_id}`}\n data-overdue={overdue}\n >\n {task.due_at\n ? overdue\n ? lb.overdue(p.formatDate(task.due_at))\n : lb.due(p.formatDate(task.due_at))\n : lb.noDue}\n </span>\n )\n },\n renderShared: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n // A teammate cannot change the owner's visibility choice.\n if (!p.onToggleShared) return null\n return (\n <VisibilityToggle\n items={{ shared: task.is_shared ?? false }}\n onToggle={(shouldShare) => latest.current.props.onToggleShared?.(task, shouldShare)}\n disabled={task.is_owner === false}\n disabledTooltip={lb.sharedOwnerOnly}\n showLabel={false}\n data-testid={`task-shared-${task.external_id}`}\n />\n )\n },\n showOutputs,\n renderOutputs: (row) => (\n <TaskOutputsCell\n id={row.external_id}\n outputs={latest.current.props.outputsByTask?.[row.external_id]}\n onOpen={(docId) => latest.current.props.onOpenOutput?.(docId, row.task)}\n labels={latest.current.props.outputsLabels}\n />\n ),\n renderStatus: (row) => (\n <TaskStatusPill\n id={row.external_id}\n status={asTaskStatus(row.task.status)}\n runStartedAt={row.task.run_started_at}\n lastError={row.task.last_error}\n awaitingAccess={Boolean(row.task.pending_auth_request_id)}\n labels={latest.current.props.statusPillLabels}\n hint={statusHint(row.task, latest.current)}\n />\n ),\n renderActions: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const busy = p.busyId === id\n const isOwner = task.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n const reviewActions = (closeMenu?: () => void) =>\n status === 'ready_for_review' ? (\n <TaskReviewActions\n id={id}\n busy={busy}\n quiet\n canApprove={task.signoff_ext_id ? Boolean(task.can_signoff) : isOwner}\n canRequestChanges={\n Boolean(task.agent_ext_id || task.has_agent_action || task.skill_ref) && canEdit\n }\n onApprove={() => {\n p.onApprove(task)\n closeMenu?.()\n }}\n onRequestChanges={(feedback) => {\n p.onRequestChanges(task, feedback)\n closeMenu?.()\n }}\n onRequestApproval={\n p.onRequestApproval\n ? (userId, note) => {\n p.onRequestApproval?.(task, userId, note)\n closeMenu?.()\n }\n : undefined\n }\n people={p.people}\n compact\n labels={p.reviewLabels}\n />\n ) : null\n return (\n <div className=\"flex items-center justify-end gap-2\">\n {!latest.current.narrow && reviewActions()}\n {!latest.current.narrow &&\n isOwner &&\n task.pending_auth_request_id &&\n p.onGrantAccess && (\n <Button\n size=\"sm\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n onClick={() => p.onGrantAccess?.(task)}\n data-testid={`task-allow-access-${id}`}\n >\n <KeyRound className=\"size-3.5\" aria-hidden />\n {lb.allowAccess}\n </Button>\n )}\n <TaskRowMenu\n reviewActions={\n latest.current.narrow && status === 'ready_for_review' ? reviewActions : undefined\n }\n task={task}\n status={status}\n busy={busy}\n isOwner={isOwner}\n canAdmin={canAdmin}\n canEdit={canEdit}\n labels={lb}\n onMarkDone={() => p.onMarkDone(task)}\n onReopen={() => p.onReopen(task)}\n onAddSubtask={p.onAddSubtask ? () => p.onAddSubtask?.(task) : undefined}\n onMoveTo={p.onMove ? () => setMoving(task) : undefined}\n onChangeOwner={\n p.onChangeOwner && p.people?.length ? () => setHandingOff(task) : undefined\n }\n onEdit={() => p.onEdit(task)}\n onDelete={() => p.onDelete(task)}\n onOpenActivity={p.onOpenActivity ? () => p.onOpenActivity?.(task) : undefined}\n onGrantAccess={p.onGrantAccess ? () => p.onGrantAccess?.(task) : undefined}\n />\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colTask,\n l.colOwner,\n l.colDue,\n l.colStatus,\n l.colShared,\n l.colOutputs,\n l.shared,\n showOutputs,\n narrow,\n ]\n )\n\n // Cells read their data through `latest`, so a change in the lookups they draw from (people, agents,\n // workflow names, the row in flight) redraws the cells once, rather than on every interaction.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.people,\n props.agentNames,\n props.workflowNames,\n props.outputsByTask,\n props.renderPerson,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n narrow,\n ])\n\n const animate = rows.length <= ANIMATE_ROWS_UP_TO\n const gridOptions = useMemo<Partial<GridOptions<Row<T>>>>(\n () => ({\n suppressClickEdit: true,\n // Keyboard focus lives on the name column only (the others are not navigable): ArrowRight\n // opens a task's sub-tasks and ArrowLeft closes them, or steps up to the parent.\n suppressCellFocus: false,\n suppressColumnVirtualisation: true,\n animateRows: animate,\n getRowClass: (p) => (p.data?.context ? 'opacity-60' : undefined),\n // The grid shows and reports the sort; the table orders each level (see buildTaskRows).\n onSortChanged: (event) => {\n const sorted = event.api.getColumnState().find((c) => c.sort)\n setSort(\n sorted?.colId\n ? { colId: sorted.colId as SortableTaskColumn, dir: sorted.sort ?? 'asc' }\n : null\n )\n },\n onGridSizeChanged: (event) => {\n applyColumnWidthRules(event.api, event.clientWidth, WIDTH_RULES)\n setNarrow(event.clientWidth < NARROW_GRID)\n },\n onCellKeyDown: (event: CellKeyDownEvent<Row<T>>) => {\n const row = event.data\n const key = (event.event as KeyboardEvent | null)?.key\n if (!row || event.column.getColId() !== 'name') return\n if (key === 'ArrowRight' && row.childStats && !row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, true)\n } else if (key === 'ArrowLeft') {\n if (row.childStats && row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, false)\n } else if (row.parentId) {\n event.event?.preventDefault()\n const parent = event.api.getRowNode(row.parentId)\n if (parent?.rowIndex != null) {\n event.api.ensureIndexVisible(parent.rowIndex)\n event.api.setFocusedCell(parent.rowIndex, 'name')\n }\n }\n }\n },\n }),\n [animate]\n )\n\n const clearSelection = () => setSelectedIds(new Set())\n // A Chat chip only once there is a plain chat, so the chips add up to All.\n const filterKeys = (['all', ...STATUS_ORDER] as TaskFilter[]).filter(\n (key) => key !== 'chat' || (counts.get(key) ?? 0) > 0\n )\n const hasChildren = tree.kids.size > 0\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col gap-3\"\n data-testid={testIdOr(testId, { testId: 'task-list' })}\n >\n {header}\n <div className=\"flex flex-wrap items-center gap-2\">\n <div role=\"tablist\" aria-label=\"Filter tasks\" className=\"flex flex-wrap gap-1.5\">\n {filterKeys.map((key) => {\n const count = counts.get(key) ?? 0\n const isSelected = filter === key\n return (\n <button\n key={key}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n onClick={() => setFilter(key)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11',\n isSelected\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border text-muted-foreground hover:bg-accent'\n )}\n data-testid={`task-filter-${key}`}\n >\n {key === 'all' ? l.filterAll : l.status[key]}\n <span className=\"tabular-nums opacity-70\">{count}</span>\n </button>\n )\n })}\n </div>\n <Input\n type=\"search\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={l.searchPlaceholder}\n aria-label={l.searchLabel}\n className=\"h-8 max-w-56 text-xs pointer-coarse:h-11\"\n data-testid=\"task-search\"\n />\n {hasChildren && (\n <div className=\"ml-auto flex gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={expandAll}\n data-testid=\"task-expand-all\"\n >\n <ChevronsUpDown className=\"size-3.5\" aria-hidden />\n {l.expandAll}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={collapseAll}\n data-testid=\"task-collapse-all\"\n >\n <ChevronsDownUp className=\"size-3.5\" aria-hidden />\n {l.collapseAll}\n </Button>\n </div>\n )}\n </div>\n {tasks.length === 0 && !isLoading ? (\n <EmptyState\n icon={ListTodo}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"task-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<Row<T>>\n testId=\"task-grid\"\n gridId={props.gridId ?? 'tasks-grid-v4'}\n items={rows}\n columnDefs={columnDefs}\n getItemId={(row) => row.external_id}\n getRowTestId={(row) => `task-row-${row.external_id}`}\n isLoading={isLoading}\n showEmpty={rows.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={narrow ? NARROW_ROW_HEIGHT : ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n selection={{\n mode: 'multiple',\n controlled: true,\n selected: selectedRows,\n onSelectionChange: handleSelectionChange,\n }}\n gridOptions={gridOptions}\n />\n </div>\n )}\n <SelectionBar\n count={selectedTasks.length}\n onClear={clearSelection}\n status={\n selectedTasks.length > 0 && subtasksIncluded > 0 ? (\n <span className=\"text-xs text-muted-foreground\" data-testid=\"task-selection-subtasks\">\n {l.subtasksSelected(subtasksIncluded)}\n </span>\n ) : undefined\n }\n >\n {(isCompact) => (\n <>\n {props.selectionActions?.(selectedTasks, isCompact, clearSelection)}\n {props.onMarkDoneMany && (\n <SelectionBarAction\n icon={CheckCheck}\n label={l.markDoneMany}\n onClick={() => {\n props.onMarkDoneMany?.(markable)\n clearSelection()\n }}\n disabled={markable.length === 0}\n isCompact={isCompact}\n tooltip={l.markDoneManyHint}\n testId=\"task-bulk-done\"\n />\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.deleteMany}\n onClick={() => {\n props.onDeleteMany?.(deletable)\n clearSelection()\n }}\n disabled={deletable.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"task-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n {handingOff && props.onChangeOwner && (\n <TaskMoveDialog\n open\n onOpenChange={(open) => !open && setHandingOff(null)}\n options={(props.people ?? []).map((p) => ({ id: p.id, label: p.label }))}\n currentParentId={handingOff.signoff_ext_id}\n onPick={(userId) => props.onChangeOwner?.(handingOff, userId)}\n labels={{\n title: l.changeOwnerTitle(nameOf(handingOff)),\n none: l.changeOwnerMe,\n search: l.moveToSearch,\n empty: l.moveToEmpty,\n cancel: l.moveToCancel,\n }}\n testId=\"task-owner\"\n />\n )}\n {moving && props.onMove && (\n <TaskMoveDialog\n open\n onOpenChange={(open) => !open && setMoving(null)}\n options={moveTargets(tasks, moving).map((t) => ({ id: t.external_id, label: nameOf(t) }))}\n currentParentId={moving.parent_conversation_ext_id}\n onPick={(parentId) => props.onMove?.(moving, parentId)}\n labels={{\n title: l.moveToTitle(nameOf(moving)),\n none: l.moveToNone,\n search: l.moveToSearch,\n empty: l.moveToEmpty,\n cancel: l.moveToCancel,\n }}\n />\n )}\n </div>\n )\n}\n","import { X } from 'lucide-react'\nimport { Button, Input, Label } from '@arbidocs/react/ui'\n\nexport interface DueDateMenuLabels {\n today: string\n tomorrow: string\n nextMonday: string\n inAWeek: string\n pick: string\n clear: string\n}\n\nexport const DEFAULT_DUE_DATE_MENU_LABELS: DueDateMenuLabels = {\n today: 'Today',\n tomorrow: 'Tomorrow',\n nextMonday: 'Next Monday',\n inAWeek: 'In a week',\n pick: 'Or pick a date and time',\n clear: 'Clear date',\n}\n\n/** The end of the working day, which a quick choice means. */\nconst END_OF_DAY_HOUR = 17\n\nconst pad = (n: number) => String(n).padStart(2, '0')\n\n/** A date as the `datetime-local` value the form holds: \"2026-10-12T17:00\" (local time). */\nexport function toLocalInput(date: Date): string {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`\n}\n\nexport interface DuePreset {\n id: 'today' | 'tomorrow' | 'nextMonday' | 'inAWeek'\n value: string\n}\n\n/**\n * The quick choices, each at the end of the working day. \"Today\" is left out once that time has passed.\n * `now` is a parameter so the choices are testable.\n */\nexport function duePresets(now: Date = new Date()): DuePreset[] {\n const at = (daysAhead: number) => {\n const d = new Date(now)\n d.setDate(d.getDate() + daysAhead)\n d.setHours(END_OF_DAY_HOUR, 0, 0, 0)\n return d\n }\n const untilMonday = (8 - now.getDay()) % 7 || 7\n const presets: DuePreset[] = []\n if (now.getHours() < END_OF_DAY_HOUR) presets.push({ id: 'today', value: toLocalInput(at(0)) })\n presets.push(\n { id: 'tomorrow', value: toLocalInput(at(1)) },\n { id: 'nextMonday', value: toLocalInput(at(untilMonday)) },\n { id: 'inAWeek', value: toLocalInput(at(7)) }\n )\n return presets\n}\n\ninterface DueDateMenuProps {\n value: string\n onChange: (value: string) => void\n /** Keys the input's id and test ids. */\n id: string\n /** The accessible name of the date input. */\n label: string\n labels?: Partial<DueDateMenuLabels>\n}\n\n/** The body of a due-date popover: quick choices first, the exact date and time for the rest. */\nexport function DueDateMenu({ value, onChange, id, label, labels }: DueDateMenuProps) {\n const l = { ...DEFAULT_DUE_DATE_MENU_LABELS, ...labels }\n return (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-menu`}>\n <div className=\"flex flex-wrap gap-1.5\">\n {duePresets().map((preset) => (\n <Button\n key={preset.id}\n type=\"button\"\n variant={value === preset.value ? 'secondary' : 'outline'}\n size=\"sm\"\n className=\"h-8 pointer-coarse:h-11\"\n onClick={() => onChange(preset.value)}\n data-testid={`${id}-preset-${preset.id}`}\n >\n {l[preset.id]}\n </Button>\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <Label htmlFor={`${id}-input`} className=\"sr-only\">\n {label}\n </Label>\n <Input\n id={`${id}-input`}\n type=\"datetime-local\"\n aria-label={l.pick}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n data-testid={id}\n />\n {value && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.clear}\n onClick={() => onChange('')}\n >\n <X className=\"size-4\" aria-hidden />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { Check, ChevronDown } from 'lucide-react'\nimport {\n Command,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n EntityPill,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface PillOption {\n id: string\n label: string\n /** Small line after the label in the list (e.g. a role). */\n description?: string\n /** Glyph before the label in the list and, when chosen, on the pill. */\n icon?: ReactNode\n}\n\nexport interface PillSelectLabels {\n /** The search box placeholder. */\n search: string\n /** Shown when the search matches nothing. */\n empty: string\n}\n\nexport const DEFAULT_PILL_SELECT_LABELS: PillSelectLabels = {\n search: 'Search…',\n empty: 'No match.',\n}\n\nexport interface PillSelectProps {\n /** The pill's glyph when nothing (or an option without its own icon) is chosen. */\n icon: ReactNode\n /** Names the property on the pill: \"Sign-off: Me\". */\n prefix: string\n /** The chosen option id; `''` is the \"none\" entry when `noneOption` is set. */\n value: string\n options: PillOption[]\n onChange: (id: string) => void\n /** Adds an entry that clears the choice (id `''`), e.g. \"Me\" or \"Nothing\". */\n noneOption?: PillOption\n /** Show a search box (for long lists such as people or tasks). */\n searchable?: boolean\n disabled?: boolean\n testId?: string\n labels?: Partial<PillSelectLabels>\n className?: string\n}\n\n/**\n * A property as a pill that opens a list, like every other entity reference in the app: the pill shows\n * `Prefix: choice`, the popover lists the options (searchable when long), one is chosen and it closes.\n */\nexport function PillSelect({\n icon,\n prefix,\n value,\n options,\n onChange,\n noneOption,\n searchable = false,\n disabled = false,\n testId,\n labels,\n className,\n}: PillSelectProps) {\n const l = { ...DEFAULT_PILL_SELECT_LABELS, ...labels }\n const [open, setOpen] = useState(false)\n const all = noneOption ? [noneOption, ...options] : options\n const chosen = all.find((o) => o.id === value)\n const id = testIdOr(testId, { testId: 'pill-select' })\n\n const choose = (next: string) => {\n onChange(next)\n setOpen(false)\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n <EntityPill\n icon={chosen?.icon ?? icon}\n label={`${prefix}: ${chosen?.label ?? ''}`.replace(/: $/, '')}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n disabled={disabled}\n labelMaxWidth=\"max-w-[220px]\"\n className={cn('h-7 pointer-coarse:min-h-11', className)}\n data-testid={id}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-64 p-0\" data-testid={`${id}-list`}>\n <Command>\n {searchable && <CommandInput placeholder={l.search} data-testid={`${id}-search`} />}\n <CommandList>\n <CommandEmpty>{l.empty}</CommandEmpty>\n {all.map((o) => (\n <CommandItem\n key={o.id || '__none__'}\n value={`${o.label} ${o.description ?? ''}`}\n onSelect={() => choose(o.id)}\n data-testid={`${id}-option-${o.id || 'none'}`}\n >\n <span className=\"mr-2 flex size-4 shrink-0 items-center justify-center\">\n {o.icon}\n </span>\n <span className=\"min-w-0 flex-1 truncate\">{o.label}</span>\n {o.description && (\n <span className=\"ml-2 shrink-0 text-xs text-muted-foreground\">\n {o.description}\n </span>\n )}\n {o.id === value && <Check className=\"ml-2 size-4 shrink-0\" aria-hidden />}\n </CommandItem>\n ))}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n}\n","/**\n * TaskComposer values to API requests (and back): the pure mapping every host would write the same\n * way. No SDK call is made here; hand the result to the hooks from `@arbidocs/react`.\n *\n * \"Now\" (or a plain to-do) creates work: a conversation with a status (`useCreateWork`). Any other\n * start (a date, a repeat, an event, after another task) saves a workflow (`useCreateWorkflow`) that\n * creates the work when it fires.\n */\nimport type { components } from '@arbidocs/client'\nimport { composeWorkflowPrompt, type WorkflowComposeContext } from '../workflows/workflow'\nimport type { WorkflowDefinition, WorkflowInputs } from '../workflows/types'\nimport type { TaskComposerValues, TaskWhen } from './taskComposerTypes'\n\ntype Schemas = components['schemas']\ntype ConversationResponse = Schemas['ConversationResponse']\ntype CreateWorkRequest = Schemas['CreateWorkRequest']\ntype CreateWorkflowRequest = Schemas['CreateWorkflowRequest']\ntype TaskPlan = Schemas['TaskPlan']\ntype TaskOptions = Schemas['TaskOptions']\ntype UpdateConversationRequest = Schemas['UpdateConversationRequest']\ntype UpdateWorkflowRequest = Schemas['UpdateWorkflowRequest']\ntype WorkflowResponse = Schemas['WorkflowResponse']\n\n/** The authorization tier of a run (the same three values for work and for workflows). */\nexport type TaskAuthMode = CreateWorkRequest['auth_mode']\n\n/**\n * The plain-language access choice becomes the backend authorisation tier: run-now work is\n * authorised for that one run, a workflow either keeps standing access or asks each run.\n */\nexport function authModeFor(values: Pick<TaskComposerValues, 'when' | 'access'>): TaskAuthMode {\n if (values.when === 'now' || values.when === 'manual') return 'run_now_temp'\n return values.access === 'standing' ? 'scheduled_permanent' : 'scheduled_require_auth'\n}\n\n/** `datetime-local` value (no zone) to an ISO instant. Throws on an empty or invalid value. */\nexport function localInputToIso(local: string): string {\n const d = new Date(local)\n if (!local || Number.isNaN(d.getTime())) throw new Error('Pick a valid date and time.')\n return d.toISOString()\n}\n\n/** An ISO instant to the `datetime-local` value the composer edits; empty for none or invalid. */\nexport function isoToLocalInput(iso: string | null | undefined): string {\n if (!iso) return ''\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return ''\n return new Date(d.getTime() - d.getTimezoneOffset() * 60000).toISOString().slice(0, 16)\n}\n\nexport interface WorkflowTaskFields {\n /** The title of the work or the name of the workflow. */\n name: string\n prompt: string\n skill_ref: string | null\n /** The skill's saved inputs (only for a skill). */\n skill_inputs: WorkflowInputs | null\n}\n\n/** How many words of an instruction a derived name keeps. */\nexport const DERIVED_NAME_WORDS = 6\n\n/** The first `count` words of a text, with an ellipsis when there is more; empty for blank text. */\nexport function firstWords(text: string, count = DERIVED_NAME_WORDS): string {\n const words = text.trim().split(/\\s+/).filter(Boolean)\n if (words.length <= count) return words.join(' ')\n return `${words.slice(0, count).join(' ')}…`\n}\n\n/**\n * The name a workflow (or task) gets when its owner types none: the template's title or, for a template\n * that is a free-text instruction or reminder (its form is just an `instruction` or `message`), the\n * first few words of what was written, falling back to the title while it is still blank.\n */\nexport function deriveWorkflowName(workflow: WorkflowDefinition, inputs: WorkflowInputs): string {\n for (const field of ['instruction', 'message']) {\n if (workflow.inputs.some((i) => i.name === field)) {\n const written = inputs[field]\n return (typeof written === 'string' && firstWords(written)) || workflow.title\n }\n }\n return workflow.title\n}\n\n/**\n * How a workflow definition becomes an action:\n * - `options.agent === false` is a reminder: the composed text is the title and there is no prompt or\n * skill (the backend makes a to-do and notifies the owner);\n * - a definition with a `skill` runs that skill, its `args` input being the arguments;\n * - anything else is an agent prompt, the composed workflow prompt.\n * `name` (typed by the user) wins over the derived one (see {@link deriveWorkflowName}).\n */\n/** Does any input name files (an explicit pick, or a resolved scope)? Those bind the run. */\nexport const hasDocumentInputs = (inputs: WorkflowInputs): boolean =>\n Object.values(inputs).some(\n (v) =>\n v !== null &&\n typeof v === 'object' &&\n Array.isArray((v as { documents?: unknown }).documents) &&\n ((v as { documents: unknown[] }).documents.length ?? 0) > 0\n )\n\nexport function workflowTaskFields(\n workflow: WorkflowDefinition,\n inputs: WorkflowInputs,\n name?: string,\n context?: WorkflowComposeContext\n): WorkflowTaskFields {\n for (const value of Object.values(inputs)) {\n if (!value || typeof value !== 'object') continue\n const scope = value as { documents?: unknown[]; folders?: unknown[]; labels?: unknown[] }\n if (\n Array.isArray(scope.documents) &&\n !scope.documents.length &&\n ((scope.folders?.length ?? 0) > 0 || (scope.labels?.length ?? 0) > 0)\n ) {\n throw new Error(\n 'The selected file scope has no documents. Choose a scope containing files before running.'\n )\n }\n }\n const typed = name?.trim()\n if (workflow.options?.agent === false) {\n const message = composeWorkflowPrompt(workflow, inputs, context)\n return { name: typed || message, prompt: '', skill_ref: null, skill_inputs: null }\n }\n const derived = typed || deriveWorkflowName(workflow, inputs)\n if (workflow.skill) {\n return {\n name: derived,\n prompt: typeof inputs.args === 'string' ? inputs.args.trim() : '',\n skill_ref: workflow.skill,\n skill_inputs: inputs,\n }\n }\n return {\n name: derived,\n prompt: composeWorkflowPrompt(workflow, inputs, context),\n skill_ref: null,\n // The files a run is bound to travel in the saved inputs, whatever the template: the server binds\n // the run to the ids listed under any input's `documents`.\n skill_inputs: hasDocumentInputs(inputs) ? inputs : null,\n }\n}\n\n/** Does this workflow need a workspace to run (everything except a plain reminder)? */\nexport const isAgenticWorkflow = (workflow: WorkflowDefinition): boolean =>\n workflow.options?.agent !== false\n\nexport interface TaskRequestContext {\n /** File names for the prompt's wording (\"the document <name>\"), by file id. */\n documentTitles?: Record<string, string>\n workflow: WorkflowDefinition\n values: TaskComposerValues\n /** The goal checklist drafted for agent work, if any. */\n plan?: TaskPlan | null\n}\n\n/** Does this composer submission create work straight away (rather than save a workflow)? */\nexport const createsWork = (values: Pick<TaskComposerValues, 'assignee' | 'when'>): boolean =>\n values.assignee === 'me' || values.when === 'now' || values.when === 'manual'\n\n/**\n * The create-work request: a plain to-do (a title, no agent) or agent work that starts now. Agent work\n * throws when there is no workspace open.\n */\nexport function composerToWorkRequest(\n { workflow, values, plan, documentTitles }: TaskRequestContext,\n workspaceId: string | undefined\n): CreateWorkRequest {\n const common = {\n description: values.description.trim(),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n parent_conversation_ext_id: values.parentTaskId || null,\n signoff_user_ext_id: values.signoffUserId || null,\n shared: values.shared,\n }\n // A task for me is a plain to-do: a title, no prompt and no agent (`auth_mode` is required, and only\n // matters for a run).\n if (values.assignee === 'me') {\n return { ...common, title: values.name.trim(), auth_mode: 'run_now_temp' }\n }\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n if (isAgenticWorkflow(workflow) && !workspaceId) {\n throw new Error('Open a workspace to run an agent task.')\n }\n return {\n ...common,\n title: fields.name,\n prompt: fields.prompt || null,\n skill_ref: fields.skill_ref,\n ...(fields.skill_inputs ? { skill_inputs: fields.skill_inputs } : {}),\n agent_ext_id: values.agentId || null,\n auth_mode: 'run_now_temp',\n ...(fields.skill_ref === null && fields.prompt && plan ? { plan } : {}),\n }\n}\n\n/**\n * Run now is a plain assistant query that carries `task` options: the thread it starts becomes a task\n * (generating, then ready for review). The query is the person's own run, so there is no agent and no\n * access tier. The host turns this into a `POST /v1/responses` body.\n */\nexport interface TaskQuery {\n /** The message sent: the prompt, or `/skill-name arguments` for a skill. */\n input: string\n workspaceId: string\n /** Files the run is bound to (the ids under any input's `documents`). */\n docIds: string[]\n task: TaskOptions\n}\n\n/** A thread to start: a task's query, or (no `task`) a plain conversation. */\nexport type ThreadQuery = Omit<TaskQuery, 'task'> & { task?: TaskOptions }\n\n/** The ids of the files a form's inputs name (an explicit pick, or a resolved scope), without repeats. */\nexport function inputDocumentIds(inputs: WorkflowInputs): string[] {\n const ids = new Set<string>()\n for (const v of Object.values(inputs)) {\n const docs =\n v !== null && typeof v === 'object' ? (v as { documents?: unknown }).documents : null\n if (Array.isArray(docs)) for (const d of docs) if (typeof d === 'string') ids.add(d)\n }\n return [...ids]\n}\n\n/** The query that runs agent work now (a prompt or a skill) as the person asking. Throws without a workspace. */\nexport function composerToTaskQuery(\n { workflow, values, plan, documentTitles }: TaskRequestContext,\n workspaceId: string | undefined\n): TaskQuery {\n if (!workspaceId) throw new Error('Open a workspace to run an agent task.')\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n const input = fields.skill_ref\n ? `/${fields.skill_ref}${fields.prompt ? ` ${fields.prompt}` : ''}`\n : fields.prompt\n return {\n input,\n workspaceId,\n docIds: inputDocumentIds(values.inputs),\n task: {\n title: fields.name,\n description: values.description.trim(),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n signoff_user_ext_id: values.signoffUserId || null,\n parent_conversation_ext_id: values.parentTaskId || null,\n shared: values.shared,\n ...(fields.skill_ref === null && fields.prompt && plan ? { plan } : {}),\n },\n }\n}\n\n/** The fields shared by creating and updating a workflow: the trigger. Others stay `null` on an update. */\nfunction workflowTrigger(values: TaskComposerValues, clearOthers: boolean) {\n const none = clearOthers ? null : undefined\n return {\n rrule: values.when === 'repeat' ? values.rrule.trim() : none,\n run_at: values.when === 'once' ? localInputToIso(values.runAt) : none,\n event_kind: values.when === 'event' ? values.eventKind.trim() : none,\n event_filter: values.when === 'event' ? (values.eventFilter ?? none) : none,\n after_conversation_ext_id: values.when === 'task' ? values.afterTaskId : none,\n // Saving a run-now template creates an on-demand workflow; other triggers clear it.\n on_demand: values.when === 'now' || values.when === 'manual',\n }\n}\n\nconst withoutUndefined = <T extends object>(o: T): T =>\n Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined)) as T\n\n/**\n * The create-workflow request: exactly one trigger (a date, a repeat, an event, or another task being\n * done) and the action it runs. An agent workflow throws when there is no workspace open.\n */\nexport function composerToWorkflowRequest(\n { workflow, values, plan, documentTitles }: TaskRequestContext,\n workspaceId: string | undefined\n): CreateWorkflowRequest {\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n // A workflow belongs to a workspace, a reminder included.\n if (!workspaceId) throw new Error('Open a workspace to save a workflow.')\n return withoutUndefined({\n name: fields.name,\n description: values.description.trim(),\n active: true,\n shared: values.shared,\n timezone: values.timezone,\n ...workflowTrigger(values, false),\n prompt: fields.prompt,\n skill_ref: fields.skill_ref,\n skill_inputs: fields.skill_inputs,\n agent_ext_id: values.agentId || null,\n auth_mode: authModeFor(values),\n signoff_user_ext_id: values.signoffUserId || null,\n workspace_ext_id: workspaceId,\n // The plan grades every run of a free-instruction workflow (a skill's run is not a goal run).\n ...(fields.skill_ref === null && fields.prompt && plan ? { plan } : {}),\n })\n}\n\n/** What a composer submission asks the host to do. */\nexport type ComposerCreate =\n | { kind: 'work'; body: CreateWorkRequest }\n | { kind: 'query'; query: TaskQuery }\n | { kind: 'workflow'; body: CreateWorkflowRequest }\n\n/**\n * Route a submission: agent work now is an assistant query, a plain to-do or reminder creates work,\n * every other start creates a workflow.\n * `forceWorkflow` is for the workflow dialog, where even a reminder is saved as a workflow.\n */\nexport function taskComposerToCreateRequest(\n ctx: TaskRequestContext,\n workspaceId: string | undefined,\n forceWorkflow = false\n): ComposerCreate {\n if (forceWorkflow || !createsWork(ctx.values)) {\n return { kind: 'workflow', body: composerToWorkflowRequest(ctx, workspaceId) }\n }\n // A to-do for me, or a reminder, is a plain task; agent work run now is an assistant query.\n return ctx.values.assignee === 'me' || !isAgenticWorkflow(ctx.workflow)\n ? { kind: 'work', body: composerToWorkRequest(ctx, workspaceId) }\n : { kind: 'query', query: composerToTaskQuery(ctx, workspaceId) }\n}\n\n/**\n * The patch for editing a task (`PATCH /v1/conversation/{id}`): title, description, due date, sign-off\n * person, parent (`null` detaches) and sharing. What the agent was told to do stays as created.\n */\nexport function taskComposerToUpdateRequest({\n values,\n plan,\n}: TaskRequestContext): UpdateConversationRequest {\n return {\n title: values.name.trim(),\n description: values.description.trim(),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n shared: values.shared,\n ...(values.signoffUserId ? { signoff_user_ext_id: values.signoffUserId } : {}),\n parent_conversation_ext_id: values.parentTaskId || null,\n ...(plan !== undefined ? { plan } : {}),\n }\n}\n\n/** The patch for editing a workflow: name, trigger (the other triggers are cleared) and action. */\nexport function composerToWorkflowUpdate({\n workflow,\n values,\n plan,\n documentTitles,\n}: TaskRequestContext): UpdateWorkflowRequest {\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n return {\n name: fields.name,\n description: values.description.trim(),\n shared: values.shared,\n timezone: values.timezone,\n ...workflowTrigger(values, true),\n prompt: fields.prompt,\n skill_ref: fields.skill_ref,\n skill_inputs: fields.skill_inputs,\n agent_ext_id: values.agentId || null,\n auth_mode: authModeFor(values),\n signoff_user_ext_id: values.signoffUserId || null,\n // Omission preserves the plan; explicit null removes a stored free-instruction plan.\n ...(fields.skill_ref === null && fields.prompt && plan !== undefined ? { plan } : {}),\n }\n}\n\n/** Does the task need the owner to authorise workspace access before it can run? */\nexport const taskNeedsAccess = (\n task: Pick<ConversationResponse, 'pending_auth_request_id'>\n): boolean => !!task.pending_auth_request_id\n\nexport interface TaskValuesWorkflows {\n /** The workflow that stands for an instruction task (its first input is `instruction`). */\n customWorkflowId: string\n /** The workflow that stands for a reminder (its first input is `message`). */\n reminderWorkflowId: string\n /** The definitions a saved skill can be matched to (by `skill`), to restore a skill workflow's form. */\n definitions?: WorkflowDefinition[]\n}\n\n/** What an existing task (a conversation with a status) looks like when reopened in the composer. */\nexport function taskToComposerValues(\n task: ConversationResponse,\n workflows: TaskValuesWorkflows\n): Partial<TaskComposerValues> {\n const forMe = !task.agent_ext_id && !task.skill_ref && !task.has_agent_action\n return {\n assignee: forMe ? 'me' : 'agent',\n workflowId: forMe ? workflows.reminderWorkflowId : workflows.customWorkflowId,\n inputs: {},\n when: 'now',\n parentTaskId: task.parent_conversation_ext_id ?? '',\n signoffUserId:\n task.signoff_ext_id && task.signoff_ext_id !== task.owner_ext_id ? task.signoff_ext_id : '',\n shared: task.is_shared ?? true,\n description: task.description ?? '',\n dueAt: isoToLocalInput(task.due_at),\n agentId: task.agent_ext_id ?? '',\n name: task.title ?? '',\n }\n}\n\n/** Which start a saved workflow has. */\nexport function workflowWhen(workflow: WorkflowResponse): TaskWhen {\n if (workflow.after_conversation_ext_id) return 'task'\n if (workflow.event_kind) return 'event'\n if (workflow.rrule) return 'repeat'\n return 'once'\n}\n\n/** What an existing workflow looks like when reopened in the workflow dialog. */\nexport function workflowToComposerValues(\n workflow: WorkflowResponse,\n workflows: TaskValuesWorkflows\n): Partial<TaskComposerValues> {\n const reminder = !workflow.prompt && !workflow.skill_ref\n const skill = workflow.skill_ref\n ? workflows.definitions?.find((d) => d.skill === workflow.skill_ref)\n : undefined\n const base = {\n assignee: 'agent' as const,\n when: workflowWhen(workflow),\n runAt: isoToLocalInput(workflow.run_at),\n rrule: workflow.rrule ?? '',\n timezone: workflow.timezone,\n eventKind: workflow.event_kind ?? 'user_message',\n eventFilter: (workflow.event_filter ?? null) as TaskComposerValues['eventFilter'],\n afterTaskId: workflow.after_conversation_ext_id ?? '',\n signoffUserId:\n workflow.signoff_ext_id && workflow.signoff_ext_id !== workflow.owner_ext_id\n ? workflow.signoff_ext_id\n : '',\n shared: workflow.shared,\n description: workflow.description ?? '',\n agentId: workflow.agent_ext_id ?? '',\n name: workflow.name,\n access:\n workflow.auth_mode === 'scheduled_permanent'\n ? ('standing' as const)\n : ('ask_each_run' as const),\n }\n if (skill) {\n return {\n ...base,\n workflowId: skill.id,\n inputs: (workflow.skill_inputs as WorkflowInputs | null | undefined) ?? {\n args: workflow.prompt,\n },\n }\n }\n return reminder\n ? { ...base, workflowId: workflows.reminderWorkflowId, inputs: { message: workflow.name } }\n : {\n ...base,\n // A name made from the instruction follows it when the instruction is edited.\n name: workflow.name === firstWords(workflow.prompt ?? '') ? '' : workflow.name,\n workflowId: workflows.customWorkflowId,\n inputs: {\n ...((workflow.skill_inputs as WorkflowInputs | null | undefined) ?? {}),\n instruction: workflow.prompt,\n },\n }\n}\n\n/** What the New task dialog collects: a prompt, who sees it, and optional task details. */\nexport interface NewThreadValues {\n /** What to ask or get done: the first message, which the assistant answers. The title is made from it. */\n prompt: string\n /** A name instead of the generated one. Optional. */\n title: string\n /** Shared with the workspace's members (the default), or private to its creator. */\n shared: boolean\n /** The person who has the next step (`usr-…`); `''` = me. A task field. */\n ownerId: string\n /** datetime-local value; empty = none. A task field. */\n dueAt: string\n /** The task this is a sub-task of (`con-…`); `''` = none. A task field. */\n parentId: string\n /** Whether the assistant starts on the prompt now. Off: it is a to-do, tracked and not run. */\n assistant: boolean\n}\n\nexport const EMPTY_NEW_THREAD: NewThreadValues = {\n prompt: '',\n title: '',\n shared: true,\n ownerId: '',\n dueAt: '',\n parentId: '',\n assistant: true,\n}\n\n/** Is any task detail filled in (the dialog opens its details when one is preset)? */\nexport const hasTaskFields = (v: NewThreadValues): boolean =>\n Boolean(v.ownerId || v.dueAt || v.parentId)\n\n/** A new task: the prompt as the first message (the assistant answers it) and the task's options. */\nexport interface NewThreadRequest {\n input: string\n shared: boolean\n task: TaskOptions\n /** False: nothing is asked of the assistant: the host adds a plain to-do from `todo`. */\n startAssistant: boolean\n /** The to-do to add when `startAssistant` is false: a title and the rest of what the person wrote. */\n todo?: { title: string; description: string }\n}\n\n/** The first line of a prompt, kept to a title's length. */\nexport function titleFromPrompt(prompt: string, max = 80): string {\n const first = prompt.trim().split('\\n')[0].trim()\n return first.length > max ? `${first.slice(0, max - 1).trimEnd()}…` : first\n}\n\n/**\n * The request for a New task submission. Every ask is a task, so the options always ride along; the owner,\n * due date and parent are only set when filled in. The title is only sent when the person wrote one;\n * otherwise the server names the task from the prompt. With the assistant switched off nothing is run: it\n * is a to-do.\n */\nexport function newThreadToRequest(values: NewThreadValues): NewThreadRequest {\n const input = values.prompt.trim()\n const title = values.title.trim()\n const task: TaskOptions = {\n ...(title ? { title } : {}),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n signoff_user_ext_id: values.ownerId || null,\n parent_conversation_ext_id: values.parentId || null,\n shared: values.shared,\n }\n if (!values.assistant) {\n const name = title || titleFromPrompt(input)\n return {\n input,\n shared: values.shared,\n task,\n startAssistant: false,\n todo: { title: name, description: input === name ? '' : input },\n }\n }\n return { input, shared: values.shared, task, startAssistant: true }\n}\n","import { DueDateMenu } from './DueDateMenu'\nimport { useEffect, useMemo, useState } from 'react'\nimport { CalendarClock, ChevronDown, CornerDownRight, Loader2, UserCheck, X } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n EntityPill,\n Input,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Textarea,\n Switch,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ModalHeader } from '../../settings/ModalScaffold'\nimport { PersonAvatar } from './PersonPill'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport type { PersonOption, TaskOption } from './taskComposerTypes'\nimport { EMPTY_NEW_THREAD, hasTaskFields, type NewThreadValues } from './taskRequest'\n\nexport interface NewThreadDialogLabels {\n title: string\n description: string\n promptLabel: string\n promptPlaceholder: string\n titleLabel: string\n titlePlaceholder: string\n visibility: string\n taskDetails: string\n /** Under the prompt: which files the assistant can use. */\n files: (count: number) => string\n taskDetailsHint: string\n owner: string\n ownerMe: string\n due: string\n dueNone: string\n dueClear: string\n parentTask: string\n parentTaskNone: string\n search: string\n empty: string\n cancel: string\n createTask: string\n /** The switch under the prompt, and the button when it is off. */\n assistantStart: string\n assistantStartHint: string\n addTodo: string\n saving: string\n}\n\nexport const DEFAULT_NEW_THREAD_DIALOG_LABELS: NewThreadDialogLabels = {\n title: 'New',\n description:\n 'Ask for anything, like a normal chat: the assistant gets on it. Add an owner or a due date if it matters.',\n promptLabel: 'What do you want to ask or get done?',\n promptPlaceholder: 'Ask a question, or describe what needs doing…',\n titleLabel: 'Title',\n titlePlaceholder: 'Made from your prompt unless you write one',\n visibility: 'Shared with',\n taskDetails: 'Task details',\n files: (count) =>\n count === 0\n ? 'No files in this workspace yet: answers come from general knowledge.'\n : `Can use the ${count} file${count === 1 ? '' : 's'} in this workspace.`,\n taskDetailsHint: 'Optional.',\n owner: 'Owner',\n ownerMe: 'Me',\n due: 'Due',\n dueNone: 'No date',\n dueClear: 'Clear date',\n parentTask: 'Part of',\n parentTaskNone: 'Nothing (top-level)',\n search: 'Search…',\n empty: 'No match.',\n cancel: 'Cancel',\n createTask: 'Start',\n assistantStart: 'Assistant starts on it now',\n assistantStartHint: 'Switch off to just keep track of it as a to-do.',\n addTodo: 'Add to-do',\n saving: 'Creating…',\n}\n\nexport interface NewThreadDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** People who can have the next step (humans who can edit the workspace). Omit to hide the field. */\n people?: PersonOption[]\n /** Tasks this can be a sub-task of. Omit or leave empty to hide the field. */\n tasks?: TaskOption[]\n initialValues?: Partial<NewThreadValues>\n /** How many files the assistant will be able to use; omit to say nothing. */\n fileCount?: number\n isPending?: boolean\n onSubmit: (values: NewThreadValues) => void\n labels?: Partial<NewThreadDialogLabels>\n testId?: string\n}\n\nconst GLYPH = 'size-3.5 shrink-0'\n\n/** A datetime-local value as \"Fri 14 Oct, 09:00\"; the raw value if it is not a date. */\nfunction formatDue(local: string): string {\n const d = new Date(local)\n if (Number.isNaN(d.getTime())) return local\n return d.toLocaleString(undefined, {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n })\n}\n\n/**\n * \"New task\": the one way to start something. Type the prompt (what to ask or get done) and who sees it (the\n * workspace, by default); the title is made from the prompt. Every ask is a task: the details (owner, due\n * date, parent, a title of your own) are optional and folded away.\n */\nexport function NewThreadDialog({\n open,\n onOpenChange,\n people,\n tasks = [],\n initialValues,\n fileCount,\n isPending,\n onSubmit,\n labels,\n testId,\n}: NewThreadDialogProps) {\n const l: NewThreadDialogLabels = { ...DEFAULT_NEW_THREAD_DIALOG_LABELS, ...labels }\n const seed = useMemo(\n () => ({ ...EMPTY_NEW_THREAD, ...initialValues }),\n // Seeded once per open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [open]\n )\n const [values, setValues] = useState<NewThreadValues>(seed)\n const [detailsOpen, setDetailsOpen] = useState(hasTaskFields(seed))\n useEffect(() => {\n if (open) {\n setValues(seed)\n setDetailsOpen(hasTaskFields(seed))\n }\n }, [open, seed])\n\n const id = testIdOr(testId, { testId: 'new-thread' })\n const set = <K extends keyof NewThreadValues>(key: K, value: NewThreadValues[K]) =>\n setValues((v) => ({ ...v, [key]: value }))\n const canSubmit = values.prompt.trim() !== '' && !isPending\n const pillLabels = { search: l.search, empty: l.empty }\n const personOptions: PillOption[] = (people ?? []).map((p) => ({\n id: p.id,\n label: p.label,\n description: p.description,\n icon: <PersonAvatar person={{ id: p.id, label: p.label }} />,\n }))\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"flex max-h-[calc(100dvh-2rem)] flex-col overflow-hidden p-0 sm:max-w-xl\"\n data-testid={id}\n >\n <ModalHeader>\n <DialogTitle>{l.title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{l.description}</DialogDescription>\n </ModalHeader>\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) onSubmit(values)\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-6 pb-4\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"new-thread-prompt\" className=\"sr-only\">\n {l.promptLabel}\n </Label>\n <Textarea\n id=\"new-thread-prompt\"\n value={values.prompt}\n placeholder={l.promptPlaceholder}\n rows={4}\n onChange={(e) => set('prompt', e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey) && canSubmit) onSubmit(values)\n }}\n autoFocus\n className=\"min-h-24 text-base\"\n data-testid={`${id}-prompt`}\n />\n <label className=\"flex items-center gap-2 text-sm\" data-testid={`${id}-assistant`}>\n <Switch\n checked={values.assistant}\n onCheckedChange={(on) => set('assistant', on)}\n data-testid={`${id}-assistant-switch`}\n />\n <span>{l.assistantStart}</span>\n <span className=\"text-xs text-muted-foreground\">{l.assistantStartHint}</span>\n </label>\n {fileCount !== undefined && values.assistant && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-files`}>\n {l.files(fileCount)}\n </p>\n )}\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n data-testid={`${id}-visibility`}\n />\n </div>\n\n <section className=\"flex flex-col gap-3\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1 self-start px-2 pointer-coarse:h-11\"\n onClick={() => setDetailsOpen((v) => !v)}\n aria-expanded={detailsOpen}\n data-testid={`${id}-details-toggle`}\n >\n {l.taskDetails}\n <ChevronDown\n className={cn('size-3.5 transition-transform', detailsOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n {detailsOpen && (\n <div className=\"flex flex-col gap-3\" data-testid={`${id}-details`}>\n <p className=\"text-xs text-muted-foreground\">{l.taskDetailsHint}</p>\n <div className=\"flex flex-wrap items-center gap-2\">\n {people !== undefined && (\n <PillSelect\n icon={<UserCheck className={GLYPH} aria-hidden />}\n prefix={l.owner}\n value={values.ownerId}\n options={personOptions}\n noneOption={{ id: '', label: l.ownerMe }}\n onChange={(v) => set('ownerId', v)}\n searchable={personOptions.length > 6}\n labels={pillLabels}\n testId={`${id}-owner`}\n />\n )}\n <Popover>\n <PopoverTrigger asChild>\n <EntityPill\n icon={<CalendarClock className={GLYPH} aria-hidden />}\n label={`${l.due}: ${values.dueAt ? formatDue(values.dueAt) : l.dueNone}`}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n className=\"h-7 pointer-coarse:min-h-11\"\n data-testid={`${id}-due-pill`}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-2\">\n <DueDateMenu\n id={`${id}-due`}\n label={l.due}\n value={values.dueAt}\n onChange={(v) => set('dueAt', v)}\n labels={{ clear: l.dueClear }}\n />\n </PopoverContent>\n </Popover>\n {tasks.length > 0 && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.parentTask}\n value={values.parentId}\n options={taskOptions}\n noneOption={{ id: '', label: l.parentTaskNone }}\n onChange={(v) => set('parentId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-parent`}\n />\n )}\n </div>\n <Label htmlFor=\"new-thread-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"new-thread-title\"\n value={values.title}\n placeholder={l.titlePlaceholder}\n onChange={(e) => set('title', e.target.value)}\n data-testid={`${id}-title`}\n />\n </div>\n )}\n </section>\n </div>\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {isPending ? l.saving : !values.assistant ? l.addTodo : l.createTask}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import { Clock, Link2, MousePointerClick, Repeat, Zap } from 'lucide-react'\nimport { testIdOr } from '../../chat/test-id'\nimport type { WorkflowTriggerType } from './taskLabels'\n\nexport interface TaskTriggerChipLabels {\n /** \"After “X” is done\" — the workflow waits on a task. */\n after: (taskName: string) => string\n /** The workflow waits on a task that is not visible to the viewer. */\n afterUnknown: string\n /** No trigger: it runs when someone presses Run. */\n onDemand: string\n}\n\nexport const DEFAULT_TASK_TRIGGER_CHIP_LABELS: TaskTriggerChipLabels = {\n after: (name) => `After “${name}” is done`,\n afterUnknown: 'After another task is done',\n onDemand: 'On demand',\n}\n\nexport interface TaskTriggerChipProps {\n /** Workflow id: keys the test id (`task-trigger-{id}`). */\n id: string\n triggerType: WorkflowTriggerType\n /** Host-formatted summary for time and event triggers (\"Every weekday at 9:00\", \"On document uploaded\"). */\n summary: string\n /** Set when this workflow waits on a task; the name it shows (or undefined if not visible). */\n afterTaskId?: string | null\n afterTaskName?: string\n testId?: string\n labels?: Partial<TaskTriggerChipLabels>\n}\n\nfunction TriggerIcon({ type, chained }: { type: WorkflowTriggerType; chained: boolean }) {\n const cls = 'size-3.5 shrink-0'\n if (chained) return <Link2 className={cls} aria-hidden />\n switch (type) {\n case 'on_demand':\n return <MousePointerClick className={cls} aria-hidden />\n case 'recurring':\n return <Repeat className={cls} aria-hidden />\n case 'event':\n return <Zap className={cls} aria-hidden />\n default:\n return <Clock className={cls} aria-hidden />\n }\n}\n\n/** What starts a workflow, in one line: a time, a repeat, an event, or a task finishing. */\nexport function TaskTriggerChip({\n id,\n triggerType,\n summary,\n afterTaskId,\n afterTaskName,\n testId,\n labels,\n}: TaskTriggerChipProps) {\n const l = { ...DEFAULT_TASK_TRIGGER_CHIP_LABELS, ...labels }\n const chained = Boolean(afterTaskId)\n const text = chained\n ? afterTaskName\n ? l.after(afterTaskName)\n : l.afterUnknown\n : triggerType === 'on_demand'\n ? l.onDemand\n : summary\n return (\n <span\n className=\"inline-flex min-w-0 items-center gap-1.5 text-xs text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: `task-trigger-${id}` })}\n data-trigger={chained ? 'task' : triggerType}\n >\n <TriggerIcon type={triggerType} chained={chained} />\n <span className=\"truncate\">{text}</span>\n </span>\n )\n}\n","import type { WorkflowTriggerType } from './taskLabels'\n\n/**\n * A row of the Workflows table: a saved workflow, or a skill (a virtual row: skills are global, not in\n * the workflows table, and run on demand). Callers' richer types (`WorkflowResponse`) are accepted as-is.\n */\nexport interface WorkflowListRow {\n external_id: string\n name: string\n /** `skill` for a skill row; anything else is a saved workflow. */\n kind?: 'workflow' | 'skill' | null\n description?: string | null\n /** Active: the trigger can start it. A spent one-shot pauses itself. Skills ignore it. */\n active: boolean\n /** Shared with the workspace's members (false = private to its owner). */\n shared?: boolean | null\n rrule?: string | null\n run_at?: string | null\n event_kind?: string | null\n after_conversation_ext_id?: string | null\n /** No trigger of its own: it only runs when someone presses Run. */\n on_demand?: boolean | null\n prompt?: string | null\n skill_ref?: string | null\n agent_ext_id?: string | null\n last_fired_at?: string | null\n next_fire_at?: string | null\n last_error?: string | null\n /** False for a teammate's shared workflow: they can see it, but not change who sees it or delete it. */\n is_owner?: boolean | null\n owner_ext_id?: string | null\n /** The user who created it (for the creator-or-workspace-owner rule). */\n created_by_ext_id?: string | null\n}\n\nexport type WorkflowStatusKey = 'active' | 'paused' | 'on_demand'\n\nexport const isSkillRow = (row: WorkflowListRow): boolean => row.kind === 'skill'\n\n/** Does it start by itself (a time, a repeat, an event, or another task finishing)? */\nexport const hasTrigger = (row: WorkflowListRow): boolean =>\n !row.on_demand &&\n Boolean(row.rrule || row.run_at || row.event_kind || row.after_conversation_ext_id)\n\n/**\n * What a row is doing: a skill, or a workflow with no trigger of its own, only runs when someone presses\n * Run (`on_demand`, no on/off switch); one with a trigger is `active` or `paused`.\n */\nexport function workflowStatus(row: WorkflowListRow): WorkflowStatusKey {\n if (isSkillRow(row) || !hasTrigger(row)) return 'on_demand'\n return row.active ? 'active' : 'paused'\n}\n\n/** What starts a workflow: another task being done, an event, a repeat, a single moment, or nothing. */\nexport function workflowTriggerType(workflow: WorkflowListRow): WorkflowTriggerType {\n if (workflow.on_demand) return 'on_demand'\n if (workflow.after_conversation_ext_id) return 'after'\n if (workflow.event_kind) return 'event'\n if (workflow.rrule) return 'recurring'\n if (workflow.run_at) return 'one_time'\n return 'on_demand'\n}\n","/**\n * Column definitions for the Workflows grid. Every column has an explicit `colId` (AG Grid persists\n * column state by id: see CLAUDE.md). The table supplies the cells that need behaviour through slots,\n * which must be stable functions so the definitions are built once.\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { workflowStatus, type WorkflowListRow } from './workflowRows'\nimport type { WorkflowListLabels } from './workflowTableLabels'\n\nexport const WORKFLOW_COLUMN_ORDER = [\n 'name',\n 'trigger',\n 'last_run',\n 'status',\n 'shared',\n 'actions',\n] as const\n\nexport type WorkflowColumnId = (typeof WORKFLOW_COLUMN_ORDER)[number]\n\nexport interface CreateWorkflowColumnsOptions<T extends WorkflowListRow> {\n labels: WorkflowListLabels\n renderName: (workflow: T) => ReactNode\n renderTrigger: (workflow: T) => ReactNode\n renderStatus: (workflow: T) => ReactNode\n renderShared: (workflow: T) => ReactNode\n renderLastRun: (workflow: T) => ReactNode\n renderActions: (workflow: T) => ReactNode\n /** Plain text of the trigger cell, for sorting and the clipboard. */\n getTriggerText: (workflow: T) => string\n}\n\nfunction cell<T extends WorkflowListRow>(render: (workflow: T) => ReactNode) {\n return (params: ICellRendererParams<T>): ReactNode => (params.data ? render(params.data) : null)\n}\n\nconst time = (iso?: string | null): number => (iso ? Date.parse(iso) : Number.POSITIVE_INFINITY)\n\nexport function createWorkflowColumns<T extends WorkflowListRow>(\n o: CreateWorkflowColumnsOptions<T>\n): ColDef<T>[] {\n const l = o.labels\n const base: Partial<ColDef<T>> = {\n sortable: false,\n suppressMovable: true,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n return [\n {\n ...base,\n colId: 'name',\n sortable: true,\n headerName: l.colName,\n flex: 3,\n minWidth: 250,\n valueGetter: (p) => p.data?.name.toLowerCase() ?? '',\n cellRenderer: cell(o.renderName),\n },\n {\n ...base,\n colId: 'trigger',\n headerName: l.colTrigger,\n flex: 2.4,\n minWidth: 220,\n valueGetter: (p) => (p.data ? o.getTriggerText(p.data) : ''),\n cellRenderer: cell(o.renderTrigger),\n },\n {\n ...base,\n colId: 'last_run',\n sortable: true,\n headerName: l.colLastRun,\n flex: 1.4,\n minWidth: 190,\n valueGetter: (p) => time(p.data?.last_fired_at),\n cellRenderer: cell(o.renderLastRun),\n },\n {\n ...base,\n colId: 'status',\n sortable: true,\n headerName: l.colStatus,\n width: 140,\n valueGetter: (p) => (p.data ? workflowStatus(p.data) : ''),\n cellRenderer: cell(o.renderStatus),\n },\n {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width: 96,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'center' },\n valueGetter: (p) => p.data?.shared ?? false,\n cellRenderer: cell(o.renderShared),\n },\n {\n ...base,\n colId: 'actions',\n headerName: '',\n // Always in view, even if the rest has to scroll.\n pinned: 'right',\n lockPinned: true,\n width: 140,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end' },\n cellRenderer: cell(o.renderActions),\n },\n ]\n}\n","export interface WorkflowListLabels {\n colName: string\n colType: string\n colTrigger: string\n colAction: string\n colAgent: string\n colStatus: string\n colShared: string\n colLastRun: string\n colNextRun: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n typeSkill: string\n typeWorkflow: string\n statusActive: string\n statusPaused: string\n statusOnDemand: string\n activeSwitch: (name: string) => string\n agent: string\n myAssistant: string\n me: string\n someone: string\n never: string\n none: string\n reminder: string\n failed: string\n lastRunFailed: string\n openLastRun: string\n editWorkflow: string\n run: string\n runLater: string\n runNow: string\n runs: string\n delete: string\n moreActions: string\n searchLabel: string\n searchPlaceholder: string\n emptyTitle: string\n emptyMessage: string\n firstRun: string\n noMatches: string\n filterAll: string\n filterSkills: string\n filterWorkflows: string\n filterActive: string\n filterPaused: string\n makeActive: string\n makePaused: string\n selectAll: string\n selectWorkflow: (name: string) => string\n}\n\nexport const DEFAULT_WORKFLOW_LIST_LABELS: WorkflowListLabels = {\n colName: 'Name',\n colType: 'Type',\n colTrigger: 'When',\n colAction: 'What it does',\n colAgent: 'Agent',\n colStatus: 'Status',\n colShared: 'Shared',\n colLastRun: 'Last run',\n colNextRun: 'Next run',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n typeSkill: 'Skill',\n typeWorkflow: 'Workflow',\n statusActive: 'Active',\n statusPaused: 'Paused',\n statusOnDemand: 'On demand',\n activeSwitch: (name) => `Active: “${name}”`,\n agent: 'Agent',\n myAssistant: 'My assistant',\n me: 'Me',\n someone: 'Someone',\n never: 'Never',\n none: '—',\n reminder: 'Reminder',\n failed: 'Failed',\n lastRunFailed: 'Last run failed',\n openLastRun: 'Open the task this run created',\n editWorkflow: 'Edit',\n run: 'Run',\n runLater: 'Run later',\n runNow: 'Run now',\n runs: 'Runs',\n delete: 'Delete',\n moreActions: 'More actions',\n searchLabel: 'Search workflows',\n searchPlaceholder: 'Search workflows and skills…',\n emptyTitle: 'Nothing to run yet',\n emptyMessage: 'Skills and workflows you can run will appear here.',\n firstRun: 'Run a skill now, or choose Run later to save it as a workflow that runs on its own.',\n noMatches: 'Nothing in this view.',\n filterAll: 'All',\n filterSkills: 'Skills',\n filterWorkflows: 'Workflows',\n filterActive: 'Active',\n filterPaused: 'Paused',\n makeActive: 'Make active',\n makePaused: 'Pause',\n selectAll: 'Select all',\n selectWorkflow: (name) => `Select ${name}`,\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { GridApi, GridSizeChangedEvent } from 'ag-grid-community'\nimport {\n AlertCircle,\n History,\n MoreHorizontal,\n Pencil,\n Play,\n Search,\n Trash2,\n Workflow,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Input,\n Switch,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { EmptyState } from '../../components/EmptyState'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskTriggerChip, type TaskTriggerChipLabels } from './TaskTriggerChip'\nimport { createWorkflowColumns } from './workflowColumns'\nimport { applyColumnWidthRules, type ColumnWidthRule } from './gridWidth'\nimport {\n hasTrigger,\n isSkillRow,\n workflowStatus,\n workflowTriggerType,\n type WorkflowListRow,\n} from './workflowRows'\nimport { DEFAULT_WORKFLOW_LIST_LABELS, type WorkflowListLabels } from './workflowTableLabels'\n\nexport interface WorkflowsTableProps<T extends WorkflowListRow> {\n /** Everything the viewer can run: saved workflows, and skills as virtual rows (`kind: 'skill'`). */\n workflows: T[]\n isLoading?: boolean\n /** Human summary of when a workflow starts (\"Every weekday at 9:00\", \"On document uploaded\"). */\n describeTrigger: (workflow: T) => string\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Pause or resume a workflow that starts by itself (an on-demand one has no switch). */\n onToggleActive: (workflow: T, active: boolean) => void\n /** Share a workflow with the workspace or make it private (the toggle appears with it). */\n onToggleShared?: (workflow: T, shouldShare: boolean) => void\n /** Open the workflow in the composer (workflow-edit mode). */\n onEdit: (workflow: T) => void\n /**\n * Run it. A saved workflow just runs (its inputs are stored); a skill needs its inputs, so the host\n * opens the run dialog with that skill selected.\n */\n onRun: (row: T) => void\n /** Run a skill later: the run dialog, on its schedule view. Offered on skill rows. */\n onRunLater?: (skill: T) => void\n onDelete: (workflow: T) => void\n /** Show the tasks this workflow created. */\n onViewRuns?: (workflow: T) => void\n /** Click on a row (not on one of its controls): a skill's detail, a workflow's editor. */\n onOpenRow?: (row: T) => void\n /** Open the task a workflow's last run created. */\n onOpenThread?: (conversationId: string) => void\n /** Each workflow's latest run: the newest task it created, by workflow id. */\n lastRuns?: Record<string, { conversationId: string; at: string }>\n /** Bulk actions on the selected workflows (skills are skipped). */\n onDeleteMany?: (workflows: T[]) => void\n onToggleActiveMany?: (workflows: T[], active: boolean) => void\n /** Agent names by id, for the Agent column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Skill names by `skill_ref`, for the action cell (falls back to the reference). */\n skillNames?: Record<string, string>\n /** Task names by id, for an \"after <task>\" trigger. */\n taskNames?: Record<string, string>\n /** How an agent appears in the Agent column; defaults to the app's user pill. */\n renderPerson?: (person: TaskPerson) => ReactNode\n /**\n * The viewer edits the workspace (owner or collaborator): they may then edit, pause, resume and run a\n * workflow shared with it. A guest leaves this off.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with the creator, the only one who deletes a workflow. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /** Workflow id with a request in flight: its row disables its controls. */\n busyId?: string | null\n header?: ReactNode\n gridId?: string\n labels?: Partial<WorkflowListLabels>\n triggerChipLabels?: Partial<TaskTriggerChipLabels>\n testId?: string\n}\n\ntype Filter = 'all' | 'skills' | 'workflows' | 'active' | 'paused'\nconst ROW_HEIGHT = 56\n\n/**\n * Everything the viewer can run, in one list: skills (they run on demand) and saved workflows (they start\n * on a date, a repeat, an event or after a task, or on demand). Each row has its type, when it starts, what\n * it does, who runs it, its status (Active or Paused with a switch; On demand has none), when it last ran\n * (linking to the task that run created) and runs next, and a visible Run. The same grid as every other\n * list in the app.\n */\nexport function WorkflowsTable<T extends WorkflowListRow>(props: WorkflowsTableProps<T>) {\n const { workflows, isLoading, busyId, header, testId } = props\n const l: WorkflowListLabels = { ...DEFAULT_WORKFLOW_LIST_LABELS, ...props.labels }\n const [filter, setFilter] = useState<Filter>('all')\n const [query, setQuery] = useState('')\n const [selected, setSelected] = useState<T[]>([])\n const apiRef = useRef<GridApi<T> | null>(null)\n\n const q = query.trim().toLowerCase()\n const matches = (w: T) =>\n !q ||\n `${w.name} ${w.description ?? ''} ${w.prompt ?? ''} ${w.skill_ref ?? ''}`\n .toLowerCase()\n .includes(q)\n const inFilter = (w: T, f: Filter) =>\n f === 'all' ||\n (f === 'skills' && isSkillRow(w)) ||\n (f === 'workflows' && !isSkillRow(w)) ||\n (f === 'active' && workflowStatus(w) === 'active') ||\n (f === 'paused' && workflowStatus(w) === 'paused')\n const counts = useMemo(() => {\n const out = { all: 0, skills: 0, workflows: 0, active: 0, paused: 0 }\n for (const w of workflows) {\n if (!matches(w)) continue\n for (const f of Object.keys(out) as Filter[]) if (inFilter(w, f)) out[f] += 1\n }\n return out\n // matches/inFilter read only `q` and the row.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [workflows, q])\n const shown = useMemo(\n () => workflows.filter((w) => matches(w) && inFilter(w, filter)),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [workflows, filter, q]\n )\n\n const renderPerson = props.renderPerson ?? ((p: TaskPerson) => <PersonPill person={p} />)\n const actionText = (w: T): string => {\n if (isSkillRow(w))\n return w.description || (w.skill_ref && props.skillNames?.[w.skill_ref]) || w.name\n return w.skill_ref\n ? (props.skillNames?.[w.skill_ref] ?? w.skill_ref)\n : w.prompt?.trim() || l.reminder\n }\n\n // The cells read the latest handlers and lookups through this ref, so the column definitions are\n // built once and an interaction never makes the grid rebuild them.\n const latest = useRef({ props, l, renderPerson, actionText })\n latest.current = { props, l, renderPerson, actionText }\n\n const columnDefs = useMemo(\n () =>\n createWorkflowColumns<T>({\n labels: l,\n getTriggerText: (w) =>\n isSkillRow(w) ? l.statusOnDemand : latest.current.props.describeTrigger(w),\n renderName: (w) => {\n const { l: lb } = latest.current\n const skill = isSkillRow(w)\n const text = skill\n ? latest.current.actionText(w)\n : w.description || latest.current.actionText(w)\n // A name made from the instruction is not said again under itself.\n const stem = w.name.replace(/…$/, '').trim()\n const about = text && text.trim() !== w.name.trim() && text.trim() !== stem ? text : ''\n return (\n <div className=\"min-w-0 leading-tight\">\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span\n className={cn(\n 'truncate text-sm font-medium',\n workflowStatus(w) === 'paused' && 'text-muted-foreground'\n )}\n data-testid={`workflow-name-${w.external_id}`}\n >\n {w.name}\n </span>\n {skill && (\n <span\n className=\"shrink-0 rounded-full border border-border px-1.5 text-[11px] text-muted-foreground\"\n data-testid={`workflow-type-${w.external_id}`}\n >\n {lb.typeSkill}\n </span>\n )}\n </span>\n {about && (\n <p\n className=\"truncate text-xs text-muted-foreground\"\n data-testid={`workflow-action-${w.external_id}`}\n >\n {about}\n </p>\n )}\n </div>\n )\n },\n renderTrigger: (w) => {\n const { props: p, l: lb } = latest.current\n const after = w.after_conversation_ext_id\n const skill = isSkillRow(w)\n // A one-off date already says when it runs: \"next\" only adds something for a repeat or an event.\n const next =\n !skill && w.active && hasTrigger(w) && !w.run_at && w.next_fire_at\n ? p.formatDate(w.next_fire_at)\n : ''\n const agentId = w.agent_ext_id\n const agent = skill ? '' : agentId ? p.agentNames?.[agentId] || lb.agent : lb.myAssistant\n const detail = [next && `${lb.colNextRun}: ${next}`, agent].filter(Boolean).join(' · ')\n return (\n <div className=\"min-w-0 leading-tight\">\n <TaskTriggerChip\n id={w.external_id}\n testId={`workflow-trigger-${w.external_id}`}\n triggerType={workflowTriggerType(w)}\n summary={skill ? '' : p.describeTrigger(w)}\n afterTaskId={after}\n afterTaskName={after ? p.taskNames?.[after] : undefined}\n labels={p.triggerChipLabels}\n />\n {detail && (\n <p\n className=\"truncate text-xs text-muted-foreground\"\n data-testid={`workflow-next-run-${w.external_id}`}\n >\n {detail}\n </p>\n )}\n </div>\n )\n },\n renderStatus: (w) => {\n const { props: p, l: lb } = latest.current\n const status = workflowStatus(w)\n // Only a workflow that starts by itself can be paused: an on-demand one has nothing to show here.\n if (status === 'on_demand') return null\n const canEdit = w.is_owner !== false || Boolean(p.canEditShared)\n return (\n <span className=\"inline-flex items-center gap-2\">\n <Switch\n checked={status === 'active'}\n disabled={!canEdit || p.busyId === w.external_id}\n onCheckedChange={(next) => p.onToggleActive(w, next)}\n aria-label={lb.activeSwitch(w.name)}\n data-testid={`workflow-active-${w.external_id}`}\n />\n <span\n className=\"text-sm text-muted-foreground\"\n data-testid={`workflow-status-${w.external_id}`}\n data-status={status}\n >\n {status === 'active' ? lb.statusActive : lb.statusPaused}\n </span>\n </span>\n )\n },\n renderShared: (w) => {\n const { props: p, l: lb } = latest.current\n if (!p.onToggleShared || isSkillRow(w)) return null\n // Who can see it is the creator's alone: unsharing hides it from everyone else.\n const isCreator = w.is_owner !== false\n return (\n <VisibilityToggle\n items={{ shared: w.shared ?? false }}\n onToggle={(share) => latest.current.props.onToggleShared?.(w, share)}\n disabled={!isCreator || p.busyId === w.external_id}\n disabledTooltip={lb.sharedOwnerOnly}\n showLabel={false}\n data-testid={`workflow-shared-${w.external_id}`}\n />\n )\n },\n renderLastRun: (w) => {\n const { props: p, l: lb } = latest.current\n if (isSkillRow(w)) return <span className=\"text-sm text-muted-foreground\">{lb.none}</span>\n const last = p.lastRuns?.[w.external_id]\n const at = w.last_fired_at ?? last?.at\n return (\n <span className=\"flex min-w-0 items-center gap-1.5\">\n {last && at ? (\n <button\n type=\"button\"\n onClick={() => p.onOpenThread?.(last.conversationId)}\n title={lb.openLastRun}\n className=\"truncate text-sm text-primary hover:underline focus-visible:underline focus-visible:outline-none\"\n data-testid={`workflow-last-run-${w.external_id}`}\n >\n {p.formatDate(at)}\n </button>\n ) : (\n <span\n className=\"truncate text-sm text-muted-foreground\"\n data-testid={`workflow-last-run-${w.external_id}`}\n >\n {at ? p.formatDate(at) : lb.never}\n </span>\n )}\n {w.last_error && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 text-xs text-red-text\"\n title={`${lb.lastRunFailed}: ${w.last_error}`}\n data-testid={`workflow-error-${w.external_id}`}\n >\n <AlertCircle className=\"size-3.5\" aria-hidden />\n {lb.failed}\n </span>\n )}\n </span>\n )\n },\n renderActions: (w) => {\n const { props: p, l: lb } = latest.current\n const id = w.external_id\n const skill = isSkillRow(w)\n const busy = p.busyId === id\n const isOwner = w.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n return (\n <div className=\"flex items-center justify-end gap-1\">\n {(skill || canEdit) && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n disabled={busy}\n onClick={() => p.onRun(w)}\n data-testid={`workflow-run-btn-${id}`}\n >\n <Play className=\"size-3.5\" aria-hidden />\n {lb.run}\n </Button>\n )}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={lb.moreActions}\n data-testid={`workflow-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {skill && p.onRunLater && (\n <DropdownMenuItem\n onSelect={() => p.onRunLater?.(w)}\n data-testid={`workflow-run-later-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runLater}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <DropdownMenuItem\n onSelect={() => p.onEdit(w)}\n data-testid={`workflow-edit-${id}`}\n >\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {lb.editWorkflow}\n </DropdownMenuItem>\n )}\n {!skill && p.onViewRuns && (\n <DropdownMenuItem\n onSelect={() => p.onViewRuns?.(w)}\n data-testid={`workflow-runs-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runs}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={() => p.onDelete(w)}\n title={canAdmin ? undefined : lb.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`workflow-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {lb.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colName,\n l.colType,\n l.colTrigger,\n l.colAction,\n l.colAgent,\n l.colStatus,\n l.colShared,\n l.shared,\n l.colLastRun,\n l.colNextRun,\n ]\n )\n\n // A change in the lookups the cells draw from redraws them once.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.agentNames,\n props.skillNames,\n props.taskNames,\n props.lastRuns,\n props.renderPerson,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n ])\n\n const mine = selected.filter((w) => !isSkillRow(w))\n const adminSelected = mine.filter((w) => w.is_owner !== false || props.isWorkspaceOwner)\n const editableSelected = mine.filter(\n (w) => hasTrigger(w) && (w.is_owner !== false || props.canEditShared)\n )\n const clearSelection = () => setSelected([])\n const hasSavedWorkflow = workflows.some((w) => !isSkillRow(w))\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col gap-3\"\n data-testid={testIdOr(testId, { testId: 'workflow-list' })}\n >\n {header}\n {!isLoading && !hasSavedWorkflow && workflows.length > 0 && (\n <p className=\"text-sm text-muted-foreground\" data-testid=\"workflow-first-run\">\n {l.firstRun}\n </p>\n )}\n <div className=\"flex flex-wrap items-center gap-2\">\n <div role=\"tablist\" aria-label=\"Filter workflows\" className=\"flex flex-wrap gap-1.5\">\n {(\n [\n ['all', l.filterAll],\n ['skills', l.filterSkills],\n ['workflows', l.filterWorkflows],\n ['active', l.filterActive],\n ['paused', l.filterPaused],\n ] as [Filter, string][]\n ).map(([key, label]) => {\n const isSelected = filter === key\n return (\n <button\n key={key}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n onClick={() => setFilter(key)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11',\n isSelected\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border text-muted-foreground hover:bg-accent'\n )}\n data-testid={`workflow-filter-${key}`}\n >\n {label}\n <span className=\"tabular-nums opacity-70\">{counts[key]}</span>\n </button>\n )\n })}\n </div>\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground\" />\n <Input\n type=\"search\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={l.searchPlaceholder}\n aria-label={l.searchLabel}\n className=\"h-8 w-56 pl-8 text-xs pointer-coarse:h-11\"\n data-testid=\"workflow-search\"\n />\n </div>\n </div>\n {workflows.length === 0 && !isLoading ? (\n <EmptyState\n icon={Workflow}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"workflow-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<T>\n testId=\"workflow-grid\"\n gridId={props.gridId ?? 'workflows-grid-v2'}\n items={shown}\n columnDefs={columnDefs}\n getItemId={(w) => w.external_id}\n getRowTestId={(w) => `workflow-row-${w.external_id}`}\n isLoading={isLoading}\n showEmpty={shown.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n onRowClick={(row) => props.onOpenRow?.(row)}\n selection={{ mode: 'multiple', selected, onSelectionChange: setSelected }}\n gridOptions={GRID_OPTIONS as never}\n />\n </div>\n )}\n <SelectionBar count={selected.length} onClear={clearSelection}>\n {(isCompact) => (\n <>\n {props.onToggleActiveMany && (\n <>\n <SelectionBarAction\n icon={Play}\n label={l.makeActive}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, true)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-activate\"\n />\n <SelectionBarAction\n icon={Workflow}\n label={l.makePaused}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, false)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-pause\"\n />\n </>\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.delete}\n onClick={() => {\n props.onDeleteMany?.(adminSelected)\n clearSelection()\n }}\n disabled={adminSelected.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"workflow-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n </div>\n )\n}\n\n/** What goes first as the grid narrows (the grid is the page minus the sidebar). */\nconst WIDTH_RULES: readonly ColumnWidthRule[] = [\n { colId: 'shared', minWidth: 1060 },\n { colId: 'last_run', minWidth: 880 },\n]\n\nconst GRID_OPTIONS = {\n suppressClickEdit: true,\n suppressCellFocus: true,\n suppressColumnVirtualisation: true,\n onGridSizeChanged: (event: GridSizeChangedEvent) =>\n applyColumnWidthRules(event.api, event.clientWidth, WIDTH_RULES),\n}\n","import type { ReactNode } from 'react'\nimport {\n AlertTriangle,\n ArrowRight,\n CheckCircle2,\n CircleDot,\n KeyRound,\n Lock,\n MessageSquareReply,\n Play,\n RotateCcw,\n Sparkles,\n UserRoundCog,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport type TaskActivityKind =\n | 'created'\n | 'run_started'\n | 'awaiting_access'\n | 'access_granted'\n | 'ready_for_review'\n | 'handed_off'\n | 'changes_requested'\n | 'done'\n | 'reopened'\n | 'failed'\n\n/** One event of a task's history, as the backend returns it (oldest first). */\nexport interface TaskActivityEvent {\n external_id: string\n kind: TaskActivityKind\n actor_ext_id?: string | null\n to_ext_id?: string | null\n /** The feedback of a send-back, the message of a hand-off. */\n note?: string | null\n /** `run_id`, `agent_ext_id`, `as_user`, `from_workflow`, `error`. */\n detail?: Record<string, unknown> | null\n created_at: string\n}\n\nexport interface TaskActivityLabels {\n title: string\n empty: string\n loading: string\n error: string\n close: string\n created: string\n createdFromWorkflow: string\n runStarted: string\n runStartedBy: (agentName: string) => string\n awaitingAccess: string\n accessGranted: string\n readyForReview: string\n handedOff: string\n changesRequested: string\n done: string\n reopened: string\n failed: string\n handedOverNote: (note: string) => string\n sentBackNote: (note: string) => string\n failureLine: (error: string) => string\n /** The actor is not known (a system step). */\n system: string\n}\n\nexport const DEFAULT_TASK_ACTIVITY_LABELS: TaskActivityLabels = {\n title: 'Activity',\n empty: 'Nothing has happened yet.',\n loading: 'Loading activity…',\n error: 'Could not load the activity.',\n close: 'Close',\n created: 'Created',\n createdFromWorkflow: 'Created from a workflow',\n runStarted: 'Run started',\n runStartedBy: (agent) => `Run started by ${agent}`,\n awaitingAccess: 'Waiting for access',\n accessGranted: 'Access granted',\n readyForReview: 'Ready for review',\n handedOff: 'Handed off',\n changesRequested: 'Asked for changes',\n done: 'Marked done',\n reopened: 'Reopened',\n failed: 'Run failed',\n handedOverNote: (note) => `Handed over: “${note}”`,\n sentBackNote: (note) => `Asked: “${note}”`,\n failureLine: (error) => error,\n system: 'System',\n}\n\nconst ICONS: Record<TaskActivityKind, ReactNode> = {\n created: <Sparkles className=\"size-3.5\" aria-hidden />,\n run_started: <Play className=\"size-3.5\" aria-hidden />,\n awaiting_access: <Lock className=\"size-3.5\" aria-hidden />,\n access_granted: <KeyRound className=\"size-3.5\" aria-hidden />,\n ready_for_review: <CircleDot className=\"size-3.5\" aria-hidden />,\n handed_off: <UserRoundCog className=\"size-3.5\" aria-hidden />,\n changes_requested: <MessageSquareReply className=\"size-3.5\" aria-hidden />,\n done: <CheckCircle2 className=\"size-3.5\" aria-hidden />,\n reopened: <RotateCcw className=\"size-3.5\" aria-hidden />,\n failed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n}\n\nconst asString = (v: unknown): string | null => (typeof v === 'string' && v.trim() ? v : null)\n\n/** A short line for an error: the first line, cut at a readable length. */\nfunction summarizeError(error: string): string {\n const first = error.split('\\n')[0].trim()\n return first.length > 160 ? `${first.slice(0, 157)}…` : first\n}\n\nexport interface TaskActivityTimelineProps {\n events: readonly TaskActivityEvent[]\n /** Draw a person (an id, or none for a system step). */\n renderPerson: (id: string | null | undefined) => ReactNode\n /** An agent's display name by id. */\n agentName?: (agentExtId: string) => string | undefined\n /** \"2 min ago\". */\n formatRelative: (iso: string) => string\n /** The exact time, shown on hover. */\n formatExact: (iso: string) => string\n labels?: Partial<TaskActivityLabels>\n testId?: string\n}\n\n/** A task's history as a vertical timeline, oldest first, one entry per event. */\nexport function TaskActivityTimeline({\n events,\n renderPerson,\n agentName,\n formatRelative,\n formatExact,\n labels,\n testId,\n}: TaskActivityTimelineProps) {\n const l = { ...DEFAULT_TASK_ACTIVITY_LABELS, ...labels }\n const base = testIdOr(testId, { testId: 'task-activity' })\n\n const describe = (e: TaskActivityEvent): { headline: ReactNode; extra?: ReactNode } => {\n const detail = e.detail ?? {}\n const note = asString(e.note)\n const agentId = asString(detail.agent_ext_id)\n const agent = agentId ? agentName?.(agentId) : undefined\n switch (e.kind) {\n case 'created':\n return { headline: detail.from_workflow ? l.createdFromWorkflow : l.created }\n case 'run_started':\n return { headline: agent ? l.runStartedBy(agent) : l.runStarted }\n case 'awaiting_access':\n return { headline: l.awaitingAccess }\n case 'access_granted':\n return { headline: l.accessGranted }\n case 'ready_for_review':\n return { headline: l.readyForReview }\n case 'handed_off':\n return {\n headline: l.handedOff,\n extra: note ? <Quote text={l.handedOverNote(note)} /> : undefined,\n }\n case 'changes_requested':\n return {\n headline: l.changesRequested,\n extra: note ? <Quote text={l.sentBackNote(note)} /> : undefined,\n }\n case 'done':\n return { headline: l.done }\n case 'reopened':\n return { headline: l.reopened }\n case 'failed': {\n const error = asString(detail.error)\n return {\n headline: l.failed,\n extra: error ? (\n <p className=\"text-xs text-destructive\" data-testid={`${base}-error-${e.external_id}`}>\n {l.failureLine(summarizeError(error))}\n </p>\n ) : undefined,\n }\n }\n }\n }\n\n return (\n <ol className=\"flex flex-col\" data-testid={`${base}-list`}>\n {events.map((e, i) => {\n const { headline, extra } = describe(e)\n const last = i === events.length - 1\n return (\n <li\n key={e.external_id}\n className=\"relative flex gap-3 pb-4 last:pb-0\"\n data-testid={`${base}-entry-${e.external_id}`}\n data-kind={e.kind}\n >\n {!last && (\n <span className=\"absolute left-3 top-6 -ml-px h-[calc(100%-1.5rem)] w-px bg-border\" />\n )}\n <span\n className={cn(\n 'z-10 flex size-6 shrink-0 items-center justify-center rounded-full border bg-background',\n e.kind === 'failed' ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={`${base}-icon-${e.external_id}`}\n >\n {ICONS[e.kind]}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1 text-sm\">\n {e.actor_ext_id ? (\n <span className=\"inline-flex\" data-testid={`${base}-actor-${e.external_id}`}>\n {renderPerson(e.actor_ext_id)}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">{l.system}</span>\n )}\n <span className=\"font-medium\">{headline}</span>\n {e.kind === 'handed_off' && e.to_ext_id && (\n <span\n className=\"inline-flex items-center gap-1\"\n data-testid={`${base}-to-${e.external_id}`}\n >\n <ArrowRight className=\"size-3.5 text-muted-foreground\" aria-hidden />\n {renderPerson(e.to_ext_id)}\n </span>\n )}\n <time\n dateTime={e.created_at}\n title={formatExact(e.created_at)}\n className=\"ml-auto text-xs text-muted-foreground\"\n data-testid={`${base}-time-${e.external_id}`}\n >\n {formatRelative(e.created_at)}\n </time>\n </div>\n {extra}\n </div>\n </li>\n )\n })}\n </ol>\n )\n}\n\nfunction Quote({ text }: { text: string }) {\n return (\n <blockquote className=\"border-l-2 pl-2 text-xs text-muted-foreground whitespace-pre-wrap\">\n {text}\n </blockquote>\n )\n}\n","import { useCallback } from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n DEFAULT_TASK_ACTIVITY_LABELS,\n TaskActivityTimeline,\n type TaskActivityEvent,\n type TaskActivityLabels,\n type TaskActivityTimelineProps,\n} from './TaskActivityTimeline'\n\nexport interface TaskActivityDialogProps extends Omit<\n TaskActivityTimelineProps,\n 'events' | 'labels' | 'testId'\n> {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** The task's name, shown under the title. */\n taskName: string\n events: readonly TaskActivityEvent[] | undefined\n isLoading?: boolean\n isError?: boolean\n labels?: Partial<TaskActivityLabels>\n testId?: string\n}\n\n/** The task's history in a dialog: newest at the bottom, scrolled into view as events arrive. */\nexport function TaskActivityDialog({\n open,\n onOpenChange,\n taskName,\n events,\n isLoading,\n isError,\n labels,\n testId,\n ...timeline\n}: TaskActivityDialogProps) {\n const l = { ...DEFAULT_TASK_ACTIVITY_LABELS, ...labels }\n const id = testIdOr(testId, { testId: 'task-activity' })\n const count = events?.length ?? 0\n // Scroll the newest entry into view when the dialog opens and whenever an event arrives.\n const scrollToEnd = useCallback(\n (el: HTMLDivElement | null) => {\n if (count >= 0) el?.scrollIntoView?.({ block: 'end' })\n },\n [count]\n )\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent presentation=\"sheet\" className=\"max-h-[80dvh] sm:max-w-lg\" data-testid={id}>\n <DialogHeader>\n <DialogTitle>{l.title}</DialogTitle>\n <DialogDescription className=\"truncate\">{taskName}</DialogDescription>\n </DialogHeader>\n <div className=\"max-h-[55dvh] overflow-y-auto pr-1\" data-testid={`${id}-scroll`}>\n {isLoading && !events ? (\n <p className=\"text-sm text-muted-foreground\">{l.loading}</p>\n ) : isError && !events ? (\n <p className=\"text-sm text-destructive\">{l.error}</p>\n ) : count === 0 ? (\n <p className=\"text-sm text-muted-foreground\">{l.empty}</p>\n ) : (\n <TaskActivityTimeline events={events ?? []} labels={labels} testId={id} {...timeline} />\n )}\n <div ref={scrollToEnd} />\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import { MessageSquare } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskThreadChipLabels {\n open: string\n watch: string\n none: string\n}\n\nexport const DEFAULT_TASK_THREAD_CHIP_LABELS: TaskThreadChipLabels = {\n open: 'Open thread',\n watch: 'Watch live',\n none: 'No thread yet',\n}\n\nexport interface TaskThreadChipProps {\n /** Task id: keys the test id (`task-thread-{id}`). */\n id: string\n /** The task's conversation (a task is a conversation: its own id). */\n conversationId?: string | null\n /** An agent is writing into the thread right now. */\n generating?: boolean\n onOpen: (conversationId: string) => void\n testId?: string\n labels?: Partial<TaskThreadChipLabels>\n}\n\n/** The link from a task to its thread — live-pulsing while the agent works, muted before there is one. */\nexport function TaskThreadChip({\n id,\n conversationId,\n generating = false,\n onOpen,\n testId,\n labels,\n}: TaskThreadChipProps) {\n const l = { ...DEFAULT_TASK_THREAD_CHIP_LABELS, ...labels }\n if (!conversationId) {\n return (\n <span\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: `task-thread-${id}` })}\n data-state=\"none\"\n >\n <MessageSquare className=\"size-3.5 opacity-50\" aria-hidden />\n {l.none}\n </span>\n )\n }\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-7 gap-1.5 px-2 text-xs pointer-coarse:h-11',\n generating && 'text-ai-ink hover:text-ai-ink'\n )}\n onClick={() => onOpen(conversationId)}\n data-testid={testIdOr(testId, { testId: `task-thread-${id}` })}\n data-state={generating ? 'live' : 'idle'}\n >\n <span className=\"relative flex size-3.5 items-center justify-center\">\n {generating && (\n <span className=\"absolute inline-flex size-full animate-ping rounded-full bg-ai-soft\" />\n )}\n <MessageSquare className=\"relative size-3.5\" aria-hidden />\n </span>\n {generating ? l.watch : l.open}\n </Button>\n )\n}\n","import { Eye, History, Loader2 } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ActionLink } from '../../components/ActionLink'\n\nexport interface TaskRunView {\n id: string\n /** running | success | failed (others get a neutral pill). */\n status: string\n /** Formatted finish (or start) time; empty for none. */\n when?: string\n error?: string | null\n /** The run's `conversation_ext_id`; enables Open. See `TaskRunsDialogProps.onOpenRun`. */\n conversationId?: string | null\n}\n\n/** Fixed strings of the run-history dialog. */\nexport interface TaskRunsDialogLabels {\n /** Dialog title; receives the task name. */\n title: (taskName: string | undefined) => string\n description: string\n loading: string\n empty: string\n open: string\n}\n\nexport const DEFAULT_TASK_RUNS_DIALOG_LABELS: TaskRunsDialogLabels = {\n title: (taskName) => `Run history — ${taskName}`,\n description: 'Every time this task ran. Open a run to read or watch it in its conversation.',\n loading: 'Loading runs…',\n empty: 'This task hasn’t run yet.',\n open: 'Open',\n}\n\nexport interface TaskRunsDialogTestIds {\n modal: string\n empty: string\n list: string\n row: string\n open: string\n}\n\nexport interface TaskRunsDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n taskName?: string\n /** A workflow may fail before it creates a run conversation. */\n error?: string | null\n runs: TaskRunView[]\n isLoading: boolean\n /**\n * Jump into a run's conversation (the dialog closes afterwards).\n *\n * Deep-link contract: `conversationId` is the run's `conversation_ext_id` (`con-xxxxxxxx`, from\n * `useTaskRuns` / `TaskRunResponse`). ARBI defines no URL for it: the HOST decides where a\n * conversation lives (`/chat/${id}`, a dock, a modal). The conversation belongs to the task's\n * workspace (`TaskResponse.workspace_ext_id`), so a host whose route needs the workspace open\n * must switch to it first, then navigate. A run with no `conversationId` gets no Open button.\n */\n onOpenRun: (conversationId: string) => void\n /**\n * The same destination as an href, so Open is a real link (middle-click, copy address, new tab).\n * Return the URL for `run.conversationId`; `onOpenRun` still fires on a plain click for SPA\n * navigation. Leave unset for a button-only Open.\n */\n getRunHref?: (run: TaskRunView) => string | undefined\n testIds?: Partial<TaskRunsDialogTestIds>\n labels?: Partial<TaskRunsDialogLabels>\n}\n\nconst STATUS_STYLE: Record<string, string> = {\n running: 'bg-ai-soft text-ai-ink',\n success: 'bg-green-bg text-green-text',\n failed: 'bg-red-bg text-red-text',\n}\n\n/**\n * A task's run history. History is derived server-side from the run bookend notifications; each\n * run links to the conversation where its steps / goal / answer stream in the Message timeline.\n */\nexport function TaskRunsDialog({\n open,\n onOpenChange,\n taskName,\n error,\n runs,\n isLoading,\n onOpenRun,\n getRunHref,\n testIds,\n labels,\n}: TaskRunsDialogProps) {\n const l = { ...DEFAULT_TASK_RUNS_DIALOG_LABELS, ...labels }\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"max-h-[calc(100dvh-2rem)] max-w-lg overflow-y-auto\"\n data-testid={testIdOr(testIds?.modal, { testId: 'task-runs-modal' })}\n >\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <History size={16} /> {l.title(taskName)}\n </DialogTitle>\n <DialogDescription>{l.description}</DialogDescription>\n </DialogHeader>\n\n {error && (\n <p role=\"alert\" className=\"rounded-md bg-red-bg p-3 text-sm text-red-text\">\n {error}\n </p>\n )}\n\n {isLoading ? (\n <div className=\"flex items-center justify-center gap-2 py-8 text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {l.loading}\n </div>\n ) : runs.length === 0 ? (\n <p\n className=\"py-8 text-center text-sm text-muted-foreground\"\n data-testid={testIdOr(testIds?.empty, { testId: 'task-runs-empty' })}\n >\n {l.empty}\n </p>\n ) : (\n <ul\n className=\"space-y-2\"\n data-testid={testIdOr(testIds?.list, { testId: 'task-runs-list' })}\n >\n {runs.map((run) => (\n <li\n key={run.id}\n className=\"flex items-center gap-3 rounded-lg bg-muted p-3\"\n data-testid={testIdOr(testIds?.row, { testId: 'task-run-row' })}\n >\n <span\n className={cn(\n 'shrink-0 rounded-full px-2 py-0.5 text-xs font-medium capitalize',\n STATUS_STYLE[run.status] ?? 'bg-background text-muted-foreground'\n )}\n >\n {run.status}\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm\">{run.when || '—'}</p>\n {run.error && (\n <p className=\"truncate text-xs text-red-text\" title={run.error}>\n {run.error}\n </p>\n )}\n </div>\n {run.conversationId && (\n <Button\n asChild\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 shrink-0 gap-1.5 pointer-coarse:h-11\"\n >\n <ActionLink\n href={getRunHref?.(run)}\n onSelect={() => {\n onOpenRun(run.conversationId!)\n onOpenChange(false)\n }}\n data-testid={testIdOr(testIds?.open, { testId: 'task-run-open' })}\n >\n <Eye size={13} /> {l.open}\n </ActionLink>\n </Button>\n )}\n </li>\n ))}\n </ul>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n","import { ListTodo, Plus, Workflow } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { TabHeader, type Tab } from '../../shell/TabHeader'\n\n/** Fixed strings of the Tasks page chrome. */\nexport interface TasksChromeLabels {\n tasksTab: string\n newTask: string\n}\n\nexport const DEFAULT_TASKS_CHROME_LABELS: TasksChromeLabels = {\n tasksTab: 'Tasks',\n newTask: 'New task',\n}\n\nexport interface TasksToolbarProps {\n /** Number of tasks (shown on the single \"Tasks\" tab). */\n count: number\n onNewTask: () => void\n testIds?: Partial<{ tab: string; newTask: string }>\n labels?: Partial<TasksChromeLabels>\n}\n\n/** The Tasks page header: one \"Tasks\" tab with a count, and New task (the page's primary action). */\nexport function TasksToolbar({ count, onNewTask, testIds, labels }: TasksToolbarProps) {\n const l = { ...DEFAULT_TASKS_CHROME_LABELS, ...labels }\n const tabs: Tab[] = [\n {\n id: 'tasks',\n label: l.tasksTab,\n icon: <ListTodo className=\"size-4\" />,\n count,\n testId: testIdOr(testIds?.tab, { testId: 'tasks-tab' }),\n },\n ]\n return (\n <div className=\"sticky top-0 z-10 bg-background\" data-slot=\"tasks-toolbar\">\n <TabHeader\n tabs={tabs}\n activeTabId=\"tasks\"\n onTabChange={() => {}}\n rightContent={\n <Button\n onClick={onNewTask}\n data-testid={testIdOr(testIds?.newTask, { testId: 'task-new' })}\n >\n <Plus size={16} className=\"mr-1.5\" />\n {l.newTask}\n </Button>\n }\n />\n </div>\n )\n}\n\n/** Fixed strings of the Workflows page chrome. */\nexport interface WorkflowsChromeLabels {\n workflowsTab: string\n newWorkflow: string\n}\n\nexport const DEFAULT_WORKFLOWS_CHROME_LABELS: WorkflowsChromeLabels = {\n workflowsTab: 'Workflows',\n newWorkflow: 'New workflow',\n}\n\nexport interface WorkflowsToolbarProps {\n /** Number of workflows (shown on the single \"Workflows\" tab). */\n count: number\n onNewWorkflow: () => void\n testIds?: Partial<{ tab: string; newWorkflow: string }>\n labels?: Partial<WorkflowsChromeLabels>\n}\n\n/** The Workflows page header: one \"Workflows\" tab with a count, and New workflow. */\nexport function WorkflowsToolbar({ count, onNewWorkflow, testIds, labels }: WorkflowsToolbarProps) {\n const l = { ...DEFAULT_WORKFLOWS_CHROME_LABELS, ...labels }\n const tabs: Tab[] = [\n {\n id: 'workflows',\n label: l.workflowsTab,\n icon: <Workflow className=\"size-4\" />,\n count,\n testId: testIdOr(testIds?.tab, { testId: 'workflows-tab' }),\n },\n ]\n return (\n <div className=\"sticky top-0 z-10 bg-background\" data-slot=\"workflows-toolbar\">\n <TabHeader\n tabs={tabs}\n activeTabId=\"workflows\"\n onTabChange={() => {}}\n rightContent={\n <Button\n onClick={onNewWorkflow}\n data-testid={testIdOr(testIds?.newWorkflow, { testId: 'workflow-new' })}\n >\n <Plus size={16} className=\"mr-1.5\" />\n {l.newWorkflow}\n </Button>\n }\n />\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport type { AgentOption } from '../workflows/AgentSelect'\nimport type { SchemaFormLabels } from '../workflows/SchemaForm'\nimport type { WorkflowScopeSource } from '../workflows/WorkflowConfigDialog'\nimport type {\n WorkflowDefinition,\n WorkflowField,\n WorkflowInputs,\n WorkflowScope,\n} from '../workflows/types'\nimport { defaultInputs } from '../workflows/workflow'\nimport type { RecurrenceBuilderProps } from './RecurrenceBuilder'\n\n/**\n * When the assistant starts. `manual` means it only acts when asked (an @mention, or sending work back);\n * `now` starts it at once; `once`, `repeat`, `event` and `task` (after another task is signed off) start\n * it unattended.\n */\nexport type TaskWhen = 'manual' | 'now' | 'once' | 'repeat' | 'event' | 'task'\n\nexport type TaskAccessMode = 'ask_each_run' | 'standing'\n\n/**\n * Whether the assistant has been given work. Every task has an assistant; `agent` means it was configured\n * to prepare the task (it has an instruction and a start), `me` means it is on standby.\n */\nexport type TaskAssignee = 'me' | 'agent'\n\n/** Everything the composer collects. The host maps it onto its API. */\nexport interface TaskComposerValues {\n assignee: TaskAssignee\n workflowId: string\n inputs: WorkflowInputs\n when: TaskWhen\n /** datetime-local value (`once`). */\n runAt: string\n rrule: string\n timezone: string\n eventKind: string\n /** `task`: the id (`con-…`) of the task (conversation) this one waits on. */\n afterTaskId: string\n /** The task this is a sub-task of (`con-…`); `''` = a top-level task. */\n parentTaskId: string\n /** The person who signs the task off (`usr-…`); `''` = me. Always a human. */\n signoffUserId: string\n /** Shared with the workspace's members (like a document); off keeps it private to its owner. */\n shared: boolean\n /** What the task is, in the owner's words. */\n description: string\n /** datetime-local value; empty = no due date. */\n dueAt: string\n /** `''` = the user's own assistant. */\n agentId: string\n /** The task's title. */\n name: string\n /** The reviewer is always told when the assistant finishes; kept so hosts can map it. */\n notifyOnComplete: boolean\n /** Only asked for tasks the assistant starts unattended. */\n access: TaskAccessMode\n /** A workflow's saved equality filters on its event; carried through an edit unchanged (no control). */\n eventFilter?: Record<string, string | number | boolean> | null\n}\n\nexport interface TaskComposerLabels {\n titleNew: string\n titleEdit: string\n description: string\n titleNewWorkflow: string\n titleRunTemplate: (name: string) => string\n titleEditWorkflow: string\n descriptionWorkflow: string\n workflowNamePlaceholder: string\n createWorkflow: string\n /** The workflow dialog's three required parts, in order, and what is missing from each. */\n whenHeading: string\n whoHeading: string\n /** \"Run as\": the person themself (the default for Run now) or an agent (required for a scheduled run). */\n runAs: string\n runLater: string\n addFilesReason: string\n needDocument: string\n addPlan: string\n hidePlan: string\n /** The toggle when the workflow already has a plan. */\n showPlan: string\n runAsMe: string\n runAsAgentHint: string\n needAgent: string\n runNow: string\n saveWorkflow: string\n needWhat: string\n needRunAt: string\n needRrule: string\n needEvent: string\n needAfterTask: string\n /** The \"More options\" disclosure (name, details, sign-off, visibility, plan, unattended access). */\n moreOptions: string\n fewerOptions: string\n nameHint: string\n titleLabel: string\n titlePlaceholder: string\n descriptionLabel: string\n descriptionPlaceholder: string\n signoff: string\n signoffMe: string\n due: string\n dueNone: string\n dueClear: string\n parentTask: string\n parentTaskNone: string\n visibility: string\n visibilityWorkspace: string\n visibilityPrivate: string\n assistant: string\n assistantStandby: string\n assistantPreparing: (when: string) => string\n configure: string\n configureClose: string\n what: string\n template: string\n whatPlaceholder: string\n plan: string\n planHint: string\n start: string\n whenOptions: Record<TaskWhen, string>\n runAt: string\n /** Shown when the start time is already past: the server refuses it. */\n runAtPast: string\n event: string\n eventPlaceholder: string\n eventHint: ReactNode\n afterTask: string\n afterTaskPlaceholder: string\n which: string\n myAssistant: string\n permission: string\n /** The disclosure that holds who runs it, access, name, owner and visibility. */\n runOptions: string\n /** Its summary line: \"Runs as Assistant · ask me each time\". */\n runOptionsSummary: (agent: string, access: string) => string\n permissionHint: string\n accessOptions: Record<TaskAccessMode, { label: string; hint: string }>\n timezone: string\n search: string\n empty: string\n cancel: string\n addTask: string\n addAndStart: string\n addAndSchedule: string\n save: string\n saving: string\n}\n\nexport const DEFAULT_TASK_COMPOSER_LABELS: TaskComposerLabels = {\n titleNew: 'New task',\n titleEdit: 'Edit task',\n description: 'Add a task. Every task has an assistant; configure it to have it prepare the work.',\n titleNewWorkflow: 'New workflow',\n /** The title while a template is picked: \"Run Summarise\". */\n titleRunTemplate: (name: string) => `Run ${name}`,\n titleEditWorkflow: 'Edit workflow',\n descriptionWorkflow:\n 'Run it now, or choose Run later to have it start on a date, repeat, or follow an event.',\n workflowNamePlaceholder: 'Name this workflow',\n createWorkflow: 'Create workflow',\n whenHeading: 'When should it run?',\n whoHeading: 'Which agent runs it?',\n runAs: 'Run as',\n runLater: 'Run later',\n addFilesReason: 'This needs files to work on. Add some, then run it.',\n needDocument: 'Pick or add a document',\n addPlan: 'Add a plan',\n hidePlan: 'Hide the plan',\n showPlan: 'Show the plan',\n runAsMe: 'Me',\n runAsAgentHint:\n 'Nobody is there when a saved workflow runs, so an agent runs it. Your Assistant is the default.',\n needAgent: 'Choose the agent that runs it.',\n runNow: 'Run now',\n saveWorkflow: 'Save workflow',\n needWhat: 'Say what it should do: choose a template and fill it in, or write an instruction.',\n needRunAt: 'Pick the date and time it should run.',\n needRrule: 'Choose how often it repeats.',\n needEvent: 'Say which event starts it.',\n needAfterTask: 'Choose the task it follows.',\n moreOptions: 'More options',\n fewerOptions: 'Fewer options',\n nameHint: 'Leave blank to use the name shown.',\n titleLabel: 'Title',\n titlePlaceholder: 'What needs doing?',\n descriptionLabel: 'Description',\n descriptionPlaceholder: 'Add details (optional)',\n signoff: 'Owner',\n signoffMe: 'Me',\n due: 'Due',\n dueNone: 'No date',\n dueClear: 'Clear date',\n parentTask: 'Part of',\n parentTaskNone: 'Nothing (top-level)',\n visibility: 'Visible to',\n visibilityWorkspace: 'Workspace',\n visibilityPrivate: 'Only me',\n assistant: 'Task Assistant',\n assistantStandby: 'On standby. It replies when you @mention it in the task’s thread.',\n assistantPreparing: (when) =>\n `Will prepare this task ${when}. You review its work before it is done.`,\n configure: 'Configure',\n configureClose: 'Done',\n what: 'What should it do?',\n template: 'Skill',\n whatPlaceholder: 'Choose…',\n plan: 'Plan',\n planHint: 'The checklist it is held to. You see how it did when you review.',\n start: 'Start',\n whenOptions: {\n manual: 'When asked',\n now: 'Now',\n once: 'On a date',\n repeat: 'Repeat',\n event: 'When something happens',\n task: 'After another task',\n },\n runAt: 'Start at',\n runAtPast: 'Pick a time in the future.',\n event: 'Event',\n eventPlaceholder: 'user_message',\n eventHint: 'It starts whenever this kind of notification reaches you.',\n afterTask: 'After',\n afterTaskPlaceholder: 'Choose a task…',\n which: 'Assistant',\n myAssistant: 'Mine',\n permission: 'Access',\n runOptions: 'Run options',\n runOptionsSummary: (agent, access) => `Runs as ${agent} · ${access.toLowerCase()}`,\n permissionHint:\n 'It starts while you are away, so it needs your permission to use this workspace.',\n accessOptions: {\n ask_each_run: {\n label: 'Ask me each time',\n hint: 'When it is due, it waits until you allow it.',\n },\n standing: {\n label: 'Always allowed',\n hint: 'It joins the workspace and can work while you are away. Only for assistants you trust.',\n },\n },\n timezone: 'Timezone',\n search: 'Search…',\n empty: 'No match.',\n cancel: 'Cancel',\n addTask: 'Add task',\n addAndStart: 'Add task and start',\n addAndSchedule: 'Save as workflow',\n save: 'Save changes',\n saving: 'Saving…',\n}\n\nexport interface TaskOption {\n id: string\n name: string\n}\n\n/** A person who can be asked to sign a task off. */\nexport interface PersonOption {\n id: string\n label: string\n /** Small line after the name (e.g. their role). */\n description?: string\n}\n\nexport interface TaskComposerProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /**\n * `work` (default) adds a task: \"Now\" starts it at once and any other start saves a workflow.\n * `workflow` is the workflow dialog itself (new or edit): a trigger and an action are required, and\n * the task-only properties (due date, parent) are hidden.\n */\n kind?: 'work' | 'workflow'\n /**\n * Editing an existing task, or a workflow. A task keeps the start and assistant it was created with;\n * a workflow can change both.\n */\n isEdit?: boolean\n /** Workflows the assistant can run. The host includes its \"my own instruction\" entry. */\n workflows: WorkflowDefinition[]\n agents: AgentOption[]\n /** People who can sign a task off (humans who can edit the workspace, besides me). Omit to hide the field. */\n people?: PersonOption[]\n /** Tasks a new task can be part of, or wait on (`when: 'task'`) — conversations with a status. */\n tasks?: TaskOption[]\n /**\n * The owner's Assistant (an agent id). A scheduled workflow needs an agent, so switching away from\n * \"Now\" selects this one when \"Run as\" is still the person themself.\n */\n defaultAgentId?: string\n /** Controlled values; omit to let the composer hold them (seeded by `initialValues`). */\n values?: TaskComposerValues\n initialValues?: Partial<TaskComposerValues>\n onValuesChange?: (values: TaskComposerValues) => void\n timezones?: string[]\n /** The plan editor, shown inline when the assistant is configured. Omit when not applicable. */\n goal?: ReactNode | ((values: TaskComposerValues) => ReactNode)\n /** What \"always allowed\" means for this assistant (e.g. the workspaces it will hold standing access to). */\n standingAccess?: ReactNode | ((values: TaskComposerValues) => ReactNode)\n isPending?: boolean\n /** A plan is being drafted: saving waits for it, or the plan would be dropped. */\n planDrafting?: boolean\n /** The plan already stored (an edit): the toggle offers to show it rather than to add one. */\n hasPlan?: boolean\n onSubmit: (values: TaskComposerValues) => void\n /**\n * The workspace's files behind `scope` fields (the folder/label picker) and a `documents` field (an\n * explicit pick). The host owns the file data; without these those fields render nothing. A scope pick\n * is resolved to explicit file ids on submit (`scopeSource.resolveDocuments`).\n */\n scopeSource?: WorkflowScopeSource\n renderScope?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n renderDocuments?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** The host's \"Add files\" control, offered instead of the form when a template needs files and there are none. */\n addFilesAction?: ReactNode\n /** Files dropped on the \"add files\" state: the host uploads them. */\n onDropFiles?: (files: File[]) => void\n /** The assistant's workflow input forms: `renderIcon` maps a field option's icon key. */\n renderIcon?: (key: string) => ReactNode\n labels?: Partial<TaskComposerLabels>\n formLabels?: Partial<SchemaFormLabels>\n recurrence?: Pick<RecurrenceBuilderProps, 'testIds' | 'labels'>\n testId?: string\n}\n\nexport function defaultTaskComposerValues(\n workflows: WorkflowDefinition[],\n initial?: Partial<TaskComposerValues>\n): TaskComposerValues {\n const workflowId = initial?.workflowId ?? workflows[0]?.id ?? ''\n const workflow = workflows.find((w) => w.id === workflowId)\n return {\n assignee: 'me',\n workflowId,\n inputs: workflow ? { ...defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },\n when: 'manual',\n runAt: '',\n rrule: '',\n timezone: 'UTC',\n eventKind: 'user_message',\n afterTaskId: '',\n parentTaskId: '',\n signoffUserId: '',\n shared: true,\n description: '',\n dueAt: '',\n agentId: '',\n name: '',\n notifyOnComplete: true,\n access: 'ask_each_run',\n ...initial,\n }\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { Bot, CornerDownRight, KeyRound, Loader2, Play, UserCheck, ChevronDown } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Input,\n Label,\n Textarea,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ModalHeader } from '../../settings/ModalScaffold'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AddFilesFirst } from '../../home/AddFilesFirst'\nimport { SchemaForm } from '../workflows/SchemaForm'\nimport { defaultScopeRenderer, resolveScopeInputs } from '../workflows/scopeRender'\nimport type { WorkflowInputValue } from '../workflows/types'\nimport { defaultInputs, validateInputs } from '../workflows/workflow'\nimport { PersonAvatar } from './PersonPill'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport { RecurrenceBuilder } from './RecurrenceBuilder'\nimport {\n DEFAULT_TASK_COMPOSER_LABELS,\n defaultTaskComposerValues,\n type TaskAccessMode,\n type TaskComposerLabels,\n type TaskComposerProps,\n type TaskComposerValues,\n type TaskWhen,\n} from './taskComposerTypes'\nimport { deriveWorkflowName } from './taskRequest'\n\n/** A workflow starts at a time, on a repeat, on an event or after a task: never \"now\". */\nconst WHEN_ORDER: TaskWhen[] = ['now', 'once', 'repeat', 'event', 'task']\nconst GLYPH = 'size-3.5 shrink-0'\n\n/** What is still missing from the trigger, as the label key that says so; null when it is complete. */\nfunction missingWhen(values: TaskComposerValues, runAtPast: boolean) {\n if (values.when === 'now' || values.when === 'manual') return null\n if (values.when === 'once') return !values.runAt || runAtPast ? 'needRunAt' : null\n if (values.when === 'repeat') return values.rrule.trim() ? null : 'needRrule'\n if (values.when === 'event') return values.eventKind.trim() ? null : 'needEvent'\n if (values.when === 'task') return values.afterTaskId ? null : 'needAfterTask'\n return null\n}\n\n/**\n * The workflow dialog, where a skill is run: what it does, when it runs (Now by default, or on a date, a\n * repeat, an event or after a task) and who runs it (the person, or an agent), up front and in that\n * order, each saying in plain words what is missing. \"Now\" runs it at once and saves nothing; every\n * other start saves a workflow, which needs an agent because nobody is present when it fires. The name, details, sign-off, visibility, plan and unattended\n * access are optional and sit behind \"More options\". A blank name is derived from the template or the\n * instruction and shown as the placeholder, so the Create button needs only the three required parts.\n */\nexport function WorkflowComposer({\n open,\n onOpenChange,\n isEdit = false,\n workflows,\n agents,\n people,\n tasks = [],\n values: valuesProp,\n initialValues,\n onValuesChange,\n timezones = [],\n goal,\n standingAccess,\n scopeSource,\n renderScope,\n renderDocuments,\n addFilesAction,\n onDropFiles,\n defaultAgentId,\n isPending,\n planDrafting = false,\n hasPlan = false,\n onSubmit,\n renderIcon,\n labels,\n formLabels,\n recurrence,\n testId,\n}: TaskComposerProps) {\n const l: TaskComposerLabels = {\n ...DEFAULT_TASK_COMPOSER_LABELS,\n ...labels,\n whenOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.whenOptions, ...labels?.whenOptions },\n accessOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.accessOptions, ...labels?.accessOptions },\n }\n const seed = useMemo(\n () => defaultTaskComposerValues(workflows, initialValues),\n // Seeded once per open; the host re-keys the composer for a different workflow.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [workflows, open]\n )\n const [values, setValues] = useControllableState<TaskComposerValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [planOpen, setPlanOpen] = useState(false)\n const [moreOpen, setMoreOpen] = useState(false)\n // The agent was filled in for a scheduled start (not chosen): said inline, and undone going back to Now.\n const [agentAutoSet, setAgentAutoSet] = useState(false)\n // Each open starts from the seed again (uncontrolled only), with the extras folded away.\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setPlanOpen(false)\n setAgentAutoSet(false)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const id = testIdOr(testId, { testId: 'task-composer' })\n const set = <K extends keyof TaskComposerValues>(key: K, value: TaskComposerValues[K]) =>\n setValues({ ...values, [key]: value })\n\n const workflow = workflows.find((w) => w.id === values.workflowId)\n // An unattended run has no one to scope files for, so scope fields are not asked.\n const fields = workflow?.inputs ?? []\n // The template needs files and the workspace has none: offer to add some instead of an unusable form.\n // A template with its own file pick shows an empty state with Add files in that field; one that only\n // takes a scope has nothing to show without files, so the whole form gives way to the offer.\n const noFiles = Boolean(\n workflow?.requiresFiles &&\n scopeSource &&\n scopeSource.totalCount === 0 &&\n addFilesAction &&\n !fields.some((f) => f.type === 'documents')\n )\n // A required file pick that is still empty says so in plain words.\n const missingDocument = Boolean(\n workflow &&\n fields.some((f) => {\n if (f.type !== 'documents' || !f.required) return false\n const v = values.inputs[f.name]\n const docs =\n v && typeof v === 'object' ? (v as { documents?: string[] }).documents : undefined\n return !docs?.length\n })\n )\n const whatMissing =\n !workflow ||\n Object.keys(validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0\n\n // A start time already past is refused by the server; an unchanged one (editing a spent workflow) is not ours to block.\n const runAtPast =\n values.when === 'once' &&\n values.runAt !== '' &&\n values.runAt !== initialValues?.runAt &&\n new Date(values.runAt).getTime() <= Date.now()\n const whenMissing = missingWhen(values, runAtPast)\n // \"Run later\": the schedule, the agent and the access are asked. A saved workflow is always later.\n const scheduled = values.when !== 'now' && values.when !== 'manual'\n const agentMissing = scheduled && values.agentId === ''\n const canSubmit =\n !whatMissing && !noFiles && whenMissing === null && !agentMissing && !isPending && !planDrafting\n\n const derivedName = workflow ? deriveWorkflowName(workflow, values.inputs) : ''\n const pickWorkflow = (next: string) => {\n const def = workflows.find((w) => w.id === next)\n setValues({ ...values, workflowId: next, inputs: def ? defaultInputs(def) : {} })\n }\n\n const pickWhen = (next: TaskWhen) => {\n const goesScheduled = next !== 'now' && next !== 'manual'\n if (goesScheduled && values.agentId === '' && defaultAgentId) {\n setAgentAutoSet(true)\n setValues({ ...values, when: next, agentId: defaultAgentId })\n } else if (!goesScheduled && agentAutoSet) {\n setAgentAutoSet(false)\n setValues({ ...values, when: next, agentId: '' })\n } else {\n setValues({ ...values, when: next })\n }\n }\n // The assistants can arrive after \"Run later\" was picked: fill the default in then, not only on the pick.\n useEffect(() => {\n if (scheduled && values.agentId === '' && defaultAgentId) {\n setAgentAutoSet(true)\n setValues({ ...values, agentId: defaultAgentId })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scheduled, defaultAgentId, values.agentId])\n const pickAgent = (agentId: string) => {\n setAgentAutoSet(false)\n set('agentId', agentId)\n }\n\n const submit = () =>\n onSubmit({\n ...values,\n // A scope pick is bound to explicit file ids before anything is sent.\n inputs: workflow ? resolveScopeInputs(workflow, values.inputs, scopeSource) : values.inputs,\n assignee: 'agent',\n notifyOnComplete: true,\n name: values.name.trim(),\n })\n\n const pillLabels = { search: l.search, empty: l.empty }\n const personOptions: PillOption[] = (people ?? []).map((p) => ({\n id: p.id,\n label: p.label,\n description: p.description,\n icon: <PersonAvatar person={{ id: p.id, label: p.label }} />,\n }))\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n // \"Run now\" is the footer's primary action, so the start list holds only the later starts.\n const whenOptions: PillOption[] = (\n isEdit ? ['manual' as const, ...WHEN_ORDER.slice(1)] : WHEN_ORDER.slice(1)\n ).map((mode) => ({\n id: mode,\n label: l.whenOptions[mode],\n }))\n const assistantOptions: PillOption[] = agents.map((a) => ({ id: a.id, label: a.label }))\n // Shared workflows may reference an agent outside the viewer's own agent list.\n if (values.agentId && !assistantOptions.some((a) => a.id === values.agentId)) {\n assistantOptions.push({ id: values.agentId, label: 'Assigned agent' })\n }\n const goalNode = typeof goal === 'function' ? goal(values) : goal\n // A template picked from the list names the dialog (\"Run Summarise\"); the own-instruction entry does not.\n const pickedTemplate = workflows.find((w) => w.id === values.workflowId && !w.generic)\n const hint = (key: 'needWhat' | 'needRunAt' | 'needRrule' | 'needEvent' | 'needAfterTask') =>\n l[key]\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"flex max-h-[calc(100dvh-2rem)] flex-col overflow-hidden p-0 sm:max-w-xl\"\n data-testid={id}\n >\n <ModalHeader>\n <DialogTitle>\n {isEdit\n ? l.titleEditWorkflow\n : pickedTemplate\n ? l.titleRunTemplate(pickedTemplate.title)\n : l.titleNewWorkflow}\n </DialogTitle>\n {!isEdit && <DialogDescription>{l.descriptionWorkflow}</DialogDescription>}\n {isEdit && (\n <DialogDescription className=\"sr-only\">{l.descriptionWorkflow}</DialogDescription>\n )}\n </ModalHeader>\n\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) submit()\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-5 overflow-y-auto px-6 pb-4\">\n {/* What it does: the template and its form (all there is until Run later) */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-what`}>\n <h3 className=\"text-sm font-medium\">{l.what}</h3>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.template}\n value={values.workflowId}\n options={workflows.map((w) => ({ id: w.id, label: w.title }))}\n onChange={pickWorkflow}\n labels={pillLabels}\n testId={`${id}-workflow`}\n className=\"self-start\"\n />\n {noFiles && (\n <div\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault()\n const files = Array.from(e.dataTransfer?.files ?? [])\n if (files.length) onDropFiles?.(files)\n }}\n data-testid={`${id}-dropzone`}\n >\n <AddFilesFirst\n reason={l.addFilesReason}\n action={addFilesAction}\n testId={`${id}-empty-state`}\n />\n </div>\n )}\n {!noFiles && workflow && fields.length > 0 && (\n <SchemaForm\n fields={fields}\n values={values.inputs}\n onChange={(name: string, value: WorkflowInputValue) =>\n set('inputs', { ...values.inputs, [name]: value })\n }\n renderScope={renderScope ?? defaultScopeRenderer(scopeSource)}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n labels={formLabels}\n testIdPrefix={`${id}-field`}\n />\n )}\n {/* A template names its own required fields; only a free instruction needs a hint. */}\n {missingDocument && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-document-hint`}>\n {l.needDocument}\n </p>\n )}\n {whatMissing && workflow?.inputs.some((i) => i.name === 'instruction') && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-what-hint`}>\n {hint('needWhat')}\n </p>\n )}\n </section>\n\n {/* A plan rides with the run, now or saved with the workflow (it grades each scheduled run): a quiet,\n collapsed extra */}\n {goalNode != null && (\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-assistant`}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1 self-start px-2 pointer-coarse:h-11\"\n onClick={() => setPlanOpen((v) => !v)}\n aria-expanded={planOpen}\n data-testid={`${id}-plan-toggle`}\n >\n {planOpen ? l.hidePlan : hasPlan ? l.showPlan : l.addPlan}\n <ChevronDown\n className={cn('size-3.5 transition-transform', planOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n {planOpen && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-plan`}>\n <p className=\"text-xs text-muted-foreground\">{l.planHint}</p>\n {goalNode}\n </div>\n )}\n </section>\n )}\n\n {(scheduled || isEdit) && (\n <>\n {/* When it runs */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-when-section`}>\n <h3 className=\"text-sm font-medium\">{l.whenHeading}</h3>\n <PillSelect\n icon={<Play className={GLYPH} aria-hidden />}\n prefix={l.start}\n value={values.when}\n options={whenOptions}\n onChange={(v) => pickWhen(v as TaskWhen)}\n labels={pillLabels}\n testId={`${id}-when`}\n className=\"self-start\"\n />\n {values.when === 'once' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-runat\" className=\"sr-only\">\n {l.runAt}\n </Label>\n <Input\n id=\"task-composer-runat\"\n type=\"datetime-local\"\n value={values.runAt}\n onChange={(e) => set('runAt', e.target.value)}\n className=\"max-w-xs\"\n aria-invalid={runAtPast || undefined}\n data-testid={`${id}-run-at`}\n />\n {runAtPast && (\n <p className=\"text-xs text-destructive\" data-testid={`${id}-run-at-past`}>\n {l.runAtPast}\n </p>\n )}\n </div>\n )}\n {values.when === 'repeat' && (\n <>\n <RecurrenceBuilder\n rrule={values.rrule}\n onChange={(r) => set('rrule', r)}\n {...recurrence}\n />\n {timezones.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <Label htmlFor=\"task-composer-timezone\" className=\"text-xs\">\n {l.timezone}\n </Label>\n <Input\n id=\"task-composer-timezone\"\n list=\"task-composer-timezones\"\n value={values.timezone}\n onChange={(e) => set('timezone', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-timezone`}\n />\n <datalist id=\"task-composer-timezones\">\n {timezones.map((tz) => (\n <option key={tz} value={tz} />\n ))}\n </datalist>\n </div>\n )}\n </>\n )}\n {values.when === 'event' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-event\" className=\"sr-only\">\n {l.event}\n </Label>\n <Input\n id=\"task-composer-event\"\n value={values.eventKind}\n placeholder={l.eventPlaceholder}\n onChange={(e) => set('eventKind', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-event`}\n />\n <p className=\"text-xs text-muted-foreground\">{l.eventHint}</p>\n </div>\n )}\n {values.when === 'task' && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.afterTask}\n value={values.afterTaskId}\n options={taskOptions}\n onChange={(v) => set('afterTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-after-task`}\n className=\"self-start\"\n />\n )}\n {whenMissing && !runAtPast && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-when-hint`}>\n {hint(whenMissing)}\n </p>\n )}\n </section>\n\n {/* Who runs it, the access it gets, its name and owner: sensible defaults, so folded away. */}\n <section className=\"flex flex-col gap-3\" data-testid={`${id}-more`}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-auto min-h-8 flex-col items-start gap-0.5 self-start px-2 py-1 text-left pointer-coarse:min-h-11\"\n onClick={() => setMoreOpen((v) => !v)}\n aria-expanded={moreOpen || agentMissing}\n data-testid={`${id}-more-toggle`}\n >\n <span className=\"flex items-center gap-1\">\n {l.runOptions}\n <ChevronDown\n className={cn(\n 'size-3.5 transition-transform',\n (moreOpen || agentMissing) && 'rotate-180'\n )}\n aria-hidden\n />\n </span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n {l.runOptionsSummary(\n assistantOptions.find((a) => a.id === values.agentId)?.label ?? l.runAsMe,\n l.accessOptions[values.access].label\n )}\n </span>\n </Button>\n {(moreOpen || agentMissing) && (\n <div className=\"flex flex-col gap-5\" data-testid={`${id}-more-body`}>\n {/* Which agent runs it: nobody is present when it fires */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-who`}>\n <h3 className=\"text-sm font-medium\">{l.whoHeading}</h3>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.runAs}\n value={values.agentId}\n options={assistantOptions}\n onChange={pickAgent}\n searchable={assistantOptions.length > 6}\n labels={pillLabels}\n testId={`${id}-agent`}\n className=\"self-start\"\n />\n <p\n className=\"text-xs text-muted-foreground\"\n data-testid={`${id}-agent-note`}\n >\n {l.runAsAgentHint}\n </p>\n {agentMissing && (\n <p\n className=\"text-xs text-muted-foreground\"\n data-testid={`${id}-agent-hint`}\n >\n {l.needAgent}\n </p>\n )}\n </section>\n\n {/* The access it gets while nobody is there */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-config`}>\n <PillSelect\n icon={<KeyRound className={GLYPH} aria-hidden />}\n prefix={l.permission}\n value={values.access}\n options={(Object.keys(l.accessOptions) as TaskAccessMode[]).map(\n (mode) => ({\n id: mode,\n label: l.accessOptions[mode].label,\n })\n )}\n onChange={(v) => set('access', v as TaskAccessMode)}\n labels={pillLabels}\n testId={`${id}-access`}\n className=\"self-start\"\n />\n <div\n className=\"flex flex-col gap-1 rounded-md bg-muted p-2\"\n data-testid={`${id}-access-block`}\n >\n <p className=\"text-xs text-muted-foreground\">\n {l.permissionHint} {l.accessOptions[values.access].hint}\n </p>\n {values.access === 'standing' &&\n (typeof standingAccess === 'function'\n ? standingAccess(values)\n : standingAccess)}\n </div>\n </section>\n\n {/* Optional extras */}\n <section className=\"flex flex-col gap-3\" data-testid={`${id}-extras`}>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"task-composer-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"task-composer-title\"\n value={values.name}\n placeholder={derivedName || l.workflowNamePlaceholder}\n onChange={(e) => set('name', e.target.value)}\n className=\"h-10 text-base font-medium\"\n data-testid={`${id}-title`}\n />\n <p className=\"text-xs text-muted-foreground\">{l.nameHint}</p>\n <Label htmlFor=\"task-composer-description\" className=\"sr-only\">\n {l.descriptionLabel}\n </Label>\n <Textarea\n id=\"task-composer-description\"\n value={values.description}\n placeholder={l.descriptionPlaceholder}\n rows={2}\n onChange={(e) => set('description', e.target.value)}\n data-testid={`${id}-description`}\n />\n </div>\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={`${id}-properties`}\n >\n {people !== undefined && (\n <PillSelect\n icon={<UserCheck className={GLYPH} aria-hidden />}\n prefix={l.signoff}\n value={values.signoffUserId}\n options={personOptions}\n noneOption={{ id: '', label: l.signoffMe }}\n onChange={(v) => set('signoffUserId', v)}\n searchable={personOptions.length > 6}\n labels={pillLabels}\n testId={`${id}-signoff`}\n />\n )}\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n data-testid={`${id}-visibility`}\n />\n </div>\n </section>\n </div>\n )}\n </section>\n </>\n )}\n </div>\n\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n {!isEdit && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => (scheduled ? pickWhen('now') : pickWhen('once'))}\n data-testid={scheduled ? `${id}-run-now-back` : `${id}-run-later`}\n className=\"pointer-coarse:min-h-11\"\n >\n {scheduled ? l.runNow : l.runLater}\n </Button>\n )}\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {isPending ? l.saving : isEdit ? l.save : scheduled ? l.saveWorkflow : l.runNow}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import { DueDateMenu } from './DueDateMenu'\nimport { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport {\n Bot,\n CalendarClock,\n ChevronDown,\n CornerDownRight,\n KeyRound,\n Loader2,\n Play,\n UserCheck,\n X,\n} from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n EntityPill,\n Input,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Textarea,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ModalHeader } from '../../settings/ModalScaffold'\nimport { useControllableState } from '../../lib/useControllableState'\nimport type { AgentOption } from '../workflows/AgentSelect'\nimport { SchemaForm, type SchemaFormLabels } from '../workflows/SchemaForm'\nimport { defaultScopeRenderer, resolveScopeInputs } from '../workflows/scopeRender'\nimport type { WorkflowDefinition, WorkflowInputs, WorkflowInputValue } from '../workflows/types'\nimport { defaultInputs, validateInputs } from '../workflows/workflow'\nimport { PersonAvatar } from './PersonPill'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport { WorkflowComposer } from './WorkflowComposer'\nimport { RecurrenceBuilder } from './RecurrenceBuilder'\nimport {\n DEFAULT_TASK_COMPOSER_LABELS,\n defaultTaskComposerValues,\n type TaskAccessMode,\n type TaskComposerLabels,\n type TaskComposerProps,\n type TaskComposerValues,\n type TaskWhen,\n} from './taskComposerTypes'\n\nexport * from './taskComposerTypes'\n\n// The assistant starts now or on a trigger; `manual` is the standby state.\nconst WHEN_ORDER: TaskWhen[] = ['now', 'once', 'repeat', 'event', 'task']\n\n/** A datetime-local value as \"Fri 14 Oct, 09:00\" (the pill's label); the raw value if it is not a date. */\nfunction formatDue(local: string): string {\n const d = new Date(local)\n if (Number.isNaN(d.getTime())) return local\n return d.toLocaleString(undefined, {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n })\n}\n\nconst GLYPH = 'size-3.5 shrink-0'\n\n/**\n * One dialog to add a task, built from the app's own pills and lists. The task comes first, like a list\n * item: a title and details, then its properties as pills (who signs it off, due date, what it is part of,\n * who can see it). Every task has a Task Assistant; configuring it is optional. Left alone it is on standby\n * and replies when @mentioned. Give it work and it prepares the task for you to review. A person starting it\n * now is never asked about access; only an assistant that starts unattended needs permission up front.\n */\nfunction WorkTaskComposer({\n open,\n onOpenChange,\n isEdit = false,\n workflows,\n agents,\n people,\n tasks = [],\n values: valuesProp,\n initialValues,\n onValuesChange,\n timezones = [],\n goal,\n standingAccess,\n scopeSource,\n renderScope,\n renderDocuments,\n isPending,\n planDrafting = false,\n onSubmit,\n renderIcon,\n labels,\n formLabels,\n recurrence,\n testId,\n}: TaskComposerProps) {\n const l: TaskComposerLabels = {\n ...DEFAULT_TASK_COMPOSER_LABELS,\n ...labels,\n whenOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.whenOptions, ...labels?.whenOptions },\n accessOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.accessOptions, ...labels?.accessOptions },\n }\n const seed = useMemo(\n () => defaultTaskComposerValues(workflows, initialValues),\n // Seeded once per open; the host re-keys the composer for a different task.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [workflows, open]\n )\n const [values, setValues] = useControllableState<TaskComposerValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [configOpen, setConfigOpen] = useState(seed.assignee === 'agent')\n // Each open starts from the seed again (uncontrolled only).\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setConfigOpen(seed.assignee === 'agent')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const workflow = workflows.find((w) => w.id === values.workflowId)\n // The assistant runs unattended: file scoping is a chat-launch concern, so scope fields are not asked.\n const fields = workflow?.inputs ?? []\n const errors = workflow ? validateInputs({ ...workflow, inputs: fields }, values.inputs) : {}\n // Opening Configure only shows the options. The assistant is given work once its instruction is filled in.\n const hasWork = configOpen && Boolean(workflow) && Object.keys(errors).length === 0\n const unattended = hasWork && values.when !== 'now' && values.when !== 'manual'\n // The original task's kind cannot change after it exists.\n const canConfigure = !isEdit || seed.assignee === 'agent'\n // A task's start and assistant are fixed once it exists.\n const lockedStart = isEdit\n\n const set = <K extends keyof TaskComposerValues>(key: K, value: TaskComposerValues[K]) =>\n setValues({ ...values, [key]: value })\n\n const pickWorkflow = (id: string) => {\n const next = workflows.find((w) => w.id === id)\n setValues({ ...values, workflowId: id, inputs: next ? defaultInputs(next) : {} })\n }\n\n const openConfigure = () => {\n setConfigOpen(true)\n if (values.when === 'manual') setValues({ ...values, when: 'now' })\n }\n\n // A start time already past is refused by the server; an unchanged one (editing a spent workflow) is not ours to block.\n const runAtPast =\n values.when === 'once' &&\n values.runAt !== '' &&\n values.runAt !== initialValues?.runAt &&\n new Date(values.runAt).getTime() <= Date.now()\n const whenError =\n (values.when === 'once' && !values.runAt) ||\n runAtPast ||\n (values.when === 'repeat' && !values.rrule.trim()) ||\n (values.when === 'event' && !values.eventKind.trim()) ||\n (values.when === 'task' && !values.afterTaskId)\n const canSubmit =\n values.name.trim() !== '' && !(hasWork && whenError) && !isPending && !planDrafting\n const goalNode = typeof goal === 'function' ? goal(values) : goal\n\n // What the host receives: the assistant is only \"given work\" when it was configured with an instruction.\n const submit = () =>\n onSubmit({\n ...values,\n inputs: workflow ? resolveScopeInputs(workflow, values.inputs, scopeSource) : values.inputs,\n assignee: hasWork ? 'agent' : 'me',\n when: hasWork ? values.when : 'manual',\n notifyOnComplete: true,\n })\n\n const id = testIdOr(testId, { testId: 'task-composer' })\n const submitText = isPending\n ? l.saving\n : isEdit\n ? l.save\n : !hasWork\n ? l.addTask\n : values.when === 'now'\n ? l.addAndStart\n : l.addAndSchedule\n\n const personOptions: PillOption[] = (people ?? []).map((p) => ({\n id: p.id,\n label: p.label,\n description: p.description,\n icon: <PersonAvatar person={{ id: p.id, label: p.label }} />,\n }))\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n const whenOptions: PillOption[] = WHEN_ORDER.map((mode) => ({\n id: mode,\n label: l.whenOptions[mode],\n }))\n const assistantOptions: PillOption[] = agents.map((a) => ({ id: a.id, label: a.label }))\n const pillLabels = { search: l.search, empty: l.empty }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"flex max-h-[calc(100dvh-2rem)] flex-col overflow-hidden p-0 sm:max-w-xl\"\n data-testid={id}\n >\n <ModalHeader>\n <DialogTitle>{isEdit ? l.titleEdit : l.titleNew}</DialogTitle>\n <DialogDescription className=\"sr-only\">{l.description}</DialogDescription>\n </ModalHeader>\n\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) submit()\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-6 pb-4\">\n {/* The task, like a task-list item */}\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"task-composer-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"task-composer-title\"\n value={values.name}\n placeholder={l.titlePlaceholder}\n onChange={(e) => set('name', e.target.value)}\n autoFocus\n className=\"h-10 text-base font-medium\"\n data-testid={`${id}-title`}\n />\n <Label htmlFor=\"task-composer-description\" className=\"sr-only\">\n {l.descriptionLabel}\n </Label>\n <Textarea\n id=\"task-composer-description\"\n value={values.description}\n placeholder={l.descriptionPlaceholder}\n rows={2}\n onChange={(e) => set('description', e.target.value)}\n data-testid={`${id}-description`}\n />\n </div>\n\n {/* Its properties, as pills */}\n <div className=\"flex flex-wrap items-center gap-2\" data-testid={`${id}-properties`}>\n {people !== undefined && (\n <PillSelect\n icon={<UserCheck className={GLYPH} aria-hidden />}\n prefix={l.signoff}\n value={values.signoffUserId}\n options={personOptions}\n noneOption={{ id: '', label: l.signoffMe }}\n onChange={(v) => set('signoffUserId', v)}\n searchable={personOptions.length > 6}\n labels={pillLabels}\n testId={`${id}-signoff`}\n />\n )}\n\n <Popover>\n <PopoverTrigger asChild>\n <EntityPill\n icon={<CalendarClock className={GLYPH} aria-hidden />}\n label={`${l.due}: ${values.dueAt ? formatDue(values.dueAt) : l.dueNone}`}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n className=\"h-7 pointer-coarse:min-h-11\"\n data-testid={`${id}-due-pill`}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-2\">\n <DueDateMenu\n id={`${id}-due`}\n label={l.due}\n value={values.dueAt}\n onChange={(v) => set('dueAt', v)}\n labels={{ clear: l.dueClear }}\n />\n </PopoverContent>\n </Popover>\n\n {tasks.length > 0 && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.parentTask}\n value={values.parentTaskId}\n options={taskOptions}\n noneOption={{ id: '', label: l.parentTaskNone }}\n onChange={(v) => set('parentTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-parent`}\n />\n )}\n\n {/* The same shared/private control every shareable thing in the app uses */}\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n data-testid={`${id}-visibility`}\n />\n </div>\n\n {/* The Task Assistant, for a task being created or one that was given work. Editing a plain\n to-do has nothing to say about it. */}\n {canConfigure && (\n <section\n className=\"flex flex-col gap-3 rounded-lg border border-border bg-muted/30 p-3\"\n data-testid={`${id}-assistant`}\n data-state={hasWork ? 'working' : 'standby'}\n >\n <div className=\"flex items-center gap-2\">\n <EntityPill\n icon={<Bot className=\"size-3.5 shrink-0 text-ai-ink\" aria-hidden />}\n label={l.assistant}\n size=\"sm\"\n className=\"h-7 shrink-0 bg-ai-soft\"\n />\n <p className=\"min-w-0 flex-1 text-xs text-muted-foreground\">\n {hasWork\n ? l.assistantPreparing(l.whenOptions[values.when].toLowerCase())\n : l.assistantStandby}\n </p>\n {canConfigure && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 shrink-0 gap-1 px-2 pointer-coarse:h-11\"\n onClick={() => (configOpen ? setConfigOpen(false) : openConfigure())}\n aria-expanded={configOpen}\n data-testid={`${id}-configure`}\n >\n {configOpen ? l.configureClose : l.configure}\n <ChevronDown\n className={cn('size-3.5 transition-transform', configOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n )}\n </div>\n\n {configOpen && (\n <div className=\"flex flex-col gap-3\" data-testid={`${id}-config`}>\n <div className=\"flex flex-col gap-1.5\">\n <Label className=\"text-xs text-muted-foreground\">{l.what}</Label>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.template}\n value={values.workflowId}\n options={workflows.map((w) => ({ id: w.id, label: w.title }))}\n onChange={pickWorkflow}\n labels={pillLabels}\n testId={`${id}-workflow`}\n className=\"self-start\"\n />\n </div>\n {workflow && fields.length > 0 && (\n <SchemaForm\n fields={fields}\n values={values.inputs}\n onChange={(name: string, value: WorkflowInputValue) =>\n set('inputs', { ...values.inputs, [name]: value })\n }\n renderScope={renderScope ?? defaultScopeRenderer(scopeSource)}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n labels={formLabels}\n testIdPrefix={`${id}-field`}\n />\n )}\n\n {goalNode != null && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-plan`}>\n <div>\n <p className=\"text-sm font-medium\">{l.plan}</p>\n <p className=\"text-xs text-muted-foreground\">{l.planHint}</p>\n </div>\n {goalNode}\n </div>\n )}\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <PillSelect\n icon={<Play className={GLYPH} aria-hidden />}\n prefix={l.start}\n value={values.when === 'manual' ? 'now' : values.when}\n options={whenOptions}\n onChange={(v) => set('when', v as TaskWhen)}\n disabled={lockedStart}\n labels={pillLabels}\n testId={`${id}-when`}\n />\n {agents.length > 1 && (\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.which}\n value={values.agentId}\n options={assistantOptions}\n noneOption={{ id: '', label: l.myAssistant }}\n onChange={(v) => set('agentId', v)}\n disabled={lockedStart}\n searchable={assistantOptions.length > 6}\n labels={pillLabels}\n testId={`${id}-agent`}\n />\n )}\n {unattended && (\n <PillSelect\n icon={<KeyRound className={GLYPH} aria-hidden />}\n prefix={l.permission}\n value={values.access}\n options={(Object.keys(l.accessOptions) as TaskAccessMode[]).map(\n (mode) => ({\n id: mode,\n label: l.accessOptions[mode].label,\n })\n )}\n onChange={(v) => set('access', v as TaskAccessMode)}\n labels={pillLabels}\n testId={`${id}-access`}\n />\n )}\n </div>\n\n {values.when === 'once' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-runat\" className=\"sr-only\">\n {l.runAt}\n </Label>\n <Input\n id=\"task-composer-runat\"\n type=\"datetime-local\"\n value={values.runAt}\n onChange={(e) => set('runAt', e.target.value)}\n className=\"max-w-xs\"\n aria-invalid={runAtPast || undefined}\n data-testid={`${id}-run-at`}\n />\n {runAtPast && (\n <p className=\"text-xs text-destructive\" data-testid={`${id}-run-at-past`}>\n {l.runAtPast}\n </p>\n )}\n </div>\n )}\n {values.when === 'repeat' && (\n <RecurrenceBuilder\n rrule={values.rrule}\n onChange={(r) => set('rrule', r)}\n {...recurrence}\n />\n )}\n {values.when === 'event' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-event\" className=\"sr-only\">\n {l.event}\n </Label>\n <Input\n id=\"task-composer-event\"\n value={values.eventKind}\n placeholder={l.eventPlaceholder}\n onChange={(e) => set('eventKind', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-event`}\n />\n <p className=\"text-xs text-muted-foreground\">{l.eventHint}</p>\n </div>\n )}\n {values.when === 'task' && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.afterTask}\n value={values.afterTaskId}\n options={taskOptions}\n onChange={(v) => set('afterTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-after-task`}\n className=\"self-start\"\n />\n )}\n {unattended && (\n <div\n className=\"flex flex-col gap-1 rounded-md bg-muted p-2\"\n data-testid={`${id}-access-block`}\n >\n <p className=\"text-xs text-muted-foreground\">\n {l.permissionHint} {l.accessOptions[values.access].hint}\n </p>\n {values.access === 'standing' &&\n (typeof standingAccess === 'function'\n ? standingAccess(values)\n : standingAccess)}\n </div>\n )}\n {values.when === 'repeat' && timezones.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <Label htmlFor=\"task-composer-timezone\" className=\"text-xs\">\n {l.timezone}\n </Label>\n <Input\n id=\"task-composer-timezone\"\n list=\"task-composer-timezones\"\n value={values.timezone}\n onChange={(e) => set('timezone', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-timezone`}\n />\n <datalist id=\"task-composer-timezones\">\n {timezones.map((tz) => (\n <option key={tz} value={tz} />\n ))}\n </datalist>\n </div>\n )}\n </div>\n )}\n </section>\n )}\n </div>\n\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {submitText}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n\n/**\n * The dialog behind \"New task\" (a title, with the assistant optional) and, with `kind=\"workflow\"`, the\n * workflow dialog (see {@link WorkflowComposer}: what, when and who up front, the rest under More\n * options).\n */\nexport function TaskComposer(props: TaskComposerProps) {\n return props.kind === 'workflow' ? (\n <WorkflowComposer {...props} />\n ) : (\n <WorkTaskComposer {...props} />\n )\n}\n","/**\n * TupleArrayField Component\n *\n * Specialized component for handling arrays of tuples, particularly for\n * few-shot examples where each tuple contains multiple string elements.\n * Displays in a clean table format for better organization.\n */\n\nimport { Plus, Trash2 } from 'lucide-react'\nimport { Button, Label, Textarea } from '@arbidocs/react/ui'\n\nexport interface TupleArrayFieldLabels {\n addRow: string\n empty: string\n jsonArrayPlaceholder: string\n /** Placeholder of one cell; receives the lower-cased column label. */\n cellPlaceholder: (column: string) => string\n /** aria-label of the remove button; receives the 1-based row number. */\n removeRow: (row: number) => string\n /** Column labels of 2-tuple few-shot examples. */\n pairColumns: string[]\n /** Column labels of 3-tuple few-shot examples. */\n tripleColumns: string[]\n /** Generic column label; receives the 1-based column number. */\n column: (n: number) => string\n}\n\nexport const DEFAULT_TUPLE_ARRAY_FIELD_LABELS: TupleArrayFieldLabels = {\n addRow: 'Add Row',\n empty: 'No examples added yet. Click \"Add Row\" to start.',\n jsonArrayPlaceholder: 'Enter JSON array...',\n cellPlaceholder: (column) => `Enter ${column}...`,\n removeRow: (row) => `Remove row ${row}`,\n pairColumns: ['Query with Context', 'Reformulated Query'],\n tripleColumns: ['Input', 'Expected Output', 'Explanation'],\n column: (n) => `Field ${n}`,\n}\n\nexport interface TupleArrayFieldProps {\n fieldId: string\n label: string\n description?: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (value: any) => void\n labels?: Partial<TupleArrayFieldLabels>\n}\n\nexport function TupleArrayField({\n fieldId,\n label,\n description,\n value,\n onChange,\n labels,\n}: TupleArrayFieldProps) {\n const l = { ...DEFAULT_TUPLE_ARRAY_FIELD_LABELS, ...labels }\n // Ensure value is an array\n const examples = Array.isArray(value) ? value : []\n\n // Determine if this looks like a tuple array (array of arrays)\n const isTupleArray = examples.length === 0 || (examples.length > 0 && Array.isArray(examples[0]))\n\n // If not a tuple array, fall back to regular JSON editing\n if (!isTupleArray) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n <Textarea\n id={fieldId}\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value)\n onChange(parsed)\n } catch {\n // Keep the string value if JSON parsing fails\n }\n }}\n placeholder={l.jsonArrayPlaceholder}\n rows={6}\n className=\"font-mono text-sm bg-background\"\n />\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n )\n }\n\n // Determine the tuple structure (number of elements per tuple)\n const tupleLength = examples.length > 0 && Array.isArray(examples[0]) ? examples[0].length : 2 // Default to pairs if empty\n\n const handleAddExample = () => {\n const newExample = Array(tupleLength).fill('')\n onChange([...examples, newExample])\n }\n\n const handleRemoveExample = (index: number) => {\n const newExamples = examples.filter((_, i) => i !== index)\n onChange(newExamples)\n }\n\n const handleUpdateExample = (exampleIndex: number, elementIndex: number, newValue: string) => {\n const newExamples = [...examples]\n if (!Array.isArray(newExamples[exampleIndex])) {\n newExamples[exampleIndex] = Array(tupleLength).fill('')\n }\n newExamples[exampleIndex][elementIndex] = newValue\n onChange(newExamples)\n }\n\n // Determine field labels based on common patterns\n const getFieldLabels = () => {\n // Check if this looks like few-shot examples\n if (\n label.toLowerCase().includes('example') ||\n label.toLowerCase().includes('few_shot') ||\n fieldId.toLowerCase().includes('example')\n ) {\n if (tupleLength === 2) {\n return l.pairColumns\n }\n if (tupleLength === 3) {\n return l.tripleColumns\n }\n }\n // Default labels\n return Array.from({ length: tupleLength }, (_, i) => l.column(i + 1))\n }\n\n const fieldLabels = getFieldLabels()\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label>{label}</Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={handleAddExample}\n className=\"h-7 text-sm\"\n >\n <Plus className=\"size-3 mr-1\" />\n {l.addRow}\n </Button>\n </div>\n\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n\n {examples.length === 0 ? (\n <div className=\"text-center py-8 text-sm text-muted-foreground rounded-md bg-muted\">\n {l.empty}\n </div>\n ) : (\n <div className=\"overflow-hidden rounded-md border border-border\">\n <table className=\"w-full\">\n <thead className=\"bg-muted border-b border-border\">\n <tr>\n <th className=\"px-3 py-2 text-left text-sm font-medium text-muted-foreground w-12\">\n #\n </th>\n {fieldLabels.map((fieldLabel, index) => (\n <th\n key={index}\n className=\"px-3 py-2 text-left text-sm font-medium text-muted-foreground\"\n >\n {fieldLabel}\n </th>\n ))}\n <th className=\"px-3 py-2 w-10\"></th>\n </tr>\n </thead>\n <tbody>\n {examples.map((example, exampleIndex) => {\n const tupleElements = Array.isArray(example) ? example : [example]\n\n return (\n <tr\n key={exampleIndex}\n className=\"border-b border-border last:border-b-0 hover:bg-muted/50 transition-colors\"\n >\n <td className=\"px-3 py-2 text-sm text-muted-foreground font-medium\">\n {exampleIndex + 1}\n </td>\n {fieldLabels.map((_, elementIndex) => {\n const value = tupleElements[elementIndex] || ''\n const isLongText = value.includes('\\n')\n\n return (\n <td key={elementIndex} className=\"px-3 py-2\">\n <Textarea\n value={value}\n onChange={(e) =>\n handleUpdateExample(exampleIndex, elementIndex, e.target.value)\n }\n placeholder={l.cellPlaceholder(\n (\n fieldLabels[elementIndex] ?? l.column(elementIndex + 1)\n ).toLowerCase()\n )}\n rows={isLongText ? 3 : 1}\n className=\"text-sm bg-background resize-none min-h-[32px] w-full\"\n />\n </td>\n )\n })}\n <td className=\"px-3 py-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleRemoveExample(exampleIndex)}\n aria-label={l.removeRow(exampleIndex + 1)}\n className=\"size-8 p-0 text-destructive hover:bg-destructive/10 pointer-coarse:size-11\"\n >\n <Trash2 className=\"size-4\" />\n </Button>\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n )\n}\n","/** Minimal JSON-schema property shape used by the config form. */\nexport interface SchemaProperty {\n type?: string\n title?: string\n description?: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: any\n minimum?: number\n maximum?: number\n enum?: string[]\n format?: string\n properties?: Record<string, SchemaProperty>\n}\n\n/**\n * Humanize a PascalCase / acronym section key into a normal-case title:\n * \"QueryLLM\" -> \"Query LLM\", \"DocTagLLM\" -> \"Doc Tag LLM\", \"Agents\" -> \"Agents\".\n */\nexport function humanizeSection(name: string): string {\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/_/g, ' ')\n .trim()\n}\n\n/** A readable label from an UPPER_SNAKE / snake_case key: SAVE_SOURCES -> \"Save sources\". */\nexport function prettifyKey(key: string): string {\n const spaced = key.replace(/_/g, ' ').trim().toLowerCase()\n return spaced.charAt(0).toUpperCase() + spaced.slice(1)\n}\n\n/** True for a non-null, non-array object, i.e. something we can render as fields. */\nexport function isPlainObject(val: unknown): val is Record<string, unknown> {\n return typeof val === 'object' && val !== null && !Array.isArray(val)\n}\n\n/**\n * Best-effort JSON-schema `type` inferred from a raw value, so a nested config object the schema\n * did not declare sub-properties for still renders as structured fields instead of raw JSON.\n */\nexport function inferType(val: unknown): SchemaProperty['type'] {\n if (typeof val === 'boolean') return 'boolean'\n if (typeof val === 'number') return 'number'\n if (Array.isArray(val)) return 'array'\n if (isPlainObject(val)) return 'object'\n return 'string'\n}\n\n/** True when `value` is a number and lies outside [minimum, maximum]. */\nexport function isOutOfBounds(value: unknown, minimum?: number, maximum?: number): boolean {\n if (typeof value !== 'number' || Number.isNaN(value)) return false\n if (minimum !== undefined && value < minimum) return true\n if (maximum !== undefined && value > maximum) return true\n return false\n}\n","/** One config field, rendered from its schema type. Memoized independently. */\n\nimport { memo, useState, type ReactNode } from 'react'\nimport {\n Button,\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 { testIdOr } from '../../chat/test-id'\nimport { useBlocksEnvironment } from '../../provider/BlocksProvider'\nimport {\n DEFAULT_TUPLE_ARRAY_FIELD_LABELS,\n TupleArrayField,\n type TupleArrayFieldLabels,\n} from './TupleArrayField'\nimport {\n inferType,\n isOutOfBounds,\n isPlainObject,\n prettifyKey,\n type SchemaProperty,\n} from './schema-utils'\n\nexport interface ConfigFieldLabels extends TupleArrayFieldLabels {\n editAsFields: string\n editAsJson: string\n jsonPlaceholder: string\n /** Select placeholder; receives the lower-cased field label. */\n selectPlaceholder: (label: string) => string\n /** Text input placeholder; receives the lower-cased field label. */\n enterPlaceholder: (label: string) => string\n /** Out-of-range hint; receives the range text (`1–5`, `≥ 1`, `≤ 5`). */\n allowedRange: (range: string) => string\n /** Out-of-range notification; `range` may be empty. */\n outOfRange: (label: string, range: string, value: unknown) => string\n}\n\nexport const DEFAULT_CONFIG_FIELD_LABELS: ConfigFieldLabels = {\n ...DEFAULT_TUPLE_ARRAY_FIELD_LABELS,\n editAsFields: 'Edit as fields',\n editAsJson: 'Edit as JSON',\n jsonPlaceholder: 'Enter JSON...',\n selectPlaceholder: (label) => `Select ${label}...`,\n enterPlaceholder: (label) => `Enter ${label}...`,\n allowedRange: (range) => `Allowed range: ${range}`,\n outOfRange: (label, range, value) =>\n `${label} must be ${range || 'within the allowed range'} (got ${String(value)}).`,\n}\n\nexport interface ConfigFieldTestIds {\n /** Test id of a boolean/number control; default `config-field-{section}-{field with dots as dashes}`. */\n field: (section: string, fieldName: string) => string\n /** Test id of the object \"Edit as JSON\" toggle; default `config-json-toggle-{fieldId}`. */\n jsonToggle: (fieldId: string) => string\n}\n\nexport interface ConfigFieldSlots {\n /** Custom control for the QueryLLM MODEL_NAME field (the app supplies its model picker). */\n renderModelSelect?: (props: { value: string; onChange: (value: string) => void }) => ReactNode\n}\n\nexport interface ConfigFieldProps extends ConfigFieldSlots {\n section: string\n fieldName: string\n fieldSchema: SchemaProperty\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (section: string, field: string, value: any) => void\n labels?: Partial<ConfigFieldLabels>\n testIds?: Partial<ConfigFieldTestIds>\n}\n\nfunction ConfigFieldComponent({\n section,\n fieldName,\n fieldSchema,\n value,\n onChange,\n renderModelSelect,\n labels,\n testIds,\n}: ConfigFieldProps) {\n const l = { ...DEFAULT_CONFIG_FIELD_LABELS, ...labels }\n const fieldTestId = testIdOr(testIds?.field?.(section, fieldName), {\n testId: `config-field-${section}-${fieldName.replace(/\\./g, '-')}`,\n })\n const { notify } = useBlocksEnvironment()\n const fieldId = `${section}-${fieldName}`\n // Prefer a schema-provided title; else humanize the leaf key (SAVE_SOURCES →\n // \"Save sources\") rather than showing the raw UPPER_SNAKE name.\n const label = fieldSchema.title || prettifyKey(fieldName.split('.').pop() ?? fieldName)\n const description = fieldSchema.description || ''\n // Object fields render as structured sub-fields by default; this is the\n // power-user escape hatch to edit the raw JSON. `jsonDraft` buffers in-progress\n // (possibly invalid) edits so a half-typed object doesn't corrupt the value.\n const [rawJson, setRawJson] = useState(false)\n const [jsonDraft, setJsonDraft] = useState<string | null>(null)\n // SmartSearch and Retriever (with agent / smart_search profiles) sections\n // contain long prompts and verbose descriptions — give their text boxes\n // more vertical room so the content isn't clipped.\n const isLargePromptSection =\n section === 'SmartSearch' ||\n section === 'Retriever' ||\n section === 'SmartRetriever' ||\n section === 'AgentRetriever'\n const longTextRows = isLargePromptSection ? 12 : 4\n\n // Special handling for MODEL_NAME field - use ModelSelector for QueryLLM section\n if (fieldName === 'MODEL_NAME' && section === 'QueryLLM' && renderModelSelect) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n {renderModelSelect({\n value: value || '',\n onChange: (val) => onChange(section, fieldName, val),\n })}\n </div>\n )\n }\n\n // JSON-textarea fallback, shared by complex types and the `object`\n // case when it has no declared sub-properties. Extracted so the\n // `object` case can return it explicitly rather than falling through\n // to `default` (which `noFallthroughCasesInSwitch` rejects).\n const renderJsonFallback = () => (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Textarea\n id={fieldId}\n value={typeof value === 'object' ? JSON.stringify(value, null, 2) : value || ''}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value)\n onChange(section, fieldName, parsed)\n } catch {\n onChange(section, fieldName, e.target.value)\n }\n }}\n placeholder={l.jsonPlaceholder}\n rows={longTextRows}\n className=\"font-mono text-sm bg-background resize-y\"\n />\n </div>\n )\n\n // A nested object rendered as a GROUP of structured sub-fields (switches,\n // inputs, …) inferred from its values — instead of one raw JSON blob. Each\n // key recurses through this same component, so booleans become switches,\n // numbers become number inputs, nested objects nest again, etc. An\n // \"Edit as JSON\" toggle keeps the raw view one click away.\n const renderObjectEditor = () => {\n const entries = Object.entries(value as Record<string, unknown>)\n return (\n <div className=\"space-y-3 rounded-lg bg-muted p-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-semibold\">{label}</Label>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 shrink-0 px-2 text-xs text-muted-foreground pointer-coarse:h-11\"\n onClick={() => {\n setJsonDraft(null)\n setRawJson((v) => !v)\n }}\n data-testid={testIdOr(testIds?.jsonToggle?.(fieldId), {\n testId: `config-json-toggle-${fieldId}`,\n })}\n >\n {rawJson ? l.editAsFields : l.editAsJson}\n </Button>\n </div>\n {description && (\n <p className=\"text-sm text-muted-foreground whitespace-normal break-words leading-relaxed\">\n {description}\n </p>\n )}\n {rawJson ? (\n <Textarea\n id={fieldId}\n value={jsonDraft ?? JSON.stringify(value, null, 2)}\n onChange={(e) => {\n setJsonDraft(e.target.value)\n try {\n onChange(section, fieldName, JSON.parse(e.target.value))\n } catch {\n // Keep the draft; don't propagate a half-typed invalid object.\n }\n }}\n rows={longTextRows}\n className=\"font-mono text-sm bg-background resize-y\"\n />\n ) : (\n <div className=\"space-y-3\">\n {entries.map(([subKey, subVal]) => (\n <ConfigField\n renderModelSelect={renderModelSelect}\n key={`${fieldName}.${subKey}`}\n section={section}\n fieldName={`${fieldName}.${subKey}`}\n fieldSchema={{ type: inferType(subVal), title: prettifyKey(subKey) }}\n value={subVal}\n onChange={onChange}\n />\n ))}\n </div>\n )}\n </div>\n )\n }\n\n // Object values (declared or inferred) → structured fields; everything else\n // (arrays, primitives, empty objects) → the raw JSON textarea.\n const renderComplex = () =>\n isPlainObject(value) && Object.keys(value).length > 0\n ? renderObjectEditor()\n : renderJsonFallback()\n\n // Handle different field types\n switch (fieldSchema.type) {\n case 'boolean':\n return (\n <div className=\"flex items-center justify-between space-y-2\">\n <div className=\"space-y-0.5\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n <Switch\n id={fieldId}\n checked={value || false}\n onCheckedChange={(checked) => onChange(section, fieldName, checked)}\n data-testid={fieldTestId}\n />\n </div>\n )\n\n case 'integer':\n case 'number': {\n const outOfBounds = isOutOfBounds(value, fieldSchema.minimum, fieldSchema.maximum)\n const rangeHint =\n fieldSchema.minimum !== undefined && fieldSchema.maximum !== undefined\n ? `${fieldSchema.minimum}–${fieldSchema.maximum}`\n : fieldSchema.minimum !== undefined\n ? `≥ ${fieldSchema.minimum}`\n : fieldSchema.maximum !== undefined\n ? `≤ ${fieldSchema.maximum}`\n : ''\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Input\n id={fieldId}\n type=\"number\"\n value={value ?? fieldSchema.default ?? ''}\n onChange={(e) => {\n const val = e.target.value === '' ? null : Number(e.target.value)\n onChange(section, fieldName, val)\n }}\n onBlur={() => {\n if (isOutOfBounds(value, fieldSchema.minimum, fieldSchema.maximum)) {\n notify(l.outOfRange(label, rangeHint, value), 'error')\n }\n }}\n min={fieldSchema.minimum}\n max={fieldSchema.maximum}\n placeholder={fieldSchema.default?.toString()}\n className={cn(\n 'bg-background',\n outOfBounds && 'border-destructive focus-visible:ring-destructive'\n )}\n aria-invalid={outOfBounds}\n data-testid={fieldTestId}\n />\n {outOfBounds && rangeHint && (\n <p className=\"text-sm text-destructive\">{l.allowedRange(rangeHint)}</p>\n )}\n </div>\n )\n }\n\n case 'string':\n // Check if it's an enum (select dropdown)\n if (fieldSchema.enum && fieldSchema.enum.length > 0) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Select value={value || ''} onValueChange={(val) => onChange(section, fieldName, val)}>\n <SelectTrigger className=\"bg-background\">\n <SelectValue placeholder={l.selectPlaceholder(label.toLowerCase())} />\n </SelectTrigger>\n <SelectContent>\n {fieldSchema.enum.map((option) => (\n <SelectItem key={option} value={option}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n // Check if it's a long text field (use textarea)\n if (fieldName.includes('INSTRUCTION') || fieldName.includes('PROMPT')) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Textarea\n id={fieldId}\n value={value || ''}\n onChange={(e) => onChange(section, fieldName, e.target.value)}\n placeholder={fieldSchema.default || l.enterPlaceholder(label.toLowerCase())}\n rows={longTextRows}\n className=\"resize-y bg-background\"\n />\n </div>\n )\n }\n\n // Default to regular input\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Input\n id={fieldId}\n value={value || ''}\n onChange={(e) => onChange(section, fieldName, e.target.value)}\n placeholder={fieldSchema.default || l.enterPlaceholder(label.toLowerCase())}\n className=\"bg-background\"\n />\n </div>\n )\n\n case 'array': {\n // Check if this is an array of tuples/arrays (for few-shot examples)\n const isArrayOfArrays = Array.isArray(value) && value.length > 0 && Array.isArray(value[0])\n const looksLikeExamples =\n fieldName.toLowerCase().includes('example') ||\n fieldName.toLowerCase().includes('few_shot') ||\n fieldName.toLowerCase().includes('samples')\n\n if (isArrayOfArrays || looksLikeExamples) {\n // Use specialized TupleArrayField for better UX\n return (\n <TupleArrayField\n fieldId={fieldId}\n label={label}\n description={description}\n value={value}\n onChange={(newValue) => onChange(section, fieldName, newValue)}\n labels={labels}\n />\n )\n }\n\n // Fall through to default JSON handling for other arrays\n break\n }\n\n case 'object':\n // Render nested properties as a grouped sub-form\n if (fieldSchema.properties) {\n return (\n <div\n className={cn(\n 'space-y-3 rounded-lg bg-muted p-4',\n isLargePromptSection && 'min-h-[12rem]'\n )}\n >\n <Label className=\"text-sm font-semibold\">{label}</Label>\n {description && (\n <p className=\"text-sm text-muted-foreground whitespace-normal break-words leading-relaxed\">\n {description}\n </p>\n )}\n <div className=\"space-y-3\">\n {Object.entries(fieldSchema.properties).map(([subFieldName, subFieldSchema]) => (\n <ConfigField\n renderModelSelect={renderModelSelect}\n key={`${fieldName}.${subFieldName}`}\n section={section}\n fieldName={`${fieldName}.${subFieldName}`}\n fieldSchema={subFieldSchema}\n value={value?.[subFieldName]}\n onChange={onChange}\n labels={labels}\n testIds={testIds}\n />\n ))}\n </div>\n </div>\n )\n }\n // No declared sub-properties — infer structured fields from the value\n // (falling back to JSON for arrays/primitives/empty objects).\n return renderComplex()\n\n default:\n // Unknown/complex types — infer structured fields when it's an object,\n // else a JSON textarea.\n return renderComplex()\n }\n}\n\n// Memo with custom comparison: only re-render if value actually changed.\nexport const ConfigField = memo(ConfigFieldComponent, (prev, next) => {\n return (\n prev.value === next.value &&\n prev.section === next.section &&\n prev.fieldName === next.fieldName &&\n prev.onChange === next.onChange &&\n prev.renderModelSelect === next.renderModelSelect &&\n prev.labels === next.labels &&\n prev.testIds === next.testIds\n )\n})\n","/**\n * ConfigForm: renders a backend JSON-schema config as collapsible sections of typed fields\n * (switches, numbers, selects, prompts, tuples, nested objects).\n */\n\nimport { memo, useState, useMemo } from 'react'\nimport { ChevronDown, ChevronRight } from 'lucide-react'\nimport {\n Button,\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Switch,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n ConfigField,\n type ConfigFieldLabels,\n type ConfigFieldSlots,\n type ConfigFieldTestIds,\n DEFAULT_CONFIG_FIELD_LABELS,\n} from './ConfigField'\nimport { humanizeSection, type SchemaProperty } from './schema-utils'\n\nexport interface ConfigFormLabels extends ConfigFieldLabels {\n collapseAll: string\n expandAll: string\n enabled: string\n disabled: string\n}\n\nexport const DEFAULT_CONFIG_FORM_LABELS: ConfigFormLabels = {\n ...DEFAULT_CONFIG_FIELD_LABELS,\n collapseAll: 'Collapse all',\n expandAll: 'Expand all',\n enabled: 'Enabled',\n disabled: 'Disabled',\n}\n\nexport interface ConfigFormTestIds extends ConfigFieldTestIds {\n form: string\n toggleAll: string\n /** Default `config-section-{name}`. */\n section: (name: string) => string\n /** Default `config-section-toggle-{name}`. */\n sectionToggle: (name: string) => string\n /** Default `config-section-enabled-toggle-{name}`. */\n sectionEnabled: (name: string) => string\n}\n\nexport interface ConfigFormProps extends ConfigFieldSlots {\n /** Section name -> JSON schema ({ properties }). */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n schema: Record<string, any>\n /** Current values: section -> field -> value. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values: Record<string, any>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (section: string, field: string, value: any) => void\n labels?: Partial<ConfigFormLabels>\n testIds?: Partial<ConfigFormTestIds>\n className?: string\n}\n\nfunction ConfigFormComponent({\n schema,\n values,\n onChange,\n renderModelSelect,\n labels,\n testIds,\n className,\n}: ConfigFormProps) {\n const l = { ...DEFAULT_CONFIG_FORM_LABELS, ...labels }\n // Track which sections are expanded/collapsed. Start fully collapsed.\n const [expandedSections, setExpandedSections] = useState<Set<string>>(new Set())\n\n const expandableSectionNames = useMemo(\n () =>\n Object.entries(schema)\n .filter(\n ([, sectionSchema]) =>\n sectionSchema?.properties && Object.keys(sectionSchema.properties).length > 0\n )\n .map(([name]) => name),\n [schema]\n )\n\n const allExpanded =\n expandableSectionNames.length > 0 &&\n expandableSectionNames.every((name) => expandedSections.has(name))\n\n const toggleAllSections = () => {\n setExpandedSections(allExpanded ? new Set() : new Set(expandableSectionNames))\n }\n\n const toggleSection = (sectionName: string) => {\n setExpandedSections((prev) => {\n const newSet = new Set(prev)\n if (newSet.has(sectionName)) {\n newSet.delete(sectionName)\n } else {\n newSet.add(sectionName)\n }\n return newSet\n })\n }\n\n const handleEnabledChange = (sectionName: string, enabled: boolean) => {\n // Update the ENABLED value\n onChange(sectionName, 'ENABLED', enabled)\n\n // Also update the expanded state\n setExpandedSections((prev) => {\n const newSet = new Set(prev)\n if (enabled) {\n newSet.add(sectionName)\n } else {\n newSet.delete(sectionName)\n }\n return newSet\n })\n }\n\n return (\n <div\n className={cn('space-y-3', className)}\n data-testid={testIdOr(testIds?.form, { testId: 'config-schema-form' })}\n >\n <div className=\"flex justify-end\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs text-muted-foreground pointer-coarse:h-11\"\n onClick={toggleAllSections}\n data-testid={testIdOr(testIds?.toggleAll, { testId: 'config-toggle-all-sections' })}\n >\n {allExpanded ? l.collapseAll : l.expandAll}\n </Button>\n </div>\n\n {Object.entries(schema).map(([sectionName, sectionSchema]) => {\n if (!sectionSchema.properties || Object.keys(sectionSchema.properties).length === 0) {\n return null\n }\n\n const sectionTitle = humanizeSection(sectionName)\n\n // Check if this section has an ENABLED field\n const hasEnabledField = 'ENABLED' in sectionSchema.properties\n const isEnabled = hasEnabledField ? (values[sectionName]?.ENABLED ?? true) : true\n const isExpanded = expandedSections.has(sectionName)\n\n // Get all fields except ENABLED for the collapsible content\n const otherFields = Object.entries(sectionSchema.properties).filter(\n ([fieldName]) => fieldName !== 'ENABLED'\n )\n\n return (\n <div\n key={sectionName}\n className={cn(\n 'rounded-lg bg-muted p-4 transition-colors',\n hasEnabledField && !isEnabled && 'opacity-60'\n )}\n data-testid={testIdOr(testIds?.section?.(sectionName), {\n testId: `config-section-${sectionName}`,\n })}\n >\n <Collapsible open={isExpanded} onOpenChange={() => toggleSection(sectionName)}>\n {/* Section header with optional enabled toggle */}\n <div className=\"flex items-center justify-between\">\n <CollapsibleTrigger\n className=\"flex flex-1 items-center gap-2 text-left transition-opacity hover:opacity-80 pointer-coarse:min-h-11\"\n data-testid={testIdOr(testIds?.sectionToggle?.(sectionName), {\n testId: `config-section-toggle-${sectionName}`,\n })}\n >\n {isExpanded ? (\n <ChevronDown className=\"size-4 shrink-0\" />\n ) : (\n <ChevronRight className=\"size-4 shrink-0\" />\n )}\n <h3 className=\"text-left text-sm font-semibold text-foreground\">\n {sectionTitle}\n </h3>\n </CollapsibleTrigger>\n\n {/* Only show enabled toggle if this section has an ENABLED field in the schema */}\n {hasEnabledField && (\n <div className=\"flex items-center gap-2 ml-4\">\n <span className=\"text-sm text-muted-foreground\">\n {isEnabled ? l.enabled : l.disabled}\n </span>\n <Switch\n checked={isEnabled}\n onCheckedChange={(checked) => handleEnabledChange(sectionName, checked)}\n className=\"data-[state=unchecked]:bg-border\"\n data-testid={testIdOr(testIds?.sectionEnabled?.(sectionName), {\n testId: `config-section-enabled-toggle-${sectionName}`,\n })}\n />\n </div>\n )}\n </div>\n\n {/* Collapsible content with other fields */}\n {otherFields.length > 0 && (\n <CollapsibleContent className=\"pt-4\">\n <div className=\"space-y-4\">\n {otherFields.map(([fieldName, fieldSchema]) => (\n <div\n key={`${sectionName}-${fieldName}`}\n className={\n hasEnabledField && !isEnabled ? 'pointer-events-none opacity-50' : ''\n }\n >\n <ConfigField\n section={sectionName}\n fieldName={fieldName}\n fieldSchema={fieldSchema as SchemaProperty}\n value={values[sectionName]?.[fieldName]}\n onChange={onChange}\n renderModelSelect={renderModelSelect}\n labels={labels}\n testIds={testIds}\n />\n </div>\n ))}\n </div>\n </CollapsibleContent>\n )}\n </Collapsible>\n </div>\n )\n })}\n </div>\n )\n}\n\nexport const ConfigForm = memo(ConfigFormComponent)\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n type Ref,\n type UIEventHandler,\n} from 'react'\nimport {\n Activity,\n ChevronDown,\n ChevronUp,\n Hourglass,\n Loader2,\n MoreVertical,\n Pause,\n} from 'lucide-react'\nimport {\n cn,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** Every fixed string of the agent bar parts. Pass a partial `labels` to a part to reword. */\nexport interface AgentBarLabels {\n steps: string\n hideSteps: string\n showSteps: string\n /** Step toggle text: \"Step 3\". */\n stepN: (count: number) => string\n checkingIn: string\n agentActions: string\n queuedMessage: string\n statusUpdate: string\n}\n\nexport const DEFAULT_AGENT_BAR_LABELS: AgentBarLabels = {\n steps: 'Steps',\n hideSteps: 'Hide steps',\n showSteps: 'Show steps',\n stepN: (count) => `Step ${count}`,\n checkingIn: 'Checking in…',\n agentActions: 'Agent actions',\n queuedMessage: 'Queued message',\n statusUpdate: 'Status update',\n}\n\n/* ── Bar ──────────────────────────────────────────────────────────────────────────────────── */\n\nexport interface AgentBarProps {\n /** The turn is still running (tonal surface); a settled bar is a hairline outline. */\n isStreaming: boolean\n testId?: string\n /** Mirrors run-control state onto `data-control-state`. */\n controlState?: string\n /** Number of rows the steps drawer would show; 0 hides the toggle. */\n stepCount: number\n isDrawerOpen: boolean\n onToggleDrawer: () => void\n /** The steps list. Rendered in a drawer that opens UPWARD above the bar row. */\n drawer?: ReactNode\n drawerRef?: Ref<HTMLDivElement>\n onDrawerScroll?: UIEventHandler<HTMLDivElement>\n /** Left: what the agent is doing now ({@link AgentBarStatus}), or \"Answered in Xs\". */\n status: ReactNode\n /** Run totals (tool calls) shown beside the controls. */\n stats?: ReactNode\n /** Right: Stop and the actions menu. */\n controls?: ReactNode\n /** Under the bar row: queued message, status-update answer. */\n below?: ReactNode\n className?: string\n labels?: Partial<AgentBarLabels>\n /** Test id of the steps toggle. */\n stepsToggleTestId?: string\n}\n\n/**\n * The agent turn bar: current step + timer, steps drawer, stop and actions. One chrome for the\n * live bar above the composer and the settled bar inside a message, so it is learned once.\n */\nexport function AgentBar({\n isStreaming,\n testId,\n controlState,\n stepCount,\n isDrawerOpen,\n onToggleDrawer,\n drawer,\n drawerRef,\n onDrawerScroll,\n status,\n stats,\n controls,\n below,\n className,\n labels,\n stepsToggleTestId,\n}: AgentBarProps) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div\n data-slot=\"agent-bar\"\n className={cn(\n 'overflow-hidden rounded-lg',\n isStreaming ? 'bg-muted' : 'border border-border bg-transparent',\n className\n )}\n data-testid={testId}\n data-control-state={controlState}\n >\n {isDrawerOpen && stepCount > 0 && (\n <div className=\"border-b border-border bg-background/60\">\n <p className=\"px-1.5 pt-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {l.steps}\n </p>\n <div ref={drawerRef} onScroll={onDrawerScroll} className=\"max-h-72 overflow-y-auto\">\n {drawer}\n </div>\n </div>\n )}\n\n <div className=\"flex items-center gap-2 px-1.5 py-2\">\n {stepCount > 0 && (\n <button\n type=\"button\"\n onClick={onToggleDrawer}\n className=\"flex shrink-0 items-center gap-1 rounded-md px-1.5 py-0.5 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11\"\n aria-expanded={isDrawerOpen}\n aria-label={isDrawerOpen ? l.hideSteps : l.showSteps}\n data-testid={testIdOr(stepsToggleTestId, { testId: 'steps-toggle' })}\n >\n {isDrawerOpen ? <ChevronDown className=\"h-4 w-4\" /> : <ChevronUp className=\"h-4 w-4\" />}\n <span className=\"tabular-nums\">{l.stepN(stepCount)}</span>\n </button>\n )}\n {status}\n <div className=\"ml-auto flex items-center gap-2.5\">\n {stats}\n <div className=\"flex items-center gap-1\">{controls}</div>\n </div>\n </div>\n\n {below}\n </div>\n )\n}\n\n/* ── Status line variants ─────────────────────────────────────────────────────────────────── */\n\nexport type AgentBarState = 'pausing' | 'paused' | 'resuming'\n\nexport interface AgentBarStatusProps {\n /** Run-control state other than `running`. */\n state?: AgentBarState\n stateLabel?: string\n /** A status probe is awaiting the agent's answer. */\n isProbing?: boolean\n /** Waiting on delegated sub-agents: names who. */\n waitingLabel?: string\n /** Current step: icon + description. */\n stepLabel?: string\n stepIcon?: ReactNode\n /** Live elapsed-seconds ticker. */\n timer?: ReactNode\n labels?: Partial<AgentBarLabels>\n /** Per-variant test ids; defaults are the current ids. */\n testIds?: Partial<{ control: string; probe: string; waiting: string; step: string }>\n}\n\n/** The left-hand status line. Exactly one of its variants renders, in priority order. */\nexport function AgentBarStatus({\n state,\n stateLabel,\n isProbing,\n waitingLabel,\n stepLabel,\n stepIcon,\n timer,\n labels,\n testIds,\n}: AgentBarStatusProps) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n if (state) {\n return (\n <span\n className={cn(\n 'flex items-center gap-1 rounded-md px-2 py-0.5 text-sm font-medium',\n state === 'paused' ? 'bg-ai-soft text-ai-ink' : 'text-muted-foreground'\n )}\n data-testid={testIdOr(testIds?.control, { testId: 'agent-control-status' })}\n >\n {state === 'paused' ? (\n <Pause className=\"h-3.5 w-3.5\" />\n ) : (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin text-yellow-text\" />\n )}\n {stateLabel}\n </span>\n )\n }\n if (isProbing) {\n return (\n <span\n className=\"flex items-center gap-1 text-sm font-medium text-muted-foreground\"\n data-testid={testIdOr(testIds?.probe, { testId: 'agent-probe-pending' })}\n >\n <Activity className=\"h-3.5 w-3.5 animate-pulse\" />\n {l.checkingIn}\n </span>\n )\n }\n if (waitingLabel) {\n return (\n <span\n className=\"flex min-w-0 items-center gap-1.5 text-sm text-muted-foreground\"\n data-testid={testIdOr(testIds?.waiting, { testId: 'agent-waiting-on-subagents' })}\n >\n <Hourglass className=\"h-4 w-4 shrink-0 text-yellow-text\" aria-hidden=\"true\" />\n <span className=\"truncate\">{waitingLabel}</span>\n {timer && <span className=\"shrink-0 tabular-nums text-muted-foreground\">{timer}</span>}\n </span>\n )\n }\n return (\n <span className=\"flex min-w-0 items-center gap-1.5 text-sm text-muted-foreground\">\n {stepIcon}\n <span\n className=\"truncate\"\n data-testid={testIdOr(testIds?.step, { testId: 'agent-current-step-description' })}\n >\n {stepLabel}\n </span>\n {timer && <span className=\"shrink-0 tabular-nums text-muted-foreground\">{timer}</span>}\n </span>\n )\n}\n\n/* ── Controls ─────────────────────────────────────────────────────────────────────────────── */\n\n/** Small icon button in the bar's control cluster (44px on touch). */\nexport const AgentBarIconButton = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement>\n>(function AgentBarIconButton({ className, type = 'button', ...rest }, ref) {\n return (\n <button\n ref={ref}\n type={type}\n data-slot=\"agent-bar-button\"\n className={cn(\n 'rounded-md p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:p-3',\n className\n )}\n {...rest}\n />\n )\n})\n\nexport interface AgentBarMenuItem {\n id: string\n label: string\n icon?: ReactNode\n onSelect: () => void\n disabled?: boolean\n testId?: string\n}\n\n/** The ⋮ menu. Non-modal: the composer stays usable while it is open. */\nexport function AgentBarMenu({\n items,\n labels,\n testId = 'agent-control-menu',\n}: {\n items: ReadonlyArray<AgentBarMenuItem>\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <AgentBarIconButton title={l.agentActions} aria-label={l.agentActions} data-testid={testId}>\n <MoreVertical className=\"h-4 w-4\" />\n </AgentBarIconButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {items.map((item) => (\n <DropdownMenuItem\n key={item.id}\n onClick={item.onSelect}\n disabled={item.disabled}\n data-testid={item.testId}\n >\n {item.icon}\n {item.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\n/* ── Notes under the bar ──────────────────────────────────────────────────────────────────── */\n\n/** Wrapper for the notes under the bar row. */\nexport function AgentBarNotes({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return <div className={cn('mx-3 mb-2 space-y-1.5', className)}>{children}</div>\n}\n\nexport function AgentBarQueuedNote({\n text,\n isAcknowledged,\n labels,\n testId = 'agent-queued-message',\n}: {\n text: string\n isAcknowledged: boolean\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div\n className=\"flex min-w-0 items-start gap-2 rounded-md bg-background px-2.5 py-2\"\n data-testid={testId}\n >\n <Hourglass className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-yellow-text\" aria-hidden=\"true\" />\n <div className=\"min-w-0 flex-1\">\n <p\n className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\"\n data-queue-acknowledged={isAcknowledged}\n >\n {l.queuedMessage}\n </p>\n <p className=\"line-clamp-2 whitespace-pre-line text-sm text-foreground\" title={text}>\n {text}\n </p>\n </div>\n </div>\n )\n}\n\nexport function AgentBarProbeAnswer({\n answer,\n labels,\n testId = 'agent-probe-answer',\n}: {\n answer: string\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div className=\"rounded-md bg-background px-2.5 py-1.5\" data-testid={testId}>\n <p className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {l.statusUpdate}\n </p>\n <p className=\"mt-0.5 whitespace-pre-line text-sm text-foreground\">{answer}</p>\n </div>\n )\n}\n","import { useState } from 'react'\nimport type { ReactNode } from 'react'\nimport {\n Check,\n CheckCircle2,\n CheckSquare,\n ChevronDown,\n ChevronRight,\n Loader2,\n Square,\n TriangleAlert,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { prefixedTestId, testIdOr } from '../../chat/test-id'\n\n// ── Trace ───────────────────────────────────────────────────────────────────────────────────\n\nexport interface StepTraceProps {\n /** The rows (StepRow / SubAgentLane). */\n children: ReactNode\n /** Totals footer (see StepTraceSummary). */\n summary?: ReactNode\n className?: string\n /** Root id (default `agent-steps`). */\n testId?: string\n /** List id (default `agent-steps-list`). */\n listTestId?: string\n}\n\n/** The agent's step timeline: a numbered list with a rail, plus an optional totals footer. */\nexport function StepTrace({ children, summary, className, testId, listTestId }: StepTraceProps) {\n return (\n <div\n className={cn('border-b border-border', className)}\n data-slot=\"step-trace\"\n data-testid={testIdOr(testId, { testId: 'agent-steps' })}\n >\n <ul\n className=\"space-y-0 px-1.5 py-2.5\"\n data-testid={testIdOr(listTestId, { testId: 'agent-steps-list' })}\n >\n {children}\n </ul>\n {summary}\n </div>\n )\n}\n\n/** Every fixed string of the agent step parts. Pass a partial `labels` to a part to reword. */\nexport interface AgentStepsLabels {\n nearBudget: string\n goalMet: string\n reviewingGoal: string\n subAgent: string\n running: string\n failed: string\n done: string\n}\n\nexport const DEFAULT_AGENT_STEPS_LABELS: AgentStepsLabels = {\n nearBudget: 'Near shared credit budget',\n goalMet: 'Goal met',\n reviewingGoal: 'Reviewing goal',\n subAgent: 'sub-agent',\n running: 'Running',\n failed: 'Failed',\n done: 'Done',\n}\n\nexport interface StepTraceSummaryProps {\n /** \"3 steps · 2 tool calls · 12.0s ...\" */\n left: string\n /** Shows the \"near shared credit budget\" warning. */\n isNearBudget?: boolean\n /** \"Total: 1.2 credits\" */\n total: string\n labels?: Partial<AgentStepsLabels>\n testId?: string\n}\n\nexport function StepTraceSummary({\n left,\n isNearBudget,\n total,\n labels,\n testId,\n}: StepTraceSummaryProps) {\n const l = { ...DEFAULT_AGENT_STEPS_LABELS, ...labels }\n return (\n <div\n className=\"flex items-center justify-between border-t border-border px-3 py-2 text-sm text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: 'agent-steps-credits-summary' })}\n >\n <span>{left}</span>\n <div className=\"flex items-center gap-2\">\n {isNearBudget && <span className=\"font-medium text-yellow-text\">{l.nearBudget}</span>}\n <span>{total}</span>\n </div>\n </div>\n )\n}\n\n// ── Row ─────────────────────────────────────────────────────────────────────────────────────\n\n/** Tone classes of a step's icon node. */\nexport interface StepAccentClasses {\n bg: string\n fg: string\n ring: string\n}\n\nconst numberGutter =\n 'w-4 shrink-0 pt-[5px] text-right text-sm font-medium leading-none tabular-nums text-muted-foreground'\n\nexport interface StepRowProps {\n /** Step index: drives `agent-step-{index}`. */\n index: number\n /** Display number (\"3\" or \"3.2\"). */\n number: string\n depth: number\n /** The last row has no rail below it. */\n isLast: boolean\n /** The step running right now: pending treatment + ping. */\n isActive: boolean\n accent: StepAccentClasses\n icon: ReactNode\n /** Row semantic identity (`narration`, `goal`, `tool`...), mirrored as data-step. */\n kind: string\n /** The step's title. */\n title: ReactNode\n /** Test id of the title text (set on the active row). */\n titleTestId?: string\n /** Prefix of the row id: `<prefix>-<index>` (default `agent-step`). */\n testIdPrefix?: string\n /** Tier glyph beside the title (host wraps its tooltip). */\n badge?: ReactNode\n /** Right-aligned meta: model, tokens, credits, duration. */\n meta?: ReactNode\n /** Summary, detail lines, outcome, criteria, folded sub-steps. */\n children?: ReactNode\n}\n\n/** One step: number gutter, rail, icon node, title row, then body parts. */\nexport function StepRow({\n index,\n number,\n depth,\n isLast,\n isActive,\n accent,\n icon,\n kind,\n title,\n titleTestId,\n testIdPrefix,\n badge,\n meta,\n children,\n}: StepRowProps) {\n return (\n <li\n className=\"relative flex gap-2 pb-2.5 last:pb-0\"\n data-slot=\"step-row\"\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-${index}` })}\n data-depth={depth}\n data-step={kind}\n >\n <span className={numberGutter}>{number}</span>\n\n {/* Rail: connects this node to the next. Sits on the node's centre (number column 16px +\n gap 8px + half the 22px node). */}\n {!isLast && (\n <span aria-hidden=\"true\" className=\"absolute bottom-0 left-[33px] top-6 w-px bg-border\" />\n )}\n\n {/* Node: the running step uses the pending (orange) treatment; settled steps keep their\n per-type accent. */}\n <span\n className={cn(\n 'relative z-10 mt-0.5 flex size-[22px] shrink-0 items-center justify-center rounded-full ring-1',\n isActive\n ? 'bg-yellow-bg text-yellow-text ring-yellow-border'\n : cn(accent.bg, accent.fg, accent.ring)\n )}\n >\n {isActive && (\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-0 animate-ping rounded-full bg-yellow-text opacity-30\"\n />\n )}\n <span className=\"relative flex\">{icon}</span>\n </span>\n\n <div className=\"min-w-0 flex-1 pt-[3px]\">\n <div className=\"flex items-baseline gap-2\">\n <span\n className={cn(\n 'truncate text-sm font-medium leading-tight',\n isActive ? 'text-yellow-text' : 'text-foreground'\n )}\n >\n <span data-testid={titleTestId}>{title}</span>\n </span>\n {badge}\n <span className=\"ml-auto flex shrink-0 items-center gap-1.5 text-sm tabular-nums text-muted-foreground\">\n {meta}\n </span>\n </div>\n {children}\n </div>\n </li>\n )\n}\n\n/** One-line summary under a step title (clamped unless multi-line). */\nexport function StepSummary({\n index,\n multiLine,\n children,\n testIdPrefix,\n}: {\n index: number\n multiLine?: boolean\n children: ReactNode\n /** Default `agent-step-summary` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <p\n className={cn(\n 'mt-0.5 text-sm leading-snug text-muted-foreground',\n multiLine ? 'whitespace-pre-wrap' : 'line-clamp-2'\n )}\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-summary-${index}` })}\n >\n {children}\n </p>\n )\n}\n\n/** Narration (the model writing prose to the user); the host renders the markdown. */\nexport function StepNarration({\n index,\n children,\n testIdPrefix,\n}: {\n index: number\n children: ReactNode\n /** Default `agent-step-summary` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <div\n className=\"markdown-content mt-0.5 text-sm leading-snug text-muted-foreground\"\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-summary-${index}` })}\n >\n {children}\n </div>\n )\n}\n\n/** What the narrative displaced: the tool's target or a plan's checklist line. */\nexport function StepDetail({\n index,\n children,\n testIdPrefix,\n}: {\n index: number\n children: ReactNode\n /** Default `agent-step-detail` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <p\n className=\"mt-0.5 whitespace-pre-wrap text-sm leading-snug text-muted-foreground\"\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-detail-${index}` })}\n >\n {children}\n </p>\n )\n}\n\n/** Outcome chip: neutral tick, or a warning when the step failed. */\nexport function StepOutcome({\n index,\n failed,\n children,\n testIdPrefix,\n}: {\n index: number\n failed: boolean\n children: ReactNode\n /** Default `agent-step-outcome` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <span\n className={cn(\n 'mt-1 inline-flex items-center gap-1 rounded-full px-1.5 py-px text-sm leading-5',\n failed ? 'bg-yellow-bg text-yellow-text' : 'bg-muted text-muted-foreground'\n )}\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-outcome-${index}` })}\n data-outcome-failed={failed ? 'true' : 'false'}\n >\n {failed ? (\n <TriangleAlert size={12} className=\"text-yellow-text\" />\n ) : (\n <Check size={12} className=\"text-green-text\" />\n )}\n {children}\n </span>\n )\n}\n\n/** Raw tool params (developer affordance). */\nexport function StepParams({ children }: { children: ReactNode }) {\n return <p className=\"mt-0.5 truncate text-sm text-muted-foreground\">{children}</p>\n}\n\n// ── Goal criteria ───────────────────────────────────────────────────────────────────────────\n\nexport interface GoalCriterionView {\n key: string\n text: string\n note?: string\n met: boolean\n}\n\n/** The goal gate's criteria as ticked / unticked checkboxes plus the overall verdict. */\nexport function GoalCriteria({\n criteria,\n labels,\n testIds,\n}: {\n criteria: GoalCriterionView[]\n labels?: Partial<AgentStepsLabels>\n /** Part ids; defaults are the current ids. */\n testIds?: Partial<Record<'list' | 'verdict', string>>\n}) {\n const l = { ...DEFAULT_AGENT_STEPS_LABELS, ...labels }\n const ticked = criteria.filter((c) => c.met).length\n const done = criteria.length > 0 && ticked === criteria.length\n return (\n <div className=\"mt-1.5\">\n <ul className=\"space-y-1\" data-testid={testIdOr(testIds?.list, { testId: 'goal-criteria' })}>\n {criteria.map((c) => (\n <li\n key={c.key}\n className=\"flex items-start gap-1.5\"\n data-goal-criterion-met={c.met ? 'true' : 'false'}\n >\n {c.met ? (\n <CheckSquare size={13} className=\"mt-px shrink-0 text-green-text\" />\n ) : (\n <Square size={13} className=\"mt-px shrink-0 text-muted-foreground\" />\n )}\n <span className={cn('text-sm', c.met ? 'text-foreground' : 'text-muted-foreground')}>\n {c.text}\n {c.note && !c.met && <span className=\"text-muted-foreground\"> — {c.note}</span>}\n </span>\n </li>\n ))}\n </ul>\n {/* Overall assessment: green once every box is ticked, pending while the gate reviews. */}\n <span\n className={cn(\n 'mt-1.5 inline-flex items-center gap-1 rounded-md px-1.5 py-0.5 text-sm font-semibold',\n done ? 'bg-primary/12 text-green-text' : 'bg-yellow-bg text-yellow-text'\n )}\n data-testid={testIdOr(testIds?.verdict, { testId: 'watch-run-goal' })}\n data-goal-done={done ? 'true' : 'false'}\n >\n {done ? <CheckCircle2 size={12} /> : <Loader2 size={12} className=\"animate-spin\" />}\n {done ? l.goalMet : l.reviewingGoal} · {ticked}/{criteria.length}\n </span>\n </div>\n )\n}\n\n// ── Folds ───────────────────────────────────────────────────────────────────────────────────\n\nexport interface SubStepGroupProps {\n /** Parent step index. */\n parentIndex: number\n /** \"3 searches, 2 reads\". */\n summary: string\n /** Colour class applied to the summary while open (the parent's accent). */\n openClassName?: string\n /** Rendered only while open. */\n renderSteps: () => ReactNode\n /** Prefixes (`<prefix>-<parent index>`); defaults `sub-steps-toggle` / `sub-steps`. */\n testIds?: Partial<Record<'toggle' | 'list', string>>\n}\n\n/** Inner steps of a sub-agent, folded under their parent (collapsed, self-describing). */\nexport function SubStepGroup({\n parentIndex,\n summary,\n openClassName,\n renderSteps,\n testIds,\n}: SubStepGroupProps) {\n const [open, setOpen] = useState(false)\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n className=\"mt-1 flex items-center gap-1 rounded px-1 py-0.5 text-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:min-h-11\"\n data-testid={prefixedTestId(testIds?.toggle, parentIndex, {\n testId: `sub-steps-toggle-${parentIndex}`,\n })}\n >\n {open ? <ChevronDown size={12} /> : <ChevronRight size={12} />}\n <span className={cn('tabular-nums', open && openClassName)}>{summary}</span>\n </button>\n {open && (\n <ul\n className=\"mt-1\"\n data-testid={prefixedTestId(testIds?.list, parentIndex, {\n testId: `sub-steps-${parentIndex}`,\n })}\n >\n {renderSteps()}\n </ul>\n )}\n </>\n )\n}\n\nexport type SubAgentStatus = 'running' | 'failed' | 'done'\n\nexport interface SubAgentLaneProps {\n handle: string\n /** Display number of the lane row. */\n number: number\n /** The lane's job name, never the raw handle. */\n job: string\n /** The child's task (tooltip). */\n task?: string\n status: SubAgentStatus\n /** Count of the child's own steps. */\n innerCount: number\n /** What the child is doing right now (shown while collapsed and running). */\n liveFocus?: string\n /** Rendered only while open. */\n renderSteps: () => ReactNode\n labels?: Partial<AgentStepsLabels>\n /**\n * Prefixes (`<prefix>-<handle>`); defaults `subagent-lane`, `subagent-lane-toggle`,\n * `subagent-lane-status`, `subagent-lane-live`.\n */\n testIds?: Partial<Record<'lane' | 'toggle' | 'status' | 'live', string>>\n}\n\nconst LANE_TONE: Record<SubAgentStatus, string> = {\n running: 'border-yellow-border/60 bg-yellow-bg/40',\n failed: 'border-red-border/50 bg-red-bg/40',\n done: 'border-border bg-muted',\n}\nconst LANE_PILL: Record<SubAgentStatus, string> = {\n running: 'bg-yellow-bg text-yellow-text',\n failed: 'bg-red-bg text-red-text',\n done: 'bg-primary/12 text-green-text',\n}\n\n/** A concurrently-running sub-agent as its own live lane; collapsed by default, expands on demand. */\nexport function SubAgentLane({\n handle,\n number,\n job,\n task,\n status,\n innerCount,\n liveFocus,\n renderSteps,\n labels,\n testIds,\n}: SubAgentLaneProps) {\n const l = { ...DEFAULT_AGENT_STEPS_LABELS, ...labels }\n const [open, setOpen] = useState(false)\n const running = status === 'running'\n return (\n <li\n className=\"relative flex gap-2 pb-2.5 last:pb-0\"\n data-slot=\"subagent-lane\"\n data-testid={prefixedTestId(testIds?.lane, handle, { testId: `subagent-lane-${handle}` })}\n >\n <span className={numberGutter}>{number}</span>\n <div className=\"min-w-0 flex-1\">\n <div className={cn('rounded-md border', LANE_TONE[status])}>\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center gap-2 px-2.5 py-1.5 text-left pointer-coarse:min-h-11\"\n aria-expanded={open}\n data-testid={prefixedTestId(testIds?.toggle, handle, {\n testId: `subagent-lane-toggle-${handle}`,\n })}\n >\n {open ? (\n <ChevronDown size={13} className=\"shrink-0 text-muted-foreground\" />\n ) : (\n <ChevronRight size={13} className=\"shrink-0 text-muted-foreground\" />\n )}\n <span className=\"shrink-0 rounded bg-muted px-1 py-0.5 text-xs font-semibold uppercase leading-none tracking-wide text-muted-foreground\">\n {l.subAgent}\n </span>\n <span\n className=\"min-w-0 flex-1 truncate text-sm font-medium text-foreground\"\n title={task || job}\n >\n {job}\n </span>\n <span\n className={cn(\n 'flex shrink-0 items-center gap-1 rounded-full px-1.5 py-px text-sm font-medium',\n LANE_PILL[status]\n )}\n data-testid={prefixedTestId(testIds?.status, handle, {\n testId: `subagent-lane-status-${handle}`,\n })}\n data-status={status}\n >\n {running ? (\n <Loader2 size={12} className=\"animate-spin\" />\n ) : status === 'failed' ? (\n <TriangleAlert size={12} />\n ) : (\n <CheckCircle2 size={12} />\n )}\n {l[status]}\n {innerCount > 0 && <span className=\"tabular-nums opacity-70\"> · {innerCount}</span>}\n </span>\n </button>\n {/* Collapsed but running: a live line so the folded lane does not read as stalled. */}\n {!open && running && liveFocus && (\n <p\n className=\"flex items-center gap-1.5 border-t border-yellow-border/30 px-2.5 py-1.5 text-sm text-yellow-text\"\n data-testid={prefixedTestId(testIds?.live, handle, {\n testId: `subagent-lane-live-${handle}`,\n })}\n >\n <Loader2 size={12} className=\"shrink-0 animate-spin\" />\n <span className=\"truncate\">{liveFocus}</span>\n </p>\n )}\n {open && innerCount > 0 && (\n <ul className=\"space-y-0 border-t border-border px-2.5 py-2\">{renderSteps()}</ul>\n )}\n </div>\n </div>\n </li>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { CheckCircle2, ChevronDown, ChevronRight, TriangleAlert } from 'lucide-react'\nimport { Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\nimport type { SubAgentStatus } from './AgentSteps'\n\n/** One sub-agent line of the roster. */\nexport interface SubagentRosterLane {\n handle: string\n status: SubAgentStatus\n /** The delegated task (or its job name): the line's text and tooltip. */\n task: string\n /** Count of the child's own steps; a child with none has nothing to expand. */\n stepCount: number\n /** Present when the child has its own thread to step into. */\n canOpenThread?: boolean\n}\n\n/** Every fixed string of the roster. */\nexport interface SubagentRosterLabels {\n badge: string\n hideSteps: string\n showSteps: string\n openThread: string\n openThreadAria: string\n}\n\nexport const DEFAULT_SUBAGENT_ROSTER_LABELS: SubagentRosterLabels = {\n badge: 'sub-agent',\n hideSteps: \"Hide this sub-agent's steps\",\n showSteps: \"Show this sub-agent's steps\",\n openThread: 'Open thread',\n openThreadAria: \"Open this sub-agent's own thread\",\n}\n\nexport interface SubagentRosterProps {\n lanes: SubagentRosterLane[]\n /** The child's own steps, rendered only while its line is expanded. */\n renderSteps: (handle: string) => ReactNode\n onOpenThread: (handle: string) => void\n className?: string\n labels?: Partial<SubagentRosterLabels>\n}\n\nconst LINE = 'flex min-w-0 flex-1 items-center gap-1.5 pl-3 text-sm leading-snug'\n\n/**\n * Live roster of a turn's sub-agents, indented under the agent's status line: one compact line\n * per child (static dot while running, check / alert once settled), each expandable to its own\n * steps. Ids: `running-subagents`, `running-subagent-<h>`, `-toggle-<h>`, `-open-thread-<h>`,\n * `-steps-<h>`.\n */\nexport function SubagentRoster({\n lanes,\n renderSteps,\n onOpenThread,\n className,\n labels,\n}: SubagentRosterProps) {\n const l = { ...DEFAULT_SUBAGENT_ROSTER_LABELS, ...labels }\n const [openHandles, setOpenHandles] = useState<Record<string, boolean>>({})\n const toggle = (handle: string) =>\n setOpenHandles((prev) => ({ ...prev, [handle]: !prev[handle] }))\n\n return (\n <div\n className={cn('space-y-0.5 px-3 pb-1.5', className)}\n data-slot=\"subagent-roster\"\n data-testid=\"running-subagents\"\n role=\"list\"\n >\n {lanes.map((lane) => {\n const running = lane.status === 'running'\n const expandable = lane.stepCount > 0\n const open = expandable && !!openHandles[lane.handle]\n\n const line = (\n <>\n <span aria-hidden className=\"select-none font-mono text-muted-foreground/30\">\n └\n </span>\n {/* Fixed-width slot so a non-expandable line aligns with expandable siblings. */}\n <span className=\"flex w-3.5 shrink-0 justify-center\">\n {expandable &&\n (open ? (\n <ChevronDown size={12} className=\"text-muted-foreground/60\" />\n ) : (\n <ChevronRight size={12} className=\"text-muted-foreground/60\" />\n ))}\n </span>\n {/* Static dot while running: the agent's own spinner carries the motion. */}\n {running ? (\n <span aria-hidden className=\"size-1.5 shrink-0 rounded-full bg-yellow-text\" />\n ) : lane.status === 'failed' ? (\n <TriangleAlert size={11} className=\"shrink-0 text-red-text\" />\n ) : (\n <CheckCircle2 size={11} className=\"shrink-0 text-green-text\" />\n )}\n <span className=\"shrink-0 rounded bg-muted px-1 py-0.5 text-sm font-semibold uppercase leading-none tracking-wide text-muted-foreground/80\">\n {l.badge}\n </span>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n 'min-w-0 flex-1 truncate text-left',\n running ? 'text-foreground/90' : 'text-muted-foreground'\n )}\n >\n {lane.task}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{lane.task}</TooltipContent>\n </Tooltip>\n {expandable && (\n <span className=\"shrink-0 tabular-nums text-muted-foreground/40\">\n {lane.stepCount}\n </span>\n )}\n </>\n )\n\n return (\n <div\n key={lane.handle}\n role=\"listitem\"\n data-testid={`running-subagent-${lane.handle}`}\n data-status={lane.status}\n data-expanded={open ? 'true' : 'false'}\n >\n <div className=\"flex w-full items-center gap-1\">\n {expandable ? (\n <button\n type=\"button\"\n onClick={() => toggle(lane.handle)}\n aria-expanded={open}\n aria-label={open ? l.hideSteps : l.showSteps}\n className={cn(\n LINE,\n 'rounded transition-colors hover:bg-muted/60 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:min-h-11'\n )}\n data-testid={`running-subagent-toggle-${lane.handle}`}\n >\n {line}\n </button>\n ) : (\n <div className={LINE}>{line}</div>\n )}\n {lane.canOpenThread && (\n <button\n type=\"button\"\n onClick={() => onOpenThread(lane.handle)}\n aria-label={l.openThreadAria}\n title={l.openThread}\n className=\"flex shrink-0 items-center rounded p-1 text-muted-foreground/50 transition-colors hover:bg-muted/60 hover:text-foreground focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:min-h-11 pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n data-testid={`running-subagent-open-thread-${lane.handle}`}\n >\n <ChevronRight size={14} aria-hidden />\n </button>\n )}\n </div>\n {open && (\n <div\n className=\"ml-3 border-l border-border/50 pl-2\"\n data-testid={`running-subagent-steps-${lane.handle}`}\n >\n {renderSteps(lane.handle)}\n </div>\n )}\n </div>\n )\n })}\n </div>\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface ConsentActionsLabels {\n deny: string\n allow: string\n loading: string\n}\n\nexport const DEFAULT_CONSENT_ACTIONS_LABELS: ConsentActionsLabels = {\n deny: 'Deny',\n allow: 'Allow',\n loading: 'Connecting…',\n}\n\nexport interface CopyableUrlLabels {\n copy: string\n copied: string\n}\n\nexport const DEFAULT_COPYABLE_URL_LABELS: CopyableUrlLabels = {\n copy: 'Copy to clipboard',\n copied: 'Copied',\n}\n\n/** Full-screen centered stage for a consent / authorization card. */\nexport function ConsentPage({\n children,\n className,\n testId,\n ...rest\n}: {\n children: ReactNode\n className?: string\n testId?: string\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'>) {\n return (\n <div\n {...rest}\n className={cn('flex min-h-screen items-center justify-center bg-background p-6', className)}\n data-testid={testId}\n data-slot=\"consent-page\"\n >\n {children}\n </div>\n )\n}\n\nconst CARD_WIDTH = { sm: 'max-w-sm', md: 'max-w-md' } as const\n\n/** The grouping tile holding a consent flow's sections. */\nexport function ConsentCard({\n children,\n size = 'sm',\n className,\n ...rest\n}: {\n children: ReactNode\n size?: keyof typeof CARD_WIDTH\n className?: string\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'>) {\n return (\n <div\n {...rest}\n className={cn('w-full rounded-lg bg-muted', CARD_WIDTH[size], className)}\n data-slot=\"consent-card\"\n >\n {children}\n </div>\n )\n}\n\n/** Icon + title + description block at the top of a card. */\nexport function ConsentHeader({\n icon,\n title,\n children,\n}: {\n /** Icon (or logo) shown above (default) or beside the title. */\n icon?: ReactNode\n title: ReactNode\n /** Description paragraph content. */\n children?: ReactNode\n}) {\n return (\n <div className=\"px-6 py-5\" data-slot=\"consent-header\">\n {icon && (\n <div className=\"mb-3 flex size-10 items-center justify-center rounded-lg bg-accent text-primary [&>svg]:size-5\">\n {icon}\n </div>\n )}\n <h1 className=\"text-xl font-semibold text-foreground\">{title}</h1>\n {children && <p className=\"mt-1 text-sm text-muted-foreground\">{children}</p>}\n </div>\n )\n}\n\n/** Titled section of a consent card (e.g. \"This will allow\"). */\nexport function ConsentSection({ title, children }: { title: string; children: ReactNode }) {\n return (\n <div className=\"px-6 py-4\" data-slot=\"consent-section\">\n <p className=\"mb-3 text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {title}\n </p>\n {children}\n </div>\n )\n}\n\n/** Checkmarked list of permissions. */\nexport function ConsentPermissionList({ items }: { items: ReactNode[] }) {\n return (\n <ul className=\"space-y-2 text-sm text-foreground\">\n {items.map((item, i) => (\n <li key={i} className=\"flex items-center gap-2\">\n <Check className=\"size-4 shrink-0 text-primary\" aria-hidden />\n {item}\n </li>\n ))}\n </ul>\n )\n}\n\nconst NOTICE_TONES = {\n error: 'bg-destructive/10 text-destructive',\n success: 'bg-green-bg text-green-text',\n warning: 'bg-yellow-bg text-yellow-text',\n} as const\n\n/** Tinted inline notice (no box border): error, success or warning. */\nexport function ConsentNotice({\n tone,\n title,\n children,\n className,\n}: {\n tone: keyof typeof NOTICE_TONES\n title?: string\n children?: ReactNode\n className?: string\n}) {\n return (\n <div\n role={tone === 'error' ? 'alert' : 'status'}\n className={cn('mx-6 mb-2 rounded-lg px-4 py-3 text-sm', NOTICE_TONES[tone], className)}\n data-slot=\"consent-notice\"\n >\n {title && <p className=\"font-medium\">{title}</p>}\n {children && <div className={title ? 'mt-1' : undefined}>{children}</div>}\n </div>\n )\n}\n\n/** Deny / Allow footer; Allow is the single primary action. */\nexport function ConsentActions({\n onDeny,\n onAllow,\n isLoading,\n denyLabel,\n allowLabel,\n loadingLabel,\n labels,\n}: {\n onDeny: () => void\n onAllow: () => void\n isLoading?: boolean\n denyLabel?: string\n allowLabel?: string\n loadingLabel?: string\n /** Bundle form of the three label props; the single-string props win. */\n labels?: Partial<ConsentActionsLabels>\n}) {\n const l = { ...DEFAULT_CONSENT_ACTIONS_LABELS, ...labels }\n return (\n <div className=\"flex gap-3 px-6 py-4\" data-slot=\"consent-actions\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"flex-1 pointer-coarse:h-11\"\n onClick={onDeny}\n disabled={isLoading}\n >\n {denyLabel ?? l.deny}\n </Button>\n <Button\n type=\"button\"\n className=\"flex-1 pointer-coarse:h-11\"\n onClick={onAllow}\n disabled={isLoading}\n >\n {isLoading ? (loadingLabel ?? l.loading) : (allowLabel ?? l.allow)}\n </Button>\n </div>\n )\n}\n\n/** Read-only URL with a copy button (clipboard handled by the caller). */\nexport function CopyableUrl({\n url,\n copied,\n onCopy,\n labels,\n}: {\n url: string\n copied: boolean\n onCopy: () => void\n labels?: Partial<CopyableUrlLabels>\n}) {\n const l = { ...DEFAULT_COPYABLE_URL_LABELS, ...labels }\n return (\n <div className=\"flex items-stretch gap-2\" data-slot=\"copyable-url\">\n <code className=\"flex-1 overflow-x-auto break-all rounded-lg bg-background px-3 py-2 text-xs text-foreground\">\n {url}\n </code>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-auto shrink-0 pointer-coarse:size-11\"\n onClick={onCopy}\n title={l.copy}\n aria-label={copied ? l.copied : l.copy}\n >\n {copied ? <Check className=\"size-4 text-primary\" /> : <Copy className=\"size-4\" />}\n </Button>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ConsentCard } from './ConsentPage'\n\nconst MESSAGE_TONES = {\n error: { card: 'p-6', title: 'mb-2 text-destructive', body: 'text-muted-foreground' },\n warning: {\n card: 'bg-yellow-bg px-6 py-8',\n title: 'text-yellow-text',\n body: 'mt-2 text-yellow-text',\n },\n} as const\n\n/** A card that only says something (an invalid request, \"close this tab\"): title and a message. */\nexport function ConsentMessage({\n tone,\n title,\n children,\n}: {\n tone: keyof typeof MESSAGE_TONES\n title: string\n children: ReactNode\n}) {\n const t = MESSAGE_TONES[tone]\n return (\n <ConsentCard className={cn('text-center', t.card)}>\n <h1 className={cn('text-xl font-semibold', t.title)}>{title}</h1>\n <p className={cn('text-sm', t.body)}>{children}</p>\n </ConsentCard>\n )\n}\n\n/** Bulleted list of what is being agreed to; each item can carry bold lead-in text. */\nexport function ConsentBulletList({ items }: { items: ReactNode[] }) {\n return (\n <ul data-slot=\"consent-bullets\" className=\"mb-5 space-y-2 text-sm text-foreground\">\n {items.map((item, i) => (\n <li key={i} className=\"flex gap-2\">\n <span aria-hidden=\"true\">•</span>\n <span>{item}</span>\n </li>\n ))}\n </ul>\n )\n}\n\n/** Paragraph of a consent card: `body` explains, `footnote` is small print under an action. */\nexport function ConsentText({\n variant = 'body',\n children,\n}: {\n variant?: 'body' | 'footnote' | 'hint'\n children: ReactNode\n}) {\n return (\n <p\n data-slot=\"consent-text\"\n className={cn(\n 'text-muted-foreground',\n variant === 'body' && 'mb-5 text-sm',\n variant === 'footnote' && 'mt-3 text-center text-xs',\n variant === 'hint' && 'mt-3 text-xs'\n )}\n >\n {children}\n </p>\n )\n}\n\n/** Small print under the actions of a card, centred in the card's padding. */\nexport function ConsentFootnote({ children }: { children: ReactNode }) {\n return (\n <p data-slot=\"consent-footnote\" className=\"px-6 pb-4 text-center text-xs text-muted-foreground\">\n {children}\n </p>\n )\n}\n\n/** Emphasised lead-in inside running text (\"**Read files** — lets…\"). */\nexport function ConsentStrong({ children }: { children: ReactNode }) {\n return <span className=\"font-medium text-foreground\">{children}</span>\n}\n","import { useMemo, type ReactNode } from 'react'\nimport { ArrowLeft } from 'lucide-react'\nimport { Button, Input, Label } from '@arbidocs/react/ui'\nimport { MultiSelect } from '../../settings/MultiSelect'\n\n/** Every fixed string of the agent modal. */\nexport interface AuthorizeAgentLabels {\n editIntro: (agentName: string) => string\n mainIntro: string\n noAssistant: string\n connectExternal: string\n optional: string\n createdIntro: string\n email: string\n signingKey: string\n configure: string\n hideConfiguration: string\n done: string\n backToMain: string\n connectIntro: string\n name: string\n namePlaceholder: string\n nameHint: string\n workspaces: string\n workspacesPlaceholder: string\n roleTitle: string\n collaborator: string\n guest: string\n cancel: string\n create: string\n creating: string\n}\n\nexport const DEFAULT_AUTHORIZE_AGENT_LABELS: AuthorizeAgentLabels = {\n editIntro: (n) => `Configure what ${n} can do — tools, persona, and skills.`,\n mainIntro:\n 'Configure your assistant — the tools it can use, its persona, and which skills it can run.',\n noAssistant: 'No assistant is set up yet. You can connect an external agent below.',\n connectExternal: 'Connect an external agent',\n optional: '(optional)',\n createdIntro:\n 'Assistant created. Save this signing key — it is shown only once and cannot be recovered. It is the credential an external CLI agent uses to sign in as this assistant.',\n email: 'Email: ',\n signingKey: 'Signing key: ',\n configure: 'Configure',\n hideConfiguration: 'Hide configuration',\n done: 'Done',\n backToMain: 'Back to configuring your assistant',\n connectIntro:\n 'Connect an external agent: create a persistent agent with its own login and connect it to ARBI from another machine. Optional — most users just configure their assistant above.',\n name: 'Name',\n namePlaceholder: 'e.g. research-bot, qa-assistant',\n nameHint: \"Letters, digits, hyphens, underscores. Used in the agent's email address.\",\n workspaces: 'Workspaces',\n workspacesPlaceholder: 'Select workspaces to share...',\n roleTitle: 'Role in shared workspaces',\n collaborator: 'Collaborator',\n guest: 'Guest',\n cancel: 'Cancel',\n create: 'Create Assistant',\n creating: 'Creating...',\n}\n\nconst INTRO = 'text-sm text-muted-foreground'\nconst LINK =\n 'inline-flex items-center gap-1.5 text-xs text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11'\n\nfunction useLabels(labels?: Partial<AuthorizeAgentLabels>): AuthorizeAgentLabels {\n return useMemo(() => ({ ...DEFAULT_AUTHORIZE_AGENT_LABELS, ...labels }), [labels])\n}\n\nexport interface AgentEditViewProps {\n agentName: string\n /** The agent's config editor (host component: it owns the data). */\n config: ReactNode\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Edit variant: straight into the config editor of an existing agent. */\nexport function AgentEditView({ agentName, config, labels }: AgentEditViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\" data-testid=\"agent-edit-config\">\n <p className={INTRO}>{l.editIntro(agentName)}</p>\n {config}\n </div>\n )\n}\n\nexport interface AgentMainViewProps {\n /** The main assistant's config editor; omit when no assistant exists yet. */\n config?: ReactNode\n onConnectExternal: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Primary view: configure the main assistant; connecting an external agent is secondary. */\nexport function AgentMainView({ config, onConnectExternal, labels }: AgentMainViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\" data-testid=\"agent-main-config\">\n <p className={INTRO}>{l.mainIntro}</p>\n {config ?? <p className={`py-4 ${INTRO}`}>{l.noAssistant}</p>}\n <div className=\"border-t pt-3\">\n <button\n type=\"button\"\n onClick={onConnectExternal}\n className={LINK}\n data-testid=\"connect-external-agent-link\"\n >\n {l.connectExternal}\n <span className=\"opacity-70\">{l.optional}</span>\n </button>\n </div>\n </div>\n )\n}\n\nexport interface AgentCreatedViewProps {\n email: string\n signingKey: string\n /** Connection instructions (host component). */\n instructions: ReactNode\n /** The inline config editor, rendered while `isConfigOpen`. */\n config: ReactNode\n isConfigOpen: boolean\n onToggleConfig: () => void\n onDone: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** After creating an external agent: the one-time signing key, instructions, optional config. */\nexport function AgentCreatedView({\n email,\n signingKey,\n instructions,\n config,\n isConfigOpen,\n onToggleConfig,\n onDone,\n labels,\n}: AgentCreatedViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\">\n <p className={INTRO}>{l.createdIntro}</p>\n\n <div className=\"space-y-2 rounded-md bg-muted p-4 font-mono text-sm\">\n <div>\n <span className=\"text-muted-foreground\">{l.email}</span>\n <span className=\"select-all font-semibold\">{email}</span>\n </div>\n <div className=\"break-all\">\n <span className=\"text-muted-foreground\">{l.signingKey}</span>\n <span className=\"select-all font-semibold\">{signingKey}</span>\n </div>\n </div>\n\n {instructions}\n\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" onClick={onToggleConfig} data-testid=\"configure-agent-button\">\n {isConfigOpen ? l.hideConfiguration : l.configure}\n </Button>\n <Button onClick={onDone}>{l.done}</Button>\n </div>\n\n {/* Revealed inline: no nested dialog. */}\n {isConfigOpen && <div className=\"border-t pt-4\">{config}</div>}\n </div>\n )\n}\n\nexport type AgentWorkspaceRole = 'collaborator' | 'guest'\n\nexport interface AgentCreateViewProps {\n name: string\n onNameChange: (name: string) => void\n workspaces: { id: string; name: string }[]\n selectedWorkspaces: string[]\n onSelectedWorkspacesChange: (ids: string[]) => void\n role: AgentWorkspaceRole\n onRoleChange: (role: AgentWorkspaceRole) => void\n isSubmitting: boolean\n onBack: () => void\n onCancel: () => void\n onCreate: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Form to create an external agent: name, optional workspaces to share, role. */\nexport function AgentCreateView({\n name,\n onNameChange,\n workspaces,\n selectedWorkspaces,\n onSelectedWorkspacesChange,\n role,\n onRoleChange,\n isSubmitting,\n onBack,\n onCancel,\n onCreate,\n labels,\n}: AgentCreateViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-5\">\n <button type=\"button\" onClick={onBack} className={LINK} data-testid=\"back-to-main-config\">\n <ArrowLeft className=\"size-3.5\" />\n {l.backToMain}\n </button>\n <p className={INTRO}>{l.connectIntro}</p>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"agentName\" className=\"text-sm font-medium\">\n {l.name} <span className=\"text-destructive\">*</span>\n </Label>\n <Input\n id=\"agentName\"\n placeholder={l.namePlaceholder}\n value={name}\n onChange={(e) => onNameChange(e.target.value)}\n />\n <p className={INTRO}>{l.nameHint}</p>\n </div>\n\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium\">\n {l.workspaces} <span className=\"font-normal text-muted-foreground\">{l.optional}</span>\n </Label>\n <MultiSelect\n data={workspaces.map((ws) => ({ label: ws.name, value: ws.id }))}\n value={selectedWorkspaces}\n onChange={onSelectedWorkspacesChange}\n placeholder={l.workspacesPlaceholder}\n searchable={workspaces.length > 5}\n clearable\n size=\"sm\"\n />\n </div>\n\n {selectedWorkspaces.length > 0 && (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium\">{l.roleTitle}</Label>\n <div className=\"flex gap-2\">\n {(['collaborator', 'guest'] as const).map((r) => (\n <Button\n key={r}\n variant={role === r ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => onRoleChange(r)}\n >\n {l[r]}\n </Button>\n ))}\n </div>\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <Button variant=\"outline\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button onClick={onCreate} disabled={!name.trim() || isSubmitting}>\n {isSubmitting ? l.creating : l.create}\n </Button>\n </div>\n </div>\n )\n}\n"]}
|