@aphrody/m3-ai 3.3.2 → 3.3.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 (56) hide show
  1. package/README.md +29 -7
  2. package/dist/A2APeerInspector.d.ts +41 -0
  3. package/dist/A2APeerInspector.d.ts.map +1 -0
  4. package/dist/A2ATaskTimeline.d.ts +28 -0
  5. package/dist/A2ATaskTimeline.d.ts.map +1 -0
  6. package/dist/AgUiEventStream.d.ts +87 -0
  7. package/dist/AgUiEventStream.d.ts.map +1 -0
  8. package/dist/GeminiAccountMenu.d.ts +55 -0
  9. package/dist/GeminiAccountMenu.d.ts.map +1 -0
  10. package/dist/GeminiPersonalContextEdit.d.ts +29 -0
  11. package/dist/GeminiPersonalContextEdit.d.ts.map +1 -0
  12. package/dist/GoogleSpotlightBar.d.ts +32 -0
  13. package/dist/GoogleSpotlightBar.d.ts.map +1 -0
  14. package/dist/Markdown.d.ts +2 -1
  15. package/dist/Markdown.d.ts.map +1 -1
  16. package/dist/McpAppCard.d.ts +24 -0
  17. package/dist/McpAppCard.d.ts.map +1 -0
  18. package/dist/ModelSelector.d.ts.map +1 -1
  19. package/dist/TaskRow.d.ts.map +1 -1
  20. package/dist/ToolCall.d.ts.map +1 -1
  21. package/dist/index.d.ts +15 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +3629 -1950
  24. package/dist/index.js.map +32 -1
  25. package/package.json +17 -20
  26. package/src/A2APeerInspector.tsx +370 -0
  27. package/src/A2ATaskTimeline.tsx +218 -0
  28. package/src/AgUiEventStream.ts +492 -0
  29. package/src/ChatComposer.tsx +261 -0
  30. package/src/ConversationList.tsx +207 -0
  31. package/src/GeminiAccountMenu.tsx +212 -0
  32. package/src/GeminiPersonalContextEdit.tsx +147 -0
  33. package/src/GoogleSpotlightBar.tsx +165 -0
  34. package/src/InlineBranchCard.tsx +97 -0
  35. package/src/InlineWorkerCard.tsx +182 -0
  36. package/src/Markdown.tsx +769 -0
  37. package/src/McpAppCard.tsx +161 -0
  38. package/src/MemoryPanel.tsx +176 -0
  39. package/src/MessageBubble.tsx +143 -0
  40. package/src/ModelSelector.tsx +319 -0
  41. package/src/ModelUnavailable.tsx +116 -0
  42. package/src/TaskCreateForm.tsx +123 -0
  43. package/src/TaskDetail.tsx +224 -0
  44. package/src/TaskList.tsx +136 -0
  45. package/src/TaskPriorityIcon.tsx +39 -0
  46. package/src/TaskRow.tsx +177 -0
  47. package/src/TaskStatusIcon.tsx +39 -0
  48. package/src/ToolCall.tsx +644 -0
  49. package/src/chatIcons.tsx +105 -0
  50. package/src/chatLabels.ts +243 -0
  51. package/src/citations.tsx +286 -0
  52. package/src/index.ts +173 -0
  53. package/src/internal.tsx +107 -0
  54. package/src/openaiChatStream.ts +400 -0
  55. package/src/types.ts +212 -0
  56. package/src/useOpenAIChat.ts +126 -0
