@neuralnomads/codenomad-dev 0.20.1-dev-20261019-7eb401eb → 0.20.1-dev-20261019-e32d9331

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 (70) hide show
  1. package/dist/automation/browser-page.js +97 -0
  2. package/dist/automation/browser-page.js.map +1 -0
  3. package/dist/automation/browser-page.test.js +119 -0
  4. package/dist/automation/browser-page.test.js.map +1 -0
  5. package/dist/automation/page/actions.js +107 -83
  6. package/dist/automation/page/actions.js.map +1 -1
  7. package/dist/automation/page/input.js +130 -0
  8. package/dist/automation/page/input.js.map +1 -0
  9. package/dist/automation/page/input.test.js +71 -0
  10. package/dist/automation/page/input.test.js.map +1 -0
  11. package/dist/automation/page/keys.js +99 -0
  12. package/dist/automation/page/keys.js.map +1 -0
  13. package/dist/automation/page/keys.test.js +32 -0
  14. package/dist/automation/page/keys.test.js.map +1 -0
  15. package/dist/automation/page/parse.js +79 -0
  16. package/dist/automation/page/parse.js.map +1 -0
  17. package/dist/automation/page/protocol.js +143 -0
  18. package/dist/automation/page/protocol.js.map +1 -0
  19. package/dist/developer-cdp.js +7 -10
  20. package/dist/developer-cdp.js.map +1 -1
  21. package/dist/developer-cdp.test.js +49 -15
  22. package/dist/developer-cdp.test.js.map +1 -1
  23. package/dist/opencode/automation/desktop-plugin.js +10 -6
  24. package/dist/opencode/automation/desktop-plugin.js.map +1 -1
  25. package/dist/opencode/automation-plugin.js +33 -41
  26. package/dist/opencode/automation-plugin.js.map +1 -1
  27. package/dist/opencode/automation-plugin.test.js +42 -1
  28. package/dist/opencode/automation-plugin.test.js.map +1 -1
  29. package/dist/plugins/automation/plugin.mjs +230 -40
  30. package/dist/plugins/missions/plugin.mjs +21 -0
  31. package/dist/server/routes/automation-plugin.js +7 -5
  32. package/dist/server/routes/automation-plugin.js.map +1 -1
  33. package/dist/server/routes/automation-plugin.test.js +17 -4
  34. package/dist/server/routes/automation-plugin.test.js.map +1 -1
  35. package/package.json +1 -1
  36. package/public/assets/{App-7u0r589J.js → App-DZMdkLQJ.js} +8 -8
  37. package/public/assets/{App-7u0r589J.js.map → App-DZMdkLQJ.js.map} +1 -1
  38. package/public/assets/{FilesPanel-DmdwCBoM.js → FilesPanel-CgFgL4q7.js} +2 -2
  39. package/public/assets/{FilesPanel-DmdwCBoM.js.map → FilesPanel-CgFgL4q7.js.map} +1 -1
  40. package/public/assets/{StatusTab-CPfdwHzQ.js → StatusTab-CaQz8RwN.js} +2 -2
  41. package/public/assets/{StatusTab-CPfdwHzQ.js.map → StatusTab-CaQz8RwN.js.map} +1 -1
  42. package/public/assets/{client-state-Dbg3RTSW.js → client-state-DikXRKzG.js} +2 -2
  43. package/public/assets/{client-state-Dbg3RTSW.js.map → client-state-DikXRKzG.js.map} +1 -1
  44. package/public/assets/{client-state-_VkciMC3.js → client-state-kpF1cbUu.js} +2 -2
  45. package/public/assets/{client-state-_VkciMC3.js.map → client-state-kpF1cbUu.js.map} +1 -1
  46. package/public/assets/client-state-owner-commands-BMJJQYT-.js +2 -0
  47. package/public/assets/{client-state-owner-commands-C_V-9FL7.js.map → client-state-owner-commands-BMJJQYT-.js.map} +1 -1
  48. package/public/assets/{diff-viewer-EKYtk2Kn.js → diff-viewer-iFIylM56.js} +2 -2
  49. package/public/assets/{diff-viewer-EKYtk2Kn.js.map → diff-viewer-iFIylM56.js.map} +1 -1
  50. package/public/assets/{main-CSjPT-d2.js → main-B0L3f7sD.js} +52 -52
  51. package/public/assets/main-B0L3f7sD.js.map +1 -0
  52. package/public/assets/{markdown-BCaUmWNf.js → markdown-Bh1QlJgA.js} +2 -2
  53. package/public/assets/{markdown-BCaUmWNf.js.map → markdown-Bh1QlJgA.js.map} +1 -1
  54. package/public/assets/{opener-startup-state-settings-card-DcDRs1t6.js → opener-startup-state-settings-card-mzh22bq8.js} +2 -2
  55. package/public/assets/{opener-startup-state-settings-card-DcDRs1t6.js.map → opener-startup-state-settings-card-mzh22bq8.js.map} +1 -1
  56. package/public/assets/{startup-state-settings-card-CQaOfOwm.js → startup-state-settings-card-B1UMzsQK.js} +2 -2
  57. package/public/assets/{startup-state-settings-card-CQaOfOwm.js.map → startup-state-settings-card-B1UMzsQK.js.map} +1 -1
  58. package/public/assets/{startup-state-settings-view-Cd3LgXsC.js → startup-state-settings-view-nZNbhUhQ.js} +2 -2
  59. package/public/assets/{startup-state-settings-view-Cd3LgXsC.js.map → startup-state-settings-view-nZNbhUhQ.js.map} +1 -1
  60. package/public/assets/{terminal-square-CBQGNjjn.js → terminal-square-CdJ4Gt6Y.js} +2 -2
  61. package/public/assets/{terminal-square-CBQGNjjn.js.map → terminal-square-CdJ4Gt6Y.js.map} +1 -1
  62. package/public/assets/{tool-call-Q2b_KH6g.js → tool-call-C9ux0znU.js} +4 -4
  63. package/public/assets/{tool-call-Q2b_KH6g.js.map → tool-call-C9ux0znU.js.map} +1 -1
  64. package/public/assets/{unified-picker-Dubi2nCg.js → unified-picker-DOP29DIt.js} +2 -2
  65. package/public/assets/{unified-picker-Dubi2nCg.js.map → unified-picker-DOP29DIt.js.map} +1 -1
  66. package/public/index.html +1 -1
  67. package/public/sw.js +1 -1
  68. package/public/sw.js.map +1 -1
  69. package/public/assets/client-state-owner-commands-C_V-9FL7.js +0 -2
  70. package/public/assets/main-CSjPT-d2.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"mappings":"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","names":["iconNode","x1","x2","y1","y2","key","AlignJustify","props","_$createComponent","Icon","_$mergeProps","name","APPLY_PATCH_FILE_RENDER_LIMIT","APPLY_PATCH_SCAN_LIMIT","getApplyPatchPathLabel","path","limit","tail","separator","label","getApplyPatchDiagnosticPaths","diagnostics","getApplyPatchDiff","file","probeApplyPatchCopyText","diff","prefix","hasApplyPatchCopyText","files","scanLimit","characters","index","probe","getApplyPatchCopyText","diffs","remaining","copyText","getApplyPatchCopyOutput","fallback","getApplyPatchCopyAccess","getApplyPatchRenderData","fileLimit","characterLimit","sourceTruncated","rendered","scannedCharacters","truncated","fullDiff","firstContent","diffText","getApplyPatchFilesForRender","diagnosticPaths","normalize","matchesPath","left","right","paths","diagnosticPathsTruncated","knownPaths","scannedFiles","fileIndex","normalizedFilePaths","matchesDiagnostic","diagnostic","knownPath","DiagnosticsInline","Show","when","entries","length","children","_el$","_tmpl$","_el$2","firstChild","_el$3","_$insert","For","each","_el$4","_tmpl$2","_el$5","_el$6","_el$7","nextSibling","_el$8","_el$9","_el$0","_el$10","_el$11","entry","icon","displayPath","line","column","message","_$effect","_p$","_v$","tone","_v$2","filePath","e","_$className","t","_$setAttribute","undefined","applyPatchRenderer","tools","getSearchText","getApplyPatchToolSearchText","getAction","getTitle","toolState","state","status","getToolName","metadata","readToolStatePayload","Array","isArray","tool","count","getOutputChrome","payload","isToolStateCompleted","output","access","language","suppressInnerHeader","wrapToggle","renderBody","renderDiff","renderMarkdown","diagnosticsMap","createMemo","value","allFiles","list","renderData","TOOL_OUTPUT_RENDER_CHARACTER_LIMIT","map","diagnosticViews","view","buildDiagnosticView","relativePath","slice","diagnosticsTruncated","views","renderedKeys","Set","filter","Boolean","some","scanned","scannedKeys","Object","prototype","hasOwnProperty","call","has","_el$12","_tmpl$5","content","size","disableHighlight","renderedFile","labelBase","number","patch","_el$16","_tmpl$6","trim","limitToolTitleForRender","cacheKey","renderLimit","_el$13","_tmpl$3","hasDiagnosticMessages","_el$14","_tmpl$4","_el$15","DiagnosticsPayloadAccess","createStableAnsiStreamUpdater","renderer","createAnsiStreamRenderer","previousContent","ansiActive","update","element","startsWith","hasAnsi","reset","innerHTML","render","escapeHtml","delta","htmlChunk","insertAdjacentHTML","escapedDelta","OutputReveal","window","hidden","HiddenTextNotice","onReveal","reveal","RunningBashOutput","preRef","updater","createEffect","scrollHelpers","restoreAfterRender","onCleanup","_$addEventListener","event","handleScroll","_ref$","registerContainer","_$use","_ref$2","renderSentinel","FinalAnsiOutput","html","_ref$3","getBashCopyText","input","command","outputResult","formatUnknownForCopy","isToolStateRunning","isToolStateError","text","join","BashToolBody","parts","current","formatUnknownForRender","source","joinedTextSource","createTextWindow","target","revealTarget","renderedContent","isFinal","finalHasAnsi","part","finalAnsiHtml","ansiToHtml","_$memo","codeLanguage","bashRenderer","getBashToolSearchText","tGlobal","description","timeout","baseTitle","timeoutLabel","getCopyText","hasCopyText","textRevealTarget","editRenderer","getDiffToolSearchText","getRelativePath","toolName","diffPayload","extractDiffPayload","hasVisibleText","invalidRenderer","getDefaultToolSearchText","context","defaultRenderer","patchRenderer","questionRenderer","getQuestionToolSearchText","questions","getQuestionReceipts","question","header","prompt","selected","_tmpl$8","answer","_tmpl$7","_el$1","option","getReadPath","readRenderer","getReadToolSearchText","offset","detailParts","push","toolLabel","preview","inferLanguageFromPath","searchRenderer","pattern","skillRenderer","MARKDOWN_TEXT_RENDER_CHARACTER_LIMIT","webfetchRenderer","getWebfetchToolSearchText","url","result","writeRenderer","getWriteToolSearchText","contentValue","renderers","websearchRenderer","todoRenderer","taskRenderer","executeRenderer","resolveToolRenderer","getToolRegistryEntry","LazyToolCallDiffViewer","lazy","__vitePreload","then","module","default","ToolCallDiffViewer","CachedDiffMarkup","onMount","onRendered","createDiffContentRenderer","params","compactDiffQuery","useMediaQuery","mobileModeOverride","setMobileModeOverride","createSignal","wordWrapEnabled","setWordWrapEnabled","registerTracked","registerUntracked","disableTracking","renderDiffContent","options","renderAsPlainText","shouldRenderDiffPayloadAsPlainText","toolbarLabel","selectedVariant","variant","cacheHandle","permissionDiffCache","diffCache","revealSection","bounded","renderedDiffText","preferredMode","preferences","diffViewMode","effectiveMode","shouldWrap","themeKey","isDark","disableScrollTracking","registerRef","baseEntryParams","cacheEntryParams","suffix","cacheId","currentMode","currentWrap","cachedHtml","cached","getCacheEntry","theme","mode","wrap","handleModeChange","setDiffViewMode","nextViewMode","viewModeTitle","wordWrapTitle","copyPatchTitle","copyFullDiff","copiedDiff","copyToClipboard","onFullDiffAccess","handleDiffRendered","handleScrollRendered","onContentRendered","$$click","Copy","_c$","Split","_v$3","a","enabled","WrapText","_v$4","_v$5","_v$6","Suspense","_v$7","_v$8","_v$9","_v$0","o","_$delegateEvents","createMarkdownContentRenderer","renderMarkdownContent","wrapEnabled","messageClass","shouldDeferMarkdown","BoundedText","formatText","ensureMarkdownContent","markdownPart","id","partId","type","version","partVersion","handleMarkdownRendered","Markdown","instanceId","sessionId","defaultCodeBlockWrap","observeToolStatusCompaction","summary","frame","disposed","measure","next","contentWidth","schedule","resize","mutation","_a","OutputImage","useI18n","toolImageSource","failedSource","setFailedSource","addEventListener","mime","ToolOutputImages","images","isToolImageContent","getLogger","TOOL_CALL_CACHE_SCOPE","makeRenderCacheKey","toolCallId","messageId","makeTextRevealTarget","section","ToolStatusIndicator","resolvedStatus","isVisible","Hourglass","Loader2","Check","XCircle","_$setStyleProperty","i","n","s","ToolCallDetails","messageVersionAccessor","messageVersion","partVersionAccessor","cacheContext","toolCallIdentifier","toolCallMemo","cacheVersion","String","createVariantCache","useGlobalCache","scope","followScroll","createFollowScroll","getScrollTopSnapshot","scrollTopSnapshot","setScrollTopSnapshot","sentinelClassName","toolInputDisplay","toolInput","inputSectionExpanded","formatted","formatToolInputForRender","renderOutputMarkdownContent","outputWrapEnabled","rendererContext","toolCall","isActive","renderToolCall","ToolCall","forceCollapsed","previousPartVersion","autoScroll","renderToolBody","body","outputChrome","resolveOutputCopyText","canCopyOutput","renderError","error","copyIoText","shouldShowPendingMessage","pendingPermission","preventDefault","stopPropagation","copyToolInput","formatToolInputForCopy","outputWrapTitle","renderIoHeader","onToggle","ChevronRight","title","actions","onCopy","copyAriaLabel","_v$1","copyTitle","expanded","shouldUseToolHeaderOutputControls","renderOutputRail","_el$17","toggleOutputWrap","_v$10","_v$11","_v$12","renderOutputIoBody","showPending","_el$18","_tmpl$0","_el$19","_tmpl$9","_el$20","_el$21","renderCurrentOutputIoBody","renderToolOutputBody","chrome","_el$22","_tmpl$1","_el$23","_tmpl$10","_el$24","_el$25","_el$26","_el$27","_tmpl$13","isToolInputVisible","hasToolInput","_el$28","_tmpl$12","_el$29","_el$30","_el$32","toggleInputSection","_el$31","_tmpl$11","outputSectionExpanded","toggleOutputSection","_el$33","_tmpl$14","useConfig","useTheme","snapshotPart","structuredClone","unwrap","renderPart","setRenderPart","createStore","on","reconcile","defer","Error","store","messageStoreBus","getOrCreate","activeRequest","activeInterruption","get","permissionState","getPermissionState","permission","active","pendingForm","getFormQueue","find","form","sessionID","resolveFormToolTarget","diagnosticsVisibility","diagnosticsExpansion","diagnosticsDefaultExpanded","toolVisibility","resolveToolVisibility","defaultExpandedForTool","resolveToolExpansionDefault","userExpanded","setUserExpanded","setOutputWrapEnabled","toolInputsVisibility","toolInputVisibilityOverride","setToolInputVisibilityOverride","effectiveToolInputsVisibility","inputDefaultExpanded","inputSectionOverride","setInputSectionOverride","outputSectionOverride","setOutputSectionOverride","override","isPermissionActive","pending","kind","hasPendingForm","isToolVisible","toolCallRootEl","setToolCallRootEl","diagnosticsOverride","setDiagnosticsOverride","diagnosticsExpanded","diagnosticsView","extractDiagnosticsView","prev","statusClass","combinedStatusClass","base","toggle","renderMarkdownStub","renderDiffStub","renderToolCallStub","headerRendererContext","getRendererAction","getDefaultToolAction","headerOutputChrome","renderToolTitle","currentTool","getCanonicalToolName","stateTitle","customTitle","toolTypeLabel","renderedToolTypeLabel","headerTitleDetail","getToolTitleDetail","headerText","typeLabel","detail","renderedHeaderTitleDetail","headerCopyText","canCopyHeaderOutput","speechText","buildToolSpeechText","speech","useSpeech","canSpeakToolCall","canUseSpeech","handleCopyHeader","buildActionMenuItems","includePrimaryActions","items","ArrowRightSquare","onSelect","currentlyVisible","buttonTitle","Volume2","headerMenuItems","secondaryActionItems","overflowEligibleItems","_el$34","_tmpl$17","_el$35","_tmpl$16","_el$36","_el$37","_el$38","observeActionOverflow","_el$40","_tmpl$18","PartDuration","startedAt","getPartStartedAt","endedAt","getPartEndedAt","running","_el$39","_tmpl$15","_v$13","_v$14","SpeechActionButton","onClick","isLoading","isPlaying","headerAction","_el$41","_tmpl$19","action","_el$42","item","onMouseLeave","onMouseEnter","_v$23","disabled","_v$24","_v$25","ActionOverflowMenu","triggerClass","minItems","_v$15","_v$16","renderDiagnosticsSection","diagnosticFileName","_v$17","_v$18","_v$19","_v$20","_v$21","_v$22"],"ignoreList":[0],"sources":["../../../../../../node_modules/lucide-solid/dist/source/icons/align-justify.jsx","../../../components/tool-call/renderers/apply-patch-data.ts","../../../components/tool-call/renderers/apply-patch.tsx","../../../components/tool-call/ansi-render.tsx","../../../components/tool-call/renderers/bash.tsx","../../../components/tool-call/renderers/edit.tsx","../../../components/tool-call/renderers/invalid.tsx","../../../components/tool-call/renderers/patch.tsx","../../../components/tool-call/renderers/question.tsx","../../../components/tool-call/renderers/read.tsx","../../../components/tool-call/renderers/search.tsx","../../../components/tool-call/renderers/skill.tsx","../../../components/tool-call/renderers/webfetch.tsx","../../../components/tool-call/renderers/write.tsx","../../../components/tool-call/tool-registry.ts","../../../components/tool-call/diff-render.tsx","../../../components/tool-call/markdown-render.tsx","../../../components/tool-status-compaction.ts","../../../components/tool-call/output-images.tsx","../../../components/tool-call.tsx"],"sourcesContent":["import Icon from '../Icon';\nconst iconNode = [\n ['line', { x1: '3', x2: '21', y1: '6', y2: '6', key: '4m8b97' }],\n ['line', { x1: '3', x2: '21', y1: '12', y2: '12', key: '10d38w' }],\n ['line', { x1: '3', x2: '21', y1: '18', y2: '18', key: 'kwyyxn' }],\n];\nconst AlignJustify = (props) => (<Icon {...props} name=\"AlignJustify\" iconNode={iconNode}/>);\nexport default AlignJustify;\n","export type ApplyPatchFile = {\n filePath?: string\n relativePath?: string\n type?: string\n diff?: string\n patch?: string\n}\n\nexport const APPLY_PATCH_FILE_RENDER_LIMIT = 20\nconst APPLY_PATCH_SCAN_LIMIT = 10_000\n\nexport function getApplyPatchPathLabel(path: string, limit = 384): string {\n const tail = path.slice(-(limit + 1)).replace(/\\\\/g, \"/\")\n const separator = tail.lastIndexOf(\"/\")\n const label = separator >= 0 ? tail.slice(separator + 1) : tail\n return label.length <= limit ? label : `...${label.slice(-(limit - 3))}`\n}\n\nexport function* getApplyPatchDiagnosticPaths(diagnostics: Record<string, unknown>): Generator<string> {\n for (const path in diagnostics) if (Object.prototype.hasOwnProperty.call(diagnostics, path)) yield path\n}\n\nfunction getApplyPatchDiff(file: ApplyPatchFile): string {\n return typeof file.diff === \"string\" ? file.diff : typeof file.patch === \"string\" ? file.patch : \"\"\n}\n\nfunction probeApplyPatchCopyText(file: ApplyPatchFile, limit: number) {\n const diff = getApplyPatchDiff(file)\n const prefix = diff.slice(0, Math.max(0, limit))\n return { hasContent: /\\S/.test(prefix), scanned: prefix.length, truncated: prefix.length < diff.length }\n}\n\nexport function hasApplyPatchCopyText(files: ApplyPatchFile[], scanLimit = APPLY_PATCH_SCAN_LIMIT): boolean {\n let characters = 0\n let index = 0\n for (; index < files.length && index < scanLimit; index += 1) {\n const probe = probeApplyPatchCopyText(files[index], scanLimit - characters)\n if (probe.hasContent || probe.truncated) return true\n characters += probe.scanned\n }\n return index < files.length\n}\n\nexport function getApplyPatchCopyText(files: ApplyPatchFile[], limit = Number.POSITIVE_INFINITY): string {\n const diffs: string[] = []\n let characters = 0\n for (const file of files) {\n const remaining = limit - characters\n if (remaining <= 0) break\n const diff = getApplyPatchDiff(file)\n const copyText = diff.slice(0, remaining)\n if (!copyText.trim()) {\n if (copyText.length < diff.length) break\n continue\n }\n diffs.push(copyText)\n characters += Math.min(diff.length, remaining)\n if (diff.length > remaining) break\n }\n return diffs.join(\"\\n\")\n}\n\nexport function getApplyPatchCopyOutput(files: ApplyPatchFile[], fallback: unknown): string | null {\n return getApplyPatchCopyText(files) || (typeof fallback === \"string\" && fallback.length > 0 ? fallback : null)\n}\n\nexport function getApplyPatchCopyAccess(files: ApplyPatchFile[], fallback: unknown) {\n if (hasApplyPatchCopyText(files)) {\n return { language: \"diff\" as const, getCopyText: () => getApplyPatchCopyOutput(files, fallback), hasCopyText: true as const }\n }\n if (typeof fallback !== \"string\" || fallback.length === 0) return undefined\n return { language: \"text\" as const, getCopyText: () => fallback, hasCopyText: true as const }\n}\n\n/**\n * Files to render within a shared character budget. Each rendered file carries its\n * whole diff and the share of the budget it renders before its own in-place reveal;\n * `truncated` reports files (or content) omitted from rendering altogether.\n */\nexport function getApplyPatchRenderData(files: ApplyPatchFile[], fileLimit: number, characterLimit: number, sourceTruncated = false) {\n const rendered: Array<{ file: ApplyPatchFile; diffText: string; renderLimit: number }> = []\n let characters = 0\n let scannedCharacters = 0\n let truncated = sourceTruncated\n for (const file of files) {\n if (rendered.length >= fileLimit || characters >= characterLimit) {\n truncated = true\n break\n }\n const remaining = characterLimit - characters\n const fullDiff = getApplyPatchDiff(file)\n const probe = probeApplyPatchCopyText(file, Math.min(APPLY_PATCH_SCAN_LIMIT - scannedCharacters, remaining))\n scannedCharacters += probe.scanned\n const firstContent = probe.hasContent ? fullDiff.slice(0, probe.scanned).search(/\\S/) : -1\n const diffText = firstContent >= 0 ? fullDiff.slice(firstContent) : \"\"\n rendered.push({ file, diffText, renderLimit: remaining })\n characters += Math.min(diffText.length, remaining)\n // Content the bounded scan could not locate cannot be revealed in place.\n if (probe.truncated && !probe.hasContent) truncated = true\n }\n return { rendered, truncated }\n}\n\nexport function getApplyPatchFilesForRender(files: ApplyPatchFile[], diagnosticPaths: Iterable<string>, limit = APPLY_PATCH_FILE_RENDER_LIMIT) {\n const normalize = (path: string) => path.replace(/\\\\/g, \"/\")\n const matchesPath = (left: string, right: string) => left === right || left.endsWith(`/${right}`) || right.endsWith(`/${left}`)\n const paths: Array<{ raw: string; normalized: string }> = []\n let diagnosticPathsTruncated = false\n for (const path of diagnosticPaths) {\n if (paths.length >= limit) {\n diagnosticPathsTruncated = true\n break\n }\n paths.push({ raw: path, normalized: normalize(path) })\n }\n const rendered: ApplyPatchFile[] = []\n const knownPaths: string[] = []\n let scannedFiles = 0\n let scannedCharacters = 0\n for (let fileIndex = 0; fileIndex < files.length && rendered.length < limit; fileIndex += 1) {\n const file = files[fileIndex]\n scannedFiles += 1\n const normalizedFilePaths = [file.filePath, file.relativePath]\n .filter((path): path is string => typeof path === \"string\")\n .map(normalize)\n const matchesDiagnostic = normalizedFilePaths.some((path) => paths.some((diagnostic) => matchesPath(path, diagnostic.normalized)))\n const probe = probeApplyPatchCopyText(file, APPLY_PATCH_SCAN_LIMIT - scannedCharacters)\n scannedCharacters += probe.scanned\n if (probe.hasContent || probe.truncated || matchesDiagnostic) {\n rendered.push(file)\n knownPaths.push(...normalizedFilePaths)\n }\n if (scannedFiles >= 10_000) break\n }\n for (const path of paths) {\n if (rendered.length >= limit) break\n if (!knownPaths.some((knownPath) => matchesPath(knownPath, path.normalized))) {\n rendered.push({ filePath: path.raw })\n knownPaths.push(path.normalized)\n }\n }\n return {\n files: rendered,\n truncated: scannedFiles < files.length || diagnosticPathsTruncated,\n }\n}\n","import { For, Show, createMemo } from \"solid-js\"\nimport type { ToolRenderer } from \"../types\"\nimport { getToolName, isToolStateCompleted, limitToolTitleForRender, readToolStatePayload, TOOL_OUTPUT_RENDER_CHARACTER_LIMIT } from \"../utils\"\nimport { buildDiagnosticView, hasDiagnosticMessages, type DiagnosticEntry, type DiagnosticsMap } from \"../diagnostics\"\nimport { DiagnosticsPayloadAccess } from \"../diagnostics-section\"\nimport { getApplyPatchToolSearchText } from \"../search-text\"\nimport { APPLY_PATCH_FILE_RENDER_LIMIT, getApplyPatchCopyAccess, getApplyPatchCopyText, getApplyPatchDiagnosticPaths, getApplyPatchFilesForRender, getApplyPatchPathLabel, getApplyPatchRenderData, hasApplyPatchCopyText, type ApplyPatchFile } from \"./apply-patch-data\"\n\nfunction DiagnosticsInline(props: { entries: DiagnosticEntry[]; label: string; t: (key: string, params?: Record<string, unknown>) => string }) {\n return (\n <Show when={props.entries.length > 0}>\n <div class=\"tool-call-diagnostics-wrapper\">\n <div\n class=\"tool-call-diagnostics\"\n role=\"region\"\n aria-label={props.t(\"toolCall.diagnostics.ariaLabel.withLabel\", { label: props.label })}\n >\n <div class=\"tool-call-diagnostics-body\" role=\"list\">\n <For each={props.entries}>\n {(entry) => (\n <div class=\"tool-call-diagnostic-row\" role=\"listitem\">\n <span class={`tool-call-diagnostic-chip tool-call-diagnostic-${entry.tone}`}>\n <span class=\"tool-call-diagnostic-chip-icon\">{entry.icon}</span>\n <span>{entry.label}</span>\n </span>\n <span class=\"tool-call-diagnostic-path\" title={entry.filePath}>\n {entry.displayPath}\n <span class=\"tool-call-diagnostic-coords\">:L{entry.line || \"-\"}:C{entry.column || \"-\"}</span>\n </span>\n <span class=\"tool-call-diagnostic-message\">{entry.message}</span>\n </div>\n )}\n </For>\n </div>\n </div>\n </div>\n </Show>\n )\n}\n\nexport const applyPatchRenderer: ToolRenderer = {\n tools: [\"apply_patch\"],\n getSearchText: getApplyPatchToolSearchText,\n getAction: ({ t }) => t(\"toolCall.applyPatch.action.preparing\"),\n getTitle({ toolState, t }) {\n const state = toolState()\n if (!state) return undefined\n if (state.status === \"pending\") return getToolName(\"apply_patch\")\n const { metadata } = readToolStatePayload(state)\n const files = Array.isArray((metadata as any).files) ? ((metadata as any).files as ApplyPatchFile[]) : []\n if (files.length > 0) {\n const tool = getToolName(\"apply_patch\")\n return files.length === 1\n ? t(\"toolCall.applyPatch.title.withFileCount.one\", { tool, count: files.length })\n : t(\"toolCall.applyPatch.title.withFileCount.other\", { tool, count: files.length })\n }\n return getToolName(\"apply_patch\")\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n\n const payload = readToolStatePayload(state)\n const files = Array.isArray((payload.metadata as any).files) ? ((payload.metadata as any).files as ApplyPatchFile[]) : []\n const fallback = isToolStateCompleted(state) && typeof state.output === \"string\" && state.output.length > 0 ? state.output : null\n const access = getApplyPatchCopyAccess(files, fallback)\n if (!access) return undefined\n return access.language === \"diff\"\n ? { ...access, suppressInnerHeader: false }\n : { ...access, wrapToggle: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, renderDiff, renderMarkdown, t }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n\n const payload = readToolStatePayload(state)\n const diagnosticsMap = createMemo(() => {\n const value = (payload.metadata as any).diagnostics\n return value && typeof value === \"object\" ? (value as DiagnosticsMap) : {}\n })\n const allFiles = createMemo(() => {\n const list = (payload.metadata as any).files\n return getApplyPatchFilesForRender(Array.isArray(list) ? list as ApplyPatchFile[] : [], getApplyPatchDiagnosticPaths(diagnosticsMap()))\n })\n const renderData = createMemo(() => getApplyPatchRenderData(allFiles().files, APPLY_PATCH_FILE_RENDER_LIMIT, TOOL_OUTPUT_RENDER_CHARACTER_LIMIT, allFiles().truncated))\n const files = createMemo(() => renderData().rendered)\n const fallback = createMemo(() => {\n if (!isToolStateCompleted(state) || hasApplyPatchCopyText(files().map(({ file }) => file))) return null\n return typeof state.output === \"string\" && state.output.length > 0 ? state.output : null\n })\n const diagnosticViews = createMemo(() => {\n let remaining = 100\n return files().map(({ file }) => {\n const view = buildDiagnosticView(diagnosticsMap(), [file.filePath, file.relativePath])\n const entries = view.entries.slice(0, remaining)\n remaining -= entries.length\n return { ...view, entries, truncated: view.truncated || entries.length < view.entries.length }\n })\n })\n const diagnosticsTruncated = createMemo(() => {\n const views = diagnosticViews()\n const renderedKeys = new Set(views.map((view) => view.key).filter(Boolean))\n if (views.some((view) => view.truncated)) return true\n let scanned = 0\n let scannedKeys = 0\n for (const key in diagnosticsMap()) {\n if (!Object.prototype.hasOwnProperty.call(diagnosticsMap(), key)) continue\n scannedKeys += 1\n if (scannedKeys > 10_000) return true\n const list = diagnosticsMap()[key]\n if (!renderedKeys.has(key) && Array.isArray(list)) {\n const remaining = 10_000 - scanned\n if (remaining <= 0) return true\n for (let index = 0; index < list.length && index < remaining; index += 1) {\n scanned += 1\n if (typeof list[index]?.message === \"string\") return true\n }\n if (list.length > remaining) return true\n }\n }\n return false\n })\n\n if (files().length === 0 && !fallback() && !renderData().truncated) return null\n\n return (\n <div class=\"tool-call-apply-patch\">\n <Show when={fallback()}>\n {(content) => renderMarkdown({ content: content(), size: \"large\", disableHighlight: state.status === \"running\" })}\n </Show>\n <For each={files()}>\n {(renderedFile, index) => {\n const file = renderedFile.file\n const labelBase = file.relativePath || file.filePath || t(\"toolCall.applyPatch.fileFallback\", { number: index() + 1 })\n const label = getApplyPatchPathLabel(labelBase)\n const fullDiff = typeof file.diff === \"string\" ? file.diff : typeof file.patch === \"string\" ? file.patch : \"\"\n const diffText = renderedFile.diffText\n const filePath = typeof file.filePath === \"string\" ? file.filePath : file.relativePath\n const entries = createMemo(() => diagnosticViews()[index()]?.entries ?? [])\n\n return (\n <div class=\"tool-call-apply-patch-file\">\n <Show when={diffText.trim().length > 0}>\n {renderDiff(\n { diffText, copyText: fullDiff, filePath },\n {\n label: limitToolTitleForRender(t(\"toolCall.diff.label.withPath\", { path: label })),\n cacheKey: `apply_patch:${index()}`,\n renderLimit: renderedFile.renderLimit,\n },\n )}\n </Show>\n <DiagnosticsInline entries={entries()} label={label} t={t} />\n </div>\n )\n }}\n </For>\n <Show when={renderData().truncated}>\n <div class=\"tool-call-diagnostic-message\" role=\"status\">{t(\"toolCall.output.truncated\")}</div>\n </Show>\n <Show when={hasDiagnosticMessages(diagnosticsMap())}>\n <div class=\"tool-call-diagnostics-wrapper\">\n <div class=\"tool-call-diagnostics\">\n <DiagnosticsPayloadAccess diagnostics={diagnosticsMap()} truncated={diagnosticsTruncated()} t={t} />\n </div>\n </div>\n </Show>\n </div>\n )\n },\n}\n","import { createAnsiStreamRenderer, hasAnsi } from \"../../lib/ansi\"\nimport { escapeHtml } from \"../../lib/text-render-utils\"\n\nexport interface StableAnsiStreamUpdater {\n update: (element: HTMLElement, content: string) => void\n reset: () => void\n}\n\nexport function createStableAnsiStreamUpdater(): StableAnsiStreamUpdater {\n const renderer = createAnsiStreamRenderer()\n let previousContent = \"\"\n let ansiActive = false\n\n return {\n update(element: HTMLElement, content: string) {\n const resetStreaming = !previousContent || !content.startsWith(previousContent)\n\n if (resetStreaming) {\n ansiActive = hasAnsi(content)\n renderer.reset()\n element.innerHTML = ansiActive ? renderer.render(content) : escapeHtml(content)\n previousContent = content\n return\n }\n\n const delta = content.slice(previousContent.length)\n if (delta.length === 0) {\n return\n }\n\n if (!ansiActive && hasAnsi(delta)) {\n ansiActive = true\n renderer.reset()\n element.innerHTML = renderer.render(content)\n previousContent = content\n return\n }\n\n if (ansiActive) {\n const htmlChunk = renderer.render(delta)\n if (htmlChunk.length > 0) {\n element.insertAdjacentHTML(\"beforeend\", htmlChunk)\n }\n } else {\n const escapedDelta = escapeHtml(delta)\n if (escapedDelta.length > 0) {\n element.insertAdjacentHTML(\"beforeend\", escapedDelta)\n }\n }\n\n previousContent = content\n },\n reset() {\n previousContent = \"\"\n ansiActive = false\n renderer.reset()\n },\n }\n}\n","import { Show, createEffect, createMemo, onCleanup, type Accessor } from \"solid-js\"\nimport type { ToolState } from \"../../../types/tool-state\"\nimport type { MarkdownRenderOptions, ToolRenderer, ToolScrollHelpers } from \"../types\"\nimport { formatUnknownForCopy, formatUnknownForRender, getToolName, isToolStateCompleted, isToolStateError, isToolStateRunning, readToolStatePayload, TOOL_OUTPUT_RENDER_CHARACTER_LIMIT } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { createStableAnsiStreamUpdater } from \"../ansi-render\"\nimport { ansiToHtml, hasAnsi } from \"../../../lib/ansi\"\nimport { getBashToolSearchText } from \"../search-text\"\nimport type { RecordTextRevealTarget } from \"../../../stores/message-v2/record-display-cache\"\nimport { HiddenTextNotice, createTextWindow } from \"../../hidden-text\"\nimport { joinedTextSource } from \"../../../lib/render-text-window\"\n\ntype TextWindowHandle = ReturnType<typeof createTextWindow>\n\nfunction OutputReveal(props: { output: TextWindowHandle }) {\n return (\n <Show when={props.output.window().hidden > 0}>\n <HiddenTextNotice window={props.output.window()} onReveal={props.output.reveal} />\n </Show>\n )\n}\n\n// Output changes need no transcript notification: its ResizeObserver handles\n// any height change, and a frame-delayed notification always arrived after it.\n// Past the display bound the streamed prefix stops changing; only the reveal line counts on.\nfunction RunningBashOutput(props: {\n content: Accessor<string>\n output: TextWindowHandle\n scrollHelpers?: ToolScrollHelpers\n}) {\n let preRef: HTMLPreElement | undefined\n const updater = createStableAnsiStreamUpdater()\n\n createEffect(() => {\n const element = preRef\n if (!element) return\n updater.update(element, props.content())\n props.scrollHelpers?.restoreAfterRender()\n })\n\n onCleanup(() => {\n preRef = undefined\n updater.reset()\n })\n\n return (\n <div\n class=\"message-text tool-call-markdown\"\n ref={props.scrollHelpers?.registerContainer}\n onScroll={props.scrollHelpers ? (event) => props.scrollHelpers!.handleScroll(event as Event & { currentTarget: HTMLDivElement }) : undefined}\n >\n <pre ref={preRef} class=\"tool-call-content tool-call-ansi\" dir=\"auto\" />\n <OutputReveal output={props.output} />\n {props.scrollHelpers?.renderSentinel?.()}\n </div>\n )\n}\n\nfunction FinalAnsiOutput(props: {\n html: string\n output: TextWindowHandle\n scrollHelpers?: ToolScrollHelpers\n}) {\n createEffect(() => {\n props.html\n props.scrollHelpers?.restoreAfterRender()\n })\n\n return (\n <div class=\"message-text tool-call-markdown\" ref={props.scrollHelpers?.registerContainer}>\n <pre class=\"tool-call-content tool-call-ansi\" dir=\"auto\" innerHTML={props.html} />\n <OutputReveal output={props.output} />\n </div>\n )\n}\n\nfunction getBashCopyText(state: ToolState | undefined): string {\n if (!state || state.status === \"pending\") return \"\"\n\n const { input, metadata } = readToolStatePayload(state)\n const command = typeof input.command === \"string\" && input.command.length > 0 ? `$ ${input.command}` : \"\"\n const outputResult = formatUnknownForCopy(\n isToolStateCompleted(state)\n ? state.output\n : (isToolStateRunning(state) || isToolStateError(state)) && metadata.output\n ? metadata.output\n : undefined,\n )\n return [command, outputResult?.text].filter(Boolean).join(\"\\n\")\n}\n\nfunction BashToolBody(props: {\n toolState: Accessor<ToolState | undefined>\n renderMarkdown: (options: MarkdownRenderOptions) => ReturnType<ToolRenderer[\"renderBody\"]>\n revealTarget: RecordTextRevealTarget\n scrollHelpers?: ToolScrollHelpers\n}) {\n const state = createMemo(() => props.toolState())\n\n // \"$ command\\noutput\" as parts of the native strings: windows copy only their\n // bounded prefix, so no full join of a large output stays alive between updates.\n const parts = createMemo((): string[] => {\n const current = state()\n if (!current || current.status === \"pending\") return []\n\n const { input, metadata } = readToolStatePayload(current)\n const command = typeof input.command === \"string\" ? input.command : \"\"\n const output = formatUnknownForRender(\n isToolStateCompleted(current)\n ? current.output\n : (isToolStateRunning(current) || isToolStateError(current)) && metadata.output\n ? metadata.output\n : undefined,\n )?.text ?? \"\"\n if (!command) return output ? [output] : []\n return output ? [\"$ \", command, \"\\n\", output] : [\"$ \", command]\n })\n const source = createMemo(() => joinedTextSource(parts()))\n // The Markdown path bounds the same text with the same reveal state (\"output\").\n const output = createTextWindow({ source, limit: () => TOOL_OUTPUT_RENDER_CHARACTER_LIMIT, target: () => props.revealTarget })\n const renderedContent = createMemo(() => output.window().text)\n\n const isFinal = createMemo(() => {\n const current = state()\n return Boolean(current && current.status !== \"pending\" && current.status !== \"running\" && source().length > 0)\n })\n // Detect ANSI across the whole output, so a reveal never switches renderers.\n const finalHasAnsi = createMemo(() => isFinal() && parts().some((part) => hasAnsi(part)))\n const finalAnsiHtml = createMemo(() => (finalHasAnsi() ? ansiToHtml(renderedContent()) : null))\n\n return (\n <Show when={state() && source().length > 0}>\n <Show\n when={state()?.status === \"running\"}\n fallback={\n <Show when={finalAnsiHtml()} fallback={isFinal() && !finalHasAnsi() ? props.renderMarkdown({ content: source(), codeLanguage: \"bash\" }) : null}>\n {(html) => (\n <FinalAnsiOutput html={html()} output={output} scrollHelpers={props.scrollHelpers} />\n )}\n </Show>\n }\n >\n <RunningBashOutput content={renderedContent} output={output} scrollHelpers={props.scrollHelpers} />\n </Show>\n </Show>\n )\n}\n\nexport const bashRenderer: ToolRenderer = {\n tools: [\"bash\"],\n getSearchText: getBashToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.writingCommand\"),\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n const name = getToolName(\"bash\")\n const description = typeof input.description === \"string\" && input.description.length > 0 ? input.description : \"\"\n const timeout = typeof input.timeout === \"number\" && input.timeout > 0 ? input.timeout : undefined\n\n const baseTitle = description ? `${name} ${description}` : name\n if (!timeout) {\n return baseTitle\n }\n\n const timeoutLabel = `${timeout}ms`\n return `${baseTitle} · ${tGlobal(\"toolCall.renderer.bash.title.timeout\", { timeout: timeoutLabel })}`\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n const { input, metadata } = readToolStatePayload(state)\n const output = isToolStateCompleted(state) ? state.output : (isToolStateRunning(state) || isToolStateError(state)) ? metadata.output : undefined\n const hasCopyText = (typeof input.command === \"string\" && input.command.length > 0)\n || (output !== undefined && output !== null && output !== \"\" && (!Array.isArray(output) || output.length > 0))\n if (!hasCopyText) return undefined\n return { language: \"bash\", getCopyText: () => getBashCopyText(state), hasCopyText: true, wrapToggle: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, renderMarkdown, scrollHelpers, textRevealTarget }) {\n return <BashToolBody toolState={toolState} renderMarkdown={renderMarkdown} revealTarget={textRevealTarget(\"output\")} scrollHelpers={scrollHelpers} />\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { extractDiffPayload, getRelativePath, getToolName, hasVisibleText, isToolStateCompleted, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { getDiffToolSearchText } from \"../search-text\"\n\nexport const editRenderer: ToolRenderer = {\n tools: [\"edit\"],\n getSearchText: getDiffToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.preparingEdit\"),\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n const filePath =\n typeof input.filePath === \"string\" ? input.filePath : typeof input.path === \"string\" ? input.path : \"\"\n if (!filePath) return getToolName(\"edit\")\n return `${getToolName(\"edit\")} ${getRelativePath(filePath)}`\n },\n getOutputChrome({ toolState, toolName }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n\n const diffPayload = extractDiffPayload(toolName(), state)\n if (diffPayload) {\n return { language: \"diff\", getCopyText: () => diffPayload.diffText, suppressInnerHeader: false }\n }\n\n const { metadata } = readToolStatePayload(state)\n const diffText = typeof metadata.diff === \"string\" ? metadata.diff : null\n const fallback = isToolStateCompleted(state) && typeof state.output === \"string\" ? state.output : null\n const copyText = diffText || fallback\n if (!copyText) return undefined\n return { language: \"diff\", getCopyText: () => copyText, wrapToggle: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, toolName, renderDiff, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n\n const diffPayload = extractDiffPayload(toolName(), state)\n if (diffPayload) {\n return renderDiff(diffPayload)\n }\n\n const { metadata } = readToolStatePayload(state)\n const diffText = typeof metadata.diff === \"string\" ? metadata.diff : null\n const fallback = isToolStateCompleted(state) && typeof state.output === \"string\" ? state.output : null\n const value = diffText || fallback\n if (!hasVisibleText(value)) return null\n\n return renderMarkdown({ content: value, codeLanguage: \"diff\", size: \"large\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { defaultRenderer } from \"./default\"\nimport { getToolName, readToolStatePayload } from \"../utils\"\nimport { getDefaultToolSearchText } from \"../search-text\"\n\nexport const invalidRenderer: ToolRenderer = {\n tools: [\"invalid\"],\n getSearchText: getDefaultToolSearchText,\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return getToolName(\"invalid\")\n const { input } = readToolStatePayload(state)\n if (typeof input.tool === \"string\") {\n return getToolName(input.tool)\n }\n return getToolName(\"invalid\")\n },\n getOutputChrome(context) {\n return defaultRenderer.getOutputChrome?.(context)\n },\n renderBody(context) {\n return defaultRenderer.renderBody(context)\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { extractDiffPayload, getRelativePath, getToolName, hasVisibleText, isToolStateCompleted, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { getDiffToolSearchText } from \"../search-text\"\n\nexport const patchRenderer: ToolRenderer = {\n tools: [\"patch\"],\n getSearchText: getDiffToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.preparingPatch\"),\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n const filePath = typeof input.filePath === \"string\" ? input.filePath : \"\"\n if (!filePath) return getToolName(\"patch\")\n return `${getToolName(\"patch\")} ${getRelativePath(filePath)}`\n },\n getOutputChrome({ toolState, toolName }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n\n const diffPayload = extractDiffPayload(toolName(), state)\n if (diffPayload) {\n return { language: \"diff\", getCopyText: () => diffPayload.diffText, suppressInnerHeader: false }\n }\n\n const { metadata } = readToolStatePayload(state)\n const diffText = typeof metadata.diff === \"string\" ? metadata.diff : null\n const fallback = isToolStateCompleted(state) && typeof state.output === \"string\" ? state.output : null\n const copyText = diffText || fallback\n if (!copyText) return undefined\n return { language: \"diff\", getCopyText: () => copyText, wrapToggle: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, toolName, renderDiff, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n\n const diffPayload = extractDiffPayload(toolName(), state)\n if (diffPayload) {\n return renderDiff(diffPayload)\n }\n\n const { metadata } = readToolStatePayload(state)\n const diffText = typeof metadata.diff === \"string\" ? metadata.diff : null\n const fallback = isToolStateCompleted(state) && typeof state.output === \"string\" ? state.output : null\n const value = diffText || fallback\n if (!hasVisibleText(value)) return null\n\n return renderMarkdown({ content: value, codeLanguage: \"diff\", size: \"large\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { getQuestionToolSearchText } from \"../search-text\"\nimport { For, Show, createMemo } from \"solid-js\"\nimport { readToolStatePayload } from \"../utils\"\nimport { getQuestionReceipts } from \"./question-data\"\n\nexport const questionRenderer: ToolRenderer = {\n tools: [\"question\"],\n getSearchText: getQuestionToolSearchText,\n getAction: ({ t, toolState }) => toolState()?.status === \"completed\" ? t(\"interruption.answered\") : t(\"toolCall.question.action.awaitingAnswers\"),\n getTitle({ toolState, t }) {\n const state = toolState()\n if (!state) return t(\"toolCall.question.title.questions\")\n if (state.status === \"completed\") return t(\"toolCall.question.title.questions\")\n return t(\"toolCall.question.title.askingQuestions\")\n },\n renderBody({ toolState, t }) {\n const questions = createMemo(() => getQuestionReceipts(readToolStatePayload(toolState())))\n return <Show when={toolState()?.status === \"completed\" && questions().length > 0}>\n <dl class=\"interruption-receipt question-receipt\">\n <For each={questions()}>{question => <div class=\"question-receipt-item\">\n <dt>\n <Show when={question.header}><span class=\"question-receipt-caption\">{question.header}</span></Show>\n <span class=\"question-receipt-prompt\">{question.prompt}</span>\n </dt>\n <dd>\n <span class=\"question-receipt-caption\">{t(\"question-receipt.answer\")}</span>\n <Show when={question.selected?.length} fallback={\n <p class=\"question-receipt-empty\">{t(question.selected ? \"interruption.noAnswer\" : \"question-receipt.unavailable\")}</p>\n }>\n <ul class=\"question-receipt-answers\">\n <For each={question.selected}>{answer => <li>\n <span class=\"question-receipt-label\">{answer.label}</span>\n <Show when={answer.description}><p class=\"question-receipt-description\">{answer.description}</p></Show>\n </li>}</For>\n </ul>\n </Show>\n <Show when={question.remaining.length > 0}>\n <details class=\"question-receipt-choices\">\n <summary>{t(question.selected ? \"question-receipt.otherChoices\" : \"question-receipt.offeredChoices\", { count: question.remaining.length })}</summary>\n <ul>\n <For each={question.remaining}>{option => <li>\n <span class=\"question-receipt-label\">{option.label}</span>\n <Show when={option.description}><p class=\"question-receipt-description\">{option.description}</p></Show>\n </li>}</For>\n </ul>\n </details>\n </Show>\n </dd>\n </div>}</For>\n </dl>\n </Show>\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { getRelativePath, getToolName, hasVisibleText, inferLanguageFromPath, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { getReadToolSearchText } from \"../search-text\"\n\nfunction getReadPath(input: Record<string, any>): string {\n const filePath = typeof input.filePath === \"string\" ? input.filePath : \"\"\n if (filePath) return filePath\n const path = typeof input.path === \"string\" ? input.path : \"\"\n if (path) return path\n return typeof input.name === \"string\" ? input.name : \"\"\n}\n\nexport const readRenderer: ToolRenderer = {\n tools: [\"read\"],\n getSearchText: getReadToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.readingFile\"),\n getTitle({ toolName, toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n const filePath = getReadPath(input)\n const offset = typeof input.offset === \"number\" ? input.offset : undefined\n const limit = typeof input.limit === \"number\" ? input.limit : undefined\n const relativePath = filePath ? getRelativePath(filePath) : \"\"\n const detailParts: string[] = []\n\n if (typeof offset === \"number\") {\n detailParts.push(tGlobal(\"toolCall.renderer.read.detail.offset\", { offset }))\n }\n\n if (typeof limit === \"number\") {\n detailParts.push(tGlobal(\"toolCall.renderer.read.detail.limit\", { limit }))\n }\n\n const toolLabel = getToolName(toolName())\n const baseTitle = relativePath ? `${toolLabel} ${relativePath}` : toolLabel\n if (!detailParts.length) {\n return baseTitle\n }\n\n return `${baseTitle} · ${detailParts.join(\" · \")}`\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n const { output, input } = readToolStatePayload(state)\n const preview = typeof output === \"string\" ? output : null\n if (!preview) return undefined\n const language = inferLanguageFromPath(getReadPath(input)) ?? \"text\"\n return { language, getCopyText: () => preview, wrapToggle: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n const { output, input } = readToolStatePayload(state)\n const preview = typeof output === \"string\" ? output : null\n if (!hasVisibleText(preview)) return null\n const language = inferLanguageFromPath(getReadPath(input))\n return renderMarkdown({ content: preview, codeLanguage: language ?? \"\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { getToolName, readToolStatePayload } from \"../utils\"\nimport { getDefaultToolSearchText } from \"../search-text\"\nimport { defaultRenderer } from \"./default\"\n\nexport const searchRenderer: ToolRenderer = {\n tools: [\"glob\", \"grep\"],\n getSearchText: getDefaultToolSearchText,\n getTitle({ toolName, toolState }) {\n const state = toolState()\n const name = getToolName(toolName())\n if (!state) return name\n\n const { input } = readToolStatePayload(state)\n const pattern = typeof input.pattern === \"string\" ? input.pattern.trim() : \"\"\n if (!pattern) return name\n\n return `${name} ${pattern}`\n },\n getOutputChrome(context) {\n return defaultRenderer.getOutputChrome?.(context)\n },\n renderBody(context) {\n return defaultRenderer.renderBody(context)\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { formatUnknownForCopy, formatUnknownForRender, getToolName, hasVisibleText } from \"../utils\"\nimport { getDefaultToolSearchText } from \"../search-text\"\nimport { MARKDOWN_TEXT_RENDER_CHARACTER_LIMIT } from \"../../../lib/render-text-window\"\n\nexport const skillRenderer: ToolRenderer = {\n tools: [\"skill\"],\n getSearchText: getDefaultToolSearchText,\n getTitle() {\n return getToolName(\"skill\")\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status !== \"completed\") return undefined\n\n if (state.output === undefined || state.output === null || state.output === \"\" || (Array.isArray(state.output) && state.output.length === 0)) return undefined\n return { getCopyText: () => formatUnknownForCopy(state.output)?.text ?? null, hasCopyText: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status !== \"completed\") return null\n\n const output = formatUnknownForRender(state.output)?.text ?? null\n if (!hasVisibleText(output)) return null\n // Skill instructions are prose Markdown.\n return <div class=\"tool-call-skill-body\">{renderMarkdown({ content: output, renderLimit: MARKDOWN_TEXT_RENDER_CHARACTER_LIMIT })}</div>\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { formatUnknownForCopy, formatUnknownForRender, getToolName, hasVisibleText, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { getWebfetchToolSearchText } from \"../search-text\"\n\nexport const webfetchRenderer: ToolRenderer = {\n tools: [\"webfetch\"],\n getSearchText: getWebfetchToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.fetchingFromWeb\"),\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n if (typeof input.url === \"string\" && input.url.length > 0) {\n return `${getToolName(\"webfetch\")} ${input.url}`\n }\n return getToolName(\"webfetch\")\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n\n const { metadata } = readToolStatePayload(state)\n const output = state.status === \"completed\" ? state.output : metadata.output\n if (output === undefined || output === null || output === \"\" || (Array.isArray(output) && output.length === 0)) return undefined\n const result = formatUnknownForRender(output)\n\n return {\n language: result?.language ?? \"text\",\n getCopyText: () => formatUnknownForCopy(output)?.text ?? null,\n hasCopyText: true,\n wrapToggle: true,\n suppressInnerHeader: true,\n }\n },\n renderBody({ toolState, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n\n const { metadata } = readToolStatePayload(state)\n const result = formatUnknownForRender(\n state.status === \"completed\"\n ? state.output\n : metadata.output,\n )\n if (!result || !hasVisibleText(result.text)) return null\n\n return renderMarkdown({ content: result.text, codeLanguage: result.language ?? \"\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { getRelativePath, getToolName, hasVisibleText, inferLanguageFromPath, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { getWriteToolSearchText } from \"../search-text\"\n\nexport const writeRenderer: ToolRenderer = {\n tools: [\"write\"],\n getSearchText: getWriteToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.preparingWrite\"),\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n const filePath = typeof input.filePath === \"string\" ? input.filePath : \"\"\n if (!filePath) return getToolName(\"write\")\n return `${getToolName(\"write\")} ${getRelativePath(filePath)}`\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n const { metadata, input } = readToolStatePayload(state)\n const contentValue = typeof input.content === \"string\" ? input.content : metadata.content\n if (typeof contentValue !== \"string\" || contentValue.length === 0) return undefined\n const filePath = typeof input.filePath === \"string\" ? input.filePath : undefined\n return {\n language: inferLanguageFromPath(filePath) ?? \"text\",\n getCopyText: () => contentValue,\n wrapToggle: true,\n suppressInnerHeader: true,\n }\n },\n renderBody({ toolState, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n const { metadata, input } = readToolStatePayload(state)\n const contentValue = typeof input.content === \"string\" ? input.content : metadata.content\n const filePath = typeof input.filePath === \"string\" ? input.filePath : undefined\n if (typeof contentValue !== \"string\" || !hasVisibleText(contentValue)) return null\n return renderMarkdown({ content: contentValue, codeLanguage: inferLanguageFromPath(filePath) ?? \"\", size: \"large\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"./types\"\nimport { getToolRegistryEntry } from \"./tool-presentation\"\nimport { applyPatchRenderer } from \"./renderers/apply-patch\"\nimport { bashRenderer } from \"./renderers/bash\"\nimport { defaultRenderer } from \"./renderers/default\"\nimport { editRenderer } from \"./renderers/edit\"\nimport { executeRenderer } from \"./renderers/execute\"\nimport { invalidRenderer } from \"./renderers/invalid\"\nimport { patchRenderer } from \"./renderers/patch\"\nimport { questionRenderer } from \"./renderers/question\"\nimport { readRenderer } from \"./renderers/read\"\nimport { searchRenderer } from \"./renderers/search\"\nimport { skillRenderer } from \"./renderers/skill\"\nimport { taskRenderer } from \"./renderers/task\"\nimport { todoRenderer } from \"./renderers/todo\"\nimport { webfetchRenderer } from \"./renderers/webfetch\"\nimport { websearchRenderer } from \"./renderers/websearch\"\nimport { writeRenderer } from \"./renderers/write\"\n\nexport * from \"./tool-presentation\"\n\nconst renderers: Record<string, ToolRenderer> = {\n bash: bashRenderer, read: readRenderer, write: writeRenderer, edit: editRenderer,\n patch: patchRenderer, apply_patch: applyPatchRenderer, webfetch: webfetchRenderer, websearch: websearchRenderer,\n glob: searchRenderer, grep: searchRenderer, todowrite: todoRenderer, task: taskRenderer,\n skill: skillRenderer, question: questionRenderer, invalid: invalidRenderer, execute: executeRenderer,\n}\n\nexport function resolveToolRenderer(toolName: string): ToolRenderer {\n return renderers[getToolRegistryEntry(toolName).tool] ?? defaultRenderer\n}\n","import { Show, Suspense, createEffect, createMemo, createSignal, lazy, onMount, type Accessor, type JSXElement } from \"solid-js\"\nimport type { ToolState } from \"../../types/tool-state\"\nimport useMediaQuery from \"@suid/material/useMediaQuery\"\nimport { AlignJustify, Copy, Split, WrapText } from \"lucide-solid\"\nimport type { RenderCache } from \"../../types/message\"\nimport type { DiffViewMode } from \"../../stores/preferences\"\nimport type { DiffPayload, DiffRenderOptions, ToolScrollHelpers } from \"./types\"\nimport { getRelativePath, shouldRenderDiffPayloadAsPlainText, TOOL_OUTPUT_RENDER_CHARACTER_LIMIT } from \"./utils\"\nimport { getCacheEntry } from \"../../lib/global-cache\"\nimport { copyToClipboard } from \"../../lib/clipboard\"\nimport type { RecordTextRevealTarget } from \"../../stores/message-v2/record-display-cache\"\nimport { HiddenTextNotice, createTextWindow } from \"../hidden-text\"\n\nconst LazyToolCallDiffViewer = lazy(() =>\n import(\"../diff-viewer\").then((module) => ({ default: module.ToolCallDiffViewer })),\n)\n\nfunction CachedDiffMarkup(props: { html: string; onRendered?: () => void }) {\n onMount(() => {\n props.onRendered?.()\n })\n\n return (\n <div class=\"tool-call-diff-viewer\">\n <div innerHTML={props.html} />\n </div>\n )\n}\n\ntype CacheHandle = {\n get<T>(): T | undefined\n params(): unknown\n}\n\ntype DiffPrefs = {\n diffViewMode?: DiffViewMode\n}\n\nexport function createDiffContentRenderer(params: {\n toolState: Accessor<ToolState | undefined>\n preferences: Accessor<DiffPrefs>\n setDiffViewMode: (mode: DiffViewMode) => void\n isDark: Accessor<boolean>\n t: (key: string, params?: Record<string, unknown>) => string\n diffCache: CacheHandle\n permissionDiffCache: CacheHandle\n textRevealTarget: (section: string) => RecordTextRevealTarget\n scrollHelpers: ToolScrollHelpers\n handleScrollRendered: () => void\n onContentRendered?: () => void\n}) {\n const compactDiffQuery = useMediaQuery(\"(max-width: 640px)\")\n const [mobileModeOverride, setMobileModeOverride] = createSignal<DiffViewMode | undefined>(undefined)\n const [wordWrapEnabled, setWordWrapEnabled] = createSignal(true)\n\n createEffect(() => {\n if (!compactDiffQuery()) {\n setMobileModeOverride(undefined)\n }\n })\n\n const registerTracked = (element: HTMLDivElement | null) => {\n params.scrollHelpers.registerContainer(element)\n }\n\n const registerUntracked = (element: HTMLDivElement | null) => {\n params.scrollHelpers.registerContainer(element, { disableTracking: true })\n }\n\n function renderDiffContent(payload: DiffPayload, options?: DiffRenderOptions): JSXElement | null {\n // Large diffs render as plain text; the bounded window and its reveal apply to either form.\n const renderAsPlainText = shouldRenderDiffPayloadAsPlainText(payload)\n const relativePath = payload.filePath ? getRelativePath(payload.filePath) : \"\"\n const toolbarLabel = options?.label || (relativePath\n ? params.t(\"toolCall.diff.label.withPath\", { path: relativePath })\n : params.t(\"toolCall.diff.label\"))\n const selectedVariant = options?.variant === \"permission-diff\" ? \"permission-diff\" : \"diff\"\n const cacheHandle = selectedVariant === \"permission-diff\" ? params.permissionDiffCache : params.diffCache\n const revealSection = typeof options?.cacheKey === \"string\" && options.cacheKey.trim() ? options.cacheKey.trim() : selectedVariant\n const bounded = createTextWindow({\n source: () => payload.diffText,\n limit: () => options?.renderLimit ?? TOOL_OUTPUT_RENDER_CHARACTER_LIMIT,\n target: () => params.textRevealTarget(revealSection),\n })\n const renderedDiffText = () => bounded.window().text\n const preferredMode = () => (params.preferences().diffViewMode || \"split\") as DiffViewMode\n const effectiveMode = () => {\n if (!compactDiffQuery()) return preferredMode()\n return mobileModeOverride() || \"unified\"\n }\n const shouldWrap = () => wordWrapEnabled()\n const themeKey = params.isDark() ? \"dark\" : \"light\"\n const state = params.toolState()\n const disableScrollTracking = Boolean(\n options?.disableScrollTracking || (state?.status !== \"running\" && state?.status !== \"pending\"),\n )\n const registerRef = disableScrollTracking ? registerUntracked : registerTracked\n\n const baseEntryParams = cacheHandle.params() as any\n const cacheEntryParams = (() => {\n const suffix = typeof options?.cacheKey === \"string\" ? options.cacheKey.trim() : \"\"\n if (!suffix) return baseEntryParams\n return {\n ...baseEntryParams,\n cacheId: `${baseEntryParams.cacheId}:${suffix}`,\n }\n })()\n\n const currentMode = createMemo(() => effectiveMode())\n const currentWrap = createMemo(() => shouldWrap())\n const cachedHtml = createMemo(() => {\n const cached = getCacheEntry<RenderCache>(cacheEntryParams)\n if (\n cached\n && cached.text === renderedDiffText()\n && cached.theme === themeKey\n && cached.mode === currentMode()\n && cached.wrap === currentWrap()\n ) {\n return cached.html\n }\n return undefined\n })\n\n const handleModeChange = (mode: DiffViewMode) => {\n if (compactDiffQuery()) {\n setMobileModeOverride(mode)\n }\n params.setDiffViewMode(mode)\n }\n\n const nextViewMode = (): DiffViewMode => (currentMode() === \"split\" ? \"unified\" : \"split\")\n const viewModeTitle = () =>\n nextViewMode() === \"split\"\n ? params.t(\"toolCall.diff.switchToSplit\")\n : params.t(\"toolCall.diff.switchToUnified\")\n const wordWrapTitle = () =>\n wordWrapEnabled()\n ? params.t(\"toolCall.diff.disableWordWrap\")\n : params.t(\"toolCall.diff.enableWordWrap\")\n const copyPatchTitle = () => params.t(\"toolCall.diff.copyPatch\")\n const copyFullDiff = async () => {\n const copiedDiff = payload.copyText ?? payload.diffText\n if (await copyToClipboard(copiedDiff)) options?.onFullDiffAccess?.(copiedDiff)\n }\n\n const handleDiffRendered = () => {\n params.handleScrollRendered()\n params.onContentRendered?.()\n }\n\n return (\n <div\n class=\"message-text tool-call-markdown tool-call-markdown-large tool-call-diff-shell\"\n data-diff-mode={currentMode()}\n ref={registerRef}\n onScroll={disableScrollTracking ? undefined : params.scrollHelpers.handleScroll}\n >\n <div class=\"tool-call-diff-toolbar\" role=\"group\" aria-label={params.t(\"toolCall.diff.viewMode.ariaLabel\")}>\n <span class=\"tool-call-diff-toolbar-label\">{toolbarLabel}</span>\n <div class=\"file-viewer-toolbar\">\n <button\n type=\"button\"\n class=\"file-viewer-toolbar-icon-button\"\n onClick={() => void copyFullDiff()}\n aria-label={copyPatchTitle()}\n title={copyPatchTitle()}\n >\n <Copy class=\"h-4 w-4\" aria-hidden=\"true\" />\n </button>\n <Show when={!renderAsPlainText}>\n <button\n type=\"button\"\n class=\"file-viewer-toolbar-icon-button icon-toggle\"\n onClick={() => handleModeChange(nextViewMode())}\n aria-label={viewModeTitle()}\n aria-pressed={currentMode() === \"split\"}\n title={viewModeTitle()}\n >\n {nextViewMode() === \"split\" ? <Split class=\"h-4 w-4\" aria-hidden=\"true\" /> : <AlignJustify class=\"h-4 w-4\" aria-hidden=\"true\" />}\n </button>\n <button\n type=\"button\"\n class=\"file-viewer-toolbar-icon-button icon-toggle\"\n onClick={() => setWordWrapEnabled((enabled) => !enabled)}\n aria-label={wordWrapTitle()}\n aria-pressed={wordWrapEnabled()}\n title={wordWrapTitle()}\n >\n <WrapText class=\"h-4 w-4\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </div>\n {renderAsPlainText ? (\n <pre class=\"tool-call-diff-fallback\">{renderedDiffText()}</pre>\n ) : cachedHtml() ? (\n <CachedDiffMarkup html={cachedHtml()!} onRendered={handleDiffRendered} />\n ) : (\n <Suspense fallback={<pre class=\"tool-call-diff-fallback\">{renderedDiffText()}</pre>}>\n <LazyToolCallDiffViewer\n diffText={renderedDiffText()}\n filePath={payload.filePath}\n theme={themeKey}\n mode={currentMode()}\n wrap={currentWrap()}\n cacheEntryParams={cacheEntryParams as any}\n onRendered={handleDiffRendered}\n />\n </Suspense>\n )}\n <Show when={bounded.window().hidden > 0}>\n <HiddenTextNotice window={bounded.window()} onReveal={bounded.reveal} />\n </Show>\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n return { renderDiffContent }\n}\n","import type { Accessor, JSXElement } from \"solid-js\"\nimport type { ToolState } from \"../../types/tool-state\"\nimport type { TextPart } from \"../../types/message\"\nimport type { RecordTextRevealTarget } from \"../../stores/message-v2/record-display-cache\"\nimport { TOOL_OUTPUT_RENDER_CHARACTER_LIMIT } from \"../../lib/render-text-window\"\nimport { Markdown } from \"../markdown\"\nimport { BoundedText } from \"../hidden-text\"\nimport { ensureMarkdownContent } from \"./utils\"\nimport type { MarkdownRenderOptions, ToolScrollHelpers } from \"./types\"\n\nexport function createMarkdownContentRenderer(params: {\n toolState: Accessor<ToolState | undefined>\n partId: Accessor<string>\n partVersion?: Accessor<number | undefined>\n instanceId: string\n sessionId: string\n textRevealTarget: (section: string) => RecordTextRevealTarget\n isDark: Accessor<boolean>\n scrollHelpers: ToolScrollHelpers\n handleScrollRendered: () => void\n onContentRendered?: () => void\n}) {\n const registerTracked = (element: HTMLDivElement | null) => {\n params.scrollHelpers.registerContainer(element)\n }\n\n const registerUntracked = (element: HTMLDivElement | null) => {\n params.scrollHelpers.registerContainer(element, { disableTracking: true })\n }\n\n function renderMarkdownContent(options: MarkdownRenderOptions): JSXElement | null {\n const content = options.content\n if (content.length === 0) {\n return null\n }\n\n const size = options.size || \"default\"\n const disableHighlight = options.disableHighlight || false\n const wrapEnabled = options.wrap ?? true\n const messageClass = `message-text tool-call-markdown${size === \"large\" ? \" tool-call-markdown-large\" : \"\"}${wrapEnabled ? \" tool-call-markdown-wrap\" : \"\"}`\n const state = params.toolState()\n const disableScrollTracking = options.disableScrollTracking || (state?.status !== \"running\" && state?.status !== \"pending\")\n const registerRef = disableScrollTracking ? registerUntracked : registerTracked\n const shouldDeferMarkdown = Boolean(state && (state.status === \"running\" || state.status === \"pending\") && disableHighlight)\n const cacheKey = typeof options.cacheKey === \"string\" && options.cacheKey.length > 0 ? options.cacheKey : undefined\n const renderLimit = options.renderLimit ?? TOOL_OUTPUT_RENDER_CHARACTER_LIMIT\n const revealTarget = params.textRevealTarget(cacheKey ?? \"output\")\n if (shouldDeferMarkdown) {\n return (\n <div\n class={messageClass}\n ref={registerRef}\n onScroll={disableScrollTracking ? undefined : params.scrollHelpers.handleScroll}\n >\n <BoundedText source={content} limit={renderLimit} revealTarget={revealTarget}>\n {(text) => <pre class=\"whitespace-pre-wrap break-words text-sm font-mono\" dir=\"auto\">{text()}</pre>}\n </BoundedText>\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n const codeLanguage = options.codeLanguage\n const formatText = codeLanguage === undefined\n ? undefined\n : (text: string) => ensureMarkdownContent(text, codeLanguage || undefined, true) ?? \"\"\n const markdownPart = (): TextPart => ({\n id: cacheKey ? `${params.partId()}:${cacheKey}` : params.partId(),\n type: \"text\",\n text: typeof content === \"string\" ? content : \"\",\n version: params.partVersion?.(),\n })\n\n const handleMarkdownRendered = () => {\n params.handleScrollRendered()\n params.onContentRendered?.()\n }\n\n return (\n <div\n class={messageClass}\n ref={registerRef}\n onScroll={disableScrollTracking ? undefined : params.scrollHelpers.handleScroll}\n >\n <Markdown\n part={markdownPart()}\n instanceId={params.instanceId}\n sessionId={params.sessionId}\n isDark={params.isDark()}\n disableHighlight={disableHighlight}\n defaultCodeBlockWrap={wrapEnabled}\n renderLimit={renderLimit}\n formatText={formatText}\n source={typeof content === \"string\" ? undefined : content}\n revealTarget={revealTarget}\n onRendered={handleMarkdownRendered}\n />\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n return { renderMarkdownContent }\n}\n","import { onCleanup } from \"solid-js\"\nimport { contentWidth } from \"./measured-action-overflow\"\n\n/** A tool header gives up room in order: its actions fold into the overflow\n * menu (observeActionOverflow), then the status word goes, leaving the icon and\n * duration, and only then does the title truncate. The decision always measures\n * the full content, word included (kept measurable while hidden), so it never\n * oscillates. */\nexport function observeToolStatusCompaction(summary: HTMLElement) {\n let frame = 0\n let disposed = false\n const measure = () => {\n frame = 0\n if (disposed || !summary.isConnected || !summary.clientWidth) return\n const next = String(contentWidth(summary) > summary.getBoundingClientRect().width + 0.5)\n if (summary.dataset.statusCompact !== next) summary.dataset.statusCompact = next\n }\n const schedule = () => { if (!frame && !disposed) frame = requestAnimationFrame(measure) }\n const resize = new ResizeObserver(schedule)\n resize.observe(summary)\n const mutation = new MutationObserver(schedule)\n mutation.observe(summary, { subtree: true, childList: true, characterData: true })\n document.fonts?.addEventListener(\"loadingdone\", schedule)\n schedule()\n onCleanup(() => {\n disposed = true\n cancelAnimationFrame(frame)\n resize.disconnect()\n mutation.disconnect()\n document.fonts?.removeEventListener(\"loadingdone\", schedule)\n })\n}\n","import { createMemo, createSignal, For, Show } from \"solid-js\"\nimport type { ToolFileContent } from \"@opencode/client\"\nimport type { ToolState } from \"../../types/tool-state\"\nimport { isToolImageContent, toolImageSource } from \"../../lib/tool-content\"\nimport { useI18n } from \"../../lib/i18n\"\n\nfunction OutputImage(props: { file: ToolFileContent; index: number; onContentRendered?: () => void }) {\n const { t } = useI18n()\n const source = createMemo(() => toolImageSource(props.file))\n // Key the error to its URI: a later corrected result must be loadable in place.\n const [failedSource, setFailedSource] = createSignal<string>()\n const name = () => props.file.name?.trim() || t(\"toolCall.image.label\", { number: props.index + 1 })\n return <figure class=\"tool-call-output-image\">\n <Show when={source() && failedSource() !== source()} fallback={<p role=\"status\">{t(\"toolCall.image.unavailable\")}</p>}>\n <img src={source()} alt={name()} loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\"\n onLoad={() => props.onContentRendered?.()}\n onError={() => { setFailedSource(source()); props.onContentRendered?.() }} />\n </Show>\n <figcaption>{name()} <span>{props.file.mime}</span></figcaption>\n </figure>\n}\n\n/** Shared by native and MCP tools, including tools with a specialized text renderer. */\nexport function ToolOutputImages(props: { state?: ToolState; onContentRendered?: () => void }) {\n const images = createMemo(() => props.state?.status === \"completed\" && Array.isArray(props.state.content)\n ? props.state.content.filter(isToolImageContent) : [])\n return <Show when={images().length}>\n <div class=\"tool-call-output-images\">\n <For each={images()}>{(file, index) => <OutputImage file={file} index={index()} onContentRendered={props.onContentRendered} />}</For>\n </div>\n </Show>\n}\n","import { For, createSignal, Show, createEffect, createMemo, on, onCleanup, type Accessor, type JSXElement } from \"solid-js\"\nimport { createStore, reconcile, unwrap } from \"solid-js/store\"\nimport { ArrowRightSquare, Check, ChevronRight, Copy, Hourglass, Loader2, Volume2, WrapText, XCircle } from \"lucide-solid\"\nimport { stringify as stringifyYaml } from \"yaml\"\nimport { messageStoreBus } from \"../stores/message-v2/bus\"\nimport { useTheme } from \"../lib/theme\"\nimport { useGlobalCache } from \"../lib/hooks/use-global-cache\"\nimport { useConfig } from \"../stores/preferences\"\nimport { activeInterruption } from \"../stores/instances\"\nimport { getFormQueue } from \"../stores/forms\"\nimport { copyToClipboard } from \"../lib/clipboard\"\nimport type { PermissionRequest } from \"../types/permission\"\nimport { useI18n } from \"../lib/i18n\"\nimport { resolveToolRenderer } from \"./tool-call/renderers\"\nimport { getCanonicalToolName, resolveToolExpansionDefault, resolveToolVisibility } from \"./tool-call/tool-registry\"\nimport { resolveFormToolTarget } from \"./form-request-tool-target\"\nimport { createDiffContentRenderer } from \"./tool-call/diff-render\"\nimport { createMarkdownContentRenderer } from \"./tool-call/markdown-render\"\nimport { extractDiagnosticsView, diagnosticFileName } from \"./tool-call/diagnostics\"\nimport { renderDiagnosticsSection } from \"./tool-call/diagnostics-section\"\nimport type {\n DiffPayload,\n ToolCallPart,\n ToolOutputChrome,\n ToolRendererContext,\n ToolScrollHelpers,\n} from \"./tool-call/types\"\nimport {\n buildToolSpeechText,\n formatToolInputForCopy,\n formatToolInputForRender,\n getToolName,\n getToolTitleDetail,\n hasVisibleText,\n isToolStateCompleted,\n isToolStateRunning,\n limitToolTitleForRender,\n TOOL_OUTPUT_RENDER_CHARACTER_LIMIT,\n getDefaultToolAction,\n readToolStatePayload,\n} from \"./tool-call/utils\"\nimport { BoundedText } from \"./hidden-text\"\nimport type { RecordTextRevealTarget } from \"../stores/message-v2/record-display-cache\"\nimport { getLogger } from \"../lib/logger\"\nimport { useSpeech } from \"../lib/hooks/use-speech\"\nimport { createFollowScroll } from \"../lib/follow-scroll\"\nimport ActionOverflowMenu, { type ActionOverflowMenuItem } from \"./action-overflow-menu\"\nimport { observeActionOverflow } from \"./measured-action-overflow\"\nimport { observeToolStatusCompaction } from \"./tool-status-compaction\"\nimport SpeechActionButton from \"./speech-action-button\"\nimport { ToolOutputImages } from \"./tool-call/output-images\"\nimport { PartDuration } from \"./part-duration\"\nimport { getPartEndedAt, getPartStartedAt } from \"../lib/message-timing\"\nimport { isToolImageContent } from \"../lib/tool-content\"\n\nconst log = getLogger(\"session\")\n\nimport type { ToolState } from \"../types/tool-state\"\n\nconst TOOL_CALL_CACHE_SCOPE = \"tool-call\"\n\nfunction makeRenderCacheKey(\n toolCallId?: string | null,\n messageId?: string,\n partId?: string | null,\n variant = \"default\",\n) {\n const messageComponent = messageId ?? \"unknown-message\"\n const toolCallComponent = partId ?? toolCallId ?? \"unknown-tool-call\"\n return `${messageComponent}:${toolCallComponent}:${variant}`\n}\n\nfunction makeTextRevealTarget(instanceId: string, messageId: string | undefined, partId: string, section: string): RecordTextRevealTarget {\n return { instanceId, messageId: messageId ?? \"\", partId, section }\n}\n\n\ninterface ToolCallProps {\n toolCall: ToolCallPart\n toolCallId?: string\n messageId?: string\n messageVersion?: number\n partVersion?: number\n instanceId: string\n sessionId: string\n isActive?: Accessor<boolean>\n onContentRendered?: () => void\n /**\n * When true, tool call starts collapsed regardless of user preferences.\n * Users can still expand/collapse manually.\n */\n forceCollapsed?: boolean\n headerAction?: JSXElement\n headerMenuItems?: () => ActionOverflowMenuItem[]\n }\n\nfunction ToolStatusIndicator(props: { status: Accessor<string>; t: ReturnType<typeof useI18n>[\"t\"] }) {\n const resolvedStatus = () => {\n const value = props.status()\n return value === \"running\" || value === \"completed\" || value === \"error\" ? value : \"pending\"\n }\n const isVisible = (value: string) => resolvedStatus() === value\n const label = () => props.t(`toolCall.status.${resolvedStatus()}`)\n\n return (\n <span class=\"tool-call-header-status\" role=\"status\" aria-label={label()} title={label()} data-status={resolvedStatus()}>\n <span class=\"tool-call-header-status-icon\" aria-hidden=\"true\" style={{ display: isVisible(\"pending\") ? \"inline-flex\" : \"none\" }}>\n <Hourglass class=\"w-4 h-4\" />\n </span>\n <span class=\"tool-call-header-status-icon\" aria-hidden=\"true\" style={{ display: isVisible(\"running\") ? \"inline-flex\" : \"none\" }}>\n <Loader2 class=\"w-4 h-4 animate-spin\" />\n </span>\n <span class=\"tool-call-header-status-icon\" aria-hidden=\"true\" style={{ display: isVisible(\"completed\") ? \"inline-flex\" : \"none\" }}>\n <Check class=\"w-4 h-4\" />\n </span>\n <span class=\"tool-call-header-status-icon\" aria-hidden=\"true\" style={{ display: isVisible(\"error\") ? \"inline-flex\" : \"none\" }}>\n <XCircle class=\"w-4 h-4\" />\n </span>\n <span class=\"tool-call-header-status-label\">{label()}</span>\n </span>\n )\n}\n\nfunction ToolCallDetails(props: {\n toolCallMemo: () => ToolCallPart\n toolState: () => ToolState | undefined\n toolName: () => string\n toolCallIdentifier: () => string\n instanceId: string\n sessionId: string\n isActive?: Accessor<boolean>\n messageId?: string\n messageVersion?: number\n partVersion?: number\n onContentRendered?: () => void\n preferences: ReturnType<typeof useConfig>[\"preferences\"]\n setDiffViewMode: ReturnType<typeof useConfig>[\"setDiffViewMode\"]\n isDark: () => boolean\n t: ReturnType<typeof useI18n>[\"t\"]\n store: () => ReturnType<typeof messageStoreBus.getOrCreate>\n pendingPermission: () => { permission: PermissionRequest; active: boolean } | undefined\n isPermissionActive: () => boolean\n hasToolInput: () => boolean\n isToolInputVisible: () => boolean\n toolInput: () => Record<string, any> | undefined\n inputSectionExpanded: () => boolean\n outputSectionExpanded: () => boolean\n outputWrapEnabled: Accessor<boolean>\n toggleOutputWrap: () => void\n toggleInputSection: () => void\n toggleOutputSection: () => void\n toolCallRootEl: () => HTMLDivElement | undefined\n scrollTopSnapshot: () => number\n setScrollTopSnapshot: (next: number) => void\n}) {\n const messageVersionAccessor = createMemo(() => props.messageVersion)\n const partVersionAccessor = createMemo(() => props.partVersion)\n\n const cacheContext = createMemo(() => ({\n toolCallId: props.toolCallIdentifier(),\n messageId: props.messageId,\n partId: props.toolCallMemo()?.id ?? null,\n }))\n\n const cacheVersion = createMemo(() => {\n if (typeof props.partVersion === \"number\") {\n return String(props.partVersion)\n }\n if (typeof props.messageVersion === \"number\") {\n return String(props.messageVersion)\n }\n return \"noversion\"\n })\n\n const createVariantCache = (variant: string) =>\n useGlobalCache({\n instanceId: () => props.instanceId,\n sessionId: () => props.sessionId,\n scope: TOOL_CALL_CACHE_SCOPE,\n cacheId: () => {\n const context = cacheContext()\n return makeRenderCacheKey(context.toolCallId || undefined, context.messageId, context.partId, variant)\n },\n version: cacheVersion,\n })\n\n const diffCache = createVariantCache(\"diff\")\n const permissionDiffCache = createVariantCache(\"permission-diff\")\n const textRevealTarget = (section: string) => makeTextRevealTarget(props.instanceId, props.messageId, props.toolCallIdentifier(), section)\n\n\n const followScroll = createFollowScroll({\n getScrollTopSnapshot: props.scrollTopSnapshot,\n setScrollTopSnapshot: props.setScrollTopSnapshot,\n sentinelClassName: \"tool-call-scroll-sentinel\",\n })\n\n const scrollHelpers: ToolScrollHelpers = {\n registerContainer: (element, options) => {\n followScroll.registerContainer(element, options)\n },\n handleScroll: followScroll.handleScroll,\n renderSentinel: followScroll.renderSentinel,\n restoreAfterRender: followScroll.restoreAfterRender,\n }\n\n const handleScrollRendered = () => {\n scrollHelpers.restoreAfterRender()\n }\n\n\n const status = () => props.toolState()?.status || \"\"\n\n const toolInputDisplay = createMemo((): { content: string; language: string } | null => {\n const input = props.toolInput()\n if (!input) return null\n if (!props.inputSectionExpanded()) return { content: \"\", language: \"json\" }\n const formatted = formatToolInputForRender(input)\n if (!formatted || !hasVisibleText(formatted.text)) return null\n return { content: formatted.text, language: formatted.language ?? \"text\" }\n })\n\n const renderer = createMemo(() => resolveToolRenderer(props.toolName()))\n\n const { renderDiffContent } = createDiffContentRenderer({\n toolState: props.toolState,\n preferences: props.preferences,\n setDiffViewMode: props.setDiffViewMode,\n isDark: props.isDark,\n t: props.t,\n diffCache,\n permissionDiffCache,\n textRevealTarget,\n scrollHelpers,\n handleScrollRendered,\n onContentRendered: props.onContentRendered,\n })\n\n const { renderMarkdownContent } = createMarkdownContentRenderer({\n toolState: props.toolState,\n partId: props.toolCallIdentifier,\n partVersion: partVersionAccessor,\n instanceId: props.instanceId,\n sessionId: props.sessionId,\n textRevealTarget,\n isDark: props.isDark,\n scrollHelpers,\n handleScrollRendered,\n onContentRendered: props.onContentRendered,\n })\n\n const renderOutputMarkdownContent: ToolRendererContext[\"renderMarkdown\"] = (options) =>\n renderMarkdownContent({ ...options, wrap: options.wrap ?? props.outputWrapEnabled() })\n\n const rendererContext: ToolRendererContext = {\n toolCall: props.toolCallMemo,\n toolState: props.toolState,\n toolName: props.toolName,\n instanceId: props.instanceId,\n sessionId: props.sessionId,\n isActive: () => props.isActive?.() ?? true,\n t: props.t,\n messageVersion: messageVersionAccessor,\n partVersion: partVersionAccessor,\n textRevealTarget,\n renderMarkdown: renderOutputMarkdownContent,\n renderDiff: renderDiffContent,\n renderToolCall: (options) => {\n if (!options?.toolCall) return null\n return (\n <ToolCall\n toolCall={options.toolCall}\n toolCallId={options.toolCall.id}\n messageId={options.messageId}\n messageVersion={options.messageVersion}\n partVersion={options.partVersion}\n instanceId={props.instanceId}\n sessionId={options.sessionId}\n isActive={rendererContext.isActive}\n onContentRendered={props.onContentRendered}\n forceCollapsed={options.forceCollapsed}\n />\n )\n },\n outputWrapEnabled: props.outputWrapEnabled,\n scrollHelpers,\n onContentRendered: props.onContentRendered,\n }\n\n let previousPartVersion: number | undefined\n createEffect(() => {\n const version = partVersionAccessor()\n if (version === undefined) {\n return\n }\n if (previousPartVersion !== undefined && version === previousPartVersion) {\n return\n }\n previousPartVersion = version\n scrollHelpers.restoreAfterRender()\n })\n\n createEffect(() => {\n if (followScroll.autoScroll()) {\n scrollHelpers.restoreAfterRender()\n }\n })\n\n const renderToolBody = () => {\n const body = renderer().renderBody(rendererContext)\n const state = props.toolState()\n if (state?.status !== \"completed\" || !state.content?.some(isToolImageContent)) return body\n return <>{body}<ToolOutputImages state={props.toolState()} onContentRendered={() => {\n scrollHelpers.restoreAfterRender()\n props.onContentRendered?.()\n }} /></>\n }\n\n const outputChrome = createMemo<ToolOutputChrome>(() => renderer().getOutputChrome?.(rendererContext) ?? {})\n const resolveOutputCopyText = () => outputChrome().copyText || outputChrome().getCopyText?.() || \"\"\n const canCopyOutput = () => outputChrome().hasCopyText ?? Boolean(outputChrome().copyText || outputChrome().getCopyText)\n\n const renderError = () => {\n const state = props.toolState()\n if (state?.status === \"error\" && state.error) {\n const truncated = state.error.length > TOOL_OUTPUT_RENDER_CHARACTER_LIMIT\n return (\n <div class=\"tool-call-error-content\">\n <BoundedText source={state.error} revealTarget={textRevealTarget(\"error\")}>\n {(text) => (\n <div>\n <strong>{props.t(\"toolCall.error.label\")}</strong> {text()}\n <Show when={truncated}>\n <button type=\"button\" class=\"tool-call-header-icon-button tool-call-io-copy\" onClick={(event) => void copyIoText(event, state.error)} aria-label={props.t(\"toolCall.io.copyOutputAriaLabel\")} title={props.t(\"toolCall.io.copyOutputTitle\")}>\n <Copy class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n )}\n </BoundedText>\n </div>\n )\n }\n return null\n }\n\n const shouldShowPendingMessage = () => {\n const tool = props.toolName()\n return status() === \"pending\" && !props.pendingPermission() && tool !== \"todowrite\"\n }\n\n const copyIoText = async (event: MouseEvent, text?: string | null) => {\n event.preventDefault()\n event.stopPropagation()\n if (!text) return\n await copyToClipboard(text)\n }\n\n const copyToolInput = async (event: MouseEvent) => {\n await copyIoText(event, formatToolInputForCopy(props.toolInput())?.text)\n }\n\n const outputWrapTitle = () =>\n props.outputWrapEnabled()\n ? props.t(\"toolCall.diff.disableWordWrap\")\n : props.t(\"toolCall.diff.enableWordWrap\")\n\n const renderIoHeader = (options: {\n title: () => string\n language?: () => string | null | undefined\n expanded: () => boolean\n onToggle: () => void\n copyText?: () => string | null | undefined\n copyTitle?: () => string\n copyAriaLabel?: () => string\n onCopy?: (event: MouseEvent) => void\n actions?: () => JSXElement\n }) => (\n <div class=\"tool-call-io-header\">\n <button type=\"button\" class=\"tool-call-io-toggle\" aria-expanded={options.expanded()} onClick={options.onToggle}>\n <ChevronRight class=\"tool-call-io-disclosure disclosure-chevron\" aria-hidden=\"true\" />\n <span class=\"tool-call-io-title\">{options.title()}</span>\n <Show when={options.language?.()}>\n {(language) => <span class=\"tool-call-io-language\">{language()}</span>}\n </Show>\n </button>\n\n <Show when={options.actions?.()}>\n {(actions) => <span class=\"tool-call-io-actions\">{actions()}</span>}\n </Show>\n\n <Show when={Boolean(options.copyText?.() || options.onCopy)}>\n <button\n type=\"button\"\n class=\"tool-call-header-icon-button tool-call-io-copy\"\n onClick={(event) => options.onCopy ? options.onCopy(event) : void copyIoText(event, options.copyText?.())}\n aria-label={options.copyAriaLabel?.() ?? props.t(\"toolCall.io.copyOutputAriaLabel\")}\n title={options.copyTitle?.() ?? props.t(\"toolCall.io.copyOutputTitle\")}\n >\n <Copy class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n )\n\n const shouldUseToolHeaderOutputControls = () => Boolean(outputChrome().wrapToggle)\n\n const renderOutputRail = () => (\n <div class=\"tool-call-output-rail\">\n <button\n type=\"button\"\n class=\"tool-call-header-icon-button icon-toggle\"\n onClick={props.toggleOutputWrap}\n aria-label={outputWrapTitle()}\n aria-pressed={props.outputWrapEnabled()}\n title={outputWrapTitle()}\n >\n <WrapText class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />\n </button>\n </div>\n )\n\n const renderOutputIoBody = (body: JSXElement, error: JSXElement, showPending: boolean) => (\n <div class=\"tool-call-io-body\" data-suppress-inner-header={outputChrome().suppressInnerHeader === false ? undefined : \"true\"}>\n {body}\n {error}\n\n <Show when={showPending}>\n <div class=\"tool-call-pending-message\">\n <span class=\"spinner-small\"></span>\n <span>{props.t(\"toolCall.pending.waitingToRun\")}</span>\n </div>\n </Show>\n </div>\n )\n\n const renderCurrentOutputIoBody = () => renderOutputIoBody(renderToolBody(), renderError(), shouldShowPendingMessage())\n\n const renderToolOutputBody = () => {\n const body = renderToolBody()\n const error = renderError()\n const showPending = shouldShowPendingMessage()\n const chrome = outputChrome()\n\n if (!body && !error && !showPending) {\n return null\n }\n\n if (chrome.wrapToggle) {\n return (\n <div class=\"tool-call-body tool-call-output-shell\">\n {renderOutputRail()}\n {renderOutputIoBody(body, error, showPending)}\n </div>\n )\n }\n\n return (\n <div class=\"tool-call-body\">\n {body}\n {error}\n\n <Show when={showPending}>\n <div class=\"tool-call-pending-message\">\n <span class=\"spinner-small\"></span>\n <span>{props.t(\"toolCall.pending.waitingToRun\")}</span>\n </div>\n </Show>\n </div>\n )\n }\n\n return (\n <div class=\"tool-call-details\">\n <Show\n when={props.isToolInputVisible() && props.hasToolInput()}\n fallback={renderToolOutputBody()}\n >\n <div class=\"tool-call-body\">\n <div class=\"tool-call-io-sections\">\n <div class=\"tool-call-io-section\">\n {(() => {\n return renderIoHeader({\n title: () => props.t(\"toolCall.io.input\"),\n language: () => toolInputDisplay()?.language,\n expanded: props.inputSectionExpanded,\n onToggle: props.toggleInputSection,\n onCopy: copyToolInput,\n copyTitle: () => props.t(\"toolCall.io.copyInputTitle\"),\n copyAriaLabel: () => props.t(\"toolCall.io.copyInputAriaLabel\"),\n })\n })()}\n\n <Show when={props.inputSectionExpanded()}>\n <div class=\"tool-call-io-body\" data-suppress-inner-header=\"true\">\n {(() => {\n const input = toolInputDisplay()\n if (!input) return null\n return renderMarkdownContent({ content: input.content, codeLanguage: input.language, cacheKey: \"input\" })\n })()}\n </div>\n </Show>\n </div>\n\n <div class=\"tool-call-io-section\">\n <Show when={!shouldUseToolHeaderOutputControls()}>\n {renderIoHeader({\n title: () => outputChrome().title || props.t(\"toolCall.io.output\"),\n language: () => outputChrome().language,\n expanded: props.outputSectionExpanded,\n onToggle: props.toggleOutputSection,\n copyText: () => outputChrome().copyText,\n onCopy: canCopyOutput() ? (event) => void copyIoText(event, resolveOutputCopyText()) : undefined,\n copyTitle: () => props.t(\"toolCall.io.copyOutputTitle\"),\n copyAriaLabel: () => props.t(\"toolCall.io.copyOutputAriaLabel\"),\n actions: () => outputChrome().actions,\n })}\n </Show>\n\n <Show when={shouldUseToolHeaderOutputControls() || props.outputSectionExpanded()}>\n {shouldUseToolHeaderOutputControls() ? (\n <div class=\"tool-call-output-shell\">\n {renderOutputRail()}\n {renderCurrentOutputIoBody()}\n </div>\n ) : renderCurrentOutputIoBody()}\n </Show>\n </div>\n </div>\n </div>\n </Show>\n\n </div>\n )\n}\n\n\n\n\n\nexport default function ToolCall(props: ToolCallProps) {\n const { preferences, setDiffViewMode } = useConfig()\n const { isDark } = useTheme()\n const { t } = useI18n()\n // Native page reprojections allocate fresh objects even for completed tools.\n // Reconcile their fields so unchanged output does not recreate its scroller\n // (and discard a held native gesture) when another message arrives.\n // Own the reconciled snapshot: reconcile must never mutate a record borrowed\n // from the shared message store, including nested input/metadata objects.\n const snapshotPart = () => structuredClone(unwrap(props.toolCall))\n const [renderPart, setRenderPart] = createStore({ part: snapshotPart() })\n createEffect(on(\n () => [props.toolCall, props.partVersion, props.messageVersion] as const,\n () => setRenderPart(\"part\", reconcile(snapshotPart())),\n { defer: true },\n ))\n const toolCallMemo = () => renderPart.part\n const toolName = createMemo(() => toolCallMemo()?.tool || \"\")\n const toolCallIdentifier = createMemo(() => {\n const partId = toolCallMemo()?.id\n if (!partId) {\n throw new Error(\"Tool call requires a part id\")\n }\n return partId\n })\n const toolState = createMemo(() => toolCallMemo()?.state)\n\n const store = createMemo(() => messageStoreBus.getOrCreate(props.instanceId))\n const activeRequest = createMemo(() => activeInterruption().get(props.instanceId) ?? null)\n\n const permissionState = createMemo(() => store().getPermissionState(props.messageId, toolCallIdentifier()))\n const pendingPermission = createMemo(() => {\n const state = permissionState()\n if (state) {\n return { permission: state.entry.permission, active: state.active }\n }\n return toolCallMemo()?.pendingPermission\n })\n\n const pendingForm = createMemo(() => getFormQueue(props.instanceId).find((form) => {\n if (form.sessionID !== props.sessionId || !props.messageId) return false\n const target = resolveFormToolTarget(form, store())\n return target?.messageId === props.messageId && target.partId === toolCallIdentifier()\n }))\n\n const diagnosticsVisibility = createMemo(() => preferences().diagnosticsExpansion || \"expanded\")\n const diagnosticsDefaultExpanded = createMemo(() => diagnosticsVisibility() === \"expanded\")\n const toolVisibility = createMemo(() => resolveToolVisibility(preferences(), toolCallMemo()?.tool || \"\"))\n\n const defaultExpandedForTool = createMemo(() => {\n if (props.forceCollapsed) {\n return false\n }\n const state = toolState()\n if (state?.status === \"error\") {\n return true\n }\n return resolveToolExpansionDefault(preferences(), toolCallMemo()?.tool || \"\")\n })\n\n const [userExpanded, setUserExpanded] = createSignal<boolean | null>(null)\n const [outputWrapEnabled, setOutputWrapEnabled] = createSignal(true)\n const toolInputsVisibility = createMemo(() => preferences().toolInputsVisibility || \"collapsed\")\n const [toolInputVisibilityOverride, setToolInputVisibilityOverride] = createSignal<\"hidden\" | \"expanded\" | null>(null)\n const effectiveToolInputsVisibility = createMemo(() => toolInputVisibilityOverride() ?? toolInputsVisibility())\n const isToolInputVisible = createMemo(() => effectiveToolInputsVisibility() !== \"hidden\")\n const inputDefaultExpanded = createMemo(() => effectiveToolInputsVisibility() === \"expanded\")\n const [inputSectionOverride, setInputSectionOverride] = createSignal<boolean | null>(null)\n const [outputSectionOverride, setOutputSectionOverride] = createSignal<boolean | null>(null)\n const inputSectionExpanded = () => {\n const override = inputSectionOverride()\n if (override !== null) return override\n return inputDefaultExpanded()\n }\n const outputSectionExpanded = () => {\n const override = outputSectionOverride()\n if (override !== null) return override\n return true\n }\n\n const isPermissionActive = createMemo(() => {\n const pending = pendingPermission()\n if (!pending?.permission) return false\n if (pending.active) return true\n const active = activeRequest()\n return active?.kind === \"permission\" && active.id === pending.permission.id\n })\n\n const hasPendingForm = createMemo(() => Boolean(pendingForm()))\n\n const isToolVisible = createMemo(() => {\n if (hasPendingForm()) return false\n if (toolName() === \"question\" && (toolState()?.status === \"running\" || toolState()?.status === \"pending\")) return false\n return toolVisibility() !== \"hidden\"\n })\n\n const expanded = () => {\n const override = userExpanded()\n if (override !== null) return override\n return defaultExpandedForTool()\n }\n\n const toolInput = createMemo(() => {\n const state = toolState()\n return readToolStatePayload(state).input\n })\n\n const hasToolInput = createMemo(() => {\n const input = toolInput()\n if (!input) return false\n for (const key in input) if (Object.prototype.hasOwnProperty.call(input, key)) return true\n return false\n })\n\n const [toolCallRootEl, setToolCallRootEl] = createSignal<HTMLDivElement | undefined>()\n const [scrollTopSnapshot, setScrollTopSnapshot] = createSignal(0)\n const [diagnosticsOverride, setDiagnosticsOverride] = createSignal<boolean | undefined>(undefined)\n\n const diagnosticsExpanded = () => {\n const override = diagnosticsOverride()\n if (override !== undefined) return override\n return diagnosticsDefaultExpanded()\n }\n const diagnosticsView = createMemo(() => extractDiagnosticsView(toolState()))\n\n const toggleInputSection = () => {\n setInputSectionOverride((prev) => {\n const current = prev === null ? inputSectionExpanded() : prev\n return !current\n })\n }\n\n const toggleOutputSection = () => {\n setOutputSectionOverride((prev) => {\n const current = prev === null ? outputSectionExpanded() : prev\n return !current\n })\n }\n\n const toggleOutputWrap = () => setOutputWrapEnabled((enabled) => !enabled)\n\n const statusClass = () => {\n const status = toolState()?.status || \"pending\"\n return `tool-call-status-${status}`\n }\n\n const combinedStatusClass = () => {\n const base = statusClass()\n return pendingPermission() || pendingForm() ? `${base} tool-call-awaiting-permission` : base\n }\n\n function toggle() {\n setUserExpanded((prev) => {\n const current = prev === null ? defaultExpandedForTool() : prev\n return !current\n })\n }\n\n createEffect(() => {\n // When global preference changes, reset per-tool-call overrides so palette changes apply.\n toolInputsVisibility()\n setToolInputVisibilityOverride(null)\n setInputSectionOverride(null)\n setOutputSectionOverride(null)\n })\n\n const renderer = createMemo(() => resolveToolRenderer(toolName()))\n\n const renderMarkdownStub: ToolRendererContext[\"renderMarkdown\"] = () => null\n const renderDiffStub: ToolRendererContext[\"renderDiff\"] = () => null\n const renderToolCallStub: NonNullable<ToolRendererContext[\"renderToolCall\"]> = () => null\n const headerRendererContext: ToolRendererContext = {\n toolCall: toolCallMemo,\n toolState,\n toolName,\n instanceId: props.instanceId,\n sessionId: props.sessionId,\n t,\n messageVersion: () => props.messageVersion,\n partVersion: () => props.partVersion,\n textRevealTarget: (section) => makeTextRevealTarget(props.instanceId, props.messageId, toolCallIdentifier(), section),\n renderMarkdown: renderMarkdownStub,\n renderDiff: renderDiffStub,\n renderToolCall: renderToolCallStub,\n outputWrapEnabled,\n scrollHelpers: undefined,\n }\n\n const getRendererAction = () => renderer().getAction?.(headerRendererContext) ?? getDefaultToolAction(toolName())\n const headerOutputChrome = createMemo(() => renderer().getOutputChrome?.(headerRendererContext) ?? {})\n\n\n const renderToolTitle = () => {\n const state = toolState()\n const currentTool = toolName()\n\n if (getCanonicalToolName(currentTool) !== \"task\") {\n if (!state || state.status === \"pending\") return getRendererAction()\n\n const stateTitle = typeof (state as { title?: string }).title === \"string\" ? (state as { title?: string }).title : undefined\n if (stateTitle && stateTitle.length > 0) {\n return stateTitle\n }\n\n const customTitle = renderer().getTitle?.(headerRendererContext)\n if (customTitle) return customTitle\n\n return getToolName(currentTool)\n }\n\n if (!state) return getRendererAction()\n if (state.status === \"pending\") return getRendererAction()\n\n const customTitle = renderer().getTitle?.(headerRendererContext)\n if (customTitle) return customTitle\n\n if (isToolStateRunning(state) && state.title) {\n return state.title\n }\n\n if (isToolStateCompleted(state) && state.title) {\n return state.title\n }\n\n return getToolName(currentTool)\n }\n\n const toolTypeLabel = createMemo(() => toolName())\n const renderedToolTypeLabel = createMemo(() => limitToolTitleForRender(toolTypeLabel()))\n\n const headerTitleDetail = createMemo(() => getToolTitleDetail(renderToolTitle(), toolName()))\n\n const headerText = createMemo(() => {\n // Keep this as a memo so copy always matches what's rendered.\n const typeLabel = toolTypeLabel()\n const detail = headerTitleDetail()\n return [typeLabel, detail].filter(Boolean).join(\" \")\n })\n const renderedHeaderTitleDetail = createMemo(() => limitToolTitleForRender(headerTitleDetail()))\n\n const headerCopyText = () => headerOutputChrome().copyText || headerOutputChrome().getCopyText?.() || \"\"\n const canCopyHeaderOutput = () => headerOutputChrome().hasCopyText ?? Boolean(headerOutputChrome().copyText || headerOutputChrome().getCopyText)\n const speechText = createMemo(() =>\n buildToolSpeechText({\n title: headerText(),\n state: toolState(),\n t,\n }),\n )\n\n const speech = useSpeech({\n id: () => `${props.instanceId}:${props.sessionId}:${props.messageId ?? \"message\"}:${toolCallIdentifier()}`,\n text: speechText,\n })\n\n const canSpeakToolCall = () => speechText().trim().length > 0 && speech.canUseSpeech()\n\n const handleCopyHeader = async (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n const text = headerCopyText()\n if (!text) return\n await copyToClipboard(text)\n }\n\n const buildActionMenuItems = (includePrimaryActions = false): ActionOverflowMenuItem[] => {\n const items: ActionOverflowMenuItem[] = []\n\n if (hasToolInput()) {\n items.push({\n key: \"toggle-input\",\n label: isToolInputVisible() ? t(\"toolCall.header.hideInputTitle\") : t(\"toolCall.header.showInputTitle\"),\n icon: <ArrowRightSquare class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />,\n onSelect: () => {\n if (!expanded()) toggle()\n const currentlyVisible = isToolInputVisible()\n setToolInputVisibilityOverride(currentlyVisible ? \"hidden\" : \"expanded\")\n },\n })\n }\n\n if (includePrimaryActions) {\n if (canCopyHeaderOutput()) {\n items.push({\n key: \"copy\",\n label: t(\"toolCall.header.copyOutputTitle\"),\n icon: <Copy class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />,\n onSelect: async () => {\n const text = headerCopyText()\n if (!text) return\n await copyToClipboard(text)\n },\n })\n }\n\n if (canSpeakToolCall()) {\n items.push({\n key: \"speak\",\n label: speech.buttonTitle(),\n icon: <Volume2 class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />,\n onSelect: () => void speech.toggle(),\n })\n }\n }\n\n items.push(...(props.headerMenuItems?.() ?? []))\n\n return items\n }\n\n // Memoized so tool-state events do not rebuild the item array (and its icon\n // DOM) for every subscriber: re-evaluating on each store update would remount\n // every header action through <For>.\n const secondaryActionItems = createMemo(() => buildActionMenuItems(false))\n const overflowEligibleItems = createMemo(() => buildActionMenuItems(true))\n\n const status = () => toolState()?.status || \"\"\n\n return (\n <Show when={isToolVisible()}>\n <div\n\n ref={(element) => {\n setToolCallRootEl(element || undefined)\n }}\n class={`tool-call ${combinedStatusClass()}`}\n data-part-type=\"tool\"\n data-tool-name={toolName()}\n data-instance-id={props.instanceId}\n data-session-id={props.sessionId}\n data-message-id={props.messageId}\n data-part-id={toolCallIdentifier()}\n >\n <Show when={!hasPendingForm()}>\n <div class=\"tool-call-header\" ref={observeActionOverflow} data-action-overflow={overflowEligibleItems().length >= 2 ? \"true\" : undefined}>\n <button\n type=\"button\"\n class=\"tool-call-header-toggle\"\n onClick={toggle}\n aria-expanded={expanded()}\n >\n <ChevronRight class=\"tool-call-disclosure disclosure-chevron\" aria-hidden=\"true\" />\n <span class=\"tool-call-summary\" ref={observeToolStatusCompaction}>\n <span class=\"tool-call-summary-type\">{renderedToolTypeLabel()}</span>\n <Show when={renderedHeaderTitleDetail()}>\n {(detail) => <span class=\"tool-call-summary-title\">{detail()}</span>}\n </Show>\n <ToolStatusIndicator status={status} t={t} />\n <PartDuration\n startedAt={getPartStartedAt(toolCallMemo() as any)}\n endedAt={status() === \"completed\" || status() === \"error\" ? getPartEndedAt(toolCallMemo() as any) : undefined}\n running={status() === \"running\"}\n />\n </span>\n </button>\n\n <Show when={canCopyHeaderOutput()}>\n <button\n type=\"button\"\n class=\"tool-call-header-icon-button tool-call-header-copy\"\n onClick={handleCopyHeader}\n aria-label={t(\"toolCall.header.copyOutputAriaLabel\")}\n title={t(\"toolCall.header.copyOutputTitle\")}\n >\n <Copy class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />\n </button>\n </Show>\n\n <Show when={canSpeakToolCall()}>\n <SpeechActionButton\n class=\"tool-call-header-icon-button tool-call-header-copy\"\n onClick={() => void speech.toggle()}\n title={speech.buttonTitle()}\n isLoading={speech.isLoading()}\n isPlaying={speech.isPlaying()}\n />\n </Show>\n\n <Show when={props.headerAction}>\n {(action) => <span class=\"tool-call-header-action\">{action()}</span>}\n </Show>\n\n <For each={secondaryActionItems()}>\n {(item) => (\n <button\n type=\"button\"\n class=\"tool-call-header-icon-button tool-call-header-copy\"\n disabled={item.disabled}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n void item.onSelect()\n }}\n onPointerEnter={() => item.onMouseEnter?.()}\n onPointerLeave={() => item.onMouseLeave?.()}\n aria-label={item.label}\n title={item.label}\n >\n {item.icon}\n </button>\n )}\n </For>\n <ActionOverflowMenu\n items={overflowEligibleItems()}\n label={t(\"messageItem.actions.more\")}\n triggerClass=\"tool-call-header-icon-button tool-call-header-copy action-overflow-narrow\"\n minItems={2}\n />\n </div>\n </Show>\n\n <Show when={!hasPendingForm() && expanded()}>\n <ToolCallDetails\n toolCallMemo={toolCallMemo}\n toolState={toolState}\n toolName={toolName}\n toolCallIdentifier={toolCallIdentifier}\n instanceId={props.instanceId}\n sessionId={props.sessionId}\n isActive={props.isActive}\n messageId={props.messageId}\n messageVersion={props.messageVersion}\n partVersion={props.partVersion}\n onContentRendered={props.onContentRendered}\n preferences={preferences}\n setDiffViewMode={setDiffViewMode}\n isDark={isDark}\n t={t}\n store={store}\n pendingPermission={pendingPermission}\n isPermissionActive={isPermissionActive}\n hasToolInput={hasToolInput}\n isToolInputVisible={isToolInputVisible}\n toolInput={toolInput}\n inputSectionExpanded={inputSectionExpanded}\n outputSectionExpanded={outputSectionExpanded}\n outputWrapEnabled={outputWrapEnabled}\n toggleOutputWrap={toggleOutputWrap}\n toggleInputSection={toggleInputSection}\n toggleOutputSection={toggleOutputSection}\n toolCallRootEl={toolCallRootEl}\n scrollTopSnapshot={scrollTopSnapshot}\n setScrollTopSnapshot={setScrollTopSnapshot}\n />\n </Show>\n \n <Show when={!hasPendingForm() && (diagnosticsView().entries.length > 0 || diagnosticsView().truncated) && diagnosticsVisibility() !== \"hidden\"}>\n\n {renderDiagnosticsSection(\n t,\n diagnosticsView(),\n diagnosticsExpanded(),\n () => setDiagnosticsOverride((prev) => {\n const current = prev === undefined ? diagnosticsDefaultExpanded() : prev\n return !current\n }),\n diagnosticFileName(diagnosticsView().entries),\n )}\n </Show>\n\n </div>\n </Show>\n )\n}\n"],"file":"assets/tool-call-Q2b_KH6g.js"}
