@arbidocs/blocks 0.4.3 → 0.4.5

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.
Files changed (83) hide show
  1. package/README.md +25 -0
  2. package/dist/agents/definitions/AgentCreator.d.ts +11 -2
  3. package/dist/agents/definitions/index.d.ts +1 -0
  4. package/dist/agents/definitions/persona.d.ts +16 -0
  5. package/dist/agents/index.cjs +202 -150
  6. package/dist/agents/index.js +6 -6
  7. package/dist/agents/tasks/TaskRunsDialog.d.ts +15 -3
  8. package/dist/agents/tasks/index.d.ts +1 -0
  9. package/dist/agents/tasks/taskRequest.d.ts +61 -0
  10. package/dist/artifacts/ArtifactCompareBar.d.ts +33 -0
  11. package/dist/artifacts/ArtifactEditor.d.ts +64 -0
  12. package/dist/artifacts/ArtifactEditorBody.d.ts +34 -0
  13. package/dist/artifacts/ArtifactRedlineView.d.ts +57 -0
  14. package/dist/artifacts/ArtifactToolbar.d.ts +53 -0
  15. package/dist/artifacts/ArtifactVersionBar.d.ts +42 -0
  16. package/dist/{files → artifacts}/RedlineParts.d.ts +4 -0
  17. package/dist/artifacts/editor/ArtifactMarkdownEditor.d.ts +39 -0
  18. package/dist/artifacts/editor/index.cjs +89 -0
  19. package/dist/artifacts/editor/index.cjs.map +1 -0
  20. package/dist/artifacts/editor/index.d.ts +1 -0
  21. package/dist/artifacts/editor/index.js +86 -0
  22. package/dist/artifacts/editor/index.js.map +1 -0
  23. package/dist/artifacts/index.cjs +807 -0
  24. package/dist/artifacts/index.cjs.map +1 -0
  25. package/dist/artifacts/index.d.ts +8 -0
  26. package/dist/artifacts/index.js +787 -0
  27. package/dist/artifacts/index.js.map +1 -0
  28. package/dist/chat/index.cjs +54 -54
  29. package/dist/chat/index.js +2 -2
  30. package/dist/{chunk-XKKGGUU2.cjs → chunk-3MIQASHO.cjs} +4 -4
  31. package/dist/{chunk-XKKGGUU2.cjs.map → chunk-3MIQASHO.cjs.map} +1 -1
  32. package/dist/{chunk-B673CCW5.js → chunk-3PJCET7H.js} +3 -3
  33. package/dist/{chunk-B673CCW5.js.map → chunk-3PJCET7H.js.map} +1 -1
  34. package/dist/{chunk-VXOGANFJ.cjs → chunk-3PZPRAAR.cjs} +189 -34
  35. package/dist/chunk-3PZPRAAR.cjs.map +1 -0
  36. package/dist/{chunk-AAY5ASZD.js → chunk-5XTZFH65.js} +170 -28
  37. package/dist/chunk-5XTZFH65.js.map +1 -0
  38. package/dist/{chunk-JPO3F4J7.js → chunk-6YHWXMPQ.js} +3 -3
  39. package/dist/{chunk-JPO3F4J7.js.map → chunk-6YHWXMPQ.js.map} +1 -1
  40. package/dist/{chunk-TYZUCAT7.js → chunk-7YADKWZT.js} +43 -6
  41. package/dist/chunk-7YADKWZT.js.map +1 -0
  42. package/dist/{chunk-SYDHKKRZ.cjs → chunk-IZHWP6WQ.cjs} +47 -5
  43. package/dist/chunk-IZHWP6WQ.cjs.map +1 -0
  44. package/dist/{chunk-ZVPTFTGV.cjs → chunk-MVNCQDDE.cjs} +4 -4
  45. package/dist/{chunk-ZVPTFTGV.cjs.map → chunk-MVNCQDDE.cjs.map} +1 -1
  46. package/dist/{chunk-NJL4LIXX.js → chunk-NPKGUQU5.js} +4 -4
  47. package/dist/{chunk-NJL4LIXX.js.map → chunk-NPKGUQU5.js.map} +1 -1
  48. package/dist/{chunk-ATXPAD6S.cjs → chunk-YLOKCIQJ.cjs} +3 -3
  49. package/dist/{chunk-ATXPAD6S.cjs.map → chunk-YLOKCIQJ.cjs.map} +1 -1
  50. package/dist/collaboration/contacts/AddContactsParts.d.ts +9 -4
  51. package/dist/collaboration/contacts/index.d.ts +1 -0
  52. package/dist/collaboration/contacts/parseEmails.d.ts +26 -0
  53. package/dist/collaboration/index.cjs +51 -31
  54. package/dist/collaboration/index.js +1 -1
  55. package/dist/connect/index.cjs +18 -18
  56. package/dist/connect/index.js +4 -4
  57. package/dist/facts/index.cjs +1 -1
  58. package/dist/facts/index.js +1 -1
  59. package/dist/files/ViewerChrome.d.ts +0 -45
  60. package/dist/files/ViewerParts.d.ts +0 -19
  61. package/dist/files/index.cjs +4 -436
  62. package/dist/files/index.cjs.map +1 -1
  63. package/dist/files/index.d.ts +2 -4
  64. package/dist/files/index.js +8 -428
  65. package/dist/files/index.js.map +1 -1
  66. package/dist/home/index.cjs +19 -19
  67. package/dist/home/index.js +4 -4
  68. package/dist/index.cjs +411 -339
  69. package/dist/index.js +13 -13
  70. package/dist/settings/index.cjs +3 -3
  71. package/dist/settings/index.js +3 -3
  72. package/dist/shell/index.cjs +10 -10
  73. package/dist/shell/index.js +2 -2
  74. package/dist/site/index.cjs +5 -5
  75. package/dist/site/index.js +1 -1
  76. package/dist/studio/index.cjs +8 -8
  77. package/dist/studio/index.js +6 -6
  78. package/package.json +25 -4
  79. package/dist/chunk-AAY5ASZD.js.map +0 -1
  80. package/dist/chunk-SYDHKKRZ.cjs.map +0 -1
  81. package/dist/chunk-TYZUCAT7.js.map +0 -1
  82. package/dist/chunk-VXOGANFJ.cjs.map +0 -1
  83. /package/dist/{files → artifacts}/VersionTimeline.d.ts +0 -0