package/dist/index.js.map CHANGED
@@ -1 +1,32 @@
1
- {"version":3,"sources":["../src/types.ts","../src/internal.tsx","../src/ToolCall.tsx","../src/Markdown.tsx","../src/MessageBubble.tsx","../src/InlineWorkerCard.tsx","../src/InlineBranchCard.tsx","../src/ModelSelector.tsx","../src/ChatComposer.tsx","../src/TaskStatusIcon.tsx","../src/TaskPriorityIcon.tsx","../src/TaskRow.tsx","../src/TaskList.tsx","../src/TaskDetail.tsx","../src/TaskCreateForm.tsx"],"names":["jsx","jsxs","clsx","useState","Icon","useId","AnimatePresence","motion","useRef","useEffect","forwardRef","useMemo","m3Durations","m3Easings","Popover","SelectPill","CircleButton","config","Fragment","Button","Select","SelectOption"],"mappings":"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","file":"index.js","sourcesContent":["// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/types.ts), MIT.\n\n// Tool execution types\nexport type ToolCallStatus = \"running\" | \"completed\" | \"error\";\n\nexport interface ToolCallPair {\n id: string;\n name: string;\n argsRaw: string;\n args: Record<string, unknown> | null;\n resultRaw: string | null;\n result: Record<string, unknown> | null;\n status: ToolCallStatus;\n /** Human-readable summary provided by live opencode parts */\n title?: string | null;\n}\n\n// Transcript step types — discriminated union matching the real API schema\n\nexport type ActionContent =\n | { type: \"text\"; text: string }\n | { type: \"tool_call\"; id: string; name: string; args: string };\n\nexport type TranscriptStep =\n | { type: \"action\"; content: ActionContent[] }\n | { type: \"user_text\"; text: string }\n | { type: \"system_text\"; text: string }\n | { type: \"tool_result\"; call_id: string; name: string; text: string };\n\n// Paired transcript item for rendering\n\nexport type TranscriptItem = { kind: \"text\"; text: string } | { kind: \"tool\"; pair: ToolCallPair };\n\n// ---------------------------------------------------------------------------\n// Task board types\n// ---------------------------------------------------------------------------\n\nexport type TaskStatus = \"pending_approval\" | \"backlog\" | \"ready\" | \"in_progress\" | \"done\";\nexport type TaskPriority = \"critical\" | \"high\" | \"medium\" | \"low\";\n\nexport interface Subtask {\n title: string;\n completed: boolean;\n}\n\nexport interface Task {\n id: string;\n task_number: number;\n title: string;\n description?: string | null;\n status: TaskStatus;\n priority: TaskPriority;\n owner_agent_id: string;\n assigned_agent_id: string;\n subtasks: Subtask[];\n metadata: unknown;\n worker_id?: string | null;\n created_by: string;\n created_at: string;\n updated_at: string;\n completed_at?: string | null;\n}\n\nexport const TASK_STATUS_ORDER: TaskStatus[] = [\n \"in_progress\",\n \"ready\",\n \"pending_approval\",\n \"backlog\",\n \"done\",\n];\n\nexport const TASK_STATUS_LABEL: Record<TaskStatus, string> = {\n in_progress: \"In Progress\",\n ready: \"Ready\",\n pending_approval: \"Pending Approval\",\n backlog: \"Backlog\",\n done: \"Done\",\n};\n\nexport const TASK_PRIORITY_LABEL: Record<TaskPriority, string> = {\n critical: \"Critical\",\n high: \"High\",\n medium: \"Medium\",\n low: \"Low\",\n};\n\n// Domain objects\nexport interface TaskInfo {\n id: string;\n title: string;\n status: string;\n priority: string;\n assignees: string[];\n conversation_id?: string;\n}\n\nexport interface MemoryInfo {\n id: string;\n type: string;\n content: string;\n source?: string;\n edges?: Array<{ target: string; relation: string }>;\n}\n\nexport interface CronJobInfo {\n id: string;\n name: string;\n schedule: string;\n last_run?: string;\n next_run?: string;\n status: string;\n}\n\nexport interface AgentInfo {\n id: string;\n name: string;\n detail: string;\n status?: string;\n}\n\nexport interface ModelOption {\n id: string;\n name: string;\n provider: string;\n context_window?: number;\n capabilities?: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nexport function tryParseJson(text: string): Record<string, unknown> | null {\n if (!text || text.trim().length === 0) return null;\n try {\n const parsed = JSON.parse(text);\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>;\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport function isErrorResult(text: string, parsed: Record<string, unknown> | null): boolean {\n if (parsed?.error) return true;\n if (parsed?.status === \"error\") return true;\n if (parsed?.success === false) return true;\n if (typeof parsed?.exit_code === \"number\" && parsed.exit_code !== 0) return true;\n const lower = text.toLowerCase();\n return (\n lower.startsWith(\"error:\") ||\n lower.startsWith(\"error -\") ||\n lower.startsWith(\"failed:\") ||\n lower.startsWith(\"toolset error:\")\n );\n}\n\n// ---------------------------------------------------------------------------\n// Transcript → TranscriptItem[] pairing\n// ---------------------------------------------------------------------------\n\n/**\n * Walk a flat TranscriptStep[] and pair each tool_call with its tool_result\n * via call_id matching, plus emit standalone text steps. Returns an ordered\n * list of renderable items: text blocks and paired tool calls.\n */\nexport function pairTranscriptSteps(steps: TranscriptStep[]): TranscriptItem[] {\n const items: TranscriptItem[] = [];\n const resultsById = new Map<string, { name: string; text: string }>();\n\n // First pass: index all tool_result steps by call_id\n for (const step of steps) {\n if (step.type === \"tool_result\") {\n resultsById.set(step.call_id, { name: step.name, text: step.text });\n }\n }\n\n // Second pass: emit items in order\n for (const step of steps) {\n if (step.type === \"action\") {\n for (const content of step.content) {\n if (content.type === \"text\") {\n items.push({ kind: \"text\", text: content.text });\n } else if (content.type === \"tool_call\") {\n const result = resultsById.get(content.id);\n const parsedArgs = tryParseJson(content.args);\n const parsedResult = result ? tryParseJson(result.text) : null;\n\n const hasError = result ? isErrorResult(result.text, parsedResult) : false;\n\n items.push({\n kind: \"tool\",\n pair: {\n id: content.id,\n name: content.name,\n argsRaw: content.args,\n args: parsedArgs,\n resultRaw: result?.text ?? null,\n result: parsedResult,\n status: result ? (hasError ? \"error\" : \"completed\") : \"running\",\n },\n });\n }\n }\n }\n }\n\n return items;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Shared Material Design 3 building blocks for @aphrody/m3-ai (internal, not exported).\n\nimport { m3Durations, m3Easings } from \"@aphrody/m3-motion\";\nimport { clsx } from \"clsx\";\nimport type { ReactNode } from \"react\";\n\n/** The M3 focus indicator (contract: docs/design/SPACEUI-M3-FUSION.md, \"States\"). */\nexport const focusRing =\n \"outline-none focus-visible:outline-3 focus-visible:outline-secondary focus-visible:outline-offset-2\";\n\n/** Expand / collapse: enter on emphasized decelerate, exit on emphasized accelerate. */\nexport const expandMotion = {\n initial: { height: 0, opacity: 0 },\n animate: {\n height: \"auto\",\n opacity: 1,\n transition: { duration: m3Durations.medium2, ease: m3Easings.emphasizedDecelerate },\n },\n exit: {\n height: 0,\n opacity: 0,\n transition: { duration: m3Durations.short4, ease: m3Easings.emphasizedAccelerate },\n },\n} as const;\n\n/**\n * Indeterminate M3 circular progress indicator (active indicator on `primary` or the current\n * color, 4 dp track gap omitted at small sizes). Replaces the upstream Grid loader.\n */\nexport function CircularIndicator({\n size = 16,\n className,\n label = \"Loading\",\n}: {\n size?: number;\n className?: string;\n label?: string;\n}) {\n const stroke = size <= 16 ? 2 : size <= 24 ? 3 : 4;\n const r = (size - stroke) / 2;\n const c = 2 * Math.PI * r;\n return (\n <span\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 circular indeterminate indicator is an animated SVG arc; a native <progress> cannot render it.\n role=\"progressbar\"\n aria-label={label}\n className={clsx(\"m3-circular-indicator inline-flex shrink-0 text-primary\", className)}\n style={{ width: size, height: size }}\n >\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n className=\"animate-spin\"\n aria-hidden=\"true\"\n >\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={`${c * 0.7} ${c}`}\n />\n </svg>\n </span>\n );\n}\n\nexport type ChipTone = \"primary\" | \"success\" | \"error\" | \"warning\" | \"neutral\";\n\nconst chipTones: Record<ChipTone, string> = {\n primary: \"bg-primary-container text-on-primary-container\",\n success: \"bg-success-container text-on-success-container\",\n error: \"bg-error-container text-on-error-container\",\n warning: \"bg-warning-container text-on-warning-container\",\n neutral: \"border border-outline-variant text-on-surface-variant\",\n};\n\n/** Non-interactive M3 assist chip used as a status label (dense, `rounded-small`). */\nexport function StatusChip({\n tone,\n icon,\n children,\n className,\n}: {\n tone: ChipTone;\n icon?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <span\n className={clsx(\n \"inline-flex h-6 shrink-0 items-center gap-1 rounded-small px-2 text-label-medium\",\n chipTones[tone],\n className,\n )}\n >\n {icon}\n {children}\n </span>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ToolCall.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport type { ToolCallPair, ToolCallStatus } from \"./types\";\nimport { CircularIndicator, StatusChip, expandMotion, focusRing } from \"./internal\";\n\n// ---------------------------------------------------------------------------\n// Tool-specific rendering\n// ---------------------------------------------------------------------------\n\ninterface ToolRenderer {\n summary(pair: ToolCallPair): string | null;\n argsView?(pair: ToolCallPair): React.ReactNode | null;\n resultView?(pair: ToolCallPair): React.ReactNode | null;\n}\n\nconst toolRenderers: Record<string, ToolRenderer> = {\n browser_launch: {\n summary(pair) {\n const headless = pair.args?.headless;\n return headless === false ? \"Launch browser (visible)\" : \"Launch browser\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text=\"Browser session started\" />;\n },\n },\n\n browser_navigate: {\n summary(pair) {\n const url = pair.args?.url;\n return url ? truncate(String(url), 60) : null;\n },\n resultView(pair) {\n if (!pair.result) return <ResultText text={pair.resultRaw} />;\n const title = pair.result.title as string | undefined;\n const url = pair.result.url as string | undefined;\n return (\n <div className=\"flex flex-col gap-1 px-3 py-2\">\n {title && (\n <p className=\"text-body-small text-on-surface-variant\">\n <span className=\"text-outline\">Title: </span>\n {title}\n </p>\n )}\n {url && <p className=\"font-code text-body-small text-outline\">{truncate(url, 80)}</p>}\n </div>\n );\n },\n },\n\n browser_snapshot: {\n summary(pair) {\n if (!pair.resultRaw) return \"Taking snapshot...\";\n const matches = pair.resultRaw.match(/\\[\\d+\\]/g);\n const count = matches?.length ?? 0;\n return count > 0 ? `${count} interactive element${count !== 1 ? \"s\" : \"\"}` : \"Page snapshot\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n browser_click: {\n summary(pair) {\n const index = pair.args?.index;\n return index !== undefined ? `Click element [${index}]` : \"Click\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={pair.resultRaw} />;\n },\n },\n\n browser_type: {\n summary(pair) {\n const index = pair.args?.index;\n const hasSecret = pair.args?.secret !== undefined;\n const text = pair.args?.text;\n if (hasSecret) {\n return index !== undefined ? `Type secret into [${index}]` : \"Type secret\";\n }\n if (text) {\n const display = truncate(String(text), 30);\n return index !== undefined ? `Type \"${display}\" into [${index}]` : `Type \"${display}\"`;\n }\n return index !== undefined ? `Type into [${index}]` : \"Type\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={pair.resultRaw} />;\n },\n },\n\n browser_press_key: {\n summary(pair) {\n const key = pair.args?.key;\n return key ? `Press ${key}` : \"Press key\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={pair.resultRaw} />;\n },\n },\n\n browser_screenshot: {\n summary() {\n return \"Capture screenshot\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n if (pair.result?.base64) {\n const mimeType = (pair.result.mime_type as string) ?? \"image/png\";\n return (\n <div className=\"px-3 py-2\">\n <img\n src={`data:${mimeType};base64,${pair.result.base64}`}\n alt=\"Browser screenshot\"\n className=\"max-h-60 rounded-extra-small border border-outline-variant object-contain\"\n />\n </div>\n );\n }\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n browser_evaluate: {\n summary(pair) {\n const expression = pair.args?.expression;\n return expression ? truncate(String(expression), 50) : \"Evaluate JS\";\n },\n argsView(pair) {\n const expression = pair.args?.expression;\n if (!expression) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"mb-1 text-body-small font-medium text-outline\">JavaScript</p>\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n {String(expression)}\n </pre>\n </div>\n );\n },\n },\n\n browser_tab_open: {\n summary(pair) {\n const url = pair.args?.url;\n return url ? `Open tab: ${truncate(String(url), 50)}` : \"Open new tab\";\n },\n },\n\n browser_tab_list: {\n summary() {\n return \"List tabs\";\n },\n },\n\n browser_tab_close: {\n summary(pair) {\n const tabId = pair.args?.tab_id;\n return tabId !== undefined ? `Close tab ${tabId}` : \"Close tab\";\n },\n },\n\n browser_close: {\n summary() {\n return \"Close browser\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text=\"Browser session closed\" />;\n },\n },\n\n shell: {\n summary(pair) {\n const command = pair.args?.command;\n if (!command) return null;\n if (pair.result && typeof pair.result.exit_code === \"number\") {\n const code = pair.result.exit_code;\n const cmdStr = truncate(String(command), 50);\n return code === 0 ? cmdStr : `${cmdStr} (exit ${code})`;\n }\n return truncate(String(command), 60);\n },\n argsView(pair) {\n const command = pair.args?.command;\n if (!command) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">$ </span>\n {String(command)}\n </pre>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ShellResultView pair={pair} />;\n },\n },\n\n file_read: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n argsView(pair) {\n const path = pair.args?.path;\n if (!path) return null;\n const offset = pair.args?.offset;\n const limit = pair.args?.limit;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"font-code text-body-small text-on-surface-variant\">\n {String(path)}\n {offset ? ` (from line ${offset})` : \"\"}\n {limit ? ` (${limit} lines)` : \"\"}\n </p>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n file_write: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n argsView(pair) {\n const path = pair.args?.path;\n const content = pair.args?.content;\n if (!path && !content) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n {!!path && (\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">{String(path)}</p>\n )}\n {!!content && (\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-outline\">\n {truncate(String(content), 2000)}\n </pre>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n file_edit: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n argsView(pair) {\n const path = pair.args?.path;\n const oldStr = pair.args?.old_string;\n const newStr = pair.args?.new_string;\n if (!path) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">{String(path)}</p>\n {!!oldStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-error\">Old</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-error\">\n {truncate(String(oldStr), 500)}\n </pre>\n </div>\n )}\n {!!newStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-success\">New</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-success\">\n {truncate(String(newStr), 500)}\n </pre>\n </div>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n file_list: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n exec: {\n summary(pair) {\n const program = pair.args?.program;\n const cmdArgs = pair.args?.args;\n if (!program) return null;\n const parts = [String(program)];\n if (Array.isArray(cmdArgs)) {\n for (const arg of cmdArgs) parts.push(String(arg));\n }\n const full = parts.join(\" \");\n if (pair.result && typeof pair.result.exit_code === \"number\") {\n const code = pair.result.exit_code;\n const cmdStr = truncate(full, 50);\n return code === 0 ? cmdStr : `${cmdStr} (exit ${code})`;\n }\n return truncate(full, 60);\n },\n argsView(pair) {\n const program = pair.args?.program;\n if (!program) return null;\n const parts = [String(program)];\n const cmdArgs = pair.args?.args;\n if (Array.isArray(cmdArgs)) {\n for (const arg of cmdArgs) parts.push(String(arg));\n }\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">$ </span>\n {parts.join(\" \")}\n </pre>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ShellResultView pair={pair} />;\n },\n },\n\n set_status: {\n summary(pair) {\n const kind = pair.args?.kind;\n const message = pair.args?.message;\n if (kind === \"outcome\") {\n return message ? `Outcome: ${truncate(String(message), 50)}` : \"Outcome set\";\n }\n return message ? truncate(String(message), 60) : null;\n },\n resultView() {\n return null;\n },\n },\n\n // OpenCode tools\n\n read: {\n summary(pair) {\n if (pair.title) return pair.title;\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n return filePath ? truncate(String(filePath), 60) : null;\n },\n argsView(pair) {\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n if (!filePath) return null;\n const offset = pair.args?.offset;\n const limit = pair.args?.limit;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"font-code text-body-small text-on-surface-variant\">\n {String(filePath)}\n {offset ? ` (from line ${offset})` : \"\"}\n {limit ? ` (${limit} lines)` : \"\"}\n </p>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n write: {\n summary(pair) {\n if (pair.title) return pair.title;\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n return filePath ? truncate(String(filePath), 60) : null;\n },\n argsView(pair) {\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n const content = pair.args?.content;\n if (!filePath && !content) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n {!!filePath && (\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">\n {String(filePath)}\n </p>\n )}\n {!!content && (\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-outline\">\n {truncate(String(content), 2000)}\n </pre>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n edit: {\n summary(pair) {\n if (pair.title) return pair.title;\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n return filePath ? truncate(String(filePath), 60) : null;\n },\n argsView(pair) {\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n const oldStr = pair.args?.oldString ?? pair.args?.old_string;\n const newStr = pair.args?.newString ?? pair.args?.new_string;\n if (!filePath) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">\n {String(filePath)}\n </p>\n {!!oldStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-error\">Old</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-error\">\n {truncate(String(oldStr), 500)}\n </pre>\n </div>\n )}\n {!!newStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-success\">New</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-success\">\n {truncate(String(newStr), 500)}\n </pre>\n </div>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n bash: {\n summary(pair) {\n if (pair.title) return pair.title;\n const command = pair.args?.command;\n if (!command) return null;\n if (pair.result && typeof pair.result.exit_code === \"number\") {\n const code = pair.result.exit_code;\n const cmdStr = truncate(String(command), 50);\n return code === 0 ? cmdStr : `${cmdStr} (exit ${code})`;\n }\n return truncate(String(command), 60);\n },\n argsView(pair) {\n const command = pair.args?.command;\n if (!command) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">$ </span>\n {String(command)}\n </pre>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ShellResultView pair={pair} />;\n },\n },\n\n glob: {\n summary(pair) {\n if (pair.title) return pair.title;\n const pattern = pair.args?.pattern;\n return pattern ? truncate(String(pattern), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n grep: {\n summary(pair) {\n if (pair.title) return pair.title;\n const pattern = pair.args?.pattern;\n const include = pair.args?.include;\n if (pattern && include) {\n return `/${pattern}/ in ${include}`;\n }\n return pattern ? `/${truncate(String(pattern), 40)}/` : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n webfetch: {\n summary(pair) {\n if (pair.title) return pair.title;\n const url = pair.args?.url;\n return url ? truncate(String(url), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n read_skill: {\n summary(pair) {\n if (pair.title) return pair.title;\n const name = pair.args?.name;\n return name ? String(name) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n web_search: {\n summary(pair) {\n if (pair.title) return pair.title;\n const query = pair.args?.query;\n const resultCount =\n pair.result?.result_count ??\n (Array.isArray(pair.result?.results) ? (pair.result!.results as unknown[]).length : null);\n const queryStr = query ? truncate(String(query), 50) : null;\n if (queryStr && resultCount != null) {\n return `${queryStr} (${resultCount} result${resultCount !== 1 ? \"s\" : \"\"})`;\n }\n return queryStr;\n },\n argsView(pair) {\n const query = pair.args?.query;\n if (!query) return null;\n const count = pair.args?.count;\n const freshness = pair.args?.freshness;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">Search: </span>\n {String(query)}\n </p>\n {!!(count || freshness) && (\n <p className=\"mt-0.5 text-body-small text-outline\">\n {count ? `${count} results` : \"\"}\n {count && freshness ? \" · \" : \"\"}\n {freshness ? `${freshness}` : \"\"}\n </p>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n spacebot_docs: {\n summary(pair) {\n if (pair.title) return pair.title;\n const action = pair.args?.action;\n const docId = pair.args?.doc_id;\n if (action === \"read\" && docId) {\n return truncate(String(docId), 50);\n }\n return action ? String(action) : \"list\";\n },\n argsView(pair) {\n const action = pair.args?.action;\n const docId = pair.args?.doc_id;\n const query = pair.args?.query;\n if (!action && !docId) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n {!!docId && (\n <p className=\"font-code text-body-small text-on-surface-variant\">{String(docId)}</p>\n )}\n {!!query && (\n <p className=\"mt-0.5 text-body-small text-outline\">filter: {String(query)}</p>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n todowrite: {\n summary(pair) {\n if (pair.title) return pair.title;\n return \"Update tasks\";\n },\n resultView() {\n return null;\n },\n },\n\n task: {\n summary(pair) {\n if (pair.title) return pair.title;\n const description = pair.args?.description;\n return description ? truncate(String(description), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n};\n\nconst defaultRenderer: ToolRenderer = {\n summary(pair) {\n if (!pair.argsRaw || pair.argsRaw === \"{}\") return null;\n return truncate(pair.argsRaw, 60);\n },\n};\n\nfunction getRenderer(name: string): ToolRenderer {\n return toolRenderers[name] ?? defaultRenderer;\n}\n\n// ---------------------------------------------------------------------------\n// Shared sub-components\n// ---------------------------------------------------------------------------\n\nfunction ResultLine({ text }: { text: string }) {\n return <p className=\"px-3 py-2 text-body-small text-on-surface-variant\">{text}</p>;\n}\n\nfunction ResultText({ text }: { text: string | null }) {\n if (!text) return null;\n return (\n <pre className=\"max-h-60 overflow-auto whitespace-pre-wrap px-3 py-2 font-code text-body-small text-on-surface-variant\">\n {text}\n </pre>\n );\n}\n\nfunction CollapsiblePre({ text, maxLines = 20 }: { text: string; maxLines?: number }) {\n const [expanded, setExpanded] = useState(false);\n const lines = text.split(\"\\n\");\n const needsCollapse = lines.length > maxLines;\n const displayText =\n needsCollapse && !expanded ? lines.slice(0, maxLines).join(\"\\n\") + \"\\n...\" : text;\n\n return (\n <div>\n <pre className=\"max-h-80 overflow-auto whitespace-pre-wrap px-3 py-2 font-code text-body-small text-on-surface-variant\">\n {displayText}\n </pre>\n {needsCollapse && (\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className={clsx(\n \"flex h-8 w-full items-center justify-center gap-1 border-t border-outline-variant px-3 text-label-medium text-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/8 active:bg-primary/10\",\n focusRing,\n )}\n >\n <Icon\n name=\"expand_more\"\n size={18}\n className={clsx(\n \"transition-transform duration-200 ease-standard\",\n expanded && \"rotate-180\",\n )}\n />\n {expanded ? \"Show less\" : `Show all ${lines.length} lines`}\n </button>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Shell result rendering\n// ---------------------------------------------------------------------------\n\nfunction ShellResultView({ pair }: { pair: ToolCallPair }) {\n const r = pair.result;\n\n if (!r || typeof r.exit_code !== \"number\") {\n return <CollapsiblePre text={pair.resultRaw!} maxLines={30} />;\n }\n\n const exitCode = r.exit_code as number;\n const stdout = typeof r.stdout === \"string\" ? r.stdout : \"\";\n const stderr = typeof r.stderr === \"string\" ? r.stderr : \"\";\n const hasStdout = stdout.trim().length > 0;\n const hasStderr = stderr.trim().length > 0;\n const isError = exitCode !== 0;\n\n if (!hasStdout && !hasStderr && exitCode === 0) {\n return <ResultLine text=\"Completed with no output\" />;\n }\n\n return (\n <div className=\"flex flex-col\">\n {isError && (\n <div className=\"flex items-center gap-1.5 border-b border-outline-variant px-3 py-1.5\">\n <span className=\"inline-flex h-6 items-center rounded-small bg-error px-2 font-code text-label-medium text-on-error\">\n exit {exitCode}\n </span>\n </div>\n )}\n\n {hasStdout && (\n <div className={hasStderr ? \"border-b border-outline-variant\" : \"\"}>\n <CollapsiblePre text={stdout.replace(/\\n$/, \"\")} maxLines={30} />\n </div>\n )}\n\n {hasStderr && (\n <div>\n <div className=\"flex items-center gap-1.5 px-3 pt-2 pb-0.5\">\n <span className={clsx(\"text-label-medium\", isError ? \"text-error\" : \"text-warning\")}>\n stderr\n </span>\n </div>\n <pre\n className={clsx(\n \"max-h-40 overflow-auto whitespace-pre-wrap px-3 pb-2 font-code text-body-small\",\n isError ? \"text-error\" : \"text-warning\",\n )}\n >\n {stderr.replace(/\\n$/, \"\")}\n </pre>\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Status display helpers\n// ---------------------------------------------------------------------------\n\n/** Material Symbols glyph per status (the running state shows a circular indicator). */\nconst STATUS_ICONS: Record<ToolCallStatus, string> = {\n running: \"pending\",\n completed: \"check_circle\",\n error: \"error\",\n};\n\nconst STATUS_COLORS: Record<ToolCallStatus, string> = {\n running: \"text-primary\",\n completed: \"text-success\",\n error: \"text-error\",\n};\n\nconst STATUS_LABELS: Record<ToolCallStatus, string> = {\n running: \"Running\",\n completed: \"Completed\",\n error: \"Error\",\n};\n\n/** Leading Material Symbol per tool family. */\nfunction toolIcon(name: string): string {\n if (name.startsWith(\"browser_\")) return \"language\";\n if (name.startsWith(\"file_\") || name === \"read\" || name === \"write\" || name === \"edit\") {\n return \"description\";\n }\n if (name === \"shell\" || name === \"exec\" || name === \"bash\") return \"terminal\";\n if (name === \"glob\" || name === \"grep\" || name === \"web_search\") return \"search\";\n if (name === \"webfetch\") return \"language\";\n if (name === \"set_status\") return \"schedule\";\n return \"build\";\n}\n\nfunction formatToolName(name: string): string {\n const overrides: Record<string, string> = {\n webfetch: \"Web Fetch\",\n todowrite: \"Todo\",\n read_skill: \"Read Skill\",\n web_search: \"Web Search\",\n spacebot_docs: \"Docs\",\n };\n if (overrides[name]) return overrides[name];\n\n const stripped = name\n .replace(/^browser_/, \"\")\n .replace(/^file_/, \"\")\n .replace(/^tab_/, \"Tab \");\n\n return stripped\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nfunction toolCategory(name: string): string | null {\n if (name.startsWith(\"browser_\")) return \"Browser\";\n if (name.startsWith(\"file_\")) return \"File\";\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nexport interface ToolCallProps {\n pair: ToolCallPair;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * A tool invocation as an M3 outlined card: status + tool name header (`text-label-large`),\n * summary, and an expandable body with arguments and result blocks in `font-code`.\n */\nexport function ToolCall({ pair, defaultExpanded = false, className }: ToolCallProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const bodyId = useId();\n const renderer = getRenderer(pair.name);\n const summary = renderer.summary(pair);\n const category = toolCategory(pair.name);\n const displayName = formatToolName(pair.name);\n const isError = pair.status === \"error\";\n\n const args = expanded ? renderArgs(pair, renderer) : null;\n const result = expanded ? renderResult(pair, renderer) : null;\n\n return (\n <div\n data-status={pair.status}\n className={clsx(\n \"m3-tool-call min-w-0 overflow-hidden rounded-medium border bg-surface-container-low text-on-surface\",\n isError ? \"border-error\" : \"border-outline-variant\",\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n aria-expanded={expanded}\n aria-controls={bodyId}\n className={clsx(\n \"flex min-h-10 w-full items-center gap-2 rounded-medium px-3 py-2 text-left\",\n \"transition-colors duration-200 ease-standard hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <span\n className={clsx(\n \"flex size-5 shrink-0 items-center justify-center\",\n STATUS_COLORS[pair.status],\n )}\n >\n {pair.status === \"running\" ? (\n <CircularIndicator size={16} label=\"Running\" />\n ) : (\n <Icon\n name={STATUS_ICONS[pair.status]}\n size={18}\n filled\n label={STATUS_LABELS[pair.status]}\n />\n )}\n </span>\n <Icon name={toolIcon(pair.name)} size={18} className=\"shrink-0 text-on-surface-variant\" />\n {category && <span className=\"text-label-medium text-outline\">{category}</span>}\n <span className=\"shrink-0 text-label-large text-on-surface\">{displayName}</span>\n {summary && !expanded ? (\n <span className=\"min-w-0 flex-1 truncate text-body-small text-on-surface-variant\">\n {summary}\n </span>\n ) : (\n <span className=\"flex-1\" />\n )}\n {isError && (\n <StatusChip tone=\"error\" className=\"h-5 px-1.5 text-label-small\">\n error\n </StatusChip>\n )}\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded && \"rotate-180\",\n )}\n />\n </button>\n\n <AnimatePresence initial={false}>\n {expanded ? (\n <motion.div id={bodyId} key=\"body\" {...expandMotion} className=\"overflow-hidden\">\n <div className=\"flex flex-col gap-2 border-t border-outline-variant px-3 py-3\">\n {args}\n {result != null && result !== false ? (\n <div\n className={clsx(\n \"m3-tool-result overflow-hidden rounded-small\",\n isError\n ? \"bg-error-container text-on-error-container [&_.text-on-surface-variant]:text-on-error-container [&_.text-outline]:text-on-error-container/80\"\n : \"bg-surface-container-highest text-on-surface-variant\",\n )}\n >\n {result}\n </div>\n ) : null}\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n );\n}\n\nfunction renderArgs(pair: ToolCallPair, renderer: ToolRenderer): React.ReactNode {\n if (renderer.argsView) {\n const custom = renderer.argsView(pair);\n if (custom) return custom;\n }\n\n if (pair.args && Object.keys(pair.args).length > 0) {\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <div className=\"flex flex-col gap-0.5\">\n {Object.entries(pair.args).map(([key, value]) => (\n <p key={key} className=\"font-code text-body-small\">\n <span className=\"text-outline\">{key}: </span>\n <span className=\"text-on-surface-variant\">{formatArgValue(key, value)}</span>\n </p>\n ))}\n </div>\n </div>\n );\n }\n\n if (pair.argsRaw && pair.argsRaw !== \"{}\" && pair.argsRaw.trim().length > 0) {\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n {pair.argsRaw}\n </pre>\n </div>\n );\n }\n\n return null;\n}\n\nfunction renderResult(pair: ToolCallPair, renderer: ToolRenderer): React.ReactNode {\n if (pair.status === \"running\") {\n return (\n <div className=\"flex items-center gap-2 px-3 py-2 text-body-small text-on-surface-variant\">\n <CircularIndicator size={14} label=\"Running\" />\n Running...\n </div>\n );\n }\n\n if (renderer.resultView) {\n const custom = renderer.resultView(pair);\n if (custom !== undefined) return custom;\n }\n\n if (!pair.resultRaw) return null;\n\n if (pair.result && Object.keys(pair.result).length > 0) {\n return (\n <div className=\"px-3 py-2\">\n <div className=\"flex flex-col gap-0.5\">\n {Object.entries(pair.result).map(([key, value]) => (\n <p key={key} className=\"font-code text-body-small\">\n <span className=\"text-outline\">{key}: </span>\n <span className=\"text-on-surface-variant\">\n {typeof value === \"string\" ? truncate(value, 200) : JSON.stringify(value)}\n </span>\n </p>\n ))}\n </div>\n </div>\n );\n }\n\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n}\n\nfunction formatArgValue(key: string, value: unknown): string {\n if (key === \"secret\" && typeof value === \"string\") {\n return \"***\";\n }\n if (typeof value === \"string\") {\n return truncate(value, 100);\n }\n if (typeof value === \"boolean\" || typeof value === \"number\") {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\nfunction truncate(text: string, maxLen: number): string {\n if (text.length <= maxLen) return text;\n return text.slice(0, maxLen) + \"...\";\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/Markdown.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport {\n forwardRef,\n isValidElement,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport ReactMarkdown, { type Components } from \"react-markdown\";\nimport rehypeRaw from \"rehype-raw\";\nimport remarkGfm from \"remark-gfm\";\n\ntype MarkdownSize = \"small\" | \"medium\" | \"large\";\n\ninterface MarkdownProps {\n content: string;\n className?: string;\n /** Body typescale of paragraphs and lists: `text-body-small|medium|large`. Default `medium`. */\n size?: MarkdownSize;\n /**\n * Render raw HTML embedded in the markdown (rehype-raw). Off by default: only enable it for\n * trusted content.\n */\n allowHtml?: boolean;\n}\n\nconst bodyClass: Record<MarkdownSize, string> = {\n small: \"text-body-small\",\n medium: \"text-body-medium\",\n large: \"text-body-large\",\n};\n\nfunction extractText(node: ReactNode): string {\n if (typeof node === \"string\") return node;\n if (typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(extractText).join(\"\");\n if (isValidElement(node)) return extractText((node.props as { children?: ReactNode }).children);\n return \"\";\n}\n\n// ---------------------------------------------------------------------------\n// Language detection & mapping\n// ---------------------------------------------------------------------------\n\nconst LANGUAGE_MAP: Record<string, string> = {\n typescript: \"TypeScript\",\n ts: \"TypeScript\",\n tsx: \"TSX\",\n javascript: \"JavaScript\",\n js: \"JavaScript\",\n jsx: \"JSX\",\n python: \"Python\",\n py: \"Python\",\n rust: \"Rust\",\n rs: \"Rust\",\n bash: \"Bash\",\n sh: \"Bash\",\n shell: \"Bash\",\n zsh: \"Bash\",\n json: \"JSON\",\n jsonc: \"JSONC\",\n sql: \"SQL\",\n html: \"HTML\",\n css: \"CSS\",\n scss: \"SCSS\",\n sass: \"Sass\",\n yaml: \"YAML\",\n yml: \"YAML\",\n markdown: \"Markdown\",\n md: \"Markdown\",\n go: \"Go\",\n golang: \"Go\",\n java: \"Java\",\n c: \"C\",\n cpp: \"C++\",\n \"c++\": \"C++\",\n csharp: \"C#\",\n cs: \"C#\",\n \"c#\": \"C#\",\n ruby: \"Ruby\",\n rb: \"Ruby\",\n php: \"PHP\",\n swift: \"Swift\",\n kotlin: \"Kotlin\",\n kt: \"Kotlin\",\n xml: \"XML\",\n toml: \"TOML\",\n dockerfile: \"Dockerfile\",\n docker: \"Dockerfile\",\n graphql: \"GraphQL\",\n gql: \"GraphQL\",\n wasm: \"WebAssembly\",\n lua: \"Lua\",\n r: \"R\",\n diff: \"Diff\",\n plaintext: \"Text\",\n text: \"Text\",\n txt: \"Text\",\n};\n\nexport function detectLanguage(raw?: string): { raw: string; label: string } {\n if (!raw) return { raw: \"\", label: \"Code\" };\n const cleaned = raw.replace(/^language-|^lang-/, \"\").toLowerCase().trim();\n if (LANGUAGE_MAP[cleaned]) {\n return { raw: cleaned, label: LANGUAGE_MAP[cleaned] };\n }\n const label =\n cleaned.length <= 3\n ? cleaned.toUpperCase()\n : cleaned.charAt(0).toUpperCase() + cleaned.slice(1);\n return { raw: cleaned, label };\n}\n\n// ---------------------------------------------------------------------------\n// CodeBlock component\n// ---------------------------------------------------------------------------\n\nexport interface CodeBlockProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onCopy\"> {\n code?: string;\n language?: string;\n onCopy?: (code: string) => void;\n children?: ReactNode;\n}\n\nexport function CodeBlock({\n code: explicitCode,\n language: explicitLang,\n onCopy,\n className,\n children,\n ...restProps\n}: CodeBlockProps) {\n // Strip node passed by ReactMarkdown to avoid rendering node=\"[object Object]\" in DOM\n const { node: _node, ...props } = restProps as Record<string, any>;\n\n const [copied, setCopied] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const childElement = isValidElement(children) ? children : null;\n const childProps = childElement\n ? (childElement.props as { className?: string; children?: ReactNode })\n : null;\n\n const rawLangMatch =\n explicitLang ??\n className?.match(/language-([a-zA-Z0-9_+#-]+)/)?.[1] ??\n childProps?.className?.match(/language-([a-zA-Z0-9_+#-]+)/)?.[1];\n\n const { raw: rawLang, label: languageLabel } = detectLanguage(rawLangMatch);\n\n const rawCode =\n explicitCode ??\n (childProps?.children ? extractText(childProps.children) : extractText(children));\n\n const codeContent = rawCode;\n const codeToCopy = rawCode.replace(/\\n$/, \"\");\n\n const handleCopy = async () => {\n try {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(codeToCopy);\n }\n } catch {\n // Ignore clipboard API failures in non-secure or test environments\n }\n onCopy?.(codeToCopy);\n setCopied(true);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n setCopied(false);\n }, 2000);\n };\n\n return (\n <div\n className={clsx(\n \"my-3 overflow-hidden rounded-medium border border-outline-variant bg-surface-container-highest\",\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between border-b border-outline-variant bg-surface-container px-3 py-1.5\">\n <span className=\"inline-flex items-center rounded-extra-small bg-surface-container-high px-2 py-0.5 text-label-small font-medium text-on-surface-variant border border-outline-variant/60\">\n {languageLabel}\n </span>\n <button\n type=\"button\"\n onClick={handleCopy}\n className={clsx(\n \"inline-flex items-center gap-1.5 rounded-small px-2 py-1 text-label-small font-medium transition-colors duration-200\",\n copied\n ? \"text-success\"\n : \"text-on-surface-variant hover:bg-on-surface/8 hover:text-on-surface active:bg-on-surface/12\",\n \"focus-visible:outline-2 focus-visible:outline-primary\",\n )}\n aria-label={copied ? \"Copied\" : \"Copy code\"}\n title={copied ? \"Copied!\" : \"Copy code\"}\n >\n <Icon\n name={copied ? \"check\" : \"content_copy\"}\n size={16}\n className={copied ? \"text-success\" : undefined}\n />\n <span>{copied ? \"Copied!\" : \"Copy\"}</span>\n </button>\n </div>\n <pre className=\"overflow-x-auto p-3 font-code text-body-small text-on-surface bg-surface-container-highest [&_code]:bg-transparent [&_code]:p-0 [&_code]:text-[length:inherit]\">\n <code className={rawLang ? `language-${rawLang}` : undefined}>{codeContent}</code>\n </pre>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Math formula rendering & typography\n// ---------------------------------------------------------------------------\n\nconst GREEK_AND_SYMBOLS: Record<string, string> = {\n // Greek letters (lowercase)\n alpha: \"α\",\n beta: \"β\",\n gamma: \"γ\",\n delta: \"δ\",\n epsilon: \"ε\",\n zeta: \"ζ\",\n eta: \"η\",\n theta: \"θ\",\n iota: \"ι\",\n kappa: \"κ\",\n lambda: \"λ\",\n mu: \"μ\",\n nu: \"ν\",\n xi: \"ξ\",\n pi: \"π\",\n rho: \"ρ\",\n sigma: \"σ\",\n tau: \"τ\",\n upsilon: \"υ\",\n phi: \"φ\",\n chi: \"χ\",\n psi: \"ψ\",\n omega: \"ω\",\n // Greek letters (uppercase)\n Gamma: \"Γ\",\n Delta: \"Δ\",\n Theta: \"Θ\",\n Lambda: \"Λ\",\n Xi: \"Ξ\",\n Pi: \"Π\",\n Sigma: \"Σ\",\n Phi: \"Φ\",\n Psi: \"Ψ\",\n Omega: \"Ω\",\n // Operators & Relations\n times: \"×\",\n div: \"÷\",\n pm: \"±\",\n mp: \"∓\",\n le: \"≤\",\n leq: \"≤\",\n ge: \"≥\",\n geq: \"≥\",\n approx: \"≈\",\n neq: \"≠\",\n ne: \"≠\",\n infty: \"∞\",\n cdot: \"·\",\n circ: \"°\",\n partial: \"∂\",\n nabla: \"∇\",\n sum: \"∑\",\n prod: \"∏\",\n int: \"∫\",\n sqrt: \"√\",\n in: \"∈\",\n notin: \"∉\",\n subset: \"⊂\",\n subseteq: \"⊆\",\n cup: \"∪\",\n cap: \"∩\",\n to: \"→\",\n rightarrow: \"→\",\n leftarrow: \"←\",\n leftrightarrow: \"↔\",\n Rightarrow: \"⇒\",\n Leftarrow: \"⇐\",\n Leftrightarrow: \"⇔\",\n forall: \"∀\",\n exists: \"∃\",\n};\n\nfunction formatSubSup(text: string): ReactNode {\n const parts = text.split(\n /(\\^\\{[^}]+\\}|\\^[-+]?[a-zA-Z0-9\\u0370-\\u03FF\\u2100-\\u214F]|_\\{[^}]+\\}|_[-+]?[a-zA-Z0-9\\u0370-\\u03FF\\u2100-\\u214F])/g,\n );\n if (parts.length === 1) return text;\n\n return parts.map((part, index) => {\n if (part.startsWith(\"^\")) {\n const val =\n part.startsWith(\"^{\") && part.endsWith(\"}\") ? part.slice(2, -1) : part.slice(1);\n return (\n <sup key={index} className=\"text-[0.75em] leading-none\">\n {val}\n </sup>\n );\n }\n if (part.startsWith(\"_\")) {\n const val =\n part.startsWith(\"_{\") && part.endsWith(\"}\") ? part.slice(2, -1) : part.slice(1);\n return (\n <sub key={index} className=\"text-[0.75em] leading-none\">\n {val}\n </sub>\n );\n }\n return part;\n });\n}\n\nexport function formatMathContent(math: string): ReactNode {\n // Step 1: Replace LaTeX symbol commands \\name (or \\\\name)\n const text = math.replace(/\\\\+([a-zA-Z]+)/g, (match, name) => {\n return GREEK_AND_SYMBOLS[name] ?? match;\n });\n\n // Step 2: Handle \\frac{num}{den}\n const fracRegex = /\\\\+frac\\{([^{}]+)\\}\\{([^{}]+)\\}/g;\n if (fracRegex.test(text)) {\n const parts: ReactNode[] = [];\n let lastIndex = 0;\n text.replace(fracRegex, (match, num, den, offset) => {\n if (offset > lastIndex) {\n parts.push(formatSubSup(text.slice(lastIndex, offset)));\n }\n parts.push(\n <span\n key={`frac-${offset}`}\n className=\"inline-flex flex-col items-center align-middle mx-1 text-center text-[0.85em] leading-none not-italic\"\n >\n <span className=\"border-b border-current px-0.5 pb-0.5\">{formatSubSup(num)}</span>\n <span className=\"px-0.5 pt-0.5\">{formatSubSup(den)}</span>\n </span>,\n );\n lastIndex = offset + match.length;\n return match;\n });\n if (lastIndex < text.length) {\n parts.push(formatSubSup(text.slice(lastIndex)));\n }\n return parts;\n }\n\n return formatSubSup(text);\n}\n\nexport interface InlineMathProps extends React.HTMLAttributes<HTMLSpanElement> {\n math: string;\n}\n\nexport function InlineMath({ math, className, ...props }: InlineMathProps) {\n return (\n <span\n className={clsx(\n \"inline-flex items-center px-1 font-serif italic font-medium text-primary\",\n className,\n )}\n {...props}\n >\n {formatMathContent(math)}\n </span>\n );\n}\n\nexport interface BlockMathProps extends React.HTMLAttributes<HTMLDivElement> {\n math: string;\n}\n\nexport function BlockMath({ math, className, ...props }: BlockMathProps) {\n return (\n <div\n className={clsx(\n \"my-3 flex justify-center overflow-x-auto rounded-medium bg-surface-container-low/40 px-4 py-2 text-title-medium font-serif italic font-medium text-primary\",\n className,\n )}\n {...props}\n >\n {formatMathContent(math)}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Remark plugin for recognizing $...$ and $$...$$ expressions\n// ---------------------------------------------------------------------------\n\nexport function remarkMathPlugin() {\n return (tree: any) => {\n function transformBlocks(parent: any) {\n if (!parent.children) return;\n const newChildren: any[] = [];\n for (const child of parent.children) {\n if (child.type === \"paragraph\" && Array.isArray(child.children)) {\n const hasBlockMath = child.children.some(\n (c: any) => c.type === \"text\" && /\\$\\$[\\s\\S]+?\\$\\$/.test(c.value),\n );\n if (hasBlockMath) {\n let currentParagraphChildren: any[] = [];\n for (const item of child.children) {\n if (item.type === \"text\" && /\\$\\$[\\s\\S]+?\\$\\$/.test(item.value)) {\n const parts = item.value.split(/(\\$\\$[\\s\\S]+?\\$\\$)/g);\n for (const part of parts) {\n if (part.startsWith(\"$$\") && part.endsWith(\"$$\") && part.length >= 4) {\n if (currentParagraphChildren.length > 0) {\n newChildren.push({\n type: \"paragraph\",\n children: currentParagraphChildren,\n });\n currentParagraphChildren = [];\n }\n const mathVal = part.slice(2, -2).trim();\n newChildren.push({\n type: \"mathBlock\",\n data: {\n hName: \"div\",\n hProperties: { className: \"math-block\", \"data-math\": mathVal },\n hChildren: [{ type: \"text\", value: mathVal }],\n },\n children: [{ type: \"text\", value: mathVal }],\n });\n } else if (part.trim().length > 0) {\n currentParagraphChildren.push({ type: \"text\", value: part });\n }\n }\n } else {\n currentParagraphChildren.push(item);\n }\n }\n if (currentParagraphChildren.length > 0) {\n newChildren.push({\n type: \"paragraph\",\n children: currentParagraphChildren,\n });\n }\n continue;\n }\n }\n transformBlocks(child);\n newChildren.push(child);\n }\n parent.children = newChildren;\n }\n\n function transformInlines(node: any) {\n if (!node.children) return;\n const newChildren: any[] = [];\n for (const child of node.children) {\n if (child.type === \"text\" && typeof child.value === \"string\" && child.value.includes(\"$\")) {\n const parts = child.value.split(/((?<!\\\\)\\$(?!\\s)[^$\\n]+?(?<!\\s)\\$(?!\\d))/g);\n for (const part of parts) {\n if (\n part.startsWith(\"$\") &&\n part.endsWith(\"$\") &&\n !part.startsWith(\"$$\") &&\n part.length > 2\n ) {\n const mathVal = part.slice(1, -1).trim();\n newChildren.push({\n type: \"mathInline\",\n data: {\n hName: \"span\",\n hProperties: { className: \"math-inline\", \"data-math\": mathVal },\n hChildren: [{ type: \"text\", value: mathVal }],\n },\n children: [{ type: \"text\", value: mathVal }],\n });\n } else if (part) {\n newChildren.push({ type: \"text\", value: part });\n }\n }\n } else {\n transformInlines(child);\n newChildren.push(child);\n }\n }\n node.children = newChildren;\n }\n\n transformBlocks(tree);\n transformInlines(tree);\n };\n}\n\n// ---------------------------------------------------------------------------\n// Element overrides mapping markdown onto M3 typescale and color roles\n// ---------------------------------------------------------------------------\n\nfunction m3Components(size: MarkdownSize): Components {\n const body = bodyClass[size];\n return {\n h1: ({ node: _node, className, children, ...props }) => (\n <h1\n className={clsx(\"mt-4 mb-2 text-headline-small text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h1>\n ),\n h2: ({ node: _node, className, children, ...props }) => (\n <h2\n className={clsx(\"mt-4 mb-2 text-title-large text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h2>\n ),\n h3: ({ node: _node, className, children, ...props }) => (\n <h3\n className={clsx(\"mt-3 mb-1.5 text-title-medium text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h3>\n ),\n h4: ({ node: _node, className, children, ...props }) => (\n <h4\n className={clsx(\"mt-3 mb-1 text-title-small text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h4>\n ),\n h5: ({ node: _node, className, children, ...props }) => (\n <h5\n className={clsx(\"mt-3 mb-1 text-title-small text-on-surface-variant first:mt-0\", className)}\n {...props}\n >\n {children}\n </h5>\n ),\n h6: ({ node: _node, className, children, ...props }) => (\n <h6\n className={clsx(\"mt-3 mb-1 text-label-large text-on-surface-variant first:mt-0\", className)}\n {...props}\n >\n {children}\n </h6>\n ),\n p: ({ node: _node, className, ...props }) => (\n <p className={clsx(\"my-2 first:mt-0 last:mb-0\", body, className)} {...props} />\n ),\n a: ({ node: _node, className, children, ...props }) => (\n <a\n className={clsx(\n \"text-primary underline underline-offset-2 hover:decoration-2\",\n \"rounded-extra-small outline-none focus-visible:outline-3 focus-visible:outline-secondary focus-visible:outline-offset-2\",\n className,\n )}\n {...props}\n >\n {children}\n </a>\n ),\n strong: ({ node: _node, className, ...props }) => (\n <strong className={clsx(\"font-semibold text-on-surface\", className)} {...props} />\n ),\n ul: ({ node: _node, className, ...props }) => (\n <ul\n className={clsx(\"my-2 list-disc pl-6 marker:text-on-surface-variant\", body, className)}\n {...props}\n />\n ),\n ol: ({ node: _node, className, ...props }) => (\n <ol\n className={clsx(\"my-2 list-decimal pl-6 marker:text-on-surface-variant\", body, className)}\n {...props}\n />\n ),\n li: ({ node: _node, className, ...props }) => (\n <li className={clsx(\"my-1\", className)} {...props} />\n ),\n blockquote: ({ node: _node, className, ...props }) => (\n <blockquote\n className={clsx(\n \"my-3 border-l-4 border-outline-variant pl-4 text-on-surface-variant\",\n className,\n )}\n {...props}\n />\n ),\n code: ({ node: _node, className, ...props }) => (\n <code\n className={clsx(\n \"rounded-extra-small bg-surface-container-highest px-1 py-0.5 font-code text-[0.9em] text-on-surface\",\n className,\n )}\n {...props}\n />\n ),\n pre: ({ node: _node, children, className, style }) => (\n <CodeBlock className={className} style={style}>\n {children}\n </CodeBlock>\n ),\n hr: ({ node: _node, className, ...props }) => (\n <hr className={clsx(\"my-4 border-outline-variant\", className)} {...props} />\n ),\n table: ({ node: _node, className, ...props }) => (\n <div className=\"my-3 overflow-x-auto rounded-small border border-outline-variant\">\n <table className={clsx(\"w-full border-collapse\", body, className)} {...props} />\n </div>\n ),\n thead: ({ node: _node, className, ...props }) => (\n <thead className={clsx(\"bg-surface-container\", className)} {...props} />\n ),\n th: ({ node: _node, className, ...props }) => (\n <th\n className={clsx(\n \"border-b border-outline-variant px-3 py-2 text-left text-title-small text-on-surface\",\n className,\n )}\n {...props}\n />\n ),\n td: ({ node: _node, className, ...props }) => (\n <td\n className={clsx(\"border-t border-outline-variant px-3 py-2 text-on-surface\", className)}\n {...props}\n />\n ),\n img: ({ node: _node, className, alt, ...props }) => (\n <img\n className={clsx(\"my-2 max-w-full rounded-medium\", className)}\n alt={alt ?? \"\"}\n {...props}\n />\n ),\n input: ({ node: _node, className, ...props }) => (\n <input className={clsx(\"mr-2 accent-primary\", className)} {...props} />\n ),\n div: ({ node: _node, className, children, ...props }) => {\n if (className?.includes(\"math-block\")) {\n const math =\n (props as Record<string, any>)[\"data-math\"] ?? extractText(children);\n return <BlockMath math={math} className={className} />;\n }\n return (\n <div className={className} {...props}>\n {children}\n </div>\n );\n },\n span: ({ node: _node, className, children, ...props }) => {\n if (className?.includes(\"math-inline\")) {\n const math =\n (props as Record<string, any>)[\"data-math\"] ?? extractText(children);\n return <InlineMath math={math} className={className} />;\n }\n return (\n <span className={className} {...props}>\n {children}\n </span>\n );\n },\n };\n}\n\nconst Markdown = forwardRef<HTMLDivElement, MarkdownProps>(\n ({ content, className, size = \"medium\", allowHtml = false }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\"markdown min-w-0 text-on-surface\", bodyClass[size], className)}\n >\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkMathPlugin]}\n rehypePlugins={allowHtml ? [rehypeRaw] : undefined}\n components={m3Components(size)}\n >\n {content}\n </ReactMarkdown>\n </div>\n );\n },\n);\n\nMarkdown.displayName = \"Markdown\";\n\nexport { Markdown };\nexport type { MarkdownProps };\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/MessageBubble.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport { CircleButton } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { Markdown } from \"./Markdown\";\n\nexport interface MessageBubbleProps {\n content: string;\n isUser: boolean;\n isStreaming?: boolean;\n onCopy?: (content: string) => void;\n onDislike?: (content: string) => void;\n onFork?: () => void;\n variant?: \"default\" | \"codex\";\n className?: string;\n}\n\n/**\n * One chat turn. The user turn is an M3 bubble, the assistant turn is plain markdown\n * on the surface, as in M3 / Codex conversations.\n */\nexport function MessageBubble({\n content,\n isUser,\n isStreaming = false,\n onCopy,\n onDislike,\n onFork,\n variant = \"default\",\n className,\n}: MessageBubbleProps) {\n const isCodex = variant === \"codex\";\n\n return (\n <div\n className={clsx(\"group flex flex-col py-1.5 w-full\", isUser ? \"items-end\" : \"items-start\", className)}\n >\n <div\n className={clsx(\n \"min-w-0\",\n isUser\n ? isCodex\n ? \"max-w-[75%] rounded-[28px] bg-surface-container-high px-5 py-3 text-body-large text-on-surface shadow-xs\"\n : \"max-w-[80%] rounded-large rounded-br-extra-small bg-secondary-container px-4 py-2.5 text-body-large text-on-secondary-container\"\n : \"w-full max-w-full bg-transparent text-body-large text-on-surface\",\n )}\n aria-busy={isStreaming || undefined}\n >\n {isUser ? (\n <div className=\"whitespace-pre-wrap break-words\">{content}</div>\n ) : (\n <Markdown content={content} size=\"large\" className=\"break-words font-sans\" />\n )}\n </div>\n {!isUser && (onCopy || onDislike || onFork) ? (\n <div className=\"mt-1.5 flex items-center gap-1 opacity-0 transition-opacity duration-200 ease-standard group-focus-within:opacity-100 group-hover:opacity-100\">\n {onCopy && (\n <CircleButton\n icon=\"content_copy\"\n variant=\"standard\"\n size=\"sm\"\n onClick={() => onCopy(content)}\n aria-label={isStreaming ? \"Copy Streaming Message\" : \"Copy Message\"}\n title={isStreaming ? \"Copy streaming message\" : \"Copier\"}\n />\n )}\n {onDislike && (\n <CircleButton\n icon=\"thumb_down\"\n variant=\"standard\"\n size=\"sm\"\n onClick={() => onDislike(content)}\n aria-label=\"Dislike\"\n title=\"Je n'aime pas\"\n />\n )}\n {onFork && (\n <CircleButton\n icon=\"call_split\"\n variant=\"standard\"\n size=\"sm\"\n onClick={onFork}\n aria-label=\"Fork\"\n title=\"Bifurquer à partir de ce tour\"\n />\n )}\n </div>\n ) : null}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/InlineWorkerCard.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useMemo, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Button, Icon } from \"@aphrody/m3-primitives\";\nimport { ToolCall } from \"./ToolCall\";\nimport { Markdown } from \"./Markdown\";\nimport type { TranscriptStep } from \"./types\";\nimport { pairTranscriptSteps } from \"./types\";\nimport { CircularIndicator, StatusChip, type ChipTone, expandMotion, focusRing } from \"./internal\";\n\n/** Collapse runs of 3+ spaces to 2, preventing Markdown 4-space code blocks. */\nfunction stripExcessWhitespace(text: string): string {\n return text.replace(/ {3,}/g, \" \");\n}\n\ninterface InlineWorkerCardProps {\n title: string;\n status: string;\n toolCallCount: number;\n liveStatus?: string | null;\n transcript: TranscriptStep[];\n isTranscriptLoading?: boolean;\n onCopyLogs?: () => void;\n onCancel?: () => void;\n className?: string;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n}\n\nfunction statusTone(status: string): ChipTone {\n switch (status) {\n case \"running\":\n return \"primary\";\n case \"completed\":\n return \"success\";\n case \"failed\":\n case \"error\":\n case \"cancelled\":\n return \"error\";\n default:\n return \"neutral\";\n }\n}\n\n/** A worker run as an M3 filled card: header, status chip, expandable transcript. */\nfunction InlineWorkerCard({\n title,\n status,\n toolCallCount,\n liveStatus,\n transcript,\n isTranscriptLoading,\n onCopyLogs,\n onCancel,\n className,\n defaultExpanded = false,\n}: InlineWorkerCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const contentId = useId();\n\n const items = useMemo(() => pairTranscriptSteps(transcript), [transcript]);\n\n const isRunning = status === \"running\";\n const isDone = status === \"completed\";\n const tone = statusTone(status);\n\n return (\n <div className={clsx(\"group flex min-w-0 flex-col items-start\", className)}>\n <div className=\"min-w-0 max-w-full overflow-hidden rounded-medium bg-surface-container text-on-surface\">\n <button\n type=\"button\"\n onClick={() => setExpanded((v) => !v)}\n aria-expanded={expanded}\n aria-controls={contentId}\n className={clsx(\n \"flex w-full items-start gap-3 rounded-medium px-4 py-3 text-left transition-colors duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <div className=\"flex size-8 shrink-0 items-center justify-center\">\n {isRunning ? (\n <CircularIndicator size={20} label=\"Worker running\" />\n ) : isDone ? (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-success-container text-on-success-container\">\n <Icon name=\"check_circle\" size={18} filled />\n </div>\n ) : tone === \"error\" ? (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-error-container text-on-error-container\">\n <Icon name=\"error\" size={18} filled />\n </div>\n ) : (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-surface-container-highest text-on-surface-variant\">\n <Icon name=\"build\" size={18} />\n </div>\n )}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <div className=\"line-clamp-2 min-w-0 flex-1 text-title-small text-on-surface\">\n {title}\n </div>\n <StatusChip tone={tone}>{status}</StatusChip>\n </div>\n <div className=\"mt-1 flex items-center gap-2 text-body-small text-on-surface-variant\">\n <span>{toolCallCount} tool calls</span>\n {liveStatus ? <span className=\"truncate text-outline\">{liveStatus}</span> : null}\n </div>\n </div>\n\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"mt-1.5 shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded ? \"rotate-180\" : \"\",\n )}\n />\n </button>\n\n <AnimatePresence initial={false}>\n {expanded ? (\n <motion.div\n id={contentId}\n key=\"transcript\"\n {...expandMotion}\n className=\"overflow-hidden\"\n >\n <div className=\"flex flex-col gap-2 border-t border-outline-variant px-4 py-3\">\n {isTranscriptLoading ? (\n <div className=\"flex items-center gap-2 text-body-small text-on-surface-variant\">\n <CircularIndicator size={16} label=\"Loading transcript\" />\n Loading worker transcript...\n </div>\n ) : items.length > 0 ? (\n items.map((item) =>\n item.kind === \"tool\" ? (\n <ToolCall key={item.pair.id} pair={item.pair} />\n ) : (\n <Markdown\n key={`text-${item.text}`}\n content={stripExcessWhitespace(item.text)}\n size=\"small\"\n className=\"text-on-surface-variant\"\n />\n ),\n )\n ) : (\n <div className=\"text-body-small text-on-surface-variant\">No tool calls yet.</div>\n )}\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n\n {(onCopyLogs || (onCancel && isRunning)) && (\n <div className=\"mt-1 flex gap-1 opacity-0 transition-opacity duration-200 ease-standard group-focus-within:opacity-100 group-hover:opacity-100\">\n {onCopyLogs && (\n <Button variant=\"text\" size=\"xs\" onClick={onCopyLogs} title=\"Copy logs\">\n <Icon name=\"content_copy\" size={18} />\n Copy\n </Button>\n )}\n {onCancel && isRunning && (\n <Button variant=\"text\" size=\"xs\" onClick={onCancel} title=\"Cancel\">\n <Icon name=\"stop\" size={18} />\n Cancel\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { InlineWorkerCard };\nexport type { InlineWorkerCardProps };\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/InlineBranchCard.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { Markdown } from \"./Markdown\";\nimport { CircularIndicator, StatusChip, expandMotion, focusRing } from \"./internal\";\n\ninterface InlineBranchCardProps {\n description: string;\n completedAt: string | null;\n conclusion?: string | null;\n className?: string;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n}\n\n/** A thinking branch as an M3 filled card: header, status chip, expandable conclusion. */\nfunction InlineBranchCard({\n description,\n completedAt,\n conclusion,\n className,\n defaultExpanded = false,\n}: InlineBranchCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const isRunning = !completedAt;\n const contentId = useId();\n const canExpand = !!conclusion;\n\n return (\n <div className={clsx(\"group flex min-w-0 flex-col items-start\", className)}>\n <div className=\"min-w-0 max-w-full overflow-hidden rounded-medium bg-surface-container text-on-surface\">\n <button\n type=\"button\"\n onClick={() => canExpand && setExpanded((v) => !v)}\n aria-expanded={canExpand ? expanded : undefined}\n aria-controls={canExpand ? contentId : undefined}\n className={clsx(\n \"flex w-full items-start gap-3 rounded-medium px-4 py-3 text-left transition-colors duration-200 ease-standard\",\n canExpand && \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <div className=\"flex size-8 shrink-0 items-center justify-center\">\n {isRunning ? (\n <CircularIndicator size={20} label=\"Thinking\" />\n ) : (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-primary-container text-on-primary-container\">\n <Icon name=\"alt_route\" size={18} />\n </div>\n )}\n </div>\n <div className=\"min-w-0 flex-1 self-center\">\n <div className=\"flex items-center gap-2\">\n <div className=\"line-clamp-2 min-w-0 flex-1 text-title-small text-on-surface\">\n {description}\n </div>\n <StatusChip tone={isRunning ? \"primary\" : \"success\"}>\n {isRunning ? \"thinking\" : \"done\"}\n </StatusChip>\n </div>\n </div>\n {canExpand && (\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"mt-1.5 shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded ? \"rotate-180\" : \"\",\n )}\n />\n )}\n </button>\n <AnimatePresence initial={false}>\n {expanded && conclusion ? (\n <motion.div\n id={contentId}\n key=\"conclusion\"\n {...expandMotion}\n className=\"overflow-hidden\"\n >\n <div className=\"border-t border-outline-variant px-4 py-3\">\n <Markdown content={conclusion} size=\"small\" className=\"text-on-surface-variant\" />\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n </div>\n );\n}\n\nexport { InlineBranchCard };\nexport type { InlineBranchCardProps };\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ModelSelector.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport {\n Icon,\n Popover,\n usePopover,\n SelectPill,\n type SelectPillProps,\n} from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport type { ModelOption } from \"./types\";\n\nexport interface ModelSelectorProps {\n /** Available models */\n models: ModelOption[];\n /** Currently selected model ID */\n value: string;\n /** Called when a model is selected */\n onChange: (value: string) => void;\n /** Placeholder when nothing selected */\n placeholder?: string;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** SelectPill variant */\n variant?: SelectPillProps[\"variant\"];\n /** SelectPill size */\n size?: SelectPillProps[\"size\"];\n /** Controlled popover (optional) */\n popover?: ReturnType<typeof usePopover>;\n /** Additional trigger className */\n className?: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\n/** Group models by provider, keeping the order of first appearance. */\nexport function groupModelsByProvider(\n models: ModelOption[],\n search = \"\",\n): Record<string, ModelOption[]> {\n const q = search.trim().toLowerCase();\n const filtered = q\n ? models.filter((m) => m.name.toLowerCase().includes(q) || m.provider.toLowerCase().includes(q))\n : models;\n\n return filtered.reduce(\n (acc, model) => {\n if (!acc[model.provider]) acc[model.provider] = [];\n acc[model.provider].push(model);\n return acc;\n },\n {} as Record<string, ModelOption[]>,\n );\n}\n\nexport interface ModelOptionListProps {\n /** Models grouped by provider (see {@link groupModelsByProvider}). */\n grouped: Record<string, ModelOption[]>;\n /** Currently selected model ID */\n value: string;\n /** Called when a model is picked */\n onSelect: (value: string) => void;\n className?: string;\n}\n\n/**\n * The M3 menu list of the model selector: provider section headers (`text-title-small`),\n * 48 dp two-line items (`text-label-large` + `text-body-small` supporting text), the selected\n * item on `secondary-container`, capabilities as small outlined chips.\n */\nexport function ModelOptionList({ grouped, value, onSelect, className }: ModelOptionListProps) {\n const providers = Object.entries(grouped);\n return (\n <div\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu whose options are rich rows (headers, supporting text, chips); a native <select>/<datalist> cannot render them.\n role=\"listbox\"\n aria-label=\"Models\"\n className={clsx(\"flex flex-col\", className)}\n >\n {providers.map(([provider, providerModels], groupIndex) => (\n <div\n key={provider}\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- provider section of the custom listbox with a visible M3 header row; <optgroup> only exists inside a native <select>.\n role=\"group\"\n aria-label={provider}\n className={clsx(groupIndex > 0 && \"mt-1 border-t border-outline-variant pt-1\")}\n >\n <div className=\"px-3 pt-2 pb-1 text-title-small text-on-surface-variant\">{provider}</div>\n {providerModels.map((model) => {\n const selected = model.id === value;\n return (\n <button\n key={model.id}\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 two-line menu item (label, supporting text, capability chips, check icon); a native <option> can only hold text.\n role=\"option\"\n aria-selected={selected}\n onClick={() => onSelect(model.id)}\n className={clsx(\n \"flex min-h-12 w-full items-center gap-3 px-3 py-2 text-left\",\n \"transition-colors duration-200 ease-standard\",\n selected\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"text-on-surface hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-label-large\">{model.name}</div>\n {model.context_window || model.capabilities?.length ? (\n <div className=\"mt-0.5 flex flex-wrap items-center gap-1\">\n {model.context_window ? (\n <span\n className={clsx(\n \"text-body-small\",\n selected ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {model.context_window.toLocaleString()} tokens\n </span>\n ) : null}\n {model.capabilities?.map((capability) => (\n <span\n key={capability}\n className={clsx(\n \"inline-flex h-5 items-center rounded-small border border-outline-variant px-1.5 text-label-small\",\n selected ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {capability}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n {selected && <Icon name=\"check\" size={20} className=\"shrink-0\" />}\n </button>\n );\n })}\n </div>\n ))}\n {providers.length === 0 && (\n <div className=\"px-3 py-3 text-center text-body-small text-on-surface-variant\">\n No models found\n </div>\n )}\n </div>\n );\n}\n\n/**\n * The menu's search field. It mounts with the popover content and takes focus then (replaces\n * `autoFocus`), so typing filters the list as soon as the menu opens.\n */\nfunction ModelSearchField({\n value,\n onChange,\n placeholder,\n}: {\n value: string;\n onChange: (value: string) => void;\n placeholder: string;\n}) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n return (\n <div className=\"px-2 pb-2\">\n <label className=\"flex h-10 items-center gap-2 rounded-full bg-surface-container-high px-3 text-on-surface-variant focus-within:bg-surface-container-highest\">\n <Icon name=\"search\" size={20} className=\"shrink-0\" />\n <input\n ref={inputRef}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n placeholder={placeholder}\n aria-label={placeholder}\n className=\"min-w-0 flex-1 bg-transparent text-body-large text-on-surface outline-none placeholder:text-on-surface-variant\"\n />\n </label>\n </div>\n );\n}\n\nexport const ModelSelector = forwardRef<HTMLButtonElement, ModelSelectorProps>(\n (\n {\n models,\n value,\n onChange,\n placeholder = \"Select model...\",\n searchPlaceholder = \"Search models...\",\n variant,\n size,\n popover: externalPopover,\n className,\n disabled,\n },\n ref,\n ) => {\n const internalPopover = usePopover();\n const popover = externalPopover ?? internalPopover;\n const [search, setSearch] = useState(\"\");\n\n const selectedModel = models.find((m) => m.id === value);\n\n const grouped = useMemo(() => groupModelsByProvider(models, search), [models, search]);\n\n return (\n <Popover.Root\n open={popover.open}\n onOpenChange={(open) => {\n popover.setOpen(open);\n if (!open) setSearch(\"\");\n }}\n >\n <Popover.Trigger asChild>\n <SelectPill\n ref={ref}\n variant={variant}\n size={size}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n className={clsx(\"w-full\", className)}\n >\n {selectedModel?.name ?? placeholder}\n </SelectPill>\n </Popover.Trigger>\n <Popover.Content\n align=\"end\"\n sideOffset={8}\n style={{ width: 280 }}\n className=\"overflow-hidden rounded-extra-small! py-2\"\n >\n {/* Search */}\n <ModelSearchField value={search} onChange={setSearch} placeholder={searchPlaceholder} />\n\n {/* Grouped results */}\n <div className=\"max-h-[320px] overflow-y-auto\">\n <ModelOptionList\n grouped={grouped}\n value={value}\n onSelect={(id) => {\n onChange(id);\n popover.setOpen(false);\n setSearch(\"\");\n }}\n />\n </div>\n </Popover.Content>\n </Popover.Root>\n );\n },\n);\n\nModelSelector.displayName = \"ModelSelector\";\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ChatComposer.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport { CircleButton, Icon, Popover, SelectPill, usePopover } from \"@aphrody/m3-primitives\";\nimport { m3Durations, m3Easings } from \"@aphrody/m3-motion\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { type ReactNode } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport { ModelSelector } from \"./ModelSelector\";\nimport type { ModelOption } from \"./types\";\n\nexport interface ChatComposerProps {\n /** Current draft text */\n draft: string;\n /** Called when draft changes */\n onDraftChange: (value: string) => void;\n /** Called when user hits send (Enter or send button) */\n onSend: () => void;\n /** Placeholder for the textarea */\n placeholder?: string;\n /** Show an optional heading above the composer */\n heading?: ReactNode;\n /** Disable the composer — draft can still change, but send/voice are blocked */\n isSending?: boolean;\n /** Project selector config — omit to hide */\n projectSelector?: {\n value: string;\n options: string[];\n onChange: (project: string) => void;\n popover: ReturnType<typeof usePopover>;\n };\n /** Model selector config — omit to hide */\n modelSelector?: {\n value: string;\n options: ModelOption[];\n onChange: (model: string) => void;\n };\n /** Voice button handler — omit to hide */\n onOpenVoice?: () => void;\n /** Optional content rendered at the far right of the toolbar (before send) */\n toolbarExtra?: ReactNode;\n /** Stop handler: while `isSending`, the send button becomes an M3 `stop` icon button. */\n onStop?: () => void;\n /** Additional className on the composer container */\n className?: string;\n}\n\nconst iconButtonEnter = {\n initial: { scale: 0.6, opacity: 0 },\n animate: {\n scale: 1,\n opacity: 1,\n transition: { duration: m3Durations.short4, ease: m3Easings.emphasizedDecelerate },\n },\n exit: {\n scale: 0.6,\n opacity: 0,\n transition: { duration: m3Durations.short3, ease: m3Easings.emphasizedAccelerate },\n },\n} as const;\n\n/**\n * Generic chat composer on the M3 search-bar anatomy: a `surface-container-high` container with\n * the extra-large (28 dp) shape, a `text-body-large` expanding textarea, an optional project\n * pill, model selector chip, a standard mic icon button and a filled send / stop icon button.\n */\nexport function ChatComposer({\n draft,\n onDraftChange,\n onSend,\n placeholder = \"Ask something...\",\n heading,\n isSending = false,\n projectSelector,\n modelSelector,\n onOpenVoice,\n toolbarExtra,\n onStop,\n className,\n}: ChatComposerProps) {\n const canSend = !isSending && draft.trim().length > 0;\n const showStop = isSending && !!onStop;\n\n return (\n <>\n {heading && (\n <div className=\"mb-3 flex items-center gap-2 px-1 text-title-small text-on-surface-variant\">\n <Icon name=\"auto_awesome\" size={18} filled className=\"text-primary\" />\n {heading}\n </div>\n )}\n\n <div\n className={clsx(\n \"m3-chat-composer rounded-extra-large bg-surface-container-high px-4 pt-3 pb-2 text-on-surface\",\n \"transition-colors duration-200 ease-standard focus-within:bg-surface-container-highest\",\n className,\n )}\n >\n <textarea\n value={draft}\n onChange={(event) => onDraftChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n onSend();\n }\n }}\n placeholder={placeholder}\n aria-label={placeholder}\n rows={2}\n className=\"block w-full resize-none border-0 bg-transparent px-1 text-body-large text-on-surface caret-primary outline-none placeholder:text-on-surface-variant focus:outline-none focus:ring-0\"\n />\n\n <div className=\"mt-2 flex items-center justify-between gap-2\">\n {projectSelector ? (\n <div className=\"w-[210px]\">\n <Popover.Root\n open={projectSelector.popover.open}\n onOpenChange={projectSelector.popover.setOpen}\n >\n <Popover.Trigger asChild>\n <SelectPill className=\"w-full\" aria-haspopup=\"listbox\">\n {projectSelector.value}\n </SelectPill>\n </Popover.Trigger>\n <Popover.Content\n align=\"start\"\n sideOffset={8}\n className=\"min-w-[210px] overflow-hidden rounded-extra-small! py-2\"\n >\n <div\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu in a popover with icon rows; a native <select>/<datalist> cannot render it.\n role=\"listbox\"\n aria-label=\"Projects\"\n >\n {projectSelector.options.map((option) => {\n const selected = option === projectSelector.value;\n return (\n <button\n key={option}\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu item with a check icon and state layer; a native <option> can only hold text.\n role=\"option\"\n aria-selected={selected}\n onClick={() => {\n projectSelector.onChange(option);\n projectSelector.popover.setOpen(false);\n }}\n className={clsx(\n \"flex h-12 w-full items-center gap-3 px-3 text-left text-label-large\",\n \"transition-colors duration-200 ease-standard\",\n selected\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"text-on-surface hover:bg-on-surface/8\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">{option}</span>\n {selected && <Icon name=\"check\" size={20} />}\n </button>\n );\n })}\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n ) : (\n <div />\n )}\n\n <motion.div layout className=\"flex items-center gap-1\">\n {modelSelector && (\n <div className=\"w-[180px]\">\n <ModelSelector\n models={modelSelector.options}\n value={modelSelector.value}\n onChange={modelSelector.onChange}\n size=\"md\"\n />\n </div>\n )}\n\n {toolbarExtra}\n\n {onOpenVoice && (\n <CircleButton\n icon=\"mic\"\n variant=\"standard\"\n onClick={onOpenVoice}\n disabled={isSending}\n aria-label=\"Open Voice Input\"\n />\n )}\n\n <AnimatePresence initial={false} mode=\"popLayout\">\n {showStop ? (\n <motion.button\n key=\"stop\"\n type=\"button\"\n {...iconButtonEnter}\n onClick={onStop}\n aria-label=\"Stop\"\n className={clsx(\n \"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary text-on-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/92 active:bg-primary/90\",\n focusRing,\n )}\n >\n <Icon name=\"stop\" size={24} filled />\n </motion.button>\n ) : canSend ? (\n <motion.button\n key=\"send\"\n type=\"button\"\n {...iconButtonEnter}\n onClick={onSend}\n aria-label=\"Send\"\n className={clsx(\n \"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary text-on-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/92 active:bg-primary/90\",\n focusRing,\n )}\n >\n <Icon name=\"arrow_upward\" size={24} />\n </motion.button>\n ) : null}\n </AnimatePresence>\n </motion.div>\n </div>\n </div>\n </>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskStatusIcon.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport type { TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL } from \"./types\";\n\n/** Material Symbols glyph and M3 color role per status. */\nconst config: Record<TaskStatus, { icon: string; filled: boolean; color: string }> = {\n done: { icon: \"check_circle\", filled: true, color: \"text-success\" },\n in_progress: { icon: \"clock_loader_40\", filled: true, color: \"text-primary\" },\n ready: { icon: \"radio_button_checked\", filled: false, color: \"text-primary\" },\n pending_approval: { icon: \"schedule\", filled: false, color: \"text-warning\" },\n backlog: { icon: \"radio_button_unchecked\", filled: false, color: \"text-outline\" },\n};\n\nexport interface TaskStatusIconProps {\n status: TaskStatus;\n size?: number;\n className?: string;\n /** Accessible label; defaults to the status label. Pass `\"\"` for a decorative icon. */\n label?: string;\n}\n\nexport function TaskStatusIcon({ status, size = 16, className, label }: TaskStatusIconProps) {\n const { icon, filled, color } = config[status];\n return (\n <Icon\n name={icon}\n size={size}\n filled={filled}\n label={label ?? TASK_STATUS_LABEL[status]}\n data-status={status}\n className={clsx(color, className)}\n />\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskPriorityIcon.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport type { TaskPriority } from \"./types\";\nimport { TASK_PRIORITY_LABEL } from \"./types\";\n\n/** Material Symbols glyph and M3 color role per priority. */\nconst config: Record<TaskPriority, { icon: string; filled: boolean; color: string }> = {\n critical: { icon: \"priority_high\", filled: true, color: \"text-error\" },\n high: { icon: \"keyboard_double_arrow_up\", filled: false, color: \"text-warning\" },\n medium: { icon: \"drag_handle\", filled: false, color: \"text-primary\" },\n low: { icon: \"keyboard_arrow_down\", filled: false, color: \"text-outline\" },\n};\n\nexport interface TaskPriorityIconProps {\n priority: TaskPriority;\n size?: number;\n className?: string;\n /** Accessible label; defaults to the priority label. Pass `\"\"` for a decorative icon. */\n label?: string;\n}\n\nexport function TaskPriorityIcon({ priority, size = 14, className, label }: TaskPriorityIconProps) {\n const { icon, filled, color } = config[priority];\n return (\n <Icon\n name={icon}\n size={size}\n filled={filled}\n weight={600}\n label={label ?? `${TASK_PRIORITY_LABEL[priority]} priority`}\n data-priority={priority}\n className={clsx(color, className)}\n />\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskRow.tsx), MIT, rebuilt on Material Design 3.\n\nimport { DropdownMenu, Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { focusRing } from \"./internal\";\nimport { TaskPriorityIcon } from \"./TaskPriorityIcon\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskRowProps {\n task: Task;\n onClick?: (task: Task) => void;\n isActive?: boolean;\n resolveAgentName?: (agentId: string) => string;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onDelete?: (task: Task) => void;\n className?: string;\n}\n\n/** Column template shared with the {@link TaskList} header. */\nexport const TASK_ROW_GRID = \"20px 18px 72px 1fr 56px 96px 40px\";\n\n/** M3 list item height at desktop density (56 dp baseline, two density steps). */\nexport const TASK_ROW_HEIGHT = 48;\n\n/**\n * A task as a dense M3 list item: leading status and priority icons, `text-body-large` headline,\n * `text-body-small` supporting columns, `on-surface` 8 % hover, `secondary-container` selection\n * and a trailing overflow-menu icon button.\n */\nexport function TaskRow({\n task,\n onClick,\n isActive,\n resolveAgentName,\n onStatusChange,\n onDelete,\n className,\n}: TaskRowProps) {\n const completedSubtasks = task.subtasks.filter((s) => s.completed).length;\n const assigneeName = resolveAgentName?.(task.assigned_agent_id) ?? task.assigned_agent_id;\n const hasActions = onStatusChange || onDelete;\n const isRowInteractive = typeof onClick === \"function\";\n const handleRowKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.repeat) return;\n if (e.key === \"Enter\") {\n e.preventDefault();\n onClick?.(task);\n }\n };\n const handleRowKeyUp = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.repeat) return;\n if (e.key === \" \") {\n e.preventDefault();\n onClick?.(task);\n }\n };\n\n const rowClassName = clsx(\n \"task-row group grid w-full items-center border-b border-outline-variant text-left\",\n \"transition-colors duration-200 ease-standard\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n isActive\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"bg-transparent text-on-surface hover:bg-on-surface/8\",\n isRowInteractive && !isActive && \"active:bg-on-surface/10\",\n className,\n );\n const rowStyle: React.CSSProperties = {\n gridTemplateColumns: TASK_ROW_GRID,\n minHeight: TASK_ROW_HEIGHT,\n paddingLeft: 16,\n paddingRight: 8,\n gap: 12,\n };\n\n const content = (\n <>\n <TaskStatusIcon status={task.status} size={20} />\n <TaskPriorityIcon priority={task.priority} size={18} />\n\n <span\n className={clsx(\n \"truncate font-code text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n SPC-{task.task_number}\n </span>\n\n <span className=\"min-w-0 truncate text-body-large\">{task.title}</span>\n\n <span\n className={clsx(\n \"text-right text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {task.subtasks.length > 0 ? `${completedSubtasks}/${task.subtasks.length}` : \"\"}\n </span>\n\n <span\n className={clsx(\n \"truncate text-right text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {assigneeName}\n </span>\n\n <span className=\"flex items-center justify-center\">\n {hasActions ? (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n aria-label=\"Task Actions\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") e.stopPropagation();\n }}\n className={clsx(\n \"flex size-8 items-center justify-center rounded-full text-on-surface-variant\",\n \"opacity-0 transition-[opacity,background-color] duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n \"group-hover:opacity-100 group-focus-within:opacity-100 focus-visible:opacity-100 data-popup-open:opacity-100\",\n focusRing,\n )}\n >\n <Icon name=\"more_vert\" size={20} />\n </button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\" sideOffset={4}>\n {onStatusChange &&\n TASK_STATUS_ORDER.filter((s) => s !== task.status).map((s) => (\n <DropdownMenu.Item\n key={s}\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onStatusChange(task, s);\n }}\n >\n <TaskStatusIcon status={s} size={20} label=\"\" />\n <span>{TASK_STATUS_LABEL[s]}</span>\n </DropdownMenu.Item>\n ))}\n {onStatusChange && onDelete && <DropdownMenu.Separator />}\n {onDelete && (\n <DropdownMenu.Item\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete(task);\n }}\n className=\"text-error\"\n >\n <Icon name=\"delete\" size={20} />\n <span>Delete</span>\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : null}\n </span>\n </>\n );\n\n if (!isRowInteractive) {\n return (\n <div aria-current={isActive ? \"true\" : undefined} className={rowClassName} style={rowStyle}>\n {content}\n </div>\n );\n }\n\n return (\n <div\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- the row hosts the overflow-menu <button>; a native <button> row would nest interactive content.\n role=\"button\"\n tabIndex={0}\n aria-current={isActive ? \"true\" : undefined}\n onClick={() => onClick(task)}\n onKeyDown={handleRowKeyDown}\n onKeyUp={handleRowKeyUp}\n className={rowClassName}\n style={rowStyle}\n >\n {content}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskList.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger, Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { useMemo } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport { TASK_ROW_GRID, TaskRow } from \"./TaskRow\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskListProps {\n tasks: Task[];\n groups?: TaskStatus[];\n collapsedGroups?: Set<TaskStatus>;\n onToggleGroup?: (status: TaskStatus) => void;\n activeTaskId?: string;\n onTaskClick: (task: Task) => void;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onDelete?: (task: Task) => void;\n resolveAgentName?: (agentId: string) => string;\n className?: string;\n}\n\nconst GRID_STYLE = {\n gridTemplateColumns: TASK_ROW_GRID,\n paddingLeft: 16,\n paddingRight: 8,\n gap: 12,\n} as const;\n\n/**\n * Tasks grouped by status as an M3 list: a column header in `text-label-medium`, collapsible\n * section headers in `text-title-small`, `outline-variant` dividers.\n */\nexport function TaskList({\n tasks,\n groups = TASK_STATUS_ORDER,\n collapsedGroups,\n onToggleGroup,\n activeTaskId,\n onTaskClick,\n onStatusChange,\n onDelete,\n resolveAgentName,\n className,\n}: TaskListProps) {\n const grouped = useMemo(() => {\n const map = new Map<TaskStatus, Task[]>();\n for (const status of groups) map.set(status, []);\n for (const task of tasks) {\n const bucket = map.get(task.status);\n if (bucket) bucket.push(task);\n }\n return map;\n }, [tasks, groups]);\n\n return (\n <div className={clsx(\"flex flex-col bg-surface text-on-surface\", className)}>\n {/* Column header */}\n <div\n className=\"grid items-center border-b border-outline-variant text-label-medium text-on-surface-variant\"\n style={{ ...GRID_STYLE, height: 32 }}\n >\n <span />\n <span />\n <span>ID</span>\n <span>Title</span>\n <span className=\"text-right\">Subs</span>\n <span className=\"text-right\">Assignee</span>\n <span />\n </div>\n\n {/* Groups */}\n {groups.map((status) => {\n const items = grouped.get(status) ?? [];\n const isOpen = !collapsedGroups?.has(status);\n\n return (\n <Collapsible key={status} open={isOpen} onOpenChange={() => onToggleGroup?.(status)}>\n <CollapsibleTrigger\n className={clsx(\n \"grid w-full items-center rounded-none border-b border-outline-variant bg-surface-container-low\",\n \"text-title-small text-on-surface transition-colors duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n style={{ ...GRID_STYLE, height: 40 }}\n >\n <span className=\"flex items-center justify-center text-on-surface-variant\">\n <Icon\n name=\"chevron_right\"\n size={20}\n className={clsx(\n \"shrink-0 transition-transform duration-300 ease-emphasized\",\n isOpen && \"rotate-90\",\n )}\n />\n </span>\n <span className=\"flex items-center justify-center\">\n <TaskStatusIcon status={status} size={18} label=\"\" />\n </span>\n <span className=\"col-span-5 flex items-center gap-1.5 text-left\">\n {TASK_STATUS_LABEL[status]}\n <span className=\"text-body-small text-on-surface-variant\">({items.length})</span>\n </span>\n </CollapsibleTrigger>\n\n <CollapsibleContent>\n {items.length > 0 ? (\n items.map((task) => (\n <TaskRow\n key={task.id}\n task={task}\n isActive={task.id === activeTaskId}\n onClick={onTaskClick}\n onStatusChange={onStatusChange}\n onDelete={onDelete}\n resolveAgentName={resolveAgentName}\n />\n ))\n ) : (\n <div className=\"border-b border-outline-variant px-4 py-3 text-body-small text-on-surface-variant\">\n No tasks\n </div>\n )}\n </CollapsibleContent>\n </Collapsible>\n );\n })}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskDetail.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Button, CircleButton, Icon, Select, SelectOption } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { focusRing } from \"./internal\";\nimport { Markdown } from \"./Markdown\";\nimport { TaskPriorityIcon } from \"./TaskPriorityIcon\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_PRIORITY_LABEL, TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskDetailProps {\n task: Task;\n resolveAgentName?: (agentId: string) => string;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onSubtaskToggle?: (task: Task, index: number, completed: boolean) => void;\n onDelete?: (task: Task) => void;\n onClose?: () => void;\n className?: string;\n}\n\nfunction formatDate(iso: string) {\n return new Date(iso).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nfunction Property({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"text-label-medium text-on-surface-variant\">{label}</span>\n <span className=\"flex min-h-8 items-center gap-1.5 text-body-medium text-on-surface\">\n {children}\n </span>\n </div>\n );\n}\n\n/**\n * A task on an M3 surface: `text-headline-small` title, a property grid, subtasks as an M3 list\n * with checkboxes, markdown description, and actions as M3 buttons (filled for the primary\n * transition, text for the others).\n */\nexport function TaskDetail({\n task,\n resolveAgentName,\n onStatusChange,\n onSubtaskToggle,\n onDelete,\n onClose,\n className,\n}: TaskDetailProps) {\n const ownerName = resolveAgentName?.(task.owner_agent_id) ?? task.owner_agent_id;\n const assigneeName = resolveAgentName?.(task.assigned_agent_id) ?? task.assigned_agent_id;\n const completedCount = task.subtasks.filter((s) => s.completed).length;\n\n return (\n <div className={clsx(\"flex flex-col gap-6 bg-surface p-6 text-on-surface\", className)}>\n {/* Header */}\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex flex-1 items-center gap-2\">\n <TaskStatusIcon status={task.status} size={20} />\n <TaskPriorityIcon priority={task.priority} size={18} />\n <span className=\"font-code text-body-small text-on-surface-variant\">\n SPC-{task.task_number}\n </span>\n </div>\n {onClose && (\n <CircleButton icon=\"close\" variant=\"standard\" onClick={onClose} aria-label=\"Close\" />\n )}\n </div>\n <h2 className=\"text-headline-small text-on-surface\">{task.title}</h2>\n </div>\n\n {/* Properties */}\n <div className=\"grid grid-cols-2 gap-x-6 gap-y-4 medium:grid-cols-4\">\n <Property label=\"Status\">\n {onStatusChange ? (\n <Select\n value={task.status}\n size=\"md\"\n onChange={(value) => onStatusChange(task, value as TaskStatus)}\n >\n {TASK_STATUS_ORDER.map((s) => (\n <SelectOption key={s} value={s}>\n {TASK_STATUS_LABEL[s]}\n </SelectOption>\n ))}\n </Select>\n ) : (\n TASK_STATUS_LABEL[task.status]\n )}\n </Property>\n <Property label=\"Priority\">\n <TaskPriorityIcon priority={task.priority} size={18} label=\"\" />\n {TASK_PRIORITY_LABEL[task.priority]}\n </Property>\n <Property label=\"Owner\">\n <span className=\"truncate\">{ownerName}</span>\n </Property>\n <Property label=\"Assigned\">\n <span className=\"truncate\">{assigneeName}</span>\n </Property>\n </div>\n\n {/* Subtasks */}\n {task.subtasks.length > 0 && (\n <section className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-title-small text-on-surface\">Subtasks</h3>\n <span className=\"text-body-small text-on-surface-variant\">\n {completedCount}/{task.subtasks.length}\n </span>\n </div>\n <ul className=\"m-0 list-none overflow-hidden rounded-medium border border-outline-variant p-0\">\n {task.subtasks.map((subtask, i) => (\n <li key={subtask.title}>\n <button\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 list item with a leading checkbox: the whole 48 dp row toggles and carries the state layer; a native checkbox input cannot host the row.\n role=\"checkbox\"\n aria-checked={subtask.completed}\n onClick={() => onSubtaskToggle?.(task, i, !subtask.completed)}\n className={clsx(\n \"flex min-h-12 w-full items-center gap-4 px-4 py-2 text-left text-body-large\",\n \"transition-colors duration-200 ease-standard hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n i > 0 && \"border-t border-outline-variant\",\n )}\n >\n <span\n className={clsx(\n \"flex size-[18px] shrink-0 items-center justify-center rounded-[2px] transition-colors duration-200 ease-standard\",\n subtask.completed\n ? \"bg-primary text-on-primary\"\n : \"border-2 border-on-surface-variant\",\n )}\n >\n {subtask.completed && <Icon name=\"check\" size={16} weight={700} />}\n </span>\n <span\n className={clsx(\n \"min-w-0 flex-1\",\n subtask.completed\n ? \"text-on-surface-variant line-through\"\n : \"text-on-surface\",\n )}\n >\n {subtask.title}\n </span>\n </button>\n </li>\n ))}\n </ul>\n </section>\n )}\n\n {/* Description */}\n <section className=\"flex flex-col gap-2\">\n <h3 className=\"text-title-small text-on-surface\">Description</h3>\n {task.description ? (\n <Markdown content={task.description} size=\"medium\" />\n ) : (\n <p className=\"text-body-medium text-on-surface-variant\">No description</p>\n )}\n </section>\n\n {/* Timestamps */}\n <div className=\"flex flex-col gap-1 text-body-small text-on-surface-variant\">\n <span>Created {formatDate(task.created_at)}</span>\n <span>Updated {formatDate(task.updated_at)}</span>\n {task.completed_at && <span>Completed {formatDate(task.completed_at)}</span>}\n </div>\n\n {/* Actions */}\n {(onStatusChange || onDelete) && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {onStatusChange && task.status === \"pending_approval\" && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"ready\")}>\n Approve\n </Button>\n )}\n {onStatusChange && task.status === \"backlog\" && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"in_progress\")}>\n Execute\n </Button>\n )}\n {onStatusChange && (task.status === \"in_progress\" || task.status === \"ready\") && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"done\")}>\n Mark Done\n </Button>\n )}\n {onStatusChange && task.status === \"done\" && (\n <Button variant=\"text\" size=\"lg\" onClick={() => onStatusChange(task, \"ready\")}>\n Reopen\n </Button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(task)}\n className={clsx(\n \"inline-flex h-10 items-center justify-center gap-2 rounded-full px-3 text-label-large text-error\",\n \"transition-colors duration-200 ease-standard hover:bg-error/8 active:bg-error/10\",\n focusRing,\n )}\n >\n <Icon name=\"delete\" size={18} />\n Delete\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskCreateForm.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Button, Input, Select, SelectOption, TextArea } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\n\nimport type { TaskPriority } from \"./types\";\nimport { TASK_PRIORITY_LABEL } from \"./types\";\n\nexport interface TaskCreateFormData {\n title: string;\n description: string;\n priority: TaskPriority;\n}\n\nexport interface TaskCreateFormProps {\n onSubmit: (data: TaskCreateFormData) => void;\n onCancel?: () => void;\n defaultPriority?: TaskPriority;\n isSubmitting?: boolean;\n className?: string;\n}\n\nconst PRIORITIES: TaskPriority[] = [\"critical\", \"high\", \"medium\", \"low\"];\n\n/**\n * Inline task creation on an M3 surface: title and description text fields, a priority select,\n * and M3 actions (filled `Create`, text `Cancel`).\n */\nexport function TaskCreateForm({\n onSubmit,\n onCancel,\n defaultPriority = \"medium\",\n isSubmitting,\n className,\n}: TaskCreateFormProps) {\n const [title, setTitle] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [priority, setPriority] = useState<TaskPriority>(defaultPriority);\n const titleInputId = useId();\n const descriptionInputId = useId();\n const titleInputRef = useRef<HTMLInputElement>(null);\n\n // Focus the title when the form mounts (replaces `autoFocus`).\n useEffect(() => {\n titleInputRef.current?.focus();\n }, []);\n\n const canSubmit = title.trim().length > 0 && !isSubmitting;\n\n const handleSubmit = useCallback(() => {\n if (!canSubmit) return;\n onSubmit({ title: title.trim(), description: description.trim(), priority });\n setTitle(\"\");\n setDescription(\"\");\n setPriority(defaultPriority);\n }, [canSubmit, onSubmit, title, description, priority, defaultPriority]);\n\n return (\n <div\n className={clsx(\n \"flex flex-col gap-3 rounded-medium bg-surface-container-low p-4 text-on-surface\",\n className,\n )}\n >\n <div className=\"flex items-center gap-2\">\n <label htmlFor={titleInputId} className=\"sr-only\">\n Task Title\n </label>\n <Input\n ref={titleInputRef}\n id={titleInputId}\n type=\"text\"\n size=\"lg\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSubmit();\n if (e.key === \"Escape\") onCancel?.();\n }}\n placeholder=\"Task title...\"\n className=\"min-w-0 flex-1\"\n disabled={isSubmitting}\n />\n <Select\n value={priority}\n size=\"lg\"\n onChange={(value) => setPriority(value as TaskPriority)}\n disabled={isSubmitting}\n >\n {PRIORITIES.map((p) => (\n <SelectOption key={p} value={p}>\n {TASK_PRIORITY_LABEL[p]}\n </SelectOption>\n ))}\n </Select>\n </div>\n <label htmlFor={descriptionInputId} className=\"sr-only\">\n Description\n </label>\n <TextArea\n id={descriptionInputId}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Description (optional)\"\n rows={2}\n className=\"w-full resize-none\"\n disabled={isSubmitting}\n />\n <div className=\"flex items-center justify-end gap-2\">\n {onCancel && (\n <Button variant=\"text\" size=\"lg\" onClick={onCancel} disabled={isSubmitting}>\n Cancel\n </Button>\n )}\n <Button variant=\"filled\" size=\"lg\" disabled={!canSubmit} onClick={handleSubmit}>\n Create\n </Button>\n </div>\n </div>\n );\n}\n"]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/types.ts", "../src/ToolCall.tsx", "../src/internal.tsx", "../src/McpAppCard.tsx", "../src/Markdown.tsx", "../src/MessageBubble.tsx", "../src/InlineWorkerCard.tsx", "../src/InlineBranchCard.tsx", "../src/ModelSelector.tsx", "../src/ChatComposer.tsx", "../src/GoogleSpotlightBar.tsx", "../src/GeminiAccountMenu.tsx", "../src/GeminiPersonalContextEdit.tsx", "../src/TaskStatusIcon.tsx", "../src/TaskPriorityIcon.tsx", "../src/TaskRow.tsx", "../src/TaskList.tsx", "../src/TaskDetail.tsx", "../src/TaskCreateForm.tsx", "../src/index.ts", "../src/AgUiEventStream.ts", "../src/A2APeerInspector.tsx", "../src/A2ATaskTimeline.tsx"],
4
+ "sourcesContent": [
5
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/types.ts), MIT.\n\n// Tool execution types\nexport type ToolCallStatus = \"running\" | \"completed\" | \"error\";\n\nexport interface ToolCallPair {\n id: string;\n name: string;\n argsRaw: string;\n args: Record<string, unknown> | null;\n resultRaw: string | null;\n result: Record<string, unknown> | null;\n status: ToolCallStatus;\n /** Human-readable summary provided by live opencode parts */\n title?: string | null;\n}\n\n// Transcript step types — discriminated union matching the real API schema\n\nexport type ActionContent =\n | { type: \"text\"; text: string }\n | { type: \"tool_call\"; id: string; name: string; args: string };\n\nexport type TranscriptStep =\n | { type: \"action\"; content: ActionContent[] }\n | { type: \"user_text\"; text: string }\n | { type: \"system_text\"; text: string }\n | { type: \"tool_result\"; call_id: string; name: string; text: string };\n\n// Paired transcript item for rendering\n\nexport type TranscriptItem = { kind: \"text\"; text: string } | { kind: \"tool\"; pair: ToolCallPair };\n\n// ---------------------------------------------------------------------------\n// Task board types\n// ---------------------------------------------------------------------------\n\nexport type TaskStatus = \"pending_approval\" | \"backlog\" | \"ready\" | \"in_progress\" | \"done\";\nexport type TaskPriority = \"critical\" | \"high\" | \"medium\" | \"low\";\n\nexport interface Subtask {\n title: string;\n completed: boolean;\n}\n\nexport interface Task {\n id: string;\n task_number: number;\n title: string;\n description?: string | null;\n status: TaskStatus;\n priority: TaskPriority;\n owner_agent_id: string;\n assigned_agent_id: string;\n subtasks: Subtask[];\n metadata: unknown;\n worker_id?: string | null;\n created_by: string;\n created_at: string;\n updated_at: string;\n completed_at?: string | null;\n}\n\nexport const TASK_STATUS_ORDER: TaskStatus[] = [\n \"in_progress\",\n \"ready\",\n \"pending_approval\",\n \"backlog\",\n \"done\",\n];\n\nexport const TASK_STATUS_LABEL: Record<TaskStatus, string> = {\n in_progress: \"In Progress\",\n ready: \"Ready\",\n pending_approval: \"Pending Approval\",\n backlog: \"Backlog\",\n done: \"Done\",\n};\n\nexport const TASK_PRIORITY_LABEL: Record<TaskPriority, string> = {\n critical: \"Critical\",\n high: \"High\",\n medium: \"Medium\",\n low: \"Low\",\n};\n\n// Domain objects\nexport interface TaskInfo {\n id: string;\n title: string;\n status: string;\n priority: string;\n assignees: string[];\n conversation_id?: string;\n}\n\nexport interface MemoryInfo {\n id: string;\n type: string;\n content: string;\n source?: string;\n edges?: Array<{ target: string; relation: string }>;\n}\n\nexport interface CronJobInfo {\n id: string;\n name: string;\n schedule: string;\n last_run?: string;\n next_run?: string;\n status: string;\n}\n\nexport interface AgentInfo {\n id: string;\n name: string;\n detail: string;\n status?: string;\n}\n\nexport interface ModelOption {\n id: string;\n name: string;\n provider: string;\n context_window?: number;\n capabilities?: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nexport function tryParseJson(text: string): Record<string, unknown> | null {\n if (!text || text.trim().length === 0) return null;\n try {\n const parsed = JSON.parse(text);\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>;\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport function isErrorResult(text: string, parsed: Record<string, unknown> | null): boolean {\n if (parsed?.error) return true;\n if (parsed?.status === \"error\") return true;\n if (parsed?.success === false) return true;\n if (typeof parsed?.exit_code === \"number\" && parsed.exit_code !== 0) return true;\n const lower = text.toLowerCase();\n return (\n lower.startsWith(\"error:\") ||\n lower.startsWith(\"error -\") ||\n lower.startsWith(\"failed:\") ||\n lower.startsWith(\"toolset error:\")\n );\n}\n\n// ---------------------------------------------------------------------------\n// Transcript → TranscriptItem[] pairing\n// ---------------------------------------------------------------------------\n\n/**\n * Walk a flat TranscriptStep[] and pair each tool_call with its tool_result\n * via call_id matching, plus emit standalone text steps. Returns an ordered\n * list of renderable items: text blocks and paired tool calls.\n */\nexport function pairTranscriptSteps(steps: TranscriptStep[]): TranscriptItem[] {\n const items: TranscriptItem[] = [];\n const resultsById = new Map<string, { name: string; text: string }>();\n\n // First pass: index all tool_result steps by call_id\n for (const step of steps) {\n if (step.type === \"tool_result\") {\n resultsById.set(step.call_id, { name: step.name, text: step.text });\n }\n }\n\n // Second pass: emit items in order\n for (const step of steps) {\n if (step.type === \"action\") {\n for (const content of step.content) {\n if (content.type === \"text\") {\n items.push({ kind: \"text\", text: content.text });\n } else if (content.type === \"tool_call\") {\n const result = resultsById.get(content.id);\n const parsedArgs = tryParseJson(content.args);\n const parsedResult = result ? tryParseJson(result.text) : null;\n\n const hasError = result ? isErrorResult(result.text, parsedResult) : false;\n\n items.push({\n kind: \"tool\",\n pair: {\n id: content.id,\n name: content.name,\n argsRaw: content.args,\n args: parsedArgs,\n resultRaw: result?.text ?? null,\n result: parsedResult,\n status: result ? (hasError ? \"error\" : \"completed\") : \"running\",\n },\n });\n }\n }\n }\n }\n\n return items;\n}\n",
6
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ToolCall.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport type { ToolCallPair, ToolCallStatus } from \"./types\";\nimport { CircularIndicator, StatusChip, expandMotion, focusRing } from \"./internal\";\nimport { McpAppCard } from \"./McpAppCard\";\n\n// ---------------------------------------------------------------------------\n// Tool-specific rendering\n// ---------------------------------------------------------------------------\n\ninterface ToolRenderer {\n summary(pair: ToolCallPair): string | null;\n argsView?(pair: ToolCallPair): React.ReactNode | null;\n resultView?(pair: ToolCallPair): React.ReactNode | null;\n}\n\n/** The first present argument among `keys` (the tools name the same argument differently). */\nfunction firstArg(pair: ToolCallPair, keys: readonly string[]): unknown {\n for (const key of keys) {\n const value = pair.args?.[key];\n if (value !== undefined && value !== null) return value;\n }\n return undefined;\n}\n\nconst pathSummary =\n (pathKeys: readonly string[]): ToolRenderer[\"summary\"] =>\n (pair) => {\n if (pair.title) return pair.title;\n const path = firstArg(pair, pathKeys);\n return path ? truncate(String(path), 60) : null;\n };\n\nconst fileResultView = (pair: ToolCallPair) =>\n pair.resultRaw ? <ResultLine text={truncate(pair.resultRaw, 100)} /> : null;\n\n/** `file_read` and `read`: the path with its optional line window, output in a collapsible block. */\nfunction fileRead(pathKeys: readonly string[]): ToolRenderer {\n return {\n summary: pathSummary(pathKeys),\n argsView(pair) {\n const path = firstArg(pair, pathKeys);\n if (!path) return null;\n const offset = pair.args?.offset;\n const limit = pair.args?.limit;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"font-code text-body-small text-on-surface-variant\">\n {String(path)}\n {offset ? ` (from line ${offset})` : \"\"}\n {limit ? ` (${limit} lines)` : \"\"}\n </p>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n };\n}\n\n/** `file_write` and `write`: the path and a preview of the content. */\nfunction fileWrite(pathKeys: readonly string[]): ToolRenderer {\n return {\n summary: pathSummary(pathKeys),\n argsView(pair) {\n const path = firstArg(pair, pathKeys);\n const content = pair.args?.content;\n if (!path && !content) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n {!!path && (\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">{String(path)}</p>\n )}\n {!!content && (\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-outline\">\n {truncate(String(content), 2000)}\n </pre>\n )}\n </div>\n );\n },\n resultView: fileResultView,\n };\n}\n\n/** `file_edit` and `edit`: the path and the old / new text. */\nfunction fileEdit(\n pathKeys: readonly string[],\n oldKeys: readonly string[],\n newKeys: readonly string[],\n): ToolRenderer {\n // Whole class names, so Tailwind's scanner finds them.\n const TONE = { error: \"text-error\", success: \"text-success\" } as const;\n const side = (label: string, tone: keyof typeof TONE, text: unknown) =>\n text ? (\n <div className=\"mt-1\">\n <p className={`text-body-small font-medium ${TONE[tone]}`}>{label}</p>\n <pre className={`max-h-20 overflow-auto font-code text-body-small ${TONE[tone]}`}>\n {truncate(String(text), 500)}\n </pre>\n </div>\n ) : null;\n return {\n summary: pathSummary(pathKeys),\n argsView(pair) {\n const path = firstArg(pair, pathKeys);\n if (!path) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">{String(path)}</p>\n {side(\"Old\", \"error\", firstArg(pair, oldKeys))}\n {side(\"New\", \"success\", firstArg(pair, newKeys))}\n </div>\n );\n },\n resultView: fileResultView,\n };\n}\n\nconst toolRenderers: Record<string, ToolRenderer> = {\n file_read: fileRead([\"path\"]),\n file_write: fileWrite([\"path\"]),\n file_edit: fileEdit([\"path\"], [\"old_string\"], [\"new_string\"]),\n\n file_list: {\n summary: pathSummary([\"path\"]),\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n set_status: {\n summary(pair) {\n const kind = pair.args?.kind;\n const message = pair.args?.message;\n if (kind === \"outcome\") {\n return message ? `Outcome: ${truncate(String(message), 50)}` : \"Outcome set\";\n }\n return message ? truncate(String(message), 60) : null;\n },\n resultView() {\n return null;\n },\n },\n\n // OpenCode tools\n\n read: fileRead([\"filePath\", \"file_path\"]),\n write: fileWrite([\"filePath\", \"file_path\"]),\n edit: fileEdit([\"filePath\", \"file_path\"], [\"oldString\", \"old_string\"], [\"newString\", \"new_string\"]),\n\n glob: {\n summary(pair) {\n if (pair.title) return pair.title;\n const pattern = pair.args?.pattern;\n return pattern ? truncate(String(pattern), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n grep: {\n summary(pair) {\n if (pair.title) return pair.title;\n const pattern = pair.args?.pattern;\n const include = pair.args?.include;\n if (pattern && include) {\n return `/${pattern}/ in ${include}`;\n }\n return pattern ? `/${truncate(String(pattern), 40)}/` : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n webfetch: {\n summary(pair) {\n if (pair.title) return pair.title;\n const url = pair.args?.url;\n return url ? truncate(String(url), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n read_skill: {\n summary(pair) {\n if (pair.title) return pair.title;\n const name = pair.args?.name;\n return name ? String(name) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n web_search: {\n summary(pair) {\n if (pair.title) return pair.title;\n const query = pair.args?.query;\n const resultCount =\n pair.result?.result_count ??\n (Array.isArray(pair.result?.results) ? (pair.result!.results as unknown[]).length : null);\n const queryStr = query ? truncate(String(query), 50) : null;\n if (queryStr && resultCount != null) {\n return `${queryStr} (${resultCount} result${resultCount !== 1 ? \"s\" : \"\"})`;\n }\n return queryStr;\n },\n argsView(pair) {\n const query = pair.args?.query;\n if (!query) return null;\n const count = pair.args?.count;\n const freshness = pair.args?.freshness;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">Search: </span>\n {String(query)}\n </p>\n {!!(count || freshness) && (\n <p className=\"mt-0.5 text-body-small text-outline\">\n {count ? `${count} results` : \"\"}\n {count && freshness ? \" · \" : \"\"}\n {freshness ? `${freshness}` : \"\"}\n </p>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n spacebot_docs: {\n summary(pair) {\n if (pair.title) return pair.title;\n const action = pair.args?.action;\n const docId = pair.args?.doc_id;\n if (action === \"read\" && docId) {\n return truncate(String(docId), 50);\n }\n return action ? String(action) : \"list\";\n },\n argsView(pair) {\n const action = pair.args?.action;\n const docId = pair.args?.doc_id;\n const query = pair.args?.query;\n if (!action && !docId) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n {!!docId && (\n <p className=\"font-code text-body-small text-on-surface-variant\">{String(docId)}</p>\n )}\n {!!query && (\n <p className=\"mt-0.5 text-body-small text-outline\">filter: {String(query)}</p>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n todowrite: {\n summary(pair) {\n if (pair.title) return pair.title;\n return \"Update tasks\";\n },\n resultView() {\n return null;\n },\n },\n\n task: {\n summary(pair) {\n if (pair.title) return pair.title;\n const description = pair.args?.description;\n return description ? truncate(String(description), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n};\n\nconst defaultRenderer: ToolRenderer = {\n summary(pair) {\n if (!pair.argsRaw || pair.argsRaw === \"{}\") return null;\n return truncate(pair.argsRaw, 60);\n },\n};\n\nfunction getRenderer(name: string): ToolRenderer {\n return toolRenderers[name] ?? defaultRenderer;\n}\n\n// ---------------------------------------------------------------------------\n// Shared sub-components\n// ---------------------------------------------------------------------------\n\nfunction ResultLine({ text }: { text: string }) {\n return <p className=\"px-3 py-2 text-body-small text-on-surface-variant\">{text}</p>;\n}\n\nfunction CollapsiblePre({ text, maxLines = 20 }: { text: string; maxLines?: number }) {\n const [expanded, setExpanded] = useState(false);\n const lines = text.split(\"\\n\");\n const needsCollapse = lines.length > maxLines;\n const displayText =\n needsCollapse && !expanded ? lines.slice(0, maxLines).join(\"\\n\") + \"\\n...\" : text;\n\n return (\n <div>\n <pre className=\"max-h-80 overflow-auto whitespace-pre-wrap px-3 py-2 font-code text-body-small text-on-surface-variant\">\n {displayText}\n </pre>\n {needsCollapse && (\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className={clsx(\n \"flex h-8 w-full items-center justify-center gap-1 border-t border-outline-variant px-3 text-label-medium text-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/8 active:bg-primary/10\",\n focusRing,\n )}\n >\n <Icon\n name=\"expand_more\"\n size={18}\n className={clsx(\n \"transition-transform duration-200 ease-standard\",\n expanded && \"rotate-180\",\n )}\n />\n {expanded ? \"Show less\" : `Show all ${lines.length} lines`}\n </button>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Status display helpers\n// ---------------------------------------------------------------------------\n\n/** Material Symbols glyph per status (the running state shows a circular indicator). */\nconst STATUS_ICONS: Record<ToolCallStatus, string> = {\n running: \"pending\",\n completed: \"check_circle\",\n error: \"error\",\n};\n\nconst STATUS_COLORS: Record<ToolCallStatus, string> = {\n running: \"text-primary\",\n completed: \"text-success\",\n error: \"text-error\",\n};\n\nconst STATUS_LABELS: Record<ToolCallStatus, string> = {\n running: \"Running\",\n completed: \"Completed\",\n error: \"Error\",\n};\n\n/** Leading Material Symbol per tool family. */\nfunction toolIcon(name: string): string {\n if (name.startsWith(\"file_\") || name === \"read\" || name === \"write\" || name === \"edit\") {\n return \"description\";\n }\n if (name === \"glob\" || name === \"grep\" || name === \"web_search\") return \"search\";\n if (name === \"webfetch\") return \"language\";\n if (name === \"set_status\") return \"schedule\";\n return \"build\";\n}\n\nfunction formatToolName(name: string): string {\n const overrides: Record<string, string> = {\n webfetch: \"Web Fetch\",\n todowrite: \"Todo\",\n read_skill: \"Read Skill\",\n web_search: \"Web Search\",\n spacebot_docs: \"Docs\",\n };\n if (overrides[name]) return overrides[name];\n\n const stripped = name.replace(/^file_/, \"\");\n\n return stripped\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nfunction toolCategory(name: string): string | null {\n if (name.startsWith(\"file_\")) return \"File\";\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nexport interface ToolCallProps {\n pair: ToolCallPair;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * A tool invocation as an M3 outlined card: status + tool name header (`text-label-large`),\n * summary, and an expandable body with arguments and result blocks in `font-code`.\n */\nexport function ToolCall({ pair, defaultExpanded = false, className }: ToolCallProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const bodyId = useId();\n const renderer = getRenderer(pair.name);\n const summary = renderer.summary(pair);\n const category = toolCategory(pair.name);\n const displayName = formatToolName(pair.name);\n const isError = pair.status === \"error\";\n\n const args = expanded ? renderArgs(pair, renderer) : null;\n const result = expanded ? renderResult(pair, renderer) : null;\n\n return (\n <div\n data-status={pair.status}\n className={clsx(\n \"m3-tool-call min-w-0 overflow-hidden rounded-medium border bg-surface-container-low text-on-surface\",\n isError ? \"border-error\" : \"border-outline-variant\",\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n aria-expanded={expanded}\n aria-controls={bodyId}\n className={clsx(\n \"flex min-h-10 w-full items-center gap-2 rounded-medium px-3 py-2 text-left\",\n \"transition-colors duration-200 ease-standard hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <span\n className={clsx(\n \"flex size-5 shrink-0 items-center justify-center\",\n STATUS_COLORS[pair.status],\n )}\n >\n {pair.status === \"running\" ? (\n <CircularIndicator size={16} label=\"Running\" />\n ) : (\n <Icon\n name={STATUS_ICONS[pair.status]}\n size={18}\n filled\n label={STATUS_LABELS[pair.status]}\n />\n )}\n </span>\n <Icon name={toolIcon(pair.name)} size={18} className=\"shrink-0 text-on-surface-variant\" />\n {category && <span className=\"text-label-medium text-outline\">{category}</span>}\n <span className=\"shrink-0 text-label-large text-on-surface\">{displayName}</span>\n {summary && !expanded ? (\n <span className=\"min-w-0 flex-1 truncate text-body-small text-on-surface-variant\">\n {summary}\n </span>\n ) : (\n <span className=\"flex-1\" />\n )}\n {isError && (\n <StatusChip tone=\"error\" className=\"h-5 px-1.5 text-label-small\">\n error\n </StatusChip>\n )}\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded && \"rotate-180\",\n )}\n />\n </button>\n\n <AnimatePresence initial={false}>\n {expanded ? (\n <motion.div id={bodyId} key=\"body\" {...expandMotion} className=\"overflow-hidden\">\n <div className=\"flex flex-col gap-2 border-t border-outline-variant px-3 py-3\">\n {args}\n {result != null && result !== false ? (\n <div\n className={clsx(\n \"m3-tool-result overflow-hidden rounded-small\",\n isError\n ? \"bg-error-container text-on-error-container [&_.text-on-surface-variant]:text-on-error-container [&_.text-outline]:text-on-error-container/80\"\n : \"bg-surface-container-highest text-on-surface-variant\",\n )}\n >\n {result}\n </div>\n ) : null}\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n );\n}\n\nfunction renderArgs(pair: ToolCallPair, renderer: ToolRenderer): React.ReactNode {\n if (renderer.argsView) {\n const custom = renderer.argsView(pair);\n if (custom) return custom;\n }\n\n if (pair.args && Object.keys(pair.args).length > 0) {\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <div className=\"flex flex-col gap-0.5\">\n {Object.entries(pair.args).map(([key, value]) => (\n <p key={key} className=\"font-code text-body-small\">\n <span className=\"text-outline\">{key}: </span>\n <span className=\"text-on-surface-variant\">{formatArgValue(key, value)}</span>\n </p>\n ))}\n </div>\n </div>\n );\n }\n\n if (pair.argsRaw && pair.argsRaw !== \"{}\" && pair.argsRaw.trim().length > 0) {\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n {pair.argsRaw}\n </pre>\n </div>\n );\n }\n\n return null;\n}\n\nfunction renderResult(pair: ToolCallPair, renderer: ToolRenderer): React.ReactNode {\n if (pair.status === \"running\") {\n return (\n <div className=\"flex items-center gap-2 px-3 py-2 text-body-small text-on-surface-variant\">\n <CircularIndicator size={14} label=\"Running\" />\n Running...\n </div>\n );\n }\n\n if (renderer.resultView) {\n const custom = renderer.resultView(pair);\n if (custom !== undefined) return custom;\n }\n\n if (!pair.resultRaw) return null;\n\n // Check if result contains an interactive MCP-UI resource or app\n const mcpResourceUri = (pair.result?._meta as any)?.ui?.resourceUri || (pair.result?.ui as any)?.resourceUri;\n const mcpHtml = (pair.result as any)?.html || (pair.result as any)?.uiHtml;\n if (mcpResourceUri || mcpHtml) {\n return (\n <div className=\"p-1\">\n <McpAppCard\n toolName={pair.name}\n title={pair.title || pair.name}\n html={typeof mcpHtml === \"string\" ? mcpHtml : undefined}\n toolResourceUri={typeof mcpResourceUri === \"string\" ? mcpResourceUri : undefined}\n toolInput={pair.args || undefined}\n toolResult={pair.result || undefined}\n />\n </div>\n );\n }\n\n if (pair.result && Object.keys(pair.result).length > 0) {\n return (\n <div className=\"px-3 py-2\">\n <div className=\"flex flex-col gap-0.5\">\n {Object.entries(pair.result).map(([key, value]) => (\n <p key={key} className=\"font-code text-body-small\">\n <span className=\"text-outline\">{key}: </span>\n <span className=\"text-on-surface-variant\">\n {typeof value === \"string\" ? truncate(value, 200) : JSON.stringify(value)}\n </span>\n </p>\n ))}\n </div>\n </div>\n );\n }\n\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n}\n\nfunction formatArgValue(key: string, value: unknown): string {\n if (key === \"secret\" && typeof value === \"string\") {\n return \"***\";\n }\n if (typeof value === \"string\") {\n return truncate(value, 100);\n }\n if (typeof value === \"boolean\" || typeof value === \"number\") {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\nfunction truncate(text: string, maxLen: number): string {\n if (text.length <= maxLen) return text;\n return text.slice(0, maxLen) + \"...\";\n}\n",
7
+ "// SPDX-License-Identifier: Apache-2.0\n// Shared Material Design 3 building blocks for @aphrody/m3-ai (internal, not exported).\n\nimport { m3Durations, m3Easings } from \"@aphrody/m3-motion\";\nimport { clsx } from \"clsx\";\nimport type { ReactNode } from \"react\";\n\n/** The M3 focus indicator (contract: docs/design/SPACEUI-M3-FUSION.md, \"States\"). */\nexport const focusRing =\n \"outline-none focus-visible:outline-3 focus-visible:outline-secondary focus-visible:outline-offset-2\";\n\n/** Expand / collapse: enter on emphasized decelerate, exit on emphasized accelerate. */\nexport const expandMotion = {\n initial: { height: 0, opacity: 0 },\n animate: {\n height: \"auto\",\n opacity: 1,\n transition: { duration: m3Durations.medium2, ease: m3Easings.emphasizedDecelerate },\n },\n exit: {\n height: 0,\n opacity: 0,\n transition: { duration: m3Durations.short4, ease: m3Easings.emphasizedAccelerate },\n },\n} as const;\n\n/**\n * Indeterminate M3 circular progress indicator (active indicator on `primary` or the current\n * color, 4 dp track gap omitted at small sizes). Replaces the upstream Grid loader.\n */\nexport function CircularIndicator({\n size = 16,\n className,\n label = \"Loading\",\n}: {\n size?: number;\n className?: string;\n label?: string;\n}) {\n const stroke = size <= 16 ? 2 : size <= 24 ? 3 : 4;\n const r = (size - stroke) / 2;\n const c = 2 * Math.PI * r;\n return (\n <span\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 circular indeterminate indicator is an animated SVG arc; a native <progress> cannot render it.\n role=\"progressbar\"\n aria-label={label}\n className={clsx(\"m3-circular-indicator inline-flex shrink-0 text-primary\", className)}\n style={{ width: size, height: size }}\n >\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n className=\"animate-spin\"\n aria-hidden=\"true\"\n >\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={`${c * 0.7} ${c}`}\n />\n </svg>\n </span>\n );\n}\n\nexport type ChipTone = \"primary\" | \"success\" | \"error\" | \"warning\" | \"neutral\";\n\nconst chipTones: Record<ChipTone, string> = {\n primary: \"bg-primary-container text-on-primary-container\",\n success: \"bg-success-container text-on-success-container\",\n error: \"bg-error-container text-on-error-container\",\n warning: \"bg-warning-container text-on-warning-container\",\n neutral: \"border border-outline-variant text-on-surface-variant\",\n};\n\n/** Non-interactive M3 assist chip used as a status label (dense, `rounded-small`). */\nexport function StatusChip({\n tone,\n icon,\n children,\n className,\n}: {\n tone: ChipTone;\n icon?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <span\n className={clsx(\n \"inline-flex h-6 shrink-0 items-center gap-1 rounded-small px-2 text-label-medium\",\n chipTones[tone],\n className,\n )}\n >\n {icon}\n {children}\n </span>\n );\n}\n",
8
+ "// SPDX-License-Identifier: Apache-2.0\n/**\n * @aphrody/m3-ai - McpAppCard\n *\n * Material Design 3 Interactive MCP App Container:\n * - Renders generative UI resources produced by MCP tools (SEP-1724 / mcp-ui).\n * - Hosts interactive guest web applications in an isolated sandbox iframe.\n * - Passes reactive M3 theme and color scheme context to the guest app.\n * - Supports expandable full-bleed or embedded card layouts.\n */\n\nimport React, { useState, useRef, useMemo } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AppRenderer, type SandboxConfig, type McpUiHostContext } from \"@aphrody/mcp-ui\";\n\nexport interface McpAppCardProps {\n toolName: string;\n title?: string;\n html?: string;\n toolResourceUri?: string;\n toolInput?: Record<string, unknown>;\n toolResult?: any;\n sandboxUrl?: string;\n isExpandedDefault?: boolean;\n className?: string;\n onAction?: (action: string, payload?: unknown) => void;\n}\n\nexport const McpAppCard: React.FC<McpAppCardProps> = ({\n toolName,\n title,\n html,\n toolResourceUri,\n toolInput,\n toolResult,\n sandboxUrl,\n isExpandedDefault = false,\n className,\n onAction: _onAction,\n}) => {\n const [isExpanded, setIsExpanded] = useState(isExpandedDefault);\n const [hasError, setHasError] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Host context with Material Design 3 tokens\n const hostContext: McpUiHostContext = useMemo(() => {\n const isDark =\n typeof window !== \"undefined\" && window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n return {\n theme: isDark ? \"dark\" : \"light\",\n locale: typeof navigator !== \"undefined\" ? navigator.language : \"en-US\",\n displayMode: isExpanded ? \"fullscreen\" : \"inline\",\n };\n }, [isExpanded]);\n\n // Fallback default sandbox proxy URL\n const resolvedSandbox: SandboxConfig = useMemo(() => {\n const url = sandboxUrl ? new URL(sandboxUrl) : new URL(\"https://mcpui.dev/sandbox_proxy.html\");\n return {\n url,\n permissions: \"allow-scripts allow-forms allow-same-origin\",\n };\n }, [sandboxUrl]);\n\n return (\n <div\n ref={containerRef}\n className={clsx(\n \"flex flex-col rounded-3xl border transition-all duration-300 overflow-hidden\",\n \"bg-[var(--md-sys-color-surface-container-low,#f7f2fa)]\",\n \"border-[var(--md-sys-color-outline-variant,#cac4d0)]\",\n \"text-[var(--md-sys-color-on-surface,#1d1b20)]\",\n isExpanded ? \"fixed inset-4 z-50 shadow-2xl\" : \"relative w-full shadow-sm\",\n className,\n )}\n >\n {/* App Card Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-[var(--md-sys-color-outline-variant,#cac4d0)]/40 bg-[var(--md-sys-color-surface-container,#f3edf7)]/60\">\n <div className=\"flex items-center gap-2.5\">\n <div className=\"flex h-7 w-7 items-center justify-center rounded-xl bg-[var(--md-sys-color-primary-container,#eaddff)] text-[var(--md-sys-color-on-primary-container,#21005d)]\">\n <span className=\"material-symbols-outlined text-base\">widgets</span>\n </div>\n\n <div className=\"flex flex-col\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-semibold tracking-tight\">{title || toolName}</span>\n <span className=\"rounded-full bg-[var(--md-sys-color-surface-container-high,#ece6f0)] px-2 py-0.2 text-[10px] font-mono text-[var(--md-sys-color-on-surface-variant,#49454f)]\">\n mcp-ui\n </span>\n </div>\n {toolResourceUri && (\n <span className=\"text-[10px] font-mono text-[var(--md-sys-color-outline,#79747e)]\">\n {toolResourceUri}\n </span>\n )}\n </div>\n </div>\n\n {/* Action icons */}\n <div className=\"flex items-center gap-1\">\n <div className=\"flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-medium text-emerald-700 dark:text-emerald-400\">\n <span className=\"material-symbols-outlined text-xs\">verified_user</span>\n <span>Sandboxed</span>\n </div>\n\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n title={isExpanded ? \"Collapse\" : \"Expand Fullscreen\"}\n className=\"flex h-7 w-7 items-center justify-center rounded-lg text-[var(--md-sys-color-on-surface-variant,#49454f)] hover:bg-[var(--md-sys-color-surface-container-high,#ece6f0)] transition-colors\"\n >\n <span className=\"material-symbols-outlined text-base\">\n {isExpanded ? \"close_fullscreen\" : \"open_in_full\"}\n </span>\n </button>\n </div>\n </div>\n\n {/* App Frame Content */}\n <div\n className={clsx(\n \"relative w-full overflow-hidden transition-all\",\n isExpanded ? \"flex-1 min-h-[500px]\" : \"h-96\",\n )}\n >\n {hasError ? (\n <div className=\"flex h-full flex-col items-center justify-center p-6 text-center text-xs text-[var(--md-sys-color-error,#b3261e)]\">\n <span className=\"material-symbols-outlined text-3xl mb-1\">error</span>\n <span className=\"font-semibold\">MCP App Render Error</span>\n <p className=\"mt-1 font-mono text-[11px] opacity-80\">{hasError}</p>\n </div>\n ) : html ? (\n <AppRenderer\n toolName={toolName}\n html={html}\n sandbox={resolvedSandbox}\n toolInput={toolInput}\n toolResult={toolResult}\n hostContext={hostContext}\n onError={(err) => setHasError(err.message)}\n />\n ) : (\n <div className=\"flex h-full flex-col items-center justify-center p-6 text-xs text-[var(--md-sys-color-outline,#79747e)]\">\n <span className=\"material-symbols-outlined text-2xl animate-spin mb-1 text-[var(--md-sys-color-primary,#6750a4)]\">\n progress_activity\n </span>\n <span>Awaiting MCP UI Resource ({toolName})...</span>\n </div>\n )}\n </div>\n\n {/* Footer info */}\n {toolInput && (\n <div className=\"flex items-center justify-between px-4 py-2 border-t border-[var(--md-sys-color-outline-variant,#cac4d0)]/30 bg-[var(--md-sys-color-surface-container-lowest,#ffffff)] text-[10px] text-[var(--md-sys-color-outline,#79747e)] font-mono\">\n <span className=\"truncate\">input: {JSON.stringify(toolInput)}</span>\n <span className=\"shrink-0 ml-2\">M3 UI Bridge</span>\n </div>\n )}\n </div>\n );\n};\n",
9
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/Markdown.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, isValidElement, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport ReactMarkdown, { type Components } from \"react-markdown\";\nimport rehypeRaw from \"rehype-raw\";\nimport remarkGfm from \"remark-gfm\";\n\ntype MarkdownSize = \"small\" | \"medium\" | \"large\";\n\ninterface MarkdownProps {\n content: string;\n className?: string;\n /** Body typescale of paragraphs and lists: `text-body-small|medium|large`. Default `medium`. */\n size?: MarkdownSize;\n /**\n * Render raw HTML embedded in the markdown (rehype-raw). Off by default: only enable it for\n * trusted content.\n */\n allowHtml?: boolean;\n}\n\nconst bodyClass: Record<MarkdownSize, string> = {\n small: \"text-body-small\",\n medium: \"text-body-medium\",\n large: \"text-body-large\",\n};\n\nfunction extractText(node: ReactNode): string {\n if (typeof node === \"string\") return node;\n if (typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(extractText).join(\"\");\n if (isValidElement(node)) return extractText((node.props as { children?: ReactNode }).children);\n return \"\";\n}\n\n// ---------------------------------------------------------------------------\n// Language detection & mapping\n// ---------------------------------------------------------------------------\n\nconst LANGUAGE_MAP: Record<string, string> = {\n typescript: \"TypeScript\",\n ts: \"TypeScript\",\n tsx: \"TSX\",\n javascript: \"JavaScript\",\n js: \"JavaScript\",\n jsx: \"JSX\",\n python: \"Python\",\n py: \"Python\",\n rust: \"Rust\",\n rs: \"Rust\",\n bash: \"Bash\",\n sh: \"Bash\",\n shell: \"Bash\",\n zsh: \"Bash\",\n json: \"JSON\",\n jsonc: \"JSONC\",\n sql: \"SQL\",\n html: \"HTML\",\n css: \"CSS\",\n scss: \"SCSS\",\n sass: \"Sass\",\n yaml: \"YAML\",\n yml: \"YAML\",\n markdown: \"Markdown\",\n md: \"Markdown\",\n go: \"Go\",\n golang: \"Go\",\n java: \"Java\",\n c: \"C\",\n cpp: \"C++\",\n \"c++\": \"C++\",\n csharp: \"C#\",\n cs: \"C#\",\n \"c#\": \"C#\",\n ruby: \"Ruby\",\n rb: \"Ruby\",\n php: \"PHP\",\n swift: \"Swift\",\n kotlin: \"Kotlin\",\n kt: \"Kotlin\",\n xml: \"XML\",\n toml: \"TOML\",\n dockerfile: \"Dockerfile\",\n docker: \"Dockerfile\",\n graphql: \"GraphQL\",\n gql: \"GraphQL\",\n wasm: \"WebAssembly\",\n lua: \"Lua\",\n r: \"R\",\n diff: \"Diff\",\n plaintext: \"Text\",\n text: \"Text\",\n txt: \"Text\",\n};\n\nexport function detectLanguage(raw?: string): { raw: string; label: string } {\n if (!raw) return { raw: \"\", label: \"Code\" };\n const cleaned = raw\n .replace(/^language-|^lang-/, \"\")\n .toLowerCase()\n .trim();\n if (LANGUAGE_MAP[cleaned]) {\n return { raw: cleaned, label: LANGUAGE_MAP[cleaned] };\n }\n const label =\n cleaned.length <= 3\n ? cleaned.toUpperCase()\n : cleaned.charAt(0).toUpperCase() + cleaned.slice(1);\n return { raw: cleaned, label };\n}\n\n// ---------------------------------------------------------------------------\n// CodeBlock component\n// ---------------------------------------------------------------------------\n\nexport interface CodeBlockProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onCopy\"> {\n code?: string;\n language?: string;\n onCopy?: (code: string) => void;\n children?: ReactNode;\n}\n\nexport function CodeBlock({\n code: explicitCode,\n language: explicitLang,\n onCopy,\n className,\n children,\n ...restProps\n}: CodeBlockProps) {\n // Strip node passed by ReactMarkdown to avoid rendering node=\"[object Object]\" in DOM\n const { node: _node, ...props } = restProps as Record<string, any>;\n\n const [copied, setCopied] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const childElement = isValidElement(children) ? children : null;\n const childProps = childElement\n ? (childElement.props as { className?: string; children?: ReactNode })\n : null;\n\n const rawLangMatch =\n explicitLang ??\n className?.match(/language-([a-zA-Z0-9_+#-]+)/)?.[1] ??\n childProps?.className?.match(/language-([a-zA-Z0-9_+#-]+)/)?.[1];\n\n const { raw: rawLang, label: languageLabel } = detectLanguage(rawLangMatch);\n\n const rawCode =\n explicitCode ??\n (childProps?.children ? extractText(childProps.children) : extractText(children));\n\n const codeContent = rawCode;\n const codeToCopy = rawCode.replace(/\\n$/, \"\");\n\n const handleCopy = async () => {\n try {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(codeToCopy);\n }\n } catch {\n // Ignore clipboard API failures in non-secure or test environments\n }\n onCopy?.(codeToCopy);\n setCopied(true);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n setCopied(false);\n }, 2000);\n };\n\n return (\n <div\n className={clsx(\n \"my-3 overflow-hidden rounded-medium border border-outline-variant bg-surface-container-highest\",\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between border-b border-outline-variant bg-surface-container px-3 py-1.5\">\n <span className=\"inline-flex items-center rounded-extra-small bg-surface-container-high px-2 py-0.5 text-label-small font-medium text-on-surface-variant border border-outline-variant/60\">\n {languageLabel}\n </span>\n <button\n type=\"button\"\n onClick={handleCopy}\n className={clsx(\n \"inline-flex items-center gap-1.5 rounded-small px-2 py-1 text-label-small font-medium transition-colors duration-200\",\n copied\n ? \"text-success\"\n : \"text-on-surface-variant hover:bg-on-surface/8 hover:text-on-surface active:bg-on-surface/12\",\n \"focus-visible:outline-2 focus-visible:outline-primary\",\n )}\n aria-label={copied ? \"Copied\" : \"Copy code\"}\n title={copied ? \"Copied!\" : \"Copy code\"}\n >\n <Icon\n name={copied ? \"check\" : \"content_copy\"}\n size={16}\n className={copied ? \"text-success\" : undefined}\n />\n <span>{copied ? \"Copied!\" : \"Copy\"}</span>\n </button>\n </div>\n <pre className=\"overflow-x-auto p-3 font-code text-body-small text-on-surface bg-surface-container-highest [&_code]:bg-transparent [&_code]:p-0 [&_code]:text-[length:inherit]\">\n <code className={rawLang ? `language-${rawLang}` : undefined}>{codeContent}</code>\n </pre>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Math formula rendering & typography\n// ---------------------------------------------------------------------------\n\nconst GREEK_AND_SYMBOLS: Record<string, string> = {\n // Greek letters (lowercase)\n alpha: \"α\",\n beta: \"β\",\n gamma: \"γ\",\n delta: \"δ\",\n epsilon: \"ε\",\n zeta: \"ζ\",\n eta: \"η\",\n theta: \"θ\",\n iota: \"ι\",\n kappa: \"κ\",\n lambda: \"λ\",\n mu: \"μ\",\n nu: \"ν\",\n xi: \"ξ\",\n pi: \"π\",\n rho: \"ρ\",\n sigma: \"σ\",\n tau: \"τ\",\n upsilon: \"υ\",\n phi: \"φ\",\n chi: \"χ\",\n psi: \"ψ\",\n omega: \"ω\",\n // Greek letters (uppercase)\n Gamma: \"Γ\",\n Delta: \"Δ\",\n Theta: \"Θ\",\n Lambda: \"Λ\",\n Xi: \"Ξ\",\n Pi: \"Π\",\n Sigma: \"Σ\",\n Phi: \"Φ\",\n Psi: \"Ψ\",\n Omega: \"Ω\",\n // Operators & Relations\n times: \"×\",\n div: \"÷\",\n pm: \"±\",\n mp: \"∓\",\n le: \"≤\",\n leq: \"≤\",\n ge: \"≥\",\n geq: \"≥\",\n approx: \"≈\",\n neq: \"≠\",\n ne: \"≠\",\n infty: \"∞\",\n cdot: \"·\",\n circ: \"°\",\n partial: \"∂\",\n nabla: \"∇\",\n sum: \"∑\",\n prod: \"∏\",\n int: \"∫\",\n sqrt: \"√\",\n in: \"∈\",\n notin: \"∉\",\n subset: \"⊂\",\n subseteq: \"⊆\",\n cup: \"∪\",\n cap: \"∩\",\n to: \"→\",\n rightarrow: \"→\",\n leftarrow: \"←\",\n leftrightarrow: \"↔\",\n Rightarrow: \"⇒\",\n Leftarrow: \"⇐\",\n Leftrightarrow: \"⇔\",\n forall: \"∀\",\n exists: \"∃\",\n};\n\nfunction formatSubSup(text: string): ReactNode {\n const parts = text.split(\n /(\\^\\{[^}]+\\}|\\^[-+]?[a-zA-Z0-9\\u0370-\\u03FF\\u2100-\\u214F]|_\\{[^}]+\\}|_[-+]?[a-zA-Z0-9\\u0370-\\u03FF\\u2100-\\u214F])/g,\n );\n if (parts.length === 1) return text;\n\n const occurrences = new Map<string, number>();\n return parts.map((part) => {\n const occurrence = occurrences.get(part) ?? 0;\n occurrences.set(part, occurrence + 1);\n const key = `${part}:${occurrence}`;\n if (part.startsWith(\"^\")) {\n const val = part.startsWith(\"^{\") && part.endsWith(\"}\") ? part.slice(2, -1) : part.slice(1);\n return (\n <sup key={key} className=\"text-[0.75em] leading-none\">\n {val}\n </sup>\n );\n }\n if (part.startsWith(\"_\")) {\n const val = part.startsWith(\"_{\") && part.endsWith(\"}\") ? part.slice(2, -1) : part.slice(1);\n return (\n <sub key={key} className=\"text-[0.75em] leading-none\">\n {val}\n </sub>\n );\n }\n return part;\n });\n}\n\nexport function formatMathContent(math: string): ReactNode {\n // Step 1: Replace LaTeX symbol commands \\name (or \\\\name)\n const text = math.replace(/\\\\+([a-zA-Z]+)/g, (match, name) => {\n return GREEK_AND_SYMBOLS[name] ?? match;\n });\n\n // Step 2: Handle \\frac{num}{den}\n const fracRegex = /\\\\+frac\\{([^{}]+)\\}\\{([^{}]+)\\}/g;\n if (fracRegex.test(text)) {\n const parts: ReactNode[] = [];\n let lastIndex = 0;\n text.replace(fracRegex, (match, num, den, offset) => {\n if (offset > lastIndex) {\n parts.push(formatSubSup(text.slice(lastIndex, offset)));\n }\n parts.push(\n <span\n key={`frac-${offset}`}\n className=\"inline-flex flex-col items-center align-middle mx-1 text-center text-[0.85em] leading-none not-italic\"\n >\n <span className=\"border-b border-current px-0.5 pb-0.5\">{formatSubSup(num)}</span>\n <span className=\"px-0.5 pt-0.5\">{formatSubSup(den)}</span>\n </span>,\n );\n lastIndex = offset + match.length;\n return match;\n });\n if (lastIndex < text.length) {\n parts.push(formatSubSup(text.slice(lastIndex)));\n }\n return parts;\n }\n\n return formatSubSup(text);\n}\n\nexport interface InlineMathProps extends React.HTMLAttributes<HTMLSpanElement> {\n math: string;\n}\n\nexport function InlineMath({ math, className, ...props }: InlineMathProps) {\n return (\n <span\n className={clsx(\n \"inline-flex items-center px-1 font-serif italic font-medium text-primary\",\n className,\n )}\n {...props}\n >\n {formatMathContent(math)}\n </span>\n );\n}\n\nexport interface BlockMathProps extends React.HTMLAttributes<HTMLDivElement> {\n math: string;\n}\n\nexport function BlockMath({ math, className, ...props }: BlockMathProps) {\n return (\n <div\n className={clsx(\n \"my-3 flex justify-center overflow-x-auto rounded-medium bg-surface-container-low/40 px-4 py-2 text-title-medium font-serif italic font-medium text-primary\",\n className,\n )}\n {...props}\n >\n {formatMathContent(math)}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Remark plugin for recognizing $...$ and $$...$$ expressions\n// ---------------------------------------------------------------------------\n\nfunction transformBlocks(parent: any) {\n if (!parent.children) return;\n const newChildren: any[] = [];\n for (const child of parent.children) {\n if (child.type === \"paragraph\" && Array.isArray(child.children)) {\n const hasBlockMath = child.children.some(\n (c: any) => c.type === \"text\" && /\\$\\$[\\s\\S]+?\\$\\$/.test(c.value),\n );\n if (hasBlockMath) {\n let currentParagraphChildren: any[] = [];\n for (const item of child.children) {\n if (item.type === \"text\" && /\\$\\$[\\s\\S]+?\\$\\$/.test(item.value)) {\n const parts = item.value.split(/(\\$\\$[\\s\\S]+?\\$\\$)/g);\n for (const part of parts) {\n if (part.startsWith(\"$$\") && part.endsWith(\"$$\") && part.length >= 4) {\n if (currentParagraphChildren.length > 0) {\n newChildren.push({\n type: \"paragraph\",\n children: currentParagraphChildren,\n });\n currentParagraphChildren = [];\n }\n const mathVal = part.slice(2, -2).trim();\n newChildren.push({\n type: \"mathBlock\",\n data: {\n hName: \"div\",\n hProperties: { className: \"math-block\", \"data-math\": mathVal },\n hChildren: [{ type: \"text\", value: mathVal }],\n },\n children: [{ type: \"text\", value: mathVal }],\n });\n } else if (part.trim().length > 0) {\n currentParagraphChildren.push({ type: \"text\", value: part });\n }\n }\n } else {\n currentParagraphChildren.push(item);\n }\n }\n if (currentParagraphChildren.length > 0) {\n newChildren.push({\n type: \"paragraph\",\n children: currentParagraphChildren,\n });\n }\n continue;\n }\n }\n transformBlocks(child);\n newChildren.push(child);\n }\n parent.children = newChildren;\n}\n\nfunction transformInlines(node: any) {\n if (!node.children) return;\n const newChildren: any[] = [];\n for (const child of node.children) {\n if (child.type === \"text\" && typeof child.value === \"string\" && child.value.includes(\"$\")) {\n const parts = child.value.split(/((?<!\\\\)\\$(?!\\s)[^$\\n]+?(?<!\\s)\\$(?!\\d))/g);\n for (const part of parts) {\n if (\n part.startsWith(\"$\") &&\n part.endsWith(\"$\") &&\n !part.startsWith(\"$$\") &&\n part.length > 2\n ) {\n const mathVal = part.slice(1, -1).trim();\n newChildren.push({\n type: \"mathInline\",\n data: {\n hName: \"span\",\n hProperties: { className: \"math-inline\", \"data-math\": mathVal },\n hChildren: [{ type: \"text\", value: mathVal }],\n },\n children: [{ type: \"text\", value: mathVal }],\n });\n } else if (part) {\n newChildren.push({ type: \"text\", value: part });\n }\n }\n } else {\n transformInlines(child);\n newChildren.push(child);\n }\n }\n node.children = newChildren;\n}\n\nfunction transformMathTree(tree: any) {\n transformBlocks(tree);\n transformInlines(tree);\n}\n\nexport function remarkMathPlugin() {\n return transformMathTree;\n}\n\n// ---------------------------------------------------------------------------\n// Element overrides mapping markdown onto M3 typescale and color roles\n// ---------------------------------------------------------------------------\n\nfunction m3Components(size: MarkdownSize): Components {\n const body = bodyClass[size];\n return {\n h1: ({ node: _node, className, children, ...props }) => (\n <h1\n className={clsx(\"mt-4 mb-2 text-headline-small text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h1>\n ),\n h2: ({ node: _node, className, children, ...props }) => (\n <h2\n className={clsx(\"mt-4 mb-2 text-title-large text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h2>\n ),\n h3: ({ node: _node, className, children, ...props }) => (\n <h3\n className={clsx(\"mt-3 mb-1.5 text-title-medium text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h3>\n ),\n h4: ({ node: _node, className, children, ...props }) => (\n <h4\n className={clsx(\"mt-3 mb-1 text-title-small text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h4>\n ),\n h5: ({ node: _node, className, children, ...props }) => (\n <h5\n className={clsx(\"mt-3 mb-1 text-title-small text-on-surface-variant first:mt-0\", className)}\n {...props}\n >\n {children}\n </h5>\n ),\n h6: ({ node: _node, className, children, ...props }) => (\n <h6\n className={clsx(\"mt-3 mb-1 text-label-large text-on-surface-variant first:mt-0\", className)}\n {...props}\n >\n {children}\n </h6>\n ),\n p: ({ node: _node, className, ...props }) => (\n <p className={clsx(\"my-2 first:mt-0 last:mb-0\", body, className)} {...props} />\n ),\n a: ({ node: _node, className, children, ...props }) => (\n <a\n className={clsx(\n \"text-primary underline underline-offset-2 hover:decoration-2\",\n \"rounded-extra-small outline-none focus-visible:outline-3 focus-visible:outline-secondary focus-visible:outline-offset-2\",\n className,\n )}\n {...props}\n >\n {children}\n </a>\n ),\n strong: ({ node: _node, className, ...props }) => (\n <strong className={clsx(\"font-semibold text-on-surface\", className)} {...props} />\n ),\n ul: ({ node: _node, className, ...props }) => (\n <ul\n className={clsx(\"my-2 list-disc pl-6 marker:text-on-surface-variant\", body, className)}\n {...props}\n />\n ),\n ol: ({ node: _node, className, ...props }) => (\n <ol\n className={clsx(\"my-2 list-decimal pl-6 marker:text-on-surface-variant\", body, className)}\n {...props}\n />\n ),\n li: ({ node: _node, className, ...props }) => (\n <li className={clsx(\"my-1\", className)} {...props} />\n ),\n blockquote: ({ node: _node, className, ...props }) => (\n <blockquote\n className={clsx(\n \"my-3 border-l-4 border-outline-variant pl-4 text-on-surface-variant\",\n className,\n )}\n {...props}\n />\n ),\n code: ({ node: _node, className, ...props }) => (\n <code\n className={clsx(\n \"rounded-extra-small bg-surface-container-highest px-1 py-0.5 font-code text-[0.9em] text-on-surface\",\n className,\n )}\n {...props}\n />\n ),\n pre: ({ node: _node, children, className, style }) => (\n <CodeBlock className={className} style={style}>\n {children}\n </CodeBlock>\n ),\n hr: ({ node: _node, className, ...props }) => (\n <hr className={clsx(\"my-4 border-outline-variant\", className)} {...props} />\n ),\n table: ({ node: _node, className, ...props }) => (\n <div className=\"my-3 overflow-x-auto rounded-small border border-outline-variant\">\n <table className={clsx(\"w-full border-collapse\", body, className)} {...props} />\n </div>\n ),\n thead: ({ node: _node, className, ...props }) => (\n <thead className={clsx(\"bg-surface-container\", className)} {...props} />\n ),\n th: ({ node: _node, className, ...props }) => (\n <th\n className={clsx(\n \"border-b border-outline-variant px-3 py-2 text-left text-title-small text-on-surface\",\n className,\n )}\n {...props}\n />\n ),\n td: ({ node: _node, className, ...props }) => (\n <td\n className={clsx(\"border-t border-outline-variant px-3 py-2 text-on-surface\", className)}\n {...props}\n />\n ),\n img: ({ node: _node, className, alt, ...props }) => (\n <img\n className={clsx(\"my-2 max-w-full rounded-medium\", className)}\n alt={alt ?? \"\"}\n {...props}\n />\n ),\n input: ({ node: _node, className, ...props }) => (\n <input className={clsx(\"mr-2 accent-primary\", className)} {...props} />\n ),\n div: ({ node: _node, className, children, ...props }) => {\n if (className?.includes(\"math-block\")) {\n const math = (props as Record<string, any>)[\"data-math\"] ?? extractText(children);\n return <BlockMath math={math} className={className} />;\n }\n return (\n <div className={className} {...props}>\n {children}\n </div>\n );\n },\n span: ({ node: _node, className, children, ...props }) => {\n if (className?.includes(\"math-inline\")) {\n const math = (props as Record<string, any>)[\"data-math\"] ?? extractText(children);\n return <InlineMath math={math} className={className} />;\n }\n return (\n <span className={className} {...props}>\n {children}\n </span>\n );\n },\n };\n}\n\nconst Markdown = forwardRef<HTMLDivElement, MarkdownProps>(\n ({ content, className, size = \"medium\", allowHtml = false }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\"markdown min-w-0 text-on-surface\", bodyClass[size], className)}\n >\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkMathPlugin]}\n rehypePlugins={allowHtml ? [rehypeRaw] : undefined}\n components={m3Components(size)}\n >\n {content}\n </ReactMarkdown>\n </div>\n );\n },\n);\n\nMarkdown.displayName = \"Markdown\";\n\nexport { Markdown };\nexport type { MarkdownProps };\n",
10
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/MessageBubble.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport { CircleButton } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { Markdown } from \"./Markdown\";\n\nexport interface MessageBubbleProps {\n content: string;\n isUser: boolean;\n isStreaming?: boolean;\n onCopy?: (content: string) => void;\n onDislike?: (content: string) => void;\n onFork?: () => void;\n variant?: \"default\" | \"codex\";\n className?: string;\n}\n\n/**\n * One chat turn. The user turn is an M3 bubble, the assistant turn is plain markdown\n * on the surface, as in M3 / Codex conversations.\n */\nexport function MessageBubble({\n content,\n isUser,\n isStreaming = false,\n onCopy,\n onDislike,\n onFork,\n variant = \"default\",\n className,\n}: MessageBubbleProps) {\n const isCodex = variant === \"codex\";\n\n return (\n <div\n className={clsx(\"group flex flex-col py-1.5 w-full\", isUser ? \"items-end\" : \"items-start\", className)}\n >\n <div\n className={clsx(\n \"min-w-0\",\n isUser\n ? isCodex\n ? \"max-w-[75%] rounded-[28px] bg-surface-container-high px-5 py-3 text-body-large text-on-surface shadow-xs\"\n : \"max-w-[80%] rounded-large rounded-br-extra-small bg-secondary-container px-4 py-2.5 text-body-large text-on-secondary-container\"\n : \"w-full max-w-full bg-transparent text-body-large text-on-surface\",\n )}\n aria-busy={isStreaming || undefined}\n >\n {isUser ? (\n <div className=\"whitespace-pre-wrap break-words\">{content}</div>\n ) : (\n <Markdown content={content} size=\"large\" className=\"break-words font-sans\" />\n )}\n </div>\n {!isUser && (onCopy || onDislike || onFork) ? (\n <div className=\"mt-1.5 flex items-center gap-1 opacity-0 transition-opacity duration-200 ease-standard group-focus-within:opacity-100 group-hover:opacity-100\">\n {onCopy && (\n <CircleButton\n icon=\"content_copy\"\n variant=\"standard\"\n size=\"sm\"\n onClick={() => onCopy(content)}\n aria-label={isStreaming ? \"Copy Streaming Message\" : \"Copy Message\"}\n title={isStreaming ? \"Copy streaming message\" : \"Copier\"}\n />\n )}\n {onDislike && (\n <CircleButton\n icon=\"thumb_down\"\n variant=\"standard\"\n size=\"sm\"\n onClick={() => onDislike(content)}\n aria-label=\"Dislike\"\n title=\"Je n'aime pas\"\n />\n )}\n {onFork && (\n <CircleButton\n icon=\"call_split\"\n variant=\"standard\"\n size=\"sm\"\n onClick={onFork}\n aria-label=\"Fork\"\n title=\"Bifurquer à partir de ce tour\"\n />\n )}\n </div>\n ) : null}\n </div>\n );\n}\n",
11
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/InlineWorkerCard.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useMemo, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Button, Icon } from \"@aphrody/m3-primitives\";\nimport { ToolCall } from \"./ToolCall\";\nimport { Markdown } from \"./Markdown\";\nimport type { TranscriptStep } from \"./types\";\nimport { pairTranscriptSteps } from \"./types\";\nimport { CircularIndicator, StatusChip, type ChipTone, expandMotion, focusRing } from \"./internal\";\n\n/** Collapse runs of 3+ spaces to 2, preventing Markdown 4-space code blocks. */\nfunction stripExcessWhitespace(text: string): string {\n return text.replace(/ {3,}/g, \" \");\n}\n\ninterface InlineWorkerCardProps {\n title: string;\n status: string;\n toolCallCount: number;\n liveStatus?: string | null;\n transcript: TranscriptStep[];\n isTranscriptLoading?: boolean;\n onCopyLogs?: () => void;\n onCancel?: () => void;\n className?: string;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n}\n\nfunction statusTone(status: string): ChipTone {\n switch (status) {\n case \"running\":\n return \"primary\";\n case \"completed\":\n return \"success\";\n case \"failed\":\n case \"error\":\n case \"cancelled\":\n return \"error\";\n default:\n return \"neutral\";\n }\n}\n\n/** A worker run as an M3 filled card: header, status chip, expandable transcript. */\nfunction InlineWorkerCard({\n title,\n status,\n toolCallCount,\n liveStatus,\n transcript,\n isTranscriptLoading,\n onCopyLogs,\n onCancel,\n className,\n defaultExpanded = false,\n}: InlineWorkerCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const contentId = useId();\n\n const items = useMemo(() => pairTranscriptSteps(transcript), [transcript]);\n\n const isRunning = status === \"running\";\n const isDone = status === \"completed\";\n const tone = statusTone(status);\n\n return (\n <div className={clsx(\"group flex min-w-0 flex-col items-start\", className)}>\n <div className=\"min-w-0 max-w-full overflow-hidden rounded-medium bg-surface-container text-on-surface\">\n <button\n type=\"button\"\n onClick={() => setExpanded((v) => !v)}\n aria-expanded={expanded}\n aria-controls={contentId}\n className={clsx(\n \"flex w-full items-start gap-3 rounded-medium px-4 py-3 text-left transition-colors duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <div className=\"flex size-8 shrink-0 items-center justify-center\">\n {isRunning ? (\n <CircularIndicator size={20} label=\"Worker running\" />\n ) : isDone ? (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-success-container text-on-success-container\">\n <Icon name=\"check_circle\" size={18} filled />\n </div>\n ) : tone === \"error\" ? (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-error-container text-on-error-container\">\n <Icon name=\"error\" size={18} filled />\n </div>\n ) : (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-surface-container-highest text-on-surface-variant\">\n <Icon name=\"build\" size={18} />\n </div>\n )}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <div className=\"line-clamp-2 min-w-0 flex-1 text-title-small text-on-surface\">\n {title}\n </div>\n <StatusChip tone={tone}>{status}</StatusChip>\n </div>\n <div className=\"mt-1 flex items-center gap-2 text-body-small text-on-surface-variant\">\n <span>{toolCallCount} tool calls</span>\n {liveStatus ? <span className=\"truncate text-outline\">{liveStatus}</span> : null}\n </div>\n </div>\n\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"mt-1.5 shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded ? \"rotate-180\" : \"\",\n )}\n />\n </button>\n\n <AnimatePresence initial={false}>\n {expanded ? (\n <motion.div\n id={contentId}\n key=\"transcript\"\n {...expandMotion}\n className=\"overflow-hidden\"\n >\n <div className=\"flex flex-col gap-2 border-t border-outline-variant px-4 py-3\">\n {isTranscriptLoading ? (\n <div className=\"flex items-center gap-2 text-body-small text-on-surface-variant\">\n <CircularIndicator size={16} label=\"Loading transcript\" />\n Loading worker transcript...\n </div>\n ) : items.length > 0 ? (\n items.map((item) =>\n item.kind === \"tool\" ? (\n <ToolCall key={item.pair.id} pair={item.pair} />\n ) : (\n <Markdown\n key={`text-${item.text}`}\n content={stripExcessWhitespace(item.text)}\n size=\"small\"\n className=\"text-on-surface-variant\"\n />\n ),\n )\n ) : (\n <div className=\"text-body-small text-on-surface-variant\">No tool calls yet.</div>\n )}\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n\n {(onCopyLogs || (onCancel && isRunning)) && (\n <div className=\"mt-1 flex gap-1 opacity-0 transition-opacity duration-200 ease-standard group-focus-within:opacity-100 group-hover:opacity-100\">\n {onCopyLogs && (\n <Button variant=\"text\" size=\"xs\" onClick={onCopyLogs} title=\"Copy logs\">\n <Icon name=\"content_copy\" size={18} />\n Copy\n </Button>\n )}\n {onCancel && isRunning && (\n <Button variant=\"text\" size=\"xs\" onClick={onCancel} title=\"Cancel\">\n <Icon name=\"stop\" size={18} />\n Cancel\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { InlineWorkerCard };\nexport type { InlineWorkerCardProps };\n",
12
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/InlineBranchCard.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { Markdown } from \"./Markdown\";\nimport { CircularIndicator, StatusChip, expandMotion, focusRing } from \"./internal\";\n\ninterface InlineBranchCardProps {\n description: string;\n completedAt: string | null;\n conclusion?: string | null;\n className?: string;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n}\n\n/** A thinking branch as an M3 filled card: header, status chip, expandable conclusion. */\nfunction InlineBranchCard({\n description,\n completedAt,\n conclusion,\n className,\n defaultExpanded = false,\n}: InlineBranchCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const isRunning = !completedAt;\n const contentId = useId();\n const canExpand = !!conclusion;\n\n return (\n <div className={clsx(\"group flex min-w-0 flex-col items-start\", className)}>\n <div className=\"min-w-0 max-w-full overflow-hidden rounded-medium bg-surface-container text-on-surface\">\n <button\n type=\"button\"\n onClick={() => canExpand && setExpanded((v) => !v)}\n aria-expanded={canExpand ? expanded : undefined}\n aria-controls={canExpand ? contentId : undefined}\n className={clsx(\n \"flex w-full items-start gap-3 rounded-medium px-4 py-3 text-left transition-colors duration-200 ease-standard\",\n canExpand && \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <div className=\"flex size-8 shrink-0 items-center justify-center\">\n {isRunning ? (\n <CircularIndicator size={20} label=\"Thinking\" />\n ) : (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-primary-container text-on-primary-container\">\n <Icon name=\"alt_route\" size={18} />\n </div>\n )}\n </div>\n <div className=\"min-w-0 flex-1 self-center\">\n <div className=\"flex items-center gap-2\">\n <div className=\"line-clamp-2 min-w-0 flex-1 text-title-small text-on-surface\">\n {description}\n </div>\n <StatusChip tone={isRunning ? \"primary\" : \"success\"}>\n {isRunning ? \"thinking\" : \"done\"}\n </StatusChip>\n </div>\n </div>\n {canExpand && (\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"mt-1.5 shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded ? \"rotate-180\" : \"\",\n )}\n />\n )}\n </button>\n <AnimatePresence initial={false}>\n {expanded && conclusion ? (\n <motion.div\n id={contentId}\n key=\"conclusion\"\n {...expandMotion}\n className=\"overflow-hidden\"\n >\n <div className=\"border-t border-outline-variant px-4 py-3\">\n <Markdown content={conclusion} size=\"small\" className=\"text-on-surface-variant\" />\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n </div>\n );\n}\n\nexport { InlineBranchCard };\nexport type { InlineBranchCardProps };\n",
13
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ModelSelector.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport {\n Icon,\n Popover,\n usePopover,\n SelectPill,\n type SelectPillProps,\n} from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport type { ModelOption } from \"./types\";\n\nexport interface ModelSelectorProps {\n /** Available models */\n models: ModelOption[];\n /** Currently selected model ID */\n value: string;\n /** Called when a model is selected */\n onChange: (value: string) => void;\n /** Placeholder when nothing selected */\n placeholder?: string;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** SelectPill variant */\n variant?: SelectPillProps[\"variant\"];\n /** SelectPill size */\n size?: SelectPillProps[\"size\"];\n /** Controlled popover (optional) */\n popover?: ReturnType<typeof usePopover>;\n /** Additional trigger className */\n className?: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\n/** Group models by provider, keeping the order of first appearance. */\nexport function groupModelsByProvider(\n models: ModelOption[],\n search = \"\",\n): Record<string, ModelOption[]> {\n const q = search.trim().toLowerCase();\n const filtered = q\n ? models.filter((m) => m.name.toLowerCase().includes(q) || m.provider.toLowerCase().includes(q))\n : models;\n\n return filtered.reduce(\n (acc, model) => {\n if (!acc[model.provider]) acc[model.provider] = [];\n acc[model.provider].push(model);\n return acc;\n },\n Object.create(null) as Record<string, ModelOption[]>,\n );\n}\n\nexport interface ModelOptionListProps {\n /** Models grouped by provider (see {@link groupModelsByProvider}). */\n grouped: Record<string, ModelOption[]>;\n /** Currently selected model ID */\n value: string;\n /** Called when a model is picked */\n onSelect: (value: string) => void;\n className?: string;\n}\n\n/**\n * The M3 menu list of the model selector: provider section headers (`text-title-small`),\n * 48 dp two-line items (`text-label-large` + `text-body-small` supporting text), the selected\n * item on `secondary-container`, capabilities as small outlined chips.\n */\nexport function ModelOptionList({ grouped, value, onSelect, className }: ModelOptionListProps) {\n const providers = Object.entries(grouped);\n const models = providers.flatMap(([, providerModels]) => providerModels);\n const [focusedId, setFocusedId] = useState(value);\n const focusId = models.some((model) => model.id === focusedId)\n ? focusedId\n : (models.find((model) => model.id === value)?.id ?? models[0]?.id);\n return (\n <div\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu whose options are rich rows (headers, supporting text, chips); a native <select>/<datalist> cannot render them.\n role=\"listbox\"\n aria-label=\"Models\"\n tabIndex={-1}\n onKeyDown={(event) => {\n if (event.defaultPrevented) return;\n const options = Array.from(\n event.currentTarget.querySelectorAll<HTMLButtonElement>('[role=\"option\"]'),\n );\n const index = options.indexOf(event.target as HTMLButtonElement);\n if (index < 0) return;\n let next: number;\n switch (event.key) {\n case \"ArrowDown\":\n next = (index + 1) % options.length;\n break;\n case \"ArrowUp\":\n next = (index - 1 + options.length) % options.length;\n break;\n case \"Home\":\n next = 0;\n break;\n case \"End\":\n next = options.length - 1;\n break;\n default:\n return;\n }\n event.preventDefault();\n options[next]!.focus();\n }}\n className={clsx(\"flex flex-col\", className)}\n >\n {providers.map(([provider, providerModels], groupIndex) => (\n <div\n key={provider}\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- provider section of the custom listbox with a visible M3 header row; <optgroup> only exists inside a native <select>.\n role=\"group\"\n aria-label={provider}\n className={clsx(groupIndex > 0 && \"mt-1 border-t border-outline-variant pt-1\")}\n >\n <div className=\"px-3 pt-2 pb-1 text-title-small text-on-surface-variant\">{provider}</div>\n {providerModels.map((model) => {\n const selected = model.id === value;\n return (\n <button\n key={model.id}\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 two-line menu item (label, supporting text, capability chips, check icon); a native <option> can only hold text.\n role=\"option\"\n aria-selected={selected}\n tabIndex={model.id === focusId ? 0 : -1}\n onFocus={() => setFocusedId(model.id)}\n onClick={() => onSelect(model.id)}\n className={clsx(\n \"flex min-h-12 w-full items-center gap-3 px-3 py-2 text-left\",\n \"transition-colors duration-200 ease-standard\",\n selected\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"text-on-surface hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-label-large\">{model.name}</div>\n {model.context_window || model.capabilities?.length ? (\n <div className=\"mt-0.5 flex flex-wrap items-center gap-1\">\n {model.context_window ? (\n <span\n className={clsx(\n \"text-body-small\",\n selected ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {model.context_window.toLocaleString()} tokens\n </span>\n ) : null}\n {model.capabilities?.map((capability) => (\n <span\n key={capability}\n className={clsx(\n \"inline-flex h-5 items-center rounded-small border border-outline-variant px-1.5 text-label-small\",\n selected ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {capability}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n {selected && <Icon name=\"check\" size={20} className=\"shrink-0\" />}\n </button>\n );\n })}\n </div>\n ))}\n {providers.length === 0 && (\n <div className=\"px-3 py-3 text-center text-body-small text-on-surface-variant\">\n No models found\n </div>\n )}\n </div>\n );\n}\n\n/**\n * The menu's search field. It mounts with the popover content and takes focus then (replaces\n * `autoFocus`), so typing filters the list as soon as the menu opens.\n */\nfunction ModelSearchField({\n value,\n onChange,\n placeholder,\n}: {\n value: string;\n onChange: (value: string) => void;\n placeholder: string;\n}) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n return (\n <div className=\"px-2 pb-2\">\n <label className=\"flex h-10 items-center gap-2 rounded-full bg-surface-container-high px-3 text-on-surface-variant focus-within:bg-surface-container-highest\">\n <Icon name=\"search\" size={20} className=\"shrink-0\" />\n <input\n ref={inputRef}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n placeholder={placeholder}\n aria-label={placeholder}\n className=\"min-w-0 flex-1 bg-transparent text-body-large text-on-surface outline-none placeholder:text-on-surface-variant\"\n />\n </label>\n </div>\n );\n}\n\nexport const ModelSelector = forwardRef<HTMLButtonElement, ModelSelectorProps>(\n (\n {\n models,\n value,\n onChange,\n placeholder = \"Select model...\",\n searchPlaceholder = \"Search models...\",\n variant,\n size,\n popover: externalPopover,\n className,\n disabled,\n },\n ref,\n ) => {\n const internalPopover = usePopover();\n const popover = externalPopover ?? internalPopover;\n const [search, setSearch] = useState(\"\");\n\n const selectedModel = models.find((m) => m.id === value);\n\n const grouped = useMemo(() => groupModelsByProvider(models, search), [models, search]);\n\n return (\n <Popover.Root\n open={popover.open}\n onOpenChange={(open) => {\n popover.setOpen(open);\n if (!open) setSearch(\"\");\n }}\n >\n <Popover.Trigger asChild>\n <SelectPill\n ref={ref}\n variant={variant}\n size={size}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n className={clsx(\"w-full\", className)}\n >\n {selectedModel?.name ?? placeholder}\n </SelectPill>\n </Popover.Trigger>\n <Popover.Content\n align=\"end\"\n sideOffset={8}\n style={{ width: 280 }}\n className=\"overflow-hidden rounded-extra-small! py-2\"\n >\n {/* Search */}\n <ModelSearchField value={search} onChange={setSearch} placeholder={searchPlaceholder} />\n\n {/* Grouped results */}\n <div className=\"max-h-[320px] overflow-y-auto\">\n <ModelOptionList\n grouped={grouped}\n value={value}\n onSelect={(id) => {\n onChange(id);\n popover.setOpen(false);\n setSearch(\"\");\n }}\n />\n </div>\n </Popover.Content>\n </Popover.Root>\n );\n },\n);\n\nModelSelector.displayName = \"ModelSelector\";\n",
14
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ChatComposer.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport { CircleButton, Icon, Popover, SelectPill, usePopover } from \"@aphrody/m3-primitives\";\nimport { m3Durations, m3Easings } from \"@aphrody/m3-motion\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { type ReactNode } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport { ModelSelector } from \"./ModelSelector\";\nimport type { ModelOption } from \"./types\";\n\nexport interface ChatComposerProps {\n /** Current draft text */\n draft: string;\n /** Called when draft changes */\n onDraftChange: (value: string) => void;\n /** Called when user hits send (Enter or send button) */\n onSend: () => void;\n /** Placeholder for the textarea */\n placeholder?: string;\n /** Show an optional heading above the composer */\n heading?: ReactNode;\n /** Disable the composer — draft can still change, but send/voice are blocked */\n isSending?: boolean;\n /** Project selector config — omit to hide */\n projectSelector?: {\n value: string;\n options: string[];\n onChange: (project: string) => void;\n popover: ReturnType<typeof usePopover>;\n };\n /** Model selector config — omit to hide */\n modelSelector?: {\n value: string;\n options: ModelOption[];\n onChange: (model: string) => void;\n };\n /** Voice button handler — omit to hide */\n onOpenVoice?: () => void;\n /** Optional content rendered at the far right of the toolbar (before send) */\n toolbarExtra?: ReactNode;\n /** Stop handler: while `isSending`, the send button becomes an M3 `stop` icon button. */\n onStop?: () => void;\n /** Additional className on the composer container */\n className?: string;\n}\n\nconst iconButtonEnter = {\n initial: { scale: 0.6, opacity: 0 },\n animate: {\n scale: 1,\n opacity: 1,\n transition: { duration: m3Durations.short4, ease: m3Easings.emphasizedDecelerate },\n },\n exit: {\n scale: 0.6,\n opacity: 0,\n transition: { duration: m3Durations.short3, ease: m3Easings.emphasizedAccelerate },\n },\n} as const;\n\n/**\n * Generic chat composer on the M3 search-bar anatomy: a `surface-container-high` container with\n * the extra-large (28 dp) shape, a `text-body-large` expanding textarea, an optional project\n * pill, model selector chip, a standard mic icon button and a filled send / stop icon button.\n */\nexport function ChatComposer({\n draft,\n onDraftChange,\n onSend,\n placeholder = \"Ask something...\",\n heading,\n isSending = false,\n projectSelector,\n modelSelector,\n onOpenVoice,\n toolbarExtra,\n onStop,\n className,\n}: ChatComposerProps) {\n const canSend = !isSending && draft.trim().length > 0;\n const showStop = isSending && !!onStop;\n\n return (\n <>\n {heading && (\n <div className=\"mb-3 flex items-center gap-2 px-1 text-title-small text-on-surface-variant\">\n <Icon name=\"auto_awesome\" size={18} filled className=\"text-primary\" />\n {heading}\n </div>\n )}\n\n <div\n className={clsx(\n \"m3-chat-composer rounded-extra-large bg-surface-container-high px-4 pt-3 pb-2 text-on-surface\",\n \"transition-colors duration-200 ease-standard focus-within:bg-surface-container-highest\",\n className,\n )}\n >\n <textarea\n value={draft}\n onChange={(event) => onDraftChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n onSend();\n }\n }}\n placeholder={placeholder}\n aria-label={placeholder}\n rows={2}\n className=\"block w-full resize-none border-0 bg-transparent px-1 text-body-large text-on-surface caret-primary outline-none placeholder:text-on-surface-variant focus:outline-none focus:ring-0\"\n />\n\n <div className=\"mt-2 flex items-center justify-between gap-2\">\n {projectSelector ? (\n <div className=\"w-[210px]\">\n <Popover.Root\n open={projectSelector.popover.open}\n onOpenChange={projectSelector.popover.setOpen}\n >\n <Popover.Trigger asChild>\n <SelectPill className=\"w-full\" aria-haspopup=\"listbox\">\n {projectSelector.value}\n </SelectPill>\n </Popover.Trigger>\n <Popover.Content\n align=\"start\"\n sideOffset={8}\n className=\"min-w-[210px] overflow-hidden rounded-extra-small! py-2\"\n >\n <div\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu in a popover with icon rows; a native <select>/<datalist> cannot render it.\n role=\"listbox\"\n aria-label=\"Projects\"\n >\n {projectSelector.options.map((option) => {\n const selected = option === projectSelector.value;\n return (\n <button\n key={option}\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu item with a check icon and state layer; a native <option> can only hold text.\n role=\"option\"\n aria-selected={selected}\n onClick={() => {\n projectSelector.onChange(option);\n projectSelector.popover.setOpen(false);\n }}\n className={clsx(\n \"flex h-12 w-full items-center gap-3 px-3 text-left text-label-large\",\n \"transition-colors duration-200 ease-standard\",\n selected\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"text-on-surface hover:bg-on-surface/8\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">{option}</span>\n {selected && <Icon name=\"check\" size={20} />}\n </button>\n );\n })}\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n ) : (\n <div />\n )}\n\n <motion.div layout className=\"flex items-center gap-1\">\n {modelSelector && (\n <div className=\"w-[180px]\">\n <ModelSelector\n models={modelSelector.options}\n value={modelSelector.value}\n onChange={modelSelector.onChange}\n size=\"md\"\n />\n </div>\n )}\n\n {toolbarExtra}\n\n {onOpenVoice && (\n <CircleButton\n icon=\"mic\"\n variant=\"standard\"\n onClick={onOpenVoice}\n disabled={isSending}\n aria-label=\"Open Voice Input\"\n />\n )}\n\n <AnimatePresence initial={false} mode=\"popLayout\">\n {showStop ? (\n <motion.button\n key=\"stop\"\n type=\"button\"\n {...iconButtonEnter}\n onClick={onStop}\n aria-label=\"Stop\"\n className={clsx(\n \"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary text-on-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/92 active:bg-primary/90\",\n focusRing,\n )}\n >\n <Icon name=\"stop\" size={24} filled />\n </motion.button>\n ) : canSend ? (\n <motion.button\n key=\"send\"\n type=\"button\"\n {...iconButtonEnter}\n onClick={onSend}\n aria-label=\"Send\"\n className={clsx(\n \"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary text-on-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/92 active:bg-primary/90\",\n focusRing,\n )}\n >\n <Icon name=\"arrow_upward\" size={24} />\n </motion.button>\n ) : null}\n </AnimatePresence>\n </motion.div>\n </div>\n </div>\n </>\n );\n}\n",
15
+ "// SPDX-License-Identifier: Apache-2.0\n// Benchmark: assets/ui/google-desktop-spotlight-bar.png (manifest item 1)\n// Dimensions: ~1266x450px, border-radius 32dp (BRAND_CORNER_PROMPT_BAR_PX), Alt + Space capsule\n\n\"use client\";\n\nimport { CircleButton, Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { type ReactNode, useState } from \"react\";\n\nexport interface GoogleSpotlightBarProps {\n /** Placeholder text */\n placeholder?: string;\n /** Active query draft */\n query?: string;\n /** On change callback */\n onQueryChange?: (val: string) => void;\n /** Triggered on submit */\n onSubmit?: (query: string) => void;\n /** File/attachment action handler */\n onAttach?: () => void;\n /** Screen capture / share window handler */\n onScreenCapture?: () => void;\n /** Google Lens multimodal query handler */\n onGoogleLens?: () => void;\n /** User avatar element or image URL */\n avatar?: ReactNode;\n /** Additional container classes */\n className?: string;\n}\n\n/**\n * Floating Spotlight Assistant Bar & Search Capsule (Alt + Space).\n * Benchmark parity: `google-desktop-spotlight-bar.png` (manifest item 1).\n * Features:\n * - Floating translucent frameless capsule with 32dp corner radius (--gemini-corner-prompt-bar).\n * - Soft desktop elevation shadow.\n * - Global shortcut pill indicator ('Alt + Space').\n * - Multimodal action buttons (+ for attach, screen capture, Google Lens).\n */\nexport function GoogleSpotlightBar({\n placeholder = \"Ask anything or start typing...\",\n query: controlledQuery,\n onQueryChange,\n onSubmit,\n onAttach,\n onScreenCapture,\n onGoogleLens,\n avatar,\n className,\n}: GoogleSpotlightBarProps) {\n const [internalQuery, setInternalQuery] = useState(\"\");\n const query = controlledQuery !== undefined ? controlledQuery : internalQuery;\n\n const handleChange = (val: string) => {\n if (controlledQuery === undefined) {\n setInternalQuery(val);\n }\n onQueryChange?.(val);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && query.trim().length > 0) {\n e.preventDefault();\n onSubmit?.(query);\n }\n };\n\n return (\n <search\n aria-label=\"Google Spotlight Assistant\"\n className={clsx(\n \"google-spotlight-capsule relative mx-auto flex w-full max-w-[840px] items-center gap-3\",\n \"rounded-[var(--gemini-corner-prompt-bar,32px)] bg-surface-container-high/90 px-5 py-3.5 backdrop-blur-xl\",\n \"border border-outline-variant/30 text-on-surface shadow-md3-3 transition-all duration-200\",\n \"focus-within:border-primary/50 focus-within:bg-surface-container-highest/95 focus-within:shadow-md3-4\",\n className,\n )}\n >\n {/* Google Colorful G Logo */}\n <div className=\"flex h-9 w-9 shrink-0 items-center justify-center\">\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n <path\n fill=\"#4285F4\"\n d=\"M23.745 12.27c0-.7-.06-1.4-.19-2.07H12v4.51h6.6c-.29 1.52-1.14 2.8-2.4 3.64v3.03h3.88c2.27-2.09 3.665-5.17 3.665-9.11z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M12 24c3.24 0 5.95-1.08 7.93-2.91l-3.88-3.03c-1.08.72-2.45 1.16-4.05 1.16-3.12 0-5.77-2.1-6.72-4.93H1.25v3.13C3.28 21.43 7.33 24 12 24z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M5.28 14.29c-.25-.72-.38-1.49-.38-2.29s.14-1.57.38-2.29V6.57H1.25C.45 8.16 0 9.98 0 12s.45 3.84 1.25 5.43l4.03-3.14z\"\n />\n <path\n fill=\"#EA4335\"\n d=\"M12 4.75c1.77 0 3.35.61 4.6 1.8l3.42-3.42C17.95 1.19 15.24 0 12 0 7.33 0 3.28 2.57 1.25 6.57l4.03 3.14c.95-2.83 3.6-4.96 6.72-4.96z\"\n />\n </svg>\n </div>\n\n {/* Main multimodal text input */}\n <input\n type=\"text\"\n value={query}\n onChange={(e) => handleChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n aria-label={placeholder}\n className=\"block flex-1 border-0 bg-transparent px-1 text-body-large text-on-surface caret-primary outline-none placeholder:text-on-surface-variant focus:outline-none focus:ring-0\"\n />\n\n {/* Multimodal Actions (Attach, Screen, Lens) */}\n <div className=\"flex shrink-0 items-center gap-1.5\">\n {onAttach && (\n <CircleButton\n variant=\"standard\"\n size=\"sm\"\n onClick={onAttach}\n aria-label=\"Add attachments\"\n title=\"Attach file\"\n >\n <Icon name=\"add\" size={20} />\n </CircleButton>\n )}\n\n {onScreenCapture && (\n <CircleButton\n variant=\"standard\"\n size=\"sm\"\n onClick={onScreenCapture}\n aria-label=\"Capture screen\"\n title=\"Share or capture screen\"\n >\n <Icon name=\"screenshot\" size={20} />\n </CircleButton>\n )}\n\n {onGoogleLens && (\n <CircleButton\n variant=\"standard\"\n size=\"sm\"\n onClick={onGoogleLens}\n aria-label=\"Google Lens\"\n title=\"Search with Google Lens\"\n className=\"hover:text-primary\"\n >\n <Icon name=\"center_focus_strong\" size={20} />\n </CircleButton>\n )}\n\n {/* Global Shortcut Pill: Alt + Space */}\n <div\n aria-hidden=\"true\"\n className=\"ml-1 hidden select-none items-center rounded-full bg-surface-container px-2.5 py-1 text-label-small font-medium text-on-surface-variant sm:flex\"\n >\n Alt + Space\n </div>\n\n {/* User avatar if provided */}\n {avatar && <div className=\"ml-1 shrink-0\">{avatar}</div>}\n </div>\n </search>\n );\n}\n",
16
+ "// SPDX-License-Identifier: Apache-2.0\n// Benchmark: assets/ui/gemini-account-menu.png & gemini-composer-more-uploads.png\n// Anchored account menu and composer actions menu matching Google Gemini Web UI\n\n\"use client\";\n\nimport { Icon, Popover } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport type { ReactNode } from \"react\";\n\nexport interface MenuItem {\n id: string;\n label: string;\n icon?: string;\n shortcut?: string;\n onClick?: () => void;\n destructive?: boolean;\n dividerAfter?: boolean;\n}\n\nexport interface GeminiAccountMenuProps {\n /** User name */\n name: string;\n /** User email */\n email: string;\n /** Avatar image URL or fallback initials */\n avatar?: ReactNode;\n /** Menu open state */\n open: boolean;\n /** Menu open state change */\n onOpenChange: (open: boolean) => void;\n /** Menu items */\n items?: MenuItem[];\n /** Trigger element */\n children: ReactNode;\n /** Additional container class */\n className?: string;\n}\n\nconst EMPTY_MENU_ITEMS: MenuItem[] = [];\n\n/**\n * Gemini Sidebar Footer Account Menu.\n * Benchmark parity: `assets/ui/gemini-account-menu.png` (manifest item 2).\n * Anchored to the sidebar footer avatar/profile card, displaying Google account\n * details and navigation links with M3 typography, icons, and keyboard-reachable rows.\n */\nexport function GeminiAccountMenu({\n name,\n email,\n avatar,\n open,\n onOpenChange,\n items = EMPTY_MENU_ITEMS,\n children,\n className,\n}: GeminiAccountMenuProps) {\n return (\n <Popover.Root open={open} onOpenChange={onOpenChange}>\n <Popover.Trigger asChild>{children}</Popover.Trigger>\n <Popover.Content\n align=\"start\"\n side=\"top\"\n sideOffset={8}\n className={clsx(\n \"gemini-account-menu w-[300px] overflow-hidden rounded-[var(--gemini-corner-card,16px)]\",\n \"border border-outline-variant/40 bg-surface-container p-2 text-on-surface shadow-md3-3\",\n className,\n )}\n >\n {/* User Card Header */}\n <div className=\"flex items-center gap-3 rounded-small bg-surface-container-high p-3\">\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary-container text-title-medium text-on-primary-container\">\n {avatar ?? name.charAt(0).toUpperCase()}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-body-medium font-medium text-on-surface\">{name}</div>\n <div className=\"truncate text-body-small text-on-surface-variant\">{email}</div>\n </div>\n </div>\n\n {/* Action Items List */}\n <div className=\"mt-2 space-y-0.5\" role=\"menu\">\n {items.map((item) => (\n <div key={item.id}>\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={() => {\n item.onClick?.();\n onOpenChange(false);\n }}\n className={clsx(\n \"flex w-full items-center justify-between rounded-small px-3 py-2 text-body-medium transition-colors\",\n \"hover:bg-on-surface/8 active:bg-on-surface/12\",\n item.destructive\n ? \"text-error hover:bg-error/8\"\n : \"text-on-surface hover:text-on-surface\",\n )}\n >\n <div className=\"flex items-center gap-3\">\n {item.icon && (\n <Icon\n name={item.icon}\n size={20}\n className={item.destructive ? \"text-error\" : \"text-on-surface-variant\"}\n />\n )}\n <span>{item.label}</span>\n </div>\n {item.shortcut && (\n <span className=\"text-label-small text-on-surface-variant\">{item.shortcut}</span>\n )}\n </button>\n {item.dividerAfter && <div className=\"my-1 border-t border-outline-variant/30\" />}\n </div>\n ))}\n </div>\n </Popover.Content>\n </Popover.Root>\n );\n}\n\nexport interface ComposerMoreUploadsMenuProps {\n /** Menu open state */\n open: boolean;\n /** Menu open state change */\n onOpenChange: (open: boolean) => void;\n /** Items in upload/add menu */\n items: MenuItem[];\n /** Submenu items (e.g., More uploads / Google Drive / Workspace) */\n submenuItems?: MenuItem[];\n /** Trigger element */\n children: ReactNode;\n}\n\n/**\n * Composer Add & More Uploads Menu.\n * Benchmark parity: `assets/ui/gemini-composer-more-uploads.png` (manifest item 3).\n * Anchored to the '+' trigger of the composer, grouping related upload actions\n * with an optional adjacent secondary submenu.\n */\nexport function ComposerMoreUploadsMenu({\n open,\n onOpenChange,\n items,\n submenuItems,\n children,\n}: ComposerMoreUploadsMenuProps) {\n return (\n <Popover.Root open={open} onOpenChange={onOpenChange}>\n <Popover.Trigger asChild>{children}</Popover.Trigger>\n <Popover.Content\n align=\"start\"\n side=\"top\"\n sideOffset={10}\n className=\"gemini-composer-uploads-menu flex gap-2 rounded-[var(--gemini-corner-card,16px)] border border-outline-variant/30 bg-surface-container p-1.5 shadow-md3-3\"\n >\n {/* Primary Menu */}\n <div className=\"w-[220px] space-y-0.5\" role=\"menu\">\n {items.map((item) => (\n <div key={item.id}>\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={() => {\n item.onClick?.();\n onOpenChange(false);\n }}\n className=\"flex w-full items-center gap-3 rounded-small px-3 py-2 text-body-medium text-on-surface transition-colors hover:bg-on-surface/8\"\n >\n {item.icon && (\n <Icon name={item.icon} size={20} className=\"text-on-surface-variant\" />\n )}\n <span className=\"flex-1 text-left\">{item.label}</span>\n </button>\n {item.dividerAfter && <div className=\"my-1 border-t border-outline-variant/30\" />}\n </div>\n ))}\n </div>\n\n {/* Secondary Submenu if provided */}\n {submenuItems && submenuItems.length > 0 && (\n <div\n className=\"w-[200px] border-l border-outline-variant/20 pl-2 space-y-0.5\"\n role=\"menu\"\n aria-label=\"More uploads\"\n >\n <div className=\"px-2 py-1 text-label-small font-medium text-on-surface-variant uppercase tracking-wider\">\n Cloud & Storage\n </div>\n {submenuItems.map((sub) => (\n <button\n key={sub.id}\n type=\"button\"\n role=\"menuitem\"\n onClick={() => {\n sub.onClick?.();\n onOpenChange(false);\n }}\n className=\"flex w-full items-center gap-3 rounded-small px-3 py-2 text-body-medium text-on-surface transition-colors hover:bg-on-surface/8\"\n >\n {sub.icon && <Icon name={sub.icon} size={20} className=\"text-primary\" />}\n <span className=\"flex-1 text-left\">{sub.label}</span>\n </button>\n ))}\n </div>\n )}\n </Popover.Content>\n </Popover.Root>\n );\n}\n",
17
+ "// SPDX-License-Identifier: Apache-2.0\n// Benchmark: assets/ui/gemini-personal-context-edit.png\n// Focused multiline context editor dialog for user preferences and saved agent memory\n\n\"use client\";\n\nimport { Button, DialogClose, DialogContent, DialogRoot, Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { useState } from \"react\";\n\nexport interface GeminiPersonalContextEditProps {\n /** Controls open state of the dialog */\n open: boolean;\n /** Open state change callback */\n onOpenChange: (open: boolean) => void;\n /** Current context text */\n initialContext?: string;\n /** Title of the dialog */\n title?: string;\n /** Subtitle/description of context rules */\n description?: string;\n /** Save callback */\n onSave: (context: string) => void | Promise<void>;\n /** Clear/delete context callback */\n onClear?: () => void;\n /** Additional container classes */\n className?: string;\n}\n\n/**\n * Gemini Personal Context & User Memory Editor Dialog.\n * Benchmark parity: `assets/ui/gemini-personal-context-edit.png` (manifest item 4).\n * Features:\n * - Centered dialog over translucent backdrop blur.\n * - Focused multiline context editor with visible focus outline.\n * - Save button is disabled when context is empty or unchanged.\n * - Contextual instructions for how agent uses personal context.\n */\nexport function GeminiPersonalContextEdit({\n open,\n onOpenChange,\n initialContext = \"\",\n title = \"Your personal context\",\n description = \"Help Gemini understand your preferences, interests, and how you want it to respond. This information is saved and applied across your conversations.\",\n onSave,\n onClear,\n className,\n}: GeminiPersonalContextEditProps) {\n const [context, setContext] = useState(initialContext);\n const [isSaving, setIsSaving] = useState(false);\n\n const [previousInputs, setPreviousInputs] = useState({ initialContext, open });\n // Reset the draft before committing a changed source or open state, while preserving the editor node and focus.\n if (previousInputs.initialContext !== initialContext || previousInputs.open !== open) {\n setPreviousInputs({ initialContext, open });\n setContext(initialContext);\n }\n\n const hasChanged = context.trim() !== initialContext.trim();\n const canSave = context.trim().length > 0 && hasChanged && !isSaving;\n\n const handleSave = async () => {\n if (!canSave) return;\n setIsSaving(true);\n try {\n await onSave(context.trim());\n onOpenChange(false);\n } finally {\n setIsSaving(false);\n }\n };\n\n return (\n <DialogRoot open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className={clsx(\n \"gemini-context-edit-dialog w-full max-w-[620px] rounded-[var(--gemini-corner-card,16px)]\",\n \"border border-outline-variant/30 bg-surface p-6 text-on-surface shadow-md3-3\",\n className,\n )}\n >\n {/* Header */}\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"space-y-1\">\n <h2 className=\"text-headline-small font-normal text-on-surface flex items-center gap-2\">\n <Icon name=\"psychology\" size={24} className=\"text-primary\" />\n {title}\n </h2>\n <p className=\"text-body-medium text-on-surface-variant leading-relaxed\">\n {description}\n </p>\n </div>\n <DialogClose asChild>\n <button\n type=\"button\"\n className=\"rounded-full p-1.5 text-on-surface-variant hover:bg-on-surface/8 transition-colors\"\n aria-label=\"Close\"\n >\n <Icon name=\"close\" size={20} />\n </button>\n </DialogClose>\n </div>\n\n {/* Text Area Input */}\n <div className=\"mt-5 space-y-2\">\n <div className=\"relative rounded-medium border-2 border-primary/60 bg-surface-container-low transition-all focus-within:border-primary focus-within:ring-2 focus-within:ring-primary/20\">\n <textarea\n value={context}\n onChange={(e) => setContext(e.target.value)}\n placeholder=\"e.g. Always respond in concise bullet points, write modern TypeScript with Bun, favor pure functions...\"\n rows={6}\n aria-label=\"Personal context content\"\n className=\"block w-full resize-y border-0 bg-transparent p-3.5 text-body-medium text-on-surface caret-primary outline-none placeholder:text-on-surface-variant/60\"\n />\n </div>\n <div className=\"flex justify-between px-1 text-label-small text-on-surface-variant\">\n <span>{context.length} characters</span>\n {initialContext.length > 0 && onClear && (\n <button\n type=\"button\"\n onClick={() => {\n setContext(\"\");\n onClear();\n }}\n className=\"text-error hover:underline transition-all\"\n >\n Clear saved context\n </button>\n )}\n </div>\n </div>\n\n {/* Footer Actions */}\n <div className=\"mt-6 flex items-center justify-end gap-3\">\n <DialogClose asChild>\n <Button variant=\"text\" disabled={isSaving}>\n Cancel\n </Button>\n </DialogClose>\n <Button variant=\"filled\" onClick={handleSave} disabled={!canSave} className=\"px-6\">\n {isSaving ? \"Saving...\" : \"Save\"}\n </Button>\n </div>\n </DialogContent>\n </DialogRoot>\n );\n}\n",
18
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskStatusIcon.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport type { TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL } from \"./types\";\n\n/** Material Symbols glyph and M3 color role per status. */\nconst config: Record<TaskStatus, { icon: string; filled: boolean; color: string }> = {\n done: { icon: \"check_circle\", filled: true, color: \"text-success\" },\n in_progress: { icon: \"clock_loader_40\", filled: true, color: \"text-primary\" },\n ready: { icon: \"radio_button_checked\", filled: false, color: \"text-primary\" },\n pending_approval: { icon: \"schedule\", filled: false, color: \"text-warning\" },\n backlog: { icon: \"radio_button_unchecked\", filled: false, color: \"text-outline\" },\n};\n\nexport interface TaskStatusIconProps {\n status: TaskStatus;\n size?: number;\n className?: string;\n /** Accessible label; defaults to the status label. Pass `\"\"` for a decorative icon. */\n label?: string;\n}\n\nexport function TaskStatusIcon({ status, size = 16, className, label }: TaskStatusIconProps) {\n const { icon, filled, color } = config[status];\n return (\n <Icon\n name={icon}\n size={size}\n filled={filled}\n label={label ?? TASK_STATUS_LABEL[status]}\n data-status={status}\n className={clsx(color, className)}\n />\n );\n}\n",
19
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskPriorityIcon.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport type { TaskPriority } from \"./types\";\nimport { TASK_PRIORITY_LABEL } from \"./types\";\n\n/** Material Symbols glyph and M3 color role per priority. */\nconst config: Record<TaskPriority, { icon: string; filled: boolean; color: string }> = {\n critical: { icon: \"priority_high\", filled: true, color: \"text-error\" },\n high: { icon: \"keyboard_double_arrow_up\", filled: false, color: \"text-warning\" },\n medium: { icon: \"drag_handle\", filled: false, color: \"text-primary\" },\n low: { icon: \"keyboard_arrow_down\", filled: false, color: \"text-outline\" },\n};\n\nexport interface TaskPriorityIconProps {\n priority: TaskPriority;\n size?: number;\n className?: string;\n /** Accessible label; defaults to the priority label. Pass `\"\"` for a decorative icon. */\n label?: string;\n}\n\nexport function TaskPriorityIcon({ priority, size = 14, className, label }: TaskPriorityIconProps) {\n const { icon, filled, color } = config[priority];\n return (\n <Icon\n name={icon}\n size={size}\n filled={filled}\n weight={600}\n label={label ?? `${TASK_PRIORITY_LABEL[priority]} priority`}\n data-priority={priority}\n className={clsx(color, className)}\n />\n );\n}\n",
20
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskRow.tsx), MIT, rebuilt on Material Design 3.\n\nimport { DropdownMenu, Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { focusRing } from \"./internal\";\nimport { TaskPriorityIcon } from \"./TaskPriorityIcon\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskRowProps {\n task: Task;\n onClick?: (task: Task) => void;\n isActive?: boolean;\n resolveAgentName?: (agentId: string) => string;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onDelete?: (task: Task) => void;\n className?: string;\n}\n\n/** Column template shared with the {@link TaskList} header. */\nexport const TASK_ROW_GRID = \"20px 18px 72px 1fr 56px 96px 40px\";\n\n/** M3 list item height at desktop density (56 dp baseline, two density steps). */\nexport const TASK_ROW_HEIGHT = 48;\n\n/**\n * A task as a dense M3 list item: leading status and priority icons, `text-body-large` headline,\n * `text-body-small` supporting columns, `on-surface` 8 % hover, `secondary-container` selection\n * and a trailing overflow-menu icon button.\n */\nexport function TaskRow({\n task,\n onClick,\n isActive,\n resolveAgentName,\n onStatusChange,\n onDelete,\n className,\n}: TaskRowProps) {\n const completedSubtasks = task.subtasks.filter((s) => s.completed).length;\n const assigneeName = resolveAgentName?.(task.assigned_agent_id) ?? task.assigned_agent_id;\n const hasActions = onStatusChange || onDelete;\n const isRowInteractive = typeof onClick === \"function\";\n\n const rowClassName = clsx(\n \"task-row group grid w-full items-center border-b border-outline-variant text-left\",\n \"transition-colors duration-200 ease-standard\",\n isActive\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"bg-transparent text-on-surface hover:bg-on-surface/8\",\n isRowInteractive && !isActive && \"active:bg-on-surface/10\",\n className,\n );\n const rowStyle: React.CSSProperties = {\n gridTemplateColumns: TASK_ROW_GRID,\n minHeight: TASK_ROW_HEIGHT,\n paddingLeft: 16,\n paddingRight: 8,\n gap: 12,\n };\n\n const mainContent = (\n <>\n <TaskStatusIcon status={task.status} size={20} />\n <TaskPriorityIcon priority={task.priority} size={18} />\n\n <span\n className={clsx(\n \"truncate font-code text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n SPC-{task.task_number}\n </span>\n\n <span className=\"min-w-0 truncate text-body-large\">{task.title}</span>\n\n <span\n className={clsx(\n \"text-right text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {task.subtasks.length > 0 ? `${completedSubtasks}/${task.subtasks.length}` : \"\"}\n </span>\n\n <span\n className={clsx(\n \"truncate text-right text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {assigneeName}\n </span>\n </>\n );\n\n const actions = (\n <span className=\"flex items-center justify-center\">\n {hasActions ? (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n aria-label=\"Task Actions\"\n className={clsx(\n \"flex size-8 items-center justify-center rounded-full text-on-surface-variant\",\n \"opacity-0 transition-[opacity,background-color] duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n \"group-hover:opacity-100 group-focus-within:opacity-100 focus-visible:opacity-100 data-popup-open:opacity-100\",\n focusRing,\n )}\n >\n <Icon name=\"more_vert\" size={20} />\n </button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\" sideOffset={4}>\n {onStatusChange &&\n TASK_STATUS_ORDER.filter((s) => s !== task.status).map((s) => (\n <DropdownMenu.Item\n key={s}\n onClick={() => {\n onStatusChange(task, s);\n }}\n >\n <TaskStatusIcon status={s} size={20} label=\"\" />\n <span>{TASK_STATUS_LABEL[s]}</span>\n </DropdownMenu.Item>\n ))}\n {onStatusChange && onDelete && <DropdownMenu.Separator />}\n {onDelete && (\n <DropdownMenu.Item\n onClick={() => {\n onDelete(task);\n }}\n className=\"text-error\"\n >\n <Icon name=\"delete\" size={20} />\n <span>Delete</span>\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : null}\n </span>\n );\n\n if (!isRowInteractive) {\n return (\n <div aria-current={isActive ? \"true\" : undefined} className={rowClassName} style={rowStyle}>\n {mainContent}\n {actions}\n </div>\n );\n }\n\n return (\n <div className={rowClassName} style={rowStyle}>\n <button\n type=\"button\"\n aria-current={isActive ? \"true\" : undefined}\n onClick={() => onClick(task)}\n className={clsx(\n \"col-span-6 grid grid-cols-subgrid items-center border-0 bg-transparent p-0 text-left font-inherit\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n >\n {mainContent}\n </button>\n {actions}\n </div>\n );\n}\n",
21
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskList.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger, Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { useMemo } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport { TASK_ROW_GRID, TaskRow } from \"./TaskRow\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskListProps {\n tasks: Task[];\n groups?: TaskStatus[];\n collapsedGroups?: Set<TaskStatus>;\n onToggleGroup?: (status: TaskStatus) => void;\n activeTaskId?: string;\n onTaskClick: (task: Task) => void;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onDelete?: (task: Task) => void;\n resolveAgentName?: (agentId: string) => string;\n className?: string;\n}\n\nconst GRID_STYLE = {\n gridTemplateColumns: TASK_ROW_GRID,\n paddingLeft: 16,\n paddingRight: 8,\n gap: 12,\n} as const;\n\n/**\n * Tasks grouped by status as an M3 list: a column header in `text-label-medium`, collapsible\n * section headers in `text-title-small`, `outline-variant` dividers.\n */\nexport function TaskList({\n tasks,\n groups = TASK_STATUS_ORDER,\n collapsedGroups,\n onToggleGroup,\n activeTaskId,\n onTaskClick,\n onStatusChange,\n onDelete,\n resolveAgentName,\n className,\n}: TaskListProps) {\n const grouped = useMemo(() => {\n const map = new Map<TaskStatus, Task[]>();\n for (const status of groups) map.set(status, []);\n for (const task of tasks) {\n const bucket = map.get(task.status);\n if (bucket) bucket.push(task);\n }\n return map;\n }, [tasks, groups]);\n\n return (\n <div className={clsx(\"flex flex-col bg-surface text-on-surface\", className)}>\n {/* Column header */}\n <div\n className=\"grid items-center border-b border-outline-variant text-label-medium text-on-surface-variant\"\n style={{ ...GRID_STYLE, height: 32 }}\n >\n <span />\n <span />\n <span>ID</span>\n <span>Title</span>\n <span className=\"text-right\">Subs</span>\n <span className=\"text-right\">Assignee</span>\n <span />\n </div>\n\n {/* Groups */}\n {groups.map((status) => {\n const items = grouped.get(status) ?? [];\n const isOpen = !collapsedGroups?.has(status);\n\n return (\n <Collapsible key={status} open={isOpen} onOpenChange={() => onToggleGroup?.(status)}>\n <CollapsibleTrigger\n className={clsx(\n \"grid w-full items-center rounded-none border-b border-outline-variant bg-surface-container-low\",\n \"text-title-small text-on-surface transition-colors duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n style={{ ...GRID_STYLE, height: 40 }}\n >\n <span className=\"flex items-center justify-center text-on-surface-variant\">\n <Icon\n name=\"chevron_right\"\n size={20}\n className={clsx(\n \"shrink-0 transition-transform duration-300 ease-emphasized\",\n isOpen && \"rotate-90\",\n )}\n />\n </span>\n <span className=\"flex items-center justify-center\">\n <TaskStatusIcon status={status} size={18} label=\"\" />\n </span>\n <span className=\"col-span-5 flex items-center gap-1.5 text-left\">\n {TASK_STATUS_LABEL[status]}\n <span className=\"text-body-small text-on-surface-variant\">({items.length})</span>\n </span>\n </CollapsibleTrigger>\n\n <CollapsibleContent>\n {items.length > 0 ? (\n items.map((task) => (\n <TaskRow\n key={task.id}\n task={task}\n isActive={task.id === activeTaskId}\n onClick={onTaskClick}\n onStatusChange={onStatusChange}\n onDelete={onDelete}\n resolveAgentName={resolveAgentName}\n />\n ))\n ) : (\n <div className=\"border-b border-outline-variant px-4 py-3 text-body-small text-on-surface-variant\">\n No tasks\n </div>\n )}\n </CollapsibleContent>\n </Collapsible>\n );\n })}\n </div>\n );\n}\n",
22
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskDetail.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Button, CircleButton, Icon, Select, SelectOption } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { focusRing } from \"./internal\";\nimport { Markdown } from \"./Markdown\";\nimport { TaskPriorityIcon } from \"./TaskPriorityIcon\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_PRIORITY_LABEL, TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskDetailProps {\n task: Task;\n resolveAgentName?: (agentId: string) => string;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onSubtaskToggle?: (task: Task, index: number, completed: boolean) => void;\n onDelete?: (task: Task) => void;\n onClose?: () => void;\n className?: string;\n}\n\nfunction formatDate(iso: string) {\n return new Date(iso).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nfunction Property({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"text-label-medium text-on-surface-variant\">{label}</span>\n <span className=\"flex min-h-8 items-center gap-1.5 text-body-medium text-on-surface\">\n {children}\n </span>\n </div>\n );\n}\n\n/**\n * A task on an M3 surface: `text-headline-small` title, a property grid, subtasks as an M3 list\n * with checkboxes, markdown description, and actions as M3 buttons (filled for the primary\n * transition, text for the others).\n */\nexport function TaskDetail({\n task,\n resolveAgentName,\n onStatusChange,\n onSubtaskToggle,\n onDelete,\n onClose,\n className,\n}: TaskDetailProps) {\n const ownerName = resolveAgentName?.(task.owner_agent_id) ?? task.owner_agent_id;\n const assigneeName = resolveAgentName?.(task.assigned_agent_id) ?? task.assigned_agent_id;\n const completedCount = task.subtasks.filter((s) => s.completed).length;\n\n return (\n <div className={clsx(\"flex flex-col gap-6 bg-surface p-6 text-on-surface\", className)}>\n {/* Header */}\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex flex-1 items-center gap-2\">\n <TaskStatusIcon status={task.status} size={20} />\n <TaskPriorityIcon priority={task.priority} size={18} />\n <span className=\"font-code text-body-small text-on-surface-variant\">\n SPC-{task.task_number}\n </span>\n </div>\n {onClose && (\n <CircleButton icon=\"close\" variant=\"standard\" onClick={onClose} aria-label=\"Close\" />\n )}\n </div>\n <h2 className=\"text-headline-small text-on-surface\">{task.title}</h2>\n </div>\n\n {/* Properties */}\n <div className=\"grid grid-cols-2 gap-x-6 gap-y-4 medium:grid-cols-4\">\n <Property label=\"Status\">\n {onStatusChange ? (\n <Select\n value={task.status}\n size=\"md\"\n onChange={(value) => onStatusChange(task, value as TaskStatus)}\n >\n {TASK_STATUS_ORDER.map((s) => (\n <SelectOption key={s} value={s}>\n {TASK_STATUS_LABEL[s]}\n </SelectOption>\n ))}\n </Select>\n ) : (\n TASK_STATUS_LABEL[task.status]\n )}\n </Property>\n <Property label=\"Priority\">\n <TaskPriorityIcon priority={task.priority} size={18} label=\"\" />\n {TASK_PRIORITY_LABEL[task.priority]}\n </Property>\n <Property label=\"Owner\">\n <span className=\"truncate\">{ownerName}</span>\n </Property>\n <Property label=\"Assigned\">\n <span className=\"truncate\">{assigneeName}</span>\n </Property>\n </div>\n\n {/* Subtasks */}\n {task.subtasks.length > 0 && (\n <section className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-title-small text-on-surface\">Subtasks</h3>\n <span className=\"text-body-small text-on-surface-variant\">\n {completedCount}/{task.subtasks.length}\n </span>\n </div>\n <ul className=\"m-0 list-none overflow-hidden rounded-medium border border-outline-variant p-0\">\n {task.subtasks.map((subtask, i) => (\n <li key={subtask.title}>\n <button\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 list item with a leading checkbox: the whole 48 dp row toggles and carries the state layer; a native checkbox input cannot host the row.\n role=\"checkbox\"\n aria-checked={subtask.completed}\n onClick={() => onSubtaskToggle?.(task, i, !subtask.completed)}\n className={clsx(\n \"flex min-h-12 w-full items-center gap-4 px-4 py-2 text-left text-body-large\",\n \"transition-colors duration-200 ease-standard hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n i > 0 && \"border-t border-outline-variant\",\n )}\n >\n <span\n className={clsx(\n \"flex size-[18px] shrink-0 items-center justify-center rounded-[2px] transition-colors duration-200 ease-standard\",\n subtask.completed\n ? \"bg-primary text-on-primary\"\n : \"border-2 border-on-surface-variant\",\n )}\n >\n {subtask.completed && <Icon name=\"check\" size={16} weight={700} />}\n </span>\n <span\n className={clsx(\n \"min-w-0 flex-1\",\n subtask.completed\n ? \"text-on-surface-variant line-through\"\n : \"text-on-surface\",\n )}\n >\n {subtask.title}\n </span>\n </button>\n </li>\n ))}\n </ul>\n </section>\n )}\n\n {/* Description */}\n <section className=\"flex flex-col gap-2\">\n <h3 className=\"text-title-small text-on-surface\">Description</h3>\n {task.description ? (\n <Markdown content={task.description} size=\"medium\" />\n ) : (\n <p className=\"text-body-medium text-on-surface-variant\">No description</p>\n )}\n </section>\n\n {/* Timestamps */}\n <div className=\"flex flex-col gap-1 text-body-small text-on-surface-variant\">\n <span>Created {formatDate(task.created_at)}</span>\n <span>Updated {formatDate(task.updated_at)}</span>\n {task.completed_at && <span>Completed {formatDate(task.completed_at)}</span>}\n </div>\n\n {/* Actions */}\n {(onStatusChange || onDelete) && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {onStatusChange && task.status === \"pending_approval\" && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"ready\")}>\n Approve\n </Button>\n )}\n {onStatusChange && task.status === \"backlog\" && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"in_progress\")}>\n Execute\n </Button>\n )}\n {onStatusChange && (task.status === \"in_progress\" || task.status === \"ready\") && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"done\")}>\n Mark Done\n </Button>\n )}\n {onStatusChange && task.status === \"done\" && (\n <Button variant=\"text\" size=\"lg\" onClick={() => onStatusChange(task, \"ready\")}>\n Reopen\n </Button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(task)}\n className={clsx(\n \"inline-flex h-10 items-center justify-center gap-2 rounded-full px-3 text-label-large text-error\",\n \"transition-colors duration-200 ease-standard hover:bg-error/8 active:bg-error/10\",\n focusRing,\n )}\n >\n <Icon name=\"delete\" size={18} />\n Delete\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n",
23
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskCreateForm.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Button, Input, Select, SelectOption, TextArea } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\n\nimport type { TaskPriority } from \"./types\";\nimport { TASK_PRIORITY_LABEL } from \"./types\";\n\nexport interface TaskCreateFormData {\n title: string;\n description: string;\n priority: TaskPriority;\n}\n\nexport interface TaskCreateFormProps {\n onSubmit: (data: TaskCreateFormData) => void;\n onCancel?: () => void;\n defaultPriority?: TaskPriority;\n isSubmitting?: boolean;\n className?: string;\n}\n\nconst PRIORITIES: TaskPriority[] = [\"critical\", \"high\", \"medium\", \"low\"];\n\n/**\n * Inline task creation on an M3 surface: title and description text fields, a priority select,\n * and M3 actions (filled `Create`, text `Cancel`).\n */\nexport function TaskCreateForm({\n onSubmit,\n onCancel,\n defaultPriority = \"medium\",\n isSubmitting,\n className,\n}: TaskCreateFormProps) {\n const [title, setTitle] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [priority, setPriority] = useState<TaskPriority>(defaultPriority);\n const titleInputId = useId();\n const descriptionInputId = useId();\n const titleInputRef = useRef<HTMLInputElement>(null);\n\n // Focus the title when the form mounts (replaces `autoFocus`).\n useEffect(() => {\n titleInputRef.current?.focus();\n }, []);\n\n const canSubmit = title.trim().length > 0 && !isSubmitting;\n\n const handleSubmit = useCallback(() => {\n if (!canSubmit) return;\n onSubmit({ title: title.trim(), description: description.trim(), priority });\n setTitle(\"\");\n setDescription(\"\");\n setPriority(defaultPriority);\n }, [canSubmit, onSubmit, title, description, priority, defaultPriority]);\n\n return (\n <div\n className={clsx(\n \"flex flex-col gap-3 rounded-medium bg-surface-container-low p-4 text-on-surface\",\n className,\n )}\n >\n <div className=\"flex items-center gap-2\">\n <label htmlFor={titleInputId} className=\"sr-only\">\n Task Title\n </label>\n <Input\n ref={titleInputRef}\n id={titleInputId}\n type=\"text\"\n size=\"lg\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSubmit();\n if (e.key === \"Escape\") onCancel?.();\n }}\n placeholder=\"Task title...\"\n className=\"min-w-0 flex-1\"\n disabled={isSubmitting}\n />\n <Select\n value={priority}\n size=\"lg\"\n onChange={(value) => setPriority(value as TaskPriority)}\n disabled={isSubmitting}\n >\n {PRIORITIES.map((p) => (\n <SelectOption key={p} value={p}>\n {TASK_PRIORITY_LABEL[p]}\n </SelectOption>\n ))}\n </Select>\n </div>\n <label htmlFor={descriptionInputId} className=\"sr-only\">\n Description\n </label>\n <TextArea\n id={descriptionInputId}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Description (optional)\"\n rows={2}\n className=\"w-full resize-none\"\n disabled={isSubmitting}\n />\n <div className=\"flex items-center justify-end gap-2\">\n {onCancel && (\n <Button variant=\"text\" size=\"lg\" onClick={onCancel} disabled={isSubmitting}>\n Cancel\n </Button>\n )}\n <Button variant=\"filled\" size=\"lg\" disabled={!canSubmit} onClick={handleSubmit}>\n Create\n </Button>\n </div>\n </div>\n );\n}\n",
24
+ "// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/index.ts), MIT, rebuilt on Material Design 3.\n// @aphrody/m3-ai - AI agent interaction components on Material Design 3\n\n// Types\nexport type {\n ToolCallStatus,\n ToolCallPair,\n ActionContent,\n TranscriptStep,\n TranscriptItem,\n TaskInfo,\n MemoryInfo,\n CronJobInfo,\n AgentInfo,\n ModelOption,\n TaskStatus,\n TaskPriority,\n Subtask,\n Task,\n} from \"./types\";\n\nexport {\n pairTranscriptSteps,\n tryParseJson,\n isErrorResult,\n TASK_STATUS_ORDER,\n TASK_STATUS_LABEL,\n TASK_PRIORITY_LABEL,\n} from \"./types\";\n\n// Components\nexport { ToolCall } from \"./ToolCall\";\nexport type { ToolCallProps } from \"./ToolCall\";\nexport { Markdown, CodeBlock, InlineMath, BlockMath } from \"./Markdown\";\nexport type {\n MarkdownProps,\n CodeBlockProps,\n InlineMathProps,\n BlockMathProps,\n} from \"./Markdown\";\nexport { MessageBubble } from \"./MessageBubble\";\nexport type { MessageBubbleProps } from \"./MessageBubble\";\nexport { InlineWorkerCard } from \"./InlineWorkerCard\";\nexport type { InlineWorkerCardProps } from \"./InlineWorkerCard\";\nexport { InlineBranchCard } from \"./InlineBranchCard\";\nexport type { InlineBranchCardProps } from \"./InlineBranchCard\";\nexport { ModelSelector, ModelOptionList, groupModelsByProvider } from \"./ModelSelector\";\nexport type { ModelSelectorProps, ModelOptionListProps } from \"./ModelSelector\";\nexport { ChatComposer } from \"./ChatComposer\";\nexport type { ChatComposerProps } from \"./ChatComposer\";\n\n// Google & Gemini Desktop / Web benchmark components\nexport { GoogleSpotlightBar } from \"./GoogleSpotlightBar\";\nexport type { GoogleSpotlightBarProps } from \"./GoogleSpotlightBar\";\nexport {\n GeminiAccountMenu,\n ComposerMoreUploadsMenu,\n} from \"./GeminiAccountMenu\";\nexport type {\n GeminiAccountMenuProps,\n ComposerMoreUploadsMenuProps,\n MenuItem,\n} from \"./GeminiAccountMenu\";\nexport { GeminiPersonalContextEdit } from \"./GeminiPersonalContextEdit\";\nexport type { GeminiPersonalContextEditProps } from \"./GeminiPersonalContextEdit\";\n\n\n// Task components\nexport { TaskStatusIcon } from \"./TaskStatusIcon\";\nexport type { TaskStatusIconProps } from \"./TaskStatusIcon\";\nexport { TaskPriorityIcon } from \"./TaskPriorityIcon\";\nexport type { TaskPriorityIconProps } from \"./TaskPriorityIcon\";\nexport { TaskRow } from \"./TaskRow\";\nexport type { TaskRowProps } from \"./TaskRow\";\nexport { TaskList } from \"./TaskList\";\nexport type { TaskListProps } from \"./TaskList\";\nexport { TaskDetail } from \"./TaskDetail\";\nexport type { TaskDetailProps } from \"./TaskDetail\";\nexport { TaskCreateForm } from \"./TaskCreateForm\";\nexport type { TaskCreateFormProps, TaskCreateFormData } from \"./TaskCreateForm\";\n\n// AG-UI Protocol & Agent-to-User (A2U) Bridge\nexport { EventType } from \"@aphrody/ag-ui\";\nexport {\n AgUiEventAccumulator,\n agUiEventsToTranscriptSteps,\n agUiEventsToTranscriptItems,\n coordEnvelopeToAgUiEvent,\n agUiEventToCoordEnvelope,\n} from \"./AgUiEventStream\";\nexport type {\n CoordEnvelope,\n EnvelopeKind,\n SubagentTrace,\n AgUiStreamState,\n} from \"./AgUiEventStream\";\n\n// Aphrody A2A (Agent-to-Agent) Fleet UI\nexport { A2APeerInspector } from \"./A2APeerInspector\";\nexport type { A2APeerInspectorProps, AgentPeer, SendEnvelopePayload } from \"./A2APeerInspector\";\nexport { A2ATaskTimeline } from \"./A2ATaskTimeline\";\nexport type { A2ATaskTimelineProps, TimelineStep } from \"./A2ATaskTimeline\";\n\n// MCP-UI Generative Card\nexport { McpAppCard } from \"./McpAppCard\";\nexport type { McpAppCardProps } from \"./McpAppCard\";\n",
25
+ "// SPDX-License-Identifier: Apache-2.0\n/**\n * @aphrody/m3-ai - AgUiEventStream\n *\n * Full-duplex Agent-to-User (A2U) streaming and A2A fleet bridge:\n * - Maps AG-UI v1.0 protocol events (text chunks, tool calls, reasoning, state, subagents)\n * into native Material Design 3 TranscriptSteps and TranscriptItems.\n * - Bridges Aphrody A2A CoordEnvelope fleet messages (ask/fact/ack/ping/error) to and from AG-UI events.\n * - Provides reactive state accumulator and streaming parser.\n */\n\nimport {\n EventType,\n type BaseEvent,\n type TextMessageContentEvent,\n type ToolCallStartEvent,\n type ToolCallArgsEvent,\n type ToolCallResultEvent,\n type ReasoningMessageContentEvent,\n type SubagentStartedEvent,\n type SubagentFinishedEvent,\n type SubagentErrorEvent,\n type RunErrorEvent,\n} from \"@aphrody/ag-ui\";\nimport {\n type TranscriptStep,\n type TranscriptItem,\n pairTranscriptSteps,\n tryParseJson,\n} from \"./types\";\n\n// ---------------------------------------------------------------------------\n// A2A Coordination Fleet Types\n// ---------------------------------------------------------------------------\n\nexport type EnvelopeKind = \"ask\" | \"fact\" | \"ack\" | \"ping\" | \"error\";\n\nexport interface CoordEnvelope {\n v?: number;\n ts: string;\n id: string;\n from: string;\n to?: string;\n kind: EnvelopeKind | string;\n topic: string;\n body: string;\n re?: string;\n channel_hint?: string[];\n [key: string]: unknown;\n}\n\nexport interface SubagentTrace {\n id: string;\n name: string;\n status: \"running\" | \"completed\" | \"error\";\n parentRunId?: string;\n error?: string;\n}\n\nexport interface AgUiStreamState {\n status: \"idle\" | \"streaming\" | \"completed\" | \"error\";\n items: TranscriptItem[];\n steps: TranscriptStep[];\n reasoning: string;\n currentText: string;\n error?: string;\n subagents: SubagentTrace[];\n a2uiSurfaces: Map<string, Record<string, unknown>>;\n}\n\n// ---------------------------------------------------------------------------\n// AG-UI Events -> Transcript Steps Mapper\n// ---------------------------------------------------------------------------\n\nexport class AgUiEventAccumulator {\n private steps: TranscriptStep[] = [];\n private activeText: string = \"\";\n private activeReasoning: string = \"\";\n private pendingToolCalls = new Map<string, { name: string; args: string }>();\n private toolCallNames = new Map<string, string>();\n private subagents = new Map<string, SubagentTrace>();\n private a2uiSurfaces = new Map<string, Record<string, unknown>>();\n private isFinished = false;\n private hasError = false;\n private errorMessage?: string;\n\n /**\n * Process a single AG-UI event and update accumulator state.\n */\n public push(event: BaseEvent): void {\n switch (event.type) {\n case EventType.RUN_STARTED: {\n this.isFinished = false;\n this.hasError = false;\n break;\n }\n\n case EventType.TEXT_MESSAGE_CONTENT: {\n const textEvent = event as TextMessageContentEvent;\n if (textEvent.delta) {\n this.activeText += textEvent.delta;\n }\n break;\n }\n\n case EventType.TEXT_MESSAGE_END: {\n if (this.activeText.length > 0) {\n this.steps.push({\n type: \"action\",\n content: [{ type: \"text\", text: this.activeText }],\n });\n this.activeText = \"\";\n }\n break;\n }\n\n case EventType.REASONING_MESSAGE_CONTENT: {\n const reasoningEvent = event as ReasoningMessageContentEvent;\n if (reasoningEvent.delta) {\n this.activeReasoning += reasoningEvent.delta;\n }\n break;\n }\n\n case EventType.TOOL_CALL_START: {\n const tcStart = event as ToolCallStartEvent;\n this.pendingToolCalls.set(tcStart.toolCallId, {\n name: tcStart.toolCallName,\n args: \"\",\n });\n this.toolCallNames.set(tcStart.toolCallId, tcStart.toolCallName);\n break;\n }\n\n case EventType.TOOL_CALL_ARGS: {\n const tcArgs = event as ToolCallArgsEvent;\n const pending = this.pendingToolCalls.get(tcArgs.toolCallId);\n if (pending && tcArgs.delta) {\n pending.args += tcArgs.delta;\n }\n break;\n }\n\n case EventType.TOOL_CALL_END: {\n const tcEnd = event as ToolCallArgsEvent;\n const pending = this.pendingToolCalls.get(tcEnd.toolCallId);\n if (pending) {\n this.steps.push({\n type: \"action\",\n content: [\n {\n type: \"tool_call\",\n id: tcEnd.toolCallId,\n name: pending.name,\n args: pending.args,\n },\n ],\n });\n this.pendingToolCalls.delete(tcEnd.toolCallId);\n }\n break;\n }\n\n case EventType.TOOL_CALL_RESULT: {\n const tcResult = event as ToolCallResultEvent;\n const resultContent = typeof tcResult.content === \"string\"\n ? tcResult.content\n : JSON.stringify(tcResult.content);\n\n // Check if tool result contains A2UI operations\n this.inspectA2uiOperations(tcResult.content);\n\n const toolName = this.toolCallNames.get(tcResult.toolCallId) || (tcResult.metadata?.toolName as string) || \"tool\";\n this.steps.push({\n type: \"tool_result\",\n call_id: tcResult.toolCallId,\n name: toolName,\n text: resultContent,\n });\n break;\n }\n\n case EventType.SUBAGENT_STARTED: {\n const subEvent = event as SubagentStartedEvent;\n this.subagents.set(subEvent.subagentRunId, {\n id: subEvent.subagentRunId,\n name: subEvent.name,\n status: \"running\",\n parentRunId: subEvent.parentSubagentRunId,\n });\n break;\n }\n\n case EventType.SUBAGENT_FINISHED: {\n const subEvent = event as SubagentFinishedEvent;\n const existing = this.subagents.get(subEvent.subagentRunId);\n if (existing) {\n existing.status = \"completed\";\n }\n break;\n }\n\n case EventType.SUBAGENT_ERROR: {\n const subEvent = event as SubagentErrorEvent;\n const existing = this.subagents.get(subEvent.subagentRunId);\n if (existing) {\n existing.status = \"error\";\n existing.error = subEvent.message;\n }\n break;\n }\n\n case EventType.RUN_FINISHED: {\n // Flush any remaining text\n if (this.activeText.length > 0) {\n this.steps.push({\n type: \"action\",\n content: [{ type: \"text\", text: this.activeText }],\n });\n this.activeText = \"\";\n }\n this.isFinished = true;\n break;\n }\n\n case EventType.RUN_ERROR: {\n const errEvent = event as RunErrorEvent;\n this.hasError = true;\n this.errorMessage = errEvent.message;\n this.isFinished = true;\n break;\n }\n\n default:\n // Other AG-UI events (ACTIVITY, STATE_DELTA, etc.) are kept in state\n break;\n }\n }\n\n /**\n * Parse A2UI operations if returned by a tool result\n */\n private inspectA2uiOperations(content: unknown): void {\n if (!content) return;\n const parsed = typeof content === \"string\" ? tryParseJson(content) : content;\n if (parsed && typeof parsed === \"object\" && \"a2ui_operations\" in parsed) {\n const ops = (parsed as { a2ui_operations: Array<Record<string, unknown>> }).a2ui_operations;\n if (Array.isArray(ops)) {\n for (const op of ops) {\n if (op.createSurface && typeof op.createSurface === \"object\") {\n const surface = op.createSurface as { surfaceId: string; catalogId?: string };\n this.a2uiSurfaces.set(surface.surfaceId, {\n surfaceId: surface.surfaceId,\n catalogId: surface.catalogId,\n components: [],\n dataModel: {},\n });\n } else if (op.updateComponents && typeof op.updateComponents === \"object\") {\n const update = op.updateComponents as { surfaceId: string; components: unknown[] };\n const existing = this.a2uiSurfaces.get(update.surfaceId);\n if (existing) {\n existing.components = update.components;\n }\n } else if (op.updateDataModel && typeof op.updateDataModel === \"object\") {\n const update = op.updateDataModel as { surfaceId: string; value: unknown };\n const existing = this.a2uiSurfaces.get(update.surfaceId);\n if (existing) {\n existing.dataModel = update.value;\n }\n }\n }\n }\n }\n }\n\n /**\n * Produces the snapshot of current streaming state.\n */\n public snapshot(): AgUiStreamState {\n // If active text is streaming, include a draft action step\n const currentSteps = [...this.steps];\n if (this.activeText.length > 0) {\n currentSteps.push({\n type: \"action\",\n content: [{ type: \"text\", text: this.activeText }],\n });\n }\n\n const items = pairTranscriptSteps(currentSteps);\n\n let status: AgUiStreamState[\"status\"] = \"idle\";\n if (this.hasError) {\n status = \"error\";\n } else if (this.isFinished) {\n status = \"completed\";\n } else if (currentSteps.length > 0 || this.activeReasoning.length > 0) {\n status = \"streaming\";\n }\n\n return {\n status,\n items,\n steps: currentSteps,\n reasoning: this.activeReasoning,\n currentText: this.activeText,\n error: this.errorMessage,\n subagents: Array.from(this.subagents.values()),\n a2uiSurfaces: new Map(this.a2uiSurfaces),\n };\n }\n\n /**\n * Alias for snapshot() for ergonomics.\n */\n public getState(): AgUiStreamState {\n return this.snapshot();\n }\n}\n\n/**\n * Converts a static list of AG-UI events into TranscriptSteps.\n */\nexport function agUiEventsToTranscriptSteps(events: BaseEvent[]): TranscriptStep[] {\n const acc = new AgUiEventAccumulator();\n for (const event of events) {\n acc.push(event);\n }\n return acc.snapshot().steps;\n}\n\n/**\n * Converts a static list of AG-UI events into paired TranscriptItems.\n */\nexport function agUiEventsToTranscriptItems(events: BaseEvent[]): TranscriptItem[] {\n const acc = new AgUiEventAccumulator();\n for (const event of events) {\n acc.push(event);\n }\n return acc.snapshot().items;\n}\n\n// ---------------------------------------------------------------------------\n// A2A CoordEnvelope <-> AG-UI Event Bidirectional Bridge\n// ---------------------------------------------------------------------------\n\n/**\n * Translates an Aphrody A2A CoordEnvelope mailbox message into an AG-UI BaseEvent.\n */\nexport function coordEnvelopeToAgUiEvent(envelope: CoordEnvelope): BaseEvent {\n switch (envelope.kind) {\n case \"ask\":\n return {\n type: EventType.CUSTOM,\n name: \"a2a_ask\",\n value: {\n id: envelope.id,\n from: envelope.from,\n to: envelope.to,\n topic: envelope.topic,\n body: envelope.body,\n channel_hint: envelope.channel_hint,\n re: envelope.re,\n },\n };\n\n case \"fact\":\n return {\n type: EventType.CUSTOM,\n name: \"a2a_fact\",\n value: {\n id: envelope.id,\n from: envelope.from,\n to: envelope.to,\n topic: envelope.topic,\n body: envelope.body,\n re: envelope.re,\n },\n };\n\n case \"ack\":\n return {\n type: EventType.CUSTOM,\n name: \"a2a_ack\",\n value: {\n id: envelope.id,\n from: envelope.from,\n to: envelope.to,\n topic: envelope.topic,\n re: envelope.re,\n },\n };\n\n case \"error\":\n return {\n type: EventType.RUN_ERROR,\n message: envelope.body || envelope.topic || \"Coordination error\",\n code: envelope.id,\n };\n\n case \"ping\":\n return {\n type: EventType.CUSTOM,\n name: \"a2a_ping\",\n value: {\n id: envelope.id,\n from: envelope.from,\n to: envelope.to,\n },\n };\n\n default:\n return {\n type: EventType.CUSTOM,\n name: `a2a_${envelope.kind}`,\n value: envelope,\n };\n }\n}\n\n/**\n * Translates an AG-UI BaseEvent into an Aphrody A2A CoordEnvelope mailbox message.\n */\nexport function agUiEventToCoordEnvelope(\n event: BaseEvent,\n from: string,\n to: string = \"fleet\",\n): CoordEnvelope {\n const ts = new Date().toISOString();\n const id = `env-${Date.now().toString(16)}`;\n\n if (event.type === EventType.CUSTOM && (event as any).name?.startsWith(\"a2a_\")) {\n const val = (event as any).value || {};\n const kind = (event as any).name.replace(/^a2a_/, \"\");\n return {\n v: 1,\n ts: val.ts || ts,\n id: val.id || id,\n from: val.from || from,\n to: val.to || to,\n kind: (kind as EnvelopeKind),\n topic: val.topic || \"a2a-coordination\",\n body: val.body || \"\",\n re: val.re,\n channel_hint: val.channel_hint,\n };\n }\n\n if (event.type === EventType.RUN_ERROR) {\n const err = event as RunErrorEvent;\n return {\n v: 1,\n ts,\n id,\n from,\n to,\n kind: \"error\",\n topic: \"run-error\",\n body: err.message,\n };\n }\n\n if (event.type === EventType.TOOL_CALL_RESULT) {\n const res = event as ToolCallResultEvent;\n return {\n v: 1,\n ts,\n id,\n from,\n to,\n kind: \"fact\",\n topic: (res.metadata?.toolName as string) || `tool:${res.toolCallId}`,\n body: typeof res.content === \"string\" ? res.content : JSON.stringify(res.content),\n re: res.toolCallId,\n };\n }\n\n // Default envelope mapping for arbitrary events\n return {\n v: 1,\n ts,\n id,\n from,\n to,\n kind: \"fact\",\n topic: `event:${event.type}`,\n body: JSON.stringify(event),\n };\n}\n",
26
+ "// SPDX-License-Identifier: Apache-2.0\n/**\n * @aphrody/m3-ai - A2APeerInspector\n *\n * Material Design 3 Agent-to-Agent (A2A 1.0) Fleet Inspector:\n * - Visualizes connected peer agents (codex, claude, agycli, shenron, nie, ocr, rag).\n * - Displays AgentCard interface, capabilities, and active tasks.\n * - Live inspection of .coord mailbox envelopes (ask, fact, ack, ping, error).\n * - File lock & resource claims view (.coord/claims).\n */\n\nimport React, { useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport type { CoordEnvelope, EnvelopeKind } from \"./AgUiEventStream\";\n\nexport interface AgentPeer {\n id: string;\n name: string;\n role: string;\n status: \"idle\" | \"busy\" | \"offline\";\n version?: string;\n skills?: string[];\n activeClaim?: string;\n}\n\nexport interface SendEnvelopePayload {\n from: string;\n to?: string;\n kind: EnvelopeKind | string;\n topic: string;\n body: string;\n re?: string;\n channel_hint?: string[];\n v?: number;\n [key: string]: unknown;\n}\n\nexport interface A2APeerInspectorProps {\n peers?: AgentPeer[];\n envelopes?: CoordEnvelope[];\n selectedPeerId?: string;\n onSelectPeer?: (peerId: string) => void;\n onSendEnvelope?: (envelope: SendEnvelopePayload) => void;\n className?: string;\n}\n\nconst EMPTY_ENVELOPES: CoordEnvelope[] = [];\n\nconst DEFAULT_PEERS: AgentPeer[] = [\n {\n id: \"agy\",\n name: \"Antigravity Core\",\n role: \"Integrator & UI / Rust Lead\",\n status: \"busy\",\n version: \"2.0.0\",\n skills: [\"m3-ui\", \"rust-serial\", \"bun-native\", \"a2a-coord\"],\n activeClaim: \".coord/claims/native-integration.json\",\n },\n {\n id: \"codex\",\n name: \"Codex Peer\",\n role: \"Backend & Systems Worker\",\n status: \"busy\",\n version: \"1.4.0\",\n skills: [\"native-wiring\", \"wsl-probe\", \"kernel-ffi\"],\n },\n {\n id: \"claude\",\n name: \"Claude Peer\",\n role: \"Architecture & Verification\",\n status: \"idle\",\n version: \"3.7.0\",\n skills: [\"design-tokens\", \"docs-audit\", \"review\"],\n },\n {\n id: \"shenron\",\n name: \"Shenron Daemon\",\n role: \"Database & RAG Pipeline Gate\",\n status: \"idle\",\n version: \"2.1.0\",\n skills: [\"rag-index\", \"manga-publish\", \"embeddings\"],\n },\n];\n\nconst KIND_COLORS: Record<EnvelopeKind, { bg: string; text: string; border: string }> = {\n ask: {\n bg: \"bg-[var(--md-sys-color-primary-container,#eaddff)]\",\n text: \"text-[var(--md-sys-color-on-primary-container,#21005d)]\",\n border: \"border-[var(--md-sys-color-primary,#6750a4)]\",\n },\n fact: {\n bg: \"bg-[var(--md-sys-color-tertiary-container,#ffd8e4)]\",\n text: \"text-[var(--md-sys-color-on-tertiary-container,#31111d)]\",\n border: \"border-[var(--md-sys-color-tertiary,#7d5260)]\",\n },\n ack: {\n bg: \"bg-[var(--md-sys-color-secondary-container,#e8def8)]\",\n text: \"text-[var(--md-sys-color-on-secondary-container,#1d192b)]\",\n border: \"border-[var(--md-sys-color-secondary,#625b71)]\",\n },\n ping: {\n bg: \"bg-[var(--md-sys-color-surface-container-high,#ece6f0)]\",\n text: \"text-[var(--md-sys-color-on-surface-variant,#49454f)]\",\n border: \"border-[var(--md-sys-color-outline-variant,#cac4d0)]\",\n },\n error: {\n bg: \"bg-[var(--md-sys-color-error-container,#f9dedc)]\",\n text: \"text-[var(--md-sys-color-on-error-container,#410e0b)]\",\n border: \"border-[var(--md-sys-color-error,#b3261e)]\",\n },\n};\n\nexport const A2APeerInspector: React.FC<A2APeerInspectorProps> = ({\n peers = DEFAULT_PEERS,\n envelopes = EMPTY_ENVELOPES,\n selectedPeerId: controlledPeerId,\n onSelectPeer,\n onSendEnvelope,\n className,\n}) => {\n const [internalSelectedPeerId, setInternalSelectedPeerId] = useState<string>(\n peers[0]?.id || \"agy\",\n );\n const selectedPeerId = controlledPeerId ?? internalSelectedPeerId;\n\n // Form state for composing envelope\n const [composeTopic, setComposeTopic] = useState(\"\");\n const [composeBody, setComposeBody] = useState(\"\");\n const [composeKind, setComposeKind] = useState<EnvelopeKind>(\"ask\");\n\n const currentPeer = peers.find((p) => p.id === selectedPeerId) || peers[0];\n\n const handleSelect = (peerId: string) => {\n setInternalSelectedPeerId(peerId);\n onSelectPeer?.(peerId);\n };\n\n const handleSend = (e: React.FormEvent) => {\n e.preventDefault();\n if (!composeTopic.trim() || !composeBody.trim()) return;\n\n onSendEnvelope?.({\n from: \"agy\",\n to: selectedPeerId,\n kind: composeKind,\n topic: composeTopic.trim(),\n body: composeBody.trim(),\n });\n\n setComposeTopic(\"\");\n setComposeBody(\"\");\n };\n\n const filteredEnvelopes = envelopes.filter(\n (env) => env.from === selectedPeerId || env.to === selectedPeerId || env.to === \"fleet\",\n );\n\n return (\n <div\n className={clsx(\n \"flex flex-col gap-4 rounded-3xl p-5 border\",\n \"bg-[var(--md-sys-color-surface-container-lowest,#ffffff)]\",\n \"border-[var(--md-sys-color-outline-variant,#cac4d0)]\",\n \"text-[var(--md-sys-color-on-surface,#1d1b20)]\",\n className,\n )}\n >\n {/* Header & Peer Chips */}\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"material-symbols-outlined text-xl text-[var(--md-sys-color-primary,#6750a4)]\">\n hub\n </span>\n <h2 className=\"text-base font-semibold tracking-tight\">A2A Fleet Coordinator</h2>\n <span className=\"rounded-full bg-[var(--md-sys-color-surface-container-high,#ece6f0)] px-2 py-0.5 text-xs font-mono text-[var(--md-sys-color-on-surface-variant,#49454f)]\">\n v1.0 (JSONL + RPC)\n </span>\n </div>\n <span className=\"text-xs text-[var(--md-sys-color-outline,#79747e)]\">\n {peers.length} active peers\n </span>\n </div>\n\n {/* Peer selection chips */}\n <div className=\"flex items-center gap-2 overflow-x-auto pb-1\">\n {peers.map((peer) => {\n const isSelected = peer.id === selectedPeerId;\n return (\n <button\n key={peer.id}\n type=\"button\"\n onClick={() => handleSelect(peer.id)}\n className={clsx(\n \"flex items-center gap-2 rounded-full px-3.5 py-1.5 text-xs font-medium transition-colors shrink-0\",\n isSelected\n ? \"bg-[var(--md-sys-color-secondary-container,#e8def8)] text-[var(--md-sys-color-on-secondary-container,#1d192b)] shadow-sm\"\n : \"bg-[var(--md-sys-color-surface-container,#f3edf7)] text-[var(--md-sys-color-on-surface-variant,#49454f)] hover:bg-[var(--md-sys-color-surface-container-high,#ece6f0)]\",\n )}\n >\n <span\n className={clsx(\n \"h-2 w-2 rounded-full\",\n peer.status === \"busy\"\n ? \"bg-amber-500 animate-pulse\"\n : peer.status === \"idle\"\n ? \"bg-emerald-500\"\n : \"bg-slate-400\",\n )}\n />\n <span>{peer.name}</span>\n <span className=\"text-[10px] opacity-60\">@{peer.id}</span>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Selected Peer Details Card */}\n {currentPeer && (\n <div className=\"flex flex-col gap-2 rounded-2xl bg-[var(--md-sys-color-surface-container-low,#f7f2fa)] p-4 border border-[var(--md-sys-color-outline-variant,#cac4d0)]/50\">\n <div className=\"flex items-start justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-semibold text-sm\">{currentPeer.name}</span>\n <span className=\"text-xs text-[var(--md-sys-color-on-surface-variant,#49454f)]\">\n ({currentPeer.role})\n </span>\n </div>\n <div className=\"text-xs text-[var(--md-sys-color-outline,#79747e)] mt-0.5\">\n Peer ID: <code className=\"font-mono text-xs\">{currentPeer.id}</code> · Version:{\" \"}\n {currentPeer.version || \"1.0.0\"}\n </div>\n </div>\n {currentPeer.activeClaim && (\n <div className=\"flex items-center gap-1.5 rounded-lg bg-amber-500/10 px-2 py-1 text-xs text-amber-700 dark:text-amber-400 border border-amber-500/20\">\n <span className=\"material-symbols-outlined text-sm\">lock</span>\n <span className=\"font-mono text-[11px]\">{currentPeer.activeClaim}</span>\n </div>\n )}\n </div>\n\n {currentPeer.skills && currentPeer.skills.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {currentPeer.skills.map((skill) => (\n <span\n key={skill}\n className=\"rounded-md bg-[var(--md-sys-color-surface-container-highest,#e6e0e9)] px-2 py-0.5 text-[11px] font-mono text-[var(--md-sys-color-on-surface-variant,#49454f)]\"\n >\n #{skill}\n </span>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Envelope Stream Section */}\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-xs font-semibold uppercase tracking-wider text-[var(--md-sys-color-on-surface-variant,#49454f)]\">\n Coordination Envelopes ({filteredEnvelopes.length})\n </h3>\n <span className=\"text-[11px] text-[var(--md-sys-color-outline,#79747e)]\">\n .coord/inbox & .coord/outbox\n </span>\n </div>\n\n {filteredEnvelopes.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center p-6 rounded-2xl bg-[var(--md-sys-color-surface-container-lowest,#ffffff)] border border-dashed border-[var(--md-sys-color-outline-variant,#cac4d0)] text-xs text-[var(--md-sys-color-outline,#79747e)]\">\n <span className=\"material-symbols-outlined text-2xl mb-1 opacity-50\">\n mark_email_read\n </span>\n No pending envelopes for @{selectedPeerId}. Fleet mailbox is synchronized.\n </div>\n ) : (\n <div className=\"flex flex-col gap-2 max-h-60 overflow-y-auto pr-1\">\n {filteredEnvelopes.map((env) => {\n const kind = (env.kind in KIND_COLORS ? env.kind : \"ping\") as EnvelopeKind;\n const style = KIND_COLORS[kind];\n\n return (\n <div\n key={env.id}\n className={clsx(\n \"flex flex-col gap-1.5 rounded-xl p-3 border text-xs transition-shadow\",\n \"bg-[var(--md-sys-color-surface-container-low,#f7f2fa)]\",\n style.border,\n )}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span\n className={clsx(\n \"rounded-md px-1.5 py-0.5 text-[10px] font-bold uppercase\",\n style.bg,\n style.text,\n )}\n >\n {env.kind}\n </span>\n <span className=\"font-semibold\">{env.topic}</span>\n </div>\n <span className=\"text-[10px] font-mono text-[var(--md-sys-color-outline,#79747e)]\">\n {env.from} → {env.to || \"all\"}\n </span>\n </div>\n\n <p className=\"line-clamp-2 text-xs text-[var(--md-sys-color-on-surface-variant,#49454f)] font-mono whitespace-pre-wrap\">\n {env.body}\n </p>\n\n <div className=\"flex items-center justify-between pt-1 border-t border-[var(--md-sys-color-outline-variant,#cac4d0)]/30 text-[10px] text-[var(--md-sys-color-outline,#79747e)] font-mono\">\n <span>id: {env.id}</span>\n {env.re && <span>re: {env.re}</span>}\n <span>{new Date(env.ts).toLocaleTimeString()}</span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n\n {/* Compose Form */}\n <form\n onSubmit={handleSend}\n className=\"flex flex-col gap-2.5 pt-2 border-t border-[var(--md-sys-color-outline-variant,#cac4d0)]/50\"\n >\n <div className=\"flex items-center gap-2\">\n <select\n value={composeKind}\n onChange={(e) => setComposeKind(e.target.value as EnvelopeKind)}\n className=\"rounded-xl border border-[var(--md-sys-color-outline-variant,#cac4d0)] bg-[var(--md-sys-color-surface-container-low,#f7f2fa)] px-2.5 py-1.5 text-xs font-medium text-[var(--md-sys-color-on-surface,#1d1b20)] focus:outline-none focus:ring-1 focus:ring-[var(--md-sys-color-primary,#6750a4)]\"\n >\n <option value=\"ask\">ASK</option>\n <option value=\"fact\">FACT</option>\n <option value=\"ack\">ACK</option>\n <option value=\"ping\">PING</option>\n <option value=\"error\">ERROR</option>\n </select>\n\n <input\n type=\"text\"\n placeholder=\"Topic (e.g. work, claim-check, verification)...\"\n value={composeTopic}\n onChange={(e) => setComposeTopic(e.target.value)}\n className=\"flex-1 rounded-xl border border-[var(--md-sys-color-outline-variant,#cac4d0)] bg-[var(--md-sys-color-surface-container-low,#f7f2fa)] px-3 py-1.5 text-xs text-[var(--md-sys-color-on-surface,#1d1b20)] placeholder-[var(--md-sys-color-outline,#79747e)] focus:outline-none focus:ring-1 focus:ring-[var(--md-sys-color-primary,#6750a4)]\"\n />\n </div>\n\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder={`Message body to @${selectedPeerId}...`}\n value={composeBody}\n onChange={(e) => setComposeBody(e.target.value)}\n className=\"flex-1 rounded-xl border border-[var(--md-sys-color-outline-variant,#cac4d0)] bg-[var(--md-sys-color-surface-container-low,#f7f2fa)] px-3 py-1.5 text-xs text-[var(--md-sys-color-on-surface,#1d1b20)] placeholder-[var(--md-sys-color-outline,#79747e)] focus:outline-none focus:ring-1 focus:ring-[var(--md-sys-color-primary,#6750a4)]\"\n />\n\n <button\n type=\"submit\"\n disabled={!composeTopic.trim() || !composeBody.trim()}\n className={clsx(\n \"flex items-center gap-1.5 rounded-xl px-4 py-1.5 text-xs font-semibold transition-all\",\n composeTopic.trim() && composeBody.trim()\n ? \"bg-[var(--md-sys-color-primary,#6750a4)] text-[var(--md-sys-color-on-primary,#ffffff)] hover:opacity-90 shadow-sm\"\n : \"bg-[var(--md-sys-color-surface-container-high,#ece6f0)] text-[var(--md-sys-color-outline,#79747e)] cursor-not-allowed\",\n )}\n >\n <span>Dispatch</span>\n <span className=\"material-symbols-outlined text-sm\">send</span>\n </button>\n </div>\n </form>\n </div>\n );\n};\n",
27
+ "// SPDX-License-Identifier: Apache-2.0\n/**\n * @aphrody/m3-ai - A2ATaskTimeline\n *\n * Material Design 3 Agent-to-Agent Delegation Timeline:\n * - Chronological trace of task handoffs between agents (e.g., user -> agycli -> codex -> claude -> shenron).\n * - Displays delegation phase, envelope kind, file claims, and execution status.\n */\n\nimport React, { useId, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport type { CoordEnvelope } from \"./AgUiEventStream\";\n\nexport interface TimelineStep {\n id: string;\n from: string;\n to: string;\n title: string;\n description?: string;\n status: \"pending\" | \"running\" | \"completed\" | \"error\";\n timestamp: string;\n envelope?: Partial<CoordEnvelope>;\n claim?: string;\n}\n\nexport interface A2ATaskTimelineProps {\n steps?: TimelineStep[];\n currentStepId?: string;\n onSelectStep?: (step: TimelineStep) => void;\n className?: string;\n}\n\nconst DEFAULT_TIMELINE_STEPS: TimelineStep[] = [\n {\n id: \"step-agy-lead\",\n from: \"user\",\n to: \"agy\",\n title: \"Lead Coordination & Monorepo Integration\",\n status: \"completed\",\n timestamp: \"Live\",\n description: \"Coordination active via .coord mailbox and OS resource claims.\",\n },\n {\n id: \"step-workers\",\n from: \"agy\",\n to: \"codex\",\n title: \"Subagent / Peer Parallel Tasks\",\n status: \"running\",\n timestamp: \"Ongoing\",\n description: \"Workers executing disjoint task families under cooperatively acquired locks.\",\n },\n];\n\nexport const A2ATaskTimeline: React.FC<A2ATaskTimelineProps> = ({\n steps = DEFAULT_TIMELINE_STEPS,\n currentStepId,\n onSelectStep,\n className,\n}) => {\n const [expandedStepId, setExpandedStepId] = useState<string | null>(null);\n const timelineId = useId();\n\n const toggleExpand = (id: string) => {\n setExpandedStepId((current) => (current === id ? null : id));\n };\n\n return (\n <div\n className={clsx(\n \"flex flex-col gap-3 rounded-3xl p-5 border\",\n \"bg-[var(--md-sys-color-surface-container-lowest,#ffffff)]\",\n \"border-[var(--md-sys-color-outline-variant,#cac4d0)]\",\n \"text-[var(--md-sys-color-on-surface,#1d1b20)]\",\n className,\n )}\n >\n <div className=\"flex items-center justify-between border-b border-[var(--md-sys-color-outline-variant,#cac4d0)]/40 pb-3\">\n <div className=\"flex items-center gap-2\">\n <span className=\"material-symbols-outlined text-lg text-[var(--md-sys-color-primary,#6750a4)]\">\n timeline\n </span>\n <h3 className=\"text-sm font-semibold tracking-tight\">A2A Task Delegation Timeline</h3>\n </div>\n <span className=\"text-xs text-[var(--md-sys-color-outline,#79747e)]\">\n {steps.length} delegation steps\n </span>\n </div>\n\n <div className=\"relative flex flex-col gap-4 pl-4 pt-1\">\n {/* Continuous connector line */}\n <div className=\"absolute left-[27px] top-4 bottom-4 w-0.5 bg-[var(--md-sys-color-outline-variant,#cac4d0)]/60\" />\n\n {steps.map((step) => {\n const isCurrent = step.id === currentStepId;\n const isExpanded = step.id === expandedStepId;\n const detailsId = `${timelineId}-${encodeURIComponent(step.id)}`;\n const date = new Date(step.timestamp);\n const time = Number.isNaN(date.getTime()) ? step.timestamp : date.toLocaleTimeString();\n\n const statusIcon =\n step.status === \"completed\"\n ? \"check_circle\"\n : step.status === \"running\"\n ? \"sync\"\n : step.status === \"error\"\n ? \"error\"\n : \"radio_button_unchecked\";\n\n const statusColor =\n step.status === \"completed\"\n ? \"text-emerald-500\"\n : step.status === \"running\"\n ? \"text-[var(--md-sys-color-primary,#6750a4)] animate-spin motion-reduce:animate-none\"\n : step.status === \"error\"\n ? \"text-rose-500\"\n : \"text-slate-400\";\n\n return (\n <div\n key={step.id}\n className={clsx(\n \"relative flex items-start gap-3 transition-all\",\n isCurrent && \"font-medium\",\n )}\n >\n {/* Step indicator node */}\n <div\n className={clsx(\n \"relative z-10 flex h-7 w-7 items-center justify-center rounded-full border-2 bg-[var(--md-sys-color-surface-container-lowest,#ffffff)]\",\n step.status === \"completed\"\n ? \"border-emerald-500\"\n : step.status === \"running\"\n ? \"border-[var(--md-sys-color-primary,#6750a4)] ring-4 ring-[var(--md-sys-color-primary,#6750a4)]/20\"\n : step.status === \"error\"\n ? \"border-rose-500\"\n : \"border-[var(--md-sys-color-outline-variant,#cac4d0)]\",\n )}\n >\n <span className={clsx(\"material-symbols-outlined text-sm\", statusColor)}>\n {statusIcon}\n </span>\n </div>\n\n {/* Step details card */}\n <div\n className={clsx(\n \"flex-1 cursor-pointer rounded-2xl border p-3 text-xs transition-all\",\n \"bg-[var(--md-sys-color-surface-container-low,#f7f2fa)] hover:bg-[var(--md-sys-color-surface-container,#f3edf7)]\",\n isCurrent\n ? \"border-[var(--md-sys-color-primary,#6750a4)] shadow-sm\"\n : \"border-[var(--md-sys-color-outline-variant,#cac4d0)]/60\",\n )}\n >\n <button\n type=\"button\"\n aria-expanded={step.envelope ? isExpanded : undefined}\n aria-controls={step.envelope ? detailsId : undefined}\n onClick={() => {\n toggleExpand(step.id);\n onSelectStep?.(step);\n }}\n className=\"block w-full rounded-medium text-left outline-none focus-visible:ring-2 focus-visible:ring-primary\"\n >\n <span className=\"flex items-center justify-between gap-2\">\n <span className=\"flex items-center gap-1.5\">\n <span className=\"font-semibold text-xs text-[var(--md-sys-color-on-surface,#1d1b20)]\">\n {step.title}\n </span>\n <span className=\"rounded-md bg-[var(--md-sys-color-surface-container-highest,#e6e0e9)] px-1.5 py-0.2 text-[10px] font-mono text-[var(--md-sys-color-on-surface-variant,#49454f)]\">\n @{step.from} → @{step.to}\n </span>\n </span>\n <span className=\"text-[10px] font-mono text-[var(--md-sys-color-outline,#79747e)]\">\n {time}\n </span>\n </span>\n\n {step.description && (\n <span className=\"mt-1 block text-xs text-[var(--md-sys-color-on-surface-variant,#49454f)]\">\n {step.description}\n </span>\n )}\n\n {step.claim && (\n <span className=\"mt-2 flex items-center gap-1.5 text-[11px] font-mono text-amber-700 dark:text-amber-400\">\n <span className=\"material-symbols-outlined text-xs\">lock</span>\n <span>claim: {step.claim}</span>\n </span>\n )}\n </button>\n\n {/* Expanded envelope payload view */}\n {step.envelope && (\n <div\n id={detailsId}\n hidden={!isExpanded}\n className=\"mt-2.5 pt-2 border-t border-[var(--md-sys-color-outline-variant,#cac4d0)]/40 font-mono text-[11px] text-[var(--md-sys-color-on-surface-variant,#49454f)]\"\n >\n <div className=\"flex items-center gap-2 mb-1\">\n <span className=\"font-semibold\">Kind: {step.envelope.kind}</span>\n <span>·</span>\n <span>Topic: {step.envelope.topic}</span>\n </div>\n {step.envelope.body && (\n <pre className=\"rounded-lg bg-[var(--md-sys-color-surface-container-highest,#e6e0e9)]/50 p-2 overflow-x-auto whitespace-pre-wrap\">\n {step.envelope.body}\n </pre>\n )}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n"
28
+ ],
29
+ "mappings": "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",
30
+ "debugId": "92ED95EDB5C4988E64756E2164756E21",
31
+ "names": []
32
+ }