1
+ {"version":3,"mappings":"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","names":["iconNode","x1","x2","y1","y2","key","AlignJustify","props","_$createComponent","Icon","_$mergeProps","name","APPLY_PATCH_FILE_RENDER_LIMIT","APPLY_PATCH_SCAN_LIMIT","getApplyPatchPathLabel","path","limit","tail","separator","label","getApplyPatchDiagnosticPaths","diagnostics","getApplyPatchDiff","file","probeApplyPatchCopyText","diff","prefix","hasApplyPatchCopyText","files","scanLimit","characters","index","probe","getApplyPatchCopyText","diffs","remaining","copyText","getApplyPatchCopyOutput","fallback","getApplyPatchCopyAccess","getApplyPatchRenderData","fileLimit","characterLimit","sourceTruncated","rendered","scannedCharacters","truncated","fullDiff","firstContent","diffText","getApplyPatchFilesForRender","diagnosticPaths","normalize","matchesPath","left","right","paths","diagnosticPathsTruncated","knownPaths","scannedFiles","fileIndex","normalizedFilePaths","matchesDiagnostic","diagnostic","knownPath","DiagnosticsInline","Show","when","entries","length","children","_el$","_tmpl$","_el$2","firstChild","_el$3","_$insert","For","each","_el$4","_tmpl$2","_el$5","_el$6","_el$7","nextSibling","_el$8","_el$9","_el$0","_el$10","_el$11","entry","icon","displayPath","line","column","message","_$effect","_p$","_v$","tone","_v$2","filePath","e","_$className","t","_$setAttribute","undefined","applyPatchRenderer","tools","getSearchText","getApplyPatchToolSearchText","getAction","getTitle","toolState","state","status","getToolName","metadata","readToolStatePayload","Array","isArray","tool","count","getOutputChrome","payload","isToolStateCompleted","output","access","language","suppressInnerHeader","wrapToggle","renderBody","renderDiff","renderMarkdown","diagnosticsMap","createMemo","value","allFiles","list","renderData","TOOL_OUTPUT_RENDER_CHARACTER_LIMIT","map","diagnosticViews","view","buildDiagnosticView","relativePath","slice","diagnosticsTruncated","views","renderedKeys","Set","filter","Boolean","some","scanned","scannedKeys","Object","prototype","hasOwnProperty","call","has","_el$12","_tmpl$5","content","size","disableHighlight","renderedFile","labelBase","number","patch","_el$16","_tmpl$6","trim","limitToolTitleForRender","cacheKey","renderLimit","_el$13","_tmpl$3","hasDiagnosticMessages","_el$14","_tmpl$4","_el$15","DiagnosticsPayloadAccess","createStableAnsiStreamUpdater","renderer","createAnsiStreamRenderer","previousContent","ansiActive","update","element","startsWith","hasAnsi","reset","innerHTML","render","escapeHtml","delta","htmlChunk","insertAdjacentHTML","escapedDelta","OutputReveal","window","hidden","HiddenTextNotice","onReveal","reveal","RunningBashOutput","preRef","updater","createEffect","scrollHelpers","restoreAfterRender","onCleanup","_$addEventListener","event","handleScroll","_ref$","registerContainer","_$use","_ref$2","renderSentinel","FinalAnsiOutput","html","_ref$3","getBashCopyText","input","command","outputResult","formatUnknownForCopy","isToolStateRunning","isToolStateError","text","join","BashToolBody","parts","current","formatUnknownForRender","source","joinedTextSource","createTextWindow","target","revealTarget","renderedContent","isFinal","finalHasAnsi","part","finalAnsiHtml","ansiToHtml","_$memo","codeLanguage","bashRenderer","getBashToolSearchText","tGlobal","description","timeout","baseTitle","timeoutLabel","getCopyText","hasCopyText","textRevealTarget","editRenderer","getDiffToolSearchText","getRelativePath","toolName","diffPayload","extractDiffPayload","hasVisibleText","invalidRenderer","getDefaultToolSearchText","context","defaultRenderer","patchRenderer","questionRenderer","getQuestionToolSearchText","questions","getQuestionReceipts","question","header","prompt","selected","_tmpl$8","answer","_tmpl$7","_el$1","option","getReadPath","readRenderer","getReadToolSearchText","offset","detailParts","push","toolLabel","preview","inferLanguageFromPath","searchRenderer","pattern","skillRenderer","MARKDOWN_TEXT_RENDER_CHARACTER_LIMIT","webfetchRenderer","getWebfetchToolSearchText","url","result","writeRenderer","getWriteToolSearchText","contentValue","renderers","websearchRenderer","todoRenderer","taskRenderer","executeRenderer","resolveToolRenderer","getToolRegistryEntry","LazyToolCallDiffViewer","lazy","__vitePreload","then","module","default","ToolCallDiffViewer","CachedDiffMarkup","onMount","onRendered","createDiffContentRenderer","params","compactDiffQuery","useMediaQuery","mobileModeOverride","setMobileModeOverride","createSignal","wordWrapEnabled","setWordWrapEnabled","registerTracked","registerUntracked","disableTracking","renderDiffContent","options","renderAsPlainText","shouldRenderDiffPayloadAsPlainText","toolbarLabel","selectedVariant","variant","cacheHandle","permissionDiffCache","diffCache","revealSection","bounded","renderedDiffText","preferredMode","preferences","diffViewMode","effectiveMode","shouldWrap","themeKey","isDark","disableScrollTracking","registerRef","baseEntryParams","cacheEntryParams","suffix","cacheId","currentMode","currentWrap","cachedHtml","cached","getCacheEntry","theme","mode","wrap","handleModeChange","setDiffViewMode","nextViewMode","viewModeTitle","wordWrapTitle","copyPatchTitle","copyFullDiff","copiedDiff","copyToClipboard","onFullDiffAccess","handleDiffRendered","handleScrollRendered","onContentRendered","$$click","Copy","_c$","Split","_v$3","a","enabled","WrapText","_v$4","_v$5","_v$6","Suspense","_v$7","_v$8","_v$9","_v$0","o","_$delegateEvents","createMarkdownContentRenderer","renderMarkdownContent","wrapEnabled","messageClass","shouldDeferMarkdown","BoundedText","formatText","ensureMarkdownContent","markdownPart","id","partId","type","version","partVersion","handleMarkdownRendered","Markdown","instanceId","sessionId","defaultCodeBlockWrap","observeToolStatusCompaction","summary","frame","disposed","measure","next","contentWidth","schedule","resize","mutation","_a","OutputImage","useI18n","toolImageSource","failedSource","setFailedSource","addEventListener","mime","ToolOutputImages","images","isToolImageContent","getLogger","TOOL_CALL_CACHE_SCOPE","makeRenderCacheKey","toolCallId","messageId","makeTextRevealTarget","section","ToolStatusIndicator","resolvedStatus","isVisible","Hourglass","Loader2","Check","XCircle","_$setStyleProperty","i","n","s","ToolCallDetails","messageVersionAccessor","messageVersion","partVersionAccessor","cacheContext","toolCallIdentifier","toolCallMemo","cacheVersion","String","createVariantCache","useGlobalCache","scope","followScroll","createFollowScroll","getScrollTopSnapshot","scrollTopSnapshot","setScrollTopSnapshot","sentinelClassName","toolInputDisplay","toolInput","inputSectionExpanded","formatted","formatToolInputForRender","renderOutputMarkdownContent","outputWrapEnabled","rendererContext","toolCall","isActive","renderToolCall","ToolCall","forceCollapsed","previousPartVersion","autoScroll","renderToolBody","body","outputChrome","resolveOutputCopyText","canCopyOutput","renderError","error","copyIoText","shouldShowPendingMessage","pendingPermission","preventDefault","stopPropagation","copyToolInput","formatToolInputForCopy","outputWrapTitle","renderIoHeader","onToggle","ChevronRight","title","actions","onCopy","copyAriaLabel","_v$1","copyTitle","expanded","shouldUseToolHeaderOutputControls","renderOutputRail","_el$17","toggleOutputWrap","_v$10","_v$11","_v$12","renderOutputIoBody","showPending","_el$18","_tmpl$0","_el$19","_tmpl$9","_el$20","_el$21","renderCurrentOutputIoBody","renderToolOutputBody","chrome","_el$22","_tmpl$1","_el$23","_tmpl$10","_el$24","_el$25","_el$26","_el$27","_tmpl$13","isToolInputVisible","hasToolInput","_el$28","_tmpl$12","_el$29","_el$30","_el$32","toggleInputSection","_el$31","_tmpl$11","outputSectionExpanded","toggleOutputSection","_el$33","_tmpl$14","useConfig","useTheme","snapshotPart","structuredClone","unwrap","renderPart","setRenderPart","createStore","on","reconcile","defer","Error","store","messageStoreBus","getOrCreate","activeRequest","activeInterruption","get","permissionState","getPermissionState","permission","active","pendingForm","getFormQueue","find","form","sessionID","resolveFormToolTarget","diagnosticsVisibility","diagnosticsExpansion","diagnosticsDefaultExpanded","toolVisibility","resolveToolVisibility","defaultExpandedForTool","resolveToolExpansionDefault","userExpanded","setUserExpanded","setOutputWrapEnabled","toolInputsVisibility","toolInputVisibilityOverride","setToolInputVisibilityOverride","effectiveToolInputsVisibility","inputDefaultExpanded","inputSectionOverride","setInputSectionOverride","outputSectionOverride","setOutputSectionOverride","override","isPermissionActive","pending","kind","hasPendingForm","isToolVisible","toolCallRootEl","setToolCallRootEl","diagnosticsOverride","setDiagnosticsOverride","diagnosticsExpanded","diagnosticsView","extractDiagnosticsView","prev","statusClass","combinedStatusClass","base","toggle","renderMarkdownStub","renderDiffStub","renderToolCallStub","headerRendererContext","getRendererAction","getDefaultToolAction","headerOutputChrome","renderToolTitle","currentTool","getCanonicalToolName","stateTitle","customTitle","toolTypeLabel","renderedToolTypeLabel","headerTitleDetail","getToolTitleDetail","headerText","typeLabel","detail","renderedHeaderTitleDetail","headerCopyText","canCopyHeaderOutput","speechText","buildToolSpeechText","speech","useSpeech","canSpeakToolCall","canUseSpeech","handleCopyHeader","buildActionMenuItems","includePrimaryActions","items","ArrowRightSquare","onSelect","currentlyVisible","buttonTitle","Volume2","headerMenuItems","secondaryActionItems","overflowEligibleItems","_el$34","_tmpl$17","_el$35","_tmpl$16","_el$36","_el$37","_el$38","observeActionOverflow","_el$40","_tmpl$18","PartDuration","startedAt","getPartStartedAt","endedAt","getPartEndedAt","running","_el$39","_tmpl$15","_v$13","_v$14","SpeechActionButton","onClick","isLoading","isPlaying","headerAction","_el$41","_tmpl$19","action","_el$42","item","onMouseLeave","onMouseEnter","_v$23","disabled","_v$24","_v$25","ActionOverflowMenu","triggerClass","minItems","_v$15","_v$16","renderDiagnosticsSection","diagnosticFileName","_v$17","_v$18","_v$19","_v$20","_v$21","_v$22"],"ignoreList":[0],"sources":["../../../../../../node_modules/lucide-solid/dist/source/icons/align-justify.jsx","../../../components/tool-call/renderers/apply-patch-data.ts","../../../components/tool-call/renderers/apply-patch.tsx","../../../components/tool-call/ansi-render.tsx","../../../components/tool-call/renderers/bash.tsx","../../../components/tool-call/renderers/edit.tsx","../../../components/tool-call/renderers/invalid.tsx","../../../components/tool-call/renderers/patch.tsx","../../../components/tool-call/renderers/question.tsx","../../../components/tool-call/renderers/read.tsx","../../../components/tool-call/renderers/search.tsx","../../../components/tool-call/renderers/skill.tsx","../../../components/tool-call/renderers/webfetch.tsx","../../../components/tool-call/renderers/write.tsx","../../../components/tool-call/tool-registry.ts","../../../components/tool-call/diff-render.tsx","../../../components/tool-call/markdown-render.tsx","../../../components/tool-status-compaction.ts","../../../components/tool-call/output-images.tsx","../../../components/tool-call.tsx"],"sourcesContent":["import Icon from '../Icon';\nconst iconNode = [\n ['line', { x1: '3', x2: '21', y1: '6', y2: '6', key: '4m8b97' }],\n ['line', { x1: '3', x2: '21', y1: '12', y2: '12', key: '10d38w' }],\n ['line', { x1: '3', x2: '21', y1: '18', y2: '18', key: 'kwyyxn' }],\n];\nconst AlignJustify = (props) => (<Icon {...props} name=\"AlignJustify\" iconNode={iconNode}/>);\nexport default AlignJustify;\n","export type ApplyPatchFile = {\n filePath?: string\n relativePath?: string\n type?: string\n diff?: string\n patch?: string\n}\n\nexport const APPLY_PATCH_FILE_RENDER_LIMIT = 20\nconst APPLY_PATCH_SCAN_LIMIT = 10_000\n\nexport function getApplyPatchPathLabel(path: string, limit = 384): string {\n const tail = path.slice(-(limit + 1)).replace(/\\\\/g, \"/\")\n const separator = tail.lastIndexOf(\"/\")\n const label = separator >= 0 ? tail.slice(separator + 1) : tail\n return label.length <= limit ? label : `...${label.slice(-(limit - 3))}`\n}\n\nexport function* getApplyPatchDiagnosticPaths(diagnostics: Record<string, unknown>): Generator<string> {\n for (const path in diagnostics) if (Object.prototype.hasOwnProperty.call(diagnostics, path)) yield path\n}\n\nfunction getApplyPatchDiff(file: ApplyPatchFile): string {\n return typeof file.diff === \"string\" ? file.diff : typeof file.patch === \"string\" ? file.patch : \"\"\n}\n\nfunction probeApplyPatchCopyText(file: ApplyPatchFile, limit: number) {\n const diff = getApplyPatchDiff(file)\n const prefix = diff.slice(0, Math.max(0, limit))\n return { hasContent: /\\S/.test(prefix), scanned: prefix.length, truncated: prefix.length < diff.length }\n}\n\nexport function hasApplyPatchCopyText(files: ApplyPatchFile[], scanLimit = APPLY_PATCH_SCAN_LIMIT): boolean {\n let characters = 0\n let index = 0\n for (; index < files.length && index < scanLimit; index += 1) {\n const probe = probeApplyPatchCopyText(files[index], scanLimit - characters)\n if (probe.hasContent || probe.truncated) return true\n characters += probe.scanned\n }\n return index < files.length\n}\n\nexport function getApplyPatchCopyText(files: ApplyPatchFile[], limit = Number.POSITIVE_INFINITY): string {\n const diffs: string[] = []\n let characters = 0\n for (const file of files) {\n const remaining = limit - characters\n if (remaining <= 0) break\n const diff = getApplyPatchDiff(file)\n const copyText = diff.slice(0, remaining)\n if (!copyText.trim()) {\n if (copyText.length < diff.length) break\n continue\n }\n diffs.push(copyText)\n characters += Math.min(diff.length, remaining)\n if (diff.length > remaining) break\n }\n return diffs.join(\"\\n\")\n}\n\nexport function getApplyPatchCopyOutput(files: ApplyPatchFile[], fallback: unknown): string | null {\n return getApplyPatchCopyText(files) || (typeof fallback === \"string\" && fallback.length > 0 ? fallback : null)\n}\n\nexport function getApplyPatchCopyAccess(files: ApplyPatchFile[], fallback: unknown) {\n if (hasApplyPatchCopyText(files)) {\n return { language: \"diff\" as const, getCopyText: () => getApplyPatchCopyOutput(files, fallback), hasCopyText: true as const }\n }\n if (typeof fallback !== \"string\" || fallback.length === 0) return undefined\n return { language: \"text\" as const, getCopyText: () => fallback, hasCopyText: true as const }\n}\n\n/**\n * Files to render within a shared character budget. Each rendered file carries its\n * whole diff and the share of the budget it renders before its own in-place reveal;\n * `truncated` reports files (or content) omitted from rendering altogether.\n */\nexport function getApplyPatchRenderData(files: ApplyPatchFile[], fileLimit: number, characterLimit: number, sourceTruncated = false) {\n const rendered: Array<{ file: ApplyPatchFile; diffText: string; renderLimit: number }> = []\n let characters = 0\n let scannedCharacters = 0\n let truncated = sourceTruncated\n for (const file of files) {\n if (rendered.length >= fileLimit || characters >= characterLimit) {\n truncated = true\n break\n }\n const remaining = characterLimit - characters\n const fullDiff = getApplyPatchDiff(file)\n const probe = probeApplyPatchCopyText(file, Math.min(APPLY_PATCH_SCAN_LIMIT - scannedCharacters, remaining))\n scannedCharacters += probe.scanned\n const firstContent = probe.hasContent ? fullDiff.slice(0, probe.scanned).search(/\\S/) : -1\n const diffText = firstContent >= 0 ? fullDiff.slice(firstContent) : \"\"\n rendered.push({ file, diffText, renderLimit: remaining })\n characters += Math.min(diffText.length, remaining)\n // Content the bounded scan could not locate cannot be revealed in place.\n if (probe.truncated && !probe.hasContent) truncated = true\n }\n return { rendered, truncated }\n}\n\nexport function getApplyPatchFilesForRender(files: ApplyPatchFile[], diagnosticPaths: Iterable<string>, limit = APPLY_PATCH_FILE_RENDER_LIMIT) {\n const normalize = (path: string) => path.replace(/\\\\/g, \"/\")\n const matchesPath = (left: string, right: string) => left === right || left.endsWith(`/${right}`) || right.endsWith(`/${left}`)\n const paths: Array<{ raw: string; normalized: string }> = []\n let diagnosticPathsTruncated = false\n for (const path of diagnosticPaths) {\n if (paths.length >= limit) {\n diagnosticPathsTruncated = true\n break\n }\n paths.push({ raw: path, normalized: normalize(path) })\n }\n const rendered: ApplyPatchFile[] = []\n const knownPaths: string[] = []\n let scannedFiles = 0\n let scannedCharacters = 0\n for (let fileIndex = 0; fileIndex < files.length && rendered.length < limit; fileIndex += 1) {\n const file = files[fileIndex]\n scannedFiles += 1\n const normalizedFilePaths = [file.filePath, file.relativePath]\n .filter((path): path is string => typeof path === \"string\")\n .map(normalize)\n const matchesDiagnostic = normalizedFilePaths.some((path) => paths.some((diagnostic) => matchesPath(path, diagnostic.normalized)))\n const probe = probeApplyPatchCopyText(file, APPLY_PATCH_SCAN_LIMIT - scannedCharacters)\n scannedCharacters += probe.scanned\n if (probe.hasContent || probe.truncated || matchesDiagnostic) {\n rendered.push(file)\n knownPaths.push(...normalizedFilePaths)\n }\n if (scannedFiles >= 10_000) break\n }\n for (const path of paths) {\n if (rendered.length >= limit) break\n if (!knownPaths.some((knownPath) => matchesPath(knownPath, path.normalized))) {\n rendered.push({ filePath: path.raw })\n knownPaths.push(path.normalized)\n }\n }\n return {\n files: rendered,\n truncated: scannedFiles < files.length || diagnosticPathsTruncated,\n }\n}\n","import { For, Show, createMemo } from \"solid-js\"\nimport type { ToolRenderer } from \"../types\"\nimport { getToolName, isToolStateCompleted, limitToolTitleForRender, readToolStatePayload, TOOL_OUTPUT_RENDER_CHARACTER_LIMIT } from \"../utils\"\nimport { buildDiagnosticView, hasDiagnosticMessages, type DiagnosticEntry, type DiagnosticsMap } from \"../diagnostics\"\nimport { DiagnosticsPayloadAccess } from \"../diagnostics-section\"\nimport { getApplyPatchToolSearchText } from \"../search-text\"\nimport { APPLY_PATCH_FILE_RENDER_LIMIT, getApplyPatchCopyAccess, getApplyPatchCopyText, getApplyPatchDiagnosticPaths, getApplyPatchFilesForRender, getApplyPatchPathLabel, getApplyPatchRenderData, hasApplyPatchCopyText, type ApplyPatchFile } from \"./apply-patch-data\"\n\nfunction DiagnosticsInline(props: { entries: DiagnosticEntry[]; label: string; t: (key: string, params?: Record<string, unknown>) => string }) {\n return (\n <Show when={props.entries.length > 0}>\n <div class=\"tool-call-diagnostics-wrapper\">\n <div\n class=\"tool-call-diagnostics\"\n role=\"region\"\n aria-label={props.t(\"toolCall.diagnostics.ariaLabel.withLabel\", { label: props.label })}\n >\n <div class=\"tool-call-diagnostics-body\" role=\"list\">\n <For each={props.entries}>\n {(entry) => (\n <div class=\"tool-call-diagnostic-row\" role=\"listitem\">\n <span class={`tool-call-diagnostic-chip tool-call-diagnostic-${entry.tone}`}>\n <span class=\"tool-call-diagnostic-chip-icon\">{entry.icon}</span>\n <span>{entry.label}</span>\n </span>\n <span class=\"tool-call-diagnostic-path\" title={entry.filePath}>\n {entry.displayPath}\n <span class=\"tool-call-diagnostic-coords\">:L{entry.line || \"-\"}:C{entry.column || \"-\"}</span>\n </span>\n <span class=\"tool-call-diagnostic-message\">{entry.message}</span>\n </div>\n )}\n </For>\n </div>\n </div>\n </div>\n </Show>\n )\n}\n\nexport const applyPatchRenderer: ToolRenderer = {\n tools: [\"apply_patch\"],\n getSearchText: getApplyPatchToolSearchText,\n getAction: ({ t }) => t(\"toolCall.applyPatch.action.preparing\"),\n getTitle({ toolState, t }) {\n const state = toolState()\n if (!state) return undefined\n if (state.status === \"pending\") return getToolName(\"apply_patch\")\n const { metadata } = readToolStatePayload(state)\n const files = Array.isArray((metadata as any).files) ? ((metadata as any).files as ApplyPatchFile[]) : []\n if (files.length > 0) {\n const tool = getToolName(\"apply_patch\")\n return files.length === 1\n ? t(\"toolCall.applyPatch.title.withFileCount.one\", { tool, count: files.length })\n : t(\"toolCall.applyPatch.title.withFileCount.other\", { tool, count: files.length })\n }\n return getToolName(\"apply_patch\")\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n\n const payload = readToolStatePayload(state)\n const files = Array.isArray((payload.metadata as any).files) ? ((payload.metadata as any).files as ApplyPatchFile[]) : []\n const fallback = isToolStateCompleted(state) && typeof state.output === \"string\" && state.output.length > 0 ? state.output : null\n const access = getApplyPatchCopyAccess(files, fallback)\n if (!access) return undefined\n return access.language === \"diff\"\n ? { ...access, suppressInnerHeader: false }\n : { ...access, wrapToggle: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, renderDiff, renderMarkdown, t }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n\n const payload = readToolStatePayload(state)\n const diagnosticsMap = createMemo(() => {\n const value = (payload.metadata as any).diagnostics\n return value && typeof value === \"object\" ? (value as DiagnosticsMap) : {}\n })\n const allFiles = createMemo(() => {\n const list = (payload.metadata as any).files\n return getApplyPatchFilesForRender(Array.isArray(list) ? list as ApplyPatchFile[] : [], getApplyPatchDiagnosticPaths(diagnosticsMap()))\n })\n const renderData = createMemo(() => getApplyPatchRenderData(allFiles().files, APPLY_PATCH_FILE_RENDER_LIMIT, TOOL_OUTPUT_RENDER_CHARACTER_LIMIT, allFiles().truncated))\n const files = createMemo(() => renderData().rendered)\n const fallback = createMemo(() => {\n if (!isToolStateCompleted(state) || hasApplyPatchCopyText(files().map(({ file }) => file))) return null\n return typeof state.output === \"string\" && state.output.length > 0 ? state.output : null\n })\n const diagnosticViews = createMemo(() => {\n let remaining = 100\n return files().map(({ file }) => {\n const view = buildDiagnosticView(diagnosticsMap(), [file.filePath, file.relativePath])\n const entries = view.entries.slice(0, remaining)\n remaining -= entries.length\n return { ...view, entries, truncated: view.truncated || entries.length < view.entries.length }\n })\n })\n const diagnosticsTruncated = createMemo(() => {\n const views = diagnosticViews()\n const renderedKeys = new Set(views.map((view) => view.key).filter(Boolean))\n if (views.some((view) => view.truncated)) return true\n let scanned = 0\n let scannedKeys = 0\n for (const key in diagnosticsMap()) {\n if (!Object.prototype.hasOwnProperty.call(diagnosticsMap(), key)) continue\n scannedKeys += 1\n if (scannedKeys > 10_000) return true\n const list = diagnosticsMap()[key]\n if (!renderedKeys.has(key) && Array.isArray(list)) {\n const remaining = 10_000 - scanned\n if (remaining <= 0) return true\n for (let index = 0; index < list.length && index < remaining; index += 1) {\n scanned += 1\n if (typeof list[index]?.message === \"string\") return true\n }\n if (list.length > remaining) return true\n }\n }\n return false\n })\n\n if (files().length === 0 && !fallback() && !renderData().truncated) return null\n\n return (\n <div class=\"tool-call-apply-patch\">\n <Show when={fallback()}>\n {(content) => renderMarkdown({ content: content(), size: \"large\", disableHighlight: state.status === \"running\" })}\n </Show>\n <For each={files()}>\n {(renderedFile, index) => {\n const file = renderedFile.file\n const labelBase = file.relativePath || file.filePath || t(\"toolCall.applyPatch.fileFallback\", { number: index() + 1 })\n const label = getApplyPatchPathLabel(labelBase)\n const fullDiff = typeof file.diff === \"string\" ? file.diff : typeof file.patch === \"string\" ? file.patch : \"\"\n const diffText = renderedFile.diffText\n const filePath = typeof file.filePath === \"string\" ? file.filePath : file.relativePath\n const entries = createMemo(() => diagnosticViews()[index()]?.entries ?? [])\n\n return (\n <div class=\"tool-call-apply-patch-file\">\n <Show when={diffText.trim().length > 0}>\n {renderDiff(\n { diffText, copyText: fullDiff, filePath },\n {\n label: limitToolTitleForRender(t(\"toolCall.diff.label.withPath\", { path: label })),\n cacheKey: `apply_patch:${index()}`,\n renderLimit: renderedFile.renderLimit,\n },\n )}\n </Show>\n <DiagnosticsInline entries={entries()} label={label} t={t} />\n </div>\n )\n }}\n </For>\n <Show when={renderData().truncated}>\n <div class=\"tool-call-diagnostic-message\" role=\"status\">{t(\"toolCall.output.truncated\")}</div>\n </Show>\n <Show when={hasDiagnosticMessages(diagnosticsMap())}>\n <div class=\"tool-call-diagnostics-wrapper\">\n <div class=\"tool-call-diagnostics\">\n <DiagnosticsPayloadAccess diagnostics={diagnosticsMap()} truncated={diagnosticsTruncated()} t={t} />\n </div>\n </div>\n </Show>\n </div>\n )\n },\n}\n","import { createAnsiStreamRenderer, hasAnsi } from \"../../lib/ansi\"\nimport { escapeHtml } from \"../../lib/text-render-utils\"\n\nexport interface StableAnsiStreamUpdater {\n update: (element: HTMLElement, content: string) => void\n reset: () => void\n}\n\nexport function createStableAnsiStreamUpdater(): StableAnsiStreamUpdater {\n const renderer = createAnsiStreamRenderer()\n let previousContent = \"\"\n let ansiActive = false\n\n return {\n update(element: HTMLElement, content: string) {\n const resetStreaming = !previousContent || !content.startsWith(previousContent)\n\n if (resetStreaming) {\n ansiActive = hasAnsi(content)\n renderer.reset()\n element.innerHTML = ansiActive ? renderer.render(content) : escapeHtml(content)\n previousContent = content\n return\n }\n\n const delta = content.slice(previousContent.length)\n if (delta.length === 0) {\n return\n }\n\n if (!ansiActive && hasAnsi(delta)) {\n ansiActive = true\n renderer.reset()\n element.innerHTML = renderer.render(content)\n previousContent = content\n return\n }\n\n if (ansiActive) {\n const htmlChunk = renderer.render(delta)\n if (htmlChunk.length > 0) {\n element.insertAdjacentHTML(\"beforeend\", htmlChunk)\n }\n } else {\n const escapedDelta = escapeHtml(delta)\n if (escapedDelta.length > 0) {\n element.insertAdjacentHTML(\"beforeend\", escapedDelta)\n }\n }\n\n previousContent = content\n },\n reset() {\n previousContent = \"\"\n ansiActive = false\n renderer.reset()\n },\n }\n}\n","import { Show, createEffect, createMemo, onCleanup, type Accessor } from \"solid-js\"\nimport type { ToolState } from \"../../../types/tool-state\"\nimport type { MarkdownRenderOptions, ToolRenderer, ToolScrollHelpers } from \"../types\"\nimport { formatUnknownForCopy, formatUnknownForRender, getToolName, isToolStateCompleted, isToolStateError, isToolStateRunning, readToolStatePayload, TOOL_OUTPUT_RENDER_CHARACTER_LIMIT } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { createStableAnsiStreamUpdater } from \"../ansi-render\"\nimport { ansiToHtml, hasAnsi } from \"../../../lib/ansi\"\nimport { getBashToolSearchText } from \"../search-text\"\nimport type { RecordTextRevealTarget } from \"../../../stores/message-v2/record-display-cache\"\nimport { HiddenTextNotice, createTextWindow } from \"../../hidden-text\"\nimport { joinedTextSource } from \"../../../lib/render-text-window\"\n\ntype TextWindowHandle = ReturnType<typeof createTextWindow>\n\nfunction OutputReveal(props: { output: TextWindowHandle }) {\n return (\n <Show when={props.output.window().hidden > 0}>\n <HiddenTextNotice window={props.output.window()} onReveal={props.output.reveal} />\n </Show>\n )\n}\n\n// Output changes need no transcript notification: its ResizeObserver handles\n// any height change, and a frame-delayed notification always arrived after it.\n// Past the display bound the streamed prefix stops changing; only the reveal line counts on.\nfunction RunningBashOutput(props: {\n content: Accessor<string>\n output: TextWindowHandle\n scrollHelpers?: ToolScrollHelpers\n}) {\n let preRef: HTMLPreElement | undefined\n const updater = createStableAnsiStreamUpdater()\n\n createEffect(() => {\n const element = preRef\n if (!element) return\n updater.update(element, props.content())\n props.scrollHelpers?.restoreAfterRender()\n })\n\n onCleanup(() => {\n preRef = undefined\n updater.reset()\n })\n\n return (\n <div\n class=\"message-text tool-call-markdown\"\n ref={props.scrollHelpers?.registerContainer}\n onScroll={props.scrollHelpers ? (event) => props.scrollHelpers!.handleScroll(event as Event & { currentTarget: HTMLDivElement }) : undefined}\n >\n <pre ref={preRef} class=\"tool-call-content tool-call-ansi\" dir=\"auto\" />\n <OutputReveal output={props.output} />\n {props.scrollHelpers?.renderSentinel?.()}\n </div>\n )\n}\n\nfunction FinalAnsiOutput(props: {\n html: string\n output: TextWindowHandle\n scrollHelpers?: ToolScrollHelpers\n}) {\n createEffect(() => {\n props.html\n props.scrollHelpers?.restoreAfterRender()\n })\n\n return (\n <div class=\"message-text tool-call-markdown\" ref={props.scrollHelpers?.registerContainer}>\n <pre class=\"tool-call-content tool-call-ansi\" dir=\"auto\" innerHTML={props.html} />\n <OutputReveal output={props.output} />\n </div>\n )\n}\n\nfunction getBashCopyText(state: ToolState | undefined): string {\n if (!state || state.status === \"pending\") return \"\"\n\n const { input, metadata } = readToolStatePayload(state)\n const command = typeof input.command === \"string\" && input.command.length > 0 ? `$ ${input.command}` : \"\"\n const outputResult = formatUnknownForCopy(\n isToolStateCompleted(state)\n ? state.output\n : (isToolStateRunning(state) || isToolStateError(state)) && metadata.output\n ? metadata.output\n : undefined,\n )\n return [command, outputResult?.text].filter(Boolean).join(\"\\n\")\n}\n\nfunction BashToolBody(props: {\n toolState: Accessor<ToolState | undefined>\n renderMarkdown: (options: MarkdownRenderOptions) => ReturnType<ToolRenderer[\"renderBody\"]>\n revealTarget: RecordTextRevealTarget\n scrollHelpers?: ToolScrollHelpers\n}) {\n const state = createMemo(() => props.toolState())\n\n // \"$ command\\noutput\" as parts of the native strings: windows copy only their\n // bounded prefix, so no full join of a large output stays alive between updates.\n const parts = createMemo((): string[] => {\n const current = state()\n if (!current || current.status === \"pending\") return []\n\n const { input, metadata } = readToolStatePayload(current)\n const command = typeof input.command === \"string\" ? input.command : \"\"\n const output = formatUnknownForRender(\n isToolStateCompleted(current)\n ? current.output\n : (isToolStateRunning(current) || isToolStateError(current)) && metadata.output\n ? metadata.output\n : undefined,\n )?.text ?? \"\"\n if (!command) return output ? [output] : []\n return output ? [\"$ \", command, \"\\n\", output] : [\"$ \", command]\n })\n const source = createMemo(() => joinedTextSource(parts()))\n // The Markdown path bounds the same text with the same reveal state (\"output\").\n const output = createTextWindow({ source, limit: () => TOOL_OUTPUT_RENDER_CHARACTER_LIMIT, target: () => props.revealTarget })\n const renderedContent = createMemo(() => output.window().text)\n\n const isFinal = createMemo(() => {\n const current = state()\n return Boolean(current && current.status !== \"pending\" && current.status !== \"running\" && source().length > 0)\n })\n // Detect ANSI across the whole output, so a reveal never switches renderers.\n const finalHasAnsi = createMemo(() => isFinal() && parts().some((part) => hasAnsi(part)))\n const finalAnsiHtml = createMemo(() => (finalHasAnsi() ? ansiToHtml(renderedContent()) : null))\n\n return (\n <Show when={state() && source().length > 0}>\n <Show\n when={state()?.status === \"running\"}\n fallback={\n <Show when={finalAnsiHtml()} fallback={isFinal() && !finalHasAnsi() ? props.renderMarkdown({ content: source(), codeLanguage: \"bash\" }) : null}>\n {(html) => (\n <FinalAnsiOutput html={html()} output={output} scrollHelpers={props.scrollHelpers} />\n )}\n </Show>\n }\n >\n <RunningBashOutput content={renderedContent} output={output} scrollHelpers={props.scrollHelpers} />\n </Show>\n </Show>\n )\n}\n\nexport const bashRenderer: ToolRenderer = {\n tools: [\"bash\"],\n getSearchText: getBashToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.writingCommand\"),\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n const name = getToolName(\"bash\")\n const description = typeof input.description === \"string\" && input.description.length > 0 ? input.description : \"\"\n const timeout = typeof input.timeout === \"number\" && input.timeout > 0 ? input.timeout : undefined\n\n const baseTitle = description ? `${name} ${description}` : name\n if (!timeout) {\n return baseTitle\n }\n\n const timeoutLabel = `${timeout}ms`\n return `${baseTitle} · ${tGlobal(\"toolCall.renderer.bash.title.timeout\", { timeout: timeoutLabel })}`\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n const { input, metadata } = readToolStatePayload(state)\n const output = isToolStateCompleted(state) ? state.output : (isToolStateRunning(state) || isToolStateError(state)) ? metadata.output : undefined\n const hasCopyText = (typeof input.command === \"string\" && input.command.length > 0)\n || (output !== undefined && output !== null && output !== \"\" && (!Array.isArray(output) || output.length > 0))\n if (!hasCopyText) return undefined\n return { language: \"bash\", getCopyText: () => getBashCopyText(state), hasCopyText: true, wrapToggle: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, renderMarkdown, scrollHelpers, textRevealTarget }) {\n return <BashToolBody toolState={toolState} renderMarkdown={renderMarkdown} revealTarget={textRevealTarget(\"output\")} scrollHelpers={scrollHelpers} />\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { extractDiffPayload, getRelativePath, getToolName, hasVisibleText, isToolStateCompleted, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { getDiffToolSearchText } from \"../search-text\"\n\nexport const editRenderer: ToolRenderer = {\n tools: [\"edit\"],\n getSearchText: getDiffToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.preparingEdit\"),\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n const filePath =\n typeof input.filePath === \"string\" ? input.filePath : typeof input.path === \"string\" ? input.path : \"\"\n if (!filePath) return getToolName(\"edit\")\n return `${getToolName(\"edit\")} ${getRelativePath(filePath)}`\n },\n getOutputChrome({ toolState, toolName }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n\n const diffPayload = extractDiffPayload(toolName(), state)\n if (diffPayload) {\n return { language: \"diff\", getCopyText: () => diffPayload.diffText, suppressInnerHeader: false }\n }\n\n const { metadata } = readToolStatePayload(state)\n const diffText = typeof metadata.diff === \"string\" ? metadata.diff : null\n const fallback = isToolStateCompleted(state) && typeof state.output === \"string\" ? state.output : null\n const copyText = diffText || fallback\n if (!copyText) return undefined\n return { language: \"diff\", getCopyText: () => copyText, wrapToggle: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, toolName, renderDiff, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n\n const diffPayload = extractDiffPayload(toolName(), state)\n if (diffPayload) {\n return renderDiff(diffPayload)\n }\n\n const { metadata } = readToolStatePayload(state)\n const diffText = typeof metadata.diff === \"string\" ? metadata.diff : null\n const fallback = isToolStateCompleted(state) && typeof state.output === \"string\" ? state.output : null\n const value = diffText || fallback\n if (!hasVisibleText(value)) return null\n\n return renderMarkdown({ content: value, codeLanguage: \"diff\", size: \"large\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { defaultRenderer } from \"./default\"\nimport { getToolName, readToolStatePayload } from \"../utils\"\nimport { getDefaultToolSearchText } from \"../search-text\"\n\nexport const invalidRenderer: ToolRenderer = {\n tools: [\"invalid\"],\n getSearchText: getDefaultToolSearchText,\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return getToolName(\"invalid\")\n const { input } = readToolStatePayload(state)\n if (typeof input.tool === \"string\") {\n return getToolName(input.tool)\n }\n return getToolName(\"invalid\")\n },\n getOutputChrome(context) {\n return defaultRenderer.getOutputChrome?.(context)\n },\n renderBody(context) {\n return defaultRenderer.renderBody(context)\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { extractDiffPayload, getRelativePath, getToolName, hasVisibleText, isToolStateCompleted, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { getDiffToolSearchText } from \"../search-text\"\n\nexport const patchRenderer: ToolRenderer = {\n tools: [\"patch\"],\n getSearchText: getDiffToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.preparingPatch\"),\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n const filePath = typeof input.filePath === \"string\" ? input.filePath : \"\"\n if (!filePath) return getToolName(\"patch\")\n return `${getToolName(\"patch\")} ${getRelativePath(filePath)}`\n },\n getOutputChrome({ toolState, toolName }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n\n const diffPayload = extractDiffPayload(toolName(), state)\n if (diffPayload) {\n return { language: \"diff\", getCopyText: () => diffPayload.diffText, suppressInnerHeader: false }\n }\n\n const { metadata } = readToolStatePayload(state)\n const diffText = typeof metadata.diff === \"string\" ? metadata.diff : null\n const fallback = isToolStateCompleted(state) && typeof state.output === \"string\" ? state.output : null\n const copyText = diffText || fallback\n if (!copyText) return undefined\n return { language: \"diff\", getCopyText: () => copyText, wrapToggle: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, toolName, renderDiff, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n\n const diffPayload = extractDiffPayload(toolName(), state)\n if (diffPayload) {\n return renderDiff(diffPayload)\n }\n\n const { metadata } = readToolStatePayload(state)\n const diffText = typeof metadata.diff === \"string\" ? metadata.diff : null\n const fallback = isToolStateCompleted(state) && typeof state.output === \"string\" ? state.output : null\n const value = diffText || fallback\n if (!hasVisibleText(value)) return null\n\n return renderMarkdown({ content: value, codeLanguage: \"diff\", size: \"large\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { getQuestionToolSearchText } from \"../search-text\"\nimport { For, Show, createMemo } from \"solid-js\"\nimport { readToolStatePayload } from \"../utils\"\nimport { getQuestionReceipts } from \"./question-data\"\n\nexport const questionRenderer: ToolRenderer = {\n tools: [\"question\"],\n getSearchText: getQuestionToolSearchText,\n getAction: ({ t, toolState }) => toolState()?.status === \"completed\" ? t(\"interruption.answered\") : t(\"toolCall.question.action.awaitingAnswers\"),\n getTitle({ toolState, t }) {\n const state = toolState()\n if (!state) return t(\"toolCall.question.title.questions\")\n if (state.status === \"completed\") return t(\"toolCall.question.title.questions\")\n return t(\"toolCall.question.title.askingQuestions\")\n },\n renderBody({ toolState, t }) {\n const questions = createMemo(() => getQuestionReceipts(readToolStatePayload(toolState())))\n return <Show when={toolState()?.status === \"completed\" && questions().length > 0}>\n <dl class=\"interruption-receipt question-receipt\">\n <For each={questions()}>{question => <div class=\"question-receipt-item\">\n <dt>\n <Show when={question.header}><span class=\"question-receipt-caption\">{question.header}</span></Show>\n <span class=\"question-receipt-prompt\">{question.prompt}</span>\n </dt>\n <dd>\n <span class=\"question-receipt-caption\">{t(\"question-receipt.answer\")}</span>\n <Show when={question.selected?.length} fallback={\n <p class=\"question-receipt-empty\">{t(question.selected ? \"interruption.noAnswer\" : \"question-receipt.unavailable\")}</p>\n }>\n <ul class=\"question-receipt-answers\">\n <For each={question.selected}>{answer => <li>\n <span class=\"question-receipt-label\">{answer.label}</span>\n <Show when={answer.description}><p class=\"question-receipt-description\">{answer.description}</p></Show>\n </li>}</For>\n </ul>\n </Show>\n <Show when={question.remaining.length > 0}>\n <details class=\"question-receipt-choices\">\n <summary>{t(question.selected ? \"question-receipt.otherChoices\" : \"question-receipt.offeredChoices\", { count: question.remaining.length })}</summary>\n <ul>\n <For each={question.remaining}>{option => <li>\n <span class=\"question-receipt-label\">{option.label}</span>\n <Show when={option.description}><p class=\"question-receipt-description\">{option.description}</p></Show>\n </li>}</For>\n </ul>\n </details>\n </Show>\n </dd>\n </div>}</For>\n </dl>\n </Show>\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { getRelativePath, getToolName, hasVisibleText, inferLanguageFromPath, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { getReadToolSearchText } from \"../search-text\"\n\nfunction getReadPath(input: Record<string, any>): string {\n const filePath = typeof input.filePath === \"string\" ? input.filePath : \"\"\n if (filePath) return filePath\n const path = typeof input.path === \"string\" ? input.path : \"\"\n if (path) return path\n return typeof input.name === \"string\" ? input.name : \"\"\n}\n\nexport const readRenderer: ToolRenderer = {\n tools: [\"read\"],\n getSearchText: getReadToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.readingFile\"),\n getTitle({ toolName, toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n const filePath = getReadPath(input)\n const offset = typeof input.offset === \"number\" ? input.offset : undefined\n const limit = typeof input.limit === \"number\" ? input.limit : undefined\n const relativePath = filePath ? getRelativePath(filePath) : \"\"\n const detailParts: string[] = []\n\n if (typeof offset === \"number\") {\n detailParts.push(tGlobal(\"toolCall.renderer.read.detail.offset\", { offset }))\n }\n\n if (typeof limit === \"number\") {\n detailParts.push(tGlobal(\"toolCall.renderer.read.detail.limit\", { limit }))\n }\n\n const toolLabel = getToolName(toolName())\n const baseTitle = relativePath ? `${toolLabel} ${relativePath}` : toolLabel\n if (!detailParts.length) {\n return baseTitle\n }\n\n return `${baseTitle} · ${detailParts.join(\" · \")}`\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n const { output, input } = readToolStatePayload(state)\n const preview = typeof output === \"string\" ? output : null\n if (!preview) return undefined\n const language = inferLanguageFromPath(getReadPath(input)) ?? \"text\"\n return { language, getCopyText: () => preview, wrapToggle: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n const { output, input } = readToolStatePayload(state)\n const preview = typeof output === \"string\" ? output : null\n if (!hasVisibleText(preview)) return null\n const language = inferLanguageFromPath(getReadPath(input))\n return renderMarkdown({ content: preview, codeLanguage: language ?? \"\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { getToolName, readToolStatePayload } from \"../utils\"\nimport { getDefaultToolSearchText } from \"../search-text\"\nimport { defaultRenderer } from \"./default\"\n\nexport const searchRenderer: ToolRenderer = {\n tools: [\"glob\", \"grep\"],\n getSearchText: getDefaultToolSearchText,\n getTitle({ toolName, toolState }) {\n const state = toolState()\n const name = getToolName(toolName())\n if (!state) return name\n\n const { input } = readToolStatePayload(state)\n const pattern = typeof input.pattern === \"string\" ? input.pattern.trim() : \"\"\n if (!pattern) return name\n\n return `${name} ${pattern}`\n },\n getOutputChrome(context) {\n return defaultRenderer.getOutputChrome?.(context)\n },\n renderBody(context) {\n return defaultRenderer.renderBody(context)\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { formatUnknownForCopy, formatUnknownForRender, getToolName, hasVisibleText } from \"../utils\"\nimport { getDefaultToolSearchText } from \"../search-text\"\nimport { MARKDOWN_TEXT_RENDER_CHARACTER_LIMIT } from \"../../../lib/render-text-window\"\n\nexport const skillRenderer: ToolRenderer = {\n tools: [\"skill\"],\n getSearchText: getDefaultToolSearchText,\n getTitle() {\n return getToolName(\"skill\")\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status !== \"completed\") return undefined\n\n if (state.output === undefined || state.output === null || state.output === \"\" || (Array.isArray(state.output) && state.output.length === 0)) return undefined\n return { getCopyText: () => formatUnknownForCopy(state.output)?.text ?? null, hasCopyText: true, suppressInnerHeader: true }\n },\n renderBody({ toolState, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status !== \"completed\") return null\n\n const output = formatUnknownForRender(state.output)?.text ?? null\n if (!hasVisibleText(output)) return null\n // Skill instructions are prose Markdown.\n return <div class=\"tool-call-skill-body\">{renderMarkdown({ content: output, renderLimit: MARKDOWN_TEXT_RENDER_CHARACTER_LIMIT })}</div>\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { formatUnknownForCopy, formatUnknownForRender, getToolName, hasVisibleText, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { getWebfetchToolSearchText } from \"../search-text\"\n\nexport const webfetchRenderer: ToolRenderer = {\n tools: [\"webfetch\"],\n getSearchText: getWebfetchToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.fetchingFromWeb\"),\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n if (typeof input.url === \"string\" && input.url.length > 0) {\n return `${getToolName(\"webfetch\")} ${input.url}`\n }\n return getToolName(\"webfetch\")\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n\n const { metadata } = readToolStatePayload(state)\n const output = state.status === \"completed\" ? state.output : metadata.output\n if (output === undefined || output === null || output === \"\" || (Array.isArray(output) && output.length === 0)) return undefined\n const result = formatUnknownForRender(output)\n\n return {\n language: result?.language ?? \"text\",\n getCopyText: () => formatUnknownForCopy(output)?.text ?? null,\n hasCopyText: true,\n wrapToggle: true,\n suppressInnerHeader: true,\n }\n },\n renderBody({ toolState, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n\n const { metadata } = readToolStatePayload(state)\n const result = formatUnknownForRender(\n state.status === \"completed\"\n ? state.output\n : metadata.output,\n )\n if (!result || !hasVisibleText(result.text)) return null\n\n return renderMarkdown({ content: result.text, codeLanguage: result.language ?? \"\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { getRelativePath, getToolName, hasVisibleText, inferLanguageFromPath, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { getWriteToolSearchText } from \"../search-text\"\n\nexport const writeRenderer: ToolRenderer = {\n tools: [\"write\"],\n getSearchText: getWriteToolSearchText,\n getAction: () => tGlobal(\"toolCall.renderer.action.preparingWrite\"),\n getTitle({ toolState }) {\n const state = toolState()\n if (!state) return undefined\n const { input } = readToolStatePayload(state)\n const filePath = typeof input.filePath === \"string\" ? input.filePath : \"\"\n if (!filePath) return getToolName(\"write\")\n return `${getToolName(\"write\")} ${getRelativePath(filePath)}`\n },\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n const { metadata, input } = readToolStatePayload(state)\n const contentValue = typeof input.content === \"string\" ? input.content : metadata.content\n if (typeof contentValue !== \"string\" || contentValue.length === 0) return undefined\n const filePath = typeof input.filePath === \"string\" ? input.filePath : undefined\n return {\n language: inferLanguageFromPath(filePath) ?? \"text\",\n getCopyText: () => contentValue,\n wrapToggle: true,\n suppressInnerHeader: true,\n }\n },\n renderBody({ toolState, renderMarkdown }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n const { metadata, input } = readToolStatePayload(state)\n const contentValue = typeof input.content === \"string\" ? input.content : metadata.content\n const filePath = typeof input.filePath === \"string\" ? input.filePath : undefined\n if (typeof contentValue !== \"string\" || !hasVisibleText(contentValue)) return null\n return renderMarkdown({ content: contentValue, codeLanguage: inferLanguageFromPath(filePath) ?? \"\", size: \"large\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"./types\"\nimport { getToolRegistryEntry } from \"./tool-presentation\"\nimport { applyPatchRenderer } from \"./renderers/apply-patch\"\nimport { bashRenderer } from \"./renderers/bash\"\nimport { defaultRenderer } from \"./renderers/default\"\nimport { editRenderer } from \"./renderers/edit\"\nimport { executeRenderer } from \"./renderers/execute\"\nimport { invalidRenderer } from \"./renderers/invalid\"\nimport { patchRenderer } from \"./renderers/patch\"\nimport { questionRenderer } from \"./renderers/question\"\nimport { readRenderer } from \"./renderers/read\"\nimport { searchRenderer } from \"./renderers/search\"\nimport { skillRenderer } from \"./renderers/skill\"\nimport { taskRenderer } from \"./renderers/task\"\nimport { todoRenderer } from \"./renderers/todo\"\nimport { webfetchRenderer } from \"./renderers/webfetch\"\nimport { websearchRenderer } from \"./renderers/websearch\"\nimport { writeRenderer } from \"./renderers/write\"\n\nexport * from \"./tool-presentation\"\n\nconst renderers: Record<string, ToolRenderer> = {\n bash: bashRenderer, read: readRenderer, write: writeRenderer, edit: editRenderer,\n patch: patchRenderer, apply_patch: applyPatchRenderer, webfetch: webfetchRenderer, websearch: websearchRenderer,\n glob: searchRenderer, grep: searchRenderer, todowrite: todoRenderer, task: taskRenderer,\n skill: skillRenderer, question: questionRenderer, invalid: invalidRenderer, execute: executeRenderer,\n}\n\nexport function resolveToolRenderer(toolName: string): ToolRenderer {\n return renderers[getToolRegistryEntry(toolName).tool] ?? defaultRenderer\n}\n","import { Show, Suspense, createEffect, createMemo, createSignal, lazy, onMount, type Accessor, type JSXElement } from \"solid-js\"\nimport type { ToolState } from \"../../types/tool-state\"\nimport useMediaQuery from \"@suid/material/useMediaQuery\"\nimport { AlignJustify, Copy, Split, WrapText } from \"lucide-solid\"\nimport type { RenderCache } from \"../../types/message\"\nimport type { DiffViewMode } from \"../../stores/preferences\"\nimport type { DiffPayload, DiffRenderOptions, ToolScrollHelpers } from \"./types\"\nimport { getRelativePath, shouldRenderDiffPayloadAsPlainText, TOOL_OUTPUT_RENDER_CHARACTER_LIMIT } from \"./utils\"\nimport { getCacheEntry } from \"../../lib/global-cache\"\nimport { copyToClipboard } from \"../../lib/clipboard\"\nimport type { RecordTextRevealTarget } from \"../../stores/message-v2/record-display-cache\"\nimport { HiddenTextNotice, createTextWindow } from \"../hidden-text\"\n\nconst LazyToolCallDiffViewer = lazy(() =>\n import(\"../diff-viewer\").then((module) => ({ default: module.ToolCallDiffViewer })),\n)\n\nfunction CachedDiffMarkup(props: { html: string; onRendered?: () => void }) {\n onMount(() => {\n props.onRendered?.()\n })\n\n return (\n <div class=\"tool-call-diff-viewer\">\n <div innerHTML={props.html} />\n </div>\n )\n}\n\ntype CacheHandle = {\n get<T>(): T | undefined\n params(): unknown\n}\n\ntype DiffPrefs = {\n diffViewMode?: DiffViewMode\n}\n\nexport function createDiffContentRenderer(params: {\n toolState: Accessor<ToolState | undefined>\n preferences: Accessor<DiffPrefs>\n setDiffViewMode: (mode: DiffViewMode) => void\n isDark: Accessor<boolean>\n t: (key: string, params?: Record<string, unknown>) => string\n diffCache: CacheHandle\n permissionDiffCache: CacheHandle\n textRevealTarget: (section: string) => RecordTextRevealTarget\n scrollHelpers: ToolScrollHelpers\n handleScrollRendered: () => void\n onContentRendered?: () => void\n}) {\n const compactDiffQuery = useMediaQuery(\"(max-width: 640px)\")\n const [mobileModeOverride, setMobileModeOverride] = createSignal<DiffViewMode | undefined>(undefined)\n const [wordWrapEnabled, setWordWrapEnabled] = createSignal(true)\n\n createEffect(() => {\n if (!compactDiffQuery()) {\n setMobileModeOverride(undefined)\n }\n })\n\n const registerTracked = (element: HTMLDivElement | null) => {\n params.scrollHelpers.registerContainer(element)\n }\n\n const registerUntracked = (element: HTMLDivElement | null) => {\n params.scrollHelpers.registerContainer(element, { disableTracking: true })\n }\n\n function renderDiffContent(payload: DiffPayload, options?: DiffRenderOptions): JSXElement | null {\n // Large diffs render as plain text; the bounded window and its reveal apply to either form.\n const renderAsPlainText = shouldRenderDiffPayloadAsPlainText(payload)\n const relativePath = payload.filePath ? getRelativePath(payload.filePath) : \"\"\n const toolbarLabel = options?.label || (relativePath\n ? params.t(\"toolCall.diff.label.withPath\", { path: relativePath })\n : params.t(\"toolCall.diff.label\"))\n const selectedVariant = options?.variant === \"permission-diff\" ? \"permission-diff\" : \"diff\"\n const cacheHandle = selectedVariant === \"permission-diff\" ? params.permissionDiffCache : params.diffCache\n const revealSection = typeof options?.cacheKey === \"string\" && options.cacheKey.trim() ? options.cacheKey.trim() : selectedVariant\n const bounded = createTextWindow({\n source: () => payload.diffText,\n limit: () => options?.renderLimit ?? TOOL_OUTPUT_RENDER_CHARACTER_LIMIT,\n target: () => params.textRevealTarget(revealSection),\n })\n const renderedDiffText = () => bounded.window().text\n const preferredMode = () => (params.preferences().diffViewMode || \"split\") as DiffViewMode\n const effectiveMode = () => {\n if (!compactDiffQuery()) return preferredMode()\n return mobileModeOverride() || \"unified\"\n }\n const shouldWrap = () => wordWrapEnabled()\n const themeKey = params.isDark() ? \"dark\" : \"light\"\n const state = params.toolState()\n const disableScrollTracking = Boolean(\n options?.disableScrollTracking || (state?.status !== \"running\" && state?.status !== \"pending\"),\n )\n const registerRef = disableScrollTracking ? registerUntracked : registerTracked\n\n const baseEntryParams = cacheHandle.params() as any\n const cacheEntryParams = (() => {\n const suffix = typeof options?.cacheKey === \"string\" ? options.cacheKey.trim() : \"\"\n if (!suffix) return baseEntryParams\n return {\n ...baseEntryParams,\n cacheId: `${baseEntryParams.cacheId}:${suffix}`,\n }\n })()\n\n const currentMode = createMemo(() => effectiveMode())\n const currentWrap = createMemo(() => shouldWrap())\n const cachedHtml = createMemo(() => {\n const cached = getCacheEntry<RenderCache>(cacheEntryParams)\n if (\n cached\n && cached.text === renderedDiffText()\n && cached.theme === themeKey\n && cached.mode === currentMode()\n && cached.wrap === currentWrap()\n ) {\n return cached.html\n }\n return undefined\n })\n\n const handleModeChange = (mode: DiffViewMode) => {\n if (compactDiffQuery()) {\n setMobileModeOverride(mode)\n }\n params.setDiffViewMode(mode)\n }\n\n const nextViewMode = (): DiffViewMode => (currentMode() === \"split\" ? \"unified\" : \"split\")\n const viewModeTitle = () =>\n nextViewMode() === \"split\"\n ? params.t(\"toolCall.diff.switchToSplit\")\n : params.t(\"toolCall.diff.switchToUnified\")\n const wordWrapTitle = () =>\n wordWrapEnabled()\n ? params.t(\"toolCall.diff.disableWordWrap\")\n : params.t(\"toolCall.diff.enableWordWrap\")\n const copyPatchTitle = () => params.t(\"toolCall.diff.copyPatch\")\n const copyFullDiff = async () => {\n const copiedDiff = payload.copyText ?? payload.diffText\n if (await copyToClipboard(copiedDiff)) options?.onFullDiffAccess?.(copiedDiff)\n }\n\n const handleDiffRendered = () => {\n params.handleScrollRendered()\n params.onContentRendered?.()\n }\n\n return (\n <div\n class=\"message-text tool-call-markdown tool-call-markdown-large tool-call-diff-shell\"\n data-diff-mode={currentMode()}\n ref={registerRef}\n onScroll={disableScrollTracking ? undefined : params.scrollHelpers.handleScroll}\n >\n <div class=\"tool-call-diff-toolbar\" role=\"group\" aria-label={params.t(\"toolCall.diff.viewMode.ariaLabel\")}>\n <span class=\"tool-call-diff-toolbar-label\">{toolbarLabel}</span>\n <div class=\"file-viewer-toolbar\">\n <button\n type=\"button\"\n class=\"file-viewer-toolbar-icon-button\"\n onClick={() => void copyFullDiff()}\n aria-label={copyPatchTitle()}\n title={copyPatchTitle()}\n >\n <Copy class=\"h-4 w-4\" aria-hidden=\"true\" />\n </button>\n <Show when={!renderAsPlainText}>\n <button\n type=\"button\"\n class=\"file-viewer-toolbar-icon-button icon-toggle\"\n onClick={() => handleModeChange(nextViewMode())}\n aria-label={viewModeTitle()}\n aria-pressed={currentMode() === \"split\"}\n title={viewModeTitle()}\n >\n {nextViewMode() === \"split\" ? <Split class=\"h-4 w-4\" aria-hidden=\"true\" /> : <AlignJustify class=\"h-4 w-4\" aria-hidden=\"true\" />}\n </button>\n <button\n type=\"button\"\n class=\"file-viewer-toolbar-icon-button icon-toggle\"\n onClick={() => setWordWrapEnabled((enabled) => !enabled)}\n aria-label={wordWrapTitle()}\n aria-pressed={wordWrapEnabled()}\n title={wordWrapTitle()}\n >\n <WrapText class=\"h-4 w-4\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </div>\n {renderAsPlainText ? (\n <pre class=\"tool-call-diff-fallback\">{renderedDiffText()}</pre>\n ) : cachedHtml() ? (\n <CachedDiffMarkup html={cachedHtml()!} onRendered={handleDiffRendered} />\n ) : (\n <Suspense fallback={<pre class=\"tool-call-diff-fallback\">{renderedDiffText()}</pre>}>\n <LazyToolCallDiffViewer\n diffText={renderedDiffText()}\n filePath={payload.filePath}\n theme={themeKey}\n mode={currentMode()}\n wrap={currentWrap()}\n cacheEntryParams={cacheEntryParams as any}\n onRendered={handleDiffRendered}\n />\n </Suspense>\n )}\n <Show when={bounded.window().hidden > 0}>\n <HiddenTextNotice window={bounded.window()} onReveal={bounded.reveal} />\n </Show>\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n return { renderDiffContent }\n}\n","import type { Accessor, JSXElement } from \"solid-js\"\nimport type { ToolState } from \"../../types/tool-state\"\nimport type { TextPart } from \"../../types/message\"\nimport type { RecordTextRevealTarget } from \"../../stores/message-v2/record-display-cache\"\nimport { TOOL_OUTPUT_RENDER_CHARACTER_LIMIT } from \"../../lib/render-text-window\"\nimport { Markdown } from \"../markdown\"\nimport { BoundedText } from \"../hidden-text\"\nimport { ensureMarkdownContent } from \"./utils\"\nimport type { MarkdownRenderOptions, ToolScrollHelpers } from \"./types\"\n\nexport function createMarkdownContentRenderer(params: {\n toolState: Accessor<ToolState | undefined>\n partId: Accessor<string>\n partVersion?: Accessor<number | undefined>\n instanceId: string\n sessionId: string\n textRevealTarget: (section: string) => RecordTextRevealTarget\n isDark: Accessor<boolean>\n scrollHelpers: ToolScrollHelpers\n handleScrollRendered: () => void\n onContentRendered?: () => void\n}) {\n const registerTracked = (element: HTMLDivElement | null) => {\n params.scrollHelpers.registerContainer(element)\n }\n\n const registerUntracked = (element: HTMLDivElement | null) => {\n params.scrollHelpers.registerContainer(element, { disableTracking: true })\n }\n\n function renderMarkdownContent(options: MarkdownRenderOptions): JSXElement | null {\n const content = options.content\n if (content.length === 0) {\n return null\n }\n\n const size = options.size || \"default\"\n const disableHighlight = options.disableHighlight || false\n const wrapEnabled = options.wrap ?? true\n const messageClass = `message-text tool-call-markdown${size === \"large\" ? \" tool-call-markdown-large\" : \"\"}${wrapEnabled ? \" tool-call-markdown-wrap\" : \"\"}`\n const state = params.toolState()\n const disableScrollTracking = options.disableScrollTracking || (state?.status !== \"running\" && state?.status !== \"pending\")\n const registerRef = disableScrollTracking ? registerUntracked : registerTracked\n const shouldDeferMarkdown = Boolean(state && (state.status === \"running\" || state.status === \"pending\") && disableHighlight)\n const cacheKey = typeof options.cacheKey === \"string\" && options.cacheKey.length > 0 ? options.cacheKey : undefined\n const renderLimit = options.renderLimit ?? TOOL_OUTPUT_RENDER_CHARACTER_LIMIT\n const revealTarget = params.textRevealTarget(cacheKey ?? \"output\")\n if (shouldDeferMarkdown) {\n return (\n <div\n class={messageClass}\n ref={registerRef}\n onScroll={disableScrollTracking ? undefined : params.scrollHelpers.handleScroll}\n >\n <BoundedText source={content} limit={renderLimit} revealTarget={revealTarget}>\n {(text) => <pre class=\"whitespace-pre-wrap break-words text-sm font-mono\" dir=\"auto\">{text()}</pre>}\n </BoundedText>\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n const codeLanguage = options.codeLanguage\n const formatText = codeLanguage === undefined\n ? undefined\n : (text: string) => ensureMarkdownContent(text, codeLanguage || undefined, true) ?? \"\"\n const markdownPart = (): TextPart => ({\n id: cacheKey ? `${params.partId()}:${cacheKey}` : params.partId(),\n type: \"text\",\n text: typeof content === \"string\" ? content : \"\",\n version: params.partVersion?.(),\n })\n\n const handleMarkdownRendered = () => {\n params.handleScrollRendered()\n params.onContentRendered?.()\n }\n\n return (\n <div\n class={messageClass}\n ref={registerRef}\n onScroll={disableScrollTracking ? undefined : params.scrollHelpers.handleScroll}\n >\n <Markdown\n part={markdownPart()}\n instanceId={params.instanceId}\n sessionId={params.sessionId}\n isDark={params.isDark()}\n disableHighlight={disableHighlight}\n defaultCodeBlockWrap={wrapEnabled}\n renderLimit={renderLimit}\n formatText={formatText}\n source={typeof content === \"string\" ? undefined : content}\n revealTarget={revealTarget}\n onRendered={handleMarkdownRendered}\n />\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n return { renderMarkdownContent }\n}\n","import { onCleanup } from \"solid-js\"\nimport { contentWidth } from \"./measured-action-overflow\"\n\n/** A tool header gives up room in order: its actions fold into the overflow\n * menu (observeActionOverflow), then the status word goes, leaving the icon and\n * duration, and only then does the title truncate. The decision always measures\n * the full content, word included (kept measurable while hidden), so it never\n * oscillates. */\nexport function observeToolStatusCompaction(summary: HTMLElement) {\n let frame = 0\n let disposed = false\n const measure = () => {\n frame = 0\n if (disposed || !summary.isConnected || !summary.clientWidth) return\n const next = String(contentWidth(summary) > summary.getBoundingClientRect().width + 0.5)\n if (summary.dataset.statusCompact !== next) summary.dataset.statusCompact = next\n }\n const schedule = () => { if (!frame && !disposed) frame = requestAnimationFrame(measure) }\n const resize = new ResizeObserver(schedule)\n resize.observe(summary)\n const mutation = new MutationObserver(schedule)\n mutation.observe(summary, { subtree: true, childList: true, characterData: true })\n document.fonts?.addEventListener(\"loadingdone\", schedule)\n schedule()\n onCleanup(() => {\n disposed = true\n cancelAnimationFrame(frame)\n resize.disconnect()\n mutation.disconnect()\n document.fonts?.removeEventListener(\"loadingdone\", schedule)\n })\n}\n","import { createMemo, createSignal, For, Show } from \"solid-js\"\nimport type { ToolFileContent } from \"@opencode/client\"\nimport type { ToolState } from \"../../types/tool-state\"\nimport { isToolImageContent, toolImageSource } from \"../../lib/tool-content\"\nimport { useI18n } from \"../../lib/i18n\"\n\nfunction OutputImage(props: { file: ToolFileContent; index: number; onContentRendered?: () => void }) {\n const { t } = useI18n()\n const source = createMemo(() => toolImageSource(props.file))\n // Key the error to its URI: a later corrected result must be loadable in place.\n const [failedSource, setFailedSource] = createSignal<string>()\n const name = () => props.file.name?.trim() || t(\"toolCall.image.label\", { number: props.index + 1 })\n return <figure class=\"tool-call-output-image\">\n <Show when={source() && failedSource() !== source()} fallback={<p role=\"status\">{t(\"toolCall.image.unavailable\")}</p>}>\n <img src={source()} alt={name()} loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\"\n onLoad={() => props.onContentRendered?.()}\n onError={() => { setFailedSource(source()); props.onContentRendered?.() }} />\n </Show>\n <figcaption>{name()} <span>{props.file.mime}</span></figcaption>\n </figure>\n}\n\n/** Shared by native and MCP tools, including tools with a specialized text renderer. */\nexport function ToolOutputImages(props: { state?: ToolState; onContentRendered?: () => void }) {\n const images = createMemo(() => props.state?.status === \"completed\" && Array.isArray(props.state.content)\n ? props.state.content.filter(isToolImageContent) : [])\n return <Show when={images().length}>\n <div class=\"tool-call-output-images\">\n <For each={images()}>{(file, index) => <OutputImage file={file} index={index()} onContentRendered={props.onContentRendered} />}</For>\n </div>\n </Show>\n}\n","import { For, createSignal, Show, createEffect, createMemo, on, onCleanup, type Accessor, type JSXElement } from \"solid-js\"\nimport { createStore, reconcile, unwrap } from \"solid-js/store\"\nimport { ArrowRightSquare, Check, ChevronRight, Copy, Hourglass, Loader2, Volume2, WrapText, XCircle } from \"lucide-solid\"\nimport { stringify as stringifyYaml } from \"yaml\"\nimport { messageStoreBus } from \"../stores/message-v2/bus\"\nimport { useTheme } from \"../lib/theme\"\nimport { useGlobalCache } from \"../lib/hooks/use-global-cache\"\nimport { useConfig } from \"../stores/preferences\"\nimport { activeInterruption } from \"../stores/instances\"\nimport { getFormQueue } from \"../stores/forms\"\nimport { copyToClipboard } from \"../lib/clipboard\"\nimport type { PermissionRequest } from \"../types/permission\"\nimport { useI18n } from \"../lib/i18n\"\nimport { resolveToolRenderer } from \"./tool-call/renderers\"\nimport { getCanonicalToolName, resolveToolExpansionDefault, resolveToolVisibility } from \"./tool-call/tool-registry\"\nimport { resolveFormToolTarget } from \"./form-request-tool-target\"\nimport { createDiffContentRenderer } from \"./tool-call/diff-render\"\nimport { createMarkdownContentRenderer } from \"./tool-call/markdown-render\"\nimport { extractDiagnosticsView, diagnosticFileName } from \"./tool-call/diagnostics\"\nimport { renderDiagnosticsSection } from \"./tool-call/diagnostics-section\"\nimport type {\n DiffPayload,\n ToolCallPart,\n ToolOutputChrome,\n ToolRendererContext,\n ToolScrollHelpers,\n} from \"./tool-call/types\"\nimport {\n buildToolSpeechText,\n formatToolInputForCopy,\n formatToolInputForRender,\n getToolName,\n getToolTitleDetail,\n hasVisibleText,\n isToolStateCompleted,\n isToolStateRunning,\n limitToolTitleForRender,\n TOOL_OUTPUT_RENDER_CHARACTER_LIMIT,\n getDefaultToolAction,\n readToolStatePayload,\n} from \"./tool-call/utils\"\nimport { BoundedText } from \"./hidden-text\"\nimport type { RecordTextRevealTarget } from \"../stores/message-v2/record-display-cache\"\nimport { getLogger } from \"../lib/logger\"\nimport { useSpeech } from \"../lib/hooks/use-speech\"\nimport { createFollowScroll } from \"../lib/follow-scroll\"\nimport ActionOverflowMenu, { type ActionOverflowMenuItem } from \"./action-overflow-menu\"\nimport { observeActionOverflow } from \"./measured-action-overflow\"\nimport { observeToolStatusCompaction } from \"./tool-status-compaction\"\nimport SpeechActionButton from \"./speech-action-button\"\nimport { ToolOutputImages } from \"./tool-call/output-images\"\nimport { PartDuration } from \"./part-duration\"\nimport { getPartEndedAt, getPartStartedAt } from \"../lib/message-timing\"\nimport { isToolImageContent } from \"../lib/tool-content\"\n\nconst log = getLogger(\"session\")\n\nimport type { ToolState } from \"../types/tool-state\"\n\nconst TOOL_CALL_CACHE_SCOPE = \"tool-call\"\n\nfunction makeRenderCacheKey(\n toolCallId?: string | null,\n messageId?: string,\n partId?: string | null,\n variant = \"default\",\n) {\n const messageComponent = messageId ?? \"unknown-message\"\n const toolCallComponent = partId ?? toolCallId ?? \"unknown-tool-call\"\n return `${messageComponent}:${toolCallComponent}:${variant}`\n}\n\nfunction makeTextRevealTarget(instanceId: string, messageId: string | undefined, partId: string, section: string): RecordTextRevealTarget {\n return { instanceId, messageId: messageId ?? \"\", partId, section }\n}\n\n\ninterface ToolCallProps {\n toolCall: ToolCallPart\n toolCallId?: string\n messageId?: string\n messageVersion?: number\n partVersion?: number\n instanceId: string\n sessionId: string\n isActive?: Accessor<boolean>\n onContentRendered?: () => void\n /**\n * When true, tool call starts collapsed regardless of user preferences.\n * Users can still expand/collapse manually.\n */\n forceCollapsed?: boolean\n headerAction?: JSXElement\n headerMenuItems?: () => ActionOverflowMenuItem[]\n }\n\nfunction ToolStatusIndicator(props: { status: Accessor<string>; t: ReturnType<typeof useI18n>[\"t\"] }) {\n const resolvedStatus = () => {\n const value = props.status()\n return value === \"running\" || value === \"completed\" || value === \"error\" ? value : \"pending\"\n }\n const isVisible = (value: string) => resolvedStatus() === value\n const label = () => props.t(`toolCall.status.${resolvedStatus()}`)\n\n return (\n <span class=\"tool-call-header-status\" role=\"status\" aria-label={label()} title={label()} data-status={resolvedStatus()}>\n <span class=\"tool-call-header-status-icon\" aria-hidden=\"true\" style={{ display: isVisible(\"pending\") ? \"inline-flex\" : \"none\" }}>\n <Hourglass class=\"w-4 h-4\" />\n </span>\n <span class=\"tool-call-header-status-icon\" aria-hidden=\"true\" style={{ display: isVisible(\"running\") ? \"inline-flex\" : \"none\" }}>\n <Loader2 class=\"w-4 h-4 animate-spin\" />\n </span>\n <span class=\"tool-call-header-status-icon\" aria-hidden=\"true\" style={{ display: isVisible(\"completed\") ? \"inline-flex\" : \"none\" }}>\n <Check class=\"w-4 h-4\" />\n </span>\n <span class=\"tool-call-header-status-icon\" aria-hidden=\"true\" style={{ display: isVisible(\"error\") ? \"inline-flex\" : \"none\" }}>\n <XCircle class=\"w-4 h-4\" />\n </span>\n <span class=\"tool-call-header-status-label\">{label()}</span>\n </span>\n )\n}\n\nfunction ToolCallDetails(props: {\n toolCallMemo: () => ToolCallPart\n toolState: () => ToolState | undefined\n toolName: () => string\n toolCallIdentifier: () => string\n instanceId: string\n sessionId: string\n isActive?: Accessor<boolean>\n messageId?: string\n messageVersion?: number\n partVersion?: number\n onContentRendered?: () => void\n preferences: ReturnType<typeof useConfig>[\"preferences\"]\n setDiffViewMode: ReturnType<typeof useConfig>[\"setDiffViewMode\"]\n isDark: () => boolean\n t: ReturnType<typeof useI18n>[\"t\"]\n store: () => ReturnType<typeof messageStoreBus.getOrCreate>\n pendingPermission: () => { permission: PermissionRequest; active: boolean } | undefined\n isPermissionActive: () => boolean\n hasToolInput: () => boolean\n isToolInputVisible: () => boolean\n toolInput: () => Record<string, any> | undefined\n inputSectionExpanded: () => boolean\n outputSectionExpanded: () => boolean\n outputWrapEnabled: Accessor<boolean>\n toggleOutputWrap: () => void\n toggleInputSection: () => void\n toggleOutputSection: () => void\n toolCallRootEl: () => HTMLDivElement | undefined\n scrollTopSnapshot: () => number\n setScrollTopSnapshot: (next: number) => void\n}) {\n const messageVersionAccessor = createMemo(() => props.messageVersion)\n const partVersionAccessor = createMemo(() => props.partVersion)\n\n const cacheContext = createMemo(() => ({\n toolCallId: props.toolCallIdentifier(),\n messageId: props.messageId,\n partId: props.toolCallMemo()?.id ?? null,\n }))\n\n const cacheVersion = createMemo(() => {\n if (typeof props.partVersion === \"number\") {\n return String(props.partVersion)\n }\n if (typeof props.messageVersion === \"number\") {\n return String(props.messageVersion)\n }\n return \"noversion\"\n })\n\n const createVariantCache = (variant: string) =>\n useGlobalCache({\n instanceId: () => props.instanceId,\n sessionId: () => props.sessionId,\n scope: TOOL_CALL_CACHE_SCOPE,\n cacheId: () => {\n const context = cacheContext()\n return makeRenderCacheKey(context.toolCallId || undefined, context.messageId, context.partId, variant)\n },\n version: cacheVersion,\n })\n\n const diffCache = createVariantCache(\"diff\")\n const permissionDiffCache = createVariantCache(\"permission-diff\")\n const textRevealTarget = (section: string) => makeTextRevealTarget(props.instanceId, props.messageId, props.toolCallIdentifier(), section)\n\n\n const followScroll = createFollowScroll({\n getScrollTopSnapshot: props.scrollTopSnapshot,\n setScrollTopSnapshot: props.setScrollTopSnapshot,\n sentinelClassName: \"tool-call-scroll-sentinel\",\n })\n\n const scrollHelpers: ToolScrollHelpers = {\n registerContainer: (element, options) => {\n followScroll.registerContainer(element, options)\n },\n handleScroll: followScroll.handleScroll,\n renderSentinel: followScroll.renderSentinel,\n restoreAfterRender: followScroll.restoreAfterRender,\n }\n\n const handleScrollRendered = () => {\n scrollHelpers.restoreAfterRender()\n }\n\n\n const status = () => props.toolState()?.status || \"\"\n\n const toolInputDisplay = createMemo((): { content: string; language: string } | null => {\n const input = props.toolInput()\n if (!input) return null\n if (!props.inputSectionExpanded()) return { content: \"\", language: \"json\" }\n const formatted = formatToolInputForRender(input)\n if (!formatted || !hasVisibleText(formatted.text)) return null\n return { content: formatted.text, language: formatted.language ?? \"text\" }\n })\n\n const renderer = createMemo(() => resolveToolRenderer(props.toolName()))\n\n const { renderDiffContent } = createDiffContentRenderer({\n toolState: props.toolState,\n preferences: props.preferences,\n setDiffViewMode: props.setDiffViewMode,\n isDark: props.isDark,\n t: props.t,\n diffCache,\n permissionDiffCache,\n textRevealTarget,\n scrollHelpers,\n handleScrollRendered,\n onContentRendered: props.onContentRendered,\n })\n\n const { renderMarkdownContent } = createMarkdownContentRenderer({\n toolState: props.toolState,\n partId: props.toolCallIdentifier,\n partVersion: partVersionAccessor,\n instanceId: props.instanceId,\n sessionId: props.sessionId,\n textRevealTarget,\n isDark: props.isDark,\n scrollHelpers,\n handleScrollRendered,\n onContentRendered: props.onContentRendered,\n })\n\n const renderOutputMarkdownContent: ToolRendererContext[\"renderMarkdown\"] = (options) =>\n renderMarkdownContent({ ...options, wrap: options.wrap ?? props.outputWrapEnabled() })\n\n const rendererContext: ToolRendererContext = {\n toolCall: props.toolCallMemo,\n toolState: props.toolState,\n toolName: props.toolName,\n instanceId: props.instanceId,\n sessionId: props.sessionId,\n isActive: () => props.isActive?.() ?? true,\n t: props.t,\n messageVersion: messageVersionAccessor,\n partVersion: partVersionAccessor,\n textRevealTarget,\n renderMarkdown: renderOutputMarkdownContent,\n renderDiff: renderDiffContent,\n renderToolCall: (options) => {\n if (!options?.toolCall) return null\n return (\n <ToolCall\n toolCall={options.toolCall}\n toolCallId={options.toolCall.id}\n messageId={options.messageId}\n messageVersion={options.messageVersion}\n partVersion={options.partVersion}\n instanceId={props.instanceId}\n sessionId={options.sessionId}\n isActive={rendererContext.isActive}\n onContentRendered={props.onContentRendered}\n forceCollapsed={options.forceCollapsed}\n />\n )\n },\n outputWrapEnabled: props.outputWrapEnabled,\n scrollHelpers,\n onContentRendered: props.onContentRendered,\n }\n\n let previousPartVersion: number | undefined\n createEffect(() => {\n const version = partVersionAccessor()\n if (version === undefined) {\n return\n }\n if (previousPartVersion !== undefined && version === previousPartVersion) {\n return\n }\n previousPartVersion = version\n scrollHelpers.restoreAfterRender()\n })\n\n createEffect(() => {\n if (followScroll.autoScroll()) {\n scrollHelpers.restoreAfterRender()\n }\n })\n\n const renderToolBody = () => {\n const body = renderer().renderBody(rendererContext)\n const state = props.toolState()\n if (state?.status !== \"completed\" || !state.content?.some(isToolImageContent)) return body\n return <>{body}<ToolOutputImages state={props.toolState()} onContentRendered={() => {\n scrollHelpers.restoreAfterRender()\n props.onContentRendered?.()\n }} /></>\n }\n\n const outputChrome = createMemo<ToolOutputChrome>(() => renderer().getOutputChrome?.(rendererContext) ?? {})\n const resolveOutputCopyText = () => outputChrome().copyText || outputChrome().getCopyText?.() || \"\"\n const canCopyOutput = () => outputChrome().hasCopyText ?? Boolean(outputChrome().copyText || outputChrome().getCopyText)\n\n const renderError = () => {\n const state = props.toolState()\n if (state?.status === \"error\" && state.error) {\n const truncated = state.error.length > TOOL_OUTPUT_RENDER_CHARACTER_LIMIT\n return (\n <div class=\"tool-call-error-content\">\n <BoundedText source={state.error} revealTarget={textRevealTarget(\"error\")}>\n {(text) => (\n <div>\n <strong>{props.t(\"toolCall.error.label\")}</strong> {text()}\n <Show when={truncated}>\n <button type=\"button\" class=\"tool-call-header-icon-button tool-call-io-copy\" onClick={(event) => void copyIoText(event, state.error)} aria-label={props.t(\"toolCall.io.copyOutputAriaLabel\")} title={props.t(\"toolCall.io.copyOutputTitle\")}>\n <Copy class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n )}\n </BoundedText>\n </div>\n )\n }\n return null\n }\n\n const shouldShowPendingMessage = () => {\n const tool = props.toolName()\n return status() === \"pending\" && !props.pendingPermission() && tool !== \"todowrite\"\n }\n\n const copyIoText = async (event: MouseEvent, text?: string | null) => {\n event.preventDefault()\n event.stopPropagation()\n if (!text) return\n await copyToClipboard(text)\n }\n\n const copyToolInput = async (event: MouseEvent) => {\n await copyIoText(event, formatToolInputForCopy(props.toolInput())?.text)\n }\n\n const outputWrapTitle = () =>\n props.outputWrapEnabled()\n ? props.t(\"toolCall.diff.disableWordWrap\")\n : props.t(\"toolCall.diff.enableWordWrap\")\n\n const renderIoHeader = (options: {\n title: () => string\n language?: () => string | null | undefined\n expanded: () => boolean\n onToggle: () => void\n copyText?: () => string | null | undefined\n copyTitle?: () => string\n copyAriaLabel?: () => string\n onCopy?: (event: MouseEvent) => void\n actions?: () => JSXElement\n }) => (\n <div class=\"tool-call-io-header\">\n <button type=\"button\" class=\"tool-call-io-toggle\" aria-expanded={options.expanded()} onClick={options.onToggle}>\n <ChevronRight class=\"tool-call-io-disclosure disclosure-chevron\" aria-hidden=\"true\" />\n <span class=\"tool-call-io-title\">{options.title()}</span>\n <Show when={options.language?.()}>\n {(language) => <span class=\"tool-call-io-language\">{language()}</span>}\n </Show>\n </button>\n\n <Show when={options.actions?.()}>\n {(actions) => <span class=\"tool-call-io-actions\">{actions()}</span>}\n </Show>\n\n <Show when={Boolean(options.copyText?.() || options.onCopy)}>\n <button\n type=\"button\"\n class=\"tool-call-header-icon-button tool-call-io-copy\"\n onClick={(event) => options.onCopy ? options.onCopy(event) : void copyIoText(event, options.copyText?.())}\n aria-label={options.copyAriaLabel?.() ?? props.t(\"toolCall.io.copyOutputAriaLabel\")}\n title={options.copyTitle?.() ?? props.t(\"toolCall.io.copyOutputTitle\")}\n >\n <Copy class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n )\n\n const shouldUseToolHeaderOutputControls = () => Boolean(outputChrome().wrapToggle)\n\n const renderOutputRail = () => (\n <div class=\"tool-call-output-rail\">\n <button\n type=\"button\"\n class=\"tool-call-header-icon-button icon-toggle\"\n onClick={props.toggleOutputWrap}\n aria-label={outputWrapTitle()}\n aria-pressed={props.outputWrapEnabled()}\n title={outputWrapTitle()}\n >\n <WrapText class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />\n </button>\n </div>\n )\n\n const renderOutputIoBody = (body: JSXElement, error: JSXElement, showPending: boolean) => (\n <div class=\"tool-call-io-body\" data-suppress-inner-header={outputChrome().suppressInnerHeader === false ? undefined : \"true\"}>\n {body}\n {error}\n\n <Show when={showPending}>\n <div class=\"tool-call-pending-message\">\n <span class=\"spinner-small\"></span>\n <span>{props.t(\"toolCall.pending.waitingToRun\")}</span>\n </div>\n </Show>\n </div>\n )\n\n const renderCurrentOutputIoBody = () => renderOutputIoBody(renderToolBody(), renderError(), shouldShowPendingMessage())\n\n const renderToolOutputBody = () => {\n const body = renderToolBody()\n const error = renderError()\n const showPending = shouldShowPendingMessage()\n const chrome = outputChrome()\n\n if (!body && !error && !showPending) {\n return null\n }\n\n if (chrome.wrapToggle) {\n return (\n <div class=\"tool-call-body tool-call-output-shell\">\n {renderOutputRail()}\n {renderOutputIoBody(body, error, showPending)}\n </div>\n )\n }\n\n return (\n <div class=\"tool-call-body\">\n {body}\n {error}\n\n <Show when={showPending}>\n <div class=\"tool-call-pending-message\">\n <span class=\"spinner-small\"></span>\n <span>{props.t(\"toolCall.pending.waitingToRun\")}</span>\n </div>\n </Show>\n </div>\n )\n }\n\n return (\n <div class=\"tool-call-details\">\n <Show\n when={props.isToolInputVisible() && props.hasToolInput()}\n fallback={renderToolOutputBody()}\n >\n <div class=\"tool-call-body\">\n <div class=\"tool-call-io-sections\">\n <div class=\"tool-call-io-section\">\n {(() => {\n return renderIoHeader({\n title: () => props.t(\"toolCall.io.input\"),\n language: () => toolInputDisplay()?.language,\n expanded: props.inputSectionExpanded,\n onToggle: props.toggleInputSection,\n onCopy: copyToolInput,\n copyTitle: () => props.t(\"toolCall.io.copyInputTitle\"),\n copyAriaLabel: () => props.t(\"toolCall.io.copyInputAriaLabel\"),\n })\n })()}\n\n <Show when={props.inputSectionExpanded()}>\n <div class=\"tool-call-io-body\" data-suppress-inner-header=\"true\">\n {(() => {\n const input = toolInputDisplay()\n if (!input) return null\n return renderMarkdownContent({ content: input.content, codeLanguage: input.language, cacheKey: \"input\" })\n })()}\n </div>\n </Show>\n </div>\n\n <div class=\"tool-call-io-section\">\n <Show when={!shouldUseToolHeaderOutputControls()}>\n {renderIoHeader({\n title: () => outputChrome().title || props.t(\"toolCall.io.output\"),\n language: () => outputChrome().language,\n expanded: props.outputSectionExpanded,\n onToggle: props.toggleOutputSection,\n copyText: () => outputChrome().copyText,\n onCopy: canCopyOutput() ? (event) => void copyIoText(event, resolveOutputCopyText()) : undefined,\n copyTitle: () => props.t(\"toolCall.io.copyOutputTitle\"),\n copyAriaLabel: () => props.t(\"toolCall.io.copyOutputAriaLabel\"),\n actions: () => outputChrome().actions,\n })}\n </Show>\n\n <Show when={shouldUseToolHeaderOutputControls() || props.outputSectionExpanded()}>\n {shouldUseToolHeaderOutputControls() ? (\n <div class=\"tool-call-output-shell\">\n {renderOutputRail()}\n {renderCurrentOutputIoBody()}\n </div>\n ) : renderCurrentOutputIoBody()}\n </Show>\n </div>\n </div>\n </div>\n </Show>\n\n </div>\n )\n}\n\n\n\n\n\nexport default function ToolCall(props: ToolCallProps) {\n const { preferences, setDiffViewMode } = useConfig()\n const { isDark } = useTheme()\n const { t } = useI18n()\n // Native page reprojections allocate fresh objects even for completed tools.\n // Reconcile their fields so unchanged output does not recreate its scroller\n // (and discard a held native gesture) when another message arrives.\n // Own the reconciled snapshot: reconcile must never mutate a record borrowed\n // from the shared message store, including nested input/metadata objects.\n const snapshotPart = () => structuredClone(unwrap(props.toolCall))\n const [renderPart, setRenderPart] = createStore({ part: snapshotPart() })\n createEffect(on(\n () => [props.toolCall, props.partVersion, props.messageVersion] as const,\n () => setRenderPart(\"part\", reconcile(snapshotPart())),\n { defer: true },\n ))\n const toolCallMemo = () => renderPart.part\n const toolName = createMemo(() => toolCallMemo()?.tool || \"\")\n const toolCallIdentifier = createMemo(() => {\n const partId = toolCallMemo()?.id\n if (!partId) {\n throw new Error(\"Tool call requires a part id\")\n }\n return partId\n })\n const toolState = createMemo(() => toolCallMemo()?.state)\n\n const store = createMemo(() => messageStoreBus.getOrCreate(props.instanceId))\n const activeRequest = createMemo(() => activeInterruption().get(props.instanceId) ?? null)\n\n const permissionState = createMemo(() => store().getPermissionState(props.messageId, toolCallIdentifier()))\n const pendingPermission = createMemo(() => {\n const state = permissionState()\n if (state) {\n return { permission: state.entry.permission, active: state.active }\n }\n return toolCallMemo()?.pendingPermission\n })\n\n const pendingForm = createMemo(() => getFormQueue(props.instanceId).find((form) => {\n if (form.sessionID !== props.sessionId || !props.messageId) return false\n const target = resolveFormToolTarget(form, store())\n return target?.messageId === props.messageId && target.partId === toolCallIdentifier()\n }))\n\n const diagnosticsVisibility = createMemo(() => preferences().diagnosticsExpansion || \"expanded\")\n const diagnosticsDefaultExpanded = createMemo(() => diagnosticsVisibility() === \"expanded\")\n const toolVisibility = createMemo(() => resolveToolVisibility(preferences(), toolCallMemo()?.tool || \"\"))\n\n const defaultExpandedForTool = createMemo(() => {\n if (props.forceCollapsed) {\n return false\n }\n const state = toolState()\n if (state?.status === \"error\") {\n return true\n }\n return resolveToolExpansionDefault(preferences(), toolCallMemo()?.tool || \"\")\n })\n\n const [userExpanded, setUserExpanded] = createSignal<boolean | null>(null)\n const [outputWrapEnabled, setOutputWrapEnabled] = createSignal(true)\n const toolInputsVisibility = createMemo(() => preferences().toolInputsVisibility || \"collapsed\")\n const [toolInputVisibilityOverride, setToolInputVisibilityOverride] = createSignal<\"hidden\" | \"expanded\" | null>(null)\n const effectiveToolInputsVisibility = createMemo(() => toolInputVisibilityOverride() ?? toolInputsVisibility())\n const isToolInputVisible = createMemo(() => effectiveToolInputsVisibility() !== \"hidden\")\n const inputDefaultExpanded = createMemo(() => effectiveToolInputsVisibility() === \"expanded\")\n const [inputSectionOverride, setInputSectionOverride] = createSignal<boolean | null>(null)\n const [outputSectionOverride, setOutputSectionOverride] = createSignal<boolean | null>(null)\n const inputSectionExpanded = () => {\n const override = inputSectionOverride()\n if (override !== null) return override\n return inputDefaultExpanded()\n }\n const outputSectionExpanded = () => {\n const override = outputSectionOverride()\n if (override !== null) return override\n return true\n }\n\n const isPermissionActive = createMemo(() => {\n const pending = pendingPermission()\n if (!pending?.permission) return false\n if (pending.active) return true\n const active = activeRequest()\n return active?.kind === \"permission\" && active.id === pending.permission.id\n })\n\n const hasPendingForm = createMemo(() => Boolean(pendingForm()))\n\n const isToolVisible = createMemo(() => {\n if (hasPendingForm()) return false\n if (toolName() === \"question\" && (toolState()?.status === \"running\" || toolState()?.status === \"pending\")) return false\n return toolVisibility() !== \"hidden\"\n })\n\n const expanded = () => {\n const override = userExpanded()\n if (override !== null) return override\n return defaultExpandedForTool()\n }\n\n const toolInput = createMemo(() => {\n const state = toolState()\n return readToolStatePayload(state).input\n })\n\n const hasToolInput = createMemo(() => {\n const input = toolInput()\n if (!input) return false\n for (const key in input) if (Object.prototype.hasOwnProperty.call(input, key)) return true\n return false\n })\n\n const [toolCallRootEl, setToolCallRootEl] = createSignal<HTMLDivElement | undefined>()\n const [scrollTopSnapshot, setScrollTopSnapshot] = createSignal(0)\n const [diagnosticsOverride, setDiagnosticsOverride] = createSignal<boolean | undefined>(undefined)\n\n const diagnosticsExpanded = () => {\n const override = diagnosticsOverride()\n if (override !== undefined) return override\n return diagnosticsDefaultExpanded()\n }\n const diagnosticsView = createMemo(() => extractDiagnosticsView(toolState()))\n\n const toggleInputSection = () => {\n setInputSectionOverride((prev) => {\n const current = prev === null ? inputSectionExpanded() : prev\n return !current\n })\n }\n\n const toggleOutputSection = () => {\n setOutputSectionOverride((prev) => {\n const current = prev === null ? outputSectionExpanded() : prev\n return !current\n })\n }\n\n const toggleOutputWrap = () => setOutputWrapEnabled((enabled) => !enabled)\n\n const statusClass = () => {\n const status = toolState()?.status || \"pending\"\n return `tool-call-status-${status}`\n }\n\n const combinedStatusClass = () => {\n const base = statusClass()\n return pendingPermission() || pendingForm() ? `${base} tool-call-awaiting-permission` : base\n }\n\n function toggle() {\n setUserExpanded((prev) => {\n const current = prev === null ? defaultExpandedForTool() : prev\n return !current\n })\n }\n\n createEffect(() => {\n // When global preference changes, reset per-tool-call overrides so palette changes apply.\n toolInputsVisibility()\n setToolInputVisibilityOverride(null)\n setInputSectionOverride(null)\n setOutputSectionOverride(null)\n })\n\n const renderer = createMemo(() => resolveToolRenderer(toolName()))\n\n const renderMarkdownStub: ToolRendererContext[\"renderMarkdown\"] = () => null\n const renderDiffStub: ToolRendererContext[\"renderDiff\"] = () => null\n const renderToolCallStub: NonNullable<ToolRendererContext[\"renderToolCall\"]> = () => null\n const headerRendererContext: ToolRendererContext = {\n toolCall: toolCallMemo,\n toolState,\n toolName,\n instanceId: props.instanceId,\n sessionId: props.sessionId,\n t,\n messageVersion: () => props.messageVersion,\n partVersion: () => props.partVersion,\n textRevealTarget: (section) => makeTextRevealTarget(props.instanceId, props.messageId, toolCallIdentifier(), section),\n renderMarkdown: renderMarkdownStub,\n renderDiff: renderDiffStub,\n renderToolCall: renderToolCallStub,\n outputWrapEnabled,\n scrollHelpers: undefined,\n }\n\n const getRendererAction = () => renderer().getAction?.(headerRendererContext) ?? getDefaultToolAction(toolName())\n const headerOutputChrome = createMemo(() => renderer().getOutputChrome?.(headerRendererContext) ?? {})\n\n\n const renderToolTitle = () => {\n const state = toolState()\n const currentTool = toolName()\n\n if (getCanonicalToolName(currentTool) !== \"task\") {\n if (!state || state.status === \"pending\") return getRendererAction()\n\n const stateTitle = typeof (state as { title?: string }).title === \"string\" ? (state as { title?: string }).title : undefined\n if (stateTitle && stateTitle.length > 0) {\n return stateTitle\n }\n\n const customTitle = renderer().getTitle?.(headerRendererContext)\n if (customTitle) return customTitle\n\n return getToolName(currentTool)\n }\n\n if (!state) return getRendererAction()\n if (state.status === \"pending\") return getRendererAction()\n\n const customTitle = renderer().getTitle?.(headerRendererContext)\n if (customTitle) return customTitle\n\n if (isToolStateRunning(state) && state.title) {\n return state.title\n }\n\n if (isToolStateCompleted(state) && state.title) {\n return state.title\n }\n\n return getToolName(currentTool)\n }\n\n const toolTypeLabel = createMemo(() => toolName())\n const renderedToolTypeLabel = createMemo(() => limitToolTitleForRender(toolTypeLabel()))\n\n const headerTitleDetail = createMemo(() => getToolTitleDetail(renderToolTitle(), toolName()))\n\n const headerText = createMemo(() => {\n // Keep this as a memo so copy always matches what's rendered.\n const typeLabel = toolTypeLabel()\n const detail = headerTitleDetail()\n return [typeLabel, detail].filter(Boolean).join(\" \")\n })\n const renderedHeaderTitleDetail = createMemo(() => limitToolTitleForRender(headerTitleDetail()))\n\n const headerCopyText = () => headerOutputChrome().copyText || headerOutputChrome().getCopyText?.() || \"\"\n const canCopyHeaderOutput = () => headerOutputChrome().hasCopyText ?? Boolean(headerOutputChrome().copyText || headerOutputChrome().getCopyText)\n const speechText = createMemo(() =>\n buildToolSpeechText({\n title: headerText(),\n state: toolState(),\n t,\n }),\n )\n\n const speech = useSpeech({\n id: () => `${props.instanceId}:${props.sessionId}:${props.messageId ?? \"message\"}:${toolCallIdentifier()}`,\n text: speechText,\n })\n\n const canSpeakToolCall = () => speechText().trim().length > 0 && speech.canUseSpeech()\n\n const handleCopyHeader = async (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n const text = headerCopyText()\n if (!text) return\n await copyToClipboard(text)\n }\n\n const buildActionMenuItems = (includePrimaryActions = false): ActionOverflowMenuItem[] => {\n const items: ActionOverflowMenuItem[] = []\n\n if (hasToolInput()) {\n items.push({\n key: \"toggle-input\",\n label: isToolInputVisible() ? t(\"toolCall.header.hideInputTitle\") : t(\"toolCall.header.showInputTitle\"),\n icon: <ArrowRightSquare class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />,\n onSelect: () => {\n if (!expanded()) toggle()\n const currentlyVisible = isToolInputVisible()\n setToolInputVisibilityOverride(currentlyVisible ? \"hidden\" : \"expanded\")\n },\n })\n }\n\n if (includePrimaryActions) {\n if (canCopyHeaderOutput()) {\n items.push({\n key: \"copy\",\n label: t(\"toolCall.header.copyOutputTitle\"),\n icon: <Copy class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />,\n onSelect: async () => {\n const text = headerCopyText()\n if (!text) return\n await copyToClipboard(text)\n },\n })\n }\n\n if (canSpeakToolCall()) {\n items.push({\n key: \"speak\",\n label: speech.buttonTitle(),\n icon: <Volume2 class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />,\n onSelect: () => void speech.toggle(),\n })\n }\n }\n\n items.push(...(props.headerMenuItems?.() ?? []))\n\n return items\n }\n\n // Memoized so tool-state events do not rebuild the item array (and its icon\n // DOM) for every subscriber: re-evaluating on each store update would remount\n // every header action through <For>.\n const secondaryActionItems = createMemo(() => buildActionMenuItems(false))\n const overflowEligibleItems = createMemo(() => buildActionMenuItems(true))\n\n const status = () => toolState()?.status || \"\"\n\n return (\n <Show when={isToolVisible()}>\n <div\n\n ref={(element) => {\n setToolCallRootEl(element || undefined)\n }}\n class={`tool-call ${combinedStatusClass()}`}\n data-part-type=\"tool\"\n data-tool-name={toolName()}\n data-instance-id={props.instanceId}\n data-session-id={props.sessionId}\n data-message-id={props.messageId}\n data-part-id={toolCallIdentifier()}\n >\n <Show when={!hasPendingForm()}>\n <div class=\"tool-call-header\" ref={observeActionOverflow} data-action-overflow={overflowEligibleItems().length >= 2 ? \"true\" : undefined}>\n <button\n type=\"button\"\n class=\"tool-call-header-toggle\"\n onClick={toggle}\n aria-expanded={expanded()}\n >\n <ChevronRight class=\"tool-call-disclosure disclosure-chevron\" aria-hidden=\"true\" />\n <span class=\"tool-call-summary\" ref={observeToolStatusCompaction}>\n <span class=\"tool-call-summary-type\">{renderedToolTypeLabel()}</span>\n <Show when={renderedHeaderTitleDetail()}>\n {(detail) => <span class=\"tool-call-summary-title\">{detail()}</span>}\n </Show>\n <ToolStatusIndicator status={status} t={t} />\n <PartDuration\n startedAt={getPartStartedAt(toolCallMemo() as any)}\n endedAt={status() === \"completed\" || status() === \"error\" ? getPartEndedAt(toolCallMemo() as any) : undefined}\n running={status() === \"running\"}\n />\n </span>\n </button>\n\n <Show when={canCopyHeaderOutput()}>\n <button\n type=\"button\"\n class=\"tool-call-header-icon-button tool-call-header-copy\"\n onClick={handleCopyHeader}\n aria-label={t(\"toolCall.header.copyOutputAriaLabel\")}\n title={t(\"toolCall.header.copyOutputTitle\")}\n >\n <Copy class=\"w-3.5 h-3.5\" aria-hidden=\"true\" />\n </button>\n </Show>\n\n <Show when={canSpeakToolCall()}>\n <SpeechActionButton\n class=\"tool-call-header-icon-button tool-call-header-copy\"\n onClick={() => void speech.toggle()}\n title={speech.buttonTitle()}\n isLoading={speech.isLoading()}\n isPlaying={speech.isPlaying()}\n />\n </Show>\n\n <Show when={props.headerAction}>\n {(action) => <span class=\"tool-call-header-action\">{action()}</span>}\n </Show>\n\n <For each={secondaryActionItems()}>\n {(item) => (\n <button\n type=\"button\"\n class=\"tool-call-header-icon-button tool-call-header-copy\"\n disabled={item.disabled}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n void item.onSelect()\n }}\n onPointerEnter={() => item.onMouseEnter?.()}\n onPointerLeave={() => item.onMouseLeave?.()}\n aria-label={item.label}\n title={item.label}\n >\n {item.icon}\n </button>\n )}\n </For>\n <ActionOverflowMenu\n items={overflowEligibleItems()}\n label={t(\"messageItem.actions.more\")}\n triggerClass=\"tool-call-header-icon-button tool-call-header-copy action-overflow-narrow\"\n minItems={2}\n />\n </div>\n </Show>\n\n <Show when={!hasPendingForm() && expanded()}>\n <ToolCallDetails\n toolCallMemo={toolCallMemo}\n toolState={toolState}\n toolName={toolName}\n toolCallIdentifier={toolCallIdentifier}\n instanceId={props.instanceId}\n sessionId={props.sessionId}\n isActive={props.isActive}\n messageId={props.messageId}\n messageVersion={props.messageVersion}\n partVersion={props.partVersion}\n onContentRendered={props.onContentRendered}\n preferences={preferences}\n setDiffViewMode={setDiffViewMode}\n isDark={isDark}\n t={t}\n store={store}\n pendingPermission={pendingPermission}\n isPermissionActive={isPermissionActive}\n hasToolInput={hasToolInput}\n isToolInputVisible={isToolInputVisible}\n toolInput={toolInput}\n inputSectionExpanded={inputSectionExpanded}\n outputSectionExpanded={outputSectionExpanded}\n outputWrapEnabled={outputWrapEnabled}\n toggleOutputWrap={toggleOutputWrap}\n toggleInputSection={toggleInputSection}\n toggleOutputSection={toggleOutputSection}\n toolCallRootEl={toolCallRootEl}\n scrollTopSnapshot={scrollTopSnapshot}\n setScrollTopSnapshot={setScrollTopSnapshot}\n />\n </Show>\n \n <Show when={!hasPendingForm() && (diagnosticsView().entries.length > 0 || diagnosticsView().truncated) && diagnosticsVisibility() !== \"hidden\"}>\n\n {renderDiagnosticsSection(\n t,\n diagnosticsView(),\n diagnosticsExpanded(),\n () => setDiagnosticsOverride((prev) => {\n const current = prev === undefined ? diagnosticsDefaultExpanded() : prev\n return !current\n }),\n diagnosticFileName(diagnosticsView().entries),\n )}\n </Show>\n\n </div>\n </Show>\n )\n}\n"],"file":"assets/tool-call-C9ux0znU.js"}