@@ -0,0 +1 @@
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/WorkflowLauncher.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/LiveRunsBanner.tsx","../src/agents/tasks/rrule.ts","../src/agents/tasks/RecurrenceBuilder.tsx","../src/agents/tasks/taskLabels.ts","../src/agents/tasks/TaskRowActions.tsx","../src/agents/tasks/taskColumns.tsx","../src/agents/tasks/TaskRunsDialog.tsx","../src/agents/tasks/TasksChrome.tsx","../src/agents/tasks/TaskComposer.tsx","../src/agents/tasks/taskRequest.ts","../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":["jsx","Input","Textarea","Switch","jsxs","prefixedTestId","cn","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Label","Fragment","useState","testIdOr","FoldSection","useRef","useCallback","useId","useMemo","useEffect","ScopePicker","Dialog","DialogContent","QuickActionDialogHeader","AddFilesFirst","Button","Loader2","Play","StartTiles","formatCount","goalProgress","ActionLink","Eye","ClipboardList","Pencil","Copy","Trash2","EmptyState","Bot","Sparkles","Plus","Wand2","DialogHeader","DialogTitle","DialogDescription","X","Globe","Tooltip","TooltipTrigger","TooltipContent","Download","Lock","LayoutGrid","List","ListChecks","Badge","Slider","minutes","Check","SkipForward","FileX","AlertTriangle","pad2","KeyRound","Pause","History","ListTodo","TabHeader","SelectionBar","SelectionBarAction","id","ModalHeader","value","useBlocksEnvironment","memo","Collapsible","CollapsibleTrigger","ChevronDown","ChevronRight","CollapsibleContent","ChevronUp","Activity","Hourglass","forwardRef","AgentBarIconButton","DropdownMenu","DropdownMenuTrigger","MoreVertical","DropdownMenuContent","DropdownMenuItem","TriangleAlert","CheckSquare","Square","CheckCircle2","ArrowLeft","MultiSelect"],"mappings":"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","file":"chunk-3PZPRAAR.cjs","sourcesContent":["/**\n * The one workflow model: a skill with a declared input schema. Everything launchable (a quick\n * action, a slash skill, a task body, an agent's job) is a `WorkflowDefinition`.\n *\n * The shape maps 1:1 onto future SKILL.md frontmatter (`inputs:` etc., snake_case on disk; see\n * `workflowFromFrontmatter`), so the backend can adopt it without a UI change. Blocks hold no\n * domain wording: titles, labels and prompt text are data supplied by the host.\n */\n\nexport type WorkflowFieldType =\n 'text' | '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 /** 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\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 seed = useMemo(\n () => ({ ...defaultInputs(workflow), ...JSON.parse(initialKey) }) as WorkflowInputs,\n [workflow, initialKey]\n )\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 { 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 { HTMLAttributes, ReactNode } from 'react'\nimport { ClipboardList, Copy, Eye, 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 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 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 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 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 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 {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, Input, 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: (id: string) => 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: 'Turn this into a goal task',\n emptyBody:\n 'The agent drafts an answer, grades it against an acceptance checklist, and keeps refining, in a single run, until every criterion is met.',\n drafting: 'Drafting plan…',\n generate: 'Generate plan',\n needWorkspace: 'Open a workspace to plan: the checklist is encrypted under its key.',\n needObjective: 'Write the prompt above first: it’s the objective the planner drafts from.',\n goalTask: 'Goal task',\n scopedTo: 'scoped to',\n redraft: 'Redraft',\n removePlan: 'Remove plan',\n goal: 'Goal',\n goalPlaceholder: 'What does “done” look like?',\n checklist: 'Acceptance checklist',\n criteriaCount: (count) => `${count} ${count === 1 ? 'criterion' : 'criteria'}`,\n add: 'Add',\n noCriteria: 'No criteria yet: add at least one thing the agent must satisfy.',\n criterionPlaceholder: 'A specific, checkable condition…',\n removeCriterion: (id) => `Remove criterion ${id}`,\n retryBudget: 'Retry budget',\n passes: (count) => `up to ${count} ${count === 1 ? 'pass' : 'passes'}`,\n passesHelp: 'How many self-grading rounds the agent may use before it stops.',\n workingDocuments: 'Working documents',\n workingDocumentsHelp: 'The planner narrowed the workspace 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 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 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 className=\"space-y-3 rounded-lg bg-muted p-6 text-center\" data-slot=\"task-plan-empty\">\n <ListChecks className=\"mx-auto size-8 text-muted-foreground\" />\n <div className=\"space-y-1\">\n <p className=\"font-medium\">{l.emptyTitle}</p>\n <p className=\"mx-auto max-w-md text-sm text-muted-foreground\">{l.emptyBody}</p>\n </div>\n <Button\n type=\"button\"\n onClick={onGenerate}\n disabled={!canGenerate}\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 {!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 )\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-2.5 w-6 shrink-0 select-none font-mono text-xs text-muted-foreground\">\n {c.id}\n </span>\n <Input\n value={c.text}\n onChange={(e) => setCriterion(idx, e.target.value)}\n placeholder={l.criterionPlaceholder}\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(c.id)}\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=\"font-mono text-xs\">\n {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","import type { HTMLAttributes } from 'react'\nimport { Eye, Loader2 } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface LiveRun {\n id: string\n name: string\n}\n\nexport interface LiveRunsBannerProps {\n runs: LiveRun[]\n /** Jump into a running task's conversation to watch it stream. */\n onWatch: (id: string) => void\n /** Test ids; `watchRun` derives one per run (default `task-watch-run-{id}`). */\n testIds?: Partial<{ root: string; watchRun: (id: string) => string }>\n labels?: Partial<LiveRunsBannerLabels>\n className?: string\n}\n\nexport interface LiveRunsBannerLabels {\n /** Count text, e.g. \"2 running\". */\n running: (count: number) => string\n /** Watch button text for a run. */\n watch: (name: string) => string\n}\n\nexport const DEFAULT_LIVE_RUNS_BANNER_LABELS: LiveRunsBannerLabels = {\n running: (count) => `${count} running`,\n watch: (name) => `Watch “${name}”`,\n}\n\n/** Strip of currently running tasks with a Watch action each. Renders nothing when idle. */\nexport function LiveRunsBanner({\n runs,\n onWatch,\n testIds,\n labels,\n className,\n ...rest\n}: LiveRunsBannerProps & Omit<HTMLAttributes<HTMLDivElement>, 'children'>) {\n if (runs.length === 0) return null\n const l = { ...DEFAULT_LIVE_RUNS_BANNER_LABELS, ...labels }\n return (\n <div\n {...rest}\n className={cn(\n 'my-2 flex flex-wrap items-center gap-2 rounded-lg bg-muted px-3 py-2',\n className\n )}\n data-testid={testIdOr(testIds?.root, { testId: 'tasks-running-banner' })}\n data-slot=\"live-runs-banner\"\n >\n <span className=\"flex items-center gap-1.5 pl-2 text-sm font-medium text-ai-ink\">\n <Loader2 className=\"size-3.5 animate-spin\" />\n {l.running(runs.length)}\n </span>\n {runs.map((run) => (\n <Button\n key={run.id}\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-ai-ink hover:text-ai-ink pointer-coarse:h-11\"\n onClick={() => onWatch(run.id)}\n data-testid={testIdOr(testIds?.watchRun?.(run.id), {\n testId: `task-watch-run-${run.id}`,\n })}\n >\n <Eye className=\"size-3.5\" /> {l.watch(run.name)}\n </Button>\n ))}\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: 'Recurrence rule (RRULE)',\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: 'Advanced (raw RRULE)',\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","export type TaskTriggerType = 'one_time' | 'recurring' | 'event'\nexport type TaskActionType = 'notify' | 'agent_prompt' | 'run_skill'\nexport type TaskStatusKey = 'active' | 'paused' | 'completed' | 'failed'\n\nexport const TRIGGER_LABELS: Record<TaskTriggerType, string> = {\n one_time: 'One-time',\n recurring: 'Recurring',\n event: 'Event',\n}\n\nexport const ACTION_LABELS: Record<TaskActionType, string> = {\n notify: 'Notify me',\n agent_prompt: 'Agent prompt',\n run_skill: 'Run skill',\n}\n\nexport const STATUS_LABELS: Record<TaskStatusKey, string> = {\n active: 'Active',\n paused: 'Paused',\n completed: 'Completed',\n failed: 'Failed',\n}\n\nexport type TaskBadgeVariant = 'default' | 'secondary' | 'destructive' | 'outline'\n\nexport function statusBadgeVariant(status: string): TaskBadgeVariant {\n switch (status) {\n case 'active':\n return 'default'\n case 'paused':\n return 'secondary'\n case 'failed':\n return 'destructive'\n case 'completed':\n default:\n return 'outline'\n }\n}\n\n/** The goal-state fields the grid 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 * isn't a goal task or hasn't run yet.\n */\nexport function goalProgress(task: {\n is_goal_task?: boolean | null\n goal_state?: unknown\n}): { met: number; total: number; done: boolean } | null {\n if (!task.is_goal_task) return 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 type { ReactNode } from 'react'\nimport { Eye, History, KeyRound, Pause, Pencil, Play, Trash2 } from 'lucide-react'\nimport { Button, Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskRowActionsLabels {\n grantAccess: string\n watch: string\n runNow: string\n pause: string\n resume: string\n history: string\n edit: string\n delete: string\n}\n\nexport const DEFAULT_TASK_ROW_ACTIONS_LABELS: TaskRowActionsLabels = {\n grantAccess: 'Allow access and continue',\n watch: 'Watch live',\n runNow: 'Run now',\n pause: 'Pause',\n resume: 'Resume',\n history: 'Run history',\n edit: 'Edit',\n delete: 'Delete',\n}\n\n/** Per-row test ids derived from the task id (defaults `task-run-{id}`, ...). */\nexport interface TaskRowActionsTestIds {\n grant: (id: string) => string\n watch: (id: string) => string\n run: (id: string) => string\n pause: (id: string) => string\n history: (id: string) => string\n edit: (id: string) => string\n delete: (id: string) => string\n}\n\nexport interface TaskRowActionsProps {\n /** Task id: keys the test ids (`task-run-{id}`, ...). */\n id: string\n /** active | paused | completed | failed. Pause/Resume is hidden once terminal. */\n status: string\n inProgress?: boolean\n /** Disables run/pause/delete while a mutation is in flight. */\n busy?: boolean\n /** When set (a run waits for access), a one-click \"allow access and continue\" appears. */\n onGrantAccess?: () => void\n /** When set (a run exposes its live conversation), a Watch action appears. */\n onWatch?: () => void\n onRunNow: () => void\n onTogglePause: () => void\n onEdit: () => void\n onDelete: () => void\n onViewHistory: () => void\n testIds?: Partial<TaskRowActionsTestIds>\n labels?: Partial<TaskRowActionsLabels>\n}\n\nconst BTN = 'size-7 pointer-coarse:size-11'\n\nfunction RowAction({\n label,\n children,\n testId,\n onClick,\n disabled,\n className,\n}: {\n label: string\n children: ReactNode\n testId: string\n onClick: () => void\n disabled?: boolean\n className?: string\n}) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(BTN, className)}\n disabled={disabled}\n onClick={onClick}\n aria-label={label}\n data-testid={testId}\n >\n {children}\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n )\n}\n\n/** Row actions for the Tasks grid: watch live, run now, pause/resume, history, edit, delete. */\nexport function TaskRowActions({\n id,\n status,\n inProgress = false,\n busy = false,\n onWatch,\n onGrantAccess,\n onRunNow,\n onTogglePause,\n onEdit,\n onDelete,\n onViewHistory,\n testIds,\n labels,\n}: TaskRowActionsProps) {\n const l = { ...DEFAULT_TASK_ROW_ACTIONS_LABELS, ...labels }\n // Event tasks have no clock schedule; pause/resume and run-now still apply.\n const isPaused = status === 'paused'\n const isTerminal = status === 'completed' || status === 'failed'\n return (\n <div className=\"flex h-full items-center gap-0.5\" data-slot=\"task-row-actions\">\n {onGrantAccess && (\n <RowAction\n label={l.grantAccess}\n testId={testIdOr(testIds?.grant?.(id), { testId: `task-grant-${id}` })}\n onClick={onGrantAccess}\n className=\"text-destructive hover:text-destructive\"\n >\n <KeyRound size={15} />\n </RowAction>\n )}\n {onWatch && (\n <RowAction\n label={l.watch}\n testId={testIdOr(testIds?.watch?.(id), { testId: `task-watch-${id}` })}\n onClick={onWatch}\n className=\"text-ai-ink hover:text-ai-ink\"\n >\n <Eye size={15} />\n </RowAction>\n )}\n <RowAction\n label={l.runNow}\n testId={testIdOr(testIds?.run?.(id), { testId: `task-run-${id}` })}\n onClick={onRunNow}\n disabled={busy || inProgress}\n >\n <Play size={15} />\n </RowAction>\n {!isTerminal && (\n <RowAction\n label={isPaused ? l.resume : l.pause}\n testId={testIdOr(testIds?.pause?.(id), { testId: `task-pause-${id}` })}\n onClick={onTogglePause}\n disabled={busy}\n >\n {isPaused ? <Play size={15} /> : <Pause size={15} />}\n </RowAction>\n )}\n <RowAction\n label={l.history}\n testId={testIdOr(testIds?.history?.(id), { testId: `task-history-${id}` })}\n onClick={onViewHistory}\n >\n <History size={15} />\n </RowAction>\n <RowAction\n label={l.edit}\n testId={testIdOr(testIds?.edit?.(id), { testId: `task-edit-${id}` })}\n onClick={onEdit}\n >\n <Pencil size={15} />\n </RowAction>\n <RowAction\n label={l.delete}\n testId={testIdOr(testIds?.delete?.(id), { testId: `task-delete-${id}` })}\n onClick={onDelete}\n disabled={busy}\n className=\"text-muted-foreground hover:text-destructive\"\n >\n <Trash2 size={15} />\n </RowAction>\n </div>\n )\n}\n","/**\n * Column definitions for the Tasks grid. Every column has an explicit `colId` (AG Grid persists\n * column state by id: see CLAUDE.md). The app supplies the row actions and formatters as slots.\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { Badge } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ActionLink } from '../../components/ActionLink'\nimport {\n ACTION_LABELS,\n STATUS_LABELS,\n TRIGGER_LABELS,\n goalProgress,\n statusBadgeVariant,\n type TaskActionType,\n type TaskStatusKey,\n type TaskTriggerType,\n} from './taskLabels'\n\n/** The fields of a task the grid reads. Callers' richer types are accepted as-is. */\nexport interface TaskRowView {\n external_id: string\n name: string\n trigger_type: string\n action_type: string\n skill_ref?: string | null\n is_goal_task?: boolean | null\n goal_state?: unknown\n workspace_ext_id?: string | null\n agent_ext_id?: string | null\n status: string\n in_progress?: boolean | null\n next_run_at?: string | null\n last_run_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}\n\n/** Fixed strings of the Tasks grid. */\nexport interface TaskColumnLabels {\n name: string\n trigger: string\n action: string\n target: string\n status: string\n nextRun: string\n lastRun: string\n untitled: string\n goal: string\n workspace: string\n defaultAgent: string\n running: string\n /** A run is waiting for the owner to allow access. */\n waitingForAccess: string\n never: string\n /** Goal progress, e.g. \"2/3 met\". */\n goalMet: (met: number, total: number) => string\n}\n\nexport const DEFAULT_TASK_COLUMN_LABELS: TaskColumnLabels = {\n name: 'Name',\n trigger: 'Trigger',\n action: 'Action',\n target: 'Target',\n status: 'Status',\n nextRun: 'Next run',\n lastRun: 'Last run',\n untitled: 'Untitled task',\n goal: 'Goal',\n workspace: 'Workspace',\n defaultAgent: 'Default agent',\n running: 'Running…',\n waitingForAccess: 'Waiting for access',\n never: 'Never',\n goalMet: (met, total) => `${met}/${total} met`,\n}\n\n/** Per-task test ids derived from the task id (defaults `task-name-{id}`, ...). */\nexport interface TaskColumnTestIds {\n name: (id: string) => string\n goalBadge: (id: string) => string\n goalProgress: (id: string) => string\n error: (id: string) => string\n}\n\nexport interface TaskColumnSlots<T extends TaskRowView> {\n /** Human summary of when the task fires. */\n describeTrigger: (task: T) => string\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** The row actions cell (`TaskRowActions` bound to the app's mutations). */\n renderActions: (task: T) => ReactNode\n /** Destination of a task's name; makes it a real link (modified clicks go to the browser). */\n getHref?: (task: T) => string | undefined\n /** Plain click on the linked name (owns navigation); without `getHref` the name is plain text. */\n onOpen?: (task: T) => void\n testIds?: Partial<TaskColumnTestIds>\n labels?: Partial<TaskColumnLabels>\n}\n\nexport function createTaskColumns<T extends TaskRowView>(slots: TaskColumnSlots<T>): ColDef<T>[] {\n const l = { ...DEFAULT_TASK_COLUMN_LABELS, ...slots.labels }\n const { testIds } = slots\n return [\n {\n colId: 'name',\n headerName: l.name,\n field: 'name' as ColDef<T>['field'],\n flex: 1.4,\n minWidth: 160,\n sortable: true,\n cellRenderer: (params: ICellRendererParams<T>) => {\n const task = params.data\n const testId = testIdOr(testIds?.name?.(String(task?.external_id)), {\n testId: `task-name-${task?.external_id}`,\n })\n const text = task?.name || l.untitled\n const href = task ? slots.getHref?.(task) : undefined\n if (task && href) {\n return (\n <ActionLink\n href={href}\n onSelect={slots.onOpen ? () => slots.onOpen?.(task) : undefined}\n className=\"font-medium hover:underline\"\n data-testid={testId}\n >\n {text}\n </ActionLink>\n )\n }\n return (\n <span className=\"font-medium\" data-testid={testId}>\n {text}\n </span>\n )\n },\n },\n {\n colId: 'trigger',\n headerName: l.trigger,\n flex: 1.4,\n minWidth: 180,\n sortable: true,\n valueGetter: (p) => (p.data ? slots.describeTrigger(p.data) : ''),\n cellRenderer: (params: ICellRendererParams<T>) => {\n const task = params.data\n if (!task) return null\n return (\n <div className=\"flex h-full items-center gap-2\">\n <Badge variant=\"secondary\">\n {TRIGGER_LABELS[task.trigger_type as TaskTriggerType] ?? task.trigger_type}\n </Badge>\n <span className=\"truncate text-muted-foreground\">{slots.describeTrigger(task)}</span>\n </div>\n )\n },\n },\n {\n colId: 'action',\n headerName: l.action,\n width: 190, // room for the action badge + the \"Goal\" badge alongside it\n sortable: true,\n valueGetter: (p) =>\n p.data ? (ACTION_LABELS[p.data.action_type as TaskActionType] ?? p.data.action_type) : '',\n cellRenderer: (params: ICellRendererParams<T>) => {\n const task = params.data\n if (!task) return null\n const label = ACTION_LABELS[task.action_type as TaskActionType] ?? task.action_type\n const detail = task.action_type === 'run_skill' ? task.skill_ref : null\n return (\n <div className=\"flex h-full items-center gap-2\">\n <Badge variant=\"outline\">{label}</Badge>\n {task.is_goal_task && (\n <Badge\n variant=\"default\"\n data-testid={testIdOr(testIds?.goalBadge?.(task.external_id), {\n testId: `task-goal-badge-${task.external_id}`,\n })}\n >\n {l.goal}\n </Badge>\n )}\n {detail && <span className=\"truncate text-muted-foreground\">/{detail}</span>}\n </div>\n )\n },\n },\n {\n colId: 'target',\n headerName: l.target,\n flex: 1,\n minWidth: 130,\n valueGetter: (p) => p.data?.workspace_ext_id ?? '',\n cellRenderer: (params: ICellRendererParams<T>) => {\n const task = params.data\n if (!task) return null\n if (!task.workspace_ext_id && !task.agent_ext_id) {\n return <span className=\"text-muted-foreground\">—</span>\n }\n return (\n <span className=\"truncate text-muted-foreground\">\n {task.workspace_ext_id ? l.workspace : l.defaultAgent}\n </span>\n )\n },\n },\n {\n colId: 'status',\n headerName: l.status,\n width: 130,\n sortable: true,\n valueGetter: (p) => p.data?.status ?? '',\n cellRenderer: (params: ICellRendererParams<T>) => {\n const task = params.data\n if (!task) return null\n if (task.pending_auth_request_id) {\n return (\n <Badge variant=\"destructive\" data-testid={`task-pending-auth-${task.external_id}`}>\n {l.waitingForAccess}\n </Badge>\n )\n }\n if (task.in_progress) return <Badge variant=\"secondary\">{l.running}</Badge>\n // For a goal task that has run, show how much of its checklist was met.\n const goal = goalProgress(task)\n if (goal) {\n return (\n <Badge\n variant={goal.done ? 'default' : 'secondary'}\n data-testid={testIdOr(testIds?.goalProgress?.(task.external_id), {\n testId: `task-goal-progress-${task.external_id}`,\n })}\n >\n {goal.done ? '✓ ' : ''}\n {l.goalMet(goal.met, goal.total)}\n </Badge>\n )\n }\n return (\n <Badge variant={statusBadgeVariant(task.status)}>\n {STATUS_LABELS[task.status as TaskStatusKey] ?? task.status}\n </Badge>\n )\n },\n },\n {\n colId: 'next_run_at',\n headerName: l.nextRun,\n width: 160,\n sortable: true,\n valueGetter: (p) => p.data?.next_run_at ?? '',\n cellRenderer: (params: ICellRendererParams<T>) => {\n const next = params.data?.next_run_at\n return <span className=\"text-muted-foreground\">{next ? slots.formatDate(next) : '—'}</span>\n },\n },\n {\n colId: 'last_run',\n headerName: l.lastRun,\n width: 170,\n sortable: true,\n valueGetter: (p) => p.data?.last_run_at ?? '',\n cellRenderer: (params: ICellRendererParams<T>) => {\n const task = params.data\n if (!task) return null\n if (!task.last_run_at) return <span className=\"text-muted-foreground\">{l.never}</span>\n return (\n <div className=\"flex h-full items-center gap-1.5\">\n {task.last_error && (\n <span\n className=\"size-2 shrink-0 rounded-full bg-destructive\"\n title={task.last_error}\n data-testid={testIdOr(testIds?.error?.(task.external_id), {\n testId: `task-error-${task.external_id}`,\n })}\n />\n )}\n <span className=\"truncate text-muted-foreground\">\n {slots.formatDate(task.last_run_at)}\n </span>\n </div>\n )\n },\n },\n {\n colId: 'actions',\n headerName: '',\n width: 172,\n sortable: false,\n filter: false,\n resizable: false,\n cellRenderer: (params: ICellRendererParams<T>) =>\n params.data ? slots.renderActions(params.data) : null,\n },\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 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 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 {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, Trash2 } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { TabHeader, type Tab } from '../../shell/TabHeader'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\n\n/** Fixed strings of the Tasks page chrome. */\nexport interface TasksChromeLabels {\n tasksTab: string\n newTask: string\n delete: string\n}\n\nexport const DEFAULT_TASKS_CHROME_LABELS: TasksChromeLabels = {\n tasksTab: 'Tasks',\n newTask: 'New task',\n delete: 'Delete',\n}\n\nexport interface TasksToolbarProps {\n /** Number of tasks (shown on the single \"Tasks\" tab). */\n count: number\n onNewTask: () => void\n /** The list is empty: its empty state carries the one filled button, so this one goes tonal. */\n isEmpty?: boolean\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, isEmpty, 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 variant={isEmpty ? 'secondary' : 'default'}\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/** Empty-state action for the Tasks grid. */\nexport function NewTaskEmptyAction({\n onNewTask,\n testId,\n labels,\n}: {\n onNewTask: () => void\n testId?: string\n labels?: Partial<TasksChromeLabels>\n}) {\n const l = { ...DEFAULT_TASKS_CHROME_LABELS, ...labels }\n return (\n <Button onClick={onNewTask} data-testid={testIdOr(testId, { testId: 'task-new-empty' })}>\n <Plus size={16} className=\"mr-1.5\" />\n {l.newTask}\n </Button>\n )\n}\n\nexport interface TasksBulkBarProps {\n count: number\n onClear: () => void\n onDelete: () => void\n testId?: string\n labels?: Partial<TasksChromeLabels>\n}\n\n/** Bulk bar for selected tasks (Delete). */\nexport function TasksBulkBar({ count, onClear, onDelete, testId, labels }: TasksBulkBarProps) {\n const l = { ...DEFAULT_TASKS_CHROME_LABELS, ...labels }\n return (\n <SelectionBar count={count} onClear={onClear}>\n {(isCompact) => (\n <SelectionBarAction\n icon={Trash2}\n label={l.delete}\n onClick={onDelete}\n disabled={count === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId={testIdOr(testId, { testId: 'task-bulk-delete' })}\n />\n )}\n </SelectionBar>\n )\n}\n","import { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport { Loader2 } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { FoldSection } from '../../home/FoldSection'\nimport { ModalHeader } from '../../settings/ModalScaffold'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AgentSelect, type AgentOption, type AgentSelectLabels } from '../workflows/AgentSelect'\nimport { SchemaForm, type SchemaFormLabels } from '../workflows/SchemaForm'\nimport type { WorkflowDefinition, WorkflowInputs, WorkflowInputValue } from '../workflows/types'\nimport { defaultInputs, validateInputs } from '../workflows/workflow'\nimport { RecurrenceBuilder, type RecurrenceBuilderProps } from './RecurrenceBuilder'\n\n/** When the task runs. `now` is on demand; the rest are scheduled. */\nexport type TaskWhen = 'now' | 'once' | 'repeat' | 'event'\n\nexport type TaskAccessMode = 'ask_each_run' | 'standing'\n\n/** Everything the composer collects. The host maps it onto its API. */\nexport interface TaskComposerValues {\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 /** `''` = the user's own assistant. */\n agentId: string\n /** Empty = derived from the workflow title by the host. */\n name: string\n notifyOnComplete: boolean\n /** Draft the plan first and let the user approve it before anything is created. */\n reviewPlan: boolean\n /** Only asked for scheduled tasks, folded under More options. */\n access: TaskAccessMode\n}\n\nexport interface TaskComposerLabels {\n titleNew: string\n titleEdit: string\n description: string\n what: string\n whatHint: string\n whatPlaceholder: string\n when: string\n whenOptions: Record<TaskWhen, string>\n runAt: string\n event: string\n eventPlaceholder: string\n eventHint: ReactNode\n who: string\n more: string\n goalAndPlan: string\n reviewPlan: string\n reviewPlanHint: string\n outputs: string\n outputChat: string\n outputChatHint: string\n outputArtifacts: string\n outputFileMetadata: string\n tools: string\n toolsFromAgent: string\n notSupportedYet: string\n name: string\n namePlaceholder: string\n timezone: string\n notify: string\n notifyHint: string\n access: string\n accessOptions: Record<TaskAccessMode, { label: string; hint: string }>\n accessNow: string\n lockedAfterCreation: string\n cancel: string\n runNow: string\n schedule: 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: 'Pick what should happen, when, and who does it.',\n what: 'What should happen?',\n whatHint: 'Pick something to start, or write your own instruction.',\n whatPlaceholder: 'Choose…',\n when: 'When?',\n whenOptions: {\n now: 'Now',\n once: 'Later',\n repeat: 'Repeat',\n event: 'When something happens',\n },\n runAt: 'Run at',\n event: 'Event',\n eventPlaceholder: 'user_message',\n eventHint: 'The task starts whenever this kind of notification reaches you.',\n who: 'Who does it?',\n more: 'More options',\n goalAndPlan: 'Goal and plan',\n reviewPlan: 'Show me the plan first',\n reviewPlanHint: 'The first press drafts the plan for you to edit; approve it to go ahead.',\n outputs: 'Where results go',\n outputChat: 'Chat',\n outputChatHint: 'Every run keeps its own conversation you can open.',\n outputArtifacts: 'Save results as documents',\n outputFileMetadata: 'Update labels and fields on files',\n tools: 'Tools this run may use',\n toolsFromAgent:\n 'Tools are the switches on the agent (web search, running code and so on), and skills are the instructions it may follow. Both come from the agent itself; choosing them for one task is not available yet.',\n notSupportedYet: 'Not available yet',\n name: 'Name',\n namePlaceholder: 'Taken from what should happen',\n timezone: 'Timezone',\n notify: 'Tell me when it finishes',\n notifyHint: 'Send a notification once the run completes.',\n access: 'Who can access what',\n accessOptions: {\n ask_each_run: {\n label: 'Ask me when it needs access (recommended)',\n hint: 'The run waits until you allow access, with one click from the task list. Nothing is stored.',\n },\n standing: {\n label: 'Always allowed (agent has its own identity) - advanced',\n hint: 'The agent is a member of the workspace with its own key, so runs work while you are away. Only for agents whose environment you trust.',\n },\n },\n accessNow: 'Run now: you are here, so access is temporary and ends with this run.',\n lockedAfterCreation: 'Fixed once the task exists.',\n cancel: 'Cancel',\n runNow: 'Run now',\n schedule: 'Schedule',\n save: 'Save changes',\n saving: 'Saving…',\n}\n\nexport interface TaskComposerProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Editing an existing task: the schedule kind and the agent are fixed. */\n isEdit?: boolean\n /** Workflows a task can run. The host includes its \"my own instruction\" entry. */\n workflows: WorkflowDefinition[]\n agents: AgentOption[]\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 goal and success-criteria editor, in its own folded section. Omit when not applicable. */\n goal?: ReactNode | ((values: TaskComposerValues) => ReactNode)\n /** What \"always allowed\" means for this agent (e.g. the workspaces it will hold standing access to). */\n standingAccess?: ReactNode | ((values: TaskComposerValues) => ReactNode)\n /** Offer the \"show me the plan first\" switch (needs a host that can draft a plan). */\n canReviewPlan?: boolean\n isPending?: boolean\n onSubmit: (values: TaskComposerValues) => void\n /** The task'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 agentLabels?: Partial<AgentSelectLabels>\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 workflowId,\n inputs: workflow ? { ...defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },\n when: 'now',\n runAt: '',\n rrule: '',\n timezone: 'UTC',\n eventKind: 'user_message',\n agentId: '',\n name: '',\n notifyOnComplete: false,\n reviewPlan: false,\n access: 'ask_each_run',\n ...initial,\n }\n}\n\nconst WHEN_ORDER: TaskWhen[] = ['now', 'once', 'repeat', 'event']\n\n/**\n * One dialog to create or schedule a task: pick a workflow, fill its form, say when, say who.\n * Name, notification, access mode and the goal checklist live folded under More options.\n */\nexport function TaskComposer({\n open,\n onOpenChange,\n isEdit = false,\n workflows,\n agents,\n values: valuesProp,\n initialValues,\n onValuesChange,\n timezones = [],\n goal,\n canReviewPlan = false,\n standingAccess,\n isPending,\n onSubmit,\n renderIcon,\n labels,\n formLabels,\n agentLabels,\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 [moreOpen, setMoreOpen] = useState(false)\n const [goalOpen, setGoalOpen] = useState(false)\n // Each open starts from the seed again (uncontrolled only).\n useEffect(() => {\n if (open && valuesProp === undefined) {\n setValues(seed)\n setMoreOpen(false)\n setGoalOpen(false)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const workflow = workflows.find((w) => w.id === values.workflowId)\n // Tasks run unattended: file scoping is a chat-launch concern, so scope fields are not asked.\n const fields = (workflow?.inputs ?? []).filter((f) => f.type !== 'scope')\n const errors = workflow ? validateInputs({ ...workflow, inputs: fields }, values.inputs) : {}\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 whenError =\n (values.when === 'once' && !values.runAt) ||\n (values.when === 'repeat' && !values.rrule.trim()) ||\n (values.when === 'event' && !values.eventKind.trim())\n const canSubmit =\n Boolean(workflow) && Object.keys(errors).length === 0 && !whenError && !isPending\n const scheduled = values.when !== 'now'\n const goalNode = typeof goal === 'function' ? goal(values) : goal\n\n const id = testIdOr(testId, { testId: 'task-composer' })\n const submitText = isPending ? l.saving : isEdit ? l.save : scheduled ? l.schedule : l.runNow\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) onSubmit(values)\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-5 overflow-y-auto px-6 pb-4\">\n {/* 1. What */}\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-what\">{l.what}</Label>\n <p className=\"text-xs text-muted-foreground\">{l.whatHint}</p>\n <Select value={values.workflowId} onValueChange={pickWorkflow}>\n <SelectTrigger\n id=\"task-composer-what\"\n data-testid={`${id}-workflow`}\n className=\"pointer-coarse:min-h-11\"\n >\n <SelectValue placeholder={l.whatPlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {workflows.map((w) => (\n <SelectItem\n key={w.id}\n value={w.id}\n data-testid={`${id}-workflow-option-${w.id}`}\n >\n {w.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {workflow?.description && (\n <p className=\"text-xs text-muted-foreground\">{workflow.description}</p>\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 renderIcon={renderIcon}\n labels={formLabels}\n testIdPrefix={`${id}-field`}\n />\n )}\n\n {/* 2. When */}\n <div className=\"flex flex-col gap-2\">\n <Label>{l.when}</Label>\n <div\n role=\"radiogroup\"\n aria-label={l.when}\n className=\"grid grid-cols-2 gap-1.5 sm:grid-cols-4\"\n >\n {WHEN_ORDER.map((mode) => {\n const selected = values.when === mode\n // The schedule kind is fixed once created (the backend cannot change it).\n const locked = isEdit && !selected\n return (\n <button\n key={mode}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={locked}\n data-testid={`${id}-when-${mode}`}\n onClick={() => set('when', mode)}\n className={cn(\n 'rounded-md border px-2 py-2 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40 pointer-coarse:min-h-11',\n selected\n ? 'border-primary bg-primary/10 font-medium text-primary'\n : 'border-border [&:hover:not(:disabled)]:bg-accent'\n )}\n >\n {l.whenOptions[mode]}\n </button>\n )\n })}\n </div>\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 data-testid={`${id}-run-at`}\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 data-testid={`${id}-event`}\n />\n <p className=\"text-xs text-muted-foreground\">{l.eventHint}</p>\n </div>\n )}\n </div>\n\n {/* Who can access what: shown right under When, never folded away. */}\n <div\n className=\"flex flex-col gap-1.5 rounded-lg bg-muted p-3\"\n data-testid={`${id}-access-block`}\n >\n <Label>{l.access}</Label>\n {scheduled ? (\n <>\n <Select\n value={values.access}\n onValueChange={(v) => set('access', v as TaskAccessMode)}\n >\n <SelectTrigger data-testid={`${id}-access`} className=\"pointer-coarse:min-h-11\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {(Object.keys(l.accessOptions) as TaskAccessMode[]).map((mode) => (\n <SelectItem key={mode} value={mode}>\n {l.accessOptions[mode].label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <p className=\"text-xs text-muted-foreground\">\n {l.accessOptions[values.access].hint}\n </p>\n {values.access === 'standing' &&\n (typeof standingAccess === 'function'\n ? standingAccess(values)\n : standingAccess)}\n </>\n ) : (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-access-now`}>\n {l.accessNow}\n </p>\n )}\n </div>\n\n {/* 3. Who */}\n <AgentSelect\n agents={agents}\n value={values.agentId}\n onValueChange={(agentId) => set('agentId', agentId)}\n disabled={isEdit}\n labels={{ label: l.who, ...agentLabels }}\n testId={`${id}-agent`}\n />\n {isEdit && (\n <p className=\"-mt-3 text-xs text-muted-foreground\">{l.lockedAfterCreation}</p>\n )}\n\n {/* 4. Goal and plan, folded */}\n {goalNode != null && (\n <FoldSection\n label={l.goalAndPlan}\n open={goalOpen}\n onOpenChange={setGoalOpen}\n testId={`${id}-goal-toggle`}\n >\n <div className=\"flex flex-col gap-4\">\n {canReviewPlan && (\n <div className=\"flex items-start justify-between gap-3 pointer-coarse:min-h-11\">\n <div>\n <Label htmlFor=\"task-composer-review-plan\">{l.reviewPlan}</Label>\n <p className=\"mt-1 text-xs text-muted-foreground\">{l.reviewPlanHint}</p>\n </div>\n <Switch\n id=\"task-composer-review-plan\"\n checked={values.reviewPlan}\n onCheckedChange={(v) => set('reviewPlan', v)}\n data-testid={`${id}-review-plan`}\n />\n </div>\n )}\n {goalNode}\n </div>\n </FoldSection>\n )}\n\n {/* 5. Everything else, folded */}\n <FoldSection\n label={l.more}\n open={moreOpen}\n onOpenChange={setMoreOpen}\n testId={`${id}-more-toggle`}\n >\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-name\">{l.name}</Label>\n <Input\n id=\"task-composer-name\"\n value={values.name}\n placeholder={workflow ? `${workflow.title}` : l.namePlaceholder}\n onChange={(e) => set('name', e.target.value)}\n data-testid={`${id}-name`}\n />\n </div>\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-outputs`}>\n <Label>{l.outputs}</Label>\n <div className=\"flex items-start justify-between gap-3 pointer-coarse:min-h-11\">\n <div>\n <span className=\"text-sm\">{l.outputChat}</span>\n <p className=\"text-xs text-muted-foreground\">{l.outputChatHint}</p>\n </div>\n <Switch checked disabled aria-label={l.outputChat} />\n </div>\n <div className=\"flex items-start justify-between gap-3 pointer-coarse:min-h-11\">\n <div>\n <Label htmlFor=\"task-composer-notify\" className=\"font-normal\">\n {l.notify}\n </Label>\n <p className=\"text-xs text-muted-foreground\">{l.notifyHint}</p>\n </div>\n <Switch\n id=\"task-composer-notify\"\n checked={values.notifyOnComplete}\n onCheckedChange={(v) => set('notifyOnComplete', v)}\n data-testid={`${id}-notify`}\n />\n </div>\n {[l.outputArtifacts, l.outputFileMetadata].map((label) => (\n <div\n key={label}\n className=\"flex items-start justify-between gap-3 opacity-60 pointer-coarse:min-h-11\"\n data-testid={`${id}-output-unsupported`}\n >\n <div>\n <span className=\"text-sm\">{label}</span>\n <p className=\"text-xs text-muted-foreground\">{l.notSupportedYet}</p>\n </div>\n <Switch checked={false} disabled aria-label={label} />\n </div>\n ))}\n </div>\n <div className=\"flex flex-col gap-1\" data-testid={`${id}-tools`}>\n <Label>{l.tools}</Label>\n <p className=\"text-xs text-muted-foreground\">{l.toolsFromAgent}</p>\n </div>\n {scheduled && values.when === 'repeat' && timezones.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-timezone\">{l.timezone}</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 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 </FoldSection>\n </div>\n\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border px-6 py-4\">\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 * 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 `useCreateTask` / `useUpdateTask` from\n * `@arbidocs/react`.\n */\nimport type { components } from '@arbidocs/client'\nimport { composeWorkflowPrompt } from '../workflows/workflow'\nimport type { WorkflowDefinition, WorkflowInputs } from '../workflows/types'\nimport type { TaskComposerValues, TaskWhen } from './TaskComposer'\n\ntype CreateTaskRequest = components['schemas']['CreateTaskRequest']\ntype UpdateTaskRequest = components['schemas']['UpdateTaskRequest']\ntype TaskResponse = components['schemas']['TaskResponse']\n\nexport type TaskAuthMode = NonNullable<CreateTaskRequest['auth_mode']>\nexport type TaskActionKind = NonNullable<CreateTaskRequest['action_type']>\n\nconst TRIGGER_FOR: Record<TaskWhen, NonNullable<CreateTaskRequest['trigger_type']>> = {\n now: 'one_time',\n once: 'one_time',\n repeat: 'recurring',\n event: 'event',\n}\n\n/**\n * The plain-language access choice becomes the backend authorisation tier: a run-now task is\n * authorised for that one run, a scheduled one either keeps standing access or asks each run.\n */\nexport function authModeFor(values: Pick<TaskComposerValues, 'when' | 'access'>): TaskAuthMode {\n if (values.when === 'now') 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 name: string\n action_type: TaskActionKind\n prompt: string\n skill_ref: string | null\n}\n\n/**\n * How a workflow becomes the body of a task:\n * - `options.agent === false` is a reminder (`notify`): the composed text is the notification;\n * - a workflow 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.\n */\nexport function workflowTaskFields(\n workflow: WorkflowDefinition,\n inputs: WorkflowInputs,\n name?: string\n): WorkflowTaskFields {\n const typed = name?.trim()\n if (workflow.options?.agent === false) {\n const message = composeWorkflowPrompt(workflow, inputs)\n return { name: typed || message, action_type: 'notify', prompt: '', skill_ref: null }\n }\n if (workflow.skill) {\n return {\n name: typed || workflow.title,\n action_type: 'run_skill',\n prompt: typeof inputs.args === 'string' ? inputs.args.trim() : '',\n skill_ref: workflow.skill,\n }\n }\n return {\n name: typed || workflow.title,\n action_type: 'agent_prompt',\n prompt: composeWorkflowPrompt(workflow, inputs),\n skill_ref: 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 workflow: WorkflowDefinition\n values: TaskComposerValues\n}\n\n/**\n * The create request for a composer submission. An agent task is bound to `workspaceId` (throws\n * when there is none); a reminder is not. A run-now task is a one-time task due immediately: the\n * host starts it explicitly with `useRunTask` after creating it.\n */\nexport function taskComposerToCreateRequest(\n { workflow, values }: TaskRequestContext,\n workspaceId: string | undefined\n): CreateTaskRequest {\n const fields = workflowTaskFields(workflow, values.inputs, values.name)\n const agentic = isAgenticWorkflow(workflow)\n if (agentic && !workspaceId) throw new Error('Open a workspace to run an agent task.')\n return {\n name: fields.name,\n trigger_type: TRIGGER_FOR[values.when],\n timezone: values.timezone,\n action_type: fields.action_type,\n prompt: fields.prompt,\n rrule: values.when === 'repeat' ? values.rrule.trim() : null,\n run_at:\n values.when === 'once'\n ? localInputToIso(values.runAt)\n : values.when === 'now'\n ? new Date().toISOString()\n : null,\n event_kind: values.when === 'event' ? values.eventKind.trim() : null,\n skill_ref: fields.skill_ref,\n notify_on_complete: values.notifyOnComplete,\n auth_mode: authModeFor(values),\n workspace_ext_id: agentic ? (workspaceId ?? null) : null,\n agent_ext_id: values.agentId || null,\n }\n}\n\n/** The patch for editing a task (the trigger kind, workspace and agent stay as created). */\nexport function taskComposerToUpdateRequest({\n workflow,\n values,\n}: TaskRequestContext): UpdateTaskRequest {\n const fields = workflowTaskFields(workflow, values.inputs, values.name)\n return {\n name: fields.name,\n rrule: values.when === 'repeat' ? values.rrule.trim() : null,\n run_at: values.when === 'once' && values.runAt ? localInputToIso(values.runAt) : null,\n timezone: values.timezone,\n prompt: fields.prompt,\n skill_ref: fields.skill_ref,\n notify_on_complete: values.notifyOnComplete,\n auth_mode: authModeFor(values),\n }\n}\n\n/** Does the task need the owner to authorise workspace access before it can run? */\nexport const taskNeedsAccess = (task: Pick<TaskResponse, 'pending_auth_request_id'>): boolean =>\n !!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}\n\n/** What an existing task looks like when reopened in the composer. */\nexport function taskToComposerValues(\n task: TaskResponse,\n workflows: TaskValuesWorkflows\n): Partial<TaskComposerValues> {\n const reminder = task.action_type === 'notify'\n const auth = task.auth_mode ?? 'scheduled_permanent'\n const when: TaskWhen =\n auth === 'run_now_temp'\n ? 'now'\n : task.trigger_type === 'recurring'\n ? 'repeat'\n : task.trigger_type === 'event'\n ? 'event'\n : 'once'\n return {\n workflowId: reminder ? workflows.reminderWorkflowId : workflows.customWorkflowId,\n inputs: reminder ? { message: task.name } : { instruction: task.prompt },\n when,\n runAt: isoToLocalInput(task.run_at),\n rrule: task.rrule ?? '',\n timezone: task.timezone,\n eventKind: task.event_kind ?? 'user_message',\n agentId: task.agent_ext_id ?? '',\n name: task.name,\n notifyOnComplete: task.notify_on_complete ?? false,\n access: auth === 'scheduled_permanent' ? 'standing' : 'ask_each_run',\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-green-500/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-green-500/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 className=\"flex shrink-0 items-center gap-0.5 rounded px-1.5 py-0.5 text-sm font-medium text-primary transition-colors hover:bg-muted/60 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:min-h-11\"\n data-testid={`running-subagent-open-thread-${lane.handle}`}\n >\n {l.openThread}\n <ChevronRight size={12} />\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"]}