@neuralnomads/codenomad-dev 0.20.0-dev-20260927-a77e37ef → 0.20.0-dev-20260929-0b348e86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/public/assets/{App-Bt-tnQXl.js → App-CH6cfB0g.js} +8 -8
- package/public/assets/{App-Bt-tnQXl.js.map → App-CH6cfB0g.js.map} +1 -1
- package/public/assets/{FilesTab-fonqwqxm.js → FilesTab-D8siBvjz.js} +2 -2
- package/public/assets/{FilesTab-fonqwqxm.js.map → FilesTab-D8siBvjz.js.map} +1 -1
- package/public/assets/{GitChangesTab-DsU2QupN.js → GitChangesTab-vQDkJfb1.js} +2 -2
- package/public/assets/{GitChangesTab-DsU2QupN.js.map → GitChangesTab-vQDkJfb1.js.map} +1 -1
- package/public/assets/{SplitFilePanel-DVyHD97U.js → SplitFilePanel-45-ssHhd.js} +2 -2
- package/public/assets/{SplitFilePanel-DVyHD97U.js.map → SplitFilePanel-45-ssHhd.js.map} +1 -1
- package/public/assets/{StatusTab-BYOUdsmS.js → StatusTab-CUlz3uGG.js} +2 -2
- package/public/assets/{StatusTab-BYOUdsmS.js.map → StatusTab-CUlz3uGG.js.map} +1 -1
- package/public/assets/{align-justify-DmcKEWsB.js → align-justify-DjlaBdyk.js} +2 -2
- package/public/assets/{align-justify-DmcKEWsB.js.map → align-justify-DjlaBdyk.js.map} +1 -1
- package/public/assets/{bundle-full-CV_LTEPl.js → bundle-full-DpHg2UyZ.js} +2 -2
- package/public/assets/{bundle-full-CV_LTEPl.js.map → bundle-full-DpHg2UyZ.js.map} +1 -1
- package/public/assets/{client-state-9tEzHtfW.js → client-state-C2XNu_km.js} +2 -2
- package/public/assets/{client-state-9tEzHtfW.js.map → client-state-C2XNu_km.js.map} +1 -1
- package/public/assets/{diff-viewer-CXCXiyRO.js → diff-viewer-CiYhl2x9.js} +2 -2
- package/public/assets/{diff-viewer-CXCXiyRO.js.map → diff-viewer-CiYhl2x9.js.map} +1 -1
- package/public/assets/{index-CuhtAbYJ.js → index-6oDOgk2Z.js} +3 -3
- package/public/assets/index-6oDOgk2Z.js.map +1 -0
- package/public/assets/{index-Ropj5M3p.js → index-B4_MU-br.js} +2 -2
- package/public/assets/index-B4_MU-br.js.map +1 -0
- package/public/assets/{index-DqE-g5em.js → index-BaZoOnmA.js} +2 -2
- package/public/assets/{index-DqE-g5em.js.map → index-BaZoOnmA.js.map} +1 -1
- package/public/assets/{index-B-_YmFJc.js → index-C9fWE_Zp.js} +2 -2
- package/public/assets/index-C9fWE_Zp.js.map +1 -0
- package/public/assets/{index-XQu8RsTR.js → index-CLLdccpq.js} +2 -2
- package/public/assets/index-CLLdccpq.js.map +1 -0
- package/public/assets/{index-97B_EqpY.js → index-CRYXivNH.js} +2 -2
- package/public/assets/index-CRYXivNH.js.map +1 -0
- package/public/assets/{index-CDY1e4Uc.js → index-CVF0ij-F.js} +2 -2
- package/public/assets/{index-CDY1e4Uc.js.map → index-CVF0ij-F.js.map} +1 -1
- package/public/assets/{index-DY9ZO9ld.js → index-CaF2oDiU.js} +2 -2
- package/public/assets/{index-DY9ZO9ld.js.map → index-CaF2oDiU.js.map} +1 -1
- package/public/assets/index-DT_2SeHL.css +1 -0
- package/public/assets/{index-CvKnyKel.js → index-Do13J2Ow.js} +2 -2
- package/public/assets/index-Do13J2Ow.js.map +1 -0
- package/public/assets/{index-DX4zzTPL.js → index-DuOitl8E.js} +2 -2
- package/public/assets/{index-DX4zzTPL.js.map → index-DuOitl8E.js.map} +1 -1
- package/public/assets/{index-C5ZxyV3U.js → index-bDfFMW09.js} +2 -2
- package/public/assets/index-bDfFMW09.js.map +1 -0
- package/public/assets/{index-QXZuSZ1s.js → index-v8DVuyeN.js} +2 -2
- package/public/assets/index-v8DVuyeN.js.map +1 -0
- package/public/assets/{loading-DMhZHPMZ.js → loading-Cf2WxCXs.js} +2 -2
- package/public/assets/{loading-DMhZHPMZ.js.map → loading-Cf2WxCXs.js.map} +1 -1
- package/public/assets/main-C6k-tEZT.js +43 -0
- package/public/assets/main-C6k-tEZT.js.map +1 -0
- package/public/assets/{markdown-ChsQ8753.js → markdown-UiScYuQW.js} +4 -4
- package/public/assets/{markdown-ChsQ8753.js.map → markdown-UiScYuQW.js.map} +1 -1
- package/public/assets/{startup-state-settings-card-DlwE2O3S.js → startup-state-settings-card-DVUiMY1X.js} +2 -2
- package/public/assets/{startup-state-settings-card-DlwE2O3S.js.map → startup-state-settings-card-DVUiMY1X.js.map} +1 -1
- package/public/assets/{terminal-square-Br2FaCdg.js → terminal-square-DiZ6HdRj.js} +2 -2
- package/public/assets/{terminal-square-Br2FaCdg.js.map → terminal-square-DiZ6HdRj.js.map} +1 -1
- package/public/assets/{tool-call-DNxCNLt7.js → tool-call-C3mOLsxT.js} +4 -4
- package/public/assets/{tool-call-DNxCNLt7.js.map → tool-call-C3mOLsxT.js.map} +1 -1
- package/public/assets/{unified-picker-CPPucpt3.js → unified-picker-CQHMwv72.js} +2 -2
- package/public/assets/{unified-picker-CPPucpt3.js.map → unified-picker-CQHMwv72.js.map} +1 -1
- package/public/assets/{wrap-text-BJW9yImb.js → wrap-text-DZtPfwI6.js} +2 -2
- package/public/assets/{wrap-text-BJW9yImb.js.map → wrap-text-DZtPfwI6.js.map} +1 -1
- package/public/index.html +3 -3
- package/public/loading.html +3 -3
- package/public/sw.js +1 -1
- package/public/sw.js.map +1 -1
- package/public/assets/index-97B_EqpY.js.map +0 -1
- package/public/assets/index-B-_YmFJc.js.map +0 -1
- package/public/assets/index-C5ZxyV3U.js.map +0 -1
- package/public/assets/index-CuhtAbYJ.js.map +0 -1
- package/public/assets/index-CvKnyKel.js.map +0 -1
- package/public/assets/index-NCKXobfr.css +0 -1
- package/public/assets/index-QXZuSZ1s.js.map +0 -1
- package/public/assets/index-Ropj5M3p.js.map +0 -1
- package/public/assets/index-XQu8RsTR.js.map +0 -1
- package/public/assets/main-Y9fQI3c9.js +0 -43
- package/public/assets/main-Y9fQI3c9.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["iconNode","d","key","Hourglass","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","limitToolOutputForRender","size","disableHighlight","renderedFile","labelBase","number","patch","_el$16","_tmpl$6","trim","limitToolTitleForRender","cacheKey","_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","StreamingAnsiContent","preRef","createEffect","updateMode","html","chunk","onCleanup","_ref$","_$use","createAnsiContentRenderer","params","runningAnsiRenderer","runningAnsiSource","registerTracked","scrollHelpers","registerContainer","registerUntracked","disableTracking","getMode","version","partVersion","String","renderAnsiContent","options","messageClass","cacheHandle","variant","ansiRunningCache","ansiFinalCache","cached","get","mode","isRunningVariant","disableScrollTracking","registerRef","nextCache","text","appendedHtml","set","detectedAnsi","ansiToHtml","requireAnsi","_$addEventListener","handleScroll","renderSentinel","RunningBashOutput","pendingRenderNotificationFrame","updater","notifyContentRendered","onContentRendered","requestAnimationFrame","cancelAnimationFrame","restoreAfterRender","event","_ref$2","FinalAnsiOutput","_ref$3","getBashCopyText","input","command","outputResult","formatUnknownForCopy","isToolStateRunning","isToolStateError","join","BashToolBody","joinedContent","current","formatUnknownForRender","renderedContent","finalMarkdown","ensureMarkdownContent","finalAnsiHtml","_$memo","bashRenderer","getBashToolSearchText","tGlobal","description","timeout","baseTitle","timeoutLabel","getCopyText","hasCopyText","defaultRenderer","getDefaultToolSearchText","primaryOutput","preview","result","outputWrapEnabled","wrap","editRenderer","getDiffToolSearchText","getRelativePath","toolName","diffPayload","extractDiffPayload","invalidRenderer","context","patchRenderer","questionRenderer","getQuestionToolSearchText","getReadPath","readRenderer","getReadToolSearchText","offset","detailParts","push","toolLabel","inferLanguageFromPath","searchRenderer","pattern","skillRenderer","webfetchRenderer","getWebfetchToolSearchText","url","writeRenderer","getWriteToolSearchText","contentValue","renderers","todoRenderer","taskRenderer","resolveToolRenderer","getToolRegistryEntry","LazyToolCallDiffViewer","lazy","__vitePreload","then","module","default","ToolCallDiffViewer","CachedDiffMarkup","onMount","onRendered","createDiffContentRenderer","compactDiffQuery","useMediaQuery","mobileModeOverride","setMobileModeOverride","createSignal","wordWrapEnabled","setWordWrapEnabled","renderDiffContent","renderedDiffText","diffWasTruncated","shouldRenderDiffPayloadAsPlainText","toolbarLabel","permissionDiffCache","diffCache","preferredMode","preferences","diffViewMode","effectiveMode","shouldWrap","themeKey","isDark","baseEntryParams","cacheEntryParams","suffix","cacheId","currentMode","currentWrap","cachedHtml","getCacheEntry","theme","handleModeChange","setDiffViewMode","nextViewMode","viewModeTitle","wordWrapTitle","copyPatchTitle","copyFullDiff","copiedDiff","copyToClipboard","onFullDiffAccess","handleDiffRendered","handleScrollRendered","$$click","Copy","_c$","Split","AlignJustify","_v$3","a","enabled","WrapText","_v$4","_v$5","_v$6","Suspense","_el$1","_v$7","_v$8","_v$9","_v$0","o","_$delegateEvents","createMarkdownContentRenderer","renderMarkdownContent","wrapEnabled","markdownPart","id","partId","type","handleMarkdownRendered","Markdown","part","instanceId","sessionId","defaultCodeBlockWrap","OutputImage","useI18n","source","toolImageSource","failedSource","setFailedSource","addEventListener","mime","ToolOutputImages","images","isToolImageContent","log","getLogger","TOOL_CALL_CACHE_SCOPE","makeRenderCacheKey","toolCallId","messageId","ToolStatusIndicator","resolvedStatus","isVisible","Loader2","Check","XCircle","_$setStyleProperty","i","n","ToolCallDetails","messageVersionAccessor","messageVersion","partVersionAccessor","cacheContext","toolCallIdentifier","toolCallMemo","cacheVersion","createVariantCache","useGlobalCache","scope","resolvedVariant","permissionDetails","pendingPermission","permission","activePermissionKey","isPermissionActive","permissionSubmitting","setPermissionSubmitting","permissionApprovalBlocked","setPermissionApprovalBlocked","permissionError","setPermissionError","followScroll","createFollowScroll","getScrollTopSnapshot","scrollTopSnapshot","setScrollTopSnapshot","sentinelClassName","toolCallRootEl","scrollIntoView","block","behavior","handlePermissionResponse","response","getPermissionSessionId","Error","sendPermissionResponse","error","handler","isTextInputFocused","preventDefault","document","removeEventListener","active","activeElement","tagName","hasAttribute","toolInputDisplay","toolInput","inputSectionExpanded","formatted","formatToolInputForRender","renderOutputMarkdownContent","rendererContext","toolCall","isActive","renderAnsi","renderToolCall","ToolCall","forceCollapsed","previousPartVersion","autoScroll","renderToolBody","body","outputChrome","resolveOutputCopyText","canCopyOutput","renderError","copyIoText","renderPermissionBlock","PermissionToolBlock","submitting","fallbackSessionId","onApprovalBlockedChange","onRespond","shouldShowPendingMessage","stopPropagation","copyToolInput","formatToolInputForCopy","outputWrapTitle","renderIoHeader","onToggle","ChevronRight","title","actions","onCopy","copyAriaLabel","copyTitle","expanded","shouldUseToolHeaderOutputControls","renderOutputRail","_tmpl$7","toggleOutputWrap","_v$1","_v$10","_v$11","renderOutputIoBody","showPending","_el$17","_tmpl$9","_el$18","_tmpl$8","_el$19","_el$20","renderCurrentOutputIoBody","renderToolOutputBody","chrome","_el$21","_tmpl$0","_el$22","_tmpl$1","_el$23","_el$24","_el$25","_el$26","_tmpl$12","isToolInputVisible","hasToolInput","_el$27","_tmpl$11","_el$28","_el$29","_el$31","toggleInputSection","_el$30","_tmpl$10","outputSectionExpanded","toggleOutputSection","_el$32","_tmpl$13","useConfig","useTheme","snapshotPart","structuredClone","unwrap","renderPart","setRenderPart","createStore","on","reconcile","defer","store","messageStoreBus","getOrCreate","activeRequest","activeInterruption","permissionState","getPermissionState","pendingForm","getFormQueue","find","form","sessionID","target","resolveFormToolTarget","diagnosticsVisibility","diagnosticsExpansion","diagnosticsDefaultExpanded","toolVisibility","resolveToolVisibility","defaultExpandedForTool","resolveToolExpansionDefault","userExpanded","setUserExpanded","setOutputWrapEnabled","toolInputsVisibility","toolInputVisibilityOverride","setToolInputVisibilityOverride","effectiveToolInputsVisibility","inputDefaultExpanded","inputSectionOverride","setInputSectionOverride","outputSectionOverride","setOutputSectionOverride","override","pending","kind","hasPendingForm","isToolVisible","setToolCallRootEl","diagnosticsOverride","setDiagnosticsOverride","diagnosticsExpanded","diagnosticsView","extractDiagnosticsView","prev","statusClass","combinedStatusClass","base","toggle","renderMarkdownStub","renderAnsiStub","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","actionMenuItems","includePrimaryActions","items","ArrowRightSquare","onSelect","currentlyVisible","buttonTitle","Volume2","headerMenuItems","_el$33","_tmpl$16","_el$34","_tmpl$15","_el$35","_el$36","_el$37","observeActionOverflow","_el$39","_tmpl$17","_el$38","_tmpl$14","_v$12","_v$13","SpeechActionButton","onClick","isLoading","isPlaying","headerAction","_el$40","_tmpl$18","action","_el$41","item","onMouseLeave","onMouseEnter","_v$22","disabled","_v$23","_v$24","ActionOverflowMenu","triggerClass","minItems","_v$14","_v$15","renderDiagnosticsSection","diagnosticFileName","keyed","FormRequest","onReply","answer","sendFormReply","onCancel","sendFormCancel","_v$16","_v$17","_v$18","_v$19","_v$20","_v$21"],"ignoreList":[0],"sources":["../../../../../../node_modules/lucide-solid/dist/source/icons/hourglass.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/default.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-call/output-images.tsx","../../../components/tool-call.tsx"],"sourcesContent":["import Icon from '../Icon';\nconst iconNode = [\n ['path', { d: 'M5 22h14', key: 'ehvnwv' }],\n ['path', { d: 'M5 2h14', key: 'pdyrp9' }],\n [\n 'path',\n {\n d: 'M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22',\n key: '1d314k',\n },\n ],\n [\n 'path',\n { d: 'M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2', key: '1vvvr6' },\n ],\n];\nconst Hourglass = (props) => <Icon {...props} name=\"Hourglass\" iconNode={iconNode}/>;\nexport default Hourglass;\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\nexport function getApplyPatchRenderData(files: ApplyPatchFile[], fileLimit: number, characterLimit: number, sourceTruncated = false) {\n const rendered: Array<{ file: ApplyPatchFile; diffText: string }> = []\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, firstContent + remaining) : \"\"\n rendered.push({ file, diffText })\n characters += diffText.length\n if (probe.truncated || (firstContent >= 0 && fullDiff.length - firstContent > remaining)) 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, limitToolOutputForRender, 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: limitToolOutputForRender(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 },\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 { createEffect, onCleanup, type Accessor, type JSXElement } from \"solid-js\"\nimport type { RenderCache } from \"../../types/message\"\nimport { ansiToHtml, createAnsiStreamRenderer, hasAnsi } from \"../../lib/ansi\"\nimport { escapeHtml } from \"../../lib/text-render-utils\"\nimport type { AnsiRenderOptions, ToolScrollHelpers } from \"./types\"\nimport { limitToolOutputForRender } from \"./utils\"\n\ntype AnsiRenderCache = RenderCache & { hasAnsi: boolean }\n\ntype CacheHandle = {\n get<T>(): T | undefined\n set(value: unknown): void\n}\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\nfunction StreamingAnsiContent(props: {\n html: string\n htmlChunk?: string\n updateMode: \"replace\" | \"append\" | \"noop\"\n}) {\n let preRef: HTMLPreElement | undefined\n\n createEffect(() => {\n const element = preRef\n if (!element) return\n if (props.updateMode === \"noop\") return\n if (props.updateMode === \"append\") {\n if (element.innerHTML.length === 0) {\n element.innerHTML = props.html\n return\n }\n const chunk = props.htmlChunk ?? \"\"\n if (chunk.length > 0) {\n element.insertAdjacentHTML(\"beforeend\", chunk)\n }\n return\n }\n if (element.innerHTML !== props.html) {\n element.innerHTML = props.html\n }\n })\n\n onCleanup(() => {\n preRef = undefined\n })\n\n return <pre ref={preRef} class=\"tool-call-content tool-call-ansi\" dir=\"auto\" />\n}\n\nexport function createAnsiContentRenderer(params: {\n ansiRunningCache: CacheHandle\n ansiFinalCache: CacheHandle\n scrollHelpers: ToolScrollHelpers\n partVersion?: Accessor<number | undefined>\n}) {\n const runningAnsiRenderer = createAnsiStreamRenderer()\n let runningAnsiSource = \"\"\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 const getMode = () => {\n const version = params.partVersion?.()\n return typeof version === \"number\" ? String(version) : undefined\n }\n\n function renderAnsiContent(options: AnsiRenderOptions): JSXElement | null {\n if (!options.content) {\n return null\n }\n\n const content = limitToolOutputForRender(options.content)\n const size = options.size || \"default\"\n const messageClass = `message-text tool-call-markdown${size === \"large\" ? \" tool-call-markdown-large\" : \"\"}`\n const cacheHandle = options.variant === \"running\" ? params.ansiRunningCache : params.ansiFinalCache\n const cached = cacheHandle.get<AnsiRenderCache>()\n const mode = getMode()\n const isRunningVariant = options.variant === \"running\"\n const disableScrollTracking = !isRunningVariant\n const registerRef = disableScrollTracking ? registerUntracked : registerTracked\n let updateMode: \"replace\" | \"append\" | \"noop\" = \"replace\"\n let htmlChunk = \"\"\n\n let nextCache: AnsiRenderCache\n\n if (isRunningVariant) {\n const resetStreaming = !cached || !cached.text || !content.startsWith(cached.text) || cached.text !== runningAnsiSource\n\n if (resetStreaming) {\n updateMode = \"replace\"\n const detectedAnsi = hasAnsi(content)\n if (detectedAnsi) {\n runningAnsiRenderer.reset()\n const html = runningAnsiRenderer.render(content)\n nextCache = { text: content, html, mode, hasAnsi: true }\n } else {\n runningAnsiRenderer.reset()\n nextCache = { text: content, html: escapeHtml(content), mode, hasAnsi: false }\n }\n } else {\n const delta = content.slice(cached.text.length)\n if (delta.length === 0) {\n updateMode = \"noop\"\n nextCache = { ...cached, mode }\n } else if (!cached.hasAnsi && hasAnsi(delta)) {\n updateMode = \"replace\"\n runningAnsiRenderer.reset()\n const html = runningAnsiRenderer.render(content)\n nextCache = { text: content, html, mode, hasAnsi: true }\n } else if (cached.hasAnsi) {\n const appendedHtml = runningAnsiRenderer.render(delta)\n updateMode = \"append\"\n htmlChunk = appendedHtml\n nextCache = { text: content, html: `${cached.html}${appendedHtml}`, mode, hasAnsi: true }\n } else {\n updateMode = \"append\"\n htmlChunk = escapeHtml(delta)\n nextCache = { text: content, html: `${cached.html}${escapeHtml(delta)}`, mode, hasAnsi: false }\n }\n }\n\n runningAnsiSource = nextCache.text\n cacheHandle.set(nextCache)\n } else {\n if (cached && cached.text === content) {\n nextCache = { ...cached, mode }\n } else {\n const detectedAnsi = hasAnsi(content)\n const html = detectedAnsi ? ansiToHtml(content) : escapeHtml(content)\n nextCache = { text: content, html, mode, hasAnsi: detectedAnsi }\n cacheHandle.set(nextCache)\n }\n }\n\n if (options.requireAnsi && !nextCache.hasAnsi) {\n return null\n }\n\n return (\n <div class={messageClass} ref={registerRef} onScroll={disableScrollTracking ? undefined : params.scrollHelpers.handleScroll}>\n <StreamingAnsiContent html={nextCache.html} htmlChunk={htmlChunk} updateMode={updateMode} />\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n return { renderAnsiContent }\n}\n","import { Show, createEffect, createMemo, onCleanup, type Accessor } from \"solid-js\"\nimport type { ToolState } from \"../../../types/tool-state\"\nimport type { ToolRenderer, ToolScrollHelpers } from \"../types\"\nimport { ensureMarkdownContent, formatUnknownForCopy, formatUnknownForRender, getToolName, isToolStateCompleted, isToolStateError, isToolStateRunning, limitToolOutputForRender, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { createStableAnsiStreamUpdater } from \"../ansi-render\"\nimport { ansiToHtml, hasAnsi } from \"../../../lib/ansi\"\nimport { getBashToolSearchText } from \"../search-text\"\n\nfunction RunningBashOutput(props: {\n content: Accessor<string>\n scrollHelpers?: ToolScrollHelpers\n onContentRendered?: () => void\n}) {\n let preRef: HTMLPreElement | undefined\n let pendingRenderNotificationFrame: number | null = null\n const updater = createStableAnsiStreamUpdater()\n\n const notifyContentRendered = () => {\n if (!props.onContentRendered || typeof requestAnimationFrame !== \"function\") return\n if (pendingRenderNotificationFrame !== null) {\n cancelAnimationFrame(pendingRenderNotificationFrame)\n }\n pendingRenderNotificationFrame = requestAnimationFrame(() => {\n pendingRenderNotificationFrame = null\n props.onContentRendered?.()\n })\n }\n\n createEffect(() => {\n const element = preRef\n if (!element) return\n updater.update(element, props.content())\n props.scrollHelpers?.restoreAfterRender()\n notifyContentRendered()\n })\n\n onCleanup(() => {\n if (pendingRenderNotificationFrame !== null) {\n cancelAnimationFrame(pendingRenderNotificationFrame)\n pendingRenderNotificationFrame = null\n }\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 {props.scrollHelpers?.renderSentinel?.()}\n </div>\n )\n}\n\nfunction FinalAnsiOutput(props: {\n html: string\n scrollHelpers?: ToolScrollHelpers\n onContentRendered?: () => void\n}) {\n let pendingRenderNotificationFrame: number | null = null\n\n const notifyContentRendered = () => {\n if (!props.onContentRendered || typeof requestAnimationFrame !== \"function\") return\n if (pendingRenderNotificationFrame !== null) {\n cancelAnimationFrame(pendingRenderNotificationFrame)\n }\n pendingRenderNotificationFrame = requestAnimationFrame(() => {\n pendingRenderNotificationFrame = null\n props.onContentRendered?.()\n })\n }\n\n createEffect(() => {\n props.html\n props.scrollHelpers?.restoreAfterRender()\n notifyContentRendered()\n })\n\n onCleanup(() => {\n if (pendingRenderNotificationFrame !== null) {\n cancelAnimationFrame(pendingRenderNotificationFrame)\n pendingRenderNotificationFrame = null\n }\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 </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: { content: string }) => ReturnType<ToolRenderer[\"renderBody\"]>\n scrollHelpers?: ToolScrollHelpers\n onContentRendered?: () => void\n}) {\n const state = createMemo(() => props.toolState())\n\n const joinedContent = createMemo(() => {\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.length > 0 ? limitToolOutputForRender(`$ ${input.command}`) : \"\"\n const outputResult = formatUnknownForRender(\n isToolStateCompleted(current)\n ? current.output\n : (isToolStateRunning(current) || isToolStateError(current)) && metadata.output\n ? metadata.output\n : undefined,\n )\n return [command, outputResult?.text].filter(Boolean).join(\"\\n\")\n })\n const renderedContent = createMemo(() => limitToolOutputForRender(joinedContent()))\n\n const finalMarkdown = createMemo(() => {\n const current = state()\n const content = renderedContent()\n if (!current || current.status === \"pending\" || current.status === \"running\" || content.length === 0) {\n return null\n }\n if (hasAnsi(content)) {\n return null\n }\n return ensureMarkdownContent(content, \"bash\", true)\n })\n\n const finalAnsiHtml = createMemo(() => {\n const current = state()\n const content = renderedContent()\n if (!current || current.status === \"pending\" || current.status === \"running\" || content.length === 0) {\n return null\n }\n if (!hasAnsi(content)) {\n return null\n }\n return ansiToHtml(content)\n })\n\n return (\n <Show when={state() && joinedContent().length > 0}>\n <Show\n when={state()?.status === \"running\"}\n fallback={\n <Show when={finalAnsiHtml()} fallback={finalMarkdown() ? props.renderMarkdown({ content: finalMarkdown()! as string }) : null}>\n {(html) => (\n <FinalAnsiOutput html={html()} scrollHelpers={props.scrollHelpers} onContentRendered={props.onContentRendered} />\n )}\n </Show>\n }\n >\n <RunningBashOutput content={renderedContent} scrollHelpers={props.scrollHelpers} onContentRendered={props.onContentRendered} />\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, onContentRendered }) {\n return <BashToolBody toolState={toolState} renderMarkdown={renderMarkdown as any} scrollHelpers={scrollHelpers} onContentRendered={onContentRendered} />\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { ensureMarkdownContent, formatUnknownForCopy, formatUnknownForRender, isToolStateCompleted, isToolStateError, isToolStateRunning, readToolStatePayload } from \"../utils\"\nimport { getDefaultToolSearchText } from \"../search-text\"\n\nexport const defaultRenderer: ToolRenderer = {\n tools: [\"*\"],\n getSearchText: getDefaultToolSearchText,\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n\n const { metadata, input } = readToolStatePayload(state)\n const primaryOutput = isToolStateCompleted(state)\n ? state.output\n : (isToolStateRunning(state) || isToolStateError(state)) && metadata.output\n ? metadata.output\n : metadata.diff ?? metadata.preview ?? input.content\n\n if (primaryOutput === undefined || primaryOutput === null || primaryOutput === \"\" || (Array.isArray(primaryOutput) && primaryOutput.length === 0)) return undefined\n const result = formatUnknownForRender(primaryOutput)\n\n return {\n language: result?.language ?? \"text\",\n getCopyText: () => formatUnknownForCopy(primaryOutput)?.text ?? null,\n hasCopyText: true,\n wrapToggle: true,\n suppressInnerHeader: true,\n }\n },\n renderBody({ toolState, renderMarkdown, outputWrapEnabled }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n\n const { metadata, input } = readToolStatePayload(state)\n const primaryOutput = isToolStateCompleted(state)\n ? state.output\n : (isToolStateRunning(state) || isToolStateError(state)) && metadata.output\n ? metadata.output\n : metadata.diff ?? metadata.preview ?? input.content\n\n const result = formatUnknownForRender(primaryOutput)\n if (!result) return null\n\n const content = ensureMarkdownContent(result.text, result.language, true)\n if (!content) return null\n\n return renderMarkdown({ content, disableHighlight: state.status === \"running\", wrap: outputWrapEnabled?.() ?? true })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { ensureMarkdownContent, extractDiffPayload, getRelativePath, getToolName, isToolStateCompleted, limitToolOutputForRender, 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 const content = ensureMarkdownContent(value ? limitToolOutputForRender(value) : value, \"diff\", true)\n if (!content) return null\n\n return renderMarkdown({ content, 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 { ensureMarkdownContent, extractDiffPayload, getRelativePath, getToolName, isToolStateCompleted, limitToolOutputForRender, 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 const content = ensureMarkdownContent(value ? limitToolOutputForRender(value) : value, \"diff\", true)\n if (!content) return null\n\n return renderMarkdown({ content, size: \"large\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { getQuestionToolSearchText } from \"../search-text\"\n\nexport const questionRenderer: ToolRenderer = {\n tools: [\"question\"],\n getSearchText: getQuestionToolSearchText,\n getAction: ({ t }) => 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() {\n // The question tool UI is rendered by ToolCall itself so\n // it can share the same layout for pending/completed.\n return null\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { ensureMarkdownContent, getRelativePath, getToolName, inferLanguageFromPath, limitToolOutputForRender, 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 const language = inferLanguageFromPath(getReadPath(input))\n const content = ensureMarkdownContent(preview ? limitToolOutputForRender(preview) : preview, language, true)\n if (!content) return null\n return renderMarkdown({ content, 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 { ensureMarkdownContent, formatUnknownForCopy, formatUnknownForRender, getToolName } from \"../utils\"\nimport { getDefaultToolSearchText } from \"../search-text\"\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 const content = ensureMarkdownContent(output, undefined, false)\n if (!content) return null\n return <div class=\"tool-call-skill-body\">{renderMarkdown({ content })}</div>\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { ensureMarkdownContent, formatUnknownForCopy, formatUnknownForRender, getToolName, 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) return null\n\n const content = ensureMarkdownContent(result.text, result.language, true)\n if (!content) return null\n\n return renderMarkdown({ content, disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { ensureMarkdownContent, getRelativePath, getToolName, inferLanguageFromPath, limitToolOutputForRender, 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 const content = ensureMarkdownContent(typeof contentValue === \"string\" ? limitToolOutputForRender(contentValue) : null, inferLanguageFromPath(filePath), true)\n if (!content) return null\n return renderMarkdown({ content, 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 { 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 { 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,\n glob: searchRenderer, grep: searchRenderer, todowrite: todoRenderer, task: taskRenderer,\n skill: skillRenderer, question: questionRenderer, invalid: invalidRenderer,\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, limitToolOutputForRender, shouldRenderDiffPayloadAsPlainText } from \"./utils\"\nimport { getCacheEntry } from \"../../lib/global-cache\"\nimport { copyToClipboard } from \"../../lib/clipboard\"\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 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 const renderedDiffText = limitToolOutputForRender(payload.diffText)\n const diffWasTruncated = 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 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={!diffWasTruncated}>\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 {diffWasTruncated ? (\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 {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 { Markdown } from \"../markdown\"\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 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 if (!options.content) {\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 if (shouldDeferMarkdown) {\n return (\n <div\n class={messageClass}\n ref={registerRef}\n onScroll={disableScrollTracking ? undefined : params.scrollHelpers.handleScroll}\n >\n <pre class=\"whitespace-pre-wrap break-words text-sm font-mono\" dir=\"auto\">{options.content}</pre>\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n const cacheKey = typeof options.cacheKey === \"string\" && options.cacheKey.length > 0 ? options.cacheKey : undefined\n const markdownPart = (): TextPart => ({\n id: cacheKey ? `${params.partId()}:${cacheKey}` : params.partId(),\n type: \"text\",\n text: options.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 onRendered={handleMarkdownRendered}\n />\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n return { renderMarkdownContent }\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, sendFormCancel, sendFormReply, sendPermissionResponse } from \"../stores/instances\"\nimport { getFormQueue } from \"../stores/forms\"\nimport { copyToClipboard } from \"../lib/clipboard\"\nimport type { PermissionRequest } from \"../types/permission\"\nimport { getPermissionSessionId } from \"../types/permission\"\nimport { useI18n } from \"../lib/i18n\"\nimport { resolveToolRenderer } from \"./tool-call/renderers\"\nimport { getCanonicalToolName, resolveToolExpansionDefault, resolveToolVisibility } from \"./tool-call/tool-registry\"\nimport { PermissionToolBlock } from \"./tool-call/permission-block\"\nimport FormRequest from \"./form-request\"\nimport { resolveFormToolTarget } from \"./form-request-tool-target\"\nimport { createAnsiContentRenderer } from \"./tool-call/ansi-render\"\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 ensureMarkdownContent,\n formatToolInputForCopy,\n formatToolInputForRender,\n getToolName,\n getToolTitleDetail,\n isToolStateCompleted,\n isToolStateRunning,\n limitToolOutputForRender,\n limitToolTitleForRender,\n TOOL_OUTPUT_RENDER_CHARACTER_LIMIT,\n getDefaultToolAction,\n readToolStatePayload,\n} from \"./tool-call/utils\"\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 SpeechActionButton from \"./speech-action-button\"\nimport { ToolOutputImages } from \"./tool-call/output-images\"\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\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()} 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 | (() => string), version?: () => string) =>\n useGlobalCache({\n instanceId: () => props.instanceId,\n sessionId: () => props.sessionId,\n scope: TOOL_CALL_CACHE_SCOPE,\n cacheId: () => {\n const context = cacheContext()\n const resolvedVariant = typeof variant === \"function\" ? variant() : variant\n return makeRenderCacheKey(context.toolCallId || undefined, context.messageId, context.partId, resolvedVariant)\n },\n version: () => (version ? version() : cacheVersion()),\n })\n\n const diffCache = createVariantCache(\"diff\")\n const permissionDiffCache = createVariantCache(\"permission-diff\")\n const ansiRunningCache = createVariantCache(\"ansi-running\", () => \"running\")\n const ansiFinalCache = createVariantCache(\"ansi-final\")\n\n const permissionDetails = createMemo(() => props.pendingPermission()?.permission)\n\n const activePermissionKey = createMemo(() => {\n const permission = permissionDetails()\n return permission && props.isPermissionActive() ? permission.id : \"\"\n })\n\n const [permissionSubmitting, setPermissionSubmitting] = createSignal(false)\n const [permissionApprovalBlocked, setPermissionApprovalBlocked] = createSignal(true)\n const [permissionError, setPermissionError] = createSignal<string | null>(null)\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 createEffect(() => {\n const permission = permissionDetails()\n if (!permission) {\n setPermissionSubmitting(false)\n setPermissionError(null)\n } else {\n setPermissionError(null)\n }\n })\n\n createEffect(() => {\n const activeKey = activePermissionKey()\n if (!activeKey) return\n requestAnimationFrame(() => {\n props.toolCallRootEl()?.scrollIntoView({ block: \"center\", behavior: \"smooth\" })\n })\n })\n\n async function handlePermissionResponse(permission: PermissionRequest, response: \"once\" | \"always\" | \"reject\", message?: string) {\n if (!permission) return\n setPermissionSubmitting(true)\n setPermissionError(null)\n try {\n const sessionId = getPermissionSessionId(permission)\n if (!sessionId) throw new Error(\"Permission request is missing sessionID\")\n await sendPermissionResponse(props.instanceId, sessionId, permission.id, response, message)\n } catch (error) {\n log.error(\"Failed to send permission response\", error)\n setPermissionError(error instanceof Error ? error.message : props.t(\"toolCall.permission.errors.unableToUpdate\"))\n } finally {\n setPermissionSubmitting(false)\n }\n }\n\n createEffect(() => {\n const activeKey = activePermissionKey()\n if (!activeKey) return\n const handler = (event: KeyboardEvent) => {\n if (isTextInputFocused()) return\n const permission = permissionDetails()\n if (!permission || !props.isPermissionActive()) return\n if (permissionApprovalBlocked()) return\n if (event.key === \"Enter\") {\n event.preventDefault()\n void handlePermissionResponse(permission, \"once\")\n } else if (event.key === \"a\" || event.key === \"A\") {\n event.preventDefault()\n void handlePermissionResponse(permission, \"always\")\n }\n }\n document.addEventListener(\"keydown\", handler)\n onCleanup(() => document.removeEventListener(\"keydown\", handler))\n })\n\n function isTextInputFocused() {\n const active = document.activeElement\n return (\n active?.tagName === \"TEXTAREA\" ||\n active?.tagName === \"INPUT\" ||\n (active?.hasAttribute(\"contenteditable\") ?? false)\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) return null\n const language = formatted.language ?? \"text\"\n const content = ensureMarkdownContent(formatted.text, language, true)\n return content ? { content, language } : null\n })\n\n const renderer = createMemo(() => resolveToolRenderer(props.toolName()))\n\n const { renderAnsiContent } = createAnsiContentRenderer({\n ansiRunningCache,\n ansiFinalCache,\n scrollHelpers,\n partVersion: partVersionAccessor,\n })\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 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 isDark: props.isDark,\n scrollHelpers,\n handleScrollRendered,\n onContentRendered: props.onContentRendered,\n })\n\n const renderOutputMarkdownContent: ToolRendererContext[\"renderMarkdown\"] = (options) =>\n renderMarkdownContent({ ...options, content: limitToolOutputForRender(options.content), 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 renderMarkdown: renderOutputMarkdownContent,\n renderAnsi: renderAnsiContent,\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 <strong>{props.t(\"toolCall.error.label\")}</strong> {limitToolOutputForRender(state.error)}\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 }\n return null\n }\n\n const renderPermissionBlock = () => (\n <PermissionToolBlock\n permission={permissionDetails}\n active={props.isPermissionActive}\n submitting={permissionSubmitting}\n error={permissionError}\n renderDiff={renderDiffContent}\n fallbackSessionId={() => props.sessionId}\n onApprovalBlockedChange={setPermissionApprovalBlocked}\n onRespond={(permission, sessionId, response, message) => void handlePermissionResponse(permission, response, message)}\n />\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, 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 {renderPermissionBlock()}\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(() => toolVisibility() !== \"hidden\" || isPermissionActive() || hasPendingForm())\n\n const expanded = () => {\n if (isPermissionActive() || hasPendingForm()) return true\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 if (isPermissionActive() || hasPendingForm()) return true\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 const permission = pendingPermission()\n if (permission?.active) {\n return\n }\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 renderAnsiStub: ToolRendererContext[\"renderAnsi\"] = () => 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 renderMarkdown: renderMarkdownStub,\n renderAnsi: renderAnsiStub,\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 actionMenuItems = (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 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={actionMenuItems(true).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\">\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 </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={actionMenuItems()}>\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={actionMenuItems(true)}\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 <Show keyed when={pendingForm()}>\n {(form) => (\n <FormRequest\n form={form}\n onReply={(answer) => sendFormReply(props.instanceId, form.id, answer)}\n onCancel={() => sendFormCancel(props.instanceId, form.id)}\n />\n )}\n </Show>\n </div>\n </Show>\n )\n}\n"],"file":"assets/tool-call-DNxCNLt7.js"}
|
|
1
|
+
{"version":3,"mappings":"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","names":["iconNode","d","key","Hourglass","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","limitToolOutputForRender","size","disableHighlight","renderedFile","labelBase","number","patch","_el$16","_tmpl$6","trim","limitToolTitleForRender","cacheKey","_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","StreamingAnsiContent","preRef","createEffect","updateMode","html","chunk","onCleanup","_ref$","_$use","createAnsiContentRenderer","params","runningAnsiRenderer","runningAnsiSource","registerTracked","scrollHelpers","registerContainer","registerUntracked","disableTracking","getMode","version","partVersion","String","renderAnsiContent","options","messageClass","cacheHandle","variant","ansiRunningCache","ansiFinalCache","cached","get","mode","isRunningVariant","disableScrollTracking","registerRef","nextCache","text","appendedHtml","set","detectedAnsi","ansiToHtml","requireAnsi","_$addEventListener","handleScroll","renderSentinel","RunningBashOutput","pendingRenderNotificationFrame","updater","notifyContentRendered","onContentRendered","requestAnimationFrame","cancelAnimationFrame","restoreAfterRender","event","_ref$2","FinalAnsiOutput","_ref$3","getBashCopyText","input","command","outputResult","formatUnknownForCopy","isToolStateRunning","isToolStateError","join","BashToolBody","joinedContent","current","formatUnknownForRender","renderedContent","finalMarkdown","ensureMarkdownContent","finalAnsiHtml","_$memo","bashRenderer","getBashToolSearchText","tGlobal","description","timeout","baseTitle","timeoutLabel","getCopyText","hasCopyText","defaultRenderer","getDefaultToolSearchText","primaryOutput","preview","result","outputWrapEnabled","wrap","editRenderer","getDiffToolSearchText","getRelativePath","toolName","diffPayload","extractDiffPayload","invalidRenderer","context","patchRenderer","questionRenderer","getQuestionToolSearchText","getReadPath","readRenderer","getReadToolSearchText","offset","detailParts","push","toolLabel","inferLanguageFromPath","searchRenderer","pattern","skillRenderer","webfetchRenderer","getWebfetchToolSearchText","url","writeRenderer","getWriteToolSearchText","contentValue","renderers","todoRenderer","taskRenderer","resolveToolRenderer","getToolRegistryEntry","LazyToolCallDiffViewer","lazy","__vitePreload","then","module","default","ToolCallDiffViewer","CachedDiffMarkup","onMount","onRendered","createDiffContentRenderer","compactDiffQuery","useMediaQuery","mobileModeOverride","setMobileModeOverride","createSignal","wordWrapEnabled","setWordWrapEnabled","renderDiffContent","renderedDiffText","diffWasTruncated","shouldRenderDiffPayloadAsPlainText","toolbarLabel","permissionDiffCache","diffCache","preferredMode","preferences","diffViewMode","effectiveMode","shouldWrap","themeKey","isDark","baseEntryParams","cacheEntryParams","suffix","cacheId","currentMode","currentWrap","cachedHtml","getCacheEntry","theme","handleModeChange","setDiffViewMode","nextViewMode","viewModeTitle","wordWrapTitle","copyPatchTitle","copyFullDiff","copiedDiff","copyToClipboard","onFullDiffAccess","handleDiffRendered","handleScrollRendered","$$click","Copy","_c$","Split","AlignJustify","_v$3","a","enabled","WrapText","_v$4","_v$5","_v$6","Suspense","_el$1","_v$7","_v$8","_v$9","_v$0","o","_$delegateEvents","createMarkdownContentRenderer","renderMarkdownContent","wrapEnabled","markdownPart","id","partId","type","handleMarkdownRendered","Markdown","part","instanceId","sessionId","defaultCodeBlockWrap","OutputImage","useI18n","source","toolImageSource","failedSource","setFailedSource","addEventListener","mime","ToolOutputImages","images","isToolImageContent","log","getLogger","TOOL_CALL_CACHE_SCOPE","makeRenderCacheKey","toolCallId","messageId","ToolStatusIndicator","resolvedStatus","isVisible","Loader2","Check","XCircle","_$setStyleProperty","i","n","ToolCallDetails","messageVersionAccessor","messageVersion","partVersionAccessor","cacheContext","toolCallIdentifier","toolCallMemo","cacheVersion","createVariantCache","useGlobalCache","scope","resolvedVariant","permissionDetails","pendingPermission","permission","activePermissionKey","isPermissionActive","permissionSubmitting","setPermissionSubmitting","permissionApprovalBlocked","setPermissionApprovalBlocked","permissionError","setPermissionError","followScroll","createFollowScroll","getScrollTopSnapshot","scrollTopSnapshot","setScrollTopSnapshot","sentinelClassName","toolCallRootEl","scrollIntoView","block","behavior","handlePermissionResponse","response","getPermissionSessionId","Error","sendPermissionResponse","error","handler","isTextInputFocused","preventDefault","document","removeEventListener","active","activeElement","tagName","hasAttribute","toolInputDisplay","toolInput","inputSectionExpanded","formatted","formatToolInputForRender","renderOutputMarkdownContent","rendererContext","toolCall","isActive","renderAnsi","renderToolCall","ToolCall","forceCollapsed","previousPartVersion","autoScroll","renderToolBody","body","outputChrome","resolveOutputCopyText","canCopyOutput","renderError","copyIoText","renderPermissionBlock","PermissionToolBlock","submitting","fallbackSessionId","onApprovalBlockedChange","onRespond","shouldShowPendingMessage","stopPropagation","copyToolInput","formatToolInputForCopy","outputWrapTitle","renderIoHeader","onToggle","ChevronRight","title","actions","onCopy","copyAriaLabel","copyTitle","expanded","shouldUseToolHeaderOutputControls","renderOutputRail","_tmpl$7","toggleOutputWrap","_v$1","_v$10","_v$11","renderOutputIoBody","showPending","_el$17","_tmpl$9","_el$18","_tmpl$8","_el$19","_el$20","renderCurrentOutputIoBody","renderToolOutputBody","chrome","_el$21","_tmpl$0","_el$22","_tmpl$1","_el$23","_el$24","_el$25","_el$26","_tmpl$12","isToolInputVisible","hasToolInput","_el$27","_tmpl$11","_el$28","_el$29","_el$31","toggleInputSection","_el$30","_tmpl$10","outputSectionExpanded","toggleOutputSection","_el$32","_tmpl$13","useConfig","useTheme","snapshotPart","structuredClone","unwrap","renderPart","setRenderPart","createStore","on","reconcile","defer","store","messageStoreBus","getOrCreate","activeRequest","activeInterruption","permissionState","getPermissionState","pendingForm","getFormQueue","find","form","sessionID","target","resolveFormToolTarget","diagnosticsVisibility","diagnosticsExpansion","diagnosticsDefaultExpanded","toolVisibility","resolveToolVisibility","defaultExpandedForTool","resolveToolExpansionDefault","userExpanded","setUserExpanded","setOutputWrapEnabled","toolInputsVisibility","toolInputVisibilityOverride","setToolInputVisibilityOverride","effectiveToolInputsVisibility","inputDefaultExpanded","inputSectionOverride","setInputSectionOverride","outputSectionOverride","setOutputSectionOverride","override","pending","kind","hasPendingForm","isToolVisible","setToolCallRootEl","diagnosticsOverride","setDiagnosticsOverride","diagnosticsExpanded","diagnosticsView","extractDiagnosticsView","prev","statusClass","combinedStatusClass","base","toggle","renderMarkdownStub","renderAnsiStub","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","actionMenuItems","includePrimaryActions","items","ArrowRightSquare","onSelect","currentlyVisible","buttonTitle","Volume2","headerMenuItems","_el$33","_tmpl$16","_el$34","_tmpl$15","_el$35","_el$36","_el$37","observeActionOverflow","_el$39","_tmpl$17","_el$38","_tmpl$14","_v$12","_v$13","SpeechActionButton","onClick","isLoading","isPlaying","headerAction","_el$40","_tmpl$18","action","_el$41","item","onMouseLeave","onMouseEnter","_v$22","disabled","_v$23","_v$24","ActionOverflowMenu","triggerClass","minItems","_v$14","_v$15","renderDiagnosticsSection","diagnosticFileName","keyed","FormRequest","onReply","answer","sendFormReply","onCancel","sendFormCancel","_v$16","_v$17","_v$18","_v$19","_v$20","_v$21"],"ignoreList":[0],"sources":["../../../../../../node_modules/lucide-solid/dist/source/icons/hourglass.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/default.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-call/output-images.tsx","../../../components/tool-call.tsx"],"sourcesContent":["import Icon from '../Icon';\nconst iconNode = [\n ['path', { d: 'M5 22h14', key: 'ehvnwv' }],\n ['path', { d: 'M5 2h14', key: 'pdyrp9' }],\n [\n 'path',\n {\n d: 'M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22',\n key: '1d314k',\n },\n ],\n [\n 'path',\n { d: 'M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2', key: '1vvvr6' },\n ],\n];\nconst Hourglass = (props) => <Icon {...props} name=\"Hourglass\" iconNode={iconNode}/>;\nexport default Hourglass;\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\nexport function getApplyPatchRenderData(files: ApplyPatchFile[], fileLimit: number, characterLimit: number, sourceTruncated = false) {\n const rendered: Array<{ file: ApplyPatchFile; diffText: string }> = []\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, firstContent + remaining) : \"\"\n rendered.push({ file, diffText })\n characters += diffText.length\n if (probe.truncated || (firstContent >= 0 && fullDiff.length - firstContent > remaining)) 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, limitToolOutputForRender, 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: limitToolOutputForRender(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 },\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 { createEffect, onCleanup, type Accessor, type JSXElement } from \"solid-js\"\nimport type { RenderCache } from \"../../types/message\"\nimport { ansiToHtml, createAnsiStreamRenderer, hasAnsi } from \"../../lib/ansi\"\nimport { escapeHtml } from \"../../lib/text-render-utils\"\nimport type { AnsiRenderOptions, ToolScrollHelpers } from \"./types\"\nimport { limitToolOutputForRender } from \"./utils\"\n\ntype AnsiRenderCache = RenderCache & { hasAnsi: boolean }\n\ntype CacheHandle = {\n get<T>(): T | undefined\n set(value: unknown): void\n}\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\nfunction StreamingAnsiContent(props: {\n html: string\n htmlChunk?: string\n updateMode: \"replace\" | \"append\" | \"noop\"\n}) {\n let preRef: HTMLPreElement | undefined\n\n createEffect(() => {\n const element = preRef\n if (!element) return\n if (props.updateMode === \"noop\") return\n if (props.updateMode === \"append\") {\n if (element.innerHTML.length === 0) {\n element.innerHTML = props.html\n return\n }\n const chunk = props.htmlChunk ?? \"\"\n if (chunk.length > 0) {\n element.insertAdjacentHTML(\"beforeend\", chunk)\n }\n return\n }\n if (element.innerHTML !== props.html) {\n element.innerHTML = props.html\n }\n })\n\n onCleanup(() => {\n preRef = undefined\n })\n\n return <pre ref={preRef} class=\"tool-call-content tool-call-ansi\" dir=\"auto\" />\n}\n\nexport function createAnsiContentRenderer(params: {\n ansiRunningCache: CacheHandle\n ansiFinalCache: CacheHandle\n scrollHelpers: ToolScrollHelpers\n partVersion?: Accessor<number | undefined>\n}) {\n const runningAnsiRenderer = createAnsiStreamRenderer()\n let runningAnsiSource = \"\"\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 const getMode = () => {\n const version = params.partVersion?.()\n return typeof version === \"number\" ? String(version) : undefined\n }\n\n function renderAnsiContent(options: AnsiRenderOptions): JSXElement | null {\n if (!options.content) {\n return null\n }\n\n const content = limitToolOutputForRender(options.content)\n const size = options.size || \"default\"\n const messageClass = `message-text tool-call-markdown${size === \"large\" ? \" tool-call-markdown-large\" : \"\"}`\n const cacheHandle = options.variant === \"running\" ? params.ansiRunningCache : params.ansiFinalCache\n const cached = cacheHandle.get<AnsiRenderCache>()\n const mode = getMode()\n const isRunningVariant = options.variant === \"running\"\n const disableScrollTracking = !isRunningVariant\n const registerRef = disableScrollTracking ? registerUntracked : registerTracked\n let updateMode: \"replace\" | \"append\" | \"noop\" = \"replace\"\n let htmlChunk = \"\"\n\n let nextCache: AnsiRenderCache\n\n if (isRunningVariant) {\n const resetStreaming = !cached || !cached.text || !content.startsWith(cached.text) || cached.text !== runningAnsiSource\n\n if (resetStreaming) {\n updateMode = \"replace\"\n const detectedAnsi = hasAnsi(content)\n if (detectedAnsi) {\n runningAnsiRenderer.reset()\n const html = runningAnsiRenderer.render(content)\n nextCache = { text: content, html, mode, hasAnsi: true }\n } else {\n runningAnsiRenderer.reset()\n nextCache = { text: content, html: escapeHtml(content), mode, hasAnsi: false }\n }\n } else {\n const delta = content.slice(cached.text.length)\n if (delta.length === 0) {\n updateMode = \"noop\"\n nextCache = { ...cached, mode }\n } else if (!cached.hasAnsi && hasAnsi(delta)) {\n updateMode = \"replace\"\n runningAnsiRenderer.reset()\n const html = runningAnsiRenderer.render(content)\n nextCache = { text: content, html, mode, hasAnsi: true }\n } else if (cached.hasAnsi) {\n const appendedHtml = runningAnsiRenderer.render(delta)\n updateMode = \"append\"\n htmlChunk = appendedHtml\n nextCache = { text: content, html: `${cached.html}${appendedHtml}`, mode, hasAnsi: true }\n } else {\n updateMode = \"append\"\n htmlChunk = escapeHtml(delta)\n nextCache = { text: content, html: `${cached.html}${escapeHtml(delta)}`, mode, hasAnsi: false }\n }\n }\n\n runningAnsiSource = nextCache.text\n cacheHandle.set(nextCache)\n } else {\n if (cached && cached.text === content) {\n nextCache = { ...cached, mode }\n } else {\n const detectedAnsi = hasAnsi(content)\n const html = detectedAnsi ? ansiToHtml(content) : escapeHtml(content)\n nextCache = { text: content, html, mode, hasAnsi: detectedAnsi }\n cacheHandle.set(nextCache)\n }\n }\n\n if (options.requireAnsi && !nextCache.hasAnsi) {\n return null\n }\n\n return (\n <div class={messageClass} ref={registerRef} onScroll={disableScrollTracking ? undefined : params.scrollHelpers.handleScroll}>\n <StreamingAnsiContent html={nextCache.html} htmlChunk={htmlChunk} updateMode={updateMode} />\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n return { renderAnsiContent }\n}\n","import { Show, createEffect, createMemo, onCleanup, type Accessor } from \"solid-js\"\nimport type { ToolState } from \"../../../types/tool-state\"\nimport type { ToolRenderer, ToolScrollHelpers } from \"../types\"\nimport { ensureMarkdownContent, formatUnknownForCopy, formatUnknownForRender, getToolName, isToolStateCompleted, isToolStateError, isToolStateRunning, limitToolOutputForRender, readToolStatePayload } from \"../utils\"\nimport { tGlobal } from \"../../../lib/i18n\"\nimport { createStableAnsiStreamUpdater } from \"../ansi-render\"\nimport { ansiToHtml, hasAnsi } from \"../../../lib/ansi\"\nimport { getBashToolSearchText } from \"../search-text\"\n\nfunction RunningBashOutput(props: {\n content: Accessor<string>\n scrollHelpers?: ToolScrollHelpers\n onContentRendered?: () => void\n}) {\n let preRef: HTMLPreElement | undefined\n let pendingRenderNotificationFrame: number | null = null\n const updater = createStableAnsiStreamUpdater()\n\n const notifyContentRendered = () => {\n if (!props.onContentRendered || typeof requestAnimationFrame !== \"function\") return\n if (pendingRenderNotificationFrame !== null) {\n cancelAnimationFrame(pendingRenderNotificationFrame)\n }\n pendingRenderNotificationFrame = requestAnimationFrame(() => {\n pendingRenderNotificationFrame = null\n props.onContentRendered?.()\n })\n }\n\n createEffect(() => {\n const element = preRef\n if (!element) return\n updater.update(element, props.content())\n props.scrollHelpers?.restoreAfterRender()\n notifyContentRendered()\n })\n\n onCleanup(() => {\n if (pendingRenderNotificationFrame !== null) {\n cancelAnimationFrame(pendingRenderNotificationFrame)\n pendingRenderNotificationFrame = null\n }\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 {props.scrollHelpers?.renderSentinel?.()}\n </div>\n )\n}\n\nfunction FinalAnsiOutput(props: {\n html: string\n scrollHelpers?: ToolScrollHelpers\n onContentRendered?: () => void\n}) {\n let pendingRenderNotificationFrame: number | null = null\n\n const notifyContentRendered = () => {\n if (!props.onContentRendered || typeof requestAnimationFrame !== \"function\") return\n if (pendingRenderNotificationFrame !== null) {\n cancelAnimationFrame(pendingRenderNotificationFrame)\n }\n pendingRenderNotificationFrame = requestAnimationFrame(() => {\n pendingRenderNotificationFrame = null\n props.onContentRendered?.()\n })\n }\n\n createEffect(() => {\n props.html\n props.scrollHelpers?.restoreAfterRender()\n notifyContentRendered()\n })\n\n onCleanup(() => {\n if (pendingRenderNotificationFrame !== null) {\n cancelAnimationFrame(pendingRenderNotificationFrame)\n pendingRenderNotificationFrame = null\n }\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 </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: { content: string }) => ReturnType<ToolRenderer[\"renderBody\"]>\n scrollHelpers?: ToolScrollHelpers\n onContentRendered?: () => void\n}) {\n const state = createMemo(() => props.toolState())\n\n const joinedContent = createMemo(() => {\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.length > 0 ? limitToolOutputForRender(`$ ${input.command}`) : \"\"\n const outputResult = formatUnknownForRender(\n isToolStateCompleted(current)\n ? current.output\n : (isToolStateRunning(current) || isToolStateError(current)) && metadata.output\n ? metadata.output\n : undefined,\n )\n return [command, outputResult?.text].filter(Boolean).join(\"\\n\")\n })\n const renderedContent = createMemo(() => limitToolOutputForRender(joinedContent()))\n\n const finalMarkdown = createMemo(() => {\n const current = state()\n const content = renderedContent()\n if (!current || current.status === \"pending\" || current.status === \"running\" || content.length === 0) {\n return null\n }\n if (hasAnsi(content)) {\n return null\n }\n return ensureMarkdownContent(content, \"bash\", true)\n })\n\n const finalAnsiHtml = createMemo(() => {\n const current = state()\n const content = renderedContent()\n if (!current || current.status === \"pending\" || current.status === \"running\" || content.length === 0) {\n return null\n }\n if (!hasAnsi(content)) {\n return null\n }\n return ansiToHtml(content)\n })\n\n return (\n <Show when={state() && joinedContent().length > 0}>\n <Show\n when={state()?.status === \"running\"}\n fallback={\n <Show when={finalAnsiHtml()} fallback={finalMarkdown() ? props.renderMarkdown({ content: finalMarkdown()! as string }) : null}>\n {(html) => (\n <FinalAnsiOutput html={html()} scrollHelpers={props.scrollHelpers} onContentRendered={props.onContentRendered} />\n )}\n </Show>\n }\n >\n <RunningBashOutput content={renderedContent} scrollHelpers={props.scrollHelpers} onContentRendered={props.onContentRendered} />\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, onContentRendered }) {\n return <BashToolBody toolState={toolState} renderMarkdown={renderMarkdown as any} scrollHelpers={scrollHelpers} onContentRendered={onContentRendered} />\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { ensureMarkdownContent, formatUnknownForCopy, formatUnknownForRender, isToolStateCompleted, isToolStateError, isToolStateRunning, readToolStatePayload } from \"../utils\"\nimport { getDefaultToolSearchText } from \"../search-text\"\n\nexport const defaultRenderer: ToolRenderer = {\n tools: [\"*\"],\n getSearchText: getDefaultToolSearchText,\n getOutputChrome({ toolState }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return undefined\n\n const { metadata, input } = readToolStatePayload(state)\n const primaryOutput = isToolStateCompleted(state)\n ? state.output\n : (isToolStateRunning(state) || isToolStateError(state)) && metadata.output\n ? metadata.output\n : metadata.diff ?? metadata.preview ?? input.content\n\n if (primaryOutput === undefined || primaryOutput === null || primaryOutput === \"\" || (Array.isArray(primaryOutput) && primaryOutput.length === 0)) return undefined\n const result = formatUnknownForRender(primaryOutput)\n\n return {\n language: result?.language ?? \"text\",\n getCopyText: () => formatUnknownForCopy(primaryOutput)?.text ?? null,\n hasCopyText: true,\n wrapToggle: true,\n suppressInnerHeader: true,\n }\n },\n renderBody({ toolState, renderMarkdown, outputWrapEnabled }) {\n const state = toolState()\n if (!state || state.status === \"pending\") return null\n\n const { metadata, input } = readToolStatePayload(state)\n const primaryOutput = isToolStateCompleted(state)\n ? state.output\n : (isToolStateRunning(state) || isToolStateError(state)) && metadata.output\n ? metadata.output\n : metadata.diff ?? metadata.preview ?? input.content\n\n const result = formatUnknownForRender(primaryOutput)\n if (!result) return null\n\n const content = ensureMarkdownContent(result.text, result.language, true)\n if (!content) return null\n\n return renderMarkdown({ content, disableHighlight: state.status === \"running\", wrap: outputWrapEnabled?.() ?? true })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { ensureMarkdownContent, extractDiffPayload, getRelativePath, getToolName, isToolStateCompleted, limitToolOutputForRender, 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 const content = ensureMarkdownContent(value ? limitToolOutputForRender(value) : value, \"diff\", true)\n if (!content) return null\n\n return renderMarkdown({ content, 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 { ensureMarkdownContent, extractDiffPayload, getRelativePath, getToolName, isToolStateCompleted, limitToolOutputForRender, 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 const content = ensureMarkdownContent(value ? limitToolOutputForRender(value) : value, \"diff\", true)\n if (!content) return null\n\n return renderMarkdown({ content, size: \"large\", disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { getQuestionToolSearchText } from \"../search-text\"\n\nexport const questionRenderer: ToolRenderer = {\n tools: [\"question\"],\n getSearchText: getQuestionToolSearchText,\n getAction: ({ t }) => 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() {\n // The question tool UI is rendered by ToolCall itself so\n // it can share the same layout for pending/completed.\n return null\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { ensureMarkdownContent, getRelativePath, getToolName, inferLanguageFromPath, limitToolOutputForRender, 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 const language = inferLanguageFromPath(getReadPath(input))\n const content = ensureMarkdownContent(preview ? limitToolOutputForRender(preview) : preview, language, true)\n if (!content) return null\n return renderMarkdown({ content, 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 { ensureMarkdownContent, formatUnknownForCopy, formatUnknownForRender, getToolName } from \"../utils\"\nimport { getDefaultToolSearchText } from \"../search-text\"\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 const content = ensureMarkdownContent(output, undefined, false)\n if (!content) return null\n return <div class=\"tool-call-skill-body\">{renderMarkdown({ content })}</div>\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { ensureMarkdownContent, formatUnknownForCopy, formatUnknownForRender, getToolName, 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) return null\n\n const content = ensureMarkdownContent(result.text, result.language, true)\n if (!content) return null\n\n return renderMarkdown({ content, disableHighlight: state.status === \"running\" })\n },\n}\n","import type { ToolRenderer } from \"../types\"\nimport { ensureMarkdownContent, getRelativePath, getToolName, inferLanguageFromPath, limitToolOutputForRender, 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 const content = ensureMarkdownContent(typeof contentValue === \"string\" ? limitToolOutputForRender(contentValue) : null, inferLanguageFromPath(filePath), true)\n if (!content) return null\n return renderMarkdown({ content, 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 { 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 { 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,\n glob: searchRenderer, grep: searchRenderer, todowrite: todoRenderer, task: taskRenderer,\n skill: skillRenderer, question: questionRenderer, invalid: invalidRenderer,\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, limitToolOutputForRender, shouldRenderDiffPayloadAsPlainText } from \"./utils\"\nimport { getCacheEntry } from \"../../lib/global-cache\"\nimport { copyToClipboard } from \"../../lib/clipboard\"\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 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 const renderedDiffText = limitToolOutputForRender(payload.diffText)\n const diffWasTruncated = 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 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={!diffWasTruncated}>\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 {diffWasTruncated ? (\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 {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 { Markdown } from \"../markdown\"\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 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 if (!options.content) {\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 if (shouldDeferMarkdown) {\n return (\n <div\n class={messageClass}\n ref={registerRef}\n onScroll={disableScrollTracking ? undefined : params.scrollHelpers.handleScroll}\n >\n <pre class=\"whitespace-pre-wrap break-words text-sm font-mono\" dir=\"auto\">{options.content}</pre>\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n const cacheKey = typeof options.cacheKey === \"string\" && options.cacheKey.length > 0 ? options.cacheKey : undefined\n const markdownPart = (): TextPart => ({\n id: cacheKey ? `${params.partId()}:${cacheKey}` : params.partId(),\n type: \"text\",\n text: options.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 onRendered={handleMarkdownRendered}\n />\n {params.scrollHelpers.renderSentinel({ disableTracking: disableScrollTracking })}\n </div>\n )\n }\n\n return { renderMarkdownContent }\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, sendFormCancel, sendFormReply, sendPermissionResponse } from \"../stores/instances\"\nimport { getFormQueue } from \"../stores/forms\"\nimport { copyToClipboard } from \"../lib/clipboard\"\nimport type { PermissionRequest } from \"../types/permission\"\nimport { getPermissionSessionId } from \"../types/permission\"\nimport { useI18n } from \"../lib/i18n\"\nimport { resolveToolRenderer } from \"./tool-call/renderers\"\nimport { getCanonicalToolName, resolveToolExpansionDefault, resolveToolVisibility } from \"./tool-call/tool-registry\"\nimport { PermissionToolBlock } from \"./tool-call/permission-block\"\nimport FormRequest from \"./form-request\"\nimport { resolveFormToolTarget } from \"./form-request-tool-target\"\nimport { createAnsiContentRenderer } from \"./tool-call/ansi-render\"\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 ensureMarkdownContent,\n formatToolInputForCopy,\n formatToolInputForRender,\n getToolName,\n getToolTitleDetail,\n isToolStateCompleted,\n isToolStateRunning,\n limitToolOutputForRender,\n limitToolTitleForRender,\n TOOL_OUTPUT_RENDER_CHARACTER_LIMIT,\n getDefaultToolAction,\n readToolStatePayload,\n} from \"./tool-call/utils\"\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 SpeechActionButton from \"./speech-action-button\"\nimport { ToolOutputImages } from \"./tool-call/output-images\"\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\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()} 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 | (() => string), version?: () => string) =>\n useGlobalCache({\n instanceId: () => props.instanceId,\n sessionId: () => props.sessionId,\n scope: TOOL_CALL_CACHE_SCOPE,\n cacheId: () => {\n const context = cacheContext()\n const resolvedVariant = typeof variant === \"function\" ? variant() : variant\n return makeRenderCacheKey(context.toolCallId || undefined, context.messageId, context.partId, resolvedVariant)\n },\n version: () => (version ? version() : cacheVersion()),\n })\n\n const diffCache = createVariantCache(\"diff\")\n const permissionDiffCache = createVariantCache(\"permission-diff\")\n const ansiRunningCache = createVariantCache(\"ansi-running\", () => \"running\")\n const ansiFinalCache = createVariantCache(\"ansi-final\")\n\n const permissionDetails = createMemo(() => props.pendingPermission()?.permission)\n\n const activePermissionKey = createMemo(() => {\n const permission = permissionDetails()\n return permission && props.isPermissionActive() ? permission.id : \"\"\n })\n\n const [permissionSubmitting, setPermissionSubmitting] = createSignal(false)\n const [permissionApprovalBlocked, setPermissionApprovalBlocked] = createSignal(true)\n const [permissionError, setPermissionError] = createSignal<string | null>(null)\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 createEffect(() => {\n const permission = permissionDetails()\n if (!permission) {\n setPermissionSubmitting(false)\n setPermissionError(null)\n } else {\n setPermissionError(null)\n }\n })\n\n createEffect(() => {\n const activeKey = activePermissionKey()\n if (!activeKey) return\n requestAnimationFrame(() => {\n props.toolCallRootEl()?.scrollIntoView({ block: \"center\", behavior: \"smooth\" })\n })\n })\n\n async function handlePermissionResponse(permission: PermissionRequest, response: \"once\" | \"always\" | \"reject\", message?: string) {\n if (!permission) return\n setPermissionSubmitting(true)\n setPermissionError(null)\n try {\n const sessionId = getPermissionSessionId(permission)\n if (!sessionId) throw new Error(\"Permission request is missing sessionID\")\n await sendPermissionResponse(props.instanceId, sessionId, permission.id, response, message)\n } catch (error) {\n log.error(\"Failed to send permission response\", error)\n setPermissionError(error instanceof Error ? error.message : props.t(\"toolCall.permission.errors.unableToUpdate\"))\n } finally {\n setPermissionSubmitting(false)\n }\n }\n\n createEffect(() => {\n const activeKey = activePermissionKey()\n if (!activeKey) return\n const handler = (event: KeyboardEvent) => {\n if (isTextInputFocused()) return\n const permission = permissionDetails()\n if (!permission || !props.isPermissionActive()) return\n if (permissionApprovalBlocked()) return\n if (event.key === \"Enter\") {\n event.preventDefault()\n void handlePermissionResponse(permission, \"once\")\n } else if (event.key === \"a\" || event.key === \"A\") {\n event.preventDefault()\n void handlePermissionResponse(permission, \"always\")\n }\n }\n document.addEventListener(\"keydown\", handler)\n onCleanup(() => document.removeEventListener(\"keydown\", handler))\n })\n\n function isTextInputFocused() {\n const active = document.activeElement\n return (\n active?.tagName === \"TEXTAREA\" ||\n active?.tagName === \"INPUT\" ||\n (active?.hasAttribute(\"contenteditable\") ?? false)\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) return null\n const language = formatted.language ?? \"text\"\n const content = ensureMarkdownContent(formatted.text, language, true)\n return content ? { content, language } : null\n })\n\n const renderer = createMemo(() => resolveToolRenderer(props.toolName()))\n\n const { renderAnsiContent } = createAnsiContentRenderer({\n ansiRunningCache,\n ansiFinalCache,\n scrollHelpers,\n partVersion: partVersionAccessor,\n })\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 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 isDark: props.isDark,\n scrollHelpers,\n handleScrollRendered,\n onContentRendered: props.onContentRendered,\n })\n\n const renderOutputMarkdownContent: ToolRendererContext[\"renderMarkdown\"] = (options) =>\n renderMarkdownContent({ ...options, content: limitToolOutputForRender(options.content), 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 renderMarkdown: renderOutputMarkdownContent,\n renderAnsi: renderAnsiContent,\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 <strong>{props.t(\"toolCall.error.label\")}</strong> {limitToolOutputForRender(state.error)}\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 }\n return null\n }\n\n const renderPermissionBlock = () => (\n <PermissionToolBlock\n permission={permissionDetails}\n active={props.isPermissionActive}\n submitting={permissionSubmitting}\n error={permissionError}\n renderDiff={renderDiffContent}\n fallbackSessionId={() => props.sessionId}\n onApprovalBlockedChange={setPermissionApprovalBlocked}\n onRespond={(permission, sessionId, response, message) => void handlePermissionResponse(permission, response, message)}\n />\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, 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 {renderPermissionBlock()}\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(() => toolVisibility() !== \"hidden\" || isPermissionActive() || hasPendingForm())\n\n const expanded = () => {\n if (isPermissionActive() || hasPendingForm()) return true\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 if (isPermissionActive() || hasPendingForm()) return true\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 const permission = pendingPermission()\n if (permission?.active) {\n return\n }\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 renderAnsiStub: ToolRendererContext[\"renderAnsi\"] = () => 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 renderMarkdown: renderMarkdownStub,\n renderAnsi: renderAnsiStub,\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 actionMenuItems = (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 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={actionMenuItems(true).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\">\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 </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={actionMenuItems()}>\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={actionMenuItems(true)}\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 <Show keyed when={pendingForm()}>\n {(form) => (\n <FormRequest\n form={form}\n onReply={(answer) => sendFormReply(props.instanceId, form.id, answer)}\n onCancel={() => sendFormCancel(props.instanceId, form.id)}\n />\n )}\n </Show>\n </div>\n </Show>\n )\n}\n"],"file":"assets/tool-call-C3mOLsxT.js"}
|